craftdesk 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/README.md +968 -92
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +303 -7
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +72 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +198 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +52 -11
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +369 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +35 -4
- package/dist/index.js.map +1 -1
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +189 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +35 -10
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/installer.d.ts +51 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +245 -14
- package/dist/services/installer.js.map +1 -1
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +182 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +63 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -17
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -370
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -29
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginResolver - Resolves plugin dependencies
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Reading plugin craftdesk.json files
|
|
6
|
+
* - Flattening nested dependencies
|
|
7
|
+
* - Building plugin dependency tree
|
|
8
|
+
* - Detecting circular dependencies
|
|
9
|
+
*/
|
|
10
|
+
import type { PluginDependencyTree } from '../types/craftdesk-lock';
|
|
11
|
+
/**
|
|
12
|
+
* Information about a resolved plugin dependency
|
|
13
|
+
*/
|
|
14
|
+
export interface ResolvedPlugin {
|
|
15
|
+
name: string;
|
|
16
|
+
version: string;
|
|
17
|
+
dependencies: Record<string, string | import('../types/craftdesk-json').DependencyConfig>;
|
|
18
|
+
isDependency: boolean;
|
|
19
|
+
requiredBy: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Service for resolving plugin dependencies and building dependency trees
|
|
23
|
+
*
|
|
24
|
+
* Handles recursive dependency resolution, circular dependency detection,
|
|
25
|
+
* and flattening nested plugin dependencies
|
|
26
|
+
*/
|
|
27
|
+
export declare class PluginResolver {
|
|
28
|
+
private resolvedPlugins;
|
|
29
|
+
private resolutionStack;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve plugin dependencies recursively
|
|
32
|
+
*
|
|
33
|
+
* @param pluginPath - Path to plugin directory
|
|
34
|
+
* @param parentName - Name of parent plugin (for tracking requiredBy)
|
|
35
|
+
* @returns Flattened dependency map
|
|
36
|
+
*/
|
|
37
|
+
resolvePluginDependencies(pluginPath: string, parentName?: string): Promise<Record<string, ResolvedPlugin>>;
|
|
38
|
+
/**
|
|
39
|
+
* Build plugin dependency tree for lockfile
|
|
40
|
+
*
|
|
41
|
+
* @returns Plugin dependency tree structure
|
|
42
|
+
*/
|
|
43
|
+
buildPluginTree(): PluginDependencyTree;
|
|
44
|
+
/**
|
|
45
|
+
* Get flattened dependencies
|
|
46
|
+
*
|
|
47
|
+
* This is what goes into craftdesk.json
|
|
48
|
+
*
|
|
49
|
+
* @returns Flattened dependency map
|
|
50
|
+
*/
|
|
51
|
+
getFlattenedDependencies(): Record<string, string | import('../types/craftdesk-json').DependencyConfig>;
|
|
52
|
+
/**
|
|
53
|
+
* Get only directly installed plugins (not dependencies)
|
|
54
|
+
*
|
|
55
|
+
* @returns Array of directly installed plugins
|
|
56
|
+
*/
|
|
57
|
+
getDirectPlugins(): ResolvedPlugin[];
|
|
58
|
+
/**
|
|
59
|
+
* Get only dependency plugins (not directly installed)
|
|
60
|
+
*
|
|
61
|
+
* @returns Array of dependency plugins
|
|
62
|
+
*/
|
|
63
|
+
getDependencyPlugins(): ResolvedPlugin[];
|
|
64
|
+
/**
|
|
65
|
+
* Read plugin manifest (craftdesk.json)
|
|
66
|
+
*
|
|
67
|
+
* @param pluginPath - Path to plugin directory
|
|
68
|
+
* @returns Parsed manifest or null if not found
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
private readPluginManifest;
|
|
72
|
+
/**
|
|
73
|
+
* Reset resolver state
|
|
74
|
+
*
|
|
75
|
+
* Clears all resolved plugins and resolution stack
|
|
76
|
+
*/
|
|
77
|
+
reset(): void;
|
|
78
|
+
}
|
|
79
|
+
export declare const pluginResolver: PluginResolver;
|
|
80
|
+
//# sourceMappingURL=plugin-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-resolver.d.ts","sourceRoot":"","sources":["../../src/services/plugin-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,CAAC;IAC1F,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,eAAe,CAAgB;IAEvC;;;;;;OAMG;IACG,yBAAyB,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAiE1C;;;;OAIG;IACH,eAAe,IAAI,oBAAoB;IAevC;;;;;;OAMG;IACH,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,yBAAyB,EAAE,gBAAgB,CAAC;IAoBvG;;;;OAIG;IACH,gBAAgB,IAAI,cAAc,EAAE;IAIpC;;;;OAIG;IACH,oBAAoB,IAAI,cAAc,EAAE;IAIxC;;;;;;OAMG;YACW,kBAAkB;IAgBhC;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PluginResolver - Resolves plugin dependencies
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Reading plugin craftdesk.json files
|
|
7
|
+
* - Flattening nested dependencies
|
|
8
|
+
* - Building plugin dependency tree
|
|
9
|
+
* - Detecting circular dependencies
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.pluginResolver = exports.PluginResolver = void 0;
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const logger_1 = require("../utils/logger");
|
|
19
|
+
/**
|
|
20
|
+
* Service for resolving plugin dependencies and building dependency trees
|
|
21
|
+
*
|
|
22
|
+
* Handles recursive dependency resolution, circular dependency detection,
|
|
23
|
+
* and flattening nested plugin dependencies
|
|
24
|
+
*/
|
|
25
|
+
class PluginResolver {
|
|
26
|
+
resolvedPlugins = new Map();
|
|
27
|
+
resolutionStack = [];
|
|
28
|
+
/**
|
|
29
|
+
* Resolve plugin dependencies recursively
|
|
30
|
+
*
|
|
31
|
+
* @param pluginPath - Path to plugin directory
|
|
32
|
+
* @param parentName - Name of parent plugin (for tracking requiredBy)
|
|
33
|
+
* @returns Flattened dependency map
|
|
34
|
+
*/
|
|
35
|
+
async resolvePluginDependencies(pluginPath, parentName) {
|
|
36
|
+
// Read plugin's craftdesk.json
|
|
37
|
+
const manifest = await this.readPluginManifest(pluginPath);
|
|
38
|
+
if (!manifest) {
|
|
39
|
+
throw new Error(`No craftdesk.json found in plugin: ${pluginPath}`);
|
|
40
|
+
}
|
|
41
|
+
const pluginName = manifest.name;
|
|
42
|
+
// Check for circular dependencies
|
|
43
|
+
if (this.resolutionStack.includes(pluginName)) {
|
|
44
|
+
const cycle = [...this.resolutionStack, pluginName].join(' → ');
|
|
45
|
+
throw new Error(`Circular dependency detected: ${cycle}`);
|
|
46
|
+
}
|
|
47
|
+
// Add to resolution stack
|
|
48
|
+
this.resolutionStack.push(pluginName);
|
|
49
|
+
try {
|
|
50
|
+
// If already resolved, just add requiredBy
|
|
51
|
+
if (this.resolvedPlugins.has(pluginName)) {
|
|
52
|
+
const existing = this.resolvedPlugins.get(pluginName);
|
|
53
|
+
if (parentName && !existing.requiredBy.includes(parentName)) {
|
|
54
|
+
existing.requiredBy.push(parentName);
|
|
55
|
+
}
|
|
56
|
+
return Object.fromEntries(this.resolvedPlugins);
|
|
57
|
+
}
|
|
58
|
+
// Create resolved entry
|
|
59
|
+
const resolved = {
|
|
60
|
+
name: pluginName,
|
|
61
|
+
version: manifest.version,
|
|
62
|
+
dependencies: manifest.dependencies || {},
|
|
63
|
+
isDependency: !!parentName,
|
|
64
|
+
requiredBy: parentName ? [parentName] : []
|
|
65
|
+
};
|
|
66
|
+
this.resolvedPlugins.set(pluginName, resolved);
|
|
67
|
+
// Recursively resolve dependencies
|
|
68
|
+
if (manifest.dependencies) {
|
|
69
|
+
for (const [depName, depVersion] of Object.entries(manifest.dependencies)) {
|
|
70
|
+
// Skip if dependency is a string (version) - these are resolved by registry
|
|
71
|
+
if (typeof depVersion === 'string') {
|
|
72
|
+
logger_1.logger.debug(`Dependency ${depName} will be resolved by registry`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Handle git dependencies with subdirectories
|
|
76
|
+
if (depVersion.git && depVersion.path) {
|
|
77
|
+
// Dependency is in a subdirectory of git repo - we'll need to clone and resolve
|
|
78
|
+
logger_1.logger.debug(`Dependency ${depName} requires git clone for resolution`);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return Object.fromEntries(this.resolvedPlugins);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
// Remove from resolution stack
|
|
87
|
+
this.resolutionStack.pop();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Build plugin dependency tree for lockfile
|
|
92
|
+
*
|
|
93
|
+
* @returns Plugin dependency tree structure
|
|
94
|
+
*/
|
|
95
|
+
buildPluginTree() {
|
|
96
|
+
const tree = {};
|
|
97
|
+
for (const [name, plugin] of this.resolvedPlugins) {
|
|
98
|
+
tree[name] = {
|
|
99
|
+
version: plugin.version,
|
|
100
|
+
dependencies: Object.keys(plugin.dependencies),
|
|
101
|
+
isDependency: plugin.isDependency,
|
|
102
|
+
requiredBy: plugin.requiredBy
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return tree;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get flattened dependencies
|
|
109
|
+
*
|
|
110
|
+
* This is what goes into craftdesk.json
|
|
111
|
+
*
|
|
112
|
+
* @returns Flattened dependency map
|
|
113
|
+
*/
|
|
114
|
+
getFlattenedDependencies() {
|
|
115
|
+
const flattened = {};
|
|
116
|
+
for (const [name, plugin] of this.resolvedPlugins) {
|
|
117
|
+
flattened[name] = plugin.version;
|
|
118
|
+
// Add plugin's dependencies
|
|
119
|
+
for (const [depName, depVersion] of Object.entries(plugin.dependencies)) {
|
|
120
|
+
if (typeof depVersion === 'string') {
|
|
121
|
+
flattened[depName] = depVersion;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Complex dependency config - we'll add it as-is
|
|
125
|
+
flattened[depName] = depVersion;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return flattened;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get only directly installed plugins (not dependencies)
|
|
133
|
+
*
|
|
134
|
+
* @returns Array of directly installed plugins
|
|
135
|
+
*/
|
|
136
|
+
getDirectPlugins() {
|
|
137
|
+
return Array.from(this.resolvedPlugins.values()).filter(p => !p.isDependency);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get only dependency plugins (not directly installed)
|
|
141
|
+
*
|
|
142
|
+
* @returns Array of dependency plugins
|
|
143
|
+
*/
|
|
144
|
+
getDependencyPlugins() {
|
|
145
|
+
return Array.from(this.resolvedPlugins.values()).filter(p => p.isDependency);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Read plugin manifest (craftdesk.json)
|
|
149
|
+
*
|
|
150
|
+
* @param pluginPath - Path to plugin directory
|
|
151
|
+
* @returns Parsed manifest or null if not found
|
|
152
|
+
* @private
|
|
153
|
+
*/
|
|
154
|
+
async readPluginManifest(pluginPath) {
|
|
155
|
+
const manifestPath = path_1.default.join(pluginPath, 'craftdesk.json');
|
|
156
|
+
try {
|
|
157
|
+
if (await fs_extra_1.default.pathExists(manifestPath)) {
|
|
158
|
+
const content = await fs_extra_1.default.readFile(manifestPath, 'utf-8');
|
|
159
|
+
return JSON.parse(content);
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
165
|
+
logger_1.logger.debug(`Failed to read plugin manifest at ${manifestPath}: ${message}`);
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Reset resolver state
|
|
171
|
+
*
|
|
172
|
+
* Clears all resolved plugins and resolution stack
|
|
173
|
+
*/
|
|
174
|
+
reset() {
|
|
175
|
+
this.resolvedPlugins.clear();
|
|
176
|
+
this.resolutionStack = [];
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.PluginResolver = PluginResolver;
|
|
180
|
+
// Export singleton instance
|
|
181
|
+
exports.pluginResolver = new PluginResolver();
|
|
182
|
+
//# sourceMappingURL=plugin-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-resolver.js","sourceRoot":"","sources":["../../src/services/plugin-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,153 @@
|
|
|
1
|
+
import type { CraftDeskLock, LockEntry } from '../types/craftdesk-lock';
|
|
2
|
+
/**
|
|
3
|
+
* Information about a craft from the registry
|
|
4
|
+
*/
|
|
1
5
|
export interface CraftInfo {
|
|
2
6
|
name: string;
|
|
3
7
|
author: string;
|
|
4
8
|
version: string;
|
|
5
|
-
type: 'skill' | 'agent' | 'command' | 'hook';
|
|
9
|
+
type: 'skill' | 'agent' | 'command' | 'hook' | 'plugin' | 'collection';
|
|
6
10
|
description?: string;
|
|
7
11
|
dependencies?: Record<string, string>;
|
|
8
12
|
download_url?: string;
|
|
9
13
|
integrity?: string;
|
|
10
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Information about a registry user
|
|
17
|
+
*/
|
|
18
|
+
export interface UserInfo {
|
|
19
|
+
username: string;
|
|
20
|
+
email: string;
|
|
21
|
+
organization?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Response from dependency resolution API
|
|
25
|
+
*/
|
|
11
26
|
export interface ResolveResponse {
|
|
12
|
-
resolved: Record<string,
|
|
13
|
-
lockfile:
|
|
27
|
+
resolved: Record<string, LockEntry>;
|
|
28
|
+
lockfile: CraftDeskLock;
|
|
14
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Client for interacting with CraftDesk registry APIs
|
|
32
|
+
*
|
|
33
|
+
* Handles authentication, craft metadata retrieval, dependency resolution,
|
|
34
|
+
* and publishing operations with the CraftDesk registry server.
|
|
35
|
+
*/
|
|
15
36
|
export declare class RegistryClient {
|
|
16
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Get an authenticated HTTP client for a registry
|
|
39
|
+
*
|
|
40
|
+
* @param registryUrl - The registry URL to connect to
|
|
41
|
+
* @returns Configured axios instance
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
17
44
|
private getClient;
|
|
45
|
+
/**
|
|
46
|
+
* Get information about a craft from the registry
|
|
47
|
+
*
|
|
48
|
+
* @param craftName - Name of the craft (e.g., 'author/name')
|
|
49
|
+
* @param version - Optional specific version to fetch
|
|
50
|
+
* @param registryOverride - Optional registry URL to use instead of default
|
|
51
|
+
* @returns Craft information or null if not found
|
|
52
|
+
*/
|
|
18
53
|
getCraftInfo(craftName: string, version?: string, registryOverride?: string): Promise<CraftInfo | null>;
|
|
19
|
-
|
|
54
|
+
/**
|
|
55
|
+
* List all available versions of a craft
|
|
56
|
+
*
|
|
57
|
+
* @param craftName - Name of the craft to list versions for
|
|
58
|
+
* @returns Array of version strings
|
|
59
|
+
*/
|
|
20
60
|
listVersions(craftName: string): Promise<string[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve dependencies via the registry API
|
|
63
|
+
*
|
|
64
|
+
* @param dependencies - Map of craft names to version constraints
|
|
65
|
+
* @returns Resolved dependencies and lockfile or null on error
|
|
66
|
+
* @throws Error if no registry is configured
|
|
67
|
+
*/
|
|
21
68
|
resolveDependencies(dependencies: Record<string, string>): Promise<ResolveResponse | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Download a craft archive from a URL
|
|
71
|
+
*
|
|
72
|
+
* @param downloadUrl - URL to download the craft from
|
|
73
|
+
* @param outputPath - Local path to save the downloaded file
|
|
74
|
+
* @throws Error if download fails
|
|
75
|
+
*/
|
|
22
76
|
downloadCraft(downloadUrl: string, outputPath: string): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Search for crafts in the registry
|
|
79
|
+
*
|
|
80
|
+
* @param query - Search query string
|
|
81
|
+
* @param type - Optional filter by craft type
|
|
82
|
+
* @returns Array of matching crafts
|
|
83
|
+
* @throws Error if no registry is configured
|
|
84
|
+
*/
|
|
23
85
|
searchCrafts(query: string, type?: string): Promise<CraftInfo[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Create a new version for a craft
|
|
88
|
+
*
|
|
89
|
+
* @param author - Craft author
|
|
90
|
+
* @param name - Craft name
|
|
91
|
+
* @param data - Version data including files and metadata
|
|
92
|
+
* @param data.version - Semantic version string (e.g., "1.0.0")
|
|
93
|
+
* @param data.type - Type of craft (skill, agent, command, hook, plugin)
|
|
94
|
+
* @param data.description - Human-readable description of the craft
|
|
95
|
+
* @param data.main_file - Path to the main file (e.g., "SKILL.md")
|
|
96
|
+
* @param data.changelog - Markdown formatted changelog for this version
|
|
97
|
+
* @param data.files - Array of file objects with path and content properties
|
|
98
|
+
* @returns Response from the API
|
|
99
|
+
* @throws Error if authentication fails or craft creation fails
|
|
100
|
+
*/
|
|
101
|
+
createVersion(author: string, name: string, data: {
|
|
102
|
+
version: string;
|
|
103
|
+
type?: string;
|
|
104
|
+
description?: string;
|
|
105
|
+
main_file?: string;
|
|
106
|
+
changelog?: string;
|
|
107
|
+
files: Array<{
|
|
108
|
+
path: string;
|
|
109
|
+
content: string;
|
|
110
|
+
}>;
|
|
111
|
+
}): Promise<{
|
|
112
|
+
success: boolean;
|
|
113
|
+
download_url?: string;
|
|
114
|
+
[key: string]: unknown;
|
|
115
|
+
}>;
|
|
116
|
+
/**
|
|
117
|
+
* Publish a craft (change status to published)
|
|
118
|
+
*
|
|
119
|
+
* @param author - Craft author
|
|
120
|
+
* @param name - Craft name
|
|
121
|
+
* @param options - Publishing options (visibility)
|
|
122
|
+
* @param options.visibility - Visibility level: "public", "private", or "organization"
|
|
123
|
+
* @returns Response from the API
|
|
124
|
+
* @throws Error if authentication fails or craft not found
|
|
125
|
+
*/
|
|
126
|
+
publishCraft(author: string, name: string, options: {
|
|
127
|
+
visibility?: 'public' | 'private' | 'organization';
|
|
128
|
+
}): Promise<{
|
|
129
|
+
success: boolean;
|
|
130
|
+
[key: string]: unknown;
|
|
131
|
+
}>;
|
|
132
|
+
/**
|
|
133
|
+
* Verify an API token with a registry
|
|
134
|
+
*
|
|
135
|
+
* Calls GET /api/v1/me to validate the token and get user info
|
|
136
|
+
*
|
|
137
|
+
* @param registryUrl - The URL of the registry
|
|
138
|
+
* @param token - The API token to verify
|
|
139
|
+
* @returns User info if token is valid
|
|
140
|
+
* @throws Error if token is invalid or network error occurs
|
|
141
|
+
*/
|
|
142
|
+
verifyToken(registryUrl: string, token: string): Promise<UserInfo>;
|
|
143
|
+
/**
|
|
144
|
+
* Parse a craft name into author and name components
|
|
145
|
+
*
|
|
146
|
+
* @param craftName - Craft name in 'author/name' or '@author/name' format
|
|
147
|
+
* @returns Tuple of [author, name]
|
|
148
|
+
* @throws Error if craft name format is invalid
|
|
149
|
+
* @private
|
|
150
|
+
*/
|
|
24
151
|
private parseCraftName;
|
|
25
152
|
}
|
|
26
153
|
export declare const registryClient: RegistryClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-client.d.ts","sourceRoot":"","sources":["../../src/services/registry-client.ts"],"names":[],"mappings":"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"}
|