skilldex-cli 0.1.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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/cli/commands/install-action.d.ts +7 -0
  4. package/dist/cli/commands/install-action.d.ts.map +1 -0
  5. package/dist/cli/commands/install-action.js +85 -0
  6. package/dist/cli/commands/install-action.js.map +1 -0
  7. package/dist/cli/commands/install.d.ts +3 -0
  8. package/dist/cli/commands/install.d.ts.map +1 -0
  9. package/dist/cli/commands/install.js +13 -0
  10. package/dist/cli/commands/install.js.map +1 -0
  11. package/dist/cli/commands/list-action.d.ts +6 -0
  12. package/dist/cli/commands/list-action.d.ts.map +1 -0
  13. package/dist/cli/commands/list-action.js +46 -0
  14. package/dist/cli/commands/list-action.js.map +1 -0
  15. package/dist/cli/commands/list.d.ts +3 -0
  16. package/dist/cli/commands/list.d.ts.map +1 -0
  17. package/dist/cli/commands/list.js +12 -0
  18. package/dist/cli/commands/list.js.map +1 -0
  19. package/dist/cli/commands/publish.d.ts +3 -0
  20. package/dist/cli/commands/publish.d.ts.map +1 -0
  21. package/dist/cli/commands/publish.js +10 -0
  22. package/dist/cli/commands/publish.js.map +1 -0
  23. package/dist/cli/commands/suggest-action.d.ts +6 -0
  24. package/dist/cli/commands/suggest-action.d.ts.map +1 -0
  25. package/dist/cli/commands/suggest-action.js +51 -0
  26. package/dist/cli/commands/suggest-action.js.map +1 -0
  27. package/dist/cli/commands/suggest.d.ts +3 -0
  28. package/dist/cli/commands/suggest.d.ts.map +1 -0
  29. package/dist/cli/commands/suggest.js +13 -0
  30. package/dist/cli/commands/suggest.js.map +1 -0
  31. package/dist/cli/commands/uninstall-action.d.ts +6 -0
  32. package/dist/cli/commands/uninstall-action.d.ts.map +1 -0
  33. package/dist/cli/commands/uninstall-action.js +21 -0
  34. package/dist/cli/commands/uninstall-action.js.map +1 -0
  35. package/dist/cli/commands/uninstall.d.ts +3 -0
  36. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  37. package/dist/cli/commands/uninstall.js +12 -0
  38. package/dist/cli/commands/uninstall.js.map +1 -0
  39. package/dist/cli/commands/validate-action.d.ts +4 -0
  40. package/dist/cli/commands/validate-action.d.ts.map +1 -0
  41. package/dist/cli/commands/validate-action.js +22 -0
  42. package/dist/cli/commands/validate-action.js.map +1 -0
  43. package/dist/cli/commands/validate.d.ts +3 -0
  44. package/dist/cli/commands/validate.d.ts.map +1 -0
  45. package/dist/cli/commands/validate.js +11 -0
  46. package/dist/cli/commands/validate.js.map +1 -0
  47. package/dist/cli/index.d.ts +3 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +31 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/ui/output.d.ts +9 -0
  52. package/dist/cli/ui/output.d.ts.map +1 -0
  53. package/dist/cli/ui/output.js +43 -0
  54. package/dist/cli/ui/output.js.map +1 -0
  55. package/dist/cli/ui/prompts.d.ts +8 -0
  56. package/dist/cli/ui/prompts.d.ts.map +1 -0
  57. package/dist/cli/ui/prompts.js +28 -0
  58. package/dist/cli/ui/prompts.js.map +1 -0
  59. package/dist/core/installer.d.ts +18 -0
  60. package/dist/core/installer.d.ts.map +1 -0
  61. package/dist/core/installer.js +68 -0
  62. package/dist/core/installer.js.map +1 -0
  63. package/dist/core/manifest.d.ts +8 -0
  64. package/dist/core/manifest.d.ts.map +1 -0
  65. package/dist/core/manifest.js +62 -0
  66. package/dist/core/manifest.js.map +1 -0
  67. package/dist/core/resolver.d.ts +5 -0
  68. package/dist/core/resolver.d.ts.map +1 -0
  69. package/dist/core/resolver.js +68 -0
  70. package/dist/core/resolver.js.map +1 -0
  71. package/dist/core/suggest-agent.d.ts +10 -0
  72. package/dist/core/suggest-agent.d.ts.map +1 -0
  73. package/dist/core/suggest-agent.js +108 -0
  74. package/dist/core/suggest-agent.js.map +1 -0
  75. package/dist/core/validator.d.ts +4 -0
  76. package/dist/core/validator.d.ts.map +1 -0
  77. package/dist/core/validator.js +347 -0
  78. package/dist/core/validator.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +5 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/mcp/server.d.ts +2 -0
  84. package/dist/mcp/server.d.ts.map +1 -0
  85. package/dist/mcp/server.js +109 -0
  86. package/dist/mcp/server.js.map +1 -0
  87. package/dist/registry/index.d.ts +2 -0
  88. package/dist/registry/index.d.ts.map +1 -0
  89. package/dist/registry/index.js +4 -0
  90. package/dist/registry/index.js.map +1 -0
  91. package/dist/registry/sources/github.d.ts +10 -0
  92. package/dist/registry/sources/github.d.ts.map +1 -0
  93. package/dist/registry/sources/github.js +78 -0
  94. package/dist/registry/sources/github.js.map +1 -0
  95. package/dist/types/manifest.d.ts +19 -0
  96. package/dist/types/manifest.d.ts.map +1 -0
  97. package/dist/types/manifest.js +2 -0
  98. package/dist/types/manifest.js.map +1 -0
  99. package/dist/types/registry.d.ts +17 -0
  100. package/dist/types/registry.d.ts.map +1 -0
  101. package/dist/types/registry.js +2 -0
  102. package/dist/types/registry.js.map +1 -0
  103. package/dist/types/scope.d.ts +8 -0
  104. package/dist/types/scope.d.ts.map +1 -0
  105. package/dist/types/scope.js +2 -0
  106. package/dist/types/scope.js.map +1 -0
  107. package/dist/types/skill.d.ts +34 -0
  108. package/dist/types/skill.d.ts.map +1 -0
  109. package/dist/types/skill.js +2 -0
  110. package/dist/types/skill.js.map +1 -0
  111. package/package.json +56 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pandemonium Research
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,318 @@
1
+ # Skilldex
2
+
3
+ **npm, but for Claude skills.**
4
+
5
+ Skilldex is a package manager and registry for Claude `.skill` packages. It handles installation at the right scope, format validation with compiler-style feedback, quality scoring, and AI-powered skill suggestions — all while integrating natively with Claude Code via MCP.
6
+
7
+ ```bash
8
+ skillpm install forensics-agent --scope project
9
+ skillpm validate ./my-skill
10
+ skillpm list
11
+ ```
12
+
13
+ > **Note:** Skilldex is strictly a distribution and tooling layer. It does not define the skill format — that is Anthropic's responsibility. Skilldex follows and validates against Anthropic's published skill specification.
14
+
15
+ ---
16
+
17
+ ## Table of Contents
18
+
19
+ - [Installation](#installation)
20
+ - [Quick Start](#quick-start)
21
+ - [CLI Reference](#cli-reference)
22
+ - [Skill Package Format](#skill-package-format)
23
+ - [Scope System](#scope-system)
24
+ - [Format Validation & Scoring](#format-validation--scoring)
25
+ - [Agent Suggestion Loop](#agent-suggestion-loop)
26
+ - [Claude Code Integration (MCP)](#claude-code-integration-mcp)
27
+ - [Documentation](#documentation)
28
+ - [Contributing](#contributing)
29
+
30
+ ---
31
+
32
+ ## Installation
33
+
34
+ **Requirements:** Node.js 20+
35
+
36
+ ```bash
37
+ # From source (current)
38
+ git clone https://github.com/Pandemonium-Research/Skilldex.git
39
+ cd Skilldex
40
+ npm install
41
+ npm run build
42
+ npm link # makes skillpm / spm available globally
43
+
44
+ # Future: npm install -g skilldex
45
+ ```
46
+
47
+ Both `skillpm` and `spm` are identical — `spm` is a convenience alias:
48
+
49
+ ```bash
50
+ skillpm install forensics-agent # canonical
51
+ spm install forensics-agent # identical alias
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Quick Start
57
+
58
+ ### Validate a skill
59
+
60
+ ```bash
61
+ skillpm validate ./my-skill
62
+ ```
63
+
64
+ ```
65
+ pass YAML frontmatter valid
66
+ pass name field present
67
+ pass description meets length requirement (34 words)
68
+ pass SKILL.md line count OK (42 lines)
69
+ error line 12: references assets/template.docx but assets/template.docx not found
70
+ pass Bundled resources in correct subdirectories
71
+
72
+ Format conformance score: 85/100
73
+ Validated against: skill-format v1.0
74
+ ```
75
+
76
+ ### Install a skill
77
+
78
+ ```bash
79
+ # From a local path
80
+ skillpm install ./forensics-agent --scope project
81
+
82
+ # From a GitHub repo
83
+ skillpm install git+https://github.com/user/forensics-agent --scope project
84
+
85
+ # From a subdirectory of a repo
86
+ skillpm install git+https://github.com/user/skills-collection/tree/main/forensics-agent
87
+ ```
88
+
89
+ ### List installed skills
90
+
91
+ ```bash
92
+ skillpm list
93
+
94
+ # global scope
95
+ # (no skills installed)
96
+ #
97
+ # shared scope
98
+ # (no skills installed)
99
+ #
100
+ # project scope
101
+ # forensics-agent score: 91/100 source: community
102
+ ```
103
+
104
+ ### Uninstall a skill
105
+
106
+ ```bash
107
+ skillpm uninstall forensics-agent --scope project
108
+ ```
109
+
110
+ ### AI-powered skill suggestions
111
+
112
+ ```bash
113
+ export ANTHROPIC_API_KEY=sk-ant-...
114
+ skillpm suggest
115
+ ```
116
+
117
+ Skilldex reads your project context (README, package.json, `.claude/` directory) and proposes relevant skills. You approve, reject, or change the scope of each before installation.
118
+
119
+ ---
120
+
121
+ ## CLI Reference
122
+
123
+ Full reference: [docs/cli.md](docs/cli.md)
124
+
125
+ | Command | Description |
126
+ |---|---|
127
+ | `skillpm install <source>` | Install from local path or `git+https://` URL |
128
+ | `skillpm uninstall <name>` | Remove a skill from a scope |
129
+ | `skillpm list` | Show all installed skills across scopes |
130
+ | `skillpm validate [path]` | Validate format + show score |
131
+ | `skillpm suggest` | AI-powered suggestion loop |
132
+ | `skillpm publish` | Publish to registry *(coming soon)* |
133
+
134
+ **Global options:**
135
+
136
+ | Flag | Description |
137
+ |---|---|
138
+ | `--json` | Machine-readable JSON output |
139
+ | `--no-color` | Disable colored output |
140
+ | `-v, --version` | Print version |
141
+ | `-h, --help` | Show help |
142
+
143
+ ---
144
+
145
+ ## Skill Package Format
146
+
147
+ Full reference: [docs/skill-format.md](docs/skill-format.md)
148
+
149
+ A Skilldex package is a folder containing a `SKILL.md` file and optional bundled resources:
150
+
151
+ ```
152
+ my-skill/
153
+ ├── SKILL.md ← required
154
+ ├── scripts/ ← executable code (optional)
155
+ ├── references/ ← docs loaded into context (optional)
156
+ └── assets/ ← templates, icons, fonts (optional)
157
+ ```
158
+
159
+ **`SKILL.md` structure:**
160
+
161
+ ```markdown
162
+ ---
163
+ name: my-skill
164
+ description: A detailed description of what this skill does, when to use it,
165
+ and what capabilities it provides to the agent. Should be 30+ words.
166
+ version: 1.0.0
167
+ tags: [debugging, analysis]
168
+ author: your-name
169
+ ---
170
+
171
+ ## Instructions
172
+
173
+ Your skill instructions here...
174
+ ```
175
+
176
+ The `name` and `description` fields are required. Everything else is optional.
177
+
178
+ ---
179
+
180
+ ## Scope System
181
+
182
+ Full reference: [docs/scoping.md](docs/scoping.md)
183
+
184
+ Skills are installed at one of three levels. **Local-first precedence** — a lower scope always overrides a higher one for the same skill name.
185
+
186
+ ```
187
+ global → ~/.skilldex/global/ available to all projects
188
+ shared → ~/.skilldex/shared/ custom skills across multiple projects
189
+ project → <project>/.skilldex/ skills specific to one project
190
+ ```
191
+
192
+ ```bash
193
+ skillpm install my-skill --scope global # available everywhere
194
+ skillpm install my-skill --scope shared # available in all projects
195
+ skillpm install my-skill --scope project # default, this project only
196
+ ```
197
+
198
+ Each scope maintains a `skilldex.json` manifest tracking installed skills, their source, and the spec version they were validated against.
199
+
200
+ ---
201
+
202
+ ## Format Validation & Scoring
203
+
204
+ Full reference: [docs/validation.md](docs/validation.md)
205
+
206
+ The quality score measures **format conformance only** — not functionality or usefulness.
207
+
208
+ > *"The Skilldex quality score reflects conformance to Anthropic's skill format specification. It does not reflect the skill's functionality or usefulness."*
209
+
210
+ **Scoring breakdown (100 pts total):**
211
+
212
+ | Check | Points |
213
+ |---|---|
214
+ | YAML frontmatter present and parseable | 25 |
215
+ | `name` field present and non-empty | 10 |
216
+ | `description` field present | 10 |
217
+ | `description` meets 30-word minimum | 10 |
218
+ | `SKILL.md` under 500 lines | 15 |
219
+ | Only allowed subdirectories | 10 |
220
+ | All referenced resources exist | 15 |
221
+ | Bundled resources in correct subdirectories | 5 |
222
+
223
+ Missing frontmatter is **fatal** — the skill scores 0 and no further checks run. All other failures produce diagnostics but never block installation.
224
+
225
+ ---
226
+
227
+ ## Agent Suggestion Loop
228
+
229
+ Full reference: [docs/suggest.md](docs/suggest.md)
230
+
231
+ ```bash
232
+ export ANTHROPIC_API_KEY=sk-ant-...
233
+ skillpm suggest
234
+ ```
235
+
236
+ Before starting a build, Skilldex can propose skills based on your project:
237
+
238
+ 1. Reads project context (README, package.json, `.claude/` directory)
239
+ 2. Calls Claude to propose relevant skills with reasons
240
+ 3. You approve, reject, or reassign the scope of each
241
+ 4. Approved skills are installed
242
+
243
+ This checkpoint is intentional. Most agent frameworks skip it and auto-execute. Skilldex makes it explicit.
244
+
245
+ ---
246
+
247
+ ## Claude Code Integration (MCP)
248
+
249
+ Full reference: [docs/mcp.md](docs/mcp.md)
250
+
251
+ Skilldex exposes a Model Context Protocol (MCP) server so Claude Code can invoke all operations directly.
252
+
253
+ **Add to your Claude Code MCP config** (`.mcp.json` in project root or `~/.claude/mcp.json`):
254
+
255
+ ```json
256
+ {
257
+ "mcpServers": {
258
+ "skilldex": {
259
+ "command": "node",
260
+ "args": ["/absolute/path/to/Skilldex/dist/mcp/server.js"],
261
+ "env": {
262
+ "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}"
263
+ }
264
+ }
265
+ }
266
+ }
267
+ ```
268
+
269
+ Once configured, Claude Code can:
270
+ - Call `skilldex_install` to install a skill mid-session
271
+ - Call `skilldex_list` to see what's available
272
+ - Call `skilldex_validate` to check a skill's format score
273
+ - Call `skilldex_suggest` to get AI proposals for the current project
274
+
275
+ **Available MCP tools:**
276
+
277
+ | Tool | Description |
278
+ |---|---|
279
+ | `skilldex_install` | Install a skill from path or git URL |
280
+ | `skilldex_uninstall` | Remove a skill |
281
+ | `skilldex_list` | List installed skills |
282
+ | `skilldex_validate` | Validate and score a skill |
283
+ | `skilldex_suggest` | Generate skill suggestions |
284
+ | `skilldex_search` | Search registry *(stub — coming soon)* |
285
+
286
+ ---
287
+
288
+ ## Documentation
289
+
290
+ | File | Contents |
291
+ |---|---|
292
+ | [docs/cli.md](docs/cli.md) | Full CLI command reference with all flags and examples |
293
+ | [docs/skill-format.md](docs/skill-format.md) | Skill package format, SKILL.md structure, frontmatter fields |
294
+ | [docs/scoping.md](docs/scoping.md) | Scope hierarchy, resolution rules, manifest format |
295
+ | [docs/validation.md](docs/validation.md) | Scoring system, each check explained, output format |
296
+ | [docs/suggest.md](docs/suggest.md) | Agent suggestion loop, context gathering, interactive flow |
297
+ | [docs/mcp.md](docs/mcp.md) | MCP server setup, tool schemas, Claude Code config |
298
+ | [docs/contributing.md](docs/contributing.md) | Dev setup, architecture, testing guide |
299
+
300
+ ---
301
+
302
+ ## Contributing
303
+
304
+ See [docs/contributing.md](docs/contributing.md).
305
+
306
+ ```bash
307
+ git clone https://github.com/Pandemonium-Research/Skilldex.git
308
+ cd Skilldex
309
+ npm install
310
+ npm run build
311
+ npm test
312
+ ```
313
+
314
+ ---
315
+
316
+ ## License
317
+
318
+ MIT
@@ -0,0 +1,7 @@
1
+ import type { ScopeLevel } from '../../types/scope.js';
2
+ export declare function runInstall(source: string, options: {
3
+ scope: ScopeLevel;
4
+ force: boolean;
5
+ json: boolean;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=install-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAItD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -0,0 +1,85 @@
1
+ import ora from 'ora';
2
+ import { installFromPath } from '../../core/installer.js';
3
+ import { printValidationReport, printJson, printError, printSuccess } from '../ui/output.js';
4
+ export async function runInstall(source, options) {
5
+ const isGitUrl = source.startsWith('git+');
6
+ if (isGitUrl) {
7
+ await runGitInstall(source, options);
8
+ return;
9
+ }
10
+ const spinner = options.json ? null : ora(`Validating ${source}...`).start();
11
+ try {
12
+ if (spinner)
13
+ spinner.text = `Validating ${source}...`;
14
+ const result = await installFromPath(source, {
15
+ scope: options.scope,
16
+ force: options.force,
17
+ });
18
+ if (spinner)
19
+ spinner.succeed(`Installed "${result.skillName}" at ${result.scope} scope`);
20
+ if (options.json) {
21
+ printJson({
22
+ installed: true,
23
+ skillName: result.skillName,
24
+ scope: result.scope,
25
+ score: result.validation.score,
26
+ diagnostics: result.validation.diagnostics,
27
+ });
28
+ }
29
+ else {
30
+ if (result.validation.warnCount > 0 || result.validation.errorCount > 0) {
31
+ console.log('');
32
+ printValidationReport(result.validation);
33
+ }
34
+ else {
35
+ printSuccess(`Score: ${result.validation.score}/100`);
36
+ }
37
+ }
38
+ }
39
+ catch (e) {
40
+ if (spinner)
41
+ spinner.fail();
42
+ printError(e instanceof Error ? e.message : String(e));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ async function runGitInstall(gitUrl, options) {
47
+ const spinner = options.json ? null : ora(`Cloning ${gitUrl}...`).start();
48
+ try {
49
+ const { installFromGitUrl } = await import('../../registry/sources/github.js');
50
+ const { resolveScope } = await import('../../core/resolver.js');
51
+ const scopeConfig = await resolveScope(options.scope);
52
+ const result = await installFromGitUrl(gitUrl, scopeConfig, {
53
+ scope: options.scope,
54
+ force: options.force,
55
+ sourceUrl: gitUrl,
56
+ });
57
+ if (spinner)
58
+ spinner.succeed(`Installed "${result.skillName}" at ${result.scope} scope`);
59
+ if (options.json) {
60
+ printJson({
61
+ installed: true,
62
+ skillName: result.skillName,
63
+ scope: result.scope,
64
+ score: result.validation.score,
65
+ diagnostics: result.validation.diagnostics,
66
+ });
67
+ }
68
+ else {
69
+ if (result.validation.warnCount > 0 || result.validation.errorCount > 0) {
70
+ console.log('');
71
+ printValidationReport(result.validation);
72
+ }
73
+ else {
74
+ printSuccess(`Score: ${result.validation.score}/100`);
75
+ }
76
+ }
77
+ }
78
+ catch (e) {
79
+ if (spinner)
80
+ spinner.fail();
81
+ printError(e instanceof Error ? e.message : String(e));
82
+ process.exit(1);
83
+ }
84
+ }
85
+ //# sourceMappingURL=install-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-action.js","sourceRoot":"","sources":["../../../src/cli/commands/install-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerInstall(program: Command): void;
3
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWtD"}
@@ -0,0 +1,13 @@
1
+ export function registerInstall(program) {
2
+ program
3
+ .command('install <source>')
4
+ .description('Install a skill from a local path, git URL, or registry')
5
+ .option('-s, --scope <scope>', 'Installation scope: global, shared, or project', 'project')
6
+ .option('-f, --force', 'Overwrite if already installed', false)
7
+ .option('--json', 'Output as JSON')
8
+ .action(async (source, options) => {
9
+ const { runInstall } = await import('./install-action.js');
10
+ await runInstall(source, options);
11
+ });
12
+ }
13
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,qBAAqB,EAAE,gDAAgD,EAAE,SAAS,CAAC;SAC1F,MAAM,CAAC,aAAa,EAAE,gCAAgC,EAAE,KAAK,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAA6D,EAAE,EAAE;QAC9F,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ScopeLevel } from '../../types/scope.js';
2
+ export declare function runList(options: {
3
+ scope?: ScopeLevel;
4
+ json: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=list-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMtD,wBAAsB,OAAO,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C3F"}
@@ -0,0 +1,46 @@
1
+ import chalk from 'chalk';
2
+ import { resolveAllScopes, resolveScope } from '../../core/resolver.js';
3
+ import { readManifest } from '../../core/manifest.js';
4
+ import { printJson, printError } from '../ui/output.js';
5
+ export async function runList(options) {
6
+ try {
7
+ const scopeConfigs = options.scope
8
+ ? [await resolveScope(options.scope)]
9
+ : await resolveAllScopes();
10
+ const results = [];
11
+ for (const sc of scopeConfigs) {
12
+ const manifest = await readManifest(sc);
13
+ results.push({ level: sc.level, manifest });
14
+ }
15
+ if (options.json) {
16
+ printJson(results.map((r) => ({
17
+ level: r.level,
18
+ skills: Object.values(r.manifest.skills),
19
+ })));
20
+ return;
21
+ }
22
+ let totalSkills = 0;
23
+ for (const { level, manifest } of results) {
24
+ const skills = Object.values(manifest.skills);
25
+ totalSkills += skills.length;
26
+ console.log(chalk.bold(`\n${level} scope`));
27
+ if (skills.length === 0) {
28
+ console.log(chalk.dim(' (no skills installed)'));
29
+ }
30
+ else {
31
+ for (const skill of skills) {
32
+ const score = skill.score >= 80 ? chalk.green(`${skill.score}`) :
33
+ skill.score >= 50 ? chalk.yellow(`${skill.score}`) : chalk.red(`${skill.score}`);
34
+ console.log(` ${chalk.cyan(skill.name.padEnd(30))} score: ${score}/100 source: ${chalk.dim(skill.source)}`);
35
+ }
36
+ }
37
+ }
38
+ console.log('');
39
+ console.log(chalk.dim(`${totalSkills} skill(s) installed across ${results.length} scope(s)`));
40
+ }
41
+ catch (e) {
42
+ printError(e instanceof Error ? e.message : String(e));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //# sourceMappingURL=list-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-action.js","sourceRoot":"","sources":["../../../src/cli/commands/list-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEvD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAA8C;IAC1E,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK;YAChC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAA;QAE5B,MAAM,OAAO,GAA0D,EAAE,CAAA;QACzE,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,CAAA;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CACP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aACzC,CAAC,CAAC,CACJ,CAAA;YACD,OAAM;QACR,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAA;QACnB,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC7C,WAAW,IAAI,MAAM,CAAC,MAAM,CAAA;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAA;YAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;YACnD,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC/D,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;oBAClF,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,KAAK,iBAAiB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CACjG,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,WAAW,8BAA8B,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC,CAAA;IAC/F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerList(program: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
@@ -0,0 +1,12 @@
1
+ export function registerList(program) {
2
+ program
3
+ .command('list')
4
+ .description('List installed skills')
5
+ .option('-s, --scope <scope>', 'Filter by scope: global, shared, or project')
6
+ .option('--json', 'Output as JSON')
7
+ .action(async (options) => {
8
+ const { runList } = await import('./list-action.js');
9
+ await runList(options);
10
+ });
11
+ }
12
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;SAC5E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA8C,EAAE,EAAE;QAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACpD,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerPublish(program: Command): void;
3
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQtD"}
@@ -0,0 +1,10 @@
1
+ export function registerPublish(program) {
2
+ program
3
+ .command('publish')
4
+ .description('Publish a skill to the Skilldex registry (coming soon)')
5
+ .action(() => {
6
+ console.error('publish is not yet implemented.');
7
+ process.exit(1);
8
+ });
9
+ }
10
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function runSuggest(options: {
2
+ projectPath?: string;
3
+ yes: boolean;
4
+ json: boolean;
5
+ }): Promise<void>;
6
+ //# sourceMappingURL=suggest-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-action.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/suggest-action.ts"],"names":[],"mappings":"AAMA,wBAAsB,UAAU,CAAC,OAAO,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDhB"}
@@ -0,0 +1,51 @@
1
+ import ora from 'ora';
2
+ import chalk from 'chalk';
3
+ import { gatherProjectContext, generateProposals } from '../../core/suggest-agent.js';
4
+ import { findProjectRoot } from '../../core/resolver.js';
5
+ import { printJson, printError } from '../ui/output.js';
6
+ export async function runSuggest(options) {
7
+ try {
8
+ const projectRoot = await findProjectRoot(options.projectPath ?? process.cwd());
9
+ const spinner = options.json ? null : ora('Gathering project context...').start();
10
+ const context = await gatherProjectContext(projectRoot);
11
+ if (spinner)
12
+ spinner.text = 'Generating skill proposals...';
13
+ const proposals = await generateProposals(context);
14
+ if (spinner)
15
+ spinner.stop();
16
+ if (options.json) {
17
+ printJson({ proposals });
18
+ return;
19
+ }
20
+ if (proposals.length === 0) {
21
+ console.log(chalk.dim('No skill suggestions for this project.'));
22
+ return;
23
+ }
24
+ let approved = proposals.map((p) => ({ proposal: p, scope: p.suggestedScope }));
25
+ if (!options.yes) {
26
+ const { promptSuggestions } = await import('../ui/prompts.js');
27
+ approved = await promptSuggestions(proposals);
28
+ }
29
+ if (approved.length === 0) {
30
+ console.log(chalk.dim('No skills approved for installation.'));
31
+ return;
32
+ }
33
+ console.log(`\nInstalling ${approved.length} skill(s)...`);
34
+ const { installFromPath } = await import('../../core/installer.js');
35
+ const installed = [];
36
+ for (const { proposal, scope } of approved) {
37
+ // Skills from suggest come from the registry — for now we can't actually install
38
+ // them because they may not exist locally. Mark as pending/future feature.
39
+ console.log(chalk.dim(` ⚠ "${proposal.skillName}" — registry install not yet available. ` +
40
+ `Use: skillpm install git+<url> --scope ${scope}`));
41
+ }
42
+ if (options.json) {
43
+ printJson({ proposals, installed });
44
+ }
45
+ }
46
+ catch (e) {
47
+ printError(e instanceof Error ? e.message : String(e));
48
+ process.exit(1);
49
+ }
50
+ }
51
+ //# sourceMappingURL=suggest-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest-action.js","sourceRoot":"","sources":["../../../src/cli/commands/suggest-action.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAA;AAErE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAIhC;IACC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAE/E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAA;QACjF,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACvD,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,GAAG,+BAA+B,CAAA;QAE3D,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,EAAE,CAAA;QAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;YACxB,OAAM;QACR,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAA;YAChE,OAAM;QACR,CAAC;QAED,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;QAE/E,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;YAC9D,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAA;YAC9D,OAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAA;QAC1D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;QAEnE,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC3C,iFAAiF;YACjF,2EAA2E;YAC3E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,QAAQ,QAAQ,CAAC,SAAS,0CAA0C;gBAClE,0CAA0C,KAAK,EAAE,CACpD,CACF,CAAA;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSuggest(program: Command): void;
3
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWtD"}