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.
Files changed (103) hide show
  1. package/.claude/settings.local.json +19 -0
  2. package/.github/workflows/ci.yml +94 -0
  3. package/API.md +414 -0
  4. package/README.md +778 -0
  5. package/TESTING.md +263 -0
  6. package/bin/craftdesk.js +4 -0
  7. package/dist/commands/add.d.ts +3 -0
  8. package/dist/commands/add.d.ts.map +1 -0
  9. package/dist/commands/add.js +284 -0
  10. package/dist/commands/add.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +56 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/init.d.ts +3 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +57 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/install.d.ts +3 -0
  20. package/dist/commands/install.d.ts.map +1 -0
  21. package/dist/commands/install.js +109 -0
  22. package/dist/commands/install.js.map +1 -0
  23. package/dist/commands/list.d.ts +3 -0
  24. package/dist/commands/list.d.ts.map +1 -0
  25. package/dist/commands/list.js +117 -0
  26. package/dist/commands/list.js.map +1 -0
  27. package/dist/commands/remove.d.ts +3 -0
  28. package/dist/commands/remove.d.ts.map +1 -0
  29. package/dist/commands/remove.js +74 -0
  30. package/dist/commands/remove.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +51 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/services/config-manager.d.ts +88 -0
  36. package/dist/services/config-manager.d.ts.map +1 -0
  37. package/dist/services/config-manager.js +143 -0
  38. package/dist/services/config-manager.js.map +1 -0
  39. package/dist/services/git-resolver.d.ts +139 -0
  40. package/dist/services/git-resolver.d.ts.map +1 -0
  41. package/dist/services/git-resolver.js +340 -0
  42. package/dist/services/git-resolver.js.map +1 -0
  43. package/dist/services/installer.d.ts +98 -0
  44. package/dist/services/installer.d.ts.map +1 -0
  45. package/dist/services/installer.js +274 -0
  46. package/dist/services/installer.js.map +1 -0
  47. package/dist/services/registry-client.d.ts +27 -0
  48. package/dist/services/registry-client.d.ts.map +1 -0
  49. package/dist/services/registry-client.js +134 -0
  50. package/dist/services/registry-client.js.map +1 -0
  51. package/dist/types/config.d.ts +17 -0
  52. package/dist/types/config.d.ts.map +1 -0
  53. package/dist/types/config.js +3 -0
  54. package/dist/types/config.js.map +1 -0
  55. package/dist/types/craftdesk-json.d.ts +42 -0
  56. package/dist/types/craftdesk-json.d.ts.map +1 -0
  57. package/dist/types/craftdesk-json.js +3 -0
  58. package/dist/types/craftdesk-json.js.map +1 -0
  59. package/dist/types/craftdesk-lock.d.ts +34 -0
  60. package/dist/types/craftdesk-lock.d.ts.map +1 -0
  61. package/dist/types/craftdesk-lock.js +3 -0
  62. package/dist/types/craftdesk-lock.js.map +1 -0
  63. package/dist/utils/file-system.d.ts +10 -0
  64. package/dist/utils/file-system.d.ts.map +1 -0
  65. package/dist/utils/file-system.js +60 -0
  66. package/dist/utils/file-system.js.map +1 -0
  67. package/dist/utils/logger.d.ts +18 -0
  68. package/dist/utils/logger.d.ts.map +1 -0
  69. package/dist/utils/logger.js +72 -0
  70. package/dist/utils/logger.js.map +1 -0
  71. package/docs/DEPENDENCY_RESOLUTION.md +237 -0
  72. package/examples/craftdesk-all-sources.json +79 -0
  73. package/examples/craftdesk-git-monorepo.json +41 -0
  74. package/examples/craftdesk-multi-registry.json +40 -0
  75. package/examples/craftdesk-with-registries.json +49 -0
  76. package/examples/simple-craftdesk.json +10 -0
  77. package/package.json +32 -25
  78. package/src/commands/add.ts +314 -0
  79. package/src/commands/init.ts +55 -0
  80. package/src/commands/install.ts +126 -0
  81. package/src/commands/list.ts +126 -0
  82. package/src/commands/remove.ts +82 -0
  83. package/src/index.ts +56 -0
  84. package/src/services/config-manager.ts +150 -0
  85. package/src/services/git-resolver.ts +373 -0
  86. package/src/services/installer.ts +314 -0
  87. package/src/services/registry-client.ts +163 -0
  88. package/src/types/craftdesk-json.ts +53 -0
  89. package/src/types/craftdesk-lock.ts +38 -0
  90. package/src/utils/file-system.ts +55 -0
  91. package/src/utils/logger.ts +82 -0
  92. package/tests/fixtures/craftdesk-git.json +17 -0
  93. package/tests/fixtures/craftdesk.json +15 -0
  94. package/tests/helpers/test-utils.ts +60 -0
  95. package/tests/integration/init-command.test.ts +70 -0
  96. package/tests/integration/list-command.test.ts +77 -0
  97. package/tests/unit/config-manager.test.ts +228 -0
  98. package/tests/unit/git-resolver.test.ts +303 -0
  99. package/tests/unit/installer.test.ts +105 -0
  100. package/tsconfig.json +20 -0
  101. package/vitest.config.ts +29 -0
  102. package/LICENSE +0 -21
  103. 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
+ [![npm version](https://img.shields.io/npm/v/craftdesk.svg)](https://www.npmjs.com/package/craftdesk)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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