@tech-leads-club/agent-skills 0.1.0-beta.2 → 0.1.0-beta.3
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 +34 -0
- package/dist/CHANGELOG.md +146 -0
- package/dist/README.md +297 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +7 -0
- package/dist/package-lock.json +2561 -0
- package/dist/package.json +48 -0
- package/dist/skills/categories.json +24 -0
- package/dist/skills/categories.schema.json +50 -0
- package/jest.config.ts +15 -0
- package/package.json +17 -8
- package/project.json +58 -0
- package/src/__tests__/agents.spec.ts +74 -0
- package/src/__tests__/categories.spec.ts +224 -0
- package/src/__tests__/global-path.spec.ts +93 -0
- package/src/__tests__/installer.spec.ts +100 -0
- package/src/__tests__/skills.spec.ts +68 -0
- package/src/__tests__/update-check.spec.ts +45 -0
- package/src/agents.ts +162 -0
- package/src/categories.ts +121 -0
- package/src/global-path.ts +31 -0
- package/src/index.ts +86 -0
- package/src/installer.ts +287 -0
- package/src/lockfile.ts +79 -0
- package/src/project-root.ts +19 -0
- package/src/prompts/install.ts +351 -0
- package/src/prompts/list.ts +39 -0
- package/src/prompts/remove.ts +68 -0
- package/src/prompts/results.ts +77 -0
- package/src/prompts/utils.ts +36 -0
- package/src/skills.ts +58 -0
- package/src/types.ts +21 -0
- package/src/ui/formatting.ts +3 -0
- package/src/ui/input.ts +139 -0
- package/src/ui/screen.ts +19 -0
- package/src/ui/styles.ts +35 -0
- package/src/update-check.ts +25 -0
- package/tsconfig.json +16 -0
- package/tsconfig.spec.json +18 -0
- package/index.js +0 -22
- package/index.js.map +0 -7
- /package/{skills → dist/skills}/cursor-skill-creator/SKILL.md +0 -0
- /package/{skills → dist/skills}/cursor-subagent-creator/SKILL.md +0 -0
- /package/{skills → dist/skills}/skill-creator/SKILL.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/SKILL.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/references/design.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/references/implement.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/references/specify.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/references/tasks.md +0 -0
- /package/{skills → dist/skills}/spec-driven-dev/references/validate.md +0 -0
- /package/{skills → dist/skills}/subagent-creator/SKILL.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
## 0.1.0-beta.3 (2026-01-25)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- add installation summary display for skills and agents ([13dc11f](https://github.com/tech-leads-club/agent-skills/commit/13dc11f))
|
|
6
|
+
- implement interactive installation wizard for skills and agents ([3bdd983](https://github.com/tech-leads-club/agent-skills/commit/3bdd983))
|
|
7
|
+
- add function to display available skills with installation status ([c8896e1](https://github.com/tech-leads-club/agent-skills/commit/c8896e1))
|
|
8
|
+
- implement interactive skill removal process ([5ea69a4](https://github.com/tech-leads-club/agent-skills/commit/5ea69a4))
|
|
9
|
+
- add functions to display installation and removal results ([4606e3c](https://github.com/tech-leads-club/agent-skills/commit/4606e3c))
|
|
10
|
+
- add utility functions for agent options and installed skills ([f54e25c](https://github.com/tech-leads-club/agent-skills/commit/f54e25c))
|
|
11
|
+
- add truncate function for text length management ([70870b0](https://github.com/tech-leads-club/agent-skills/commit/70870b0))
|
|
12
|
+
- implement blue select and confirm prompts with back navigation ([21b05e1](https://github.com/tech-leads-club/agent-skills/commit/21b05e1))
|
|
13
|
+
- add logo generation and screen initialization functions ([359e6a2](https://github.com/tech-leads-club/agent-skills/commit/359e6a2))
|
|
14
|
+
- add gradient styles and logging functions for UI components ([75fb2e5](https://github.com/tech-leads-club/agent-skills/commit/75fb2e5))
|
|
15
|
+
- update skills directory logic and enhance skill discovery ([da1aff9](https://github.com/tech-leads-club/agent-skills/commit/da1aff9))
|
|
16
|
+
- add unit tests for categories configuration and logic ([ca4e001](https://github.com/tech-leads-club/agent-skills/commit/ca4e001))
|
|
17
|
+
- implement category management and skill assignment functionality ([7eb3bb2](https://github.com/tech-leads-club/agent-skills/commit/7eb3bb2))
|
|
18
|
+
- add detailed install result interface for better tracking ([0d48a0b](https://github.com/tech-leads-club/agent-skills/commit/0d48a0b))
|
|
19
|
+
- implement skill lock file management functions ([c8b6e1d](https://github.com/tech-leads-club/agent-skills/commit/c8b6e1d))
|
|
20
|
+
- enhance skill installation process with symlink and copy methods ([195ffa0](https://github.com/tech-leads-club/agent-skills/commit/195ffa0))
|
|
21
|
+
- add remove command for uninstalling skills ([a8be796](https://github.com/tech-leads-club/agent-skills/commit/a8be796))
|
|
22
|
+
- add function to find project root directory ([1cfe620](https://github.com/tech-leads-club/agent-skills/commit/1cfe620))
|
|
23
|
+
- use project root for skill installation paths ([f27e81c](https://github.com/tech-leads-club/agent-skills/commit/f27e81c))
|
|
24
|
+
- enhance agent installation detection for project root ([b7fca84](https://github.com/tech-leads-club/agent-skills/commit/b7fca84))
|
|
25
|
+
- add global path utilities for skill management ([36f45e5](https://github.com/tech-leads-club/agent-skills/commit/36f45e5))
|
|
26
|
+
- implement global symlink handling for skill installation ([b45b92e](https://github.com/tech-leads-club/agent-skills/commit/b45b92e))
|
|
27
|
+
- add update check functionality for package versioning ([e034070](https://github.com/tech-leads-club/agent-skills/commit/e034070))
|
|
28
|
+
- enhance installer tests with global symlink handling ([b44be21](https://github.com/tech-leads-club/agent-skills/commit/b44be21))
|
|
29
|
+
- add project configuration for CLI application ([1ee7ad5](https://github.com/tech-leads-club/agent-skills/commit/1ee7ad5))
|
|
30
|
+
|
|
31
|
+
### ❤️ Thank You
|
|
32
|
+
|
|
33
|
+
- Felipe Rodrigues @felipfr
|
|
34
|
+
|
|
1
35
|
## 0.1.0-beta.2 (2026-01-25)
|
|
2
36
|
|
|
3
37
|
### 🚀 Features
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
## 0.1.0-beta.3 (2026-01-25)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- add installation summary display for skills and agents ([13dc11f](https://github.com/tech-leads-club/agent-skills/commit/13dc11f))
|
|
6
|
+
- implement interactive installation wizard for skills and agents ([3bdd983](https://github.com/tech-leads-club/agent-skills/commit/3bdd983))
|
|
7
|
+
- add function to display available skills with installation status ([c8896e1](https://github.com/tech-leads-club/agent-skills/commit/c8896e1))
|
|
8
|
+
- implement interactive skill removal process ([5ea69a4](https://github.com/tech-leads-club/agent-skills/commit/5ea69a4))
|
|
9
|
+
- add functions to display installation and removal results ([4606e3c](https://github.com/tech-leads-club/agent-skills/commit/4606e3c))
|
|
10
|
+
- add utility functions for agent options and installed skills ([f54e25c](https://github.com/tech-leads-club/agent-skills/commit/f54e25c))
|
|
11
|
+
- add truncate function for text length management ([70870b0](https://github.com/tech-leads-club/agent-skills/commit/70870b0))
|
|
12
|
+
- implement blue select and confirm prompts with back navigation ([21b05e1](https://github.com/tech-leads-club/agent-skills/commit/21b05e1))
|
|
13
|
+
- add logo generation and screen initialization functions ([359e6a2](https://github.com/tech-leads-club/agent-skills/commit/359e6a2))
|
|
14
|
+
- add gradient styles and logging functions for UI components ([75fb2e5](https://github.com/tech-leads-club/agent-skills/commit/75fb2e5))
|
|
15
|
+
- update skills directory logic and enhance skill discovery ([da1aff9](https://github.com/tech-leads-club/agent-skills/commit/da1aff9))
|
|
16
|
+
- add unit tests for categories configuration and logic ([ca4e001](https://github.com/tech-leads-club/agent-skills/commit/ca4e001))
|
|
17
|
+
- implement category management and skill assignment functionality ([7eb3bb2](https://github.com/tech-leads-club/agent-skills/commit/7eb3bb2))
|
|
18
|
+
- add detailed install result interface for better tracking ([0d48a0b](https://github.com/tech-leads-club/agent-skills/commit/0d48a0b))
|
|
19
|
+
- implement skill lock file management functions ([c8b6e1d](https://github.com/tech-leads-club/agent-skills/commit/c8b6e1d))
|
|
20
|
+
- enhance skill installation process with symlink and copy methods ([195ffa0](https://github.com/tech-leads-club/agent-skills/commit/195ffa0))
|
|
21
|
+
- add remove command for uninstalling skills ([a8be796](https://github.com/tech-leads-club/agent-skills/commit/a8be796))
|
|
22
|
+
- add function to find project root directory ([1cfe620](https://github.com/tech-leads-club/agent-skills/commit/1cfe620))
|
|
23
|
+
- use project root for skill installation paths ([f27e81c](https://github.com/tech-leads-club/agent-skills/commit/f27e81c))
|
|
24
|
+
- enhance agent installation detection for project root ([b7fca84](https://github.com/tech-leads-club/agent-skills/commit/b7fca84))
|
|
25
|
+
- add global path utilities for skill management ([36f45e5](https://github.com/tech-leads-club/agent-skills/commit/36f45e5))
|
|
26
|
+
- implement global symlink handling for skill installation ([b45b92e](https://github.com/tech-leads-club/agent-skills/commit/b45b92e))
|
|
27
|
+
- add update check functionality for package versioning ([e034070](https://github.com/tech-leads-club/agent-skills/commit/e034070))
|
|
28
|
+
- enhance installer tests with global symlink handling ([b44be21](https://github.com/tech-leads-club/agent-skills/commit/b44be21))
|
|
29
|
+
- add project configuration for CLI application ([1ee7ad5](https://github.com/tech-leads-club/agent-skills/commit/1ee7ad5))
|
|
30
|
+
|
|
31
|
+
### ❤️ Thank You
|
|
32
|
+
|
|
33
|
+
- Felipe Rodrigues @felipfr
|
|
34
|
+
|
|
35
|
+
## 0.1.0-beta.2 (2026-01-25)
|
|
36
|
+
|
|
37
|
+
### 🚀 Features
|
|
38
|
+
|
|
39
|
+
- add .nvmrc file with Node.js version ([2b0071d](https://github.com/tech-leads-club/agent-skills/commit/2b0071d))
|
|
40
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
41
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
42
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
43
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
44
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
45
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
46
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
47
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
48
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
49
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
50
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
51
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
52
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
53
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
54
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
55
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
56
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
57
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
58
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
59
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
60
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
61
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
62
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
63
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
64
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
65
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
66
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
67
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
68
|
+
|
|
69
|
+
### ❤️ Thank You
|
|
70
|
+
|
|
71
|
+
- Felipe Rodrigues @felipfr
|
|
72
|
+
|
|
73
|
+
## 0.1.0-beta.1 (2026-01-25)
|
|
74
|
+
|
|
75
|
+
### 🚀 Features
|
|
76
|
+
|
|
77
|
+
- add .nvmrc file with Node.js version ([2b0071d](https://github.com/tech-leads-club/agent-skills/commit/2b0071d))
|
|
78
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
79
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
80
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
81
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
82
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
83
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
84
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
85
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
86
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
87
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
88
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
89
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
90
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
91
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
92
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
93
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
94
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
95
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
96
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
97
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
98
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
99
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
100
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
101
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
102
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
103
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
104
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
105
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
106
|
+
|
|
107
|
+
### ❤️ Thank You
|
|
108
|
+
|
|
109
|
+
- Felipe Rodrigues @felipfr
|
|
110
|
+
|
|
111
|
+
## 0.1.0-beta.0 (2026-01-25)
|
|
112
|
+
|
|
113
|
+
### 🚀 Features
|
|
114
|
+
|
|
115
|
+
- add TypeScript configuration for project setup ([1abc21f](https://github.com/tech-leads-club/agent-skills/commit/1abc21f))
|
|
116
|
+
- add guide for creating AI subagents with isolated context ([0c130d8](https://github.com/tech-leads-club/agent-skills/commit/0c130d8))
|
|
117
|
+
- add spec-driven development skill for feature planning ([dfaac3f](https://github.com/tech-leads-club/agent-skills/commit/dfaac3f))
|
|
118
|
+
- add design, implementation, task, and validation documentation ([e5f7904](https://github.com/tech-leads-club/agent-skills/commit/e5f7904))
|
|
119
|
+
- add skill-creator guide for effective AI agent skills ([b0b5674](https://github.com/tech-leads-club/agent-skills/commit/b0b5674))
|
|
120
|
+
- update cursor skill creator description and name for clarity ([997b35e](https://github.com/tech-leads-club/agent-skills/commit/997b35e))
|
|
121
|
+
- add cursor subagent creator skill for complex workflows ([6e1b6f0](https://github.com/tech-leads-club/agent-skills/commit/6e1b6f0))
|
|
122
|
+
- implement skill installation and listing functionality ([ba9cb2c](https://github.com/tech-leads-club/agent-skills/commit/ba9cb2c))
|
|
123
|
+
- implement interactive skill installation and listing commands ([945f255](https://github.com/tech-leads-club/agent-skills/commit/945f255))
|
|
124
|
+
- add agent configuration and detection functionality ([b35851a](https://github.com/tech-leads-club/agent-skills/commit/b35851a))
|
|
125
|
+
- add interactive skill installation and management prompts ([fe52459](https://github.com/tech-leads-club/agent-skills/commit/fe52459))
|
|
126
|
+
- implement skill discovery and management functions ([4fd5139](https://github.com/tech-leads-club/agent-skills/commit/4fd5139))
|
|
127
|
+
- add interfaces for agent configuration and skill management ([74ea8f8](https://github.com/tech-leads-club/agent-skills/commit/74ea8f8))
|
|
128
|
+
- add TypeScript configuration for testing with Jest ([32aa9a1](https://github.com/tech-leads-club/agent-skills/commit/32aa9a1))
|
|
129
|
+
- add TypeScript configuration for CLI package ([f23d900](https://github.com/tech-leads-club/agent-skills/commit/f23d900))
|
|
130
|
+
- add initial CLI package configuration for agent skills ([072af1d](https://github.com/tech-leads-club/agent-skills/commit/072af1d))
|
|
131
|
+
- add Jest configuration for CLI testing ([b7d098e](https://github.com/tech-leads-club/agent-skills/commit/b7d098e))
|
|
132
|
+
- add release workflow for automated deployment on push ([195cad7](https://github.com/tech-leads-club/agent-skills/commit/195cad7))
|
|
133
|
+
- add CI configuration for validating skills structure ([66fa03b](https://github.com/tech-leads-club/agent-skills/commit/66fa03b))
|
|
134
|
+
- add TypeScript configuration for project setup ([2a7ee33](https://github.com/tech-leads-club/agent-skills/commit/2a7ee33))
|
|
135
|
+
- add comprehensive README for agent skills documentation ([7f7063d](https://github.com/tech-leads-club/agent-skills/commit/7f7063d))
|
|
136
|
+
- add symlink for AGENTS.md to CLAUDE.md ([a429576](https://github.com/tech-leads-club/agent-skills/commit/a429576))
|
|
137
|
+
- add AGENTS.md for guidance on AI coding agents ([3e0917d](https://github.com/tech-leads-club/agent-skills/commit/3e0917d))
|
|
138
|
+
- add initial configuration ([4584775](https://github.com/tech-leads-club/agent-skills/commit/4584775))
|
|
139
|
+
- add nx configuration for project management and build processes ([c937d0e](https://github.com/tech-leads-club/agent-skills/commit/c937d0e))
|
|
140
|
+
- add Jest configuration for project testing ([c5141b9](https://github.com/tech-leads-club/agent-skills/commit/c5141b9))
|
|
141
|
+
- add Jest preset configuration for TypeScript testing ([df7f962](https://github.com/tech-leads-club/agent-skills/commit/df7f962))
|
|
142
|
+
- add ESLint configuration for TypeScript with recommended rules ([7e04b65](https://github.com/tech-leads-club/agent-skills/commit/7e04b65))
|
|
143
|
+
|
|
144
|
+
### ❤️ Thank You
|
|
145
|
+
|
|
146
|
+
- Felipe Rodrigues @felipfr
|
package/dist/README.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/npm/v/@tech-leads-club/agent-skills?style=flat-square&color=blue" alt="npm version" />
|
|
3
|
+
<img src="https://img.shields.io/github/license/tech-leads-club/agent-skills?style=flat-square" alt="license" />
|
|
4
|
+
<img src="https://img.shields.io/github/actions/workflow/status/tech-leads-club/agent-skills/ci.yml?style=flat-square" alt="build status" />
|
|
5
|
+
<img src="https://img.shields.io/badge/node-%3E%3D22-brightgreen?style=flat-square" alt="node version" />
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<h1 align="center">🧠 Agent Skills</h1>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<strong>A curated collection of skills for AI coding agents</strong>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
Extend the capabilities of <b>Antigravity</b>, <b>Claude Code</b>, <b>Cursor</b>, <b>GitHub Copilot</b>, and more with reusable, packaged instructions.
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## ✨ What are Skills?
|
|
21
|
+
|
|
22
|
+
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.
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
skills/
|
|
26
|
+
spec-driven-dev/
|
|
27
|
+
SKILL.md ← Main instructions
|
|
28
|
+
templates/ ← File templates
|
|
29
|
+
references/ ← On-demand documentation
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 🚀 Quick Start
|
|
33
|
+
|
|
34
|
+
### Install Skills in Your Project
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx @tech-leads-club/agent-skills
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This launches an interactive wizard with 5 steps:
|
|
41
|
+
|
|
42
|
+
1. **Browse categories** — Filter skills by category or select "All"
|
|
43
|
+
2. **Select skills** — Choose which skills to install
|
|
44
|
+
3. **Choose agents** — Pick target agents (Cursor, Claude Code, etc.)
|
|
45
|
+
4. **Installation method** — Symlink (recommended) or Copy
|
|
46
|
+
5. **Scope** — Global (user home) or Local (project only)
|
|
47
|
+
|
|
48
|
+
Each step shows a **← Back** option to return to the previous step and revise your choices. A confirmation summary is shown before installation.
|
|
49
|
+
|
|
50
|
+
### CLI Options
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Interactive mode (default)
|
|
54
|
+
npx @tech-leads-club/agent-skills
|
|
55
|
+
|
|
56
|
+
# Install globally (to ~/.agent/skills, ~/.claude/skills, etc.)
|
|
57
|
+
npx @tech-leads-club/agent-skills install -g
|
|
58
|
+
|
|
59
|
+
# List available skills
|
|
60
|
+
npx @tech-leads-club/agent-skills list
|
|
61
|
+
|
|
62
|
+
# Install a specific skill
|
|
63
|
+
npx @tech-leads-club/agent-skills install -s spec-driven-dev
|
|
64
|
+
|
|
65
|
+
# Install to specific agents
|
|
66
|
+
npx @tech-leads-club/agent-skills install -a antigravity cursor
|
|
67
|
+
|
|
68
|
+
# Use copy instead of symlink
|
|
69
|
+
npx @tech-leads-club/agent-skills install --copy
|
|
70
|
+
|
|
71
|
+
# Remove skills (interactive)
|
|
72
|
+
npx @tech-leads-club/agent-skills remove
|
|
73
|
+
|
|
74
|
+
# Remove a specific skill
|
|
75
|
+
npx @tech-leads-club/agent-skills remove -s spec-driven-dev
|
|
76
|
+
|
|
77
|
+
# Remove from global installation
|
|
78
|
+
npx @tech-leads-club/agent-skills remove -g -s spec-driven-dev
|
|
79
|
+
|
|
80
|
+
# Show help
|
|
81
|
+
npx @tech-leads-club/agent-skills --help
|
|
82
|
+
npx @tech-leads-club/agent-skills install --help
|
|
83
|
+
npx @tech-leads-club/agent-skills remove --help
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 📦 Available Skills
|
|
89
|
+
|
|
90
|
+
Skills are organized by category for easier navigation.
|
|
91
|
+
|
|
92
|
+
### 🔧 Development
|
|
93
|
+
|
|
94
|
+
| Skill | Description |
|
|
95
|
+
|-------|-------------|
|
|
96
|
+
| **spec-driven-dev** | Specification-driven development workflow with 4 phases: specify → design → tasks → implement+validate |
|
|
97
|
+
|
|
98
|
+
### 🛠 Skill & Agent Creation
|
|
99
|
+
|
|
100
|
+
| Skill | Description |
|
|
101
|
+
|-------|-------------|
|
|
102
|
+
| **skill-creator** | Meta-skill for creating new skills following best practices |
|
|
103
|
+
| **subagent-creator** | Create specialized subagents for complex tasks |
|
|
104
|
+
| **cursor-skill-creator** | Cursor-specific skill creation |
|
|
105
|
+
| **cursor-subagent-creator** | Cursor-specific subagent creation |
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 🛠 For Contributors
|
|
110
|
+
|
|
111
|
+
### Prerequisites
|
|
112
|
+
|
|
113
|
+
- **Node.js** ≥ 22
|
|
114
|
+
- **npm** (comes with Node.js)
|
|
115
|
+
|
|
116
|
+
### Setup
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Clone the repository
|
|
120
|
+
git clone https://github.com/tech-leads-club/agent-skills.git
|
|
121
|
+
cd agent-skills
|
|
122
|
+
|
|
123
|
+
# Install dependencies
|
|
124
|
+
npm ci
|
|
125
|
+
|
|
126
|
+
# Build all packages
|
|
127
|
+
npm run build
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Development Commands
|
|
131
|
+
|
|
132
|
+
| Command | Description |
|
|
133
|
+
|---------|-------------|
|
|
134
|
+
| `npm run start:dev` | Run CLI locally (interactive mode) |
|
|
135
|
+
| `npm run g <name>` | Generate a new skill |
|
|
136
|
+
| `npm run build` | Build all packages |
|
|
137
|
+
| `npm run test` | Run all tests |
|
|
138
|
+
| `npm run lint` | Lint codebase |
|
|
139
|
+
| `npm run lint:fix` | Fix lint issues |
|
|
140
|
+
| `npm run format` | Format code with Prettier |
|
|
141
|
+
| `npm run release:dry` | Preview release (dry-run) |
|
|
142
|
+
|
|
143
|
+
### Creating a New Skill
|
|
144
|
+
|
|
145
|
+
Use the NX generator:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Basic usage (will prompt for category)
|
|
149
|
+
nx g @tech-leads-club/skill-plugin:skill my-awesome-skill
|
|
150
|
+
|
|
151
|
+
# With category specified
|
|
152
|
+
nx g @tech-leads-club/skill-plugin:skill my-awesome-skill --category=development
|
|
153
|
+
|
|
154
|
+
# With all options
|
|
155
|
+
nx g @tech-leads-club/skill-plugin:skill my-skill \
|
|
156
|
+
--description="What my skill does" \
|
|
157
|
+
--category=development
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The generator will:
|
|
161
|
+
- Create `skills/my-skill/SKILL.md` with the correct template structure
|
|
162
|
+
- Assign the skill to the specified category (creating it if needed)
|
|
163
|
+
- If no category is specified, the skill will appear as "Uncategorized"
|
|
164
|
+
|
|
165
|
+
### Skill Structure
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
skills/my-skill/
|
|
169
|
+
├── SKILL.md # Required: main instructions
|
|
170
|
+
├── scripts/ # Optional: executable scripts
|
|
171
|
+
├── references/ # Optional: on-demand documentation
|
|
172
|
+
├── templates/ # Optional: file templates
|
|
173
|
+
└── assets/ # Optional: images, files
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Skill Categories
|
|
177
|
+
|
|
178
|
+
Skills are organized into categories for better navigation in the CLI. Categories are defined in `skills/categories.json`.
|
|
179
|
+
|
|
180
|
+
#### Adding a Skill to a Category
|
|
181
|
+
|
|
182
|
+
Edit `skills/categories.json` and add your skill to the `skills` map:
|
|
183
|
+
|
|
184
|
+
```json
|
|
185
|
+
{
|
|
186
|
+
"categories": [
|
|
187
|
+
{ "id": "development", "name": "Development", "priority": 1 },
|
|
188
|
+
{ "id": "creation", "name": "Skill & Agent Creation", "priority": 2 }
|
|
189
|
+
],
|
|
190
|
+
"skills": {
|
|
191
|
+
"my-new-skill": "development"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### Creating a New Category
|
|
197
|
+
|
|
198
|
+
Add a new entry to the `categories` array:
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"id": "my-category",
|
|
203
|
+
"name": "My Category",
|
|
204
|
+
"description": "Optional description",
|
|
205
|
+
"priority": 3
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
- `id`: Unique identifier (kebab-case)
|
|
210
|
+
- `name`: Display name in the CLI
|
|
211
|
+
- `description`: Optional description
|
|
212
|
+
- `priority`: Display order (lower = first)
|
|
213
|
+
|
|
214
|
+
### SKILL.md Format
|
|
215
|
+
|
|
216
|
+
```markdown
|
|
217
|
+
---
|
|
218
|
+
name: my-skill
|
|
219
|
+
description: What this skill does. Use when user says "trigger phrase".
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
# My Skill
|
|
223
|
+
|
|
224
|
+
Brief description.
|
|
225
|
+
|
|
226
|
+
## Process
|
|
227
|
+
|
|
228
|
+
1. Step one
|
|
229
|
+
2. Step two
|
|
230
|
+
3. ...
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Best Practices
|
|
234
|
+
|
|
235
|
+
- **Keep SKILL.md under 500 lines** — use `references/` for detailed docs
|
|
236
|
+
- **Write specific descriptions** — include trigger phrases
|
|
237
|
+
- **Assume the agent is smart** — only add what it doesn't already know
|
|
238
|
+
- **Prefer scripts over inline code** — reduces context window usage
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 📁 Project Structure
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
agent-skills/
|
|
246
|
+
├── packages/
|
|
247
|
+
│ └── cli/ # @tech-leads-club/agent-skills CLI package
|
|
248
|
+
├── tools/
|
|
249
|
+
│ └── skill-plugin/ # NX generator plugin
|
|
250
|
+
├── skills/ # Skill definitions
|
|
251
|
+
│ ├── categories.json # Skill category mappings
|
|
252
|
+
│ └── [skill-name]/ # Individual skill folders
|
|
253
|
+
├── .github/
|
|
254
|
+
│ └── workflows/
|
|
255
|
+
│ ├── ci.yml # CI: lint, test, build
|
|
256
|
+
│ └── release.yml # Release: version, publish
|
|
257
|
+
├── nx.json # NX configuration
|
|
258
|
+
└── package.json # Root package.json
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 🔄 Release Process
|
|
264
|
+
|
|
265
|
+
This project uses **NX Release** with **Conventional Commits** for automated versioning:
|
|
266
|
+
|
|
267
|
+
| Commit Prefix | Version Bump | Example |
|
|
268
|
+
|---------------|--------------|---------|
|
|
269
|
+
| `feat:` | Minor (0.X.0) | `feat: add new skill` |
|
|
270
|
+
| `fix:` | Patch (0.0.X) | `fix: correct symlink path` |
|
|
271
|
+
| `feat!:` | Major (X.0.0) | `feat!: breaking API change` |
|
|
272
|
+
| `docs:` | No bump | `docs: update README` |
|
|
273
|
+
| `chore:` | No bump | `chore: update deps` |
|
|
274
|
+
|
|
275
|
+
Releases are automated via GitHub Actions when merging to `main`.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 🤝 Contributing
|
|
280
|
+
|
|
281
|
+
1. **Fork** the repository
|
|
282
|
+
2. **Create** a feature branch (`git checkout -b feat/amazing-skill`)
|
|
283
|
+
3. **Commit** with conventional commits (`git commit -m "feat: add amazing skill"`)
|
|
284
|
+
4. **Push** to your fork (`git push origin feat/amazing-skill`)
|
|
285
|
+
5. **Open** a Pull Request
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 📄 License
|
|
290
|
+
|
|
291
|
+
MIT © [Tech Leads Club](https://github.com/tech-leads-club)
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
<p align="center">
|
|
296
|
+
<sub>Built with ❤️ by the Tech Leads Club community</sub>
|
|
297
|
+
</p>
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{Command as Jt}from"commander";import{cp as De,lstat as dt,mkdir as le,readdir as Pe,readlink as yt,rm as E,symlink as kt}from"node:fs/promises";import{homedir as bt,platform as St}from"node:os";import{join as A,normalize as xe,relative as ht,resolve as z,sep as $t}from"node:path";import{existsSync as m}from"node:fs";import{homedir as ot}from"node:os";import{join as g}from"node:path";import{existsSync as fe}from"node:fs";import{dirname as Ze,join as de,parse as et,resolve as tt}from"node:path";function D(e=process.cwd()){let t=tt(e),o=et(t).root;for(;t!==o;){if((fe(de(t,"package.json"))||fe(de(t,".git")))&&!t.endsWith("packages/cli"))return t;t=Ze(t)}return e}var f=ot(),h=D(),B={cursor:{name:"cursor",displayName:"Cursor",description:"AI-first code editor built on VS Code",skillsDir:".cursor/skills",globalSkillsDir:g(f,".cursor/skills"),detectInstalled:()=>m(g(f,".cursor"))||m(g(h,".cursor"))},"claude-code":{name:"claude-code",displayName:"Claude Code",description:"Anthropic's agentic coding tool",skillsDir:".claude/skills",globalSkillsDir:g(f,".claude/skills"),detectInstalled:()=>m(g(f,".claude"))||m(g(h,".claude"))},"github-copilot":{name:"github-copilot",displayName:"GitHub Copilot",description:"AI pair programmer by GitHub/Microsoft",skillsDir:".github/skills",globalSkillsDir:g(f,".copilot/skills"),detectInstalled:()=>m(g(f,".copilot"))||m(g(h,".github"))},windsurf:{name:"windsurf",displayName:"Windsurf",description:"AI IDE with Cascade flow (Codeium)",skillsDir:".windsurf/skills",globalSkillsDir:g(f,".codeium/windsurf/skills"),detectInstalled:()=>m(g(f,".codeium/windsurf"))||m(g(h,".windsurf"))},cline:{name:"cline",displayName:"Cline",description:"Autonomous AI coding agent for VS Code",skillsDir:".cline/skills",globalSkillsDir:g(f,".cline/skills"),detectInstalled:()=>m(g(f,".cline"))||m(g(h,".cline"))},aider:{name:"aider",displayName:"Aider",description:"AI pair programming in terminal",skillsDir:".aider/skills",globalSkillsDir:g(f,".aider/skills"),detectInstalled:()=>m(g(f,".aider"))||m(g(h,".aider"))},codex:{name:"codex",displayName:"OpenAI Codex",description:"OpenAI's coding agent",skillsDir:".codex/skills",globalSkillsDir:g(f,".codex/skills"),detectInstalled:()=>m(g(f,".codex"))||m(g(h,".codex"))},gemini:{name:"gemini",displayName:"Gemini CLI",description:"Google's AI coding assistant",skillsDir:".gemini/skills",globalSkillsDir:g(f,".gemini/skills"),detectInstalled:()=>m(g(f,".gemini"))||m(g(h,".gemini"))},antigravity:{name:"antigravity",displayName:"Antigravity",description:"Google's agentic coding (VS Code)",skillsDir:".agent/skills",globalSkillsDir:g(f,".agent/skills"),detectInstalled:()=>m(g(f,".gemini/antigravity"))||m(g(h,".agent"))},roo:{name:"roo",displayName:"Roo Code",description:"AI coding assistant for VS Code",skillsDir:".roo/skills",globalSkillsDir:g(f,".roo/skills"),detectInstalled:()=>m(g(f,".roo"))||m(g(h,".roo"))},kilocode:{name:"kilocode",displayName:"Kilo Code",description:"AI coding agent with auto-launch",skillsDir:".kilocode/skills",globalSkillsDir:g(f,".kilocode/skills"),detectInstalled:()=>m(g(f,".kilocode"))||m(g(h,".kilocode"))},"amazon-q":{name:"amazon-q",displayName:"Amazon Q",description:"AWS AI coding assistant",skillsDir:".amazonq/skills",globalSkillsDir:g(f,".amazonq/skills"),detectInstalled:()=>m(g(f,".amazonq"))||m(g(h,".amazonq"))},augment:{name:"augment",displayName:"Augment",description:"AI code assistant with context engine",skillsDir:".augment/skills",globalSkillsDir:g(f,".augment/skills"),detectInstalled:()=>m(g(f,".augment"))||m(g(h,".augment"))},tabnine:{name:"tabnine",displayName:"Tabnine",description:"AI code completions with privacy focus",skillsDir:".tabnine/skills",globalSkillsDir:g(f,".tabnine/skills"),detectInstalled:()=>m(g(f,".tabnine"))||m(g(h,".tabnine"))},opencode:{name:"opencode",displayName:"OpenCode",description:"Open-source AI coding terminal",skillsDir:".opencode/skills",globalSkillsDir:g(f,".config/opencode/skills"),detectInstalled:()=>m(g(f,".config/opencode"))||m(g(h,".opencode"))||m(g(h,".config/opencode"))},sourcegraph:{name:"sourcegraph",displayName:"Sourcegraph Cody",description:"AI assistant with codebase context",skillsDir:".sourcegraph/skills",globalSkillsDir:g(f,".sourcegraph/skills"),detectInstalled:()=>m(g(f,".sourcegraph"))||m(g(h,".sourcegraph"))}};function ye(){return Object.entries(B).filter(([,e])=>e.detectInstalled()).map(([e])=>e)}function P(e){return B[e]}function L(){return Object.keys(B).sort((e,t)=>B[e].displayName.localeCompare(B[t].displayName))}import{execSync as nt}from"node:child_process";import{existsSync as ke}from"node:fs";import{join as be}from"node:path";var lt="@tech-leads-club/agent-skills";function it(){try{return nt("npm root -g",{encoding:"utf-8"}).trim()}catch{return null}}function Se(){let e=it();if(!e)return null;let t=be(e,lt,"skills");return ke(t)?t:null}function ee(){return Se()!==null}function he(e){let t=Se();if(!t)return null;let o=be(t,e);return ke(o)?o:null}import{mkdir as st,readFile as rt,writeFile as at}from"node:fs/promises";import{homedir as ct}from"node:os";import{dirname as gt,join as ut}from"node:path";var mt=".agents",pt=".skill-lock.json",ft=1;function Ae(){return ut(ct(),mt,pt)}function $e(){return{version:ft,skills:{}}}async function we(){let e=Ae();try{let t=await rt(e,"utf-8"),o=JSON.parse(t);return typeof o.version!="number"||!o.skills?$e():o}catch{return $e()}}async function Ie(e){let t=Ae();await st(gt(t),{recursive:!0}),await at(t,JSON.stringify(e,null,2),"utf-8")}async function Ce(e,t="local"){let o=await we(),n=new Date().toISOString(),l=o.skills[e];o.skills[e]={name:e,source:t,installedAt:l?.installedAt??n,updatedAt:n},await Ie(o)}async function ve(e){let t=await we();return e in t.skills?(delete t.skills[e],await Ie(t),!0):!1}var te=A(".agents","skills"),At=new Set(["README.md","metadata.json","SKILL.md"]);function ie(e){let t=e.replace(/[/\\]/g,"");return t=t.replace(/[\0:]/g,""),t=t.replace(/^[.\s]+|[.\s]+$/g,""),t=t.replace(/^\.+/,""),(!t||t.length===0)&&(t="unnamed-skill"),t.substring(0,255)}function oe(e,t){let o=xe(z(e)),n=xe(z(t));return n.startsWith(o+$t)||n===o}async function Te(e,t){try{try{if((await dt(t)).isSymbolicLink()){let r=await yt(t);if(z(r)===z(e))return!0;await E(t)}else await E(t,{recursive:!0})}catch(i){if(i?.code==="ELOOP")try{await E(t,{force:!0})}catch{}}let o=A(t,"..");await le(o,{recursive:!0});let n=ht(o,e),l=St()==="win32"?"junction":void 0;return await kt(n,t,l),!0}catch{return!1}}async function ne(e,t){await le(t,{recursive:!0});let o=await Pe(e,{withFileTypes:!0});for(let n of o){if(At.has(n.name)||n.name.startsWith("_"))continue;let l=A(e,n.name),i=A(t,n.name);n.isDirectory()?await ne(l,i):await De(l,i)}}async function se(e,t){let o=[],n=D();for(let l of t.agents){let i=P(l),r=t.global?i.globalSkillsDir:A(n,i.skillsDir);for(let a of e){let c=await wt(a,l,r,t.method,n,t.global);o.push(c),c.success&&await Ce(a.name,"local")}}return o}async function wt(e,t,o,n,l,i){let r=P(t),a=ie(e.name),c=A(o,a);if(!oe(o,c)&&!i&&!oe(l,c)&&!i)return{agent:r.displayName,skill:e.name,path:c,method:n,success:!1,error:"Security: Invalid skill destination path"};try{if(n==="symlink"){let d=he(e.name);if(d&&await Te(d,c))return{agent:r.displayName,skill:e.name,path:c,method:n,success:!0,usedGlobalSymlink:!0};let u=A(l,te,a);if(await le(u,{recursive:!0}),await De(e.path,u,{recursive:!0}),!await Te(u,c)){try{await E(c,{recursive:!0,force:!0})}catch{}return await ne(e.path,c),{agent:r.displayName,skill:e.name,path:c,method:"copy",success:!0,symlinkFailed:!0}}return{agent:r.displayName,skill:e.name,path:c,method:n,success:!0,usedGlobalSymlink:!1}}else return await ne(e.path,c),{agent:r.displayName,skill:e.name,path:c,method:n,success:!0}}catch(d){return{agent:r.displayName,skill:e.name,path:c,method:n,success:!1,error:d instanceof Error?d.message:String(d)}}}async function Le(e,t){let o=P(e),n=t?o.globalSkillsDir:A(D(),o.skillsDir);try{return(await Pe(n,{withFileTypes:!0})).filter(i=>i.isDirectory()||i.isSymbolicLink()).map(i=>i.name)}catch{return[]}}function It(e,t={}){let o=ie(e),n=t.global?bt():D(),l=A(n,te,o);if(!oe(A(n,te),l))throw new Error("Invalid skill name: potential path traversal detected");return l}async function M(e,t,o={}){let n=[],l=ie(e),i=D(),r=It(e,o);try{await E(r,{recursive:!0,force:!0})}catch{}for(let a of t){let c=P(a),d=o.global?c.globalSkillsDir:A(i,c.skillsDir),u=A(d,l);try{await E(u,{recursive:!0,force:!0}),n.push({agent:c.displayName,success:!0})}catch($){n.push({agent:c.displayName,success:!1,error:$ instanceof Error?$.message:String($)})}}return await ve(e),n}import b from"picocolors";import{existsSync as ge,readFileSync as Ct,writeFileSync as Lo}from"node:fs";import{dirname as vt,join as Ee}from"node:path";import{fileURLToPath as xt}from"node:url";var re="skills/categories.json",ae="skills",V="uncategorized",ce={id:V,name:"Uncategorized",description:"Skills without a specific category",priority:999};var Tt=xt(import.meta.url),_e=vt(Tt);function Dt(){let e=Ee(_e,"..","..","..",re);if(ge(e))return e;let t=Ee(_e,"..",re);return ge(t)?t:e}function Ne(){let e=Dt();if(!ge(e))return{categories:[],skills:{}};try{let t=Ct(e,"utf-8");return JSON.parse(t)}catch{return{categories:[],skills:{}}}}function Re(e){return Ne().skills[e]??V}function W(e){let t=Ne(),o=new Map,n=[...t.categories].sort((l,i)=>(l.priority??100)-(i.priority??100));for(let l of n)o.set(l,[]);o.set(ce,[]);for(let l of e){let i=l.category??t.skills[l.name]??V,r=n.find(c=>c.id===i)??ce,a=o.get(r)??[];a.push(l),o.set(r,a)}for(let[l,i]of o)i.length===0&&o.delete(l);return o}import{existsSync as K,readdirSync as Pt,readFileSync as Lt}from"node:fs";import{dirname as Et,join as U}from"node:path";import{fileURLToPath as _t}from"node:url";var Nt=_t(import.meta.url),Oe=Et(Nt);function Rt(){let e=U(Oe,"..","..","..",ae);if(K(e))return e;let t=U(Oe,"..",ae);if(K(t))return t;throw new Error(`Skills directory not found. Checked: ${e}, ${t}`)}function x(){let e=Rt(),t=[];if(!K(e))return t;let o=Pt(e,{withFileTypes:!0});for(let n of o){if(!n.isDirectory())continue;let l=U(e,n.name,"SKILL.md");if(!K(l))continue;let i=Lt(l,"utf-8"),{name:r,description:a}=Ot(i),c=r||n.name;t.push({name:c,description:a||"No description",path:U(e,n.name),category:Re(c)})}return t}function Ot(e){let t=e.match(/^---\n([\s\S]*?)\n---/);if(!t)return{};let o=t[1],n=o.match(/^name:\s*(.+)$/m),l=o.match(/^description:\s*(.+)$/m);return{name:n?.[1]?.trim(),description:l?.[1]?.trim()}}function Be(e){return x().find(o=>o.name===e)}function Y(e,t){return e.length<=t?e:e.slice(0,t-3)+"..."}import{ConfirmPrompt as Gt,MultiSelectPrompt as Ft,SelectPrompt as jt}from"@clack/core";import s from"picocolors";import Bt from"gradient-string";import G from"picocolors";var Ge=Bt([{color:"#1e3a8a",pos:0},{color:"#3b82f6",pos:.3},{color:"#0ea5e9",pos:.5},{color:"#06b6d4",pos:.7},{color:"#22d3ee",pos:1}]),k="\u2502",F="\u2514",Fe="\u25CF",je="\u25CB",ze="\u25FC",Me="\u25FB",T=G.blue("\u25C6");function y(e=""){console.log(e?`${G.blue(k)} ${e}`:G.blue(k))}function C(e=""){console.log(`${G.blue(F)} ${e}`)}function v(){C(G.gray("Cancelled"))}function I(e){return typeof e=="symbol"}async function q(e,t,o,n=!0){let l=(a,c)=>{let d=c?s.blue(Fe):s.gray(je),u=c?s.blue(a.label):s.white(a.label),$=c&&a.hint?s.dim(s.gray(` - ${a.hint}`)):"";return`${d} ${u}${$}`},r=await new jt({options:t,initialValue:o,render(){let a=`${s.blue(k)}
|
|
2
|
+
${T} ${s.white(s.bold(e))}
|
|
3
|
+
`,c=n?"esc = back, ":"";switch(this.state){case"submit":return`${a}${s.blue(k)} ${s.blue(this.options.find(d=>d.value===this.value)?.label)}
|
|
4
|
+
${s.blue(k)}`;case"cancel":return`${a}${s.blue(k)} ${s.strikethrough(s.gray("back"))}
|
|
5
|
+
${s.blue(k)}`;default:return`${a}${this.options.map((d,u)=>`${s.blue(k)} ${l(d,u===this.cursor)}`).join(`
|
|
6
|
+
`)}
|
|
7
|
+
${s.blue(k)}
|
|
8
|
+
${s.blue(F)} ${s.dim(s.gray(`(\u2191\u2193 navigate, ${c}enter confirm)`))}`}}}).prompt();return typeof r=="symbol"&&n?Symbol.for("back"):r}async function _(e,t,o=[],n=!0){let l=(a,c)=>{let d=c==="selected"||c==="selected-active",u=c==="active"||c==="selected-active",$=d?s.blue(ze):s.gray(Me),S=u?s.blue(a.label):s.white(a.label),O=u&&a.hint?s.dim(s.gray(` (${a.hint})`)):"";return`${$} ${S}${O}`},r=await new Ft({options:t,initialValues:o,render(){let a=`${s.blue(k)}
|
|
9
|
+
${T} ${s.white(s.bold(e))}
|
|
10
|
+
`,c=n?"esc = back, ":"";switch(this.state){case"submit":return`${a}${s.blue(k)} ${this.options.filter(d=>this.value.includes(d.value)).map(d=>s.blue(String(d.value))).join(s.gray(", "))}
|
|
11
|
+
${s.blue(k)}`;case"cancel":return`${a}${s.blue(k)} ${s.strikethrough(s.gray("back"))}
|
|
12
|
+
${s.blue(k)}`;default:return`${a}${this.options.map((d,u)=>{let $=this.value.includes(d.value),S=u===this.cursor,O=$&&S?"selected-active":$?"selected":S?"active":"inactive";return`${s.blue(k)} ${l(d,O)}`}).join(`
|
|
13
|
+
`)}
|
|
14
|
+
${s.blue(k)}
|
|
15
|
+
${s.blue(F)} ${s.dim(s.gray(`(\u2191\u2193 navigate, space select, ${c}enter confirm)`))}`}}}).prompt();return typeof r=="symbol"&&n?Symbol.for("back"):r}async function H(e,t=!1){return new Gt({active:"Yes",inactive:"No",initialValue:t,render(){let n=`${s.blue(k)}
|
|
16
|
+
${T} ${s.white(s.bold(e))}
|
|
17
|
+
`;switch(this.state){case"submit":return`${n}${s.blue(k)} ${s.blue(this.value?"Yes":"No")}
|
|
18
|
+
${s.blue(k)}`;case"cancel":return`${n}${s.blue(k)} ${s.strikethrough(s.gray("cancelled"))}
|
|
19
|
+
${s.blue(k)}`;default:return`${n}${s.blue(k)} ${this.value?`${s.blue("\u25CF Yes")} ${s.dim(s.gray("/"))} ${s.gray("\u25CB")} ${s.white("No")}`:`${s.gray("\u25CB")} ${s.white("Yes")} ${s.dim(s.gray("/"))} ${s.blue("\u25CF No")}`}
|
|
20
|
+
${s.blue(k)}
|
|
21
|
+
${s.blue(F)} ${s.dim(s.gray("(\u2190\u2192 to change, enter to confirm)"))}`}}}).prompt()}import zt from"figlet";import N from"picocolors";function Mt(){let e=zt.textSync("Tech Leads Club",{font:"Larry 3D",horizontalLayout:"default"});return`
|
|
22
|
+
${Ge.multiline(e)}
|
|
23
|
+
${N.white(N.bold("Tech Leads Club"))} ${N.blue("\u203A")} ${N.bold(N.blue("Agent Skills"))}
|
|
24
|
+
${N.white("Curated skills to power up your AI coding agents")}
|
|
25
|
+
`}function R(){console.clear(),console.log(Mt()),y()}import{createRequire as Vt}from"node:module";import Wt from"package-json";var Kt="@tech-leads-club/agent-skills";async function Ve(e){try{let t=await Wt(Kt);return t.version!==e?t.version:null}catch{return null}}function We(){try{return Vt(import.meta.url)("../package.json").version||"0.0.0"}catch{return"0.0.0"}}import p from"picocolors";function Ke(e){y(),y(p.blue(p.bold("\u{1F4CB} Installation Summary"))),y(),y(`${p.blue(k)} ${p.white(p.bold("Skills:"))} ${p.gray(e.skills.join(", "))}`),y(`${p.blue(k)} ${p.white(p.bold("Agents:"))} ${p.gray(e.agents.join(", "))}`),y(`${p.blue(k)} ${p.white(p.bold("Method:"))} ${p.cyan(e.method)}`),y()}function ue(e){let t=e.filter(i=>i.success&&!i.error),o=e.filter(i=>i.success&&i.error==="Already exists"),n=e.filter(i=>!i.success);console.log();for(let i of t)console.log(`${T} ${p.white(p.bold(i.skill))} ${p.gray("\u2192")} ${p.white(i.agent)}`);for(let i of o)console.log(`${p.gray(T)} ${i.skill} \u2192 ${i.agent} ${p.gray("(exists)")}`);for(let i of n)console.log(`${p.red("\u2717")} ${i.skill} \u2192 ${i.agent}: ${i.error}`);let l=new Set(e.map(i=>i.agent)).size;console.log(),C(`${p.blue("\u2713")} ${p.white(p.bold(`${t.length} skill(s)`))} ${p.white("installed to")} ${p.white(p.bold(`${l} agent(s)`))}`)}function J(e,t){let o=t.filter(l=>l.success),n=t.filter(l=>!l.success);o.length>0&&console.log(`${T} ${p.white(p.bold(e))} ${p.gray("removed from")} ${o.map(l=>l.agent).join(", ")}`);for(let l of n)console.log(`${p.red("\u2717")} ${e} \u2192 ${l.agent}: ${l.error}`);o.length>0&&n.length===0&&C(`${p.blue("\u2713")} ${p.white("Skill removed successfully")}`)}import Ut from"picocolors";function Q(e,t=[]){return e.map(o=>{let n=P(o),l=t.includes(o);return{value:o,label:l?`${n.displayName} ${Ut.green("\u25CF detected")}`:n.displayName,hint:Y(n.description,50)}})}async function X(e,t){let o=new Set;for(let n of e)(await Le(n,t)).forEach(i=>o.add(i));return o}async function Z(e){let[t,o]=await Promise.all([X(e,!0),X(e,!1)]);return new Set([...t,...o])}var me="__all_skills__",pe="__all__";async function Ue(){R(),await Yt();let e=x();if(e.length===0)return C(b.red("No skills available")),null;let t=ye(),o=L(),n=t.length>0?t:o,l=await Z(n),i={category:pe,skills:[],agents:t.length>0?t:["cursor","claude-code"],method:"symlink",global:!1},r=1,a=4;for(;r<=a;){let c=b.gray(`[${r}/${a}]`),d=r>1;switch(r){case 1:{let u=await qt({allSkills:e,stepIndicator:c,currentCategory:i.category});if(u===null)return null;i.category=u,r++;break}case 2:{let u=await Ye({state:i,allSkills:e,installedSkills:l,stepIndicator:c,allowBack:d});if(u===Symbol.for("back")){r--;break}if(u===null)return null;i.skills=u,r++;break}case 3:{let u=await qe({allAgents:o,installedAgents:t,currentAgents:i.agents,stepIndicator:c,allowBack:d});if(u===Symbol.for("back")){r--;break}if(u===null)return null;i.agents=u,r++;break}case 4:{let u=await He({state:i,stepIndicator:c,allowBack:d});if(u===Symbol.for("back")){i.method="symlink",r--;break}if(u===null)return null;if(u===!1){r=1;break}return u}}}return null}async function Yt(){let e=We(),t=await Ve(e);t?(y(`${b.yellow("\u26A0")} ${b.yellow("Update available:")} ${b.gray(e)} \u2192 ${b.green(t)}`),y(` ${b.gray("Run: npm update -g @tech-leads-club/agent-skills")}`),y()):ee()||(y(`${b.yellow("\u26A0")} ${b.yellow("Not installed globally")}`),y(` ${b.yellow("Skills won't auto-update. Install globally:")}`),y(` ${b.yellow("npm i -g @tech-leads-club/agent-skills")}`),y())}async function qt({allSkills:e,stepIndicator:t,currentCategory:o}){let n=W(e),l=Array.from(n.keys()),i=[{value:pe,label:`${b.cyan("\u25C9")} All skills`,hint:`${e.length} available`},...l.map(a=>{let c=n.get(a)?.length??0;return{value:a.id,label:`${b.cyan("\u25B8")} ${a.name}`,hint:`${c} skill(s)`}})],r=await q(`${t} Browse by category`,i,o,!1);return I(r)?(v(),null):r}async function Ye({state:e,allSkills:t,installedSkills:o,stepIndicator:n,allowBack:l}){let r=e.category===pe?t:t.filter(S=>S.category===e.category),a=[{value:me,label:`${b.cyan("\u25C9")} ${b.bold("All Skills")}`,hint:`select all ${r.length} skills`},...r.map(S=>{let O=o.has(S.name);return{value:S.name,label:O?`${S.name} ${b.green("\u25CF installed")}`:S.name,hint:Y(S.description,150)}})],c=e.skills.length>0?e.skills:[],d=await _(`${n} Select skills to install`,a,c,l);if(d===Symbol.for("back"))return Symbol.for("back");if(I(d))return v(),null;let u=d,$=u.includes(me)?r.map(S=>S.name):u.filter(S=>S!==me);return $.length===0&&y(b.yellow("\u26A0 Please select at least one skill")),$.length===0?Ye({state:e,allSkills:t,installedSkills:o,stepIndicator:n,allowBack:l}):$}async function qe({allAgents:e,installedAgents:t,currentAgents:o,stepIndicator:n,allowBack:l}){let i=Q(e,t),r=await _(`${n} Where to install?`,i,o,l);if(r===Symbol.for("back"))return Symbol.for("back");if(I(r))return v(),null;let a=r;return a.length===0?(y(b.yellow("\u26A0 Please select at least one agent")),qe({allAgents:e,installedAgents:t,currentAgents:o,stepIndicator:n,allowBack:l})):a}async function He({state:e,stepIndicator:t,allowBack:o}){let n=[{value:"symlink",label:"Symlink",hint:"shared source (recommended)"},{value:"copy",label:"Copy",hint:"independent copies"}],l=await q(`${t} Installation method`,n,e.method,o);if(l===Symbol.for("back"))return Symbol.for("back");if(I(l))return v(),null;e.method=l,Ke(e);let i=await Ht(e);if(i===Symbol.for("back"))return He({state:e,stepIndicator:t,allowBack:o});if(i===null)return null;e.global=i==="global";let r=await H(b.white("Proceed with installation?"),!0);return I(r)?(v(),null):r?(y(),{agents:e.agents,skills:e.skills,method:e.method,global:e.global}):!1}async function Ht(e){let o=await q("Installation scope",[{value:"local",label:"Local",hint:"this project only"},{value:"global",label:"Global",hint:"user home directory"}],e.global?"global":"local",!0);return o===Symbol.for("back")?Symbol.for("back"):I(o)?null:o}import w from"picocolors";async function Je(){R();let e=x();if(e.length===0){y(w.yellow("No skills found"));return}y(w.bold(`${e.length} skills available:`)),y();let t=L(),o=await Z(t),n=W(e);for(let[l,i]of n){y(`${w.cyan("\u25B8")} ${w.bold(w.cyan(l.name))}`);for(let r of i){let a=o.has(r.name)?` ${w.green("\u25CF installed")}`:"";y(` ${w.blue("\u25C6")} ${w.bold(r.name)}${a}`),console.log(`${w.blue(k)} ${w.dim(w.gray(r.description))}`)}y()}C(w.gray('Run "npx @tech-leads-club/agent-skills" to install'))}import Xe from"picocolors";async function Qe(e){R();let t=L(),o=await X(t,e);if(o.size===0){y(Xe.yellow("No skills installed")),C();return}let n=Array.from(o),l=await _(`Which skills do you want to remove? ${Xe.gray(`(${n.length} installed)`)}`,n.map(a=>({value:a,label:a})),[],!1);if(I(l)||l.length===0){v();return}let i=await _("Remove from which agents?",Q(t).map(a=>({...a,hint:void 0})),t,!0);if(I(i)){v();return}let r=await H(`Remove ${l.length} skill(s) from ${i.length} agent(s)?`,!1);if(I(r)||!r){v();return}y();for(let a of l){let c=await M(a,i,{global:e});J(a,c)}}var j=new Jt;j.name("tlc-agent-skills").description("Install TLC Agent Skills to your AI coding agents").version("0.0.1");j.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 e=>{if(e.skill||e.agent)await Xt(e);else{let t=await Ue();if(!t)return;let o=x().filter(l=>t.skills.includes(l.name)),n=await se(o,t);ue(n)}});j.command("list").alias("ls").description("List available skills").action(async()=>{await Je()});j.command("remove").alias("rm").description("Remove installed skills").option("-g, --global","Remove from global installation",!1).option("-s, --skill <name>","Remove a specific skill").option("-a, --agent <agents...>","Target specific agents").action(async e=>{if(e.skill){let t=e.agent||["antigravity","claude-code","cursor"],o=await M(e.skill,t,{global:e.global});J(e.skill,o)}else await Qe(e.global)});async function Xt(e){let t=x(),o=t;if(e.skill){let r=Be(e.skill);r||(console.error(`Skill "${e.skill}" not found.`),console.log("Available skills:",t.map(a=>a.name).join(", ")),process.exit(1)),o=[r]}let n=e.agent||["antigravity","claude-code","cursor"],l=e.copy?"copy":"symlink",i=await se(o,{agents:n,skills:o.map(r=>r.name),method:l,global:e.global});ue(i)}j.parse();
|
|
26
|
+
//# sourceMappingURL=index.js.map
|