craftdesk 0.3.0 → 0.5.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 (215) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +1609 -132
  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 +306 -8
  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/detect-agents.d.ts +14 -0
  12. package/dist/commands/detect-agents.d.ts.map +1 -0
  13. package/dist/commands/detect-agents.js +86 -0
  14. package/dist/commands/detect-agents.js.map +1 -0
  15. package/dist/commands/embed.d.ts +14 -0
  16. package/dist/commands/embed.d.ts.map +1 -0
  17. package/dist/commands/embed.js +147 -0
  18. package/dist/commands/embed.js.map +1 -0
  19. package/dist/commands/info.d.ts +8 -0
  20. package/dist/commands/info.d.ts.map +1 -0
  21. package/dist/commands/info.js +66 -0
  22. package/dist/commands/info.js.map +1 -0
  23. package/dist/commands/init.d.ts +5 -0
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +8 -2
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/install.d.ts +5 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +24 -4
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/list.d.ts +5 -0
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +75 -7
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/login.d.ts +8 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +158 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/logout.d.ts +8 -0
  40. package/dist/commands/logout.d.ts.map +1 -0
  41. package/dist/commands/logout.js +51 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/outdated.d.ts +23 -0
  44. package/dist/commands/outdated.d.ts.map +1 -0
  45. package/dist/commands/outdated.js +268 -0
  46. package/dist/commands/outdated.js.map +1 -0
  47. package/dist/commands/publish.d.ts +8 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +203 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/remove.d.ts +5 -0
  52. package/dist/commands/remove.d.ts.map +1 -1
  53. package/dist/commands/remove.js +51 -10
  54. package/dist/commands/remove.js.map +1 -1
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.d.ts.map +1 -0
  57. package/dist/commands/search.js +60 -0
  58. package/dist/commands/search.js.map +1 -0
  59. package/dist/commands/setup-multi-agent.d.ts +17 -0
  60. package/dist/commands/setup-multi-agent.d.ts.map +1 -0
  61. package/dist/commands/setup-multi-agent.js +188 -0
  62. package/dist/commands/setup-multi-agent.js.map +1 -0
  63. package/dist/commands/sync.d.ts +14 -0
  64. package/dist/commands/sync.d.ts.map +1 -0
  65. package/dist/commands/sync.js +144 -0
  66. package/dist/commands/sync.js.map +1 -0
  67. package/dist/commands/unembed.d.ts +14 -0
  68. package/dist/commands/unembed.d.ts.map +1 -0
  69. package/dist/commands/unembed.js +96 -0
  70. package/dist/commands/unembed.js.map +1 -0
  71. package/dist/commands/update.d.ts +8 -0
  72. package/dist/commands/update.d.ts.map +1 -0
  73. package/dist/commands/update.js +372 -0
  74. package/dist/commands/update.js.map +1 -0
  75. package/dist/commands/verify.d.ts +14 -0
  76. package/dist/commands/verify.d.ts.map +1 -0
  77. package/dist/commands/verify.js +143 -0
  78. package/dist/commands/verify.js.map +1 -0
  79. package/dist/commands/whoami.d.ts +8 -0
  80. package/dist/commands/whoami.d.ts.map +1 -0
  81. package/dist/commands/whoami.js +58 -0
  82. package/dist/commands/whoami.js.map +1 -0
  83. package/dist/converters/base-converter.d.ts +89 -0
  84. package/dist/converters/base-converter.d.ts.map +1 -0
  85. package/dist/converters/base-converter.js +249 -0
  86. package/dist/converters/base-converter.js.map +1 -0
  87. package/dist/converters/continue-converter.d.ts +53 -0
  88. package/dist/converters/continue-converter.d.ts.map +1 -0
  89. package/dist/converters/continue-converter.js +243 -0
  90. package/dist/converters/continue-converter.js.map +1 -0
  91. package/dist/converters/cursor-converter.d.ts +70 -0
  92. package/dist/converters/cursor-converter.d.ts.map +1 -0
  93. package/dist/converters/cursor-converter.js +272 -0
  94. package/dist/converters/cursor-converter.js.map +1 -0
  95. package/dist/index.js +56 -3
  96. package/dist/index.js.map +1 -1
  97. package/dist/services/agent-detector.d.ts +57 -0
  98. package/dist/services/agent-detector.d.ts.map +1 -0
  99. package/dist/services/agent-detector.js +146 -0
  100. package/dist/services/agent-detector.js.map +1 -0
  101. package/dist/services/config-manager.d.ts +128 -10
  102. package/dist/services/config-manager.d.ts.map +1 -1
  103. package/dist/services/config-manager.js +190 -18
  104. package/dist/services/config-manager.js.map +1 -1
  105. package/dist/services/converter.d.ts +53 -0
  106. package/dist/services/converter.d.ts.map +1 -0
  107. package/dist/services/converter.js +185 -0
  108. package/dist/services/converter.js.map +1 -0
  109. package/dist/services/craft-wrapper.d.ts +108 -0
  110. package/dist/services/craft-wrapper.d.ts.map +1 -0
  111. package/dist/services/craft-wrapper.js +268 -0
  112. package/dist/services/craft-wrapper.js.map +1 -0
  113. package/dist/services/git-resolver.d.ts +9 -3
  114. package/dist/services/git-resolver.d.ts.map +1 -1
  115. package/dist/services/git-resolver.js +44 -20
  116. package/dist/services/git-resolver.js.map +1 -1
  117. package/dist/services/gitignore-manager.d.ts +74 -0
  118. package/dist/services/gitignore-manager.d.ts.map +1 -0
  119. package/dist/services/gitignore-manager.js +188 -0
  120. package/dist/services/gitignore-manager.js.map +1 -0
  121. package/dist/services/installer.d.ts +60 -1
  122. package/dist/services/installer.d.ts.map +1 -1
  123. package/dist/services/installer.js +295 -20
  124. package/dist/services/installer.js.map +1 -1
  125. package/dist/services/multi-agent-sync.d.ts +88 -0
  126. package/dist/services/multi-agent-sync.d.ts.map +1 -0
  127. package/dist/services/multi-agent-sync.js +316 -0
  128. package/dist/services/multi-agent-sync.js.map +1 -0
  129. package/dist/services/plugin-resolver.d.ts +80 -0
  130. package/dist/services/plugin-resolver.d.ts.map +1 -0
  131. package/dist/services/plugin-resolver.js +183 -0
  132. package/dist/services/plugin-resolver.js.map +1 -0
  133. package/dist/services/registry-client.d.ts +132 -5
  134. package/dist/services/registry-client.d.ts.map +1 -1
  135. package/dist/services/registry-client.js +239 -34
  136. package/dist/services/registry-client.js.map +1 -1
  137. package/dist/services/settings-manager.d.ts +151 -0
  138. package/dist/services/settings-manager.d.ts.map +1 -0
  139. package/dist/services/settings-manager.js +333 -0
  140. package/dist/services/settings-manager.js.map +1 -0
  141. package/dist/types/claude-settings.d.ts +155 -0
  142. package/dist/types/claude-settings.d.ts.map +1 -0
  143. package/dist/types/claude-settings.js +20 -0
  144. package/dist/types/claude-settings.js.map +1 -0
  145. package/dist/types/converter.d.ts +98 -0
  146. package/dist/types/converter.d.ts.map +1 -0
  147. package/dist/types/converter.js +6 -0
  148. package/dist/types/converter.js.map +1 -0
  149. package/dist/types/craftdesk-json.d.ts +76 -3
  150. package/dist/types/craftdesk-json.d.ts.map +1 -1
  151. package/dist/types/craftdesk-lock.d.ts +62 -1
  152. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  153. package/dist/types/multi-agent.d.ts +85 -0
  154. package/dist/types/multi-agent.d.ts.map +1 -0
  155. package/dist/types/multi-agent.js +6 -0
  156. package/dist/types/multi-agent.js.map +1 -0
  157. package/dist/utils/crypto.d.ts +23 -0
  158. package/dist/utils/crypto.d.ts.map +1 -0
  159. package/dist/utils/crypto.js +52 -0
  160. package/dist/utils/crypto.js.map +1 -0
  161. package/dist/utils/file-system.d.ts +43 -0
  162. package/dist/utils/file-system.d.ts.map +1 -1
  163. package/dist/utils/file-system.js +45 -2
  164. package/dist/utils/file-system.js.map +1 -1
  165. package/dist/utils/logger.d.ts +75 -0
  166. package/dist/utils/logger.d.ts.map +1 -1
  167. package/dist/utils/logger.js +76 -1
  168. package/dist/utils/logger.js.map +1 -1
  169. package/dist/utils/version-utils.d.ts +63 -0
  170. package/dist/utils/version-utils.d.ts.map +1 -0
  171. package/dist/utils/version-utils.js +130 -0
  172. package/dist/utils/version-utils.js.map +1 -0
  173. package/package.json +36 -9
  174. package/.claude/settings.local.json +0 -19
  175. package/.github/workflows/ci.yml +0 -94
  176. package/API.md +0 -414
  177. package/TESTING.md +0 -263
  178. package/dist/commands/config.d.ts +0 -3
  179. package/dist/commands/config.d.ts.map +0 -1
  180. package/dist/commands/config.js +0 -56
  181. package/dist/commands/config.js.map +0 -1
  182. package/dist/types/config.d.ts +0 -17
  183. package/dist/types/config.d.ts.map +0 -1
  184. package/dist/types/config.js +0 -3
  185. package/dist/types/config.js.map +0 -1
  186. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  187. package/examples/craftdesk-all-sources.json +0 -79
  188. package/examples/craftdesk-git-monorepo.json +0 -41
  189. package/examples/craftdesk-multi-registry.json +0 -40
  190. package/examples/craftdesk-with-registries.json +0 -49
  191. package/examples/simple-craftdesk.json +0 -10
  192. package/src/commands/add.ts +0 -314
  193. package/src/commands/init.ts +0 -55
  194. package/src/commands/install.ts +0 -126
  195. package/src/commands/list.ts +0 -126
  196. package/src/commands/remove.ts +0 -82
  197. package/src/index.ts +0 -56
  198. package/src/services/config-manager.ts +0 -150
  199. package/src/services/git-resolver.ts +0 -373
  200. package/src/services/installer.ts +0 -314
  201. package/src/services/registry-client.ts +0 -163
  202. package/src/types/craftdesk-json.ts +0 -53
  203. package/src/types/craftdesk-lock.ts +0 -38
  204. package/src/utils/file-system.ts +0 -55
  205. package/src/utils/logger.ts +0 -82
  206. package/tests/fixtures/craftdesk-git.json +0 -17
  207. package/tests/fixtures/craftdesk.json +0 -15
  208. package/tests/helpers/test-utils.ts +0 -60
  209. package/tests/integration/init-command.test.ts +0 -70
  210. package/tests/integration/list-command.test.ts +0 -77
  211. package/tests/unit/config-manager.test.ts +0 -228
  212. package/tests/unit/git-resolver.test.ts +0 -303
  213. package/tests/unit/installer.test.ts +0 -105
  214. package/tsconfig.json +0 -20
  215. 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,21 @@ 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");
19
+ const detect_agents_1 = require("./commands/detect-agents");
20
+ const sync_1 = require("./commands/sync");
21
+ const verify_1 = require("./commands/verify");
22
+ const setup_multi_agent_1 = require("./commands/setup-multi-agent");
23
+ const embed_1 = require("./commands/embed");
24
+ const unembed_1 = require("./commands/unembed");
10
25
  const logger_1 = require("./utils/logger");
11
26
  const program = new commander_1.Command();
12
27
  program
@@ -22,6 +37,21 @@ program.addCommand((0, install_1.createInstallCommand)());
22
37
  program.addCommand((0, add_1.createAddCommand)());
23
38
  program.addCommand((0, remove_1.createRemoveCommand)());
24
39
  program.addCommand((0, list_1.createListCommand)());
40
+ program.addCommand((0, search_1.createSearchCommand)());
41
+ program.addCommand((0, info_1.createInfoCommand)());
42
+ program.addCommand((0, outdated_1.createOutdatedCommand)());
43
+ program.addCommand((0, update_1.createUpdateCommand)());
44
+ program.addCommand((0, publish_1.createPublishCommand)());
45
+ program.addCommand((0, login_1.createLoginCommand)());
46
+ program.addCommand((0, logout_1.createLogoutCommand)());
47
+ program.addCommand((0, whoami_1.createWhoamiCommand)());
48
+ program.addCommand((0, convert_1.createConvertCommand)());
49
+ program.addCommand((0, detect_agents_1.createDetectAgentsCommand)());
50
+ program.addCommand((0, sync_1.createSyncCommand)());
51
+ program.addCommand((0, verify_1.createVerifyCommand)());
52
+ program.addCommand((0, setup_multi_agent_1.createSetupMultiAgentCommand)());
53
+ program.addCommand((0, embed_1.createEmbedCommand)());
54
+ program.addCommand((0, unembed_1.createUnembedCommand)());
25
55
  // Add aliases
26
56
  program.command('i', { hidden: true }).action(() => {
27
57
  program.parse(['', '', 'install', ...process.argv.slice(3)]);
@@ -39,9 +69,32 @@ if (process.argv.length === 2) {
39
69
  logger_1.logger.log('Dependency management for AI capabilities');
40
70
  logger_1.logger.log('');
41
71
  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');
72
+ logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
73
+ logger_1.logger.log(' craftdesk search <q> Search for crafts in registry');
74
+ logger_1.logger.log(' craftdesk info <name> Show craft information');
75
+ logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
76
+ logger_1.logger.log(' craftdesk install Install all dependencies');
77
+ logger_1.logger.log(' craftdesk outdated Check for newer versions');
78
+ logger_1.logger.log(' craftdesk update Update crafts to newer versions');
79
+ logger_1.logger.log(' craftdesk publish Publish a craft to the registry');
80
+ logger_1.logger.log('');
81
+ logger_1.logger.log('Format Conversion:');
82
+ logger_1.logger.log(' craftdesk convert Convert crafts to other AI editor formats');
83
+ logger_1.logger.log('');
84
+ logger_1.logger.log('Multi-Agent Sync:');
85
+ logger_1.logger.log(' craftdesk setup-multi-agent Configure multi-agent sync');
86
+ logger_1.logger.log(' craftdesk detect-agents Detect AI coding assistants');
87
+ logger_1.logger.log(' craftdesk sync Sync crafts across agents');
88
+ logger_1.logger.log(' craftdesk verify Verify sync status');
89
+ logger_1.logger.log('');
90
+ logger_1.logger.log('Embedded Skills:');
91
+ logger_1.logger.log(' craftdesk embed <name> Register a local/embedded skill');
92
+ logger_1.logger.log(' craftdesk unembed <name> Unregister an embedded skill');
93
+ logger_1.logger.log('');
94
+ logger_1.logger.log('Authentication:');
95
+ logger_1.logger.log(' craftdesk login Authenticate with a registry');
96
+ logger_1.logger.log(' craftdesk logout Remove authentication');
97
+ logger_1.logger.log(' craftdesk whoami Show logged in user');
45
98
  logger_1.logger.log('');
46
99
  logger_1.logger.log('Run "craftdesk --help" for full command list');
47
100
  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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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Agent Detector - Auto-detect AI coding assistants
3
+ *
4
+ * Detects which AI coding assistants are in use by checking for
5
+ * their configuration directories (.claude/, .cursor/, etc.)
6
+ */
7
+ import type { AgentConfig, AgentDetectionResult } from '../types/multi-agent';
8
+ /**
9
+ * Service for detecting AI coding assistants
10
+ */
11
+ export declare class AgentDetector {
12
+ /**
13
+ * Detect which AI coding assistants are in use
14
+ *
15
+ * @param cwd - Current working directory (defaults to process.cwd())
16
+ * @returns Detection result with detected, enabled, and suggested agents
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const detector = new AgentDetector();
21
+ * const result = await detector.detectAgents();
22
+ *
23
+ * console.log(`Found ${result.detected.length} agents`);
24
+ * console.log(`Enabled: ${result.enabled.map(a => a.displayName).join(', ')}`);
25
+ * ```
26
+ */
27
+ detectAgents(cwd?: string): Promise<AgentDetectionResult>;
28
+ /**
29
+ * Get configuration for a specific agent by name
30
+ *
31
+ * @param agentName - Name of the agent (e.g., 'cursor', 'windsurf')
32
+ * @returns Agent configuration if found, null otherwise
33
+ */
34
+ getAgentConfig(agentName: string): Omit<AgentConfig, 'enabled' | 'detected'> | null;
35
+ /**
36
+ * Check if a directory belongs to a known AI agent
37
+ *
38
+ * @param dirPath - Directory path to check (e.g., '.cursor')
39
+ * @returns Agent name if recognized, null otherwise
40
+ */
41
+ identifyAgentByDirectory(dirPath: string): string | null;
42
+ /**
43
+ * Get all known agent names
44
+ *
45
+ * @returns Array of agent names
46
+ */
47
+ getKnownAgentNames(): string[];
48
+ /**
49
+ * Validate that all configured targets correspond to known agents
50
+ *
51
+ * @param targets - Array of target paths from config
52
+ * @returns Array of unknown/invalid targets
53
+ */
54
+ validateTargets(targets: string[]): string[];
55
+ }
56
+ export declare const agentDetector: AgentDetector;
57
+ //# sourceMappingURL=agent-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detector.d.ts","sourceRoot":"","sources":["../../src/services/agent-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAkC9E;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;;;;;;;;;OAcG;IACG,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA4C9E;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG,IAAI;IAInF;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUxD;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAI7C;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Detector - Auto-detect AI coding assistants
4
+ *
5
+ * Detects which AI coding assistants are in use by checking for
6
+ * their configuration directories (.claude/, .cursor/, etc.)
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.agentDetector = exports.AgentDetector = void 0;
13
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const logger_1 = require("../utils/logger");
16
+ const config_manager_1 = require("./config-manager");
17
+ /**
18
+ * Known AI coding assistants and their directory structures
19
+ */
20
+ const KNOWN_AGENTS = [
21
+ {
22
+ name: 'claude',
23
+ displayName: 'Claude Code',
24
+ skillsDir: '.claude/skills'
25
+ },
26
+ {
27
+ name: 'cursor',
28
+ displayName: 'Cursor',
29
+ skillsDir: '.cursor/skills'
30
+ },
31
+ {
32
+ name: 'windsurf',
33
+ displayName: 'Windsurf',
34
+ skillsDir: '.windsurf/skills'
35
+ },
36
+ {
37
+ name: 'continue',
38
+ displayName: 'Continue.dev',
39
+ skillsDir: '.continue/skills'
40
+ },
41
+ {
42
+ name: 'agents',
43
+ displayName: 'Generic .agents',
44
+ skillsDir: '.agents/skills'
45
+ }
46
+ ];
47
+ /**
48
+ * Service for detecting AI coding assistants
49
+ */
50
+ class AgentDetector {
51
+ /**
52
+ * Detect which AI coding assistants are in use
53
+ *
54
+ * @param cwd - Current working directory (defaults to process.cwd())
55
+ * @returns Detection result with detected, enabled, and suggested agents
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const detector = new AgentDetector();
60
+ * const result = await detector.detectAgents();
61
+ *
62
+ * console.log(`Found ${result.detected.length} agents`);
63
+ * console.log(`Enabled: ${result.enabled.map(a => a.displayName).join(', ')}`);
64
+ * ```
65
+ */
66
+ async detectAgents(cwd = process.cwd()) {
67
+ const detected = [];
68
+ const config = await config_manager_1.configManager.getCraftDeskJson();
69
+ const enabledTargets = config?.multiAgent?.targets || [];
70
+ // Check each known agent
71
+ for (const agent of KNOWN_AGENTS) {
72
+ const agentDir = path_1.default.dirname(agent.skillsDir);
73
+ const fullPath = path_1.default.join(cwd, agentDir);
74
+ // Check if agent directory exists
75
+ const exists = await fs_extra_1.default.pathExists(fullPath);
76
+ if (exists) {
77
+ const isEnabled = enabledTargets.includes(agent.skillsDir);
78
+ detected.push({
79
+ ...agent,
80
+ enabled: isEnabled,
81
+ detected: true
82
+ });
83
+ logger_1.logger.debug(`Detected ${agent.displayName} at ${agentDir}`);
84
+ }
85
+ }
86
+ // Always ensure Claude is in the list (canonical for CraftDesk)
87
+ const claudeExists = detected.some(a => a.name === 'claude');
88
+ if (!claudeExists) {
89
+ detected.push({
90
+ name: 'claude',
91
+ displayName: 'Claude Code',
92
+ skillsDir: '.claude/skills',
93
+ enabled: true, // Always enabled as canonical
94
+ detected: false
95
+ });
96
+ }
97
+ const enabled = detected.filter(a => a.enabled);
98
+ const suggested = detected.filter(a => !a.enabled && a.detected);
99
+ return { detected, enabled, suggested };
100
+ }
101
+ /**
102
+ * Get configuration for a specific agent by name
103
+ *
104
+ * @param agentName - Name of the agent (e.g., 'cursor', 'windsurf')
105
+ * @returns Agent configuration if found, null otherwise
106
+ */
107
+ getAgentConfig(agentName) {
108
+ return KNOWN_AGENTS.find(a => a.name === agentName) || null;
109
+ }
110
+ /**
111
+ * Check if a directory belongs to a known AI agent
112
+ *
113
+ * @param dirPath - Directory path to check (e.g., '.cursor')
114
+ * @returns Agent name if recognized, null otherwise
115
+ */
116
+ identifyAgentByDirectory(dirPath) {
117
+ const normalized = dirPath.replace(/^\.\//, '').replace(/\/$/, '');
118
+ const agent = KNOWN_AGENTS.find(a => {
119
+ const agentDir = path_1.default.dirname(a.skillsDir);
120
+ return agentDir === normalized || agentDir === `.${normalized}`;
121
+ });
122
+ return agent?.name || null;
123
+ }
124
+ /**
125
+ * Get all known agent names
126
+ *
127
+ * @returns Array of agent names
128
+ */
129
+ getKnownAgentNames() {
130
+ return KNOWN_AGENTS.map(a => a.name);
131
+ }
132
+ /**
133
+ * Validate that all configured targets correspond to known agents
134
+ *
135
+ * @param targets - Array of target paths from config
136
+ * @returns Array of unknown/invalid targets
137
+ */
138
+ validateTargets(targets) {
139
+ const knownDirs = KNOWN_AGENTS.map(a => a.skillsDir);
140
+ return targets.filter(t => !knownDirs.includes(t));
141
+ }
142
+ }
143
+ exports.AgentDetector = AgentDetector;
144
+ // Export singleton instance
145
+ exports.agentDetector = new AgentDetector();
146
+ //# sourceMappingURL=agent-detector.js.map