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.
- package/LICENSE +21 -0
- package/README.md +318 -0
- package/dist/cli/commands/install-action.d.ts +7 -0
- package/dist/cli/commands/install-action.d.ts.map +1 -0
- package/dist/cli/commands/install-action.js +85 -0
- package/dist/cli/commands/install-action.js.map +1 -0
- package/dist/cli/commands/install.d.ts +3 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +13 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list-action.d.ts +6 -0
- package/dist/cli/commands/list-action.d.ts.map +1 -0
- package/dist/cli/commands/list-action.js +46 -0
- package/dist/cli/commands/list-action.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +12 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/publish.d.ts +3 -0
- package/dist/cli/commands/publish.d.ts.map +1 -0
- package/dist/cli/commands/publish.js +10 -0
- package/dist/cli/commands/publish.js.map +1 -0
- package/dist/cli/commands/suggest-action.d.ts +6 -0
- package/dist/cli/commands/suggest-action.d.ts.map +1 -0
- package/dist/cli/commands/suggest-action.js +51 -0
- package/dist/cli/commands/suggest-action.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +3 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +13 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/uninstall-action.d.ts +6 -0
- package/dist/cli/commands/uninstall-action.d.ts.map +1 -0
- package/dist/cli/commands/uninstall-action.js +21 -0
- package/dist/cli/commands/uninstall-action.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +3 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +12 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/validate-action.d.ts +4 -0
- package/dist/cli/commands/validate-action.d.ts.map +1 -0
- package/dist/cli/commands/validate-action.js +22 -0
- package/dist/cli/commands/validate-action.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +11 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/output.d.ts +9 -0
- package/dist/cli/ui/output.d.ts.map +1 -0
- package/dist/cli/ui/output.js +43 -0
- package/dist/cli/ui/output.js.map +1 -0
- package/dist/cli/ui/prompts.d.ts +8 -0
- package/dist/cli/ui/prompts.d.ts.map +1 -0
- package/dist/cli/ui/prompts.js +28 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/core/installer.d.ts +18 -0
- package/dist/core/installer.d.ts.map +1 -0
- package/dist/core/installer.js +68 -0
- package/dist/core/installer.js.map +1 -0
- package/dist/core/manifest.d.ts +8 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +62 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/resolver.d.ts +5 -0
- package/dist/core/resolver.d.ts.map +1 -0
- package/dist/core/resolver.js +68 -0
- package/dist/core/resolver.js.map +1 -0
- package/dist/core/suggest-agent.d.ts +10 -0
- package/dist/core/suggest-agent.d.ts.map +1 -0
- package/dist/core/suggest-agent.js +108 -0
- package/dist/core/suggest-agent.js.map +1 -0
- package/dist/core/validator.d.ts +4 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +347 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +109 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +4 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/sources/github.d.ts +10 -0
- package/dist/registry/sources/github.d.ts.map +1 -0
- package/dist/registry/sources/github.js +78 -0
- package/dist/registry/sources/github.js.map +1 -0
- package/dist/types/manifest.d.ts +19 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +2 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/registry.d.ts +17 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +2 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/scope.d.ts +8 -0
- package/dist/types/scope.d.ts.map +1 -0
- package/dist/types/scope.js +2 -0
- package/dist/types/scope.js.map +1 -0
- package/dist/types/skill.d.ts +34 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +2 -0
- package/dist/types/skill.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|