agent-skill-manager 2.2.0 → 2.4.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.
@@ -1,165 +1,166 @@
1
1
  #!/usr/bin/env node
2
- import{a as k0,b as bq,c as YZ,d as UZ}from"./chunk-d61nf7gg.js";import{B as JZ,C as GZ,D as c,E as d9,F as HZ,H as WZ,I as VZ,J as f8,K as c9,L as BZ,e as s,f as z0,g as q4,h as cq,k as a,l as t8,m as u9,n as r8,o as e8,p as m9,q as qZ,r as U,s as $Z,t as b5,u as ZZ,v as p9,w as QZ,x as XZ,y as zZ}from"./chunk-796ss41d.js";import{M as g,N,O as v,P as o8,Q as E,R as i8,S as xq,T as z8,U as kq,V as u8,W as X0,X as h,Y as s8}from"./chunk-vgzgtfy6.js";var k=N((rZ)=>{var $2=Symbol.for("yaml.alias"),Y4=Symbol.for("yaml.document"),aq=Symbol.for("yaml.map"),U4=Symbol.for("yaml.pair"),Z2=Symbol.for("yaml.scalar"),oq=Symbol.for("yaml.seq"),B0=Symbol.for("yaml.node.type"),lZ=(q)=>!!q&&typeof q==="object"&&q[B0]===$2,nZ=(q)=>!!q&&typeof q==="object"&&q[B0]===Y4,aZ=(q)=>!!q&&typeof q==="object"&&q[B0]===aq,oZ=(q)=>!!q&&typeof q==="object"&&q[B0]===U4,H4=(q)=>!!q&&typeof q==="object"&&q[B0]===Z2,iZ=(q)=>!!q&&typeof q==="object"&&q[B0]===oq;function W4(q){if(q&&typeof q==="object")switch(q[B0]){case aq:case oq:return!0}return!1}function sZ(q){if(q&&typeof q==="object")switch(q[B0]){case $2:case aq:case Z2:case oq:return!0}return!1}var tZ=(q)=>(H4(q)||W4(q))&&!!q.anchor;rZ.ALIAS=$2;rZ.DOC=Y4;rZ.MAP=aq;rZ.NODE_TYPE=B0;rZ.PAIR=U4;rZ.SCALAR=Z2;rZ.SEQ=oq;rZ.hasAnchor=tZ;rZ.isAlias=lZ;rZ.isCollection=W4;rZ.isDocument=nZ;rZ.isMap=aZ;rZ.isNode=sZ;rZ.isPair=oZ;rZ.isScalar=H4;rZ.isSeq=iZ});var Gq=N((_6)=>{var m=k(),n=Symbol("break visit"),V4=Symbol("skip children"),Y0=Symbol("remove node");function iq(q,$){let Z=B4($);if(m.isDocument(q)){if(a0(null,q.contents,Z,Object.freeze([q]))===Y0)q.contents=null}else a0(null,q,Z,Object.freeze([]))}iq.BREAK=n;iq.SKIP=V4;iq.REMOVE=Y0;function a0(q,$,Z,Q){let X=K4(q,$,Z,Q);if(m.isNode(X)||m.isPair(X))return _4(q,Q,X),a0(q,X,Z,Q);if(typeof X!=="symbol"){if(m.isCollection($)){Q=Object.freeze(Q.concat($));for(let z=0;z<$.items.length;++z){let J=a0(z,$.items[z],Z,Q);if(typeof J==="number")z=J-1;else if(J===n)return n;else if(J===Y0)$.items.splice(z,1),z-=1}}else if(m.isPair($)){Q=Object.freeze(Q.concat($));let z=a0("key",$.key,Z,Q);if(z===n)return n;else if(z===Y0)$.key=null;let J=a0("value",$.value,Z,Q);if(J===n)return n;else if(J===Y0)$.value=null}}return X}async function sq(q,$){let Z=B4($);if(m.isDocument(q)){if(await o0(null,q.contents,Z,Object.freeze([q]))===Y0)q.contents=null}else await o0(null,q,Z,Object.freeze([]))}sq.BREAK=n;sq.SKIP=V4;sq.REMOVE=Y0;async function o0(q,$,Z,Q){let X=await K4(q,$,Z,Q);if(m.isNode(X)||m.isPair(X))return _4(q,Q,X),o0(q,X,Z,Q);if(typeof X!=="symbol"){if(m.isCollection($)){Q=Object.freeze(Q.concat($));for(let z=0;z<$.items.length;++z){let J=await o0(z,$.items[z],Z,Q);if(typeof J==="number")z=J-1;else if(J===n)return n;else if(J===Y0)$.items.splice(z,1),z-=1}}else if(m.isPair($)){Q=Object.freeze(Q.concat($));let z=await o0("key",$.key,Z,Q);if(z===n)return n;else if(z===Y0)$.key=null;let J=await o0("value",$.value,Z,Q);if(J===n)return n;else if(J===Y0)$.value=null}}return X}function B4(q){if(typeof q==="object"&&(q.Collection||q.Node||q.Value))return Object.assign({Alias:q.Node,Map:q.Node,Scalar:q.Node,Seq:q.Node},q.Value&&{Map:q.Value,Scalar:q.Value,Seq:q.Value},q.Collection&&{Map:q.Collection,Seq:q.Collection},q);return q}function K4(q,$,Z,Q){if(typeof Z==="function")return Z(q,$,Q);if(m.isMap($))return Z.Map?.(q,$,Q);if(m.isSeq($))return Z.Seq?.(q,$,Q);if(m.isPair($))return Z.Pair?.(q,$,Q);if(m.isScalar($))return Z.Scalar?.(q,$,Q);if(m.isAlias($))return Z.Alias?.(q,$,Q);return}function _4(q,$,Z){let Q=$[$.length-1];if(m.isCollection(Q))Q.items[q]=Z;else if(m.isPair(Q))if(q==="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`)}}_6.visit=iq;_6.visitAsync=sq});var Q2=N((T6)=>{var L4=k(),F6=Gq(),I6={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},A6=(q)=>q.replace(/[!,[\]{}]/g,($)=>I6[$]);class t{constructor(q,$){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,q),this.tags=Object.assign({},t.defaultTags,$)}clone(){let q=new t(this.yaml,this.tags);return q.docStart=this.docStart,q}atDocument(){let q=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return q}add(q,$){if(this.atNextDocument)this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1;let Z=q.trim().split(/[ \t]+/),Q=Z.shift();switch(Q){case"%TAG":{if(Z.length!==2){if($(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 $(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 $(6,`Unsupported YAML version ${X}`,z),!1}}default:return $(0,`Unknown directive ${Q}`,!0),!1}}tagName(q,$){if(q==="!")return"!";if(q[0]!=="!")return $(`Not a valid tag: ${q}`),null;if(q[1]==="<"){let z=q.slice(2,-1);if(z==="!"||z==="!!")return $(`Verbatim tags aren't resolved, so ${q} is invalid.`),null;if(q[q.length-1]!==">")$("Verbatim tags must end with a >");return z}let[,Z,Q]=q.match(/^(.*!)([^!]*)$/s);if(!Q)$(`The ${q} tag has no suffix`);let X=this.tags[Z];if(X)try{return X+decodeURIComponent(Q)}catch(z){return $(String(z)),null}if(Z==="!")return q;return $(`Could not resolve tag: ${q}`),null}tagString(q){for(let[$,Z]of Object.entries(this.tags))if(q.startsWith(Z))return $+A6(q.substring(Z.length));return q[0]==="!"?q:`!<${q}>`}toString(q){let $=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],Z=Object.entries(this.tags),Q;if(q&&Z.length>0&&L4.isNode(q.contents)){let X={};F6.visit(q.contents,(z,J)=>{if(L4.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||Q.some((J)=>J.startsWith(z)))$.push(`%TAG ${X} ${z}`)}return $.join(`
3
- `)}}t.defaultYaml={explicit:!1,version:"1.2"};t.defaultTags={"!!":"tag:yaml.org,2002:"};T6.Directives=t});var tq=N((N6)=>{var O4=k(),j6=Gq();function R6(q){if(/[\x00-\x19\s,[\]{}]/.test(q)){let Z=`Anchor must not contain whitespace or control characters: ${JSON.stringify(q)}`;throw Error(Z)}return!0}function F4(q){let $=new Set;return j6.visit(q,{Value(Z,Q){if(Q.anchor)$.add(Q.anchor)}}),$}function I4(q,$){for(let Z=1;;++Z){let Q=`${q}${Z}`;if(!$.has(Q))return Q}}function D6(q,$){let Z=[],Q=new Map,X=null;return{onAnchor:(z)=>{Z.push(z),X??(X=F4(q));let J=I4($,X);return X.add(J),J},setAnchors:()=>{for(let z of Z){let J=Q.get(z);if(typeof J==="object"&&J.anchor&&(O4.isScalar(J.node)||O4.isCollection(J.node)))J.node.anchor=J.anchor;else{let G=Error("Failed to resolve repeated object (this should not happen)");throw G.source=z,G}}},sourceObjects:Q}}N6.anchorIsValid=R6;N6.anchorNames=F4;N6.createNodeAnchors=D6;N6.findNewAnchor=I4});var X2=N((S6)=>{function Yq(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],G=Yq(q,Q,String(X),J);if(G===void 0)delete Q[X];else if(G!==J)Q[X]=G}else if(Q instanceof Map)for(let X of Array.from(Q.keys())){let z=Q.get(X),J=Yq(q,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=Yq(q,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=Yq(q,Q,X,z);if(J===void 0)delete Q[X];else if(J!==z)Q[X]=J}return q.call($,Z,Q)}S6.applyReviver=Yq});var _0=N((y6)=>{var x6=k();function A4(q,$,Z){if(Array.isArray(q))return q.map((Q,X)=>A4(Q,String(X),Z));if(q&&typeof q.toJSON==="function"){if(!Z||!x6.hasAnchor(q))return q.toJSON($,Z);let Q={aliasCount:0,count:1,res:void 0};Z.anchors.set(q,Q),Z.onCreate=(z)=>{Q.res=z,delete Z.onCreate};let X=q.toJSON($,Z);if(Z.onCreate)Z.onCreate(X);return X}if(typeof q==="bigint"&&!Z?.keep)return Number(q);return q}y6.toJS=A4});var rq=N((h6)=>{var k6=X2(),T4=k(),v6=_0();class M4{constructor(q){Object.defineProperty(this,T4.NODE_TYPE,{value:q})}clone(){let q=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)q.range=this.range.slice();return q}toJS(q,{mapAsMap:$,maxAliasCount:Z,onAnchor:Q,reviver:X}={}){if(!T4.isDocument(q))throw TypeError("A document argument is required");let z={anchors:new Map,doc:q,keep:!0,mapAsMap:$===!0,mapKeyWarned:!1,maxAliasCount:typeof Z==="number"?Z:100},J=v6.toJS(this,"",z);if(typeof Q==="function")for(let{count:G,res:Y}of z.anchors.values())Q(Y,G);return typeof X==="function"?k6.applyReviver(X,{"":J},"",J):J}}h6.NodeBase=M4});var Uq=N((c6)=>{var u6=tq(),m6=Gq(),i0=k(),p6=rq(),d6=_0();class j4 extends p6.NodeBase{constructor(q){super(i0.ALIAS);this.source=q,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve(q,$){let Z;if($?.aliasResolveCache)Z=$.aliasResolveCache;else if(Z=[],m6.visit(q,{Node:(X,z)=>{if(i0.isAlias(z)||i0.hasAnchor(z))Z.push(z)}}),$)$.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(!$)return{source:this.source};let{anchors:Z,doc:Q,maxAliasCount:X}=$,z=this.resolve(Q,$);if(!z){let G=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(G)}let J=Z.get(z);if(!J)d6.toJS(z,null,$),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=eq(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(q){if(u6.anchorIsValid(this.source),q.options.verifyAliasOrder&&!q.anchors.has(this.source)){let X=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(X)}if(q.implicitKey)return`${Q} `}return Q}}function eq(q,$,Z){if(i0.isAlias($)){let Q=$.resolve(q),X=Z&&Q&&Z.get(Q);return X?X.count*X.aliasCount:0}else if(i0.isCollection($)){let Q=0;for(let X of $.items){let z=eq(q,X,Z);if(z>Q)Q=z}return Q}else if(i0.isPair($)){let Q=eq(q,$.key,Z),X=eq(q,$.value,Z);return Math.max(Q,X)}return 1}c6.Alias=j4});var u=N((s6)=>{var n6=k(),a6=rq(),o6=_0(),i6=(q)=>!q||typeof q!=="function"&&typeof q!=="object";class P0 extends a6.NodeBase{constructor(q){super(n6.SCALAR);this.value=q}toJSON(q,$){return $?.keep?this.value:o6.toJS(this.value,q,$)}toString(){return String(this.value)}}P0.BLOCK_FOLDED="BLOCK_FOLDED";P0.BLOCK_LITERAL="BLOCK_LITERAL";P0.PLAIN="PLAIN";P0.QUOTE_DOUBLE="QUOTE_DOUBLE";P0.QUOTE_SINGLE="QUOTE_SINGLE";s6.Scalar=P0;s6.isScalarValue=i6});var Hq=N((Q7)=>{var e6=Uq(),C0=k(),R4=u(),q7="tag:yaml.org,2002:";function $7(q,$,Z){if($){let Q=Z.filter((z)=>z.tag===$),X=Q.find((z)=>!z.format)??Q[0];if(!X)throw Error(`Tag ${$} not found`);return X}return Z.find((Q)=>Q.identify?.(q)&&!Q.format)}function Z7(q,$,Z){if(C0.isDocument(q))q=q.contents;if(C0.isNode(q))return q;if(C0.isPair(q)){let W=Z.schema[C0.MAP].createNode?.(Z.schema,null,Z);return W.items.push(q),W}if(q instanceof String||q instanceof Number||q instanceof Boolean||typeof BigInt<"u"&&q instanceof BigInt)q=q.valueOf();let{aliasDuplicateObjects:Q,onAnchor:X,onTagObj:z,schema:J,sourceObjects:G}=Z,Y=void 0;if(Q&&q&&typeof q==="object")if(Y=G.get(q),Y)return Y.anchor??(Y.anchor=X(q)),new e6.Alias(Y.anchor);else Y={anchor:null,node:null},G.set(q,Y);if($?.startsWith("!!"))$=q7+$.slice(2);let H=$7(q,$,J.tags);if(!H){if(q&&typeof q.toJSON==="function")q=q.toJSON();if(!q||typeof q!=="object"){let W=new R4.Scalar(q);if(Y)Y.node=W;return W}H=q instanceof Map?J[C0.MAP]:(Symbol.iterator in Object(q))?J[C0.SEQ]:J[C0.MAP]}if(z)z(H),delete Z.onTagObj;let V=H?.createNode?H.createNode(Z.schema,q,Z):typeof H?.nodeClass?.from==="function"?H.nodeClass.from(Z.schema,q,Z):new R4.Scalar(q);if($)V.tag=$;else if(!H.default)V.tag=H.tag;if(Y)Y.node=V;return V}Q7.createNode=Z7});var q$=N((G7)=>{var z7=Hq(),U0=k(),J7=rq();function z2(q,$,Z){let Q=Z;for(let X=$.length-1;X>=0;--X){let z=$[X];if(typeof z==="number"&&Number.isInteger(z)&&z>=0){let J=[];J[z]=Q,Q=J}else Q=new Map([[z,Q]])}return z7.createNode(Q,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:q,sourceObjects:new Map})}var D4=(q)=>q==null||typeof q==="object"&&!!q[Symbol.iterator]().next().done;class N4 extends J7.NodeBase{constructor(q,$){super(q);Object.defineProperty(this,"schema",{value:$,configurable:!0,enumerable:!1,writable:!0})}clone(q){let $=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(q)$.schema=q;if($.items=$.items.map((Z)=>U0.isNode(Z)||U0.isPair(Z)?Z.clone(q):Z),this.range)$.range=this.range.slice();return $}addIn(q,$){if(D4(q))this.add($);else{let[Z,...Q]=q,X=this.get(Z,!0);if(U0.isCollection(X))X.addIn(Q,$);else if(X===void 0&&this.schema)this.set(Z,z2(this.schema,Q,$));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${Q}`)}}deleteIn(q){let[$,...Z]=q;if(Z.length===0)return this.delete($);let Q=this.get($,!0);if(U0.isCollection(Q))return Q.deleteIn(Z);else throw Error(`Expected YAML collection at ${$}. Remaining path: ${Z}`)}getIn(q,$){let[Z,...Q]=q,X=this.get(Z,!0);if(Q.length===0)return!$&&U0.isScalar(X)?X.value:X;else return U0.isCollection(X)?X.getIn(Q,$):void 0}hasAllNullValues(q){return this.items.every(($)=>{if(!U0.isPair($))return!1;let Z=$.value;return Z==null||q&&U0.isScalar(Z)&&Z.value==null&&!Z.commentBefore&&!Z.comment&&!Z.tag})}hasIn(q){let[$,...Z]=q;if(Z.length===0)return this.has($);let Q=this.get($,!0);return U0.isCollection(Q)?Q.hasIn(Z):!1}setIn(q,$){let[Z,...Q]=q;if(Q.length===0)this.set(Z,$);else{let X=this.get(Z,!0);if(U0.isCollection(X))X.setIn(Q,$);else if(X===void 0&&this.schema)this.set(Z,z2(this.schema,Q,$));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${Q}`)}}}G7.Collection=N4;G7.collectionFromPath=z2;G7.isEmptyPath=D4});var Wq=N((B7)=>{var W7=(q)=>q.replace(/^(?!$)(?: $)?/gm,"#");function J2(q,$){if(/^\n+$/.test(q))return q.substring(1);return $?q.replace(/^(?! *$)/gm,$):q}var V7=(q,$,Z)=>q.endsWith(`
4
- `)?J2(Z,$):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 go,d as yo}from"./chunk-PVEAYTE2.js";import{C as mo,D as ho,E as J,F as Ii,G as bo,I as wo,J as vo,K as ko,L as Li,M as So,a as ie,b as ae,c as eo,d as Zt,g as Q,h as to,i as Ci,j as so,k as io,l as Ei,m as no,n as u,o as ro,p as oo,q as ao,r as Ai,s as Pi,t as Ni,u as lo,v as co,w as es,x as uo,y as fo,z as po}from"./chunk-CLIZUJVB.js";import{a as Wr,b as N,c as zr,d as pt,e as Qr,f as mt,g as Xr,j as oe,k as q,l as Zr}from"./chunk-GOI5LV72.js";import{a as Xt,b as A,d as Gr}from"./chunk-7BMOBFGJ.js";var D=A(H=>{"use strict";var qi=Symbol.for("yaml.alias"),Mo=Symbol.for("yaml.document"),as=Symbol.for("yaml.map"),Do=Symbol.for("yaml.pair"),Fi=Symbol.for("yaml.scalar"),ls=Symbol.for("yaml.seq"),me=Symbol.for("yaml.node.type"),jf=e=>!!e&&typeof e=="object"&&e[me]===qi,Bf=e=>!!e&&typeof e=="object"&&e[me]===Mo,Uf=e=>!!e&&typeof e=="object"&&e[me]===as,Vf=e=>!!e&&typeof e=="object"&&e[me]===Do,_o=e=>!!e&&typeof e=="object"&&e[me]===Fi,Kf=e=>!!e&&typeof e=="object"&&e[me]===ls;function qo(e){if(e&&typeof e=="object")switch(e[me]){case as:case ls:return!0}return!1}function Jf(e){if(e&&typeof e=="object")switch(e[me]){case qi:case as:case Fi:case ls:return!0}return!1}var Hf=e=>(_o(e)||qo(e))&&!!e.anchor;H.ALIAS=qi;H.DOC=Mo;H.MAP=as;H.NODE_TYPE=me;H.PAIR=Do;H.SCALAR=Fi;H.SEQ=ls;H.hasAnchor=Hf;H.isAlias=jf;H.isCollection=qo;H.isDocument=Bf;H.isMap=Uf;H.isNode=Jf;H.isPair=Vf;H.isScalar=_o;H.isSeq=Kf});var gt=A(ji=>{"use strict";var B=D(),X=Symbol("break visit"),Fo=Symbol("skip children"),ue=Symbol("remove node");function cs(e,t){let s=jo(t);B.isDocument(e)?Qe(null,e.contents,s,Object.freeze([e]))===ue&&(e.contents=null):Qe(null,e,s,Object.freeze([]))}cs.BREAK=X;cs.SKIP=Fo;cs.REMOVE=ue;function Qe(e,t,s,i){let n=Bo(e,t,s,i);if(B.isNode(n)||B.isPair(n))return Uo(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 us(e,t){let s=jo(t);B.isDocument(e)?await Xe(null,e.contents,s,Object.freeze([e]))===ue&&(e.contents=null):await Xe(null,e,s,Object.freeze([]))}us.BREAK=X;us.SKIP=Fo;us.REMOVE=ue;async function Xe(e,t,s,i){let n=await Bo(e,t,s,i);if(B.isNode(n)||B.isPair(n))return Uo(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 jo(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 Bo(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 Uo(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=cs;ji.visitAsync=us});var Bi=A(Ko=>{"use strict";var Vo=D(),Yf=gt(),Gf={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Wf=e=>e.replace(/[!,[\]{}]/g,t=>Gf[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+Wf(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&&Vo.isNode(t.contents)){let r={};Yf.visit(t.contents,(o,a)=>{Vo.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:"};Ko.Directives=yt});var fs=A(bt=>{"use strict";var Jo=D(),zf=gt();function Qf(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 Ho(e){let t=new Set;return zf.visit(e,{Value(s,i){i.anchor&&t.add(i.anchor)}}),t}function Yo(e,t){for(let s=1;;++s){let i=`${e}${s}`;if(!t.has(i))return i}}function Xf(e,t){let s=[],i=new Map,n=null;return{onAnchor:r=>{s.push(r),n??(n=Ho(e));let o=Yo(t,n);return n.add(o),o},setAnchors:()=>{for(let r of s){let o=i.get(r);if(typeof o=="object"&&o.anchor&&(Jo.isScalar(o.node)||Jo.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=Qf;bt.anchorNames=Ho;bt.createNodeAnchors=Xf;bt.findNewAnchor=Yo});var Ui=A(Go=>{"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)}Go.applyReviver=wt});var be=A(zo=>{"use strict";var Zf=D();function Wo(e,t,s){if(Array.isArray(e))return e.map((i,n)=>Wo(i,String(n),s));if(e&&typeof e.toJSON=="function"){if(!s||!Zf.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}zo.toJS=Wo});var ds=A(Xo=>{"use strict";var ed=Ui(),Qo=D(),td=be(),Vi=class{constructor(t){Object.defineProperty(this,Qo.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(!Qo.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=td.toJS(this,"",o);if(typeof n=="function")for(let{count:l,res:c}of o.anchors.values())n(c,l);return typeof r=="function"?ed.applyReviver(r,{"":a},"",a):a}};Xo.NodeBase=Vi});var vt=A(Zo=>{"use strict";var sd=fs(),id=gt(),Ze=D(),nd=ds(),rd=be(),Ki=class extends nd.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=[],id.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||(rd.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=ps(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(sd.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 ps(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=ps(e,n,s);r>i&&(i=r)}return i}else if(Ze.isPair(t)){let i=ps(e,t.key,s),n=ps(e,t.value,s);return Math.max(i,n)}return 1}Zo.Alias=Ki});var F=A(Ji=>{"use strict";var od=D(),ad=ds(),ld=be(),cd=e=>!e||typeof e!="function"&&typeof e!="object",we=class extends ad.NodeBase{constructor(t){super(od.SCALAR),this.value=t}toJSON(t,s){return s?.keep?this.value:ld.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=cd});var kt=A(ta=>{"use strict";var ud=vt(),qe=D(),ea=F(),fd="tag:yaml.org,2002:";function dd(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 pd(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 ud.Alias(l.anchor);l={anchor:null,node:null},a.set(e,l)}t?.startsWith("!!")&&(t=fd+t.slice(2));let c=dd(e,t,o.tags);if(!c){if(e&&typeof e.toJSON=="function"&&(e=e.toJSON()),!e||typeof e!="object"){let f=new ea.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 ea.Scalar(e);return t?d.tag=t:c.default||(d.tag=c.tag),l&&(l.node=d),d}ta.createNode=pd});var hs=A(ms=>{"use strict";var md=kt(),fe=D(),hd=ds();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 md.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 sa=e=>e==null||typeof e=="object"&&!!e[Symbol.iterator]().next().done,Yi=class extends hd.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(sa(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}`)}}};ms.Collection=Yi;ms.collectionFromPath=Hi;ms.isEmptyPath=sa});var St=A(gs=>{"use strict";var gd=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Gi(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var yd=(e,t,s)=>e.endsWith(`
5
+ `)?Gi(s,t):s.includes(`
5
6
  `)?`
6
- `+J2(Z,$):(q.endsWith(" ")?"":" ")+Z;B7.indentComment=J2;B7.lineComment=V7;B7.stringifyComment=W7});var P4=N((F7)=>{function O7(q,$,Z="flow",{indentAtStart:Q,lineWidth:X=80,minContentWidth:z=20,onFold:J,onOverflow:G}={}){if(!X||X<0)return q;if(X<z)z=0;let Y=Math.max(1+z,1+X-$.length);if(q.length<=Y)return q;let H=[],V={},W=X-$.length;if(typeof Q==="number")if(Q>X-Math.max(2,z))H.push(0);else W=X-Q;let B=void 0,_=void 0,L=!1,K=-1,O=-1,F=-1;if(Z==="block"){if(K=w4(q,K,$.length),K!==-1)W=K+Y}for(let M;M=q[K+=1];){if(Z==="quoted"&&M==="\\"){switch(O=K,q[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=w4(q,K,$.length);W=K+$.length+Y,B=void 0}else{if(M===" "&&_&&_!==" "&&_!==`
8
- `&&_!=="\t"){let R=q[K+1];if(R&&R!==" "&&R!==`
9
- `&&R!=="\t")B=K}if(K>=W)if(B)H.push(B),W=B+Y,B=void 0;else if(Z==="quoted"){while(_===" "||_==="\t")_=M,M=q[K+=1],L=!0;let R=K>F+1?K-2:O-1;if(V[R])return q;H.push(R),V[R]=!0,W=R+Y,B=void 0}else L=!0}_=M}if(L&&G)G();if(H.length===0)return q;if(J)J();let A=q.slice(0,H[0]);for(let M=0;M<H.length;++M){let R=H[M],T=H[M+1]||q.length;if(R===0)A=`
10
- ${$}${q.slice(0,T)}`;else{if(Z==="quoted"&&V[R])A+=`${q[R]}\\`;A+=`
11
- ${$}${q.slice(R+1,T)}`}}return A}function w4(q,$,Z){let Q=$,X=$+1,z=q[X];while(z===" "||z==="\t")if($<X+Z)z=q[++$];else{do z=q[++$];while(z&&z!==`
12
- `);Q=$,X=$+1,z=q[X]}return Q}F7.FOLD_BLOCK="block";F7.FOLD_FLOW="flow";F7.FOLD_QUOTED="quoted";F7.foldFlowLines=O7});var Bq=N((N7)=>{var J0=u(),L0=P4(),Z$=(q,$)=>({indentAtStart:$?q.indent.length:q.indentAtStart,lineWidth:q.options.lineWidth,minContentWidth:q.options.minContentWidth}),Q$=(q)=>/^(%|---|\.\.\.)/m.test(q);function j7(q,$,Z){if(!$||$<0)return!1;let Q=$-Z,X=q.length;if(X<=Q)return!1;for(let z=0,J=0;z<X;++z)if(q[z]===`
13
- `){if(z-J>Q)return!0;if(J=z+1,X-J<=Q)return!1}return!0}function Vq(q,$){let Z=JSON.stringify(q);if($.options.doubleQuotedAsJSON)return Z;let{implicitKey:Q}=$,X=$.options.doubleQuotedMinMultiLineLength,z=$.indent||(Q$(q)?" ":""),J="",G=0;for(let Y=0,H=Z[Y];H;H=Z[++Y]){if(H===" "&&Z[Y+1]==="\\"&&Z[Y+2]==="n")J+=Z.slice(G,Y)+"\\ ",Y+=1,G=Y,H="\\";if(H==="\\")switch(Z[Y+1]){case"u":{J+=Z.slice(G,Y);let V=Z.substr(Y+2,4);switch(V){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(V.substr(0,2)==="00")J+="\\x"+V.substr(2);else J+=Z.substr(Y,6)}Y+=5,G=Y+1}break;case"n":if(Q||Z[Y+2]==='"'||Z.length<X)Y+=1;else{J+=Z.slice(G,Y)+`
14
-
15
- `;while(Z[Y+2]==="\\"&&Z[Y+3]==="n"&&Z[Y+4]!=='"')J+=`
16
- `,Y+=2;if(J+=z,Z[Y+2]===" ")J+="\\";Y+=1,G=Y+1}break;default:Y+=1}}return J=G?J+Z.slice(G):Z,Q?J:L0.foldFlowLines(J,z,L0.FOLD_QUOTED,Z$($,!1))}function G2(q,$){if($.options.singleQuote===!1||$.implicitKey&&q.includes(`
17
- `)||/[ \t]\n|\n[ \t]/.test(q))return Vq(q,$);let Z=$.indent||(Q$(q)?" ":""),Q="'"+q.replace(/'/g,"''").replace(/\n+/g,`$&
18
- ${Z}`)+"'";return $.implicitKey?Q:L0.foldFlowLines(Q,Z,L0.FOLD_FLOW,Z$($,!1))}function s0(q,$){let{singleQuote:Z}=$.options,Q;if(Z===!1)Q=Vq;else{let X=q.includes('"'),z=q.includes("'");if(X&&!z)Q=G2;else if(z&&!X)Q=Vq;else Q=Z?G2:Vq}return Q(q,$)}var Y2;try{Y2=new RegExp(`(^|(?<!
7
+ `+Gi(s,t):(e.endsWith(" ")?"":" ")+s;gs.indentComment=Gi;gs.lineComment=yd;gs.stringifyComment=gd});var na=A($t=>{"use strict";var bd="flow",Wi="block",ys="quoted";function wd(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,h,g=!1,m=-1,y=-1,b=-1;s===Wi&&(m=ia(e,m,t.length),m!==-1&&(f=m+l));for(let $;$=e[m+=1];){if(s===ys&&$==="\\"){switch(y=m,e[m+1]){case"x":m+=3;break;case"u":m+=5;break;case"U":m+=9;break;default:m+=1}b=m}if($===`
8
+ `)s===Wi&&(m=ia(e,m,t.length)),f=m+t.length+l,p=void 0;else{if($===" "&&h&&h!==" "&&h!==`
9
+ `&&h!==" "){let x=e[m+1];x&&x!==" "&&x!==`
10
+ `&&x!==" "&&(p=m)}if(m>=f)if(p)c.push(p),f=p+l,p=void 0;else if(s===ys){for(;h===" "||h===" ";)h=$,$=e[m+=1],g=!0;let x=m>b+1?m-2:y-1;if(d[x])return e;c.push(x),d[x]=!0,f=x+l,p=void 0}else g=!0}h=$}if(g&&a&&a(),c.length===0)return e;o&&o();let w=e.slice(0,c[0]);for(let $=0;$<c.length;++$){let x=c[$],k=c[$+1]||e.length;x===0?w=`
11
+ ${t}${e.slice(0,k)}`:(s===ys&&d[x]&&(w+=`${e[x]}\\`),w+=`
12
+ ${t}${e.slice(x+1,k)}`)}return w}function ia(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=bd;$t.FOLD_QUOTED=ys;$t.foldFlowLines=wd});var Ct=A(ra=>{"use strict";var le=F(),ve=na(),ws=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),vs=e=>/^(%|---|\.\.\.)/m.test(e);function vd(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||(vs(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,ws(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||(vs(e)?" ":""),i="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&
19
+ ${s}`)+"'";return t.implicitKey?i:ve.foldFlowLines(i,s,ve.FOLD_FLOW,ws(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{Y2=/\n+(?!\n|$)/g}function $$({comment:q,type:$,value:Z},Q,X,z){let{blockQuote:J,commentString:G,lineWidth:Y}=Q.options;if(!J||/\n[\t ]+$/.test(Z))return s0(Z,Q);let H=Q.indent||(Q.forceBlockIndent||Q$(Z)?" ":""),V=J==="literal"?!0:J==="folded"||$===J0.Scalar.BLOCK_FOLDED?!1:$===J0.Scalar.BLOCK_LITERAL?!0:!j7(Z,Y,H.length);if(!Z)return V?`|
22
+ |$)`,"g")}catch{Qi=/\n+(?!\n|$)/g}function bs({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||vs(s)?" ":""),d=o==="literal"?!0:o==="folded"||t===le.Scalar.BLOCK_FOLDED?!1:t===le.Scalar.BLOCK_LITERAL?!0:!vd(s,l,c.length);if(!s)return d?`|
22
23
  `:`>
23
- `;let W,B;for(B=Z.length;B>0;--B){let T=Z[B-1];if(T!==`
24
- `&&T!=="\t"&&T!==" ")break}let _=Z.substring(B),L=_.indexOf(`
25
- `);if(L===-1)W="-";else if(Z===_||L!==_.length-1){if(W="+",z)z()}else W="";if(_){if(Z=Z.slice(0,-_.length),_[_.length-1]===`
26
- `)_=_.slice(0,-1);_=_.replace(Y2,`$&${H}`)}let K=!1,O,F=-1;for(O=0;O<Z.length;++O){let T=Z[O];if(T===" ")K=!0;else if(T===`
27
- `)F=O;else break}let A=Z.substring(0,F<O?F+1:O);if(A)Z=Z.substring(A.length),A=A.replace(/\n+/g,`$&${H}`);let R=(K?H?"2":"1":"")+W;if(q){if(R+=" "+G(q.replace(/ ?[\r\n]+/g," ")),X)X()}if(!V){let T=Z.replace(/\n+/g,`
28
- $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${H}`),D=!1,x=Z$(Q,!0);if(J!=="folded"&&$!==J0.Scalar.BLOCK_FOLDED)x.onOverflow=()=>{D=!0};let w=L0.foldFlowLines(`${A}${T}${_}`,H,L0.FOLD_BLOCK,x);if(!D)return`>${R}
29
- ${H}${w}`}return Z=Z.replace(/\n+/g,`$&${H}`),`|${R}
30
- ${H}${A}${Z}${_}`}function R7(q,$,Z,Q){let{type:X,value:z}=q,{actualString:J,implicitKey:G,indent:Y,indentStep:H,inFlow:V}=$;if(G&&z.includes(`
31
- `)||V&&/[[\]{},]/.test(z))return s0(z,$);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(z))return G||V||!z.includes(`
32
- `)?s0(z,$):$$(q,$,Z,Q);if(!G&&!V&&X!==J0.Scalar.PLAIN&&z.includes(`
33
- `))return $$(q,$,Z,Q);if(Q$(z)){if(Y==="")return $.forceBlockIndent=!0,$$(q,$,Z,Q);else if(G&&Y===H)return s0(z,$)}let W=z.replace(/\n+/g,`$&
34
- ${Y}`);if(J){let B=(K)=>K.default&&K.tag!=="tag:yaml.org,2002:str"&&K.test?.test(W),{compat:_,tags:L}=$.doc.schema;if(L.some(B)||_?.some(B))return s0(z,$)}return G?W:L0.foldFlowLines(W,Y,L0.FOLD_FLOW,Z$($,!1))}function D7(q,$,Z,Q){let{implicitKey:X,inFlow:z}=$,J=typeof q.value==="string"?q:Object.assign({},q,{value:String(q.value)}),{type:G}=q;if(G!==J0.Scalar.QUOTE_DOUBLE){if(/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(J.value))G=J0.Scalar.QUOTE_DOUBLE}let Y=(V)=>{switch(V){case J0.Scalar.BLOCK_FOLDED:case J0.Scalar.BLOCK_LITERAL:return X||z?s0(J.value,$):$$(J,$,Z,Q);case J0.Scalar.QUOTE_DOUBLE:return Vq(J.value,$);case J0.Scalar.QUOTE_SINGLE:return G2(J.value,$);case J0.Scalar.PLAIN:return R7(J,$,Z,Q);default:return null}},H=Y(G);if(H===null){let{defaultKeyType:V,defaultStringType:W}=$.options,B=X&&V||W;if(H=Y(B),H===null)throw Error(`Unsupported default string type ${B}`)}return H}N7.stringifyString=D7});var Kq=N((f7)=>{var P7=tq(),O0=k(),C7=Wq(),E7=Bq();function S7(q,$){let Z=Object.assign({blockQuote:!0,commentString:C7.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},q.schema.toStringOptions,$),Q;switch(Z.collectionStyle){case"block":Q=!1;break;case"flow":Q=!0;break;default:Q=null}return{anchors:new Set,doc:q,flowCollectionPadding:Z.flowCollectionPadding?" ":"",indent:"",indentStep:typeof Z.indent==="number"?" ".repeat(Z.indent):" ",inFlow:Q,options:Z}}function b7(q,$){if($.tag){let X=q.filter((z)=>z.tag===$.tag);if(X.length>0)return X.find((z)=>z.format===$.format)??X[0]}let Z=void 0,Q;if(O0.isScalar($)){Q=$.value;let X=q.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===$.format)??X.find((z)=>!z.format)}else Q=$,Z=q.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 x7(q,$,{anchors:Z,doc:Q}){if(!Q.directives)return"";let X=[],z=(O0.isScalar(q)||O0.isCollection(q))&&q.anchor;if(z&&P7.anchorIsValid(z))Z.add(z),X.push(`&${z}`);let J=q.tag??($.default?null:$.tag);if(J)X.push(Q.directives.tagString(J));return X.join(" ")}function y7(q,$,Z,Q){if(O0.isPair(q))return q.toString($,Z,Q);if(O0.isAlias(q)){if($.doc.directives)return q.toString($);if($.resolvedAliases?.has(q))throw TypeError("Cannot stringify circular structure without alias nodes");else{if($.resolvedAliases)$.resolvedAliases.add(q);else $.resolvedAliases=new Set([q]);q=q.resolve($.doc)}}let X=void 0,z=O0.isNode(q)?q:$.doc.createNode(q,{onTagObj:(Y)=>X=Y});X??(X=b7($.doc.schema.tags,z));let J=x7(z,X,$);if(J.length>0)$.indentAtStart=($.indentAtStart??0)+J.length+1;let G=typeof X.stringify==="function"?X.stringify(z,$,Z,Q):O0.isScalar(z)?E7.stringifyString(z,$,Z,Q):z.toString($,Z,Q);if(!J)return G;return O0.isScalar(z)||G[0]==="{"||G[0]==="["?`${J} ${G}`:`${J}
35
- ${$.indent}${G}`}f7.createStringifyContext=S7;f7.stringify=y7});var S4=N((g7)=>{var K0=k(),C4=u(),E4=Kq(),_q=Wq();function h7({key:q,value:$},Z,Q,X){let{allNullValues:z,doc:J,indent:G,indentStep:Y,options:{commentString:H,indentSeq:V,simpleKeys:W}}=Z,B=K0.isNode(q)&&q.comment||null;if(W){if(B)throw Error("With simple keys, key nodes cannot have comments");if(K0.isCollection(q)||!K0.isNode(q)&&typeof q==="object")throw Error("With simple keys, collection cannot be used as a key value")}let _=!W&&(!q||B&&$==null&&!Z.inFlow||K0.isCollection(q)||(K0.isScalar(q)?q.type===C4.Scalar.BLOCK_FOLDED||q.type===C4.Scalar.BLOCK_LITERAL:typeof q==="object"));Z=Object.assign({},Z,{allNullValues:!1,implicitKey:!_&&(W||!z),indent:G+Y});let L=!1,K=!1,O=E4.stringify(q,Z,()=>L=!0,()=>K=!0);if(!_&&!Z.inFlow&&O.length>1024){if(W)throw Error("With simple keys, single line scalar must not span more than 1024 characters");_=!0}if(Z.inFlow){if(z||$==null){if(L&&Q)Q();return O===""?"?":_?`? ${O}`:O}}else if(z&&!W||$==null&&_){if(O=`? ${O}`,B&&!L)O+=_q.lineComment(O,Z.indent,H(B));else if(K&&X)X();return O}if(L)B=null;if(_){if(B)O+=_q.lineComment(O,Z.indent,H(B));O=`? ${O}
36
- ${G}:`}else if(O=`${O}:`,B)O+=_q.lineComment(O,Z.indent,H(B));let F,A,M;if(K0.isNode($))F=!!$.spaceBefore,A=$.commentBefore,M=$.comment;else if(F=!1,A=null,M=null,$&&typeof $==="object")$=J.createNode($);if(Z.implicitKey=!1,!_&&!B&&K0.isScalar($))Z.indentAtStart=O.length+1;if(K=!1,!V&&Y.length>=2&&!Z.inFlow&&!_&&K0.isSeq($)&&!$.flow&&!$.tag&&!$.anchor)Z.indent=Z.indent.substring(2);let R=!1,T=E4.stringify($,Z,()=>R=!0,()=>K=!0),D=" ";if(B||F||A){if(D=F?`
37
- `:"",A){let x=H(A);D+=`
38
- ${_q.indentComment(x,Z.indent)}`}if(T===""&&!Z.inFlow){if(D===`
39
- `&&M)D=`
40
-
41
- `}else D+=`
42
- ${Z.indent}`}else if(!_&&K0.isCollection($)){let x=T[0],w=T.indexOf(`
43
- `),f=w!==-1,I=Z.inFlow??$.flow??$.items.length===0;if(f||!I){let j=!1;if(f&&(x==="&"||x==="!")){let C=T.indexOf(" ");if(x==="&"&&C!==-1&&C<w&&T[C+1]==="!")C=T.indexOf(" ",C+1);if(C===-1||w<C)j=!0}if(!j)D=`
44
- ${Z.indent}`}}else if(T===""||T[0]===`
45
- `)D="";if(O+=D+T,Z.inFlow){if(R&&Q)Q()}else if(M&&!R)O+=_q.lineComment(O,Z.indent,H(M));else if(K&&X)X();return O}g7.stringifyPair=h7});var U2=N((d7)=>{var b4=v("process");function m7(q,...$){if(q==="debug")console.log(...$)}function p7(q,$){if(q==="debug"||q==="warn")if(typeof b4.emitWarning==="function")b4.emitWarning($);else console.warn($)}d7.debug=m7;d7.warn=p7});var J$=N((a7)=>{var Lq=k(),x4=u(),X$="<<",z$={identify:(q)=>q===X$||typeof q==="symbol"&&q.description===X$,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new x4.Scalar(Symbol(X$)),{addToJSMap:y4}),stringify:()=>X$},n7=(q,$)=>(z$.identify($)||Lq.isScalar($)&&(!$.type||$.type===x4.Scalar.PLAIN)&&z$.identify($.value))&&q?.doc.schema.tags.some((Z)=>Z.tag===z$.tag&&Z.default);function y4(q,$,Z){if(Z=q&&Lq.isAlias(Z)?Z.resolve(q.doc):Z,Lq.isSeq(Z))for(let Q of Z.items)H2(q,$,Q);else if(Array.isArray(Z))for(let Q of Z)H2(q,$,Q);else H2(q,$,Z)}function H2(q,$,Z){let Q=q&&Lq.isAlias(Z)?Z.resolve(q.doc):Z;if(!Lq.isMap(Q))throw Error("Merge sources must be maps or map aliases");let X=Q.toJSON(null,q,Map);for(let[z,J]of X)if($ instanceof Map){if(!$.has(z))$.set(z,J)}else if($ instanceof Set)$.add(z);else if(!Object.prototype.hasOwnProperty.call($,z))Object.defineProperty($,z,{value:J,writable:!0,enumerable:!0,configurable:!0});return $}a7.addMergeToJSMap=y4;a7.isMergeKey=n7;a7.merge=z$});var V2=N(($3)=>{var t7=U2(),f4=J$(),r7=Kq(),k4=k(),W2=_0();function e7(q,$,{key:Z,value:Q}){if(k4.isNode(Z)&&Z.addToJSMap)Z.addToJSMap(q,$,Q);else if(f4.isMergeKey(q,Z))f4.addMergeToJSMap(q,$,Q);else{let X=W2.toJS(Z,"",q);if($ instanceof Map)$.set(X,W2.toJS(Q,X,q));else if($ instanceof Set)$.add(X);else{let z=q3(Z,X,q),J=W2.toJS(Q,z,q);if(z in $)Object.defineProperty($,z,{value:J,writable:!0,enumerable:!0,configurable:!0});else $[z]=J}}return $}function q3(q,$,Z){if($===null)return"";if(typeof $!=="object")return String($);if(k4.isNode(q)&&Z?.doc){let Q=r7.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=q.toString(Q);if(!Z.mapKeyWarned){let z=JSON.stringify(X);if(z.length>40)z=z.substring(0,36)+'..."';t7.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($)}$3.addPairToJSMap=e7});var F0=N((J3)=>{var v4=Hq(),Q3=S4(),X3=V2(),G$=k();function z3(q,$,Z){let Q=v4.createNode(q,void 0,Z),X=v4.createNode($,void 0,Z);return new Y$(Q,X)}class Y${constructor(q,$=null){Object.defineProperty(this,G$.NODE_TYPE,{value:G$.PAIR}),this.key=q,this.value=$}clone(q){let{key:$,value:Z}=this;if(G$.isNode($))$=$.clone(q);if(G$.isNode(Z))Z=Z.clone(q);return new Y$($,Z)}toJSON(q,$){let Z=$?.mapAsMap?new Map:{};return X3.addPairToJSMap($,Z,this)}toString(q,$,Z){return q?.doc?Q3.stringifyPair(this,q,$,Z):JSON.stringify(this)}}J3.Pair=Y$;J3.createPair=z3});var B2=N((V3)=>{var E0=k(),h4=Kq(),U$=Wq();function U3(q,$,Z){return($.inFlow??q.flow?W3:H3)(q,$,Z)}function H3({comment:q,items:$},Z,{blockItemPrefix:Q,flowChars:X,itemIndent:z,onChompKeep:J,onComment:G}){let{indent:Y,options:{commentString:H}}=Z,V=Object.assign({},Z,{indent:z,type:null}),W=!1,B=[];for(let L=0;L<$.length;++L){let K=$[L],O=null;if(E0.isNode(K)){if(!W&&K.spaceBefore)B.push("");if(H$(Z,B,K.commentBefore,W),K.comment)O=K.comment}else if(E0.isPair(K)){let A=E0.isNode(K.key)?K.key:null;if(A){if(!W&&A.spaceBefore)B.push("");H$(Z,B,A.commentBefore,W)}}W=!1;let F=h4.stringify(K,V,()=>O=null,()=>W=!0);if(O)F+=U$.lineComment(F,z,H(O));if(W&&O)W=!1;B.push(Q+F)}let _;if(B.length===0)_=X.start+X.end;else{_=B[0];for(let L=1;L<B.length;++L){let K=B[L];_+=K?`
46
- ${Y}${K}`:`
47
- `}}if(q){if(_+=`
48
- `+U$.indentComment(H(q),Y),G)G()}else if(W&&J)J();return _}function W3({items:q},$,{flowChars:Z,itemIndent:Q}){let{indent:X,indentStep:z,flowCollectionPadding:J,options:{commentString:G}}=$;Q+=z;let Y=Object.assign({},$,{indent:Q,inFlow:!0,type:null}),H=!1,V=0,W=[];for(let L=0;L<q.length;++L){let K=q[L],O=null;if(E0.isNode(K)){if(K.spaceBefore)W.push("");if(H$($,W,K.commentBefore,!1),K.comment)O=K.comment}else if(E0.isPair(K)){let A=E0.isNode(K.key)?K.key:null;if(A){if(A.spaceBefore)W.push("");if(H$($,W,A.commentBefore,!1),A.comment)H=!0}let M=E0.isNode(K.value)?K.value:null;if(M){if(M.comment)O=M.comment;if(M.commentBefore)H=!0}else if(K.value==null&&A?.comment)O=A.comment}if(O)H=!0;let F=h4.stringify(K,Y,()=>O=null);if(H||(H=W.length>V||F.includes(`
49
- `)),L<q.length-1)F+=",";else if($.options.trailingComma){if($.options.lineWidth>0)H||(H=W.reduce((A,M)=>A+M.length+2,2)+(F.length+2)>$.options.lineWidth);if(H)F+=","}if(O)F+=U$.lineComment(F,Q,G(O));W.push(F),V=W.length}let{start:B,end:_}=Z;if(W.length===0)return B+_;else{if(!H){let L=W.reduce((K,O)=>K+O.length+2,2);H=$.options.lineWidth>0&&L>$.options.lineWidth}if(H){let L=B;for(let K of W)L+=K?`
50
- ${z}${X}${K}`:`
51
- `;return`${L}
52
- ${X}${_}`}else return`${B}${J}${W.join(" ")}${J}${_}`}}function H$({indent:q,options:{commentString:$}},Z,Q,X){if(Q&&X)Q=Q.replace(/^\n+/,"");if(Q){let z=U$.indentComment($(Q),q);Z.push(z.trimStart())}}V3.stringifyCollection=U3});var A0=N((F3)=>{var K3=B2(),_3=V2(),L3=q$(),I0=k(),W$=F0(),O3=u();function Oq(q,$){let Z=I0.isScalar($)?$.value:$;for(let Q of q)if(I0.isPair(Q)){if(Q.key===$||Q.key===Z)return Q;if(I0.isScalar(Q.key)&&Q.key.value===Z)return Q}return}class g4 extends L3.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(q){super(I0.MAP,q);this.items=[]}static from(q,$,Z){let{keepUndefined:Q,replacer:X}=Z,z=new this(q),J=(G,Y)=>{if(typeof X==="function")Y=X.call($,G,Y);else if(Array.isArray(X)&&!X.includes(G))return;if(Y!==void 0||Q)z.items.push(W$.createPair(G,Y,Z))};if($ instanceof Map)for(let[G,Y]of $)J(G,Y);else if($&&typeof $==="object")for(let G of Object.keys($))J(G,$[G]);if(typeof q.sortMapEntries==="function")z.items.sort(q.sortMapEntries);return z}add(q,$){let Z;if(I0.isPair(q))Z=q;else if(!q||typeof q!=="object"||!("key"in q))Z=new W$.Pair(q,q?.value);else Z=new W$.Pair(q.key,q.value);let Q=Oq(this.items,Z.key),X=this.schema?.sortMapEntries;if(Q){if(!$)throw Error(`Key ${Z.key} already set`);if(I0.isScalar(Q.value)&&O3.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(q){let $=Oq(this.items,q);if(!$)return!1;return this.items.splice(this.items.indexOf($),1).length>0}get(q,$){let Q=Oq(this.items,q)?.value;return(!$&&I0.isScalar(Q)?Q.value:Q)??void 0}has(q){return!!Oq(this.items,q)}set(q,$){this.add(new W$.Pair(q,$),!0)}toJSON(q,$,Z){let Q=Z?new Z:$?.mapAsMap?new Map:{};if($?.onCreate)$.onCreate(Q);for(let X of this.items)_3.addPairToJSMap($,Q,X);return Q}toString(q,$,Z){if(!q)return JSON.stringify(this);for(let Q of this.items)if(!I0.isPair(Q))throw Error(`Map items must all be pairs; found ${JSON.stringify(Q)} instead`);if(!q.allNullValues&&this.hasAllNullValues(!1))q=Object.assign({},q,{allNullValues:!0});return K3.stringifyCollection(this,q,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:q.indent||"",onChompKeep:Z,onComment:$})}}F3.YAMLMap=g4;F3.findPair=Oq});var t0=N((j3)=>{var T3=k(),u4=A0(),M3={collection:"map",default:!0,nodeClass:u4.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(q,$){if(!T3.isMap(q))$("Expected a mapping for this tag");return q},createNode:(q,$,Z)=>u4.YAMLMap.from(q,$,Z)};j3.map=M3});var T0=N((E3)=>{var D3=Hq(),N3=B2(),w3=q$(),B$=k(),P3=u(),C3=_0();class m4 extends w3.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(q){super(B$.SEQ,q);this.items=[]}add(q){this.items.push(q)}delete(q){let $=V$(q);if(typeof $!=="number")return!1;return this.items.splice($,1).length>0}get(q,$){let Z=V$(q);if(typeof Z!=="number")return;let Q=this.items[Z];return!$&&B$.isScalar(Q)?Q.value:Q}has(q){let $=V$(q);return typeof $==="number"&&$<this.items.length}set(q,$){let Z=V$(q);if(typeof Z!=="number")throw Error(`Expected a valid index, not ${q}.`);let Q=this.items[Z];if(B$.isScalar(Q)&&P3.isScalarValue($))Q.value=$;else this.items[Z]=$}toJSON(q,$){let Z=[];if($?.onCreate)$.onCreate(Z);let Q=0;for(let X of this.items)Z.push(C3.toJS(X,String(Q++),$));return Z}toString(q,$,Z){if(!q)return JSON.stringify(this);return N3.stringifyCollection(this,q,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(q.indent||"")+" ",onChompKeep:Z,onComment:$})}static from(q,$,Z){let{replacer:Q}=Z,X=new this(q);if($&&Symbol.iterator in Object($)){let z=0;for(let J of $){if(typeof Q==="function"){let G=$ instanceof Set?J:String(z++);J=Q.call($,G,J)}X.items.push(D3.createNode(J,void 0,Z))}}return X}}function V$(q){let $=B$.isScalar(q)?q.value:q;if($&&typeof $==="string")$=Number($);return typeof $==="number"&&Number.isInteger($)&&$>=0?$:null}E3.YAMLSeq=m4});var r0=N((y3)=>{var b3=k(),p4=T0(),x3={collection:"seq",default:!0,nodeClass:p4.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(q,$){if(!b3.isSeq(q))$("Expected a sequence for this tag");return q},createNode:(q,$,Z)=>p4.YAMLSeq.from(q,$,Z)};y3.seq=x3});var Fq=N((h3)=>{var k3=Bq(),v3={identify:(q)=>typeof q==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:(q)=>q,stringify(q,$,Z,Q){return $=Object.assign({actualString:!0},$),k3.stringifyString(q,$,Z,Q)}};h3.string=v3});var K$=N((u3)=>{var d4=u(),c4={identify:(q)=>q==null,createNode:()=>new d4.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new d4.Scalar(null),stringify:({source:q},$)=>typeof q==="string"&&c4.test.test(q)?q:$.options.nullStr};u3.nullTag=c4});var K2=N((d3)=>{var p3=u(),l4={identify:(q)=>typeof q==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:(q)=>new p3.Scalar(q[0]==="t"||q[0]==="T"),stringify({source:q,value:$},Z){if(q&&l4.test.test(q)){let Q=q[0]==="t"||q[0]==="T";if($===Q)return q}return $?Z.options.trueStr:Z.options.falseStr}};d3.boolTag=l4});var e0=N((n3)=>{function l3({format:q,minFractionDigits:$,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 G=$-(z.length-J-1);while(G-- >0)z+="0"}return z}n3.stringifyNumber=l3});var L2=N((r3)=>{var o3=u(),_2=e0(),i3={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:(q)=>q.slice(-3).toLowerCase()==="nan"?NaN:q[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:_2.stringifyNumber},s3={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:(q)=>parseFloat(q),stringify(q){let $=Number(q.value);return isFinite($)?$.toExponential():_2.stringifyNumber(q)}},t3={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(q){let $=new o3.Scalar(parseFloat(q)),Z=q.indexOf(".");if(Z!==-1&&q[q.length-1]==="0")$.minFractionDigits=q.length-Z-1;return $},stringify:_2.stringifyNumber};r3.float=t3;r3.floatExp=s3;r3.floatNaN=i3});var F2=N((zQ)=>{var n4=e0(),_$=(q)=>typeof q==="bigint"||Number.isInteger(q),O2=(q,$,Z,{intAsBigInt:Q})=>Q?BigInt(q):parseInt(q.substring($),Z);function a4(q,$,Z){let{value:Q}=q;if(_$(Q)&&Q>=0)return Z+Q.toString($);return n4.stringifyNumber(q)}var ZQ={identify:(q)=>_$(q)&&q>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(q,$,Z)=>O2(q,2,8,Z),stringify:(q)=>a4(q,8,"0o")},QQ={identify:_$,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(q,$,Z)=>O2(q,0,10,Z),stringify:n4.stringifyNumber},XQ={identify:(q)=>_$(q)&&q>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(q,$,Z)=>O2(q,2,16,Z),stringify:(q)=>a4(q,16,"0x")};zQ.int=QQ;zQ.intHex=XQ;zQ.intOct=ZQ});var o4=N((_Q)=>{var UQ=t0(),HQ=K$(),WQ=r0(),VQ=Fq(),BQ=K2(),I2=L2(),A2=F2(),KQ=[UQ.map,WQ.seq,VQ.string,HQ.nullTag,BQ.boolTag,A2.intOct,A2.int,A2.intHex,I2.floatNaN,I2.floatExp,I2.float];_Q.schema=KQ});var s4=N((jQ)=>{var OQ=u(),FQ=t0(),IQ=r0();function i4(q){return typeof q==="bigint"||Number.isInteger(q)}var L$=({value:q})=>JSON.stringify(q),AQ=[{identify:(q)=>typeof q==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:(q)=>q,stringify:L$},{identify:(q)=>q==null,createNode:()=>new OQ.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:L$},{identify:(q)=>typeof q==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:(q)=>q==="true",stringify:L$},{identify:i4,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(q,$,{intAsBigInt:Z})=>Z?BigInt(q):parseInt(q,10),stringify:({value:q})=>i4(q)?q.toString():JSON.stringify(q)},{identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:(q)=>parseFloat(q),stringify:L$}],TQ={default:!0,tag:"",test:/^/,resolve(q,$){return $(`Unresolved plain scalar ${JSON.stringify(q)}`),q}},MQ=[FQ.map,IQ.seq].concat(AQ,TQ);jQ.schema=MQ});var M2=N((wQ)=>{var Iq=v("buffer"),T2=u(),DQ=Bq(),NQ={identify:(q)=>q instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(q,$){if(typeof Iq.Buffer==="function")return Iq.Buffer.from(q,"base64");else if(typeof atob==="function"){let Z=atob(q.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 $("This environment does not support reading binary tags; either Buffer or atob is required"),q},stringify({comment:q,type:$,value:Z},Q,X,z){if(!Z)return"";let J=Z,G;if(typeof Iq.Buffer==="function")G=J instanceof Iq.Buffer?J.toString("base64"):Iq.Buffer.from(J.buffer).toString("base64");else if(typeof btoa==="function"){let Y="";for(let H=0;H<J.length;++H)Y+=String.fromCharCode(J[H]);G=btoa(Y)}else throw Error("This environment does not support writing binary tags; either Buffer or btoa is required");if($??($=T2.Scalar.BLOCK_LITERAL),$!==T2.Scalar.QUOTE_DOUBLE){let Y=Math.max(Q.options.lineWidth-Q.indent.length,Q.options.minContentWidth),H=Math.ceil(G.length/Y),V=Array(H);for(let W=0,B=0;W<H;++W,B+=Y)V[W]=G.substr(B,Y);G=V.join($===T2.Scalar.BLOCK_LITERAL?`
53
- `:" ")}return DQ.stringifyString({comment:q,type:$,value:G},Q,X,z)}};wQ.binary=NQ});var F$=N((bQ)=>{var O$=k(),j2=F0(),CQ=u(),EQ=T0();function t4(q,$){if(O$.isSeq(q))for(let Z=0;Z<q.items.length;++Z){let Q=q.items[Z];if(O$.isPair(Q))continue;else if(O$.isMap(Q)){if(Q.items.length>1)$("Each pair must have its own sequence indicator");let X=Q.items[0]||new j2.Pair(new CQ.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}q.items[Z]=O$.isPair(Q)?Q:new j2.Pair(Q)}else $("Expected a sequence for this tag");return q}function r4(q,$,Z){let{replacer:Q}=Z,X=new EQ.YAMLSeq(q);X.tag="tag:yaml.org,2002:pairs";let z=0;if($&&Symbol.iterator in Object($))for(let J of $){if(typeof Q==="function")J=Q.call($,String(z++),J);let G,Y;if(Array.isArray(J))if(J.length===2)G=J[0],Y=J[1];else throw TypeError(`Expected [key, value] tuple: ${J}`);else if(J&&J instanceof Object){let H=Object.keys(J);if(H.length===1)G=H[0],Y=J[G];else throw TypeError(`Expected tuple with one key, not ${H.length} keys`)}else G=J;X.items.push(j2.createPair(G,Y,Z))}return X}var SQ={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:t4,createNode:r4};bQ.createPairs=r4;bQ.pairs=SQ;bQ.resolvePairs=t4});var D2=N((hQ)=>{var e4=k(),R2=_0(),Aq=A0(),kQ=T0(),q1=F$();class S0 extends kQ.YAMLSeq{constructor(){super();this.add=Aq.YAMLMap.prototype.add.bind(this),this.delete=Aq.YAMLMap.prototype.delete.bind(this),this.get=Aq.YAMLMap.prototype.get.bind(this),this.has=Aq.YAMLMap.prototype.has.bind(this),this.set=Aq.YAMLMap.prototype.set.bind(this),this.tag=S0.tag}toJSON(q,$){if(!$)return super.toJSON(q);let Z=new Map;if($?.onCreate)$.onCreate(Z);for(let Q of this.items){let X,z;if(e4.isPair(Q))X=R2.toJS(Q.key,"",$),z=R2.toJS(Q.value,X,$);else X=R2.toJS(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=q1.createPairs(q,$,Z),X=new this;return X.items=Q.items,X}}S0.tag="tag:yaml.org,2002:omap";var vQ={collection:"seq",identify:(q)=>q instanceof Map,nodeClass:S0,default:!1,tag:"tag:yaml.org,2002:omap",resolve(q,$){let Z=q1.resolvePairs(q,$),Q=[];for(let{key:X}of Z.items)if(e4.isScalar(X))if(Q.includes(X.value))$(`Ordered maps must not include duplicate keys: ${X.value}`);else Q.push(X.value);return Object.assign(new S0,Z)},createNode:(q,$,Z)=>S0.from(q,$,Z)};hQ.YAMLOMap=S0;hQ.omap=vQ});var z1=N((mQ)=>{var $1=u();function Z1({value:q,source:$},Z){if($&&(q?Q1:X1).test.test($))return $;return q?Z.options.trueStr:Z.options.falseStr}var Q1={identify:(q)=>q===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new $1.Scalar(!0),stringify:Z1},X1={identify:(q)=>q===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new $1.Scalar(!1),stringify:Z1};mQ.falseTag=X1;mQ.trueTag=Q1});var J1=N((oQ)=>{var cQ=u(),N2=e0(),lQ={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:(q)=>q.slice(-3).toLowerCase()==="nan"?NaN:q[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:N2.stringifyNumber},nQ={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:(q)=>parseFloat(q.replace(/_/g,"")),stringify(q){let $=Number(q.value);return isFinite($)?$.toExponential():N2.stringifyNumber(q)}},aQ={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(q){let $=new cQ.Scalar(parseFloat(q.replace(/_/g,""))),Z=q.indexOf(".");if(Z!==-1){let Q=q.substring(Z+1).replace(/_/g,"");if(Q[Q.length-1]==="0")$.minFractionDigits=Q.length}return $},stringify:N2.stringifyNumber};oQ.float=aQ;oQ.floatExp=nQ;oQ.floatNaN=lQ});var Y1=N((ZX)=>{var G1=e0(),Tq=(q)=>typeof q==="bigint"||Number.isInteger(q);function I$(q,$,Z,{intAsBigInt:Q}){let X=q[0];if(X==="-"||X==="+")$+=1;if(q=q.substring($).replace(/_/g,""),Q){switch(Z){case 2:q=`0b${q}`;break;case 8:q=`0o${q}`;break;case 16:q=`0x${q}`;break}let J=BigInt(q);return X==="-"?BigInt(-1)*J:J}let z=parseInt(q,Z);return X==="-"?-1*z:z}function w2(q,$,Z){let{value:Q}=q;if(Tq(Q)){let X=Q.toString($);return Q<0?"-"+Z+X.substr(1):Z+X}return G1.stringifyNumber(q)}var rQ={identify:Tq,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(q,$,Z)=>I$(q,2,2,Z),stringify:(q)=>w2(q,2,"0b")},eQ={identify:Tq,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(q,$,Z)=>I$(q,1,8,Z),stringify:(q)=>w2(q,8,"0")},qX={identify:Tq,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(q,$,Z)=>I$(q,0,10,Z),stringify:G1.stringifyNumber},$X={identify:Tq,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(q,$,Z)=>I$(q,2,16,Z),stringify:(q)=>w2(q,16,"0x")};ZX.int=qX;ZX.intBin=rQ;ZX.intHex=$X;ZX.intOct=eQ});var P2=N((YX)=>{var M$=k(),A$=F0(),T$=A0();class b0 extends T$.YAMLMap{constructor(q){super(q);this.tag=b0.tag}add(q){let $;if(M$.isPair(q))$=q;else if(q&&typeof q==="object"&&"key"in q&&"value"in q&&q.value===null)$=new A$.Pair(q.key,null);else $=new A$.Pair(q,null);if(!T$.findPair(this.items,$.key))this.items.push($)}get(q,$){let Z=T$.findPair(this.items,q);return!$&&M$.isPair(Z)?M$.isScalar(Z.key)?Z.key.value:Z.key:Z}set(q,$){if(typeof $!=="boolean")throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof $}`);let Z=T$.findPair(this.items,q);if(Z&&!$)this.items.splice(this.items.indexOf(Z),1);else if(!Z&&$)this.items.push(new A$.Pair(q))}toJSON(q,$){return super.toJSON(q,$,Set)}toString(q,$,Z){if(!q)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},q,{allNullValues:!0}),$,Z);else throw Error("Set items must all have null values")}static from(q,$,Z){let{replacer:Q}=Z,X=new this(q);if($&&Symbol.iterator in Object($))for(let z of $){if(typeof Q==="function")z=Q.call($,z,z);X.items.push(A$.createPair(z,null,Z))}return X}}b0.tag="tag:yaml.org,2002:set";var GX={collection:"map",identify:(q)=>q instanceof Set,nodeClass:b0,default:!1,tag:"tag:yaml.org,2002:set",createNode:(q,$,Z)=>b0.from(q,$,Z),resolve(q,$){if(M$.isMap(q))if(q.hasAllNullValues(!0))return Object.assign(new b0,q);else $("Set items must all have null values");else $("Expected a mapping for this tag");return q}};YX.YAMLSet=b0;YX.set=GX});var E2=N((KX)=>{var WX=e0();function C2(q,$){let Z=q[0],Q=Z==="-"||Z==="+"?q.substring(1):q,X=(J)=>$?BigInt(J):Number(J),z=Q.replace(/_/g,"").split(":").reduce((J,G)=>J*X(60)+X(G),X(0));return Z==="-"?X(-1)*z:z}function U1(q){let{value:$}=q,Z=(J)=>J;if(typeof $==="bigint")Z=(J)=>BigInt(J);else if(isNaN($)||!isFinite($))return WX.stringifyNumber(q);let Q="";if($<0)Q="-",$*=Z(-1);let X=Z(60),z=[$%X];if($<60)z.unshift(0);else if($=($-z[0])/X,z.unshift($%X),$>=60)$=($-z[0])/X,z.unshift($);return Q+z.map((J)=>String(J).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var VX={identify:(q)=>typeof q==="bigint"||Number.isInteger(q),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(q,$,{intAsBigInt:Z})=>C2(q,Z),stringify:U1},BX={identify:(q)=>typeof q==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:(q)=>C2(q,!1),stringify:U1},H1={identify:(q)=>q 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(q){let $=q.match(H1.test);if(!$)throw Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,Z,Q,X,z,J,G]=$.map(Number),Y=$[7]?Number(($[7]+"00").substr(1,3)):0,H=Date.UTC(Z,Q-1,X,z||0,J||0,G||0,Y),V=$[8];if(V&&V!=="Z"){let W=C2(V,!1);if(Math.abs(W)<30)W*=60;H-=60000*W}return new Date(H)},stringify:({value:q})=>q?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};KX.floatTime=BX;KX.intTime=VX;KX.timestamp=H1});var V1=N((PX)=>{var FX=t0(),IX=K$(),AX=r0(),TX=Fq(),MX=M2(),W1=z1(),S2=J1(),j$=Y1(),jX=J$(),RX=D2(),DX=F$(),NX=P2(),b2=E2(),wX=[FX.map,AX.seq,TX.string,IX.nullTag,W1.trueTag,W1.falseTag,j$.intBin,j$.intOct,j$.int,j$.intHex,S2.floatNaN,S2.floatExp,S2.float,MX.binary,jX.merge,RX.omap,DX.pairs,NX.set,b2.intTime,b2.floatTime,b2.timestamp];PX.schema=wX});var M1=N((vX)=>{var L1=t0(),EX=K$(),O1=r0(),SX=Fq(),bX=K2(),x2=L2(),y2=F2(),xX=o4(),yX=s4(),F1=M2(),Mq=J$(),I1=D2(),A1=F$(),B1=V1(),T1=P2(),R$=E2(),K1=new Map([["core",xX.schema],["failsafe",[L1.map,O1.seq,SX.string]],["json",yX.schema],["yaml11",B1.schema],["yaml-1.1",B1.schema]]),_1={binary:F1.binary,bool:bX.boolTag,float:x2.float,floatExp:x2.floatExp,floatNaN:x2.floatNaN,floatTime:R$.floatTime,int:y2.int,intHex:y2.intHex,intOct:y2.intOct,intTime:R$.intTime,map:L1.map,merge:Mq.merge,null:EX.nullTag,omap:I1.omap,pairs:A1.pairs,seq:O1.seq,set:T1.set,timestamp:R$.timestamp},fX={"tag:yaml.org,2002:binary":F1.binary,"tag:yaml.org,2002:merge":Mq.merge,"tag:yaml.org,2002:omap":I1.omap,"tag:yaml.org,2002:pairs":A1.pairs,"tag:yaml.org,2002:set":T1.set,"tag:yaml.org,2002:timestamp":R$.timestamp};function kX(q,$,Z){let Q=K1.get($);if(Q&&!q)return Z&&!Q.includes(Mq.merge)?Q.concat(Mq.merge):Q.slice();let X=Q;if(!X)if(Array.isArray(q))X=[];else{let z=Array.from(K1.keys()).filter((J)=>J!=="yaml11").map((J)=>JSON.stringify(J)).join(", ");throw Error(`Unknown schema "${$}"; use one of ${z} or define customTags array`)}if(Array.isArray(q))for(let z of q)X=X.concat(z);else if(typeof q==="function")X=q(X.slice());if(Z)X=X.concat(Mq.merge);return X.reduce((z,J)=>{let G=typeof J==="string"?_1[J]:J;if(!G){let Y=JSON.stringify(J),H=Object.keys(_1).map((V)=>JSON.stringify(V)).join(", ");throw Error(`Unknown custom tag ${Y}; use one of ${H}`)}if(!z.includes(G))z.push(G);return z},[])}vX.coreKnownTags=fX;vX.getTags=kX});var v2=N((cX)=>{var f2=k(),uX=t0(),mX=r0(),pX=Fq(),D$=M1(),dX=(q,$)=>q.key<$.key?-1:q.key>$.key?1:0;class k2{constructor({compat:q,customTags:$,merge:Z,resolveKnownTags:Q,schema:X,sortMapEntries:z,toStringDefaults:J}){this.compat=Array.isArray(q)?D$.getTags(q,"compat"):q?D$.getTags(null,q):null,this.name=typeof X==="string"&&X||"core",this.knownTags=Q?D$.coreKnownTags:{},this.tags=D$.getTags($,this.name,Z),this.toStringOptions=J??null,Object.defineProperty(this,f2.MAP,{value:uX.map}),Object.defineProperty(this,f2.SCALAR,{value:pX.string}),Object.defineProperty(this,f2.SEQ,{value:mX.seq}),this.sortMapEntries=typeof z==="function"?z:z===!0?dX:null}clone(){let q=Object.create(k2.prototype,Object.getOwnPropertyDescriptors(this));return q.tags=this.tags.slice(),q}}cX.Schema=k2});var j1=N((oX)=>{var nX=k(),h2=Kq(),jq=Wq();function aX(q,$){let Z=[],Q=$.directives===!0;if($.directives!==!1&&q.directives){let Y=q.directives.toString(q);if(Y)Z.push(Y),Q=!0;else if(q.directives.docStart)Q=!0}if(Q)Z.push("---");let X=h2.createStringifyContext(q,$),{commentString:z}=X.options;if(q.commentBefore){if(Z.length!==1)Z.unshift("");let Y=z(q.commentBefore);Z.unshift(jq.indentComment(Y,""))}let J=!1,G=null;if(q.contents){if(nX.isNode(q.contents)){if(q.contents.spaceBefore&&Q)Z.push("");if(q.contents.commentBefore){let V=z(q.contents.commentBefore);Z.push(jq.indentComment(V,""))}X.forceBlockIndent=!!q.comment,G=q.contents.comment}let Y=G?void 0:()=>J=!0,H=h2.stringify(q.contents,X,()=>G=null,Y);if(G)H+=jq.lineComment(H,"",z(G));if((H[0]==="|"||H[0]===">")&&Z[Z.length-1]==="---")Z[Z.length-1]=`--- ${H}`;else Z.push(H)}else Z.push(h2.stringify(q.contents,X));if(q.directives?.docEnd)if(q.comment){let Y=z(q.comment);if(Y.includes(`
56
- `))Z.push("..."),Z.push(jq.indentComment(Y,""));else Z.push(`... ${Y}`)}else Z.push("...");else{let Y=q.comment;if(Y&&J)Y=Y.replace(/^\n+/,"");if(Y){if((!J||G)&&Z[Z.length-1]!=="")Z.push("");Z.push(jq.indentComment(z(Y),""))}}return Z.join(`
24
+ `;let f,p;for(p=s.length;p>0;--p){let k=s[p-1];if(k!==`
25
+ `&&k!==" "&&k!==" ")break}let h=s.substring(p),g=h.indexOf(`
26
+ `);g===-1?f="-":s===h||g!==h.length-1?(f="+",r&&r()):f="",h&&(s=s.slice(0,-h.length),h[h.length-1]===`
27
+ `&&(h=h.slice(0,-1)),h=h.replace(Qi,`$&${c}`));let m=!1,y,b=-1;for(y=0;y<s.length;++y){let k=s[y];if(k===" ")m=!0;else if(k===`
28
+ `)b=y;else break}let w=s.substring(0,b<y?b+1:y);w&&(s=s.substring(w.length),w=w.replace(/\n+/g,`$&${c}`));let x=(m?c?"2":"1":"")+f;if(e&&(x+=" "+a(e.replace(/ ?[\r\n]+/g," ")),n&&n()),!d){let k=s.replace(/\n+/g,`
29
+ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),E=!1,O=ws(i,!0);o!=="folded"&&t!==le.Scalar.BLOCK_FOLDED&&(O.onOverflow=()=>{E=!0});let P=ve.foldFlowLines(`${w}${k}${h}`,c,ve.FOLD_BLOCK,O);if(!E)return`>${x}
30
+ ${c}${P}`}return s=s.replace(/\n+/g,`$&${c}`),`|${x}
31
+ ${c}${w}${s}${h}`}function kd(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):bs(e,t,s,i);if(!a&&!d&&n!==le.Scalar.PLAIN&&r.includes(`
34
+ `))return bs(e,t,s,i);if(vs(r)){if(l==="")return t.forceBlockIndent=!0,bs(e,t,s,i);if(a&&l===c)return et(r,t)}let f=r.replace(/\n+/g,`$&
35
+ ${l}`);if(o){let p=m=>m.default&&m.tag!=="tag:yaml.org,2002:str"&&m.test?.test(f),{compat:h,tags:g}=t.doc.schema;if(g.some(p)||h?.some(p))return et(r,t)}return a?f:ve.foldFlowLines(f,l,ve.FOLD_FLOW,ws(t,!1))}function Sd(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):bs(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 kd(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}ra.stringifyString=Sd});var Et=A(Xi=>{"use strict";var $d=fs(),ke=D(),xd=St(),Cd=Ct();function Ed(e,t){let s=Object.assign({blockQuote:!0,commentString:xd.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 Ad(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 Pd(e,t,{anchors:s,doc:i}){if(!i.directives)return"";let n=[],r=(ke.isScalar(e)||ke.isCollection(e))&&e.anchor;r&&$d.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 Nd(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=Ad(t.doc.schema.tags,r));let o=Pd(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)?Cd.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=Ed;Xi.stringify=Nd});var ca=A(la=>{"use strict";var he=D(),oa=F(),aa=Et(),At=St();function Id({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 h=!f&&(!e||p&&t==null&&!s.inFlow||he.isCollection(e)||(he.isScalar(e)?e.type===oa.Scalar.BLOCK_FOLDED||e.type===oa.Scalar.BLOCK_LITERAL:typeof e=="object"));s=Object.assign({},s,{allNullValues:!1,implicitKey:!h&&(f||!r),indent:a+l});let g=!1,m=!1,y=aa.stringify(e,s,()=>g=!0,()=>m=!0);if(!h&&!s.inFlow&&y.length>1024){if(f)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");h=!0}if(s.inFlow){if(r||t==null)return g&&i&&i(),y===""?"?":h?`? ${y}`:y}else if(r&&!f||t==null&&h)return y=`? ${y}`,p&&!g?y+=At.lineComment(y,s.indent,c(p)):m&&n&&n(),y;g&&(p=null),h?(p&&(y+=At.lineComment(y,s.indent,c(p))),y=`? ${y}
37
+ ${a}:`):(y=`${y}:`,p&&(y+=At.lineComment(y,s.indent,c(p))));let b,w,$;he.isNode(t)?(b=!!t.spaceBefore,w=t.commentBefore,$=t.comment):(b=!1,w=null,$=null,t&&typeof t=="object"&&(t=o.createNode(t))),s.implicitKey=!1,!h&&!p&&he.isScalar(t)&&(s.indentAtStart=y.length+1),m=!1,!d&&l.length>=2&&!s.inFlow&&!h&&he.isSeq(t)&&!t.flow&&!t.tag&&!t.anchor&&(s.indent=s.indent.substring(2));let x=!1,k=aa.stringify(t,s,()=>x=!0,()=>m=!0),E=" ";if(p||b||w){if(E=b?`
38
+ `:"",w){let O=c(w);E+=`
39
+ ${At.indentComment(O,s.indent)}`}k===""&&!s.inFlow?E===`
40
+ `&&$&&(E=`
41
+
42
+ `):E+=`
43
+ ${s.indent}`}else if(!h&&he.isCollection(t)){let O=k[0],P=k.indexOf(`
44
+ `),M=P!==-1,v=s.inFlow??t.flow??t.items.length===0;if(M||!v){let S=!1;if(M&&(O==="&"||O==="!")){let I=k.indexOf(" ");O==="&"&&I!==-1&&I<P&&k[I+1]==="!"&&(I=k.indexOf(" ",I+1)),(I===-1||P<I)&&(S=!0)}S||(E=`
45
+ ${s.indent}`)}}else(k===""||k[0]===`
46
+ `)&&(E="");return y+=E+k,s.inFlow?x&&i&&i():$&&!x?y+=At.lineComment(y,s.indent,c($)):m&&n&&n(),y}la.stringifyPair=Id});var en=A(Zi=>{"use strict";var ua=Xt("process");function Ld(e,...t){e==="debug"&&console.log(...t)}function Rd(e,t){(e==="debug"||e==="warn")&&(typeof ua.emitWarning=="function"?ua.emitWarning(t):console.warn(t))}Zi.debug=Ld;Zi.warn=Rd});var xs=A($s=>{"use strict";var Pt=D(),fa=F(),ks="<<",Ss={identify:e=>e===ks||typeof e=="symbol"&&e.description===ks,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new fa.Scalar(Symbol(ks)),{addToJSMap:da}),stringify:()=>ks},Od=(e,t)=>(Ss.identify(t)||Pt.isScalar(t)&&(!t.type||t.type===fa.Scalar.PLAIN)&&Ss.identify(t.value))&&e?.doc.schema.tags.some(s=>s.tag===Ss.tag&&s.default);function da(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}$s.addMergeToJSMap=da;$s.isMergeKey=Od;$s.merge=Ss});var nn=A(ha=>{"use strict";var Td=en(),pa=xs(),Md=Et(),ma=D(),sn=be();function Dd(e,t,{key:s,value:i}){if(ma.isNode(s)&&s.addToJSMap)s.addToJSMap(e,t,i);else if(pa.isMergeKey(e,s))pa.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=_d(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 _d(e,t,s){if(t===null)return"";if(typeof t!="object")return String(t);if(ma.isNode(e)&&s?.doc){let i=Md.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)+'..."'),Td.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)}ha.addPairToJSMap=Dd});var Se=A(rn=>{"use strict";var ga=kt(),qd=ca(),Fd=nn(),Cs=D();function jd(e,t,s){let i=ga.createNode(e,void 0,s),n=ga.createNode(t,void 0,s);return new Es(i,n)}var Es=class e{constructor(t,s=null){Object.defineProperty(this,Cs.NODE_TYPE,{value:Cs.PAIR}),this.key=t,this.value=s}clone(t){let{key:s,value:i}=this;return Cs.isNode(s)&&(s=s.clone(t)),Cs.isNode(i)&&(i=i.clone(t)),new e(s,i)}toJSON(t,s){let i=s?.mapAsMap?new Map:{};return Fd.addPairToJSMap(s,i,this)}toString(t,s,i){return t?.doc?qd.stringifyPair(this,t,s,i):JSON.stringify(this)}};rn.Pair=Es;rn.createPair=jd});var on=A(ba=>{"use strict";var Fe=D(),ya=Et(),As=St();function Bd(e,t,s){return(t.inFlow??e.flow?Vd:Ud)(e,t,s)}function Ud({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 g=0;g<t.length;++g){let m=t[g],y=null;if(Fe.isNode(m))!f&&m.spaceBefore&&p.push(""),Ps(s,p,m.commentBefore,f),m.comment&&(y=m.comment);else if(Fe.isPair(m)){let w=Fe.isNode(m.key)?m.key:null;w&&(!f&&w.spaceBefore&&p.push(""),Ps(s,p,w.commentBefore,f))}f=!1;let b=ya.stringify(m,d,()=>y=null,()=>f=!0);y&&(b+=As.lineComment(b,r,c(y))),f&&y&&(f=!1),p.push(i+b)}let h;if(p.length===0)h=n.start+n.end;else{h=p[0];for(let g=1;g<p.length;++g){let m=p[g];h+=m?`
47
+ ${l}${m}`:`
48
+ `}}return e?(h+=`
49
+ `+As.indentComment(c(e),l),a&&a()):f&&o&&o(),h}function Vd({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 g=0;g<e.length;++g){let m=e[g],y=null;if(Fe.isNode(m))m.spaceBefore&&f.push(""),Ps(t,f,m.commentBefore,!1),m.comment&&(y=m.comment);else if(Fe.isPair(m)){let w=Fe.isNode(m.key)?m.key:null;w&&(w.spaceBefore&&f.push(""),Ps(t,f,w.commentBefore,!1),w.comment&&(c=!0));let $=Fe.isNode(m.value)?m.value:null;$?($.comment&&(y=$.comment),$.commentBefore&&(c=!0)):m.value==null&&w?.comment&&(y=w.comment)}y&&(c=!0);let b=ya.stringify(m,l,()=>y=null);c||(c=f.length>d||b.includes(`
50
+ `)),g<e.length-1?b+=",":t.options.trailingComma&&(t.options.lineWidth>0&&(c||(c=f.reduce((w,$)=>w+$.length+2,2)+(b.length+2)>t.options.lineWidth)),c&&(b+=",")),y&&(b+=As.lineComment(b,i,a(y))),f.push(b),d=f.length}let{start:p,end:h}=s;if(f.length===0)return p+h;if(!c){let g=f.reduce((m,y)=>m+y.length+2,2);c=t.options.lineWidth>0&&g>t.options.lineWidth}if(c){let g=p;for(let m of f)g+=m?`
51
+ ${r}${n}${m}`:`
52
+ `;return`${g}
53
+ ${n}${h}`}else return`${p}${o}${f.join(" ")}${o}${h}`}function Ps({indent:e,options:{commentString:t}},s,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let r=As.indentComment(t(i),e);s.push(r.trimStart())}}ba.stringifyCollection=Bd});var xe=A(ln=>{"use strict";var Kd=on(),Jd=nn(),Hd=hs(),$e=D(),Ns=Se(),Yd=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 Hd.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(Ns.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 Ns.Pair(t,t?.value):i=new Ns.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)&&Yd.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 Ns.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)Jd.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})),Kd.stringifyCollection(this,t,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:t.indent||"",onChompKeep:i,onComment:s})}};ln.YAMLMap=an;ln.findPair=Nt});var tt=A(va=>{"use strict";var Gd=D(),wa=xe(),Wd={collection:"map",default:!0,nodeClass:wa.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(e,t){return Gd.isMap(e)||t("Expected a mapping for this tag"),e},createNode:(e,t,s)=>wa.YAMLMap.from(e,t,s)};va.map=Wd});var Ce=A(ka=>{"use strict";var zd=kt(),Qd=on(),Xd=hs(),Ls=D(),Zd=F(),ep=be(),cn=class extends Xd.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(t){super(Ls.SEQ,t),this.items=[]}add(t){this.items.push(t)}delete(t){let s=Is(t);return typeof s!="number"?!1:this.items.splice(s,1).length>0}get(t,s){let i=Is(t);if(typeof i!="number")return;let n=this.items[i];return!s&&Ls.isScalar(n)?n.value:n}has(t){let s=Is(t);return typeof s=="number"&&s<this.items.length}set(t,s){let i=Is(t);if(typeof i!="number")throw new Error(`Expected a valid index, not ${t}.`);let n=this.items[i];Ls.isScalar(n)&&Zd.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(ep.toJS(r,String(n++),s));return i}toString(t,s,i){return t?Qd.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(zd.createNode(a,void 0,i))}}return r}};function Is(e){let t=Ls.isScalar(e)?e.value:e;return t&&typeof t=="string"&&(t=Number(t)),typeof t=="number"&&Number.isInteger(t)&&t>=0?t:null}ka.YAMLSeq=cn});var st=A($a=>{"use strict";var tp=D(),Sa=Ce(),sp={collection:"seq",default:!0,nodeClass:Sa.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(e,t){return tp.isSeq(e)||t("Expected a sequence for this tag"),e},createNode:(e,t,s)=>Sa.YAMLSeq.from(e,t,s)};$a.seq=sp});var It=A(xa=>{"use strict";var ip=Ct(),np={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),ip.stringifyString(e,t,s,i)}};xa.string=np});var Rs=A(Aa=>{"use strict";var Ca=F(),Ea={identify:e=>e==null,createNode:()=>new Ca.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Ca.Scalar(null),stringify:({source:e},t)=>typeof e=="string"&&Ea.test.test(e)?e:t.options.nullStr};Aa.nullTag=Ea});var un=A(Na=>{"use strict";var rp=F(),Pa={identify:e=>typeof e=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new rp.Scalar(e[0]==="t"||e[0]==="T"),stringify({source:e,value:t},s){if(e&&Pa.test.test(e)){let i=e[0]==="t"||e[0]==="T";if(t===i)return e}return t?s.options.trueStr:s.options.falseStr}};Na.boolTag=Pa});var it=A(Ia=>{"use strict";function op({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}Ia.stringifyNumber=op});var dn=A(Os=>{"use strict";var ap=F(),fn=it(),lp={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},cp={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)}},up={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 ap.Scalar(parseFloat(e)),s=e.indexOf(".");return s!==-1&&e[e.length-1]==="0"&&(t.minFractionDigits=e.length-s-1),t},stringify:fn.stringifyNumber};Os.float=up;Os.floatExp=cp;Os.floatNaN=lp});var mn=A(Ms=>{"use strict";var La=it(),Ts=e=>typeof e=="bigint"||Number.isInteger(e),pn=(e,t,s,{intAsBigInt:i})=>i?BigInt(e):parseInt(e.substring(t),s);function Ra(e,t,s){let{value:i}=e;return Ts(i)&&i>=0?s+i.toString(t):La.stringifyNumber(e)}var fp={identify:e=>Ts(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=>Ra(e,8,"0o")},dp={identify:Ts,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,s)=>pn(e,0,10,s),stringify:La.stringifyNumber},pp={identify:e=>Ts(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=>Ra(e,16,"0x")};Ms.int=dp;Ms.intHex=pp;Ms.intOct=fp});var Ta=A(Oa=>{"use strict";var mp=tt(),hp=Rs(),gp=st(),yp=It(),bp=un(),hn=dn(),gn=mn(),wp=[mp.map,gp.seq,yp.string,hp.nullTag,bp.boolTag,gn.intOct,gn.int,gn.intHex,hn.floatNaN,hn.floatExp,hn.float];Oa.schema=wp});var _a=A(Da=>{"use strict";var vp=F(),kp=tt(),Sp=st();function Ma(e){return typeof e=="bigint"||Number.isInteger(e)}var Ds=({value:e})=>JSON.stringify(e),$p=[{identify:e=>typeof e=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Ds},{identify:e=>e==null,createNode:()=>new vp.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Ds},{identify:e=>typeof e=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:e=>e==="true",stringify:Ds},{identify:Ma,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})=>Ma(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:Ds}],xp={default:!0,tag:"",test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}},Cp=[kp.map,Sp.seq].concat($p,xp);Da.schema=Cp});var bn=A(qa=>{"use strict";var Lt=Xt("buffer"),yn=F(),Ep=Ct(),Ap={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 Ep.stringifyString({comment:e,type:t,value:a},i,n,r)}};qa.binary=Ap});var Fs=A(qs=>{"use strict";var _s=D(),wn=Se(),Pp=F(),Np=Ce();function Fa(e,t){if(_s.isSeq(e))for(let s=0;s<e.items.length;++s){let i=e.items[s];if(!_s.isPair(i)){if(_s.isMap(i)){i.items.length>1&&t("Each pair must have its own sequence indicator");let n=i.items[0]||new wn.Pair(new Pp.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]=_s.isPair(i)?i:new wn.Pair(i)}}else t("Expected a sequence for this tag");return e}function ja(e,t,s){let{replacer:i}=s,n=new Np.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 Ip={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Fa,createNode:ja};qs.createPairs=ja;qs.pairs=Ip;qs.resolvePairs=Fa});var Sn=A(kn=>{"use strict";var Ba=D(),vn=be(),Rt=xe(),Lp=Ce(),Ua=Fs(),je=class e extends Lp.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(Ba.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=Ua.createPairs(t,s,i),r=new this;return r.items=n.items,r}};je.tag="tag:yaml.org,2002:omap";var Rp={collection:"seq",identify:e=>e instanceof Map,nodeClass:je,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){let s=Ua.resolvePairs(e,t),i=[];for(let{key:n}of s.items)Ba.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=Rp});var Ya=A($n=>{"use strict";var Va=F();function Ka({value:e,source:t},s){return t&&(e?Ja:Ha).test.test(t)?t:e?s.options.trueStr:s.options.falseStr}var Ja={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 Va.Scalar(!0),stringify:Ka},Ha={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 Va.Scalar(!1),stringify:Ka};$n.falseTag=Ha;$n.trueTag=Ja});var Ga=A(js=>{"use strict";var Op=F(),xn=it(),Tp={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},Mp={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)}},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 Op.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};js.float=Dp;js.floatExp=Mp;js.floatNaN=Tp});var za=A(Tt=>{"use strict";var Wa=it(),Ot=e=>typeof e=="bigint"||Number.isInteger(e);function Bs(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 Wa.stringifyNumber(e)}var _p={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,s)=>Bs(e,2,2,s),stringify:e=>Cn(e,2,"0b")},qp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,s)=>Bs(e,1,8,s),stringify:e=>Cn(e,8,"0")},Fp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,s)=>Bs(e,0,10,s),stringify:Wa.stringifyNumber},jp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,s)=>Bs(e,2,16,s),stringify:e=>Cn(e,16,"0x")};Tt.int=Fp;Tt.intBin=_p;Tt.intHex=jp;Tt.intOct=qp});var An=A(En=>{"use strict";var Ks=D(),Us=Se(),Vs=xe(),Be=class e extends Vs.YAMLMap{constructor(t){super(t),this.tag=e.tag}add(t){let s;Ks.isPair(t)?s=t:t&&typeof t=="object"&&"key"in t&&"value"in t&&t.value===null?s=new Us.Pair(t.key,null):s=new Us.Pair(t,null),Vs.findPair(this.items,s.key)||this.items.push(s)}get(t,s){let i=Vs.findPair(this.items,t);return!s&&Ks.isPair(i)?Ks.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=Vs.findPair(this.items,t);i&&!s?this.items.splice(this.items.indexOf(i),1):!i&&s&&this.items.push(new Us.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(Us.createPair(o,null,i));return r}};Be.tag="tag:yaml.org,2002:set";var Bp={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(Ks.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=Bp});var Nn=A(Js=>{"use strict";var Up=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 Qa(e){let{value:t}=e,s=o=>o;if(typeof t=="bigint")s=o=>BigInt(o);else if(isNaN(t)||!isFinite(t))return Up.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 Vp={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:Qa},Kp={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:Qa},Xa={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(Xa.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$/,"")??""};Js.floatTime=Kp;Js.intTime=Vp;Js.timestamp=Xa});var tl=A(el=>{"use strict";var Jp=tt(),Hp=Rs(),Yp=st(),Gp=It(),Wp=bn(),Za=Ya(),In=Ga(),Hs=za(),zp=xs(),Qp=Sn(),Xp=Fs(),Zp=An(),Ln=Nn(),em=[Jp.map,Yp.seq,Gp.string,Hp.nullTag,Za.trueTag,Za.falseTag,Hs.intBin,Hs.intOct,Hs.int,Hs.intHex,In.floatNaN,In.floatExp,In.float,Wp.binary,zp.merge,Qp.omap,Xp.pairs,Zp.set,Ln.intTime,Ln.floatTime,Ln.timestamp];el.schema=em});var fl=A(Tn=>{"use strict";var rl=tt(),tm=Rs(),ol=st(),sm=It(),im=un(),Rn=dn(),On=mn(),nm=Ta(),rm=_a(),al=bn(),Mt=xs(),ll=Sn(),cl=Fs(),sl=tl(),ul=An(),Ys=Nn(),il=new Map([["core",nm.schema],["failsafe",[rl.map,ol.seq,sm.string]],["json",rm.schema],["yaml11",sl.schema],["yaml-1.1",sl.schema]]),nl={binary:al.binary,bool:im.boolTag,float:Rn.float,floatExp:Rn.floatExp,floatNaN:Rn.floatNaN,floatTime:Ys.floatTime,int:On.int,intHex:On.intHex,intOct:On.intOct,intTime:Ys.intTime,map:rl.map,merge:Mt.merge,null:tm.nullTag,omap:ll.omap,pairs:cl.pairs,seq:ol.seq,set:ul.set,timestamp:Ys.timestamp},om={"tag:yaml.org,2002:binary":al.binary,"tag:yaml.org,2002:merge":Mt.merge,"tag:yaml.org,2002:omap":ll.omap,"tag:yaml.org,2002:pairs":cl.pairs,"tag:yaml.org,2002:set":ul.set,"tag:yaml.org,2002:timestamp":Ys.timestamp};function am(e,t,s){let i=il.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(il.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"?nl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(nl).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=om;Tn.getTags=am});var _n=A(dl=>{"use strict";var Mn=D(),lm=tt(),cm=st(),um=It(),Gs=fl(),fm=(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)?Gs.getTags(t,"compat"):t?Gs.getTags(null,t):null,this.name=typeof r=="string"&&r||"core",this.knownTags=n?Gs.coreKnownTags:{},this.tags=Gs.getTags(s,this.name,i),this.toStringOptions=a??null,Object.defineProperty(this,Mn.MAP,{value:lm.map}),Object.defineProperty(this,Mn.SCALAR,{value:um.string}),Object.defineProperty(this,Mn.SEQ,{value:cm.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?fm:null}clone(){let t=Object.create(e.prototype,Object.getOwnPropertyDescriptors(this));return t.tags=this.tags.slice(),t}};dl.Schema=Dn});var ml=A(pl=>{"use strict";var dm=D(),qn=Et(),Dt=St();function pm(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(dm.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
- `}oX.stringifyDocument=aX});var Rq=N((Qz)=>{var sX=Uq(),qq=q$(),r=k(),tX=F0(),rX=_0(),eX=v2(),qz=j1(),g2=tq(),$z=X2(),Zz=Hq(),u2=Q2();class m2{constructor(q,$,Z){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,r.NODE_TYPE,{value:r.DOC});let Q=null;if(typeof $==="function"||Array.isArray($))Q=$;else if(Z===void 0&&$)Z=$,$=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 u2.Directives({version:z});this.setSchema(z,Z),this.contents=q===void 0?null:this.createNode(q,Q,Z)}clone(){let q=Object.create(m2.prototype,{[r.NODE_TYPE]:{value:r.DOC}});if(q.commentBefore=this.commentBefore,q.comment=this.comment,q.errors=this.errors.slice(),q.warnings=this.warnings.slice(),q.options=Object.assign({},this.options),this.directives)q.directives=this.directives.clone();if(q.schema=this.schema.clone(),q.contents=r.isNode(this.contents)?this.contents.clone(q.schema):this.contents,this.range)q.range=this.range.slice();return q}add(q){if($q(this.contents))this.contents.add(q)}addIn(q,$){if($q(this.contents))this.contents.addIn(q,$)}createAlias(q,$){if(!q.anchor){let Z=g2.anchorNames(this);q.anchor=!$||Z.has($)?g2.findNewAnchor($||"a",Z):$}return new sX.Alias(q.anchor)}createNode(q,$,Z){let Q=void 0;if(typeof $==="function")q=$.call({"":q},"",q),Q=$;else if(Array.isArray($)){let K=(F)=>typeof F==="number"||F instanceof String||F instanceof Number,O=$.filter(K).map(String);if(O.length>0)$=$.concat(O);Q=$}else if(Z===void 0&&$)Z=$,$=void 0;let{aliasDuplicateObjects:X,anchorPrefix:z,flow:J,keepUndefined:G,onTagObj:Y,tag:H}=Z??{},{onAnchor:V,setAnchors:W,sourceObjects:B}=g2.createNodeAnchors(this,z||"a"),_={aliasDuplicateObjects:X??!0,keepUndefined:G??!1,onAnchor:V,onTagObj:Y,replacer:Q,schema:this.schema,sourceObjects:B},L=Zz.createNode(q,H,_);if(J&&r.isCollection(L))L.flow=!0;return W(),L}createPair(q,$,Z={}){let Q=this.createNode(q,null,Z),X=this.createNode($,null,Z);return new tX.Pair(Q,X)}delete(q){return $q(this.contents)?this.contents.delete(q):!1}deleteIn(q){if(qq.isEmptyPath(q)){if(this.contents==null)return!1;return this.contents=null,!0}return $q(this.contents)?this.contents.deleteIn(q):!1}get(q,$){return r.isCollection(this.contents)?this.contents.get(q,$):void 0}getIn(q,$){if(qq.isEmptyPath(q))return!$&&r.isScalar(this.contents)?this.contents.value:this.contents;return r.isCollection(this.contents)?this.contents.getIn(q,$):void 0}has(q){return r.isCollection(this.contents)?this.contents.has(q):!1}hasIn(q){if(qq.isEmptyPath(q))return this.contents!==void 0;return r.isCollection(this.contents)?this.contents.hasIn(q):!1}set(q,$){if(this.contents==null)this.contents=qq.collectionFromPath(this.schema,[q],$);else if($q(this.contents))this.contents.set(q,$)}setIn(q,$){if(qq.isEmptyPath(q))this.contents=$;else if(this.contents==null)this.contents=qq.collectionFromPath(this.schema,Array.from(q),$);else if($q(this.contents))this.contents.setIn(q,$)}setSchema(q,$={}){if(typeof q==="number")q=String(q);let Z;switch(q){case"1.1":if(this.directives)this.directives.yaml.version="1.1";else this.directives=new u2.Directives({version:"1.1"});Z={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":if(this.directives)this.directives.yaml.version=q;else this.directives=new u2.Directives({version:q});Z={resolveKnownTags:!0,schema:"core"};break;case null:if(this.directives)delete this.directives;Z=null;break;default:{let Q=JSON.stringify(q);throw Error(`Expected '1.1', '1.2' or null as first argument, but found: ${Q}`)}}if($.schema instanceof Object)this.schema=$.schema;else if(Z)this.schema=new eX.Schema(Object.assign(Z,$));else throw Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:q,jsonArg:$,mapAsMap:Z,maxAliasCount:Q,onAnchor:X,reviver:z}={}){let J={anchors:new Map,doc:this,keep:!q,mapAsMap:Z===!0,mapKeyWarned:!1,maxAliasCount:typeof Q==="number"?Q:100},G=rX.toJS(this.contents,$??"",J);if(typeof X==="function")for(let{count:Y,res:H}of J.anchors.values())X(H,Y);return typeof z==="function"?$z.applyReviver(z,{"":G},"",G):G}toJSON(q,$){return this.toJS({json:!0,jsonArg:q,mapAsMap:!1,onAnchor:$})}toString(q={}){if(this.errors.length>0)throw Error("Document with errors cannot be stringified");if("indent"in q&&(!Number.isInteger(q.indent)||Number(q.indent)<=0)){let $=JSON.stringify(q.indent);throw Error(`"indent" option must be a positive integer, not ${$}`)}return qz.stringifyDocument(this,q)}}function $q(q){if(r.isCollection(q))return!0;throw Error("Expected a YAML collection as document contents")}Qz.Document=m2});var Dq=N((Jz)=>{class N$ extends Error{constructor(q,$,Z,Q){super();this.name=q,this.code=Z,this.message=Q,this.pos=$}}class R1 extends N${constructor(q,$,Z){super("YAMLParseError",q,$,Z)}}class D1 extends N${constructor(q,$,Z){super("YAMLWarning",q,$,Z)}}var zz=(q,$)=>(Z)=>{if(Z.pos[0]===-1)return;Z.linePos=Z.pos.map((G)=>$.linePos(G));let{line:Q,col:X}=Z.linePos[0];Z.message+=` at line ${Q}, column ${X}`;let z=X-1,J=q.substring($.lineStarts[Q-1],$.lineStarts[Q]).replace(/[\n\r]+$/,"");if(z>=60&&J.length>80){let G=Math.min(z-39,J.length-79);J=""+J.substring(G),z-=G-1}if(J.length>80)J=J.substring(0,79)+"";if(Q>1&&/^ *$/.test(J.substring(0,z))){let G=q.substring($.lineStarts[Q-2],$.lineStarts[Q-1]);if(G.length>80)G=G.substring(0,79)+`…
59
- `;J=G+J}if(/[^ ]/.test(J)){let G=1,Y=Z.linePos[1];if(Y?.line===Q&&Y.col>X)G=Math.max(1,Math.min(Y.col-X,80-z));let H=" ".repeat(z)+"^".repeat(G);Z.message+=`:
60
-
61
- ${J}
62
- ${H}
63
- `}};Jz.YAMLError=N$;Jz.YAMLParseError=R1;Jz.YAMLWarning=D1;Jz.prettifyError=zz});var Nq=N((Vz)=>{function Wz(q,{flow:$,indicator:Z,next:Q,offset:X,onError:z,parentIndent:J,startOnNewline:G}){let Y=!1,H=G,V=G,W="",B="",_=!1,L=!1,K=null,O=null,F=null,A=null,M=null,R=null,T=null;for(let w of q){if(L){if(w.type!=="space"&&w.type!=="newline"&&w.type!=="comma")z(w.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");L=!1}if(K){if(H&&w.type!=="comment"&&w.type!=="newline")z(K,"TAB_AS_INDENT","Tabs are not allowed as indentation");K=null}switch(w.type){case"space":if(!$&&(Z!=="doc-start"||Q?.type!=="flow-collection")&&w.source.includes("\t"))K=w;V=!0;break;case"comment":{if(!V)z(w,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let f=w.source.substring(1)||" ";if(!W)W=f;else W+=B+f;B="",H=!1;break}case"newline":if(H){if(W)W+=w.source;else if(!R||Z!=="seq-item-ind")Y=!0}else B+=w.source;if(H=!0,_=!0,O||F)A=w;V=!0;break;case"anchor":if(O)z(w,"MULTIPLE_ANCHORS","A node can have at most one anchor");if(w.source.endsWith(":"))z(w.offset+w.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0);O=w,T??(T=w.offset),H=!1,V=!1,L=!0;break;case"tag":{if(F)z(w,"MULTIPLE_TAGS","A node can have at most one tag");F=w,T??(T=w.offset),H=!1,V=!1,L=!0;break}case Z:if(O||F)z(w,"BAD_PROP_ORDER",`Anchors and tags must be after the ${w.source} indicator`);if(R)z(w,"UNEXPECTED_TOKEN",`Unexpected ${w.source} in ${$??"collection"}`);R=w,H=Z==="seq-item-ind"||Z==="explicit-key-ind",V=!1;break;case"comma":if($){if(M)z(w,"UNEXPECTED_TOKEN",`Unexpected , in ${$}`);M=w,H=!1,V=!1;break}default:z(w,"UNEXPECTED_TOKEN",`Unexpected ${w.type} token`),H=!1,V=!1}}let D=q[q.length-1],x=D?D.offset+D.source.length:X;if(L&&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&&(H&&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:R,spaceBefore:Y,comment:W,hasNewline:_,anchor:O,tag:F,newlineAfterProp:A,end:x,start:T??x}}Vz.resolveProps=Wz});var w$=N((Kz)=>{function p2(q){if(!q)return null;switch(q.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(q.source.includes(`
64
- `))return!0;if(q.end){for(let $ of q.end)if($.type==="newline")return!0}return!1;case"flow-collection":for(let $ of q.items){for(let Z of $.start)if(Z.type==="newline")return!0;if($.sep){for(let Z of $.sep)if(Z.type==="newline")return!0}if(p2($.key)||p2($.value))return!0}return!1;default:return!0}}Kz.containsNewline=p2});var d2=N((Fz)=>{var Lz=w$();function Oz(q,$,Z){if($?.type==="flow-collection"){let Q=$.end[0];if(Q.indent===q&&(Q.source==="]"||Q.source==="}")&&Lz.containsNewline($))Z(Q,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}Fz.flowIndentCheck=Oz});var c2=N((Tz)=>{var N1=k();function Az(q,$,Z){let{uniqueKeys:Q}=q.options;if(Q===!1)return!1;let X=typeof Q==="function"?Q:(z,J)=>z===J||N1.isScalar(z)&&N1.isScalar(J)&&z.value===J.value;return $.some((z)=>X(z.key,Z))}Tz.mapIncludes=Az});var S1=N((wz)=>{var w1=F0(),jz=A0(),P1=Nq(),Rz=w$(),C1=d2(),Dz=c2(),E1="All mapping items must start at the same column";function Nz({composeNode:q,composeEmptyNode:$},Z,Q,X,z){let G=new(z?.nodeClass??jz.YAMLMap)(Z.schema);if(Z.atRoot)Z.atRoot=!1;let Y=Q.offset,H=null;for(let V of Q.items){let{start:W,key:B,sep:_,value:L}=V,K=P1.resolveProps(W,{indicator:"explicit-key-ind",next:B??_?.[0],offset:Y,onError:X,parentIndent:Q.indent,startOnNewline:!0}),O=!K.found;if(O){if(B){if(B.type==="block-seq")X(Y,"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(Y,"BAD_INDENT",E1)}if(!K.anchor&&!K.tag&&!_){if(H=K.end,K.comment)if(G.comment)G.comment+=`
65
- `+K.comment;else G.comment=K.comment;continue}if(K.newlineAfterProp||Rz.containsNewline(B))X(B??W[W.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else if(K.found?.indent!==Q.indent)X(Y,"BAD_INDENT",E1);Z.atKey=!0;let F=K.end,A=B?q(Z,B,K,X):$(Z,F,W,null,K,X);if(Z.schema.compat)C1.flowIndentCheck(Q.indent,B,X);if(Z.atKey=!1,Dz.mapIncludes(Z,G.items,A))X(F,"DUPLICATE_KEY","Map keys must be unique");let M=P1.resolveProps(_??[],{indicator:"map-value-ind",next:L,offset:A.range[2],onError:X,parentIndent:Q.indent,startOnNewline:!B||B.type==="block-scalar"});if(Y=M.end,M.found){if(O){if(L?.type==="block-map"&&!M.hasNewline)X(Y,"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 R=L?q(Z,L,M,X):$(Z,Y,_,null,M,X);if(Z.schema.compat)C1.flowIndentCheck(Q.indent,L,X);Y=R.range[2];let T=new w1.Pair(A,R);if(Z.options.keepSourceTokens)T.srcToken=V;G.items.push(T)}else{if(O)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 R=new w1.Pair(A);if(Z.options.keepSourceTokens)R.srcToken=V;G.items.push(R)}}if(H&&H<Y)X(H,"IMPOSSIBLE","Map comment with trailing content");return G.range=[Q.offset,Y,H??Y],G}wz.resolveBlockMap=Nz});var b1=N((xz)=>{var Cz=T0(),Ez=Nq(),Sz=d2();function bz({composeNode:q,composeEmptyNode:$},Z,Q,X,z){let G=new(z?.nodeClass??Cz.YAMLSeq)(Z.schema);if(Z.atRoot)Z.atRoot=!1;if(Z.atKey)Z.atKey=!1;let Y=Q.offset,H=null;for(let{start:V,value:W}of Q.items){let B=Ez.resolveProps(V,{indicator:"seq-item-ind",next:W,offset:Y,onError:X,parentIndent:Q.indent,startOnNewline:!0});if(!B.found)if(B.anchor||B.tag||W)if(W?.type==="block-seq")X(B.end,"BAD_INDENT","All sequence items must start at the same column");else X(Y,"MISSING_CHAR","Sequence item without - indicator");else{if(H=B.end,B.comment)G.comment=B.comment;continue}let _=W?q(Z,W,B,X):$(Z,B.end,V,null,B,X);if(Z.schema.compat)Sz.flowIndentCheck(Q.indent,W,X);Y=_.range[2],G.items.push(_)}return G.range=[Q.offset,Y,H??Y],G}xz.resolveBlockSeq=bz});var Zq=N((kz)=>{function fz(q,$,Z,Q){let X="";if(q){let z=!1,J="";for(let G of q){let{source:Y,type:H}=G;switch(H){case"space":z=!0;break;case"comment":{if(Z&&!z)Q(G,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let V=Y.substring(1)||" ";if(!X)X=V;else X+=J+V;J="";break}case"newline":if(X)J+=Y;z=!0;break;default:Q(G,"UNEXPECTED_TOKEN",`Unexpected ${H} at node end`)}$+=Y.length}}return{comment:X,offset:$}}kz.resolveEnd=fz});var f1=N((lz)=>{var hz=k(),gz=F0(),x1=A0(),uz=T0(),mz=Zq(),y1=Nq(),pz=w$(),dz=c2(),l2="Block collections are not allowed within flow collections",n2=(q)=>q&&(q.type==="block-map"||q.type==="block-seq");function cz({composeNode:q,composeEmptyNode:$},Z,Q,X,z){let J=Q.start.source==="{",G=J?"flow map":"flow sequence",H=new(z?.nodeClass??(J?x1.YAMLMap:uz.YAMLSeq))(Z.schema);H.flow=!0;let V=Z.atRoot;if(V)Z.atRoot=!1;if(Z.atKey)Z.atKey=!1;let W=Q.offset+Q.start.source.length;for(let O=0;O<Q.items.length;++O){let F=Q.items[O],{start:A,key:M,sep:R,value:T}=F,D=y1.resolveProps(A,{flow:G,indicator:"explicit-key-ind",next:M??R?.[0],offset:W,onError:X,parentIndent:Q.indent,startOnNewline:!1});if(!D.found){if(!D.anchor&&!D.tag&&!R&&!T){if(O===0&&D.comma)X(D.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${G}`);else if(O<Q.items.length-1)X(D.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${G}`);if(D.comment)if(H.comment)H.comment+=`
67
- `+D.comment;else H.comment=D.comment;W=D.end;continue}if(!J&&Z.options.strict&&pz.containsNewline(M))X(M,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(O===0){if(D.comma)X(D.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${G}`)}else{if(!D.comma)X(D.start,"MISSING_CHAR",`Missing , between ${G} items`);if(D.comment){let x="";q:for(let w of A)switch(w.type){case"comma":case"space":break;case"comment":x=w.source.substring(1);break q;default:break q}if(x){let w=H.items[H.items.length-1];if(hz.isPair(w))w=w.value??w.key;if(w.comment)w.comment+=`
68
- `+x;else w.comment=x;D.comment=D.comment.substring(x.length+1)}}}if(!J&&!R&&!D.found){let x=T?q(Z,T,D,X):$(Z,D.end,R,null,D,X);if(H.items.push(x),W=x.range[2],n2(T))X(x.range,"BLOCK_IN_FLOW",l2)}else{Z.atKey=!0;let x=D.end,w=M?q(Z,M,D,X):$(Z,x,A,null,D,X);if(n2(M))X(w.range,"BLOCK_IN_FLOW",l2);Z.atKey=!1;let f=y1.resolveProps(R??[],{flow:G,indicator:"map-value-ind",next:T,offset:w.range[2],onError:X,parentIndent:Q.indent,startOnNewline:!1});if(f.found){if(!J&&!D.found&&Z.options.strict){if(R)for(let C of R){if(C===f.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(D.start<f.found.offset-1024)X(f.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 ${G}`);else X(f.start,"MISSING_CHAR",`Missing , or : between ${G} items`);let I=T?q(Z,T,f,X):f.found?$(Z,f.end,R,null,f,X):null;if(I){if(n2(T))X(I.range,"BLOCK_IN_FLOW",l2)}else if(f.comment)if(w.comment)w.comment+=`
69
- `+f.comment;else w.comment=f.comment;let j=new gz.Pair(w,I);if(Z.options.keepSourceTokens)j.srcToken=F;if(J){let C=H;if(dz.mapIncludes(Z,C.items,w))X(x,"DUPLICATE_KEY","Map keys must be unique");C.items.push(j)}else{let C=new x1.YAMLMap(Z.schema);C.flow=!0,C.items.push(j);let S=(I??w).range;C.range=[w.range[0],S[1],S[2]],H.items.push(C)}W=I?I.range[2]:f.end}}let B=J?"}":"]",[_,...L]=Q.end,K=W;if(_?.source===B)K=_.offset+_.source.length;else{let O=G[0].toUpperCase()+G.substring(1),F=V?`${O} must end with a ${B}`:`${O} in block collection must be sufficiently indented and end with a ${B}`;if(X(W,V?"MISSING_CHAR":"BAD_INDENT",F),_&&_.source.length!==1)L.unshift(_)}if(L.length>0){let O=mz.resolveEnd(L,K,Z.options.strict,X);if(O.comment)if(H.comment)H.comment+=`
70
- `+O.comment;else H.comment=O.comment;H.range=[Q.offset,K,O.offset]}else H.range=[Q.offset,K,K];return H}lz.resolveFlowCollection=cz});var k1=N(($J)=>{var az=k(),oz=u(),iz=A0(),sz=T0(),tz=S1(),rz=b1(),ez=f1();function a2(q,$,Z,Q,X,z){let J=Z.type==="block-map"?tz.resolveBlockMap(q,$,Z,Q,z):Z.type==="block-seq"?rz.resolveBlockSeq(q,$,Z,Q,z):ez.resolveFlowCollection(q,$,Z,Q,z),G=J.constructor;if(X==="!"||X===G.tagName)return J.tag=G.tagName,J;if(X)J.tag=X;return J}function qJ(q,$,Z,Q,X){let z=Q.tag,J=!z?null:$.directives.tagName(z.source,(B)=>X(z,"TAG_RESOLVE_FAILED",B));if(Z.type==="block-seq"){let{anchor:B,newlineAfterProp:_}=Q,L=B&&z?B.offset>z.offset?B:z:B??z;if(L&&(!_||_.offset<L.offset))X(L,"MISSING_CHAR","Missing newline after block sequence props")}let G=Z.type==="block-map"?"map":Z.type==="block-seq"?"seq":Z.start.source==="{"?"map":"seq";if(!z||!J||J==="!"||J===iz.YAMLMap.tagName&&G==="map"||J===sz.YAMLSeq.tagName&&G==="seq")return a2(q,$,Z,X,J);let Y=$.schema.tags.find((B)=>B.tag===J&&B.collection===G);if(!Y){let B=$.schema.knownTags[J];if(B?.collection===G)$.schema.tags.push(Object.assign({},B,{default:!1})),Y=B;else{if(B)X(z,"BAD_COLLECTION_TYPE",`${B.tag} used for ${G} collection, but expects ${B.collection??"scalar"}`,!0);else X(z,"TAG_RESOLVE_FAILED",`Unresolved tag: ${J}`,!0);return a2(q,$,Z,X,J)}}let H=a2(q,$,Z,X,J,Y),V=Y.resolve?.(H,(B)=>X(z,"TAG_RESOLVE_FAILED",B),$.options)??H,W=az.isNode(V)?V:new oz.Scalar(V);if(W.range=H.range,W.tag=J,Y?.format)W.format=Y.format;return W}$J.composeCollection=qJ});var i2=N((JJ)=>{var o2=u();function QJ(q,$,Z){let Q=$.offset,X=XJ($,q.options.strict,Z);if(!X)return{value:"",type:null,comment:"",range:[Q,Q,Q]};let z=X.mode===">"?o2.Scalar.BLOCK_FOLDED:o2.Scalar.BLOCK_LITERAL,J=$.source?zJ($.source):[],G=J.length;for(let K=J.length-1;K>=0;--K){let O=J[K][1];if(O===""||O==="\r")G=K;else break}if(G===0){let K=X.chomp==="+"&&J.length>0?`
71
- `.repeat(Math.max(1,J.length-1)):"",O=Q+X.length;if($.source)O+=$.source.length;return{value:K,type:z,comment:X.comment,range:[Q,O,O]}}let Y=$.indent+X.indent,H=$.offset+X.length,V=0;for(let K=0;K<G;++K){let[O,F]=J[K];if(F===""||F==="\r"){if(X.indent===0&&O.length>Y)Y=O.length}else{if(O.length<Y)Z(H+O.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(X.indent===0)Y=O.length;if(V=K,Y===0&&!q.atRoot)Z(H,"BAD_INDENT","Block scalar values in collections must be indented");break}H+=O.length+F.length+1}for(let K=J.length-1;K>=G;--K)if(J[K][0].length>Y)G=K+1;let W="",B="",_=!1;for(let K=0;K<V;++K)W+=J[K][0].slice(Y)+`
72
- `;for(let K=V;K<G;++K){let[O,F]=J[K];H+=O.length+F.length+1;let A=F[F.length-1]==="\r";if(A)F=F.slice(0,-1);if(F&&O.length<Y){let R=`Block scalar lines must not be less indented than their ${X.indent?"explicit indentation indicator":"first line"}`;Z(H-F.length-(A?2:1),"BAD_INDENT",R),O=""}if(z===o2.Scalar.BLOCK_LITERAL)W+=B+O.slice(Y)+F,B=`
73
- `;else if(O.length>Y||F[0]==="\t"){if(B===" ")B=`
74
- `;else if(!_&&B===`
75
- `)B=`
76
-
77
- `;W+=B+O.slice(Y)+F,B=`
78
- `,_=!0}else if(F==="")if(B===`
79
- `)W+=`
80
- `;else B=`
81
- `;else W+=B+F,B=" ",_=!1}switch(X.chomp){case"-":break;case"+":for(let K=G;K<J.length;++K)W+=`
82
- `+J[K][0].slice(Y);if(W[W.length-1]!==`
83
- `)W+=`
84
- `;break;default:W+=`
85
- `}let L=Q+X.length+$.source.length;return{value:W,type:z,comment:X.comment,range:[Q,L,L]}}function XJ({offset:q,props:$},Z,Q){if($[0].type!=="block-scalar-header")return Q($[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:X}=$[0],z=X[0],J=0,G="",Y=-1;for(let B=1;B<X.length;++B){let _=X[B];if(!G&&(_==="-"||_==="+"))G=_;else{let L=Number(_);if(!J&&L)J=L;else if(Y===-1)Y=q+B}}if(Y!==-1)Q(Y,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${X}`);let H=!1,V="",W=X.length;for(let B=1;B<$.length;++B){let _=$[B];switch(_.type){case"space":H=!0;case"newline":W+=_.source.length;break;case"comment":if(Z&&!H)Q(_,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");W+=_.source.length,V=_.source.substring(1);break;case"error":Q(_,"UNEXPECTED_TOKEN",_.message),W+=_.source.length;break;default:{let L=`Unexpected token in block scalar header: ${_.type}`;Q(_,"UNEXPECTED_TOKEN",L);let K=_.source;if(K&&typeof K==="string")W+=K.length}}}return{mode:z,indent:J,chomp:G,comment:V,length:W}}function zJ(q){let $=q.split(/\n( *)/),Z=$[0],Q=Z.match(/^( *)/),z=[Q?.[1]?[Q[1],Z.slice(Q[1].length)]:["",Z]];for(let J=1;J<$.length;J+=2)z.push([$[J],$[J+1]]);return z}JJ.resolveBlockScalar=QJ});var t2=N((LJ)=>{var s2=u(),YJ=Zq();function UJ(q,$,Z){let{offset:Q,type:X,source:z,end:J}=q,G,Y,H=(B,_,L)=>Z(Q+B,_,L);switch(X){case"scalar":G=s2.Scalar.PLAIN,Y=HJ(z,H);break;case"single-quoted-scalar":G=s2.Scalar.QUOTE_SINGLE,Y=WJ(z,H);break;case"double-quoted-scalar":G=s2.Scalar.QUOTE_DOUBLE,Y=VJ(z,H);break;default:return Z(q,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${X}`),{value:"",type:null,comment:"",range:[Q,Q+z.length,Q+z.length]}}let V=Q+z.length,W=YJ.resolveEnd(J,V,$,Z);return{value:Y,type:G,comment:W.comment,range:[Q,V,W.offset]}}function HJ(q,$){let Z="";switch(q[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 ${q[0]}`;break}case"@":case"`":{Z=`reserved character ${q[0]}`;break}}if(Z)$(0,"BAD_SCALAR_START",`Plain value cannot start with ${Z}`);return v1(q)}function WJ(q,$){if(q[q.length-1]!=="'"||q.length===1)$(q.length,"MISSING_CHAR","Missing closing 'quote");return v1(q.slice(1,-1)).replace(/''/g,"'")}function v1(q){let $,Z;try{$=new RegExp(`(.*?)(?<![ ])[ ]*\r?
86
- `,"sy"),Z=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
87
- `,"sy")}catch{$=/(.*?)[ \t]*\r?\n/sy,Z=/[ \t]*(.*?)[ \t]*\r?\n/sy}let Q=$.exec(q);if(!Q)return q;let X=Q[1],z=" ",J=$.lastIndex;Z.lastIndex=J;while(Q=Z.exec(q)){if(Q[1]==="")if(z===`
88
- `)X+=z;else z=`
89
- `;else X+=z+Q[1],z=" ";J=Z.lastIndex}let G=/[ \t]*(.*)/sy;return G.lastIndex=J,Q=G.exec(q),X+z+(Q?.[1]??"")}function VJ(q,$){let Z="";for(let Q=1;Q<q.length-1;++Q){let X=q[Q];if(X==="\r"&&q[Q+1]===`
90
- `)continue;if(X===`
91
- `){let{fold:z,offset:J}=BJ(q,Q);Z+=z,Q=J}else if(X==="\\"){let z=q[++Q],J=KJ[z];if(J)Z+=J;else if(z===`
92
- `){z=q[Q+1];while(z===" "||z==="\t")z=q[++Q+1]}else if(z==="\r"&&q[Q+1]===`
93
- `){z=q[++Q+1];while(z===" "||z==="\t")z=q[++Q+1]}else if(z==="x"||z==="u"||z==="U"){let G={x:2,u:4,U:8}[z];Z+=_J(q,Q+1,G,$),Q+=G}else{let G=q.substr(Q-1,2);$(Q-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${G}`),Z+=G}}else if(X===" "||X==="\t"){let z=Q,J=q[Q+1];while(J===" "||J==="\t")J=q[++Q+1];if(J!==`
94
- `&&!(J==="\r"&&q[Q+2]===`
95
- `))Z+=Q>z?q.slice(z,Q+1):X}else Z+=X}if(q[q.length-1]!=='"'||q.length===1)$(q.length,"MISSING_CHAR",'Missing closing "quote');return Z}function BJ(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
- `;$+=1,Q=q[$+1]}if(!Z)Z=" ";return{fold:Z,offset:$}}var KJ={"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 _J(q,$,Z,Q){let X=q.substr($,Z),J=X.length===Z&&/^[0-9a-fA-F]+$/.test(X)?parseInt(X,16):NaN;if(isNaN(J)){let G=q.substr($-2,Z+2);return Q($-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${G}`),G}return String.fromCodePoint(J)}LJ.resolveFlowScalar=UJ});var g1=N((jJ)=>{var x0=k(),h1=u(),FJ=i2(),IJ=t2();function AJ(q,$,Z,Q){let{value:X,type:z,comment:J,range:G}=$.type==="block-scalar"?FJ.resolveBlockScalar(q,$,Q):IJ.resolveFlowScalar($,q.options.strict,Q),Y=Z?q.directives.tagName(Z.source,(W)=>Q(Z,"TAG_RESOLVE_FAILED",W)):null,H;if(q.options.stringKeys&&q.atKey)H=q.schema[x0.SCALAR];else if(Y)H=TJ(q.schema,X,Y,Z,Q);else if($.type==="scalar")H=MJ(q,X,$,Q);else H=q.schema[x0.SCALAR];let V;try{let W=H.resolve(X,(B)=>Q(Z??$,"TAG_RESOLVE_FAILED",B),q.options);V=x0.isScalar(W)?W:new h1.Scalar(W)}catch(W){let B=W instanceof Error?W.message:String(W);Q(Z??$,"TAG_RESOLVE_FAILED",B),V=new h1.Scalar(X)}if(V.range=G,V.source=X,z)V.type=z;if(Y)V.tag=Y;if(H.format)V.format=H.format;if(J)V.comment=J;return V}function TJ(q,$,Z,Q,X){if(Z==="!")return q[x0.SCALAR];let z=[];for(let G of q.tags)if(!G.collection&&G.tag===Z)if(G.default&&G.test)z.push(G);else return G;for(let G of z)if(G.test?.test($))return G;let J=q.knownTags[Z];if(J&&!J.collection)return q.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"),q[x0.SCALAR]}function MJ({atKey:q,directives:$,schema:Z},Q,X,z){let J=Z.tags.find((G)=>(G.default===!0||q&&G.default==="key")&&G.test?.test(Q))||Z[x0.SCALAR];if(Z.compat){let G=Z.compat.find((Y)=>Y.default&&Y.test?.test(Q))??Z[x0.SCALAR];if(J.tag!==G.tag){let Y=$.tagString(J.tag),H=$.tagString(G.tag),V=`Value may be parsed as either ${Y} or ${H}`;z(X,"TAG_RESOLVE_FAILED",V,!0)}}return J}jJ.composeScalar=AJ});var u1=N((NJ)=>{function DJ(q,$,Z){if($){Z??(Z=$.length);for(let Q=Z-1;Q>=0;--Q){let X=$[Q];switch(X.type){case"space":case"comment":case"newline":q-=X.source.length;continue}X=$[++Q];while(X?.type==="space")q+=X.source.length,X=$[++Q];break}}return q}NJ.emptyScalarPosition=DJ});var d1=N((fJ)=>{var PJ=Uq(),CJ=k(),EJ=k1(),m1=g1(),SJ=Zq(),bJ=u1(),xJ={composeNode:p1,composeEmptyNode:r2};function p1(q,$,Z,Q){let X=q.atKey,{spaceBefore:z,comment:J,anchor:G,tag:Y}=Z,H,V=!0;switch($.type){case"alias":if(H=yJ(q,$,Q),G||Y)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(H=m1.composeScalar(q,$,Y,Q),G)H.anchor=G.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(H=EJ.composeCollection(xJ,q,$,Z,Q),G)H.anchor=G.source.substring(1)}catch(W){let B=W instanceof Error?W.message:String(W);Q($,"RESOURCE_EXHAUSTION",B)}break;default:{let W=$.type==="error"?$.message:`Unsupported token (type: ${$.type})`;Q($,"UNEXPECTED_TOKEN",W),V=!1}}if(H??(H=r2(q,$.offset,void 0,null,Z,Q)),G&&H.anchor==="")Q(G,"BAD_ALIAS","Anchor cannot be an empty string");if(X&&q.options.stringKeys&&(!CJ.isScalar(H)||typeof H.value!=="string"||H.tag&&H.tag!=="tag:yaml.org,2002:str"))Q(Y??$,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(z)H.spaceBefore=!0;if(J)if($.type==="scalar"&&$.source==="")H.comment=J;else H.commentBefore=J;if(q.options.keepSourceTokens&&V)H.srcToken=$;return H}function r2(q,$,Z,Q,{spaceBefore:X,comment:z,anchor:J,tag:G,end:Y},H){let V={type:"scalar",offset:bJ.emptyScalarPosition($,Z,Q),indent:-1,source:""},W=m1.composeScalar(q,V,G,H);if(J){if(W.anchor=J.source.substring(1),W.anchor==="")H(J,"BAD_ALIAS","Anchor cannot be an empty string")}if(X)W.spaceBefore=!0;if(z)W.comment=z,W.range[2]=Y;return W}function yJ({options:q},{offset:$,source:Z,end:Q},X){let z=new PJ.Alias(Z.substring(1));if(z.source==="")X($,"BAD_ALIAS","Alias cannot be an empty string");if(z.source.endsWith(":"))X($+Z.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let J=$+Z.length,G=SJ.resolveEnd(Q,J,q.strict,X);if(z.range=[$,J,G.offset],G.comment)z.comment=G.comment;return z}fJ.composeEmptyNode=r2;fJ.composeNode=p1});var l1=N((pJ)=>{var hJ=Rq(),c1=d1(),gJ=Zq(),uJ=Nq();function mJ(q,$,{offset:Z,start:Q,value:X,end:z},J){let G=Object.assign({_directives:$},q),Y=new hJ.Document(void 0,G),H={atKey:!1,atRoot:!0,directives:Y.directives,options:Y.options,schema:Y.schema},V=uJ.resolveProps(Q,{indicator:"doc-start",next:X??z?.[0],offset:Z,onError:J,parentIndent:0,startOnNewline:!0});if(V.found){if(Y.directives.docStart=!0,X&&(X.type==="block-map"||X.type==="block-seq")&&!V.hasNewline)J(V.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}Y.contents=X?c1.composeNode(H,X,V,J):c1.composeEmptyNode(H,V.end,Q,null,V,J);let W=Y.contents.range[2],B=gJ.resolveEnd(z,W,!1,J);if(B.comment)Y.comment=B.comment;return Y.range=[Z,W,B.offset],Y}pJ.composeDoc=mJ});var e2=N((iJ)=>{var cJ=v("process"),lJ=Q2(),nJ=Rq(),wq=Dq(),n1=k(),aJ=l1(),oJ=Zq();function Pq(q){if(typeof q==="number")return[q,q+1];if(Array.isArray(q))return q.length===2?q:[q[0],q[1]];let{offset:$,source:Z}=q;return[$,$+(typeof Z==="string"?Z.length:1)]}function a1(q){let $="",Z=!1,Q=!1;for(let X=0;X<q.length;++X){let z=q[X];switch(z[0]){case"#":$+=($===""?"":Q?`
59
+ `}pl.stringifyDocument=pm});var _t=A(hl=>{"use strict";var mm=vt(),nt=hs(),re=D(),hm=Se(),gm=be(),ym=_n(),bm=ml(),Fn=fs(),wm=Ui(),vm=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 mm.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 y=w=>typeof w=="number"||w instanceof String||w instanceof Number,b=s.filter(y).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:h}=Fn.createNodeAnchors(this,o||"a"),g={aliasDuplicateObjects:r??!0,keepUndefined:l??!1,onAnchor:f,onTagObj:c,replacer:n,schema:this.schema,sourceObjects:h},m=vm.createNode(t,d,g);return a&&re.isCollection(m)&&(m.flow=!0),p(),m}createPair(t,s,i={}){let n=this.createNode(t,null,i),r=this.createNode(s,null,i);return new hm.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 ym.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=gm.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"?wm.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 bm.stringifyDocument(this,t)}};function rt(e){if(re.isCollection(e))return!0;throw new Error("Expected a YAML collection as document contents")}hl.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)}},km=(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=km});var Bt=A(gl=>{"use strict";function Sm(e,{flow:t,indicator:s,next:i,offset:n,onError:r,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,f="",p="",h=!1,g=!1,m=null,y=null,b=null,w=null,$=null,x=null,k=null;for(let P of e)switch(g&&(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"),g=!1),m&&(c&&P.type!=="comment"&&P.type!=="newline"&&r(m,"TAB_AS_INDENT","Tabs are not allowed as indentation"),m=null),P.type){case"space":!t&&(s!=="doc-start"||i?.type!=="flow-collection")&&P.source.includes(" ")&&(m=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,h=!0,(y||b)&&(w=P),d=!0;break;case"anchor":y&&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),y=P,k??(k=P.offset),c=!1,d=!1,g=!0;break;case"tag":{b&&r(P,"MULTIPLE_TAGS","A node can have at most one tag"),b=P,k??(k=P.offset),c=!1,d=!1,g=!0;break}case s:(y||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){$&&r(P,"UNEXPECTED_TOKEN",`Unexpected , in ${t}`),$=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 g&&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"),m&&(c&&m.indent<=o||i?.type==="block-map"||i?.type==="block-seq")&&r(m,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:$,found:x,spaceBefore:l,comment:f,hasNewline:h,anchor:y,tag:b,newlineAfterProp:w,end:O,start:k??O}}gl.resolveProps=Sm});var Ws=A(yl=>{"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}}yl.containsNewline=Kn});var Jn=A(bl=>{"use strict";var $m=Ws();function xm(e,t,s){if(t?.type==="flow-collection"){let i=t.end[0];i.indent===e&&(i.source==="]"||i.source==="}")&&$m.containsNewline(t)&&s(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}bl.flowIndentCheck=xm});var Hn=A(vl=>{"use strict";var wl=D();function Cm(e,t,s){let{uniqueKeys:i}=e.options;if(i===!1)return!1;let n=typeof i=="function"?i:(r,o)=>r===o||wl.isScalar(r)&&wl.isScalar(o)&&r.value===o.value;return t.some(r=>n(r.key,s))}vl.mapIncludes=Cm});var El=A(Cl=>{"use strict";var kl=Se(),Em=xe(),Sl=Bt(),Am=Ws(),$l=Jn(),Pm=Hn(),xl="All mapping items must start at the same column";function Nm({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=r?.nodeClass??Em.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:h,value:g}=d,m=Sl.resolveProps(f,{indicator:"explicit-key-ind",next:p??h?.[0],offset:l,onError:n,parentIndent:i.indent,startOnNewline:!0}),y=!m.found;if(y){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",xl)),!m.anchor&&!m.tag&&!h){c=m.end,m.comment&&(a.comment?a.comment+=`
66
+ `+m.comment:a.comment=m.comment);continue}(m.newlineAfterProp||Am.containsNewline(p))&&n(p??f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else m.found?.indent!==i.indent&&n(l,"BAD_INDENT",xl);s.atKey=!0;let b=m.end,w=p?e(s,p,m,n):t(s,b,f,null,m,n);s.schema.compat&&$l.flowIndentCheck(i.indent,p,n),s.atKey=!1,Pm.mapIncludes(s,a.items,w)&&n(b,"DUPLICATE_KEY","Map keys must be unique");let $=Sl.resolveProps(h??[],{indicator:"map-value-ind",next:g,offset:w.range[2],onError:n,parentIndent:i.indent,startOnNewline:!p||p.type==="block-scalar"});if(l=$.end,$.found){y&&(g?.type==="block-map"&&!$.hasNewline&&n(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),s.options.strict&&m.start<$.found.offset-1024&&n(w.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let x=g?e(s,g,$,n):t(s,l,h,null,$,n);s.schema.compat&&$l.flowIndentCheck(i.indent,g,n),l=x.range[2];let k=new kl.Pair(w,x);s.options.keepSourceTokens&&(k.srcToken=d),a.items.push(k)}else{y&&n(w.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),$.comment&&(w.comment?w.comment+=`
67
+ `+$.comment:w.comment=$.comment);let x=new kl.Pair(w);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}Cl.resolveBlockMap=Nm});var Pl=A(Al=>{"use strict";var Im=Ce(),Lm=Bt(),Rm=Jn();function Om({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=r?.nodeClass??Im.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=Lm.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 h=f?e(s,f,p,n):t(s,p.end,d,null,p,n);s.schema.compat&&Rm.flowIndentCheck(i.indent,f,n),l=h.range[2],a.items.push(h)}return a.range=[i.offset,l,c??l],a}Al.resolveBlockSeq=Om});var ot=A(Nl=>{"use strict";function Tm(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}}Nl.resolveEnd=Tm});var Ol=A(Rl=>{"use strict";var Mm=D(),Dm=Se(),Il=xe(),_m=Ce(),qm=ot(),Ll=Bt(),Fm=Ws(),jm=Hn(),Yn="Block collections are not allowed within flow collections",Gn=e=>e&&(e.type==="block-map"||e.type==="block-seq");function Bm({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=i.start.source==="{",a=o?"flow map":"flow sequence",l=r?.nodeClass??(o?Il.YAMLMap:_m.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 y=0;y<i.items.length;++y){let b=i.items[y],{start:w,key:$,sep:x,value:k}=b,E=Ll.resolveProps(w,{flow:a,indicator:"explicit-key-ind",next:$??x?.[0],offset:f,onError:n,parentIndent:i.indent,startOnNewline:!1});if(!E.found){if(!E.anchor&&!E.tag&&!x&&!k){y===0&&E.comma?n(E.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):y<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&&Fm.containsNewline($)&&n($,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(y===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 w)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];Mm.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=k?e(s,k,E,n):t(s,E.end,x,null,E,n);c.items.push(O),f=O.range[2],Gn(k)&&n(O.range,"BLOCK_IN_FLOW",Yn)}else{s.atKey=!0;let O=E.end,P=$?e(s,$,E,n):t(s,O,w,null,E,n);Gn($)&&n(P.range,"BLOCK_IN_FLOW",Yn),s.atKey=!1;let M=Ll.resolveProps(x??[],{flow:a,indicator:"map-value-ind",next:k,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 k&&("source"in k&&k.source?.[0]===":"?n(k,"MISSING_CHAR",`Missing space after : in ${a}`):n(M.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let v=k?e(s,k,M,n):M.found?t(s,M.end,x,null,M,n):null;v?Gn(k)&&n(v.range,"BLOCK_IN_FLOW",Yn):M.comment&&(P.comment?P.comment+=`
70
+ `+M.comment:P.comment=M.comment);let S=new Dm.Pair(P,v);if(s.options.keepSourceTokens&&(S.srcToken=b),o){let I=c;jm.mapIncludes(s,I.items,P)&&n(O,"DUPLICATE_KEY","Map keys must be unique"),I.items.push(S)}else{let I=new Il.YAMLMap(s.schema);I.flow=!0,I.items.push(S);let L=(v??P).range;I.range=[P.range[0],L[1],L[2]],c.items.push(I)}f=v?v.range[2]:M.end}}let p=o?"}":"]",[h,...g]=i.end,m=f;if(h?.source===p)m=h.offset+h.source.length;else{let y=a[0].toUpperCase()+a.substring(1),b=d?`${y} must end with a ${p}`:`${y} in block collection must be sufficiently indented and end with a ${p}`;n(f,d?"MISSING_CHAR":"BAD_INDENT",b),h&&h.source.length!==1&&g.unshift(h)}if(g.length>0){let y=qm.resolveEnd(g,m,s.options.strict,n);y.comment&&(c.comment?c.comment+=`
71
+ `+y.comment:c.comment=y.comment),c.range=[i.offset,m,y.offset]}else c.range=[i.offset,m,m];return c}Rl.resolveFlowCollection=Bm});var Ml=A(Tl=>{"use strict";var Um=D(),Vm=F(),Km=xe(),Jm=Ce(),Hm=El(),Ym=Pl(),Gm=Ol();function Wn(e,t,s,i,n,r){let o=s.type==="block-map"?Hm.resolveBlockMap(e,t,s,i,r):s.type==="block-seq"?Ym.resolveBlockSeq(e,t,s,i,r):Gm.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 Wm(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:h}=i,g=p&&r?p.offset>r.offset?p:r:p??r;g&&(!h||h.offset<g.offset)&&n(g,"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===Km.YAMLMap.tagName&&a==="map"||o===Jm.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=Um.isNode(d)?d:new Vm.Scalar(d);return f.range=c.range,f.tag=o,l?.format&&(f.format=l.format),f}Tl.composeCollection=Wm});var Qn=A(Dl=>{"use strict";var zn=F();function zm(e,t,s){let i=t.offset,n=Qm(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?Xm(t.source):[],a=o.length;for(let m=o.length-1;m>=0;--m){let y=o[m][1];if(y===""||y==="\r")a=m;else break}if(a===0){let m=n.chomp==="+"&&o.length>0?`
72
+ `.repeat(Math.max(1,o.length-1)):"",y=i+n.length;return t.source&&(y+=t.source.length),{value:m,type:r,comment:n.comment,range:[i,y,y]}}let l=t.indent+n.indent,c=t.offset+n.length,d=0;for(let m=0;m<a;++m){let[y,b]=o[m];if(b===""||b==="\r")n.indent===0&&y.length>l&&(l=y.length);else{y.length<l&&s(c+y.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),n.indent===0&&(l=y.length),d=m,l===0&&!e.atRoot&&s(c,"BAD_INDENT","Block scalar values in collections must be indented");break}c+=y.length+b.length+1}for(let m=o.length-1;m>=a;--m)o[m][0].length>l&&(a=m+1);let f="",p="",h=!1;for(let m=0;m<d;++m)f+=o[m][0].slice(l)+`
73
+ `;for(let m=d;m<a;++m){let[y,b]=o[m];c+=y.length+b.length+1;let w=b[b.length-1]==="\r";if(w&&(b=b.slice(0,-1)),b&&y.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-(w?2:1),"BAD_INDENT",x),y=""}r===zn.Scalar.BLOCK_LITERAL?(f+=p+y.slice(l)+b,p=`
74
+ `):y.length>l||b[0]===" "?(p===" "?p=`
75
+ `:!h&&p===`
76
+ `&&(p=`
77
+
78
+ `),f+=p+y.slice(l)+b,p=`
79
+ `,h=!0):b===""?p===`
80
+ `?f+=`
81
+ `:p=`
82
+ `:(f+=p+b,p=" ",h=!1)}switch(n.chomp){case"-":break;case"+":for(let m=a;m<o.length;++m)f+=`
83
+ `+o[m][0].slice(l);f[f.length-1]!==`
84
+ `&&(f+=`
85
+ `);break;default:f+=`
86
+ `}let g=i+n.length+t.source.length;return{value:f,type:r,comment:n.comment,range:[i,g,g]}}function Qm({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 h=n[p];if(!a&&(h==="-"||h==="+"))a=h;else{let g=Number(h);!o&&g?o=g: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 h=t[p];switch(h.type){case"space":c=!0;case"newline":f+=h.source.length;break;case"comment":s&&!c&&i(h,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),f+=h.source.length,d=h.source.substring(1);break;case"error":i(h,"UNEXPECTED_TOKEN",h.message),f+=h.source.length;break;default:{let g=`Unexpected token in block scalar header: ${h.type}`;i(h,"UNEXPECTED_TOKEN",g);let m=h.source;m&&typeof m=="string"&&(f+=m.length)}}}return{mode:r,indent:o,chomp:a,comment:d,length:f}}function Xm(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}Dl.resolveBlockScalar=zm});var Zn=A(ql=>{"use strict";var Xn=F(),Zm=ot();function eh(e,t,s){let{offset:i,type:n,source:r,end:o}=e,a,l,c=(p,h,g)=>s(i+p,h,g);switch(n){case"scalar":a=Xn.Scalar.PLAIN,l=th(r,c);break;case"single-quoted-scalar":a=Xn.Scalar.QUOTE_SINGLE,l=sh(r,c);break;case"double-quoted-scalar":a=Xn.Scalar.QUOTE_DOUBLE,l=ih(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=Zm.resolveEnd(o,d,t,s);return{value:l,type:a,comment:f.comment,range:[i,d,f.offset]}}function th(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}`),_l(e)}function sh(e,t){return(e[e.length-1]!=="'"||e.length===1)&&t(e.length,"MISSING_CHAR","Missing closing 'quote"),_l(e.slice(1,-1)).replace(/''/g,"'")}function _l(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 ih(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}=nh(e,i);s+=r,i=o}else if(n==="\\"){let r=e[++i],o=rh[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+=oh(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 nh(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 rh={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 oh(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)}ql.resolveFlowScalar=eh});var Bl=A(jl=>{"use strict";var Ue=D(),Fl=F(),ah=Qn(),lh=Zn();function ch(e,t,s,i){let{value:n,type:r,comment:o,range:a}=t.type==="block-scalar"?ah.resolveBlockScalar(e,t,i):lh.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=uh(e.schema,n,l,s,i):t.type==="scalar"?c=fh(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 Fl.Scalar(f)}catch(f){let p=f instanceof Error?f.message:String(f);i(s??t,"TAG_RESOLVE_FAILED",p),d=new Fl.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 uh(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 fh({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}jl.composeScalar=ch});var Vl=A(Ul=>{"use strict";function dh(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}Ul.emptyScalarPosition=dh});var Hl=A(tr=>{"use strict";var ph=vt(),mh=D(),hh=Ml(),Kl=Bl(),gh=ot(),yh=Vl(),bh={composeNode:Jl,composeEmptyNode:er};function Jl(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=wh(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=Kl.composeScalar(e,t,l,i),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=hh.composeCollection(bh,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&&(!mh.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:yh.emptyScalarPosition(t,s,i),indent:-1,source:""},f=Kl.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 wh({options:e},{offset:t,source:s,end:i},n){let r=new ph.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=gh.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=Jl});var Wl=A(Gl=>{"use strict";var vh=_t(),Yl=Hl(),kh=ot(),Sh=Bt();function $h(e,t,{offset:s,start:i,value:n,end:r},o){let a=Object.assign({_directives:t},e),l=new vh.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=Sh.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?Yl.composeNode(c,n,d,o):Yl.composeEmptyNode(c,d.end,i,null,d,o);let f=l.contents.range[2],p=kh.resolveEnd(r,f,!1,o);return p.comment&&(l.comment=p.comment),l.range=[s,f,p.offset],l}Gl.composeDoc=$h});var ir=A(Xl=>{"use strict";var xh=Xt("process"),Ch=Bi(),Eh=_t(),Ut=jt(),zl=D(),Ah=Wl(),Ph=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 Ql(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(q[X+1]?.[0]!=="#")X+=1;Z=!1;break;default:if(!Z)Q=!0;Z=!1}}return{comment:$,afterEmptyLine:Q}}class o1{constructor(q={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=($,Z,Q,X)=>{let z=Pq($);if(X)this.warnings.push(new wq.YAMLWarning(z,Z,Q));else this.errors.push(new wq.YAMLParseError(z,Z,Q))},this.directives=new lJ.Directives({version:q.version||"1.2"}),this.options=q}decorate(q,$){let{comment:Z,afterEmptyLine:Q}=a1(this.prelude);if(Z){let X=q.contents;if($)q.comment=q.comment?`${q.comment}
104
- ${Z}`:Z;else if(Q||q.directives.docStart||!X)q.commentBefore=Z;else if(n1.isCollection(X)&&!X.flow&&X.items.length>0){let z=X.items[0];if(n1.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($)Array.prototype.push.apply(q.errors,this.errors),Array.prototype.push.apply(q.warnings,this.warnings);else q.errors=this.errors,q.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:a1(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(q,$=!1,Z=-1){for(let Q of q)yield*this.next(Q);yield*this.end($,Z)}*next(q){if(cJ.env.LOG_STREAM)console.dir(q,{depth:null});switch(q.type){case"directive":this.directives.add(q.source,($,Z,Q)=>{let X=Pq(q);X[0]+=$,this.onError(X,"BAD_DIRECTIVE",Z,Q)}),this.prelude.push(q.source),this.atDirectives=!0;break;case"document":{let $=aJ.composeDoc(this.options,this.directives,q,this.onError);if(this.atDirectives&&!$.directives.docStart)this.onError(q,"MISSING_CHAR","Missing directives-end/doc-start indicator line");if(this.decorate($,!1),this.doc)yield this.doc;this.doc=$,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(q.source);break;case"error":{let $=q.source?`${q.message}: ${JSON.stringify(q.source)}`:q.message,Z=new wq.YAMLParseError(Pq(q),"UNEXPECTED_TOKEN",$);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 wq.YAMLParseError(Pq(q),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let $=oJ.resolveEnd(q.end,q.offset+q.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),$.comment){let Z=this.doc.comment;this.doc.comment=Z?`${Z}
107
- ${$.comment}`:$.comment}this.doc.range[2]=$.offset;break}default:this.errors.push(new wq.YAMLParseError(Pq(q),"UNEXPECTED_TOKEN",`Unsupported token ${q.type}`))}}*end(q=!1,$=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(q){let Z=Object.assign({_directives:this.directives},this.options),Q=new nJ.Document(void 0,Z);if(this.atDirectives)this.onError($,"MISSING_CHAR","Missing directives-end indicator line");Q.range=[0,$,$],this.decorate(Q,!1),yield Q}}}iJ.Composer=o1});var t1=N((XG)=>{var tJ=i2(),rJ=t2(),eJ=Dq(),i1=Bq();function qG(q,$=!0,Z){if(q){let Q=(X,z,J)=>{let G=typeof X==="number"?X:Array.isArray(X)?X[0]:X.offset;if(Z)Z(G,z,J);else throw new eJ.YAMLParseError([G,G+1],z,J)};switch(q.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return rJ.resolveFlowScalar(q,$,Q);case"block-scalar":return tJ.resolveBlockScalar({options:{strict:$}},q,Q)}}return null}function $G(q,$){let{implicitKey:Z=!1,indent:Q,inFlow:X=!1,offset:z=-1,type:J="PLAIN"}=$,G=i1.stringifyString({type:J,value:q},{implicitKey:Z,indent:Q>0?" ".repeat(Q):"",inFlow:X,options:{blockQuote:!0,lineWidth:-1}}),Y=$.end??[{type:"newline",offset:-1,indent:Q,source:`
108
- `}];switch(G[0]){case"|":case">":{let H=G.indexOf(`
109
- `),V=G.substring(0,H),W=G.substring(H+1)+`
110
- `,B=[{type:"block-scalar-header",offset:z,indent:Q,source:V}];if(!s1(B,Y))B.push({type:"newline",offset:-1,indent:Q,source:`
111
- `});return{type:"block-scalar",offset:z,indent:Q,props:B,source:W}}case'"':return{type:"double-quoted-scalar",offset:z,indent:Q,source:G,end:Y};case"'":return{type:"single-quoted-scalar",offset:z,indent:Q,source:G,end:Y};default:return{type:"scalar",offset:z,indent:Q,source:G,end:Y}}}function ZG(q,$,Z={}){let{afterKey:Q=!1,implicitKey:X=!1,inFlow:z=!1,type:J}=Z,G="indent"in q?q.indent:null;if(Q&&typeof G==="number")G+=2;if(!J)switch(q.type){case"single-quoted-scalar":J="QUOTE_SINGLE";break;case"double-quoted-scalar":J="QUOTE_DOUBLE";break;case"block-scalar":{let H=q.props[0];if(H.type!=="block-scalar-header")throw Error("Invalid block scalar header");J=H.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:J="PLAIN"}let Y=i1.stringifyString({type:J,value:$},{implicitKey:X||G===null,indent:G!==null&&G>0?" ".repeat(G):"",inFlow:z,options:{blockQuote:!0,lineWidth:-1}});switch(Y[0]){case"|":case">":QG(q,Y);break;case'"':q9(q,Y,"double-quoted-scalar");break;case"'":q9(q,Y,"single-quoted-scalar");break;default:q9(q,Y,"scalar")}}function QG(q,$){let Z=$.indexOf(`
112
- `),Q=$.substring(0,Z),X=$.substring(Z+1)+`
113
- `;if(q.type==="block-scalar"){let z=q.props[0];if(z.type!=="block-scalar-header")throw Error("Invalid block scalar header");z.source=Q,q.source=X}else{let{offset:z}=q,J="indent"in q?q.indent:-1,G=[{type:"block-scalar-header",offset:z,indent:J,source:Q}];if(!s1(G,"end"in q?q.end:void 0))G.push({type:"newline",offset:-1,indent:J,source:`
114
- `});for(let Y of Object.keys(q))if(Y!=="type"&&Y!=="offset")delete q[Y];Object.assign(q,{type:"block-scalar",indent:J,props:G,source:X})}}function s1(q,$){if($)for(let Z of $)switch(Z.type){case"space":case"comment":q.push(Z);break;case"newline":return q.push(Z),!0}return!1}function q9(q,$,Z){switch(q.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":q.type=Z,q.source=$;break;case"block-scalar":{let Q=q.props.slice(1),X=$.length;if(q.props[0].type==="block-scalar-header")X-=q.props[0].source.length;for(let z of Q)z.offset+=X;delete q.props,Object.assign(q,{type:Z,source:$,end:Q});break}case"block-map":case"block-seq":{let X={type:"newline",offset:q.offset+$.length,indent:q.indent,source:`
115
- `};delete q.items,Object.assign(q,{type:Z,source:$,end:[X]});break}default:{let Q="indent"in q?q.indent:-1,X="end"in q&&Array.isArray(q.end)?q.end.filter((z)=>z.type==="space"||z.type==="comment"||z.type==="newline"):[];for(let z of Object.keys(q))if(z!=="type"&&z!=="offset")delete q[z];Object.assign(q,{type:Z,indent:Q,source:$,end:X})}}}XG.createScalarToken=$G;XG.resolveAsScalar=qG;XG.setScalarValue=ZG});var r1=N((UG)=>{var YG=(q)=>("type"in q)?C$(q):P$(q);function C$(q){switch(q.type){case"block-scalar":{let $="";for(let Z of q.props)$+=C$(Z);return $+q.source}case"block-map":case"block-seq":{let $="";for(let Z of q.items)$+=P$(Z);return $}case"flow-collection":{let $=q.start.source;for(let Z of q.items)$+=P$(Z);for(let Z of q.end)$+=Z.source;return $}case"document":{let $=P$(q);if(q.end)for(let Z of q.end)$+=Z.source;return $}default:{let $=q.source;if("end"in q&&q.end)for(let Z of q.end)$+=Z.source;return $}}}function P$({start:q,key:$,sep:Z,value:Q}){let X="";for(let z of q)X+=z.source;if($)X+=C$($);if(Z)for(let z of Z)X+=z.source;if(Q)X+=C$(Q);return X}UG.stringify=YG});var $5=N((VG)=>{var $9=Symbol("break visit"),WG=Symbol("skip children"),e1=Symbol("remove item");function y0(q,$){if("type"in q&&q.type==="document")q={start:q.start,value:q.value};q5(Object.freeze([]),q,$)}y0.BREAK=$9;y0.SKIP=WG;y0.REMOVE=e1;y0.itemAtPath=(q,$)=>{let Z=q;for(let[Q,X]of $){let z=Z?.[Q];if(z&&"items"in z)Z=z.items[X];else return}return Z};y0.parentCollection=(q,$)=>{let Z=y0.itemAtPath(q,$.slice(0,-1)),Q=$[$.length-1][0],X=Z?.[Q];if(X&&"items"in X)return X;throw Error("Parent collection not found")};function q5(q,$,Z){let Q=Z($,q);if(typeof Q==="symbol")return Q;for(let X of["key","value"]){let z=$[X];if(z&&"items"in z){for(let J=0;J<z.items.length;++J){let G=q5(Object.freeze(q.concat([[X,J]])),z.items[J],Z);if(typeof G==="number")J=G-1;else if(G===$9)return $9;else if(G===e1)z.items.splice(J,1),J-=1}if(typeof Q==="function"&&X==="key")Q=Q($,q)}}return typeof Q==="function"?Q($,q):Q}VG.visit=y0});var E$=N((AG)=>{var Z9=t1(),KG=r1(),_G=$5(),Q9="\uFEFF",X9="\x02",z9="\x18",J9="\x1F",LG=(q)=>!!q&&("items"in q),OG=(q)=>!!q&&(q.type==="scalar"||q.type==="single-quoted-scalar"||q.type==="double-quoted-scalar"||q.type==="block-scalar");function FG(q){switch(q){case Q9:return"<BOM>";case X9:return"<DOC>";case z9:return"<FLOW_END>";case J9:return"<SCALAR>";default:return JSON.stringify(q)}}function IG(q){switch(q){case Q9:return"byte-order-mark";case X9:return"doc-mode";case z9:return"flow-error-end";case J9: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 Ch.Directives({version:t.version||"1.2"}),this.options=t}decorate(t,s){let{comment:i,afterEmptyLine:n}=Ql(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(zl.isCollection(r)&&!r.flow&&r.items.length>0){let o=r.items[0];zl.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:Ql(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(xh.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=Ah.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=Ph.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 Eh.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}}};Xl.Composer=sr});var tc=A(zs=>{"use strict";var Nh=Qn(),Ih=Zn(),Lh=jt(),Zl=Ct();function Rh(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 Lh.YAMLParseError([a,a+1],r,o)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Ih.resolveFlowScalar(e,t,i);case"block-scalar":return Nh.resolveBlockScalar({options:{strict:t}},e,i)}}return null}function Oh(e,t){let{implicitKey:s=!1,indent:i,inFlow:n=!1,offset:r=-1,type:o="PLAIN"}=t,a=Zl.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 ec(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 Th(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=Zl.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">":Mh(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 Mh(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}];ec(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 ec(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})}}}zs.createScalarToken=Oh;zs.resolveAsScalar=Rh;zs.setScalarValue=Th});var ic=A(sc=>{"use strict";var Dh=e=>"type"in e?Xs(e):Qs(e);function Xs(e){switch(e.type){case"block-scalar":{let t="";for(let s of e.props)t+=Xs(s);return t+e.source}case"block-map":case"block-seq":{let t="";for(let s of e.items)t+=Qs(s);return t}case"flow-collection":{let t=e.start.source;for(let s of e.items)t+=Qs(s);for(let s of e.end)t+=s.source;return t}case"document":{let t=Qs(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 Qs({start:e,key:t,sep:s,value:i}){let n="";for(let r of e)n+=r.source;if(t&&(n+=Xs(t)),s)for(let r of s)n+=r.source;return i&&(n+=Xs(i)),n}sc.stringify=Dh});var ac=A(oc=>{"use strict";var rr=Symbol("break visit"),_h=Symbol("skip children"),nc=Symbol("remove item");function Ve(e,t){"type"in e&&e.type==="document"&&(e={start:e.start,value:e.value}),rc(Object.freeze([]),e,t)}Ve.BREAK=rr;Ve.SKIP=_h;Ve.REMOVE=nc;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 rc(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=rc(Object.freeze(e.concat([[n,o]])),r.items[o],s);if(typeof a=="number")o=a-1;else{if(a===rr)return rr;a===nc&&(r.items.splice(o,1),o-=1)}}typeof i=="function"&&n==="key"&&(i=i(t,e))}}return typeof i=="function"?i(t,e):i}oc.visit=Ve});var Zs=A(Z=>{"use strict";var or=tc(),qh=ic(),Fh=ac(),ar="\uFEFF",lr="",cr="",ur="",jh=e=>!!e&&"items"in e,Bh=e=>!!e&&(e.type==="scalar"||e.type==="single-quoted-scalar"||e.type==="double-quoted-scalar"||e.type==="block-scalar");function Uh(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 Vh(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(q[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}AG.createScalarToken=Z9.createScalarToken;AG.resolveAsScalar=Z9.resolveAsScalar;AG.setScalarValue=Z9.setScalarValue;AG.stringify=KG.stringify;AG.visit=_G.visit;AG.BOM=Q9;AG.DOCUMENT=X9;AG.FLOW_END=z9;AG.SCALAR=J9;AG.isCollection=LG;AG.isScalar=OG;AG.prettyToken=FG;AG.tokenType=IG});var Y9=N((kG)=>{var Cq=E$();function G0(q){switch(q){case void 0:case" ":case`
118
- `:case"\r":case"\t":return!0;default:return!1}}var Z5=new Set("0123456789ABCDEFabcdef"),yG=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),S$=new Set(",[]{}"),fG=new Set(` ,[]{}
119
- \r `),G9=(q)=>!q||fG.has(q);class Q5{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(q){if(typeof q!=="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+q:q,this.lineEndPos=null}this.atEnd=!$;let Z=this.next??"stream";while(Z&&($||this.hasChars(1)))Z=yield*this.parseNext(Z)}atLineEnd(){let q=this.pos,$=this.buffer[q];while($===" "||$==="\t")$=this.buffer[++q];if(!$||$==="#"||$===`
120
- `)return!0;if($==="\r")return this.buffer[q+1]===`
121
- `;return!1}charAt(q){return this.buffer[this.pos+q]}continueScalar(q){let $=this.buffer[q];if(this.indentNext>0){let Z=0;while($===" ")$=this.buffer[++Z+q];if($==="\r"){let Q=this.buffer[Z+q+1];if(Q===`
122
- `||!Q&&!this.atEnd)return q+Z+1}return $===`
123
- `||Z>=this.indentNext||!$&&!this.atEnd?q+Z:-1}if($==="-"||$==="."){let Z=this.buffer.substr(q,3);if((Z==="---"||Z==="...")&&G0(this.buffer[q+3]))return-1}return q}getLine(){let q=this.lineEndPos;if(typeof q!=="number"||q!==-1&&q<this.pos)q=this.buffer.indexOf(`
124
- `,this.pos),this.lineEndPos=q;if(q===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[q-1]==="\r")q-=1;return this.buffer.substring(this.pos,q)}hasChars(q){return this.pos+q<=this.buffer.length}setNext(q){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=q,null}peek(q){return this.buffer.substr(this.pos,q)}*parseNext(q){switch(q){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 q=this.getLine();if(q===null)return this.setNext("stream");if(q[0]===Cq.BOM)yield*this.pushCount(1),q=q.substring(1);if(q[0]==="%"){let $=q.length,Z=q.indexOf("#");while(Z!==-1){let X=q[Z-1];if(X===" "||X==="\t"){$=Z-1;break}else Z=q.indexOf("#",Z+1)}while(!0){let X=q[$-1];if(X===" "||X==="\t")$-=1;else break}let Q=(yield*this.pushCount($))+(yield*this.pushSpaces(!0));return yield*this.pushCount(q.length-Q),this.pushNewline(),"stream"}if(this.atLineEnd()){let $=yield*this.pushSpaces(!0);return yield*this.pushCount(q.length-$),yield*this.pushNewline(),"stream"}return yield Cq.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let q=this.charAt(0);if(!q&&!this.atEnd)return this.setNext("line-start");if(q==="-"||q==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let $=this.peek(3);if(($==="---"||$==="...")&&G0(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,$==="---"?"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(!$&&!this.atEnd)return this.setNext("block-start");if((q==="-"||q==="?"||q===":")&&G0($)){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 q=this.getLine();if(q===null)return this.setNext("doc");let $=yield*this.pushIndicators();switch(q[$]){case"#":yield*this.pushCount(q.length-$);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(G9),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return $+=yield*this.parseBlockScalarHeader(),$+=yield*this.pushSpaces(!0),yield*this.pushCount(q.length-$),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let q,$,Z=-1;do{if(q=yield*this.pushNewline(),q>0)$=yield*this.pushSpaces(!1),this.indentValue=Z=$;else $=0;$+=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 Cq.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(G9),"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 q=this.charAt(0),$=this.buffer.indexOf(q,this.pos+1);if(q==="'")while($!==-1&&this.buffer[$+1]==="'")$=this.buffer.indexOf("'",$+2);else while($!==-1){let X=0;while(this.buffer[$-1-X]==="\\")X+=1;if(X%2===0)break;$=this.buffer.indexOf('"',$+1)}let Z=this.buffer.substring(0,$),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-(Z[Q-1]==="\r"?2:1)}if($===-1){if(!this.atEnd)return this.setNext("quoted-scalar");$=this.buffer.length}return yield*this.pushToIndex($+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let q=this.pos;while(!0){let $=this.buffer[++q];if($==="+")this.blockScalarKeep=!0;else if($>"0"&&$<="9")this.blockScalarIndent=Number($)-1;else if($!=="-")break}return yield*this.pushUntil(($)=>G0($)||$==="#")}*parseBlockScalar(){let q=this.pos-1,$=0,Z;q:for(let X=this.pos;Z=this.buffer[X];++X)switch(Z){case" ":$+=1;break;case`
127
- `:q=X,$=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 q}if(!Z&&!this.atEnd)return this.setNext("block-scalar");if($>=this.indentNext){if(this.blockScalarIndent===-1)this.indentNext=$;else this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let X=this.continueScalar(q+1);if(X===-1)break;q=this.buffer.indexOf(`
129
- `,X)}while(q!==-1);if(q===-1){if(!this.atEnd)return this.setNext("block-scalar");q=this.buffer.length}}let Q=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=Q-1}else if(!this.blockScalarKeep)do{let X=q-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+$>J)q=X;else break}while(!0);return yield Cq.SCALAR,yield*this.pushToIndex(q+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let q=this.flowLevel>0,$=this.pos-1,Z=this.pos-1,Q;while(Q=this.buffer[++Z])if(Q===":"){let X=this.buffer[Z+1];if(G0(X)||q&&S$.has(X))break;$=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 $=Z;if(X==="#"||q&&S$.has(X))break;if(Q===`
134
- `){let z=this.continueScalar(Z+1);if(z===-1)break;Z=Math.max(Z,z-2)}}else{if(q&&S$.has(Q))break;$=Z}if(!Q&&!this.atEnd)return this.setNext("plain-scalar");return yield Cq.SCALAR,yield*this.pushToIndex($+1,!0),q?"flow":"doc"}*pushCount(q){if(q>0)return yield this.buffer.substr(this.pos,q),this.pos+=q,q;return 0}*pushToIndex(q,$){let Z=this.buffer.slice(this.pos,q);if(Z)return yield Z,this.pos+=Z.length,Z.length;else if($)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(G9))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let q=this.flowLevel>0,$=this.charAt(1);if(G0($)||q&&S$.has($)){if(!q)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 q=this.pos+2,$=this.buffer[q];while(!G0($)&&$!==">")$=this.buffer[++q];return yield*this.pushToIndex($===">"?q+1:q,!1)}else{let q=this.pos+1,$=this.buffer[q];while($)if(yG.has($))$=this.buffer[++q];else if($==="%"&&Z5.has(this.buffer[q+1])&&Z5.has(this.buffer[q+2]))$=this.buffer[q+=3];else break;return yield*this.pushToIndex(q,!1)}}*pushNewline(){let q=this.buffer[this.pos];if(q===`
135
- `)return yield*this.pushCount(1);else if(q==="\r"&&this.charAt(1)===`
136
- `)return yield*this.pushCount(2);else return 0}*pushSpaces(q){let $=this.pos-1,Z;do Z=this.buffer[++$];while(Z===" "||q&&Z==="\t");let Q=$-this.pos;if(Q>0)yield this.buffer.substr(this.pos,Q),this.pos=$;return Q}*pushUntil(q){let $=this.pos,Z=this.buffer[$];while(!q(Z))Z=this.buffer[++$];return yield*this.pushToIndex($,!1)}}kG.Lexer=Q5});var U9=N((hG)=>{class X5{constructor(){this.lineStarts=[],this.addNewLine=(q)=>this.lineStarts.push(q),this.linePos=(q)=>{let $=0,Z=this.lineStarts.length;while($<Z){let X=$+Z>>1;if(this.lineStarts[X]<q)$=X+1;else Z=X}if(this.lineStarts[$]===q)return{line:$+1,col:1};if($===0)return{line:0,col:q};let Q=this.lineStarts[$-1];return{line:$,col:q-Q+1}}}}hG.LineCounter=X5});var H9=N((pG)=>{var uG=v("process"),z5=E$(),mG=Y9();function M0(q,$){for(let Z=0;Z<q.length;++Z)if(q[Z].type===$)return!0;return!1}function J5(q){for(let $=0;$<q.length;++$)switch(q[$].type){case"space":case"comment":case"newline":break;default:return $}return-1}function Y5(q){switch(q?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function b$(q){switch(q.type){case"document":return q.start;case"block-map":{let $=q.items[q.items.length-1];return $.sep??$.start}case"block-seq":return q.items[q.items.length-1].start;default:return[]}}function Qq(q){if(q.length===0)return[];let $=q.length;q:while(--$>=0)switch(q[$].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break q}while(q[++$]?.type==="space");return q.splice($,q.length)}function G5(q){if(q.start.type==="flow-seq-start"){for(let $ of q.items)if($.sep&&!$.value&&!M0($.start,"explicit-key-ind")&&!M0($.sep,"map-value-ind")){if($.key)$.value=$.key;if(delete $.key,Y5($.value))if($.value.end)Array.prototype.push.apply($.value.end,$.sep);else $.value.end=$.sep;else Array.prototype.push.apply($.start,$.sep);delete $.sep}}}class U5{constructor(q){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new mG.Lexer,this.onNewLine=q}*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(!$)yield*this.end()}*next(q){if(this.source=q,uG.env.LOG_TOKENS)console.log("|",z5.prettyToken(q));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=q.length;return}let $=z5.tokenType(q);if(!$){let Z=`Not a YAML token: ${q}`;yield*this.pop({type:"error",offset:this.offset,message:Z,source:q}),this.offset+=q.length}else if($==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=$,yield*this.step(),$){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+q.length);break;case"space":if(this.atNewLine&&q[0]===" ")this.indent+=q.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=q.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=q.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 q=this.peek(1);if(this.type==="doc-end"&&q?.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(!q)return yield*this.stream();switch(q.type){case"document":return yield*this.document(q);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(q);case"block-scalar":return yield*this.blockScalar(q);case"block-map":return yield*this.blockMap(q);case"block-seq":return yield*this.blockSequence(q);case"flow-collection":return yield*this.flowCollection(q);case"doc-end":return yield*this.documentEnd(q)}yield*this.pop()}peek(q){return this.stack[this.stack.length-q]}*pop(q){let $=q??this.stack.pop();if(!$)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield $;else{let Z=this.peek(1);if($.type==="block-scalar")$.indent="indent"in Z?Z.indent:0;else if($.type==="flow-collection"&&Z.type==="document")$.indent=0;if($.type==="flow-collection")G5($);switch(Z.type){case"document":Z.value=$;break;case"block-scalar":Z.props.push($);break;case"block-map":{let Q=Z.items[Z.items.length-1];if(Q.value){Z.items.push({start:[],key:$,sep:[]}),this.onKeyLine=!0;return}else if(Q.sep)Q.value=$;else{Object.assign(Q,{key:$,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:$});else Q.value=$;break}case"flow-collection":{let Q=Z.items[Z.items.length-1];if(!Q||Q.value)Z.items.push({start:[],key:$,sep:[]});else if(Q.sep)Q.value=$;else Object.assign(Q,{key:$,sep:[]});return}default:yield*this.pop(),yield*this.pop($)}if((Z.type==="document"||Z.type==="block-map"||Z.type==="block-seq")&&($.type==="block-map"||$.type==="block-seq")){let Q=$.items[$.items.length-1];if(Q&&!Q.sep&&!Q.value&&Q.start.length>0&&J5(Q.start)===-1&&($.indent===0||Q.start.every((X)=>X.type!=="comment"||X.indent<$.indent))){if(Z.type==="document")Z.end=Q.start;else Z.items.push({start:Q.start});$.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 q={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")q.start.push(this.sourceToken);this.stack.push(q);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(q){if(q.value)return yield*this.lineEnd(q);switch(this.type){case"doc-start":{if(J5(q.start)!==-1)yield*this.pop(),yield*this.step();else q.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":q.start.push(this.sourceToken);return}let $=this.startBlockValue(q);if($)this.stack.push($);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(q){if(this.type==="map-value-ind"){let $=b$(this.peek(2)),Z=Qq($),Q;if(q.end)Q=q.end,Q.push(this.sourceToken),delete q.end;else Q=[this.sourceToken];let X={type:"block-map",offset:q.offset,indent:q.indent,items:[{start:Z,key:q,sep:Q}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=X}else yield*this.lineEnd(q)}*blockScalar(q){switch(this.type){case"space":case"comment":case"newline":q.props.push(this.sourceToken);return;case"scalar":if(q.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let $=this.source.indexOf(`
137
- `)+1;while($!==0)this.onNewLine(this.offset+$),$=this.source.indexOf(`
138
- `,$)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(q){let $=q.items[q.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,$.value){let Z="end"in $.value?$.value.end:void 0;if((Array.isArray(Z)?Z[Z.length-1]:void 0)?.type==="comment")Z?.push(this.sourceToken);else q.items.push({start:[this.sourceToken]})}else if($.sep)$.sep.push(this.sourceToken);else $.start.push(this.sourceToken);return;case"space":case"comment":if($.value)q.items.push({start:[this.sourceToken]});else if($.sep)$.sep.push(this.sourceToken);else{if(this.atIndentedComment($.start,q.indent)){let Q=q.items[q.items.length-2]?.value?.end;if(Array.isArray(Q)){Array.prototype.push.apply(Q,$.start),Q.push(this.sourceToken),q.items.pop();return}}$.start.push(this.sourceToken)}return}if(this.indent>=q.indent){let Z=!this.onKeyLine&&this.indent===q.indent,Q=Z&&($.sep||$.explicitKey)&&this.type!=="seq-item-ind",X=[];if(Q&&$.sep&&!$.value){let z=[];for(let J=0;J<$.sep.length;++J){let G=$.sep[J];switch(G.type){case"newline":z.push(J);break;case"space":break;case"comment":if(G.indent>q.indent)z.length=0;break;default:z.length=0}}if(z.length>=2)X=$.sep.splice(z[1])}switch(this.type){case"anchor":case"tag":if(Q||$.value)X.push(this.sourceToken),q.items.push({start:X}),this.onKeyLine=!0;else if($.sep)$.sep.push(this.sourceToken);else $.start.push(this.sourceToken);return;case"explicit-key-ind":if(!$.sep&&!$.explicitKey)$.start.push(this.sourceToken),$.explicitKey=!0;else if(Q||$.value)X.push(this.sourceToken),q.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($.explicitKey)if(!$.sep)if(M0($.start,"newline"))Object.assign($,{key:null,sep:[this.sourceToken]});else{let z=Qq($.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:z,key:null,sep:[this.sourceToken]}]})}else if($.value)q.items.push({start:[],key:null,sep:[this.sourceToken]});else if(M0($.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(Y5($.key)&&!M0($.sep,"newline")){let z=Qq($.start),J=$.key,G=$.sep;G.push(this.sourceToken),delete $.key,delete $.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:z,key:J,sep:G}]})}else if(X.length>0)$.sep=$.sep.concat(X,this.sourceToken);else $.sep.push(this.sourceToken);else if(!$.sep)Object.assign($,{key:null,sep:[this.sourceToken]});else if($.value||Q)q.items.push({start:X,key:null,sep:[this.sourceToken]});else if(M0($.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else $.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||$.value)q.items.push({start:X,key:z,sep:[]}),this.onKeyLine=!0;else if($.sep)this.stack.push(z);else Object.assign($,{key:z,sep:[]}),this.onKeyLine=!0;return}default:{let z=this.startBlockValue(q);if(z){if(z.type==="block-seq"){if(!$.explicitKey&&$.sep&&!M0($.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)q.items.push({start:X});this.stack.push(z);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(q){let $=q.items[q.items.length-1];switch(this.type){case"newline":if($.value){let Z="end"in $.value?$.value.end:void 0;if((Array.isArray(Z)?Z[Z.length-1]:void 0)?.type==="comment")Z?.push(this.sourceToken);else q.items.push({start:[this.sourceToken]})}else $.start.push(this.sourceToken);return;case"space":case"comment":if($.value)q.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment($.start,q.indent)){let Q=q.items[q.items.length-2]?.value?.end;if(Array.isArray(Q)){Array.prototype.push.apply(Q,$.start),Q.push(this.sourceToken),q.items.pop();return}}$.start.push(this.sourceToken)}return;case"anchor":case"tag":if($.value||this.indent<=q.indent)break;$.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==q.indent)break;if($.value||M0($.start,"seq-item-ind"))q.items.push({start:[this.sourceToken]});else $.start.push(this.sourceToken);return}if(this.indent>q.indent){let Z=this.startBlockValue(q);if(Z){this.stack.push(Z);return}}yield*this.pop(),yield*this.step()}*flowCollection(q){let $=q.items[q.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(q.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!$||$.sep)q.items.push({start:[this.sourceToken]});else $.start.push(this.sourceToken);return;case"map-value-ind":if(!$||$.value)q.items.push({start:[],key:null,sep:[this.sourceToken]});else if($.sep)$.sep.push(this.sourceToken);else Object.assign($,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!$||$.value)q.items.push({start:[this.sourceToken]});else if($.sep)$.sep.push(this.sourceToken);else $.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let Q=this.flowScalar(this.type);if(!$||$.value)q.items.push({start:[],key:Q,sep:[]});else if($.sep)this.stack.push(Q);else Object.assign($,{key:Q,sep:[]});return}case"flow-map-end":case"flow-seq-end":q.end.push(this.sourceToken);return}let Z=this.startBlockValue(q);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===q.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=b$(Z),X=Qq(Q);G5(q);let z=q.end.splice(1,q.end.length);z.push(this.sourceToken);let J={type:"block-map",offset:q.offset,indent:q.indent,items:[{start:X,key:q,sep:z}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=J}else yield*this.lineEnd(q)}}flowScalar(q){if(this.onNewLine){let $=this.source.indexOf(`
139
- `)+1;while($!==0)this.onNewLine(this.offset+$),$=this.source.indexOf(`
140
- `,$)+1}return{type:q,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(q){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 $=b$(q),Z=Qq($);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 $=b$(q),Z=Qq($);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<=$)return!1;return q.every((Z)=>Z.type==="newline"||Z.type==="space")}*documentEnd(q){if(this.type!=="doc-mode"){if(q.end)q.end.push(this.sourceToken);else q.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(q){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(q.end)q.end.push(this.sourceToken);else q.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}pG.Parser=U5});var K5=N((tG)=>{var H5=e2(),cG=Rq(),Eq=Dq(),lG=U2(),nG=k(),aG=U9(),W5=H9();function V5(q){let $=q.prettyErrors!==!1;return{lineCounter:q.lineCounter||$&&new aG.LineCounter||null,prettyErrors:$}}function oG(q,$={}){let{lineCounter:Z,prettyErrors:Q}=V5($),X=new W5.Parser(Z?.addNewLine),z=new H5.Composer($),J=Array.from(z.compose(X.parse(q)));if(Q&&Z)for(let G of J)G.errors.forEach(Eq.prettifyError(q,Z)),G.warnings.forEach(Eq.prettifyError(q,Z));if(J.length>0)return J;return Object.assign([],{empty:!0},z.streamInfo())}function B5(q,$={}){let{lineCounter:Z,prettyErrors:Q}=V5($),X=new W5.Parser(Z?.addNewLine),z=new H5.Composer($),J=null;for(let G of z.compose(X.parse(q),!0,q.length))if(!J)J=G;else if(J.options.logLevel!=="silent"){J.errors.push(new Eq.YAMLParseError(G.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(Q&&Z)J.errors.forEach(Eq.prettifyError(q,Z)),J.warnings.forEach(Eq.prettifyError(q,Z));return J}function iG(q,$,Z){let Q=void 0;if(typeof $==="function")Q=$;else if(Z===void 0&&$&&typeof $==="object")Z=$;let X=B5(q,Z);if(!X)return null;if(X.warnings.forEach((z)=>lG.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 sG(q,$,Z){let Q=null;if(typeof $==="function"||Array.isArray($))Q=$;else if(Z===void 0&&$)Z=$;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(q===void 0){let{keepUndefined:X}=Z??$??{};if(!X)return}if(nG.isDocument(q)&&!Q)return q.toString(Z);return new cG.Document(q,Q,Z).toString(Z)}tG.parse=iG;tG.parseAllDocuments=oG;tG.parseDocument=B5;tG.stringify=sG});import{execFile as NZ}from"child_process";import{promisify as wZ}from"util";import{mkdtemp as i9,readdir as PZ,readFile as r$,rm as dq,cp as CZ,access as t$,stat as EZ,lstat as SZ,symlink as bZ,mkdir as xZ}from"fs/promises";import{join as V0,resolve as s9,relative as yZ,basename as fZ}from"path";import{homedir as t9}from"os";import{tmpdir as r9}from"os";import{readdir as IZ,readFile as AZ,stat as TZ}from"fs/promises";import{join as MZ}from"path";var jZ=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"]),RZ=524288;async function mq(q){let $=[];async function Z(Q,X){let z;try{z=await IZ(Q)}catch{return}for(let J of z){if(J===".git"||J==="node_modules")continue;let G=MZ(Q,J),Y=X?`${X}/${J}`:J;try{let H=await TZ(G);if(H.isDirectory())await Z(G,Y);else if(H.isFile()){let V=J.includes(".")?`.${J.split(".").pop().toLowerCase()}`:"";if(jZ.has(V))continue;if(H.size>RZ)continue;try{let W=await AZ(G,"utf-8");$.push({relPath:Y,content:W,lineCount:W.split(`
141
- `).length})}catch{}}}catch{continue}}}return await Z(q,""),$}class o9{selected;cursor;scrollOffset;pageSize;itemCount;filter;searchActive;filteredMap;constructor(q,$){this.selected=q.map((Z)=>Z.checked),this.cursor=1,this.scrollOffset=0,this.pageSize=$,this.itemCount=q.length,this.filter="",this.searchActive=!1,this.filteredMap=q.map((Z,Q)=>Q)}get totalRows(){return this.filteredMap.length+1}applyFilter(q){if(this.filter==="")this.filteredMap=q.map(($,Z)=>Z);else{let $=this.filter.toLowerCase();this.filteredMap=[];for(let Z=0;Z<q.length;Z++)if((q[Z].label.toLowerCase()+" "+(q[Z].hint?.toLowerCase()??"")).includes($))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 q=this.cursorToOriginalIndex();if(q>=0)this.selected[q]=!this.selected[q]}}toggleAll(){let q=this.filteredMap,Z=!q.every((Q)=>this.selected[Q]);for(let Q of q)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 q=[];for(let $=0;$<this.selected.length;$++)if(this.selected[$])q.push($);return q}getVisibleRange(){let q=this.scrollOffset,$=Math.min(this.scrollOffset+this.pageSize,this.totalRows);return{start:q,end:$}}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 DZ(q,$,Z){let Q=[];if(q.searchActive||q.filter!==""){let H=U.cyan("/"),V=q.filter,W=q.searchActive?U.cyan(""):"";if(Q.push(` ${H}${V}${W}`),q.filteredMap.length===0)Q.push(U.dim(" No matches found"));Q.push("")}let{start:X,end:z}=q.getVisibleRange();if(X>0)Q.push(U.dim(` ... ${X} more above`));for(let H=X;H<z;H++){let W=H===q.cursor?U.cyan(">"):" ";if(H===0){let B=q.filteredMap,L=B.length>0&&B.every((O)=>q.selected[O])?U.green("[*]"):"[ ]",K=q.filter!==""?`Select All Matching (${q.filteredMap.length})`:"Select All / Deselect All";Q.push(`${W} ${L} ${U.bold(K)}`)}else{let B=q.filteredMap[H-1],_=$[B],K=q.selected[B]?U.green("[*]"):"[ ]",O=`${W} ${K} `,F=7,A=U.bold(_.label),M=_.label.length;if(_.hint){let R=Z-7-M-2;if(R>10){let T=i$(_.hint,R);Q.push(`${O}${A} ${U.dim(T)}`)}else{let T=i$(_.label,Z-7);Q.push(`${O}${U.bold(T)}`)}}else{let R=i$(_.label,Z-7);Q.push(`${O}${U.bold(R)}`)}}}let J=q.totalRows-z;if(J>0)Q.push(U.dim(` ... ${J} more below`));let G=q.getSelectedIndices().length,Y=q.filter!==""?` matching: ${q.filteredMap.length}/${q.itemCount}`:"";if(Q.push(""),q.searchActive)Q.push(U.dim(` ${G} of ${q.itemCount} selected${Y} | Type to filter Esc Clear Enter Done searching`));else Q.push(U.dim(` ${G} of ${q.itemCount} selected${Y} | `+"↑/↓ Navigate Space Toggle a All / Search Enter Confirm Esc Cancel"));return Q}function i$(q,$){if($<=0)return"";if(q.length<=$)return q;if($<=3)return q.slice(0,$);return q.slice(0,$-3)+"..."}async function p0(q){let{items:$}=q,Z=q.pageSize??Math.min($.length+1,15),Q=new o9($,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 G=0;function Y(){let H=DZ(Q,$,J);if(G>0)X.write(`\x1B[${G}F`);let V=Math.max(H.length,G),W="";for(let B=0;B<V;B++)W+=`\x1B[2K${B<H.length?H[B]:""}
142
- `;X.write(W),G=V}return Y(),new Promise((H)=>{let V="",W=null;function B(){if(z.removeListener("data",K),typeof z.setRawMode==="function")z.setRawMode(!1);if(z.pause(),X.write("\x1B[?25h"),W)clearTimeout(W)}function _(O){B(),H(O)}function L(O){if(Q.searchActive){if(O==="\x1B"){Q.searchActive=!1,Q.filter="",Q.applyFilter($),Y();return}if(O==="\r"||O===`
143
- `){Q.searchActive=!1,Y();return}if(O===""||O==="\b"){if(Q.filter.length>0)Q.filter=Q.filter.slice(0,-1),Q.applyFilter($);else Q.searchActive=!1;Y();return}if(O==="\x03"){B(),process.kill(process.pid,"SIGINT");return}if(O==="\x1B[A"){Q.moveUp(),Y();return}if(O==="\x1B[B"){Q.moveDown(),Y();return}if(O===" "){Q.toggleCurrent(),Y();return}if(O.length===1&&O>=" "&&O<="~"){Q.filter+=O,Q.applyFilter($),Y();return}return}switch(O){case"\x1B[A":case"k":Q.moveUp(),Y();break;case"\x1B[B":case"j":Q.moveDown(),Y();break;case" ":Q.toggleCurrent(),Y();break;case"a":Q.toggleAll(),Y();break;case"/":Q.searchActive=!0,Y();break;case"\r":case`
144
- `:_(Q.getSelectedIndices());break;case"\x1B":if(Q.filter!=="")Q.filter="",Q.applyFilter($),Y();else _([]);break;case"":case"\b":if(Q.filter.length>0)Q.filter=Q.filter.slice(0,-1),Q.applyFilter($),Y();break;case"\x03":B(),process.kill(process.pid,"SIGINT");break}}function K(O){if(V.length>0){if(V+=O,W)clearTimeout(W);if(V.length>=3&&V[1]==="["){let A=V.slice(0,3),M=V.slice(3);if(V="",L(A),M)K(M);return}let F=V;V="",L("\x1B");for(let A=1;A<F.length;A++)L(F[A]);return}for(let F=0;F<O.length;F++){let A=O[F];if(A==="\x1B"){let M=O.slice(F);if(M.length>=3&&M[1]==="[")L(M.slice(0,3)),F+=2;else if(M.length>=2){V=M,W=setTimeout(()=>{let R=V;V="",L("\x1B");for(let T=1;T<R.length;T++)L(R[T])},50);return}else{V="\x1B",W=setTimeout(()=>{V="",L("\x1B")},50);return}}else L(A)}}z.on("data",K)})}var D0=wZ(NZ),kZ=/^[a-zA-Z0-9_-]+$/,vZ=/^[a-zA-Z0-9._-]+$/,hZ=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/,e9=128,gZ=/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/(.+))?\/?$/;function uZ(q){return q.startsWith("/")||q.startsWith("./")||q.startsWith(".\\")||q.startsWith("../")||q.startsWith("..\\")||q.startsWith("~/")||q.startsWith("~\\")||q==="~"||q==="."||q===".."||/^[a-zA-Z]:[/\\]/.test(q)}function mZ(q){let $;if(q==="~")$=t9();else if(q.startsWith("~/")||q.startsWith("~\\"))$=s9(t9(),q.slice(2));else $=s9(q);let Z=fZ($);return E(`install: parsed local source -> path=${$}`),{owner:"local",repo:Z,ref:null,subpath:null,cloneUrl:"",sshCloneUrl:"",isLocal:!0,localPath:$}}function d0(q){if(uZ(q))return mZ(q);let $=gZ.exec(q);if($){let[,W,B,_]=$,L=B.endsWith(".git")?B.slice(0,-4):B;q=`github:${W}/${L}${_?`#${_}`:""}`}if(!q.startsWith("github:"))throw Error(`Invalid source format. Got: "${q}"
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=qh.stringify;Z.visit=Fh.visit;Z.BOM=ar;Z.DOCUMENT=lr;Z.FLOW_END=cr;Z.SCALAR=ur;Z.isCollection=jh;Z.isScalar=Bh;Z.prettyToken=Uh;Z.tokenType=Vh});var pr=A(cc=>{"use strict";var Kt=Zs();function ce(e){switch(e){case void 0:case" ":case`
119
+ `:case"\r":case" ":return!0;default:return!1}}var lc=new Set("0123456789ABCDEFabcdef"),Kh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),ei=new Set(",[]{}"),Jh=new Set(` ,[]{}
120
+ \r `),fr=e=>!e||Jh.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&&ei.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&&ei.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&&ei.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&&ei.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(Kh.has(s))s=this.buffer[++t];else if(s==="%"&&lc.has(this.buffer[t+1])&&lc.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)}};cc.Lexer=dr});var hr=A(uc=>{"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}}}};uc.LineCounter=mr});var yr=A(hc=>{"use strict";var Hh=Xt("process"),fc=Zs(),Yh=pr();function Ee(e,t){for(let s=0;s<e.length;++s)if(e[s].type===t)return!0;return!1}function dc(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 mc(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 ti(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 pc(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,mc(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 Yh.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,Hh.env.LOG_TOKENS&&console.log("|",fc.prettyToken(t)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=t.length;return}let s=fc.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"&&pc(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&&dc(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":{dc(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=ti(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(mc(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=ti(i),r=at(n);pc(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=ti(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=ti(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())}}};hc.Parser=gr});var vc=A(Ht=>{"use strict";var gc=ir(),Gh=_t(),Jt=jt(),Wh=en(),zh=D(),Qh=hr(),yc=yr();function bc(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new Qh.LineCounter||null,prettyErrors:t}}function Xh(e,t={}){let{lineCounter:s,prettyErrors:i}=bc(t),n=new yc.Parser(s?.addNewLine),r=new gc.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 wc(e,t={}){let{lineCounter:s,prettyErrors:i}=bc(t),n=new yc.Parser(s?.addNewLine),r=new gc.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 Zh(e,t,s){let i;typeof t=="function"?i=t:s===void 0&&t&&typeof t=="object"&&(s=t);let n=wc(e,s);if(!n)return null;if(n.warnings.forEach(r=>Wh.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 eg(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 zh.isDocument(e)&&!i?e.toString(s):new Gh.Document(e,i,s).toString(s)}Ht.parse=Zh;Ht.parseAllDocuments=Xh;Ht.parseDocument=wc;Ht.stringify=eg});var wr=A(_=>{"use strict";var tg=ir(),sg=_t(),ig=_n(),br=jt(),ng=vt(),Ae=D(),rg=Se(),og=F(),ag=xe(),lg=Ce(),cg=Zs(),ug=pr(),fg=hr(),dg=yr(),si=vc(),kc=gt();_.Composer=tg.Composer;_.Document=sg.Document;_.Schema=ig.Schema;_.YAMLError=br.YAMLError;_.YAMLParseError=br.YAMLParseError;_.YAMLWarning=br.YAMLWarning;_.Alias=ng.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=rg.Pair;_.Scalar=og.Scalar;_.YAMLMap=ag.YAMLMap;_.YAMLSeq=lg.YAMLSeq;_.CST=cg;_.Lexer=ug.Lexer;_.LineCounter=fg.LineCounter;_.Parser=dg.Parser;_.parse=si.parse;_.parseAllDocuments=si.parseAllDocuments;_.parseDocument=si.parseDocument;_.stringify=si.stringify;_.visit=kc.visit;_.visitAsync=kc.visitAsync});import{execFile as kf}from"child_process";import{promisify as Sf}from"util";import{mkdtemp as $o,readdir as $f,readFile as Di,rm as is,cp as xf,access as Mi,stat as Cf,lstat as Ef,symlink as Af,mkdir as Pf}from"fs/promises";import{join as pe,resolve as xo,relative as Nf,basename as If}from"path";import{homedir as Co}from"os";import{tmpdir as Eo}from"os";import{readdir as mf,readFile as hf,stat as gf}from"fs/promises";import{join as yf}from"path";var bf=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"]),wf=512*1024;async function ts(e){let t=[];async function s(i,n){let r;try{r=await mf(i)}catch{return}for(let o of r){if(o===".git"||o==="node_modules")continue;let a=yf(i,o),l=n?`${n}/${o}`:o;try{let c=await gf(a);if(c.isDirectory())await s(a,l);else if(c.isFile()){let d=o.includes(".")?`.${o.split(".").pop().toLowerCase()}`:"";if(bf.has(d)||c.size>wf)continue;try{let f=await hf(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 vf(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,g=p.length>0&&p.every(y=>e.selected[y])?u.green("[*]"):"[ ]",m=e.filter!==""?`Select All Matching (${e.filteredMap.length})`:"Select All / Deselect All";i.push(`${f} ${g} ${u.bold(m)}`)}else{let p=e.filteredMap[c-1],h=t[p],m=e.selected[p]?u.green("[*]"):"[ ]",y=`${f} ${m} `,b=7,w=u.bold(h.label),$=h.label.length;if(h.hint){let x=s-b-$-2;if(x>10){let k=Ri(h.hint,x);i.push(`${y}${w} ${u.dim(k)}`)}else{let k=Ri(h.label,s-b);i.push(`${y}${u.bold(k)}`)}}else{let x=Ri(h.label,s-b);i.push(`${y}${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=vf(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",m),typeof r.setRawMode=="function"&&r.setRawMode(!1),r.pause(),n.write("\x1B[?25h"),f&&clearTimeout(f)}function h(y){p(),c(y)}function g(y){if(i.searchActive){if(y==="\x1B"){i.searchActive=!1,i.filter="",i.applyFilter(t),l();return}if(y==="\r"||y===`
144
+ `){i.searchActive=!1,l();return}if(y==="\x7F"||y==="\b"){i.filter.length>0?(i.filter=i.filter.slice(0,-1),i.applyFilter(t)):i.searchActive=!1,l();return}if(y===""){p(),process.kill(process.pid,"SIGINT");return}if(y==="\x1B[A"){i.moveUp(),l();return}if(y==="\x1B[B"){i.moveDown(),l();return}if(y===" "){i.toggleCurrent(),l();return}if(y.length===1&&y>=" "&&y<="~"){i.filter+=y,i.applyFilter(t),l();return}return}switch(y){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
+ `:h(i.getSelectedIndices());break;case"\x1B":i.filter!==""?(i.filter="",i.applyFilter(t),l()):h([]);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 m(y){if(d.length>0){if(d+=y,f&&clearTimeout(f),d.length>=3&&d[1]==="["){let w=d.slice(0,3),$=d.slice(3);d="",g(w),$&&m($);return}let b=d;d="",g("\x1B");for(let w=1;w<b.length;w++)g(b[w]);return}for(let b=0;b<y.length;b++){let w=y[b];if(w==="\x1B"){let $=y.slice(b);if($.length>=3&&$[1]==="[")g($.slice(0,3)),b+=2;else if($.length>=2){d=$,f=setTimeout(()=>{let x=d;d="",g("\x1B");for(let k=1;k<x.length;k++)g(x[k])},50);return}else{d="\x1B",f=setTimeout(()=>{d="",g("\x1B")},50);return}}else g(w)}}r.on("data",m)})}var Re=Sf(kf),Lf=/^[a-zA-Z0-9_-]+$/,Rf=/^[a-zA-Z0-9._-]+$/,Of=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/,Ao=128,Tf=/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/(.+))?\/?$/;function Mf(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 Df(e){let t;e==="~"?t=Co():e.startsWith("~/")||e.startsWith("~\\")?t=xo(Co(),e.slice(2)):t=xo(e);let s=If(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(Mf(e))return Df(e);let t=Tf.exec(e);if(t){let[,f,p,h]=t,g=p.endsWith(".git")?p.slice(0,-4):p;e=`github:${f}/${g}${h?`#${h}`:""}`}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=q.slice(7),Q=Z.indexOf("#"),X,z=null,J=null;if(Q!==-1){X=Z.slice(0,Q);let W=Z.slice(Q+1);if(!W)throw Error("Invalid source: ref cannot be empty after #");let B=W.indexOf(":");if(B!==-1){if(z=W.slice(0,B),!z)throw Error("Invalid source: ref cannot be empty before :");J=W.slice(B+1)||null}else z=W}else{let W=Z.indexOf(":");if(W!==-1)X=Z.slice(0,W),J=Z.slice(W+1)||null;else X=Z}let G=X.indexOf("/");if(G===-1)throw Error(`Invalid source: format must be github:owner/repo. Got: "${q}"`);let Y=X.slice(0,G),H=X.slice(G+1);if(!Y)throw Error("Invalid source: owner cannot be empty");if(!H)throw Error("Invalid source: repo cannot be empty");if(!kZ.test(Y))throw Error(`Invalid source: owner contains invalid characters: "${Y}". Allowed: [a-zA-Z0-9_-]`);if(!vZ.test(H))throw Error(`Invalid source: repo contains invalid characters: "${H}". Allowed: [a-zA-Z0-9._-]`);let V={owner:Y,repo:H,ref:z,subpath:J,cloneUrl:`https://github.com/${Y}/${H}.git`,sshCloneUrl:`git@github.com:${Y}/${H}.git`};return E(`install: parsed source -> owner=${Y} repo=${H} ref=${z} subpath=${J}`),V}async function e$(q){if(q.subpath!==null||!q.ref||!q.ref.includes("/"))return q;try{let{stdout:$}=await D0("git",["ls-remote","--heads","--tags",q.cloneUrl],{timeout:15000}),Z=new Set;for(let X of $.split(`
152
- `)){let z=X.match(/\trefs\/(?:heads|tags)\/(.+)$/);if(z)Z.add(z[1])}let Q=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}"`),{...q,ref:z,subpath:J||null}}}}catch($){E(`install: ls-remote failed, treating entire ref as branch: ${$}`)}return q}function N0(q){if(!q)throw Error("Invalid skill name: name cannot be empty");if(q.includes("\x00"))throw Error("Invalid skill name: contains unsafe characters (null byte)");if(q.includes(".."))throw Error("Invalid skill name: contains unsafe characters (..)");if(q.includes("/")||q.includes("\\"))throw Error("Invalid skill name: contains unsafe characters (path separator)");if(q.startsWith("."))throw Error("Invalid skill name: must not start with a dot");if(q.length>e9)throw Error(`Invalid skill name: exceeds maximum length of ${e9} characters`);if(!hZ.test(q))throw Error(`Invalid skill name: "${q}" does not match allowed pattern [a-zA-Z0-9][a-zA-Z0-9._-]*`);return q}function pZ(q){let $=q.split(/[/\\]/).filter(Boolean),Z=$.length>0?$[$.length-1]:q;return N0(Z)}function $4(q){let $=new Map;for(let Z of q){let Q=pZ(Z),X=$.get(Q);if(X)X.push(Z);else $.set(Q,[Z])}return[...$.entries()].filter(([,Z])=>Z.length>1).map(([Z,Q])=>({name:Z,paths:Q}))}async function c0(){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 dZ(q){if(q.killed)return!1;let $=(q.stderr||q.message||"").toLowerCase();return $.includes("authentication failed")||$.includes("could not read username")||$.includes("repository not found")||$.includes("returned error: 403")||$.includes("returned error: 401")||$.includes("terminal prompts disabled")||$.includes("permission denied")}function pq(q){return q.killed?"Clone timed out after 60 seconds":`Clone failed: ${q.stderr||q.message}`}async function s$(q,$,Z){if($!==null&&/^[0-9a-f]{40}$/i.test($))return await D0("git",["clone","--no-checkout",q,Z],{timeout:60000}),await D0("git",["checkout",$],{cwd:Z,timeout:30000}),Z;let X=["clone","--depth","1"];if($)X.push("--branch",$);return X.push(q,Z),await D0("git",X,{timeout:60000}),Z}async function l0(q,$="auto"){E(`install: cloning ${q.owner}/${q.repo}${q.ref?` (ref: ${q.ref})`:""} (transport: ${$})`);let Z=await i9(V0(r9(),"asm-install-"));if($==="ssh"||$==="https"){let Q=$==="ssh"?q.sshCloneUrl:q.cloneUrl;try{return await s$(Q,q.ref,Z)}catch(X){throw await Q0(Z),Error(pq(X))}}try{return await s$(q.cloneUrl,q.ref,Z)}catch(Q){if(!dZ(Q))throw await Q0(Z),Error(pq(Q));E("install: HTTPS clone failed with auth error, retrying with SSH..."),await Q0(Z);let X=await i9(V0(r9(),"asm-install-"));try{return await s$(q.sshCloneUrl,q.ref,X)}catch(z){throw await Q0(X),Error(`Clone failed with both transports:
153
- HTTPS: ${pq(Q)}
154
- SSH: ${pq(z)}`)}}}async function w0(q){let $=V0(q,"SKILL.md"),Z;try{Z=await r$($,"utf-8")}catch{throw Error("Not a valid skill: SKILL.md not found in repository root")}let Q=s(Z),X=q.split(/[/\\]/).pop()||"unknown",z=Q.name||X,J=z0(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 lq(q,$=5){let Z=[];async function Q(X,z,J){let G;try{G=await PZ(X)}catch{return}for(let Y of G){if(Y===".git"||Y==="node_modules")continue;let H=V0(X,Y);try{if(!(await EZ(H)).isDirectory())continue}catch{continue}let V=z?`${z}/${Y}`:Y,W=J+1,B=V0(H,"SKILL.md");try{let _=await r$(B,"utf-8"),L=s(_);Z.push({relPath:V,name:L.name||Y,version:z0(L),description:(L.description||"").replace(/\s*\n\s*/g," ").trim(),effort:L.effort||L["metadata.effort"]||void 0,license:(L.license||"").trim(),creator:(L["metadata.creator"]||"").trim(),compatibility:(L.compatibility||"").trim(),allowedTools:q4(L),tokenCount:cq(_)})}catch{if(W<$)await Q(H,V,W)}}}return await Q(q,"",0),Z.sort((X,z)=>X.name.localeCompare(z.name)),Z}var cZ=[{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 Z4(q){let $=[],Z=await mq(q);for(let{relPath:Q,content:X}of Z){let z=X.split(`
155
- `);for(let J=0;J<z.length;J++)for(let{category:G,pattern:Y}of cZ)if(Y.test(z[J])){let H=z[J].trim();$.push({category:G,file:Q,line:J+1,match:H.length>100?H.slice(0,100)+"":H})}}return $}async function nq(q){let $=q.source.isLocal?`local:${q.source.localPath}`:`github:${q.source.owner}/${q.source.repo}${q.source.ref?`#${q.source.ref}`:""}${q.source.subpath?`:${q.source.subpath}`:""}`;if(q.force)try{await t$(q.targetDir),await dq(q.targetDir,{recursive:!0,force:!0})}catch{}let Z=q.sourceDir;try{await CZ(Z,q.targetDir,{recursive:!0})}catch(G){throw Error(`Failed to install: ${G.message}`)}let Q=V0(q.targetDir,".git");try{await dq(Q,{recursive:!0,force:!0})}catch{}E(`install: copied files to ${q.targetDir}`);let X=V0(q.targetDir,"SKILL.md");try{await t$(X)}catch{throw Error("Installation verification failed: SKILL.md not found at target")}let z=await r$(X,"utf-8"),J=s(z);return{success:!0,path:q.targetDir,name:J.name||q.skillName,version:z0(J),provider:q.providerLabel,source:$}}async function Q4(q,$){let Z=await nq(q);for(let Q of $){if(Q.name===q.providerName)continue;let X=q.scope==="project"?Q.project:Q.global,z=X0(X),J=V0(z,q.skillName);await xZ(z,{recursive:!0});try{if((await SZ(J)).isSymbolicLink())await dq(J);else{E(`install: skipping ${J} existing non-symlink directory`);continue}}catch{}let G=yZ(z,q.targetDir);await bZ(G,J,"dir"),E(`install: symlinked ${J} -> ${G}`)}return Z.provider=`All (${$.map((Q)=>Q.label).join(", ")})`,Z}async function Q0(q){try{await dq(q,{recursive:!0,force:!0})}catch{}}async function X4(){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 z4(q,$){let Z=["--yes","skills","add",q];if($)Z.push("--skill",$);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 J4(q){if(q.isLocal)return q.localPath;let $=`https://github.com/${q.owner}/${q.repo}`;if(q.ref)return`${$}/tree/${q.ref}${q.subpath?`/${q.subpath}`:""}`;return $}async function n0(q,$,Z){let Q=q.providers.filter((_)=>_.enabled);if($==="all"){if(Q.length===0)throw Error("No providers are enabled. Enable a provider in your config.");return{provider:Q.find((L)=>L.name==="agents")||Q[0],allProviders:Q}}if($){let _=q.providers.find((L)=>L.name===$);if(!_){let L=q.providers.map((K)=>K.name).join(", ");throw Error(`Unknown provider: "${$}". Valid providers: ${L}, all`)}if(!_.enabled)throw Error(`Provider "${$}" 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((L)=>L.name).join(", ");throw Error(`--tool (or --provider) is required in non-interactive mode. Available: ${_}, all`)}let X=q.preferences.selectedTools,J=X&&X.length>0?new Set(X):null,G=q.providers.map((_)=>({label:`${_.label} (${_.name})`,hint:_.global,checked:J?J.has(_.name):_.name==="agents"})),Y=await p0({items:G});if(Y.length===0)throw Error("No tools selected. Aborting.");let H=Y.map((_)=>q.providers[_]),V=H.map((_)=>_.name),{saveSelectedTools:W}=await import("./chunk-vgzgtfy6.js");if(await W(V),H.length===1)return{provider:H[0],allProviders:null};return{provider:H.find((_)=>_.name==="agents")||H[0],allProviders:H}}function q2(q,$,Z,Q,X,z,J="global"){let G=J==="project"?X.project:X.global,Y=X0(G),H=V0(Y,Q);return{source:q,tempDir:$,sourceDir:Z,targetDir:H,skillName:Q,force:z,providerName:X.name,providerLabel:X.label,scope:J}}async function G4(q,$){try{if(await t$(q),E(`install: target ${q} conflict (exists)${$?", force overwrite":""}`),!$)throw Error(`Skill already exists at: ${q}
156
- Use --force to overwrite.`)}catch(Z){if(Z.message?.includes("--force"))throw Z;E(`install: target ${q} no conflict`)}}import{readFile as uY}from"fs/promises";import{join as mY}from"path";var ZY=e2(),QY=Rq(),XY=v2(),W9=Dq(),zY=Uq(),j0=k(),JY=F0(),GY=u(),YY=A0(),UY=T0(),wK=E$(),HY=Y9(),WY=U9(),VY=H9(),x$=K5(),_5=Gq();var BY=ZY.Composer,KY=QY.Document,_Y=XY.Schema,LY=W9.YAMLError,OY=W9.YAMLParseError,FY=W9.YAMLWarning,IY=zY.Alias,AY=j0.isAlias,TY=j0.isCollection,MY=j0.isDocument,jY=j0.isMap,RY=j0.isNode,DY=j0.isPair,NY=j0.isScalar,wY=j0.isSeq,PY=JY.Pair,CY=GY.Scalar,EY=YY.YAMLMap,SY=UY.YAMLSeq;var bY=HY.Lexer,xY=WY.LineCounter,yY=VY.Parser,V9=x$.parse,fY=x$.parseAllDocuments,kY=x$.parseDocument,vY=x$.stringify,hY=_5.visit,gY=_5.visitAsync;var L5=500;function pY(q){let $=q.split(`
157
- `),Z=!1,Q=!1;for(let X of $){if(X.trim()==="---")if(!Z){Z=!0;continue}else{Q=!0;continue}if(Q&&X.trim().length>0)return!0}return!1}function dY(q){let $=q.split(`
158
- `),Z=-1;for(let Q=0;Q<$.length;Q++)if($[Q].trim()==="---")if(Z===-1)Z=Q+1;else return $.slice(Z,Q).join(`
159
- `);return null}function cY(q){let $=dY(q);if($===null)return null;try{return V9($),null}catch(Z){return Z.message||"invalid YAML"}}async function O5(q){let $=[];if(!q.description||q.description.trim()==="")$.push({category:"missing-description",message:"Skill has no description in SKILL.md frontmatter"});if(!q.version||q.version==="0.0.0")$.push({category:"missing-version",message:"Skill has no version (or default 0.0.0) in SKILL.md frontmatter"});try{let Q=mY(q.path,"SKILL.md"),X=await uY(Q,"utf-8");if(!pY(X))$.push({category:"empty-body",message:"SKILL.md contains only frontmatter with no body content"});let z=cY(X);if(z)$.push({category:"invalid-yaml",message:`SKILL.md has invalid YAML frontmatter: ${z}`})}catch{}let Z=q.fileCount;if(Z!==void 0&&Z>L5)$.push({category:"high-file-count",message:`Skill has ${Z} files (threshold: ${L5})`});return $}import{join as rY}from"path";import{homedir as eY}from"os";import{readFile as lY,writeFile as nY,mkdir as aY}from"fs/promises";import{dirname as oY}from"path";async function iY(q){try{let $=await lY(q,"utf-8"),Z=JSON.parse($);if(!Z.fetched_at||Z.data===void 0||Z.data===null)return null;return Z}catch{return null}}async function sY(q,$,Z){let Q={fetched_at:new Date().toISOString(),ttl_seconds:Z,data:$};try{await aY(oY(q),{recursive:!0}),await nY(q,JSON.stringify(Q,null,2),"utf-8"),E(`http: wrote cache -> ${q}`)}catch(X){E(`http: failed to write cache: ${X}`)}}function tY(q){let $=new Date(q.fetched_at).getTime();return(Date.now()-$)/1000<q.ttl_seconds}async function F5(q,$,Z={}){let Q=Z.ttl??3600,X=Z.noCache??!1,z=await iY($);if(z&&!X&&tY(z))return E(`http: cache hit (fresh) -> ${$}`),z.data;try{E(`http: fetching -> ${q}`);let J=await fetch(q);if(!J.ok)throw Error(`HTTP ${J.status}: ${J.statusText}`);let G=await J.json();return await sY($,G,Q),G}catch(J){if(E(`http: fetch failed: ${J}`),z)return E(`http: using stale cache as fallback -> ${$}`),z.data;return null}}var qU=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,$U=/^[a-zA-Z0-9_-]+$/,T5=/^https:\/\/github\.com\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/,ZU=/^[0-9a-f]{40}$/,QU=/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/,XU=/^[a-z0-9-]+$/,zU=/^sha256:[0-9a-f]{64}$/,I5=["pass","warning","dangerous"];function y$(q){let $=[];if(!q||typeof q!=="object"||Array.isArray(q))return[{field:"(root)",message:"manifest must be a non-null object"}];let Z=q,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))$.push({field:J,message:`unknown property "${J}" is not allowed`});let X=[{field:"name",pattern:qU,maxLength:128},{field:"author",pattern:$U,maxLength:39},{field:"description",maxLength:256},{field:"repository",pattern:T5},{field:"commit",pattern:ZU},{field:"published_at"}];for(let{field:J,pattern:G,maxLength:Y}of X){let H=Z[J];if(H===void 0||H===null){$.push({field:J,message:`required field "${J}" is missing`});continue}if(typeof H!=="string"){$.push({field:J,message:`"${J}" must be a string`});continue}if(H.length===0){$.push({field:J,message:`"${J}" must not be empty`});continue}if(Y&&H.length>Y)$.push({field:J,message:`"${J}" exceeds maximum length of ${Y}`});if(G&&!G.test(H))$.push({field:J,message:`"${J}" does not match required pattern`})}let z=Z.security_verdict;if(z===void 0||z===null)$.push({field:"security_verdict",message:'required field "security_verdict" is missing'});else if(typeof z!=="string"||!I5.includes(z))$.push({field:"security_verdict",message:`"security_verdict" must be one of: ${I5.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))$.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"||!QU.test(Z.version))$.push({field:"version",message:'"version" must be a valid semver string'})}if(Z.license!==void 0){if(typeof Z.license!=="string")$.push({field:"license",message:'"license" must be a string'});else if(Z.license.length>64)$.push({field:"license",message:'"license" exceeds maximum length of 64'})}if(Z.tags!==void 0)if(!Array.isArray(Z.tags))$.push({field:"tags",message:'"tags" must be an array'});else{if(Z.tags.length>10)$.push({field:"tags",message:'"tags" has more than 10 items'});let J=new Set;for(let G=0;G<Z.tags.length;G++){let Y=Z.tags[G];if(typeof Y!=="string"){$.push({field:`tags[${G}]`,message:"tag must be a string"});continue}if(Y.length>32)$.push({field:`tags[${G}]`,message:`tag "${Y}" exceeds maximum length of 32`});if(!XU.test(Y))$.push({field:`tags[${G}]`,message:`tag "${Y}" does not match pattern (lowercase alphanumeric and hyphens)`});if(J.has(Y))$.push({field:`tags[${G}]`,message:`duplicate tag "${Y}"`});J.add(Y)}}if(Z.checksum!==void 0){if(typeof Z.checksum!=="string"||!zU.test(Z.checksum))$.push({field:"checksum",message:'"checksum" must match pattern sha256:<64-hex-chars>'})}if(Z.skill_path!==void 0){if(typeof Z.skill_path!=="string")$.push({field:"skill_path",message:'"skill_path" must be a string'});else if(Z.skill_path.length===0)$.push({field:"skill_path",message:'"skill_path" must not be empty'});else if(Z.skill_path.length>256)$.push({field:"skill_path",message:'"skill_path" exceeds maximum length of 256'});else if(/\.\.|^\//.test(Z.skill_path))$.push({field:"skill_path",message:'"skill_path" must not contain ".." or start with "/"'})}return $}function JU(q,$){let Z=q.length,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 G=1;G<=Q;G++){let Y=q[J-1]===$[G-1]?0:1;z[G]=Math.min(X[G]+1,z[G-1]+1,X[G-1]+Y)}[X,z]=[z,X]}return X[Q]}function GU(q,$,Z=2){let Q=[];for(let X of $){if(q===X)continue;let z=JU(q,X);if(z<=Z)Q.push({existingName:X,distance:z})}return Q.sort((X,z)=>X.distance-z.distance)}var B9=process.env.ASM_REGISTRY_URL??"https://raw.githubusercontent.com/luongnv89/asm-registry/main/index.json",YU=process.env.ASM_REGISTRY_CACHE??rY(eY(),".config","agent-skill-manager","registry-cache.json"),UU=3600;function K9(q){if(q.startsWith("github:")||q.startsWith("http://")||q.startsWith("https://")||q.startsWith("/")||q.startsWith("./")||q.startsWith("../")||q.startsWith("~/")||q==="~"||q==="."||q==="..")return!1;let $=(q.match(/\//g)||[]).length;if($>1)return!1;if($===1){let[Z,Q]=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(q)}function _9(q){if(!K9(q))return!1;return q.includes("/")}async function L9(q){let $=await F5(B9,YU,{ttl:UU,noCache:q?.noCache});if(!$)return null;if(typeof $!=="object"||!Array.isArray($.manifests)||typeof $.generated_at!=="string")return E("registry: fetched index has invalid structure discarding"),null;let Z=[];for(let Q of $.manifests){let X=y$(Q);if(X.length>0){E(`registry: dropping invalid manifest entry (${Q?.name??"unknown"}): ${X.map((z)=>z.message).join(", ")}`);continue}if(!T5.test(Q.repository)){E(`registry: dropping manifest with unexpected repository URL: ${Q.repository}`);continue}Z.push(Q)}return{generated_at:$.generated_at,manifests:Z}}function HU(q,$){return $.manifests.filter((Z)=>Z.name.toLowerCase()===q.toLowerCase())}function WU(q,$,Z){return Z.manifests.find((Q)=>Q.author.toLowerCase()===q.toLowerCase()&&Q.name.toLowerCase()===$.toLowerCase())??null}function A5(q,$,Z=5){return GU(q,$.manifests.map((X)=>X.name),3).slice(0,Z).map((X)=>X.existingName)}async function M5(q,$){let Z=await L9($);if(!Z)return E("registry: failed to fetch index skipping registry resolution"),{resolved:null,multipleMatches:[],suggestions:[]};if(_9(q)){let[z,J]=q.split("/"),G=WU(z,J,Z);if(G)return{resolved:{manifest:G,source:"registry"},multipleMatches:[],suggestions:[]};let Y=A5(J,Z);return{resolved:null,multipleMatches:[],suggestions:Y}}let Q=HU(q,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=A5(q,Z);return{resolved:null,multipleMatches:[],suggestions:X}}function j5(q){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:$}}import{readFile as VU,access as D5,mkdir as BU,cp as R5,rm as KU,symlink as _U}from"fs/promises";import{join as N5,basename as LU}from"path";function OU(q){let $=[];if(typeof q!=="object"||q===null||Array.isArray(q))return{valid:!1,errors:["Manifest must be a JSON object."]};let Z=q;if(Z.version!==1)$.push(`Unsupported manifest version: ${JSON.stringify(Z.version)}. Expected 1.`);if(typeof Z.exportedAt!=="string")$.push("Missing or invalid 'exportedAt' field.");if(!Array.isArray(Z.skills))return $.push("Missing or invalid 'skills' array."),{valid:!1,errors:$};for(let Q=0;Q<Z.skills.length;Q++){let X=Z.skills[Q];if(typeof X!=="object"||X===null){$.push(`skills[${Q}]: must be an object.`);continue}let z=X;if(typeof z.name!=="string"||!z.name)$.push(`skills[${Q}]: missing or empty 'name'.`);if(typeof z.dirName!=="string"||!z.dirName)$.push(`skills[${Q}]: missing or empty 'dirName'.`);if(typeof z.provider!=="string"||!z.provider)$.push(`skills[${Q}]: missing or empty 'provider'.`);if(z.scope!=="global"&&z.scope!=="project")$.push(`skills[${Q}]: invalid 'scope' "${String(z.scope)}". Must be "global" or "project".`)}return{valid:$.length===0,errors:$}}async function w5(q){let $;try{$=await VU(q,"utf-8")}catch(X){if(X?.code==="ENOENT")throw Error(`Manifest file not found: ${q}`);throw Error(`Failed to read manifest file: ${X.message}`)}let Z;try{Z=JSON.parse($)}catch{throw Error("Manifest file is not valid JSON.")}let Q=OU(Z);if(!Q.valid)throw Error(`Invalid manifest:
160
- ${Q.errors.join(`
161
- `)}`);return Z}async function FU(q){try{return await D5(q),!0}catch{return!1}}function IU(q,$){return q.providers.find((Z)=>Z.name===$&&Z.enabled)}function AU(q,$,Z,Q){let X=IU(q,$);if(!X)return null;let z=Z==="global"?X.global:X.project,J=X0(z),G=LU(Q);if(!G||G==="."||G==="..")return null;return N5(J,G)}function TU(q,$){let Z=q.find((Q)=>Q.dirName===$.dirName&&Q.provider===$.provider);if(Z)return Z;return q.find((Q)=>Q.dirName===$.dirName)||null}async function P5(q,$,Z){let Q=Z?.config??await h(),X=Z?.installedSkills??await a(Q,"both"),z=[];for(let H of q.skills){if($.scopeFilter!=="both"&&H.scope!==$.scopeFilter){E(`import: skipping "${H.name}" scope "${H.scope}" filtered out`);continue}let V=AU(Q,H.provider,H.scope,H.dirName);if(!V){z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"failed",reason:`Provider "${H.provider}" not found or not enabled.`});continue}let W=await FU(V);if(W&&!$.force){z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"skipped",reason:"Already installed.",path:V});continue}if($.dryRun){z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"dry-run",reason:W?"Would overwrite (--force).":"Would install.",path:V});continue}let B=TU(X,H);if(!B){z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"failed",reason:"No installed source found. Install the skill first with: asm install <source>"});continue}try{if(await BU(N5(V,".."),{recursive:!0}),W)await KU(V,{recursive:!0,force:!0});if(H.isSymlink&&H.symlinkTarget)try{await D5(H.symlinkTarget),await _U(H.symlinkTarget,V),E(`import: symlinked "${H.name}" -> ${H.symlinkTarget} at ${V}`)}catch{await R5(B.realPath,V,{recursive:!0}),E(`import: symlink target unreachable, copied "${H.name}" from ${B.realPath} to ${V}`)}else await R5(B.realPath,V,{recursive:!0}),E(`import: copied "${H.name}" from ${B.realPath} to ${V}`);z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"installed",path:V})}catch(_){z.push({skillName:H.name,provider:H.provider,scope:H.scope,status:"failed",reason:`Copy failed: ${_.message}`})}}let J=z.filter((H)=>H.status==="installed").length,G=z.filter((H)=>H.status==="skipped").length,Y=z.filter((H)=>H.status==="failed").length;return{total:z.length,installed:J,skipped:G,failed:Y,results:z}}import{mkdir as MU,writeFile as jU,access as RU}from"fs/promises";import{join as DU}from"path";function NU(q){return`---
162
- name: ${q}
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(!Lf.test(l))throw new Error(`Invalid source: owner contains invalid characters: "${l}". Allowed: [a-zA-Z0-9_-]`);if(!Rf.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 ns(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>Ao)throw new Error(`Invalid skill name: exceeds maximum length of ${Ao} characters`);if(!Of.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 _f(e){let t=e.split(/[/\\]/).filter(Boolean),s=t.length>0?t[t.length-1]:e;return Te(s)}function Po(e){let t=new Map;for(let s of e){let i=_f(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 qf(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 ss(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 $o(pe(Eo(),"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(ss(n))}}try{return await Ti(e.cloneUrl,e.ref,s)}catch(i){if(!qf(i))throw await ne(s),new Error(ss(i));N("install: HTTPS clone failed with auth error, retrying with SSH..."),await ne(s);let n=await $o(pe(Eo(),"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: ${ss(i)}
155
+ SSH: ${ss(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 rs(e,t=5){let s=[];async function i(n,r,o){let a;try{a=await $f(n)}catch{return}for(let l of a){if(l===".git"||l==="node_modules")continue;let c=pe(n,l);try{if(!(await Cf(c)).isDirectory())continue}catch{continue}let d=r?`${r}/${l}`:l,f=o+1,p=pe(c,"SKILL.md");try{let h=await Di(p,"utf-8"),g=ie(h);s.push({relPath:d,name:g.name||l,version:ae(g),description:(g.description||"").replace(/\s*\n\s*/g," ").trim(),effort:g.effort||g["metadata.effort"]||void 0,license:(g.license||"").trim(),creator:(g["metadata.creator"]||"").trim(),compatibility:(g.compatibility||"").trim(),allowedTools:eo(g),tokenCount:Zt(h)})}catch{f<t&&await i(c,d,f)}}}return await i(e,"",0),s.sort((n,r)=>n.name.localeCompare(r.name)),s}var Ff=[{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 No(e){let t=[],s=await ts(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 Ff)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 os(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 is(e.targetDir,{recursive:!0,force:!0})}catch{}let s=e.sourceDir;try{await xf(s,e.targetDir,{recursive:!0})}catch(a){throw new Error(`Failed to install: ${a.message}`)}let i=pe(e.targetDir,".git");try{await is(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 Io(e,t){let s=await os(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 Pf(r,{recursive:!0});try{if((await Ef(o)).isSymbolicLink())await is(o);else{N(`install: skipping ${o} \u2014 existing non-symlink directory`);continue}}catch{}let a=Nf(r,e.targetDir);await Af(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 is(e,{recursive:!0,force:!0})}catch{}}async function Lo(){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 Ro(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 Oo(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(h=>h.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(g=>g.name==="agents")||i[0],allProviders:i}}if(t){let h=e.providers.find(g=>g.name===t);if(!h){let g=e.providers.map(m=>m.name).join(", ");throw new Error(`Unknown provider: "${t}". Valid providers: ${g}, all`)}if(!h.enabled)throw new Error(`Provider "${t}" is disabled. Enable it in your config or choose another provider.`);return{provider:h,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 h=i.map(g=>g.name).join(", ");throw new Error(`--tool (or --provider) is required in non-interactive mode. Available: ${h}, all`)}let n=e.preferences.selectedTools,o=n&&n.length>0?new Set(n):null,a=e.providers.map(h=>({label:`${h.label} (${h.name})`,hint:h.global,checked:o?o.has(h.name):h.name==="agents"})),l=await We({items:a});if(l.length===0)throw new Error("No tools selected. Aborting.");let c=l.map(h=>e.providers[h]),d=c.map(h=>h.name),{saveSelectedTools:f}=await import("./config-55HAAFSH.js");return await f(d),c.length===1?{provider:c[0],allProviders:null}:{provider:c.find(h=>h.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 To(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 $c=Gr(wr(),1);import{readFile as pg}from"fs/promises";import{join as mg}from"path";var Sc=500;function hg(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 gg(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 yg(e){let t=gg(e);if(t===null)return null;try{return(0,$c.parse)(t),null}catch(s){return s.message||"invalid YAML"}}async function xc(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=mg(e.path,"SKILL.md"),n=await pg(i,"utf-8");hg(n)||t.push({category:"empty-body",message:"SKILL.md contains only frontmatter with no body content"});let r=yg(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>Sc&&t.push({category:"high-file-count",message:`Skill has ${s} files (threshold: ${Sc})`}),t}import{join as Cg}from"path";import{homedir as Eg}from"os";import{readFile as bg,writeFile as wg,mkdir as vg}from"fs/promises";import{dirname as kg}from"path";async function Sg(e){try{let t=await bg(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 $g(e,t,s){let i={fetched_at:new Date().toISOString(),ttl_seconds:s,data:t};try{await vg(kg(e),{recursive:!0}),await wg(e,JSON.stringify(i,null,2),"utf-8"),N(`http: wrote cache -> ${e}`)}catch(n){N(`http: failed to write cache: ${n}`)}}function xg(e){let t=new Date(e.fetched_at).getTime();return(Date.now()-t)/1e3<e.ttl_seconds}async function Cc(e,t,s={}){let i=s.ttl??3600,n=s.noCache??!1,r=await Sg(t);if(r&&!n&&xg(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 $g(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 Ag=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,Pg=/^[a-zA-Z0-9_-]+$/,Pc=/^https:\/\/github\.com\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/,Ng=/^[0-9a-f]{40}$/,Ig=/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/,Lg=/^[a-z0-9-]+$/,Rg=/^sha256:[0-9a-f]{64}$/,Ec=["pass","warning","dangerous"];function ii(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:Ag,maxLength:128},{field:"author",pattern:Pg,maxLength:39},{field:"description",maxLength:256},{field:"repository",pattern:Pc},{field:"commit",pattern:Ng},{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"||!Ec.includes(r))&&t.push({field:"security_verdict",message:`"security_verdict" must be one of: ${Ec.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"||!Ig.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`}),Lg.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"||!Rg.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 Og(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 Tg(e,t,s=2){let i=[];for(let n of t){if(e===n)continue;let r=Og(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",Mg=process.env.ASM_REGISTRY_CACHE??Cg(Eg(),".config","agent-skill-manager","registry-cache.json"),Dg=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 Cc(vr,Mg,{ttl:Dg,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=ii(i);if(n.length>0){N(`registry: dropping invalid manifest entry (${i?.name??"unknown"}): ${n.map(r=>r.message).join(", ")}`);continue}if(!Pc.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 _g(e,t){return t.manifests.filter(s=>s.name.toLowerCase()===e.toLowerCase())}function qg(e,t,s){return s.manifests.find(i=>i.author.toLowerCase()===e.toLowerCase()&&i.name.toLowerCase()===t.toLowerCase())??null}function Ac(e,t,s=5){return Tg(e,t.manifests.map(n=>n.name),3).slice(0,s).map(n=>n.existingName)}async function Nc(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=qg(r,o,s);if(a)return{resolved:{manifest:a,source:"registry"},multipleMatches:[],suggestions:[]};let l=Ac(o,s);return{resolved:null,multipleMatches:[],suggestions:l}}let i=_g(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=Ac(e,s);return{resolved:null,multipleMatches:[],suggestions:n}}function Ic(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 Fg,access as Rc,mkdir as jg,cp as Lc,rm as Bg,symlink as Ug}from"fs/promises";import{join as Oc,basename as Vg}from"path";function Kg(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 Tc(e){let t;try{t=await Fg(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=Kg(s);if(!i.valid)throw new Error(`Invalid manifest:
161
+ ${i.errors.join(`
162
+ `)}`);return s}async function Jg(e){try{return await Rc(e),!0}catch{return!1}}function Hg(e,t){return e.providers.find(s=>s.name===t&&s.enabled)}function Yg(e,t,s,i){let n=Hg(e,t);if(!n)return null;let r=s==="global"?n.global:n.project,o=oe(r),a=Vg(i);return!a||a==="."||a===".."?null:Oc(o,a)}function Gg(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 Mc(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=Yg(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 Jg(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=Gg(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 jg(Oc(d,".."),{recursive:!0}),f&&await Bg(d,{recursive:!0,force:!0}),c.isSymlink&&c.symlinkTarget)try{await Rc(c.symlinkTarget),await Ug(c.symlinkTarget,d),N(`import: symlinked "${c.name}" -> ${c.symlinkTarget} at ${d}`)}catch{await Lc(p.realPath,d,{recursive:!0}),N(`import: symlink target unreachable, copied "${c.name}" from ${p.realPath} to ${d}`)}else await Lc(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(h){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"failed",reason:`Copy failed: ${h.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 Wg,writeFile as zg,access as Qg}from"fs/promises";import{join as Xg}from"path";function Zg(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
- # ${q}
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,66 +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 C5(q,$){await MU($,{recursive:!0});let Z=DU($,"SKILL.md"),Q=NU(q);await jU(Z,Q,"utf-8")}async function E5(q){try{return await RU(q),!0}catch{return!1}}import{readdir as wU,stat as PU}from"fs/promises";import{join as CU}from"path";async function EU(q){let $=0;try{let Q=(await wU(q,{recursive:!0})).map(async(z)=>{try{let J=await PU(CU(q,z));if(J.isFile())return J.size}catch{}return 0});$=(await Promise.all(Q)).reduce((z,J)=>z+J,0)}catch{}return $}async function x5(q,$){let Z={},Q={global:0,project:0},X={},z=q.map(async(Y)=>{Z[Y.provider]=(Z[Y.provider]||0)+1,Q[Y.scope]++;let H=await EU(Y.path);return X[Y.path]=H,H}),G=(await Promise.all(z)).reduce((Y,H)=>Y+H,0);return{totalSkills:q.length,byProvider:Z,byScope:Q,totalDiskBytes:G,perSkillDiskBytes:X,duplicateGroups:$.duplicateGroups.length,duplicateInstances:$.totalDuplicateInstances}}function SU(q){if(q<1024)return`${q} B`;if(q<1048576)return`${(q/1024).toFixed(1)} KB`;if(q<1073741824)return`${(q/1048576).toFixed(1)} MB`;return`${(q/1073741824).toFixed(1)} GB`}function O9(q,$,Z=20){let Q=Math.round(q/$*Z),X=Z-Q;return U.green("#".repeat(Q))+U.dim("-".repeat(X))}var S5={claude:"Claude Code",codex:"Codex",openclaw:"OpenClaw",agents:"Agents"};function y5(q){let $=[];$.push(""),$.push(U.blueBold(" Skill Statistics")),$.push(U.dim(" "+"-".repeat(20))),$.push(""),$.push(` ${U.bold("Total:")} ${U.cyan(String(q.totalSkills))} skills`),$.push(` ${U.bold("Disk:")} ${U.cyan(SU(q.totalDiskBytes))}`),$.push(""),$.push(U.bold(" By Tool"));let Z=Object.entries(q.byProvider).sort((Y,H)=>H[1]-Y[1]),Q=Math.max(...Z.map(([,Y])=>Y)),X=Math.max(...Z.map(([Y])=>(S5[Y]||Y).length));for(let[Y,H]of Z){let V=S5[Y]||Y,W=b5(Y,V.padEnd(X)),B=String(H).padStart(4);$.push(` ${W} ${B} ${O9(H,Q)}`)}$.push(""),$.push(U.bold(" By Scope"));let z=Math.max(q.byScope.global,q.byScope.project),J=String(q.byScope.global).padStart(4),G=String(q.byScope.project).padStart(4);if($.push(` ${"global ".padEnd(X)} ${J} ${O9(q.byScope.global,z)}`),$.push(` ${"project".padEnd(X)} ${G} ${O9(q.byScope.project,z)}`),$.push(""),$.push(U.bold(" Duplicates")),q.duplicateGroups>0)$.push(` ${U.yellow(`${q.duplicateGroups} group(s), ${q.duplicateInstances} total instance(s)`)}`),$.push(U.dim(` Run ${U.bold("asm audit")} to review`));else $.push(` ${U.green("None")}`);return $.push(""),$.join(`
183
- `)}import{access as bU,lstat as F9,mkdir as xU,readdir as yU,readFile as f5,rm as fU,symlink as kU}from"fs/promises";import{join as f$}from"path";async function I9(q){let $;try{$=await F9(q)}catch{throw Error(`Path does not exist: ${q}`)}if(!$.isDirectory())throw Error(`Path is not a directory: ${q}`);let Z=f$(q,"SKILL.md"),Q;try{Q=await f5(Z,"utf-8")}catch{throw Error(`No SKILL.md found in ${q}`)}let X=s(Q);if(!X.name)throw Error(`Invalid SKILL.md in ${q}: missing "name" in frontmatter`);return{name:X.name,version:z0(X)}}async function k5(q,$,Z,Q){let X=f$($,Z),z=!1;try{await bU(X),z=!0}catch{}if(z){if(!Q)throw Error(`Target already exists: ${X}. Use --force to overwrite.`);await fU(X,{recursive:!0,force:!0})}await xU($,{recursive:!0}),await kU(q,X,"dir")}async function A9(q){let $;try{$=await F9(q)}catch{throw Error(`Path does not exist: ${q}`)}if(!$.isDirectory())throw Error(`Path is not a directory: ${q}`);let Z=await yU(q),Q=[];for(let X of Z){if(X.startsWith(".")||X==="node_modules")continue;let z=f$(q,X);try{if(!(await F9(z)).isDirectory())continue}catch{continue}let J=f$(z,"SKILL.md");try{let G=await f5(J,"utf-8"),Y=s(G);if(Y.name)Q.push({absPath:z,dirName:X,name:Y.name,version:z0(Y)})}catch{}}return Q.sort((X,z)=>X.name.localeCompare(z.name)),Q}import{readFile as vU,writeFile as hU,readdir as gU,access as uU,mkdir as mU,rm as pU}from"fs/promises";import{join as Sq,resolve as dU}from"path";import{homedir as cU}from"os";var f0=Sq(cU(),".config","agent-skill-manager","bundles");function lU(q){let $=[];if(typeof q!=="object"||q===null||Array.isArray(q))return{valid:!1,errors:["Bundle must be a JSON object."]};let Z=q;if(Z.version!==1)$.push(`Unsupported bundle version: ${JSON.stringify(Z.version)}. Expected 1.`);if(typeof Z.name!=="string"||!Z.name)$.push("Missing or empty 'name' field.");if(typeof Z.description!=="string"||!Z.description)$.push("Missing or empty 'description' field.");if(typeof Z.author!=="string"||!Z.author)$.push("Missing or empty 'author' field.");if(typeof Z.createdAt!=="string")$.push("Missing or invalid 'createdAt' field.");if(!Array.isArray(Z.skills))return $.push("Missing or invalid 'skills' array."),{valid:!1,errors:$};if(Z.skills.length===0)$.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){$.push(`skills[${Q}]: must be an object.`);continue}let z=X;if(typeof z.name!=="string"||!z.name)$.push(`skills[${Q}]: missing or empty 'name'.`);if(typeof z.installUrl!=="string"||!z.installUrl)$.push(`skills[${Q}]: missing or empty 'installUrl'.`)}if(Z.tags!==void 0){if(!Array.isArray(Z.tags))$.push("'tags' must be an array of strings if provided.");else if(Z.tags.some((Q)=>typeof Q!=="string"))$.push("'tags' must contain only strings.")}return{valid:$.length===0,errors:$}}function v5(q,$,Z,Q,X){return{version:1,name:q,description:$,author:Z,createdAt:new Date().toISOString(),skills:Q,tags:X}}async function h5(q,$){let Z=$??await k0(),Q=Z.skills[q.name]||Z.skills[q.dirName],X;if(q.isSymlink&&q.symlinkTarget)X=q.symlinkTarget;else if(Q?.source)X=Q.source;else X=q.path;return{name:q.name,installUrl:X,description:q.description||void 0,version:q.version||void 0}}async function nU(){await mU(f0,{recursive:!0})}function M9(q){let $=q.toLowerCase().replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if($=$.replace(/^\.+|\.+$/g,""),!$||$==="."||$==="..")throw Error("Invalid bundle name: results in an empty filename after sanitization.");return $}async function g5(q){await nU();let $=`${M9(q.name)}.json`,Z=Sq(f0,$);return await hU(Z,JSON.stringify(q,null,2)+`
184
- `,"utf-8"),E(`bundle: saved to ${Z}`),Z}async function T9(q){let $;try{$=await vU(q,"utf-8")}catch(X){if(X?.code==="ENOENT")throw Error(`Bundle file not found: ${q}`);throw Error(`Failed to read bundle file: ${X.message}`)}let Z;try{Z=JSON.parse($)}catch{throw Error("Bundle file is not valid JSON.")}let Q=lU(Z);if(!Q.valid)throw Error(`Invalid bundle:
185
- ${Q.errors.join(`
186
- `)}`);return Z}async function j9(q){if(q.includes("/")||q.includes("\\")||q.endsWith(".json")){let Q=dU(q);return T9(Q)}let $=`${M9(q)}.json`,Z=Sq(f0,$);return T9(Z)}async function u5(){let q=[];try{await uU(f0)}catch{return q}let $;try{$=await gU(f0)}catch{return q}for(let Z of $){if(!Z.endsWith(".json"))continue;let Q=Sq(f0,Z);try{let X=await T9(Q);q.push(X)}catch{E(`bundle: skipping invalid file ${Q}`)}}return q.sort((Z,Q)=>Z.name.localeCompare(Q.name)),q}async function m5(q){let $=`${M9(q)}.json`,Z=Sq(f0,$);try{return await pU(Z),E(`bundle: removed ${Z}`),!0}catch(Q){if(Q?.code==="ENOENT")return!1;throw Q}}import{readFile as ZH,realpath as QH}from"fs/promises";import{join as XH,resolve as zH,relative as JH}from"path";var c5=[{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 aU(q,$){let Z={owner:q,repo:$,profileUrl:`https://github.com/${q}`,reposUrl:`https://github.com/${q}?tab=repositories`,isOrganization:null,publicRepos:null,accountAge:null,fetchError:null};try{let Q=await fetch(`https://api.github.com/users/${q}`,{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,G=Math.floor((J.getTime()-z.getTime())/31557600000),Y=Math.floor((J.getTime()-z.getTime())%31557600000/2630016000.0000005);Z.accountAge=G>0?`${G}y ${Y}m`:`${Y}m`}E(`security-audit: source analysis for ${q} -> 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 oU(q){let $=new Map;for(let{relPath:X,content:z}of q){let J=z.split(`
187
- `);for(let G=0;G<J.length;G++){let Y=J[G],H=Y.trim();for(let V of c5)if(V.pattern.test(Y)){let W=V.category;if(!$.has(W))$.set(W,{description:V.description,matches:[]});let B=H.length>120?H.slice(0,120)+"...":H;$.get(W).matches.push({file:X,line:G+1,match:B,severity:V.severity})}}}let Z=[];for(let[X,z]of $)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((Y)=>Q[Y.severity])),G=Math.min(...z.matches.map((Y)=>Q[Y.severity]));return J-G}),Z}function iU(q){let $=new Map;for(let z of q)for(let J of z.matches)for(let G of c5)if(G.permissionType&&G.category===z.category&&G.pattern.test(J.match)){let Y=G.permissionType;if(!$.has(Y))$.set(Y,{evidence:[],categories:new Set});let H=$.get(Y);H.evidence.push({file:J.file,line:J.line,match:J.match}),H.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.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 sU(q,$,Z){let Q=0,X=0;for(let Y of q)for(let H of Y.matches){if(H.severity==="critical")Q++;if(H.severity==="warning")X++}let z=$.some((Y)=>Y.type==="shell"),J=$.some((Y)=>Y.type==="code-execution"),G=$.some((Y)=>Y.type==="network");if(z&&G)return{verdict:"dangerous",reason:"Skill has both shell execution and network access -- potential data exfiltration risk."};if(J&&G)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 R0(q,$,Z,Q){E(`security-audit: scanning ${q}`);let X=await mq(q),z=X.reduce((W,B)=>W+B.lineCount,0),J=null;if(Z&&Q)J=await aU(Z,Q);let G=oU(X),Y=iU(G),{verdict:H,reason:V}=sU(G,Y,J);return{scannedAt:new Date().toISOString(),skillName:$,skillPath:q,source:J,codeScans:G,permissions:Y,totalFiles:X.length,totalLines:z,verdict:H,verdictReason:V}}var b=U,v0=56,tU={"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"},p5={critical:0,warning:1,info:2};function rU(q){switch(q){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 eU(q){switch(q){case"safe":return b.green;case"caution":return b.cyan;case"warning":return b.yellow;case"dangerous":return b.red}}function Xq(q){switch(q){case"critical":return b.red("!!");case"warning":return b.yellow(" !");case"info":return b.dim(" i")}}function R9(q,$){return q.length>$?q.slice(0,$-3)+"...":q}function k$(q){return q.toLocaleString("en-US")}function l5(q){return q.replace(/\x1b\[[0-9;]*m/g,"")}function d5(q){return l5(q).length}function qH(q){let $=new Map;for(let Z of q){let Q=`${Z.file}:${Z.line}`,X=$.get(Q);if(!X||p5[Z.severity]<p5[X.severity])$.set(Q,Z)}return Array.from($.values())}function $H(q){let $=new Map;for(let Z of q){let Q=$.get(Z.file);if(!Q)Q={file:Z.file,entries:[]},$.set(Z.file,Q);Q.entries.push({line:Z.line,match:Z.match,severity:Z.severity})}return Array.from($.values())}function v$(q){let $=[],Z=rU(q.verdict),Q=l5(Z),X=` ${b.bold(q.skillName)}`,z=` ${q.skillName}`,J=v0-4,G=Math.max(1,J-z.length-Q.length);if($.push(""),$.push(b.dim(" +-- ")+b.bold("Security Audit")+b.dim(" "+"-".repeat(v0-19)+"+")),$.push(b.dim(" |")+X+" ".repeat(G)+Z+b.dim("|")),$.push(b.dim(" |")+b.dim(` ${k$(q.totalFiles)} files | ${k$(q.totalLines)} lines`)+" ".repeat(Math.max(1,J-` ${k$(q.totalFiles)} files | ${k$(q.totalLines)} lines`.length))+b.dim("|")),$.push(b.dim(" +"+"-".repeat(v0-2)+"+")),q.source){let W=q.source;if(W.fetchError)$.push(` ${b.yellow("!")} Could not fetch profile: ${W.fetchError}`);else{let B=[];if(B.push(`${W.owner} ${W.isOrganization?b.cyan("(org)"):b.dim("(user)")}`),W.publicRepos!==null){let _=W.publicRepos,L=_<3?b.yellow(`${_} repos`):_<10?b.cyan(`${_} repos`):b.green(`${_} repos`);B.push(L)}if(W.accountAge)B.push(W.accountAge);$.push(` ${b.dim("Author:")} ${B.join(b.dim(" | "))}`)}}if($.push(""),q.codeScans.length===0)$.push(` ${b.green("*")} ${b.green("No suspicious patterns detected.")}`);else{let W=eU(q.verdict),B=q.verdict==="dangerous"||q.verdict==="warning"?Xq("critical"):q.verdict==="caution"?Xq("warning"):Xq("info");$.push(` ${B} ${W(q.verdictReason)}`);let _=0,L=0,K=0;for(let M of q.codeScans)for(let R of M.matches)if(R.severity==="critical")_++;else if(R.severity==="warning")L++;else K++;let O=[];if(_>0)O.push(b.red(`${_} critical`));if(L>0)O.push(b.yellow(`${L} warning`));if(K>0)O.push(b.dim(`${K} info`));let F=q.permissions.map((M)=>M.type),A=F.length>0?b.dim(`Perms: ${F.join(", ")}`):"";$.push(` ${O.join(b.dim(" | "))} ${A}`)}if($.push(""),q.codeScans.length>0){$.push(` ${b.bold("Findings")}`),$.push(b.dim(" "+"=".repeat(v0-2)));for(let W of q.codeScans){let B=qH(W.matches),_=B.filter((I)=>I.severity==="critical").length,L=B.filter((I)=>I.severity==="warning").length,K=B.filter((I)=>I.severity==="info").length,O=_>0?Xq("critical"):L>0?Xq("warning"):Xq("info"),F=[];if(_>0)F.push(b.red(`${_} critical`));if(L>0)F.push(b.yellow(`${L} warning`));if(K>0)F.push(b.dim(`${K} info`));let A=tU[W.category],M=A?b.dim(`PERM: ${A}`):"",R=` ${O} ${b.bold(W.category)} (${F.join(", ")})`;if(M){let I=d5(R),j=d5(M),C=Math.max(2,v0-I-j);$.push(R+" ".repeat(C)+M)}else $.push(R);let T=$H(B),D=Math.min(24,Math.max(...T.map((I)=>I.file.length))),x=0,w=3;for(let I of T){if(x>=w)break;let j=R9(I.file,24),C=b.dim(j.padEnd(D));if(I.entries.length===1){let S=I.entries[0],y=R9(S.match,50);$.push(` ${C} :${S.line} ${b.dim("--")} ${S.severity==="critical"?y:b.dim(y)}`),x++}else if(I.entries.length<=3){let S=I.entries.map((d)=>`:${d.line}`).join(", "),y=R9(I.entries[0].match,40);$.push(` ${C} ${S} ${b.dim("--")} ${b.dim(y)}`),x++}else{let y=I.entries.slice(0,3).map((p)=>`:${p.line}`).join(", "),d=I.entries.length-3;$.push(` ${C} ${y} ${b.dim(`(+${d} more)`)}`),x++}}let f=T.length-Math.min(T.length,w);if(f>0){let I=B.length-T.slice(0,w).reduce((j,C)=>j+C.entries.length,0);if(I>0)$.push(` ${b.dim(`... ${I} more in ${f} file${f>1?"s":""}`)}`)}$.push("")}}$.push(b.dim(" "+"=".repeat(v0-2)));let Y=new Date(q.scannedAt),H=`${Y.getFullYear()}-${String(Y.getMonth()+1).padStart(2,"0")}-${String(Y.getDate()).padStart(2,"0")} ${String(Y.getHours()).padStart(2,"0")}:${String(Y.getMinutes()).padStart(2,"0")}`,V=q.source&&!q.source.fetchError?`github.com/${q.source.owner}`:"";if(V){let W=Math.max(2,v0-2-H.length-V.length);$.push(b.dim(` ${H}${" ".repeat(W)}${V}`))}else $.push(b.dim(` ${H}`));return $.push(""),$.join(`
188
- `)}function D9(q){return JSON.stringify(q,null,2)}function h$(q){return q.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 GH(q){return q.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\|/g,"\\|")}function N9(q){return GH(h$(q))}var h0="luongnv89/asm-registry";async function YH(q){let $=XH(q,"SKILL.md"),Z;try{Z=await ZH($,"utf-8")}catch{throw Error(`No SKILL.md found in ${q}. Run "asm init" to create one.`)}let Q=s(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=z0(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 UH(q){if(await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:q,stdout:"pipe",stderr:"pipe"}).exited!==0)throw Error(`${q} is not inside a git repository.`)}async function HH(q){let $=Bun.spawn(["git","rev-parse","HEAD"],{cwd:q,stdout:"pipe",stderr:"pipe"}),Z=await new Response($.stdout).text();if(await $.exited!==0)throw Error("Failed to get HEAD commit. Is this a git repository?");return Z.trim()}async function WH(q){let $=Bun.spawn(["git","rev-parse","--show-toplevel"],{cwd:q,stdout:"pipe",stderr:"pipe"}),Z=await new Response($.stdout).text();if(await $.exited!==0)throw Error("Failed to determine git repository root.");return Z.trim()}async function VH(q){let $=Bun.spawn(["git","remote","get-url","origin"],{cwd:q,stdout:"pipe",stderr:"pipe"}),Z=await new Response($.stdout).text();if(await $.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 BH(){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 KH(q){switch(q){case"safe":case"caution":return"pass";case"warning":return"warning";case"dangerous":return"dangerous"}}function n5(q){let $={name:q.metadata.name,author:q.author,description:q.metadata.description,repository:q.repository,commit:q.commit,security_verdict:q.securityVerdict,published_at:new Date().toISOString()};if(q.skillPath)$.skill_path=q.skillPath;if(q.metadata.version&&q.metadata.version!=="0.0.0"&&/^\d+\.\d+\.\d+/.test(q.metadata.version))$.version=q.metadata.version;if(q.metadata.license)$.license=q.metadata.license;if(q.metadata.tags&&q.metadata.tags.length>0)$.tags=q.metadata.tags.slice(0,10);return $}function _H(q){let $=n5({metadata:q.metadata,author:q.metadata.creator||"unknown",commit:q.commit,repository:q.repository,securityVerdict:q.registryVerdict}),Z=y$($);if(Z.length>0)return{success:!1,manifest:$,prUrl:null,error:`Manifest validation failed: ${Z.map((Q)=>`${Q.field}: ${Q.message}`).join("; ")}`,securityVerdict:q.registryVerdict,securityReport:q.securityReport};return{success:!0,manifest:$,prUrl:null,error:null,securityVerdict:q.registryVerdict,securityReport:q.securityReport,fallback:!0,fallbackReason:q.fallbackReason}}async function a5(q){let $=zH(q.path);E(`publish: starting for ${$}`),await UH($);let Z=await YH($);E(`publish: parsed metadata for "${Z.name}"`);let X=await(q._auditFn??R0)($,Z.name),z=KH(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"&&!q.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 HH($),G=await VH($),Y=await WH($),H=await QH($),V=JH(Y,H),W=V&&V!=="."?V:void 0,_=await(q._checkGhCliFn??BH)();if(!_.available||!_.authenticated){let o=!_.available?"gh CLI not found":"gh CLI not authenticated";return _H({metadata:Z,commit:J,repository:G,registryVerdict:z,securityReport:X,fallbackReason:o})}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 L=_.login,K=n5({metadata:Z,author:L,commit:J,repository:G,skillPath:W,securityVerdict:z}),O=y$(K);if(O.length>0)return{success:!1,manifest:K,prUrl:null,error:`Manifest validation failed: ${O.map((o)=>`${o.field}: ${o.message}`).join("; ")}`,securityVerdict:z,securityReport:X};if(q.dryRun)return{success:!0,manifest:K,prUrl:null,error:null,securityVerdict:z,securityReport:X};if(!q.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 o=h$(Z.name),gq=h$(L);process.stderr.write(`
189
- About to publish "${o}" by ${gq} to ${h0}.
190
- Security verdict: ${z}
191
-
192
- Proceed? [y/N] `);let o$=await new Promise((n9)=>{let uq="",a9=(FZ)=>{if(uq+=FZ.toString(),uq.includes(`
193
- `))process.stdin.removeListener("data",a9),process.stdin.pause(),n9(uq.trim())};process.stdin.resume(),process.stdin.on("data",a9)});if(o$.toLowerCase()!=="y"&&o$.toLowerCase()!=="yes")return{success:!1,manifest:K,prUrl:null,error:"Publish aborted by user.",securityVerdict:z,securityReport:X}}E(`publish: forking ${h0}`),await Bun.spawn(["gh","repo","fork",h0,"--clone=false"],{stdout:"pipe",stderr:"pipe"}).exited;let A=`publish/${L}/${Z.name}`,M=`manifests/${L}/${Z.name}.json`,R=JSON.stringify(K,null,2)+`
194
- `,T=Buffer.from(R,"utf-8").toString("base64"),D=Bun.spawn(["gh","api",`repos/${L}/asm-registry/git/refs/heads/main`,"--jq",".object.sha"],{stdout:"pipe",stderr:"pipe"}),x=await new Response(D.stdout).text();if(await D.exited!==0)return{success:!1,manifest:K,prUrl:null,error:`Failed to read fork's main branch. Ensure the fork exists at ${L}/asm-registry.`,securityVerdict:z,securityReport:X};let f=x.trim();if(await Bun.spawn(["gh","api",`repos/${L}/asm-registry/git/refs`,"-X","POST","-f",`ref=refs/heads/${A}`,"-f",`sha=${f}`],{stdout:"pipe",stderr:"pipe"}).exited!==0)await Bun.spawn(["gh","api",`repos/${L}/asm-registry/git/refs/heads/${A}`,"-X","PATCH","-f",`sha=${f}`,"-f","force=true"],{stdout:"pipe",stderr:"pipe"}).exited;let C=Bun.spawn(["gh","api",`repos/${L}/asm-registry/contents/${M}`,"-X","PUT","-f",`message=Publish ${L}/${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 o=Bun.spawn(["gh","api",`repos/${L}/asm-registry/contents/${M}?ref=${A}`,"-q",".sha"],{stdout:"pipe",stderr:"pipe"}),gq=(await new Response(o.stdout).text()).trim();if(await o.exited===0&&gq){if(await Bun.spawn(["gh","api",`repos/${L}/asm-registry/contents/${M}`,"-X","PUT","-f",`message=Update ${L}/${Z.name}`,"-f",`content=${T}`,"-f",`branch=${A}`,"-f",`sha=${gq}`],{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=N9(Z.name),p=N9(Z.description),i=N9(Z.license),vq=`Publish ${L}/${h$(Z.name)}`,W0=[`## Skill: ${d}`,"",`**Author:** ${L}`,`**Version:** ${Z.version}`,`**Description:** ${p}`,`**License:** ${i}`,`**Repository:** ${G}`,`**Commit:** \`${J}\``,`**Security verdict:** ${z}`,"","---","","*This PR was generated by `asm publish`.*"].join(`
195
- `),Z0=Bun.spawn(["gh","pr","create","--repo",h0,"--head",`${L}:${A}`,"--title",vq,"--body",W0],{stdout:"pipe",stderr:"pipe"}),u0=await new Response(Z0.stdout).text(),hq=await new Response(Z0.stderr).text(),Jq=await Z0.exited,m0=null;if(Jq===0)m0=u0.trim();else{let o=hq.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/);if(o)m0=o[0]}if(!m0)return{success:!1,manifest:K,prUrl:null,error:`Failed to create PR against ${h0}. ${hq}`,securityVerdict:z,securityReport:X};return{success:!0,manifest:K,prUrl:m0,error:null,securityVerdict:z,securityReport:X}}function o5(q){let $=q.manifest;if(!$)return"";return["",` gh CLI is unavailable (${q.fallbackReason}).`," To publish manually:","",` 1. Fork ${h0} on GitHub`,` 2. Create branch: publish/${$.author}/${$.name}`,` 3. Add file: manifests/${$.author}/${$.name}.json`," 4. Paste the manifest below into that file",` 5. Open a PR against ${h0}`,"",' Run "asm doctor" to fix your environment.',""," Generated manifest:",JSON.stringify($,null,2).split(`
196
- `).map((Q)=>` ${Q}`).join(`
183
+ `}async function Dc(e,t){await Wg(t,{recursive:!0});let s=Xg(t,"SKILL.md"),i=Zg(e);await zg(s,i,"utf-8")}async function _c(e){try{return await Qg(e),!0}catch{return!1}}import{readdir as ey,stat as ty}from"fs/promises";import{join as sy}from"path";async function iy(e){let t=0;try{let i=(await ey(e,{recursive:!0})).map(async r=>{try{let o=await ty(sy(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 Fc(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 iy(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 ny(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 qc={claude:"Claude Code",codex:"Codex",openclaw:"OpenClaw",agents:"Agents"};function jc(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(ny(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])=>(qc[l]||l).length));for(let[l,c]of s){let d=qc[l]||l,f=oo(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 ry,lstat as Cr,mkdir as oy,readdir as ay,readFile as Bc,rm as ly,symlink as cy}from"fs/promises";import{join as ni}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=ni(e,"SKILL.md"),i;try{i=await Bc(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 Uc(e,t,s,i){let n=ni(t,s),r=!1;try{await ry(n),r=!0}catch{}if(r){if(!i)throw new Error(`Target already exists: ${n}. Use --force to overwrite.`);await ly(n,{recursive:!0,force:!0})}await oy(t,{recursive:!0}),await cy(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 ay(e),i=[];for(let n of s){if(n.startsWith(".")||n==="node_modules")continue;let r=ni(e,n);try{if(!(await Cr(r)).isDirectory())continue}catch{continue}let o=ni(r,"SKILL.md");try{let a=await Bc(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 uy,writeFile as fy,readdir as Vc,access as Kc,mkdir as dy,rm as py}from"fs/promises";import{join as Je,resolve as Jc,dirname as my}from"path";import{homedir as hy}from"os";import{fileURLToPath as gy}from"url";var yy=gy(import.meta.url),by=my(yy),Ke=Je(hy(),".config","agent-skill-manager","bundles"),ri=Jc(by,"..","data","bundles");function wy(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 Hc(e,t,s,i,n){return{version:1,name:e,description:t,author:s,createdAt:new Date().toISOString(),skills:i,tags:n}}async function Yc(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 vy(){await dy(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 vy();let t=`${Pr(e.name)}.json`,s=Je(Ke,t);return await fy(s,JSON.stringify(e,null,2)+`
185
+ `,"utf-8"),N(`bundle: saved to ${s}`),s}async function Yt(e){let t;try{t=await uy(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=wy(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=Jc(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(ri,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 Gc(){let e=[];try{await Kc(ri)}catch{return e}let t;try{t=await Vc(ri)}catch{return e}for(let s of t){if(!s.endsWith(".json"))continue;let i=Je(ri,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 Wc(){let e=[];try{await Kc(Ke)}catch{return e}let t;try{t=await Vc(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 zc(e){let t=`${Pr(e)}.json`,s=Je(Ke,t);try{return await py(s),N(`bundle: removed ${s}`),!0}catch(i){if(i?.code==="ENOENT")return!1;throw i}}import{readFile as Iy,realpath as Ly}from"fs/promises";import{join as Ry,resolve as Oy,relative as Ty}from"path";var Zc=[{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 ky(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 Sy(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 Zc)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 $y(e){let t=new Map;for(let r of e)for(let o of r.matches)for(let a of Zc)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 xy(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 ts(e),r=n.reduce((f,p)=>f+p.lineCount,0),o=null;s&&i&&(o=await ky(s,i));let a=Sy(n),l=$y(a),{verdict:c,reason:d}=xy(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,Cy={"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"},Qc={critical:0,warning:1,info:2};function Ey(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 Ay(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 oi(e){return e.toLocaleString("en-US")}function eu(e){return e.replace(/\x1b\[[0-9;]*m/g,"")}function Xc(e){return eu(e).length}function Py(e){let t=new Map;for(let s of e){let i=`${s.file}:${s.line}`,n=t.get(i);(!n||Qc[s.severity]<Qc[n.severity])&&t.set(i,s)}return Array.from(t.values())}function Ny(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 ai(e){let t=[],s=Ey(e.verdict),i=eu(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(` ${oi(e.totalFiles)} files | ${oi(e.totalLines)} lines`)+" ".repeat(Math.max(1,o-` ${oi(e.totalFiles)} files | ${oi(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 h=f.publicRepos,g=h<3?R.yellow(`${h} repos`):h<10?R.cyan(`${h} repos`):R.green(`${h} repos`);p.push(g)}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=Ay(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 h=0,g=0,m=0;for(let $ of e.codeScans)for(let x of $.matches)x.severity==="critical"?h++:x.severity==="warning"?g++:m++;let y=[];h>0&&y.push(R.red(`${h} critical`)),g>0&&y.push(R.yellow(`${g} warning`)),m>0&&y.push(R.dim(`${m} info`));let b=e.permissions.map($=>$.type),w=b.length>0?R.dim(`Perms: ${b.join(", ")}`):"";t.push(` ${y.join(R.dim(" | "))} ${w}`)}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=Py(f.matches),h=p.filter(v=>v.severity==="critical").length,g=p.filter(v=>v.severity==="warning").length,m=p.filter(v=>v.severity==="info").length,y=h>0?lt("critical"):g>0?lt("warning"):lt("info"),b=[];h>0&&b.push(R.red(`${h} critical`)),g>0&&b.push(R.yellow(`${g} warning`)),m>0&&b.push(R.dim(`${m} info`));let w=Cy[f.category],$=w?R.dim(`PERM: ${w}`):"",x=` ${y} ${R.bold(f.category)} (${b.join(", ")})`;if($){let v=Xc(x),S=Xc($),I=Math.max(2,He-v-S);t.push(x+" ".repeat(I)+$)}else t.push(x);let k=Ny(p),E=Math.min(24,Math.max(...k.map(v=>v.file.length))),O=0,P=3;for(let v of k){if(O>=P)break;let S=Ir(v.file,24),I=R.dim(S.padEnd(E));if(v.entries.length===1){let L=v.entries[0],T=Ir(L.match,50);t.push(` ${I} :${L.line} ${R.dim("--")} ${L.severity==="critical"?T:R.dim(T)}`),O++}else if(v.entries.length<=3){let L=v.entries.map(K=>`:${K.line}`).join(", "),T=Ir(v.entries[0].match,40);t.push(` ${I} ${L} ${R.dim("--")} ${R.dim(T)}`),O++}else{let T=v.entries.slice(0,3).map(U=>`:${U.line}`).join(", "),K=v.entries.length-3;t.push(` ${I} ${T} ${R.dim(`(+${K} more)`)}`),O++}}let M=k.length-Math.min(k.length,P);if(M>0){let v=p.length-k.slice(0,P).reduce((S,I)=>S+I.entries.length,0);v>0&&t.push(` ${R.dim(`... ${v} 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 li(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 My(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\|/g,"\\|")}function Rr(e){return My(li(e))}var Ye="luongnv89/asm-registry";async function Dy(e){let t=Ry(e,"SKILL.md"),s;try{s=await Iy(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 _y(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 qy(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 Fy(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 jy(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 By(){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 Uy(e){switch(e){case"safe":case"caution":return"pass";case"warning":return"warning";case"dangerous":return"dangerous"}}function tu(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 Vy(e){let t=tu({metadata:e.metadata,author:e.metadata.creator||"unknown",commit:e.commit,repository:e.repository,securityVerdict:e.registryVerdict}),s=ii(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 su(e){let t=Oy(e.path);N(`publish: starting for ${t}`),await _y(t);let s=await Dy(t);N(`publish: parsed metadata for "${s.name}"`);let n=await(e._auditFn??Pe)(t,s.name),r=Uy(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 qy(t),a=await jy(t),l=await Fy(t),c=await Ly(t),d=Ty(l,c),f=d&&d!=="."?d:void 0,h=await(e._checkGhCliFn??By)();if(!h.available||!h.authenticated){let j=h.available?"gh CLI not authenticated":"gh CLI not found";return Vy({metadata:s,commit:o,repository:a,registryVerdict:r,securityReport:n,fallbackReason:j})}if(!h.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 g=h.login,m=tu({metadata:s,author:g,commit:o,repository:a,skillPath:f,securityVerdict:r}),y=ii(m);if(y.length>0)return{success:!1,manifest:m,prUrl:null,error:`Manifest validation failed: ${y.map(j=>`${j.field}: ${j.message}`).join("; ")}`,securityVerdict:r,securityReport:n};if(e.dryRun)return{success:!0,manifest:m,prUrl:null,error:null,securityVerdict:r,securityReport:n};if(!e.yes){if(!process.stdin.isTTY)return{success:!1,manifest:m,prUrl:null,error:"Cannot prompt for confirmation in non-interactive mode. Use --yes to skip.",securityVerdict:r,securityReport:n};let j=li(s.name),ye=li(g);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="",Yr=pf=>{dt+=pf.toString(),dt.includes(`
194
+ `)&&(process.stdin.removeListener("data",Yr),process.stdin.pause(),Ie(dt.trim()))};process.stdin.resume(),process.stdin.on("data",Yr)});if(Ne.toLowerCase()!=="y"&&Ne.toLowerCase()!=="yes")return{success:!1,manifest:m,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/${g}/${s.name}`,w=`manifests/${g}/${s.name}.json`,$=JSON.stringify(m,null,2)+`
195
+ `,x=Buffer.from($,"utf-8").toString("base64"),{stdout:k,exitCode:E}=await V(["gh","api",`repos/${g}/asm-registry/git/refs/heads/main`,"--jq",".object.sha"]);if(E!==0)return{success:!1,manifest:m,prUrl:null,error:`Failed to read fork's main branch. Ensure the fork exists at ${g}/asm-registry.`,securityVerdict:r,securityReport:n};let O=k.trim(),{exitCode:P}=await V(["gh","api",`repos/${g}/asm-registry/git/refs`,"-X","POST","-f",`ref=refs/heads/${b}`,"-f",`sha=${O}`]);P!==0&&await V(["gh","api",`repos/${g}/asm-registry/git/refs/heads/${b}`,"-X","PATCH","-f",`sha=${O}`,"-f","force=true"]);let{stderr:M,exitCode:v}=await V(["gh","api",`repos/${g}/asm-registry/contents/${w}`,"-X","PUT","-f",`message=Publish ${g}/${s.name}`,"-f",`content=${x}`,"-f",`branch=${b}`]);if(v!==0){let{stdout:j,exitCode:ye}=await V(["gh","api",`repos/${g}/asm-registry/contents/${w}?ref=${b}`,"-q",".sha"]),Ne=j.trim();if(ye===0&&Ne){let{exitCode:Ie}=await V(["gh","api",`repos/${g}/asm-registry/contents/${w}`,"-X","PUT","-f",`message=Update ${g}/${s.name}`,"-f",`content=${x}`,"-f",`branch=${b}`,"-f",`sha=${Ne}`]);if(Ie!==0)return{success:!1,manifest:m,prUrl:null,error:"Failed to write manifest to registry fork.",securityVerdict:r,securityReport:n}}else return{success:!1,manifest:m,prUrl:null,error:`Failed to write manifest to registry fork. ${M}`,securityVerdict:r,securityReport:n}}let S=Rr(s.name),I=Rr(s.description),L=Rr(s.license),T=`Publish ${g}/${li(s.name)}`,K=[`## Skill: ${S}`,"",`**Author:** ${g}`,`**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:Qt}=await V(["gh","pr","create","--repo",Ye,"--head",`${g}:${b}`,"--title",T,"--body",K]),se=null;if(Qt===0)se=U.trim();else{let j=ee.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/);j&&(se=j[0])}return se?{success:!0,manifest:m,prUrl:se,error:null,securityVerdict:r,securityReport:n}:{success:!1,manifest:m,prUrl:null,error:`Failed to create PR against ${Ye}. ${ee}`,securityVerdict:r,securityReport:n}}function iu(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 LH}from"child_process";import{promisify as OH}from"util";import{rm as g$,rename as i5,cp as s5,access as FH,mkdir as IH}from"fs/promises";import{join as u$}from"path";import{homedir as t5}from"os";var w9=OH(LH);async function AH(q,$,Z){let Q=Array(q.length),X=0;async function z(){while(X<q.length){let G=X++;Q[G]=await Z(q[G])}}let J=[];for(let G=0;G<Math.min($,q.length);G++)J.push(z());return await Promise.all(J),Q}async function TH(q,$){try{let Z=["ls-remote",q];if($)Z.push($);else Z.push("HEAD");let{stdout:Q}=await w9("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 ${q}: ${Z}`),null}}function P9(q){if(q.sourceType)return q.sourceType;if(q.source.startsWith("local:"))return"local";return"github"}function r5(q){if(q.startsWith("github:")){let $=q.slice(7),Z=$.indexOf("#");if(Z!==-1)$=$.slice(0,Z);return`https://github.com/${$}.git`}if(q.startsWith("file://"))return q;return null}function MH(q){if(!q.startsWith("github:"))return null;let $=q.slice(7),Z=$.indexOf("#");if(Z!==-1)$=$.slice(0,Z);let Q=$.split("/");if(Q.length<2||!Q[0]||!Q[1])return null;return{owner:Q[0],repo:Q[1]}}async function C9(q){let $=q?.readLockFn??k0,Z=q?.fetchRegistryIndexFn??L9,Q=q?.lock??await $(),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(([,Y])=>P9(Y)==="registry"||Y.registryName))z=await Z();let G=await AH(X,5,async([Y,H])=>{let V=P9(H);if(!H.commitHash||H.commitHash==="unknown")return{name:Y,installedCommit:H.commitHash||"unknown",latestCommit:"unknown",source:H.source,sourceType:V,status:"untracked"};if(V==="local")return{name:Y,installedCommit:H.commitHash,latestCommit:H.commitHash,source:H.source,sourceType:V,status:"up-to-date"};if(V==="registry"&&z){let L=H.registryName||Y,K=z.manifests.find((O)=>O.name.toLowerCase()===L.toLowerCase());if(K){let O=K.commit!==H.commitHash;return{name:Y,installedCommit:H0(H.commitHash),latestCommit:H0(K.commit),source:H.source,sourceType:V,status:O?"outdated":"up-to-date"}}}let W=r5(H.source);if(!W)return{name:Y,installedCommit:H0(H.commitHash),latestCommit:"unknown",source:H.source,sourceType:V,status:"error",error:"Cannot determine remote URL"};let B=await TH(W,H.ref);if(!B)return{name:Y,installedCommit:H0(H.commitHash),latestCommit:"unknown",source:H.source,sourceType:V,status:"error",error:"Failed to fetch remote commit"};let _=B!==H.commitHash;return{name:Y,installedCommit:H0(H.commitHash),latestCommit:H0(B),source:H.source,sourceType:V,status:_?"outdated":"up-to-date"}});return{entries:G,outdatedCount:G.filter((Y)=>Y.status==="outdated").length,upToDateCount:G.filter((Y)=>Y.status==="up-to-date").length,untrackedCount:G.filter((Y)=>Y.status==="untracked").length,errorCount:G.filter((Y)=>Y.status==="error").length}}async function jH(q,$,Z,Q){if(P9($)==="local")return{name:q,status:"skipped",reason:"Local skill (not updatable)"};let z=r5($.source);if(!z)return{name:q,status:"failed",reason:"Cannot determine remote URL"};let J=u$(t5(),".config","agent-skill-manager",".tmp",`${q}-${Date.now()}`);try{let G=u$(t5(),".config","agent-skill-manager",".tmp");await IH(G,{recursive:!0}),E(`updater: cloning latest ${q} to ${J}`);let Y=["clone","--depth","1"];if($.ref&&$.ref!=="HEAD")Y.push("--branch",$.ref);Y.push(z,J);try{await w9("git",Y,{timeout:60000})}catch(T){return{name:q,status:"failed",reason:`Clone failed: ${T.stderr||T.message}`}}let H=null;try{let{stdout:T}=await w9("git",["rev-parse","HEAD"],{cwd:J,timeout:5000});H=T.trim()}catch{return{name:q,status:"failed",reason:"Could not read new commit"}}if(H===$.commitHash)return{name:q,status:"skipped",reason:"Already up to date"};E(`updater: running security audit on ${q}`);let V="safe";try{let T=Q?.auditFn??R0,D=MH($.source);if(V=(await T(J,q,D?.owner,D?.repo)).verdict,V==="dangerous")return{name:q,status:"skipped",reason:"Security audit: dangerous update blocked",securityVerdict:V};if(V==="warning"||V==="caution"){if(!Z)return{name:q,status:"skipped",reason:`Security audit: ${V} use --yes to override`,securityVerdict:V};E(`updater: security audit ${V} for ${q} proceeding (--yes)`)}}catch(T){return E(`updater: security audit failed for ${q}: ${T.message}`),{name:q,status:"failed",reason:`Security audit failed skipping update: ${T.message}`}}let W=Q?.loadConfigFn??h,B=Q?.resolveProviderPathFn??X0,L=(await W()).providers.find((T)=>T.name===$.provider),K=L?L.global:`~/.${$.provider}/skills`,O=B(K),F=u$(O,q),A=u$(J,".git");try{await g$(A,{recursive:!0,force:!0})}catch{}try{await FH(F)}catch{let T=Q?.writeLockEntryFn??bq;return await s5(J,F,{recursive:!0}),await T(q,{...$,commitHash:H,installedAt:new Date().toISOString()}),{name:q,status:"updated",oldCommit:H0($.commitHash),newCommit:H0(H),securityVerdict:V}}let M=`${F}.bak-${Date.now()}`;try{await i5(F,M),await s5(J,F,{recursive:!0}),await g$(M,{recursive:!0,force:!0})}catch(T){try{await g$(F,{recursive:!0,force:!0}),await i5(M,F)}catch{}return{name:q,status:"failed",reason:`Atomic swap failed: ${T.message}`}}return await(Q?.writeLockEntryFn??bq)(q,{...$,commitHash:H,installedAt:new Date().toISOString()}),{name:q,status:"updated",oldCommit:H0($.commitHash),newCommit:H0(H),securityVerdict:V}}finally{try{await g$(J,{recursive:!0,force:!0})}catch{}}}async function e5(q,$,Z){let Q=Z?.readLockFn??k0,X=Z?.checkOutdatedFn??C9,z=Z?.updateSkillFn??jH,J=await Q(),G=await X({lock:J}),Y=G.entries.filter((W)=>W.status==="outdated"),H=[];if(q&&q.length>0){let W=new Set(q.map((B)=>B.toLowerCase()));Y=Y.filter((B)=>W.has(B.name.toLowerCase()));for(let B of q)if(!Y.find((_)=>_.name.toLowerCase()===B.toLowerCase()))if(!G.entries.find((L)=>L.name.toLowerCase()===B.toLowerCase()))E(`updater: skill "${B}" not found in lock file`),H.push(B);else E(`updater: skill "${B}" is already up to date`)}if(Y.length===0)return{results:[],updatedCount:0,skippedCount:0,failedCount:0,...H.length>0?{warnings:H}:{}};let V=[];for(let W of Y){let B=J.skills[W.name];if(!B)continue;let _=await z(W.name,B,$);V.push(_)}return{results:V,updatedCount:V.filter((W)=>W.status==="updated").length,skippedCount:V.filter((W)=>W.status==="skipped").length,failedCount:V.filter((W)=>W.status==="failed").length,...H.length>0?{warnings:H}:{}}}function H0(q){if(!q||q==="unknown")return"unknown";return q.slice(0,7)}function q8(q,$){if(q.entries.length===0)return"No skills installed.";let Z=(W)=>W,Q=$?U.red:Z,X=$?U.green:Z,z=$?U.yellow:Z,J=$?U.dim:Z,G=`${"Skill".padEnd(22)}${"Installed".padEnd(14)}${"Latest".padEnd(14)}Source`,Y="".repeat(60),H=[G,Y];for(let W of q.entries){let B=W.name.padEnd(22),_=W.installedCommit.padEnd(14),L,K;switch(W.status){case"outdated":L=Q(W.latestCommit.padEnd(14)),K=W.sourceType;break;case"up-to-date":L=X(W.latestCommit.padEnd(14)),K=J("(up to date)");break;case"untracked":L=z("untracked".padEnd(14)),K=z("untracked");break;case"error":L=J("error".padEnd(14)),K=J(W.error||"error");break}H.push(`${B}${_}${L}${K}`)}H.push("");let V=[];if(q.outdatedCount>0)V.push(Q(`${q.outdatedCount} outdated`));if(q.upToDateCount>0)V.push(X(`${q.upToDateCount} up to date`));if(q.untrackedCount>0)V.push(z(`${q.untrackedCount} untracked`));if(q.errorCount>0)V.push(J(`${q.errorCount} error`));return H.push(V.join(", ")),H.join(`
200
- `)}function $8(q){return JSON.stringify({skills:q.entries.map(($)=>({name:$.name,installed:$.installedCommit,latest:$.latestCommit,source:$.sourceType,status:$.status,...$.error?{error:$.error}:{}})),summary:{outdated:q.outdatedCount,upToDate:q.upToDateCount,untracked:q.untrackedCount,errors:q.errorCount}},null,2)}function Z8(q){return JSON.stringify({results:q.results.map(($)=>({name:$.name,status:$.status,...$.reason?{reason:$.reason}:{},...$.oldCommit?{oldCommit:$.oldCommit}:{},...$.newCommit?{newCommit:$.newCommit}:{},...$.securityVerdict?{securityVerdict:$.securityVerdict}:{}})),summary:{updated:q.updatedCount,skipped:q.skippedCount,failed:q.failedCount}},null,2)}import{execFile as kH}from"child_process";import{promisify as vH}from"util";import{access as Q8,readFile as J8,readdir as hH,writeFile as gH,rm as uH,stat as G8}from"fs/promises";import{join as E9}from"path";import{homedir as mH}from"os";import{constants as X8}from"fs";import{access as RH,realpath as DH,stat as NH}from"fs/promises";import{constants as wH}from"fs";import{delimiter as PH,resolve as CH,sep as EH}from"path";var SH="asm";function bH(q){if(!q)return[];let $=new Set,Z=[];for(let Q of q.split(PH)){let X=Q.trim();if(!X)continue;let z=X.endsWith(EH)?X.slice(0,-1):X;if($.has(z))continue;$.add(z),Z.push(z)}return Z}async function xH(q){try{if(!(await NH(q)).isFile())return!1}catch{return!1}try{return await RH(q,wH.X_OK),!0}catch{return!1}}async function yH(q){try{return await DH(q)}catch{return q}}async function fH(q=process.env.PATH){let $=new Set,Z=[];for(let Q of bH(q)){let X=CH(Q,SH);if(!await xH(X))continue;let z=await yH(X);if($.has(z))continue;$.add(z),Z.push({path:X,realPath:z})}return Z}async function m$(q=process.env.PATH){let $=await fH(q);if($.length===0)return{resolved:null,shadowed:[]};let[Z,...Q]=$;return{resolved:Z,shadowed:Q}}var zq=vH(kH);async function pH(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("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 dH(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("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 cH(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("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 lH(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("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 nH(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("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 aH(q){try{let $=E9(q,".asm-doctor-write-test");return await gH($,"test","utf-8"),await uH($),{writable:!0,exists:!0}}catch{}try{return await Q8(q,X8.W_OK),{writable:!0,exists:!0}}catch{}try{return await Q8(q,X8.F_OK),{writable:!1,exists:!0}}catch{return{writable:!0,exists:!1}}}async function oH(q){let $=q.providers.filter((z)=>z.enabled),Z=0,Q=0;for(let z of $){let J=X0(z.global);if(Q++,(await aH(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 iH(){let q=xq();try{let $=await J8(q,"utf-8"),Z=JSON.parse($),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($){if($?.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 sH(){let q=z8();try{let $=await J8(q,"utf-8"),Z=JSON.parse($);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[G,Y]of X){if(typeof Y!=="object"||Y===null){J.push(G);continue}let H=Y;for(let V of z)if(!H[V]){J.push(G);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($){if($?.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 tH(){try{let q=await fetch(B9,{method:"HEAD",signal:AbortSignal.timeout(5000)});if(q.ok)return{name:"Registry reachable",status:"pass",message:"OK"};return{name:"Registry reachable",status:"fail",message:`HTTP ${q.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 rH(q,$){let Z=Object.entries($.skills);if(Z.length===0)return{name:"Installed skills intact",status:"pass",message:"No skills in lock file"};let Q=[];for(let[J,G]of Z){let Y=q.providers.find((W)=>W.name===G.provider);if(!Y){Q.push(J);continue}let H=X0(Y.global),V=E9(H,J);try{if(!(await G8(V)).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 eH(q,$){let Z=new Set(Object.keys($.skills)),Q=[];for(let X of q.providers.filter((z)=>z.enabled)){let z=X0(X.global);try{let J=await hH(z);for(let G of J)try{if((await G8(E9(z,G))).isDirectory()&&!Z.has(G))Q.push(G)}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 qW(q){let $=q?.execFn??zq;try{let{stdout:Z}=await $("df",["-Pk",mH()],{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,G=J/1024;if(J>100)return{name:"Disk space",status:"pass",message:`OK (${G>=1?`${G.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 $W(){try{let q=await m$();if(q.shadowed.length===0){if(!q.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 ${q.resolved.path}`}}let $=q.resolved,Z=q.shadowed[0].path,Q=q.shadowed.length>1?` (+${q.shadowed.length-1} more)`:"";return{name:"No PATH shadowing",status:"warn",message:`resolved ${$.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(q){return{name:"No PATH shadowing",status:"warn",message:`Could not scan PATH: ${q?.message??q}`}}}async function Y8(){let q=await h(),$=await k0(),Q=(await Promise.allSettled([pH(),dH(),cH(),lH(),nH(),oH(q),iH(),sH(),tH(),rH(q,$),eH(q,$),qW(),$W()])).map((G,Y)=>{if(G.status==="fulfilled")return G.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"][Y],status:"fail",message:`Check threw: ${G.reason}`}}),X=Q.filter((G)=>G.status==="pass").length,z=Q.filter((G)=>G.status==="warn").length,J=Q.filter((G)=>G.status==="fail").length;return{checks:Q,passed:X,warnings:z,failures:J}}var ZW={pass:"",warn:"⚠️ ",fail:""};function U8(q){let $=["Checking your environment...",""];for(let Z of q.checks){let X=` ${ZW[Z.status]} ${Z.name}${Z.message?` (${Z.message})`:""}`;if($.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}`;$.push(` ${z}`)}}return $.push(""),$.push(`${q.passed} passed, ${q.warnings} warning${q.warnings!==1?"s":""}, ${q.failures} error${q.failures!==1?"s":""}`),$.join(`
203
- `)}function H8(q){return JSON.stringify({checks:q.checks.map(($)=>({name:$.name,status:$.status,message:$.message,...$.fix?{fix:$.fix}:{}})),summary:{passed:q.passed,warnings:q.warnings,failures:q.failures}},null,2)}import{readFile as b9,writeFile as QW,stat as B8,copyFile as XW}from"fs/promises";import{join as K8,resolve as _8,basename as x9,isAbsolute as L8}from"path";var W8=["name","description","version","license","creator","compatibility","allowed-tools","effort","tags","metadata"],V8=["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"],zW=["confirm","confirmation","error","errors","fail","failure","caution","warning","prerequisite","prerequisites","requires","requirements","rollback","dry-run","dry run","safety","validate","validation","check","backup"],JW=["acceptance criteria","expected output","expected result","edge case","edge cases","test","tests","testing","verify","verification","assert","example input","example output","given","then"],GW=["reference","references","see","template","templates","script","scripts","helper","helpers","link"],YW=["when to use","quick start","overview","instructions","steps","workflow","phases","progressive"];function O8(q){let $=q.split(`
204
- `);if($.length===0||$[0].trim()!=="---")return{rawFrontmatter:null,body:q};for(let Z=1;Z<$.length;Z++)if($[Z].trim()==="---"){let Q=$.slice(1,Z).join(`
205
- `),X=$.slice(Z+1).join(`
206
- `);return{rawFrontmatter:Q,body:X}}return{rawFrontmatter:$.slice(1).join(`
207
- `),body:""}}function F8(q){if(!q)return 0;return q.split(`
208
- `).length}function y9(q){if(!q)return 0;return q.split(/\s+/).map(($)=>$.trim()).filter(Boolean).length}function UW(q,$=1){return(q.match(/^#{1,6}\s+\S/gm)||[]).length>=$}function p$(q,$){let Z=q.toLowerCase();return $.filter((Q)=>Z.includes(Q))}function HW(q){return/```[\s\S]+?```/m.test(q)}function WW(q){return/^\s*[-*]\s+\S/m.test(q)||/^\s*\d+\.\s+\S/m.test(q)}function VW(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(q.name&&q.name.trim()),G=Boolean(q.description&&q.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(G)z+=1.5;else Q.push("Missing required field: description."),X.push("Add a one-line `description:` to frontmatter.");let Y=z0(q);if(Y&&Y!=="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(q.creator||q["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(q.license))z+=1;else Q.push("Missing `license`."),X.push("Add a `license` field (e.g. `license: MIT`).");let B=$.trim().length>=20,_=UW($,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 BW(q,$){let Z=[],Q=[],X=0,z=(q.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=y9(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 G=z.split(/\s+/)[0]?.toLowerCase().replace(/[^\w-]/g,"");if(Boolean(G&&(V8.includes(G)||V8.includes(G.replace(/s$/,"")))))X+=3,Z.push("Starts with an action verb.");else Z.push(`Does not start with a recognized action verb (got "${G??""}").`),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 KW(q,$){let Z=[],Q=[],X=0,z=p$($,YW);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(WW($))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=HW($),G=/\bexample\b/i.test($);if(J&&G)X+=2,Z.push("Includes example code block.");else if(J||G)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 Y=($.match(/^\s*[-*0-9.]*\s*(Do|Use|Run|Call|Check|Validate|Return|Emit|Write|Read|Ask|Confirm|Avoid|Never|Always)\b/gim)||[]).length;if(Y>=3)X+=2,Z.push(`Uses imperative voice (${Y} cues).`);else if(Y>=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 H=y9($);if(H>=80&&H<=3000)X+=1,Z.push(`Body length within healthy range (${H} words).`);else if(H<80)Z.push(`Body is very short (${H} words).`),Q.push("Expand the instructions; an underspecified skill gives the agent too much freedom.");else Z.push(`Body is very long (${H} 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 _W(q,$){let Z=[],Q=[],X=0,z=y9($);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=p$($,GW);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 Y=($.match(/```[\s\S]+?```/g)||[]).filter((H)=>F8(H)>60);if(Y.length===0)X+=2,Z.push("No oversized code blocks.");else Z.push(`${Y.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($))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 LW(q,$){let Z=[],Q=[],X=0,z=p$($,zW);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($),G=/\bconfirm\b|\bdry-?run\b|\bare you sure\b|\bbackup\b/i.test($);if(J&&G)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($)||/\brequire/i.test($)||/\bdepend/i.test($))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 OW(q,$){let Z=[],Q=[],X=0,z=p$($,JW);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($))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($))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 FW(q,$){let Z=[],Q=[],X=0,z=(q.name||"").trim();if(z){let Y=/^[a-z][a-z0-9-]*$/.test(z),H=z.length<=40;if(Y&&H)X+=4,Z.push(`name "${z}" follows kebab-case convention.`);else{if(!Y)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(!H)Z.push(`name is ${z.length} chars; keep it <= 40.`)}}else Q.push("Add a kebab-case `name` (e.g. `my-skill`).");let J=$.match(/^#{1,6}\s+(.+)$/gm)||[];if(J.length>0)if(J.filter((V)=>/^#{1,6}\s+([A-Z][a-z]+|Use|How|When|Workflow|Instructions|Examples|Steps|Acceptance)/.test(V)).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(q.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 yq(q){let{content:$,skillPath:Z,skillMdPath:Q}=q,X=s($),{rawFrontmatter:z,body:J}=O8($),G=[VW(X,J,z),BW(X,J),KW(X,J),_W(X,J),LW(X,J),OW(X,J),FW(X,J)];if(X.name&&x9(Z)===X.name){let L=G.find((K)=>K.id==="naming");if(L.score<L.max)L.score=Math.min(L.max,L.score+1),L.findings.push("Directory name matches frontmatter `name`.")}let Y=G.reduce((L,K)=>L+K.score,0),H=G.reduce((L,K)=>L+K.max,0),V=Math.round(Y/H*100),W="F";if(V>=90)W="A";else if(V>=80)W="B";else if(V>=65)W="C";else if(V>=50)W="D";let B=[],_=[...G].sort((L,K)=>L.score/L.max-K.score/K.max);for(let L of _){for(let K of L.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:G,overallScore:V,grade:W,topSuggestions:B,frontmatter:X}}async function I8(q){let $=L8(q)?q:_8(q),Z;try{Z=await B8($)}catch{throw Error(`Skill path does not exist: ${$}`)}let Q,X;if(Z.isFile())return Q=$,X=await b9(Q,"utf-8"),yq({content:X,skillPath:x9($)==="SKILL.md"?x9($):$,skillMdPath:Q});if(!Z.isDirectory())throw Error(`Skill path is not a directory or file: ${$}`);Q=K8($,"SKILL.md");try{X=await b9(Q,"utf-8")}catch{throw Error(`SKILL.md not found in ${$}. Run "asm init" to create one.`)}return yq({content:X,skillPath:$,skillMdPath:Q})}function IW(q){if(q<=20)return"low";if(q<=80)return"medium";if(q<=250)return"high";return"max"}function AW(q){let $=q.split(`
209
- `),Z=[],Q=[],X=0;while(X<$.length){let H=$[X];if(!H.trim()){X++;continue}let W=H.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);if(!W)return{newFrontmatter:q,changed:!1};let B=W[1],_=W[2];if(_===""||_===">"||_==="|"){let L=[H];X++;while(X<$.length){let K=$[X];if(K.trim()===""){L.push(K),X++;continue}if(/^\s+/.test(K))L.push(K),X++;else break}Q.push({key:B,text:L.join(`
210
- `)})}else Z.push({key:B,text:H}),X++}let z=(H)=>{let V=W8.indexOf(H);return V===-1?W8.length+1:V},J=[...Z].sort((H,V)=>{let W=z(H.key),B=z(V.key);if(W!==B)return W-B;return Z.indexOf(H)-Z.indexOf(V)}),G=J.some((H,V)=>H!==Z[V]);return{newFrontmatter:[...J.map((H)=>H.text),...Q.map((H)=>H.text)].join(`
211
- `),changed:G}}function TW(q,$={}){let Z=[],Q=[],X=q.replace(/\r\n/g,`
212
- `);if(X!==q)Z.push({id:"normalise-line-endings",description:"Convert CRLF line endings to LF."});let z=X.split(`
213
- `),J=z.map((O)=>O.replace(/[ \t]+$/g,""));if(J.some((O,F)=>O!==z[F]))Z.push({id:"strip-trailing-whitespace",description:"Strip trailing whitespace from lines."});X=J.join(`
214
- `);let{rawFrontmatter:G,body:Y}=O8(X),H=s(X);if(G===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 V=G;if(!Boolean(H.version||H["metadata.version"]))V=S9(V,"version","0.1.0"),Z.push({id:"add-missing-version",description:"Add `version: 0.1.0`."});if(!Boolean(H.creator||H["metadata.creator"])){let O=$.gitAuthor?.trim();if(O)V=S9(V,"creator",O),Z.push({id:"add-missing-creator",description:`Add \`creator: ${O}\` from git config.`});else Q.push({id:"add-missing-creator",description:"Missing `creator` no git user.name found to fill in safely."})}if(!H.effort){let O=IW(F8(Y));V=S9(V,"effort",O),Z.push({id:"infer-missing-effort",description:`Infer \`effort: ${O}\` from body size.`})}if(!H.description)Q.push({id:"missing-description",description:"Missing `description` content-level fix, left to the author."});let _=AW(V);if(_.changed)Z.push({id:"reorder-frontmatter",description:"Reorder frontmatter fields to canonical order."}),V=_.newFrontmatter;let L=Y.replace(/^\n+/,""),K=`---
215
- ${V.replace(/^\n+|\n+$/g,"")}
199
+ `):""}import{execFile as Ky}from"child_process";import{promisify as Jy}from"util";import{rm as ci,rename as nu,cp as ru,access as Hy,mkdir as Yy}from"fs/promises";import{join as ui}from"path";import{homedir as ou}from"os";var Or=Jy(Ky);async function Gy(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 Wy(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 au(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 zy(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 Gy(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 g=c.registryName||l,m=r.manifests.find(y=>y.name.toLowerCase()===g.toLowerCase());if(m){let y=m.commit!==c.commitHash;return{name:l,installedCommit:de(c.commitHash),latestCommit:de(m.commit),source:c.source,sourceType:d,status:y?"outdated":"up-to-date"}}}let f=au(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 Wy(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 h=p!==c.commitHash;return{name:l,installedCommit:de(c.commitHash),latestCommit:de(p),source:c.source,sourceType:d,status:h?"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 Qy(e,t,s,i){if(Tr(t)==="local")return{name:e,status:"skipped",reason:"Local skill (not updatable)"};let r=au(t.source);if(!r)return{name:e,status:"failed",reason:"Cannot determine remote URL"};let o=ui(ou(),".config","agent-skill-manager",".tmp",`${e}-${Date.now()}`);try{let a=ui(ou(),".config","agent-skill-manager",".tmp");await Yy(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(k){return{name:e,status:"failed",reason:`Clone failed: ${k.stderr||k.message}`}}let c=null;try{let{stdout:k}=await Or("git",["rev-parse","HEAD"],{cwd:o,timeout:5e3});c=k.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 k=i?.auditFn??Pe,E=zy(t.source);if(d=(await k(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(k){return N(`updater: security audit failed for ${e}: ${k.message}`),{name:e,status:"failed",reason:`Security audit failed \u2014 skipping update: ${k.message}`}}let f=i?.loadConfigFn??q,p=i?.resolveProviderPathFn??oe,g=(await f()).providers.find(k=>k.name===t.provider),m=g?g.global:`~/.${t.provider}/skills`,y=p(m),b=ui(y,e),w=ui(o,".git");try{await ci(w,{recursive:!0,force:!0})}catch{}try{await Hy(b)}catch{let k=i?.writeLockEntryFn??ht;return await ru(o,b,{recursive:!0}),await k(e,{...t,commitHash:c,installedAt:new Date().toISOString()}),{name:e,status:"updated",oldCommit:de(t.commitHash),newCommit:de(c),securityVerdict:d}}let $=`${b}.bak-${Date.now()}`;try{await nu(b,$),await ru(o,b,{recursive:!0}),await ci($,{recursive:!0,force:!0})}catch(k){try{await ci(b,{recursive:!0,force:!0}),await nu($,b)}catch{}return{name:e,status:"failed",reason:`Atomic swap failed: ${k.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 ci(o,{recursive:!0,force:!0})}catch{}}}async function lu(e,t,s){let i=s?.readLockFn??Le,n=s?.checkOutdatedFn??Mr,r=s?.updateSkillFn??Qy,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(h=>h.name.toLowerCase()===p.toLowerCase())||(a.entries.find(g=>g.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 h=await r(f.name,p,t);d.push(h)}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 cu(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),h=f.installedCommit.padEnd(14),g,m;switch(f.status){case"outdated":g=i(f.latestCommit.padEnd(14)),m=f.sourceType;break;case"up-to-date":g=n(f.latestCommit.padEnd(14)),m=o("(up to date)");break;case"untracked":g=r("untracked".padEnd(14)),m=r("untracked");break;case"error":g=o("error".padEnd(14)),m=o(f.error||"error");break}c.push(`${p}${h}${g}${m}`)}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 uu(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 fu(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 ub}from"child_process";import{promisify as fb}from"util";import{access as du,readFile as mu,readdir as db,writeFile as pb,rm as mb,stat as hu}from"fs/promises";import{join as Dr}from"path";import{homedir as hb}from"os";import{constants as pu}from"fs";import{access as Xy,realpath as Zy,stat as eb}from"fs/promises";import{constants as tb}from"fs";import{delimiter as sb,resolve as ib,sep as nb}from"path";var rb="asm";function ob(e){if(!e)return[];let t=new Set,s=[];for(let i of e.split(sb)){let n=i.trim();if(!n)continue;let r=n.endsWith(nb)?n.slice(0,-1):n;t.has(r)||(t.add(r),s.push(r))}return s}async function ab(e){try{if(!(await eb(e)).isFile())return!1}catch{return!1}try{return await Xy(e,tb.X_OK),!0}catch{return!1}}async function lb(e){try{return await Zy(e)}catch{return e}}async function cb(e=process.env.PATH){let t=new Set,s=[];for(let i of ob(e)){let n=ib(i,rb);if(!await ab(n))continue;let r=await lb(n);t.has(r)||(t.add(r),s.push({path:n,realPath:r}))}return s}async function fi(e=process.env.PATH){let t=await cb(e);if(t.length===0)return{resolved:null,shadowed:[]};let[s,...i]=t;return{resolved:s,shadowed:i}}var ct=fb(ub);async function gb(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 yb(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 bb(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 wb(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 vb(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 kb(e){try{let t=Dr(e,".asm-doctor-write-test");return await pb(t,"test","utf-8"),await mb(t),{writable:!0,exists:!0}}catch{}try{return await du(e,pu.W_OK),{writable:!0,exists:!0}}catch{}try{return await du(e,pu.F_OK),{writable:!1,exists:!0}}catch{return{writable:!0,exists:!1}}}async function Sb(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 kb(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 $b(){let e=pt();try{let t=await mu(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 xb(){let e=Qr();try{let t=await mu(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 Cb(){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 Eb(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 hu(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 Ab(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 db(r);for(let a of o)try{(await hu(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 Pb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("df",["-Pk",hb()],{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 Nb(){try{let e=await fi();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 gu(){let e=await q(),t=await Le(),i=(await Promise.allSettled([gb(),yb(),bb(),wb(),vb(),Sb(e),$b(),xb(),Cb(),Eb(e,t),Ab(e,t),Pb(),Nb()])).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 Ib={pass:"\u2705",warn:"\u26A0\uFE0F ",fail:"\u274C"};function yu(e){let t=["Checking your environment...",""];for(let s of e.checks){let n=` ${Ib[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 bu(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 Lb,stat as ut,copyFile as Rb,readdir as Ob}from"fs/promises";import{join as ft,resolve as Fr,basename as ge,isAbsolute as jr}from"path";var wu=["name","description","version","license","creator","compatibility","allowed-tools","effort","tags","metadata"],vu=["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"],Tb=["confirm","confirmation","error","errors","fail","failure","caution","warning","prerequisite","prerequisites","requires","requirements","rollback","dry-run","dry run","safety","validate","validation","check","backup"],Mb=["acceptance criteria","expected output","expected result","edge case","edge cases","test","tests","testing","verify","verification","assert","example input","example output","given","then"],Db=["reference","references","see","template","templates","script","scripts","helper","helpers","link"],_b=["when to use","quick start","overview","instructions","steps","workflow","phases","progressive"];function $u(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 xu(e){return e?e.split(`
209
+ `).length:0}function Br(e){return e?e.split(/\s+/).map(t=>t.trim()).filter(Boolean).length:0}function qb(e,t=1){return(e.match(/^#{1,6}\s+\S/gm)||[]).length>=t}function di(e,t){let s=e.toLowerCase();return t.filter(i=>s.includes(i))}function Fb(e){return/```[\s\S]+?```/m.test(e)}function jb(e){return/^\s*[-*]\s+\S/m.test(e)||/^\s*\d+\.\s+\S/m.test(e)}function Bb(e,t,s){let i=[],n=[],r=0;s!==null?(r+=2,i.push("Has YAML frontmatter block.")):(i.push("SKILL.md has no YAML frontmatter."),n.push("Add a YAML frontmatter block delimited by `---` with at least `name` and `description` fields."));let o=!!(e.name&&e.name.trim()),a=!!(e.description&&e.description.trim());o?r+=1.5:(i.push("Missing required field: name."),n.push("Add `name:` to frontmatter (use the skill directory name).")),a?r+=1.5:(i.push("Missing required field: description."),n.push("Add a one-line `description:` to frontmatter."));let l=ae(e);l&&l!=="0.0.0"?r+=1:(i.push("Missing or default version."),n.push("Set `metadata.version` (or top-level `version`) using semver (e.g. 0.1.0).")),!!(e.creator||e["metadata.creator"])?r+=1:(i.push("Missing `creator`."),n.push("Add a `creator` field so users know who authored and maintains the skill.")),!!e.license?r+=1:(i.push("Missing `license`."),n.push("Add a `license` field (e.g. `license: MIT`)."));let p=t.trim().length>=20,h=qb(t,1);return p?(r+=1,i.push("Body has meaningful content.")):(i.push("Body content is too short (<20 chars of instructions)."),n.push("Flesh out the markdown body with at least one paragraph of instructions for the agent.")),h?(r+=1,i.push("Body uses markdown headings.")):(i.push("Body has no markdown headings."),n.push("Add section headings (e.g. `## When to Use`, `## Instructions`) so the agent can navigate the skill quickly.")),{id:"structure",name:"Structure & completeness",score:Math.round(r),max:10,findings:i,suggestions:n}}function Ub(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=Br(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&&(vu.includes(a)||vu.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 Vb(e,t){let s=[],i=[],n=0,r=di(t,_b);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.'),jb(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=Fb(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=Br(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 Kb(e,t){let s=[],i=[],n=0,r=Br(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=di(t,Db);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=>xu(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 Jb(e,t){let s=[],i=[],n=0,r=di(t,Tb);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 Hb(e,t){let s=[],i=[],n=0,r=di(t,Mb);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 Yb(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}=e,n=ie(t),{rawFrontmatter:r,body:o}=$u(t),a=[Bb(n,o,r),Ub(n,o),Vb(n,o),Kb(n,o),Jb(n,o),Hb(n,o),Yb(n,o)];if(n.name&&ge(s)===n.name){let g=a.find(m=>m.id==="naming");g.score<g.max&&(g.score=Math.min(g.max,g.score+1),g.findings.push("Directory name matches frontmatter `name`."))}let l=a.reduce((g,m)=>g+m.score,0),c=a.reduce((g,m)=>g+m.max,0),d=Math.round(l/c*100),f="F";d>=90?f="A":d>=80?f="B":d>=65?f="C":d>=50&&(f="D");let p=[],h=[...a].sort((g,m)=>g.score/g.max-m.score/m.max);for(let g of h){for(let m of g.suggestions){if(p.length>=3)break;p.includes(m)||p.push(m)}if(p.length>=3)break}return{skillPath:s,skillMdPath:i,evaluatedAt:new Date().toISOString(),categories:a,overallScore:d,grade:f,topSuggestions:p,frontmatter:n}}async function Cu(e){let t=jr(e)?e:Fr(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.`)}return Wt({content:n,skillPath:t,skillMdPath:i})}function Gb(e){return e<=20?"low":e<=80?"medium":e<=250?"high":"max"}function Wb(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],h=f[2];if(h===""||h===">"||h==="|"){let g=[c];for(n++;n<t.length;){let m=t[n];if(m.trim()===""){g.push(m),n++;continue}if(/^\s+/.test(m))g.push(m),n++;else break}i.push({key:p,text:g.join(`
211
+ `)})}else s.push({key:p,text:c}),n++}let r=c=>{let d=wu.indexOf(c);return d===-1?wu.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 zb(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(y=>y.replace(/[ \t]+$/g,""));o.some((y,b)=>y!==r[b])&&s.push({id:"strip-trailing-whitespace",description:"Strip trailing whitespace from lines."}),n=o.join(`
215
+ `);let{rawFrontmatter:a,body:l}=$u(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 y=t.gitAuthor?.trim();y?(d=_r(d,"creator",y),s.push({id:"add-missing-creator",description:`Add \`creator: ${y}\` 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 y=Gb(xu(l));d=_r(d,"effort",y),s.push({id:"infer-missing-effort",description:`Infer \`effort: ${y}\` from body size.`})}c.description||i.push({id:"missing-description",description:"Missing `description` \u2014 content-level fix, left to the author."});let h=Wb(d);h.changed&&(s.push({id:"reorder-frontmatter",description:"Reorder frontmatter fields to canonical order."}),d=h.newFrontmatter);let g=l.replace(/^\n+/,""),m=`---
216
+ ${d.replace(/^\n+|\n+$/g,"")}
216
217
  ---
217
218
 
218
- ${L}`;if(!K.endsWith(`
219
- `))K+=`
220
- `;if(K===q.replace(/\r\n/g,`
221
- `));return{newContent:K,applied:Z,skipped:Q}}function S9(q,$,Z){if(new RegExp(`^${$}:\\s*`,"m").test(q))return q;let X=/[:#{}\[\],&*?|<>=!%@`"']/.test(Z)?JSON.stringify(Z):Z,z=q.length===0||q.endsWith(`
219
+ ${g}`;return m.endsWith(`
220
+ `)||(m+=`
221
+ `),e.replace(/\r\n/g,`
222
+ `),{newContent:m,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`${q}${z}${$}: ${X}
224
- `}function MW(q,$,Z="SKILL.md"){if(q===$)return"";let Q=q.split(`
225
- `),X=$.split(`
226
- `),z=[`--- a/${Z}`,`+++ b/${Z}`],J=0;while(J<Q.length&&J<X.length&&Q[J]===X[J])J++;let G=0;while(G<Q.length-J&&G<X.length-J&&Q[Q.length-1-G]===X[X.length-1-G])G++;let Y=Q.slice(J,Q.length-G),H=X.slice(J,X.length-G),V=J+1,W=J+1;z.push(`@@ -${V},${Y.length} +${W},${H.length} @@`);let B=Q.slice(Math.max(0,J-3),J).map((L)=>` ${L}`),_=Q.slice(Q.length-G,Math.min(Q.length,Q.length-G+3)).map((L)=>` ${L}`);z.push(...B);for(let L of Y)z.push(`-${L}`);for(let L of H)z.push(`+${L}`);return z.push(..._),z.join(`
227
- `)}async function A8(q,$){let Z=L8(q)?q:_8(q),Q,X=await B8(Z).catch(()=>null);if(!X)throw Error(`Skill path does not exist: ${Z}`);if(X.isFile())Q=Z;else if(X.isDirectory())Q=K8(Z,"SKILL.md");else throw Error(`Skill path is not a directory or file: ${Z}`);let z;try{z=await b9(Q,"utf-8")}catch{throw Error(`SKILL.md not found at ${Q}.`)}let J=TW(z,{gitAuthor:$.gitAuthor}),G=MW(z,J.newContent),Y=null;if(!$.dryRun&&J.newContent!==z)Y=`${Q}.bak`,await XW(Q,Y),await QW(Q,J.newContent,"utf-8");return{report:yq({content:$.dryRun?z:J.newContent,skillPath:Z,skillMdPath:Q}),applied:J.applied,skipped:J.skipped,diff:G,dryRun:$.dryRun,backupPath:Y,skillMdPath:Q}}async function T8(){try{let q=Bun.spawn(["git","config","--global","--get","user.name"],{stdout:"pipe",stderr:"pipe"}),$=await new Response(q.stdout).text();if(await q.exited!==0)return null;let Q=$.trim();return Q?Q:null}catch{return null}}function jW(q,$,Z=20){let Q=Math.round(q/$*Z);return"".repeat(Q)+"".repeat(Math.max(0,Z-Q))}function f9(q){let $=[];$.push(`Skill evaluation: ${q.skillPath}`),$.push(`SKILL.md: ${q.skillMdPath}`),$.push(""),$.push(`Overall score: ${q.overallScore}/100 (${q.grade})`),$.push(""),$.push("Categories:");for(let Z of q.categories)$.push(` ${Z.name.padEnd(28)} ${String(Z.score).padStart(2)}/${Z.max} ${jW(Z.score,Z.max)}`);if($.push(""),q.topSuggestions.length>0){$.push("Top suggestions:");for(let Z of q.topSuggestions)$.push(` ${Z}`)}else $.push("No suggestions skill looks great.");return $.join(`
228
- `)}function M8(q){return JSON.stringify(q,null,2)}function j8(q){let $=[];if(q.applied.length===0&&q.skipped.length===0)return $.push("No fixes needed SKILL.md is already clean."),$.join(`
229
- `);if(q.applied.length>0){$.push(`${q.dryRun?"Would apply":"Applied"} ${q.applied.length} fix(es):`);for(let Z of q.applied)$.push(` ${Z.description}`)}if(q.skipped.length>0){$.push(""),$.push(`Skipped ${q.skipped.length} issue(s) (not auto-fixable):`);for(let Z of q.skipped)$.push(` ${Z.description}`)}if(q.diff)$.push(""),$.push("Diff:"),$.push(q.diff);if(!q.dryRun&&q.backupPath)$.push(""),$.push(`Backup: ${q.backupPath}`);return $.join(`
230
- `)}function k9(q,$=null){return{skill_path:q.skillPath,skill_md_path:q.skillMdPath,overall_score:q.overallScore,grade:q.grade,categories:q.categories.map((Z)=>({id:Z.id,name:Z.name,score:Z.score,max:Z.max,findings:Z.findings,suggestions:Z.suggestions})),top_suggestions:q.topSuggestions,fix:$?{dry_run:$.dryRun,applied:$.applied,skipped:$.skipped,backup_path:$.backupPath,diff:$.diff}:null}}function R8(q){if(q instanceof Error)return q.message;if(typeof q==="string")return q;try{return JSON.stringify(q)}catch{return String(q)}}function D8(q,$,Z,Q,X){let z={severity:"error",message:Q,code:X};return{providerId:q.id,providerVersion:q.version,schemaVersion:q.schemaVersion,score:0,passed:!1,categories:[],findings:[z],raw:void 0,startedAt:$,durationMs:Z}}async function N8(q,$,Z={}){let Q=new Date().toISOString(),X=performance.now(),z={id:q.id,version:q.version,schemaVersion:q.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 G=null;if(typeof Z.timeoutMs==="number"&&Z.timeoutMs>0)G=setTimeout(()=>J.abort(Error("timeout")),Z.timeoutMs);let Y={...Z,signal:J.signal};try{let H=await Promise.race([q.run($,Y).then((B)=>({kind:"ok",value:B})),new Promise((B)=>{if(J.signal.aborted){B({kind:"timeout"});return}J.signal.addEventListener("abort",()=>B({kind:"timeout"}))})]),V=Math.max(0,Math.round(performance.now()-X));if(H.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 D8(z,Q,V,_,B instanceof Error&&B.message==="timeout"?"timeout":"aborted")}let W=H.value;return{...W,providerId:z.id,providerVersion:z.version,schemaVersion:W.schemaVersion??z.schemaVersion,startedAt:Q,durationMs:V}}catch(H){let V=Math.max(0,Math.round(performance.now()-X));return D8(z,Q,V,R8(H),"provider-threw")}finally{if(G)clearTimeout(G)}}var RW=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function fq(q){if(typeof q!=="string")return null;let $=RW.exec(q.trim());if(!$)return null;let[,Z,Q,X,z]=$;return{major:Number(Z),minor:Number(Q),patch:Number(X),prerelease:z?z.split("."):[]}}function d$(q,$){if(q.major!==$.major)return q.major-$.major;if(q.minor!==$.minor)return q.minor-$.minor;if(q.patch!==$.patch)return q.patch-$.patch;if(q.prerelease.length===0&&$.prerelease.length>0)return 1;if(q.prerelease.length>0&&$.prerelease.length===0)return-1;let Z=Math.max(q.prerelease.length,$.prerelease.length);for(let Q=0;Q<Z;Q++){let X=q.prerelease[Q],z=$.prerelease[Q];if(X===void 0)return-1;if(z===void 0)return 1;let J=/^\d+$/.test(X),G=/^\d+$/.test(z);if(J&&G){let Y=Number(X)-Number(z);if(Y!==0)return Y}else if(J&&!G)return-1;else if(!J&&G)return 1;else if(X<z)return-1;else if(X>z)return 1}return 0}function v9(q,$){let Z=fq(q);if(!Z)throw Error(`invalid semver: ${$} "${q}"`);return Z}function DW(q,$){if(typeof $!=="string"||$.trim().length===0)throw Error(`invalid semver range: ${JSON.stringify($)}`);let Z=fq(q);if(!Z)return!1;let Q=$.trim();if(Q==="*"||Q==="x"||Q==="X")return!0;if(Q.startsWith("^")){let J=v9(Q.slice(1),"range base");if(d$(Z,J)<0)return!1;if(J.major>0)return Z.major===J.major;if(J.minor>0)return Z.major===0&&Z.minor===J.minor;return Z.major===0&&Z.minor===0&&Z.patch===J.patch}if(Q.startsWith("~")){let J=v9(Q.slice(1),"range base");if(d$(Z,J)<0)return!1;return Z.major===J.major&&Z.minor===J.minor}let X=Q.startsWith("=")?Q.slice(1).trim():Q,z=fq(X);if(!z)throw Error(`invalid semver range: ${JSON.stringify($)}`);return d$(Z,z)===0}var c$=new Map;function w8(q){if(!q||typeof q.id!=="string"||q.id.length===0)throw Error("register: provider.id is required");if(v9(q.version,`provider ${q.id} version`),typeof q.schemaVersion!=="number"||!Number.isInteger(q.schemaVersion))throw Error(`register: provider ${q.id} schemaVersion must be an integer`);let $=c$.get(q.id)??[];if($.some((Z)=>Z.version===q.version))throw Error(`register: provider ${q.id}@${q.version} already registered`);$.push(q),c$.set(q.id,$)}function P8(q,$){if(typeof q!=="string"||q.length===0)throw Error("resolve: id is required");let Z=c$.get(q);if(!Z||Z.length===0)throw Error(`resolve: provider "${q}" is not registered`);let Q=Z.filter((X)=>DW(X.version,$));if(Q.length===0){let X=Z.map((z)=>z.version).join(", ");throw Error(`resolve: no version of "${q}" satisfies "${$}" (have: ${X})`)}return Q.sort((X,z)=>d$(fq(z.version),fq(X.version))),Q[0]}function C8(){let q=[];for(let $ of c$.values())for(let Z of $)q.push(Z);return q}import{stat as NW}from"fs/promises";var E8="quality",S8="1.0.0",b8=1;function wW(q){return q.topSuggestions.map(($)=>({severity:"info",message:$}))}function PW(q){return q.categories.map(($)=>({id:$.id,name:$.name,score:$.score,max:$.max}))}var x8={id:E8,version:S8,schemaVersion:b8,description:"Static linter for SKILL.md structure, description, and safety.",async applicable(q){try{if(!(await NW(q.skillMdPath)).isFile())return{ok:!1,reason:`${q.skillMdPath} is not a file`};return{ok:!0}}catch{return{ok:!1,reason:`SKILL.md not found at ${q.skillMdPath}`}}},async run(q,$){let Z=await I8(q.skillPath);return{providerId:E8,providerVersion:S8,schemaVersion:b8,score:Z.overallScore,passed:Z.grade!=="F",categories:PW(Z),findings:wW(Z),raw:Z,startedAt:"",durationMs:0}}};function y8(){w8(x8)}var e={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 g0(){let{log:q,info:$}=console,Z=(...Q)=>process.stderr.write(Q.map(String).join(" ")+`
231
- `);return console.log=Z,console.info=Z,()=>{console.log=q,console.info=$}}function k8(q){return{timestamp:new Date().toISOString(),asm_version:f8,duration_ms:Math.round(performance.now()-q)}}function l(q,$,Z){let Q={version:1,command:q,status:"ok",data:$,meta:k8(Z)},X=process.stdout.isTTY?2:0;return JSON.stringify(Q,null,X)}function q0(q,$,Z,Q,X){let z={version:1,command:q,status:"error",error:{code:$,message:Z,...X!==void 0?{details:X}:{}},meta:k8(Q)},J=process.stdout.isTTY?2:0;return JSON.stringify(z,null,J)}import{writeFile as mW,mkdir as pW,unlink as dW,readFile as cW}from"fs/promises";import{join as g9}from"path";import{readdir as CW,readFile as EW}from"fs/promises";import{join as SW}from"path";function h9(q){let $=new Set,Z=q.toLowerCase().split(/[\s\-_.,;:()[\]{}"']+/);for(let Q of Z)if(Q.length>=2)$.add(Q);return $}var bW=10,xW=5,yW=3,fW=1;function kW(q,$){let Z=h9(q),Q=h9($.name),X=h9($.description),z=0;for(let J of Z){if(Q.has(J))z+=bW;if(X.has(J))z+=yW;if($.name.toLowerCase().includes(J))z+=xW;if($.description.toLowerCase().includes(J))z+=fW}return z}async function v8(q){let $=new Map,Z;try{Z=await CW(q)}catch{return $}for(let Q of Z){if(!Q.endsWith(".json"))continue;let X=SW(q,Q);try{let z=await EW(X,"utf-8"),J=JSON.parse(z);for(let G of J.skills){if(!("license"in G))G.license="";if(!("creator"in G))G.creator="";if(!("compatibility"in G))G.compatibility="";if(!("allowedTools"in G))G.allowedTools=[];if(!("verified"in G))G.verified=!1}$.set(`${J.owner}/${J.repo}`,J)}catch{}}return $}async function l$(){let q=await v8(u8()),$=await v8(kq()),Z=new Map(q);for(let[Q,X]of $)Z.set(Q,X);return Array.from(Z.values())}var vW=["license","creator","version"];function h8(q){return vW.includes(q)}function g8(q,$){return q[$]||""}function hW(q,$){if($.has)for(let Z of $.has){if(!h8(Z))continue;if(!g8(q,Z))return!1}if($.missing)for(let Z of $.missing){if(!h8(Z))continue;if(g8(q,Z))return!1}return!0}function m8(q){let $=[];if(!q.license)$.push("license");if(!q.creator)$.push("creator");if(!q.version||q.version==="0.0.0")$.push("version");return $}async function n$(q,$=20,Z){let Q=await l$(),X=[],z=!q&&Z;for(let J of Q)for(let G of J.skills){if(Z&&!hW(G,Z))continue;let Y=z?1:kW(q,G);if(Y>0)X.push({skill:G,repo:{owner:J.owner,repo:J.repo},score:Y})}return X.sort((J,G)=>G.score-J.score),X.slice(0,$)}async function p8(){return(await l$()).reduce(($,Z)=>$+Z.skillCount,0)}var gW=[{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 d8(q,$){let Z=[];if(!q.name||!q.name.trim())Z.push("missing frontmatter field: name");if(!q.description||!q.description.trim())Z.push("missing frontmatter field: description");if(uW($).trim().length<20)Z.push("SKILL.md body too short (less than 20 chars of instructions)");for(let{label:X,pattern:z}of gW)if(z.test($))Z.push(`malicious pattern detected: ${X}`);return{verified:Z.length===0,reasons:Z}}function uW(q){let $=q.trimStart();if(!$.startsWith("---"))return $;let Z=$.indexOf(`
232
- ---`,3);if(Z===-1)return"";return $.slice(Z+4)}async function lW(){let q=kq();return await pW(q,{recursive:!0}),q}async function c8(q){await c0();let $;try{$=d0(q)}catch(Q){return{success:!1,repoIndex:null,error:Q.message}}if($.isLocal)return{success:!1,repoIndex:null,error:"Local paths are not supported for indexing. Use a GitHub source instead."};E(`ingester: cloning ${$.owner}/${$.repo}`);let Z=null;try{Z=await l0($),E(`ingester: discovering skills in ${Z}`);let Q=await lq(Z);E(`ingester: found ${Q.length} skills`);let X=[];for(let Y of Q){let H=g9(Z,Y.relPath,"SKILL.md"),V="";try{V=await cW(H,"utf-8")}catch{E(`ingester: could not read SKILL.md at ${H}`)}let W=d8(Y,V);if(!W.verified)E(`ingester: ${Y.name} not verified: ${W.reasons.join(", ")}`);let B=typeof Y.tokenCount==="number"?Y.tokenCount:V?cq(V):void 0,_;if(V)try{let L=yq({content:V,skillPath:Y.relPath||Y.name,skillMdPath:H});_={overallScore:L.overallScore,grade:L.grade,categories:L.categories.map((K)=>({id:K.id,name:K.name,score:K.score,max:K.max})),evaluatedAt:L.evaluatedAt,evaluatedVersion:Y.version||void 0}}catch(L){E(`ingester: eval failed for ${Y.name}: ${L}`)}X.push({name:Y.name,description:Y.description,version:Y.version,license:Y.license,creator:Y.creator,compatibility:Y.compatibility,allowedTools:Y.allowedTools,installUrl:`github:${$.owner}/${$.repo}${$.ref?`#${$.ref}`:""}${Y.relPath?`:${Y.relPath}`:""}`,relPath:Y.relPath,verified:W.verified,tokenCount:B,evalSummary:_})}let z={repoUrl:$.cloneUrl,owner:$.owner,repo:$.repo,updatedAt:new Date().toISOString(),skillCount:X.length,skills:X},J=await lW(),G=g9(J,`${$.owner}_${$.repo}.json`);return await mW(G,JSON.stringify(z,null,2)+`
233
- `,"utf-8"),E(`ingester: wrote index to ${G}`),{success:!0,repoIndex:z}}catch(Q){return{success:!1,repoIndex:null,error:Q.message}}finally{if(Z)await Q0(Z)}}async function l8(){return(await l$()).map(($)=>({owner:$.owner,repo:$.repo,skillCount:$.skillCount,updatedAt:$.updatedAt})).sort(($,Z)=>Z.skillCount-$.skillCount)}async function n8(q,$){let Z=kq(),Q=g9(Z,`${q}_${$}.json`);try{return await dW(Q),!0}catch{return!1}}import{join as nW}from"path";function aW(q){switch(q){case"dangerous":return 3;case"warning":return 2;case"caution":return 1;default:return 0}}function l9(q){return{verdict:q.every(($)=>$.verdict==="safe")?"safe":q.some(($)=>$.verdict==="dangerous")?"dangerous":"warning",findings:q.map(($)=>({skill:$.skillName,verdict:$.verdict,verdict_reason:$.verdictReason,total_files:$.totalFiles,total_lines:$.totalLines})),risk_score:q.reduce(($,Z)=>$+aW(Z.verdict),0)}}function oW(q){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}},Q=0;while(Q<$.length){let X=$[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];if(z==="global"||z==="project"||z==="both")Z.flags.scope=z;else P(`Invalid scope: "${z}". Must be global, project, or both.`),process.exit(2)}else if(X==="--sort"){Q++;let z=$[Q];if(z==="name"||z==="version"||z==="location")Z.flags.sort=z;else P(`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]||null;else if(X==="--name")Q++,Z.flags.name=$[Q]||null;else if(X==="--force"||X==="-f")Z.flags.force=!0;else if(X==="--path")Q++,Z.flags.path=$[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==="--installed")Z.flags.installed=!0;else if(X==="--available")Z.flags.available=!0;else if(X==="--transport"||X==="-t"){Q++;let z=$[Q];if(z==="https"||z==="ssh"||z==="auto")Z.flags.transport=z;else P(`Invalid transport: "${z}". Must be https, ssh, or auto.`),process.exit(2)}else if(X==="--method"||X==="-m"){Q++;let z=$[Q];if(z==="default"||z==="vercel")Z.flags.method=z;else P(`Invalid method: "${z}". Must be default or vercel.`),process.exit(2)}else if(X==="--skill")Q++,Z.flags.path=$[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])Z.flags.has.push($[Q])}else if(X==="--missing"){if(Q++,$[Q])Z.flags.missing.push($[Q])}else if(X.startsWith("-"))P(`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 P(q){console.error(U.red(`Error: ${q}`))}function iW(){console.log(`${U.blueBold("agent-skill-manager")} (${U.bold("asm")}) ${c9}
224
+ `;return`${e}${r}${t}: ${n}
225
+ `}function Qb(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(g=>` ${g}`),h=i.slice(i.length-a,Math.min(i.length,i.length-a+3)).map(g=>` ${g}`);r.push(...p);for(let g of l)r.push(`-${g}`);for(let g of c)r.push(`+${g}`);return r.push(...h),r.join(`
228
+ `)}async function Eu(e,t){let s=jr(e)?e:Fr(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=zb(r,{gitAuthor:t.gitAuthor}),a=Qb(r,o.newContent),l=null;return!t.dryRun&&o.newContent!==r&&(l=`${i}.bak`,await Rb(i,l),await Lb(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 Au(){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 Xb(e,t,s=20){let i=Math.round(e/t*s);return"\u2588".repeat(i)+"\u2591".repeat(Math.max(0,s-i))}function pi(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} ${Xb(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=Zb(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 Zb(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 Pu(e){return JSON.stringify(e,null,2)}function Nu(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 ew(e){let t;try{t=await Ob(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 ku(e){let t=ft(e,"SKILL.md");try{if((await ut(t)).isFile())return{kind:"single",skillDirs:[e]}}catch{}let s=await ew(e);return s.length>0?{kind:"collection",skillDirs:s}:{kind:"none",skillDirs:[]}}function Ur(e){return e?!!(e.startsWith("github:")||/^https?:\/\/github\.com\//i.test(e)):!1}function Su(e){return{skillPath:e,skillMdPath:ft(e,"SKILL.md"),label:ge(e)}}async function Iu(e,t={}){if(!e)throw new Error("resolveEvalInput: input must be a non-empty string");if(Ur(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 ku(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(Su),isCollection:o.kind==="collection",cleanup:r.cleanup,provenance:{input:e,remote:!0,sourceRef:r.sourceRef,commitSha:r.commitSha,tempPath:r.rootDir}}}let s=jr(e)?e:Fr(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 ku(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(Su),isCollection:n.kind==="collection",cleanup:async()=>{},provenance:{input:e,remote:!1,sourceRef:null}}}function Lu(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 Ru(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 Ou(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 Tu(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?mi(t.report,null):null}))}}function mi(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 tw=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function sw(e){if(typeof e!="string")return null;let t=tw.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 iw(e,t){let s=sw(e);if(!s)throw new Error(`invalid semver: ${t} "${e}"`);return s}var Vr=new Map;function Kr(e){if(!e||typeof e.id!="string"||e.id.length===0)throw new Error("register: provider.id is required");if(iw(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=Vr.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),Vr.set(e.id,t)}function hi(){let e=[];for(let t of Vr.values())for(let s of t)e.push(s);return e}import{stat as nw}from"fs/promises";var Mu="quality",Du="1.0.0",_u=1;function rw(e){return e.topSuggestions.map(t=>({severity:"info",message:t}))}function ow(e){return e.categories.map(t=>({id:t.id,name:t.name,score:t.score,max:t.max}))}var qu={id:Mu,version:Du,schemaVersion:_u,description:"Static linter for SKILL.md structure, description, and safety.",async applicable(e){try{return(await nw(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 Cu(e.skillPath);return{providerId:Mu,providerVersion:Du,schemaVersion:_u,score:s.overallScore,passed:s.grade!=="F",categories:ow(s),findings:rw(s),raw:s,startedAt:"",durationMs:0}}};var Vu=Gr(wr(),1);import{readFile as aw,stat as lw}from"fs/promises";var Fu="skill-best-practice",ju="1.0.0",Bu=1,cw=new Set(["name","description","license","allowed-tools","metadata","compatibility","effort"]),Uu=new Set(["low","medium","high","max"]);function uw(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 gi(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 yi(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 fw(e){let t=await aw(e.skillMdPath,"utf-8"),s=[],i=uw(t);if(i===null){te(s,"missing-frontmatter","Frontmatter exists",!1,"error","SKILL.md must start with a YAML frontmatter block.");let b=yi(e,s,null);return{score:0,passed:!1,findings:s.map(gi),raw:b}}te(s,"frontmatter-present","Frontmatter exists",!0,"error","SKILL.md contains a YAML frontmatter block.");let n;try{n=(0,Vu.parse)(i)}catch(b){te(s,"invalid-yaml","Frontmatter parses as YAML",!1,"error",`Invalid YAML in frontmatter: ${b?.message??String(b)}`);let w=yi(e,s,null);return{score:0,passed:!1,findings:s.map(gi),raw:w}}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=yi(e,s,null);return{score:0,passed:!1,findings:s.map(gi),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=>!cw.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"&&Uu.has(f.trim()),"error",f===void 0||typeof f=="string"&&Uu.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 h=/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",h,"warning",h?"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 g=yi(e,s,r),m=g.checkCount===0?100:Math.round(g.passedChecks/g.checkCount*100),y=s.filter(b=>!b.passed).map(gi);return{score:m,passed:y.every(b=>b.severity!=="error"),findings:y,raw:g}}var Ku={id:Fu,version:ju,schemaVersion:Bu,description:"Deterministic SKILL.md best-practice validation (rules ported from Anthropic's skill-creator skill).",async applicable(e){try{return(await lw(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 fw(e);return{providerId:Fu,providerVersion:ju,schemaVersion:Bu,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 Ju(){Kr(qu),Kr(Ku)}var Hu=!1;function bi(){Hu||(Ju(),Hu=!0)}function wi(){return bi(),hi()}function Yu(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Gu(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 vi(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,h=p instanceof Error&&p.message==="timeout"?`provider timed out after ${s.timeoutMs}ms`:`provider aborted: ${Yu(p)}`;return Gu(r,i,d,h,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 Gu(r,i,d,Yu(c),"provider-threw")}finally{a&&clearTimeout(a)}}function dw(e){return e>=90?"A":e>=80?"B":e>=65?"C":e>=50?"D":"F"}function Wu(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 zu(e,t){return{providerId:e.providerId,providerVersion:e.providerVersion,schemaVersion:e.schemaVersion,passed:e.passed,overallScore:e.score,grade:dw(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 Qu(e){return{timestamp:new Date().toISOString(),asm_version:ko,duration_ms:Math.round(performance.now()-e)}}function Y(e,t,s){let i={version:1,command:e,status:"ok",data:t,meta:Qu(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:Qu(i)},o=process.stdout.isTTY?2:0;return JSON.stringify(r,null,o)}import{writeFile as Cw,mkdir as Ew,unlink as Aw,readFile as Pw}from"fs/promises";import{join as $i}from"path";import{readdir as pw,readFile as mw}from"fs/promises";import{join as hw}from"path";function Jr(e){let t=new Set,s=e.toLowerCase().split(/[\s\-_.,;:()[\]{}"']+/);for(let i of s)i.length>=2&&t.add(i);return t}var gw=10,yw=5,bw=3,ww=1;function vw(e,t){let s=Jr(e),i=Jr(t.name),n=Jr(t.description),r=0;for(let o of s)i.has(o)&&(r+=gw),n.has(o)&&(r+=bw),t.name.toLowerCase().includes(o)&&(r+=yw),t.description.toLowerCase().includes(o)&&(r+=ww);return r}async function Xu(e){let t=new Map,s;try{s=await pw(e)}catch{return t}for(let i of s){if(!i.endsWith(".json"))continue;let n=hw(e,i);try{let r=await mw(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 ki(){let e=await Xu(Xr()),t=await Xu(mt()),s=new Map(e);for(let[i,n]of t)s.set(i,n);return Array.from(s.values())}var kw=["license","creator","version"];function Zu(e){return kw.includes(e)}function ef(e,t){return e[t]||""}function Sw(e,t){if(t.has){for(let s of t.has)if(Zu(s)&&!ef(e,s))return!1}if(t.missing){for(let s of t.missing)if(Zu(s)&&ef(e,s))return!1}return!0}function tf(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 Si(e,t=20,s){let i=await ki(),n=[],r=!e&&s;for(let o of i)for(let a of o.skills){if(s&&!Sw(a,s))continue;let l=r?1:vw(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 sf(){return(await ki()).reduce((t,s)=>t+s.skillCount,0)}var $w=[{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 nf(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"),xw(t).trim().length<20&&s.push("SKILL.md body too short (less than 20 chars of instructions)");for(let{label:n,pattern:r}of $w)r.test(t)&&s.push(`malicious pattern detected: ${n}`);return{verified:s.length===0,reasons:s}}function xw(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 Nw(){let e=mt();return await Ew(e,{recursive:!0}),e}async function rf(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 rs(s);N(`ingester: found ${i.length} skills`);let n=[];for(let l of i){let c=$i(s,l.relPath,"SKILL.md"),d="";try{d=await Pw(c,"utf-8")}catch{N(`ingester: could not read SKILL.md at ${c}`)}let f=nf(l,d);f.verified||N(`ingester: ${l.name} not verified: ${f.reasons.join(", ")}`);let p=typeof l.tokenCount=="number"?l.tokenCount:d?Zt(d):void 0,h,g;if(d){try{let m=Wt({content:d,skillPath:l.relPath||l.name,skillMdPath:c});h={overallScore:m.overallScore,grade:m.grade,categories:m.categories.map(y=>({id:y.id,name:y.name,score:y.score,max:y.max})),evaluatedAt:m.evaluatedAt,evaluatedVersion:l.version||void 0}}catch(m){N(`ingester: eval failed for ${l.name}: ${m}`)}try{let m={skillPath:$i(s,l.relPath),skillMdPath:c},b=(await Promise.all(zt(wi()).map(async w=>(await w.applicable(m,{})).ok?vi(w,m):null))).filter(w=>w!==null).map(w=>zu(w,l.version||void 0));b.length>0&&(g=Object.fromEntries(b.filter(w=>w.providerId).map(w=>[w.providerId,w])))}catch(m){N(`ingester: provider eval failed for ${l.name}: ${m}`)}}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:h,evalSummaries:g})}let r={repoUrl:t.cloneUrl,owner:t.owner,repo:t.repo,updatedAt:new Date().toISOString(),skillCount:n.length,skills:n},o=await Nw(),a=$i(o,`${t.owner}_${t.repo}.json`);return await Cw(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 of(){return(await ki()).map(t=>({owner:t.owner,repo:t.repo,skillCount:t.skillCount,updatedAt:t.updatedAt})).sort((t,s)=>s.skillCount-t.skillCount)}async function af(e,t){let s=mt(),i=$i(s,`${e}_${t}.json`);try{return await Aw(i),!0}catch{return!1}}import{join as cf}from"path";function Iw(e){switch(e){case"dangerous":return 3;case"warning":return 2;case"caution":return 1;default:return 0}}function Hr(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+Iw(s.verdict),0)}}function Lw(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 Rw(){console.log(`${u.blueBold("agent-skill-manager")} (${u.bold("asm")}) ${Li}
234
239
 
235
240
  Interactive TUI and CLI for managing installed skills for AI coding agents.
236
241
 
237
- ${U.bold("Usage:")}
242
+ ${u.bold("Usage:")}
238
243
  asm Launch interactive TUI
239
244
  asm <command> [options] Run a CLI command
240
245
 
241
- ${U.bold("Commands:")}
246
+ ${u.bold("Commands:")}
242
247
  list List all discovered skills
243
248
  search <query> Search skills by name/description/tool
244
249
  inspect <skill-name> Show detailed info for a skill
@@ -255,7 +260,7 @@ ${U.bold("Commands:")}
255
260
  update [name...] Update outdated skills with security re-audit
256
261
  publish [path] Validate, audit, and submit a skill to the registry
257
262
  eval <skill-path> Evaluate a skill against best practices and score it
258
- eval-providers list List registered eval providers (id, version, schema, )
263
+ eval-providers list List registered eval providers (id, version, schema, \u2026)
259
264
  bundle Manage skill bundles (create, install, list, show, remove)
260
265
  index Manage skill index (ingest, search, list)
261
266
  doctor Run environment health checks and diagnostics
@@ -264,7 +269,7 @@ ${U.bold("Commands:")}
264
269
  config reset Reset config to defaults
265
270
  config edit Open config in $EDITOR
266
271
 
267
- ${U.bold("Global Options:")}
272
+ ${u.bold("Global Options:")}
268
273
  -h, --help Show help for any command
269
274
  -v, --version Print version and exit
270
275
  --json Output as JSON (list, search, inspect)
@@ -275,34 +280,46 @@ ${U.bold("Global Options:")}
275
280
  --sort <field> Sort by: name, version, or location (default: name)
276
281
  --flat Show one row per tool instance (list, search)
277
282
  -y, --yes Skip confirmation prompts
278
- -V, --verbose Show debug output`)}function sW(){console.log(`${U.bold("Usage:")} asm list [options]
283
+ -V, --verbose Show debug output`)}function Ow(){console.log(`${u.bold("Usage:")} asm list [options]
279
284
 
280
285
  List all discovered skills. By default, skills installed across multiple
281
- tools are grouped into a single row with tool badges.
286
+ tools are grouped into a single row with tool badges. When more than
287
+ ${Pi} skills are present, a compact summary is
288
+ automatically prepended above the table.
282
289
 
283
- ${U.bold("Options:")}
290
+ ${u.bold("Options:")}
284
291
  --sort <field> Sort by: name, version, or location (default: name)
285
292
  -s, --scope <s> Filter: global, project, or both (default: both)
286
293
  -p, --tool <p> Filter by tool (claude, codex, openclaw, agents)
287
294
  --flat Show one row per tool instance (ungrouped)
295
+ --compact One-line-per-skill dense view
296
+ --summary Print only the summary (counts by tool/scope/effort)
297
+ --group-by <axis> Group rows under headers (axis: tool | scope | effort)
298
+ --limit <N> Limit rendered rows (0 = no limit)
288
299
  --json Output as JSON array
289
300
  --machine Output in stable machine-readable v1 envelope format
290
301
  --no-color Disable ANSI colors
291
302
  -V, --verbose Show debug output
292
303
 
293
- ${U.bold("Examples:")}
294
- asm list ${U.dim("List all skills (grouped)")}
295
- asm list --flat ${U.dim("One row per tool instance")}
296
- asm list -p claude ${U.dim("Only Claude Code skills")}
297
- asm list -s project ${U.dim("Only project-scoped skills")}
298
- asm list --sort version ${U.dim("Sort by version")}
299
- asm list --json ${U.dim("Output as JSON")}
300
- asm list --machine ${U.dim("Machine-readable v1 envelope output")}`)}function tW(){console.log(`${U.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 Tw(){console.log(`${u.bold("Usage:")} asm search <query> [options]
301
318
 
302
319
  Search both installed skills and the skill index. Results show installation
303
320
  status and include copy-paste install commands for available skills.
304
321
 
305
- ${U.bold("Options:")}
322
+ ${u.bold("Options:")}
306
323
  --sort <field> Sort by: name, version, or location (default: name)
307
324
  -s, --scope <s> Filter: global, project, or both (default: both)
308
325
  -p, --tool <p> Filter by tool (claude, codex, openclaw, agents)
@@ -314,49 +331,49 @@ ${U.bold("Options:")}
314
331
  --no-color Disable ANSI colors
315
332
  -V, --verbose Show debug output
316
333
 
317
- ${U.bold("Examples:")}
318
- asm search code ${U.dim("Search installed and available skills")}
319
- asm search review -p claude ${U.dim("Search within Claude Code only")}
320
- asm search "test" --installed ${U.dim("Search installed skills only")}
321
- asm search "test" --available ${U.dim("Search available skills only")}
322
- asm search openspec --json ${U.dim("Output matches as JSON")}
323
- asm search openspec --machine ${U.dim("Machine-readable v1 envelope output")}`)}function rW(){console.log(`${U.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 Mw(){console.log(`${u.bold("Usage:")} asm inspect <skill-name> [options]
324
341
 
325
342
  Show detailed information for a skill. The <skill-name> is the directory name.
326
343
  Shows version, description, file count, and all provider installations.
327
344
 
328
- ${U.bold("Options:")}
345
+ ${u.bold("Options:")}
329
346
  -s, --scope <s> Filter: global, project, or both (default: both)
330
347
  --json Output as JSON object
331
348
  --no-color Disable ANSI colors
332
349
  -V, --verbose Show debug output
333
350
 
334
- ${U.bold("Examples:")}
335
- asm inspect code-review ${U.dim("Show details for code-review")}
336
- asm inspect code-review --json ${U.dim("Output as JSON")}
337
- asm inspect code-review -s global ${U.dim("Global installations only")}`)}function eW(){console.log(`${U.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 Dw(){console.log(`${u.bold("Usage:")} asm uninstall <skill-name> [options]
338
355
 
339
356
  Remove a skill and its associated rule files. Shows a removal plan
340
357
  before proceeding and asks for confirmation.
341
358
 
342
- ${U.bold("Options:")}
359
+ ${u.bold("Options:")}
343
360
  -y, --yes Skip confirmation prompt
344
361
  -s, --scope <s> Filter: global, project, or both (default: both)
345
362
  --no-color Disable ANSI colors
346
363
  -V, --verbose Show debug output
347
364
 
348
- ${U.bold("Examples:")}
349
- asm uninstall code-review ${U.dim("Remove with confirmation")}
350
- asm uninstall code-review -y ${U.dim("Remove without confirmation")}
351
- asm uninstall code-review -s project ${U.dim("Remove project copy only")}`)}function qV(){console.log(`${U.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 _w(){console.log(`${u.bold("Usage:")} asm audit [subcommand] [options]
352
369
 
353
370
  Detect duplicate skills or run security audits on installed/remote skills.
354
371
 
355
- ${U.bold("Subcommands:")}
372
+ ${u.bold("Subcommands:")}
356
373
  duplicates Find duplicate skills (default)
357
374
  security <name|source> Run security audit on an installed skill or GitHub source
358
375
 
359
- ${U.bold("Options:")}
376
+ ${u.bold("Options:")}
360
377
  --json Output as JSON
361
378
  --machine Output in stable machine-readable v1 envelope format
362
379
  -y, --yes Auto-remove duplicates, keeping one instance per group
@@ -364,25 +381,25 @@ ${U.bold("Options:")}
364
381
  --no-color Disable ANSI colors
365
382
  -V, --verbose Show debug output
366
383
 
367
- ${U.bold("Examples:")}
368
- asm audit ${U.dim("Find duplicates")}
369
- asm audit -y ${U.dim("Auto-remove duplicates")}
370
- asm audit --json ${U.dim("Output as JSON")}
371
- asm audit security code-review ${U.dim("Audit an installed skill")}
372
- asm audit security github:user/repo ${U.dim("Audit a remote skill before installing")}
373
- asm audit security --all ${U.dim("Audit all installed skills")}
374
- asm audit security code-review --json ${U.dim("Output audit as JSON")}
375
- asm audit security code-review --machine ${U.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")}
376
393
  asm audit security https://github.com/user/skills/tree/main/skills/agent-config
377
- ${U.dim("Audit a skill from a subfolder URL")}`)}function $V(){console.log(`${U.bold("Usage:")} asm publish [path] [options]
394
+ ${u.dim("Audit a skill from a subfolder URL")}`)}function qw(){console.log(`${u.bold("Usage:")} asm publish [path] [options]
378
395
 
379
396
  Validate a skill, run a security audit, generate a registry manifest,
380
397
  and open a PR against the asm-registry.
381
398
 
382
- ${U.bold("Arguments:")}
399
+ ${u.bold("Arguments:")}
383
400
  path Path to skill directory (default: current directory)
384
401
 
385
- ${U.bold("Options:")}
402
+ ${u.bold("Options:")}
386
403
  --dry-run Print generated manifest without opening a PR
387
404
  --force Override 'warning' security verdict (blocks 'dangerous')
388
405
  -y, --yes Skip confirmation prompts
@@ -391,75 +408,76 @@ ${U.bold("Options:")}
391
408
  --no-color Disable ANSI colors
392
409
  -V, --verbose Show debug output
393
410
 
394
- ${U.bold("Examples:")}
395
- asm publish ${U.dim("Publish skill in current directory")}
396
- asm publish ./my-skill ${U.dim("Publish skill at the given path")}
397
- asm publish --dry-run ${U.dim("Preview manifest without side effects")}
398
- asm publish --force ${U.dim("Override warning-level security findings")}
399
- asm publish --json ${U.dim("Output as JSON")}
400
- asm publish --machine ${U.dim("Machine-readable v1 envelope output")}`)}function ZV(){console.log(`${U.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 Fw(){console.log(`${u.bold("Usage:")} asm outdated [options]
401
418
 
402
419
  Show which installed skills have newer versions available.
403
420
 
404
- ${U.bold("Options:")}
421
+ ${u.bold("Options:")}
405
422
  --json Output as JSON
406
423
  --machine Output in stable machine-readable format
407
424
  --no-color Disable ANSI colors
408
425
  -V, --verbose Show debug output
409
426
 
410
- ${U.bold("Examples:")}
411
- asm outdated ${U.dim("Show outdated skills")}
412
- asm outdated --json ${U.dim("Output as JSON")}
413
- asm outdated --machine ${U.dim("Machine-readable output")}`)}function QV(){console.log(`${U.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 jw(){console.log(`${u.bold("Usage:")} asm update [name...] [options]
414
431
 
415
432
  Update outdated skills to their latest version with security re-audit.
416
433
 
417
- ${U.bold("Arguments:")}
434
+ ${u.bold("Arguments:")}
418
435
  name Specific skill(s) to update (default: all outdated)
419
436
 
420
- ${U.bold("Options:")}
437
+ ${u.bold("Options:")}
421
438
  -y, --yes Skip confirmation prompts
422
439
  --json Output as JSON
423
440
  --machine Output in stable machine-readable format
424
441
  --no-color Disable ANSI colors
425
442
  -V, --verbose Show debug output
426
443
 
427
- ${U.bold("Examples:")}
428
- asm update ${U.dim("Update all outdated skills")}
429
- asm update code-review ${U.dim("Update a specific skill")}
430
- asm update --yes ${U.dim("Skip confirmation prompts")}
431
- asm update --json ${U.dim("Output as JSON")}`)}function XV(){console.log(`${U.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 Bw(){console.log(`${u.bold("Usage:")} asm config <subcommand>
432
449
 
433
450
  Manage configuration. Config is stored at ~/.config/agent-skill-manager/.
434
451
 
435
- ${U.bold("Subcommands:")}
452
+ ${u.bold("Subcommands:")}
436
453
  show Print current config as JSON
437
454
  path Print config file path
438
455
  reset Reset config to defaults (with confirmation)
439
456
  edit Open config in $EDITOR
440
457
 
441
- ${U.bold("Options:")}
458
+ ${u.bold("Options:")}
442
459
  -V, --verbose Show debug output
443
460
 
444
- ${U.bold("Examples:")}
445
- asm config show ${U.dim("View current config")}
446
- asm config edit ${U.dim("Edit in $EDITOR")}
447
- asm config reset -y ${U.dim("Reset without confirmation")}`)}async function KZ(q){for(let $ of q)$.warnings=await O5($)}async function zV(q){if(q.flags.help){sW();return}let $=performance.now(),Z=await h(),Q=await a(Z,q.flags.scope);if(q.flags.provider&&q.command==="list")Q=Q.filter((z)=>z.provider===q.flags.provider);await KZ(Q);let X=u9(Q,q.flags.sort);if(q.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,$));return}if(q.flags.json)console.log(c(X));else if(q.flags.flat){let z=p9(X),J=X.filter((G)=>G.warnings&&G.warnings.length>0);if(J.length>0)z+=`
448
- ${U.yellow(`${J.length} skill${J.length===1?"":"s"} with warnings -- use --json for details`)}`;console.log(z)}else console.log(QZ(X))}async function JV(q){if(q.flags.help){tW();return}let $=q.flags.machine?g0():void 0,Z=performance.now(),Q=q.subcommand;if(!Q){if(q.flags.machine)$?.(),console.log(q0("search",e.INVALID_ARGUMENT,"Missing required argument: <query>",Z)),process.exit(2);P("Missing required argument: <query>"),console.error('Run "asm search --help" for usage.'),process.exit(2)}let X=!q.flags.available,z=!q.flags.installed,J=[];if(X){let V=await h(),W=await a(V,q.flags.scope);if(q.flags.provider)W=W.filter((_)=>_.provider===q.flags.provider);let B=t8(W,Q);J=u9(B,q.flags.sort)}let G=[];if(z){if(G=await n$(Q),J.length>0){let V=new Set(J.map((W)=>W.name.toLowerCase()));G=G.filter((W)=>!V.has(W.skill.name.toLowerCase()))}}if(q.flags.machine){$?.();let V=J.map((B)=>({name:B.name,description:B.description,source:"installed",url:null,match_count:1})),W=G.map((B)=>({name:B.skill.name,description:B.skill.description,source:"index",url:B.skill.installUrl,match_count:1}));console.log(l("search",[...V,...W],Z));return}if(q.flags.json){let V=J.map((B)=>({name:B.name,description:B.description,version:B.version,scope:B.scope,provider:B.provider,status:"installed"})),W=G.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([...V,...W]));return}let Y=J.length>0,H=G.length>0;if(!Y&&!H){console.error(`No skills matching "${Q}".`),console.error(U.dim("Try ingesting more repos with: asm index ingest <repo>"));return}if(Y)if(console.error(U.bold(`Installed skills matching "${Q}":
449
- `)),q.flags.flat)console.log(p9(J));else console.log(XZ(J,Q));if(H){if(Y)console.error("");let V=zZ(G.map((W)=>({name:W.skill.name,version:W.skill.version,description:W.skill.description,verified:W.skill.verified,repoLabel:`${W.repo.owner}/${W.repo.repo}`,installUrl:W.skill.installUrl})),Q);console.error(V)}}async function GV(q){if(q.flags.help){rW();return}let $=q.subcommand;if(!$)P("Missing required argument: <skill-name>"),console.error('Run "asm inspect --help" for usage.'),process.exit(2);let Z=await h(),X=(await a(Z,q.flags.scope)).filter((z)=>z.dirName===$);if(X.length===0)P(`Skill "${$}" not found.`),console.error(U.dim(`Try ${U.bold("asm list")} to see all skills or ${U.bold(`asm search "${$}"`)} to search.`)),process.exit(1);if(await KZ(X),q.flags.json)console.log(c(X.length===1?X[0]:X));else console.log(await JZ(X))}async function YV(q){if(q.flags.help){eW();return}let $=q.subcommand;if(!$)P("Missing required argument: <skill-name>"),console.error('Run "asm uninstall --help" for usage.'),process.exit(2);let Z=await h(),Q=await a(Z,q.flags.scope),X=e8($,Q,Z),z=await qZ(X);if(z.length===0)P(`Skill "${$}" not found or nothing to remove.`),process.exit(1);console.error(U.bold("Removal plan:"));for(let G of z)console.error(` ${U.red("•")} ${ZZ(G)}`);if(!q.flags.yes){if(!process.stdin.isTTY)P("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2);process.stderr.write(`
450
- ${U.bold("Proceed with removal?")} [y/N] `);let G=await $0();if(G.toLowerCase()!=="y"&&G.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let J=await m9(X);for(let G of J)console.error(G);try{await YZ($)}catch{}console.error(U.green(`
451
- Done.`))}function $0(){return new Promise((q)=>{let $="",Z=!1;function Q(){process.stdin.removeListener("data",z),process.stdin.removeListener("end",J),process.stdin.pause(),clearTimeout(G)}function X(Y){if(Z)return;Z=!0,Q(),q(Y)}function z(Y){if($+=Y,$.includes(`
452
- `))X($.trim())}function J(){X($.trim())}let G=setTimeout(()=>{X($.trim())},30000);process.stdin.setEncoding("utf-8"),process.stdin.on("data",z),process.stdin.on("end",J),process.stdin.resume()})}async function UV(q){if(q.flags.help){qV();return}let $=performance.now(),Z=q.subcommand??"duplicates";if(Z==="security"){await HV(q,$);return}if(Z!=="duplicates")P(`Unknown audit subcommand: "${Z}". Use: duplicates, security`),process.exit(2);let Q=await h(),X=await a(Q,"both"),z=d9(X);if(q.flags.machine){let J={duplicate_groups:z.duplicateGroups.map((G)=>({name:G.key,count:G.instances.length,instances:G.instances.map((Y)=>({path:Y.path,scope:Y.scope,provider:Y.provider}))})),total_duplicates:z.duplicateGroups.length};console.log(l("audit duplicates",J,$));return}if(q.flags.json){console.log(VZ(z));return}if(console.log(WZ(z)),q.flags.yes&&z.duplicateGroups.length>0){console.error(U.bold(`
453
- Auto-removing duplicates...`));for(let J of z.duplicateGroups){let G=HZ(J.instances),Y=G[0].path;for(let H=1;H<G.length;H++){let V=G[H],W=r8(V,Q),B=await m9(W,Y);for(let _ of B)console.error(_)}}console.error(U.green(`
454
- Done.`))}}async function HV(q,$){let Z=q.positional[0];if(q.flags.all)await WV(q,$);else if(!Z){if(q.flags.machine)console.log(q0("audit security",e.INVALID_ARGUMENT,"Missing target. Provide a skill name, GitHub source, or use --all.",$)),process.exit(2);P(`Missing target. Provide a skill name, GitHub source, or use --all.
455
- Usage: asm audit security <name|github:owner/repo> [--all]`),process.exit(2)}else if(Z.startsWith("github:")||Z.startsWith("https://github.com/"))await VV(q,Z,$);else await BV(q,Z,$)}async function WV(q,$){let Z=await h(),Q=await a(Z,q.flags.scope);if(Q.length===0){if(q.flags.machine)console.log(l("audit security",[],$));else if(q.flags.json)console.log("[]");else console.log("No skills found to audit.");return}let X=new Set,z=Q.filter((G)=>{if(X.has(G.realPath))return!1;return X.add(G.realPath),!0});console.error(`Auditing ${z.length} skill${z.length>1?"s":""}...
456
- `);let J=[];for(let G of z){console.error(` Scanning ${U.bold(G.name)}...`);let Y=await R0(G.realPath,G.name);J.push(Y)}if(q.flags.machine)console.log(l("audit security",l9(J),$));else if(q.flags.json)console.log(JSON.stringify(J,null,2));else{for(let Y of J)console.log(v$(Y));let G={safe:0,caution:0,warning:0,dangerous:0};for(let Y of J)G[Y.verdict]++;if(console.log(U.bold(`
457
- Summary:`)),G.dangerous>0)console.log(` ${U.red(`${G.dangerous} dangerous`)}`);if(G.warning>0)console.log(` ${U.yellow(`${G.warning} warning`)}`);if(G.caution>0)console.log(` ${G.caution} caution`);if(G.safe>0)console.log(` ${U.green(`${G.safe} safe`)}`);console.log("")}}async function VV(q,$,Z){let Q=null;try{let X=d0($);if(X.isLocal)throw Error("Local paths are not supported for remote security audits. Use: asm audit security <installed-skill-name>");await c0(),X=await e$(X),console.error(`Cloning ${$} for audit...`),Q=await l0(X,q.flags.transport);let{join:z}=await import("path"),J=X.subpath?z(Q,X.subpath):Q,{name:G}=await w0(J),Y=await R0(J,G,X.owner,X.repo);if(q.flags.machine)console.log(l("audit security",l9([Y]),Z));else if(q.flags.json)console.log(D9(Y));else console.log(v$(Y))}catch(X){if(q.flags.machine)console.log(q0("audit security",e.AUDIT_FAILED,X.message,Z)),process.exit(1);P(X.message),process.exit(1)}finally{if(Q)await Q0(Q)}}async function BV(q,$,Z){let Q=await h(),z=(await a(Q,q.flags.scope)).filter((Y)=>Y.dirName===$);if(z.length===0){if(q.flags.machine)console.log(q0("audit security",e.SKILL_NOT_FOUND,`Skill "${$}" not found.`,Z)),process.exit(1);P(`Skill "${$}" not found. Use "asm list" to see installed skills.`),process.exit(1)}let J=z[0];console.error(`Auditing installed skill: ${U.bold(J.name)}...
458
- `);let G=await R0(J.realPath,J.name);if(q.flags.machine)console.log(l("audit security",l9([G]),Z));else if(q.flags.json)console.log(D9(G));else console.log(v$(G))}async function KV(q){if(q.flags.help){XV();return}let $=q.subcommand;if(!$)P("Missing subcommand. Use: show, path, reset, or edit."),console.error('Run "asm config --help" for usage.'),process.exit(2);switch($){case"show":{let Z=await h();console.log(c(Z));break}case"path":{console.log(xq());break}case"reset":{if(!q.flags.yes){if(!process.stdin.isTTY)P("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 Q=await $0();if(Q.toLowerCase()!=="y"&&Q.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let Z=i8();await s8(Z),console.error(U.green("Config reset to defaults."));break}case"edit":{let Z=process.env.VISUAL||process.env.EDITOR||"vi",[Q,X]=BZ(Z),z=xq();await h();let{spawn:J}=await import("child_process");await new Promise((G,Y)=>{let H=J(Q,[...X,z],{stdio:"inherit"});H.on("close",()=>G()),H.on("error",Y)});break}default:P(`Unknown config subcommand: "${$}". Use: show, path, reset, or edit.`),process.exit(2)}}function _V(){console.log(`${U.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 uf(e){for(let t of e)t.warnings=await xc(t)}async function Uw(e){if(e.flags.help){Ow();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 uf(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}=es(n,e.flags.limit);console.log(co(r,e.flags.groupBy)),o&&console.log(o)}else if(e.flags.compact){let{skills:r,hint:o}=es(n,e.flags.limit);console.log(lo(r)),o&&console.log(o)}else{let r=[];n.length>Pi&&(r.push(Ni(n,{showHint:!1})),r.push(""));let{skills:o,hint:a}=es(n,e.flags.limit);r.push(uo(o)),a&&r.push(a),console.log(r.join(`
466
+ `))}}async function Vw(e){if(e.flags.help){Tw();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(h=>h.provider===e.flags.provider));let p=to(f,i);o=Ci(p,e.flags.sort)}let a=[];if(r&&(a=await Si(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(fo(o,i))),c){l&&console.error("");let d=po(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 Kw(e){if(e.flags.help){Mw();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 uf(n),e.flags.json?console.log(J(n.length===1?n[0]:n)):console.log(await mo(n))}async function Jw(e){if(e.flags.help){Dw();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=io(t,i,s),r=await no(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")} ${ao(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 go(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 Hw(e){if(e.flags.help){_w();return}let t=performance.now(),s=e.subcommand??"duplicates";if(s==="security"){await Yw(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(vo(r));return}if(console.log(wo(r)),e.flags.yes&&r.duplicateGroups.length>0){console.error(u.bold(`
471
+ Auto-removing duplicates...`));for(let o of r.duplicateGroups){let a=bo(o.instances),l=a[0].path;for(let c=1;c<a.length;c++){let d=a[c],f=so(d,i),p=await Ei(f,l);for(let h of p)console.error(h)}}console.error(u.green(`
472
+ Done.`))}}async function Yw(e,t){let s=e.positional[0];e.flags.all?await Gw(e,t):s?s.startsWith("github:")||s.startsWith("https://github.com/")?await Ww(e,s,t):await zw(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 Gw(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",Hr(o),t));else if(e.flags.json)console.log(JSON.stringify(o,null,2));else{for(let l of o)console.log(ai(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 Ww(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 ns(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",Hr([l]),s)):e.flags.json?console.log(Lr(l)):console.log(ai(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 zw(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",Hr([a]),s)):e.flags.json?console.log(Lr(a)):console.log(ai(a))}async function Qw(e){if(e.flags.help){Bw();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=zr();await Zr(s),console.error(u.green("Config reset to defaults."));break}case"edit":{let s=process.env.VISUAL||process.env.EDITOR||"vi",[i,n]=So(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 Xw(){console.log(`${u.bold("Usage:")} asm install <source> [options]
459
477
 
460
478
  Install a skill from a GitHub repository, the curated registry, or a local path.
461
479
 
462
- ${U.bold("Source Format:")}
480
+ ${u.bold("Source Format:")}
463
481
  code-review Install by name from the curated registry
464
482
  author/code-review Install a scoped name (author/name) from registry
465
483
  github:owner/repo Install from default branch
@@ -472,7 +490,7 @@ ${U.bold("Source Format:")}
472
490
  ./relative/path/to/skill Install from a local folder (relative path)
473
491
  ~/path/to/skill Install from a local folder (home-relative path)
474
492
 
475
- ${U.bold("Options:")}
493
+ ${u.bold("Options:")}
476
494
  -p, --tool <name> Target tool (claude, codex, openclaw, agents, all)
477
495
  Use "all" to install to all tools (shared + symlinks)
478
496
  -s, --scope <scope> Installation scope: global or project (default: prompt)
@@ -494,82 +512,82 @@ ${U.bold("Options:")}
494
512
  --no-color Disable ANSI colors
495
513
  -V, --verbose Show debug output
496
514
 
497
- ${U.bold("Registry (bare name):")}
498
- asm install code-review ${U.dim("(resolve from registry)")}
499
- asm install luongnv89/code-review ${U.dim("(scoped name, no ambiguity)")}
500
- asm install code-review --no-cache ${U.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)")}
501
519
 
502
- ${U.bold("Local folder:")}
503
- asm install ./my-skill ${U.dim("(relative path)")}
504
- asm install /home/user/skills/my-skill ${U.dim("(absolute path)")}
505
- asm install ~/skills/my-skill ${U.dim("(home-relative path)")}
506
- asm install ../other-project/skill ${U.dim("(parent-relative path)")}
507
- asm install ./skills-dir --all ${U.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)")}
508
526
 
509
- ${U.bold("Single-skill repo:")}
527
+ ${u.bold("Single-skill repo:")}
510
528
  asm install github:user/my-skill
511
529
  asm install github:user/my-skill#v1.0.0 -p claude
512
530
  asm install https://github.com/user/my-skill
513
- asm install github:user/my-skill -p all ${U.dim("(install to all tools)")}
514
- asm install github:user/private-skill -t ssh ${U.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)")}
515
533
 
516
- ${U.bold("Multi-skill repo:")}
534
+ ${u.bold("Multi-skill repo:")}
517
535
  asm install github:user/skills --path skills/code-review
518
536
  asm install github:user/skills --all -p claude -y
519
- asm install github:user/skills --all -p all -y ${U.dim("(all skills, all tools)")}
537
+ asm install github:user/skills --all -p all -y ${u.dim("(all skills, all tools)")}
520
538
  asm install https://github.com/user/skills --all
521
- asm install github:user/skills ${U.dim("(interactive picker)")}
539
+ asm install github:user/skills ${u.dim("(interactive picker)")}
522
540
 
523
- ${U.bold("Subfolder URL:")}
541
+ ${u.bold("Subfolder URL:")}
524
542
  asm install https://github.com/user/skills/tree/main/skills/agent-config
525
543
  asm install github:user/skills#main:skills/agent-config
526
544
 
527
- ${U.bold("Vercel skills CLI:")}
545
+ ${u.bold("Vercel skills CLI:")}
528
546
  asm install github:user/skills --method vercel --skill my-skill
529
547
  asm install https://github.com/user/skills -m vercel --skill my-skill -y
530
- ${U.dim("Delegates to npx skills add for Vercel tracking, then registers in asm")}`)}async function LV(q,$,Z,Q,X,z,J,G,Y="global"){let H=await w0(Q),V=await Z4(Q),W=Q===Z?null:Q.split(/[/\\]/).pop(),B=X||W||$.repo,_=N0(B),L=G.find((D)=>D.name.toLowerCase()===H.name.toLowerCase()&&D.provider===J.name),K,O=!!L;if(L)if(L.version===H.version)K=q.flags.force?"REINSTALL":`UPDATE: ${L.version} (same version)`;else K=`UPDATE: ${L.version} ${H.version}`;else K="NEW";let F=q2($,Z,Q,_,J,q.flags.force||O,Y),A=V.some((D)=>["Shell commands","Code execution","Credentials"].includes(D.category)),M=V.some((D)=>["External URLs"].includes(D.category)),R=A?"high":M?"medium":"safe",T=A?U.red("[!] High Risk"):M?U.yellow("[~] Medium Risk"):U.green("[ok] Safe");return{metadata:H,skillName:_,warnings:V,installStatus:K,riskLevel:R,riskLabel:T,plan:F}}function OV(q,$,Z,Q,X,z){let{metadata:J,warnings:G,installStatus:Y,riskLabel:H,plan:V}=q;if(X&&z){let W=U.dim(`[${z.index}/${z.total}]`),B=Y==="NEW"?U.green(`[${Y}]`):U.yellow(`[${Y}]`);console.info(`${W} ${U.bold(J.name)} v${J.version} ${B} ${H}`)}else{let W=Y==="NEW"?U.green(`[${Y}]`):U.yellow(`[${Y}]`);if(console.info(` ${U.bold(J.name)} v${J.version} ${W}`),console.info(`
531
- ${U.bold("Install preview:")}`),console.info(` ${U.bold("Name:")} ${J.name}`),console.info(` ${U.bold("Version:")} ${J.version}`),J.description)console.info(` ${U.bold("Description:")} ${U.dim(J.description)}`);if(J.effort)console.info(` ${U.bold("Effort:")} ${$Z(J.effort)}`);if(console.info(` ${U.bold("Source:")} ${$}`),Q)console.info(` ${U.bold("Tool:")} All (${Q.map((B)=>B.label).join(", ")})`),console.info(` ${U.bold("Primary:")} ${Z.label} (${Z.name})`),console.info(` ${U.bold("Symlinks:")} ${Q.filter((B)=>B.name!==Z.name).map((B)=>B.label).join(", ")}`);else console.info(` ${U.bold("Tool:")} ${Z.label} (${Z.name})`);if(console.info(` ${U.bold("Scope:")} ${V.scope==="project"?"Project":"Global"}`),console.info(` ${U.bold("Target:")} ${V.targetDir}`),console.info(` ${U.bold("Status:")} ${W}`),console.info(` ${U.bold("Risk:")} ${H}`),G.length>0){console.info(`
532
- ${U.bold("Security warnings:")}`);let B=new Map;for(let _ of G){let L=B.get(_.category)||[];L.push(_),B.set(_.category,L)}for(let[_,L]of B){let O=["Shell commands","Code execution","Credentials"].includes(_)?U.red(`[${_}]`):U.yellow(`[${_}]`);console.info(`
533
- ${O} ${U.dim(`(${L.length} match${L.length>1?"es":""})`)}`);for(let F of L.slice(0,5))console.info(` ${U.dim(`${F.file}:${F.line}`)} -- ${F.match}`);if(L.length>5)console.info(U.dim(` ... and ${L.length-5} more`))}}}}async function FV(q,$){if($)return await Q4(q,$);return await nq(q)}async function IV(q){if(q.flags.help){_V();return}let $=q.flags.machine?g0():void 0,Z=performance.now(),Q=q.subcommand;if(!Q)P("Missing required argument: <source>"),console.error('Run "asm install --help" for usage.'),process.exit(2);let X=null,z="github",J=8,G=0,Y=(V)=>{return G++,`
534
- ${U.cyan(`[Step ${G}/${J}]`)} ${U.bold(V)}`},H=()=>{if(X)Q0(X).finally(()=>process.exit(1));else process.exit(1)};process.on("SIGINT",H),process.on("SIGTERM",H);try{if(K9(Q)){console.info(`
535
- ${U.cyan("")} Resolving "${U.bold(Q)}" from registry...`);let{resolved:I,multipleMatches:j,suggestions:C}=await M5(Q,{noCache:q.flags.noCache});if(I){z="registry";let S=I.manifest,y=S.repository.replace("https://github.com/","");Q=S.skill_path?`github:${y}#${S.commit}:${S.skill_path}`:`github:${y}#${S.commit}`,console.info(` ${U.green("")} Resolved: ${U.bold(`${S.author}/${S.name}`)} @ ${S.commit.slice(0,7)}`)}else if(j.length>0){console.info(`
536
- ${U.yellow("")} Multiple skills found for "${U.bold(Q)}":`);let S=j.slice(0,5);for(let W0=0;W0<S.length;W0++){let Z0=S[W0];console.info(` ${U.cyan(`${W0+1}.`)} ${U.bold(`${Z0.author}/${Z0.name}`)} ${Z0.description}`)}if(!process.stdin.isTTY)P(`Ambiguous skill name "${Q}". Use a scoped name: asm install author/name`),process.exit(2);let y=`
537
- Select a skill [1-${S.length}]: `;process.stderr.write(y);let d=await new Promise((W0)=>{let Z0="",u0=!1,hq=setTimeout(()=>{if(!u0)u0=!0,process.stdin.removeListener("data",Jq),W0(Z0.trim())},30000);function Jq(m0){if(Z0=m0.toString().trim(),!u0)u0=!0,clearTimeout(hq),process.stdin.removeListener("data",Jq),W0(Z0)}process.stdin.setEncoding("utf-8"),process.stdin.on("data",Jq)}),p=parseInt(d,10);if(isNaN(p)||p<1||p>S.length)P("Invalid selection. Aborting."),process.exit(2);let i=S[p-1];z="registry";let vq=i.repository.replace("https://github.com/","");Q=i.skill_path?`github:${vq}#${i.commit}:${i.skill_path}`:`github:${vq}#${i.commit}`,console.info(` ${U.green("")} Selected: ${U.bold(`${i.author}/${i.name}`)} @ ${i.commit.slice(0,7)}`)}else if(_9(Q)){if(P(`Skill "${Q}" not found in the registry.`),C.length>0)console.error(`
538
- Did you mean: ${C.map((S)=>U.cyan(S)).join(", ")}?`);process.exit(1)}else console.info(` ${U.dim("Not found in registry trying existing sources...")}`),z="pre-indexed"}console.info(Y("Parsing source"));let V=d0(Q),W=!!V.isLocal;if(W){let I=V.localPath;console.info(` ${U.dim(`local: ${I}`)}`);let{stat:j}=await import("fs/promises");try{if(!(await j(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 c0(),V=await e$(V),console.info(` ${U.dim(Q)}`);if(q.flags.method==="vercel"){console.info(Y("Installing via Vercel skills CLI")),await X4();let I=J4(V),j=q.flags.path||null;console.info(` ${U.dim(`npx skills add ${I}${j?` --skill ${j}`:""}`)}`);let{stdout:C,stderr:S}=await z4(I,j);if(C.trim())console.info(` ${U.dim(C.trim())}`);if(S.trim())console.error(` ${U.dim(S.trim())}`);console.info(` ${U.green("")} Vercel skills CLI install completed`),q.flags.force=!0,console.info(` ${U.dim("Continuing with asm install to register in local inventory...")}`)}console.info(Y("Selecting provider"));let B=await h(),{provider:_,allProviders:L}=await n0(B,q.flags.provider,!!process.stdin.isTTY);console.info(Y("Selecting scope"));let K;if(q.flags.scope==="global"||q.flags.scope==="project")K=q.flags.scope,console.info(` ${U.dim(`scope: ${K}`)}${K==="global"?` (${_.global})`:` (${_.project})`}`);else if(!process.stdin.isTTY||q.flags.yes)K="global",console.info(` ${U.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 j=await p0({items:I});if(j.length===0)throw Error("No scope selected. Aborting.");K=j[0]===0?"global":"project",console.info(` Selected: ${U.bold(K)} ${U.dim(`(${K==="global"?_.global:_.project})`)}`)}if(W)console.info(Y("Reading local source")),console.info(` ${U.dim(V.localPath)}`),X=null;else{console.info(Y("Cloning repository"));let I=q.flags.transport,j=I==="ssh"?V.sshCloneUrl:I==="https"?V.cloneUrl:`${V.cloneUrl} ${U.dim("(auto)")}`;console.info(` ${j}${V.ref?` ${U.dim(`(ref: ${V.ref})`)}`:""}${V.subpath?` ${U.dim(`(path: ${V.subpath})`)}`:""}`),X=await l0(V,I)}let O=W?V.localPath:X;console.info(Y("Scanning for skills"));let{join:F}=await import("path"),A=[],M=q.flags.path||V.subpath,R=[];if(M){let I=F(O,M);try{await w0(I)}catch{throw Error(`No SKILL.md found at path "${M}" in the repository.`)}console.info(` Found skill at ${U.bold(M)}`),R=[{skillDir:I,nameOverride:q.flags.name}]}else{let I=!1;try{await w0(O),I=!0}catch{}if(I){let j=await w0(O);console.info(` Found: ${U.bold(j.name)} v${j.version}`),R=[{skillDir:O,nameOverride:q.flags.name}]}else{console.info(" No SKILL.md at root. Scanning subdirectories...");let j=await lq(O);if(j.length===0)throw Error("No skills found in this repository. Skills must have a SKILL.md file.");console.info(` Found ${U.bold(String(j.length))} skill(s):
539
- `);for(let y=0;y<j.length;y++){let d=U.cyan(` ${String(y+1).padStart(String(j.length).length)})`);if(console.info(`${d} ${U.bold(j[y].name)} ${U.dim(`v${j[y].version}`)} ${U.dim(`(${j[y].relPath})`)}`),j[y].description)console.info(` ${U.dim(j[y].description)}`)}console.info(Y("Selecting skills")),G--;let C;if(q.flags.all&&(q.flags.yes||!process.stdin.isTTY))C=j.map((y)=>y.relPath),console.info(` Selected all ${U.bold(String(C.length))} skills`);else if(process.stdin.isTTY)if(j.length===1)C=[j[0].relPath],console.info(` Auto-selected: ${U.bold(j[0].name)} ${U.dim(`v${j[0].version}`)}`);else{let y=j.map((p)=>({label:p.name,hint:`v${p.version}${p.description?" "+p.description:""}`,checked:!!q.flags.all}));console.info("");let d=await p0({items:y});if(d.length===0)throw Error("No skills selected. Aborting.");C=d.map((p)=>j[p].relPath),console.info(` Selected ${U.bold(String(C.length))} skill(s)`)}else{P(`Repository contains ${j.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 Zw(e,t,s,i,n,r,o,a,l="global"){let c=await _e(i),d=await No(i),f=i===s?null:i.split(/[/\\]/).pop(),p=n||f||t.repo,h=Te(p),g=a.find(E=>E.name.toLowerCase()===c.name.toLowerCase()&&E.provider===o.name),m,y=!!g;g?g.version===c.version?m=e.flags.force?"REINSTALL":`UPDATE: ${g.version} (same version)`:m=`UPDATE: ${g.version} \u2192 ${c.version}`:m="NEW";let b=_i(t,s,i,h,o,e.flags.force||y,l),w=d.some(E=>["Shell commands","Code execution","Credentials"].includes(E.category)),$=d.some(E=>["External URLs"].includes(E.category)),x=w?"high":$?"medium":"safe",k=w?u.red("[!] High Risk"):$?u.yellow("[~] Medium Risk"):u.green("[ok] Safe");return{metadata:c,skillName:h,warnings:d,installStatus:m,riskLevel:x,riskLabel:k,plan:b}}function ev(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:")} ${ro(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 h of a){let g=p.get(h.category)||[];g.push(h),p.set(h.category,g)}for(let[h,g]of p){let y=["Shell commands","Code execution","Credentials"].includes(h)?u.red(`[${h}]`):u.yellow(`[${h}]`);console.info(`
551
+ ${y} ${u.dim(`(${g.length} match${g.length>1?"es":""})`)}`);for(let b of g.slice(0,5))console.info(` ${u.dim(`${b.file}:${b.line}`)} -- ${b.match}`);g.length>5&&console.info(u.dim(` ... and ${g.length-5} more`))}}}}async function tv(e,t){return t?await Io(e,t):await os(e)}async function sv(e){if(e.flags.help){Xw();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:v,multipleMatches:S,suggestions:I}=await Nc(i,{noCache:e.flags.noCache});if(v){r="registry";let L=v.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(S.length>0){console.info(`
554
+ ${u.yellow("\u26A0")} Multiple skills found for "${u.bold(i)}":`);let L=S.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 Qt=ee.repository.replace("https://github.com/","");i=ee.skill_path?`github:${Qt}#${ee.commit}:${ee.skill_path}`:`github:${Qt}#${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 v=d.localPath;console.info(` ${u.dim(`local: ${v}`)}`);let{stat:S}=await import("fs/promises");try{if(!(await S(v)).isDirectory())throw new Error(`Path is not a directory: ${v}`)}catch(I){throw I.code==="ENOENT"?new Error(`Path does not exist: ${v}`):I}}else await Me(),d=await ns(d),console.info(` ${u.dim(i)}`);if(e.flags.method==="vercel"){console.info(l("Installing via Vercel skills CLI")),await Lo();let v=Oo(d),S=e.flags.path||null;console.info(` ${u.dim(`npx skills add ${v}${S?` --skill ${S}`:""}`)}`);let{stdout:I,stderr:L}=await Ro(v,S);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:h,allProviders:g}=await ze(p,e.flags.provider,!!process.stdin.isTTY);console.info(l("Selecting scope"));let m;if(e.flags.scope==="global"||e.flags.scope==="project")m=e.flags.scope,console.info(` ${u.dim(`scope: ${m}`)}${m==="global"?` (${h.global})`:` (${h.project})`}`);else if(!process.stdin.isTTY||e.flags.yes)m="global",console.info(` ${u.dim("scope: global (default)")} (${h.global})`);else{let v=[{label:`Global (${h.global})`,hint:"Available in all projects",checked:!0},{label:`Project (${h.project})`,hint:"Available only in this project",checked:!1}];console.info("");let S=await We({items:v});if(S.length===0)throw new Error("No scope selected. Aborting.");m=S[0]===0?"global":"project",console.info(` Selected: ${u.bold(m)} ${u.dim(`(${m==="global"?h.global:h.project})`)}`)}if(f)console.info(l("Reading local source")),console.info(` ${u.dim(d.localPath)}`),n=null;else{console.info(l("Cloning repository"));let v=e.flags.transport,S=v==="ssh"?d.sshCloneUrl:v==="https"?d.cloneUrl:`${d.cloneUrl} ${u.dim("(auto)")}`;console.info(` ${S}${d.ref?` ${u.dim(`(ref: ${d.ref})`)}`:""}${d.subpath?` ${u.dim(`(path: ${d.subpath})`)}`:""}`),n=await De(d,v)}let y=f?d.localPath:n;console.info(l("Scanning for skills"));let{join:b}=await import("path"),w=[],$=e.flags.path||d.subpath,x=[];if($){let v=b(y,$);try{await _e(v)}catch{throw new Error(`No SKILL.md found at path "${$}" in the repository.`)}console.info(` Found skill at ${u.bold($)}`),x=[{skillDir:v,nameOverride:e.flags.name}]}else{let v=!1;try{await _e(y),v=!0}catch{}if(v){let S=await _e(y);console.info(` Found: ${u.bold(S.name)} v${S.version}`),x=[{skillDir:y,nameOverride:e.flags.name}]}else{console.info(" No SKILL.md at root. Scanning subdirectories...");let S=await rs(y);if(S.length===0)throw new Error("No skills found in this repository. Skills must have a SKILL.md file.");console.info(` Found ${u.bold(String(S.length))} skill(s):
557
+ `);for(let T=0;T<S.length;T++){let K=u.cyan(` ${String(T+1).padStart(String(S.length).length)})`);console.info(`${K} ${u.bold(S[T].name)} ${u.dim(`v${S[T].version}`)} ${u.dim(`(${S[T].relPath})`)}`),S[T].description&&console.info(` ${u.dim(S[T].description)}`)}console.info(l("Selecting skills")),a--;let I;if(e.flags.all&&(e.flags.yes||!process.stdin.isTTY))I=S.map(T=>T.relPath),console.info(` Selected all ${u.bold(String(I.length))} skills`);else if(process.stdin.isTTY)if(S.length===1)I=[S[0].relPath],console.info(` Auto-selected: ${u.bold(S[0].name)} ${u.dim(`v${S[0].version}`)}`);else{let T=S.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=>S[U].relPath),console.info(` Selected ${u.bold(String(I.length))} skill(s)`)}else{C(`Repository contains ${S.length} skills. Use --path <subdir> to pick one or --all to install all.
540
558
  Available skills:
541
- ${j.map((y)=>` --path ${y.relPath}`).join(`
542
- `)}`),process.exit(2);return}let S=$4(C);if(S.length>0){let y=S.map((p)=>` - ${p.name}: ${p.paths.map((i)=>`"${i}"`).join(", ")}`).join(`
543
- `),d=Error(`Duplicate skill names detected in selection:
544
- ${y}
545
- Choose one path per skill name or install with --path.`);throw d.duplicates=S,d}R=C.map((y)=>({skillDir:F(O,y),nameOverride:C.length===1?q.flags.name:null})),G++}}console.info(Y("Inspecting skills"));let T=await a(B,"both"),D=[],x=R.length>1;for(let I=0;I<R.length;I++){let{skillDir:j,nameOverride:C}=R[I],S=await LV(q,V,O,j,C,B,_,T,K);D.push(S),OV(S,Q,_,L,x,x?{index:I+1,total:R.length}:void 0)}if(x){if(console.info(""),console.info(` ${U.bold("Install settings:")}`),console.info(` ${U.bold("Source:")} ${Q}`),L)console.info(` ${U.bold("Tool:")} All (${L.map((y)=>y.label).join(", ")})`);else console.info(` ${U.bold("Tool:")} ${_.label} (${_.name})`);console.info(` ${U.bold("Scope:")} ${K==="project"?"Project":"Global"}`);let I=D.filter((y)=>y.riskLevel==="high").length,j=D.filter((y)=>y.riskLevel==="medium").length,C=D.filter((y)=>y.riskLevel==="safe").length,S=[];if(C>0)S.push(U.green(`${C} Safe`));if(j>0)S.push(U.yellow(`${j} Medium Risk`));if(I>0)S.push(U.red(`${I} High Risk`));console.info(` ${U.bold("Risk:")} ${S.join(", ")}`)}if(console.info(Y("Installing")),!q.flags.yes){let I=D.some((y)=>y.riskLevel==="high");if(!process.stdin.isTTY)P("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2);let j=x?`${D.length} skills`:`"${D[0].metadata.name}"`,C=I?`
546
- ${U.red("[!]")} ${U.bold(`Install ${j}? Some have high-risk patterns.`)} [y/N] `:`
547
- ${U.bold(`Install ${j}?`)} [Y/n] `;process.stderr.write(C);let S=await $0();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 w=X?await UZ(X):null,f=[];for(let I=0;I<D.length;I++){let j=D[I],C=x?U.dim(`[${I+1}/${D.length}]`)+" ":" ";try{console.info(`${C}Installing ${U.bold(j.metadata.name)}...`);let S=await FV(j.plan,L);A.push(S),console.info(`${C}${U.green("")} ${j.metadata.name} installed to ${U.dim(j.plan.targetDir)}`);try{let y=W?`local:${V.localPath}`:`github:${V.owner}/${V.repo}`,d=W?"local":z==="registry"?"registry":"github";await bq(S.name,{source:y,commitHash:w||"unknown",ref:V.ref||"main",installedAt:new Date().toISOString(),provider:j.plan.providerName,sourceType:d,...z==="registry"?{registryName:S.name}:{}})}catch{}}catch(S){f.push({name:j.metadata.name,error:S.message}),console.error(`${C}${U.red("")} ${U.bold(j.metadata.name)} ${U.red(S.message)}`)}}if(process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),f.length>0){console.error(`
548
- ${U.yellow(`${f.length} skill(s) failed to install:`)}`);for(let I of f)console.error(` ${U.red("")} ${I.name}: ${I.error}`)}if(q.flags.machine){$?.();let I=A.map((j)=>({name:j.name,path:j.path,version:j.version,provider:j.provider,source:j.source,resolution_source:z}));console.log(l("install",I.length===1?I[0]:I,Z))}else if(q.flags.json){let I=A.map((j)=>({...j,resolutionSource:z}));console.log(JSON.stringify(I.length===1?I[0]:I,null,2))}else if(A.length===1)console.error(U.green(`
549
- Done! Installed "${A[0].name}" to ${A[0].path}`));else if(A.length>0)console.error(`
550
- ${U.green(`Done! Installed ${A.length} skill(s) successfully.`)}`)}catch(V){if(process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),q.flags.machine)$?.(),console.log(q0("install",e.INSTALL_FAILED,V.message,Z,V?.duplicates?{duplicates:V.duplicates}:void 0));else if(q.flags.json){let W={success:!1,error:V.message};if(V?.duplicates)W.duplicates=V.duplicates;console.log(JSON.stringify(W,null,2))}else P(V.message);process.exit(1)}finally{if(X)await Q0(X);$?.()}}function AV(){console.log(`${U.bold("Usage:")} asm export [options]
559
+ ${S.map(T=>` --path ${T.relPath}`).join(`
560
+ `)}`),process.exit(2);return}let L=Po(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(y,T),nameOverride:I.length===1?e.flags.name:null})),a++}}console.info(l("Inspecting skills"));let k=await Q(p,"both"),E=[],O=x.length>1;for(let v=0;v<x.length;v++){let{skillDir:S,nameOverride:I}=x[v],L=await Zw(e,d,y,S,I,p,h,k,m);E.push(L),ev(L,i,h,g,O,O?{index:v+1,total:x.length}:void 0)}if(O){console.info(""),console.info(` ${u.bold("Install settings:")}`),console.info(` ${u.bold("Source:")} ${i}`),console.info(g?` ${u.bold("Tool:")} All (${g.map(T=>T.label).join(", ")})`:` ${u.bold("Tool:")} ${h.label} (${h.name})`),console.info(` ${u.bold("Scope:")} ${m==="project"?"Project":"Global"}`);let v=E.filter(T=>T.riskLevel==="high").length,S=E.filter(T=>T.riskLevel==="medium").length,I=E.filter(T=>T.riskLevel==="safe").length,L=[];I>0&&L.push(u.green(`${I} Safe`)),S>0&&L.push(u.yellow(`${S} Medium Risk`)),v>0&&L.push(u.red(`${v} High Risk`)),console.info(` ${u.bold("Risk:")} ${L.join(", ")}`)}if(console.info(l("Installing")),!e.flags.yes){let v=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 S=O?`${E.length} skills`:`"${E[0].metadata.name}"`,I=v?`
564
+ ${u.red("[!]")} ${u.bold(`Install ${S}? Some have high-risk patterns.`)} [y/N] `:`
565
+ ${u.bold(`Install ${S}?`)} [Y/n] `;process.stderr.write(I);let L=await G();v?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 yo(n):null,M=[];for(let v=0;v<E.length;v++){let S=E[v],I=O?u.dim(`[${v+1}/${E.length}]`)+" ":" ";try{console.info(`${I}Installing ${u.bold(S.metadata.name)}...`);let L=await tv(S.plan,g);w.push(L),console.info(`${I}${u.green("\u2713")} ${S.metadata.name} installed to ${u.dim(S.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:S.plan.providerName,sourceType:K,...r==="registry"?{registryName:L.name}:{}})}catch{}}catch(L){M.push({name:S.metadata.name,error:L.message}),console.error(`${I}${u.red("\u2717")} ${u.bold(S.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 v of M)console.error(` ${u.red("\u2717")} ${v.name}: ${v.error}`)}if(e.flags.machine){t?.();let v=w.map(S=>({name:S.name,path:S.path,version:S.version,provider:S.provider,source:S.source,resolution_source:r}));console.log(Y("install",v.length===1?v[0]:v,s))}else if(e.flags.json){let v=w.map(S=>({...S,resolutionSource:r}));console.log(JSON.stringify(v.length===1?v[0]:v,null,2))}else w.length===1?console.error(u.green(`
567
+ Done! Installed "${w[0].name}" to ${w[0].path}`)):w.length>0&&console.error(`
568
+ ${u.green(`Done! Installed ${w.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 iv(){console.log(`${u.bold("Usage:")} asm export [options]
551
569
 
552
570
  Export skill inventory as a portable JSON manifest. Useful for backup,
553
571
  sharing, or scripting.
554
572
 
555
- ${U.bold("Options:")}
573
+ ${u.bold("Options:")}
556
574
  -s, --scope <s> Filter: global, project, or both (default: both)
557
575
  --no-color Disable ANSI colors
558
576
  -V, --verbose Show debug output
559
577
 
560
- ${U.bold("Examples:")}
561
- asm export ${U.dim("Export all skills")}
562
- asm export -s global ${U.dim("Export global skills only")}
563
- asm export > skills.json ${U.dim("Save to file")}`)}async function TV(q){if(q.flags.help){AV();return}let $=await h(),Z=await a($,q.flags.scope),Q=j5(Z);console.log(JSON.stringify(Q,null,2))}function MV(){console.log(`${U.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 nv(e){if(e.flags.help){iv();return}let t=await q(),s=await Q(t,e.flags.scope),i=Ic(s);console.log(JSON.stringify(i,null,2))}function rv(){console.log(`${u.bold("Usage:")} asm import <file> [options]
564
582
 
565
583
  Import skills from a previously exported JSON manifest. Recreates skill
566
584
  installations based on the manifest metadata.
567
585
 
568
586
  Skills that already exist at the target location are skipped unless --force
569
587
  is used. Skills whose source files cannot be found locally are reported as
570
- failed install them first with "asm install".
588
+ failed \u2014 install them first with "asm install".
571
589
 
572
- ${U.bold("Options:")}
590
+ ${u.bold("Options:")}
573
591
  -s, --scope <s> Filter: global, project, or both (default: both)
574
592
  -f, --force Overwrite existing skills
575
593
  -y, --yes Skip confirmation prompt
@@ -577,102 +595,115 @@ ${U.bold("Options:")}
577
595
  --no-color Disable ANSI colors
578
596
  -V, --verbose Show debug output
579
597
 
580
- ${U.bold("Examples:")}
581
- asm import skills.json ${U.dim("Import from manifest")}
582
- asm import skills.json --force ${U.dim("Overwrite existing skills")}
583
- asm import skills.json -s global ${U.dim("Import only global skills")}
584
- asm export > backup.json ${U.dim("Export first, then import later")}
585
- asm import backup.json ${U.dim("Restore from backup")}`)}async function jV(q){if(q.flags.help){MV();return}let $=q.subcommand;if(!$)P("Missing required argument: <file>"),console.error('Run "asm import --help" for usage.'),process.exit(2);let{resolve:Z}=await import("path"),Q=Z($),X;try{X=await w5(Q)}catch(Y){P(Y.message),process.exit(1)}let z=X.skills.length;if(z===0){if(q.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=q.flags.scope==="both"?"all scopes":q.flags.scope;if(console.error(`${U.bold("Importing")} ${z} skill${z>1?"s":""} from ${U.dim(Q)}`),console.error(` Scope filter: ${J}`),q.flags.force)console.error(` ${U.yellow("Force mode: existing skills will be overwritten")}`);if(!q.flags.yes&&process.stdin.isTTY){process.stderr.write(`
586
- ${U.bold("Proceed?")} [y/N] `);let Y=await $0();if(Y.toLowerCase()!=="y"&&Y.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let G=await P5(X,{force:q.flags.force,dryRun:!1,scopeFilter:q.flags.scope});if(q.flags.json){console.log(JSON.stringify(G,null,2));return}if(G.total===0){console.error(`
587
- Nothing to import after scope filtering (--scope ${q.flags.scope}). All skills in the manifest were excluded.`);return}console.error("");for(let Y of G.results){let H=Y.status==="installed"?U.green("+++"):Y.status==="skipped"?U.yellow("---"):Y.status==="dry-run"?U.cyan("~~~"):U.red("!!!"),V=Y.reason?` ${U.dim(Y.reason)}`:"",W=Y.path?` ${U.dim(Y.path)}`:"";console.error(` ${H} ${Y.skillName} (${Y.provider}/${Y.scope})${V}${W}`)}if(console.error(""),console.error(`${U.bold("Summary:")} ${G.total} total, ${U.green(String(G.installed))} installed, ${U.yellow(String(G.skipped))} skipped, ${U.red(String(G.failed))} failed`),G.failed>0)process.exitCode=1}function RV(){console.log(`${U.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 ov(e){if(e.flags.help){rv();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 Tc(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 Mc(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 av(){console.log(`${u.bold("Usage:")} asm init <name> [options]
588
606
 
589
607
  Scaffold a new skill directory with a SKILL.md template. Creates a
590
608
  ready-to-edit skill in the target tool's skill folder.
591
609
 
592
- ${U.bold("Options:")}
610
+ ${u.bold("Options:")}
593
611
  -p, --tool <name> Target tool (claude, codex, openclaw, agents)
594
612
  --path <dir> Scaffold in specified directory instead of provider path
595
613
  -f, --force Overwrite if skill already exists
596
614
  --no-color Disable ANSI colors
597
615
  -V, --verbose Show debug output
598
616
 
599
- ${U.bold("Examples:")}
600
- asm init my-skill ${U.dim("Scaffold (interactive tool)")}
601
- asm init my-skill -p claude ${U.dim("Scaffold in Claude Code")}
602
- asm init my-skill --path ./skills ${U.dim("Scaffold in custom directory")}`)}async function DV(q){if(q.flags.help){RV();return}let $=q.subcommand;if(!$)P("Missing required argument: <name>"),console.error('Run "asm init --help" for usage.'),process.exit(2);let Z=N0($),Q;if(q.flags.path){let{resolve:X}=await import("path");Q=X(q.flags.path)}else{let X=await h(),{provider:z}=await n0(X,q.flags.provider,!!process.stdin.isTTY),{join:J}=await import("path"),{resolveProviderPath:G}=await import("./chunk-vgzgtfy6.js"),Y=G(X.providers.find((H)=>H.name===z.name).global);Q=J(Y,Z)}if(await E5(Q)){if(!q.flags.force){if(!process.stdin.isTTY)P(`Directory already exists: ${Q}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${U.yellow(`Directory already exists: ${Q}`)}
603
- ${U.bold("Overwrite?")} [y/N] `);let X=await $0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}}await C5(Z,Q),console.error(U.green(`Done! Created skill "${Z}" at ${Q}`))}function NV(){console.log(`${U.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 lv(e){if(e.flags.help){av();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 _c(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 Dc(s,i),console.error(u.green(`Done! Created skill "${s}" at ${i}`))}function cv(){console.log(`${u.bold("Usage:")} asm stats [options]
604
622
 
605
623
  Show aggregate skill metrics with provider distribution charts,
606
624
  scope breakdown, disk usage, and duplicate summary.
607
625
 
608
- ${U.bold("Options:")}
626
+ ${u.bold("Options:")}
609
627
  --json Output as JSON
610
628
  -s, --scope <s> Filter: global, project, or both (default: both)
611
629
  --no-color Disable ANSI colors
612
630
  -V, --verbose Show debug output
613
631
 
614
- ${U.bold("Examples:")}
615
- asm stats ${U.dim("Show full dashboard")}
616
- asm stats -s global ${U.dim("Global skills only")}
617
- asm stats --json ${U.dim("Output raw data as JSON")}`)}async function wV(q){if(q.flags.help){NV();return}let $=await h(),Z=await a($,q.flags.scope);if(Z.length===0){console.log("No skills found.");return}let Q=d9(Z),X=await x5(Z,Q);if(q.flags.json)if(!q.flags.verbose){let{perSkillDiskBytes:z,...J}=X;console.log(c(J))}else console.log(c(X));else console.log(y5(X))}function PV(){console.log(`${U.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 uv(e){if(e.flags.help){cv();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 Fc(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(jc(n))}function fv(){console.log(`${u.bold("Usage:")} asm doctor [options]
618
636
 
619
637
  Run environment health checks and diagnostics. Validates all
620
- prerequisites for using asm git, GitHub CLI, Node.js, config,
638
+ prerequisites for using asm \u2014 git, GitHub CLI, Node.js, config,
621
639
  lock file, registry, installed skills, and disk space.
622
640
 
623
- ${U.bold("Options:")}
641
+ ${u.bold("Options:")}
624
642
  --json Output as JSON
625
643
  --machine Output in stable machine-readable v1 envelope format
626
644
  --no-color Disable ANSI colors
627
645
  -V, --verbose Show debug output
628
646
 
629
- ${U.bold("Examples:")}
630
- asm doctor ${U.dim("Run all health checks")}
631
- asm doctor --json ${U.dim("Output as JSON")}
632
- asm doctor --machine ${U.dim("Machine-readable v1 envelope output")}`)}async function CV(q){if(q.flags.help){PV();return}let $=performance.now(),Z=await Y8();if(q.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,$))}else if(q.flags.json)console.log(H8(Z));else console.log(U8(Z));if(Z.failures>0)process.exit(1)}function EV(){console.log(`${U.bold("Usage:")} asm eval <skill-path> [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 dv(e){if(e.flags.help){fv();return}let t=performance.now(),s=await gu();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(bu(s)):console.log(yu(s));s.failures>0&&process.exit(1)}function pv(){console.log(`${u.bold("Usage:")} asm eval <target> [options]
633
651
 
634
652
  Evaluate a skill's SKILL.md against best practices and produce a scored quality
635
- report with recommendations. Zero configuration just point it at a skill
653
+ report with recommendations. Zero configuration \u2014 just point it at a skill
636
654
  directory. Categories: structure, description quality, prompt engineering,
637
655
  context efficiency, safety, testability, and naming conventions.
638
656
 
639
- ${U.bold("Arguments:")}
640
- skill-path Path to a skill directory (must contain SKILL.md)
657
+ Accepts a local path, a GitHub shorthand, or a GitHub URL. When the target is a
658
+ collection (no SKILL.md at the root but each immediate child has one), every
659
+ child skill is evaluated and an aggregate summary is printed.
641
660
 
642
- ${U.bold("Options:")}
661
+ ${u.bold("Arguments:")}
662
+ target Local path, github:owner/repo[#ref][:subpath], or
663
+ https://github.com/owner/repo[/tree/<ref>/<sub>]
664
+
665
+ ${u.bold("Options:")}
643
666
  --fix Apply deterministic auto-fixes to SKILL.md (creates .bak)
644
667
  --dry-run With --fix, preview the diff without writing
645
668
  --json Output report as JSON
646
669
  --machine Output in stable machine-readable v1 envelope format
670
+ --concurrency N Cap parallel per-skill evals in batch mode (default: 4)
671
+ --keep Preserve the temp dir used for remote clones
672
+ -t, --transport M Git transport (auto|https|ssh) for remote targets
647
673
  --no-color Disable ANSI colors
648
674
  -V, --verbose Show debug output
649
675
 
650
- ${U.bold("Examples:")}
651
- asm eval ./my-skill ${U.dim("Score and recommend improvements")}
652
- asm eval ./my-skill --json ${U.dim("Output report as JSON")}
653
- asm eval ./my-skill --fix ${U.dim("Auto-fix deterministic frontmatter issues")}
654
- asm eval ./my-skill --fix --dry-run ${U.dim("Preview fixes as diff")}
655
- asm eval ./my-skill --machine ${U.dim("Machine-readable v1 envelope output")}
656
- asm eval-providers list ${U.dim("List registered eval providers")}`)}var a8=!1;function _Z(){if(a8)return;y8(),a8=!0}function SV(q){let $=q.findings.find((Z)=>Z.severity==="error"&&(Z.code==="provider-threw"||Z.code==="timeout"||Z.code==="aborted"));if($)throw Error($.message)}async function bV(q){if(q.flags.help){EV();return}let $=q.flags.machine?g0():void 0,Z=performance.now(),Q=q.subcommand;if(!Q){if(q.flags.machine)$?.(),console.log(q0("eval",e.INVALID_ARGUMENT,"Missing required argument: <skill-path>",Z)),process.exit(2);P("Missing required argument: <skill-path>"),console.error('Run "asm eval --help" for usage.'),process.exit(2)}try{if(q.flags.fix){let H=await T8(),V=await A8(Q,{dryRun:q.flags.dryRun,gitAuthor:H});if(q.flags.machine){$?.(),console.log(l("eval",k9(V.report,V),Z));return}if(q.flags.json){console.log(JSON.stringify({report:V.report,fix:{dryRun:V.dryRun,applied:V.applied,skipped:V.skipped,backupPath:V.backupPath,diff:V.diff}},null,2));return}console.log(f9(V.report)),console.log(""),console.log(j8(V));return}_Z();let X=P8("quality","^1.0.0"),{resolve:z}=await import("path"),J=z(Q),G=await N8(X,{skillPath:J,skillMdPath:z(J,"SKILL.md")});SV(G);let Y=G.raw;if(q.flags.machine){$?.(),console.log(l("eval",k9(Y,null),Z));return}if(q.flags.json){console.log(M8(Y));return}console.log(f9(Y))}catch(X){if(q.flags.machine)$?.(),console.log(q0("eval",e.SKILL_NOT_FOUND,X?.message??String(X),Z)),process.exit(1);P(X?.message??String(X)),process.exit(1)}}function xV(){console.log(`${U.bold("Usage:")} asm eval-providers <subcommand> [options]
657
-
658
- Manage evaluation providers registered with the ${U.bold("asm eval")} framework.
659
- Providers implement the ${U.bold("EvalProvider")} contract (see src/eval/types.ts) and
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")}
681
+ asm eval https://github.com/mattpocock/skills/tree/main/grill-me
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 mv(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 hv(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 ns(i);let n=await De(i,t),r=i.subpath?cf(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}),h=p.trim();/^[0-9a-f]{40}$/i.test(h)&&(o=h)}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 lf(e){bi();try{let t={skillPath:e.skillPath,skillMdPath:e.skillMdPath},s=(await Promise.all(zt(wi()).map(async r=>(await r.applicable(t,{})).ok?vi(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 mv(i),{report:{...i.raw,providers:zt(s.map(Wu))},error:null}}catch(t){return{report:null,error:t?.message??String(t)}}}async function gv(e){if(e.flags.help){pv();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(Ur(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 Au(),o=await Eu(i,{dryRun:e.flags.dryRun,gitAuthor:r});if(e.flags.machine){t?.(),console.log(Y("eval",mi(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(pi(o.report)),console.log(""),console.log(Nu(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 Iu(i,{fetchRemote:r=>hv(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 lf(c);if(!d)throw new Error(f??"eval failed");if(e.flags.machine){t?.();let p=mi(d,null),h=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",h,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(Pu(d));return}console.log(pi(d)),n.provenance.remote&&yv(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 Ru(n.targets,r,async c=>{let{report:d,error:f}=await lf(c);return{label:c.label,skillPath:c.skillPath,report:d,error:f}}),a=Lu(o),l={provenance:n.provenance,aggregate:a,results:o};if(e.flags.machine){t?.(),console.log(Y("eval",Tu(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(pi(c.report)):(console.log(`Skill evaluation: ${c.skillPath}`),console.log(` ${u.red("error:")} ${c.error??"unknown failure"}`)),console.log("");console.log(Ou(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 yv(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 bv(){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
660
691
  are resolved by id and semver range.
661
692
 
662
- ${U.bold("Subcommands:")}
693
+ ${u.bold("Subcommands:")}
663
694
  list List every registered (id, version) provider
664
695
 
665
- ${U.bold("Options:")}
696
+ ${u.bold("Options:")}
666
697
  --json Output as JSON (list)
667
698
  --no-color Disable ANSI colors
668
699
  -V, --verbose Show debug output
669
700
 
670
- ${U.bold("Examples:")}
671
- asm eval-providers list ${U.dim("Show registered providers")}
672
- asm eval-providers list --json ${U.dim("Machine-readable listing")}`)}async function yV(q){if(q.flags.help){xV();return}let $=q.subcommand;if(!$)P("Missing subcommand. Use: list"),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2);switch($){case"list":{_Z();let Z=C8();if(q.flags.json){console.log(c(Z.map((G)=>({id:G.id,version:G.version,schemaVersion:G.schemaVersion,description:G.description,requires:G.requires??[]}))));return}if(Z.length===0){console.log("No eval providers registered.");return}let Q=["id","version","schemaVersion","description","requires"],X=Z.map((G)=>[G.id,G.version,String(G.schemaVersion),G.description,G.requires&&G.requires.length>0?G.requires.join(","):"-"]),z=Q.map((G,Y)=>Math.max(G.length,...X.map((H)=>H[Y].length))),J=(G)=>G.map((Y,H)=>Y.padEnd(z[H])).join(" ");console.log(U.bold(J(Q))),console.log(z.map((G)=>"-".repeat(G)).join(" "));for(let G of X)console.log(J(G));return}default:P(`Unknown eval-providers subcommand: "${$}". Use: list`),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2)}}function fV(){console.log(`${U.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 wv(e){if(e.flags.help){bv();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":{bi();let s=hi();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 vv(){console.log(`${u.bold("Usage:")} asm link <path> [<path2> ...] [options]
673
704
 
674
705
  Symlink a local skill directory into an agent's skill folder. Useful
675
- for local development changes to the source are reflected immediately.
706
+ for local development \u2014 changes to the source are reflected immediately.
676
707
 
677
708
  If <path> contains a SKILL.md at its root, it is linked as a single skill.
678
709
  If <path> has no root SKILL.md but contains subdirectories with SKILL.md
@@ -680,7 +711,7 @@ files, all discovered skills are linked in a single invocation.
680
711
 
681
712
  Multiple paths can be provided to link several skills at once.
682
713
 
683
- ${U.bold("Options:")}
714
+ ${u.bold("Options:")}
684
715
  -p, --tool <name> Target tool (claude, codex, openclaw, agents)
685
716
  --name <name> Override symlink name (single skill only)
686
717
  -f, --force Overwrite if target already exists
@@ -688,28 +719,28 @@ ${U.bold("Options:")}
688
719
  --no-color Disable ANSI colors
689
720
  -V, --verbose Show debug output
690
721
 
691
- ${U.bold("Examples:")}
692
- asm link ./my-skill ${U.dim("Link (interactive tool)")}
693
- asm link ./my-skill -p claude ${U.dim("Link to Claude Code")}
694
- asm link ./my-skill --name alias ${U.dim("Link with custom name")}
695
- asm link ./my-skills-folder ${U.dim("Link all skills in folder")}
696
- asm link ./skill1 ./skill2 ./skill3 -p claude ${U.dim("Link multiple skills at once")}`)}async function kV(q,$){if($)return!0;let{access:Z}=await import("fs/promises"),Q=!1;try{await Z(q),Q=!0}catch{}if(!Q)return!1;if(!process.stdin.isTTY)throw Error(`Target already exists: ${q}. Use --force to overwrite.`);process.stderr.write(`${U.yellow(`Target already exists: ${q}`)}
697
- ${U.bold("Overwrite?")} [y/N] `);let X=await $0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0);return!0}async function a$(q,$,Z,Q){let{join:X}=await import("path"),z=X($,Z),J=await kV(z,Q);return await k5(q,$,Z,J),{name:Z,symlinkPath:z,targetPath:q}}async function vV(q){if(q.flags.help){fV();return}let $=[];if(q.subcommand)$.push(q.subcommand);if($.push(...q.positional),$.length===0)P("Missing required argument: <path>"),console.error('Run "asm link --help" for usage.'),process.exit(2);if($.length>1){if(q.flags.name)P("--name cannot be used when linking multiple paths. Link each skill individually to use --name."),process.exit(2);let L=await h(),{provider:K}=await n0(L,q.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:O}=await import("./chunk-vgzgtfy6.js"),F=O(L.providers.find((D)=>D.name===K.name).global),{resolve:A,basename:M}=await import("path"),R=[],T=[];for(let D of $){let x=A(D),w=!1;try{await I9(x),w=!0}catch{}if(w){let f=M(x);try{let I=await a$(x,F,f,!!q.flags.force);if(R.push(I),!q.flags.json)console.error(U.green(` Linked "${I.name}" -> ${I.targetPath}`))}catch(I){let j=I instanceof Error?I.message:String(I);if(T.push({name:f,error:j}),!q.flags.json)console.error(U.red(` Failed to link "${f}": ${j}`))}}else{let f=[];try{f=await A9(x)}catch(I){let j=I instanceof Error?I.message:String(I);if(T.push({name:D,error:j}),!q.flags.json)console.error(U.red(` Failed to process "${D}": ${j}`));continue}if(f.length===0){let I=`No SKILL.md found in ${x} or its immediate subdirectories.`;if(T.push({name:D,error:I}),!q.flags.json)console.error(U.red(` ${I}`));continue}for(let I of f)try{let j=await a$(I.absPath,F,I.dirName,!!q.flags.force);if(R.push(j),!q.flags.json)console.error(U.green(` Linked "${j.name}" -> ${j.targetPath}`))}catch(j){let C=j instanceof Error?j.message:String(j);if(T.push({name:I.name,error:C}),!q.flags.json)console.error(U.red(` Failed to link "${I.name}": ${C}`))}}}if(q.flags.json)console.log(c({success:T.length===0,linked:R,failures:T}));else if(T.length>0)console.error(U.yellow(`
698
- ${R.length} linked, ${T.length} failed.`));else console.error(U.green(`
699
- Done! Linked ${R.length} skill(s) successfully.`));if(T.length>0)process.exit(1);return}let Z=$[0],{resolve:Q,basename:X}=await import("path"),z=Q(Z),J=!1;try{await I9(z),J=!0}catch{}let G=[];if(!J){if(G=await A9(z),G.length===0)P(`No SKILL.md found in ${z} or its immediate subdirectories.`),process.exit(1);if(q.flags.name&&G.length>1)P(`--name cannot be used when linking multiple skills (found ${G.length} skills). Link each skill individually to use --name.`),process.exit(2)}let Y=await h(),{provider:H}=await n0(Y,q.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:V}=await import("./chunk-vgzgtfy6.js"),W=V(Y.providers.find((L)=>L.name===H.name).global);if(J){let L=q.flags.name?N0(q.flags.name):X(z),K;try{K=await a$(z,W,L,!!q.flags.force)}catch(O){let F=O instanceof Error?O.message:String(O);if(q.flags.json)console.log(c({success:!1,error:F}));else P(F);process.exit(2)}if(q.flags.json)console.log(c({success:!0,...K}));else console.error(U.green(`Done! Linked "${K.name}" -> ${K.targetPath}`)),console.error(` Symlink: ${K.symlinkPath}`),console.error(U.dim(` If you move or delete the source, run "asm uninstall ${K.name}" to clean up.`));return}console.error(`Found ${U.bold(String(G.length))} skill(s) in ${z}:`);for(let L of G)console.error(` ${U.bold(L.name)} ${U.dim(`v${L.version}`)} ${U.dim(`(${L.dirName}/)`)}`);if(process.stdin.isTTY&&!q.flags.force){process.stderr.write(`
700
- ${U.bold(`Link ${G.length} skill(s)?`)} [Y/n] `);let L=await $0();if(L.toLowerCase()==="n"||L.toLowerCase()==="no")console.error("Aborted."),process.exit(0)}let B=[],_=[];for(let L of G){let K=q.flags.name&&G.length===1?N0(q.flags.name):L.dirName;try{let O=await a$(L.absPath,W,K,!!q.flags.force);if(B.push(O),!q.flags.json)console.error(U.green(` Linked "${O.name}" -> ${O.targetPath}`))}catch(O){let F=O instanceof Error?O.message:String(O);if(_.push({name:L.name,error:F}),!q.flags.json)console.error(U.red(` Failed to link "${L.name}": ${F}`))}}if(q.flags.json)console.log(c({success:_.length===0,linked:B,failures:_}));else if(_.length>0)console.error(U.yellow(`
701
- ${B.length} linked, ${_.length} failed.`));else console.error(U.green(`
702
- Done! Linked ${B.length} skill(s) successfully.`));if(_.length>0)process.exit(1)}function hV(){console.log(`${U.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 kv(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 kv(r,i);return await Uc(e,t,s,o),{name:s,symlinkPath:r,targetPath:e}}async function Sv(e){if(e.flags.help){vv();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 g=await q(),{provider:m}=await ze(g,e.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:y}=await import("./config-55HAAFSH.js"),b=y(g.providers.find(E=>E.name===m.name).global),{resolve:w,basename:$}=await import("path"),x=[],k=[];for(let E of t){let O=w(E),P=!1;try{await Er(O),P=!0}catch{}if(P){let M=$(O);try{let v=await xi(O,b,M,!!e.flags.force);x.push(v),e.flags.json||console.error(u.green(` Linked "${v.name}" -> ${v.targetPath}`))}catch(v){let S=v instanceof Error?v.message:String(v);k.push({name:M,error:S}),e.flags.json||console.error(u.red(` Failed to link "${M}": ${S}`))}}else{let M=[];try{M=await Ar(O)}catch(v){let S=v instanceof Error?v.message:String(v);k.push({name:E,error:S}),e.flags.json||console.error(u.red(` Failed to process "${E}": ${S}`));continue}if(M.length===0){let v=`No SKILL.md found in ${O} or its immediate subdirectories.`;k.push({name:E,error:v}),e.flags.json||console.error(u.red(` ${v}`));continue}for(let v of M)try{let S=await xi(v.absPath,b,v.dirName,!!e.flags.force);x.push(S),e.flags.json||console.error(u.green(` Linked "${S.name}" -> ${S.targetPath}`))}catch(S){let I=S instanceof Error?S.message:String(S);k.push({name:v.name,error:I}),e.flags.json||console.error(u.red(` Failed to link "${v.name}": ${I}`))}}}e.flags.json?console.log(J({success:k.length===0,linked:x,failures:k})):k.length>0?console.error(u.yellow(`
729
+ ${x.length} linked, ${k.length} failed.`)):console.error(u.green(`
730
+ Done! Linked ${x.length} skill(s) successfully.`)),k.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(g=>g.name===c.name).global);if(o){let g=e.flags.name?Te(e.flags.name):n(r),m;try{m=await xi(r,f,g,!!e.flags.force)}catch(y){let b=y instanceof Error?y.message:String(y);e.flags.json?console.log(J({success:!1,error:b})):C(b),process.exit(2)}e.flags.json?console.log(J({success:!0,...m})):(console.error(u.green(`Done! Linked "${m.name}" -> ${m.targetPath}`)),console.error(` Symlink: ${m.symlinkPath}`),console.error(u.dim(` If you move or delete the source, run "asm uninstall ${m.name}" to clean up.`)));return}console.error(`Found ${u.bold(String(a.length))} skill(s) in ${r}:`);for(let g of a)console.error(` ${u.bold(g.name)} ${u.dim(`v${g.version}`)} ${u.dim(`(${g.dirName}/)`)}`);if(process.stdin.isTTY&&!e.flags.force){process.stderr.write(`
731
+ ${u.bold(`Link ${a.length} skill(s)?`)} [Y/n] `);let g=await G();(g.toLowerCase()==="n"||g.toLowerCase()==="no")&&(console.error("Aborted."),process.exit(0))}let p=[],h=[];for(let g of a){let m=e.flags.name&&a.length===1?Te(e.flags.name):g.dirName;try{let y=await xi(g.absPath,f,m,!!e.flags.force);p.push(y),e.flags.json||console.error(u.green(` Linked "${y.name}" -> ${y.targetPath}`))}catch(y){let b=y instanceof Error?y.message:String(y);h.push({name:g.name,error:b}),e.flags.json||console.error(u.red(` Failed to link "${g.name}": ${b}`))}}e.flags.json?console.log(J({success:h.length===0,linked:p,failures:h})):h.length>0?console.error(u.yellow(`
732
+ ${p.length} linked, ${h.length} failed.`)):console.error(u.green(`
733
+ Done! Linked ${p.length} skill(s) successfully.`)),h.length>0&&process.exit(1)}function $v(){console.log(`${u.bold("Usage:")} asm index <subcommand> [options]
703
734
 
704
735
  Manage the skill index for searching available skills from indexed repos.
705
736
 
706
- ${U.bold("Subcommands:")}
737
+ ${u.bold("Subcommands:")}
707
738
  ingest <repo> Ingest a skill repository into the index
708
739
  search <query> Search indexed skills by name or description
709
740
  list List all indexed repositories
710
741
  remove <owner/repo> Remove a repo from the index
711
742
 
712
- ${U.bold("Options:")}
743
+ ${u.bold("Options:")}
713
744
  --json Output as JSON
714
745
  --has <field> Only show skills that have <field> (license, creator, version)
715
746
  --missing <field> Only show skills missing <field> (license, creator, version)
@@ -717,49 +748,59 @@ ${U.bold("Options:")}
717
748
  --no-color Disable ANSI colors
718
749
  -V, --verbose Show debug output
719
750
 
720
- ${U.bold("Examples:")}
721
- asm index ingest github:obra/superpowers ${U.dim("Index superpowers repo")}
722
- asm index search code review ${U.dim("Search for skills")}
723
- asm index search marketing --has license ${U.dim("Only with license")}
724
- asm index search "" --missing creator ${U.dim("Skills missing creator")}
725
- asm index list ${U.dim("List indexed repos")}
726
- asm index remove obra/superpowers ${U.dim("Remove from index")}`)}async function gV(q){if(q.flags.help){hV();return}let $=q.subcommand;if(!$)P("Missing subcommand. Use: ingest, search, list, or remove"),console.error('Run "asm index --help" for usage.'),process.exit(2);switch($){case"ingest":{let Z=q.positional[0];if(!Z)P("Missing required argument: <repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2);console.error(U.blueBold(`Ingesting ${Z}...`));let Q=await c8(Z);if(!Q.success)P(`Failed to ingest: ${Q.error}`),process.exit(1);if(Q.repoIndex)if(q.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(U.green(`Successfully indexed ${Q.repoIndex.owner}/${Q.repoIndex.repo}`)),console.error(` Skills found: ${Q.repoIndex.skillCount}`);break}case"search":{let Z=q.positional.join(" ");if(!Z&&q.flags.has.length===0&&q.flags.missing.length===0)P("Missing required argument: <query>"),console.error('Run "asm index --help" for usage.'),process.exit(2);let Q={};if(q.flags.has.length>0)Q.has=q.flags.has;if(q.flags.missing.length>0)Q.missing=q.flags.missing;let z=Q.has||Q.missing?await n$(Z||"",20,Q):await n$(Z);if(z.length===0){if(q.flags.json)console.log(c([]));else console.info("No skills found matching your query."),console.error(U.dim("Try ingesting more repos with: asm index ingest <repo>"));return}if(q.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(U.bold(`Found ${z.length} skills:
727
- `));for(let J of z){let G=J.skill.verified?U.blue(" [verified]"):"";console.error(`${U.cyan(J.skill.name)} ${U.dim(`v${J.skill.version}`)}${G} ${U.dim(`[${J.repo.owner}/${J.repo.repo}]`)}`);for(let H of GZ(J.skill.description,80))console.error(` ${H}`);let Y=m8(J.skill);if(Y.length>0)console.error(` ${U.yellow(`⚠ Missing: ${Y.join(", ")}`)}`);console.error(` ${U.green(`asm install ${J.skill.installUrl}`)}
728
- `)}}break}case"list":{let Z=await l8();if(Z.length===0){if(q.flags.json)console.log(c([]));else console.info("No repositories indexed."),console.error(U.dim("Add repos with: asm index ingest <repo>"));return}let Q=await p8();if(q.flags.json)console.log(c(Z));else{console.error(U.bold(`Indexed Repositories (${Q} total skills):
729
- `));for(let X of Z)console.error(`${U.cyan(`${X.owner}/${X.repo}`)} - ${X.skillCount} skills ${U.dim(`(${new Date(X.updatedAt).toLocaleDateString()})`)}`)}break}case"remove":{let Z=q.positional[0];if(!Z)P("Missing required argument: <owner/repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2);let[Q,X]=Z.split("/");if(!Q||!X)P("Invalid format. Use: <owner/repo>"),process.exit(2);if(!q.flags.yes&&process.stdin.isTTY){process.stderr.write(`${U.bold("Remove")} ${U.cyan(`${Q}/${X}`)} ${U.bold("from index?")} [y/N] `);let J=await $0();if(J.toLowerCase()!=="y"&&J.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}if(await n8(Q,X))console.error(U.green(`Removed ${Q}/${X} from index`));else P(`Repository not found in index: ${Q}/${X}`),process.exit(1);break}default:P(`Unknown subcommand: "${$}"`),console.error('Run "asm index --help" for usage.'),process.exit(2)}}function uV(){console.log(`${U.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 xv(e){if(e.flags.help){$v();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 rf(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 Si(s||"",20,i):await Si(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 ho(o.skill.description,80))console.error(` ${c}`);let l=tf(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 of();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 sf();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 af(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 Cv(){console.log(`${u.bold("Usage:")} asm bundle <subcommand> [options]
730
761
 
731
762
  Create, install, and manage curated skill bundles. A bundle is a reusable
732
763
  recipe of skills for a particular workflow, domain, or project setup.
733
764
 
734
- ${U.bold("Subcommands:")}
765
+ ${u.bold("Subcommands:")}
735
766
  create <name> Create a new bundle from installed skills
736
- install <name|file> Install all skills from a bundle
767
+ install <name|file> Install all skills from a bundle (supports pre-defined names)
737
768
  list List all saved bundles
769
+ list --predefined List pre-defined bundles shipped with ASM
738
770
  show <name|file> Show bundle details
739
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
740
774
 
741
- ${U.bold("Options:")}
775
+ ${u.bold("Options:")}
742
776
  -s, --scope <s> Filter: global, project, or both (default: both)
743
777
  -y, --yes Skip confirmation prompts
744
778
  --json Output as JSON
779
+ --predefined Show pre-defined bundles shipped with ASM (for list)
745
780
  --no-color Disable ANSI colors
746
781
  -V, --verbose Show debug output
747
782
 
748
- ${U.bold("Examples:")}
749
- asm bundle create my-workflow ${U.dim("Create from installed skills")}
750
- asm bundle install my-workflow ${U.dim("Install a saved bundle")}
751
- asm bundle install ./bundle.json ${U.dim("Install from file")}
752
- asm bundle list ${U.dim("Show all saved bundles")}
753
- asm bundle list --json ${U.dim("List bundles as JSON")}
754
- asm bundle show my-workflow ${U.dim("Show bundle details")}
755
- asm bundle remove my-workflow ${U.dim("Remove a saved bundle")}`)}async function mV(q){if(q.flags.help){uV();return}let $=q.subcommand;if(!$)P("Missing subcommand. Use: create, install, list, show, or remove"),console.error('Run "asm bundle --help" for usage.'),process.exit(2);switch($){case"create":{let Z=q.positional[0];if(!Z)P("Missing required argument: <name>"),console.error("Usage: asm bundle create <name>"),process.exit(2);let Q=await h(),X=await a(Q,q.flags.scope);if(X.length===0)P("No skills found to include in the bundle."),process.exit(1);let z=new Set,J=X.filter((K)=>{let O=K.name.toLowerCase();if(z.has(O))return!1;return z.add(O),!0}),G=J;if(process.stdin.isTTY&&!q.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(U.bold(`Select skills for bundle "${Z}":
756
- `));let O=await p0({items:K});if(O.length===0)P("No skills selected. Bundle not created."),process.exit(1);G=O.map((F)=>J[F])}let{readLock:Y}=await import("./chunk-d61nf7gg.js"),H=await Y(),V=await Promise.all(G.map((K)=>h5(K,H))),W=`Bundle of ${V.length} skills`,B="unknown";try{let{execSync:K}=await import("child_process"),O=K("git config user.name",{encoding:"utf-8"}).trim();if(O)B=O}catch{}if(process.stdin.isTTY&&!q.flags.yes){process.stderr.write(`
757
- ${U.bold("Description")} (optional, press Enter to skip): `);let K=await $0();if(K.trim())W=K.trim();process.stderr.write(`${U.bold("Author")} (optional, press Enter to skip): `);let O=await $0();if(O.trim())B=O.trim()}let _=v5(Z,W,B,V),L=await g5(_);if(q.flags.json)console.log(JSON.stringify(_,null,2));else console.error(U.green(`Bundle "${Z}" created with ${V.length} skill(s).`)),console.error(` Saved to: ${U.dim(L)}`);break}case"install":{let Z=q.positional[0];if(!Z)P("Missing required argument: <name|file>"),console.error("Usage: asm bundle install <name|file>"),process.exit(2);let Q;try{Q=await j9(Z)}catch(W){P(W.message),process.exit(1)}if(console.error(`${U.bold("Bundle:")} ${Q.name} (${Q.skills.length} skills)`),Q.description)console.error(` ${U.dim(Q.description)}`);console.error("");for(let W of Q.skills){let B=W.version?` v${W.version}`:"";console.error(` ${U.cyan(W.name)}${U.dim(B)} ${U.dim(`-> ${W.installUrl}`)}`)}if(!q.flags.yes&&process.stdin.isTTY){process.stderr.write(`
758
- ${U.bold("Install all skills from this bundle?")} [y/N] `);let W=await $0();if(W.toLowerCase()!=="y"&&W.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let X=[],z=await h(),{provider:J}=await n0(z,q.flags.provider,!1),G=q.flags.scope==="global"||q.flags.scope==="project"?q.flags.scope:"global";for(let W of Q.skills){console.error(`
759
- Installing ${U.bold(W.name)}...`);try{if(W.installUrl.startsWith("github:")||W.installUrl.startsWith("https://github.com/"))await c0();let _=d0(W.installUrl),L=!!_.isLocal,K=null;try{let O,F;if(!L)K=await l0(_,q.flags.transport),O=K,F=_.subpath?nW(K,_.subpath):K;else O=_.localPath,F=_.localPath;let A=await w0(F),M=N0(W.name||A.name||_.repo),R=q2(_,O,F,M,J,q.flags.force,G);try{await G4(R.targetDir,R.force)}catch(T){if(T.message?.includes("--force")){X.push({name:W.name,status:"skipped",reason:"Already installed. Use --force to overwrite."}),console.error(` ${U.dim("---")} ${W.name} skipped (already installed)`);continue}throw T}await nq(R),X.push({name:W.name,status:"installed"}),console.error(` ${U.green("+++")} ${W.name} installed`)}finally{if(K)await Q0(K)}}catch(B){X.push({name:W.name,status:"failed",reason:B.message}),console.error(` ${U.red("!!!")} ${W.name}: ${B.message}`)}}let Y=X.filter((W)=>W.status==="installed").length,H=X.filter((W)=>W.status==="skipped").length,V=X.filter((W)=>W.status==="failed").length;if(q.flags.json)console.log(JSON.stringify({bundleName:Q.name,total:X.length,installed:Y,skipped:H,failed:V,results:X},null,2));else console.error(""),console.error(`${U.bold("Summary:")} ${X.length} total, ${U.green(String(Y))} installed, `+(H>0?`${U.dim(String(H))} skipped, `:"")+`${U.red(String(V))} failed`);if(V>0)process.exitCode=1;break}case"list":{let Z=await u5();if(Z.length===0){if(q.flags.json)console.log("[]");else console.log("No bundles found."),console.error(U.dim("Create one with: asm bundle create <name>"));return}if(q.flags.json)console.log(JSON.stringify(Z,null,2));else{console.error(U.bold(`Saved Bundles (${Z.length}):
760
- `));for(let Q of Z){let X=Q.tags&&Q.tags.length>0?` ${U.dim(`[${Q.tags.join(", ")}]`)}`:"";if(console.error(` ${U.cyan(Q.name)} ${U.dim(`(${Q.skills.length} skills)`)}${X}`),Q.description)console.error(` ${U.dim(Q.description)}`);if(Q.author)console.error(` ${U.dim(`by ${Q.author}`)}`)}}break}case"show":{let Z=q.positional[0];if(!Z)P("Missing required argument: <name|file>"),console.error("Usage: asm bundle show <name|file>"),process.exit(2);let Q;try{Q=await j9(Z)}catch(X){P(X.message),process.exit(1)}if(q.flags.json)console.log(JSON.stringify(Q,null,2));else{if(console.error(U.bold(`Bundle: ${Q.name}`)),Q.description)console.error(` ${Q.description}`);if(Q.author)console.error(` ${U.dim(`Author: ${Q.author}`)}`);if(console.error(` ${U.dim(`Created: ${new Date(Q.createdAt).toLocaleString()}`)}`),Q.tags&&Q.tags.length>0)console.error(` ${U.dim(`Tags: ${Q.tags.join(", ")}`)}`);console.error(`
761
- ${U.bold(`Skills (${Q.skills.length})`)}:`);for(let X of Q.skills){let z=X.version?` v${X.version}`:"";if(console.error(` ${U.cyan(X.name)}${U.dim(z)}`),X.description)console.error(` ${U.dim(X.description)}`);console.error(` ${U.dim(`install: ${X.installUrl}`)}`)}}break}case"remove":{let Z=q.positional[0];if(!Z)P("Missing required argument: <name>"),console.error("Usage: asm bundle remove <name>"),process.exit(2);if(!q.flags.yes&&process.stdin.isTTY){process.stderr.write(`${U.bold("Remove bundle")} ${U.cyan(Z)}${U.bold("?")} [y/N] `);let X=await $0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let Q;try{Q=await m5(Z)}catch(X){P(X.message),process.exit(1)}if(Q)console.error(U.green(`Bundle "${Z}" removed.`));else P(`Bundle "${Z}" not found.`),process.exit(1);break}default:P(`Unknown subcommand: "${$}". Use: create, install, list, show, or remove`),console.error('Run "asm bundle --help" for usage.'),process.exit(2)}}async function pV(q){if(q.flags.help){$V();return}let $=q.flags.machine?g0():void 0,Z=performance.now(),Q=q.subcommand||".";try{let X=await a5({path:Q,dryRun:q.flags.dryRun,force:q.flags.force,yes:q.flags.yes});if(q.flags.machine){if($?.(),!X.success)console.log(q0("publish",e.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(q.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)P(X.error||"Publish failed."),process.exit(1);if(X.fallback){console.log(U.yellow("Manifest generated (gh CLI unavailable):")),console.log(o5(X));return}if(q.flags.dryRun){console.error(U.dim(`Dry run no PR created.
762
- `)),console.log(JSON.stringify(X.manifest,null,2));return}if(X.prUrl)console.error(U.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(U.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(q.flags.machine)$?.(),console.log(q0("publish",e.PUBLISH_FAILED,X.message,Z)),process.exit(1);if(q.flags.json)console.log(JSON.stringify({success:!1,manifest:null,pr_url:null,error:X.message,security_verdict:null},null,2)),process.exit(1);P(X.message),process.exit(1)}}async function dV(q){if(q.flags.help){ZV();return}let $=q.flags.machine?g0():void 0,Z=performance.now();try{let Q=await C9();if(q.flags.machine){$?.();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(q.flags.json){console.log($8(Q));return}let X=!q.flags.noColor&&process.stdout.isTTY!==!1;if(console.log(q8(Q,X)),Q.outdatedCount>0)process.exitCode=1}catch(Q){if(q.flags.machine)$?.(),console.log(q0("outdated",e.UNKNOWN_ERROR,Q.message,Z)),process.exit(1);P(Q.message),process.exit(1)}}async function cV(q){if(q.flags.help){QV();return}let $=q.flags.machine?g0():void 0,Z=performance.now(),Q=[];if(q.subcommand)Q.push(q.subcommand);Q.push(...q.positional);try{let X=await e5(Q.length>0?Q:null,q.flags.yes);if(q.flags.machine){$?.();let J=X.results.map((G)=>({name:G.name,status:G.status,reason:G.reason||null,old_commit:G.oldCommit||null,new_commit:G.newCommit||null,security_verdict:G.securityVerdict||null}));console.log(l("update",J,Z));return}if(q.flags.json){console.log(Z8(X));return}if(X.results.length>0)console.error(U.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(U.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(`${U.green("✓")} ${J.name} ${U.dim(J.oldCommit||"")} → ${J.newCommit||""}`),J.securityVerdict==="warning")console.error(U.yellow(` ⚠ Security audit returned warning for ${J.name} — updated because --yes was supplied`));break;case"skipped":console.log(`${U.yellow("○")} ${J.name} ${U.dim(J.reason||"skipped")}`);break;case"failed":console.log(`${U.red("✗")} ${J.name} ${U.dim(J.reason||"failed")}`);break}console.log("");let z=[];if(X.updatedCount>0)z.push(U.green(`${X.updatedCount} updated`));if(X.skippedCount>0)z.push(U.yellow(`${X.skippedCount} skipped`));if(X.failedCount>0)z.push(U.red(`${X.failedCount} failed`));if(console.log(z.join(", ")),X.failedCount>0)process.exitCode=1}catch(X){if(q.flags.machine)$?.(),console.log(q0("update",e.UNKNOWN_ERROR,X.message,Z)),process.exit(1);P(X.message),process.exit(1)}}async function LZ(q){let $=oW(q);if($.flags.json&&$.flags.machine)P("--json and --machine are mutually exclusive. Use one or the other."),process.exit(2);if($.flags.machine)$.flags.yes=!0;if($.flags.noColor)globalThis.__CLI_NO_COLOR=!0;if($.flags.verbose)o8(!0);if($.flags.version){console.log(`asm ${c9}`);let Z=await m$();if($.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(U.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(U.dim(" Pick one package manager (npm OR bun) and remove the other install.")),console.error(U.dim(" See: https://github.com/luongnv89/agent-skill-manager#troubleshooting"))}return}if(!$.command&&$.flags.help){iW();return}if(!$.command)return;switch($.command){case"list":await zV($);break;case"search":await JV($);break;case"inspect":await GV($);break;case"uninstall":await YV($);break;case"audit":await UV($);break;case"install":await IV($);break;case"config":await KV($);break;case"export":await TV($);break;case"import":await jV($);break;case"init":await DV($);break;case"stats":await wV($);break;case"link":await vV($);break;case"index":await gV($);break;case"bundle":await mV($);break;case"publish":await pV($);break;case"outdated":await dV($);break;case"update":await cV($);break;case"doctor":await CV($);break;case"eval":await bV($);break;case"eval-providers":await yV($);break;default:P(`Unknown command: "${$.command}"`),console.error('Run "asm --help" for usage.'),process.exit(2)}}function OZ(q){let $=q.slice(2);if($.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=$[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(OZ(process.argv))await LZ(process.argv);else if(!(typeof globalThis.Bun<"u")){let{spawn:$}=await import("child_process"),Z=$("bun",[process.argv[1],...process.argv.slice(2)],{stdio:"inherit"});Z.on("error",()=>{console.error(`The interactive TUI requires Bun (https://bun.sh).
763
- Install it with: curl -fsSL https://bun.sh/install | bash
764
-
765
- `+"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-y89teqgt.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 Ev(e){if(e.flags.help){Cv();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(m=>{let y=m.name.toLowerCase();return r.has(y)?!1:(r.add(y),!0)}),a=o;if(process.stdin.isTTY&&!e.flags.yes){let m=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 y=await We({items:m});y.length===0&&(C("No skills selected. Bundle not created."),process.exit(1)),a=y.map(b=>o[b])}let{readLock:l}=await import("./lock-SOHBB4N3.js"),c=await l(),d=await Promise.all(a.map(m=>Yc(m,c))),f=`Bundle of ${d.length} skills`,p="unknown";try{let{execSync:m}=await import("child_process"),y=m("git config user.name",{encoding:"utf-8"}).trim();y&&(p=y)}catch{}if(process.stdin.isTTY&&!e.flags.yes){process.stderr.write(`
798
+ ${u.bold("Description")} (optional, press Enter to skip): `);let m=await G();m.trim()&&(f=m.trim()),process.stderr.write(`${u.bold("Author")} (optional, press Enter to skip): `);let y=await G();y.trim()&&(p=y.trim())}let h=Hc(s,f,p,d),g=await Nr(h);e.flags.json?console.log(JSON.stringify(h,null,2)):(console.error(u.green(`Bundle "${s}" created with ${d.length} skill(s).`)),console.error(` Saved to: ${u.dim(g)}`));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 h=Oe(f.installUrl),g=!!h.isLocal,m=null;try{let y,b;g?(y=h.localPath,b=h.localPath):(m=await De(h,e.flags.transport),y=m,b=h.subpath?cf(m,h.subpath):m);let w=await _e(b),$=Te(f.name||w.name||h.repo),x=_i(h,y,b,$,o,e.flags.force,a);try{await To(x.targetDir,x.force)}catch(k){if(k.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 k}await os(x),n.push({name:f.name,status:"installed"}),console.error(` ${u.green("+++")} ${f.name} installed`)}finally{m&&await ne(m)}}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 Gc();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 Wc();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 zc(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(g=>g.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 h=await G();h.trim()&&(i.tags=h.split(",").map(g=>g.trim()).filter(g=>g.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 Av(e){if(e.flags.help){qw();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=e.subcommand||".";try{let n=await su({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(iu(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 Pv(e){if(e.flags.help){Fw();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(uu(i));return}let n=!e.flags.noColor&&process.stdout.isTTY!==!1;console.log(cu(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 Nv(e){if(e.flags.help){jw();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 lu(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(fu(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 ff(e){let t=Lw(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&&Wr(!0),t.flags.version){console.log(`asm ${Li}`);let s=await fi();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){Rw();return}if(t.command)switch(t.command){case"list":await Uw(t);break;case"search":await Vw(t);break;case"inspect":await Kw(t);break;case"uninstall":await Jw(t);break;case"audit":await Hw(t);break;case"install":await sv(t);break;case"config":await Qw(t);break;case"export":await nv(t);break;case"import":await ov(t);break;case"init":await lv(t);break;case"stats":await uv(t);break;case"link":await Sv(t);break;case"index":await xv(t);break;case"bundle":await Ev(t);break;case"publish":await Av(t);break;case"outdated":await Pv(t);break;case"update":await Nv(t);break;case"doctor":await dv(t);break;case"eval":await gv(t);break;case"eval-providers":await wv(t);break;default:C(`Unknown command: "${t.command}"`),console.error('Run "asm --help" for usage.'),process.exit(2)}}function df(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(df(process.argv))await ff(process.argv);else{let{main:e}=await import("./src-RNJS76U3.js");await e().catch(t=>{console.error("Fatal error:",t),process.exit(1)})}