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
package/dist/commands/add.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'add' command for adding and installing a new dependency
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for adding crafts
|
|
6
|
+
*/
|
|
2
7
|
export declare function createAddCommand(): Command;
|
|
3
8
|
//# sourceMappingURL=add.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCpC;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAY1C"}
|
package/dist/commands/add.js
CHANGED
|
@@ -11,6 +11,16 @@ const logger_1 = require("../utils/logger");
|
|
|
11
11
|
const registry_client_1 = require("../services/registry-client");
|
|
12
12
|
const installer_1 = require("../services/installer");
|
|
13
13
|
const git_resolver_1 = require("../services/git-resolver");
|
|
14
|
+
const crypto_1 = require("../utils/crypto");
|
|
15
|
+
const plugin_resolver_1 = require("../services/plugin-resolver");
|
|
16
|
+
const craft_wrapper_1 = require("../services/craft-wrapper");
|
|
17
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
const os_1 = __importDefault(require("os"));
|
|
19
|
+
/**
|
|
20
|
+
* Creates the 'add' command for adding and installing a new dependency
|
|
21
|
+
*
|
|
22
|
+
* @returns Commander command instance configured for adding crafts
|
|
23
|
+
*/
|
|
14
24
|
function createAddCommand() {
|
|
15
25
|
return new commander_1.Command('add')
|
|
16
26
|
.description('Add a new dependency and install it')
|
|
@@ -19,6 +29,7 @@ function createAddCommand() {
|
|
|
19
29
|
.option('-O, --save-optional', 'Save as optionalDependency')
|
|
20
30
|
.option('-E, --save-exact', 'Save exact version')
|
|
21
31
|
.option('-t, --type <type>', 'Specify craft type (skill, agent, command, hook, plugin)')
|
|
32
|
+
.option('--as-plugin', 'Wrap individual craft as a plugin')
|
|
22
33
|
.action(async (craftArg, options) => {
|
|
23
34
|
await addCommand(craftArg, options);
|
|
24
35
|
});
|
|
@@ -86,7 +97,9 @@ async function addCommand(craftArg, options) {
|
|
|
86
97
|
// Use resolved information for the lock entry
|
|
87
98
|
const craftJson = resolvedGit.craftDeskJson;
|
|
88
99
|
// Determine type: explicit option > craftdesk.json > inferred > default
|
|
89
|
-
const craftType = options.type ||
|
|
100
|
+
const craftType = options.type ||
|
|
101
|
+
craftJson?.type ||
|
|
102
|
+
'skill';
|
|
90
103
|
lockEntry = {
|
|
91
104
|
version: craftJson?.version || gitInfo.tag || gitInfo.branch || 'HEAD',
|
|
92
105
|
resolved: gitInfo.url,
|
|
@@ -99,7 +112,7 @@ async function addCommand(craftArg, options) {
|
|
|
99
112
|
...(resolvedGit.resolvedCommit && { commit: resolvedGit.resolvedCommit }),
|
|
100
113
|
...(gitInfo.path && { path: gitInfo.path }),
|
|
101
114
|
...(gitInfo.file && { file: gitInfo.file }),
|
|
102
|
-
dependencies:
|
|
115
|
+
dependencies: {}
|
|
103
116
|
};
|
|
104
117
|
craftName = craftJson?.name || gitInfo.name || path_1.default.basename(gitInfo.url, '.git');
|
|
105
118
|
displayInfo = `${craftName}@${craftJson?.version || 'git'} from ${gitInfo.url}`;
|
|
@@ -123,10 +136,38 @@ async function addCommand(craftArg, options) {
|
|
|
123
136
|
logger_1.logger.succeedSpinner(`Found ${craftInfo.name}@${craftInfo.version}`);
|
|
124
137
|
const version = options.saveExact ? craftInfo.version : versionConstraint;
|
|
125
138
|
depValue = version;
|
|
139
|
+
// Require download_url from API - no localhost fallback for security
|
|
140
|
+
if (!craftInfo.download_url) {
|
|
141
|
+
logger_1.logger.failSpinner();
|
|
142
|
+
logger_1.logger.error(`Registry did not provide download URL for ${craftInfo.author}/${craftInfo.name}@${craftInfo.version}`);
|
|
143
|
+
logger_1.logger.error('The registry may be misconfigured or the craft version is incomplete.');
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const downloadUrl = craftInfo.download_url;
|
|
147
|
+
// Calculate checksum if not provided by API
|
|
148
|
+
let integrity = craftInfo.integrity;
|
|
149
|
+
if (!integrity) {
|
|
150
|
+
logger_1.logger.startSpinner('Computing checksum for security verification...');
|
|
151
|
+
const tempDir = path_1.default.join(os_1.default.tmpdir(), 'craftdesk-verify');
|
|
152
|
+
const tempFile = path_1.default.join(tempDir, `${craftInfo.name}-${craftInfo.version}.zip`);
|
|
153
|
+
try {
|
|
154
|
+
await fs_extra_1.default.ensureDir(tempDir);
|
|
155
|
+
// Download to temp location
|
|
156
|
+
await registry_client_1.registryClient.downloadCraft(downloadUrl, tempFile);
|
|
157
|
+
// Calculate checksum
|
|
158
|
+
integrity = await (0, crypto_1.calculateFileChecksum)(tempFile);
|
|
159
|
+
logger_1.logger.succeedSpinner(`Checksum computed: ${integrity.substring(0, 12)}...`);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
// Clean up temp file and directory
|
|
163
|
+
await fs_extra_1.default.remove(tempFile).catch(() => { }); // Ignore errors if file doesn't exist
|
|
164
|
+
await fs_extra_1.default.remove(tempDir).catch(() => { }); // Ignore errors if directory doesn't exist
|
|
165
|
+
}
|
|
166
|
+
}
|
|
126
167
|
lockEntry = {
|
|
127
168
|
version: craftInfo.version,
|
|
128
|
-
resolved:
|
|
129
|
-
integrity:
|
|
169
|
+
resolved: downloadUrl,
|
|
170
|
+
integrity: integrity,
|
|
130
171
|
type: craftInfo.type,
|
|
131
172
|
author: craftInfo.author,
|
|
132
173
|
dependencies: craftInfo.dependencies || {}
|
|
@@ -145,11 +186,13 @@ async function addCommand(craftArg, options) {
|
|
|
145
186
|
depField = 'dependencies';
|
|
146
187
|
}
|
|
147
188
|
// Initialize field if it doesn't exist
|
|
189
|
+
// Initialize dependencies field if it doesn't exist
|
|
148
190
|
if (!craftDeskJson[depField]) {
|
|
149
191
|
craftDeskJson[depField] = {};
|
|
150
192
|
}
|
|
151
|
-
// Add to craftdesk.json
|
|
152
|
-
craftDeskJson[depField]
|
|
193
|
+
// Add to craftdesk.json (depField is guaranteed to exist after initialization)
|
|
194
|
+
const deps = craftDeskJson[depField];
|
|
195
|
+
deps[craftName] = depValue;
|
|
153
196
|
// Save craftdesk.json
|
|
154
197
|
await (0, file_system_1.writeCraftDeskJson)(craftDeskJson);
|
|
155
198
|
const displayVersion = typeof depValue === 'string' ? depValue : (depValue.tag || depValue.branch || 'git');
|
|
@@ -158,6 +201,13 @@ async function addCommand(craftArg, options) {
|
|
|
158
201
|
logger_1.logger.startSpinner(`Installing ${craftName}...`);
|
|
159
202
|
await installer_1.installer.installCraft(craftName, lockEntry);
|
|
160
203
|
logger_1.logger.succeedSpinner(`Installed ${displayInfo}`);
|
|
204
|
+
// Determine craft installation directory
|
|
205
|
+
const typeDir = lockEntry.type === 'skill' ? 'skills' :
|
|
206
|
+
lockEntry.type === 'agent' ? 'agents' :
|
|
207
|
+
lockEntry.type === 'command' ? 'commands' :
|
|
208
|
+
lockEntry.type === 'hook' ? 'hooks' :
|
|
209
|
+
lockEntry.type === 'plugin' ? 'plugins' : 'crafts';
|
|
210
|
+
const craftDir = path_1.default.join('.claude', typeDir, craftName);
|
|
161
211
|
// Update craftdesk.lock
|
|
162
212
|
let lockfile = await (0, file_system_1.readCraftDeskLock)();
|
|
163
213
|
if (!lockfile) {
|
|
@@ -168,14 +218,39 @@ async function addCommand(craftArg, options) {
|
|
|
168
218
|
crafts: {}
|
|
169
219
|
};
|
|
170
220
|
}
|
|
221
|
+
// Check for --as-plugin flag: wrap individual craft as plugin
|
|
222
|
+
if (options.asPlugin && lockEntry.type !== 'plugin') {
|
|
223
|
+
try {
|
|
224
|
+
await handleCraftWrapping(craftName, lockEntry, craftDir);
|
|
225
|
+
// Update lock entry to reflect it's wrapped
|
|
226
|
+
lockEntry.installedAs = 'wrapped';
|
|
227
|
+
lockEntry.wrappedBy = `${craftName}-plugin`;
|
|
228
|
+
logger_1.logger.success(`Wrapped ${craftName} as plugin successfully!`);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
232
|
+
logger_1.logger.error(`Failed to wrap craft: ${message}`);
|
|
233
|
+
// Continue with normal installation
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Check if installed craft is a plugin - handle plugin dependencies
|
|
237
|
+
if (lockEntry.type === 'plugin' && await fs_extra_1.default.pathExists(craftDir)) {
|
|
238
|
+
const pluginDetected = await isPlugin(craftDir);
|
|
239
|
+
if (pluginDetected) {
|
|
240
|
+
logger_1.logger.info('Plugin detected - resolving dependencies...');
|
|
241
|
+
await handlePluginInstall(craftName, lockEntry, craftDir, lockfile);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
171
244
|
// Add or update the craft in the lockfile
|
|
172
245
|
lockfile.crafts[craftName] = lockEntry;
|
|
246
|
+
lockfile.generatedAt = new Date().toISOString();
|
|
173
247
|
await (0, file_system_1.writeCraftDeskLock)(lockfile);
|
|
174
248
|
logger_1.logger.success('Craft added successfully!');
|
|
175
249
|
}
|
|
176
250
|
catch (error) {
|
|
177
251
|
logger_1.logger.failSpinner();
|
|
178
|
-
|
|
252
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
253
|
+
logger_1.logger.error(`Failed to add craft: ${message}`);
|
|
179
254
|
process.exit(1);
|
|
180
255
|
}
|
|
181
256
|
}
|
|
@@ -241,7 +316,7 @@ function normalizeGitHubUrl(url) {
|
|
|
241
316
|
function parseGitUrl(urlString) {
|
|
242
317
|
// Remove optional git+ prefix (npm-style format)
|
|
243
318
|
let url = urlString.replace(/^git\+/, '');
|
|
244
|
-
const result = {};
|
|
319
|
+
const result = { url: '' };
|
|
245
320
|
// Extract direct file path (e.g., #file:rspec-agent.md)
|
|
246
321
|
if (url.includes('#file:')) {
|
|
247
322
|
const [baseUrl, filePart] = url.split('#file:');
|
|
@@ -281,4 +356,227 @@ function parseGitUrl(urlString) {
|
|
|
281
356
|
}
|
|
282
357
|
return result;
|
|
283
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Detect if a craft is a plugin by checking for .claude-plugin/plugin.json or PLUGIN.md
|
|
361
|
+
*
|
|
362
|
+
* @param craftDir - Path to the craft installation directory
|
|
363
|
+
* @returns Promise resolving to true if plugin detected, false otherwise
|
|
364
|
+
*/
|
|
365
|
+
async function isPlugin(craftDir) {
|
|
366
|
+
try {
|
|
367
|
+
const hasPluginJson = await fs_extra_1.default.pathExists(path_1.default.join(craftDir, '.claude-plugin', 'plugin.json'));
|
|
368
|
+
const hasPluginMd = await fs_extra_1.default.pathExists(path_1.default.join(craftDir, 'PLUGIN.md'));
|
|
369
|
+
return hasPluginJson || hasPluginMd;
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Handle plugin installation with dependency resolution
|
|
377
|
+
*
|
|
378
|
+
* @param craftName - Name of the craft/plugin being installed
|
|
379
|
+
* @param lockEntry - Lock entry containing version and dependency information
|
|
380
|
+
* @param craftDir - Path to the craft installation directory
|
|
381
|
+
* @param lockfile - Current lockfile object to update with resolved dependencies
|
|
382
|
+
* @returns Promise that resolves when plugin and dependencies are installed
|
|
383
|
+
*/
|
|
384
|
+
async function handlePluginInstall(craftName, lockEntry, craftDir, lockfile) {
|
|
385
|
+
logger_1.logger.startSpinner('Resolving plugin dependencies...');
|
|
386
|
+
try {
|
|
387
|
+
// Resolve plugin dependencies
|
|
388
|
+
await plugin_resolver_1.pluginResolver.resolvePluginDependencies(craftDir, undefined);
|
|
389
|
+
const pluginTree = plugin_resolver_1.pluginResolver.buildPluginTree();
|
|
390
|
+
const flattenedDeps = plugin_resolver_1.pluginResolver.getFlattenedDependencies();
|
|
391
|
+
logger_1.logger.succeedSpinner(`Resolved ${Object.keys(flattenedDeps).length} total dependencies`);
|
|
392
|
+
// Add plugin tree to lockfile
|
|
393
|
+
if (!lockfile.pluginTree) {
|
|
394
|
+
lockfile.pluginTree = {};
|
|
395
|
+
}
|
|
396
|
+
lockfile.pluginTree[craftName] = pluginTree[craftName];
|
|
397
|
+
// Install plugin dependencies
|
|
398
|
+
for (const [depName, depInfo] of Object.entries(flattenedDeps)) {
|
|
399
|
+
if (depName === craftName)
|
|
400
|
+
continue; // Skip self
|
|
401
|
+
// Check if dependency is already in lockfile
|
|
402
|
+
if (lockfile.crafts[depName]) {
|
|
403
|
+
logger_1.logger.debug(`Dependency ${depName} already installed`);
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
logger_1.logger.info(`Installing plugin dependency: ${depName}...`);
|
|
407
|
+
try {
|
|
408
|
+
await installPluginDependency(depName, depInfo, lockfile);
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
412
|
+
logger_1.logger.error(`Failed to install ${depName}: ${message}`);
|
|
413
|
+
throw new Error(`Plugin dependency installation failed: ${depName}`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// Reset plugin resolver for next use
|
|
417
|
+
plugin_resolver_1.pluginResolver.reset();
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
logger_1.logger.failSpinner();
|
|
421
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
422
|
+
logger_1.logger.warn(`Failed to resolve plugin dependencies: ${message}`);
|
|
423
|
+
logger_1.logger.info('Plugin installed but dependencies may need manual installation');
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Install a single plugin dependency
|
|
428
|
+
*
|
|
429
|
+
* @param depName - Name of the dependency to install
|
|
430
|
+
* @param depInfo - Dependency specification (version string, git object, or registry object)
|
|
431
|
+
* @param lockfile - Current lockfile object to update with the new dependency
|
|
432
|
+
* @returns Promise that resolves when dependency is installed
|
|
433
|
+
*/
|
|
434
|
+
async function installPluginDependency(depName, depInfo, lockfile) {
|
|
435
|
+
let depLockEntry;
|
|
436
|
+
// Handle different dependency formats
|
|
437
|
+
if (typeof depInfo === 'string') {
|
|
438
|
+
// Simple version string like "^1.5.0" - fetch from registry
|
|
439
|
+
const craftInfo = await registry_client_1.registryClient.getCraftInfo(depName, depInfo);
|
|
440
|
+
if (!craftInfo) {
|
|
441
|
+
throw new Error(`Craft '${depName}' not found in registry`);
|
|
442
|
+
}
|
|
443
|
+
if (!craftInfo.download_url) {
|
|
444
|
+
throw new Error(`Registry did not provide download URL for ${depName}@${craftInfo.version}`);
|
|
445
|
+
}
|
|
446
|
+
// Calculate checksum if not provided by API
|
|
447
|
+
let integrity = craftInfo.integrity;
|
|
448
|
+
if (!integrity) {
|
|
449
|
+
logger_1.logger.debug(`Computing checksum for ${depName}...`);
|
|
450
|
+
const tempDir = path_1.default.join(os_1.default.tmpdir(), 'craftdesk-verify');
|
|
451
|
+
const tempFile = path_1.default.join(tempDir, `${craftInfo.name}-${craftInfo.version}.zip`);
|
|
452
|
+
try {
|
|
453
|
+
await fs_extra_1.default.ensureDir(tempDir);
|
|
454
|
+
await registry_client_1.registryClient.downloadCraft(craftInfo.download_url, tempFile);
|
|
455
|
+
integrity = await (0, crypto_1.calculateFileChecksum)(tempFile);
|
|
456
|
+
}
|
|
457
|
+
finally {
|
|
458
|
+
await fs_extra_1.default.remove(tempFile).catch(() => { });
|
|
459
|
+
await fs_extra_1.default.remove(tempDir).catch(() => { });
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
depLockEntry = {
|
|
463
|
+
version: craftInfo.version,
|
|
464
|
+
resolved: craftInfo.download_url,
|
|
465
|
+
integrity: integrity,
|
|
466
|
+
type: craftInfo.type,
|
|
467
|
+
author: craftInfo.author,
|
|
468
|
+
dependencies: craftInfo.dependencies || {},
|
|
469
|
+
installedAs: 'dependency'
|
|
470
|
+
};
|
|
471
|
+
logger_1.logger.success(`Resolved ${depName}@${craftInfo.version}`);
|
|
472
|
+
}
|
|
473
|
+
else if (depInfo.git) {
|
|
474
|
+
// Git dependency
|
|
475
|
+
const gitInfo = {
|
|
476
|
+
url: depInfo.git,
|
|
477
|
+
branch: depInfo.branch,
|
|
478
|
+
tag: depInfo.tag,
|
|
479
|
+
commit: depInfo.commit,
|
|
480
|
+
path: depInfo.path,
|
|
481
|
+
file: depInfo.file,
|
|
482
|
+
name: depName
|
|
483
|
+
};
|
|
484
|
+
const resolvedGit = await git_resolver_1.gitResolver.resolveGitDependency(gitInfo);
|
|
485
|
+
const craftJson = resolvedGit.craftDeskJson;
|
|
486
|
+
const craftType = craftJson?.type || 'skill';
|
|
487
|
+
depLockEntry = {
|
|
488
|
+
version: craftJson?.version || gitInfo.tag || gitInfo.branch || 'HEAD',
|
|
489
|
+
resolved: gitInfo.url,
|
|
490
|
+
integrity: resolvedGit.resolvedCommit || 'git',
|
|
491
|
+
type: craftType,
|
|
492
|
+
author: craftJson?.author || 'git',
|
|
493
|
+
git: gitInfo.url,
|
|
494
|
+
...(gitInfo.branch && { branch: gitInfo.branch }),
|
|
495
|
+
...(gitInfo.tag && { tag: gitInfo.tag }),
|
|
496
|
+
...(resolvedGit.resolvedCommit && { commit: resolvedGit.resolvedCommit }),
|
|
497
|
+
...(gitInfo.path && { path: gitInfo.path }),
|
|
498
|
+
...(gitInfo.file && { file: gitInfo.file }),
|
|
499
|
+
dependencies: {},
|
|
500
|
+
installedAs: 'dependency'
|
|
501
|
+
};
|
|
502
|
+
logger_1.logger.success(`Resolved ${depName} from git`);
|
|
503
|
+
}
|
|
504
|
+
else if (depInfo.registry) {
|
|
505
|
+
// Custom registry
|
|
506
|
+
const craftInfo = await registry_client_1.registryClient.getCraftInfo(depName, depInfo.version, depInfo.registry);
|
|
507
|
+
if (!craftInfo) {
|
|
508
|
+
throw new Error(`Craft '${depName}' not found in custom registry`);
|
|
509
|
+
}
|
|
510
|
+
if (!craftInfo.download_url) {
|
|
511
|
+
throw new Error(`Registry did not provide download URL for ${depName}@${craftInfo.version}`);
|
|
512
|
+
}
|
|
513
|
+
// Calculate checksum if not provided
|
|
514
|
+
let integrity = craftInfo.integrity;
|
|
515
|
+
if (!integrity) {
|
|
516
|
+
logger_1.logger.debug(`Computing checksum for ${depName}...`);
|
|
517
|
+
const tempDir = path_1.default.join(os_1.default.tmpdir(), 'craftdesk-verify');
|
|
518
|
+
const tempFile = path_1.default.join(tempDir, `${craftInfo.name}-${craftInfo.version}.zip`);
|
|
519
|
+
try {
|
|
520
|
+
await fs_extra_1.default.ensureDir(tempDir);
|
|
521
|
+
await registry_client_1.registryClient.downloadCraft(craftInfo.download_url, tempFile);
|
|
522
|
+
integrity = await (0, crypto_1.calculateFileChecksum)(tempFile);
|
|
523
|
+
}
|
|
524
|
+
finally {
|
|
525
|
+
await fs_extra_1.default.remove(tempFile).catch(() => { });
|
|
526
|
+
await fs_extra_1.default.remove(tempDir).catch(() => { });
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
depLockEntry = {
|
|
530
|
+
version: craftInfo.version,
|
|
531
|
+
resolved: craftInfo.download_url,
|
|
532
|
+
integrity: integrity,
|
|
533
|
+
type: craftInfo.type,
|
|
534
|
+
author: craftInfo.author,
|
|
535
|
+
dependencies: craftInfo.dependencies || {},
|
|
536
|
+
installedAs: 'dependency'
|
|
537
|
+
};
|
|
538
|
+
logger_1.logger.success(`Resolved ${depName}@${craftInfo.version} from custom registry`);
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
throw new Error(`Unknown dependency format for ${depName}`);
|
|
542
|
+
}
|
|
543
|
+
// Add to lockfile
|
|
544
|
+
lockfile.crafts[depName] = depLockEntry;
|
|
545
|
+
// Install the craft
|
|
546
|
+
await installer_1.installer.installCraft(depName, depLockEntry);
|
|
547
|
+
// If this dependency is also a plugin, recursively resolve its dependencies
|
|
548
|
+
const depDir = path_1.default.join(installer_1.installer.getInstallPath(), installer_1.installer.getTypeDirectory(depLockEntry.type), depName);
|
|
549
|
+
const isDepPlugin = await isPlugin(depDir);
|
|
550
|
+
if (isDepPlugin) {
|
|
551
|
+
logger_1.logger.debug(`Dependency ${depName} is a plugin, resolving its dependencies...`);
|
|
552
|
+
await handlePluginInstall(depName, depLockEntry, depDir, lockfile);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Handle --as-plugin flag: wrap craft as plugin
|
|
557
|
+
*
|
|
558
|
+
* @param craftName - Name of the craft to wrap
|
|
559
|
+
* @param lockEntry - Lock entry containing craft metadata
|
|
560
|
+
* @param craftDir - Path to the craft installation directory
|
|
561
|
+
* @returns Promise resolving to the wrapped plugin directory path
|
|
562
|
+
*/
|
|
563
|
+
async function handleCraftWrapping(craftName, lockEntry, craftDir) {
|
|
564
|
+
logger_1.logger.startSpinner(`Wrapping ${craftName} as plugin...`);
|
|
565
|
+
try {
|
|
566
|
+
const wrappedDir = await craft_wrapper_1.craftWrapper.wrapCraft({
|
|
567
|
+
craftName,
|
|
568
|
+
craftType: lockEntry.type,
|
|
569
|
+
craftPath: craftDir,
|
|
570
|
+
version: lockEntry.version,
|
|
571
|
+
author: lockEntry.author || 'unknown'
|
|
572
|
+
});
|
|
573
|
+
logger_1.logger.succeedSpinner(`Wrapped as plugin: ${craftName}-plugin`);
|
|
574
|
+
return wrappedDir;
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
logger_1.logger.failSpinner();
|
|
578
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
579
|
+
throw new Error(`Failed to wrap craft as plugin: ${message}`);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
284
582
|
//# sourceMappingURL=add.js.map
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAqK9C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createConvertCommand = createConvertCommand;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
11
|
+
const converter_1 = require("../services/converter");
|
|
12
|
+
/**
|
|
13
|
+
* Create the convert command for format conversion
|
|
14
|
+
*
|
|
15
|
+
* @returns The configured convert command
|
|
16
|
+
*/
|
|
17
|
+
function createConvertCommand() {
|
|
18
|
+
const command = new commander_1.Command('convert');
|
|
19
|
+
command
|
|
20
|
+
.description('Convert crafts to other AI editor formats')
|
|
21
|
+
.argument('[craft-path]', 'Path to craft directory to convert (default: current directory)')
|
|
22
|
+
.option('-t, --to <format>', 'Target format: cursor, cursor-legacy, continue')
|
|
23
|
+
.option('-o, --output <dir>', 'Output directory (default: format-specific default)')
|
|
24
|
+
.option('-a, --all', 'Convert all installed crafts from .claude/ directory')
|
|
25
|
+
.option('--claude-dir <dir>', 'Claude directory path (default: .claude)', '.claude')
|
|
26
|
+
.option('-m, --merge-mode <mode>', 'How to handle existing files: overwrite, append, skip', 'overwrite')
|
|
27
|
+
.option('--list-formats', 'List supported output formats')
|
|
28
|
+
.action(async (craftPath, options) => {
|
|
29
|
+
try {
|
|
30
|
+
const converterService = new converter_1.ConverterService();
|
|
31
|
+
// List formats
|
|
32
|
+
if (options.listFormats) {
|
|
33
|
+
logger_1.logger.info('Supported output formats:');
|
|
34
|
+
const formats = converterService.getSupportedFormats();
|
|
35
|
+
formats.forEach(({ format, description }) => {
|
|
36
|
+
logger_1.logger.info(` ${format.padEnd(20)} - ${description}`);
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// Validate required options
|
|
41
|
+
if (!options.to) {
|
|
42
|
+
logger_1.logger.error('Error: --to <format> is required');
|
|
43
|
+
logger_1.logger.info('Use --list-formats to see available formats');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
// Validate format
|
|
47
|
+
const supportedFormats = converterService.getSupportedFormats().map(f => f.format);
|
|
48
|
+
if (!supportedFormats.includes(options.to)) {
|
|
49
|
+
logger_1.logger.error(`Error: Unsupported format '${options.to}'`);
|
|
50
|
+
logger_1.logger.info(`Supported formats: ${supportedFormats.join(', ')}`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// Build conversion options
|
|
54
|
+
const conversionOptions = {
|
|
55
|
+
format: options.to,
|
|
56
|
+
outputDir: options.output,
|
|
57
|
+
mergeMode: options.mergeMode
|
|
58
|
+
};
|
|
59
|
+
// Convert all installed crafts
|
|
60
|
+
if (options.all) {
|
|
61
|
+
logger_1.logger.info(`Converting all installed crafts to ${options.to} format...`);
|
|
62
|
+
const claudeDir = path_1.default.resolve(process.cwd(), options.claudeDir || '.claude');
|
|
63
|
+
if (!await fs_extra_1.default.pathExists(claudeDir)) {
|
|
64
|
+
logger_1.logger.error(`Error: Claude directory not found: ${claudeDir}`);
|
|
65
|
+
logger_1.logger.info('Make sure you have crafts installed in .claude/ directory');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const results = await converterService.convertAllInstalled(claudeDir, conversionOptions, options.output);
|
|
69
|
+
// Display results
|
|
70
|
+
const successful = results.filter(r => r.result.success).length;
|
|
71
|
+
const failed = results.filter(r => !r.result.success).length;
|
|
72
|
+
logger_1.logger.info(`\nConversion complete:`);
|
|
73
|
+
logger_1.logger.info(` ✓ ${successful} crafts converted successfully`);
|
|
74
|
+
if (failed > 0) {
|
|
75
|
+
logger_1.logger.error(` ✗ ${failed} crafts failed`);
|
|
76
|
+
}
|
|
77
|
+
// Show details for failed conversions
|
|
78
|
+
results.forEach(({ craft, result }) => {
|
|
79
|
+
if (!result.success) {
|
|
80
|
+
logger_1.logger.error(`\n${craft}:`);
|
|
81
|
+
result.errors.forEach(error => logger_1.logger.error(` - ${error}`));
|
|
82
|
+
}
|
|
83
|
+
else if (result.warnings.length > 0) {
|
|
84
|
+
logger_1.logger.warn(`\n${craft} (warnings):`);
|
|
85
|
+
result.warnings.forEach(warning => logger_1.logger.warn(` - ${warning}`));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Show output location
|
|
89
|
+
if (successful > 0) {
|
|
90
|
+
const outputDir = options.output || results[0]?.result.files[0] ?
|
|
91
|
+
path_1.default.dirname(results[0].result.files[0].filePath) :
|
|
92
|
+
'default location';
|
|
93
|
+
logger_1.logger.info(`\nConverted files written to: ${outputDir}`);
|
|
94
|
+
}
|
|
95
|
+
if (failed > 0) {
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Convert single craft
|
|
101
|
+
const targetPath = craftPath ? path_1.default.resolve(process.cwd(), craftPath) : process.cwd();
|
|
102
|
+
if (!await fs_extra_1.default.pathExists(targetPath)) {
|
|
103
|
+
logger_1.logger.error(`Error: Path not found: ${targetPath}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const stat = await fs_extra_1.default.stat(targetPath);
|
|
107
|
+
if (!stat.isDirectory()) {
|
|
108
|
+
logger_1.logger.error(`Error: Path must be a directory: ${targetPath}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
logger_1.logger.info(`Converting craft to ${options.to} format...`);
|
|
112
|
+
const result = await converterService.convertAndWrite(targetPath, conversionOptions, options.output);
|
|
113
|
+
// Display result
|
|
114
|
+
if (result.success) {
|
|
115
|
+
logger_1.logger.success('✓ Conversion successful');
|
|
116
|
+
logger_1.logger.info(`\nGenerated ${result.files.length} file(s):`);
|
|
117
|
+
result.files.forEach(file => {
|
|
118
|
+
const outputPath = options.output ?
|
|
119
|
+
path_1.default.join(options.output, file.filePath) :
|
|
120
|
+
file.filePath;
|
|
121
|
+
logger_1.logger.info(` - ${outputPath} (${file.type})`);
|
|
122
|
+
});
|
|
123
|
+
if (result.warnings.length > 0) {
|
|
124
|
+
logger_1.logger.warn('\nWarnings:');
|
|
125
|
+
result.warnings.forEach(warning => logger_1.logger.warn(` - ${warning}`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
logger_1.logger.error('✗ Conversion failed');
|
|
130
|
+
logger_1.logger.error('\nErrors:');
|
|
131
|
+
result.errors.forEach(error => logger_1.logger.error(` - ${error}`));
|
|
132
|
+
if (result.warnings.length > 0) {
|
|
133
|
+
logger_1.logger.warn('\nWarnings:');
|
|
134
|
+
result.warnings.forEach(warning => logger_1.logger.warn(` - ${warning}`));
|
|
135
|
+
}
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
logger_1.logger.error(`Error during conversion: ${error instanceof Error ? error.message : String(error)}`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return command;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"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"}
|