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.
- package/CHANGELOG.md +57 -0
- package/README.md +943 -46
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +302 -6
- 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 +8 -2
- 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 +51 -10
- 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 +34 -3
- 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 +29 -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 -19
- 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 -373
- 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,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
|
|
43
|
-
logger_1.logger.log(' craftdesk
|
|
44
|
-
logger_1.logger.log(' craftdesk
|
|
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;
|
|
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
|
|
55
|
+
* Retrieves authentication token for a registry
|
|
42
56
|
*
|
|
43
|
-
*
|
|
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
|
-
*
|
|
61
|
+
* Environment variables take precedence to allow CI/CD overrides.
|
|
47
62
|
*
|
|
48
|
-
* @param
|
|
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
|
-
* //
|
|
54
|
-
* const token = await configManager.getAuthToken('
|
|
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
|
-
* //
|
|
57
|
-
*
|
|
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
|
-
|
|
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":"
|
|
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"}
|