craftdesk 0.1.0 → 0.3.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/.claude/settings.local.json +19 -0
- package/.github/workflows/ci.yml +94 -0
- package/API.md +414 -0
- package/README.md +778 -0
- package/TESTING.md +263 -0
- package/bin/craftdesk.js +4 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +284 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +56 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +57 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +109 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +117 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/remove.d.ts +3 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +74 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/services/config-manager.d.ts +88 -0
- package/dist/services/config-manager.d.ts.map +1 -0
- package/dist/services/config-manager.js +143 -0
- package/dist/services/config-manager.js.map +1 -0
- package/dist/services/git-resolver.d.ts +139 -0
- package/dist/services/git-resolver.d.ts.map +1 -0
- package/dist/services/git-resolver.js +340 -0
- package/dist/services/git-resolver.js.map +1 -0
- package/dist/services/installer.d.ts +98 -0
- package/dist/services/installer.d.ts.map +1 -0
- package/dist/services/installer.js +274 -0
- package/dist/services/installer.js.map +1 -0
- package/dist/services/registry-client.d.ts +27 -0
- package/dist/services/registry-client.d.ts.map +1 -0
- package/dist/services/registry-client.js +134 -0
- package/dist/services/registry-client.js.map +1 -0
- package/dist/types/config.d.ts +17 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +42 -0
- package/dist/types/craftdesk-json.d.ts.map +1 -0
- package/dist/types/craftdesk-json.js +3 -0
- package/dist/types/craftdesk-json.js.map +1 -0
- package/dist/types/craftdesk-lock.d.ts +34 -0
- package/dist/types/craftdesk-lock.d.ts.map +1 -0
- package/dist/types/craftdesk-lock.js +3 -0
- package/dist/types/craftdesk-lock.js.map +1 -0
- package/dist/utils/file-system.d.ts +10 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +60 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/DEPENDENCY_RESOLUTION.md +237 -0
- package/examples/craftdesk-all-sources.json +79 -0
- package/examples/craftdesk-git-monorepo.json +41 -0
- package/examples/craftdesk-multi-registry.json +40 -0
- package/examples/craftdesk-with-registries.json +49 -0
- package/examples/simple-craftdesk.json +10 -0
- package/package.json +32 -25
- package/src/commands/add.ts +314 -0
- package/src/commands/init.ts +55 -0
- package/src/commands/install.ts +126 -0
- package/src/commands/list.ts +126 -0
- package/src/commands/remove.ts +82 -0
- package/src/index.ts +56 -0
- package/src/services/config-manager.ts +150 -0
- package/src/services/git-resolver.ts +373 -0
- package/src/services/installer.ts +314 -0
- package/src/services/registry-client.ts +163 -0
- package/src/types/craftdesk-json.ts +53 -0
- package/src/types/craftdesk-lock.ts +38 -0
- package/src/utils/file-system.ts +55 -0
- package/src/utils/logger.ts +82 -0
- package/tests/fixtures/craftdesk-git.json +17 -0
- package/tests/fixtures/craftdesk.json +15 -0
- package/tests/helpers/test-utils.ts +60 -0
- package/tests/integration/init-command.test.ts +70 -0
- package/tests/integration/list-command.test.ts +77 -0
- package/tests/unit/config-manager.test.ts +228 -0
- package/tests/unit/git-resolver.test.ts +303 -0
- package/tests/unit/installer.test.ts +105 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +29 -0
- package/LICENSE +0 -21
- package/index.js +0 -4
package/README.md
ADDED
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
# CraftDesk CLI
|
|
2
|
+
|
|
3
|
+
> **Dependency management for AI capabilities** - Install, manage, and version control your Claude Code skills, agents, commands, hooks, and plugins.
|
|
4
|
+
|
|
5
|
+
The official command-line interface for managing CraftDesk AI capabilities. Similar to npm for JavaScript or bundler for Ruby, CraftDesk CLI provides a complete package management solution for AI-powered development tools.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/craftdesk)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## What is CraftDesk?
|
|
13
|
+
|
|
14
|
+
CraftDesk is a package manager for AI capabilities used in Claude Code and other AI development environments. It allows you to:
|
|
15
|
+
|
|
16
|
+
- **Install AI skills, agents, commands, hooks, and plugins** from git repositories
|
|
17
|
+
- **Lock versions** for reproducible environments across teams
|
|
18
|
+
- **Manage dependencies** with automatic transitive resolution
|
|
19
|
+
- **Support monorepos** with subdirectory extraction
|
|
20
|
+
- **Auto-convert GitHub URLs** - paste any GitHub URL (tree/blob)
|
|
21
|
+
- **Direct file references** - install single files from repositories
|
|
22
|
+
|
|
23
|
+
Think of it as:
|
|
24
|
+
- **npm** for Node.js → **CraftDesk** for AI capabilities
|
|
25
|
+
- **Bundler** for Ruby → **CraftDesk** for Claude tools
|
|
26
|
+
- **Cargo** for Rust → **CraftDesk** for AI agents
|
|
27
|
+
|
|
28
|
+
> **Note:** A self-hosted registry server is currently under development and will be available soon, enabling private registries and centralized craft distribution.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Quick Start
|
|
33
|
+
|
|
34
|
+
### Install CraftDesk
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install -g craftdesk
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Verify installation:
|
|
41
|
+
```bash
|
|
42
|
+
craftdesk --version
|
|
43
|
+
# 0.2.0
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Requirements:** Node.js >= 18.0.0, Git, npm or yarn
|
|
47
|
+
|
|
48
|
+
### 1. Initialize a New Project
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mkdir my-ai-project
|
|
52
|
+
cd my-ai-project
|
|
53
|
+
craftdesk init
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This creates a `craftdesk.json` file:
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"name": "my-ai-project",
|
|
60
|
+
"version": "1.0.0",
|
|
61
|
+
"type": "skill",
|
|
62
|
+
"dependencies": {}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 2. Add Dependencies
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Add a single skill file from GitHub (auto-converts web URLs)
|
|
70
|
+
craftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md
|
|
71
|
+
|
|
72
|
+
# Add from git repository
|
|
73
|
+
craftdesk add git+https://github.com/aviflombaum/rspec-rails-agents.git
|
|
74
|
+
|
|
75
|
+
# Add from monorepo subdirectory
|
|
76
|
+
craftdesk add https://github.com/technicalpickles/pickled-claude-plugins/tree/main/plugins/working-in-monorepos/skills/working-in-monorepos
|
|
77
|
+
|
|
78
|
+
# Add with explicit type
|
|
79
|
+
craftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md --type agent
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Install Everything
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
craftdesk install
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This installs all dependencies to `.claude/` directory and creates `craftdesk.lock`.
|
|
89
|
+
|
|
90
|
+
### 4. View Installed Crafts
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
craftdesk list
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Output:
|
|
97
|
+
```
|
|
98
|
+
my-ai-project@1.0.0
|
|
99
|
+
|
|
100
|
+
Installed crafts:
|
|
101
|
+
• my-skill@main (skill)
|
|
102
|
+
• custom-agent@main (agent)
|
|
103
|
+
|
|
104
|
+
Total: 2 crafts installed
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Table of Contents
|
|
110
|
+
|
|
111
|
+
- [What is CraftDesk?](#what-is-craftdesk)
|
|
112
|
+
- [Quick Start](#quick-start)
|
|
113
|
+
- [Core Concepts](#core-concepts)
|
|
114
|
+
- [Command Reference](#command-reference)
|
|
115
|
+
- [Dependency Sources](#dependency-sources)
|
|
116
|
+
- [Monorepo Support](#monorepo-support)
|
|
117
|
+
- [craftdesk.json Reference](#craftdeskjson-reference)
|
|
118
|
+
- [craftdesk.lock](#craftdesklock)
|
|
119
|
+
- [CI/CD Integration](#cicd-integration)
|
|
120
|
+
- [Troubleshooting](#troubleshooting)
|
|
121
|
+
- [Development](#development)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Core Concepts
|
|
126
|
+
|
|
127
|
+
### Crafts
|
|
128
|
+
|
|
129
|
+
A **craft** is any AI capability:
|
|
130
|
+
- **Skill** - Knowledge domain (e.g., ruby-on-rails, postgres-expert)
|
|
131
|
+
- **Agent** - Autonomous task executor (e.g., code-reviewer, test-runner)
|
|
132
|
+
- **Command** - Slash command (e.g., /deploy, /analyze)
|
|
133
|
+
- **Hook** - Event handler (e.g., pre-commit, post-install)
|
|
134
|
+
- **Plugin** - Extended functionality or tool integration (e.g., mcp-server, custom-tools)
|
|
135
|
+
|
|
136
|
+
### Manifest File: craftdesk.json
|
|
137
|
+
|
|
138
|
+
Declares your project's dependencies:
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"name": "my-project",
|
|
142
|
+
"version": "1.0.0",
|
|
143
|
+
"dependencies": {
|
|
144
|
+
"my-skill": {
|
|
145
|
+
"git": "https://github.com/user/skill.git",
|
|
146
|
+
"branch": "main"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Lockfile: craftdesk.lock
|
|
153
|
+
|
|
154
|
+
Records exact versions installed (like package-lock.json or Gemfile.lock):
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"version": "1.0.0",
|
|
158
|
+
"lockfileVersion": 1,
|
|
159
|
+
"crafts": {
|
|
160
|
+
"my-skill": {
|
|
161
|
+
"version": "main",
|
|
162
|
+
"resolved": "https://github.com/user/skill.git",
|
|
163
|
+
"integrity": "a1b2c3d4e5f6...",
|
|
164
|
+
"type": "skill",
|
|
165
|
+
"git": "https://github.com/user/skill.git",
|
|
166
|
+
"branch": "main",
|
|
167
|
+
"commit": "a1b2c3d4e5f6789012345678901234567890abcd"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Always commit this file to version control!**
|
|
174
|
+
|
|
175
|
+
### Install Directory
|
|
176
|
+
|
|
177
|
+
By default, crafts install to `.claude/` in your project:
|
|
178
|
+
```
|
|
179
|
+
.claude/
|
|
180
|
+
├── skills/
|
|
181
|
+
│ ├── ruby-on-rails/
|
|
182
|
+
│ └── postgres-expert/
|
|
183
|
+
├── agents/
|
|
184
|
+
│ └── code-reviewer/
|
|
185
|
+
├── commands/
|
|
186
|
+
│ └── deploy/
|
|
187
|
+
└── hooks/
|
|
188
|
+
└── pre-commit/
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Command Reference
|
|
194
|
+
|
|
195
|
+
### `craftdesk init [options]`
|
|
196
|
+
|
|
197
|
+
Initialize a new craftdesk.json file.
|
|
198
|
+
|
|
199
|
+
**Options:**
|
|
200
|
+
- `-y, --yes` - Skip prompts and use defaults
|
|
201
|
+
- `-n, --name <name>` - Project name (default: directory name)
|
|
202
|
+
- `-v, --version <version>` - Project version (default: "1.0.0")
|
|
203
|
+
- `-t, --type <type>` - Project type: skill, agent, command, hook, or plugin (default: "skill")
|
|
204
|
+
- `-d, --description <desc>` - Project description
|
|
205
|
+
- `-a, --author <author>` - Author name
|
|
206
|
+
- `-l, --license <license>` - License (default: "MIT")
|
|
207
|
+
|
|
208
|
+
**Examples:**
|
|
209
|
+
```bash
|
|
210
|
+
# Interactive initialization
|
|
211
|
+
craftdesk init
|
|
212
|
+
|
|
213
|
+
# Quick init with defaults
|
|
214
|
+
craftdesk init -y
|
|
215
|
+
|
|
216
|
+
# Specify options
|
|
217
|
+
craftdesk init --name my-skill --type skill --author "Your Name"
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### `craftdesk install [options]`
|
|
223
|
+
|
|
224
|
+
Install all dependencies from craftdesk.json.
|
|
225
|
+
|
|
226
|
+
**Options:**
|
|
227
|
+
- `--no-lockfile` - Ignore craftdesk.lock and re-resolve dependencies
|
|
228
|
+
- `--production` - Skip devDependencies
|
|
229
|
+
|
|
230
|
+
**Examples:**
|
|
231
|
+
```bash
|
|
232
|
+
# Install all dependencies
|
|
233
|
+
craftdesk install
|
|
234
|
+
|
|
235
|
+
# Or use the alias
|
|
236
|
+
craftdesk i
|
|
237
|
+
|
|
238
|
+
# Production install (skip dev dependencies)
|
|
239
|
+
craftdesk install --production
|
|
240
|
+
|
|
241
|
+
# Force re-resolve (ignore lockfile)
|
|
242
|
+
craftdesk install --no-lockfile
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**What it does:**
|
|
246
|
+
1. Reads craftdesk.json
|
|
247
|
+
2. Uses craftdesk.lock if present (ensures reproducibility)
|
|
248
|
+
3. Resolves dependencies (registry + git sources)
|
|
249
|
+
4. Installs to .claude/ directory
|
|
250
|
+
5. Updates/creates craftdesk.lock
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
### `craftdesk add <craft> [options]`
|
|
255
|
+
|
|
256
|
+
Add a new dependency and install it immediately.
|
|
257
|
+
|
|
258
|
+
**Options:**
|
|
259
|
+
- `-D, --save-dev` - Save as devDependency
|
|
260
|
+
- `-O, --save-optional` - Save as optionalDependency
|
|
261
|
+
- `-E, --save-exact` - Save exact version (no ^ or ~)
|
|
262
|
+
- `-t, --type <type>` - Specify craft type (skill, agent, command, hook, plugin)
|
|
263
|
+
|
|
264
|
+
**Examples:**
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# GitHub web URLs (auto-converted)
|
|
268
|
+
craftdesk add https://github.com/user/repo/blob/main/skill.md
|
|
269
|
+
craftdesk add https://github.com/user/repo/tree/main/skills/auth
|
|
270
|
+
|
|
271
|
+
# With explicit type
|
|
272
|
+
craftdesk add https://github.com/user/repo/blob/main/agent.md --type agent
|
|
273
|
+
|
|
274
|
+
# Git dependencies (manual format)
|
|
275
|
+
craftdesk add git+https://github.com/user/repo.git
|
|
276
|
+
craftdesk add git+https://github.com/user/repo.git#develop
|
|
277
|
+
craftdesk add git+https://github.com/user/repo.git#v2.0.0
|
|
278
|
+
|
|
279
|
+
# Direct file reference
|
|
280
|
+
craftdesk add git+https://github.com/user/repo.git#main#file:skill.md
|
|
281
|
+
|
|
282
|
+
# Subdirectory (monorepo)
|
|
283
|
+
craftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
### `craftdesk remove <craft>`
|
|
289
|
+
|
|
290
|
+
Remove a dependency from craftdesk.json and the filesystem.
|
|
291
|
+
|
|
292
|
+
**Examples:**
|
|
293
|
+
```bash
|
|
294
|
+
craftdesk remove my-skill
|
|
295
|
+
craftdesk remove my-agent
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
### `craftdesk list [options]`
|
|
301
|
+
|
|
302
|
+
List installed crafts.
|
|
303
|
+
|
|
304
|
+
**Options:**
|
|
305
|
+
- `--tree` - Show dependency tree
|
|
306
|
+
- `--depth <n>` - Limit tree depth
|
|
307
|
+
- `--json` - Output as JSON
|
|
308
|
+
|
|
309
|
+
**Examples:**
|
|
310
|
+
```bash
|
|
311
|
+
# Simple list
|
|
312
|
+
craftdesk list
|
|
313
|
+
|
|
314
|
+
# Show dependency tree
|
|
315
|
+
craftdesk list --tree
|
|
316
|
+
|
|
317
|
+
# Limit tree depth
|
|
318
|
+
craftdesk list --tree --depth 2
|
|
319
|
+
|
|
320
|
+
# JSON output (for scripts)
|
|
321
|
+
craftdesk list --json
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Example output:**
|
|
325
|
+
```
|
|
326
|
+
my-project@1.0.0
|
|
327
|
+
|
|
328
|
+
Installed crafts:
|
|
329
|
+
• my-skill@main (skill)
|
|
330
|
+
• code-reviewer@v2.0.1 (agent)
|
|
331
|
+
• postgres-expert@main (skill)
|
|
332
|
+
|
|
333
|
+
Total: 3 crafts installed
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
### Global Options
|
|
339
|
+
|
|
340
|
+
Available for all commands:
|
|
341
|
+
|
|
342
|
+
- `-v, --version` - Output the version number
|
|
343
|
+
- `-d, --debug` - Enable debug output
|
|
344
|
+
- `-h, --help` - Display help
|
|
345
|
+
|
|
346
|
+
**Examples:**
|
|
347
|
+
```bash
|
|
348
|
+
craftdesk --version
|
|
349
|
+
craftdesk --help
|
|
350
|
+
craftdesk init --help
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Dependency Sources
|
|
356
|
+
|
|
357
|
+
CraftDesk currently supports Git dependencies. Registry support is under development.
|
|
358
|
+
|
|
359
|
+
### 1. GitHub URLs (Easiest)
|
|
360
|
+
|
|
361
|
+
Simply paste any GitHub URL - it auto-converts to the correct format:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# Directory in monorepo
|
|
365
|
+
craftdesk add https://github.com/user/repo/tree/main/skills/auth
|
|
366
|
+
|
|
367
|
+
# Single file
|
|
368
|
+
craftdesk add https://github.com/user/repo/blob/main/agent.md
|
|
369
|
+
|
|
370
|
+
# Entire repository
|
|
371
|
+
craftdesk add https://github.com/user/repo
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### 2. Git Dependencies
|
|
375
|
+
|
|
376
|
+
From git repositories:
|
|
377
|
+
|
|
378
|
+
```json
|
|
379
|
+
{
|
|
380
|
+
"dependencies": {
|
|
381
|
+
"custom-agent": {
|
|
382
|
+
"git": "https://github.com/user/agent-repo.git",
|
|
383
|
+
"branch": "develop"
|
|
384
|
+
},
|
|
385
|
+
"stable-skill": {
|
|
386
|
+
"git": "https://github.com/org/skills.git",
|
|
387
|
+
"tag": "v2.1.0"
|
|
388
|
+
},
|
|
389
|
+
"specific-commit": {
|
|
390
|
+
"git": "https://github.com/user/repo.git",
|
|
391
|
+
"commit": "a1b2c3d4"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Git options:**
|
|
398
|
+
- `git` - Repository URL (required)
|
|
399
|
+
- `branch` - Branch name (default: main/master)
|
|
400
|
+
- `tag` - Git tag
|
|
401
|
+
- `commit` - Specific commit hash
|
|
402
|
+
- `path` - Subdirectory within repo (for monorepos)
|
|
403
|
+
- `file` - Direct file path (for single-file crafts)
|
|
404
|
+
|
|
405
|
+
### 3. Registry Dependencies (Coming Soon)
|
|
406
|
+
|
|
407
|
+
> **Note:** Registry support is currently under development. A self-hosted registry server will be available soon.
|
|
408
|
+
|
|
409
|
+
Future registry format:
|
|
410
|
+
|
|
411
|
+
```json
|
|
412
|
+
{
|
|
413
|
+
"dependencies": {
|
|
414
|
+
"ruby-on-rails": "^7.0.0",
|
|
415
|
+
"@company/internal-skill": "^2.0.0"
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## Monorepo Support
|
|
423
|
+
|
|
424
|
+
Install multiple crafts from the same git repository using subdirectory paths:
|
|
425
|
+
|
|
426
|
+
```json
|
|
427
|
+
{
|
|
428
|
+
"dependencies": {
|
|
429
|
+
"auth-handler": {
|
|
430
|
+
"git": "https://github.com/company/ai-crafts-monorepo.git",
|
|
431
|
+
"tag": "v3.2.0",
|
|
432
|
+
"path": "skills/auth"
|
|
433
|
+
},
|
|
434
|
+
"data-processor": {
|
|
435
|
+
"git": "https://github.com/company/ai-crafts-monorepo.git",
|
|
436
|
+
"tag": "v3.2.0",
|
|
437
|
+
"path": "agents/processor"
|
|
438
|
+
},
|
|
439
|
+
"report-generator": {
|
|
440
|
+
"git": "https://github.com/company/ai-crafts-monorepo.git",
|
|
441
|
+
"tag": "v3.2.0",
|
|
442
|
+
"path": "skills/reporting"
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Benefits:**
|
|
449
|
+
- Single git repository for multiple crafts
|
|
450
|
+
- Version them together with git tags
|
|
451
|
+
- Each craft installs independently
|
|
452
|
+
- Efficient cloning (repo cached during resolution)
|
|
453
|
+
|
|
454
|
+
**Monorepo structure example:**
|
|
455
|
+
```
|
|
456
|
+
ai-crafts-monorepo/
|
|
457
|
+
├── skills/
|
|
458
|
+
│ ├── auth/
|
|
459
|
+
│ │ ├── craftdesk.json
|
|
460
|
+
│ │ └── SKILL.md
|
|
461
|
+
│ └── reporting/
|
|
462
|
+
│ ├── craftdesk.json
|
|
463
|
+
│ └── SKILL.md
|
|
464
|
+
├── agents/
|
|
465
|
+
│ └── processor/
|
|
466
|
+
│ ├── craftdesk.json
|
|
467
|
+
│ └── AGENT.md
|
|
468
|
+
└── commands/
|
|
469
|
+
└── deploy/
|
|
470
|
+
├── craftdesk.json
|
|
471
|
+
└── COMMAND.md
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## craftdesk.json Reference
|
|
477
|
+
|
|
478
|
+
Complete specification of the craftdesk.json format:
|
|
479
|
+
|
|
480
|
+
```json
|
|
481
|
+
{
|
|
482
|
+
// Required fields
|
|
483
|
+
"name": "my-project",
|
|
484
|
+
"version": "1.0.0",
|
|
485
|
+
|
|
486
|
+
// Optional metadata
|
|
487
|
+
"type": "skill",
|
|
488
|
+
"description": "My awesome AI project",
|
|
489
|
+
"author": "Your Name <you@example.com>",
|
|
490
|
+
"license": "MIT",
|
|
491
|
+
"homepage": "https://example.com",
|
|
492
|
+
"repository": {
|
|
493
|
+
"type": "git",
|
|
494
|
+
"url": "https://github.com/user/repo.git"
|
|
495
|
+
},
|
|
496
|
+
"keywords": ["ai", "claude", "automation"],
|
|
497
|
+
|
|
498
|
+
// Dependencies
|
|
499
|
+
"dependencies": {
|
|
500
|
+
"my-skill": {
|
|
501
|
+
"git": "https://github.com/user/repo.git",
|
|
502
|
+
"branch": "main"
|
|
503
|
+
},
|
|
504
|
+
"auth-handler": {
|
|
505
|
+
"git": "https://github.com/company/monorepo.git",
|
|
506
|
+
"tag": "v3.2.0",
|
|
507
|
+
"path": "skills/auth"
|
|
508
|
+
},
|
|
509
|
+
"my-agent": {
|
|
510
|
+
"git": "https://github.com/user/agents.git",
|
|
511
|
+
"branch": "main",
|
|
512
|
+
"file": "agent.md"
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
|
|
516
|
+
"devDependencies": {
|
|
517
|
+
"test-runner": {
|
|
518
|
+
"git": "https://github.com/org/test-tools.git",
|
|
519
|
+
"branch": "main"
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
### Field Descriptions
|
|
526
|
+
|
|
527
|
+
| Field | Type | Required | Description |
|
|
528
|
+
|-------|------|----------|-------------|
|
|
529
|
+
| `name` | string | Yes | Craft name (lowercase, no spaces) |
|
|
530
|
+
| `version` | string | Yes | Semantic version (e.g., "1.0.0") |
|
|
531
|
+
| `type` | string | No | Craft type: skill, agent, command, hook, plugin |
|
|
532
|
+
| `description` | string | No | Short description |
|
|
533
|
+
| `author` | string | No | Author name and email |
|
|
534
|
+
| `license` | string | No | License identifier (e.g., "MIT") |
|
|
535
|
+
| `dependencies` | object | No | Production dependencies |
|
|
536
|
+
| `devDependencies` | object | No | Development dependencies |
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
## craftdesk.lock
|
|
541
|
+
|
|
542
|
+
The lockfile ensures reproducible installations across different machines and times.
|
|
543
|
+
|
|
544
|
+
### What's in the Lockfile?
|
|
545
|
+
|
|
546
|
+
```json
|
|
547
|
+
{
|
|
548
|
+
"version": "1.0.0",
|
|
549
|
+
"lockfileVersion": 1,
|
|
550
|
+
"generatedAt": "2025-11-18T10:30:00.000Z",
|
|
551
|
+
"crafts": {
|
|
552
|
+
"my-skill": {
|
|
553
|
+
"version": "main",
|
|
554
|
+
"resolved": "https://github.com/user/skill.git",
|
|
555
|
+
"integrity": "a1b2c3d4e5f6789012345678901234567890abcd",
|
|
556
|
+
"type": "skill",
|
|
557
|
+
"author": "git",
|
|
558
|
+
"git": "https://github.com/user/skill.git",
|
|
559
|
+
"branch": "main",
|
|
560
|
+
"commit": "a1b2c3d4e5f6789012345678901234567890abcd",
|
|
561
|
+
"dependencies": {}
|
|
562
|
+
},
|
|
563
|
+
"custom-agent": {
|
|
564
|
+
"version": "v2.0.0",
|
|
565
|
+
"resolved": "https://github.com/user/agent.git",
|
|
566
|
+
"integrity": "b2c3d4e5f6789012345678901234567890abcdef",
|
|
567
|
+
"type": "agent",
|
|
568
|
+
"git": "https://github.com/user/agent.git",
|
|
569
|
+
"tag": "v2.0.0",
|
|
570
|
+
"commit": "b2c3d4e5f6789012345678901234567890abcdef",
|
|
571
|
+
"dependencies": {}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
### Best Practices
|
|
578
|
+
|
|
579
|
+
✅ **DO:**
|
|
580
|
+
- Commit craftdesk.lock to version control
|
|
581
|
+
- Let the CLI manage it (don't edit manually)
|
|
582
|
+
- Use it for reproducible builds in CI/CD
|
|
583
|
+
|
|
584
|
+
❌ **DON'T:**
|
|
585
|
+
- Ignore craftdesk.lock in .gitignore
|
|
586
|
+
- Edit it manually
|
|
587
|
+
- Delete it without `--no-lockfile` flag
|
|
588
|
+
|
|
589
|
+
---
|
|
590
|
+
|
|
591
|
+
## CI/CD Integration
|
|
592
|
+
|
|
593
|
+
### GitHub Actions
|
|
594
|
+
|
|
595
|
+
```yaml
|
|
596
|
+
name: Deploy
|
|
597
|
+
on: [push]
|
|
598
|
+
|
|
599
|
+
jobs:
|
|
600
|
+
deploy:
|
|
601
|
+
runs-on: ubuntu-latest
|
|
602
|
+
steps:
|
|
603
|
+
- uses: actions/checkout@v3
|
|
604
|
+
|
|
605
|
+
- name: Setup Node.js
|
|
606
|
+
uses: actions/setup-node@v3
|
|
607
|
+
with:
|
|
608
|
+
node-version: '18'
|
|
609
|
+
|
|
610
|
+
- name: Install CraftDesk CLI
|
|
611
|
+
run: npm install -g craftdesk
|
|
612
|
+
|
|
613
|
+
- name: Install AI capabilities
|
|
614
|
+
run: craftdesk install --production
|
|
615
|
+
|
|
616
|
+
- name: Deploy
|
|
617
|
+
run: ./deploy.sh
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
### GitLab CI
|
|
621
|
+
|
|
622
|
+
```yaml
|
|
623
|
+
deploy:
|
|
624
|
+
image: node:18
|
|
625
|
+
script:
|
|
626
|
+
- npm install -g craftdesk
|
|
627
|
+
- craftdesk install --production
|
|
628
|
+
- ./deploy.sh
|
|
629
|
+
only:
|
|
630
|
+
- main
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
### Docker
|
|
634
|
+
|
|
635
|
+
```dockerfile
|
|
636
|
+
FROM node:18
|
|
637
|
+
|
|
638
|
+
# Install CraftDesk CLI
|
|
639
|
+
RUN npm install -g craftdesk
|
|
640
|
+
|
|
641
|
+
# Copy project files
|
|
642
|
+
WORKDIR /app
|
|
643
|
+
COPY craftdesk.json craftdesk.lock ./
|
|
644
|
+
|
|
645
|
+
# Install AI capabilities
|
|
646
|
+
RUN craftdesk install --production
|
|
647
|
+
|
|
648
|
+
# Copy rest of application
|
|
649
|
+
COPY . .
|
|
650
|
+
|
|
651
|
+
CMD ["node", "app.js"]
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
---
|
|
655
|
+
|
|
656
|
+
## Troubleshooting
|
|
657
|
+
|
|
658
|
+
### Common Issues
|
|
659
|
+
|
|
660
|
+
#### `No craftdesk.json found`
|
|
661
|
+
|
|
662
|
+
Make sure you're in a directory with a craftdesk.json file, or run `craftdesk init` first.
|
|
663
|
+
|
|
664
|
+
#### `Failed to resolve dependencies`
|
|
665
|
+
|
|
666
|
+
- Check internet connection
|
|
667
|
+
- Verify git repository URLs are accessible
|
|
668
|
+
- For private repos, ensure SSH keys or access tokens are configured
|
|
669
|
+
- Try `craftdesk install --no-lockfile` to re-resolve
|
|
670
|
+
|
|
671
|
+
#### `Git clone failed`
|
|
672
|
+
|
|
673
|
+
- Verify git is installed: `git --version`
|
|
674
|
+
- Check git repository URL is accessible
|
|
675
|
+
- For private repos, ensure SSH keys or tokens are configured
|
|
676
|
+
|
|
677
|
+
#### `Permission denied`
|
|
678
|
+
|
|
679
|
+
- For global install: `sudo npm install -g craftdesk`
|
|
680
|
+
- Or use npx: `npx craftdesk install`
|
|
681
|
+
|
|
682
|
+
#### `Dependency conflicts`
|
|
683
|
+
|
|
684
|
+
Currently uses last-write-wins. Future versions will have interactive conflict resolution.
|
|
685
|
+
|
|
686
|
+
### Debug Mode
|
|
687
|
+
|
|
688
|
+
Enable verbose logging:
|
|
689
|
+
|
|
690
|
+
```bash
|
|
691
|
+
craftdesk --debug install
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
### Getting Help
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
# General help
|
|
698
|
+
craftdesk --help
|
|
699
|
+
|
|
700
|
+
# Command-specific help
|
|
701
|
+
craftdesk init --help
|
|
702
|
+
craftdesk add --help
|
|
703
|
+
craftdesk install --help
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
---
|
|
707
|
+
|
|
708
|
+
## Development
|
|
709
|
+
|
|
710
|
+
### Building from Source
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
git clone https://github.com/mensfeld/craftdesk.git
|
|
714
|
+
cd craftdesk
|
|
715
|
+
npm install
|
|
716
|
+
npm run build
|
|
717
|
+
npm link
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
### Project Structure
|
|
721
|
+
|
|
722
|
+
```
|
|
723
|
+
craftdesk/
|
|
724
|
+
├── src/
|
|
725
|
+
│ ├── commands/ # CLI commands
|
|
726
|
+
│ ├── services/ # Core services
|
|
727
|
+
│ ├── types/ # TypeScript types
|
|
728
|
+
│ └── utils/ # Utilities
|
|
729
|
+
├── dist/ # Compiled JavaScript
|
|
730
|
+
├── bin/ # Executable entry point
|
|
731
|
+
├── examples/ # Example craftdesk.json files
|
|
732
|
+
└── docs/ # Documentation
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
### Running Tests
|
|
736
|
+
|
|
737
|
+
```bash
|
|
738
|
+
npm test
|
|
739
|
+
```
|
|
740
|
+
|
|
741
|
+
### Publishing
|
|
742
|
+
|
|
743
|
+
```bash
|
|
744
|
+
npm version patch
|
|
745
|
+
npm publish
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
---
|
|
749
|
+
|
|
750
|
+
## License
|
|
751
|
+
|
|
752
|
+
MIT
|
|
753
|
+
|
|
754
|
+
---
|
|
755
|
+
|
|
756
|
+
## Links
|
|
757
|
+
|
|
758
|
+
- **Repository**: [https://github.com/mensfeld/craftdesk](https://github.com/mensfeld/craftdesk)
|
|
759
|
+
- **Issues**: [https://github.com/mensfeld/craftdesk/issues](https://github.com/mensfeld/craftdesk/issues)
|
|
760
|
+
- **Registry** (Coming Soon): Self-hosted registry server under development
|
|
761
|
+
|
|
762
|
+
---
|
|
763
|
+
|
|
764
|
+
## Roadmap
|
|
765
|
+
|
|
766
|
+
- ✅ Git dependency support
|
|
767
|
+
- ✅ GitHub URL auto-conversion
|
|
768
|
+
- ✅ Direct file references
|
|
769
|
+
- ✅ Monorepo support
|
|
770
|
+
- ✅ Lockfile-based version control
|
|
771
|
+
- 🚧 Self-hosted registry server (in development)
|
|
772
|
+
- 🚧 Private registry authentication
|
|
773
|
+
- 🚧 Dependency conflict resolution
|
|
774
|
+
- 🚧 Semantic versioning for registry packages
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
Made for the AI development community
|