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.
- package/CHANGELOG.md +88 -0
- package/README.md +1609 -132
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +306 -8
- 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/detect-agents.d.ts +14 -0
- package/dist/commands/detect-agents.d.ts.map +1 -0
- package/dist/commands/detect-agents.js +86 -0
- package/dist/commands/detect-agents.js.map +1 -0
- package/dist/commands/embed.d.ts +14 -0
- package/dist/commands/embed.d.ts.map +1 -0
- package/dist/commands/embed.js +147 -0
- package/dist/commands/embed.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 +75 -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 +203 -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/setup-multi-agent.d.ts +17 -0
- package/dist/commands/setup-multi-agent.d.ts.map +1 -0
- package/dist/commands/setup-multi-agent.js +188 -0
- package/dist/commands/setup-multi-agent.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +144 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/unembed.d.ts +14 -0
- package/dist/commands/unembed.d.ts.map +1 -0
- package/dist/commands/unembed.js +96 -0
- package/dist/commands/unembed.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 +372 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +14 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +143 -0
- package/dist/commands/verify.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 +56 -3
- package/dist/index.js.map +1 -1
- package/dist/services/agent-detector.d.ts +57 -0
- package/dist/services/agent-detector.d.ts.map +1 -0
- package/dist/services/agent-detector.js +146 -0
- package/dist/services/agent-detector.js.map +1 -0
- 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 +190 -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 +44 -20
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/gitignore-manager.d.ts +74 -0
- package/dist/services/gitignore-manager.d.ts.map +1 -0
- package/dist/services/gitignore-manager.js +188 -0
- package/dist/services/gitignore-manager.js.map +1 -0
- package/dist/services/installer.d.ts +60 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +295 -20
- package/dist/services/installer.js.map +1 -1
- package/dist/services/multi-agent-sync.d.ts +88 -0
- package/dist/services/multi-agent-sync.d.ts.map +1 -0
- package/dist/services/multi-agent-sync.js +316 -0
- package/dist/services/multi-agent-sync.js.map +1 -0
- 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 +183 -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 +76 -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/types/multi-agent.d.ts +85 -0
- package/dist/types/multi-agent.d.ts.map +1 -0
- package/dist/types/multi-agent.js +6 -0
- package/dist/types/multi-agent.js.map +1 -0
- 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,89 @@
|
|
|
1
|
+
import type { CraftContent, ConvertedContent, ConversionOptions, ConversionResult, ConverterMetadata } from '../types/converter';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for format converters
|
|
4
|
+
* Provides common functionality for converting CraftDesk crafts to other formats
|
|
5
|
+
*/
|
|
6
|
+
export declare abstract class BaseConverter {
|
|
7
|
+
protected options: ConversionOptions;
|
|
8
|
+
constructor(options: ConversionOptions);
|
|
9
|
+
/**
|
|
10
|
+
* Get metadata about this converter
|
|
11
|
+
*/
|
|
12
|
+
abstract getMetadata(): ConverterMetadata;
|
|
13
|
+
/**
|
|
14
|
+
* Convert craft to target format
|
|
15
|
+
* Subclasses must implement this method
|
|
16
|
+
*
|
|
17
|
+
* @param craft - The craft content to convert
|
|
18
|
+
* @returns Array of converted file contents
|
|
19
|
+
*/
|
|
20
|
+
abstract convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Perform the full conversion with validation and error handling
|
|
23
|
+
*
|
|
24
|
+
* @param craft - The craft content to convert
|
|
25
|
+
* @returns Conversion result with success status and any errors
|
|
26
|
+
*/
|
|
27
|
+
convertWithValidation(craft: CraftContent): Promise<ConversionResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Extract code examples from markdown content
|
|
30
|
+
*
|
|
31
|
+
* @param markdown - Markdown content to parse
|
|
32
|
+
* @returns Array of code examples with optional language and description
|
|
33
|
+
*/
|
|
34
|
+
protected extractExamples(markdown: string): Array<{
|
|
35
|
+
language?: string;
|
|
36
|
+
code: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Extract a section from markdown by heading
|
|
41
|
+
*
|
|
42
|
+
* @param markdown - Markdown content to parse
|
|
43
|
+
* @param headingPattern - Regular expression to match section heading
|
|
44
|
+
* @returns Section content or undefined if not found
|
|
45
|
+
*/
|
|
46
|
+
protected extractSection(markdown: string, headingPattern: RegExp): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Extract all sections from markdown
|
|
49
|
+
*
|
|
50
|
+
* @param markdown - Markdown content to parse
|
|
51
|
+
* @returns Record of section names to content
|
|
52
|
+
*/
|
|
53
|
+
protected extractAllSections(markdown: string): Record<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* Clean markdown content by removing certain elements
|
|
56
|
+
*
|
|
57
|
+
* @param markdown - Markdown content to clean
|
|
58
|
+
* @param options - Cleaning options
|
|
59
|
+
* @param options.removeFrontmatter - Whether to remove YAML frontmatter
|
|
60
|
+
* @returns Cleaned markdown content
|
|
61
|
+
*/
|
|
62
|
+
protected cleanMarkdown(markdown: string, options?: {
|
|
63
|
+
removeFrontmatter?: boolean;
|
|
64
|
+
}): string;
|
|
65
|
+
/**
|
|
66
|
+
* Extract best practices from content
|
|
67
|
+
*
|
|
68
|
+
* @param sections - Parsed markdown sections
|
|
69
|
+
* @returns Array of best practice strings
|
|
70
|
+
*/
|
|
71
|
+
protected extractBestPractices(sections: Record<string, string>): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Extract common pitfalls/mistakes from content
|
|
74
|
+
*
|
|
75
|
+
* @param sections - Parsed markdown sections
|
|
76
|
+
* @returns Array of pitfalls with mistake and solution
|
|
77
|
+
*/
|
|
78
|
+
protected extractPitfalls(sections: Record<string, string>): Array<{
|
|
79
|
+
mistake: string;
|
|
80
|
+
solution: string;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Get default output directory for this converter
|
|
84
|
+
*
|
|
85
|
+
* @returns Default output directory path
|
|
86
|
+
*/
|
|
87
|
+
getDefaultOutputDir(): string;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=base-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-converter.d.ts","sourceRoot":"","sources":["../../src/converters/base-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,8BAAsB,aAAa;IACjC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBAEzB,OAAO,EAAE,iBAAiB;IAItC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,iBAAiB;IAEzC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAElE;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmD3E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB7G;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgCtF;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAmDtE;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,MAAM;IAchG;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IAuB1E;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAuBzG;;;;OAIG;IACH,mBAAmB,IAAI,MAAM;CAG9B"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseConverter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base class for format converters
|
|
6
|
+
* Provides common functionality for converting CraftDesk crafts to other formats
|
|
7
|
+
*/
|
|
8
|
+
class BaseConverter {
|
|
9
|
+
options;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Perform the full conversion with validation and error handling
|
|
15
|
+
*
|
|
16
|
+
* @param craft - The craft content to convert
|
|
17
|
+
* @returns Conversion result with success status and any errors
|
|
18
|
+
*/
|
|
19
|
+
async convertWithValidation(craft) {
|
|
20
|
+
const metadata = this.getMetadata();
|
|
21
|
+
const errors = [];
|
|
22
|
+
const warnings = [];
|
|
23
|
+
try {
|
|
24
|
+
// Validate craft type is supported
|
|
25
|
+
if (!metadata.supportedTypes.includes(craft.type)) {
|
|
26
|
+
errors.push(`Craft type '${craft.type}' is not supported for ${metadata.targetFormat} format. ` +
|
|
27
|
+
`Supported types: ${metadata.supportedTypes.join(', ')}`);
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
files: [],
|
|
31
|
+
errors,
|
|
32
|
+
warnings,
|
|
33
|
+
sourceFormat: 'claude',
|
|
34
|
+
targetFormat: metadata.targetFormat
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Perform conversion
|
|
38
|
+
const files = await this.convert(craft);
|
|
39
|
+
// Validate output
|
|
40
|
+
if (files.length === 0) {
|
|
41
|
+
warnings.push('Conversion produced no output files');
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
files,
|
|
46
|
+
errors,
|
|
47
|
+
warnings,
|
|
48
|
+
sourceFormat: 'claude',
|
|
49
|
+
targetFormat: metadata.targetFormat
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
errors.push(`Conversion failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
files: [],
|
|
57
|
+
errors,
|
|
58
|
+
warnings,
|
|
59
|
+
sourceFormat: 'claude',
|
|
60
|
+
targetFormat: metadata.targetFormat
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract code examples from markdown content
|
|
66
|
+
*
|
|
67
|
+
* @param markdown - Markdown content to parse
|
|
68
|
+
* @returns Array of code examples with optional language and description
|
|
69
|
+
*/
|
|
70
|
+
extractExamples(markdown) {
|
|
71
|
+
const examples = [];
|
|
72
|
+
const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g;
|
|
73
|
+
let match;
|
|
74
|
+
while ((match = codeBlockRegex.exec(markdown)) !== null) {
|
|
75
|
+
examples.push({
|
|
76
|
+
language: match[1] || undefined,
|
|
77
|
+
code: match[2].trim(),
|
|
78
|
+
description: undefined
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return examples;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract a section from markdown by heading
|
|
85
|
+
*
|
|
86
|
+
* @param markdown - Markdown content to parse
|
|
87
|
+
* @param headingPattern - Regular expression to match section heading
|
|
88
|
+
* @returns Section content or undefined if not found
|
|
89
|
+
*/
|
|
90
|
+
extractSection(markdown, headingPattern) {
|
|
91
|
+
const lines = markdown.split('\n');
|
|
92
|
+
let inSection = false;
|
|
93
|
+
let sectionLines = [];
|
|
94
|
+
let sectionLevel = null;
|
|
95
|
+
for (const line of lines) {
|
|
96
|
+
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
97
|
+
if (headingMatch) {
|
|
98
|
+
const level = headingMatch[1].length;
|
|
99
|
+
const title = headingMatch[2].trim();
|
|
100
|
+
if (!inSection && headingPattern.test(title)) {
|
|
101
|
+
// Found the target section
|
|
102
|
+
inSection = true;
|
|
103
|
+
sectionLevel = level;
|
|
104
|
+
continue; // Don't include the heading itself
|
|
105
|
+
}
|
|
106
|
+
else if (inSection && sectionLevel !== null && level <= sectionLevel) {
|
|
107
|
+
// Reached a heading at same or higher level - end of section
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (inSection) {
|
|
112
|
+
sectionLines.push(line);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return sectionLines.length > 0 ? sectionLines.join('\n').trim() : undefined;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract all sections from markdown
|
|
119
|
+
*
|
|
120
|
+
* @param markdown - Markdown content to parse
|
|
121
|
+
* @returns Record of section names to content
|
|
122
|
+
*/
|
|
123
|
+
extractAllSections(markdown) {
|
|
124
|
+
const sections = {};
|
|
125
|
+
const lines = markdown.split('\n');
|
|
126
|
+
let currentSection = null;
|
|
127
|
+
let currentLines = [];
|
|
128
|
+
let currentLevel = null;
|
|
129
|
+
// Skip frontmatter if present
|
|
130
|
+
let startIndex = 0;
|
|
131
|
+
if (lines[0] === '---') {
|
|
132
|
+
const endIndex = lines.findIndex((line, i) => i > 0 && line === '---');
|
|
133
|
+
if (endIndex !== -1) {
|
|
134
|
+
startIndex = endIndex + 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (let i = startIndex; i < lines.length; i++) {
|
|
138
|
+
const line = lines[i];
|
|
139
|
+
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
140
|
+
if (headingMatch) {
|
|
141
|
+
const level = headingMatch[1].length;
|
|
142
|
+
const title = headingMatch[2].trim();
|
|
143
|
+
// Save previous section
|
|
144
|
+
if (currentSection && currentLines.length > 0) {
|
|
145
|
+
sections[currentSection] = currentLines.join('\n').trim();
|
|
146
|
+
}
|
|
147
|
+
// Start new section (only for level 2 headings to avoid nesting issues)
|
|
148
|
+
if (level === 2) {
|
|
149
|
+
currentSection = title.toLowerCase().replace(/[^\w\s]/g, '').replace(/\s+/g, '-');
|
|
150
|
+
currentLines = [];
|
|
151
|
+
currentLevel = level;
|
|
152
|
+
}
|
|
153
|
+
else if (currentSection && currentLevel !== null && level > currentLevel) {
|
|
154
|
+
// This is a subsection, include it in current section
|
|
155
|
+
currentLines.push(line);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (currentSection) {
|
|
159
|
+
currentLines.push(line);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Save last section
|
|
163
|
+
if (currentSection && currentLines.length > 0) {
|
|
164
|
+
sections[currentSection] = currentLines.join('\n').trim();
|
|
165
|
+
}
|
|
166
|
+
return sections;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Clean markdown content by removing certain elements
|
|
170
|
+
*
|
|
171
|
+
* @param markdown - Markdown content to clean
|
|
172
|
+
* @param options - Cleaning options
|
|
173
|
+
* @param options.removeFrontmatter - Whether to remove YAML frontmatter
|
|
174
|
+
* @returns Cleaned markdown content
|
|
175
|
+
*/
|
|
176
|
+
cleanMarkdown(markdown, options = {}) {
|
|
177
|
+
let cleaned = markdown;
|
|
178
|
+
// Remove frontmatter
|
|
179
|
+
if (options.removeFrontmatter !== false) {
|
|
180
|
+
cleaned = cleaned.replace(/^---\n[\s\S]*?\n---\n/, '');
|
|
181
|
+
}
|
|
182
|
+
// Trim whitespace
|
|
183
|
+
cleaned = cleaned.trim();
|
|
184
|
+
return cleaned;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Extract best practices from content
|
|
188
|
+
*
|
|
189
|
+
* @param sections - Parsed markdown sections
|
|
190
|
+
* @returns Array of best practice strings
|
|
191
|
+
*/
|
|
192
|
+
extractBestPractices(sections) {
|
|
193
|
+
const practices = [];
|
|
194
|
+
const bestPracticesSection = sections['best-practices'] || sections['production-tips'] || '';
|
|
195
|
+
if (bestPracticesSection) {
|
|
196
|
+
// Extract bullet points
|
|
197
|
+
const lines = bestPracticesSection.split('\n');
|
|
198
|
+
for (const line of lines) {
|
|
199
|
+
const match = line.match(/^[\s-]*\*\*(.+?)\*\*:?\s*(.+)$/);
|
|
200
|
+
if (match) {
|
|
201
|
+
practices.push(`${match[1]}: ${match[2]}`);
|
|
202
|
+
}
|
|
203
|
+
else if (line.trim().startsWith('-') || line.trim().startsWith('*')) {
|
|
204
|
+
const cleaned = line.trim().replace(/^[-*]\s*/, '');
|
|
205
|
+
if (cleaned) {
|
|
206
|
+
practices.push(cleaned);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return practices;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Extract common pitfalls/mistakes from content
|
|
215
|
+
*
|
|
216
|
+
* @param sections - Parsed markdown sections
|
|
217
|
+
* @returns Array of pitfalls with mistake and solution
|
|
218
|
+
*/
|
|
219
|
+
extractPitfalls(sections) {
|
|
220
|
+
const pitfalls = [];
|
|
221
|
+
const pitfallsSection = sections['common-pitfalls'] || sections['common-mistakes'] || '';
|
|
222
|
+
if (pitfallsSection) {
|
|
223
|
+
// Look for mistake/solution patterns
|
|
224
|
+
const lines = pitfallsSection.split('\n');
|
|
225
|
+
let currentMistake = null;
|
|
226
|
+
for (const line of lines) {
|
|
227
|
+
if (line.includes('❌') || line.toLowerCase().includes('mistake:')) {
|
|
228
|
+
currentMistake = line.replace(/^[\s-]*[❌*-]\s*/, '').replace(/\*\*/g, '');
|
|
229
|
+
}
|
|
230
|
+
else if (currentMistake && (line.includes('✓') || line.toLowerCase().includes('instead:'))) {
|
|
231
|
+
const solution = line.replace(/^[\s-]*[✓*-]\s*/, '').replace(/\*\*/g, '');
|
|
232
|
+
pitfalls.push({ mistake: currentMistake, solution });
|
|
233
|
+
currentMistake = null;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return pitfalls;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get default output directory for this converter
|
|
241
|
+
*
|
|
242
|
+
* @returns Default output directory path
|
|
243
|
+
*/
|
|
244
|
+
getDefaultOutputDir() {
|
|
245
|
+
return this.options.outputDir || this.getMetadata().defaultOutputDir;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.BaseConverter = BaseConverter;
|
|
249
|
+
//# sourceMappingURL=base-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-converter.js","sourceRoot":"","sources":["../../src/converters/base-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { BaseConverter } from './base-converter';
|
|
2
|
+
import type { CraftContent, ConvertedContent, ConverterMetadata } from '../types/converter';
|
|
3
|
+
/**
|
|
4
|
+
* Converts CraftDesk crafts to Continue.dev prompt format
|
|
5
|
+
* https://docs.continue.dev/customize/deep-dives/prompts
|
|
6
|
+
*/
|
|
7
|
+
export declare class ContinueConverter extends BaseConverter {
|
|
8
|
+
/**
|
|
9
|
+
* Get converter metadata
|
|
10
|
+
*
|
|
11
|
+
* @returns Converter metadata
|
|
12
|
+
*/
|
|
13
|
+
getMetadata(): ConverterMetadata;
|
|
14
|
+
/**
|
|
15
|
+
* Convert craft to Continue.dev format
|
|
16
|
+
*
|
|
17
|
+
* @param craft - Craft content to convert
|
|
18
|
+
* @returns Array of converted files (prompt + rule)
|
|
19
|
+
*/
|
|
20
|
+
convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Build Continue.dev prompt file content
|
|
23
|
+
*
|
|
24
|
+
* @param craft - Craft content
|
|
25
|
+
* @param sections - Parsed markdown sections
|
|
26
|
+
* @returns Formatted Continue prompt file content
|
|
27
|
+
*/
|
|
28
|
+
private buildContinuePrompt;
|
|
29
|
+
/**
|
|
30
|
+
* Build Continue.dev rule file content
|
|
31
|
+
* Rules are applied automatically, prompts are invoked manually
|
|
32
|
+
*
|
|
33
|
+
* @param craft - Craft content
|
|
34
|
+
* @param sections - Parsed markdown sections
|
|
35
|
+
* @returns Formatted Continue rule file content
|
|
36
|
+
*/
|
|
37
|
+
private buildContinueRule;
|
|
38
|
+
/**
|
|
39
|
+
* Format craft name for Continue (camelCase for name field)
|
|
40
|
+
*
|
|
41
|
+
* @param name - Craft name in kebab-case
|
|
42
|
+
* @returns Formatted name in camelCase
|
|
43
|
+
*/
|
|
44
|
+
private formatName;
|
|
45
|
+
/**
|
|
46
|
+
* Format craft name into readable title
|
|
47
|
+
*
|
|
48
|
+
* @param name - Craft name in kebab-case
|
|
49
|
+
* @returns Formatted title with capitalized words
|
|
50
|
+
*/
|
|
51
|
+
private formatTitle;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=continue-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue-converter.d.ts","sourceRoot":"","sources":["../../src/converters/continue-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,iBAAkB,SAAQ,aAAa;IAClD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA8B/D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAsH3B;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -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":"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"}
|