@peterson-benhame/agent-skills 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tech Leads Club
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ **Note on Dual Licensing:**
26
+ While the software source code in this repository is licensed under the MIT License as stated above, the content of the agent skills (the `SKILL.md` files) created by the repository maintainers is licensed under the Creative Commons Attribution 4.0 International License (CC-BY-4.0) unless otherwise specified in individual skill files. Please see the README.md for more details on attribution and licensing boundaries.
package/README.md ADDED
@@ -0,0 +1,264 @@
1
+ <p align="center">
2
+ <img src=".github/assets/logo.png" alt="Tech Leads Club" width="400" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://img.shields.io/npm/v/@peterson-benhame/agent-skills?style=flat-square&color=blue" alt="npm version" />
7
+ <img src="https://img.shields.io/npm/dt/@peterson-benhame/agent-skills?style=flat-square&color=blue" alt="total downloads" />
8
+ <img src="https://img.shields.io/npm/dm/@peterson-benhame/agent-skills?style=flat-square&color=blue" alt="monthly downloads" />
9
+ <img src="https://img.shields.io/github/license/tech-leads-club/agent-skills?style=flat-square" alt="license" />
10
+ <img src="https://img.shields.io/github/actions/workflow/status/tech-leads-club/agent-skills/release.yml?style=flat-square" alt="build status" />
11
+ </p>
12
+
13
+ <p align="center">
14
+ <img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen?style=flat-square&logo=node.js" alt="node version" />
15
+ <img src="https://img.shields.io/badge/TypeScript-100%25-blue?style=flat-square&logo=typescript" alt="typescript" />
16
+ <img src="https://img.shields.io/badge/Nx%20Cloud-Enabled-blue?style=flat-square&logo=nx" alt="nx cloud" />
17
+ <img src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square" alt="semantic-release" />
18
+ </p>
19
+
20
+ <p align="center">
21
+ <img src="https://img.shields.io/github/stars/tech-leads-club/agent-skills?style=flat-square&color=yellow" alt="github stars" />
22
+ <img src="https://img.shields.io/github/contributors/tech-leads-club/agent-skills?style=flat-square&color=orange" alt="contributors" />
23
+ <img src="https://img.shields.io/github/last-commit/tech-leads-club/agent-skills?style=flat-square" alt="last commit" />
24
+ <img src="https://img.shields.io/badge/AI-Powered%20Skills-purple?style=flat-square&logo=openai" alt="ai powered" />
25
+ </p>
26
+
27
+ <h1 align="center">🧠 Agent Skills</h1>
28
+
29
+ <p align="center">
30
+ <strong>The secure, validated skill registry for professional AI coding agents</strong>
31
+ </p>
32
+
33
+ <p align="center">
34
+ In an ecosystem where <a href="https://github.com/snyk/agent-scan/blob/main/.github/reports/skills-report.pdf">over 13% of marketplace skills contain critical vulnerabilities</a>,
35
+ <b>Agent Skills</b> stands apart as a hardened library of <b>verified</b>, <b>tested</b>, and <b>safe</b> capabilities.
36
+ Extend <b>Antigravity</b>, <b>Claude Code</b>, <b>Cursor</b>, and more with absolute confidence.
37
+ </p>
38
+
39
+
40
+ ## 📖 Table of Contents
41
+
42
+ - [📖 Table of Contents](#-table-of-contents)
43
+ - [✨ What are Skills?](#-what-are-skills)
44
+ - [🛡️ Security \& Trust](#️-security--trust)
45
+ - [🤖 Supported Agents](#-supported-agents)
46
+ - [🌟 Featured Skills](#-featured-skills)
47
+ - [🚀 Quick Start](#-quick-start)
48
+ - [Install Skills in Your Project](#install-skills-in-your-project)
49
+ - [CLI Options](#cli-options)
50
+ - [Global Installation (Optional)](#global-installation-optional)
51
+ - [⚡ How It Works](#-how-it-works)
52
+ - [Caching](#caching)
53
+ - [🔌 MCP Server](#-mcp-server)
54
+ - [Créditos e licenças](#créditos-e-licenças)
55
+
56
+ ## ✨ What are Skills?
57
+
58
+ Skills are packaged instructions and resources that extend AI agent capabilities. Think of them as **plugins for your AI assistant** — they teach your agent new workflows, patterns, and specialized knowledge.
59
+
60
+ ```
61
+ packages/skills-catalog/skills/
62
+ (category-name)/
63
+ skill/
64
+ SKILL.md ← Main instructions
65
+ templates/ ← File templates
66
+ references/ ← On-demand documentation
67
+ ```
68
+
69
+ ## 🛡️ Security & Trust
70
+
71
+ Your environment's safety is our top priority. Unlike open marketplaces where **13.4% of skills contain critical issues**, `agent-skills` is a managed, hardened library: 100% open source (no binaries), static analysis in CI/CD, immutable integrity via lockfiles and content hashing, and human-curated prompts. The CLI uses defense-in-depth (sanitization, path isolation, symlink guards, atomic lockfile, audit trail); every skill is scanned with [Snyk Agent Scan](https://github.com/snyk/agent-scan) (formerly mcp-scan) before publishing.
72
+
73
+ → **Full threat model, implementation details, and vulnerability reporting:** [SECURITY.md](SECURITY.md)
74
+
75
+ ## 🤖 Supported Agents
76
+
77
+ Install skills to any of these AI coding agents:
78
+
79
+ <div align="center">
80
+ <br />
81
+
82
+ | Tier 1 (Popular) | Tier 2 (Rising) | Tier 3 (Enterprise) |
83
+ | :-------------------------------------------------------: | :--------------------------------------------------------------------: | :-----------------------------------------------------: |
84
+ | **[Claude Code](https://claude.ai/code)** | **[Aider](https://aider.chat)** | **[Amazon Q](https://aws.amazon.com/q/developer/)** |
85
+ | **[Cline](https://github.com/cline/cline)** | **[Antigravity](https://idx.google.com)** | **[Augment](https://www.augmentcode.com)** |
86
+ | **[Cursor](https://cursor.com)** | **[Gemini CLI](https://ai.google.dev/gemini-api/docs/code-execution)** | **[Droid (Factory.ai)](https://www.factory.ai)** |
87
+ | **[GitHub Copilot](https://github.com/features/copilot)** | **[Kilo Code](https://kilocode.ai)** | **[OpenCode](https://opencode.ai)** |
88
+ | **[Windsurf](https://codeium.com/windsurf)** | **[Kiro](https://kiro.dev/)** | **[Sourcegraph Cody](https://sourcegraph.com/cody)** |
89
+ | | **[OpenAI Codex](https://openai.com/index/introducing-codex/)** | **[Tabnine](https://www.tabnine.com)** |
90
+ | | **[Roo Code](https://roo.dev)** | |
91
+ | | **[TRAE](https://docs.trae.ai)** | |
92
+
93
+ </div>
94
+
95
+ <p align="center">
96
+ <sub>Missing your favorite agent? <a href="https://github.com/tech-leads-club/agent-skills/issues/new"><strong>Open an issue</strong></a> and we'll add support!</sub>
97
+ </p>
98
+
99
+ ## 🌟 Featured Skills
100
+
101
+ A glimpse of what's available in our growing catalog:
102
+
103
+ | Skill | Category | Description |
104
+ | -------------------------------------------------------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
105
+ | **[pbs-spec-driven](<packages/skills-catalog/skills/(development)/pbs-spec-driven>)** | Development | Project and feature planning with 4 phases: Specify → Design → Tasks → Implement. Creates atomic tasks with verification criteria and maintains persistent memory across sessions. |
106
+ | **[aws-advisor](<packages/skills-catalog/skills/(cloud)/aws-advisor>)** | Cloud | Expert AWS Cloud Advisor for architecture design, security review, and implementation guidance. Leverages AWS MCP tools for documentation-backed answers. |
107
+ | **[playwright-skill](<packages/skills-catalog/skills/(web-automation)/playwright-skill>)** | Automation | Complete browser automation with Playwright. Test pages, fill forms, take screenshots, validate UX, and automate any browser task. |
108
+ | **[figma](<packages/skills-catalog/skills/(design)/figma>)** | Design | Fetch design context from Figma and translate nodes into production code. Design-to-code implementation with MCP integration. |
109
+ | **[security-best-practices](<packages/skills-catalog/skills/(security)/security-best-practices>)** | Security | Language and framework-specific security reviews. Detect vulnerabilities, generate reports, and suggest secure-by-default fixes. |
110
+
111
+ <p align="center">
112
+ <a href="#-quick-start"><strong>→ Browse all skills</strong></a>
113
+ </p>
114
+
115
+ ## 🚀 Quick Start
116
+
117
+ ### Install Skills in Your Project
118
+
119
+ ```bash
120
+ npx @peterson-benhame/agent-skills
121
+ ```
122
+
123
+ This launches an interactive wizard:
124
+
125
+ 1. **Choose Action** — "Install skills" or "Update installed skills"
126
+ 2. **Browse & Select** — Filter by category or search
127
+ 3. **Choose agents** — Pick target agents (Cursor, Claude Code, etc.)
128
+ 4. **Installation method** — Copy (recommended) or Symlink
129
+ 5. **Scope** — Global (user home) or Local (project only)
130
+
131
+ Each step shows a **← Back** option to return and revise your choices.
132
+
133
+ ### CLI Options
134
+
135
+ > **Note**: You can use either `npx @peterson-benhame/agent-skills` or install globally and use `agent-skills` directly.
136
+
137
+ ```bash
138
+ # Interactive mode (default)
139
+ npx @peterson-benhame/agent-skills
140
+ # or: agent-skills (if installed globally)
141
+
142
+ # List available skills
143
+ agent-skills list
144
+ agent-skills ls # Alias
145
+
146
+ # Install one skill
147
+ agent-skills install -s pbs-spec-driven
148
+
149
+ # Install multiple skills at once
150
+ agent-skills install -s aws-advisor coding-guidelines docs-writer
151
+
152
+ # Install to specific agents
153
+ agent-skills install -s my-skill -a cursor claude-code
154
+
155
+ # Install multiple skills to multiple agents
156
+ agent-skills install -s aws-advisor nx-workspace -a cursor windsurf cline
157
+
158
+ # Install globally (to ~/.gemini, ~/.claude, etc.)
159
+ agent-skills install -s my-skill -g
160
+
161
+ # Use symlink instead of copy
162
+ agent-skills install -s my-skill --symlink
163
+
164
+ # Force re-download (bypass cache)
165
+ agent-skills install -s my-skill --force
166
+
167
+ # Update a specific skill
168
+ agent-skills update -s my-skill
169
+
170
+ # Update all installed skills
171
+ agent-skills update
172
+
173
+ # Remove one skill
174
+ agent-skills remove -s my-skill
175
+
176
+ # Remove multiple skills at once
177
+ agent-skills remove -s skill1 skill2 skill3
178
+ agent-skills rm -s my-skill # Alias
179
+
180
+ # Remove from specific agents
181
+ agent-skills remove -s my-skill -a cursor windsurf
182
+
183
+ # Force removal (bypass lockfile check)
184
+ agent-skills remove -s my-skill --force
185
+
186
+ # Manage cache
187
+ agent-skills cache --clear # Clear all cache
188
+ agent-skills cache --clear-registry # Clear only registry
189
+ agent-skills cache --path # Show cache location
190
+
191
+ # View audit log
192
+ agent-skills audit # Show recent operations
193
+ agent-skills audit -n 20 # Show last 20 entries
194
+ agent-skills audit --path # Show audit log location
195
+
196
+ # Show contributors and credits
197
+ agent-skills credits
198
+
199
+ # Show help
200
+ agent-skills --help
201
+ ```
202
+
203
+ ### Global Installation (Optional)
204
+
205
+ ```bash
206
+ npm install -g @peterson-benhame/agent-skills
207
+ agent-skills # Use 'agent-skills' instead of 'npx @peterson-benhame/agent-skills'
208
+ ```
209
+
210
+ ## ⚡ How It Works
211
+
212
+ The CLI fetches skills **on-demand** from our CDN:
213
+
214
+ 1. **Browse** — The CLI fetches the skills catalog (~45KB)
215
+ 2. **Select** — You choose the skills you need
216
+ 3. **Download** — Selected skills are downloaded and cached locally
217
+ 4. **Install** — Skills are installed to your agent's configuration
218
+
219
+ ### Caching
220
+
221
+ Downloaded skills are cached in `~/.cache/agent-skills/` for offline use.
222
+
223
+ ```bash
224
+ # Clear the cache
225
+ rm -rf ~/.cache/agent-skills
226
+ ```
227
+
228
+ ## 🔌 MCP Server
229
+
230
+ `@peterson-benhame/agent-skills-mcp` is an MCP server that exposes the skills catalog directly to AI agents via **progressive disclosure** — search first, then fetch only what's needed.
231
+
232
+ | Tool | Purpose |
233
+ | :------------------ | :----------------------------------- |
234
+ | `list_skills` | Browse all skills by category |
235
+ | `search_skills` | Find skills by intent (fuzzy search) |
236
+ | `read_skill` | Load a skill's main instructions |
237
+ | `fetch_skill_files` | Fetch specific reference files |
238
+
239
+ `list_skills` should be called only when the user explicitly asks to browse/list the catalog.
240
+
241
+ **Quick install** (works with any MCP-compatible client):
242
+
243
+ ```json
244
+ {
245
+ "mcpServers": {
246
+ "agent-skills": {
247
+ "command": "npx",
248
+ "args": ["-y", "@peterson-benhame/agent-skills-mcp"]
249
+ }
250
+ }
251
+ }
252
+ ```
253
+
254
+ → Full setup for all clients (Cursor, Claude Code, VS Code, etc.), caching, and error reference: **[packages/mcp/README.md](packages/mcp/README.md)**
255
+
256
+ ## Créditos e licenças
257
+
258
+ Este projeto é um fork do Agent Skills, originalmente desenvolvido e distribuído
259
+ pela Tech Leads Club.
260
+
261
+ - Código-fonte, CLI e infraestrutura: MIT License. O aviso de copyright original
262
+ está preservado no arquivo LICENSE.
263
+ - Skills individuais: cada arquivo SKILL.md preserva sua licença e autoria original.
264
+ - Tradução, adaptações e manutenção deste fork: Peterson Benhame.
Binary file
package/index.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ var cl=Object.defineProperty;var E=(e,t,o)=>()=>{if(o)throw o[0];try{return e&&(t=e(e=0)),t}catch(r){throw o=[r],r}};var so=(e,t)=>{for(var o in t)cl(e,o,{get:t[o],enumerable:!0})};import{homedir as ml,platform as dl}from"node:os";var xo,gr=E(()=>{"use strict";xo=class{cwd(){return process.cwd()}homedir(){return ml()}platform(){return dl()}getEnv(t){return process.env[t]}}});import{existsSync as ul,mkdirSync as fl,readFileSync as gl,readdirSync as pl,rmSync as hl,writeFileSync as yl}from"node:fs";import{appendFile as xl,cp as kl,lstat as Sl,mkdir as bl,readFile as Cl,readdir as wl,readlink as Tl,rename as Al,rm as Il,symlink as Pl,writeFile as vl}from"node:fs/promises";var ko,pr=E(()=>{"use strict";ko=class{async readFile(t,o){return Cl(t,o)}async writeFile(t,o,r){await vl(t,o,r)}writeFileSync(t,o,r){yl(t,o,r)}async appendFile(t,o,r){await xl(t,o,r)}async mkdir(t,o){await bl(t,o)}mkdirSync(t,o){fl(t,o)}async rm(t,o){await Il(t,o)}rmSync(t,o){hl(t,o)}async rename(t,o){await Al(t,o)}async cp(t,o,r){await kl(t,o,r)}async symlink(t,o,r){await Pl(t,o,r)}async readlink(t){return Tl(t)}async lstat(t){return Sl(t)}async readdir(t,o){return wl(t,{withFileTypes:!0})}existsSync(t){return ul(t)}readFileSync(t,o){return gl(t,o)}readdirSync(t,o){return pl(t,{withFileTypes:!0})}}});var So,hr=E(()=>{"use strict";So=class{async get(t){return fetch(t)}async getWithFallback(t,o){try{return await fetch(t)}catch(r){if(o)return fetch(o);throw r}}}});var bo,yr=E(()=>{"use strict";bo=class{error(t){console.error(t)}warn(t){console.warn(t)}info(t){console.info(t)}debug(t){console.debug(t)}}});var El,Co,xr=E(()=>{"use strict";El=async(e,t)=>{let r=(await import("package-json")).default;return r(e,t)},Co=class{resolvePackage;constructor(t=El){this.resolvePackage=t}async getLatestVersion(t){return(await this.resolvePackage(t,{version:"latest"})).version}}});import{existsSync as Dl}from"node:fs";import{dirname as Bl,join as Pn,parse as Ll,resolve as Rl}from"node:path";function Ml(e,t){let o=Rl(e),r=o,{root:s}=Ll(r);for(;;){if(t(Pn(r,...vn)))return r;if(r===s)return o;r=Bl(r)}}var vn,wo,kr=E(()=>{"use strict";vn=["packages","skills-catalog","skills"];wo=class{constructor(t=process.cwd(),o=Dl){this.startDir=t;this.existsSyncFn=o}startDir;existsSyncFn;getWorkspaceRoot(){return Ml(this.startDir,this.existsSyncFn)}getSkillsCatalogPath(){return Pn(this.getWorkspaceRoot(),...vn)}getLocalSkillsDirectory(){let t=this.getSkillsCatalogPath();return this.existsSyncFn(t)?t:null}}});import{execSync as _l}from"node:child_process";var To,Sr=E(()=>{"use strict";To=class{exec(t,o){return _l(t,{encoding:o?.encoding??"utf-8"})}}});function En(){return{fs:new ko,http:new So,shell:new To,env:new xo,logger:new bo,packageResolver:new Co,paths:new wo}}var Dn=E(()=>{"use strict";gr();pr();hr();yr();xr();kr();Sr();gr();pr();hr();yr();xr();kr();Sr()});var Lt,Rt,br,Cr,Bn,io,gt,Ln,wr,Tr,Ar,Rn,Ir,Pr,vr,Mn,Ao,_n,Er,Fe=E(()=>{"use strict";Lt="uncategorized",Rt=/^\(([a-z][a-z0-9-]*)\)$/,br="_category.json",Cr={id:Lt,name:"Uncategorized",description:"Skills without a specific category",priority:999},Bn="@peterson-benhame/agent-skills",io="@peterson-benhame/skills-catalog",gt=".agents",Ln="skills",wr=".skill-lock.json",Tr=".skill-lock.json.backup",Ar=".agent-skills",Rn="audit.log",Ir=".cache",Pr="agent-skills",vr="skills",Mn="registry.json",Ao=".skill-meta.json",_n=1440*60*1e3,Er=10});var On=E(()=>{"use strict"});var Fn=E(()=>{"use strict"});var Nn=E(()=>{"use strict"});var $n=E(()=>{"use strict"});var Un=E(()=>{"use strict"});var Gn=E(()=>{"use strict"});var Hn=E(()=>{"use strict"});var jn=E(()=>{"use strict";On();Fn();Nn();$n();Un();Gn();Hn()});import{dirname as Ol,join as Fl,parse as Nl,resolve as $l,sep as Ul}from"node:path";function Ne(e,t){let o=t??e.env.cwd(),r=$l(o),{root:s}=Nl(r),i=`packages${Ul}cli`;for(;r!==s;){if(Gl.some(l=>e.fs.existsSync(Fl(r,l)))&&!r.endsWith(i))return r;r=Ol(r)}return o}var Gl,lo=E(()=>{"use strict";Gl=["package.json",".git"]});import{join as b}from"node:path";function Xn(){return Object.keys(ao).sort((e,t)=>ao[e].displayName.localeCompare(ao[t].displayName))}function De(e,t){let o=ao[t],r=Vn(e);return{name:t,displayName:o.displayName,description:o.description,skillsDir:o.skillsDir,globalSkillsDir:o.globalSkillsDir(r.home),detectInstalled:()=>o.detectInstalled(r)}}function Io(e){let t=Vn(e);return Object.entries(ao).filter(([,o])=>o.detectInstalled(t)).map(([o])=>o)}var ao,Vn,Kn,Dr=E(()=>{"use strict";lo();ao={cursor:{displayName:"Cursor",description:"AI-first code editor built on VS Code",skillsDir:".cursor/skills",globalSkillsDir:e=>b(e,".cursor/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".cursor"))||o.fs.existsSync(b(t,".cursor"))},"claude-code":{displayName:"Claude Code",description:"Anthropic's agentic coding tool",skillsDir:".claude/skills",globalSkillsDir:e=>b(e,".claude/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".claude"))||o.fs.existsSync(b(t,".claude"))},"github-copilot":{displayName:"GitHub Copilot",description:"AI pair programmer by GitHub/Microsoft",skillsDir:".github/skills",globalSkillsDir:e=>b(e,".copilot/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".copilot"))||o.fs.existsSync(b(t,".github"))},windsurf:{displayName:"Windsurf",description:"AI IDE with Cascade flow (Codeium)",skillsDir:".windsurf/skills",globalSkillsDir:e=>b(e,".codeium/windsurf/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".codeium/windsurf"))||o.fs.existsSync(b(t,".windsurf"))},cline:{displayName:"Cline",description:"Autonomous AI coding agent for VS Code",skillsDir:".cline/skills",globalSkillsDir:e=>b(e,".cline/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".cline"))||o.fs.existsSync(b(t,".cline"))||Kn({home:e,ports:o},"saoudrizwan","claude-dev")},aider:{displayName:"Aider",description:"AI pair programming in terminal",skillsDir:".aider/skills",globalSkillsDir:e=>b(e,".aider/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".aider"))||o.fs.existsSync(b(t,".aider"))},codex:{displayName:"OpenAI Codex",description:"OpenAI's coding agent",skillsDir:".codex/skills",globalSkillsDir:e=>b(e,".codex/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".codex"))||o.fs.existsSync(b(t,".codex"))},gemini:{displayName:"Gemini CLI",description:"Google's AI coding assistant",skillsDir:".gemini/skills",globalSkillsDir:e=>b(e,".gemini/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".gemini"))||o.fs.existsSync(b(t,".gemini"))},antigravity:{displayName:"Antigravity",description:"Google's agentic coding (VS Code)",skillsDir:".agent/skills",globalSkillsDir:e=>b(e,".gemini/antigravity/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".gemini/antigravity"))||o.fs.existsSync(b(t,".agent"))},roo:{displayName:"Roo Code",description:"AI coding assistant for VS Code",skillsDir:".roo/skills",globalSkillsDir:e=>b(e,".roo/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".roo"))||o.fs.existsSync(b(t,".roo"))||Kn({home:e,ports:o},"RooVetGit","roo-cline")},kilocode:{displayName:"Kilo Code",description:"AI coding agent with auto-launch",skillsDir:".kilocode/skills",globalSkillsDir:e=>b(e,".kilocode/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".kilocode"))||o.fs.existsSync(b(t,".kilocode"))},trae:{displayName:"TRAE",description:"AI IDE with SOLO mode and custom agents",skillsDir:".trae/skills",globalSkillsDir:e=>b(e,".trae/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".trae"))||o.fs.existsSync(b(t,".trae"))},kiro:{displayName:"Kiro",description:"AI Agent with workspace and global skill scopes",skillsDir:".kiro/skills",globalSkillsDir:e=>b(e,".kiro/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".kiro"))||o.fs.existsSync(b(t,".kiro"))},"amazon-q":{displayName:"Amazon Q",description:"AWS AI coding assistant",skillsDir:".amazonq/skills",globalSkillsDir:e=>b(e,".amazonq/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".amazonq"))||o.fs.existsSync(b(t,".amazonq"))},augment:{displayName:"Augment",description:"AI code assistant with context engine",skillsDir:".augment/skills",globalSkillsDir:e=>b(e,".augment/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".augment"))||o.fs.existsSync(b(t,".augment"))},tabnine:{displayName:"Tabnine",description:"AI code completions with privacy focus",skillsDir:".tabnine/skills",globalSkillsDir:e=>b(e,".tabnine/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".tabnine"))||o.fs.existsSync(b(t,".tabnine"))},opencode:{displayName:"OpenCode",description:"Open-source AI coding terminal",skillsDir:".opencode/skills",globalSkillsDir:e=>b(e,".config/opencode/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".config/opencode"))||o.fs.existsSync(b(t,".opencode"))||o.fs.existsSync(b(t,".config/opencode"))},sourcegraph:{displayName:"Sourcegraph Cody",description:"AI assistant with codebase context",skillsDir:".sourcegraph/skills",globalSkillsDir:e=>b(e,".sourcegraph/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".sourcegraph"))||o.fs.existsSync(b(t,".sourcegraph"))},droid:{displayName:"Droid (Factory.ai)",description:"AI software engineer by Factory.ai",skillsDir:".factory/skills",globalSkillsDir:e=>b(e,".factory/skills"),detectInstalled:({home:e,projectRoot:t,ports:o})=>o.fs.existsSync(b(e,".factory"))||o.fs.existsSync(b(t,".factory"))}},Vn=e=>({home:e.env.homedir(),projectRoot:Ne(e),ports:e});Kn=(e,t,o)=>{let r=[b(e.home,".vscode/extensions"),b(e.home,".vscode-server/extensions"),b(e.home,".vscode-oss/extensions")];for(let s of r)if(e.ports.fs.existsSync(s))try{if(e.ports.fs.readdirSync(s).some(l=>l.name.startsWith(`${t}.${o}-`)))return!0}catch{}return!1}});import{join as Yn}from"node:path";function Wn(e,t){return t??e.env.homedir()}function Po(e,t){return Yn(Wn(e,t),Ar,Rn)}async function Br(e,t,o){try{let r=Wn(e,o),s=Po(e,r),i=Yn(r,Ar),l=`${JSON.stringify({...t,timestamp:new Date().toISOString()})}
3
+ `;await e.fs.mkdir(i,{recursive:!0}),await e.fs.appendFile(s,l,"utf-8")}catch{}}async function zn(e,t,o){try{let i=(await e.fs.readFile(Po(e,o),"utf-8")).trim().split(`
4
+ `).filter(Boolean).map(l=>{try{return JSON.parse(l)}catch{return null}}).filter(l=>l!==null).reverse();return t===void 0?i:t<=0?[]:i.slice(0,t)}catch{return[]}}var Lr=E(()=>{"use strict";Fe()});import{join as wu,normalize as qn,resolve as Jn,sep as Hl}from"node:path";function Mt(e){return e.split("-").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function pt(e){return(e.replace(/[/\\]/g,"").replace(/[\0:*?"<>|]/g,"").replace(/^[.\s]+|[.\s]+$/g,"").replace(/\.{2,}/g,"").replace(/^\.+/,"")||"unnamed-skill").substring(0,255)}function _t(e,t){let o=qn(Jn(e)),r=qn(Jn(t));return r.startsWith(o+Hl)||r===o}var Ot=E(()=>{"use strict";Fe()});import{join as jl}from"node:path";function Qn(e){return e.paths.getSkillsCatalogPath()}function Kl(e){let t=e.match(Rt);return t?t[1]:null}function Vl(e){return Rt.test(e)}function Xl(e){let t=Qn(e),o=jl(t,br);if(!e.fs.existsSync(o))return{};try{let r=e.fs.readFileSync(o,"utf-8");return JSON.parse(r)}catch{return{}}}function Yl(e){let t=Qn(e);if(!e.fs.existsSync(t))return[];let o=Xl(e),r=e.fs.readdirSync(t,{withFileTypes:!0}),s=[],i=0;for(let l of r){if(!l.isDirectory()||!Vl(l.name))continue;let m=Kl(l.name);if(!m)continue;let a=o[l.name]??{};s.push({id:m,name:a.name??Mt(m),description:a.description,priority:a.priority??i}),i++}return s.sort((l,m)=>l.name.localeCompare(m.name)),s}function vo(e,t){let o=Yl(e);if(o.length===0){let l=new Set(t.map(m=>m.category).filter(Boolean));o=Array.from(l).map((m,a)=>({id:m,name:Mt(m),priority:a}))}let r=new Map;for(let l of o)r.set(l,[]);r.set(Cr,[]);for(let l of t){let m=l.category??Lt,a=o.find(f=>f.id===m);!a&&m!==Lt&&(a={id:m,name:Mt(m),priority:999},o.push(a),r.set(a,[]));let d=a??Cr,p=r.get(d)??[];p.push(l),r.set(d,p)}for(let[l,m]of r)m.length===0&&r.delete(l);let s=new Map,i=Array.from(r.keys()).sort((l,m)=>l.name.localeCompare(m.name));for(let l of i){let m=r.get(l);m&&(m.sort((a,d)=>a.name.localeCompare(d.name)),s.set(l,m))}return s}var Zn=E(()=>{"use strict";Fe();Ot()});import{join as Wl}from"node:path";function zl(e){try{return e.shell.exec("npm root -g",{encoding:"utf-8"}).trim()}catch{return null}}function Rr(e){let t=zl(e);if(!t)return!1;let o=Wl(t,Bn);return e.fs.existsSync(o)}var Mr=E(()=>{"use strict";Fe()});var it,_r=E(()=>{"use strict";it=["cursor","claude-code","github-copilot","windsurf","cline","aider","codex","gemini","antigravity","roo","kilocode","amazon-q","augment","tabnine","opencode","sourcegraph","droid","trae","kiro"]});import{dirname as ql,join as Eo}from"node:path";import{z as me}from"zod";function ts(e,t){if(t)return Eo(e.env.homedir(),gt,wr);let o=Ne(e);return Eo(o,gt,wr)}function ea(e,t){if(t)return Eo(e.env.homedir(),gt,Tr);let o=Ne(e);return Eo(o,gt,Tr)}function os(){return{version:es,skills:{}}}function ta(e){try{let t=Zl.parse(e);return t.version===1?{version:es,skills:Object.fromEntries(Object.entries(t.skills).map(([o,r])=>[o,{...r,agents:r.agents||[],method:r.method||"copy",global:r.global??!1}]))}:t}catch{return os()}}async function ht(e,t=!1){let o=ts(e,t);try{let r=await e.fs.readFile(o,"utf-8"),s=JSON.parse(r);return ta(s)}catch{return os()}}async function rs(e,t,o=!1){let r=ts(e,o),s=ea(e,o),i=`${r}.tmp`;try{try{let l=await e.fs.readFile(r,"utf-8");await e.fs.writeFile(s,l,"utf-8")}catch{}await e.fs.mkdir(ql(r),{recursive:!0}),await e.fs.writeFile(i,JSON.stringify(t,null,2),"utf-8"),await e.fs.rename(i,r)}catch(l){try{await e.fs.rm(i,{force:!0})}catch{}throw l}}async function ns(e,t,o,r={}){let s=await ht(e,r.global),i=new Date().toISOString(),l=s.skills[t],m=l?.agents||[],a=Array.from(new Set([...m,...o]));s.skills[t]={name:t,source:r.source||"local",contentHash:r.contentHash??l?.contentHash,installedAt:l?.installedAt??i,updatedAt:i,agents:a,method:r.method||"copy",global:r.global??!1,version:r.version},await rs(e,s,r.global)}async function Or(e,t,o,r=!1){let s=await ht(e,r),i=s.skills[t];if(!i)return!1;let l=i.agents||[],m=l.filter(a=>a!==o);return m.length===l.length?!1:(m.length===0?delete s.skills[t]:s.skills[t]={...i,agents:m,updatedAt:new Date().toISOString()},await rs(e,s,r),!0)}async function Do(e,t,o=!1){return(await ht(e,o)).skills[t]??null}var es,Jl,Ql,Zl,Bo=E(()=>{"use strict";Fe();_r();lo();es=2,Jl=me.enum(it),Ql=me.object({name:me.string(),source:me.string(),contentHash:me.string().optional(),installedAt:me.string(),updatedAt:me.string(),agents:me.array(Jl).optional(),method:me.enum(["copy","symlink"]).optional(),global:me.boolean().optional(),version:me.string().optional()}),Zl=me.object({version:me.number(),skills:me.record(me.string(),Ql)})});import{createHash as oa}from"node:crypto";import{join as fe,relative as ra}from"node:path";function Fr(e){return fe(xt(e),Mn)}function Nr(e,t){try{return e.fs.existsSync(fe(Ae(e,t),"SKILL.md"))}catch{return!1}}function is(e){let t=xt(e),o=fe(t,vr);e.fs.existsSync(t)||e.fs.mkdirSync(t,{recursive:!0}),e.fs.existsSync(o)||e.fs.mkdirSync(o,{recursive:!0})}function na(e){return Date.now()-e<_n}function ss(e){let t=Fr(e);if(!e.fs.existsSync(t))return null;try{let o=e.fs.readFileSync(t,"utf-8");return JSON.parse(o)}catch{return null}}function sa(e,t){let o=Fr(e),r={fetchedAt:Date.now(),registry:t};e.fs.writeFileSync(o,JSON.stringify(r,null,2),"utf-8")}async function ls(e){let t=e.env.getEnv("SKILLS_CDN_REF");if(t)return t;if(Lo)return Lo;try{return Lo=await e.packageResolver.getLatestVersion(io),Lo}catch(o){throw new Error(`Failed to resolve pinned version for ${io}. Set SKILLS_CDN_REF or fix package resolution. ${o instanceof Error?o.message:String(o)}`,{cause:o})}}function ia(e){let t=oa("sha256");for(let o of[...e.keys()].sort()){let r=e.get(o);r!==void 0&&(t.update(o),t.update(r))}return t.digest("hex")}function as(e){let t=`https://cdn.jsdelivr.net/npm/${io}@${e}`,o=`https://unpkg.com/${io}@${e}`;return{registry:`${t}/skills-registry.json`,fallbackRegistry:`${o}/skills-registry.json`,skillsBase:`${t}/skills`,fallbackSkillsBase:`${o}/skills`}}function Ro(e,t){let o=fe(e,".");return fe(t,".").startsWith(o)}function la(e,t,o){try{let r=fe(Ae(e,t),Ao);e.fs.writeFileSync(r,JSON.stringify(o,null,2),"utf-8")}catch{}}function $r(e,t){try{let o=fe(Ae(e,t),Ao);return e.fs.existsSync(o)?JSON.parse(e.fs.readFileSync(o,"utf-8")):null}catch{return null}}function aa(e,t){return ra(e,t).split("\\").join("/")}function cs(e,t,o){let r=[],s;try{s=e.fs.readdirSync(t,{withFileTypes:!0})}catch{return r}for(let i of s){let l=fe(t,i.name);Ro(o,l)&&(i.isDirectory()?r.push(...cs(e,l,o)):r.push(aa(o,l)))}return r}function ms(e,t,o){let r;try{r=e.fs.readdirSync(t,{withFileTypes:!0})}catch{return}for(let s of r){if(!s.isDirectory())continue;let i=fe(t,s.name);Ro(o,i)&&ms(e,i,o)}if(t!==o)try{e.fs.readdirSync(t,{withFileTypes:!0}).length===0&&e.fs.rmSync(t,{recursive:!0,force:!0})}catch{}}function ca(e,t,o){let r=new Set([...o,Ao]),s=cs(e,t,t);for(let i of s){if(r.has(i))continue;let l=fe(t,i);if(Ro(t,l))try{e.fs.rmSync(l,{force:!0})}catch{}}ms(e,t,t)}async function ma(e,t,o,r){let s=fe(r,o);if(!Ro(r,s))return e.logger.error(`Security: Skipping suspicious file path: ${o}`),null;let i=fe(s,"..");e.fs.existsSync(i)||e.fs.mkdirSync(i,{recursive:!0});let l=await ls(e),m=as(l),a=`${m.skillsBase}/${t.path}/${o}`,d=`${m.fallbackSkillsBase}/${t.path}/${o}`,p=await e.http.getWithFallback(a,d);if(!p.ok)throw new Error(`Failed to download ${o}: HTTP ${p.status}`);let f=await p.text();return e.fs.writeFileSync(s,f,"utf-8"),f}async function We(e,t=!1){is(e);let o=await ls(e);if(!t){let r=ss(e),s=r&&o!=="latest"&&r.registry.version!==o;if(r&&na(r.fetchedAt)&&!s)return r.registry}try{let r=as(o),i=await(await e.http.getWithFallback(r.registry,r.fallbackRegistry)).json();return sa(e,i),i}catch(r){let s=ss(e);return s?s.registry:(e.logger.error(`Failed to fetch registry: ${r instanceof Error?r.message:String(r)}`),null)}}async function da(e,t){is(e);let o=Ae(e,t.name);e.fs.existsSync(o)||e.fs.mkdirSync(o,{recursive:!0});try{let r=[...t.files],s=new Map;for(let i=0;i<r.length;i+=Er){let l=r.slice(i,i+Er),m=await Promise.all(l.map(a=>ma(e,t,a,o)));for(let[a,d]of m.entries())d!==null&&s.set(l[a],d)}if(s.size<r.length)throw new Error(`Only ${s.size}/${r.length} files downloaded successfully`);if(t.contentHash){let i=ia(s);if(i!==t.contentHash)throw new Error(`Checksum mismatch for skill '${t.name}': expected ${t.contentHash}, got ${i}`);la(e,t.name,{contentHash:t.contentHash,downloadedAt:Date.now()})}return ca(e,o,r),o}catch(r){return e.logger.error(`Failed to download skill ${t.name}: ${r instanceof Error?r.message:String(r)}`),null}}async function Ft(e){let t=await We(e);return t?t.skills.map(o=>({name:o.name,description:o.description,path:Nr(e,o.name)?Ae(e,o.name):"",category:o.category})):[]}async function yt(e,t){return(await We(e))?.skills.find(r=>r.name===t)??null}async function ua(e){return(await We(e))?.deprecated??[]}async function Mo(e){let t=await ua(e);return new Map(t.map(o=>[o.name,o]))}async function Ur(e,t){if(!Nr(e,t))return!0;let o=await yt(e,t);if(!o?.contentHash)return!1;let r=$r(e,t);return r?.contentHash?r.contentHash!==o.contentHash:!0}async function _o(e,t){let o=[],r=[];for(let s of t)await Ur(e,s)?o.push(s):r.push(s);return{toUpdate:o,upToDate:r}}function Gr(e,t){return Nr(e,t)}async function lt(e,t){let o=Gr(e,t),r=await yt(e,t);return r?o&&(!r.contentHash||$r(e,t)?.contentHash===r.contentHash)?Ae(e,t):da(e,r):o?Ae(e,t):null}function ds(e){try{e.fs.rmSync(xt(e),{recursive:!0,force:!0})}catch{}}function fa(e,t){try{e.fs.rmSync(Ae(e,t),{recursive:!0,force:!0})}catch{}}function us(e){try{e.fs.rmSync(Fr(e),{force:!0})}catch{}}async function Nt(e,t){return fa(e,t),lt(e,t)}function xt(e){return fe(e.env.homedir(),Ir,Pr)}function Ae(e,t){let o=pt(t);if(!o)throw new Error("Invalid skill name");return fe(xt(e),vr,o)}function fs(e,t){return $r(e,t)?.contentHash}var Lo,co=E(()=>{"use strict";Fe();Ot();Lo=null});import{join as he,relative as ga,resolve as gs}from"node:path";var Hr,ps,pa,mo,ha,$t,hs,ya,xa,ka,Ut,jr,Sa,uo,Kr=E(()=>{"use strict";Fe();Ot();Dr();Lr();Mr();Bo();lo();co();Hr=he(gt,Ln),ps=async(e,t,o)=>{try{await pa(e,o,t),await e.fs.mkdir(he(o,".."),{recursive:!0});let r=ga(he(o,".."),t),s=e.env.platform()==="win32"?"junction":void 0;return await e.fs.symlink(r,o,s),!0}catch{return!1}},pa=async(e,t,o)=>{try{if((await e.fs.lstat(t)).isSymbolicLink()){let s=await e.fs.readlink(t);if(gs(s)===gs(o))return;await e.fs.rm(t)}else await e.fs.rm(t,{recursive:!0})}catch(r){r?.code==="ELOOP"&&await e.fs.rm(t,{force:!0}).catch(()=>{})}},mo=async(e,t,o)=>{await e.fs.rm(o,{recursive:!0,force:!0}),await e.fs.mkdir(he(o,".."),{recursive:!0}),await e.fs.cp(t,o,{recursive:!0})},ha=(e,t)=>`${e}-${t?"global":"local"}`,$t=(e,t,o={})=>({agent:e.config.displayName,skill:e.skill.name,path:e.skillTargetPath,method:t,success:!0,...o}),hs=(e,t,o)=>({agent:e.config.displayName,skill:e.skill.name,path:e.skillTargetPath,method:t,success:!1,error:o instanceof Error?o.message:String(o)}),ya={"symlink-global":async(e,t)=>await ps(e,t.skill.path,t.skillTargetPath)?$t(t,"symlink"):(await mo(e,t.skill.path,t.skillTargetPath),$t(t,"copy",{symlinkFailed:!0})),"symlink-local":async(e,t)=>{let o=he(t.projectRoot,Hr,t.safeSkillName);return await mo(e,t.skill.path,o),await ps(e,o,t.skillTargetPath)?$t(t,"symlink",{usedGlobalSymlink:!1}):(await mo(e,t.skill.path,t.skillTargetPath),$t(t,"copy",{symlinkFailed:!0}))},"copy-global":async(e,t)=>(await mo(e,t.skill.path,t.skillTargetPath),$t(t,"copy")),"copy-local":async(e,t)=>(await mo(e,t.skill.path,t.skillTargetPath),$t(t,"copy"))},xa=(e,t,o,r)=>r||_t(e,t)||_t(o,t)?null:"Security: Invalid skill destination path",ka=async(e,t,o,r,s,i,l)=>{let m=De(e,o),a=pt(t.name),d=he(r,a),p={skill:t,config:m,safeSkillName:a,skillTargetPath:d,projectRoot:i},f=xa(r,d,i,l);if(f)return hs(p,s,f);try{let u=ha(s,l);return await ya[u](e,p)}catch(u){return hs(p,s,u)}},Ut=async(e,t,o)=>{let r=Ne(e),s=[];for(let i of o.agents){let l=De(e,i),m=o.global?l.globalSkillsDir:he(r,l.skillsDir);for(let a of t){let d=await ka(e,a,i,m,o.method,r,o.global);s.push(d),d.success&&await ns(e,a.name,[i],{source:"local",contentHash:fs(e,a.name),method:o.method,global:o.global})}}return await Br(e,{action:"install",skillName:t.map(i=>i.name).join(", "),agents:o.agents.map(i=>De(e,i).displayName),success:s.filter(i=>i.success).length,failed:s.filter(i=>!i.success).length,details:s.map(i=>({skill:i.skill,agent:i.agent,success:i.success,error:i.error,path:i.path}))}),s},jr=async(e,t,o)=>{let r=De(e,t),s=o?r.globalSkillsDir:he(Ne(e),r.skillsDir);try{return(await e.fs.readdir(s,{withFileTypes:!0})).filter(l=>l.isDirectory()||l.isSymbolicLink?.()).map(l=>l.name)}catch{return[]}},Sa=(e,t,o={})=>{let r=pt(t),s=o.global?e.env.homedir():Ne(e),i=he(s,Hr,r);if(!_t(he(s,Hr),i))throw new Error("Invalid skill name: potential path traversal detected");return i},uo=async(e,t,o,r={})=>{let s=pt(t),i=Ne(e),l=await Do(e,t,!0);if(l||(l=await Do(e,t,!1)),!l&&!r.force)return o.map(u=>({skill:t,agent:De(e,u).displayName,success:!1,error:"Skill not found in lockfile"}));let m=await Promise.all(o.map(async u=>{let g=De(e,u),h=he(i,g.skillsDir,s),S=he(g.globalSkillsDir,s),D=r.global===void 0?[h,S]:r.global?[S]:[h],F=!1,N=!1,k=!1,w;for(let A of D){let C=A.startsWith(g.globalSkillsDir),B=C?g.globalSkillsDir:he(i,g.skillsDir);if(!_t(B,A)){w="Security: Invalid removal path";continue}try{await e.fs.lstat(A),await e.fs.rm(A,{recursive:!0,force:!0}),F=!0,C?k=!0:N=!0}catch(R){R.code!=="ENOENT"&&!w&&(w=R instanceof Error?R.message:String(R))}}return{skill:t,agent:g.displayName,success:F,error:F?void 0:w||"Skill not found",removedLocal:N,removedGlobal:k}}));for(let u of m)if(u.success){let g=o.find(h=>De(e,h).displayName===u.agent);g&&(u.removedLocal&&await Or(e,t,g,!1).catch(()=>{}),u.removedGlobal&&await Or(e,t,g,!0).catch(()=>{}))}let d=((await Do(e,t,!1))?.agents?.length??0)>0,p=m.some(u=>u.removedLocal);if(!d&&p&&l?.method==="symlink"){let u=Sa(e,t,{global:!1});await e.fs.rm(u,{recursive:!0,force:!0}).catch(()=>{})}let f=m.map(({skill:u,agent:g,success:h,error:S})=>({skill:u,agent:g,success:h,...S&&{error:S}}));return await Br(e,{action:"remove",skillName:t,agents:o.map(u=>De(e,u).displayName),success:f.filter(u=>u.success).length,failed:f.filter(u=>!u.success).length,forced:r.force,details:f.map(u=>({skill:u.skill,agent:u.agent,success:u.success,error:u.error}))}),f}});function ba(e){if(!e.startsWith("---"))return e;let t=0;for(;t<e.length;){let o=e.indexOf(`
5
+ `,t),r=o===-1?e.length:o,s=e[r-1]==="\r"?r-1:r,i=e.slice(t,s);if(t===0){if(i!=="---")return e}else if(i==="---")return e.slice(o===-1?e.length:o+1).trimStart();if(o===-1)return e;t=o+1}return e}function ys(e){let o=ba(e).split(`
6
+ `),r=[],s=0;for(;s<o.length;){let i=o[s];if(i.startsWith("```")){let a=i.slice(3).trim(),d=[];for(s++;s<o.length&&!o[s].startsWith("```");)d.push(o[s]),s++;r.push({type:"code-block",language:a,lines:d}),s++;continue}if(i.trim()===""){r.push({type:"blank"}),s++;continue}if(/^(-{3,}|_{3,}|\*{3,})$/.test(i.trim())){r.push({type:"hr"}),s++;continue}let l=i.match(/^(#{1,3})\s+(.+)$/);if(l){r.push({type:"heading",level:l[1].length,text:l[2]}),s++;continue}let m=i.match(/^(\s*)([-*]|\d+\.)\s+(.+)$/);if(m){let a=Math.floor(m[1].length/2);r.push({type:"list-item",text:m[3],indent:a}),s++;continue}r.push({type:"paragraph",text:i}),s++}return r}var xs=E(()=>{"use strict"});import{basename as Ca,join as Oo}from"node:path";function wa(e){try{let t=e.paths.getWorkspaceRoot();if(t)return t}catch{}return"__default__"}function Vr(e){let t=wa(e),o=ks.get(t);return o||(o={mode:null,localDir:null},ks.set(t,o)),o}function Ta(e){return e.paths.getLocalSkillsDirectory()}function Aa(e){let t=Vr(e);if(t.mode)return t.mode;let o=Ta(e);return o?(t.localDir=o,t.mode="local","local"):(t.mode="remote","remote")}function Ia(e){let t=Vr(e);return Aa(e)==="local"&&t.localDir!==null}function Pa(e){return Rt.test(e)}function va(e){return e.match(Rt)?.[1]??null}function Ea(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return{};let o=t[1],r=o.match(/^name:\s*(.+)$/m),s=o.match(/^description:\s*(.+)$/m);return{name:r?.[1]?.trim(),description:s?.[1]?.trim()}}function Ss(e,t,o){let r=Oo(t,"SKILL.md");if(!e.fs.existsSync(r))return null;let s=e.fs.readFileSync(r,"utf-8"),{name:i,description:l}=Ea(s),m=Ca(t);return{name:i??m,description:l??"No description",path:t,category:o}}function Da(e,t,o){return e.fs.existsSync(t)?e.fs.readdirSync(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>Ss(e,Oo(t,r.name),o)).filter(r=>r!==null):[]}function Ba(e,t){return e.fs.existsSync(t)?e.fs.readdirSync(t,{withFileTypes:!0}).filter(r=>r.isDirectory()).flatMap(r=>{if(Pa(r.name)){let i=va(r.name);return i?Da(e,Oo(t,r.name),i):[]}let s=Ss(e,Oo(t,r.name),Lt);return s?[s]:[]}):[]}async function bs(e){let t=Vr(e);return Ia(e)?Ba(e,t.localDir):Ft(e)}var ks,Cs=E(()=>{"use strict";Fe();Ot();co();ks=new Map});async function Xr(e,t){let o=[];for(let r of t){let s=await Nt(e,r);if(!s){o.push({agent:"unknown",skill:r,path:"",method:"copy",success:!1,error:`Failed to download skill "${r}"`});continue}let i=await yt(e,r),l={name:r,description:i?.description??"",path:s,category:i?.category??""};for(let m of[!1,!0]){let d=(await ht(e,m)).skills[r];if(!d?.agents?.length)continue;let p=await Ut(e,[l],{agents:d.agents,method:d.method??"copy",global:m,skills:[r]});o.push(...p)}}return o}var ws=E(()=>{"use strict";Kr();Bo();co()});var Ts=E(()=>{"use strict";Dr();Lr();Zn();Mr();Kr();Bo();xs();lo();co();Cs();ws()});var Y=E(()=>{"use strict";Dn();Fe();jn();Ts();_r();Ot()});var T,ee=E(()=>{"use strict";Y();T=En()});var Ei={};so(Ei,{runCliInstall:()=>bd});import be from"chalk";async function kd(e,t){await We(T,!0);let o=await Ft(T),r=[];for(let s of e){let i=o.find(m=>m.name===s);if(!i){console.error(be.red(`\u274C Skill "${s}" not found`));continue}let l=t?await Nt(T,s):await lt(T,s);l?r.push({...i,path:l}):console.error(be.red(`\u274C Failed to download skill "${s}"`))}return r}function Sd(e){let t=e.filter(r=>r.success),o=e.filter(r=>!r.success);t.length>0&&(console.log(be.green(`
7
+ \u2705 Successfully installed ${t.length} skill(s):`)),t.forEach(r=>{console.log(be.dim(` \u2022 ${r.skill} \u2192 ${r.agent} (${r.method})`))})),o.length>0&&(console.log(be.red(`
8
+ \u274C Failed to install ${o.length} skill(s):`)),o.forEach(r=>{console.log(be.dim(` \u2022 ${r.skill} \u2192 ${r.agent}: ${r.error}`))}))}async function bd(e){(!e.skill||e.skill.length===0)&&(console.error(be.red("\u274C --skill is required in CLI mode")),console.error(be.dim("Usage: agent-skills install --skill <name1> [name2...] [--agent <agents...>] [--global] [--symlink]")),process.exit(1));let t=Array.isArray(e.skill)?e.skill:[e.skill];console.log(be.blue(`\u23F3 Loading ${t.length} skill(s) from catalog...`));let o=await kd(t,e.force||!1);o.length===0&&(console.error(be.red("\u274C No skills were successfully downloaded")),process.exit(1));let r=e.agent||["cursor","claude-code","windsurf"],s=r.filter(d=>!it.includes(d));s.length>0&&(console.error(be.red(`\u274C Unknown agent(s): ${s.join(", ")}`)),console.error(be.dim(` Valid agents: ${it.join(", ")}`)),process.exit(1));let i=r,l=e.symlink?"symlink":"copy";console.log(be.blue(`\u23F3 Installing ${o.length} skill(s) to ${i.length} agent(s)...`));let m={agents:i,skills:o.map(d=>d.name),method:l,global:e.global||!1},a=await Ut(T,o,m);Sd(a),a.some(d=>!d.success)&&process.exit(1)}var Di=E(()=>{"use strict";Y();ee()});var Bi={};so(Bi,{runCliRemove:()=>Cd});import ve from"chalk";async function Cd(e){(!e.skill||e.skill.length===0)&&(console.error(ve.red("\u274C --skill is required in CLI mode")),console.error(ve.dim("Usage: agent-skills remove --skill <name1> [name2...] [--agent <agents...>] [--global] [--force]")),process.exit(1));let t=Array.isArray(e.skill)?e.skill:[e.skill],o=e.agent||["cursor","claude-code","windsurf"],r=o.filter(a=>!it.includes(a));r.length>0&&(console.error(ve.red(`\u274C Unknown agent(s): ${r.join(", ")}`)),console.error(ve.dim(` Valid agents: ${it.join(", ")}`)),process.exit(1));let s=o;e.force&&console.log(ve.yellow("\u26A0\uFE0F Force mode enabled - bypassing lockfile check")),console.log(ve.blue(`\u23F3 Removing ${t.length} skill(s) from ${s.length} agent(s)...`));let i=0,l=0,m=!1;for(let a of t){let d=await uo(T,a,s,{global:e.global,force:e.force}),p=d.filter(u=>u.success),f=d.filter(u=>!u.success);p.length>0&&(console.log(ve.green(`\u2705 ${a}: Removed from ${p.length} agent(s)`)),p.forEach(u=>console.log(ve.dim(` \u2022 ${u.agent}`))),i+=p.length),f.length>0&&(console.log(ve.red(`\u274C ${a}: Failed to remove from ${f.length} agent(s)`)),f.forEach(u=>console.log(ve.dim(` \u2022 ${u.agent}: ${u.error}`))),l+=f.length,f.some(u=>u.error?.includes("lockfile"))&&(m=!0))}console.log(ve.dim(`
9
+ ${i} succeeded, ${l} failed`)),m&&!e.force&&console.log(ve.yellow(`
10
+ \u{1F4A1} Tip: Use --force to bypass lockfile check`)),l>0&&process.exit(1)}var Li=E(()=>{"use strict";Y();ee()});var Ri={};so(Ri,{runCliUpdate:()=>wd});import se from"chalk";async function wd(e){if(console.log(se.blue("\u23F3 Fetching latest registry...")),await We(T,!0),e.skill){if(!await Ur(T,e.skill)){console.log(se.green(`\u2705 ${e.skill} is already up to date`));return}console.log(se.blue(`\u23F3 Updating ${e.skill}...`));let o=await Xr(T,[e.skill]);if(o.length===0){console.log(se.green(`\u2705 Cache updated for ${e.skill} (not installed in any agent)`));return}let r=o.filter(s=>!s.success);r.length===0?console.log(se.green(`\u2705 Updated ${e.skill}`)):(r.forEach(s=>console.error(se.red(` \u274C ${s.skill} \u2192 ${s.agent}: ${s.error}`))),process.exit(1))}else{let t=await ht(T),o=Object.keys(t.skills);if(o.length===0){console.log(se.yellow("No installed skills found. Run agent-skills install first."));return}let{toUpdate:r,upToDate:s}=await _o(T,o);if(r.length===0)console.log(se.green(`\u2705 All ${s.length} installed skills are up to date`));else{console.log(se.blue(`\u23F3 Updating ${r.length} of ${o.length} skills...`));let d=await Xr(T,r),p=new Set(d.filter(S=>S.success).map(S=>S.skill)),f=d.filter(S=>!S.success),u=r.filter(S=>!d.some(D=>D.skill===S)),g=p.size+u.length,h=f.length;console.log(se.green(`\u2705 ${g} updated, ${s.length} already up to date${h>0?se.red(`, ${h} failed`):""}`)),h>0&&f.forEach(S=>console.error(se.red(` \u274C ${S.skill} \u2192 ${S.agent}: ${S.error}`)))}let i=await Mo(T),l=await Ft(T),m=new Set(l.map(d=>d.name)),a=o.filter(d=>i.has(d)||!m.has(d));if(a.length>0){console.log(""),console.log(se.yellow(`\u26A0 ${a.length} deprecated skill${a.length>1?"s":""} detected:`));let d={withEntry:(p,f)=>{console.log(se.yellow(` \u203A ${p} \u2014 ${f.message}`)),f.alternatives?.length&&console.log(se.dim(` Try: agent-skills install --skill ${f.alternatives.join(", ")}`))},noEntry:p=>{console.log(se.yellow(` \u203A ${p} \u2014 no longer available in the registry`))}};a.forEach(p=>{let f=i.get(p);d[f?"withEntry":"noEntry"](p,f)}),console.log(se.dim(" Run: agent-skills remove --skill <name> to clean up"))}}}var Mi=E(()=>{"use strict";Y();ee()});var _i={};so(_i,{runCliCache:()=>Td});import Dt from"chalk";function Td(e){e.clear?(ds(T),console.log(Dt.green("\u2705 Cache cleared"))):e.clearRegistry?(us(T),console.log(Dt.green("\u2705 Registry cache cleared"))):e.path?console.log(xt(T)):(console.log(Dt.bold("Cache management:")),console.log(` ${Dt.blue("--clear")} Clear all cached skills and registry`),console.log(` ${Dt.blue("--clear-registry")} Clear only the registry cache`),console.log(` ${Dt.blue("--path")} Show cache directory path`),console.log(),console.log(Dt.dim(`Cache location: ${xt(T)}`)))}var Oi=E(()=>{"use strict";Y();ee()});import{Box as ut,Text as Ee}from"ink";import{Fragment as Id,jsx as ft,jsxs as Ce}from"react/jsx-runtime";function Fi({entries:e,limit:t=10}){let o=e.slice(0,t);return o.length===0?ft(ut,{flexDirection:"column",paddingY:1,children:ft(Ee,{dimColor:!0,children:"No audit log entries found"})}):Ce(ut,{flexDirection:"column",paddingY:1,children:[Ce(ut,{marginBottom:1,children:[ft(Ee,{bold:!0,color:"cyan",children:"\u{1F4CB} Audit Log"}),Ce(Ee,{dimColor:!0,children:[" (showing ",o.length," most recent)"]})]}),o.map((r,s)=>{let i=r.timestamp?new Date(r.timestamp):new Date,l=r.timestamp?Ad(i):"unknown time",m=r.action==="install"?"green":r.action==="remove"?"red":"yellow",a=r.failed===0?"\u2713":r.success>0?"\u26A0":"\u2717";return Ce(ut,{flexDirection:"column",marginBottom:1,paddingLeft:2,children:[Ce(ut,{children:[Ce(Ee,{color:m,bold:!0,children:[a," ",r.action.toUpperCase()]}),Ce(Ee,{dimColor:!0,children:[" \u2022 ",l]})]}),Ce(ut,{paddingLeft:2,children:[ft(Ee,{children:"Skills: "}),ft(Ee,{color:"cyan",children:r.skillName})]}),Ce(ut,{paddingLeft:2,children:[ft(Ee,{children:"Agents: "}),ft(Ee,{dimColor:!0,children:r.agents.join(", ")})]}),Ce(ut,{paddingLeft:2,children:[Ce(Ee,{color:"green",children:["\u2713 ",r.success]}),r.failed>0&&Ce(Id,{children:[ft(Ee,{children:" \u2022 "}),Ce(Ee,{color:"red",children:["\u2717 ",r.failed]})]})]})]},s)})]})}function Ad(e){let t=Math.floor((Date.now()-e.getTime())/1e3);return t<60?"just now":t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:t<604800?`${Math.floor(t/86400)}d ago`:e.toLocaleDateString()}var Ni=E(()=>{"use strict"});var $i={};so($i,{runCliAudit:()=>Ed});import{render as Pd}from"ink";import vd from"react";async function Ed(e){if(e.path){console.log(Po(T));return}let t=e.limit?parseInt(e.limit,10):10,o=await zn(T,t);Pd(vd.createElement(Fi,{entries:o,limit:t}))}var Ui=E(()=>{"use strict";Y();Ni();ee()});import{Command as Dd}from"commander";import{render as to}from"ink";import oo from"react";import{Box as kn,useApp as pd}from"ink";import{useEffect as hd,useState as yd}from"react";Y();ee();import{useEffect as La,useMemo as Ra,useState as Yr}from"react";function As(){let[e,t]=Yr([]),[o,r]=Yr([]),[s,i]=Yr(!0),l=Ra(()=>Xn(),[]);return La(()=>{let a=setTimeout(()=>{let d=Io(T);r(d),t(d),i(!1)},800);return()=>clearTimeout(a)},[]),{allAgents:l,installedAgents:o,selectedAgents:e,setSelectedAgents:t,toggleAgent:a=>{t(d=>d.includes(a)?d.filter(p=>p!==a):[...d,a])},loading:s}}import{useEffect as qf,useState as Jf}from"react";var Fo="@peterson-benhame/agent-skills";var Wr=".agent-skills",Is="cache.json";var ze={UPDATE_AVAILABLE:(e,t)=>`Update available: ${e} \u2192 ${t}`,TIP_INSTALL_UPDATE:"Tip: Install globally to update:",TIP_INSTALL_ACCESS:"Tip: Install globally for easier access:",UPDATE_COMMAND:`npm update -g ${Fo}`,INSTALL_COMMAND:`npm install -g ${Fo}`,DESCRIPTION:"Curated skills to power up your coding agents"};import{useMemo as Ma,useState as _a}from"react";function Ps(e,t){let[o,r]=_a(""),s=Ma(()=>{if(!o.trim())return e;let i=o.toLowerCase().split(/\s+/).filter(l=>l.length>0);return e.filter(l=>{let m=t.keys.map(a=>{let d=l[a];return typeof d=="string"?d.toLowerCase():""}).join(" ");return i.every(a=>m.includes(a))})},[o,e,t.keys]);return{query:o,setQuery:r,filtered:s,hasFilter:o.trim().length>0}}Y();ee();import{useState as No}from"react";function $o(){let[e,t]=No({current:0,total:0,skill:""}),[o,r]=No([]),[s,i]=No(!1),[l,m]=No(null);return{install:async(d,p)=>{i(!0),m(null),t({current:0,total:d.length*p.agents.length,skill:"Downloading..."}),await We(T,!0);let f=[];for(let u of d){let g=p.isUpdate?await Nt(T,u.name):await lt(T,u.name);g&&f.push({...u,path:g})}t({current:0,total:f.length*p.agents.length,skill:"Installing..."});try{let u=await Ut(T,f,p);return r(u),u}catch(u){return m(u instanceof Error?u.message:String(u)),[]}finally{i(!1)}},progress:e,results:o,installing:s,error:l}}import{useInput as Oa}from"ink";import{useCallback as Fa,useRef as Na,useState as $a}from"react";var Uo=["up","up","down","down","left","right","left","right","b","a"];function vs(){let[e,t]=$a(!1),o=Na([]);Oa((s,i)=>{if(e)return;let l=null;if(i.upArrow?l="up":i.downArrow?l="down":i.leftArrow?l="left":i.rightArrow?l="right":s.toLowerCase()==="b"?l="b":s.toLowerCase()==="a"&&(l="a"),!l){o.current=[];return}o.current.push(l),o.current.length>Uo.length&&(o.current=o.current.slice(-Uo.length)),o.current.length===Uo.length&&o.current.every((m,a)=>m===Uo[a])&&(t(!0),o.current=[])});let r=Fa(()=>{t(!1),o.current=[]},[]);return{activated:e,reset:r}}Y();ee();import{useState as Go}from"react";function Es(){let[e,t]=Go({current:0,total:0,skill:""}),[o,r]=Go([]),[s,i]=Go(!1),[l,m]=Go(null);return{remove:async(p,f,u=!1)=>{i(!0),t({current:0,total:f.length,skill:p}),m(null);try{let g=await uo(T,p,f,{global:u});return r(h=>[...h,...g]),g}catch(g){return m(g instanceof Error?g.message:String(g)),[]}finally{i(!1)}},removeMultiple:async p=>{i(!0);let f=p.reduce((u,g)=>u+g.agents.length,0);t({current:0,total:f,skill:"Initializing..."}),r([]),m(null);try{let u=0;for(let g of p){t({current:u,total:f,skill:g.name});let h=await uo(T,g.name,g.agents,{});r(S=>[...S,...h]),u+=g.agents.length}}catch(u){m(u instanceof Error?u.message:String(u))}finally{i(!1)}},progress:e,results:o,removing:s,error:l}}Y();ee();import{readFileSync as Ua}from"node:fs";import{join as Ga}from"node:path";import{useEffect as Ha,useState as Ho}from"react";function Ds(e){let[t,o]=Ho(null),[r,s]=Ho(null),[i,l]=Ho(!1),[m,a]=Ho(null);return Ha(()=>{if(!e){o(null),s(null),l(!1),a(null);return}let d=!0;return l(!0),a(null),(async()=>{try{let f=Gr(T,e)?Promise.resolve(Ae(T,e)):lt(T,e).catch(()=>null),[u,g]=await Promise.all([yt(T,e).catch(()=>null),f]);if(!d)return;u&&o(u);let h=g??Ae(T,e);try{let S=Ua(Ga(h,"SKILL.md"),"utf-8");s(S)}catch{a("Failed to load skill content")}}catch(f){d&&a(f instanceof Error?f.message:String(f))}finally{d&&l(!1)}})(),()=>{d=!1}},[e]),{metadata:t,content:r,loading:i,error:m}}Y();ee();import{useEffect as ja,useState as jo}from"react";function at(){let[e,t]=jo([]),[o,r]=jo(!0),[s,i]=jo(null),[l,m]=jo(new Map);return ja(()=>{let a=!0;return(async()=>{try{let p=await bs(T);a&&(t(p),m(vo(T,p)))}catch(p){a&&i(p instanceof Error?p.message:String(p))}finally{a&&r(!1)}})(),()=>{a=!1}},[]),{skills:e,loading:o,error:s,groupedSkills:l}}import{useState as Ka}from"react";function Bs(e){let[t,o]=Ka(1);return{step:t,next:()=>o(l=>Math.min(l+1,e)),back:()=>o(l=>Math.max(l-1,1)),goTo:l=>o(l),isFirst:t===1,isLast:t===e,progress:t/e}}import{Box as St,Text as Xo}from"ink";import cc from"ink-big-text";import Jr from"ink-gradient";import{useEffect as mc,useState as Rs}from"react";import{Box as zr,Text as fo}from"ink";import{memo as Va}from"react";var n={primary:"#3b82f6",primaryLight:"#60a5fa",primaryDark:"#1e3a8a",accent:"#06b6d4",accentLight:"#22d3ee",success:"#22c55e",warning:"#f59e0b",error:"#ef4444",text:"#f8fafc",textDim:"#94a3b8",textMuted:"#64748b",border:"#334155",bg:"#0f172a",bgLight:"#1e293b"};var c={bar:"\u2502",barEnd:"\u2514",radioActive:"\u25CF",radioInactive:"\u25CB",checkboxActive:"\u25FC",checkboxInactive:"\u25FB",diamond:"\u25C6",arrow:"\u203A",arrowRight:"\u2192",arrowUp:"\u2191",arrowDown:"\u2193",dot:"\xB7",bullet:"\u25B8",check:"\u2713",cross:"\u2717",star:"\u2605",sparkle:"\u2726",installed:"\u25CF",warning:"\u26A0",info:"\u2139"};import{jsx as Vo,jsxs as Ko}from"react/jsx-runtime";var ct=Va(function({hints:t,status:o}){return Vo(zr,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:Ko(zr,{justifyContent:"space-between",width:"100%",children:[Vo(fo,{children:t.map((r,s)=>Ko(fo,{children:[s>0&&Ko(fo,{color:n.textDim,children:[" ",c.dot," "]}),Vo(fo,{color:r.color??n.accent,bold:!0,children:r.key}),Ko(fo,{color:n.textDim,children:[" ",r.label]})]},r.key))}),o&&Vo(zr,{children:o})]})})});import{Box as kt,Text as $e,useInput as Xa}from"ink";import{useMemo as Ya,useState as Ls}from"react";import{Fragment as Wa,jsx as qe,jsxs as Je}from"react/jsx-runtime";function Qe({items:e,onSelect:t,onCancel:o,initialIndex:r=0,itemLimit:s=10,hideFooter:i,footerRight:l}){let[m,a]=Ls(r),[d,p]=Ls(0);Xa((u,g)=>{g.upArrow&&(a(h=>Math.max(0,h-1)),m<=d&&p(h=>Math.max(0,h-1))),g.downArrow&&(a(h=>Math.min(e.length-1,h+1)),m>=d+s-1&&p(h=>Math.min(e.length-s,h+1))),g.return&&t(e[m].value),g.escape&&o&&o()});let f=Ya(()=>e.slice(d,d+s),[e,d,s]);return Je(kt,{flexDirection:"column",children:[f.map((u,g)=>{let h=g+d===m;return Je(kt,{backgroundColor:h?n.bgLight:void 0,paddingX:1,children:[qe(kt,{width:2,children:qe($e,{color:h?n.accent:n.textMuted,children:h?c.bullet:" "})}),Je($e,{color:h?n.accent:n.text,bold:h,children:[h?c.radioActive:c.radioInactive," ",u.label]}),h&&u.hint&&Je($e,{color:n.textDim,children:[" ",c.dot," ",u.hint]})]},`${u.label}-${g}`)}),e.length>s&&qe(kt,{marginTop:1,paddingX:1,children:Je($e,{color:n.textDim,children:[c.arrowUp,c.arrowDown," ",d+1,"-",Math.min(d+s,e.length)," of ",e.length]})}),!i&&qe(kt,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:Je(kt,{justifyContent:"space-between",width:"100%",children:[Je($e,{children:[qe($e,{color:n.success,bold:!0,children:"enter"}),qe($e,{color:n.textDim,children:" select"}),o&&Je(Wa,{children:[Je($e,{color:n.textDim,children:[" ",c.dot," "]}),qe($e,{color:n.warning,bold:!0,children:"esc"}),qe($e,{color:n.textDim,children:" back"})]})]}),l&&qe(kt,{children:l})]})})]})}import{Box as Ze,Text as Be,useInput as za,useStdout as qa}from"ink";import{useCallback as Ja,useEffect as Qa,useRef as Za,useState as ec}from"react";import{jsx as de,jsxs as go}from"react/jsx-runtime";var tc=100,et=16,oc=50,rc=10,nc=30,sc=5,ic=["BANKRUPT. Your burn rate was too high.","DOWN ROUND. Valuation dropped to zero.","RUNWAY EXPIRED. Back to living with parents.","SERVER COSTS > REVENUE. You are cooked.","AUDIT FAILED. Too much tech debt."],lc=["ACQUIRED BY BIG TECH. Golden handcuffs on.","SERIES B SECURED. Keep burning cash!","IPO SUCCESSFUL. Time to buy a yacht.","PROFITABLE? No, but the vibes are great."],Gt=[["AGI_SOON","100x_DEV","LOVABLE","HYPE"],["DEEPSEEK","GEMINI","GPT","V0_DEV"],["TAB_SPAM","NO_READ","TRUST_ME","YOLO"],["SLOP","SPAGHETTI","ANY_TYPE","BUG"]];function ac(e){let t=[],r=Math.max(...Gt.flat().map(l=>l.length))+4,s=Gt[0].length*r,i=Math.floor((e-s)/2);for(let l=0;l<Gt.length;l++)for(let m=0;m<Gt[l].length;m++){let a=Gt[l][m];t.push({x:Math.max(0,i+m*r),y:1+l*2,label:a,width:a.length,alive:!0})}return t}function qr({onExit:e}){let{stdout:t}=qa(),o=t?.columns??80,r=Math.max(60,Math.min(o-4,tc)),s=Za(""),[i,l]=ec(()=>({player:{x:Math.floor(r/2),y:et-1},playerBullets:[],enemyBullets:[],invaders:ac(r),score:0,lives:5,gameOver:!1,won:!1,invaderDirection:1,tickCount:0,flash:!1,glitch:!1,rateLimited:0}));if((i.gameOver||i.won)&&!s.current){let f=i.won?lc:ic;s.current=f[Math.floor(Math.random()*f.length)]}za((f,u)=>{if(i.gameOver||i.won){(u.return||u.escape)&&e();return}if(u.escape){e();return}l(g=>{let h=g.player.x;u.leftArrow&&(h=Math.max(0,g.player.x-2)),u.rightArrow&&(h=Math.min(r-1,g.player.x+2));let S=g.playerBullets,D=g.rateLimited;return f===" "&&D===0&&(g.playerBullets.length>=2?(D=nc,S=[]):S=[...g.playerBullets,{x:h,y:g.player.y-1}]),{...g,player:{...g.player,x:h},playerBullets:S,rateLimited:D}})});let m=Ja(()=>{l(f=>{if(f.gameOver||f.won)return f;let u=f.tickCount+1,g=f.score,h=f.lives,S=f.gameOver,D=!1,F=!1,N=f.rateLimited>0?f.rateLimited-1:0,k=f.invaders.filter(x=>x.alive),w=Gt.flat().length,A=k.length/w,C=Math.max(2,Math.floor(rc*A)+1),B=.02+.08*(1-A),R=f.playerBullets.map(x=>({...x,y:x.y-1})).filter(x=>x.y>=0),K=f.enemyBullets.map(x=>({...x,y:x.y+1})).filter(x=>x.y<et),P=f.invaders.map(x=>({...x}));for(let x of R)if(x.y!==-1){for(let v of P)if(v.alive&&x.y===v.y&&x.x>=v.x&&x.x<v.x+v.width){v.alive=!1,x.y=-1,g+=100,D=!0;break}}if(R=R.filter(x=>x.y!==-1),K.some(x=>x.x===f.player.x&&x.y===f.player.y)&&(h-=1,D=!0,F=!0,K=[],h<=0&&(S=!0)),P.every(x=>!x.alive))return{...f,won:!0,score:g+h*1e3,invaders:P};if(k.length>0){let x=k.filter(v=>{let J=f.player.x>=v.x-1&&f.player.x<=v.x+v.width+1;return Math.random()<(J?B*sc:B)});if(x.length>0){let v=x[Math.floor(Math.random()*x.length)];K.push({x:v.x+Math.floor(v.width/2),y:v.y+1})}}let I=f.invaderDirection;if(u%C===0){let x=P.filter(Q=>Q.alive).map(Q=>Q.x),v=Math.min(...x);Math.max(...P.filter(Q=>Q.alive).map(Q=>Q.x+Q.width))>=r-2&&I===1&&(I=-1),v<=0&&I===-1&&(I=1),P.forEach(Q=>Q.alive&&(Q.x+=I))}return u%45===0&&(P.forEach(x=>x.alive&&(x.y+=1)),P.some(x=>x.alive&&x.y>=et-1)&&(S=!0)),{...f,playerBullets:R,enemyBullets:K,invaders:P,score:g,lives:h,gameOver:S,invaderDirection:I,tickCount:u,flash:D,glitch:F,rateLimited:N}})},[r]);Qa(()=>{let f=setInterval(m,oc);return()=>clearInterval(f)},[m]);let a=()=>{let f=Array.from({length:et},()=>Array(r).fill(" "));i.invaders.forEach(h=>{if(h.alive)for(let S=0;S<h.width;S++)h.x+S<r&&h.y<et&&(f[h.y][h.x+S]=i.glitch?"?":h.label[S])}),i.playerBullets.forEach(h=>{h.x<r&&h.y<et&&(f[h.y][h.x]="$")}),i.enemyBullets.forEach(h=>{h.x<r&&h.y<et&&(f[h.y][h.x]="*")});let{x:u,y:g}=i.player;return u<r&&g<et&&(f[g][u]=i.rateLimited>0?"X":"^"),f.map(h=>h.join("")).join(`
11
+ `)},d=i.rateLimited>0?n.error:n.accent,p=i.glitch?n.warning:i.flash?n.error:n.success;return de(Ze,{width:"100%",alignItems:"center",flexDirection:"column",children:go(Ze,{width:r+4,flexDirection:"column",alignItems:"center",children:[go(Ze,{width:r,flexDirection:"row",paddingX:1,children:[de(Ze,{width:"35%",children:de(Be,{color:d,bold:!0,children:i.rateLimited>0?`LIMIT (${i.rateLimited})`:`$${i.score}k`})}),de(Ze,{width:"30%",justifyContent:"center",children:de(Be,{color:n.warning,bold:!0,children:"VIBE INVADERS"})}),de(Ze,{width:"35%",justifyContent:"flex-end",children:go(Be,{color:n.success,bold:!0,children:["RUNWAY: ","$".repeat(i.lives)]})})]}),de(Ze,{borderStyle:"round",borderColor:i.rateLimited>0?n.error:n.border,flexDirection:"column",width:r+2,height:et+2,children:de(Be,{color:i.gameOver?n.error:p,children:a()})}),de(Ze,{marginTop:0,width:r+2,justifyContent:"center",borderStyle:"round",borderColor:n.accent,children:i.gameOver||i.won?go(Be,{color:i.won?n.success:n.error,bold:!0,children:[s.current," Val: $",i.score,"k"]}):go(Ze,{gap:1,children:[de(Be,{color:n.accent,children:"\u2190\u2192"}),de(Be,{children:" move "}),de(Be,{color:n.accent,children:"spc"}),de(Be,{children:" shoot "}),de(Be,{color:n.accent,children:"esc"}),de(Be,{children:" quit"})]})})]})})}import{jsx as ue,jsxs as Qr}from"react/jsx-runtime";var dc=[{label:"Vibe Invaders",value:"invaders",hint:"Fight vibe-coding!"},{label:"Back",value:"back",hint:"Return to CLI"}],Ms="\u2591".repeat(56);function Zr({onExit:e}){let[t,o]=Rs("menu"),[r,s]=Rs(!0);mc(()=>{let l=setInterval(()=>s(m=>!m),600);return()=>clearInterval(l)},[]);let i=l=>{if(l==="back"){e();return}o(l)};return t==="invaders"?ue(qr,{onExit:()=>o("menu")}):Qr(St,{flexDirection:"column",alignItems:"center",children:[ue(St,{marginBottom:0,children:ue(Jr,{name:"cristal",children:ue(Xo,{children:Ms})})}),ue(St,{marginBottom:0,children:ue(Jr,{name:"pastel",children:ue(cc,{text:"ARCADE",font:"chrome"})})}),ue(St,{marginBottom:0,children:ue(Jr,{name:"cristal",children:ue(Xo,{children:Ms})})}),ue(St,{marginBottom:1,marginTop:1,children:Qr(Xo,{color:r?n.warning:n.bg,bold:!0,children:[c.sparkle," SECRET UNLOCKED ",c.sparkle]})}),ue(St,{marginBottom:1,children:Qr(Xo,{color:n.textDim,children:[c.diamond," Choose your adventure ",c.diamond]})}),ue(St,{width:50,children:ue(Qe,{items:dc,onSelect:i,onCancel:e,hideFooter:!0})}),ue(ct,{hints:[{key:"\u2191\u2193",label:"navigate"},{key:"\u23CE",label:"select"},{key:"esc",label:"back",color:n.warning}]})]})}import{Box as js,Text as Wo,useInput as Oc}from"ink";import{Box as tt,Text as Ie}from"ink";import Gs from"ink-big-text";import tn from"ink-gradient";import{useAtomValue as Rc}from"jotai";import{useMemo as Mc}from"react";Y();ee();import{atom as vc}from"jotai";import{unwrap as Ec}from"jotai/utils";import{mkdir as uc,readFile as fc,writeFile as gc}from"node:fs/promises";import{homedir as pc}from"node:os";import{dirname as hc,join as yc}from"node:path";function _s(){return yc(pc(),Wr,Is)}function xc(e){if(typeof e!="object"||e===null)return null;let t=e;return typeof t.lastUpdateCheck!="number"?null:{lastUpdateCheck:t.lastUpdateCheck,latestVersion:t.latestVersion??null}}async function Os(){let e=_s();try{let t=await fc(e,"utf-8"),o=JSON.parse(t);return xc(o)}catch{return null}}async function Fs(e){let t=_s(),o={lastUpdateCheck:Date.now(),latestVersion:e};await uc(hc(t),{recursive:!0}),await gc(t,JSON.stringify(o,null,2),"utf-8")}import Ac from"package-json";import{createRequire as kc}from"node:module";import{dirname as Sc,join as bc}from"node:path";import{fileURLToPath as Cc}from"node:url";var wc=Cc(import.meta.url),Tc=Sc(wc),Ns=kc(import.meta.url),Yo;try{Yo=Ns("./package.json")}catch{Yo=Ns(bc(Tc,"../../package.json"))}var Ht=Yo.version||"0.0.0",wp=Yo.description||"CLI to install and manage skills for AI coding agents";async function $s(e){try{if(Ic(e))return null;let t=await Ac(Fo,{version:"latest"});return t.version!==e?t.version:null}catch{return null}}function Ic(e){return/-(alpha|beta|rc|snapshot|dev|canary|next)/i.test(e)}function en(){return Ht}async function Dc(e){let t=await Os(),o=t&&t.latestVersion!==e?t.latestVersion:null;try{let r=await Promise.race([$s(e),new Promise((s,i)=>setTimeout(()=>i(new Error("timeout")),3e3))]);return Fs(r??e).catch(()=>{}),r}catch{return o}}var Bc=async()=>{let e=en(),[t,o]=await Promise.all([Dc(e).catch(()=>null),Promise.resolve(Rr(T)).catch(()=>!1)]);return{updateAvailable:t,currentVersion:e,isGlobal:o,isLoading:!1}},Lc=vc(Bc()),Us=Ec(Lc,e=>e??{updateAvailable:null,currentVersion:en(),isGlobal:!1,isLoading:!0});import{jsx as te,jsxs as ot}from"react/jsx-runtime";var Hs=["#1e3a8a","#3b82f6","#0ea5e9","#06b6d4","#22d3ee"],_c="\u2500",M=({notification:e})=>{let t=Rc(Us),o=Mc(()=>{if(e)return e;let{updateAvailable:r,currentVersion:s,isGlobal:i,isLoading:l}=t;return l?null:r&&!i?ot(tt,{flexDirection:"column",alignItems:"center",children:[ot(Ie,{color:"yellow",children:[c.warning," ",ze.UPDATE_AVAILABLE(s,r)]}),ot(Ie,{color:"blue",children:[c.info," ",ze.TIP_INSTALL_UPDATE," ",te(Ie,{bold:!0,children:ze.INSTALL_COMMAND})]})]}):r?ot(Ie,{color:"yellow",children:[c.warning," ",ze.UPDATE_AVAILABLE(s,r)," (run"," ",te(Ie,{bold:!0,children:ze.UPDATE_COMMAND}),")"]}):i?null:ot(Ie,{color:"blue",children:[c.info," ",ze.TIP_INSTALL_ACCESS," ",te(Ie,{bold:!0,children:ze.INSTALL_COMMAND})]})},[e,t]);return ot(tt,{flexDirection:"column",paddingBottom:1,children:[ot(tt,{flexDirection:"column",alignItems:"center",marginBottom:1,children:[te(tt,{marginBottom:-1,children:te(tn,{colors:["#1e3a8a","#3b82f6"],children:te(Gs,{text:"TLC",font:"tiny"})})}),te(tt,{children:te(tn,{colors:Hs,children:te(Gs,{text:"AGENT SKILLS",font:"block"})})}),ot(tt,{marginTop:-1,alignItems:"center",children:[te(Ie,{color:"#334155",children:"\u2500\u2500\u2500\u2500\u2500\u2500 "}),ot(Ie,{color:"white",bold:!0,children:["VERSION ",Ht]}),te(Ie,{color:"#334155",children:" \u2500\u2500\u2500\u2500\u2500\u2500"})]}),te(tt,{marginTop:1,children:te(Ie,{color:"#64748b",italic:!0,children:ze.DESCRIPTION})}),o&&te(tt,{marginTop:1,children:o})]}),te(tt,{marginTop:o?0:1,justifyContent:"center",children:te(tn,{colors:Hs,children:te(Ie,{children:_c.repeat(60)})})})]})};import{jsx as po,jsxs as on}from"react/jsx-runtime";function Ks({onSelect:e,onBack:t,onCredits:o}){let r=[{label:"Install new skills",value:"install",hint:"browse and select skills to install"},{label:"Update existing skills",value:"update",hint:"check for content changes"},{label:"Remove installed skills",value:"remove",hint:"uninstall skills from agents"}];Oc(i=>{i==="c"&&o&&o()});let s=on(Wo,{children:[po(Wo,{color:n.accent,bold:!0,children:"c"}),po(Wo,{color:n.textDim,children:" credits"})]});return on(js,{flexDirection:"column",paddingX:1,children:[po(M,{}),po(js,{marginBottom:1,children:on(Wo,{bold:!0,color:n.primary,children:[c.diamond," What would you like to do?"]})}),po(Qe,{items:r,onSelect:e,onCancel:t,footerRight:s})]})}Y();import{Box as Xt,Text as rn,useInput as Xc,useStdout as Yc}from"ink";import Wc from"ink-spinner";import{useState as zc}from"react";import{Box as Le,Text as jt,useInput as Gc}from"ink";import{useEffect as Hc}from"react";import{useEffect as Fc,useState as Nc}from"react";import{Fragment as $c,jsx as Uc}from"react/jsx-runtime";var Vs=({visible:e,duration:t=250,children:o})=>{let[r,s]=Nc(e?1:0);return Fc(()=>{if(e&&r===1||!e&&r===0)return;let i=Date.now(),l=r,m=e?1:0,d=setInterval(()=>{let f=Date.now()-i,u=Math.min(f/t,1),g=l+(e?u:-u)*Math.abs(m-l),h=Math.max(0,Math.min(1,g));s(h),u>=1&&(clearInterval(d),s(m))},16);return()=>{clearInterval(d)}},[e,t]),!e&&r<=.05?null:Uc($c,{children:o})};import{jsx as oe,jsxs as zo}from"react/jsx-runtime";var Kt=({visible:e,onDismiss:t,shortcuts:o})=>{Gc(()=>{e&&t()},{isActive:e}),Hc(()=>{let d;return e&&(d=setTimeout(()=>{t()},8e3)),()=>{d&&clearTimeout(d)}},[e,t]);let r=Math.ceil(o.length/2),s=o.slice(0,r),i=o.slice(r),l=({label:d})=>oe(Le,{flexShrink:0,children:oe(jt,{backgroundColor:n.bgLight,color:n.accent,bold:!0,children:` ${d} `})}),m=({entry:d})=>zo(Le,{marginBottom:0,gap:1,children:[oe(Le,{width:10,justifyContent:"flex-end",flexShrink:0,children:oe(l,{label:d.key})}),oe(jt,{color:n.textDim,children:d.description})]}),a="\u2500".repeat(48);return oe(Vs,{visible:e,duration:200,children:zo(Le,{borderStyle:"round",borderColor:n.border,backgroundColor:n.bg,paddingX:2,paddingY:1,flexDirection:"column",width:56,children:[oe(Le,{justifyContent:"center",marginBottom:1,children:zo(jt,{color:n.accent,bold:!0,children:[c.sparkle," Keyboard Shortcuts"]})}),oe(Le,{justifyContent:"center",children:oe(jt,{color:n.border,children:a})}),zo(Le,{marginTop:1,gap:2,children:[oe(Le,{flexDirection:"column",gap:1,flexGrow:1,children:s.map(d=>oe(m,{entry:d},d.key))}),oe(Le,{flexDirection:"column",gap:1,flexGrow:1,children:i.map(d=>oe(m,{entry:d},d.key))})]}),oe(Le,{justifyContent:"center",marginTop:1,children:oe(jt,{color:n.border,children:a})}),oe(Le,{marginTop:1,justifyContent:"center",children:oe(jt,{color:n.textMuted,children:"press any key to dismiss"})})]})})};import{Box as bt,Text as rt,useInput as jc}from"ink";import{useEffect as Kc,useRef as Vc,useState as qo}from"react";import{jsx as Re,jsxs as Ct}from"react/jsx-runtime";function Vt({items:e,onSubmit:t,onCancel:o,onChange:r,initialSelected:s=[],limit:i=10}){let[l,m]=qo(s),[a,d]=qo(0),[p,f]=qo(0),[u,g]=qo(!1),h=Vc(s);Kc(()=>{let k=h.current;(k.length!==s.length||k.some((A,C)=>A!==s[C]))&&(m(s),h.current=s)},[s]),jc((k,w)=>{if(k==="?"){g(B=>!B);return}if(u){g(!1);return}if(w.return){t(l);return}if(w.escape&&o){o();return}let A=a,C=p;if(w.upArrow?A=a>0?a-1:e.length-1:w.downArrow&&(A=a<e.length-1?a+1:0),A<C?C=A:A>=C+i&&(C=A-i+1),w.upArrow&&a===0?C=Math.max(0,e.length-i):w.downArrow&&a===e.length-1&&(C=0),A!==a&&(d(A),f(C)),k===" "){let B=e[a];if(l.includes(B.value)){let R=l.filter(K=>K!==B.value);m(R),r?.(R)}else{let R=[...l,B.value];m(R),r?.(R)}}if(k==="a"&&w.ctrl)if(l.length===e.length)m([]),r?.([]);else{let B=e.map(R=>R.value);m(B),r?.(B)}});let S=e.slice(p,p+i),D=p>0,F=e.length>p+i,N=[{key:"\u2191/\u2193",description:"Navigate"},{key:"space",description:"Toggle selection"},{key:"enter",description:"Confirm"},{key:"ctrl+a",description:"Select all / none"},...o?[{key:"esc",description:"Cancel"}]:[]];return u?Re(bt,{flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center",children:Re(Kt,{visible:u,onDismiss:()=>g(!1),shortcuts:N})}):Ct(bt,{flexDirection:"column",children:[D&&Re(bt,{justifyContent:"center",marginBottom:1,children:Ct(rt,{color:n.textDim,children:[c.arrowUp," ",c.arrowUp," ",c.arrowUp]})}),S.map((k,w)=>{let A=w+p,C=A===a,B=l.includes(k.value),R=C?c.bullet:" ",K=B?n.success:n.accent,P=B?c.checkboxActive:c.checkboxInactive,I=B?n.success:n.textMuted,x=C?n.primary:B?n.primaryLight:n.text;return Ct(bt,{backgroundColor:C?n.bgLight:void 0,paddingX:1,children:[Re(bt,{width:2,children:Re(rt,{color:K,children:R})}),Re(bt,{width:2,children:Re(rt,{color:I,children:P})}),Re(rt,{color:x,bold:C,children:k.label}),k.hint&&Ct(rt,{color:B?n.success:n.textDim,children:[" ",c.dot," ",k.hint]})]},`${String(k.value)}-${A}`)}),F&&Re(bt,{justifyContent:"center",marginTop:1,children:Ct(rt,{color:n.textDim,children:[c.arrowDown," ",c.arrowDown," ",c.arrowDown]})}),Re(ct,{hints:[{key:"space",label:"toggle"},{key:"enter",label:"confirm",color:n.success},...o?[{key:"esc",label:"back",color:n.warning}]:[],{key:"?",label:"help"}],status:l.length>0?Ct(rt,{children:[Ct(rt,{color:n.success,bold:!0,children:[c.checkboxActive," ",l.length]}),Re(rt,{color:n.textDim,children:" selected"})]}):void 0})]})}ee();import{Fragment as Xs,jsx as Ue,jsxs as wt}from"react/jsx-runtime";var qc=28;function Yt({onSelect:e,onBack:t}){let{stdout:o}=Yc(),r=o?.rows??40,s=Math.max(3,r-qc),{allAgents:i,installedAgents:l,selectedAgents:m,setSelectedAgents:a,loading:d}=As(),p=[{key:"space",description:"Toggle selection"},{key:"enter",description:"Confirm"},{key:"ctrl+a",description:"Select all"},{key:"esc",description:"Go back"}],[f,u]=zc(!1);Xc(h=>{h==="?"&&u(S=>!S)});let g=i.map(h=>{let S=De(T,h),D=l.includes(h);return{label:S.displayName,value:h,hint:D?`${c.check} detected`:void 0}});return d?wt(Xt,{flexDirection:"column",paddingX:1,children:[Ue(M,{}),Ue(Xt,{marginTop:1,children:wt(rn,{color:n.accent,children:[Ue(Wc,{type:"dots"})," Scanning for installed agents..."]})})]}):wt(Xt,{flexDirection:"column",paddingX:1,minHeight:20,children:[Ue(M,{}),f?wt(Xs,{children:[Ue(Xt,{flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center",children:Ue(Kt,{visible:f,onDismiss:()=>u(!1),shortcuts:p})}),Ue(ct,{hints:[{key:"space",label:"toggle"},{key:"enter",label:"confirm",color:n.success},...t?[{key:"esc",label:"back",color:n.warning}]:[],{key:"?",label:"help"}]})]}):wt(Xs,{children:[Ue(Xt,{marginBottom:1,children:wt(rn,{bold:!0,color:n.primary,children:[c.diamond," Where do you want to install skills?"]})}),Ue(Xt,{marginBottom:1,children:wt(rn,{color:n.textDim,children:[l.length," agents detected on this machine"]})}),Ue(Vt,{items:g,initialSelected:m,onSubmit:e,onCancel:t,onChange:a,limit:s})]})]})}import{Box as mt,Text as G,useInput as rm,useStdout as nm}from"ink";import Qs from"ink-big-text";import or from"ink-gradient";import{existsSync as sm}from"node:fs";import{dirname as Zs,join as im}from"node:path";import{fileURLToPath as lm}from"node:url";import{useCallback as am,useEffect as tr,useMemo as cm,useRef as ei,useState as Wt}from"react";import{execSync as Jc,spawn as Jo}from"node:child_process";import{platform as Qc}from"node:os";function Zc(e){try{return Jc(`which ${e}`,{stdio:"ignore"}),!0}catch{return!1}}function em(e){let t=[{cmd:"mpv",args:["--no-video","--no-terminal",e]},{cmd:"ffplay",args:["-nodisp","-autoexit","-loglevel","quiet",e]},{cmd:"paplay",args:[e]},{cmd:"aplay",args:[e]}];for(let{cmd:o,args:r}of t)if(Zc(o))return Jo(o,r,{stdio:"ignore"});return Jo("mpv",["--no-video","--no-terminal",e],{stdio:"ignore"})}function Ys(e){try{let t=Qc(),o;return t==="darwin"?o=Jo("afplay",[e],{stdio:"ignore"}):t==="win32"?o=Jo("powershell",["-c",`(New-Object Media.SoundPlayer "${e}").PlaySync()`],{stdio:"ignore"}):o=em(e),o.on("error",()=>{}),o}catch{return null}}function Qo(e){e&&!e.killed&&e.kill()}import Ws from"ky";var zs="https://api.github.com/repos/tech-leads-club/agent-skills",tm=`${zs}/contributors`,Zo=null,er=null;async function qs(){if(Zo)return Zo;try{return Zo=(await Ws.get(tm,{headers:{Accept:"application/vnd.github.v3+json"},timeout:1e4}).json()).filter(({login:t})=>!om(t)).map(({login:t,avatar_url:o,contributions:r})=>({login:t,avatarUrl:o,contributions:r})),Zo}catch{return[]}}async function Js(){if(er!==null)return er;try{return er=(await Ws.get(zs,{headers:{Accept:"application/vnd.github.v3+json"},timeout:1e4}).json()).stargazers_count,er}catch{return 0}}function om(e){return e.endsWith("[bot]")}import{jsx as O,jsxs as Me}from"react/jsx-runtime";var mm=220,an=52,zt=["#1e3a8a","#3b82f6","#0ea5e9","#06b6d4","#22d3ee"],dm=14,ln=500,oi=60,nn="\u2500".repeat(an-4),ti=40,sn=["#f59e0b","#ef4444","#ec4899","#a855f7"],um={1:{badge:`${c.star}${c.star}${c.star}`,color:"#f59e0b"},2:{badge:`${c.star}${c.star}`,color:"#c0c0c0"},3:{badge:c.star,color:"#cd7f32"}};function fm(e,t){let o=[];o.push({type:"blank"}),o.push({type:"text",text:"A Tech Leads Club Production",color:"#94a3b8"}),o.push({type:"blank"}),o.push({type:"blank"}),o.push({type:"gradient",text:`${c.sparkle} C O N T R I B U T O R S ${c.sparkle}`,gradientColors:sn}),o.push({type:"gradient",text:nn,gradientColors:zt}),o.push({type:"blank"});for(let s=0;s<e.length;s++){let i=e[s];o.push({type:"contributor",rank:s+1,login:i.login,contributions:i.contributions})}o.push({type:"blank"}),o.push({type:"blank"}),o.push({type:"gradient",text:`${c.star} S T A T S ${c.star}`,gradientColors:sn}),o.push({type:"gradient",text:nn,gradientColors:zt}),o.push({type:"blank"}),t>0&&o.push({type:"text",text:`${c.star} GitHub Stars \xB7\xB7\xB7\xB7\xB7 ${t}`,color:"#f59e0b",bold:!0}),o.push({type:"text",text:`${c.diamond} Contributors \xB7\xB7\xB7\xB7\xB7 ${e.length}`,color:"#06b6d4"});let r=e.reduce((s,i)=>s+i.contributions,0);return o.push({type:"text",text:`${c.check} Contributions \xB7\xB7\xB7\xB7 ${r}`,color:"#22c55e"}),o.push({type:"blank"}),o.push({type:"blank"}),o.push({type:"gradient",text:`${c.sparkle} S P E C I A L T H A N K S ${c.sparkle}`,gradientColors:sn}),o.push({type:"gradient",text:nn,gradientColors:zt}),o.push({type:"blank"}),o.push({type:"text",text:"To every contributor, stargazer,",color:"#94a3b8"}),o.push({type:"text",text:"and community member who makes",color:"#94a3b8"}),o.push({type:"text",text:"this project possible.",color:"#94a3b8"}),o.push({type:"blank"}),o.push({type:"text",text:"Built with \u2665 by the community",color:"#ef4444"}),o.push({type:"blank"}),o.push({type:"gradient",text:"github.com/tech-leads-club/agent-skills",gradientColors:zt}),o.push({type:"blank"}),o.push({type:"blank"}),o.push({type:"blank"}),o}function gm(){try{let e=Zs(lm(import.meta.url));for(let t=0;t<5;t++){let o=im(e,"assets","chiptune.mp3");if(sm(o))return o;e=Zs(e)}return null}catch{return null}}function pm({rank:e,login:t,contributions:o}){let r=um[e],s=r?.color??"#e2e8f0",i=e.toString().padStart(2),l=`@${t}`,m=`${o}`,a=r?` ${r.badge}`:"",d=5+l.length+a.length+1+m.length,p=Math.max(2,an-4-d),f="\xB7".repeat(p);return Me(G,{children:[Me(G,{color:"#64748b",children:[i,". "]}),O(G,{color:s,bold:!!r,children:l}),O(G,{color:r?.color??"#94a3b8",children:a}),Me(G,{color:"#334155",children:[" ",f," "]}),O(G,{color:"#22c55e",bold:!0,children:m})]})}function hm({line:e}){switch(e.type){case"blank":return O(G,{children:" "});case"text":return O(G,{color:e.color,bold:e.bold,children:e.text});case"gradient":return O(or,{colors:[...e.gradientColors],children:O(G,{children:e.text})});case"contributor":return O(pm,{rank:e.rank,login:e.login,contributions:e.contributions})}}function ym({speed:e,paused:t}){if(t)return Me(G,{color:n.warning,bold:!0,children:[" ",c.bar,c.bar," PAUSED"]});let o=Math.round((ln-e)/(ln-oi)*4)+1,r="\u25AE".repeat(o)+"\u25AF".repeat(5-o);return Me(G,{color:n.textMuted,children:[" ",r]})}function rr({onExit:e}){let{stdout:t}=nm(),o=t?.rows??24,r=Math.max(6,o-dm-4),[s,i]=Wt([]),[l,m]=Wt(0),[a,d]=Wt(!0),[p,f]=Wt(0),[u,g]=Wt(mm),[h,S]=Wt(!1),D=ei(null),F=ei(null);tr(()=>{Promise.all([qs(),Js()]).then(([I,x])=>{i(I),m(x),d(!1)})},[]),tr(()=>{let I=gm();return I&&(D.current=Ys(I)),()=>{Qo(D.current)}},[]);let N=cm(()=>fm(s,l),[s,l]),k=N.length+r,w=p>=k,A=am(()=>{f(I=>I>=k?I:I+1)},[k]);if(tr(()=>{if(a||h||w){F.current&&clearInterval(F.current),F.current=null;return}return F.current=setInterval(A,u),()=>{F.current&&clearInterval(F.current)}},[a,h,w,u,A]),tr(()=>{if(!w)return;let I=setTimeout(()=>{Qo(D.current),e()},3e3);return()=>clearTimeout(I)},[w,e]),rm((I,x)=>{if(x.escape){Qo(D.current),e();return}if(I===" "){S(v=>!v);return}if(x.upArrow){g(v=>Math.max(oi,v-ti));return}if(x.downArrow){g(v=>Math.min(ln,v+ti));return}}),a)return O(mt,{flexDirection:"column",alignItems:"center",padding:2,children:O(G,{color:n.accent,children:"Loading contributors..."})});let C={type:"blank"},B=Array(r).fill(C),R=Array(r).fill(C),P=[...B,...N,...R].slice(p,p+r);return Me(mt,{flexDirection:"column",alignItems:"center",children:[O(mt,{marginBottom:-1,children:O(or,{colors:["#1e3a8a","#3b82f6"],children:O(Qs,{text:"TLC",font:"tiny"})})}),O(mt,{children:O(or,{colors:[...zt],children:O(Qs,{text:"AGENT SKILLS",font:"block"})})}),O(mt,{children:O(or,{colors:[...zt],children:O(G,{children:"\u2500".repeat(60)})})}),O(mt,{flexDirection:"column",alignItems:"center",height:r,width:an,children:P.map((I,x)=>O(mt,{justifyContent:"center",children:O(hm,{line:I})},`cl-${p}-${x}`))}),Me(mt,{marginTop:1,gap:2,children:[Me(G,{children:[O(G,{color:n.accent,bold:!0,children:"space"}),O(G,{color:n.textDim,children:" pause"})]}),O(G,{color:n.textMuted,children:c.dot}),Me(G,{children:[Me(G,{color:n.accent,bold:!0,children:[c.arrowUp,c.arrowDown]}),O(G,{color:n.textDim,children:" speed"})]}),O(ym,{speed:u,paused:h}),O(G,{color:n.textMuted,children:c.dot}),Me(G,{children:[O(G,{color:n.warning,bold:!0,children:"esc"}),O(G,{color:n.textDim,children:" back"})]})]})]})}import{Box as ye,Text as W,useInput as xm}from"ink";import{useState as cn}from"react";import{jsx as $,jsxs as xe}from"react/jsx-runtime";function ri({onConfirm:e,onBack:t,initialMethod:o="copy",initialGlobal:r=!1}){let[s,i]=cn("method"),[l,m]=cn(o),[a,d]=cn(r);return s==="method"?xe(ye,{flexDirection:"column",paddingX:1,children:[$(M,{}),$(ye,{marginBottom:1,children:xe(W,{bold:!0,color:n.primary,children:[c.diamond," Choose installation method:"]})}),$(Qe,{items:[{label:"Copy",value:"copy",hint:"independent copies (recommended)"},{label:"Symlink",value:"symlink",hint:"shared source (may not work with all agents)"}],onSelect:p=>{m(p),i("scope")},onCancel:t})]}):s==="scope"?xe(ye,{flexDirection:"column",paddingX:1,children:[$(M,{}),$(ye,{marginBottom:1,children:xe(W,{bold:!0,color:n.primary,children:[c.diamond," Choose installation scope:"]})}),$(Qe,{items:[{label:"Local",value:!1,hint:"this project only"},{label:"Global",value:!0,hint:"user home directory"}],onSelect:p=>{d(p),i("confirm")},onCancel:()=>i("method")})]}):$(km,{method:l,isGlobal:a,onConfirm:()=>e({method:l,global:a}),onBack:()=>i("scope")})}function km({method:e,isGlobal:t,onConfirm:o,onBack:r}){return xm((s,i)=>{(i.return||s==="y"||s==="Y")&&o(),(i.escape||s==="n"||s==="N")&&r()}),xe(ye,{flexDirection:"column",paddingX:1,children:[$(M,{}),xe(ye,{flexDirection:"column",borderStyle:"round",borderColor:n.accent,paddingX:2,paddingY:1,children:[$(ye,{marginBottom:1,children:xe(W,{bold:!0,color:n.accent,children:[c.diamond," Ready to install"]})}),xe(ye,{children:[$(ye,{width:10,children:$(W,{color:n.textDim,children:"Method"})}),$(W,{color:n.text,bold:!0,children:e==="copy"?"Copy":"Symlink"}),xe(W,{color:n.textMuted,children:[" ",c.dot," ",e==="copy"?"Recommended":"Developer mode"]})]}),xe(ye,{children:[$(ye,{width:10,children:$(W,{color:n.textDim,children:"Scope"})}),$(W,{color:n.text,bold:!0,children:t?"Global":"Local"}),xe(W,{color:n.textMuted,children:[" ",c.dot," ",t?"User home":"This project"]})]})]}),$(ye,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:$(ye,{justifyContent:"space-between",width:"100%",children:xe(W,{children:[$(W,{color:n.success,bold:!0,children:"Y"}),$(W,{color:n.textDim,children:" / "}),$(W,{color:n.success,bold:!0,children:"enter"}),$(W,{color:n.textDim,children:" confirm"}),xe(W,{color:n.textDim,children:[" ",c.dot," "]}),$(W,{color:n.warning,bold:!0,children:"N"}),$(W,{color:n.textDim,children:" / "}),$(W,{color:n.warning,bold:!0,children:"esc"}),$(W,{color:n.textDim,children:" back"})]})})})]})}import{Box as Pt,Text as vt,useInput as id}from"ink";import ld from"ink-spinner";import{useAtom as Ti,useAtomValue as ad,useSetAtom as cd}from"jotai";import{useEffect as md,useMemo as dd,useState as It}from"react";Y();ee();import{atom as ni}from"jotai";import{unwrap as Sm}from"jotai/utils";var bm=async()=>{let e=Io(T),t={};for(let o of e){let[r,s]=await Promise.all([jr(T,o,!1).catch(()=>[]),jr(T,o,!0).catch(()=>[])]);for(let i of new Set([...r,...s]))t[i]||(t[i]=[]),t[i].includes(o)||t[i].push(o)}return t},mn=ni(0),Cm=ni(async e=>(e(mn),bm())),Ge=Sm(Cm,e=>e??{});import{atom as si}from"jotai";var nr=si([]),ii=si([]);import{Box as He,Text as ie,useInput as wm}from"ink";import{jsx as le,jsxs as _e}from"react/jsx-runtime";function sr({results:e,onExit:t,title:o="Installation Complete",successLabel:r="succeeded"}){wm((g,h)=>{(h.return||h.escape)&&t()});let s=new Set(e.filter(g=>g.success).map(g=>g.skill)),i=new Set(e.filter(g=>!g.success).map(g=>g.skill)),l=s.size,m=i.size,a=l===0&&m>0,d=m>0,p=a?n.error:d?n.warning:n.success,f=a?`${c.cross} Installation Failed`:d?`${c.warning} Partially Installed`:`${c.check} ${o}`,u=a?n.error:d?n.warning:n.success;return _e(He,{flexDirection:"column",paddingX:1,children:[le(M,{}),_e(He,{flexDirection:"column",borderStyle:"round",borderColor:p,paddingX:2,paddingY:1,children:[le(He,{marginBottom:1,children:le(ie,{color:u,bold:!0,children:f})}),e.map((g,h)=>_e(He,{flexDirection:"column",children:[_e(He,{paddingX:1,children:[le(He,{width:2,children:le(ie,{color:g.success?n.success:n.error,children:g.success?c.check:c.cross})}),le(ie,{color:g.success?n.text:n.error,children:g.skill}),_e(ie,{color:n.textDim,children:[" ",c.arrow," ",g.agent]})]}),!g.success&&g.error&&le(He,{paddingLeft:4,children:le(ie,{color:n.error,dimColor:!0,children:g.error})})]},h)),(l>0||m>0)&&le(He,{marginTop:1,children:_e(ie,{color:n.textDim,children:[l>0&&_e(ie,{color:n.success,children:[l," ",r]}),l>0&&m>0&&_e(ie,{children:[" ",c.dot," "]}),m>0&&_e(ie,{color:n.error,children:[m," failed"]})]})}),le(He,{marginTop:1,children:_e(ie,{color:n.textDim,children:["View details: ",le(ie,{color:n.accent,children:"agent-skills audit"})]})})]}),le(He,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:_e(ie,{children:[le(ie,{color:n.success,bold:!0,children:"enter"}),le(ie,{color:n.textDim,children:" / "}),le(ie,{color:n.warning,bold:!0,children:"esc"}),le(ie,{color:n.textDim,children:" exit"})]})})]})}import{Box as V,Text as U,useInput as Pm}from"ink";import vm from"ink-spinner";import{useAtomValue as li}from"jotai";import{useMemo as dn,useState as un}from"react";Y();ee();import{atom as Tm}from"jotai";import{unwrap as Am}from"jotai/utils";var Im=Tm(async()=>Mo(T)),qt=Am(Im,e=>e??new Map);import{jsx as _,jsxs as j}from"react/jsx-runtime";function ir({selectedAgents:e,onExit:t}){let[o,r]=un(e||[]),{removeMultiple:s,progress:i,results:l}=Es(),m=li(Ge),a=li(qt),[d,p]=un(e?"select":"agent-select"),[f,u]=un([]),g=e||o,h=dn(()=>{let k={};return Object.entries(m).forEach(([w,A])=>{let C=A.filter(B=>g.includes(B));C.length>0&&(k[w]=C)}),k},[m,g]),S=dn(()=>Object.keys(h),[h]),D=dn(()=>S.map(k=>{let w=a instanceof Map&&a.has(k),A=`${h[k].length} agents: ${h[k].join(", ")}`,C=w?`${A} \u26A0 deprecated`:A;return{label:k,value:k,hint:C}}),[S,h,a]);if(Pm((k,w)=>{d==="done"&&(w.return||w.escape)&&t(),S.length===0&&w.escape&&t()}),d==="agent-select")return _(Yt,{onSelect:k=>{r(k),p("select")},onBack:t});if(S.length===0)return j(V,{flexDirection:"column",paddingX:1,children:[_(M,{}),_(V,{borderStyle:"round",borderColor:n.warning,paddingX:2,paddingY:1,children:_(U,{color:n.warning,children:"No skills found to remove for the selected agents."})}),_(V,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:j(U,{children:[_(U,{color:n.warning,bold:!0,children:"esc"}),_(U,{color:n.textDim,children:" exit"})]})})]});let F=k=>{k.length!==0&&(u(k),p("confirm"))},N=async()=>{p("removing");let k=f.map(w=>({name:w,agents:h[w]||[]}));await s(k),p("done")};if(d==="select")return j(V,{flexDirection:"column",paddingX:1,children:[_(M,{}),_(V,{marginBottom:1,children:j(U,{bold:!0,color:n.error,children:[c.diamond," Select skills to remove:"]})}),_(Vt,{items:D,onSubmit:F,onCancel:t})]});if(d==="confirm")return j(V,{flexDirection:"column",paddingX:1,children:[_(M,{}),j(V,{flexDirection:"column",borderStyle:"round",borderColor:n.error,paddingX:2,paddingY:1,children:[_(V,{marginBottom:1,children:j(U,{color:n.error,bold:!0,children:[c.cross," Remove ",f.length," skill",f.length>1?"s":"","?"]})}),f.map(k=>j(V,{paddingX:1,children:[_(V,{width:2,children:_(U,{color:n.error,children:c.dot})}),_(U,{color:n.textDim,children:k})]},k))]}),_(V,{marginTop:1,children:_(Qe,{items:[{label:"Yes, remove them",value:"yes"},{label:"No, cancel",value:"no"}],onSelect:k=>{k==="yes"?N():p("select")}})})]});if(d==="removing")return j(V,{flexDirection:"column",paddingX:1,children:[_(M,{}),j(V,{marginTop:1,children:[j(U,{color:n.accent,children:[_(vm,{type:"dots"})," "]}),_(U,{children:"Removing skills..."})]}),_(V,{marginTop:1,paddingX:2,children:j(U,{color:n.textDim,children:[c.arrow," ",i.skill," (",i.current,"/",i.total,")"]})})]});if(d==="done"){let k=l.filter(C=>C.success).length,w=l.filter(C=>!C.success).length,A=k===0;return j(V,{flexDirection:"column",paddingX:1,children:[_(M,{}),j(V,{flexDirection:"column",borderStyle:"round",borderColor:A?n.error:n.success,paddingX:2,paddingY:1,children:[_(V,{marginBottom:1,children:j(U,{color:A?n.error:n.success,bold:!0,children:[A?c.cross:c.check," ",A?"Removal Failed":"Removal Complete"]})}),l.map((C,B)=>j(V,{paddingX:1,children:[_(V,{width:2,children:_(U,{color:C.success?n.success:n.error,children:C.success?c.check:c.cross})}),_(U,{color:C.success?n.text:n.error,children:C.skill}),j(U,{color:n.textDim,children:[" ",c.arrow," ",C.agent]}),!C.success&&C.error&&j(U,{color:n.error,children:[" (",C.error,")"]})]},B)),(k>0||w>0)&&_(V,{marginTop:1,children:j(U,{color:n.textDim,children:[k>0&&j(U,{color:n.success,children:[k," succeeded"]}),k>0&&w>0&&j(U,{children:[" ",c.dot," "]}),w>0&&j(U,{color:n.error,children:[w," failed"]})]})})]}),_(V,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:j(U,{children:[_(U,{color:n.success,bold:!0,children:"enter"}),_(U,{color:n.textDim,children:" / "}),_(U,{color:n.warning,bold:!0,children:"esc"}),_(U,{color:n.textDim,children:" exit"})]})})]})}return null}Y();import{Box as q,Text as Pe,useInput as qm,useStdout as Jm}from"ink";import{useAtomValue as hn}from"jotai";import{useMemo as yn,useState as nt}from"react";import{Box as ci,Text as Jt}from"ink";import{useMemo as Em}from"react";function ai(e,t){return e>0?`(${e}/${t})`:`(${t})`}import{jsx as lr,jsxs as ar}from"react/jsx-runtime";var mi=({name:e,totalCount:t,installedCount:o=0,isExpanded:r=!1,isFocused:s=!1})=>{let i=Em(()=>ai(o,t),[o,t]),l=r?"\u25BE":"\u25B8";return ar(ci,{children:[lr(ci,{width:2,children:s?lr(Jt,{color:n.accent,children:c.bullet}):lr(Jt,{children:" "})}),ar(Jt,{color:s?n.accent:n.primaryLight,bold:!0,children:[l," "]}),lr(Jt,{color:s?n.accent:n.text,bold:!0,children:e}),ar(Jt,{color:o>0?n.success:n.textMuted,children:[" ",i]}),!r&&s&&ar(Jt,{color:n.textDim,children:[" ",c.dot," press space to expand"]})]})};import{Box as Uy,Text as Gy,useInput as Hy}from"ink";import{useState as Ky}from"react";import{jsx as Yy,jsxs as Wy}from"react/jsx-runtime";import{Box as cr,Text as di}from"ink";import Dm from"ink-text-input";import{jsx as Qt,jsxs as Bm}from"react/jsx-runtime";var ui=({query:e,onChange:t,total:o,filtered:r,isLoading:s=!1,focus:i=!0})=>Bm(cr,{borderStyle:"round",borderColor:i?n.accent:n.border,paddingX:1,children:[Qt(cr,{marginRight:1,children:Qt(di,{children:"\u{1F50D}"})}),Qt(cr,{flexGrow:1,children:Qt(Dm,{value:e,onChange:t,placeholder:"Type to filter skills...",focus:i})}),Qt(cr,{marginLeft:1,children:Qt(di,{color:n.textDim,children:s?"Loading...":`${r}/${o} skills`})})]});import{Box as Tt,Text as mr}from"ink";import{Box as Lm,Text as Rm}from"ink";import{jsx as Om,jsxs as _m}from"react/jsx-runtime";var Mm={installed:{icon:c.check,label:"installed",color:n.success,bg:"#052e16"},update:{icon:c.arrowUp,label:"update",color:n.warning,bg:"#422006"},new:{icon:c.sparkle,label:"new",color:n.accent,bg:"#083344"},deprecated:{icon:c.warning,label:"deprecated",color:n.warning,bg:"#422006"}};function fi({status:e}){let t=Mm[e];return t?Om(Lm,{children:_m(Rm,{backgroundColor:t.bg,color:t.color,children:[" ",t.icon," ",t.label," "]})}):null}import{jsx as je,jsxs as gi}from"react/jsx-runtime";function pi({name:e,description:t,status:o,selected:r=!1,focused:s=!1,readOnly:i=!1}){let l=o==="installed",m=l?c.checkboxActive:r?c.checkboxActive:c.checkboxInactive,a=l?n.textMuted:r?n.success:n.textMuted,d=s?c.bullet:" ",p=l?n.textMuted:r?n.success:n.accent,f=l?n.textDim:s?n.primary:r?n.primaryLight:n.text,u=n.textMuted,g=s?n.bgLight:void 0;return gi(Tt,{flexDirection:"column",backgroundColor:g,children:[gi(Tt,{children:[je(Tt,{width:2,flexShrink:0,children:je(mr,{color:p,children:d})}),!i&&je(Tt,{width:2,flexShrink:0,children:je(mr,{color:a,children:m})}),je(Tt,{flexGrow:1,children:je(mr,{bold:!0,color:f,children:e})}),o&&je(Tt,{marginLeft:1,flexShrink:0,children:je(fi,{status:o})})]}),je(Tt,{paddingLeft:i?2:4,children:je(mr,{color:u,wrap:"truncate",children:t})})]})}import Ke from"chalk";import{Box as At,Text as re,useInput as Fm,useStdout as Nm}from"ink";import $m from"ink-spinner";import xi,{useCallback as Um,useEffect as Gm,useMemo as Hm,useRef as gn,useState as jm}from"react";var fn={web:"#3b82f6",devops:"#10b981",data:"#8b5cf6",mobile:"#f59e0b",testing:"#ef4444",ai:"#06b6d4",security:"#ec4899",default:"#64748b"};function hi(e){return Object.prototype.hasOwnProperty.call(fn,e)?fn[e]:fn.default}Y();import{Fragment as Wm,jsx as ge,jsxs as Se}from"react/jsx-runtime";var Km=6,Vm=2,Xm=2,ke={h1:e=>Ke.hex(n.primary).bold(e),h2:e=>Ke.hex(n.primaryLight).bold(e),h3:e=>Ke.hex(n.accent).bold(e),text:e=>Ke.hex(n.textDim)(e),muted:e=>Ke.hex(n.textMuted)(e),code:e=>Ke.hex(n.accent)(e),border:e=>Ke.hex(n.border)(e),bold:e=>Ke.hex(n.text).bold(e),dim:e=>Ke.dim(e),indicator:e=>Ke.hex(n.textDim)(e)};function yi(e){return e.replace(/\*\*(.+?)\*\*/g,(t,o)=>ke.bold(o)).replace(/\*(.+?)\*/g,(t,o)=>ke.dim(o)).replace(/`(.+?)`/g,(t,o)=>ke.code(o))}function Ym(e){let t=[];for(let o of e)switch(o.type){case"heading":{let r=o.level===1?c.diamond:o.level===2?c.arrow:c.dot,s=o.level===1?ke.h1:o.level===2?ke.h2:ke.h3;o.level===1&&t.length>0&&t.push(""),t.push(s(`${r} ${o.text}`));break}case"paragraph":t.push(ke.text(yi(o.text)));break;case"list-item":{let r=" ".repeat(o.indent);t.push(`${r}${ke.muted(c.bullet)} ${ke.text(yi(o.text))}`);break}case"code-block":o.language&&t.push(ke.dim(` ${o.language}`));for(let r of o.lines)t.push(` ${ke.border(c.bar)} ${ke.code(r)}`);break;case"hr":t.push(ke.border("\u2500".repeat(30)));break;case"blank":t.push("");break}return t}var ki=xi.memo(({skill:e,metadata:t})=>{let o=hi(e.category??"default"),r=t?.author?` ${c.dot} @${t.author}`:"",s=t?.files?.length?` ${c.dot} ${t.files.length} file${t.files.length!==1?"s":""}`:"";return Se(At,{flexDirection:"column",marginBottom:1,children:[Se(re,{bold:!0,color:n.text,children:[c.sparkle," ",e.name]}),Se(re,{children:[ge(re,{color:o,bold:!0,children:e.category}),Se(re,{color:n.textDim,children:[r,s]})]}),ge(re,{color:n.textDim,wrap:"truncate",children:e.description})]})});ki.displayName="MetadataHeader";var pn=xi.memo(({skill:e,expanded:t=!1,onClose:o,onToggleExpand:r})=>{let{metadata:s,content:i,loading:l,error:m}=Ds(e?.name??null),{stdout:a}=Nm(),[d,p]=jm(0),f=a?.rows??24,u=Hm(()=>i?Ym(ys(i)):[],[i]),g=Math.max(10,f-17),h=Math.max(3,g-Km-Vm),S=Math.max(1,h-Xm),D=Math.max(0,u.length-S),F=D>0,N=F?Math.round((d+S)/u.length*100):100,k=gn(D);k.current=D;let w=gn(o);w.current=o;let A=gn(r);A.current=r;let C=Um((P,I)=>{I.upArrow?p(x=>Math.max(0,x-1)):I.downArrow?p(x=>Math.min(k.current,x+1)):P==="f"?A.current?.():(I.escape||I.tab||I.leftArrow)&&w.current()},[]);if(Fm(C),Gm(()=>{p(0)},[e?.name]),!e)return null;let B=d>0,R=d+S<u.length,K=u.slice(d,d+S);return Se(At,{flexDirection:"column",borderStyle:"round",borderColor:n.accent,paddingX:1,flexGrow:1,children:[Se(At,{children:[Se(re,{bold:!0,color:n.accent,children:[c.info," Skill Details"]}),ge(At,{flexGrow:1}),Se(re,{color:n.textMuted,children:[F&&Se(re,{color:n.textDim,children:[N,"% ",c.dot," "]}),ge(re,{color:n.accent,bold:!0,children:"\u2191\u2193"})," ","scroll ",c.dot," ",ge(re,{color:n.accent,bold:!0,children:"f"})," ",t?"compact":"expand"," ",c.dot," ",ge(re,{color:n.accent,bold:!0,children:"Esc"})," ","close"]})]}),ge(re,{color:n.border,wrap:"truncate",children:"\u2500".repeat(200)}),l?ge(At,{alignItems:"center",justifyContent:"center",flexGrow:1,children:Se(re,{color:n.accent,children:[ge($m,{type:"dots"})," Loading\u2026"]})}):m?ge(At,{alignItems:"center",justifyContent:"center",flexGrow:1,children:Se(re,{color:n.error,children:[c.cross," ",m]})}):Se(Wm,{children:[ge(ki,{skill:e,metadata:s}),Se(At,{flexDirection:"column",height:h,overflowY:"hidden",children:[B&&ge(re,{color:n.textDim,children:` ${c.arrowUp} ${c.arrowUp} ${c.arrowUp}`}),ge(re,{children:K.join(`
12
+ `)}),R&&ge(re,{color:n.textDim,children:` ${c.arrowDown} ${c.arrowDown} ${c.arrowDown}`})]})]})]})});pn.displayName="SkillDetailPanel";function zm(){return{width:process.stdout.columns||80,height:process.stdout.rows||24}}function Si(){let{width:e,height:t}=zm();return e>=80&&t>=24}ee();import{Fragment as od,jsx as H,jsxs as ae}from"react/jsx-runtime";var Qm=5,Zm=24,ed=.35,td=e=>{let t=[{key:"/",description:"Filter skills"},{key:"\u2190/\u2192",description:"Collapse / expand"},{key:"tab/\u2192",description:"Skill details"},{key:"f",description:"Expand / compact panel"}],o={key:"esc",description:e?"Exit / close panel":"Back / close panel"};return e?[...t,o]:[...t,{key:"space",description:"Toggle / expand"},{key:"enter",description:"Install selected"},{key:"ctrl+a",description:"Select all"},o]},dr=({onInstall:e,onExit:t,overrideSkills:o,readOnly:r=!1})=>{let{skills:s,loading:i,error:l}=at(),{stdout:m}=Jm(),a=hn(nr),d=hn(Ge),p=hn(qt),f=o||s,u=o?!1:i,{query:g,setQuery:h,filtered:S}=Ps(f,{keys:["name","description","category"]}),[D,F]=nt(new Set),[N,k]=nt("list"),[w,A]=nt(0),[C,B]=nt(0),[R,K]=nt(!1),[P,I]=nt(!1),[x,v]=nt(null),[J,Q]=nt(!1),[ho,Xe]=nt(null),Z=Si(),Oe=m?.rows??40,fr=m?.columns??120,Ye=Math.max(Qm,Oe-Zm),Gi=Math.max(30,Math.round(fr*ed)),Hi=Math.max(10,Oe-17),bn=g.trim().length>0,Cn=yn(()=>vo(T,S),[S]);yn(()=>{g&&K(!0)},[g]);let ro=y=>bn||ho===y,wn=y=>{Xe(ro(y)?null:y)},we=yn(()=>{let y=[];for(let[L,Te]of Cn.entries()){let Bt=Te.filter(no=>{let yo=d[no.name]||[];return a.length>0?yo.some(In=>a.includes(In)):yo.length>0}).length;y.push({type:"header",category:L.name,categoryId:L.id,count:Te.length,installedCount:Bt}),ro(L.name)&&Te.forEach(no=>y.push({type:"skill",skill:no}))}return y},[Cn,ho,bn,d,a]),ji=()=>I(y=>!y),Ki=()=>{if(R){K(!1),h(""),k("list");return}t?.()},Vi=()=>{let y=S.map(L=>L.name);F(D.size===y.length?new Set:new Set(y))},Xi=y=>{(y.downArrow||y.return)&&we.length>0&&(k("list"),A(0))},Yi=()=>{if(w===0&&R){k("search");return}let y=Math.max(0,w-1);A(y),y<C&&B(y)},Wi=()=>{let y=Math.min(we.length-1,w+1);A(y),y>=C+Ye&&B(y-Ye+1)},zi=()=>{let y=we[w];if(y.type==="header"){wn(y.category);return}if(y.type==="skill"&&!r){if((a.length>0?d[y.skill.name]?.some(Bt=>a.includes(Bt))??!1:(d[y.skill.name]?.length??0)>0)&&!o)return;let Te=new Set(D);Te.has(y.skill.name)?Te.delete(y.skill.name):Te.add(y.skill.name),F(Te)}},qi=()=>{let y=we[w];if(y.type==="header"){wn(y.category);return}if(r)return;let L=f.filter(Te=>D.has(Te.name));L.length>0&&e?.(L)},Tn=y=>{let L=we[w];if(L.type==="skill"&&Z){v(L.skill),Q(!1);return}!y&&L.type==="header"&&!ro(L.category)&&Xe(L.category)},Ji=()=>{let y=we[w];y.type==="header"&&ro(y.category)&&Xe(null)},Qi=(y,L)=>y.length===1&&!L.ctrl&&!L.meta&&!L.upArrow&&!L.downArrow&&!L.leftArrow&&!L.rightArrow;qm((y,L)=>{if(y==="?")return ji();if(P)return I(!1);if(L.escape)return Ki();if(!R&&y==="/"){K(!0),k("search");return}if(y==="a"&&L.ctrl&&!r)return Vi();if(N==="search")return Xi(L);if(N==="list"){if(L.upArrow)return Yi();if(L.downArrow)return Wi();if(y===" ")return zi();if(L.return)return qi();if(L.tab)return Tn(!0);if(L.rightArrow)return Tn(!1);if(L.leftArrow)return Ji();Qi(y,L)&&(K(!0),k("search"),h(y))}},{isActive:!x});let Zi=we.slice(C,C+Ye),el=C>0,tl=C+Ye<we.length,ol=we.length<=Ye?100:Math.round((C+Ye)/we.length*100),rl=!x||!J;if(u)return ae(q,{flexDirection:"column",paddingX:1,children:[H(M,{}),H(q,{flexDirection:"column",alignItems:"center",justifyContent:"center",paddingY:4,children:H(Pe,{color:n.accent,children:"Loading skills..."})})]});if(l||!u&&f.length===0)return ae(q,{flexDirection:"column",paddingX:1,minHeight:20,children:[H(M,{}),ae(q,{flexDirection:"column",alignItems:"center",justifyContent:"center",flexGrow:1,children:[ae(q,{flexDirection:"column",borderStyle:"round",borderColor:n.error,paddingX:3,paddingY:2,alignItems:"center",children:[ae(Pe,{color:n.error,bold:!0,children:[c.cross," No Skills Available"]}),H(q,{marginTop:1,children:H(Pe,{color:n.textDim,children:"Check your internet connection and try again"})}),l&&H(q,{marginTop:1,children:H(Pe,{color:n.textMuted,dimColor:!0,children:l})})]}),H(q,{marginTop:2,children:ae(Pe,{color:n.textDim,children:["Press"," ",H(Pe,{color:n.accent,bold:!0,children:"Esc"})," ","to exit"]})})]})]});let nl=(y,L)=>{let Te=C+L,Bt=N==="list"&&Te===w;if(y.type==="header")return H(q,{marginTop:L===0?0:1,children:H(mi,{name:y.category,categoryId:y.categoryId,totalCount:y.count,installedCount:y.installedCount,isExpanded:ro(y.category),isFocused:Bt})},`cat-${y.category}`);let no=D.has(y.skill.name),yo=a.length>0?d[y.skill.name]?.some(al=>a.includes(al))??!1:(d[y.skill.name]?.length??0)>0,ll=p instanceof Map&&p.has(y.skill.name)?"deprecated":yo?"installed":null;return H(pi,{name:y.skill.name,description:y.skill.description,status:ll,selected:no,focused:Bt,readOnly:r},y.skill.name)},An=y=>H(q,{justifyContent:"center",marginBottom:y==="up"?1:0,marginTop:y==="down"?1:0,children:ae(Pe,{color:n.textDim,children:[y==="up"?c.arrowUp:c.arrowDown," ",y==="up"?c.arrowUp:c.arrowDown," ",y==="up"?c.arrowUp:c.arrowDown]})}),sl=()=>x?[{key:"\u2191/\u2193",label:"scroll"},{key:"f",label:J?"compact":"expand"},{key:"Esc",label:"close",color:n.warning}]:r?[{key:"/",label:"filter"},{key:"tab",label:"detail"},{key:"esc",label:"exit",color:n.warning},{key:"?",label:"help"}]:[{key:"space",label:"toggle"},{key:"enter",label:"install",color:n.success},{key:"/",label:"filter"},{key:"tab",label:"detail"},{key:"esc",label:"exit",color:n.warning},{key:"?",label:"help"}],il=()=>{if(!x)return ae(od,{children:[!r&&D.size>0&&ae(Pe,{children:[ae(Pe,{color:n.success,bold:!0,children:[c.checkboxActive," ",D.size]}),H(Pe,{color:n.textDim,children:" selected"})]}),we.length>Ye&&ae(Pe,{color:n.textDim,children:[!r&&D.size>0?` ${c.dot} `:"",ol,"%"]})]})};return ae(q,{flexDirection:"column",paddingX:1,minHeight:20,children:[H(M,{}),P?H(q,{flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center",children:H(Kt,{visible:P,onDismiss:()=>I(!1),shortcuts:td(r)})}):ae(q,{flexDirection:"row",height:x?Hi:void 0,flexGrow:x?0:1,overflow:"hidden",children:[rl&&ae(q,{flexDirection:"column",flexGrow:1,flexShrink:1,children:[R&&H(q,{marginBottom:1,children:H(ui,{query:g,onChange:y=>{h(y),A(0),B(0)},total:f.length,filtered:S.length,isLoading:u,focus:N==="search"})}),ae(q,{flexDirection:"column",flexGrow:1,children:[el&&An("up"),Zi.map(nl),tl&&An("down"),we.length===0&&H(q,{paddingY:1,children:ae(Pe,{color:n.textMuted,children:['No skills match "',g,'"']})})]})]},"skill-list"),x&&H(q,{flexDirection:"column",width:J?void 0:Gi,flexGrow:J?1:0,flexShrink:0,children:H(pn,{skill:x,expanded:J,onClose:()=>{v(null),Q(!1)},onToggleExpand:()=>Q(y=>!y)})},"detail-panel")]}),H(ct,{hints:sl(),status:il()})]})};Y();import{Box as pe,Text as ce,useInput as rd}from"ink";import bi from"ink-spinner";import{useAtomValue as Ci}from"jotai";import{useEffect as nd,useMemo as wi,useState as Zt}from"react";ee();import{jsx as X,jsxs as z}from"react/jsx-runtime";function ur({selectedAgents:e,onExit:t}){let[o,r]=Zt(!1),[s,i]=Zt(!1),[l,m]=Zt(!1),[a,d]=Zt(e||[]),[p,f]=Zt(!e),[u,g]=Zt([]),{install:h,progress:S,results:D,installing:F}=$o(),N=Ci(Ge),k=Ci(qt),{skills:w,loading:A}=at(),C=e||a,B=wi(()=>{if(A)return[];let P=new Set(Object.keys(N));return w.filter(I=>P.has(I.name)?(N[I.name]||[]).some(v=>C.includes(v)):!1)},[N,w,A,C]),R=wi(()=>{if(A||!(k instanceof Map)||k.size===0)return[];let P=new Set(Object.keys(N)),I=new Set(w.map(v=>v.name)),x=[];for(let v of P)k.has(v)?x.push({name:v,entry:k.get(v)}):I.has(v)||x.push({name:v});return x},[N,w,A,k]);if(nd(()=>{if(B.length===0){r(!1),i(!0);return}r(!0),(async()=>{let I=B.map(J=>J.name),{toUpdate:x}=await _o(T,I),v=B.filter(J=>x.includes(J.name));g(v),r(!1),i(!0)})()},[B]),rd((P,I)=>{I.escape&&!F&&!l&&!o&&s&&u.length===0&&t()}),p)return X(Yt,{onSelect:P=>{d(P),f(!1)},onBack:t});let K=async P=>{if(P.length===0)return;let I=new Set;P.forEach(x=>{(N[x.name]||[]).forEach(J=>{C.includes(J)&&I.add(J)})}),await h(P,{agents:Array.from(I),method:"copy",global:!1,skills:P.map(x=>x.name),isUpdate:!0}),m(!0)};return l?X(sr,{results:D,onExit:t,title:"Skills Updated Successfully",successLabel:"updated"}):F?z(pe,{flexDirection:"column",paddingX:1,children:[X(M,{}),z(pe,{marginTop:1,children:[z(ce,{color:n.accent,children:[X(bi,{type:"dots"})," "]}),X(ce,{children:"Updating skills..."})]}),X(pe,{marginTop:1,paddingX:2,children:z(ce,{color:n.textDim,children:[c.arrow," ",S.skill," (",S.current,"/",S.total,")"]})})]}):A||o?z(pe,{flexDirection:"column",paddingX:1,children:[X(M,{}),X(pe,{marginTop:1,children:z(ce,{color:n.accent,children:[X(bi,{type:"dots"})," ",o?"Checking for updates...":"Loading..."]})})]}):s&&u.length===0?z(pe,{flexDirection:"column",paddingX:1,children:[X(M,{}),X(pe,{borderStyle:"round",borderColor:n.success,paddingX:2,paddingY:1,children:z(ce,{color:n.success,children:[c.check," All installed skills are up to date!"]})}),R.length>0&&z(pe,{flexDirection:"column",marginTop:1,borderStyle:"round",borderColor:n.warning,paddingX:2,paddingY:1,children:[X(pe,{marginBottom:1,children:z(ce,{color:n.warning,bold:!0,children:[c.warning," ",R.length," deprecated skill",R.length>1?"s":""," detected:"]})}),R.map(P=>z(pe,{flexDirection:"column",paddingX:1,marginBottom:1,children:[z(ce,{color:n.warning,children:[c.arrow," ",P.name]}),P.entry?.message&&z(ce,{color:n.textDim,children:[" ",P.entry.message]}),!P.entry&&X(ce,{color:n.textDim,children:" No longer available in the registry"}),P.entry?.alternatives&&P.entry.alternatives.length>0&&z(ce,{color:n.textDim,children:[" ","Try: agent-skills install --skill ",P.entry.alternatives.join(", ")]})]},P.name)),z(ce,{color:n.textMuted,children:["Run: agent-skills remove --skill ","<name>"," to clean up"]})]}),X(pe,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:z(ce,{children:[X(ce,{color:n.warning,bold:!0,children:"esc"}),X(ce,{color:n.textDim,children:" exit"})]})})]}):X(sd,{skills:u,installedSkills:N,selectedAgents:C,onUpdate:K,onExit:t})}function sd({skills:e,installedSkills:t,selectedAgents:o,onUpdate:r,onExit:s}){let i=e.map(a=>{let p=(t[a.name]||[]).filter(f=>o.includes(f));return{label:a.name,value:a.name,hint:`${p.length} agent${p.length>1?"s":""}: ${p.join(", ")}`}}),l=e.map(a=>a.name),m=a=>{let d=e.filter(p=>a.includes(p.name));r(d)};return z(pe,{flexDirection:"column",paddingX:1,children:[X(M,{}),X(pe,{marginBottom:1,children:z(ce,{bold:!0,color:n.primary,children:[c.diamond," Select skills to update:"]})}),X(pe,{marginBottom:1,children:z(ce,{color:n.textDim,children:[e.length," installed skill",e.length>1?"s":""," found ",c.dot," all pre-selected"]})}),X(Vt,{items:i,initialSelected:l,onSubmit:m,onCancel:s})]})}import{jsx as ne,jsxs as st}from"react/jsx-runtime";function Ai({onExit:e}){let{step:t,next:o,back:r}=Bs(5),[s,i]=Ti(nr),[l,m]=Ti(ii),a=cd(mn),d=ad(Ge),[p,f]=It("install"),[u,g]=It(!1),[h,S]=It(!1),[D,F]=It(!1),[N,k]=It({method:"copy",global:!1}),{skills:w}=at(),{install:A,progress:C,results:B,installing:R}=$o(),[K,P]=It(!1),[I,x]=It(!1),v=Z=>{Z.length!==0&&(i(Z),o())},J=Z=>{if(f(Z),Z==="update"){S(!0);return}if(Z==="remove"){F(!0);return}o()},Q=Z=>{Z.length!==0&&(m(Z),o())},ho=Z=>{k(Z),o()},Xe=dd(()=>{if(p==="install")return;let Z=new Set;return Object.entries(d).forEach(([Oe,fr])=>{fr.some(Ye=>s.includes(Ye))&&Z.add(Oe)}),w.filter(Oe=>Z.has(Oe.name))},[p,d,w,s]);return md(()=>{(async()=>t===5&&!K&&!I&&(P(!0),await A(l,{agents:s,skills:l.map(Oe=>Oe.name),method:N.method,global:N.global}),x(!0),a(Oe=>Oe+1)))()},[t,K,I,A,l,s,a]),t===5?I?ne(sr,{results:B,onExit:e,title:"Installation Complete",successLabel:"installed"}):st(Pt,{flexDirection:"column",paddingX:1,children:[ne(M,{}),st(Pt,{marginTop:1,children:[st(vt,{color:n.accent,children:[ne(ld,{type:"dots"})," "]}),st(vt,{children:["Installing ",l.length," skills to ",s.length," agents..."]})]}),R&&ne(Pt,{marginTop:1,paddingX:2,children:st(vt,{color:n.textDim,children:[c.arrow," ",C.skill," (",C.current,"/",C.total,")"]})})]}):h?ne(ur,{selectedAgents:s,onExit:()=>S(!1)}):D?ne(ir,{selectedAgents:s,onExit:()=>F(!1)}):u?ne(rr,{onExit:()=>g(!1)}):st(Pt,{flexDirection:"column",children:[t===1&&ne(Yt,{onSelect:v,onBack:e}),t===2&&ne(Ks,{onSelect:J,onBack:r,onCredits:()=>g(!0)}),t===3&&(p==="install"||Xe&&Xe.length>0)&&ne(dr,{onInstall:Q,onExit:r,overrideSkills:Xe}),t===3&&p==="update"&&Xe&&Xe.length===0&&ne(ud,{onBack:r}),t===4&&ne(ri,{onConfirm:ho,onBack:r,initialMethod:"copy",initialGlobal:!1})]})}function ud({onBack:e}){return id((t,o)=>{(o.escape||t==="b"||o.backspace)&&e()}),st(Pt,{flexDirection:"column",paddingX:1,children:[ne(M,{}),ne(Pt,{borderColor:n.success,borderStyle:"round",paddingX:2,paddingY:1,children:st(vt,{color:n.success,bold:!0,children:[c.check," All skills are up to date on selected agents"]})}),ne(Pt,{marginTop:1,borderStyle:"round",borderColor:n.border,paddingX:1,children:st(vt,{children:[ne(vt,{color:n.warning,bold:!0,children:"esc"}),ne(vt,{color:n.textDim,children:" back"})]})})]})}import{Box as Ii,Text as xn}from"ink";import{useAtomValue as fd}from"jotai";import{useMemo as gd}from"react";import{jsx as eo,jsxs as Pi}from"react/jsx-runtime";function vi({onExit:e}){let t=fd(Ge),{skills:o,loading:r}=at(),s=gd(()=>{if(r)return[];let i=new Set(Object.keys(t));return o.filter(l=>i.has(l.name))},[t,o,r]);return r?Pi(Ii,{flexDirection:"column",padding:1,children:[eo(M,{}),eo(xn,{children:"Loading..."})]}):s.length===0?Pi(Ii,{flexDirection:"column",padding:1,children:[eo(M,{}),eo(xn,{color:n.warning,children:"No skills installed."}),eo(xn,{color:n.textDim,children:"(Press any key to exit)"})]}):eo(dr,{onExit:e,readOnly:!0,overrideSkills:s})}import{jsx as dt,jsxs as xd}from"react/jsx-runtime";var Et=({command:e="install"})=>{let{exit:t}=pd(),[o,r]=yd(e==="arcade"),{activated:s,reset:i}=vs();return hd(()=>{s&&!o&&(r(!0),i())},[s,o,i]),e==="credits"?dt(kn,{flexDirection:"column",padding:1,children:dt(rr,{onExit:t})}):o?dt(kn,{flexDirection:"column",padding:1,children:dt(Zr,{onExit:()=>{e==="arcade"?t():r(!1)}})}):xd(kn,{flexDirection:"column",padding:1,children:[e==="list"&&dt(vi,{onExit:t}),e==="remove"&&dt(ir,{onExit:t}),e==="update"&&dt(ur,{onExit:t}),(e==="install"||!e)&&dt(Ai,{onExit:t})]})};var Ve=new Dd;Ve.name("agent-skills").description("CLI to install and manage skills for AI coding agents").version(Ht);Ve.action(()=>{to(oo.createElement(Et,{command:"install"}))});Ve.command("install").description("Install skills (interactive by default)").option("-g, --global","Install globally to user home",!1).option("-s, --skill <names...>","Install one or more skills").option("-a, --agent <agents...>","Target specific agents").option("--symlink","Use symlink instead of copy",!1).option("-f, --force","Force re-download skills (bypass cache)",!1).action(async e=>{if(Sn(e)){to(oo.createElement(Et,{command:"install"}));return}let{runCliInstall:t}=await Promise.resolve().then(()=>(Di(),Ei));await t(e)});Ve.command("list").alias("ls").description("List available/installed agent skills").action(()=>{to(oo.createElement(Et,{command:"list"}))});Ve.command("remove").alias("rm").description("Remove installed skills").option("-g, --global","Remove from global installation",!1).option("-s, --skill <names...>","Remove one or more skills").option("-a, --agent <agents...>","Target specific agents").option("-f, --force","Force removal even if not in lockfile",!1).action(async e=>{if(Sn(e)){to(oo.createElement(Et,{command:"remove"}));return}let{runCliRemove:t}=await Promise.resolve().then(()=>(Li(),Bi));await t(e)});Ve.command("update").description("Update installed skills to the latest version").option("-s, --skill <name>","Update a specific skill").action(async e=>{if(Sn(e)){to(oo.createElement(Et,{command:"update"}));return}let{runCliUpdate:t}=await Promise.resolve().then(()=>(Mi(),Ri));await t(e)});Ve.command("cache").description("Manage the skills cache").option("--clear","Clear all cached skills and registry").option("--clear-registry","Clear only the registry cache").option("--path","Show cache directory path").action(async e=>{let{runCliCache:t}=await Promise.resolve().then(()=>(Oi(),_i));t(e)});Ve.command("credits").description("Show project contributors and credits").action(()=>{to(oo.createElement(Et,{command:"credits"}))});Ve.command("audit").description("View audit log of skill operations").option("-n, --limit <number>","Number of entries to show","10").option("--path","Show audit log file path").action(async e=>{let{runCliAudit:t}=await Promise.resolve().then(()=>(Ui(),$i));await t(e)});Ve.parse(process.argv);function Sn(e){return Object.keys(e).filter(o=>o!=="parent").length===0}
13
+ //# sourceMappingURL=index.js.map