@tech-leads-club/agent-skills 0.1.0-beta.2
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/CHANGELOG.md +112 -0
- package/index.js +22 -0
- package/index.js.map +7 -0
- package/package.json +40 -0
- package/skills/cursor-skill-creator/SKILL.md +379 -0
- package/skills/cursor-subagent-creator/SKILL.md +683 -0
- package/skills/skill-creator/SKILL.md +173 -0
- package/skills/spec-driven-dev/SKILL.md +43 -0
- package/skills/spec-driven-dev/references/design.md +140 -0
- package/skills/spec-driven-dev/references/implement.md +66 -0
- package/skills/spec-driven-dev/references/specify.md +116 -0
- package/skills/spec-driven-dev/references/tasks.md +221 -0
- package/skills/spec-driven-dev/references/validate.md +126 -0
- package/skills/subagent-creator/SKILL.md +283 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
## 0.1.0-beta.2 (2026-01-25)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- add .nvmrc file with Node.js version ([2b0071d](https://github.com/tech-leads-club/agent-skills/commit/2b0071d))
|
|
6
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
7
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
8
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
9
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
10
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
11
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
12
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
13
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
14
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
15
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
16
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
17
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
18
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
19
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
20
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
21
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
22
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
23
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
24
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
25
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
26
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
27
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
28
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
29
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
30
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
31
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
32
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
33
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
34
|
+
|
|
35
|
+
### ❤️ Thank You
|
|
36
|
+
|
|
37
|
+
- Felipe Rodrigues @felipfr
|
|
38
|
+
|
|
39
|
+
## 0.1.0-beta.1 (2026-01-25)
|
|
40
|
+
|
|
41
|
+
### 🚀 Features
|
|
42
|
+
|
|
43
|
+
- add .nvmrc file with Node.js version ([2b0071d](https://github.com/tech-leads-club/agent-skills/commit/2b0071d))
|
|
44
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
45
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
46
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
47
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
48
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
49
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
50
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
51
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
52
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
53
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
54
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
55
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
56
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
57
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
58
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
59
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
60
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
61
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
62
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
63
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
64
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
65
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
66
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
67
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
68
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
69
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
70
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
71
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
72
|
+
|
|
73
|
+
### ❤️ Thank You
|
|
74
|
+
|
|
75
|
+
- Felipe Rodrigues @felipfr
|
|
76
|
+
|
|
77
|
+
## 0.1.0-beta.0 (2026-01-25)
|
|
78
|
+
|
|
79
|
+
### 🚀 Features
|
|
80
|
+
|
|
81
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
82
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
83
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
84
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
85
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
86
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
87
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
88
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
89
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
90
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
91
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
92
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
93
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
94
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
95
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
96
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
97
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
98
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
99
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
100
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
101
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
102
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
103
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
104
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
105
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
106
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
107
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
108
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
109
|
+
|
|
110
|
+
### ❤️ Thank You
|
|
111
|
+
|
|
112
|
+
- Felipe Rodrigues @felipfr
|
package/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import{Command as re}from"commander";import{cpSync as x,existsSync as h,mkdirSync as O,readdirSync as pe,symlinkSync as M}from"node:fs";import{join as S,relative as G}from"node:path";import{existsSync as m}from"node:fs";import{homedir as B}from"node:os";import{join as i}from"node:path";var r=B(),y={cursor:{name:"cursor",displayName:"Cursor",description:"AI-first code editor built on VS Code",skillsDir:".cursor/skills",globalSkillsDir:i(r,".cursor/skills"),detectInstalled:()=>m(i(r,".cursor"))},"claude-code":{name:"claude-code",displayName:"Claude Code",description:"Anthropic's agentic coding tool",skillsDir:".claude/skills",globalSkillsDir:i(r,".claude/skills"),detectInstalled:()=>m(i(r,".claude"))},"github-copilot":{name:"github-copilot",displayName:"GitHub Copilot",description:"AI pair programmer by GitHub/Microsoft",skillsDir:".github/skills",globalSkillsDir:i(r,".copilot/skills"),detectInstalled:()=>m(i(r,".copilot"))||m(i(process.cwd(),".github"))},windsurf:{name:"windsurf",displayName:"Windsurf",description:"AI IDE with Cascade flow (Codeium)",skillsDir:".windsurf/skills",globalSkillsDir:i(r,".codeium/windsurf/skills"),detectInstalled:()=>m(i(r,".codeium/windsurf"))},cline:{name:"cline",displayName:"Cline",description:"Autonomous AI coding agent for VS Code",skillsDir:".cline/skills",globalSkillsDir:i(r,".cline/skills"),detectInstalled:()=>m(i(r,".cline"))},aider:{name:"aider",displayName:"Aider",description:"AI pair programming in terminal",skillsDir:".aider/skills",globalSkillsDir:i(r,".aider/skills"),detectInstalled:()=>m(i(r,".aider"))},codex:{name:"codex",displayName:"OpenAI Codex",description:"OpenAI's coding agent",skillsDir:".codex/skills",globalSkillsDir:i(r,".codex/skills"),detectInstalled:()=>m(i(r,".codex"))},gemini:{name:"gemini",displayName:"Gemini CLI",description:"Google's AI coding assistant",skillsDir:".gemini/skills",globalSkillsDir:i(r,".gemini/skills"),detectInstalled:()=>m(i(r,".gemini"))},antigravity:{name:"antigravity",displayName:"Antigravity",description:"Google's agentic coding (VS Code)",skillsDir:".agent/skills",globalSkillsDir:i(r,".agent/skills"),detectInstalled:()=>m(i(r,".gemini/antigravity"))||m(i(process.cwd(),".agent"))},roo:{name:"roo",displayName:"Roo Code",description:"AI coding assistant for VS Code",skillsDir:".roo/skills",globalSkillsDir:i(r,".roo/skills"),detectInstalled:()=>m(i(r,".roo"))},kilocode:{name:"kilocode",displayName:"Kilo Code",description:"AI coding agent with auto-launch",skillsDir:".kilocode/skills",globalSkillsDir:i(r,".kilocode/skills"),detectInstalled:()=>m(i(r,".kilocode"))||m(i(process.cwd(),".kilocode"))},"amazon-q":{name:"amazon-q",displayName:"Amazon Q",description:"AWS AI coding assistant",skillsDir:".amazonq/skills",globalSkillsDir:i(r,".amazonq/skills"),detectInstalled:()=>m(i(r,".amazonq"))},augment:{name:"augment",displayName:"Augment",description:"AI code assistant with context engine",skillsDir:".augment/skills",globalSkillsDir:i(r,".augment/skills"),detectInstalled:()=>m(i(r,".augment"))},tabnine:{name:"tabnine",displayName:"Tabnine",description:"AI code completions with privacy focus",skillsDir:".tabnine/skills",globalSkillsDir:i(r,".tabnine/skills"),detectInstalled:()=>m(i(r,".tabnine"))},opencode:{name:"opencode",displayName:"OpenCode",description:"Open-source AI coding terminal",skillsDir:".opencode/skills",globalSkillsDir:i(r,".config/opencode/skills"),detectInstalled:()=>m(i(r,".config/opencode"))},sourcegraph:{name:"sourcegraph",displayName:"Sourcegraph Cody",description:"AI assistant with codebase context",skillsDir:".sourcegraph/skills",globalSkillsDir:i(r,".sourcegraph/skills"),detectInstalled:()=>m(i(r,".sourcegraph"))}};function w(){return Object.entries(y).filter(([,l])=>l.detectInstalled()).map(([l])=>l)}function f(l){return y[l]}function N(){return Object.keys(y).sort((l,t)=>y[l].displayName.localeCompare(y[t].displayName))}var q=".tlc-skills";function C(l,t){let c=[];for(let o of t.agents){let u=f(o),s=t.global?u.globalSkillsDir:S(process.cwd(),u.skillsDir);h(s)||O(s,{recursive:!0});for(let n of l){let d=F(n,o,s,t.method);c.push(d)}}return c}function F(l,t,c,o){let u=f(t),s=S(c,l.name);try{if(h(s))return{agent:u.displayName,skill:l.name,path:s,method:o,success:!0,error:"Already exists"};if(o==="symlink"){let n=S(process.cwd(),q),d=S(n,l.name);h(n)||O(n,{recursive:!0}),h(d)||x(l.path,d,{recursive:!0});let g=G(c,d);M(g,s)}else x(l.path,s,{recursive:!0});return{agent:u.displayName,skill:l.name,path:s,method:o,success:!0}}catch(n){return{agent:u.displayName,skill:l.name,path:s,method:o,success:!1,error:n instanceof Error?n.message:String(n)}}}import{ConfirmPrompt as J,MultiSelectPrompt as Z,SelectPrompt as ee}from"@clack/core";import e from"picocolors";import{existsSync as I,readdirSync as H,readFileSync as K}from"node:fs";import{dirname as W,join as A}from"node:path";import{fileURLToPath as Y}from"node:url";var U=Y(import.meta.url),_=W(U);function X(){let l=A(_,"..","..","..","skills");if(I(l))return l;let t=A(_,"..","skills");if(I(t))return t;throw new Error(`Skills directory not found. Checked: ${l}, ${t}`)}function k(){let l=X(),t=[];if(!I(l))return t;let c=H(l,{withFileTypes:!0});for(let o of c){if(!o.isDirectory())continue;let u=A(l,o.name,"SKILL.md");if(!I(u))continue;let s=K(u,"utf-8"),{name:n,description:d}=Q(s);t.push({name:n||o.name,description:d||"No description",path:A(l,o.name)})}return t}function Q(l){let t=l.match(/^---\n([\s\S]*?)\n---/);if(!t)return{};let c=t[1],o=c.match(/^name:\s*(.+)$/m),u=c.match(/^description:\s*(.+)$/m);return{name:o?.[1]?.trim(),description:u?.[1]?.trim()}}function P(l){return k().find(c=>c.name===l)}var a="\u2502",b="\u2514",le="\u25CF",se="\u25CB",te="\u25FC",ne="\u25FB",$=e.blue("\u25C6"),L=`
|
|
2
|
+
${e.bold(e.blue("\u25C6 TECH LEADS CLUB"))}
|
|
3
|
+
${e.bold(e.white("Agent Skills"))}
|
|
4
|
+
`;function R(l,t){return l.length<=t?l:l.slice(0,t-3)+"..."}async function E(l,t,c=[]){let o=(s,n)=>{let d=n==="selected"||n==="selected-active",g=n==="active"||n==="selected-active",p=d?e.blue(te):e.dim(ne),D=g?e.blue(s.label):s.label,z=g&&s.hint?e.dim(` (${s.hint})`):"";return`${p} ${D}${z}`};return new Z({options:t,initialValues:c,render(){let s=`${e.blue(a)}
|
|
5
|
+
${e.blue($)} ${e.bold(l)}
|
|
6
|
+
`;switch(this.state){case"submit":return`${s}${e.blue(a)} ${this.options.filter(n=>this.value.includes(n.value)).map(n=>n.label).join(e.dim(", "))}
|
|
7
|
+
${e.blue(a)}`;case"cancel":return`${s}${e.blue(a)} ${e.strikethrough(e.dim("cancelled"))}
|
|
8
|
+
${e.blue(a)}`;default:return`${s}${this.options.map((n,d)=>{let g=this.value.includes(n.value),p=d===this.cursor,D=g&&p?"selected-active":g?"selected":p?"active":"inactive";return`${e.blue(a)} ${o(n,D)}`}).join(`
|
|
9
|
+
`)}
|
|
10
|
+
${e.blue(b)} ${e.dim("(\u2191\u2193 navigate, space select, enter confirm)")}`}}}).prompt()}async function ie(l,t,c){let o=(s,n)=>{let d=n?e.blue(le):e.dim(se),g=n?e.blue(s.label):s.label,p=n&&s.hint?e.dim(` - ${s.hint}`):"";return`${d} ${g}${p}`};return new ee({options:t,initialValue:c,render(){let s=`${e.blue(a)}
|
|
11
|
+
${e.blue($)} ${e.bold(l)}
|
|
12
|
+
`;switch(this.state){case"submit":return`${s}${e.blue(a)} ${this.options.find(n=>n.value===this.value)?.label}
|
|
13
|
+
${e.blue(a)}`;case"cancel":return`${s}${e.blue(a)} ${e.strikethrough(e.dim("cancelled"))}
|
|
14
|
+
${e.blue(a)}`;default:return`${s}${this.options.map((n,d)=>`${e.blue(a)} ${o(n,d===this.cursor)}`).join(`
|
|
15
|
+
`)}
|
|
16
|
+
${e.blue(b)}`}}}).prompt()}async function oe(l,t=!1){return new J({active:"Yes",inactive:"No",initialValue:t,render(){let o=`${e.blue(a)}
|
|
17
|
+
${e.blue($)} ${e.bold(l)}
|
|
18
|
+
`;switch(this.state){case"submit":return`${o}${e.blue(a)} ${this.value?"Yes":"No"}
|
|
19
|
+
${e.blue(a)}`;case"cancel":return`${o}${e.blue(a)} ${e.strikethrough(e.dim("cancelled"))}
|
|
20
|
+
${e.blue(a)}`;default:return`${o}${e.blue(a)} ${this.value?`${e.blue("\u25CF Yes")} / \u25CB No`:`\u25CB Yes / ${e.blue("\u25CF No")}`}
|
|
21
|
+
${e.blue(b)} ${e.dim("(\u2190\u2192 to change, enter to confirm)")}`}}}).prompt()}async function j(){console.clear(),console.log(L),console.log(`${e.blue(a)}`),console.log(`${e.blue(a)} ${e.dim("Install curated skills to your AI coding agents")}`),console.log(`${e.blue(a)}`);let l=k();if(l.length===0)return console.log(`${e.blue(b)} ${e.red("No skills available")}`),null;let t=w(),c=N();if(t.length>0){let d=t.slice(0,5).map(p=>f(p).displayName).join(", "),g=t.length>5?` +${t.length-5} more`:"";console.log(`${e.blue(a)} ${e.blue("\u25CF")} Detected: ${e.bold(d)}${g}`),console.log(`${e.blue(a)}`)}let o=await E(`Which skills do you want to install? ${e.dim(`(${l.length} available)`)}`,l.map(d=>({value:d.name,label:d.name,hint:R(d.description,200)})));if(typeof o=="symbol")return console.log(`${e.blue(b)} ${e.dim("Cancelled")}`),null;let u=await E(`Where to install? ${e.dim(`(${o.length} skill(s) selected)`)}`,c.map(d=>{let g=f(d),p=t.includes(d);return{value:d,label:p?`${g.displayName} ${e.blue("\u25CF")}`:g.displayName,hint:R(g.description,50)}}),t.length>0?t:["cursor","claude-code"]);if(typeof u=="symbol")return console.log(`${e.blue(b)} ${e.dim("Cancelled")}`),null;let s=await ie("Installation method",[{value:"symlink",label:"Symlink",hint:"recommended - shared source"},{value:"copy",label:"Copy",hint:"independent copies"}],"symlink");if(typeof s=="symbol")return console.log(`${e.blue(b)} ${e.dim("Cancelled")}`),null;let n=await oe("Install globally? (user home vs this project)",!1);return typeof n=="symbol"?(console.log(`${e.blue(b)} ${e.dim("Cancelled")}`),null):(console.log(`${e.blue(a)}`),{agents:u,skills:o,method:s,global:n})}function T(l){let t=l.filter(s=>s.success&&!s.error),c=l.filter(s=>s.success&&s.error==="Already exists"),o=l.filter(s=>!s.success);if(console.log(),t.length>0)for(let s of t)console.log(`${e.blue($)} ${e.bold(s.skill)} \u2192 ${s.agent}`);if(c.length>0)for(let s of c)console.log(`${e.dim($)} ${s.skill} \u2192 ${s.agent} ${e.dim("(exists)")}`);if(o.length>0)for(let s of o)console.log(`${e.red("\u2717")} ${s.skill} \u2192 ${s.agent}: ${s.error}`);let u=new Set(l.map(s=>s.agent)).size;console.log(),console.log(`${e.blue(b)} ${e.blue("\u2713")} ${e.bold(`${t.length} skill(s)`)} installed to ${e.bold(`${u} agent(s)`)}`)}function V(){let l=k();if(console.clear(),console.log(L),l.length===0){console.log(`${e.blue(a)} ${e.yellow("No skills found")}`);return}console.log(`${e.blue(a)}`),console.log(`${e.blue(a)} ${e.bold(`${l.length} skills available:`)}`),console.log(`${e.blue(a)}`);for(let t of l)console.log(`${e.blue(a)} ${e.blue("\u25C6")} ${e.bold(t.name)}`),console.log(`${e.blue(a)} ${e.dim(t.description)}`);console.log(`${e.blue(a)}`),console.log(`${e.blue(b)} ${e.dim('Run "npx @tech-leads-club/agent-skills" to install')}`)}var v=new re;v.name("tlc-skills").description("Install TLC Agent Skills to your AI coding agents").version("0.0.1");v.command("install",{isDefault:!0}).description("Interactive skill installation (default)").option("-g, --global","Install globally to user home",!1).option("-s, --skill <name>","Install a specific skill").option("-a, --agent <agents...>","Target specific agents").option("--copy","Use copy instead of symlink",!1).action(async l=>{if(l.skill||l.agent)await ae(l);else{let t=await j();if(!t)return;let c=k().filter(u=>t.skills.includes(u.name)),o=C(c,t);T(o)}});v.command("list").alias("ls").description("List available skills").action(()=>{V()});async function ae(l){let t=k(),c=t;if(l.skill){let n=P(l.skill);n||(console.error(`Skill "${l.skill}" not found.`),console.log("Available skills:",t.map(d=>d.name).join(", ")),process.exit(1)),c=[n]}let o=l.agent||["antigravity","claude-code","cursor"],u=l.copy?"copy":"symlink",s=C(c,{agents:o,skills:c.map(n=>n.name),method:u,global:l.global});T(s)}v.parse();
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/installer.ts", "../src/agents.ts", "../src/prompts.ts", "../src/skills.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander'\n\nimport { installSkills } from './installer'\nimport { runInteractiveInstall, showAvailableSkills, showInstallResults } from './prompts'\nimport { discoverSkills, getSkillByName } from './skills'\nimport type { AgentType } from './types'\n\nconst program = new Command()\n\nprogram.name('tlc-skills').description('Install TLC Agent Skills to your AI coding agents').version('0.0.1')\n\nprogram\n .command('install', { isDefault: true })\n .description('Interactive skill installation (default)')\n .option('-g, --global', 'Install globally to user home', false)\n .option('-s, --skill <name>', 'Install a specific skill')\n .option('-a, --agent <agents...>', 'Target specific agents')\n .option('--copy', 'Use copy instead of symlink', false)\n .action(async (options) => {\n if (options.skill || options.agent) {\n // Non-interactive mode\n await runNonInteractive(options)\n } else {\n // Interactive mode\n const installOptions = await runInteractiveInstall()\n if (!installOptions) return\n const skills = discoverSkills().filter((s) => installOptions.skills.includes(s.name))\n const results = installSkills(skills, installOptions)\n showInstallResults(results)\n }\n })\n\nprogram\n .command('list')\n .alias('ls')\n .description('List available skills')\n .action(() => {\n showAvailableSkills()\n })\n\nasync function runNonInteractive(options: { skill?: string; agent?: string[]; global: boolean; copy: boolean }) {\n const allSkills = discoverSkills()\n let skills = allSkills\n\n if (options.skill) {\n const skill = getSkillByName(options.skill)\n if (!skill) {\n console.error(`Skill \"${options.skill}\" not found.`)\n console.log('Available skills:', allSkills.map((s) => s.name).join(', '))\n process.exit(1)\n }\n skills = [skill]\n }\n\n const agents = (options.agent || ['antigravity', 'claude-code', 'cursor']) as AgentType[]\n const method = options.copy ? 'copy' : 'symlink'\n\n const results = installSkills(skills, {\n agents,\n skills: skills.map((s) => s.name),\n method,\n global: options.global,\n })\n\n showInstallResults(results)\n}\n\nprogram.parse()\n", "import { cpSync, existsSync, mkdirSync, readdirSync, symlinkSync } from 'node:fs'\nimport { join, relative } from 'node:path'\n\nimport { getAgentConfig } from './agents'\nimport type { AgentType, InstallOptions, SkillInfo } from './types'\n\nconst TLC_SKILLS_DIR = '.tlc-skills'\n\nexport interface InstallResult {\n agent: string\n skill: string\n path: string\n method: 'symlink' | 'copy'\n success: boolean\n error?: string\n}\n\nexport function installSkills(skills: SkillInfo[], options: InstallOptions): InstallResult[] {\n const results: InstallResult[] = []\n\n for (const agent of options.agents) {\n const config = getAgentConfig(agent)\n const targetDir = options.global ? config.globalSkillsDir : join(process.cwd(), config.skillsDir)\n if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true })\n for (const skill of skills) {\n const result = installSkillForAgent(skill, agent, targetDir, options.method)\n results.push(result)\n }\n }\n\n return results\n}\n\nfunction installSkillForAgent(\n skill: SkillInfo,\n agent: AgentType,\n targetDir: string,\n method: 'symlink' | 'copy',\n): InstallResult {\n const config = getAgentConfig(agent)\n const skillTargetPath = join(targetDir, skill.name)\n\n try {\n if (existsSync(skillTargetPath)) {\n return {\n agent: config.displayName,\n skill: skill.name,\n path: skillTargetPath,\n method,\n success: true,\n error: 'Already exists',\n }\n }\n\n if (method === 'symlink') {\n // For symlinks, we first copy to .tlc-skills then symlink\n const canonicalDir = join(process.cwd(), TLC_SKILLS_DIR)\n const canonicalSkillPath = join(canonicalDir, skill.name)\n if (!existsSync(canonicalDir)) mkdirSync(canonicalDir, { recursive: true })\n if (!existsSync(canonicalSkillPath)) cpSync(skill.path, canonicalSkillPath, { recursive: true })\n const relativePath = relative(targetDir, canonicalSkillPath)\n symlinkSync(relativePath, skillTargetPath)\n } else {\n cpSync(skill.path, skillTargetPath, { recursive: true })\n }\n\n return {\n agent: config.displayName,\n skill: skill.name,\n path: skillTargetPath,\n method,\n success: true,\n }\n } catch (error) {\n return {\n agent: config.displayName,\n skill: skill.name,\n path: skillTargetPath,\n method,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n}\n\nexport function listInstalledSkills(agent: AgentType, global: boolean): string[] {\n const config = getAgentConfig(agent)\n const targetDir = global ? config.globalSkillsDir : join(process.cwd(), config.skillsDir)\n if (!existsSync(targetDir)) return []\n return readdirSync(targetDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() || entry.isSymbolicLink())\n .map((entry) => entry.name)\n}\n", "import { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nimport type { AgentConfig, AgentType } from './types'\n\nconst home = homedir()\n\nexport const agents: Record<AgentType, AgentConfig> = {\n // Tier 1: Most popular AI coding agents\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n description: 'AI-first code editor built on VS Code',\n skillsDir: '.cursor/skills',\n globalSkillsDir: join(home, '.cursor/skills'),\n detectInstalled: () => existsSync(join(home, '.cursor')),\n },\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n description: \"Anthropic's agentic coding tool\",\n skillsDir: '.claude/skills',\n globalSkillsDir: join(home, '.claude/skills'),\n detectInstalled: () => existsSync(join(home, '.claude')),\n },\n 'github-copilot': {\n name: 'github-copilot',\n displayName: 'GitHub Copilot',\n description: 'AI pair programmer by GitHub/Microsoft',\n skillsDir: '.github/skills',\n globalSkillsDir: join(home, '.copilot/skills'),\n detectInstalled: () => existsSync(join(home, '.copilot')) || existsSync(join(process.cwd(), '.github')),\n },\n windsurf: {\n name: 'windsurf',\n displayName: 'Windsurf',\n description: 'AI IDE with Cascade flow (Codeium)',\n skillsDir: '.windsurf/skills',\n globalSkillsDir: join(home, '.codeium/windsurf/skills'),\n detectInstalled: () => existsSync(join(home, '.codeium/windsurf')),\n },\n cline: {\n name: 'cline',\n displayName: 'Cline',\n description: 'Autonomous AI coding agent for VS Code',\n skillsDir: '.cline/skills',\n globalSkillsDir: join(home, '.cline/skills'),\n detectInstalled: () => existsSync(join(home, '.cline')),\n },\n\n // Tier 2: Rising stars\n aider: {\n name: 'aider',\n displayName: 'Aider',\n description: 'AI pair programming in terminal',\n skillsDir: '.aider/skills',\n globalSkillsDir: join(home, '.aider/skills'),\n detectInstalled: () => existsSync(join(home, '.aider')),\n },\n codex: {\n name: 'codex',\n displayName: 'OpenAI Codex',\n description: \"OpenAI's coding agent\",\n skillsDir: '.codex/skills',\n globalSkillsDir: join(home, '.codex/skills'),\n detectInstalled: () => existsSync(join(home, '.codex')),\n },\n gemini: {\n name: 'gemini',\n displayName: 'Gemini CLI',\n description: \"Google's AI coding assistant\",\n skillsDir: '.gemini/skills',\n globalSkillsDir: join(home, '.gemini/skills'),\n detectInstalled: () => existsSync(join(home, '.gemini')),\n },\n antigravity: {\n name: 'antigravity',\n displayName: 'Antigravity',\n description: \"Google's agentic coding (VS Code)\",\n skillsDir: '.agent/skills',\n globalSkillsDir: join(home, '.agent/skills'),\n detectInstalled: () => existsSync(join(home, '.gemini/antigravity')) || existsSync(join(process.cwd(), '.agent')),\n },\n roo: {\n name: 'roo',\n displayName: 'Roo Code',\n description: 'AI coding assistant for VS Code',\n skillsDir: '.roo/skills',\n globalSkillsDir: join(home, '.roo/skills'),\n detectInstalled: () => existsSync(join(home, '.roo')),\n },\n kilocode: {\n name: 'kilocode',\n displayName: 'Kilo Code',\n description: 'AI coding agent with auto-launch',\n skillsDir: '.kilocode/skills',\n globalSkillsDir: join(home, '.kilocode/skills'),\n detectInstalled: () => existsSync(join(home, '.kilocode')) || existsSync(join(process.cwd(), '.kilocode')),\n },\n\n // Tier 3: Enterprise & specialized\n 'amazon-q': {\n name: 'amazon-q',\n displayName: 'Amazon Q',\n description: 'AWS AI coding assistant',\n skillsDir: '.amazonq/skills',\n globalSkillsDir: join(home, '.amazonq/skills'),\n detectInstalled: () => existsSync(join(home, '.amazonq')),\n },\n augment: {\n name: 'augment',\n displayName: 'Augment',\n description: 'AI code assistant with context engine',\n skillsDir: '.augment/skills',\n globalSkillsDir: join(home, '.augment/skills'),\n detectInstalled: () => existsSync(join(home, '.augment')),\n },\n tabnine: {\n name: 'tabnine',\n displayName: 'Tabnine',\n description: 'AI code completions with privacy focus',\n skillsDir: '.tabnine/skills',\n globalSkillsDir: join(home, '.tabnine/skills'),\n detectInstalled: () => existsSync(join(home, '.tabnine')),\n },\n opencode: {\n name: 'opencode',\n displayName: 'OpenCode',\n description: 'Open-source AI coding terminal',\n skillsDir: '.opencode/skills',\n globalSkillsDir: join(home, '.config/opencode/skills'),\n detectInstalled: () => existsSync(join(home, '.config/opencode')),\n },\n sourcegraph: {\n name: 'sourcegraph',\n displayName: 'Sourcegraph Cody',\n description: 'AI assistant with codebase context',\n skillsDir: '.sourcegraph/skills',\n globalSkillsDir: join(home, '.sourcegraph/skills'),\n detectInstalled: () => existsSync(join(home, '.sourcegraph')),\n },\n}\n\nexport function detectInstalledAgents(): AgentType[] {\n return (Object.entries(agents) as [AgentType, AgentConfig][])\n .filter(([, config]) => config.detectInstalled())\n .map(([type]) => type)\n}\n\nexport function getAgentConfig(type: AgentType): AgentConfig {\n return agents[type]\n}\n\nexport function getAllAgentTypes(): AgentType[] {\n return (Object.keys(agents) as AgentType[]).sort((a, b) => agents[a].displayName.localeCompare(agents[b].displayName))\n}\n", "import { ConfirmPrompt, MultiSelectPrompt, SelectPrompt } from '@clack/core'\nimport pc from 'picocolors'\n\nimport { detectInstalledAgents, getAgentConfig, getAllAgentTypes } from './agents'\nimport { discoverSkills } from './skills'\nimport type { AgentType, InstallOptions } from './types'\n\nconst S_BAR = '\u2502'\nconst S_BAR_END = '\u2514'\nconst S_RADIO_ACTIVE = '\u25CF'\nconst S_RADIO_INACTIVE = '\u25CB'\nconst S_CHECKBOX_ACTIVE = '\u25FC'\nconst S_CHECKBOX_INACTIVE = '\u25FB'\n\nconst symbol = pc.blue('\u25C6')\n\nconst LOGO = `\n ${pc.bold(pc.blue('\u25C6 TECH LEADS CLUB'))}\n ${pc.bold(pc.white('Agent Skills'))}\n`\n\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text\n return text.slice(0, maxLength - 3) + '...'\n}\n\ninterface Option<T> {\n value: T\n label: string\n hint?: string\n}\n\nasync function blueMultiSelect<T>(\n message: string,\n options: Option<T>[],\n initialValues: T[] = [],\n): Promise<T[] | symbol> {\n const opt = (option: Option<T>, state: 'active' | 'selected' | 'cancelled' | 'inactive' | 'selected-active') => {\n const isSelected = state === 'selected' || state === 'selected-active'\n const isActive = state === 'active' || state === 'selected-active'\n const checkbox = isSelected ? pc.blue(S_CHECKBOX_ACTIVE) : pc.dim(S_CHECKBOX_INACTIVE)\n const label = isActive ? pc.blue(option.label) : option.label\n const hint = isActive && option.hint ? pc.dim(` (${option.hint})`) : ''\n return `${checkbox} ${label}${hint}`\n }\n\n const prompt = new MultiSelectPrompt({\n options,\n initialValues,\n render() {\n const title = `${pc.blue(S_BAR)}\\n${pc.blue(symbol)} ${pc.bold(message)}\\n`\n\n switch (this.state) {\n case 'submit':\n return `${title}${pc.blue(S_BAR)} ${this.options\n .filter((o) => this.value.includes(o.value))\n .map((o) => o.label)\n .join(pc.dim(', '))}\\n${pc.blue(S_BAR)}`\n case 'cancel':\n return `${title}${pc.blue(S_BAR)} ${pc.strikethrough(pc.dim('cancelled'))}\\n${pc.blue(S_BAR)}`\n default:\n return `${title}${this.options\n .map((option, i) => {\n const isSelected = this.value.includes(option.value)\n const isActive = i === this.cursor\n const state =\n isSelected && isActive ? 'selected-active' : isSelected ? 'selected' : isActive ? 'active' : 'inactive'\n return `${pc.blue(S_BAR)} ${opt(option as Option<T>, state)}`\n })\n .join('\\n')}\\n${pc.blue(S_BAR_END)} ${pc.dim('(\u2191\u2193 navigate, space select, enter confirm)')}`\n }\n },\n })\n\n return prompt.prompt() as Promise<T[] | symbol>\n}\n\nasync function blueSelect<T>(message: string, options: Option<T>[], initialValue?: T): Promise<T | symbol> {\n const opt = (option: Option<T>, isActive: boolean) => {\n const radio = isActive ? pc.blue(S_RADIO_ACTIVE) : pc.dim(S_RADIO_INACTIVE)\n const label = isActive ? pc.blue(option.label) : option.label\n const hint = isActive && option.hint ? pc.dim(` - ${option.hint}`) : ''\n return `${radio} ${label}${hint}`\n }\n\n const prompt = new SelectPrompt({\n options,\n initialValue,\n render() {\n const title = `${pc.blue(S_BAR)}\\n${pc.blue(symbol)} ${pc.bold(message)}\\n`\n\n switch (this.state) {\n case 'submit':\n return `${title}${pc.blue(S_BAR)} ${this.options.find((o) => o.value === this.value)?.label}\\n${pc.blue(S_BAR)}`\n case 'cancel':\n return `${title}${pc.blue(S_BAR)} ${pc.strikethrough(pc.dim('cancelled'))}\\n${pc.blue(S_BAR)}`\n default:\n return `${title}${this.options\n .map((option, i) => `${pc.blue(S_BAR)} ${opt(option as Option<T>, i === this.cursor)}`)\n .join('\\n')}\\n${pc.blue(S_BAR_END)}`\n }\n },\n })\n\n return prompt.prompt() as Promise<T | symbol>\n}\n\nasync function blueConfirm(message: string, initialValue = false): Promise<boolean | symbol> {\n const prompt = new ConfirmPrompt({\n active: 'Yes',\n inactive: 'No',\n initialValue,\n render() {\n const title = `${pc.blue(S_BAR)}\\n${pc.blue(symbol)} ${pc.bold(message)}\\n`\n\n switch (this.state) {\n case 'submit':\n return `${title}${pc.blue(S_BAR)} ${this.value ? 'Yes' : 'No'}\\n${pc.blue(S_BAR)}`\n case 'cancel':\n return `${title}${pc.blue(S_BAR)} ${pc.strikethrough(pc.dim('cancelled'))}\\n${pc.blue(S_BAR)}`\n default:\n return `${title}${pc.blue(S_BAR)} ${this.value ? `${pc.blue('\u25CF Yes')} / \u25CB No` : `\u25CB Yes / ${pc.blue('\u25CF No')}`}\\n${pc.blue(S_BAR_END)} ${pc.dim('(\u2190\u2192 to change, enter to confirm)')}`\n }\n },\n })\n\n return prompt.prompt() as Promise<boolean | symbol>\n}\n\nexport async function runInteractiveInstall(): Promise<InstallOptions | null> {\n console.clear()\n console.log(LOGO)\n console.log(`${pc.blue(S_BAR)}`)\n console.log(`${pc.blue(S_BAR)} ${pc.dim('Install curated skills to your AI coding agents')}`)\n console.log(`${pc.blue(S_BAR)}`)\n\n const skills = discoverSkills()\n if (skills.length === 0) {\n console.log(`${pc.blue(S_BAR_END)} ${pc.red('No skills available')}`)\n return null\n }\n\n const installedAgents = detectInstalledAgents()\n const allAgents = getAllAgentTypes()\n\n if (installedAgents.length > 0) {\n const agentNames = installedAgents\n .slice(0, 5)\n .map((a) => getAgentConfig(a).displayName)\n .join(', ')\n const more = installedAgents.length > 5 ? ` +${installedAgents.length - 5} more` : ''\n console.log(`${pc.blue(S_BAR)} ${pc.blue('\u25CF')} Detected: ${pc.bold(agentNames)}${more}`)\n console.log(`${pc.blue(S_BAR)}`)\n }\n\n // Step 1\n const selectedSkills = await blueMultiSelect(\n `Which skills do you want to install? ${pc.dim(`(${skills.length} available)`)}`,\n skills.map((skill) => ({ value: skill.name, label: skill.name, hint: truncate(skill.description, 200) })),\n )\n\n if (typeof selectedSkills === 'symbol') {\n console.log(`${pc.blue(S_BAR_END)} ${pc.dim('Cancelled')}`)\n return null\n }\n\n // Step 2\n const selectedAgents = await blueMultiSelect(\n `Where to install? ${pc.dim(`(${selectedSkills.length} skill(s) selected)`)}`,\n allAgents.map((type) => {\n const config = getAgentConfig(type)\n const isInstalled = installedAgents.includes(type)\n return {\n value: type,\n label: isInstalled ? `${config.displayName} ${pc.blue('\u25CF')}` : config.displayName,\n hint: truncate(config.description, 50),\n }\n }),\n installedAgents.length > 0 ? installedAgents : ['cursor', 'claude-code'],\n )\n\n if (typeof selectedAgents === 'symbol') {\n console.log(`${pc.blue(S_BAR_END)} ${pc.dim('Cancelled')}`)\n return null\n }\n\n // Step 3\n const method = await blueSelect(\n 'Installation method',\n [\n { value: 'symlink', label: 'Symlink', hint: 'recommended - shared source' },\n { value: 'copy', label: 'Copy', hint: 'independent copies' },\n ],\n 'symlink',\n )\n\n if (typeof method === 'symbol') {\n console.log(`${pc.blue(S_BAR_END)} ${pc.dim('Cancelled')}`)\n return null\n }\n\n // Step 4\n const global = await blueConfirm('Install globally? (user home vs this project)', false)\n\n if (typeof global === 'symbol') {\n console.log(`${pc.blue(S_BAR_END)} ${pc.dim('Cancelled')}`)\n return null\n }\n\n console.log(`${pc.blue(S_BAR)}`)\n\n return {\n agents: selectedAgents as AgentType[],\n skills: selectedSkills as string[],\n method: method as 'symlink' | 'copy',\n global: global as boolean,\n }\n}\n\nexport function showInstallResults(\n results: Array<{\n agent: string\n skill: string\n path: string\n method: string\n success: boolean\n error?: string\n }>,\n) {\n const successful = results.filter((r) => r.success && !r.error)\n const alreadyExists = results.filter((r) => r.success && r.error === 'Already exists')\n const failed = results.filter((r) => !r.success)\n\n console.log()\n\n if (successful.length > 0) {\n for (const r of successful) {\n console.log(`${pc.blue(symbol)} ${pc.bold(r.skill)} \u2192 ${r.agent}`)\n }\n }\n\n if (alreadyExists.length > 0) {\n for (const r of alreadyExists) {\n console.log(`${pc.dim(symbol)} ${r.skill} \u2192 ${r.agent} ${pc.dim('(exists)')}`)\n }\n }\n\n if (failed.length > 0) {\n for (const r of failed) {\n console.log(`${pc.red('\u2717')} ${r.skill} \u2192 ${r.agent}: ${r.error}`)\n }\n }\n\n const totalAgents = new Set(results.map((r) => r.agent)).size\n\n console.log()\n console.log(\n `${pc.blue(S_BAR_END)} ${pc.blue('\u2713')} ${pc.bold(`${successful.length} skill(s)`)} installed to ${pc.bold(`${totalAgents} agent(s)`)}`,\n )\n}\n\nexport function showAvailableSkills() {\n const skills = discoverSkills()\n\n console.clear()\n console.log(LOGO)\n\n if (skills.length === 0) {\n console.log(`${pc.blue(S_BAR)} ${pc.yellow('No skills found')}`)\n return\n }\n\n console.log(`${pc.blue(S_BAR)}`)\n console.log(`${pc.blue(S_BAR)} ${pc.bold(`${skills.length} skills available:`)}`)\n console.log(`${pc.blue(S_BAR)}`)\n\n for (const skill of skills) {\n console.log(`${pc.blue(S_BAR)} ${pc.blue('\u25C6')} ${pc.bold(skill.name)}`)\n console.log(`${pc.blue(S_BAR)} ${pc.dim(skill.description)}`)\n }\n\n console.log(`${pc.blue(S_BAR)}`)\n console.log(`${pc.blue(S_BAR_END)} ${pc.dim('Run \"npx @tech-leads-club/agent-skills\" to install')}`)\n}\n", "import { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { SkillInfo } from './types'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\nexport function getSkillsDirectory(): string {\n const devSkillsDir = join(__dirname, '..', '..', '..', 'skills')\n if (existsSync(devSkillsDir)) return devSkillsDir\n const pkgSkillsDir = join(__dirname, '..', 'skills')\n if (existsSync(pkgSkillsDir)) return pkgSkillsDir\n throw new Error(`Skills directory not found. Checked: ${devSkillsDir}, ${pkgSkillsDir}`)\n}\n\nexport function discoverSkills(): SkillInfo[] {\n const skillsDir = getSkillsDirectory()\n const skills: SkillInfo[] = []\n if (!existsSync(skillsDir)) return skills\n const entries = readdirSync(skillsDir, { withFileTypes: true })\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue\n const skillMdPath = join(skillsDir, entry.name, 'SKILL.md')\n if (!existsSync(skillMdPath)) continue\n const content = readFileSync(skillMdPath, 'utf-8')\n const { name, description } = parseSkillFrontmatter(content)\n\n skills.push({\n name: name || entry.name,\n description: description || 'No description',\n path: join(skillsDir, entry.name),\n })\n }\n\n return skills\n}\n\nfunction parseSkillFrontmatter(content: string): { name?: string; description?: string } {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/)\n if (!frontmatterMatch) return {}\n const frontmatter = frontmatterMatch[1]\n const nameMatch = frontmatter.match(/^name:\\s*(.+)$/m)\n const descMatch = frontmatter.match(/^description:\\s*(.+)$/m)\n return { name: nameMatch?.[1]?.trim(), description: descMatch?.[1]?.trim() }\n}\n\nexport function getSkillByName(name: string): SkillInfo | undefined {\n const skills = discoverSkills()\n return skills.find((s) => s.name === name)\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,WAAAA,OAAe,YCAxB,OAAS,UAAAC,EAAQ,cAAAC,EAAY,aAAAC,EAAW,eAAAC,GAAa,eAAAC,MAAmB,UACxE,OAAS,QAAAC,EAAM,YAAAC,MAAgB,YCD/B,OAAS,cAAAC,MAAkB,UAC3B,OAAS,WAAAC,MAAe,UACxB,OAAS,QAAAC,MAAY,YAIrB,IAAMC,EAAOF,EAAQ,EAERG,EAAyC,CAEpD,OAAQ,CACN,KAAM,SACN,YAAa,SACb,YAAa,wCACb,UAAW,iBACX,gBAAiBF,EAAKC,EAAM,gBAAgB,EAC5C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,SAAS,CAAC,CACzD,EACA,cAAe,CACb,KAAM,cACN,YAAa,cACb,YAAa,kCACb,UAAW,iBACX,gBAAiBD,EAAKC,EAAM,gBAAgB,EAC5C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,SAAS,CAAC,CACzD,EACA,iBAAkB,CAChB,KAAM,iBACN,YAAa,iBACb,YAAa,yCACb,UAAW,iBACX,gBAAiBD,EAAKC,EAAM,iBAAiB,EAC7C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,UAAU,CAAC,GAAKH,EAAWE,EAAK,QAAQ,IAAI,EAAG,SAAS,CAAC,CACxG,EACA,SAAU,CACR,KAAM,WACN,YAAa,WACb,YAAa,qCACb,UAAW,mBACX,gBAAiBA,EAAKC,EAAM,0BAA0B,EACtD,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,mBAAmB,CAAC,CACnE,EACA,MAAO,CACL,KAAM,QACN,YAAa,QACb,YAAa,yCACb,UAAW,gBACX,gBAAiBD,EAAKC,EAAM,eAAe,EAC3C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,QAAQ,CAAC,CACxD,EAGA,MAAO,CACL,KAAM,QACN,YAAa,QACb,YAAa,kCACb,UAAW,gBACX,gBAAiBD,EAAKC,EAAM,eAAe,EAC3C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,QAAQ,CAAC,CACxD,EACA,MAAO,CACL,KAAM,QACN,YAAa,eACb,YAAa,wBACb,UAAW,gBACX,gBAAiBD,EAAKC,EAAM,eAAe,EAC3C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,QAAQ,CAAC,CACxD,EACA,OAAQ,CACN,KAAM,SACN,YAAa,aACb,YAAa,+BACb,UAAW,iBACX,gBAAiBD,EAAKC,EAAM,gBAAgB,EAC5C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,SAAS,CAAC,CACzD,EACA,YAAa,CACX,KAAM,cACN,YAAa,cACb,YAAa,oCACb,UAAW,gBACX,gBAAiBD,EAAKC,EAAM,eAAe,EAC3C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,qBAAqB,CAAC,GAAKH,EAAWE,EAAK,QAAQ,IAAI,EAAG,QAAQ,CAAC,CAClH,EACA,IAAK,CACH,KAAM,MACN,YAAa,WACb,YAAa,kCACb,UAAW,cACX,gBAAiBA,EAAKC,EAAM,aAAa,EACzC,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,MAAM,CAAC,CACtD,EACA,SAAU,CACR,KAAM,WACN,YAAa,YACb,YAAa,mCACb,UAAW,mBACX,gBAAiBD,EAAKC,EAAM,kBAAkB,EAC9C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,WAAW,CAAC,GAAKH,EAAWE,EAAK,QAAQ,IAAI,EAAG,WAAW,CAAC,CAC3G,EAGA,WAAY,CACV,KAAM,WACN,YAAa,WACb,YAAa,0BACb,UAAW,kBACX,gBAAiBA,EAAKC,EAAM,iBAAiB,EAC7C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,UAAU,CAAC,CAC1D,EACA,QAAS,CACP,KAAM,UACN,YAAa,UACb,YAAa,wCACb,UAAW,kBACX,gBAAiBD,EAAKC,EAAM,iBAAiB,EAC7C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,UAAU,CAAC,CAC1D,EACA,QAAS,CACP,KAAM,UACN,YAAa,UACb,YAAa,yCACb,UAAW,kBACX,gBAAiBD,EAAKC,EAAM,iBAAiB,EAC7C,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,UAAU,CAAC,CAC1D,EACA,SAAU,CACR,KAAM,WACN,YAAa,WACb,YAAa,iCACb,UAAW,mBACX,gBAAiBD,EAAKC,EAAM,yBAAyB,EACrD,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,kBAAkB,CAAC,CAClE,EACA,YAAa,CACX,KAAM,cACN,YAAa,mBACb,YAAa,qCACb,UAAW,sBACX,gBAAiBD,EAAKC,EAAM,qBAAqB,EACjD,gBAAiB,IAAMH,EAAWE,EAAKC,EAAM,cAAc,CAAC,CAC9D,CACF,EAEO,SAASE,GAAqC,CACnD,OAAQ,OAAO,QAAQD,CAAM,EAC1B,OAAO,CAAC,CAAC,CAAEE,CAAM,IAAMA,EAAO,gBAAgB,CAAC,EAC/C,IAAI,CAAC,CAACC,CAAI,IAAMA,CAAI,CACzB,CAEO,SAASC,EAAeD,EAA8B,CAC3D,OAAOH,EAAOG,CAAI,CACpB,CAEO,SAASE,GAAgC,CAC9C,OAAQ,OAAO,KAAKL,CAAM,EAAkB,KAAK,CAACM,EAAGC,IAAMP,EAAOM,CAAC,EAAE,YAAY,cAAcN,EAAOO,CAAC,EAAE,WAAW,CAAC,CACvH,CDtJA,IAAMC,EAAiB,cAWhB,SAASC,EAAcC,EAAqBC,EAA0C,CAC3F,IAAMC,EAA2B,CAAC,EAElC,QAAWC,KAASF,EAAQ,OAAQ,CAClC,IAAMG,EAASC,EAAeF,CAAK,EAC7BG,EAAYL,EAAQ,OAASG,EAAO,gBAAkBG,EAAK,QAAQ,IAAI,EAAGH,EAAO,SAAS,EAC3FI,EAAWF,CAAS,GAAGG,EAAUH,EAAW,CAAE,UAAW,EAAK,CAAC,EACpE,QAAWI,KAASV,EAAQ,CAC1B,IAAMW,EAASC,EAAqBF,EAAOP,EAAOG,EAAWL,EAAQ,MAAM,EAC3EC,EAAQ,KAAKS,CAAM,CACrB,CACF,CAEA,OAAOT,CACT,CAEA,SAASU,EACPF,EACAP,EACAG,EACAO,EACe,CACf,IAAMT,EAASC,EAAeF,CAAK,EAC7BW,EAAkBP,EAAKD,EAAWI,EAAM,IAAI,EAElD,GAAI,CACF,GAAIF,EAAWM,CAAe,EAC5B,MAAO,CACL,MAAOV,EAAO,YACd,MAAOM,EAAM,KACb,KAAMI,EACN,OAAAD,EACA,QAAS,GACT,MAAO,gBACT,EAGF,GAAIA,IAAW,UAAW,CAExB,IAAME,EAAeR,EAAK,QAAQ,IAAI,EAAGT,CAAc,EACjDkB,EAAqBT,EAAKQ,EAAcL,EAAM,IAAI,EACnDF,EAAWO,CAAY,GAAGN,EAAUM,EAAc,CAAE,UAAW,EAAK,CAAC,EACrEP,EAAWQ,CAAkB,GAAGC,EAAOP,EAAM,KAAMM,EAAoB,CAAE,UAAW,EAAK,CAAC,EAC/F,IAAME,EAAeC,EAASb,EAAWU,CAAkB,EAC3DI,EAAYF,EAAcJ,CAAe,CAC3C,MACEG,EAAOP,EAAM,KAAMI,EAAiB,CAAE,UAAW,EAAK,CAAC,EAGzD,MAAO,CACL,MAAOV,EAAO,YACd,MAAOM,EAAM,KACb,KAAMI,EACN,OAAAD,EACA,QAAS,EACX,CACF,OAASQ,EAAO,CACd,MAAO,CACL,MAAOjB,EAAO,YACd,MAAOM,EAAM,KACb,KAAMI,EACN,OAAAD,EACA,QAAS,GACT,MAAOQ,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAC9D,CACF,CACF,CEnFA,OAAS,iBAAAC,EAAe,qBAAAC,EAAmB,gBAAAC,OAAoB,cAC/D,OAAOC,MAAQ,aCDf,OAAS,cAAAC,EAAY,eAAAC,EAAa,gBAAAC,MAAoB,UACtD,OAAS,WAAAC,EAAS,QAAAC,MAAY,YAC9B,OAAS,iBAAAC,MAAqB,WAI9B,IAAMC,EAAaD,EAAc,YAAY,GAAG,EAC1CE,EAAYJ,EAAQG,CAAU,EAE7B,SAASE,GAA6B,CAC3C,IAAMC,EAAeL,EAAKG,EAAW,KAAM,KAAM,KAAM,QAAQ,EAC/D,GAAIP,EAAWS,CAAY,EAAG,OAAOA,EACrC,IAAMC,EAAeN,EAAKG,EAAW,KAAM,QAAQ,EACnD,GAAIP,EAAWU,CAAY,EAAG,OAAOA,EACrC,MAAM,IAAI,MAAM,wCAAwCD,CAAY,KAAKC,CAAY,EAAE,CACzF,CAEO,SAASC,GAA8B,CAC5C,IAAMC,EAAYJ,EAAmB,EAC/BK,EAAsB,CAAC,EAC7B,GAAI,CAACb,EAAWY,CAAS,EAAG,OAAOC,EACnC,IAAMC,EAAUb,EAAYW,EAAW,CAAE,cAAe,EAAK,CAAC,EAE9D,QAAWG,KAASD,EAAS,CAC3B,GAAI,CAACC,EAAM,YAAY,EAAG,SAC1B,IAAMC,EAAcZ,EAAKQ,EAAWG,EAAM,KAAM,UAAU,EAC1D,GAAI,CAACf,EAAWgB,CAAW,EAAG,SAC9B,IAAMC,EAAUf,EAAac,EAAa,OAAO,EAC3C,CAAE,KAAAE,EAAM,YAAAC,CAAY,EAAIC,EAAsBH,CAAO,EAE3DJ,EAAO,KAAK,CACV,KAAMK,GAAQH,EAAM,KACpB,YAAaI,GAAe,iBAC5B,KAAMf,EAAKQ,EAAWG,EAAM,IAAI,CAClC,CAAC,CACH,CAEA,OAAOF,CACT,CAEA,SAASO,EAAsBH,EAA0D,CACvF,IAAMI,EAAmBJ,EAAQ,MAAM,uBAAuB,EAC9D,GAAI,CAACI,EAAkB,MAAO,CAAC,EAC/B,IAAMC,EAAcD,EAAiB,CAAC,EAChCE,EAAYD,EAAY,MAAM,iBAAiB,EAC/CE,EAAYF,EAAY,MAAM,wBAAwB,EAC5D,MAAO,CAAE,KAAMC,IAAY,CAAC,GAAG,KAAK,EAAG,YAAaC,IAAY,CAAC,GAAG,KAAK,CAAE,CAC7E,CAEO,SAASC,EAAeP,EAAqC,CAElE,OADeP,EAAe,EAChB,KAAMe,GAAMA,EAAE,OAASR,CAAI,CAC3C,CD7CA,IAAMS,EAAQ,SACRC,EAAY,SACZC,GAAiB,SACjBC,GAAmB,SACnBC,GAAoB,SACpBC,GAAsB,SAEtBC,EAASC,EAAG,KAAK,QAAG,EAEpBC,EAAO;AAAA,IACTD,EAAG,KAAKA,EAAG,KAAK,wBAAmB,CAAC,CAAC;AAAA,MACnCA,EAAG,KAAKA,EAAG,MAAM,cAAc,CAAC,CAAC;AAAA,EAGvC,SAASE,EAASC,EAAcC,EAA2B,CACzD,OAAID,EAAK,QAAUC,EAAkBD,EAC9BA,EAAK,MAAM,EAAGC,EAAY,CAAC,EAAI,KACxC,CAQA,eAAeC,EACbC,EACAC,EACAC,EAAqB,CAAC,EACC,CACvB,IAAMC,EAAM,CAACC,EAAmBC,IAAgF,CAC9G,IAAMC,EAAaD,IAAU,YAAcA,IAAU,kBAC/CE,EAAWF,IAAU,UAAYA,IAAU,kBAC3CG,EAAWF,EAAaZ,EAAG,KAAKH,EAAiB,EAAIG,EAAG,IAAIF,EAAmB,EAC/EiB,EAAQF,EAAWb,EAAG,KAAKU,EAAO,KAAK,EAAIA,EAAO,MAClDM,EAAOH,GAAYH,EAAO,KAAOV,EAAG,IAAI,KAAKU,EAAO,IAAI,GAAG,EAAI,GACrE,MAAO,GAAGI,CAAQ,IAAIC,CAAK,GAAGC,CAAI,EACpC,EA8BA,OA5Be,IAAIC,EAAkB,CACnC,QAAAV,EACA,cAAAC,EACA,QAAS,CACP,IAAMU,EAAQ,GAAGlB,EAAG,KAAKP,CAAK,CAAC;AAAA,EAAKO,EAAG,KAAKD,CAAM,CAAC,IAAIC,EAAG,KAAKM,CAAO,CAAC;AAAA,EAEvE,OAAQ,KAAK,MAAO,CAClB,IAAK,SACH,MAAO,GAAGY,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAK,KAAK,QACvC,OAAQ0B,GAAM,KAAK,MAAM,SAASA,EAAE,KAAK,CAAC,EAC1C,IAAKA,GAAMA,EAAE,KAAK,EAClB,KAAKnB,EAAG,IAAI,IAAI,CAAC,CAAC;AAAA,EAAKA,EAAG,KAAKP,CAAK,CAAC,GAC1C,IAAK,SACH,MAAO,GAAGyB,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,cAAcA,EAAG,IAAI,WAAW,CAAC,CAAC;AAAA,EAAKA,EAAG,KAAKP,CAAK,CAAC,GAC/F,QACE,MAAO,GAAGyB,CAAK,GAAG,KAAK,QACpB,IAAI,CAACR,EAAQU,IAAM,CAClB,IAAMR,EAAa,KAAK,MAAM,SAASF,EAAO,KAAK,EAC7CG,EAAWO,IAAM,KAAK,OACtBT,EACJC,GAAcC,EAAW,kBAAoBD,EAAa,WAAaC,EAAW,SAAW,WAC/F,MAAO,GAAGb,EAAG,KAAKP,CAAK,CAAC,KAAKgB,EAAIC,EAAqBC,CAAK,CAAC,EAC9D,CAAC,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,EAAKX,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,sDAA4C,CAAC,EACjG,CACF,CACF,CAAC,EAEa,OAAO,CACvB,CAEA,eAAeqB,GAAcf,EAAiBC,EAAsBe,EAAuC,CACzG,IAAMb,EAAM,CAACC,EAAmBG,IAAsB,CACpD,IAAMU,EAAQV,EAAWb,EAAG,KAAKL,EAAc,EAAIK,EAAG,IAAIJ,EAAgB,EACpEmB,EAAQF,EAAWb,EAAG,KAAKU,EAAO,KAAK,EAAIA,EAAO,MAClDM,EAAOH,GAAYH,EAAO,KAAOV,EAAG,IAAI,MAAMU,EAAO,IAAI,EAAE,EAAI,GACrE,MAAO,GAAGa,CAAK,IAAIR,CAAK,GAAGC,CAAI,EACjC,EAqBA,OAnBe,IAAIQ,GAAa,CAC9B,QAAAjB,EACA,aAAAe,EACA,QAAS,CACP,IAAMJ,EAAQ,GAAGlB,EAAG,KAAKP,CAAK,CAAC;AAAA,EAAKO,EAAG,KAAKD,CAAM,CAAC,IAAIC,EAAG,KAAKM,CAAO,CAAC;AAAA,EAEvE,OAAQ,KAAK,MAAO,CAClB,IAAK,SACH,MAAO,GAAGY,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAK,KAAK,QAAQ,KAAM0B,GAAMA,EAAE,QAAU,KAAK,KAAK,GAAG,KAAK;AAAA,EAAKnB,EAAG,KAAKP,CAAK,CAAC,GACjH,IAAK,SACH,MAAO,GAAGyB,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,cAAcA,EAAG,IAAI,WAAW,CAAC,CAAC;AAAA,EAAKA,EAAG,KAAKP,CAAK,CAAC,GAC/F,QACE,MAAO,GAAGyB,CAAK,GAAG,KAAK,QACpB,IAAI,CAACR,EAAQU,IAAM,GAAGpB,EAAG,KAAKP,CAAK,CAAC,KAAKgB,EAAIC,EAAqBU,IAAM,KAAK,MAAM,CAAC,EAAE,EACtF,KAAK;AAAA,CAAI,CAAC;AAAA,EAAKpB,EAAG,KAAKN,CAAS,CAAC,EACxC,CACF,CACF,CAAC,EAEa,OAAO,CACvB,CAEA,eAAe+B,GAAYnB,EAAiBgB,EAAe,GAAkC,CAmB3F,OAlBe,IAAII,EAAc,CAC/B,OAAQ,MACR,SAAU,KACV,aAAAJ,EACA,QAAS,CACP,IAAMJ,EAAQ,GAAGlB,EAAG,KAAKP,CAAK,CAAC;AAAA,EAAKO,EAAG,KAAKD,CAAM,CAAC,IAAIC,EAAG,KAAKM,CAAO,CAAC;AAAA,EAEvE,OAAQ,KAAK,MAAO,CAClB,IAAK,SACH,MAAO,GAAGY,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAK,KAAK,MAAQ,MAAQ,IAAI;AAAA,EAAKO,EAAG,KAAKP,CAAK,CAAC,GACnF,IAAK,SACH,MAAO,GAAGyB,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,cAAcA,EAAG,IAAI,WAAW,CAAC,CAAC;AAAA,EAAKA,EAAG,KAAKP,CAAK,CAAC,GAC/F,QACE,MAAO,GAAGyB,CAAK,GAAGlB,EAAG,KAAKP,CAAK,CAAC,KAAK,KAAK,MAAQ,GAAGO,EAAG,KAAK,YAAO,CAAC,eAAY,gBAAWA,EAAG,KAAK,WAAM,CAAC,EAAE;AAAA,EAAKA,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,4CAAkC,CAAC,EACvL,CACF,CACF,CAAC,EAEa,OAAO,CACvB,CAEA,eAAsB2B,GAAwD,CAC5E,QAAQ,MAAM,EACd,QAAQ,IAAI1B,CAAI,EAChB,QAAQ,IAAI,GAAGD,EAAG,KAAKP,CAAK,CAAC,EAAE,EAC/B,QAAQ,IAAI,GAAGO,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,IAAI,iDAAiD,CAAC,EAAE,EAC7F,QAAQ,IAAI,GAAGA,EAAG,KAAKP,CAAK,CAAC,EAAE,EAE/B,IAAMmC,EAASC,EAAe,EAC9B,GAAID,EAAO,SAAW,EACpB,eAAQ,IAAI,GAAG5B,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,qBAAqB,CAAC,EAAE,EAC9D,KAGT,IAAM8B,EAAkBC,EAAsB,EACxCC,EAAYC,EAAiB,EAEnC,GAAIH,EAAgB,OAAS,EAAG,CAC9B,IAAMI,EAAaJ,EAChB,MAAM,EAAG,CAAC,EACV,IAAKK,GAAMC,EAAeD,CAAC,EAAE,WAAW,EACxC,KAAK,IAAI,EACNE,EAAOP,EAAgB,OAAS,EAAI,KAAKA,EAAgB,OAAS,CAAC,QAAU,GACnF,QAAQ,IAAI,GAAG9B,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,KAAK,QAAG,CAAC,cAAcA,EAAG,KAAKkC,CAAU,CAAC,GAAGG,CAAI,EAAE,EACxF,QAAQ,IAAI,GAAGrC,EAAG,KAAKP,CAAK,CAAC,EAAE,CACjC,CAGA,IAAM6C,EAAiB,MAAMjC,EAC3B,wCAAwCL,EAAG,IAAI,IAAI4B,EAAO,MAAM,aAAa,CAAC,GAC9EA,EAAO,IAAKW,IAAW,CAAE,MAAOA,EAAM,KAAM,MAAOA,EAAM,KAAM,KAAMrC,EAASqC,EAAM,YAAa,GAAG,CAAE,EAAE,CAC1G,EAEA,GAAI,OAAOD,GAAmB,SAC5B,eAAQ,IAAI,GAAGtC,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,WAAW,CAAC,EAAE,EACpD,KAIT,IAAMwC,EAAiB,MAAMnC,EAC3B,qBAAqBL,EAAG,IAAI,IAAIsC,EAAe,MAAM,qBAAqB,CAAC,GAC3EN,EAAU,IAAKS,GAAS,CACtB,IAAMC,EAASN,EAAeK,CAAI,EAC5BE,EAAcb,EAAgB,SAASW,CAAI,EACjD,MAAO,CACL,MAAOA,EACP,MAAOE,EAAc,GAAGD,EAAO,WAAW,IAAI1C,EAAG,KAAK,QAAG,CAAC,GAAK0C,EAAO,YACtE,KAAMxC,EAASwC,EAAO,YAAa,EAAE,CACvC,CACF,CAAC,EACDZ,EAAgB,OAAS,EAAIA,EAAkB,CAAC,SAAU,aAAa,CACzE,EAEA,GAAI,OAAOU,GAAmB,SAC5B,eAAQ,IAAI,GAAGxC,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,WAAW,CAAC,EAAE,EACpD,KAIT,IAAM4C,EAAS,MAAMvB,GACnB,sBACA,CACE,CAAE,MAAO,UAAW,MAAO,UAAW,KAAM,6BAA8B,EAC1E,CAAE,MAAO,OAAQ,MAAO,OAAQ,KAAM,oBAAqB,CAC7D,EACA,SACF,EAEA,GAAI,OAAOuB,GAAW,SACpB,eAAQ,IAAI,GAAG5C,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,WAAW,CAAC,EAAE,EACpD,KAIT,IAAM6C,EAAS,MAAMpB,GAAY,gDAAiD,EAAK,EAEvF,OAAI,OAAOoB,GAAW,UACpB,QAAQ,IAAI,GAAG7C,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,WAAW,CAAC,EAAE,EACpD,OAGT,QAAQ,IAAI,GAAGA,EAAG,KAAKP,CAAK,CAAC,EAAE,EAExB,CACL,OAAQ+C,EACR,OAAQF,EACR,OAAQM,EACR,OAAQC,CACV,EACF,CAEO,SAASC,EACdC,EAQA,CACA,IAAMC,EAAaD,EAAQ,OAAQE,GAAMA,EAAE,SAAW,CAACA,EAAE,KAAK,EACxDC,EAAgBH,EAAQ,OAAQE,GAAMA,EAAE,SAAWA,EAAE,QAAU,gBAAgB,EAC/EE,EAASJ,EAAQ,OAAQE,GAAM,CAACA,EAAE,OAAO,EAI/C,GAFA,QAAQ,IAAI,EAERD,EAAW,OAAS,EACtB,QAAWC,KAAKD,EACd,QAAQ,IAAI,GAAGhD,EAAG,KAAKD,CAAM,CAAC,IAAIC,EAAG,KAAKiD,EAAE,KAAK,CAAC,WAAMA,EAAE,KAAK,EAAE,EAIrE,GAAIC,EAAc,OAAS,EACzB,QAAWD,KAAKC,EACd,QAAQ,IAAI,GAAGlD,EAAG,IAAID,CAAM,CAAC,IAAIkD,EAAE,KAAK,WAAMA,EAAE,KAAK,IAAIjD,EAAG,IAAI,UAAU,CAAC,EAAE,EAIjF,GAAImD,EAAO,OAAS,EAClB,QAAWF,KAAKE,EACd,QAAQ,IAAI,GAAGnD,EAAG,IAAI,QAAG,CAAC,IAAIiD,EAAE,KAAK,WAAMA,EAAE,KAAK,KAAKA,EAAE,KAAK,EAAE,EAIpE,IAAMG,EAAc,IAAI,IAAIL,EAAQ,IAAKE,GAAMA,EAAE,KAAK,CAAC,EAAE,KAEzD,QAAQ,IAAI,EACZ,QAAQ,IACN,GAAGjD,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,KAAK,QAAG,CAAC,IAAIA,EAAG,KAAK,GAAGgD,EAAW,MAAM,WAAW,CAAC,iBAAiBhD,EAAG,KAAK,GAAGoD,CAAW,WAAW,CAAC,EACvI,CACF,CAEO,SAASC,GAAsB,CACpC,IAAMzB,EAASC,EAAe,EAK9B,GAHA,QAAQ,MAAM,EACd,QAAQ,IAAI5B,CAAI,EAEZ2B,EAAO,SAAW,EAAG,CACvB,QAAQ,IAAI,GAAG5B,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,OAAO,iBAAiB,CAAC,EAAE,EAChE,MACF,CAEA,QAAQ,IAAI,GAAGA,EAAG,KAAKP,CAAK,CAAC,EAAE,EAC/B,QAAQ,IAAI,GAAGO,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,KAAK,GAAG4B,EAAO,MAAM,oBAAoB,CAAC,EAAE,EACjF,QAAQ,IAAI,GAAG5B,EAAG,KAAKP,CAAK,CAAC,EAAE,EAE/B,QAAW8C,KAASX,EAClB,QAAQ,IAAI,GAAG5B,EAAG,KAAKP,CAAK,CAAC,KAAKO,EAAG,KAAK,QAAG,CAAC,IAAIA,EAAG,KAAKuC,EAAM,IAAI,CAAC,EAAE,EACvE,QAAQ,IAAI,GAAGvC,EAAG,KAAKP,CAAK,CAAC,OAAOO,EAAG,IAAIuC,EAAM,WAAW,CAAC,EAAE,EAGjE,QAAQ,IAAI,GAAGvC,EAAG,KAAKP,CAAK,CAAC,EAAE,EAC/B,QAAQ,IAAI,GAAGO,EAAG,KAAKN,CAAS,CAAC,KAAKM,EAAG,IAAI,oDAAoD,CAAC,EAAE,CACtG,CHpRA,IAAMsD,EAAU,IAAIC,GAEpBD,EAAQ,KAAK,YAAY,EAAE,YAAY,mDAAmD,EAAE,QAAQ,OAAO,EAE3GA,EACG,QAAQ,UAAW,CAAE,UAAW,EAAK,CAAC,EACtC,YAAY,0CAA0C,EACtD,OAAO,eAAgB,gCAAiC,EAAK,EAC7D,OAAO,qBAAsB,0BAA0B,EACvD,OAAO,0BAA2B,wBAAwB,EAC1D,OAAO,SAAU,8BAA+B,EAAK,EACrD,OAAO,MAAOE,GAAY,CACzB,GAAIA,EAAQ,OAASA,EAAQ,MAE3B,MAAMC,GAAkBD,CAAO,MAC1B,CAEL,IAAME,EAAiB,MAAMC,EAAsB,EACnD,GAAI,CAACD,EAAgB,OACrB,IAAME,EAASC,EAAe,EAAE,OAAQC,GAAMJ,EAAe,OAAO,SAASI,EAAE,IAAI,CAAC,EAC9EC,EAAUC,EAAcJ,EAAQF,CAAc,EACpDO,EAAmBF,CAAO,CAC5B,CACF,CAAC,EAEHT,EACG,QAAQ,MAAM,EACd,MAAM,IAAI,EACV,YAAY,uBAAuB,EACnC,OAAO,IAAM,CACZY,EAAoB,CACtB,CAAC,EAEH,eAAeT,GAAkBD,EAA+E,CAC9G,IAAMW,EAAYN,EAAe,EAC7BD,EAASO,EAEb,GAAIX,EAAQ,MAAO,CACjB,IAAMY,EAAQC,EAAeb,EAAQ,KAAK,EACrCY,IACH,QAAQ,MAAM,UAAUZ,EAAQ,KAAK,cAAc,EACnD,QAAQ,IAAI,oBAAqBW,EAAU,IAAKL,GAAMA,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EACxE,QAAQ,KAAK,CAAC,GAEhBF,EAAS,CAACQ,CAAK,CACjB,CAEA,IAAME,EAAUd,EAAQ,OAAS,CAAC,cAAe,cAAe,QAAQ,EAClEe,EAASf,EAAQ,KAAO,OAAS,UAEjCO,EAAUC,EAAcJ,EAAQ,CACpC,OAAAU,EACA,OAAQV,EAAO,IAAKE,GAAMA,EAAE,IAAI,EAChC,OAAAS,EACA,OAAQf,EAAQ,MAClB,CAAC,EAEDS,EAAmBF,CAAO,CAC5B,CAEAT,EAAQ,MAAM",
|
|
6
|
+
"names": ["Command", "cpSync", "existsSync", "mkdirSync", "readdirSync", "symlinkSync", "join", "relative", "existsSync", "homedir", "join", "home", "agents", "detectInstalledAgents", "config", "type", "getAgentConfig", "getAllAgentTypes", "a", "b", "TLC_SKILLS_DIR", "installSkills", "skills", "options", "results", "agent", "config", "getAgentConfig", "targetDir", "join", "existsSync", "mkdirSync", "skill", "result", "installSkillForAgent", "method", "skillTargetPath", "canonicalDir", "canonicalSkillPath", "cpSync", "relativePath", "relative", "symlinkSync", "error", "ConfirmPrompt", "MultiSelectPrompt", "SelectPrompt", "pc", "existsSync", "readdirSync", "readFileSync", "dirname", "join", "fileURLToPath", "__filename", "__dirname", "getSkillsDirectory", "devSkillsDir", "pkgSkillsDir", "discoverSkills", "skillsDir", "skills", "entries", "entry", "skillMdPath", "content", "name", "description", "parseSkillFrontmatter", "frontmatterMatch", "frontmatter", "nameMatch", "descMatch", "getSkillByName", "s", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_INACTIVE", "symbol", "pc", "LOGO", "truncate", "text", "maxLength", "blueMultiSelect", "message", "options", "initialValues", "opt", "option", "state", "isSelected", "isActive", "checkbox", "label", "hint", "MultiSelectPrompt", "title", "o", "i", "blueSelect", "initialValue", "radio", "SelectPrompt", "blueConfirm", "ConfirmPrompt", "runInteractiveInstall", "skills", "discoverSkills", "installedAgents", "detectInstalledAgents", "allAgents", "getAllAgentTypes", "agentNames", "a", "getAgentConfig", "more", "selectedSkills", "skill", "selectedAgents", "type", "config", "isInstalled", "method", "global", "showInstallResults", "results", "successful", "r", "alreadyExists", "failed", "totalAgents", "showAvailableSkills", "program", "Command", "options", "runNonInteractive", "installOptions", "runInteractiveInstall", "skills", "discoverSkills", "s", "results", "installSkills", "showInstallResults", "showAvailableSkills", "allSkills", "skill", "getSkillByName", "agents", "method"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tech-leads-club/agent-skills",
|
|
3
|
+
"version": "0.1.0-beta.2",
|
|
4
|
+
"description": "CLI to install skills for AI coding agents",
|
|
5
|
+
"author": "Tech Leads Club",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"tlc-skills": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=22"
|
|
13
|
+
},
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "nx build",
|
|
19
|
+
"dev": "tsx src/index.ts",
|
|
20
|
+
"test": "NODE_OPTIONS='--experimental-vm-modules' jest",
|
|
21
|
+
"typecheck": "tsc --noEmit"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"ai",
|
|
25
|
+
"agents",
|
|
26
|
+
"skills",
|
|
27
|
+
"cli"
|
|
28
|
+
],
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@clack/core": "^0.5.0",
|
|
31
|
+
"@clack/prompts": "^0.11.0",
|
|
32
|
+
"chalk": "^5.6.2",
|
|
33
|
+
"commander": "^14.0.2",
|
|
34
|
+
"picocolors": "^1.1.1",
|
|
35
|
+
"tsx": "4.21.0",
|
|
36
|
+
"@jest/globals": "30.2.0"
|
|
37
|
+
},
|
|
38
|
+
"module": "./index.js",
|
|
39
|
+
"main": "./index.js"
|
|
40
|
+
}
|