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,70 @@
|
|
|
1
|
+
import { BaseConverter } from './base-converter';
|
|
2
|
+
import type { CraftContent, ConvertedContent, ConverterMetadata } from '../types/converter';
|
|
3
|
+
/**
|
|
4
|
+
* Converts CraftDesk crafts to Cursor .mdc format
|
|
5
|
+
* https://docs.cursor.com/context/rules
|
|
6
|
+
*/
|
|
7
|
+
export declare class CursorConverter extends BaseConverter {
|
|
8
|
+
/**
|
|
9
|
+
* Get converter metadata
|
|
10
|
+
*
|
|
11
|
+
* @returns Converter metadata
|
|
12
|
+
*/
|
|
13
|
+
getMetadata(): ConverterMetadata;
|
|
14
|
+
/**
|
|
15
|
+
* Convert craft to Cursor .mdc format
|
|
16
|
+
*
|
|
17
|
+
* @param craft - Craft content to convert
|
|
18
|
+
* @returns Array of converted files
|
|
19
|
+
*/
|
|
20
|
+
convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Build Cursor .mdc file content
|
|
23
|
+
*
|
|
24
|
+
* @param craft - Craft content
|
|
25
|
+
* @param sections - Parsed markdown sections
|
|
26
|
+
* @returns Formatted .mdc file content
|
|
27
|
+
*/
|
|
28
|
+
private buildCursorMdc;
|
|
29
|
+
/**
|
|
30
|
+
* Infer file globs based on craft content
|
|
31
|
+
*
|
|
32
|
+
* @param craft - Craft content
|
|
33
|
+
* @param _sections - Parsed markdown sections (unused)
|
|
34
|
+
* @returns Array of glob patterns for file matching
|
|
35
|
+
*/
|
|
36
|
+
private inferGlobs;
|
|
37
|
+
/**
|
|
38
|
+
* Format craft name into readable title
|
|
39
|
+
*
|
|
40
|
+
* @param name - Craft name in kebab-case
|
|
41
|
+
* @returns Formatted title with capitalized words
|
|
42
|
+
*/
|
|
43
|
+
private formatTitle;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Converts CraftDesk crafts to legacy Cursor .cursorrules format
|
|
47
|
+
*/
|
|
48
|
+
export declare class CursorLegacyConverter extends BaseConverter {
|
|
49
|
+
/**
|
|
50
|
+
* Get converter metadata
|
|
51
|
+
*
|
|
52
|
+
* @returns Converter metadata
|
|
53
|
+
*/
|
|
54
|
+
getMetadata(): ConverterMetadata;
|
|
55
|
+
/**
|
|
56
|
+
* Convert craft to legacy .cursorrules format
|
|
57
|
+
*
|
|
58
|
+
* @param craft - Craft content to convert
|
|
59
|
+
* @returns Array of converted files
|
|
60
|
+
*/
|
|
61
|
+
convert(craft: CraftContent): Promise<ConvertedContent[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Format craft name into readable title
|
|
64
|
+
*
|
|
65
|
+
* @param name - Craft name in kebab-case
|
|
66
|
+
* @returns Formatted title with capitalized words
|
|
67
|
+
*/
|
|
68
|
+
private formatTitle;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=cursor-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-converter.d.ts","sourceRoot":"","sources":["../../src/converters/cursor-converter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoB/D;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAoFtB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IA0ClB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;IAUhC;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA+D/D;;;;;OAKG;IACH,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CursorLegacyConverter = exports.CursorConverter = void 0;
|
|
4
|
+
const base_converter_1 = require("./base-converter");
|
|
5
|
+
/**
|
|
6
|
+
* Converts CraftDesk crafts to Cursor .mdc format
|
|
7
|
+
* https://docs.cursor.com/context/rules
|
|
8
|
+
*/
|
|
9
|
+
class CursorConverter extends base_converter_1.BaseConverter {
|
|
10
|
+
/**
|
|
11
|
+
* Get converter metadata
|
|
12
|
+
*
|
|
13
|
+
* @returns Converter metadata
|
|
14
|
+
*/
|
|
15
|
+
getMetadata() {
|
|
16
|
+
return {
|
|
17
|
+
name: 'Cursor Converter',
|
|
18
|
+
targetFormat: 'cursor',
|
|
19
|
+
description: 'Converts crafts to Cursor .mdc format in .cursor/rules/',
|
|
20
|
+
defaultOutputDir: '.cursor/rules',
|
|
21
|
+
supportedTypes: ['skill', 'agent', 'command']
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert craft to Cursor .mdc format
|
|
26
|
+
*
|
|
27
|
+
* @param craft - Craft content to convert
|
|
28
|
+
* @returns Array of converted files
|
|
29
|
+
*/
|
|
30
|
+
async convert(craft) {
|
|
31
|
+
const files = [];
|
|
32
|
+
// Extract sections
|
|
33
|
+
const sections = this.extractAllSections(craft.mainContent);
|
|
34
|
+
// Convert to Cursor .mdc format
|
|
35
|
+
const mdcContent = this.buildCursorMdc(craft, sections);
|
|
36
|
+
// Create the .mdc file
|
|
37
|
+
const fileName = `${craft.name}.mdc`;
|
|
38
|
+
files.push({
|
|
39
|
+
filePath: fileName,
|
|
40
|
+
content: mdcContent,
|
|
41
|
+
type: 'rule'
|
|
42
|
+
});
|
|
43
|
+
return files;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build Cursor .mdc file content
|
|
47
|
+
*
|
|
48
|
+
* @param craft - Craft content
|
|
49
|
+
* @param sections - Parsed markdown sections
|
|
50
|
+
* @returns Formatted .mdc file content
|
|
51
|
+
*/
|
|
52
|
+
buildCursorMdc(craft, sections) {
|
|
53
|
+
const lines = [];
|
|
54
|
+
// YAML frontmatter
|
|
55
|
+
lines.push('---');
|
|
56
|
+
lines.push(`description: ${craft.description || `Rules for ${craft.name}`}`);
|
|
57
|
+
// Add globs based on craft type and content
|
|
58
|
+
const globs = this.inferGlobs(craft, sections);
|
|
59
|
+
if (globs.length > 0) {
|
|
60
|
+
lines.push(`globs:`);
|
|
61
|
+
globs.forEach(glob => lines.push(` - "${glob}"`));
|
|
62
|
+
}
|
|
63
|
+
// Always apply for skills, manual for commands
|
|
64
|
+
lines.push(`alwaysApply: ${craft.type === 'skill'}`);
|
|
65
|
+
lines.push('---');
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Title
|
|
68
|
+
lines.push(`# ${this.formatTitle(craft.name)}`);
|
|
69
|
+
lines.push('');
|
|
70
|
+
// Instructions/Overview
|
|
71
|
+
if (sections['instructions'] || craft.description) {
|
|
72
|
+
lines.push('## Overview');
|
|
73
|
+
lines.push('');
|
|
74
|
+
lines.push(sections['instructions'] || craft.description || '');
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
// Code Patterns
|
|
78
|
+
const patterns = sections['common-patterns'] || sections['patterns'];
|
|
79
|
+
if (patterns) {
|
|
80
|
+
lines.push('## Code Patterns');
|
|
81
|
+
lines.push('');
|
|
82
|
+
lines.push(patterns);
|
|
83
|
+
lines.push('');
|
|
84
|
+
}
|
|
85
|
+
// Examples
|
|
86
|
+
const examples = sections['quick-reference'] || sections['examples'];
|
|
87
|
+
if (examples) {
|
|
88
|
+
lines.push('## Examples');
|
|
89
|
+
lines.push('');
|
|
90
|
+
lines.push(examples);
|
|
91
|
+
lines.push('');
|
|
92
|
+
}
|
|
93
|
+
// Best Practices
|
|
94
|
+
const bestPractices = this.extractBestPractices(sections);
|
|
95
|
+
if (bestPractices.length > 0) {
|
|
96
|
+
lines.push('## Best Practices');
|
|
97
|
+
lines.push('');
|
|
98
|
+
bestPractices.forEach(practice => {
|
|
99
|
+
lines.push(`- ${practice}`);
|
|
100
|
+
});
|
|
101
|
+
lines.push('');
|
|
102
|
+
}
|
|
103
|
+
// Common Pitfalls
|
|
104
|
+
const pitfalls = this.extractPitfalls(sections);
|
|
105
|
+
if (pitfalls.length > 0) {
|
|
106
|
+
lines.push('## Common Mistakes to Avoid');
|
|
107
|
+
lines.push('');
|
|
108
|
+
pitfalls.forEach(({ mistake, solution }) => {
|
|
109
|
+
lines.push(`- ❌ **Mistake**: ${mistake}`);
|
|
110
|
+
lines.push(` - ✅ **Instead**: ${solution}`);
|
|
111
|
+
});
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
// Workflows
|
|
115
|
+
const workflows = sections['common-workflows'] || sections['workflows'];
|
|
116
|
+
if (workflows) {
|
|
117
|
+
lines.push('## Common Workflows');
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push(workflows);
|
|
120
|
+
lines.push('');
|
|
121
|
+
}
|
|
122
|
+
return lines.join('\n');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Infer file globs based on craft content
|
|
126
|
+
*
|
|
127
|
+
* @param craft - Craft content
|
|
128
|
+
* @param _sections - Parsed markdown sections (unused)
|
|
129
|
+
* @returns Array of glob patterns for file matching
|
|
130
|
+
*/
|
|
131
|
+
inferGlobs(craft, _sections) {
|
|
132
|
+
const globs = [];
|
|
133
|
+
const content = craft.mainContent.toLowerCase();
|
|
134
|
+
// Language-specific globs
|
|
135
|
+
const languagePatterns = {
|
|
136
|
+
ruby: ['**/*.rb', '**/*.rake', '**/Gemfile', '**/Rakefile'],
|
|
137
|
+
rails: ['**/*.rb', '**/*.erb', '**/*.haml', '**/config/**/*'],
|
|
138
|
+
javascript: ['**/*.js', '**/*.jsx'],
|
|
139
|
+
typescript: ['**/*.ts', '**/*.tsx'],
|
|
140
|
+
python: ['**/*.py'],
|
|
141
|
+
java: ['**/*.java'],
|
|
142
|
+
go: ['**/*.go'],
|
|
143
|
+
rust: ['**/*.rs'],
|
|
144
|
+
php: ['**/*.php'],
|
|
145
|
+
'c++': ['**/*.cpp', '**/*.h', '**/*.hpp'],
|
|
146
|
+
'c#': ['**/*.cs'],
|
|
147
|
+
swift: ['**/*.swift'],
|
|
148
|
+
kotlin: ['**/*.kt'],
|
|
149
|
+
react: ['**/*.jsx', '**/*.tsx'],
|
|
150
|
+
vue: ['**/*.vue'],
|
|
151
|
+
angular: ['**/*.ts', '**/*.html'],
|
|
152
|
+
docker: ['**/Dockerfile', '**/*.dockerfile', '**/docker-compose.yml'],
|
|
153
|
+
kubernetes: ['**/*.yaml', '**/*.yml']
|
|
154
|
+
};
|
|
155
|
+
// Check for language indicators
|
|
156
|
+
for (const [language, patterns] of Object.entries(languagePatterns)) {
|
|
157
|
+
if (content.includes(language) || craft.name.toLowerCase().includes(language)) {
|
|
158
|
+
globs.push(...patterns);
|
|
159
|
+
break; // Only use first match
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Default to all files if no specific language detected
|
|
163
|
+
if (globs.length === 0) {
|
|
164
|
+
globs.push('**/*');
|
|
165
|
+
}
|
|
166
|
+
return [...new Set(globs)]; // Remove duplicates
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Format craft name into readable title
|
|
170
|
+
*
|
|
171
|
+
* @param name - Craft name in kebab-case
|
|
172
|
+
* @returns Formatted title with capitalized words
|
|
173
|
+
*/
|
|
174
|
+
formatTitle(name) {
|
|
175
|
+
return name
|
|
176
|
+
.split('-')
|
|
177
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
178
|
+
.join(' ');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.CursorConverter = CursorConverter;
|
|
182
|
+
/**
|
|
183
|
+
* Converts CraftDesk crafts to legacy Cursor .cursorrules format
|
|
184
|
+
*/
|
|
185
|
+
class CursorLegacyConverter extends base_converter_1.BaseConverter {
|
|
186
|
+
/**
|
|
187
|
+
* Get converter metadata
|
|
188
|
+
*
|
|
189
|
+
* @returns Converter metadata
|
|
190
|
+
*/
|
|
191
|
+
getMetadata() {
|
|
192
|
+
return {
|
|
193
|
+
name: 'Cursor Legacy Converter',
|
|
194
|
+
targetFormat: 'cursor-legacy',
|
|
195
|
+
description: 'Converts crafts to legacy .cursorrules plain text format',
|
|
196
|
+
defaultOutputDir: '.',
|
|
197
|
+
supportedTypes: ['skill', 'agent', 'command']
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Convert craft to legacy .cursorrules format
|
|
202
|
+
*
|
|
203
|
+
* @param craft - Craft content to convert
|
|
204
|
+
* @returns Array of converted files
|
|
205
|
+
*/
|
|
206
|
+
async convert(craft) {
|
|
207
|
+
const files = [];
|
|
208
|
+
// Extract sections
|
|
209
|
+
const sections = this.extractAllSections(craft.mainContent);
|
|
210
|
+
// Build plain text rules
|
|
211
|
+
const lines = [];
|
|
212
|
+
lines.push(`# ${this.formatTitle(craft.name)}`);
|
|
213
|
+
lines.push('');
|
|
214
|
+
if (craft.description) {
|
|
215
|
+
lines.push(craft.description);
|
|
216
|
+
lines.push('');
|
|
217
|
+
}
|
|
218
|
+
// Instructions
|
|
219
|
+
if (sections['instructions']) {
|
|
220
|
+
lines.push('## Instructions');
|
|
221
|
+
lines.push('');
|
|
222
|
+
lines.push(sections['instructions']);
|
|
223
|
+
lines.push('');
|
|
224
|
+
}
|
|
225
|
+
// Patterns
|
|
226
|
+
const patterns = sections['common-patterns'] || sections['patterns'];
|
|
227
|
+
if (patterns) {
|
|
228
|
+
lines.push('## Code Patterns');
|
|
229
|
+
lines.push('');
|
|
230
|
+
lines.push(patterns);
|
|
231
|
+
lines.push('');
|
|
232
|
+
}
|
|
233
|
+
// Best Practices
|
|
234
|
+
const bestPractices = this.extractBestPractices(sections);
|
|
235
|
+
if (bestPractices.length > 0) {
|
|
236
|
+
lines.push('## Best Practices');
|
|
237
|
+
lines.push('');
|
|
238
|
+
bestPractices.forEach(practice => {
|
|
239
|
+
lines.push(`- ${practice}`);
|
|
240
|
+
});
|
|
241
|
+
lines.push('');
|
|
242
|
+
}
|
|
243
|
+
// Examples
|
|
244
|
+
const examples = sections['quick-reference'] || sections['examples'];
|
|
245
|
+
if (examples) {
|
|
246
|
+
lines.push('## Examples');
|
|
247
|
+
lines.push('');
|
|
248
|
+
lines.push(examples);
|
|
249
|
+
lines.push('');
|
|
250
|
+
}
|
|
251
|
+
files.push({
|
|
252
|
+
filePath: '.cursorrules',
|
|
253
|
+
content: lines.join('\n'),
|
|
254
|
+
type: 'rule'
|
|
255
|
+
});
|
|
256
|
+
return files;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Format craft name into readable title
|
|
260
|
+
*
|
|
261
|
+
* @param name - Craft name in kebab-case
|
|
262
|
+
* @returns Formatted title with capitalized words
|
|
263
|
+
*/
|
|
264
|
+
formatTitle(name) {
|
|
265
|
+
return name
|
|
266
|
+
.split('-')
|
|
267
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
268
|
+
.join(' ');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
exports.CursorLegacyConverter = CursorLegacyConverter;
|
|
272
|
+
//# sourceMappingURL=cursor-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-converter.js","sourceRoot":"","sources":["../../src/converters/cursor-converter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,21 @@ const install_1 = require("./commands/install");
|
|
|
7
7
|
const add_1 = require("./commands/add");
|
|
8
8
|
const remove_1 = require("./commands/remove");
|
|
9
9
|
const list_1 = require("./commands/list");
|
|
10
|
+
const search_1 = require("./commands/search");
|
|
11
|
+
const info_1 = require("./commands/info");
|
|
12
|
+
const outdated_1 = require("./commands/outdated");
|
|
13
|
+
const update_1 = require("./commands/update");
|
|
14
|
+
const publish_1 = require("./commands/publish");
|
|
15
|
+
const login_1 = require("./commands/login");
|
|
16
|
+
const logout_1 = require("./commands/logout");
|
|
17
|
+
const whoami_1 = require("./commands/whoami");
|
|
18
|
+
const convert_1 = require("./commands/convert");
|
|
19
|
+
const detect_agents_1 = require("./commands/detect-agents");
|
|
20
|
+
const sync_1 = require("./commands/sync");
|
|
21
|
+
const verify_1 = require("./commands/verify");
|
|
22
|
+
const setup_multi_agent_1 = require("./commands/setup-multi-agent");
|
|
23
|
+
const embed_1 = require("./commands/embed");
|
|
24
|
+
const unembed_1 = require("./commands/unembed");
|
|
10
25
|
const logger_1 = require("./utils/logger");
|
|
11
26
|
const program = new commander_1.Command();
|
|
12
27
|
program
|
|
@@ -22,6 +37,21 @@ program.addCommand((0, install_1.createInstallCommand)());
|
|
|
22
37
|
program.addCommand((0, add_1.createAddCommand)());
|
|
23
38
|
program.addCommand((0, remove_1.createRemoveCommand)());
|
|
24
39
|
program.addCommand((0, list_1.createListCommand)());
|
|
40
|
+
program.addCommand((0, search_1.createSearchCommand)());
|
|
41
|
+
program.addCommand((0, info_1.createInfoCommand)());
|
|
42
|
+
program.addCommand((0, outdated_1.createOutdatedCommand)());
|
|
43
|
+
program.addCommand((0, update_1.createUpdateCommand)());
|
|
44
|
+
program.addCommand((0, publish_1.createPublishCommand)());
|
|
45
|
+
program.addCommand((0, login_1.createLoginCommand)());
|
|
46
|
+
program.addCommand((0, logout_1.createLogoutCommand)());
|
|
47
|
+
program.addCommand((0, whoami_1.createWhoamiCommand)());
|
|
48
|
+
program.addCommand((0, convert_1.createConvertCommand)());
|
|
49
|
+
program.addCommand((0, detect_agents_1.createDetectAgentsCommand)());
|
|
50
|
+
program.addCommand((0, sync_1.createSyncCommand)());
|
|
51
|
+
program.addCommand((0, verify_1.createVerifyCommand)());
|
|
52
|
+
program.addCommand((0, setup_multi_agent_1.createSetupMultiAgentCommand)());
|
|
53
|
+
program.addCommand((0, embed_1.createEmbedCommand)());
|
|
54
|
+
program.addCommand((0, unembed_1.createUnembedCommand)());
|
|
25
55
|
// Add aliases
|
|
26
56
|
program.command('i', { hidden: true }).action(() => {
|
|
27
57
|
program.parse(['', '', 'install', ...process.argv.slice(3)]);
|
|
@@ -39,9 +69,32 @@ if (process.argv.length === 2) {
|
|
|
39
69
|
logger_1.logger.log('Dependency management for AI capabilities');
|
|
40
70
|
logger_1.logger.log('');
|
|
41
71
|
logger_1.logger.log('Getting started:');
|
|
42
|
-
logger_1.logger.log(' craftdesk init
|
|
43
|
-
logger_1.logger.log(' craftdesk
|
|
44
|
-
logger_1.logger.log(' craftdesk
|
|
72
|
+
logger_1.logger.log(' craftdesk init Create a new craftdesk.json file');
|
|
73
|
+
logger_1.logger.log(' craftdesk search <q> Search for crafts in registry');
|
|
74
|
+
logger_1.logger.log(' craftdesk info <name> Show craft information');
|
|
75
|
+
logger_1.logger.log(' craftdesk add <pkg> Add a new dependency');
|
|
76
|
+
logger_1.logger.log(' craftdesk install Install all dependencies');
|
|
77
|
+
logger_1.logger.log(' craftdesk outdated Check for newer versions');
|
|
78
|
+
logger_1.logger.log(' craftdesk update Update crafts to newer versions');
|
|
79
|
+
logger_1.logger.log(' craftdesk publish Publish a craft to the registry');
|
|
80
|
+
logger_1.logger.log('');
|
|
81
|
+
logger_1.logger.log('Format Conversion:');
|
|
82
|
+
logger_1.logger.log(' craftdesk convert Convert crafts to other AI editor formats');
|
|
83
|
+
logger_1.logger.log('');
|
|
84
|
+
logger_1.logger.log('Multi-Agent Sync:');
|
|
85
|
+
logger_1.logger.log(' craftdesk setup-multi-agent Configure multi-agent sync');
|
|
86
|
+
logger_1.logger.log(' craftdesk detect-agents Detect AI coding assistants');
|
|
87
|
+
logger_1.logger.log(' craftdesk sync Sync crafts across agents');
|
|
88
|
+
logger_1.logger.log(' craftdesk verify Verify sync status');
|
|
89
|
+
logger_1.logger.log('');
|
|
90
|
+
logger_1.logger.log('Embedded Skills:');
|
|
91
|
+
logger_1.logger.log(' craftdesk embed <name> Register a local/embedded skill');
|
|
92
|
+
logger_1.logger.log(' craftdesk unembed <name> Unregister an embedded skill');
|
|
93
|
+
logger_1.logger.log('');
|
|
94
|
+
logger_1.logger.log('Authentication:');
|
|
95
|
+
logger_1.logger.log(' craftdesk login Authenticate with a registry');
|
|
96
|
+
logger_1.logger.log(' craftdesk logout Remove authentication');
|
|
97
|
+
logger_1.logger.log(' craftdesk whoami Show logged in user');
|
|
45
98
|
logger_1.logger.log('');
|
|
46
99
|
logger_1.logger.log('Run "craftdesk --help" for full command list');
|
|
47
100
|
process.exit(0);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAoD;AACpD,gDAA0D;AAC1D,wCAAkD;AAClD,8CAAwD;AACxD,0CAAoD;AACpD,2CAAwC;AAExC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACjC,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,GAAG,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,IAAA,8BAAoB,GAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,IAAA,sBAAgB,GAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,IAAA,4BAAmB,GAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAiB,GAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Detector - Auto-detect AI coding assistants
|
|
3
|
+
*
|
|
4
|
+
* Detects which AI coding assistants are in use by checking for
|
|
5
|
+
* their configuration directories (.claude/, .cursor/, etc.)
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentConfig, AgentDetectionResult } from '../types/multi-agent';
|
|
8
|
+
/**
|
|
9
|
+
* Service for detecting AI coding assistants
|
|
10
|
+
*/
|
|
11
|
+
export declare class AgentDetector {
|
|
12
|
+
/**
|
|
13
|
+
* Detect which AI coding assistants are in use
|
|
14
|
+
*
|
|
15
|
+
* @param cwd - Current working directory (defaults to process.cwd())
|
|
16
|
+
* @returns Detection result with detected, enabled, and suggested agents
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const detector = new AgentDetector();
|
|
21
|
+
* const result = await detector.detectAgents();
|
|
22
|
+
*
|
|
23
|
+
* console.log(`Found ${result.detected.length} agents`);
|
|
24
|
+
* console.log(`Enabled: ${result.enabled.map(a => a.displayName).join(', ')}`);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
detectAgents(cwd?: string): Promise<AgentDetectionResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Get configuration for a specific agent by name
|
|
30
|
+
*
|
|
31
|
+
* @param agentName - Name of the agent (e.g., 'cursor', 'windsurf')
|
|
32
|
+
* @returns Agent configuration if found, null otherwise
|
|
33
|
+
*/
|
|
34
|
+
getAgentConfig(agentName: string): Omit<AgentConfig, 'enabled' | 'detected'> | null;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a directory belongs to a known AI agent
|
|
37
|
+
*
|
|
38
|
+
* @param dirPath - Directory path to check (e.g., '.cursor')
|
|
39
|
+
* @returns Agent name if recognized, null otherwise
|
|
40
|
+
*/
|
|
41
|
+
identifyAgentByDirectory(dirPath: string): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Get all known agent names
|
|
44
|
+
*
|
|
45
|
+
* @returns Array of agent names
|
|
46
|
+
*/
|
|
47
|
+
getKnownAgentNames(): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Validate that all configured targets correspond to known agents
|
|
50
|
+
*
|
|
51
|
+
* @param targets - Array of target paths from config
|
|
52
|
+
* @returns Array of unknown/invalid targets
|
|
53
|
+
*/
|
|
54
|
+
validateTargets(targets: string[]): string[];
|
|
55
|
+
}
|
|
56
|
+
export declare const agentDetector: AgentDetector;
|
|
57
|
+
//# sourceMappingURL=agent-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-detector.d.ts","sourceRoot":"","sources":["../../src/services/agent-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAkC9E;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;;;;;;;;;;OAcG;IACG,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA4C9E;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG,IAAI;IAInF;;;;;OAKG;IACH,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUxD;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAI7C;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Detector - Auto-detect AI coding assistants
|
|
4
|
+
*
|
|
5
|
+
* Detects which AI coding assistants are in use by checking for
|
|
6
|
+
* their configuration directories (.claude/, .cursor/, etc.)
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.agentDetector = exports.AgentDetector = void 0;
|
|
13
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const logger_1 = require("../utils/logger");
|
|
16
|
+
const config_manager_1 = require("./config-manager");
|
|
17
|
+
/**
|
|
18
|
+
* Known AI coding assistants and their directory structures
|
|
19
|
+
*/
|
|
20
|
+
const KNOWN_AGENTS = [
|
|
21
|
+
{
|
|
22
|
+
name: 'claude',
|
|
23
|
+
displayName: 'Claude Code',
|
|
24
|
+
skillsDir: '.claude/skills'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'cursor',
|
|
28
|
+
displayName: 'Cursor',
|
|
29
|
+
skillsDir: '.cursor/skills'
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: 'windsurf',
|
|
33
|
+
displayName: 'Windsurf',
|
|
34
|
+
skillsDir: '.windsurf/skills'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'continue',
|
|
38
|
+
displayName: 'Continue.dev',
|
|
39
|
+
skillsDir: '.continue/skills'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'agents',
|
|
43
|
+
displayName: 'Generic .agents',
|
|
44
|
+
skillsDir: '.agents/skills'
|
|
45
|
+
}
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Service for detecting AI coding assistants
|
|
49
|
+
*/
|
|
50
|
+
class AgentDetector {
|
|
51
|
+
/**
|
|
52
|
+
* Detect which AI coding assistants are in use
|
|
53
|
+
*
|
|
54
|
+
* @param cwd - Current working directory (defaults to process.cwd())
|
|
55
|
+
* @returns Detection result with detected, enabled, and suggested agents
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const detector = new AgentDetector();
|
|
60
|
+
* const result = await detector.detectAgents();
|
|
61
|
+
*
|
|
62
|
+
* console.log(`Found ${result.detected.length} agents`);
|
|
63
|
+
* console.log(`Enabled: ${result.enabled.map(a => a.displayName).join(', ')}`);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
async detectAgents(cwd = process.cwd()) {
|
|
67
|
+
const detected = [];
|
|
68
|
+
const config = await config_manager_1.configManager.getCraftDeskJson();
|
|
69
|
+
const enabledTargets = config?.multiAgent?.targets || [];
|
|
70
|
+
// Check each known agent
|
|
71
|
+
for (const agent of KNOWN_AGENTS) {
|
|
72
|
+
const agentDir = path_1.default.dirname(agent.skillsDir);
|
|
73
|
+
const fullPath = path_1.default.join(cwd, agentDir);
|
|
74
|
+
// Check if agent directory exists
|
|
75
|
+
const exists = await fs_extra_1.default.pathExists(fullPath);
|
|
76
|
+
if (exists) {
|
|
77
|
+
const isEnabled = enabledTargets.includes(agent.skillsDir);
|
|
78
|
+
detected.push({
|
|
79
|
+
...agent,
|
|
80
|
+
enabled: isEnabled,
|
|
81
|
+
detected: true
|
|
82
|
+
});
|
|
83
|
+
logger_1.logger.debug(`Detected ${agent.displayName} at ${agentDir}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Always ensure Claude is in the list (canonical for CraftDesk)
|
|
87
|
+
const claudeExists = detected.some(a => a.name === 'claude');
|
|
88
|
+
if (!claudeExists) {
|
|
89
|
+
detected.push({
|
|
90
|
+
name: 'claude',
|
|
91
|
+
displayName: 'Claude Code',
|
|
92
|
+
skillsDir: '.claude/skills',
|
|
93
|
+
enabled: true, // Always enabled as canonical
|
|
94
|
+
detected: false
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const enabled = detected.filter(a => a.enabled);
|
|
98
|
+
const suggested = detected.filter(a => !a.enabled && a.detected);
|
|
99
|
+
return { detected, enabled, suggested };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get configuration for a specific agent by name
|
|
103
|
+
*
|
|
104
|
+
* @param agentName - Name of the agent (e.g., 'cursor', 'windsurf')
|
|
105
|
+
* @returns Agent configuration if found, null otherwise
|
|
106
|
+
*/
|
|
107
|
+
getAgentConfig(agentName) {
|
|
108
|
+
return KNOWN_AGENTS.find(a => a.name === agentName) || null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Check if a directory belongs to a known AI agent
|
|
112
|
+
*
|
|
113
|
+
* @param dirPath - Directory path to check (e.g., '.cursor')
|
|
114
|
+
* @returns Agent name if recognized, null otherwise
|
|
115
|
+
*/
|
|
116
|
+
identifyAgentByDirectory(dirPath) {
|
|
117
|
+
const normalized = dirPath.replace(/^\.\//, '').replace(/\/$/, '');
|
|
118
|
+
const agent = KNOWN_AGENTS.find(a => {
|
|
119
|
+
const agentDir = path_1.default.dirname(a.skillsDir);
|
|
120
|
+
return agentDir === normalized || agentDir === `.${normalized}`;
|
|
121
|
+
});
|
|
122
|
+
return agent?.name || null;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get all known agent names
|
|
126
|
+
*
|
|
127
|
+
* @returns Array of agent names
|
|
128
|
+
*/
|
|
129
|
+
getKnownAgentNames() {
|
|
130
|
+
return KNOWN_AGENTS.map(a => a.name);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate that all configured targets correspond to known agents
|
|
134
|
+
*
|
|
135
|
+
* @param targets - Array of target paths from config
|
|
136
|
+
* @returns Array of unknown/invalid targets
|
|
137
|
+
*/
|
|
138
|
+
validateTargets(targets) {
|
|
139
|
+
const knownDirs = KNOWN_AGENTS.map(a => a.skillsDir);
|
|
140
|
+
return targets.filter(t => !knownDirs.includes(t));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
exports.AgentDetector = AgentDetector;
|
|
144
|
+
// Export singleton instance
|
|
145
|
+
exports.agentDetector = new AgentDetector();
|
|
146
|
+
//# sourceMappingURL=agent-detector.js.map
|