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