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,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createInfoCommand = createInfoCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const registry_client_1 = require("../services/registry-client");
|
|
6
|
+
const logger_1 = require("../utils/logger");
|
|
7
|
+
/**
|
|
8
|
+
* Creates the 'info' command for displaying detailed craft information
|
|
9
|
+
*
|
|
10
|
+
* @returns Commander command instance configured for showing craft info
|
|
11
|
+
*/
|
|
12
|
+
function createInfoCommand() {
|
|
13
|
+
return new commander_1.Command('info')
|
|
14
|
+
.description('Show detailed information about a craft')
|
|
15
|
+
.argument('<craft>', 'Craft name (author/name format)')
|
|
16
|
+
.option('--json', 'Output as JSON')
|
|
17
|
+
.action(async (craftName, options) => {
|
|
18
|
+
await infoCommand(craftName, options);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async function infoCommand(craftName, options) {
|
|
22
|
+
try {
|
|
23
|
+
logger_1.logger.startSpinner(`Fetching info for ${craftName}...`);
|
|
24
|
+
const craftInfo = await registry_client_1.registryClient.getCraftInfo(craftName);
|
|
25
|
+
if (!craftInfo) {
|
|
26
|
+
logger_1.logger.failSpinner(`Craft '${craftName}' not found in registry`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
logger_1.logger.succeedSpinner(`Found ${craftInfo.author}/${craftInfo.name}`);
|
|
30
|
+
if (options.json) {
|
|
31
|
+
console.log(JSON.stringify(craftInfo, null, 2));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log('');
|
|
35
|
+
console.log(` Name: ${craftInfo.author}/${craftInfo.name}`);
|
|
36
|
+
console.log(` Version: ${craftInfo.version}`);
|
|
37
|
+
console.log(` Type: ${craftInfo.type}`);
|
|
38
|
+
if (craftInfo.description) {
|
|
39
|
+
console.log(` Description: ${craftInfo.description}`);
|
|
40
|
+
}
|
|
41
|
+
// Fetch available versions
|
|
42
|
+
logger_1.logger.startSpinner('Fetching available versions...');
|
|
43
|
+
const versions = await registry_client_1.registryClient.listVersions(craftName);
|
|
44
|
+
logger_1.logger.succeedSpinner('');
|
|
45
|
+
if (versions && versions.length > 0) {
|
|
46
|
+
console.log(` Available versions: ${versions.join(', ')}`);
|
|
47
|
+
}
|
|
48
|
+
if (craftInfo.dependencies && Object.keys(craftInfo.dependencies).length > 0) {
|
|
49
|
+
console.log('\n Dependencies:');
|
|
50
|
+
for (const [dep, version] of Object.entries(craftInfo.dependencies)) {
|
|
51
|
+
console.log(` - ${dep}: ${version}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
console.log('');
|
|
55
|
+
console.log(`To install: craftdesk add ${craftInfo.author}/${craftInfo.name}`);
|
|
56
|
+
console.log(`To install specific version: craftdesk add ${craftInfo.author}/${craftInfo.name}@${craftInfo.version}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger_1.logger.failSpinner();
|
|
61
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
62
|
+
logger_1.logger.error(`Failed to get craft info: ${message}`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'init' command for initializing a new craftdesk.json file
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for project initialization
|
|
6
|
+
*/
|
|
2
7
|
export declare function createInitCommand(): Command;
|
|
3
8
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAa3C"}
|
package/dist/commands/init.js
CHANGED
|
@@ -8,13 +8,18 @@ const commander_1 = require("commander");
|
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const file_system_1 = require("../utils/file-system");
|
|
10
10
|
const logger_1 = require("../utils/logger");
|
|
11
|
+
/**
|
|
12
|
+
* Creates the 'init' command for initializing a new craftdesk.json file
|
|
13
|
+
*
|
|
14
|
+
* @returns Commander command instance configured for project initialization
|
|
15
|
+
*/
|
|
11
16
|
function createInitCommand() {
|
|
12
17
|
return new commander_1.Command('init')
|
|
13
18
|
.description('Initialize a new craftdesk.json file')
|
|
14
19
|
.option('-y, --yes', 'Skip prompts and use defaults')
|
|
15
20
|
.option('-n, --name <name>', 'Project name')
|
|
16
21
|
.option('--project-version <version>', 'Project version', '1.0.0')
|
|
17
|
-
.option('-t, --type <type>', 'Project type (skill, agent, command, hook)', 'skill')
|
|
22
|
+
.option('-t, --type <type>', 'Project type (skill, agent, command, hook, plugin)', 'skill')
|
|
18
23
|
.option('-d, --description <desc>', 'Project description')
|
|
19
24
|
.option('-a, --author <author>', 'Author name')
|
|
20
25
|
.option('-l, --license <license>', 'License', 'MIT')
|
|
@@ -31,7 +36,7 @@ async function initCommand(options) {
|
|
|
31
36
|
}
|
|
32
37
|
const config = {
|
|
33
38
|
name: options.name || path_1.default.basename(process.cwd()),
|
|
34
|
-
version: options.projectVersion,
|
|
39
|
+
version: options.projectVersion || '1.0.0',
|
|
35
40
|
type: options.type,
|
|
36
41
|
description: options.description || undefined,
|
|
37
42
|
author: options.author || undefined,
|
|
@@ -50,7 +55,8 @@ async function initCommand(options) {
|
|
|
50
55
|
logger_1.logger.info('Run "craftdesk add <craft>" to add dependencies');
|
|
51
56
|
}
|
|
52
57
|
catch (error) {
|
|
53
|
-
|
|
58
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
59
|
+
logger_1.logger.error(`Failed to initialize: ${message}`);
|
|
54
60
|
process.exit(1);
|
|
55
61
|
}
|
|
56
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;AAwBA,8CAaC;AArCD,yCAAoC;AACpC,gDAAwB;AAExB,sDAAkE;AAClE,4CAAyC;AAezC;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;SAC3C,MAAM,CAAC,6BAA6B,EAAE,iBAAiB,EAAE,OAAO,CAAC;SACjE,MAAM,CAAC,mBAAmB,EAAE,oDAAoD,EAAE,OAAO,CAAC;SAC1F,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;SACzD,MAAM,CAAC,uBAAuB,EAAE,aAAa,CAAC;SAC9C,MAAM,CAAC,yBAAyB,EAAE,SAAS,EAAE,KAAK,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAA2B;IACpD,IAAI,CAAC;QACH,yCAAyC;QACzC,IAAI,MAAM,IAAA,oBAAM,EAAC,gBAAgB,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAkB;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,OAAO;YAC1C,IAAI,EAAE,OAAO,CAAC,IAAoF;YAClG,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;YAC7C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,SAAS;YACrC,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,GAAG,EAAE,sBAAsB;iBAC5B;aACF;SACF,CAAC;QAEF,uBAAuB;QACvB,MAAM,IAAA,gCAAkB,EAAC,MAAM,CAAC,CAAC;QAEjC,eAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACzC,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,eAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'install' command for installing all dependencies from craftdesk.json
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for dependency installation
|
|
6
|
+
*/
|
|
2
7
|
export declare function createInstallCommand(): Command;
|
|
3
8
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAQ9C"}
|
package/dist/commands/install.js
CHANGED
|
@@ -7,6 +7,11 @@ const logger_1 = require("../utils/logger");
|
|
|
7
7
|
const registry_client_1 = require("../services/registry-client");
|
|
8
8
|
const git_resolver_1 = require("../services/git-resolver");
|
|
9
9
|
const installer_1 = require("../services/installer");
|
|
10
|
+
/**
|
|
11
|
+
* Creates the 'install' command for installing all dependencies from craftdesk.json
|
|
12
|
+
*
|
|
13
|
+
* @returns Commander command instance configured for dependency installation
|
|
14
|
+
*/
|
|
10
15
|
function createInstallCommand() {
|
|
11
16
|
return new commander_1.Command('install')
|
|
12
17
|
.description('Install all dependencies from craftdesk.json')
|
|
@@ -34,6 +39,13 @@ async function installCommand(options) {
|
|
|
34
39
|
if (lockfile) {
|
|
35
40
|
// Install from lockfile
|
|
36
41
|
logger_1.logger.info('Installing from craftdesk.lock...');
|
|
42
|
+
// Show plugin tree info if present
|
|
43
|
+
if (lockfile.pluginTree && Object.keys(lockfile.pluginTree).length > 0) {
|
|
44
|
+
const pluginCount = Object.keys(lockfile.pluginTree).length;
|
|
45
|
+
const directPlugins = Object.values(lockfile.pluginTree).filter(p => !p.isDependency).length;
|
|
46
|
+
const depPlugins = pluginCount - directPlugins;
|
|
47
|
+
logger_1.logger.info(`Plugin dependencies: ${directPlugins} direct, ${depPlugins} transitive`);
|
|
48
|
+
}
|
|
37
49
|
logger_1.logger.startSpinner('Installing crafts...');
|
|
38
50
|
await installer_1.installer.installFromLockfile(lockfile);
|
|
39
51
|
logger_1.logger.success('Installation complete!');
|
|
@@ -63,13 +75,20 @@ async function installCommand(options) {
|
|
|
63
75
|
// For registry dependencies that need resolution, fetch their info
|
|
64
76
|
logger_1.logger.startSpinner('Fetching registry crafts...');
|
|
65
77
|
for (const [name, entry] of Object.entries(resolution.resolved)) {
|
|
66
|
-
if
|
|
78
|
+
// Check if this is a registry dependency that needs resolution
|
|
79
|
+
if (entry.resolved === 'registry' && entry.integrity === 'pending') {
|
|
67
80
|
const craftInfo = await registry_client_1.registryClient.getCraftInfo(name, entry.version, entry.registry);
|
|
68
81
|
if (craftInfo) {
|
|
82
|
+
// Require download_url from registry - no defaults for security
|
|
83
|
+
if (!craftInfo.download_url) {
|
|
84
|
+
logger_1.logger.failSpinner();
|
|
85
|
+
logger_1.logger.error(`Registry did not provide download URL for ${name}@${craftInfo.version}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
69
88
|
resolution.resolved[name] = {
|
|
70
89
|
version: craftInfo.version,
|
|
71
|
-
resolved: craftInfo.download_url
|
|
72
|
-
integrity: craftInfo.integrity || 'sha256-
|
|
90
|
+
resolved: craftInfo.download_url,
|
|
91
|
+
integrity: craftInfo.integrity || 'sha256-pending',
|
|
73
92
|
type: craftInfo.type,
|
|
74
93
|
author: craftInfo.author,
|
|
75
94
|
dependencies: craftInfo.dependencies || {}
|
|
@@ -101,8 +120,9 @@ async function installCommand(options) {
|
|
|
101
120
|
}
|
|
102
121
|
}
|
|
103
122
|
catch (error) {
|
|
123
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
104
124
|
logger_1.logger.failSpinner();
|
|
105
|
-
logger_1.logger.error(`Installation failed: ${
|
|
125
|
+
logger_1.logger.error(`Installation failed: ${message}`);
|
|
106
126
|
process.exit(1);
|
|
107
127
|
}
|
|
108
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/list.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'list' command for listing installed crafts
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for listing crafts
|
|
6
|
+
*/
|
|
2
7
|
export declare function createListCommand(): Command;
|
|
3
8
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAS3C"}
|
package/dist/commands/list.js
CHANGED
|
@@ -5,6 +5,11 @@ const commander_1 = require("commander");
|
|
|
5
5
|
const file_system_1 = require("../utils/file-system");
|
|
6
6
|
const logger_1 = require("../utils/logger");
|
|
7
7
|
const installer_1 = require("../services/installer");
|
|
8
|
+
/**
|
|
9
|
+
* Creates the 'list' command for listing installed crafts
|
|
10
|
+
*
|
|
11
|
+
* @returns Commander command instance configured for listing crafts
|
|
12
|
+
*/
|
|
8
13
|
function createListCommand() {
|
|
9
14
|
return new commander_1.Command('list')
|
|
10
15
|
.description('List installed crafts')
|
|
@@ -53,22 +58,80 @@ async function listCommand(options) {
|
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
60
|
else {
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
// Group crafts by type
|
|
62
|
+
const lockfile = await (0, file_system_1.readCraftDeskLock)();
|
|
63
|
+
const pluginTree = lockfile?.pluginTree || {};
|
|
64
|
+
const plugins = installedCrafts.filter(c => c.type === 'plugin');
|
|
65
|
+
const skills = installedCrafts.filter(c => c.type === 'skill');
|
|
66
|
+
const agents = installedCrafts.filter(c => c.type === 'agent');
|
|
67
|
+
const commands = installedCrafts.filter(c => c.type === 'command');
|
|
68
|
+
const hooks = installedCrafts.filter(c => c.type === 'hook');
|
|
69
|
+
const others = installedCrafts.filter(c => !['plugin', 'skill', 'agent', 'command', 'hook'].includes(c.type));
|
|
70
|
+
// Show plugins with their dependencies
|
|
71
|
+
if (plugins.length > 0) {
|
|
72
|
+
logger_1.logger.log('\n🔌 Plugins:');
|
|
73
|
+
for (const plugin of plugins) {
|
|
74
|
+
const treeInfo = pluginTree[plugin.name];
|
|
75
|
+
const isDep = treeInfo?.isDependency;
|
|
76
|
+
const suffix = isDep ? ' (dependency)' : '';
|
|
77
|
+
logger_1.logger.log(` ${plugin.name}@${plugin.version}${suffix}`);
|
|
78
|
+
// Show dependencies
|
|
79
|
+
if (treeInfo?.dependencies && treeInfo.dependencies.length > 0) {
|
|
80
|
+
for (let i = 0; i < treeInfo.dependencies.length; i++) {
|
|
81
|
+
const dep = treeInfo.dependencies[i];
|
|
82
|
+
const isLast = i === treeInfo.dependencies.length - 1;
|
|
83
|
+
const connector = isLast ? '└──' : '├──';
|
|
84
|
+
logger_1.logger.log(` ${connector} ${dep}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Show skills
|
|
90
|
+
if (skills.length > 0) {
|
|
91
|
+
logger_1.logger.log('\n📚 Skills:');
|
|
92
|
+
for (const skill of skills) {
|
|
93
|
+
logger_1.logger.log(` ${skill.name}@${skill.version}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Show agents
|
|
97
|
+
if (agents.length > 0) {
|
|
98
|
+
logger_1.logger.log('\n🤖 Agents:');
|
|
99
|
+
for (const agent of agents) {
|
|
100
|
+
logger_1.logger.log(` ${agent.name}@${agent.version}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Show commands
|
|
104
|
+
if (commands.length > 0) {
|
|
105
|
+
logger_1.logger.log('\n⚡ Commands:');
|
|
106
|
+
for (const cmd of commands) {
|
|
107
|
+
logger_1.logger.log(` ${cmd.name}@${cmd.version}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Show hooks
|
|
111
|
+
if (hooks.length > 0) {
|
|
112
|
+
logger_1.logger.log('\n🔗 Hooks:');
|
|
113
|
+
for (const hook of hooks) {
|
|
114
|
+
logger_1.logger.log(` ${hook.name}@${hook.version}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Show others
|
|
118
|
+
if (others.length > 0) {
|
|
119
|
+
logger_1.logger.log('\n📦 Others:');
|
|
120
|
+
for (const other of others) {
|
|
121
|
+
logger_1.logger.log(` ${other.name}@${other.version} (${other.type})`);
|
|
122
|
+
}
|
|
61
123
|
}
|
|
62
124
|
logger_1.logger.log('');
|
|
63
125
|
logger_1.logger.info(`Total: ${installedCrafts.length} crafts installed`);
|
|
64
126
|
}
|
|
65
127
|
}
|
|
66
128
|
catch (error) {
|
|
67
|
-
|
|
129
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
130
|
+
logger_1.logger.error(`Failed to list crafts: ${message}`);
|
|
68
131
|
process.exit(1);
|
|
69
132
|
}
|
|
70
133
|
}
|
|
71
|
-
function
|
|
134
|
+
function _getTypeIcon(type) {
|
|
72
135
|
switch (type) {
|
|
73
136
|
case 'skill':
|
|
74
137
|
return '📚';
|
|
@@ -78,6 +141,8 @@ function getTypeIcon(type) {
|
|
|
78
141
|
return '⚡';
|
|
79
142
|
case 'hook':
|
|
80
143
|
return '🔗';
|
|
144
|
+
case 'plugin':
|
|
145
|
+
return '🔌';
|
|
81
146
|
default:
|
|
82
147
|
return '📦';
|
|
83
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'login' command for authenticating with a CraftDesk registry
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for registry authentication
|
|
6
|
+
*/
|
|
7
|
+
export declare function createLoginCommand(): Command;
|
|
8
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAO5C"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createLoginCommand = createLoginCommand;
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const readline = __importStar(require("readline"));
|
|
39
|
+
const config_manager_1 = require("../services/config-manager");
|
|
40
|
+
const registry_client_1 = require("../services/registry-client");
|
|
41
|
+
const logger_1 = require("../utils/logger");
|
|
42
|
+
/**
|
|
43
|
+
* Creates the 'login' command for authenticating with a CraftDesk registry
|
|
44
|
+
*
|
|
45
|
+
* @returns Commander command instance configured for registry authentication
|
|
46
|
+
*/
|
|
47
|
+
function createLoginCommand() {
|
|
48
|
+
return new commander_1.Command('login')
|
|
49
|
+
.description('Authenticate with a CraftDesk registry')
|
|
50
|
+
.option('--registry <url>', 'Registry URL to authenticate with')
|
|
51
|
+
.action(async (options) => {
|
|
52
|
+
await loginCommand(options);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async function loginCommand(options) {
|
|
56
|
+
try {
|
|
57
|
+
// 1. Get registry URL
|
|
58
|
+
const registryUrl = options.registry || await config_manager_1.configManager.getDefaultRegistry();
|
|
59
|
+
if (!registryUrl) {
|
|
60
|
+
logger_1.logger.error('No registry configured.');
|
|
61
|
+
logger_1.logger.info('Either specify --registry <url> or add a default registry to craftdesk.json:');
|
|
62
|
+
logger_1.logger.info(' "registries": { "default": { "url": "https://your-registry.com" } }');
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
// 2. Check if already logged in
|
|
66
|
+
const existingToken = await config_manager_1.configManager.getAuthToken(registryUrl);
|
|
67
|
+
if (existingToken) {
|
|
68
|
+
const existingUser = await config_manager_1.configManager.getStoredUsername(registryUrl);
|
|
69
|
+
logger_1.logger.info(`Already logged in to ${registryUrl} as ${existingUser || 'unknown'}`);
|
|
70
|
+
logger_1.logger.info('Run "craftdesk logout" first to log out, or provide a new token.');
|
|
71
|
+
}
|
|
72
|
+
// 3. Prompt for token
|
|
73
|
+
logger_1.logger.info(`\nAuthenticating with ${registryUrl}`);
|
|
74
|
+
logger_1.logger.info('Get your API token from your profile page on the registry website.\n');
|
|
75
|
+
const token = await promptForToken();
|
|
76
|
+
if (!token || token.trim() === '') {
|
|
77
|
+
logger_1.logger.error('No token provided');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
// 4. Validate token
|
|
81
|
+
logger_1.logger.startSpinner('Verifying token...');
|
|
82
|
+
const userInfo = await registry_client_1.registryClient.verifyToken(registryUrl, token.trim());
|
|
83
|
+
// 5. Save to config
|
|
84
|
+
await config_manager_1.configManager.setAuthToken(registryUrl, token.trim(), userInfo.username);
|
|
85
|
+
logger_1.logger.succeedSpinner(`Logged in as ${userInfo.username}`);
|
|
86
|
+
if (userInfo.organization) {
|
|
87
|
+
logger_1.logger.info(`Organization: ${userInfo.organization}`);
|
|
88
|
+
}
|
|
89
|
+
logger_1.logger.info(`\nToken saved to ${config_manager_1.configManager.getGlobalConfigPath()}`);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
93
|
+
logger_1.logger.failSpinner('Authentication failed');
|
|
94
|
+
logger_1.logger.error(message);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Prompt for API token with hidden input
|
|
100
|
+
*
|
|
101
|
+
* @returns The API token entered by the user
|
|
102
|
+
*/
|
|
103
|
+
async function promptForToken() {
|
|
104
|
+
return new Promise((resolve) => {
|
|
105
|
+
const rl = readline.createInterface({
|
|
106
|
+
input: process.stdin,
|
|
107
|
+
output: process.stdout
|
|
108
|
+
});
|
|
109
|
+
// Try to hide input if terminal supports it
|
|
110
|
+
if (process.stdin.isTTY) {
|
|
111
|
+
process.stdout.write('Token: ');
|
|
112
|
+
let token = '';
|
|
113
|
+
// Use raw mode for hidden input
|
|
114
|
+
process.stdin.setRawMode(true);
|
|
115
|
+
process.stdin.resume();
|
|
116
|
+
process.stdin.setEncoding('utf8');
|
|
117
|
+
const onData = (char) => {
|
|
118
|
+
// Ctrl+C
|
|
119
|
+
if (char === '\u0003') {
|
|
120
|
+
process.stdin.setRawMode(false);
|
|
121
|
+
process.stdout.write('\n');
|
|
122
|
+
rl.close();
|
|
123
|
+
process.exit(0);
|
|
124
|
+
}
|
|
125
|
+
// Enter key
|
|
126
|
+
if (char === '\r' || char === '\n') {
|
|
127
|
+
process.stdin.setRawMode(false);
|
|
128
|
+
process.stdin.removeListener('data', onData);
|
|
129
|
+
process.stdout.write('\n');
|
|
130
|
+
rl.close();
|
|
131
|
+
resolve(token);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// Backspace
|
|
135
|
+
if (char === '\u007F' || char === '\b') {
|
|
136
|
+
if (token.length > 0) {
|
|
137
|
+
token = token.slice(0, -1);
|
|
138
|
+
// Move cursor back, write space, move back again
|
|
139
|
+
process.stdout.write('\b \b');
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Regular character - add to token, display asterisk
|
|
144
|
+
token += char;
|
|
145
|
+
process.stdout.write('*');
|
|
146
|
+
};
|
|
147
|
+
process.stdin.on('data', onData);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// Non-interactive mode - just read the line
|
|
151
|
+
rl.question('Token: ', (answer) => {
|
|
152
|
+
rl.close();
|
|
153
|
+
resolve(answer);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the 'logout' command for removing registry authentication
|
|
4
|
+
*
|
|
5
|
+
* @returns Commander command instance configured for logging out
|
|
6
|
+
*/
|
|
7
|
+
export declare function createLogoutCommand(): Command;
|
|
8
|
+
//# sourceMappingURL=logout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAO7C"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLogoutCommand = createLogoutCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const config_manager_1 = require("../services/config-manager");
|
|
6
|
+
const logger_1 = require("../utils/logger");
|
|
7
|
+
/**
|
|
8
|
+
* Creates the 'logout' command for removing registry authentication
|
|
9
|
+
*
|
|
10
|
+
* @returns Commander command instance configured for logging out
|
|
11
|
+
*/
|
|
12
|
+
function createLogoutCommand() {
|
|
13
|
+
return new commander_1.Command('logout')
|
|
14
|
+
.description('Remove authentication for a registry')
|
|
15
|
+
.option('--registry <url>', 'Registry URL to logout from')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
await logoutCommand(options);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function logoutCommand(options) {
|
|
21
|
+
try {
|
|
22
|
+
// 1. Get registry URL
|
|
23
|
+
const registryUrl = options.registry || await config_manager_1.configManager.getDefaultRegistry();
|
|
24
|
+
if (!registryUrl) {
|
|
25
|
+
logger_1.logger.error('No registry specified.');
|
|
26
|
+
logger_1.logger.info('Either specify --registry <url> or add a default registry to craftdesk.json');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// 2. Get stored username before removing (for display)
|
|
30
|
+
const username = await config_manager_1.configManager.getStoredUsername(registryUrl);
|
|
31
|
+
// 3. Remove token from config
|
|
32
|
+
const removed = await config_manager_1.configManager.removeAuthToken(registryUrl);
|
|
33
|
+
if (removed) {
|
|
34
|
+
if (username) {
|
|
35
|
+
logger_1.logger.success(`Logged out ${username} from ${registryUrl}`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
logger_1.logger.success(`Logged out from ${registryUrl}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
logger_1.logger.info(`Not logged in to ${registryUrl}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
+
logger_1.logger.error(message);
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=logout.js.map
|