craftdesk 0.2.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.
- package/CHANGELOG.md +57 -0
- package/README.md +968 -92
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +303 -7
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +72 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +198 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +52 -11
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +369 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +189 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +35 -10
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/installer.d.ts +51 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +245 -14
- package/dist/services/installer.js.map +1 -1
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +182 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +63 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -17
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -370
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -29
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContinueConverter = void 0;
|
|
4
|
+
const base_converter_1 = require("./base-converter");
|
|
5
|
+
/**
|
|
6
|
+
* Converts CraftDesk crafts to Continue.dev prompt format
|
|
7
|
+
* https://docs.continue.dev/customize/deep-dives/prompts
|
|
8
|
+
*/
|
|
9
|
+
class ContinueConverter extends base_converter_1.BaseConverter {
|
|
10
|
+
/**
|
|
11
|
+
* Get converter metadata
|
|
12
|
+
*
|
|
13
|
+
* @returns Converter metadata
|
|
14
|
+
*/
|
|
15
|
+
getMetadata() {
|
|
16
|
+
return {
|
|
17
|
+
name: 'Continue Converter',
|
|
18
|
+
targetFormat: 'continue',
|
|
19
|
+
description: 'Converts crafts to Continue.dev prompt format in .continue/prompts/',
|
|
20
|
+
defaultOutputDir: '.continue/prompts',
|
|
21
|
+
supportedTypes: ['skill', 'agent', 'command']
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert craft to Continue.dev format
|
|
26
|
+
*
|
|
27
|
+
* @param craft - Craft content to convert
|
|
28
|
+
* @returns Array of converted files (prompt + rule)
|
|
29
|
+
*/
|
|
30
|
+
async convert(craft) {
|
|
31
|
+
const files = [];
|
|
32
|
+
// Extract sections
|
|
33
|
+
const sections = this.extractAllSections(craft.mainContent);
|
|
34
|
+
// Convert to Continue prompt format
|
|
35
|
+
const promptContent = this.buildContinuePrompt(craft, sections);
|
|
36
|
+
// Create the prompt file
|
|
37
|
+
const fileName = `${craft.name}.md`;
|
|
38
|
+
files.push({
|
|
39
|
+
filePath: fileName,
|
|
40
|
+
content: promptContent,
|
|
41
|
+
type: 'prompt'
|
|
42
|
+
});
|
|
43
|
+
// Also create a rule file if applicable
|
|
44
|
+
if (craft.type === 'skill') {
|
|
45
|
+
const ruleContent = this.buildContinueRule(craft, sections);
|
|
46
|
+
files.push({
|
|
47
|
+
filePath: `${craft.name}-rules.md`,
|
|
48
|
+
content: ruleContent,
|
|
49
|
+
type: 'rule'
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return files;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build Continue.dev prompt file content
|
|
56
|
+
*
|
|
57
|
+
* @param craft - Craft content
|
|
58
|
+
* @param sections - Parsed markdown sections
|
|
59
|
+
* @returns Formatted Continue prompt file content
|
|
60
|
+
*/
|
|
61
|
+
buildContinuePrompt(craft, sections) {
|
|
62
|
+
const lines = [];
|
|
63
|
+
// YAML frontmatter
|
|
64
|
+
lines.push('---');
|
|
65
|
+
lines.push(`name: ${this.formatName(craft.name)}`);
|
|
66
|
+
lines.push(`description: ${craft.description || `Provides guidance for ${craft.name}`}`);
|
|
67
|
+
lines.push('invokable: true');
|
|
68
|
+
lines.push('---');
|
|
69
|
+
lines.push('');
|
|
70
|
+
// Main prompt content
|
|
71
|
+
lines.push(`# ${this.formatTitle(craft.name)}`);
|
|
72
|
+
lines.push('');
|
|
73
|
+
// Context
|
|
74
|
+
if (sections['instructions']) {
|
|
75
|
+
lines.push('## Context');
|
|
76
|
+
lines.push('');
|
|
77
|
+
lines.push(sections['instructions']);
|
|
78
|
+
lines.push('');
|
|
79
|
+
}
|
|
80
|
+
// User's request
|
|
81
|
+
lines.push('## Your Task');
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push('Based on the following user input:');
|
|
84
|
+
lines.push('');
|
|
85
|
+
lines.push('{{{ input }}}');
|
|
86
|
+
lines.push('');
|
|
87
|
+
// Quick Start Template
|
|
88
|
+
const quickStart = sections['quick-start-template'] || sections['quick-start'];
|
|
89
|
+
if (quickStart) {
|
|
90
|
+
lines.push('## Quick Start Template');
|
|
91
|
+
lines.push('');
|
|
92
|
+
lines.push('If the user is starting a new project, use this template:');
|
|
93
|
+
lines.push('');
|
|
94
|
+
lines.push(quickStart);
|
|
95
|
+
lines.push('');
|
|
96
|
+
}
|
|
97
|
+
// Common Workflows
|
|
98
|
+
const workflows = sections['common-workflows'] || sections['workflows'];
|
|
99
|
+
if (workflows) {
|
|
100
|
+
lines.push('## Step-by-Step Workflows');
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push(workflows);
|
|
103
|
+
lines.push('');
|
|
104
|
+
}
|
|
105
|
+
// Code Patterns
|
|
106
|
+
const patterns = sections['common-patterns'] || sections['patterns'];
|
|
107
|
+
if (patterns) {
|
|
108
|
+
lines.push('## Code Patterns to Follow');
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push(patterns);
|
|
111
|
+
lines.push('');
|
|
112
|
+
}
|
|
113
|
+
// Examples
|
|
114
|
+
const examples = sections['quick-reference'] || sections['examples'];
|
|
115
|
+
if (examples) {
|
|
116
|
+
lines.push('## Examples');
|
|
117
|
+
lines.push('');
|
|
118
|
+
lines.push(examples);
|
|
119
|
+
lines.push('');
|
|
120
|
+
}
|
|
121
|
+
// Best Practices
|
|
122
|
+
const bestPractices = this.extractBestPractices(sections);
|
|
123
|
+
if (bestPractices.length > 0) {
|
|
124
|
+
lines.push('## Best Practices');
|
|
125
|
+
lines.push('');
|
|
126
|
+
lines.push('Make sure to follow these best practices:');
|
|
127
|
+
lines.push('');
|
|
128
|
+
bestPractices.forEach((practice, index) => {
|
|
129
|
+
lines.push(`${index + 1}. ${practice}`);
|
|
130
|
+
});
|
|
131
|
+
lines.push('');
|
|
132
|
+
}
|
|
133
|
+
// Pitfalls to avoid
|
|
134
|
+
const pitfalls = this.extractPitfalls(sections);
|
|
135
|
+
if (pitfalls.length > 0) {
|
|
136
|
+
lines.push('## Common Mistakes to Avoid');
|
|
137
|
+
lines.push('');
|
|
138
|
+
pitfalls.forEach(({ mistake, solution }) => {
|
|
139
|
+
lines.push(`❌ **Avoid**: ${mistake}`);
|
|
140
|
+
lines.push(`✅ **Instead**: ${solution}`);
|
|
141
|
+
lines.push('');
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Instructions for AI
|
|
145
|
+
lines.push('## Instructions');
|
|
146
|
+
lines.push('');
|
|
147
|
+
lines.push('Please help the user with their task by:');
|
|
148
|
+
lines.push('');
|
|
149
|
+
lines.push('1. Understanding their specific requirements from the input above');
|
|
150
|
+
lines.push('2. Following the patterns and best practices outlined in this guide');
|
|
151
|
+
lines.push('3. Avoiding the common mistakes listed');
|
|
152
|
+
lines.push('4. Providing clear, working code examples');
|
|
153
|
+
lines.push('5. Explaining your reasoning when making architectural decisions');
|
|
154
|
+
lines.push('');
|
|
155
|
+
// Current file context
|
|
156
|
+
lines.push('## Current Context');
|
|
157
|
+
lines.push('');
|
|
158
|
+
lines.push('Current file being edited:');
|
|
159
|
+
lines.push('```');
|
|
160
|
+
lines.push('{{{ currentFile }}}');
|
|
161
|
+
lines.push('```');
|
|
162
|
+
lines.push('');
|
|
163
|
+
return lines.join('\n');
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Build Continue.dev rule file content
|
|
167
|
+
* Rules are applied automatically, prompts are invoked manually
|
|
168
|
+
*
|
|
169
|
+
* @param craft - Craft content
|
|
170
|
+
* @param sections - Parsed markdown sections
|
|
171
|
+
* @returns Formatted Continue rule file content
|
|
172
|
+
*/
|
|
173
|
+
buildContinueRule(craft, sections) {
|
|
174
|
+
const lines = [];
|
|
175
|
+
// YAML frontmatter (rules don't have invokable)
|
|
176
|
+
lines.push('---');
|
|
177
|
+
lines.push(`name: ${this.formatName(craft.name)} Rules`);
|
|
178
|
+
lines.push(`description: Automatic rules for ${craft.name}`);
|
|
179
|
+
lines.push('---');
|
|
180
|
+
lines.push('');
|
|
181
|
+
// Title
|
|
182
|
+
lines.push(`# ${this.formatTitle(craft.name)} - Automatic Rules`);
|
|
183
|
+
lines.push('');
|
|
184
|
+
lines.push('These rules are automatically applied when working with relevant files.');
|
|
185
|
+
lines.push('');
|
|
186
|
+
// Code Patterns
|
|
187
|
+
const patterns = sections['common-patterns'] || sections['patterns'];
|
|
188
|
+
if (patterns) {
|
|
189
|
+
lines.push('## Code Patterns');
|
|
190
|
+
lines.push('');
|
|
191
|
+
lines.push('Always follow these patterns:');
|
|
192
|
+
lines.push('');
|
|
193
|
+
lines.push(patterns);
|
|
194
|
+
lines.push('');
|
|
195
|
+
}
|
|
196
|
+
// Best Practices
|
|
197
|
+
const bestPractices = this.extractBestPractices(sections);
|
|
198
|
+
if (bestPractices.length > 0) {
|
|
199
|
+
lines.push('## Best Practices');
|
|
200
|
+
lines.push('');
|
|
201
|
+
bestPractices.forEach(practice => {
|
|
202
|
+
lines.push(`- ${practice}`);
|
|
203
|
+
});
|
|
204
|
+
lines.push('');
|
|
205
|
+
}
|
|
206
|
+
// Pitfalls
|
|
207
|
+
const pitfalls = this.extractPitfalls(sections);
|
|
208
|
+
if (pitfalls.length > 0) {
|
|
209
|
+
lines.push('## Avoid These Mistakes');
|
|
210
|
+
lines.push('');
|
|
211
|
+
pitfalls.forEach(({ mistake, solution }) => {
|
|
212
|
+
lines.push(`- ❌ ${mistake}`);
|
|
213
|
+
lines.push(`- ✅ ${solution}`);
|
|
214
|
+
lines.push('');
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return lines.join('\n');
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Format craft name for Continue (camelCase for name field)
|
|
221
|
+
*
|
|
222
|
+
* @param name - Craft name in kebab-case
|
|
223
|
+
* @returns Formatted name in camelCase
|
|
224
|
+
*/
|
|
225
|
+
formatName(name) {
|
|
226
|
+
const parts = name.split('-');
|
|
227
|
+
return parts[0] + parts.slice(1).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('');
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Format craft name into readable title
|
|
231
|
+
*
|
|
232
|
+
* @param name - Craft name in kebab-case
|
|
233
|
+
* @returns Formatted title with capitalized words
|
|
234
|
+
*/
|
|
235
|
+
formatTitle(name) {
|
|
236
|
+
return name
|
|
237
|
+
.split('-')
|
|
238
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
239
|
+
.join(' ');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.ContinueConverter = ContinueConverter;
|
|
243
|
+
//# sourceMappingURL=continue-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-converter.js","sourceRoot":"","sources":["../../src/converters/continue-converter.ts"],"names":[],"mappings":";;;AAAA,qDAAiD;AAGjD;;;GAGG;AACH,MAAa,iBAAkB,SAAQ,8BAAa;IAClD;;;;OAIG;IACH,WAAW;QACT,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,YAAY,EAAE,UAAU;YACxB,WAAW,EAAE,qEAAqE;YAClF,gBAAgB,EAAE,mBAAmB;YACrC,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,KAAmB;QAC/B,MAAM,KAAK,GAAuB,EAAE,CAAC;QAErC,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE5D,oCAAoC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEhE,yBAAyB;QACzB,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,WAAW;gBAClC,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACK,mBAAmB,CAAC,KAAmB,EAAE,QAAgC;QAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,mBAAmB;QACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,WAAW,IAAI,yBAAyB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,sBAAsB;QACtB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,UAAU;QACV,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,uBAAuB;QACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,sBAAsB,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC/E,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,mBAAmB;QACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,gBAAgB;QAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACxC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,uBAAuB;QACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,KAAmB,EAAE,QAAgC;QAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,gDAAgD;QAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,oCAAoC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,QAAQ;QACR,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,gBAAgB;QAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,WAAW;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,IAAY;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI;aACR,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;CACF;AArQD,8CAqQC"}
|
|
@@ -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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"}
|