ai-skill-generator 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +134 -0
  2. package/LICENSE +21 -0
  3. package/README.md +227 -0
  4. package/dist/agents/index.d.ts +26 -0
  5. package/dist/agents/index.d.ts.map +1 -0
  6. package/dist/agents/index.js +232 -0
  7. package/dist/agents/index.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +77 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/init.d.ts +17 -0
  13. package/dist/commands/init.d.ts.map +1 -0
  14. package/dist/commands/init.js +347 -0
  15. package/dist/commands/init.js.map +1 -0
  16. package/dist/commands/install.d.ts +8 -0
  17. package/dist/commands/install.d.ts.map +1 -0
  18. package/dist/commands/install.js +91 -0
  19. package/dist/commands/install.js.map +1 -0
  20. package/dist/commands/list-presets.d.ts +2 -0
  21. package/dist/commands/list-presets.d.ts.map +1 -0
  22. package/dist/commands/list-presets.js +24 -0
  23. package/dist/commands/list-presets.js.map +1 -0
  24. package/dist/commands/list-templates.d.ts +2 -0
  25. package/dist/commands/list-templates.d.ts.map +1 -0
  26. package/dist/commands/list-templates.js +24 -0
  27. package/dist/commands/list-templates.js.map +1 -0
  28. package/dist/commands/package.d.ts +6 -0
  29. package/dist/commands/package.d.ts.map +1 -0
  30. package/dist/commands/package.js +75 -0
  31. package/dist/commands/package.js.map +1 -0
  32. package/dist/commands/validate.d.ts +2 -0
  33. package/dist/commands/validate.d.ts.map +1 -0
  34. package/dist/commands/validate.js +142 -0
  35. package/dist/commands/validate.js.map +1 -0
  36. package/dist/context-loaders/index.d.ts +14 -0
  37. package/dist/context-loaders/index.d.ts.map +1 -0
  38. package/dist/context-loaders/index.js +105 -0
  39. package/dist/context-loaders/index.js.map +1 -0
  40. package/dist/index.d.ts +15 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +28 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/presets/index.d.ts +15 -0
  45. package/dist/presets/index.d.ts.map +1 -0
  46. package/dist/presets/index.js +81 -0
  47. package/dist/presets/index.js.map +1 -0
  48. package/dist/templates/configs/basic-config.d.ts +3 -0
  49. package/dist/templates/configs/basic-config.d.ts.map +1 -0
  50. package/dist/templates/configs/basic-config.js +10 -0
  51. package/dist/templates/configs/basic-config.js.map +1 -0
  52. package/dist/templates/configs/frontend-config.d.ts +20 -0
  53. package/dist/templates/configs/frontend-config.d.ts.map +1 -0
  54. package/dist/templates/configs/frontend-config.js +129 -0
  55. package/dist/templates/configs/frontend-config.js.map +1 -0
  56. package/dist/templates/configs/index.d.ts +12 -0
  57. package/dist/templates/configs/index.d.ts.map +1 -0
  58. package/dist/templates/configs/index.js +26 -0
  59. package/dist/templates/configs/index.js.map +1 -0
  60. package/dist/templates/configs/library-config.d.ts +3 -0
  61. package/dist/templates/configs/library-config.d.ts.map +1 -0
  62. package/dist/templates/configs/library-config.js +48 -0
  63. package/dist/templates/configs/library-config.js.map +1 -0
  64. package/dist/templates/configs/microservice-config.d.ts +3 -0
  65. package/dist/templates/configs/microservice-config.d.ts.map +1 -0
  66. package/dist/templates/configs/microservice-config.js +113 -0
  67. package/dist/templates/configs/microservice-config.js.map +1 -0
  68. package/dist/templates/index.d.ts +27 -0
  69. package/dist/templates/index.d.ts.map +1 -0
  70. package/dist/templates/index.js +534 -0
  71. package/dist/templates/index.js.map +1 -0
  72. package/dist/validators/skill-validator.d.ts +7 -0
  73. package/dist/validators/skill-validator.d.ts.map +1 -0
  74. package/dist/validators/skill-validator.js +106 -0
  75. package/dist/validators/skill-validator.js.map +1 -0
  76. package/package.json +69 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,134 @@
1
+ # Changelog
2
+
3
+ All notable changes to the AI Skill Generator project.
4
+
5
+ ## [1.0.0] - 2026-02-09
6
+
7
+ ### Added
8
+
9
+ #### Core Features
10
+ - **Skill Generation**: Create skills from 4 configurable templates
11
+ - `frontend`: Next.js with UI library options (shadcn, MUI, Chakra, Headless)
12
+ - `microservice`: NestJS with architecture options (Clean, Hexagonal, Modular)
13
+ - `library`: TypeScript/JavaScript shared library
14
+ - `basic`: Minimal skill structure
15
+
16
+ - **Presets System**: Pre-configured stacks for quick generation
17
+ - `modern-react`: Next.js + shadcn + Zustand + Vitest
18
+ - `enterprise-api`: NestJS + Clean Arch + TypeORM + Swagger
19
+ - `fullstack-next`: Next.js + tRPC + Prisma
20
+ - `minimal-api`: NestJS + Modular + Postgres
21
+
22
+ - **Context Loading**: Import external documentation
23
+ - Support for `.md`, `.txt`, `.mdx`, `.yml`, `.yaml`, `.json`
24
+ - Single files or entire directories
25
+ - Merged into `references/CONTEXT.md`
26
+
27
+ - **Multi-Agent Installation**: Install skills to AI agents
28
+ - Claude Code
29
+ - Cursor
30
+ - VS Code / Copilot
31
+ - Codex
32
+ - Goose
33
+ - OpenCode
34
+ - Gemini CLI
35
+ - Letta
36
+ - Amp
37
+
38
+ - **Validation**: YAML frontmatter validation
39
+ - Required fields check
40
+ - Naming convention validation (kebab-case)
41
+ - Description length limits
42
+
43
+ - **Packaging**: Create distributable `.skill` files
44
+ - ZIP format for easy sharing
45
+ - Maintains directory structure
46
+
47
+ ### Commands
48
+
49
+ | Command | Description |
50
+ |---------|-------------|
51
+ | `init` | Create new skill with interactive or flag-based options |
52
+ | `install` | Install skill to AI agents |
53
+ | `validate` | Validate skill structure and frontmatter |
54
+ | `package` | Create .skill package |
55
+ | `list-agents` | Show detected AI agents |
56
+ | `list-templates` | Show available templates |
57
+ | `list-presets` | Show available presets |
58
+
59
+ ### Flags
60
+
61
+ ```bash
62
+ # Creation flags
63
+ --name <name> # Skill name (kebab-case)
64
+ --type <type> # Template type
65
+ --desc <description> # Skill description
66
+ --preset <preset> # Use preset configuration
67
+ --context <paths...> # External context files
68
+ --output <path> # Output directory
69
+ --with-references # Include references/ directory
70
+ --with-scripts # Include scripts/ directory
71
+ --with-assets # Include assets/ directory
72
+ --install # Install after creation
73
+ --install-agent <agents> # Specific agents to install
74
+ --non-interactive # Run without prompts
75
+
76
+ # Install flags
77
+ --agent <agents> # Target specific agents
78
+ --yes # Auto-confirm
79
+ --force # Overwrite existing
80
+
81
+ # Package flags
82
+ --output <path> # Output directory for package
83
+ ```
84
+
85
+ ### Test Suite
86
+
87
+ Added 5 functional tests in `tests/`:
88
+
89
+ 1. **test1-basic-frontend**: Basic frontend skill generation
90
+ 2. **test2-microservice**: Microservice with references and scripts
91
+ 3. **test3-library**: Library generation and packaging
92
+ 4. **test4-with-context**: External context loading
93
+ 5. **test5-preset**: Preset-based generation
94
+
95
+ ### Documentation
96
+
97
+ - Complete README with installation and usage
98
+ - USAGE_GUIDE with all commands and examples
99
+ - Individual test READMEs
100
+ - Inline code comments
101
+
102
+ ### Technical Implementation
103
+
104
+ - TypeScript with strict type checking
105
+ - Commander.js for CLI
106
+ - Inquirer.js for interactive prompts
107
+ - js-yaml for YAML parsing
108
+ - adm-zip for packaging
109
+ - Chalk for colored output
110
+
111
+ ### Project Structure
112
+
113
+ ```
114
+ skill-generator/
115
+ ├── src/
116
+ │ ├── cli.ts # Entry point
117
+ │ ├── commands/ # CLI commands
118
+ │ ├── templates/ # Template configurations
119
+ │ ├── presets/ # Preset definitions
120
+ │ ├── agents/ # AI agent detection & install
121
+ │ ├── context-loaders/ # External file loading
122
+ │ └── validators/ # Skill validation
123
+ ├── tests/ # Functional tests
124
+ ├── package.json
125
+ ├── tsconfig.json
126
+ ├── README.md
127
+ ├── USAGE_GUIDE.md
128
+ └── CHANGELOG.md
129
+ ```
130
+
131
+ ### Compatibility
132
+
133
+ - Node.js >= 18.0.0
134
+ - Supports Windows, macOS, Linux
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 engineererick
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,227 @@
1
+ # AI Skill Generator
2
+
3
+ Create, validate, and package skills for AI coding assistants (Claude, Cursor, Copilot, Codex, and more). Configurable templates with external context support.
4
+
5
+ ## Features
6
+
7
+ - **4 Configurable templates**: Frontend, Microservice, Library, Basic
8
+ - **Built-in presets**: Ready-to-use stacks
9
+ - **Interactive mode**: Guided wizard with smart prompts
10
+ - **Automated mode**: Flags for CI/CD pipelines
11
+ - **External context**: Include .md, .txt files as references
12
+ - **Validation**: Automatically verify SKILL.md structure
13
+ - **Packaging**: Generate .skill files (zip) for distribution
14
+ - **Multi-agent install**: Install skills to 9 AI agents at once
15
+
16
+ ## Installation
17
+
18
+ ### Global
19
+
20
+ ```bash
21
+ npm install -g ai-skill-generator
22
+ ```
23
+
24
+ ### Local
25
+
26
+ ```bash
27
+ git clone https://github.com/engineererick/ai-skill-generator.git
28
+ cd ai-skill-generator
29
+ npm install
30
+ npm run build
31
+ ```
32
+
33
+ ## Quick Start
34
+
35
+ ### Interactive Mode (Recommended)
36
+
37
+ ```bash
38
+ skill-gen init
39
+ # or
40
+ sg init
41
+ ```
42
+
43
+ ### With Preset
44
+
45
+ ```bash
46
+ # List available presets
47
+ skill-gen list-presets
48
+
49
+ # Use a preset
50
+ skill-gen init --preset modern-react --name my-skill --desc "My skill"
51
+ ```
52
+
53
+ ### With Flags (Automation)
54
+
55
+ ```bash
56
+ skill-gen init \
57
+ --name my-api \
58
+ --type microservice \
59
+ --desc "Payments API" \
60
+ --with-references \
61
+ --with-scripts \
62
+ --non-interactive
63
+ ```
64
+
65
+ ### With External Context
66
+
67
+ ```bash
68
+ skill-gen init \
69
+ --name my-docs \
70
+ --type frontend \
71
+ --desc "With external documentation" \
72
+ --context ./docs/specs.md \
73
+ --context ./docs/requirements/
74
+ ```
75
+
76
+ ## Commands
77
+
78
+ | Command | Description |
79
+ |---------|-------------|
80
+ | `init` | Create a new skill |
81
+ | `validate <path>` | Validate SKILL.md structure |
82
+ | `package <path>` | Create a .skill file (zip) |
83
+ | `install <path>` | Install skill to AI agents |
84
+ | `list-templates` | Show available templates |
85
+ | `list-presets` | Show built-in presets |
86
+ | `list-agents` | Show detected AI agents |
87
+
88
+ ## Templates
89
+
90
+ ### Frontend (Next.js)
91
+
92
+ Available options:
93
+ - **UI Library**: shadcn/ui, MUI, Chakra UI, Headless UI
94
+ - **State**: Zustand, Redux Toolkit, Jotai, Context API
95
+ - **Forms**: React Hook Form + Zod, TanStack Form, Formik
96
+ - **Data Fetching**: TanStack Query, SWR, RTK Query
97
+ - **Styling**: Tailwind CSS, CSS Modules, Styled Components
98
+ - **Extras**: Storybook, Testing (Vitest/Jest)
99
+
100
+ ### Microservice (NestJS)
101
+
102
+ Available options:
103
+ - **Database**: SQL Server, PostgreSQL, MongoDB, MySQL
104
+ - **Architecture**: Clean Architecture, Hexagonal, Modular
105
+ - **Communication**: REST, gRPC, RabbitMQ, Redis
106
+ - **Auth**: JWT, API Keys, OAuth2, None
107
+ - **Docs**: Swagger, Compodoc
108
+ - **Extras**: Docker, Testing (Jest/Vitest)
109
+
110
+ ### Library
111
+
112
+ Template for shared utility libraries without framework dependencies.
113
+
114
+ ### Basic
115
+
116
+ Minimal template for simple use cases.
117
+
118
+ ## Presets
119
+
120
+ | Preset | Description | Stack |
121
+ |--------|-------------|-------|
122
+ | `modern-react` | Modern 2025 stack | Next.js + shadcn + Zustand + RHF |
123
+ | `enterprise-api` | Enterprise API | NestJS + Clean Arch + TypeORM + Swagger |
124
+ | `minimal-api` | Lightweight API | NestJS + Modular + Postgres |
125
+ | `fullstack-next` | Full stack | Next.js + tRPC + Prisma |
126
+
127
+ ## Init Options
128
+
129
+ ```
130
+ Options:
131
+ -n, --name <name> Skill name (kebab-case)
132
+ -t, --type <type> Type: microservice, frontend, library, basic
133
+ -o, --output <path> Output directory (default: ./skills)
134
+ -d, --desc <description> Short description
135
+ -p, --preset <preset> Use a built-in preset
136
+ -c, --context <paths...> Context files/directories
137
+ --with-references Include references/ directory
138
+ --with-scripts Include scripts/ directory
139
+ --with-assets Include assets/ directory
140
+ --install Install to AI agents after creation
141
+ --install-agent <agents> Install to specific agents only
142
+ --non-interactive Automated mode (requires flags)
143
+ ```
144
+
145
+ ## External Context
146
+
147
+ You can include external files that will be merged into `references/CONTEXT.md`:
148
+
149
+ ```bash
150
+ # Single file
151
+ skill-gen init --context ./docs/specifications.md
152
+
153
+ # Entire directory
154
+ skill-gen init --context ./docs/requirements/
155
+
156
+ # Multiple sources
157
+ skill-gen init --context ./docs/api.md --context ./docs/architecture/
158
+ ```
159
+
160
+ **Supported formats**: `.md`, `.txt`, `.mdx`, `.yml`, `.yaml`, `.json`
161
+
162
+ ## Generated Skill Structure
163
+
164
+ ```
165
+ my-skill/
166
+ ├── SKILL.md # Main file with YAML frontmatter
167
+ ├── references/ # Extended documentation (optional)
168
+ │ ├── API.md
169
+ │ ├── ARCHITECTURE.md
170
+ │ └── CONTEXT.md # Included if external context was provided
171
+ ├── scripts/ # Utilities (optional)
172
+ │ ├── seed.ts
173
+ │ └── example.ts
174
+ └── assets/ # Resources (optional)
175
+ ```
176
+
177
+ ## Development
178
+
179
+ ```bash
180
+ npm run watch # Recompile on changes
181
+ npm run clean # Clean build
182
+ npm run build # Rebuild
183
+ npm test # Run all tests
184
+ ```
185
+
186
+ ## Examples
187
+
188
+ ### Create a skill with a modern preset
189
+
190
+ ```bash
191
+ skill-gen init --preset modern-react --name customer-portal --desc "Customer portal"
192
+ ```
193
+
194
+ ### Create a skill with full configuration
195
+
196
+ ```bash
197
+ skill-gen init \
198
+ --name reports-api \
199
+ --type microservice \
200
+ --desc "Report generation" \
201
+ --with-references \
202
+ --with-scripts \
203
+ --non-interactive
204
+ ```
205
+
206
+ ### Create a skill with external documentation
207
+
208
+ ```bash
209
+ skill-gen init \
210
+ --name integration-service \
211
+ --type microservice \
212
+ --desc "Third-party integration" \
213
+ --context ./docs/integration-spec.md \
214
+ --context ./docs/api-contracts/ \
215
+ --with-references
216
+ ```
217
+
218
+ ## Roadmap
219
+
220
+ - [ ] Custom presets (save user configurations)
221
+ - [ ] Template plugins (extensible system)
222
+ - [ ] Stricter SKILL.md validation
223
+ - [ ] Export to other formats (JSON, YAML)
224
+
225
+ ## License
226
+
227
+ MIT
@@ -0,0 +1,26 @@
1
+ export interface Agent {
2
+ name: string;
3
+ id: string;
4
+ detect: () => Promise<boolean>;
5
+ getInstallPath: () => string;
6
+ }
7
+ export declare const agents: Agent[];
8
+ export interface DetectedAgent extends Agent {
9
+ installed: boolean;
10
+ }
11
+ export declare function detectAgents(): Promise<DetectedAgent[]>;
12
+ export declare function installToAgent(skillPath: string, agentId: string): Promise<{
13
+ success: boolean;
14
+ message: string;
15
+ }>;
16
+ export declare function installToAllAgents(skillPath: string, specificAgents?: string[]): Promise<{
17
+ agent: string;
18
+ success: boolean;
19
+ message: string;
20
+ }[]>;
21
+ export declare function formatInstallResults(results: {
22
+ agent: string;
23
+ success: boolean;
24
+ message: string;
25
+ }[]): string;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAGD,eAAO,MAAM,MAAM,EAAE,KAAK,EAsHzB,CAAC;AAEF,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAS7D;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyChD;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAkBjE;AAkBD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAC9D,MAAM,CAYR"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ // Detection and installation of skills to AI agents
3
+ // Compatible with the AI Agent Skills standard
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.agents = void 0;
9
+ exports.detectAgents = detectAgents;
10
+ exports.installToAgent = installToAgent;
11
+ exports.installToAllAgents = installToAllAgents;
12
+ exports.formatInstallResults = formatInstallResults;
13
+ const promises_1 = __importDefault(require("fs/promises"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const os_1 = __importDefault(require("os"));
16
+ const chalk_1 = __importDefault(require("chalk"));
17
+ // Install paths per agent
18
+ exports.agents = [
19
+ {
20
+ name: 'Claude Code',
21
+ id: 'claude',
22
+ detect: async () => {
23
+ try {
24
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.claude'));
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ },
31
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.claude', 'skills'),
32
+ },
33
+ {
34
+ name: 'Cursor',
35
+ id: 'cursor',
36
+ detect: async () => {
37
+ try {
38
+ await promises_1.default.access(path_1.default.join(process.cwd(), '.cursor'));
39
+ return true;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ },
45
+ getInstallPath: () => path_1.default.join(process.cwd(), '.cursor', 'skills'),
46
+ },
47
+ {
48
+ name: 'VS Code / Copilot',
49
+ id: 'vscode',
50
+ detect: async () => {
51
+ try {
52
+ await promises_1.default.access(path_1.default.join(process.cwd(), '.github'));
53
+ return true;
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ },
59
+ getInstallPath: () => path_1.default.join(process.cwd(), '.github', 'skills'),
60
+ },
61
+ {
62
+ name: 'Codex',
63
+ id: 'codex',
64
+ detect: async () => {
65
+ try {
66
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.codex'));
67
+ return true;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ },
73
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.codex', 'skills'),
74
+ },
75
+ {
76
+ name: 'Goose',
77
+ id: 'goose',
78
+ detect: async () => {
79
+ try {
80
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.config', 'goose'));
81
+ return true;
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ },
87
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.config', 'goose', 'skills'),
88
+ },
89
+ {
90
+ name: 'OpenCode',
91
+ id: 'opencode',
92
+ detect: async () => {
93
+ try {
94
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.opencode'));
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ },
101
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.opencode', 'skill'),
102
+ },
103
+ {
104
+ name: 'Gemini CLI',
105
+ id: 'gemini',
106
+ detect: async () => {
107
+ try {
108
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.gemini'));
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ },
115
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.gemini', 'skills'),
116
+ },
117
+ {
118
+ name: 'Letta',
119
+ id: 'letta',
120
+ detect: async () => {
121
+ try {
122
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.letta'));
123
+ return true;
124
+ }
125
+ catch {
126
+ return false;
127
+ }
128
+ },
129
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.letta', 'skills'),
130
+ },
131
+ {
132
+ name: 'Amp',
133
+ id: 'amp',
134
+ detect: async () => {
135
+ try {
136
+ await promises_1.default.access(path_1.default.join(os_1.default.homedir(), '.amp'));
137
+ return true;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ },
143
+ getInstallPath: () => path_1.default.join(os_1.default.homedir(), '.amp', 'skills'),
144
+ },
145
+ ];
146
+ async function detectAgents() {
147
+ const detected = [];
148
+ for (const agent of exports.agents) {
149
+ const installed = await agent.detect();
150
+ detected.push({ ...agent, installed });
151
+ }
152
+ return detected;
153
+ }
154
+ async function installToAgent(skillPath, agentId) {
155
+ const agent = exports.agents.find(a => a.id === agentId);
156
+ if (!agent) {
157
+ return { success: false, message: `Unsupported agent: ${agentId}` };
158
+ }
159
+ const isInstalled = await agent.detect();
160
+ if (!isInstalled) {
161
+ return { success: false, message: `${agent.name} is not installed` };
162
+ }
163
+ try {
164
+ const installPath = agent.getInstallPath();
165
+ const skillName = path_1.default.basename(skillPath);
166
+ const targetPath = path_1.default.join(installPath, skillName);
167
+ await promises_1.default.mkdir(installPath, { recursive: true });
168
+ try {
169
+ await promises_1.default.access(targetPath);
170
+ return {
171
+ success: false,
172
+ message: `Skill already exists at ${targetPath}. Use --force to overwrite.`
173
+ };
174
+ }
175
+ catch {
176
+ // Does not exist, we can continue
177
+ }
178
+ await copyDir(skillPath, targetPath);
179
+ return {
180
+ success: true,
181
+ message: `Installed to ${targetPath}`
182
+ };
183
+ }
184
+ catch (error) {
185
+ return {
186
+ success: false,
187
+ message: `Error: ${error instanceof Error ? error.message : error}`
188
+ };
189
+ }
190
+ }
191
+ async function installToAllAgents(skillPath, specificAgents) {
192
+ const detected = await detectAgents();
193
+ const results = [];
194
+ const agentsToInstall = specificAgents
195
+ ? detected.filter(a => specificAgents.includes(a.id) && a.installed)
196
+ : detected.filter(a => a.installed);
197
+ for (const agent of agentsToInstall) {
198
+ const result = await installToAgent(skillPath, agent.id);
199
+ results.push({
200
+ agent: agent.name,
201
+ success: result.success,
202
+ message: result.message,
203
+ });
204
+ }
205
+ return results;
206
+ }
207
+ async function copyDir(src, dest) {
208
+ await promises_1.default.mkdir(dest, { recursive: true });
209
+ const entries = await promises_1.default.readdir(src, { withFileTypes: true });
210
+ for (const entry of entries) {
211
+ const srcPath = path_1.default.join(src, entry.name);
212
+ const destPath = path_1.default.join(dest, entry.name);
213
+ if (entry.isDirectory()) {
214
+ await copyDir(srcPath, destPath);
215
+ }
216
+ else {
217
+ await promises_1.default.copyFile(srcPath, destPath);
218
+ }
219
+ }
220
+ }
221
+ function formatInstallResults(results) {
222
+ const lines = [];
223
+ for (const result of results) {
224
+ const icon = result.success ? chalk_1.default.green('✅') : chalk_1.default.red('❌');
225
+ lines.push(`${icon} ${result.agent}`);
226
+ if (!result.success) {
227
+ lines.push(chalk_1.default.gray(` ${result.message}`));
228
+ }
229
+ }
230
+ return lines.join('\n');
231
+ }
232
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}