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
@@ -0,0 +1,70 @@
1
+ import { BaseConverter } from './base-converter';
2
+ import type { CraftContent, ConvertedContent, ConverterMetadata } from '../types/converter';
3
+ /**
4
+ * Converts CraftDesk crafts to Cursor .mdc format
5
+ * https://docs.cursor.com/context/rules
6
+ */
7
+ export declare class CursorConverter extends BaseConverter {
8
+ /**
9
+ * Get converter metadata
10
+ *
11
+ * @returns Converter metadata
12
+ */
13
+ getMetadata(): ConverterMetadata;
14
+ /**
15
+ * Convert craft to Cursor .mdc format
16
+ *
17
+ * @param craft - Craft content to convert
18
+ * @returns Array of converted files
19
+ */
20
+ convert(craft: CraftContent): Promise<ConvertedContent[]>;
21
+ /**
22
+ * Build Cursor .mdc file content
23
+ *
24
+ * @param craft - Craft content
25
+ * @param sections - Parsed markdown sections
26
+ * @returns Formatted .mdc file content
27
+ */
28
+ private buildCursorMdc;
29
+ /**
30
+ * Infer file globs based on craft content
31
+ *
32
+ * @param craft - Craft content
33
+ * @param _sections - Parsed markdown sections (unused)
34
+ * @returns Array of glob patterns for file matching
35
+ */
36
+ private inferGlobs;
37
+ /**
38
+ * Format craft name into readable title
39
+ *
40
+ * @param name - Craft name in kebab-case
41
+ * @returns Formatted title with capitalized words
42
+ */
43
+ private formatTitle;
44
+ }
45
+ /**
46
+ * Converts CraftDesk crafts to legacy Cursor .cursorrules format
47
+ */
48
+ export declare class CursorLegacyConverter extends BaseConverter {
49
+ /**
50
+ * Get converter metadata
51
+ *
52
+ * @returns Converter metadata
53
+ */
54
+ getMetadata(): ConverterMetadata;
55
+ /**
56
+ * Convert craft to legacy .cursorrules format
57
+ *
58
+ * @param craft - Craft content to convert
59
+ * @returns Array of converted files
60
+ */
61
+ convert(craft: CraftContent): Promise<ConvertedContent[]>;
62
+ /**
63
+ * Format craft name into readable title
64
+ *
65
+ * @param name - Craft name in kebab-case
66
+ * @returns Formatted title with capitalized words
67
+ */
68
+ private formatTitle;
69
+ }
70
+ //# sourceMappingURL=cursor-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-converter.d.ts","sourceRoot":"","sources":["../../src/converters/cursor-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoB/D;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAoFtB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IA0ClB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA+D/D;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CursorLegacyConverter = exports.CursorConverter = void 0;
4
+ const base_converter_1 = require("./base-converter");
5
+ /**
6
+ * Converts CraftDesk crafts to Cursor .mdc format
7
+ * https://docs.cursor.com/context/rules
8
+ */
9
+ class CursorConverter extends base_converter_1.BaseConverter {
10
+ /**
11
+ * Get converter metadata
12
+ *
13
+ * @returns Converter metadata
14
+ */
15
+ getMetadata() {
16
+ return {
17
+ name: 'Cursor Converter',
18
+ targetFormat: 'cursor',
19
+ description: 'Converts crafts to Cursor .mdc format in .cursor/rules/',
20
+ defaultOutputDir: '.cursor/rules',
21
+ supportedTypes: ['skill', 'agent', 'command']
22
+ };
23
+ }
24
+ /**
25
+ * Convert craft to Cursor .mdc format
26
+ *
27
+ * @param craft - Craft content to convert
28
+ * @returns Array of converted files
29
+ */
30
+ async convert(craft) {
31
+ const files = [];
32
+ // Extract sections
33
+ const sections = this.extractAllSections(craft.mainContent);
34
+ // Convert to Cursor .mdc format
35
+ const mdcContent = this.buildCursorMdc(craft, sections);
36
+ // Create the .mdc file
37
+ const fileName = `${craft.name}.mdc`;
38
+ files.push({
39
+ filePath: fileName,
40
+ content: mdcContent,
41
+ type: 'rule'
42
+ });
43
+ return files;
44
+ }
45
+ /**
46
+ * Build Cursor .mdc file content
47
+ *
48
+ * @param craft - Craft content
49
+ * @param sections - Parsed markdown sections
50
+ * @returns Formatted .mdc file content
51
+ */
52
+ buildCursorMdc(craft, sections) {
53
+ const lines = [];
54
+ // YAML frontmatter
55
+ lines.push('---');
56
+ lines.push(`description: ${craft.description || `Rules for ${craft.name}`}`);
57
+ // Add globs based on craft type and content
58
+ const globs = this.inferGlobs(craft, sections);
59
+ if (globs.length > 0) {
60
+ lines.push(`globs:`);
61
+ globs.forEach(glob => lines.push(` - "${glob}"`));
62
+ }
63
+ // Always apply for skills, manual for commands
64
+ lines.push(`alwaysApply: ${craft.type === 'skill'}`);
65
+ lines.push('---');
66
+ lines.push('');
67
+ // Title
68
+ lines.push(`# ${this.formatTitle(craft.name)}`);
69
+ lines.push('');
70
+ // Instructions/Overview
71
+ if (sections['instructions'] || craft.description) {
72
+ lines.push('## Overview');
73
+ lines.push('');
74
+ lines.push(sections['instructions'] || craft.description || '');
75
+ lines.push('');
76
+ }
77
+ // Code Patterns
78
+ const patterns = sections['common-patterns'] || sections['patterns'];
79
+ if (patterns) {
80
+ lines.push('## Code Patterns');
81
+ lines.push('');
82
+ lines.push(patterns);
83
+ lines.push('');
84
+ }
85
+ // Examples
86
+ const examples = sections['quick-reference'] || sections['examples'];
87
+ if (examples) {
88
+ lines.push('## Examples');
89
+ lines.push('');
90
+ lines.push(examples);
91
+ lines.push('');
92
+ }
93
+ // Best Practices
94
+ const bestPractices = this.extractBestPractices(sections);
95
+ if (bestPractices.length > 0) {
96
+ lines.push('## Best Practices');
97
+ lines.push('');
98
+ bestPractices.forEach(practice => {
99
+ lines.push(`- ${practice}`);
100
+ });
101
+ lines.push('');
102
+ }
103
+ // Common Pitfalls
104
+ const pitfalls = this.extractPitfalls(sections);
105
+ if (pitfalls.length > 0) {
106
+ lines.push('## Common Mistakes to Avoid');
107
+ lines.push('');
108
+ pitfalls.forEach(({ mistake, solution }) => {
109
+ lines.push(`- ❌ **Mistake**: ${mistake}`);
110
+ lines.push(` - ✅ **Instead**: ${solution}`);
111
+ });
112
+ lines.push('');
113
+ }
114
+ // Workflows
115
+ const workflows = sections['common-workflows'] || sections['workflows'];
116
+ if (workflows) {
117
+ lines.push('## Common Workflows');
118
+ lines.push('');
119
+ lines.push(workflows);
120
+ lines.push('');
121
+ }
122
+ return lines.join('\n');
123
+ }
124
+ /**
125
+ * Infer file globs based on craft content
126
+ *
127
+ * @param craft - Craft content
128
+ * @param _sections - Parsed markdown sections (unused)
129
+ * @returns Array of glob patterns for file matching
130
+ */
131
+ inferGlobs(craft, _sections) {
132
+ const globs = [];
133
+ const content = craft.mainContent.toLowerCase();
134
+ // Language-specific globs
135
+ const languagePatterns = {
136
+ ruby: ['**/*.rb', '**/*.rake', '**/Gemfile', '**/Rakefile'],
137
+ rails: ['**/*.rb', '**/*.erb', '**/*.haml', '**/config/**/*'],
138
+ javascript: ['**/*.js', '**/*.jsx'],
139
+ typescript: ['**/*.ts', '**/*.tsx'],
140
+ python: ['**/*.py'],
141
+ java: ['**/*.java'],
142
+ go: ['**/*.go'],
143
+ rust: ['**/*.rs'],
144
+ php: ['**/*.php'],
145
+ 'c++': ['**/*.cpp', '**/*.h', '**/*.hpp'],
146
+ 'c#': ['**/*.cs'],
147
+ swift: ['**/*.swift'],
148
+ kotlin: ['**/*.kt'],
149
+ react: ['**/*.jsx', '**/*.tsx'],
150
+ vue: ['**/*.vue'],
151
+ angular: ['**/*.ts', '**/*.html'],
152
+ docker: ['**/Dockerfile', '**/*.dockerfile', '**/docker-compose.yml'],
153
+ kubernetes: ['**/*.yaml', '**/*.yml']
154
+ };
155
+ // Check for language indicators
156
+ for (const [language, patterns] of Object.entries(languagePatterns)) {
157
+ if (content.includes(language) || craft.name.toLowerCase().includes(language)) {
158
+ globs.push(...patterns);
159
+ break; // Only use first match
160
+ }
161
+ }
162
+ // Default to all files if no specific language detected
163
+ if (globs.length === 0) {
164
+ globs.push('**/*');
165
+ }
166
+ return [...new Set(globs)]; // Remove duplicates
167
+ }
168
+ /**
169
+ * Format craft name into readable title
170
+ *
171
+ * @param name - Craft name in kebab-case
172
+ * @returns Formatted title with capitalized words
173
+ */
174
+ formatTitle(name) {
175
+ return name
176
+ .split('-')
177
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
178
+ .join(' ');
179
+ }
180
+ }
181
+ exports.CursorConverter = CursorConverter;
182
+ /**
183
+ * Converts CraftDesk crafts to legacy Cursor .cursorrules format
184
+ */
185
+ class CursorLegacyConverter extends base_converter_1.BaseConverter {
186
+ /**
187
+ * Get converter metadata
188
+ *
189
+ * @returns Converter metadata
190
+ */
191
+ getMetadata() {
192
+ return {
193
+ name: 'Cursor Legacy Converter',
194
+ targetFormat: 'cursor-legacy',
195
+ description: 'Converts crafts to legacy .cursorrules plain text format',
196
+ defaultOutputDir: '.',
197
+ supportedTypes: ['skill', 'agent', 'command']
198
+ };
199
+ }
200
+ /**
201
+ * Convert craft to legacy .cursorrules format
202
+ *
203
+ * @param craft - Craft content to convert
204
+ * @returns Array of converted files
205
+ */
206
+ async convert(craft) {
207
+ const files = [];
208
+ // Extract sections
209
+ const sections = this.extractAllSections(craft.mainContent);
210
+ // Build plain text rules
211
+ const lines = [];
212
+ lines.push(`# ${this.formatTitle(craft.name)}`);
213
+ lines.push('');
214
+ if (craft.description) {
215
+ lines.push(craft.description);
216
+ lines.push('');
217
+ }
218
+ // Instructions
219
+ if (sections['instructions']) {
220
+ lines.push('## Instructions');
221
+ lines.push('');
222
+ lines.push(sections['instructions']);
223
+ lines.push('');
224
+ }
225
+ // Patterns
226
+ const patterns = sections['common-patterns'] || sections['patterns'];
227
+ if (patterns) {
228
+ lines.push('## Code Patterns');
229
+ lines.push('');
230
+ lines.push(patterns);
231
+ lines.push('');
232
+ }
233
+ // Best Practices
234
+ const bestPractices = this.extractBestPractices(sections);
235
+ if (bestPractices.length > 0) {
236
+ lines.push('## Best Practices');
237
+ lines.push('');
238
+ bestPractices.forEach(practice => {
239
+ lines.push(`- ${practice}`);
240
+ });
241
+ lines.push('');
242
+ }
243
+ // Examples
244
+ const examples = sections['quick-reference'] || sections['examples'];
245
+ if (examples) {
246
+ lines.push('## Examples');
247
+ lines.push('');
248
+ lines.push(examples);
249
+ lines.push('');
250
+ }
251
+ files.push({
252
+ filePath: '.cursorrules',
253
+ content: lines.join('\n'),
254
+ type: 'rule'
255
+ });
256
+ return files;
257
+ }
258
+ /**
259
+ * Format craft name into readable title
260
+ *
261
+ * @param name - Craft name in kebab-case
262
+ * @returns Formatted title with capitalized words
263
+ */
264
+ formatTitle(name) {
265
+ return name
266
+ .split('-')
267
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
268
+ .join(' ');
269
+ }
270
+ }
271
+ exports.CursorLegacyConverter = CursorLegacyConverter;
272
+ //# sourceMappingURL=cursor-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-converter.js","sourceRoot":"","sources":["../../src/converters/cursor-converter.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,6 +7,15 @@ const install_1 = require("./commands/install");
7
7
  const add_1 = require("./commands/add");
8
8
  const remove_1 = require("./commands/remove");
9
9
  const list_1 = require("./commands/list");
10
+ const search_1 = require("./commands/search");
11
+ const info_1 = require("./commands/info");
12
+ const outdated_1 = require("./commands/outdated");
13
+ const update_1 = require("./commands/update");
14
+ const publish_1 = require("./commands/publish");
15
+ const login_1 = require("./commands/login");
16
+ const logout_1 = require("./commands/logout");
17
+ const whoami_1 = require("./commands/whoami");
18
+ const convert_1 = require("./commands/convert");
10
19
  const logger_1 = require("./utils/logger");
11
20
  const program = new commander_1.Command();
12
21
  program
@@ -22,6 +31,15 @@ program.addCommand((0, install_1.createInstallCommand)());
22
31
  program.addCommand((0, add_1.createAddCommand)());
23
32
  program.addCommand((0, remove_1.createRemoveCommand)());
24
33
  program.addCommand((0, list_1.createListCommand)());
34
+ program.addCommand((0, search_1.createSearchCommand)());
35
+ program.addCommand((0, info_1.createInfoCommand)());
36
+ program.addCommand((0, outdated_1.createOutdatedCommand)());
37
+ program.addCommand((0, update_1.createUpdateCommand)());
38
+ program.addCommand((0, publish_1.createPublishCommand)());
39
+ program.addCommand((0, login_1.createLoginCommand)());
40
+ program.addCommand((0, logout_1.createLogoutCommand)());
41
+ program.addCommand((0, whoami_1.createWhoamiCommand)());
42
+ program.addCommand((0, convert_1.createConvertCommand)());
25
43
  // Add aliases
26
44
  program.command('i', { hidden: true }).action(() => {
27
45
  program.parse(['', '', 'install', ...process.argv.slice(3)]);
@@ -39,9 +57,22 @@ if (process.argv.length === 2) {
39
57
  logger_1.logger.log('Dependency management for AI capabilities');
40
58
  logger_1.logger.log('');
41
59
  logger_1.logger.log('Getting started:');
42
- logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
43
- logger_1.logger.log(' craftdesk install Install all dependencies');
44
- logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
60
+ logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
61
+ logger_1.logger.log(' craftdesk search <q> Search for crafts in registry');
62
+ logger_1.logger.log(' craftdesk info <name> Show craft information');
63
+ logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
64
+ logger_1.logger.log(' craftdesk install Install all dependencies');
65
+ logger_1.logger.log(' craftdesk outdated Check for newer versions');
66
+ logger_1.logger.log(' craftdesk update Update crafts to newer versions');
67
+ logger_1.logger.log(' craftdesk publish Publish a craft to the registry');
68
+ logger_1.logger.log('');
69
+ logger_1.logger.log('Format Conversion:');
70
+ logger_1.logger.log(' craftdesk convert Convert crafts to other AI editor formats');
71
+ logger_1.logger.log('');
72
+ logger_1.logger.log('Authentication:');
73
+ logger_1.logger.log(' craftdesk login Authenticate with a registry');
74
+ logger_1.logger.log(' craftdesk logout Remove authentication');
75
+ logger_1.logger.log(' craftdesk whoami Show logged in user');
45
76
  logger_1.logger.log('');
46
77
  logger_1.logger.log('Run "craftdesk --help" for full command list');
47
78
  process.exit(0);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,gDAA0D;AAC1D,wCAAkD;AAClD,8CAAwD;AACxD,0CAAoD;AACpD,2CAAwC;AAExC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACjC,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,4BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AAExC,cAAc;AACd,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;IACjD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,iBAAiB;AACjB,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,eAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3D,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC9B,eAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC/B,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACxD,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC/B,eAAM,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACtE,eAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC9D,eAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC1D,eAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,eAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,17 @@
1
1
  import { CraftDeskJson } from '../types/craftdesk-json';
2
+ /**
3
+ * Global configuration stored in ~/.craftdesk/config.json
4
+ * Used for persistent authentication tokens across sessions
5
+ */
6
+ interface GlobalConfig {
7
+ registries: {
8
+ [url: string]: {
9
+ token: string;
10
+ user: string;
11
+ };
12
+ };
13
+ defaultRegistry?: string;
14
+ }
2
15
  /**
3
16
  * Manages configuration for the CraftDesk CLI
4
17
  *
@@ -14,6 +27,7 @@ import { CraftDeskJson } from '../types/craftdesk-json';
14
27
  */
15
28
  export declare class ConfigManager {
16
29
  private craftDeskJson;
30
+ private globalConfig;
17
31
  /**
18
32
  * Gets the appropriate registry URL for a given craft
19
33
  *
@@ -38,26 +52,79 @@ export declare class ConfigManager {
38
52
  */
39
53
  getRegistryForCraft(craftName: string): Promise<string>;
40
54
  /**
41
- * Retrieves authentication token for a registry from environment variables
55
+ * Retrieves authentication token for a registry
42
56
  *
43
- * Looks for tokens in environment variables with the pattern:
44
- * CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
57
+ * Token precedence (first match wins):
58
+ * 1. Environment variable: CRAFTDESK_AUTH_{REGISTRY_NAME_UPPERCASE}
59
+ * 2. Global config file: ~/.craftdesk/config.json
45
60
  *
46
- * Hyphens in registry names are converted to underscores.
61
+ * Environment variables take precedence to allow CI/CD overrides.
47
62
  *
48
- * @param registryName - The name of the registry from craftdesk.json
63
+ * @param registryUrl - The URL of the registry (e.g., 'https://craftdesk.ai')
49
64
  * @returns The auth token if found, null otherwise
50
65
  *
51
66
  * @example
52
67
  * ```typescript
53
- * // For registry named 'company-private', looks for CRAFTDESK_AUTH_COMPANY_PRIVATE
54
- * const token = await configManager.getAuthToken('company-private');
68
+ * // Check for token (env var or config file)
69
+ * const token = await configManager.getAuthToken('https://craftdesk.ai');
70
+ *
71
+ * // Environment variable override:
72
+ * // export CRAFTDESK_AUTH_DEFAULT=token_abc123
73
+ * ```
74
+ */
75
+ getAuthToken(registryUrl: string): Promise<string | null>;
76
+ /**
77
+ * Convert registry URL or name to environment variable name suffix
78
+ *
79
+ * @param registryUrl - The registry URL or name to convert
80
+ * @returns Environment variable name suffix (e.g., 'CRAFTDESK_AI')
81
+ * @private
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * // URL to env name
86
+ * getRegistryEnvName('https://craftdesk.ai');
87
+ * // Returns: 'CRAFTDESK_AI'
88
+ *
89
+ * // Registry name to env name
90
+ * getRegistryEnvName('company-private');
91
+ * // Returns: 'COMPANY_PRIVATE'
92
+ * ```
93
+ */
94
+ private getRegistryEnvName;
95
+ /**
96
+ * Gets the default registry URL from craftdesk.json
97
+ *
98
+ * @returns The default registry URL, or null if not configured
99
+ */
100
+ getDefaultRegistry(): Promise<string | null>;
101
+ /**
102
+ * Resolves a registry identifier to a full URL
103
+ *
104
+ * Handles three cases:
105
+ * 1. Full URL (http:// or https://) - returned as-is
106
+ * 2. Registry name - looked up in craftdesk.json registries section
107
+ * 3. Hostname - prefixed with https://
108
+ *
109
+ * @param registry - A URL, registry name, or hostname
110
+ * @returns The resolved registry URL
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * // Full URL - returned as-is
115
+ * await configManager.resolveRegistryUrl('https://my-registry.com');
116
+ * // Returns: 'https://my-registry.com'
55
117
  *
56
- * // Usage in shell:
57
- * // export CRAFTDESK_AUTH_COMPANY_PRIVATE=token_abc123
118
+ * // Registry name from craftdesk.json
119
+ * await configManager.resolveRegistryUrl('company-private');
120
+ * // Returns: 'https://company.internal' (from craftdesk.json)
121
+ *
122
+ * // Hostname - prefixed with https://
123
+ * await configManager.resolveRegistryUrl('my-registry.com');
124
+ * // Returns: 'https://my-registry.com'
58
125
  * ```
59
126
  */
60
- getAuthToken(registryName: string): Promise<string | null>;
127
+ resolveRegistryUrl(registry: string): Promise<string>;
61
128
  /**
62
129
  * Returns the installation path for crafts
63
130
  *
@@ -83,6 +150,57 @@ export declare class ConfigManager {
83
150
  * ```
84
151
  */
85
152
  getCraftDeskJson(): Promise<CraftDeskJson | null>;
153
+ /**
154
+ * Gets the path to the global config file
155
+ *
156
+ * @returns Path to ~/.craftdesk/config.json
157
+ */
158
+ getGlobalConfigPath(): string;
159
+ /**
160
+ * Loads the global configuration from ~/.craftdesk/config.json
161
+ *
162
+ * Returns an empty config if the file doesn't exist
163
+ *
164
+ * @returns The global configuration object
165
+ */
166
+ loadGlobalConfig(): Promise<GlobalConfig>;
167
+ /**
168
+ * Saves the global configuration to ~/.craftdesk/config.json
169
+ *
170
+ * Creates the .craftdesk directory if it doesn't exist
171
+ *
172
+ * @param config - The global configuration to save
173
+ */
174
+ saveGlobalConfig(config: GlobalConfig): Promise<void>;
175
+ /**
176
+ * Sets the authentication token for a registry
177
+ * Saves the token and username to the global config file
178
+ *
179
+ * @param registryUrl - The URL of the registry
180
+ * @param token - The API token to store
181
+ * @param username - The username associated with the token
182
+ */
183
+ setAuthToken(registryUrl: string, token: string, username: string): Promise<void>;
184
+ /**
185
+ * Removes the authentication token for a registry
186
+ *
187
+ * @param registryUrl - The URL of the registry to remove auth for
188
+ * @returns true if a token was removed, false if no token existed
189
+ */
190
+ removeAuthToken(registryUrl: string): Promise<boolean>;
191
+ /**
192
+ * Gets the stored username for a registry
193
+ *
194
+ * @param registryUrl - The URL of the registry
195
+ * @returns The username if found, null otherwise
196
+ */
197
+ getStoredUsername(registryUrl: string): Promise<string | null>;
198
+ /**
199
+ * Clears the cached global config
200
+ * Useful for testing or after external modifications
201
+ */
202
+ clearGlobalConfigCache(): void;
86
203
  }
87
204
  export declare const configManager: ConfigManager;
205
+ export {};
88
206
  //# sourceMappingURL=config-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA8B;IAEnD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B7D;;;;;;;;;;;;;;;;;;;OAmBG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAahE;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAKxB;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAcxD;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/services/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;GAGG;AACH,UAAU,YAAY;IACpB,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;SACd,CAAC;KACH,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B7D;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY/D;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKlD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB3D;;;;;;OAMG;IACH,cAAc,IAAI,MAAM;IAKxB;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmBvD;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;IAK7B;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAgB/C;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D;;;;;;;OAOG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvF;;;;;OAKG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5D;;;;;OAKG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKpE;;;OAGG;IACH,sBAAsB,IAAI,IAAI;CAG/B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}