craftdesk 0.3.0 → 0.4.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 (175) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +943 -46
  3. package/dist/commands/add.d.ts +5 -0
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +302 -6
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/convert.d.ts +8 -0
  8. package/dist/commands/convert.d.ts.map +1 -0
  9. package/dist/commands/convert.js +146 -0
  10. package/dist/commands/convert.js.map +1 -0
  11. package/dist/commands/info.d.ts +8 -0
  12. package/dist/commands/info.d.ts.map +1 -0
  13. package/dist/commands/info.js +66 -0
  14. package/dist/commands/info.js.map +1 -0
  15. package/dist/commands/init.d.ts +5 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +8 -2
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +5 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +24 -4
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/list.d.ts +5 -0
  24. package/dist/commands/list.d.ts.map +1 -1
  25. package/dist/commands/list.js +72 -7
  26. package/dist/commands/list.js.map +1 -1
  27. package/dist/commands/login.d.ts +8 -0
  28. package/dist/commands/login.d.ts.map +1 -0
  29. package/dist/commands/login.js +158 -0
  30. package/dist/commands/login.js.map +1 -0
  31. package/dist/commands/logout.d.ts +8 -0
  32. package/dist/commands/logout.d.ts.map +1 -0
  33. package/dist/commands/logout.js +51 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/outdated.d.ts +23 -0
  36. package/dist/commands/outdated.d.ts.map +1 -0
  37. package/dist/commands/outdated.js +268 -0
  38. package/dist/commands/outdated.js.map +1 -0
  39. package/dist/commands/publish.d.ts +8 -0
  40. package/dist/commands/publish.d.ts.map +1 -0
  41. package/dist/commands/publish.js +198 -0
  42. package/dist/commands/publish.js.map +1 -0
  43. package/dist/commands/remove.d.ts +5 -0
  44. package/dist/commands/remove.d.ts.map +1 -1
  45. package/dist/commands/remove.js +51 -10
  46. package/dist/commands/remove.js.map +1 -1
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +60 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/update.d.ts +8 -0
  52. package/dist/commands/update.d.ts.map +1 -0
  53. package/dist/commands/update.js +369 -0
  54. package/dist/commands/update.js.map +1 -0
  55. package/dist/commands/whoami.d.ts +8 -0
  56. package/dist/commands/whoami.d.ts.map +1 -0
  57. package/dist/commands/whoami.js +58 -0
  58. package/dist/commands/whoami.js.map +1 -0
  59. package/dist/converters/base-converter.d.ts +89 -0
  60. package/dist/converters/base-converter.d.ts.map +1 -0
  61. package/dist/converters/base-converter.js +249 -0
  62. package/dist/converters/base-converter.js.map +1 -0
  63. package/dist/converters/continue-converter.d.ts +53 -0
  64. package/dist/converters/continue-converter.d.ts.map +1 -0
  65. package/dist/converters/continue-converter.js +243 -0
  66. package/dist/converters/continue-converter.js.map +1 -0
  67. package/dist/converters/cursor-converter.d.ts +70 -0
  68. package/dist/converters/cursor-converter.d.ts.map +1 -0
  69. package/dist/converters/cursor-converter.js +272 -0
  70. package/dist/converters/cursor-converter.js.map +1 -0
  71. package/dist/index.js +34 -3
  72. package/dist/index.js.map +1 -1
  73. package/dist/services/config-manager.d.ts +128 -10
  74. package/dist/services/config-manager.d.ts.map +1 -1
  75. package/dist/services/config-manager.js +189 -18
  76. package/dist/services/config-manager.js.map +1 -1
  77. package/dist/services/converter.d.ts +53 -0
  78. package/dist/services/converter.d.ts.map +1 -0
  79. package/dist/services/converter.js +185 -0
  80. package/dist/services/converter.js.map +1 -0
  81. package/dist/services/craft-wrapper.d.ts +108 -0
  82. package/dist/services/craft-wrapper.d.ts.map +1 -0
  83. package/dist/services/craft-wrapper.js +268 -0
  84. package/dist/services/craft-wrapper.js.map +1 -0
  85. package/dist/services/git-resolver.d.ts +9 -3
  86. package/dist/services/git-resolver.d.ts.map +1 -1
  87. package/dist/services/git-resolver.js +29 -10
  88. package/dist/services/git-resolver.js.map +1 -1
  89. package/dist/services/installer.d.ts +51 -1
  90. package/dist/services/installer.d.ts.map +1 -1
  91. package/dist/services/installer.js +245 -14
  92. package/dist/services/installer.js.map +1 -1
  93. package/dist/services/plugin-resolver.d.ts +80 -0
  94. package/dist/services/plugin-resolver.d.ts.map +1 -0
  95. package/dist/services/plugin-resolver.js +182 -0
  96. package/dist/services/plugin-resolver.js.map +1 -0
  97. package/dist/services/registry-client.d.ts +132 -5
  98. package/dist/services/registry-client.d.ts.map +1 -1
  99. package/dist/services/registry-client.js +239 -34
  100. package/dist/services/registry-client.js.map +1 -1
  101. package/dist/services/settings-manager.d.ts +151 -0
  102. package/dist/services/settings-manager.d.ts.map +1 -0
  103. package/dist/services/settings-manager.js +333 -0
  104. package/dist/services/settings-manager.js.map +1 -0
  105. package/dist/types/claude-settings.d.ts +155 -0
  106. package/dist/types/claude-settings.d.ts.map +1 -0
  107. package/dist/types/claude-settings.js +20 -0
  108. package/dist/types/claude-settings.js.map +1 -0
  109. package/dist/types/converter.d.ts +98 -0
  110. package/dist/types/converter.d.ts.map +1 -0
  111. package/dist/types/converter.js +6 -0
  112. package/dist/types/converter.js.map +1 -0
  113. package/dist/types/craftdesk-json.d.ts +63 -3
  114. package/dist/types/craftdesk-json.d.ts.map +1 -1
  115. package/dist/types/craftdesk-lock.d.ts +62 -1
  116. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  117. package/dist/utils/crypto.d.ts +23 -0
  118. package/dist/utils/crypto.d.ts.map +1 -0
  119. package/dist/utils/crypto.js +52 -0
  120. package/dist/utils/crypto.js.map +1 -0
  121. package/dist/utils/file-system.d.ts +43 -0
  122. package/dist/utils/file-system.d.ts.map +1 -1
  123. package/dist/utils/file-system.js +45 -2
  124. package/dist/utils/file-system.js.map +1 -1
  125. package/dist/utils/logger.d.ts +75 -0
  126. package/dist/utils/logger.d.ts.map +1 -1
  127. package/dist/utils/logger.js +76 -1
  128. package/dist/utils/logger.js.map +1 -1
  129. package/dist/utils/version-utils.d.ts +63 -0
  130. package/dist/utils/version-utils.d.ts.map +1 -0
  131. package/dist/utils/version-utils.js +130 -0
  132. package/dist/utils/version-utils.js.map +1 -0
  133. package/package.json +36 -9
  134. package/.claude/settings.local.json +0 -19
  135. package/.github/workflows/ci.yml +0 -94
  136. package/API.md +0 -414
  137. package/TESTING.md +0 -263
  138. package/dist/commands/config.d.ts +0 -3
  139. package/dist/commands/config.d.ts.map +0 -1
  140. package/dist/commands/config.js +0 -56
  141. package/dist/commands/config.js.map +0 -1
  142. package/dist/types/config.d.ts +0 -17
  143. package/dist/types/config.d.ts.map +0 -1
  144. package/dist/types/config.js +0 -3
  145. package/dist/types/config.js.map +0 -1
  146. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  147. package/examples/craftdesk-all-sources.json +0 -79
  148. package/examples/craftdesk-git-monorepo.json +0 -41
  149. package/examples/craftdesk-multi-registry.json +0 -40
  150. package/examples/craftdesk-with-registries.json +0 -49
  151. package/examples/simple-craftdesk.json +0 -10
  152. package/src/commands/add.ts +0 -314
  153. package/src/commands/init.ts +0 -55
  154. package/src/commands/install.ts +0 -126
  155. package/src/commands/list.ts +0 -126
  156. package/src/commands/remove.ts +0 -82
  157. package/src/index.ts +0 -56
  158. package/src/services/config-manager.ts +0 -150
  159. package/src/services/git-resolver.ts +0 -373
  160. package/src/services/installer.ts +0 -314
  161. package/src/services/registry-client.ts +0 -163
  162. package/src/types/craftdesk-json.ts +0 -53
  163. package/src/types/craftdesk-lock.ts +0 -38
  164. package/src/utils/file-system.ts +0 -55
  165. package/src/utils/logger.ts +0 -82
  166. package/tests/fixtures/craftdesk-git.json +0 -17
  167. package/tests/fixtures/craftdesk.json +0 -15
  168. package/tests/helpers/test-utils.ts +0 -60
  169. package/tests/integration/init-command.test.ts +0 -70
  170. package/tests/integration/list-command.test.ts +0 -77
  171. package/tests/unit/config-manager.test.ts +0 -228
  172. package/tests/unit/git-resolver.test.ts +0 -303
  173. package/tests/unit/installer.test.ts +0 -105
  174. package/tsconfig.json +0 -20
  175. package/vitest.config.ts +0 -29
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createConfigCommand = createConfigCommand;
4
- const commander_1 = require("commander");
5
- const config_manager_1 = require("../services/config-manager");
6
- const logger_1 = require("../utils/logger");
7
- function createConfigCommand() {
8
- const config = new commander_1.Command('config')
9
- .description('Manage CraftDesk CLI configuration');
10
- config
11
- .command('list')
12
- .description('List all configuration values')
13
- .action(async () => {
14
- await config_manager_1.configManager.list();
15
- });
16
- config
17
- .command('get <key>')
18
- .description('Get a configuration value')
19
- .action(async (key) => {
20
- const value = await config_manager_1.configManager.get(key);
21
- if (value !== undefined) {
22
- logger_1.logger.log(value);
23
- }
24
- else {
25
- logger_1.logger.error(`Configuration key '${key}' not found`);
26
- process.exit(1);
27
- }
28
- });
29
- config
30
- .command('set <key> <value>')
31
- .description('Set a configuration value')
32
- .action(async (key, value) => {
33
- // Handle special cases
34
- if (key.includes(':registry')) {
35
- // Setting a scoped registry
36
- // e.g., @acme:registry -> scopes.@acme
37
- const scope = key.split(':')[0];
38
- await config_manager_1.configManager.set(`scopes.${scope}`, value);
39
- logger_1.logger.success(`Set registry for ${scope} to ${value}`);
40
- }
41
- else if (key.startsWith('//') && key.includes('/:token')) {
42
- // Setting auth token
43
- // e.g., //crafts.acme.com/:token -> auth.crafts.acme.com.token
44
- const host = key.substring(2, key.indexOf('/:'));
45
- await config_manager_1.configManager.set(`auth.${host}.token`, value);
46
- logger_1.logger.success(`Set auth token for ${host}`);
47
- }
48
- else {
49
- // Normal key-value
50
- await config_manager_1.configManager.set(key, value);
51
- logger_1.logger.success(`Set ${key} to ${value}`);
52
- }
53
- });
54
- return config;
55
- }
56
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;AAIA,kDAiDC;AArDD,yCAAoC;AACpC,+DAA2D;AAC3D,4CAAyC;AAEzC,SAAgB,mBAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACjC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErD,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,8BAAa,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,8BAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,eAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,aAAa,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,KAAa,EAAE,EAAE;QAC3C,uBAAuB;QACvB,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,4BAA4B;YAC5B,uCAAuC;YACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,8BAAa,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;YAClD,eAAM,CAAC,OAAO,CAAC,oBAAoB,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,qBAAqB;YACrB,+DAA+D;YAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,MAAM,8BAAa,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrD,eAAM,CAAC,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,mBAAmB;YACnB,MAAM,8BAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,eAAM,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,KAAK,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,17 +0,0 @@
1
- export interface CraftDeskConfig {
2
- registries?: {
3
- default?: string;
4
- [key: string]: string | undefined;
5
- };
6
- scopes?: {
7
- [scope: string]: string;
8
- };
9
- auth?: {
10
- [host: string]: {
11
- token: string;
12
- };
13
- };
14
- installPath?: string;
15
- cache?: string;
16
- }
17
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IAEF,MAAM,CAAC,EAAE;QACP,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IAEF,IAAI,CAAC,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG;YACd,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IAEF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":""}
@@ -1,237 +0,0 @@
1
- # CraftDesk Dependency Resolution
2
-
3
- ## Overview
4
-
5
- CraftDesk supports multiple dependency sources and resolves them intelligently, including transitive dependencies.
6
-
7
- ## Dependency Sources
8
-
9
- ### 1. Registry Dependencies (Default)
10
-
11
- Standard dependencies are fetched from registries:
12
-
13
- ```json
14
- {
15
- "dependencies": {
16
- "ruby-on-rails": "^7.0.0"
17
- }
18
- }
19
- ```
20
-
21
- **Resolution Process:**
22
- 1. Query the registry API for package metadata
23
- 2. Resolve version constraints
24
- 3. Fetch transitive dependencies
25
- 4. Generate lockfile with exact versions
26
-
27
- ### 2. Git Dependencies
28
-
29
- Dependencies can be fetched directly from git repositories:
30
-
31
- ```json
32
- {
33
- "dependencies": {
34
- "my-skill": {
35
- "git": "https://github.com/user/repo.git",
36
- "branch": "main"
37
- }
38
- }
39
- }
40
- ```
41
-
42
- **Resolution Process:**
43
- 1. Clone the repository (shallow clone for efficiency)
44
- 2. Check out specified branch/tag/commit
45
- 3. Look for `craftdesk.json` in the repository
46
- 4. Extract metadata and dependencies
47
- 5. Recursively resolve any dependencies found
48
-
49
- ## Handling Missing craftdesk.json
50
-
51
- When a git dependency doesn't have a `craftdesk.json` file, the CLI:
52
-
53
- ### 1. Generates Minimal Metadata
54
-
55
- ```json
56
- {
57
- "name": "repository-name",
58
- "version": "branch-or-tag-or-commit",
59
- "type": "skill", // Inferred from structure
60
- "description": "Git dependency from <url>",
61
- "dependencies": {}
62
- }
63
- ```
64
-
65
- ### 2. Type Inference
66
-
67
- The system tries to infer the craft type by looking for:
68
-
69
- 1. **Marker Files:**
70
- - `SKILL.md` → type: "skill"
71
- - `AGENT.md` → type: "agent"
72
- - `COMMAND.md` → type: "command"
73
- - `HOOK.md` → type: "hook"
74
-
75
- 2. **Directory Name Patterns:**
76
- - Contains "skill" → type: "skill"
77
- - Contains "agent" → type: "agent"
78
- - Contains "command" → type: "command"
79
- - Contains "hook" → type: "hook"
80
-
81
- 3. **Default:** type: "skill"
82
-
83
- ## Monorepo Support
84
-
85
- For git repositories containing multiple crafts:
86
-
87
- ```json
88
- {
89
- "dependencies": {
90
- "auth-handler": {
91
- "git": "https://github.com/company/monorepo.git",
92
- "tag": "v3.0.0",
93
- "path": "packages/auth"
94
- },
95
- "data-processor": {
96
- "git": "https://github.com/company/monorepo.git",
97
- "tag": "v3.0.0",
98
- "path": "agents/processor"
99
- }
100
- }
101
- }
102
- ```
103
-
104
- The CLI:
105
- 1. Clones the repository once
106
- 2. Looks for `craftdesk.json` in each specified `path`
107
- 3. Installs only the contents of the specified subdirectory
108
-
109
- ## Transitive Dependencies
110
-
111
- ### From Registry Packages
112
-
113
- Registry packages include their dependencies in metadata:
114
- ```json
115
- {
116
- "name": "ruby-on-rails",
117
- "version": "7.1.0",
118
- "dependencies": {
119
- "activerecord": "^7.1.0",
120
- "actionpack": "^7.1.0"
121
- }
122
- }
123
- ```
124
-
125
- ### From Git Packages
126
-
127
- Git packages' dependencies are discovered by reading their `craftdesk.json`:
128
- ```json
129
- // In https://github.com/user/my-skill.git/craftdesk.json
130
- {
131
- "name": "my-skill",
132
- "version": "2.0.0",
133
- "dependencies": {
134
- "postgres-expert": "^1.0.0", // Will be resolved from registry
135
- "helper-lib": {
136
- "git": "https://github.com/user/helper.git" // Will be resolved from git
137
- }
138
- }
139
- }
140
- ```
141
-
142
- ## Resolution Algorithm
143
-
144
- ```typescript
145
- 1. Start with direct dependencies from craftdesk.json
146
- 2. For each dependency:
147
- a. If registry: Query API for metadata
148
- b. If git: Clone and extract craftdesk.json
149
- 3. Add discovered dependencies to resolution queue
150
- 4. Repeat until all dependencies resolved
151
- 5. Check for version conflicts
152
- 6. Generate lockfile with exact versions
153
- ```
154
-
155
- ## Lockfile Structure
156
-
157
- The lockfile captures the complete resolution:
158
-
159
- ```json
160
- {
161
- "version": "1.0.0",
162
- "lockfileVersion": 1,
163
- "crafts": {
164
- "my-skill": {
165
- "version": "2.0.0",
166
- "resolved": "https://github.com/user/my-skill.git",
167
- "integrity": "abc123def456", // Git commit hash
168
- "type": "skill",
169
- "git": "https://github.com/user/my-skill.git",
170
- "branch": "main",
171
- "commit": "abc123def456789012345678901234567890abcd",
172
- "dependencies": {
173
- "postgres-expert": "^1.0.0"
174
- }
175
- },
176
- "postgres-expert": {
177
- "version": "1.2.3",
178
- "resolved": "https://craftdesk.ai/api/v1/crafts/anthropic/postgres-expert/versions/1.2.3/download",
179
- "integrity": "sha256-xyz789...",
180
- "type": "agent",
181
- "registry": "https://craftdesk.ai",
182
- "dependencies": {}
183
- }
184
- }
185
- }
186
- ```
187
-
188
- ## Error Handling
189
-
190
- ### Missing Dependencies
191
- - Git repos without craftdesk.json: Generate minimal metadata
192
- - Unreachable git repos: Fail with clear error message
193
- - Registry packages not found: Fail with suggestions
194
-
195
- ### Version Conflicts
196
- - Currently: Last-write-wins
197
- - Future: Interactive conflict resolution
198
-
199
- ### Circular Dependencies
200
- - Detected during resolution
201
- - Fails with error showing the circular chain
202
-
203
- ## Performance Optimizations
204
-
205
- 1. **Shallow Clones:** Git repos cloned with `--depth 1`
206
- 2. **Parallel Resolution:** Registry queries run in parallel
207
- 3. **Caching:** Git repos cached for 15 minutes during resolution
208
- 4. **Minimal Transfers:** Only specified subdirectories copied for monorepos
209
-
210
- ## Example: Mixed Resolution
211
-
212
- Given this `craftdesk.json`:
213
- ```json
214
- {
215
- "dependencies": {
216
- "ruby-on-rails": "^7.0.0",
217
- "custom-auth": {
218
- "git": "https://github.com/company/auth.git",
219
- "branch": "main"
220
- }
221
- }
222
- }
223
- ```
224
-
225
- Resolution steps:
226
- 1. Query registry for ruby-on-rails@^7.0.0
227
- - Resolves to 7.1.2
228
- - Has dependencies: activerecord@^7.1.0, actionpack@^7.1.0
229
- 2. Clone https://github.com/company/auth.git
230
- - Check out main branch
231
- - Read craftdesk.json
232
- - Has dependency: jwt-helper@^2.0.0
233
- 3. Resolve transitive dependencies:
234
- - activerecord@^7.1.0 → 7.1.0
235
- - actionpack@^7.1.0 → 7.1.0
236
- - jwt-helper@^2.0.0 → 2.1.0
237
- 4. Generate complete lockfile with all 5 packages
@@ -1,79 +0,0 @@
1
- {
2
- "name": "full-example-project",
3
- "version": "1.0.0",
4
- "type": "skill",
5
- "description": "Example showing all dependency source types",
6
-
7
- "dependencies": {
8
- // Registry dependencies (default)
9
- "ruby-on-rails": "^7.0.0",
10
- "postgres-expert": "~1.2.0",
11
-
12
- // Registry with custom registry
13
- "@company/private-skill": {
14
- "version": "^3.0.0",
15
- "registry": "company-private"
16
- },
17
-
18
- // Direct registry URL
19
- "special-tool": {
20
- "version": "^2.0.0",
21
- "registry": "https://tools.example.com"
22
- },
23
-
24
- // Git dependencies with branch
25
- "experimental-agent": {
26
- "git": "https://github.com/user/agent-repo.git",
27
- "branch": "develop"
28
- },
29
-
30
- // Git with specific tag
31
- "stable-skill": {
32
- "git": "https://github.com/org/skills.git",
33
- "tag": "v2.1.0"
34
- },
35
-
36
- // Git with subdirectory (monorepo)
37
- "auth-handler": {
38
- "git": "https://github.com/company/monorepo.git",
39
- "branch": "main",
40
- "path": "packages/auth"
41
- },
42
-
43
- // Git with commit hash
44
- "specific-version": {
45
- "git": "https://github.com/user/repo.git",
46
- "commit": "a1b2c3d4e5f6789012345678901234567890abcd"
47
- },
48
-
49
- // Multiple skills from same git repo
50
- "data-processor": {
51
- "git": "https://github.com/company/monorepo.git",
52
- "tag": "v1.0.0",
53
- "path": "skills/data-processor"
54
- },
55
- "report-generator": {
56
- "git": "https://github.com/company/monorepo.git",
57
- "tag": "v1.0.0",
58
- "path": "skills/report-generator"
59
- }
60
- },
61
-
62
- "devDependencies": {
63
- "test-runner": "^1.0.0",
64
- "code-reviewer": {
65
- "git": "https://github.com/tools/reviewer.git",
66
- "branch": "latest"
67
- }
68
- },
69
-
70
- "registries": {
71
- "default": {
72
- "url": "https://craftdesk.ai"
73
- },
74
- "company-private": {
75
- "url": "https://registry.company.com",
76
- "scope": "@company"
77
- }
78
- }
79
- }
@@ -1,41 +0,0 @@
1
- {
2
- "name": "monorepo-example",
3
- "version": "1.0.0",
4
- "type": "skill",
5
- "description": "Example using git monorepo with multiple crafts",
6
-
7
- "dependencies": {
8
- "auth-handler": {
9
- "git": "https://github.com/company/ai-crafts-monorepo.git",
10
- "tag": "v3.2.0",
11
- "path": "skills/auth"
12
- },
13
- "data-processor": {
14
- "git": "https://github.com/company/ai-crafts-monorepo.git",
15
- "tag": "v3.2.0",
16
- "path": "agents/data-processor"
17
- },
18
- "report-generator": {
19
- "git": "https://github.com/company/ai-crafts-monorepo.git",
20
- "tag": "v3.2.0",
21
- "path": "skills/reporting"
22
- },
23
- "test-runner": {
24
- "git": "https://github.com/company/ai-crafts-monorepo.git",
25
- "tag": "v3.2.0",
26
- "path": "commands/test"
27
- },
28
- "pre-commit-hook": {
29
- "git": "https://github.com/company/ai-crafts-monorepo.git",
30
- "tag": "v3.2.0",
31
- "path": "hooks/pre-commit"
32
- },
33
- "ruby-on-rails": "^7.0.0"
34
- },
35
-
36
- "registries": {
37
- "default": {
38
- "url": "https://craftdesk.ai"
39
- }
40
- }
41
- }
@@ -1,40 +0,0 @@
1
- {
2
- "name": "my-enterprise-project",
3
- "version": "1.0.0",
4
- "type": "skill",
5
- "description": "Enterprise project with multiple registries",
6
- "author": "Your Company",
7
-
8
- "dependencies": {
9
- "ruby-on-rails": "^7.0.0",
10
- "postgres-expert": "~1.2.0",
11
- "@company/auth-handler": {
12
- "version": "^3.0.0",
13
- "registry": "company-private"
14
- },
15
- "special-tool": {
16
- "version": "^2.0.0",
17
- "registry": "https://tools.example.com"
18
- },
19
- "@partner/analytics": "^1.5.0"
20
- },
21
-
22
- "devDependencies": {
23
- "code-reviewer": "^2.0.0",
24
- "@company/test-suite": {
25
- "version": "^1.0.0",
26
- "registry": "company-private"
27
- }
28
- },
29
-
30
- "registries": {
31
- "company-private": {
32
- "url": "https://registry.internal.mycompany.com",
33
- "scope": "@company"
34
- },
35
- "partner": {
36
- "url": "https://api.partner.com/registry",
37
- "scope": "@partner"
38
- }
39
- }
40
- }
@@ -1,49 +0,0 @@
1
- {
2
- "name": "my-enterprise-project",
3
- "version": "1.0.0",
4
- "type": "skill",
5
- "description": "Enterprise project with multiple registries",
6
- "author": "Your Company",
7
-
8
- "dependencies": {
9
- // Simple dependencies use default registry or scope-based routing
10
- "ruby-on-rails": "^7.0.0",
11
- "postgres-expert": "~1.2.0",
12
-
13
- // Dependency with inline registry specification
14
- "@company/auth-handler": {
15
- "version": "^3.0.0",
16
- "registry": "company-private" // References registry defined below
17
- },
18
-
19
- // Direct URL registry specification
20
- "special-tool": {
21
- "version": "^2.0.0",
22
- "registry": "https://tools.example.com"
23
- },
24
-
25
- // Scoped packages automatically use their scope's registry if configured
26
- "@partner/analytics": "^1.5.0" // Will use partner registry defined below
27
- },
28
-
29
- "devDependencies": {
30
- "code-reviewer": "^2.0.0",
31
- "@company/test-suite": {
32
- "version": "^1.0.0",
33
- "registry": "company-private"
34
- }
35
- },
36
-
37
- // Registry configuration (all in one file!)
38
- "registries": {
39
- // Named registries
40
- "company-private": {
41
- "url": "https://registry.internal.mycompany.com",
42
- "scope": "@company" // All @company/* packages will use this registry
43
- },
44
- "partner": {
45
- "url": "https://api.partner.com/registry",
46
- "scope": "@partner" // All @partner/* packages will use this registry
47
- }
48
- }
49
- }
@@ -1,10 +0,0 @@
1
- {
2
- "name": "my-project",
3
- "version": "1.0.0",
4
- "type": "skill",
5
- "description": "A simple project with default registry",
6
- "dependencies": {
7
- "ruby-on-rails": "^7.0.0",
8
- "postgres-expert": "^1.2.0"
9
- }
10
- }