agent-skill-manager 1.15.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.backup.md CHANGED
@@ -51,7 +51,7 @@ The more AI agents you use, the worse this gets. Every new tool adds another ski
51
51
  - **See everything at once** — List, search, and filter skills across all providers and scopes from one dashboard. No more `ls`-ing through hidden directories.
52
52
  - **Install from GitHub in one command** — `asm install github:user/repo` handles cloning, validation, and placement. Supports single-skill repos, multi-skill collections, subfolder URLs, and private repos via SSH.
53
53
  - **Catch problems before they bite** — Built-in security scanning flags dangerous patterns (shell execution, network access, credential exposure, obfuscation) before you install. Duplicate audit finds and cleans redundant skills across providers.
54
- - **Works with every major agent** — 15 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, and a generic Agents provider. Add custom providers in seconds via config.
54
+ - **Works with every major agent** — 17 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, Gemini CLI, Google Antigravity, and a generic Agents provider. Add custom providers in seconds via config.
55
55
  - **Two interfaces, one tool** — Full interactive TUI with keyboard navigation, search, and detail views. Or use the CLI with `--json` for scripting and automation.
56
56
 
57
57
  <p align="center">
@@ -130,25 +130,27 @@ asm install github:anthropics/skills --all # install everything
130
130
 
131
131
  ## Supported Agent Tools
132
132
 
133
- `asm` ships with **15 built-in providers**. The first 4 are enabled by default; the rest can be enabled via `asm config edit`.
134
-
135
- | Tool | Global Path | Project Path | Default |
136
- | ---------------- | --------------------------------- | ----------------------- | :------: |
137
- | Claude Code | `~/.claude/skills/` | `.claude/skills/` | enabled |
138
- | Codex | `~/.codex/skills/` | `.codex/skills/` | enabled |
139
- | OpenClaw | `~/.openclaw/skills/` | `.openclaw/skills/` | enabled |
140
- | Agents (generic) | `~/.agents/skills/` | `.agents/skills/` | enabled |
141
- | Cursor | `~/.cursor/rules/` | `.cursor/rules/` | disabled |
142
- | Windsurf | `~/.windsurf/rules/` | `.windsurf/rules/` | disabled |
143
- | Cline | `~/Documents/Cline/Rules/` | `.clinerules/` | disabled |
144
- | Roo Code | `~/.roo/rules/` | `.roo/rules/` | disabled |
145
- | Continue | `~/.continue/rules/` | `.continue/rules/` | disabled |
146
- | GitHub Copilot | `~/.github/instructions/` | `.github/instructions/` | disabled |
147
- | Aider | `~/.aider/skills/` | `.aider/skills/` | disabled |
148
- | OpenCode | `~/.config/opencode/skills/` | `.opencode/skills/` | disabled |
149
- | Zed | `~/.config/zed/prompt_overrides/` | `.zed/rules/` | disabled |
150
- | Augment | `~/.augment/rules/` | `.augment/rules/` | disabled |
151
- | Amp | `~/.amp/skills/` | `.amp/skills/` | disabled |
133
+ `asm` ships with **17 built-in providers**. The first 4 are enabled by default; the rest can be enabled via `asm config edit`.
134
+
135
+ | Tool | Global Path | Project Path | Default |
136
+ | ------------------ | --------------------------------- | ----------------------- | :------: |
137
+ | Claude Code | `~/.claude/skills/` | `.claude/skills/` | enabled |
138
+ | Codex | `~/.codex/skills/` | `.codex/skills/` | enabled |
139
+ | OpenClaw | `~/.openclaw/skills/` | `.openclaw/skills/` | enabled |
140
+ | Agents (generic) | `~/.agents/skills/` | `.agents/skills/` | enabled |
141
+ | Cursor | `~/.cursor/rules/` | `.cursor/rules/` | disabled |
142
+ | Windsurf | `~/.windsurf/rules/` | `.windsurf/rules/` | disabled |
143
+ | Cline | `~/Documents/Cline/Rules/` | `.clinerules/` | disabled |
144
+ | Roo Code | `~/.roo/rules/` | `.roo/rules/` | disabled |
145
+ | Continue | `~/.continue/rules/` | `.continue/rules/` | disabled |
146
+ | GitHub Copilot | `~/.github/instructions/` | `.github/instructions/` | disabled |
147
+ | Aider | `~/.aider/skills/` | `.aider/skills/` | disabled |
148
+ | OpenCode | `~/.config/opencode/skills/` | `.opencode/skills/` | disabled |
149
+ | Zed | `~/.config/zed/prompt_overrides/` | `.zed/rules/` | disabled |
150
+ | Augment | `~/.augment/rules/` | `.augment/rules/` | disabled |
151
+ | Amp | `~/.amp/skills/` | `.amp/skills/` | disabled |
152
+ | Gemini CLI | `~/.gemini/skills/` | `.gemini/skills/` | disabled |
153
+ | Google Antigravity | `~/.antigravity/skills/` | `.antigravity/skills/` | disabled |
152
154
 
153
155
  Enable a provider:
154
156
 
@@ -169,7 +171,7 @@ Yes. `asm` is MIT licensed and free forever. No accounts, no telemetry, no paywa
169
171
  v1.10.0 shipped on March 18, 2026. The project has had 10 releases in the past week. Check the [changelog](docs/CHANGELOG.md) for the full history.
170
172
 
171
173
  **Which AI agents does it support?**
172
- 15 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, and a generic Agents provider. The first 4 are enabled by default; enable the rest via `asm config edit`. You can also add any custom agent that stores skills as directories with a `SKILL.md` file.
174
+ 17 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, Gemini CLI, Google Antigravity, and a generic Agents provider. The first 4 are enabled by default; enable the rest via `asm config edit`. You can also add any custom agent that stores skills as directories with a `SKILL.md` file.
173
175
 
174
176
  **How does it compare to managing skills manually?**
175
177
  Manual management means remembering where each agent stores skills, cloning repos by hand, checking for duplicates yourself, and having no security scanning. `asm` automates all of that with one command.
@@ -342,7 +344,7 @@ The install command clones the repository, validates `SKILL.md` files, scans for
342
344
  <details>
343
345
  <summary><strong>Configuration</strong></summary>
344
346
 
345
- On first run, a config file is created at `~/.config/agent-skill-manager/config.json` with 15 default providers. The first 4 are enabled; the rest are disabled until you enable them:
347
+ On first run, a config file is created at `~/.config/agent-skill-manager/config.json` with 17 default providers. The first 4 are enabled; the rest are disabled until you enable them:
346
348
 
347
349
  ```json
348
350
  {
@@ -452,6 +454,20 @@ On first run, a config file is created at `~/.config/agent-skill-manager/config.
452
454
  "global": "~/.amp/skills",
453
455
  "project": ".amp/skills",
454
456
  "enabled": false
457
+ },
458
+ {
459
+ "name": "gemini",
460
+ "label": "Gemini CLI",
461
+ "global": "~/.gemini/skills",
462
+ "project": ".gemini/skills",
463
+ "enabled": false
464
+ },
465
+ {
466
+ "name": "antigravity",
467
+ "label": "Google Antigravity",
468
+ "global": "~/.antigravity/skills",
469
+ "project": ".antigravity/skills",
470
+ "enabled": false
455
471
  }
456
472
  ],
457
473
  "customPaths": [],
package/README.md CHANGED
@@ -25,7 +25,7 @@
25
25
  <p align="center">
26
26
  <a href="#get-started-in-30-seconds"><strong>Get Started in 30 Seconds &rarr;</strong></a>
27
27
  &nbsp;&nbsp;|&nbsp;&nbsp;
28
- <a href="https://luongnv.com/asm/"><strong>Browse 1,700+ Skills Online &rarr;</strong></a>
28
+ <a href="https://luongnv.com/asm/"><strong>Browse 2,600+ Skills Online &rarr;</strong></a>
29
29
  </p>
30
30
 
31
31
  ---
@@ -62,7 +62,7 @@ The more AI agents you use, the worse this gets. Every new tool adds another ski
62
62
  - **Install from GitHub in one command** — `asm install github:user/repo` handles cloning, validation, and placement. Supports single-skill repos, multi-skill collections, subfolder URLs, and private repos via SSH.
63
63
  - **Catch problems before they bite** — Built-in security scanning flags dangerous patterns (shell execution, network access, credential exposure, obfuscation) before you install. Duplicate audit finds and cleans redundant skills across providers.
64
64
  - **Create and test skills locally** — Scaffold new skills with `asm init`, symlink them for live development with `asm link`, audit for security issues, and verify metadata — all before publishing. [See the full local dev workflow &darr;](#build-test-and-ship-your-own-skills)
65
- - **Works with every major agent** — 15 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, and a generic Agents provider. Add custom providers in seconds via config.
65
+ - **Works with every major agent** — 17 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, Gemini CLI, Google Antigravity, and a generic Agents provider. Add custom providers in seconds via config.
66
66
  - **Two interfaces, one tool** — Full interactive TUI with keyboard navigation, search, and detail views. Or use the CLI with `--json` for scripting and automation.
67
67
 
68
68
  <p align="center">
@@ -283,7 +283,7 @@ asm
283
283
 
284
284
  ## Open-Source Skill Collections
285
285
 
286
- A curated list of skill repositories you can install with a single command. Over **1,500 skills** available across these collections:
286
+ A curated list of skill repositories you can install with a single command. Over **2,600 skills** available across these collections:
287
287
 
288
288
  > **Last updated:** 2026-03-18
289
289
 
@@ -322,25 +322,27 @@ asm install github:anthropics/skills --all
322
322
 
323
323
  ## Supported Agent Tools
324
324
 
325
- `asm` ships with **15 built-in providers**, all enabled by default. Disable any you don't need via `asm config edit`.
326
-
327
- | Tool | Global Path | Project Path | Default |
328
- | ---------------- | --------------------------------- | ----------------------- | :-----: |
329
- | Claude Code | `~/.claude/skills/` | `.claude/skills/` | enabled |
330
- | Codex | `~/.codex/skills/` | `.codex/skills/` | enabled |
331
- | OpenClaw | `~/.openclaw/skills/` | `.openclaw/skills/` | enabled |
332
- | Agents (generic) | `~/.agents/skills/` | `.agents/skills/` | enabled |
333
- | Cursor | `~/.cursor/rules/` | `.cursor/rules/` | enabled |
334
- | Windsurf | `~/.windsurf/rules/` | `.windsurf/rules/` | enabled |
335
- | Cline | `~/Documents/Cline/Rules/` | `.clinerules/` | enabled |
336
- | Roo Code | `~/.roo/rules/` | `.roo/rules/` | enabled |
337
- | Continue | `~/.continue/rules/` | `.continue/rules/` | enabled |
338
- | GitHub Copilot | `~/.github/instructions/` | `.github/instructions/` | enabled |
339
- | Aider | `~/.aider/skills/` | `.aider/skills/` | enabled |
340
- | OpenCode | `~/.config/opencode/skills/` | `.opencode/skills/` | enabled |
341
- | Zed | `~/.config/zed/prompt_overrides/` | `.zed/rules/` | enabled |
342
- | Augment | `~/.augment/rules/` | `.augment/rules/` | enabled |
343
- | Amp | `~/.amp/skills/` | `.amp/skills/` | enabled |
325
+ `asm` ships with **17 built-in providers**, all enabled by default. Disable any you don't need via `asm config edit`.
326
+
327
+ | Tool | Global Path | Project Path | Default |
328
+ | ------------------ | --------------------------------- | ----------------------- | :-----: |
329
+ | Claude Code | `~/.claude/skills/` | `.claude/skills/` | enabled |
330
+ | Codex | `~/.codex/skills/` | `.codex/skills/` | enabled |
331
+ | OpenClaw | `~/.openclaw/skills/` | `.openclaw/skills/` | enabled |
332
+ | Agents (generic) | `~/.agents/skills/` | `.agents/skills/` | enabled |
333
+ | Cursor | `~/.cursor/rules/` | `.cursor/rules/` | enabled |
334
+ | Windsurf | `~/.windsurf/rules/` | `.windsurf/rules/` | enabled |
335
+ | Cline | `~/Documents/Cline/Rules/` | `.clinerules/` | enabled |
336
+ | Roo Code | `~/.roo/rules/` | `.roo/rules/` | enabled |
337
+ | Continue | `~/.continue/rules/` | `.continue/rules/` | enabled |
338
+ | GitHub Copilot | `~/.github/instructions/` | `.github/instructions/` | enabled |
339
+ | Aider | `~/.aider/skills/` | `.aider/skills/` | enabled |
340
+ | OpenCode | `~/.config/opencode/skills/` | `.opencode/skills/` | enabled |
341
+ | Zed | `~/.config/zed/prompt_overrides/` | `.zed/rules/` | enabled |
342
+ | Augment | `~/.augment/rules/` | `.augment/rules/` | enabled |
343
+ | Amp | `~/.amp/skills/` | `.amp/skills/` | enabled |
344
+ | Gemini CLI | `~/.gemini/skills/` | `.gemini/skills/` | enabled |
345
+ | Google Antigravity | `~/.antigravity/skills/` | `.antigravity/skills/` | enabled |
344
346
 
345
347
  Disable a provider — opens config in `$EDITOR`, set `"enabled": false` for any provider:
346
348
 
@@ -361,7 +363,7 @@ Yes. `asm` is MIT licensed and free forever. No accounts, no telemetry, no paywa
361
363
  v1.12.0 shipped on March 23, 2026. The project has had 12 releases in the past week. Check the [changelog](docs/CHANGELOG.md) for the full history.
362
364
 
363
365
  **Which AI agents does it support?**
364
- 15 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, and a generic Agents provider. All 15 are enabled by default; disable any you don't need via `asm config edit`. You can also add any custom agent that stores skills as directories with a `SKILL.md` file.
366
+ 17 providers built-in: Claude Code, Codex, OpenClaw, Cursor, Windsurf, Cline, Roo Code, Continue, GitHub Copilot, Aider, OpenCode, Zed, Augment, Amp, Gemini CLI, Google Antigravity, and a generic Agents provider. All 17 are enabled by default; disable any you don't need via `asm config edit`. You can also add any custom agent that stores skills as directories with a `SKILL.md` file.
365
367
 
366
368
  **How does it compare to managing skills manually?**
367
369
  Manual management means remembering where each agent stores skills, cloning repos by hand, checking for duplicates yourself, and having no security scanning. `asm` automates all of that with one command.
@@ -641,7 +643,7 @@ The install command clones the repository, validates `SKILL.md` files, scans for
641
643
  <details>
642
644
  <summary><strong>Configuration</strong></summary>
643
645
 
644
- On first run, a config file is created at `~/.config/agent-skill-manager/config.json` with 15 default providers, all enabled:
646
+ On first run, a config file is created at `~/.config/agent-skill-manager/config.json` with 17 default providers, all enabled:
645
647
 
646
648
  ```json
647
649
  {
@@ -751,6 +753,20 @@ On first run, a config file is created at `~/.config/agent-skill-manager/config.
751
753
  "global": "~/.amp/skills",
752
754
  "project": ".amp/skills",
753
755
  "enabled": false
756
+ },
757
+ {
758
+ "name": "gemini",
759
+ "label": "Gemini CLI",
760
+ "global": "~/.gemini/skills",
761
+ "project": ".gemini/skills",
762
+ "enabled": false
763
+ },
764
+ {
765
+ "name": "antigravity",
766
+ "label": "Google Antigravity",
767
+ "global": "~/.antigravity/skills",
768
+ "project": ".antigravity/skills",
769
+ "enabled": false
754
770
  }
755
771
  ],
756
772
  "customPaths": [],
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{A as q5,B as $5,C as u2,D as Z5,a as L0,b as K0,c as n2,e as i,f as c4,g as x2,h as l4,i as a4,j as g2,k as i4,l as H,m as n4,n as T4,o as s4,p as h2,q as o4,r as r4,u as t4,v as k2,w as m,x as v2,y as e4}from"./chunk-q9kp1v01.js";import{E as p,F as A,G as k,H as m4,I as y,J as p4,K as y2,L as S2,M as Hq,N as y4,O as W$,P as v,Q as d4}from"./chunk-vhkxjexp.js";var f=A((u5)=>{var T$=Symbol.for("yaml.alias"),Z1=Symbol.for("yaml.document"),Tq=Symbol.for("yaml.map"),X1=Symbol.for("yaml.pair"),F$=Symbol.for("yaml.scalar"),Fq=Symbol.for("yaml.seq"),t=Symbol.for("yaml.node.type"),f5=(q)=>!!q&&typeof q==="object"&&q[t]===T$,y5=(q)=>!!q&&typeof q==="object"&&q[t]===Z1,x5=(q)=>!!q&&typeof q==="object"&&q[t]===Tq,g5=(q)=>!!q&&typeof q==="object"&&q[t]===X1,Q1=(q)=>!!q&&typeof q==="object"&&q[t]===F$,h5=(q)=>!!q&&typeof q==="object"&&q[t]===Fq;function U1(q){if(q&&typeof q==="object")switch(q[t]){case Tq:case Fq:return!0}return!1}function k5(q){if(q&&typeof q==="object")switch(q[t]){case T$:case Tq:case F$:case Fq:return!0}return!1}var v5=(q)=>(Q1(q)||U1(q))&&!!q.anchor;u5.ALIAS=T$;u5.DOC=Z1;u5.MAP=Tq;u5.NODE_TYPE=t;u5.PAIR=X1;u5.SCALAR=F$;u5.SEQ=Fq;u5.hasAnchor=v5;u5.isAlias=f5;u5.isCollection=U1;u5.isDocument=y5;u5.isMap=x5;u5.isNode=k5;u5.isPair=g5;u5.isScalar=Q1;u5.isSeq=h5});var u0=A((X8)=>{var h=f(),u=Symbol("break visit"),z1=Symbol("skip children"),s=Symbol("remove node");function Lq(q,$){let Z=G1($);if(h.isDocument(q)){if(M0(null,q.contents,Z,Object.freeze([q]))===s)q.contents=null}else M0(null,q,Z,Object.freeze([]))}Lq.BREAK=u;Lq.SKIP=z1;Lq.REMOVE=s;function M0(q,$,Z,X){let Q=J1(q,$,Z,X);if(h.isNode(Q)||h.isPair(Q))return Y1(q,X,Q),M0(q,Q,Z,X);if(typeof Q!=="symbol"){if(h.isCollection($)){X=Object.freeze(X.concat($));for(let U=0;U<$.items.length;++U){let z=M0(U,$.items[U],Z,X);if(typeof z==="number")U=z-1;else if(z===u)return u;else if(z===s)$.items.splice(U,1),U-=1}}else if(h.isPair($)){X=Object.freeze(X.concat($));let U=M0("key",$.key,Z,X);if(U===u)return u;else if(U===s)$.key=null;let z=M0("value",$.value,Z,X);if(z===u)return u;else if(z===s)$.value=null}}return Q}async function Kq(q,$){let Z=G1($);if(h.isDocument(q)){if(await A0(null,q.contents,Z,Object.freeze([q]))===s)q.contents=null}else await A0(null,q,Z,Object.freeze([]))}Kq.BREAK=u;Kq.SKIP=z1;Kq.REMOVE=s;async function A0(q,$,Z,X){let Q=await J1(q,$,Z,X);if(h.isNode(Q)||h.isPair(Q))return Y1(q,X,Q),A0(q,Q,Z,X);if(typeof Q!=="symbol"){if(h.isCollection($)){X=Object.freeze(X.concat($));for(let U=0;U<$.items.length;++U){let z=await A0(U,$.items[U],Z,X);if(typeof z==="number")U=z-1;else if(z===u)return u;else if(z===s)$.items.splice(U,1),U-=1}}else if(h.isPair($)){X=Object.freeze(X.concat($));let U=await A0("key",$.key,Z,X);if(U===u)return u;else if(U===s)$.key=null;let z=await A0("value",$.value,Z,X);if(z===u)return u;else if(z===s)$.value=null}}return Q}function G1(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 J1(q,$,Z,X){if(typeof Z==="function")return Z(q,$,X);if(h.isMap($))return Z.Map?.(q,$,X);if(h.isSeq($))return Z.Seq?.(q,$,X);if(h.isPair($))return Z.Pair?.(q,$,X);if(h.isScalar($))return Z.Scalar?.(q,$,X);if(h.isAlias($))return Z.Alias?.(q,$,X);return}function Y1(q,$,Z){let X=$[$.length-1];if(h.isCollection(X))X.items[q]=Z;else if(h.isPair(X))if(q==="key")X.key=Z;else X.value=Z;else if(h.isDocument(X))X.contents=Z;else{let Q=h.isAlias(X)?"alias":"scalar";throw Error(`Cannot replace node with ${Q} parent`)}}X8.visit=Lq;X8.visitAsync=Kq});var L$=A((Y8)=>{var H1=f(),z8=u0(),G8={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},J8=(q)=>q.replace(/[!,[\]{}]/g,($)=>G8[$]);class d{constructor(q,$){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},d.defaultYaml,q),this.tags=Object.assign({},d.defaultTags,$)}clone(){let q=new d(this.yaml,this.tags);return q.docStart=this.docStart,q}atDocument(){let q=new d(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:d.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},d.defaultTags);break}return q}add(q,$){if(this.atNextDocument)this.yaml={explicit:d.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},d.defaultTags),this.atNextDocument=!1;let Z=q.trim().split(/[ \t]+/),X=Z.shift();switch(X){case"%TAG":{if(Z.length!==2){if($(0,"%TAG directive should contain exactly two parts"),Z.length<2)return!1}let[Q,U]=Z;return this.tags[Q]=U,!0}case"%YAML":{if(this.yaml.explicit=!0,Z.length!==1)return $(0,"%YAML directive should contain exactly one part"),!1;let[Q]=Z;if(Q==="1.1"||Q==="1.2")return this.yaml.version=Q,!0;else{let U=/^\d+\.\d+$/.test(Q);return $(6,`Unsupported YAML version ${Q}`,U),!1}}default:return $(0,`Unknown directive ${X}`,!0),!1}}tagName(q,$){if(q==="!")return"!";if(q[0]!=="!")return $(`Not a valid tag: ${q}`),null;if(q[1]==="<"){let U=q.slice(2,-1);if(U==="!"||U==="!!")return $(`Verbatim tags aren't resolved, so ${q} is invalid.`),null;if(q[q.length-1]!==">")$("Verbatim tags must end with a >");return U}let[,Z,X]=q.match(/^(.*!)([^!]*)$/s);if(!X)$(`The ${q} tag has no suffix`);let Q=this.tags[Z];if(Q)try{return Q+decodeURIComponent(X)}catch(U){return $(String(U)),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 $+J8(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),X;if(q&&Z.length>0&&H1.isNode(q.contents)){let Q={};z8.visit(q.contents,(U,z)=>{if(H1.isNode(z)&&z.tag)Q[z.tag]=!0}),X=Object.keys(Q)}else X=[];for(let[Q,U]of Z){if(Q==="!!"&&U==="tag:yaml.org,2002:")continue;if(!q||X.some((z)=>z.startsWith(U)))$.push(`%TAG ${Q} ${U}`)}return $.join(`
2
+ import{A as q5,B as $5,C as u2,D as Z5,a as L0,b as K0,c as n2,e as i,f as c4,g as x2,h as l4,i as a4,j as g2,k as i4,l as H,m as n4,n as T4,o as s4,p as h2,q as o4,r as r4,u as t4,v as k2,w as m,x as v2,y as e4}from"./chunk-zzvkjwrx.js";import{E as p,F as A,G as k,H as m4,I as y,J as p4,K as y2,L as S2,M as Hq,N as y4,O as W$,P as v,Q as d4}from"./chunk-etgg42ff.js";var f=A((u5)=>{var T$=Symbol.for("yaml.alias"),Z1=Symbol.for("yaml.document"),Tq=Symbol.for("yaml.map"),X1=Symbol.for("yaml.pair"),F$=Symbol.for("yaml.scalar"),Fq=Symbol.for("yaml.seq"),t=Symbol.for("yaml.node.type"),f5=(q)=>!!q&&typeof q==="object"&&q[t]===T$,y5=(q)=>!!q&&typeof q==="object"&&q[t]===Z1,x5=(q)=>!!q&&typeof q==="object"&&q[t]===Tq,g5=(q)=>!!q&&typeof q==="object"&&q[t]===X1,Q1=(q)=>!!q&&typeof q==="object"&&q[t]===F$,h5=(q)=>!!q&&typeof q==="object"&&q[t]===Fq;function U1(q){if(q&&typeof q==="object")switch(q[t]){case Tq:case Fq:return!0}return!1}function k5(q){if(q&&typeof q==="object")switch(q[t]){case T$:case Tq:case F$:case Fq:return!0}return!1}var v5=(q)=>(Q1(q)||U1(q))&&!!q.anchor;u5.ALIAS=T$;u5.DOC=Z1;u5.MAP=Tq;u5.NODE_TYPE=t;u5.PAIR=X1;u5.SCALAR=F$;u5.SEQ=Fq;u5.hasAnchor=v5;u5.isAlias=f5;u5.isCollection=U1;u5.isDocument=y5;u5.isMap=x5;u5.isNode=k5;u5.isPair=g5;u5.isScalar=Q1;u5.isSeq=h5});var u0=A((X8)=>{var h=f(),u=Symbol("break visit"),z1=Symbol("skip children"),s=Symbol("remove node");function Lq(q,$){let Z=G1($);if(h.isDocument(q)){if(M0(null,q.contents,Z,Object.freeze([q]))===s)q.contents=null}else M0(null,q,Z,Object.freeze([]))}Lq.BREAK=u;Lq.SKIP=z1;Lq.REMOVE=s;function M0(q,$,Z,X){let Q=J1(q,$,Z,X);if(h.isNode(Q)||h.isPair(Q))return Y1(q,X,Q),M0(q,Q,Z,X);if(typeof Q!=="symbol"){if(h.isCollection($)){X=Object.freeze(X.concat($));for(let U=0;U<$.items.length;++U){let z=M0(U,$.items[U],Z,X);if(typeof z==="number")U=z-1;else if(z===u)return u;else if(z===s)$.items.splice(U,1),U-=1}}else if(h.isPair($)){X=Object.freeze(X.concat($));let U=M0("key",$.key,Z,X);if(U===u)return u;else if(U===s)$.key=null;let z=M0("value",$.value,Z,X);if(z===u)return u;else if(z===s)$.value=null}}return Q}async function Kq(q,$){let Z=G1($);if(h.isDocument(q)){if(await A0(null,q.contents,Z,Object.freeze([q]))===s)q.contents=null}else await A0(null,q,Z,Object.freeze([]))}Kq.BREAK=u;Kq.SKIP=z1;Kq.REMOVE=s;async function A0(q,$,Z,X){let Q=await J1(q,$,Z,X);if(h.isNode(Q)||h.isPair(Q))return Y1(q,X,Q),A0(q,Q,Z,X);if(typeof Q!=="symbol"){if(h.isCollection($)){X=Object.freeze(X.concat($));for(let U=0;U<$.items.length;++U){let z=await A0(U,$.items[U],Z,X);if(typeof z==="number")U=z-1;else if(z===u)return u;else if(z===s)$.items.splice(U,1),U-=1}}else if(h.isPair($)){X=Object.freeze(X.concat($));let U=await A0("key",$.key,Z,X);if(U===u)return u;else if(U===s)$.key=null;let z=await A0("value",$.value,Z,X);if(z===u)return u;else if(z===s)$.value=null}}return Q}function G1(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 J1(q,$,Z,X){if(typeof Z==="function")return Z(q,$,X);if(h.isMap($))return Z.Map?.(q,$,X);if(h.isSeq($))return Z.Seq?.(q,$,X);if(h.isPair($))return Z.Pair?.(q,$,X);if(h.isScalar($))return Z.Scalar?.(q,$,X);if(h.isAlias($))return Z.Alias?.(q,$,X);return}function Y1(q,$,Z){let X=$[$.length-1];if(h.isCollection(X))X.items[q]=Z;else if(h.isPair(X))if(q==="key")X.key=Z;else X.value=Z;else if(h.isDocument(X))X.contents=Z;else{let Q=h.isAlias(X)?"alias":"scalar";throw Error(`Cannot replace node with ${Q} parent`)}}X8.visit=Lq;X8.visitAsync=Kq});var L$=A((Y8)=>{var H1=f(),z8=u0(),G8={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},J8=(q)=>q.replace(/[!,[\]{}]/g,($)=>G8[$]);class d{constructor(q,$){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},d.defaultYaml,q),this.tags=Object.assign({},d.defaultTags,$)}clone(){let q=new d(this.yaml,this.tags);return q.docStart=this.docStart,q}atDocument(){let q=new d(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:d.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},d.defaultTags);break}return q}add(q,$){if(this.atNextDocument)this.yaml={explicit:d.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},d.defaultTags),this.atNextDocument=!1;let Z=q.trim().split(/[ \t]+/),X=Z.shift();switch(X){case"%TAG":{if(Z.length!==2){if($(0,"%TAG directive should contain exactly two parts"),Z.length<2)return!1}let[Q,U]=Z;return this.tags[Q]=U,!0}case"%YAML":{if(this.yaml.explicit=!0,Z.length!==1)return $(0,"%YAML directive should contain exactly one part"),!1;let[Q]=Z;if(Q==="1.1"||Q==="1.2")return this.yaml.version=Q,!0;else{let U=/^\d+\.\d+$/.test(Q);return $(6,`Unsupported YAML version ${Q}`,U),!1}}default:return $(0,`Unknown directive ${X}`,!0),!1}}tagName(q,$){if(q==="!")return"!";if(q[0]!=="!")return $(`Not a valid tag: ${q}`),null;if(q[1]==="<"){let U=q.slice(2,-1);if(U==="!"||U==="!!")return $(`Verbatim tags aren't resolved, so ${q} is invalid.`),null;if(q[q.length-1]!==">")$("Verbatim tags must end with a >");return U}let[,Z,X]=q.match(/^(.*!)([^!]*)$/s);if(!X)$(`The ${q} tag has no suffix`);let Q=this.tags[Z];if(Q)try{return Q+decodeURIComponent(X)}catch(U){return $(String(U)),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 $+J8(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),X;if(q&&Z.length>0&&H1.isNode(q.contents)){let Q={};z8.visit(q.contents,(U,z)=>{if(H1.isNode(z)&&z.tag)Q[z.tag]=!0}),X=Object.keys(Q)}else X=[];for(let[Q,U]of Z){if(Q==="!!"&&U==="tag:yaml.org,2002:")continue;if(!q||X.some((z)=>z.startsWith(U)))$.push(`%TAG ${Q} ${U}`)}return $.join(`
3
3
  `)}}d.defaultYaml={explicit:!1,version:"1.2"};d.defaultTags={"!!":"tag:yaml.org,2002:"};Y8.Directives=d});var Rq=A((_8)=>{var V1=f(),V8=u0();function W8(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 W1(q){let $=new Set;return V8.visit(q,{Value(Z,X){if(X.anchor)$.add(X.anchor)}}),$}function B1(q,$){for(let Z=1;;++Z){let X=`${q}${Z}`;if(!$.has(X))return X}}function B8(q,$){let Z=[],X=new Map,Q=null;return{onAnchor:(U)=>{Z.push(U),Q??(Q=W1(q));let z=B1($,Q);return Q.add(z),z},setAnchors:()=>{for(let U of Z){let z=X.get(U);if(typeof z==="object"&&z.anchor&&(V1.isScalar(z.node)||V1.isCollection(z.node)))z.node.anchor=z.anchor;else{let G=Error("Failed to resolve repeated object (this should not happen)");throw G.source=U,G}}},sourceObjects:X}}_8.anchorIsValid=W8;_8.anchorNames=W1;_8.createNodeAnchors=B8;_8.findNewAnchor=B1});var K$=A((K8)=>{function m0(q,$,Z,X){if(X&&typeof X==="object")if(Array.isArray(X))for(let Q=0,U=X.length;Q<U;++Q){let z=X[Q],G=m0(q,X,String(Q),z);if(G===void 0)delete X[Q];else if(G!==z)X[Q]=G}else if(X instanceof Map)for(let Q of Array.from(X.keys())){let U=X.get(Q),z=m0(q,X,Q,U);if(z===void 0)X.delete(Q);else if(z!==U)X.set(Q,z)}else if(X instanceof Set)for(let Q of Array.from(X)){let U=m0(q,X,Q,Q);if(U===void 0)X.delete(Q);else if(U!==Q)X.delete(Q),X.add(U)}else for(let[Q,U]of Object.entries(X)){let z=m0(q,X,Q,U);if(z===void 0)delete X[Q];else if(z!==U)X[Q]=z}return q.call($,Z,X)}K8.applyReviver=m0});var $0=A((A8)=>{var M8=f();function _1(q,$,Z){if(Array.isArray(q))return q.map((X,Q)=>_1(X,String(Q),Z));if(q&&typeof q.toJSON==="function"){if(!Z||!M8.hasAnchor(q))return q.toJSON($,Z);let X={aliasCount:0,count:1,res:void 0};Z.anchors.set(q,X),Z.onCreate=(U)=>{X.res=U,delete Z.onCreate};let Q=q.toJSON($,Z);if(Z.onCreate)Z.onCreate(Q);return Q}if(typeof q==="bigint"&&!Z?.keep)return Number(q);return q}A8.toJS=_1});var Mq=A((N8)=>{var D8=K$(),O1=f(),w8=$0();class T1{constructor(q){Object.defineProperty(this,O1.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:X,reviver:Q}={}){if(!O1.isDocument(q))throw TypeError("A document argument is required");let U={anchors:new Map,doc:q,keep:!0,mapAsMap:$===!0,mapKeyWarned:!1,maxAliasCount:typeof Z==="number"?Z:100},z=w8.toJS(this,"",U);if(typeof X==="function")for(let{count:G,res:J}of U.anchors.values())X(J,G);return typeof Q==="function"?D8.applyReviver(Q,{"":z},"",z):z}}N8.NodeBase=T1});var p0=A((E8)=>{var P8=Rq(),C8=u0(),I0=f(),b8=Mq(),S8=$0();class F1 extends b8.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=[],C8.visit(q,{Node:(Q,U)=>{if(I0.isAlias(U)||I0.hasAnchor(U))Z.push(U)}}),$)$.aliasResolveCache=Z;let X=void 0;for(let Q of Z){if(Q===this)break;if(Q.anchor===this.source)X=Q}return X}toJSON(q,$){if(!$)return{source:this.source};let{anchors:Z,doc:X,maxAliasCount:Q}=$,U=this.resolve(X,$);if(!U){let G=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(G)}let z=Z.get(U);if(!z)S8.toJS(U,null,$),z=Z.get(U);if(z?.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(Q>=0){if(z.count+=1,z.aliasCount===0)z.aliasCount=Aq(X,U,Z);if(z.count*z.aliasCount>Q)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return z.res}toString(q,$,Z){let X=`*${this.source}`;if(q){if(P8.anchorIsValid(this.source),q.options.verifyAliasOrder&&!q.anchors.has(this.source)){let Q=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(Q)}if(q.implicitKey)return`${X} `}return X}}function Aq(q,$,Z){if(I0.isAlias($)){let X=$.resolve(q),Q=Z&&X&&Z.get(X);return Q?Q.count*Q.aliasCount:0}else if(I0.isCollection($)){let X=0;for(let Q of $.items){let U=Aq(q,Q,Z);if(U>X)X=U}return X}else if(I0.isPair($)){let X=Aq(q,$.key,Z),Q=Aq(q,$.value,Z);return Math.max(X,Q)}return 1}E8.Alias=F1});var x=A((k8)=>{var y8=f(),x8=Mq(),g8=$0(),h8=(q)=>!q||typeof q!=="function"&&typeof q!=="object";class H0 extends x8.NodeBase{constructor(q){super(y8.SCALAR);this.value=q}toJSON(q,$){return $?.keep?this.value:g8.toJS(this.value,q,$)}toString(){return String(this.value)}}H0.BLOCK_FOLDED="BLOCK_FOLDED";H0.BLOCK_LITERAL="BLOCK_LITERAL";H0.PLAIN="PLAIN";H0.QUOTE_DOUBLE="QUOTE_DOUBLE";H0.QUOTE_SINGLE="QUOTE_SINGLE";k8.Scalar=H0;k8.isScalarValue=h8});var d0=A((l8)=>{var m8=p0(),V0=f(),L1=x(),p8="tag:yaml.org,2002:";function d8(q,$,Z){if($){let X=Z.filter((U)=>U.tag===$),Q=X.find((U)=>!U.format)??X[0];if(!Q)throw Error(`Tag ${$} not found`);return Q}return Z.find((X)=>X.identify?.(q)&&!X.format)}function c8(q,$,Z){if(V0.isDocument(q))q=q.contents;if(V0.isNode(q))return q;if(V0.isPair(q)){let V=Z.schema[V0.MAP].createNode?.(Z.schema,null,Z);return V.items.push(q),V}if(q instanceof String||q instanceof Number||q instanceof Boolean||typeof BigInt<"u"&&q instanceof BigInt)q=q.valueOf();let{aliasDuplicateObjects:X,onAnchor:Q,onTagObj:U,schema:z,sourceObjects:G}=Z,J=void 0;if(X&&q&&typeof q==="object")if(J=G.get(q),J)return J.anchor??(J.anchor=Q(q)),new m8.Alias(J.anchor);else J={anchor:null,node:null},G.set(q,J);if($?.startsWith("!!"))$=p8+$.slice(2);let Y=d8(q,$,z.tags);if(!Y){if(q&&typeof q.toJSON==="function")q=q.toJSON();if(!q||typeof q!=="object"){let V=new L1.Scalar(q);if(J)J.node=V;return V}Y=q instanceof Map?z[V0.MAP]:(Symbol.iterator in Object(q))?z[V0.SEQ]:z[V0.MAP]}if(U)U(Y),delete Z.onTagObj;let B=Y?.createNode?Y.createNode(Z.schema,q,Z):typeof Y?.nodeClass?.from==="function"?Y.nodeClass.from(Z.schema,q,Z):new L1.Scalar(q);if($)B.tag=$;else if(!Y.default)B.tag=Y.tag;if(J)J.node=B;return B}l8.createNode=c8});var Iq=A((s8)=>{var i8=d0(),o=f(),n8=Mq();function R$(q,$,Z){let X=Z;for(let Q=$.length-1;Q>=0;--Q){let U=$[Q];if(typeof U==="number"&&Number.isInteger(U)&&U>=0){let z=[];z[U]=X,X=z}else X=new Map([[U,X]])}return i8.createNode(X,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:q,sourceObjects:new Map})}var K1=(q)=>q==null||typeof q==="object"&&!!q[Symbol.iterator]().next().done;class R1 extends n8.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)=>o.isNode(Z)||o.isPair(Z)?Z.clone(q):Z),this.range)$.range=this.range.slice();return $}addIn(q,$){if(K1(q))this.add($);else{let[Z,...X]=q,Q=this.get(Z,!0);if(o.isCollection(Q))Q.addIn(X,$);else if(Q===void 0&&this.schema)this.set(Z,R$(this.schema,X,$));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${X}`)}}deleteIn(q){let[$,...Z]=q;if(Z.length===0)return this.delete($);let X=this.get($,!0);if(o.isCollection(X))return X.deleteIn(Z);else throw Error(`Expected YAML collection at ${$}. Remaining path: ${Z}`)}getIn(q,$){let[Z,...X]=q,Q=this.get(Z,!0);if(X.length===0)return!$&&o.isScalar(Q)?Q.value:Q;else return o.isCollection(Q)?Q.getIn(X,$):void 0}hasAllNullValues(q){return this.items.every(($)=>{if(!o.isPair($))return!1;let Z=$.value;return Z==null||q&&o.isScalar(Z)&&Z.value==null&&!Z.commentBefore&&!Z.comment&&!Z.tag})}hasIn(q){let[$,...Z]=q;if(Z.length===0)return this.has($);let X=this.get($,!0);return o.isCollection(X)?X.hasIn(Z):!1}setIn(q,$){let[Z,...X]=q;if(X.length===0)this.set(Z,$);else{let Q=this.get(Z,!0);if(o.isCollection(Q))Q.setIn(X,$);else if(Q===void 0&&this.schema)this.set(Z,R$(this.schema,X,$));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${X}`)}}}s8.Collection=R1;s8.collectionFromPath=R$;s8.isEmptyPath=K1});var c0=A(($Z)=>{var e8=(q)=>q.replace(/^(?!$)(?: $)?/gm,"#");function M$(q,$){if(/^\n+$/.test(q))return q.substring(1);return $?q.replace(/^(?! *$)/gm,$):q}var qZ=(q,$,Z)=>q.endsWith(`
4
4
  `)?M$(Z,$):Z.includes(`
5
5
  `)?`
@@ -447,7 +447,7 @@ ${H.bold("Options:")}
447
447
  ${H.bold("Examples:")}
448
448
  asm init my-skill ${H.dim("Scaffold (interactive tool)")}
449
449
  asm init my-skill -p claude ${H.dim("Scaffold in Claude Code")}
450
- asm init my-skill --path ./skills ${H.dim("Scaffold in custom directory")}`)}async function qJ(q){if(q.flags.help){eG();return}let $=q.subcommand;if(!$)E("Missing required argument: <name>"),console.error('Run "asm init --help" for usage.'),process.exit(2);let Z=h0($),X;if(q.flags.path){let{resolve:Q}=await import("path");X=Q(q.flags.path)}else{let Q=await v(),{provider:U}=await Oq(Q,q.flags.provider,!!process.stdin.isTTY),{join:z}=await import("path"),{resolveProviderPath:G}=await import("./chunk-vhkxjexp.js"),J=G(Q.providers.find((Y)=>Y.name===U.name).global);X=z(J,Z)}if(await _4(X)){if(!q.flags.force){if(!process.stdin.isTTY)E(`Directory already exists: ${X}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${H.yellow(`Directory already exists: ${X}`)}
450
+ asm init my-skill --path ./skills ${H.dim("Scaffold in custom directory")}`)}async function qJ(q){if(q.flags.help){eG();return}let $=q.subcommand;if(!$)E("Missing required argument: <name>"),console.error('Run "asm init --help" for usage.'),process.exit(2);let Z=h0($),X;if(q.flags.path){let{resolve:Q}=await import("path");X=Q(q.flags.path)}else{let Q=await v(),{provider:U}=await Oq(Q,q.flags.provider,!!process.stdin.isTTY),{join:z}=await import("path"),{resolveProviderPath:G}=await import("./chunk-etgg42ff.js"),J=G(Q.providers.find((Y)=>Y.name===U.name).global);X=z(J,Z)}if(await _4(X)){if(!q.flags.force){if(!process.stdin.isTTY)E(`Directory already exists: ${X}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${H.yellow(`Directory already exists: ${X}`)}
451
451
  ${H.bold("Overwrite?")} [y/N] `);let Q=await f0();if(Q.toLowerCase()!=="y"&&Q.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}}await B4(Z,X),console.error(H.green(`Done! Created skill "${Z}" at ${X}`))}function $J(){console.log(`${H.bold("Usage:")} asm stats [options]
452
452
 
453
453
  Show aggregate skill metrics with provider distribution charts,
@@ -478,7 +478,7 @@ ${H.bold("Options:")}
478
478
  ${H.bold("Examples:")}
479
479
  asm link ./my-skill ${H.dim("Link (interactive tool)")}
480
480
  asm link ./my-skill -p claude ${H.dim("Link to Claude Code")}
481
- asm link ./my-skill --name alias ${H.dim("Link with custom name")}`)}async function QJ(q){if(q.flags.help){XJ();return}let $=q.subcommand;if(!$)E("Missing required argument: <path>"),console.error('Run "asm link --help" for usage.'),process.exit(2);let{resolve:Z,basename:X}=await import("path"),Q=Z($),U=await R4(Q),z=q.flags.name?h0(q.flags.name):X(Q),G=await v(),{provider:J}=await Oq(G,q.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:Y}=await import("./chunk-vhkxjexp.js"),B=Y(G.providers.find((O)=>O.name===J.name).global),{join:V}=await import("path"),W=V(B,z);if(!q.flags.force){let O=!1;try{let{access:F}=await import("fs/promises");await F(W),O=!0}catch{}if(O){if(!process.stdin.isTTY)E(`Target already exists: ${W}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${H.yellow(`Target already exists: ${W}`)}
481
+ asm link ./my-skill --name alias ${H.dim("Link with custom name")}`)}async function QJ(q){if(q.flags.help){XJ();return}let $=q.subcommand;if(!$)E("Missing required argument: <path>"),console.error('Run "asm link --help" for usage.'),process.exit(2);let{resolve:Z,basename:X}=await import("path"),Q=Z($),U=await R4(Q),z=q.flags.name?h0(q.flags.name):X(Q),G=await v(),{provider:J}=await Oq(G,q.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:Y}=await import("./chunk-etgg42ff.js"),B=Y(G.providers.find((O)=>O.name===J.name).global),{join:V}=await import("path"),W=V(B,z);if(!q.flags.force){let O=!1;try{let{access:F}=await import("fs/promises");await F(W),O=!0}catch{}if(O){if(!process.stdin.isTTY)E(`Target already exists: ${W}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${H.yellow(`Target already exists: ${W}`)}
482
482
  ${H.bold("Overwrite?")} [y/N] `);let F=await f0();if(F.toLowerCase()!=="y"&&F.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0);await X$(Q,B,z,!0)}else await X$(Q,B,z,!1)}else await X$(Q,B,z,!0);if(q.flags.json)console.log(m({success:!0,name:z,symlinkPath:W,targetPath:Q}));else console.error(H.green(`Done! Linked "${z}" -> ${Q}`)),console.error(` Symlink: ${W}`),console.error(H.dim(` If you move or delete the source, run "asm uninstall ${z}" to clean up.`))}function UJ(){console.log(`${H.bold("Usage:")} asm index <subcommand> [options]
483
483
 
484
484
  Manage the skill index for searching available skills from indexed repos.
@@ -509,4 +509,4 @@ ${H.bold("Examples:")}
509
509
  `));for(let Q of Z)console.error(`${H.cyan(`${Q.owner}/${Q.repo}`)} - ${Q.skillCount} skills ${H.dim(`(${new Date(Q.updatedAt).toLocaleDateString()})`)}`)}break}case"remove":{let Z=q.positional[0];if(!Z)E("Missing required argument: <owner/repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2);let[X,Q]=Z.split("/");if(!X||!Q)E("Invalid format. Use: <owner/repo>"),process.exit(2);if(!q.flags.yes&&process.stdin.isTTY){process.stderr.write(`${H.bold("Remove")} ${H.cyan(`${X}/${Q}`)} ${H.bold("from index?")} [y/N] `);let z=await f0();if(z.toLowerCase()!=="y"&&z.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}if(await u4(X,Q))console.error(H.green(`Removed ${X}/${Q} from index`));else E(`Repository not found in index: ${X}/${Q}`),process.exit(1);break}default:E(`Unknown subcommand: "${$}"`),console.error('Run "asm index --help" for usage.'),process.exit(2)}}async function Q5(q){let $=PG(q);if($.flags.noColor)globalThis.__CLI_NO_COLOR=!0;if($.flags.verbose)m4(!0);if($.flags.version){console.log(`asm ${u2}`);return}if(!$.command&&$.flags.help){CG();return}if(!$.command)return;switch($.command){case"list":await gG($);break;case"search":await hG($);break;case"inspect":await kG($);break;case"uninstall":await vG($);break;case"audit":await uG($);break;case"install":await oG($);break;case"config":await lG($);break;case"export":await tG($);break;case"init":await qJ($);break;case"stats":await ZJ($);break;case"link":await QJ($);break;case"index":await zJ($);break;default:E(`Unknown command: "${$.command}"`),console.error('Run "asm --help" for usage.'),process.exit(2)}}function U5(q){let $=q.slice(2);if($.length===0)return!1;let Z=["list","search","inspect","uninstall","audit","config","install","export","init","stats","link","index"],X=$[0];if(Z.includes(X))return!0;if(X==="--help"||X==="-h")return!0;if(X==="--version"||X==="-v")return!0;if(X.startsWith("-")||X.length>0)return!0;return!1}if(U5(process.argv))await Q5(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).
510
510
  Install it with: curl -fsSL https://bun.sh/install | bash
511
511
 
512
- `+"CLI commands (list, search, inspect, etc.) work with Node.js — run: asm --help"),process.exit(1)}),Z.on("exit",(X)=>process.exit(X??0))}else await import("./chunk-257hhznr.js");
512
+ `+"CLI commands (list, search, inspect, etc.) work with Node.js — run: asm --help"),process.exit(1)}),Z.on("exit",(X)=>process.exit(X??0))}else await import("./chunk-6t9cpddh.js");