craftdesk 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +88 -0
- package/README.md +1609 -132
- package/dist/commands/add.d.ts +5 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +306 -8
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/convert.d.ts +8 -0
- package/dist/commands/convert.d.ts.map +1 -0
- package/dist/commands/convert.js +146 -0
- package/dist/commands/convert.js.map +1 -0
- package/dist/commands/detect-agents.d.ts +14 -0
- package/dist/commands/detect-agents.d.ts.map +1 -0
- package/dist/commands/detect-agents.js +86 -0
- package/dist/commands/detect-agents.js.map +1 -0
- package/dist/commands/embed.d.ts +14 -0
- package/dist/commands/embed.d.ts.map +1 -0
- package/dist/commands/embed.js +147 -0
- package/dist/commands/embed.js.map +1 -0
- package/dist/commands/info.d.ts +8 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +66 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +8 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +5 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +24 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +75 -7
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +158 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +8 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +51 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/outdated.d.ts +23 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +268 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +203 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/remove.d.ts +5 -0
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +51 -10
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +60 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/setup-multi-agent.d.ts +17 -0
- package/dist/commands/setup-multi-agent.d.ts.map +1 -0
- package/dist/commands/setup-multi-agent.js +188 -0
- package/dist/commands/setup-multi-agent.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +144 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/unembed.d.ts +14 -0
- package/dist/commands/unembed.d.ts.map +1 -0
- package/dist/commands/unembed.js +96 -0
- package/dist/commands/unembed.js.map +1 -0
- package/dist/commands/update.d.ts +8 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +372 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +14 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +143 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +58 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/converters/base-converter.d.ts +89 -0
- package/dist/converters/base-converter.d.ts.map +1 -0
- package/dist/converters/base-converter.js +249 -0
- package/dist/converters/base-converter.js.map +1 -0
- package/dist/converters/continue-converter.d.ts +53 -0
- package/dist/converters/continue-converter.d.ts.map +1 -0
- package/dist/converters/continue-converter.js +243 -0
- package/dist/converters/continue-converter.js.map +1 -0
- package/dist/converters/cursor-converter.d.ts +70 -0
- package/dist/converters/cursor-converter.d.ts.map +1 -0
- package/dist/converters/cursor-converter.js +272 -0
- package/dist/converters/cursor-converter.js.map +1 -0
- package/dist/index.js +56 -3
- package/dist/index.js.map +1 -1
- package/dist/services/agent-detector.d.ts +57 -0
- package/dist/services/agent-detector.d.ts.map +1 -0
- package/dist/services/agent-detector.js +146 -0
- package/dist/services/agent-detector.js.map +1 -0
- package/dist/services/config-manager.d.ts +128 -10
- package/dist/services/config-manager.d.ts.map +1 -1
- package/dist/services/config-manager.js +190 -18
- package/dist/services/config-manager.js.map +1 -1
- package/dist/services/converter.d.ts +53 -0
- package/dist/services/converter.d.ts.map +1 -0
- package/dist/services/converter.js +185 -0
- package/dist/services/converter.js.map +1 -0
- package/dist/services/craft-wrapper.d.ts +108 -0
- package/dist/services/craft-wrapper.d.ts.map +1 -0
- package/dist/services/craft-wrapper.js +268 -0
- package/dist/services/craft-wrapper.js.map +1 -0
- package/dist/services/git-resolver.d.ts +9 -3
- package/dist/services/git-resolver.d.ts.map +1 -1
- package/dist/services/git-resolver.js +44 -20
- package/dist/services/git-resolver.js.map +1 -1
- package/dist/services/gitignore-manager.d.ts +74 -0
- package/dist/services/gitignore-manager.d.ts.map +1 -0
- package/dist/services/gitignore-manager.js +188 -0
- package/dist/services/gitignore-manager.js.map +1 -0
- package/dist/services/installer.d.ts +60 -1
- package/dist/services/installer.d.ts.map +1 -1
- package/dist/services/installer.js +295 -20
- package/dist/services/installer.js.map +1 -1
- package/dist/services/multi-agent-sync.d.ts +88 -0
- package/dist/services/multi-agent-sync.d.ts.map +1 -0
- package/dist/services/multi-agent-sync.js +316 -0
- package/dist/services/multi-agent-sync.js.map +1 -0
- package/dist/services/plugin-resolver.d.ts +80 -0
- package/dist/services/plugin-resolver.d.ts.map +1 -0
- package/dist/services/plugin-resolver.js +183 -0
- package/dist/services/plugin-resolver.js.map +1 -0
- package/dist/services/registry-client.d.ts +132 -5
- package/dist/services/registry-client.d.ts.map +1 -1
- package/dist/services/registry-client.js +239 -34
- package/dist/services/registry-client.js.map +1 -1
- package/dist/services/settings-manager.d.ts +151 -0
- package/dist/services/settings-manager.d.ts.map +1 -0
- package/dist/services/settings-manager.js +333 -0
- package/dist/services/settings-manager.js.map +1 -0
- package/dist/types/claude-settings.d.ts +155 -0
- package/dist/types/claude-settings.d.ts.map +1 -0
- package/dist/types/claude-settings.js +20 -0
- package/dist/types/claude-settings.js.map +1 -0
- package/dist/types/converter.d.ts +98 -0
- package/dist/types/converter.d.ts.map +1 -0
- package/dist/types/converter.js +6 -0
- package/dist/types/converter.js.map +1 -0
- package/dist/types/craftdesk-json.d.ts +76 -3
- package/dist/types/craftdesk-json.d.ts.map +1 -1
- package/dist/types/craftdesk-lock.d.ts +62 -1
- package/dist/types/craftdesk-lock.d.ts.map +1 -1
- package/dist/types/multi-agent.d.ts +85 -0
- package/dist/types/multi-agent.d.ts.map +1 -0
- package/dist/types/multi-agent.js +6 -0
- package/dist/types/multi-agent.js.map +1 -0
- package/dist/utils/crypto.d.ts +23 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +52 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/file-system.d.ts +43 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +45 -2
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +76 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/version-utils.d.ts +63 -0
- package/dist/utils/version-utils.d.ts.map +1 -0
- package/dist/utils/version-utils.js +130 -0
- package/dist/utils/version-utils.js.map +1 -0
- package/package.json +36 -9
- package/.claude/settings.local.json +0 -19
- package/.github/workflows/ci.yml +0 -94
- package/API.md +0 -414
- package/TESTING.md +0 -263
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -56
- package/dist/commands/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -17
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -3
- package/dist/types/config.js.map +0 -1
- package/docs/DEPENDENCY_RESOLUTION.md +0 -237
- package/examples/craftdesk-all-sources.json +0 -79
- package/examples/craftdesk-git-monorepo.json +0 -41
- package/examples/craftdesk-multi-registry.json +0 -40
- package/examples/craftdesk-with-registries.json +0 -49
- package/examples/simple-craftdesk.json +0 -10
- package/src/commands/add.ts +0 -314
- package/src/commands/init.ts +0 -55
- package/src/commands/install.ts +0 -126
- package/src/commands/list.ts +0 -126
- package/src/commands/remove.ts +0 -82
- package/src/index.ts +0 -56
- package/src/services/config-manager.ts +0 -150
- package/src/services/git-resolver.ts +0 -373
- package/src/services/installer.ts +0 -314
- package/src/services/registry-client.ts +0 -163
- package/src/types/craftdesk-json.ts +0 -53
- package/src/types/craftdesk-lock.ts +0 -38
- package/src/utils/file-system.ts +0 -55
- package/src/utils/logger.ts +0 -82
- package/tests/fixtures/craftdesk-git.json +0 -17
- package/tests/fixtures/craftdesk.json +0 -15
- package/tests/helpers/test-utils.ts +0 -60
- package/tests/integration/init-command.test.ts +0 -70
- package/tests/integration/list-command.test.ts +0 -77
- package/tests/unit/config-manager.test.ts +0 -228
- package/tests/unit/git-resolver.test.ts +0 -303
- package/tests/unit/installer.test.ts +0 -105
- package/tsconfig.json +0 -20
- package/vitest.config.ts +0 -29
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the search command for finding crafts in the registry by keyword.
|
|
4
|
+
*
|
|
5
|
+
* @returns The configured Commander command instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function createSearchCommand(): Command;
|
|
8
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSearchCommand = createSearchCommand;
|
|
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 search command for finding crafts in the registry by keyword.
|
|
9
|
+
*
|
|
10
|
+
* @returns The configured Commander command instance
|
|
11
|
+
*/
|
|
12
|
+
function createSearchCommand() {
|
|
13
|
+
return new commander_1.Command('search')
|
|
14
|
+
.description('Search for crafts in the registry')
|
|
15
|
+
.argument('<query>', 'Search query')
|
|
16
|
+
.option('-t, --type <type>', 'Filter by type (skill, agent, command, hook, plugin)')
|
|
17
|
+
.option('-l, --limit <limit>', 'Maximum number of results', '20')
|
|
18
|
+
.option('--json', 'Output as JSON')
|
|
19
|
+
.action(async (query, options) => {
|
|
20
|
+
await searchCommand(query, options);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async function searchCommand(query, options) {
|
|
24
|
+
try {
|
|
25
|
+
logger_1.logger.startSpinner(`Searching for "${query}"...`);
|
|
26
|
+
const results = await registry_client_1.registryClient.searchCrafts(query, options.type || undefined);
|
|
27
|
+
if (!results || results.length === 0) {
|
|
28
|
+
logger_1.logger.failSpinner(`No crafts found matching "${query}"`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
logger_1.logger.succeedSpinner(`Found ${results.length} craft(s)`);
|
|
32
|
+
// Apply limit
|
|
33
|
+
const limit = parseInt(options.limit || '20', 10);
|
|
34
|
+
const displayResults = results.slice(0, limit);
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(JSON.stringify(displayResults, null, 2));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log('');
|
|
40
|
+
for (const craft of displayResults) {
|
|
41
|
+
console.log(` ${craft.author}/${craft.name}@${craft.version} (${craft.type})`);
|
|
42
|
+
if (craft.description) {
|
|
43
|
+
console.log(` ${craft.description}`);
|
|
44
|
+
}
|
|
45
|
+
console.log('');
|
|
46
|
+
}
|
|
47
|
+
if (results.length > limit) {
|
|
48
|
+
logger_1.logger.info(`Showing ${limit} of ${results.length} results. Use --limit to see more.`);
|
|
49
|
+
}
|
|
50
|
+
logger_1.logger.info(`\nTo install a craft, run: craftdesk add <author>/<name>`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
55
|
+
logger_1.logger.failSpinner();
|
|
56
|
+
logger_1.logger.error(`Search failed: ${message}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":";;AAeA,kDAUC;AAzBD,yCAAoC;AACpC,iEAA6D;AAC7D,4CAAyC;AAQzC;;;;GAIG;AACH,SAAgB,mBAAmB;IACjC,OAAO,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;SACnC,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAA6B,EAAE,EAAE;QAC7D,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,OAA6B;IACvE,IAAI,CAAC;QACH,eAAM,CAAC,YAAY,CAAC,kBAAkB,KAAK,MAAM,CAAC,CAAC;QAEnD,MAAM,OAAO,GAAG,MAAM,gCAAc,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAEpF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,eAAM,CAAC,WAAW,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,eAAM,CAAC,cAAc,CAAC,SAAS,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QAE1D,cAAc;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;gBAChF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAC3B,eAAM,CAAC,IAAI,CAAC,WAAW,KAAK,OAAO,OAAO,CAAC,MAAM,oCAAoC,CAAC,CAAC;YACzF,CAAC;YAED,eAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;IACH,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,WAAW,EAAE,CAAC;QACrB,eAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* setup-multi-agent command - Interactive multi-agent setup
|
|
3
|
+
*
|
|
4
|
+
* Guides users through enabling multi-agent sync by:
|
|
5
|
+
* - Detecting available AI agents
|
|
6
|
+
* - Allowing selection of agents to sync
|
|
7
|
+
* - Configuring craftdesk.json
|
|
8
|
+
* - Optionally performing initial sync
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
/**
|
|
12
|
+
* Creates the 'setup-multi-agent' command for interactive multi-agent configuration
|
|
13
|
+
*
|
|
14
|
+
* @returns Commander command instance configured for multi-agent setup
|
|
15
|
+
*/
|
|
16
|
+
export declare function createSetupMultiAgentCommand(): Command;
|
|
17
|
+
//# sourceMappingURL=setup-multi-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-multi-agent.d.ts","sourceRoot":"","sources":["../../src/commands/setup-multi-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+CpC;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CA0KtD"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* setup-multi-agent command - Interactive multi-agent setup
|
|
4
|
+
*
|
|
5
|
+
* Guides users through enabling multi-agent sync by:
|
|
6
|
+
* - Detecting available AI agents
|
|
7
|
+
* - Allowing selection of agents to sync
|
|
8
|
+
* - Configuring craftdesk.json
|
|
9
|
+
* - Optionally performing initial sync
|
|
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.createSetupMultiAgentCommand = createSetupMultiAgentCommand;
|
|
16
|
+
const commander_1 = require("commander");
|
|
17
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const logger_1 = require("../utils/logger");
|
|
20
|
+
const agent_detector_1 = require("../services/agent-detector");
|
|
21
|
+
const multi_agent_sync_1 = require("../services/multi-agent-sync");
|
|
22
|
+
const config_manager_1 = require("../services/config-manager");
|
|
23
|
+
/**
|
|
24
|
+
* Prompt user for yes/no input
|
|
25
|
+
* (Simplified for now - in production would use inquirer or prompts)
|
|
26
|
+
*
|
|
27
|
+
* @param _question - The question to ask the user
|
|
28
|
+
* @returns User's yes/no response
|
|
29
|
+
*/
|
|
30
|
+
function promptYesNo(_question) {
|
|
31
|
+
// TODO: Implement actual prompting with inquirer
|
|
32
|
+
// For now, return default values
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Prompt user to select from multiple options
|
|
37
|
+
* (Simplified for now - in production would use inquirer or prompts)
|
|
38
|
+
*
|
|
39
|
+
* @param _question - The question to ask the user
|
|
40
|
+
* @param _choices - Available choices to select from
|
|
41
|
+
* @returns Selected choices
|
|
42
|
+
*/
|
|
43
|
+
function promptMultiSelect(_question, _choices) {
|
|
44
|
+
// TODO: Implement actual prompting with inquirer
|
|
45
|
+
// For now, return all choices
|
|
46
|
+
return _choices;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates the 'setup-multi-agent' command for interactive multi-agent configuration
|
|
50
|
+
*
|
|
51
|
+
* @returns Commander command instance configured for multi-agent setup
|
|
52
|
+
*/
|
|
53
|
+
function createSetupMultiAgentCommand() {
|
|
54
|
+
return new commander_1.Command('setup-multi-agent')
|
|
55
|
+
.description('Interactive setup for multi-agent sync')
|
|
56
|
+
.option('--auto-sync', 'Enable auto-sync on install/update')
|
|
57
|
+
.option('--skip-sync', 'Skip initial sync after setup')
|
|
58
|
+
.action(async (options) => {
|
|
59
|
+
try {
|
|
60
|
+
console.log('\n🔧 Multi-Agent Sync Setup\n');
|
|
61
|
+
console.log('This will configure CraftDesk to sync skills across multiple AI coding assistants.\n');
|
|
62
|
+
// Detect agents
|
|
63
|
+
logger_1.logger.startSpinner('Detecting AI coding assistants...');
|
|
64
|
+
const detection = await agent_detector_1.agentDetector.detectAgents();
|
|
65
|
+
logger_1.logger.stopSpinner();
|
|
66
|
+
if (detection.detected.filter(a => a.detected).length === 0) {
|
|
67
|
+
console.log('❌ No AI coding assistants detected\n');
|
|
68
|
+
console.log('Detected agents will be automatically configured.');
|
|
69
|
+
console.log('You can create directories manually:\n');
|
|
70
|
+
console.log(' mkdir -p .cursor/skills');
|
|
71
|
+
console.log(' mkdir -p .windsurf/skills');
|
|
72
|
+
console.log(' mkdir -p .continue/skills\n');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
console.log('Detected AI Assistants:\n');
|
|
76
|
+
const detectedAgents = detection.detected.filter(a => a.detected || a.name === 'claude');
|
|
77
|
+
for (const agent of detectedAgents) {
|
|
78
|
+
const status = agent.detected ? '✅ Found' : '⚫ Not found';
|
|
79
|
+
console.log(` ${agent.displayName}: ${status}`);
|
|
80
|
+
console.log(` Directory: ${agent.skillsDir}`);
|
|
81
|
+
console.log('');
|
|
82
|
+
}
|
|
83
|
+
// Get current config
|
|
84
|
+
const currentConfig = await config_manager_1.configManager.getCraftDeskJson();
|
|
85
|
+
const craftDeskPath = path_1.default.join(process.cwd(), 'craftdesk.json');
|
|
86
|
+
if (!currentConfig) {
|
|
87
|
+
console.log('❌ No craftdesk.json found\n');
|
|
88
|
+
console.log('Please initialize a project first with `craftdesk init`\n');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Check if already enabled
|
|
92
|
+
if (currentConfig.multiAgent?.enabled) {
|
|
93
|
+
console.log('ℹ️ Multi-agent sync is already enabled\n');
|
|
94
|
+
console.log('Current configuration:');
|
|
95
|
+
console.log(` Canonical: ${currentConfig.multiAgent.canonical}`);
|
|
96
|
+
console.log(` Targets: ${currentConfig.multiAgent.targets.length}`);
|
|
97
|
+
for (const target of currentConfig.multiAgent.targets) {
|
|
98
|
+
console.log(` - ${target}`);
|
|
99
|
+
}
|
|
100
|
+
console.log('');
|
|
101
|
+
const shouldReconfigure = promptYesNo('Do you want to reconfigure?');
|
|
102
|
+
if (!shouldReconfigure) {
|
|
103
|
+
console.log('Setup cancelled\n');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Select agents to enable
|
|
108
|
+
console.log('Select agents to sync skills to:\n');
|
|
109
|
+
const availableAgents = detectedAgents.filter(a => a.name !== 'claude');
|
|
110
|
+
const choices = availableAgents.map(a => a.skillsDir);
|
|
111
|
+
const selectedTargets = promptMultiSelect('Select target agents (space to toggle, enter to confirm):', choices);
|
|
112
|
+
// Always include Claude as canonical
|
|
113
|
+
const targets = ['.claude/skills', ...selectedTargets];
|
|
114
|
+
// Build configuration
|
|
115
|
+
const multiAgentConfig = {
|
|
116
|
+
enabled: true,
|
|
117
|
+
canonical: '.claude',
|
|
118
|
+
targets,
|
|
119
|
+
autoSync: options.autoSync || false
|
|
120
|
+
};
|
|
121
|
+
// Update craftdesk.json
|
|
122
|
+
logger_1.logger.startSpinner('Updating craftdesk.json...');
|
|
123
|
+
const updatedConfig = {
|
|
124
|
+
...currentConfig,
|
|
125
|
+
multiAgent: multiAgentConfig
|
|
126
|
+
};
|
|
127
|
+
await fs_extra_1.default.writeFile(craftDeskPath, JSON.stringify(updatedConfig, null, 2) + '\n', 'utf-8');
|
|
128
|
+
logger_1.logger.succeedSpinner('Configuration updated');
|
|
129
|
+
console.log('\n✅ Multi-agent sync configured!\n');
|
|
130
|
+
console.log('Configuration:');
|
|
131
|
+
console.log(` Canonical: ${multiAgentConfig.canonical}`);
|
|
132
|
+
console.log(` Targets (${targets.length}):`);
|
|
133
|
+
for (const target of targets) {
|
|
134
|
+
console.log(` - ${target}`);
|
|
135
|
+
}
|
|
136
|
+
console.log(` Auto-sync: ${multiAgentConfig.autoSync ? 'enabled' : 'disabled'}`);
|
|
137
|
+
console.log('');
|
|
138
|
+
// Offer to perform initial sync
|
|
139
|
+
if (!options.skipSync) {
|
|
140
|
+
const shouldSync = promptYesNo('Perform initial sync now?');
|
|
141
|
+
if (shouldSync) {
|
|
142
|
+
console.log('');
|
|
143
|
+
logger_1.logger.startSpinner('Syncing existing crafts...');
|
|
144
|
+
// Clear config cache to pick up new settings
|
|
145
|
+
config_manager_1.configManager['craftDeskJson'] = null;
|
|
146
|
+
const results = await multi_agent_sync_1.multiAgentSync.syncAllCrafts();
|
|
147
|
+
logger_1.logger.stopSpinner();
|
|
148
|
+
if (results.length === 0) {
|
|
149
|
+
console.log('ℹ️ No crafts found to sync\n');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.log(`✅ Synced ${results.length} craft(s)\n`);
|
|
153
|
+
let totalSynced = 0;
|
|
154
|
+
let totalFailed = 0;
|
|
155
|
+
for (const result of results) {
|
|
156
|
+
totalSynced += result.synced.length;
|
|
157
|
+
totalFailed += result.failed.length;
|
|
158
|
+
if (result.failed.length > 0) {
|
|
159
|
+
console.log(`⚠️ ${result.craftName}: ${result.failed.length} location(s) failed`);
|
|
160
|
+
for (const failure of result.failed) {
|
|
161
|
+
console.log(` ✗ ${failure.path}: ${failure.error}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
console.log(`\nSummary:`);
|
|
166
|
+
console.log(` Total synced: ${totalSynced} location(s)`);
|
|
167
|
+
if (totalFailed > 0) {
|
|
168
|
+
console.log(` Total failed: ${totalFailed} location(s)`);
|
|
169
|
+
}
|
|
170
|
+
console.log('');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
console.log('Next steps:\n');
|
|
175
|
+
console.log(' • Install crafts: `craftdesk install`');
|
|
176
|
+
console.log(' • Verify sync: `craftdesk verify`');
|
|
177
|
+
console.log(' • Manual sync: `craftdesk sync`');
|
|
178
|
+
console.log(' • Detect agents: `craftdesk detect-agents`\n');
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
logger_1.logger.failSpinner('Setup failed');
|
|
182
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
183
|
+
logger_1.logger.error(`Error: ${message}`);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=setup-multi-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-multi-agent.js","sourceRoot":"","sources":["../../src/commands/setup-multi-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sync command - Sync crafts across AI agents
|
|
3
|
+
*
|
|
4
|
+
* Copies crafts from the canonical location to all configured
|
|
5
|
+
* agent directories, ensuring consistency across agents.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the 'sync' command for syncing crafts across AI agents
|
|
10
|
+
*
|
|
11
|
+
* @returns Commander command instance configured for multi-agent sync
|
|
12
|
+
*/
|
|
13
|
+
export declare function createSyncCommand(): Command;
|
|
14
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAkJ3C"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* sync command - Sync crafts across AI agents
|
|
4
|
+
*
|
|
5
|
+
* Copies crafts from the canonical location to all configured
|
|
6
|
+
* agent directories, ensuring consistency across agents.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createSyncCommand = createSyncCommand;
|
|
10
|
+
const commander_1 = require("commander");
|
|
11
|
+
const logger_1 = require("../utils/logger");
|
|
12
|
+
const multi_agent_sync_1 = require("../services/multi-agent-sync");
|
|
13
|
+
const config_manager_1 = require("../services/config-manager");
|
|
14
|
+
/**
|
|
15
|
+
* Creates the 'sync' command for syncing crafts across AI agents
|
|
16
|
+
*
|
|
17
|
+
* @returns Commander command instance configured for multi-agent sync
|
|
18
|
+
*/
|
|
19
|
+
function createSyncCommand() {
|
|
20
|
+
return new commander_1.Command('sync')
|
|
21
|
+
.description('Sync crafts across all configured AI agents')
|
|
22
|
+
.option('-c, --craft <name>', 'Sync specific craft by name')
|
|
23
|
+
.option('-f, --force', 'Force sync even if checksums match')
|
|
24
|
+
.option('--dry-run', 'Show what would be synced without making changes')
|
|
25
|
+
.action(async (options) => {
|
|
26
|
+
try {
|
|
27
|
+
// Check if multi-agent sync is enabled
|
|
28
|
+
const config = await config_manager_1.configManager.getCraftDeskJson();
|
|
29
|
+
if (!config?.multiAgent?.enabled) {
|
|
30
|
+
logger_1.logger.error('Multi-agent sync is not enabled');
|
|
31
|
+
console.log('\nTo enable multi-agent sync, run:');
|
|
32
|
+
console.log(' craftdesk setup-multi-agent\n');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
if (options.dryRun) {
|
|
36
|
+
logger_1.logger.info('Dry run mode - no changes will be made');
|
|
37
|
+
}
|
|
38
|
+
if (options.craft) {
|
|
39
|
+
// Sync specific craft
|
|
40
|
+
logger_1.logger.startSpinner(`Syncing ${options.craft}...`);
|
|
41
|
+
if (options.dryRun) {
|
|
42
|
+
logger_1.logger.stopSpinner();
|
|
43
|
+
const status = await multi_agent_sync_1.multiAgentSync.verifySync(options.craft);
|
|
44
|
+
console.log(`\n📋 Dry Run: ${options.craft}\n`);
|
|
45
|
+
console.log(`Canonical: ${config.multiAgent.canonical}/skills/${options.craft}`);
|
|
46
|
+
console.log(`Checksum: ${status.canonicalChecksum.substring(0, 8)}...\n`);
|
|
47
|
+
console.log('Would sync to:');
|
|
48
|
+
for (const target of config.multiAgent.targets) {
|
|
49
|
+
if (target === `${config.multiAgent.canonical}/skills`)
|
|
50
|
+
continue;
|
|
51
|
+
const outOfSync = status.outOfSync.find(l => l.path.includes(target));
|
|
52
|
+
if (outOfSync) {
|
|
53
|
+
console.log(` ⚠️ ${target}/${options.craft} (${outOfSync.reason})`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log(` ✓ ${target}/${options.craft} (already in sync)`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
console.log('');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const craftPath = `${config.multiAgent.canonical}/skills/${options.craft}`;
|
|
63
|
+
const result = await multi_agent_sync_1.multiAgentSync.syncCraft(options.craft, craftPath);
|
|
64
|
+
logger_1.logger.stopSpinner();
|
|
65
|
+
console.log(`\n✅ Synced ${options.craft}\n`);
|
|
66
|
+
console.log(`Synced to ${result.synced.length} location(s):`);
|
|
67
|
+
for (const location of result.synced) {
|
|
68
|
+
console.log(` ✓ ${location}`);
|
|
69
|
+
}
|
|
70
|
+
if (result.failed.length > 0) {
|
|
71
|
+
console.log(`\n❌ Failed to sync to ${result.failed.length} location(s):`);
|
|
72
|
+
for (const failure of result.failed) {
|
|
73
|
+
console.log(` ✗ ${failure.path}: ${failure.error}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
console.log('');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Sync all crafts
|
|
80
|
+
logger_1.logger.startSpinner('Syncing all crafts...');
|
|
81
|
+
if (options.dryRun) {
|
|
82
|
+
logger_1.logger.stopSpinner();
|
|
83
|
+
const statuses = await multi_agent_sync_1.multiAgentSync.verifyAllCrafts();
|
|
84
|
+
console.log(`\n📋 Dry Run: All Crafts\n`);
|
|
85
|
+
if (statuses.length === 0) {
|
|
86
|
+
console.log('No crafts found to sync\n');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
for (const status of statuses) {
|
|
90
|
+
const needsSync = status.outOfSync.length > 0;
|
|
91
|
+
const icon = needsSync ? '⚠️' : '✓';
|
|
92
|
+
console.log(`${icon} ${status.craftName}`);
|
|
93
|
+
if (needsSync) {
|
|
94
|
+
console.log(` Out of sync: ${status.outOfSync.length} location(s)`);
|
|
95
|
+
for (const loc of status.outOfSync) {
|
|
96
|
+
console.log(` - ${loc.path} (${loc.reason})`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(` In sync: ${status.inSyncLocations.length} location(s)`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
console.log('');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const results = await multi_agent_sync_1.multiAgentSync.syncAllCrafts();
|
|
107
|
+
logger_1.logger.stopSpinner();
|
|
108
|
+
if (results.length === 0) {
|
|
109
|
+
console.log('\nℹ️ No crafts found to sync\n');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
console.log(`\n✅ Synced ${results.length} craft(s)\n`);
|
|
113
|
+
let totalSynced = 0;
|
|
114
|
+
let totalFailed = 0;
|
|
115
|
+
for (const result of results) {
|
|
116
|
+
const syncedCount = result.synced.length;
|
|
117
|
+
const failedCount = result.failed.length;
|
|
118
|
+
totalSynced += syncedCount;
|
|
119
|
+
totalFailed += failedCount;
|
|
120
|
+
const icon = failedCount > 0 ? '⚠️' : '✓';
|
|
121
|
+
console.log(`${icon} ${result.craftName}: ${syncedCount} location(s)`);
|
|
122
|
+
if (failedCount > 0) {
|
|
123
|
+
for (const failure of result.failed) {
|
|
124
|
+
console.log(` ✗ ${failure.path}: ${failure.error}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
console.log(`\nSummary:`);
|
|
129
|
+
console.log(` Total synced: ${totalSynced} location(s)`);
|
|
130
|
+
if (totalFailed > 0) {
|
|
131
|
+
console.log(` Total failed: ${totalFailed} location(s)`);
|
|
132
|
+
}
|
|
133
|
+
console.log('');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
logger_1.logger.failSpinner('Failed to sync crafts');
|
|
138
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
139
|
+
logger_1.logger.error(`Error: ${message}`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA0BH,8CAkJC;AA1KD,yCAAoC;AACpC,4CAAyC;AACzC,mEAA8D;AAC9D,+DAA2D;AAgB3D;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAI,mBAAO,CAAC,MAAM,CAAC;SACzB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;SAC3D,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,WAAW,EAAE,kDAAkD,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,uCAAuC;YACvC,MAAM,MAAM,GAAG,MAAM,8BAAa,CAAC,gBAAgB,EAAE,CAAC;YAEtD,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;gBACjC,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,eAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,sBAAsB;gBACtB,eAAM,CAAC,YAAY,CAAC,WAAW,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;gBAEnD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,eAAM,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,MAAM,iCAAc,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAE9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;oBAChD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,UAAU,CAAC,SAAS,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjF,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;oBAE1E,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;oBAC9B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBAC/C,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,SAAS;4BAAE,SAAS;wBACjE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;wBACtE,IAAI,SAAS,EAAE,CAAC;4BACd,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;wBACxE,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,IAAI,OAAO,CAAC,KAAK,oBAAoB,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO;gBACT,CAAC;gBAED,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3E,MAAM,MAAM,GAAG,MAAM,iCAAc,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAExE,eAAM,CAAC,WAAW,EAAE,CAAC;gBAErB,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC;gBAC9D,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;gBACjC,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,MAAM,CAAC,MAAM,eAAe,CAAC,CAAC;oBAC1E,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAElB,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,eAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;gBAE7C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,eAAM,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,QAAQ,GAAG,MAAM,iCAAc,CAAC,eAAe,EAAE,CAAC;oBAExD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;oBAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;wBACzC,OAAO;oBACT,CAAC;oBAED,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;wBAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;wBAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;wBAEpC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;wBAC3C,IAAI,SAAS,EAAE,CAAC;4BACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,CAAC;4BACrE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gCACnC,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;4BACnD,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,eAAe,CAAC,MAAM,cAAc,CAAC,CAAC;wBACzE,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,OAAO;gBACT,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,iCAAc,CAAC,aAAa,EAAE,CAAC;gBAErD,eAAM,CAAC,WAAW,EAAE,CAAC;gBAErB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;oBAC/C,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;gBAEvD,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,WAAW,GAAG,CAAC,CAAC;gBAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;oBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;oBAEzC,WAAW,IAAI,WAAW,CAAC;oBAC3B,WAAW,IAAI,WAAW,CAAC;oBAE3B,MAAM,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,WAAW,cAAc,CAAC,CAAC;oBAEvE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBACpB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;4BACpC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;wBACvD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,cAAc,CAAC,CAAC;gBAC1D,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,cAAc,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,eAAM,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* unembed command - Unregister an embedded skill
|
|
3
|
+
*
|
|
4
|
+
* Removes a skill from the embedded list in craftdesk.json.
|
|
5
|
+
* The skill files remain on disk.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Creates the 'unembed' command for unregistering embedded skills
|
|
10
|
+
*
|
|
11
|
+
* @returns Commander command instance configured for unembedding skills
|
|
12
|
+
*/
|
|
13
|
+
export declare function createUnembedCommand(): Command;
|
|
14
|
+
//# sourceMappingURL=unembed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unembed.d.ts","sourceRoot":"","sources":["../../src/commands/unembed.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAwF9C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* unembed command - Unregister an embedded skill
|
|
4
|
+
*
|
|
5
|
+
* Removes a skill from the embedded list in craftdesk.json.
|
|
6
|
+
* The skill files remain on disk.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createUnembedCommand = createUnembedCommand;
|
|
13
|
+
const commander_1 = require("commander");
|
|
14
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const logger_1 = require("../utils/logger");
|
|
17
|
+
const config_manager_1 = require("../services/config-manager");
|
|
18
|
+
const gitignore_manager_1 = require("../services/gitignore-manager");
|
|
19
|
+
/**
|
|
20
|
+
* Creates the 'unembed' command for unregistering embedded skills
|
|
21
|
+
*
|
|
22
|
+
* @returns Commander command instance configured for unembedding skills
|
|
23
|
+
*/
|
|
24
|
+
function createUnembedCommand() {
|
|
25
|
+
return new commander_1.Command('unembed')
|
|
26
|
+
.description('Unregister an embedded skill')
|
|
27
|
+
.argument('<name>', 'Name of the skill to unembed')
|
|
28
|
+
.option('--remove', 'Also remove the skill files from disk')
|
|
29
|
+
.action(async (name, options) => {
|
|
30
|
+
try {
|
|
31
|
+
logger_1.logger.startSpinner(`Unembedding ${name}...`);
|
|
32
|
+
const craftDeskPath = path_1.default.join(process.cwd(), 'craftdesk.json');
|
|
33
|
+
// Check if craftdesk.json exists
|
|
34
|
+
if (!await fs_extra_1.default.pathExists(craftDeskPath)) {
|
|
35
|
+
logger_1.logger.failSpinner('No craftdesk.json found');
|
|
36
|
+
logger_1.logger.error('Run `craftdesk init` first to create craftdesk.json');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
// Read current config directly from file (don't use cache)
|
|
40
|
+
const config = await fs_extra_1.default.readJson(craftDeskPath);
|
|
41
|
+
if (!config) {
|
|
42
|
+
logger_1.logger.failSpinner('Failed to read craftdesk.json');
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
// Check if skill is embedded
|
|
46
|
+
const embedded = config.embedded || [];
|
|
47
|
+
if (!embedded.includes(name)) {
|
|
48
|
+
logger_1.logger.failSpinner(`${name} is not embedded`);
|
|
49
|
+
logger_1.logger.error('Skill is not in the embedded list');
|
|
50
|
+
logger_1.logger.info('Use `craftdesk list` to see all installed crafts');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// Remove from embedded list
|
|
54
|
+
const filteredEmbedded = embedded.filter(skill => skill !== name);
|
|
55
|
+
const updatedConfig = filteredEmbedded.length === 0
|
|
56
|
+
? { ...config, embedded: undefined }
|
|
57
|
+
: { ...config, embedded: filteredEmbedded };
|
|
58
|
+
// Write updated config
|
|
59
|
+
await fs_extra_1.default.writeFile(craftDeskPath, JSON.stringify(updatedConfig, null, 2) + '\n', 'utf-8');
|
|
60
|
+
logger_1.logger.succeedSpinner(`Unembedded ${name}`);
|
|
61
|
+
// Update .gitignore
|
|
62
|
+
logger_1.logger.startSpinner('Updating .gitignore...');
|
|
63
|
+
await gitignore_manager_1.gitIgnoreManager.autoUpdate();
|
|
64
|
+
logger_1.logger.succeedSpinner('Updated .gitignore');
|
|
65
|
+
// Optionally remove files
|
|
66
|
+
if (options.remove) {
|
|
67
|
+
const installPath = config_manager_1.configManager.getInstallPath();
|
|
68
|
+
const craftDir = path_1.default.join(process.cwd(), installPath, 'skills', name);
|
|
69
|
+
if (await fs_extra_1.default.pathExists(craftDir)) {
|
|
70
|
+
logger_1.logger.startSpinner('Removing skill files...');
|
|
71
|
+
await fs_extra_1.default.remove(craftDir);
|
|
72
|
+
logger_1.logger.succeedSpinner('Removed skill files');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
console.log('');
|
|
76
|
+
console.log(`✅ ${name} is no longer embedded`);
|
|
77
|
+
console.log('');
|
|
78
|
+
if (options.remove) {
|
|
79
|
+
console.log('Skill files have been removed from disk.');
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log('Note: Skill files still exist on disk.');
|
|
83
|
+
console.log(` To remove them: craftdesk unembed ${name} --remove`);
|
|
84
|
+
console.log(` Or manually: rm -rf ${config_manager_1.configManager.getInstallPath()}/skills/${name}`);
|
|
85
|
+
}
|
|
86
|
+
console.log('');
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger_1.logger.failSpinner('Failed to unembed skill');
|
|
90
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
91
|
+
logger_1.logger.error(`Error: ${message}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=unembed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unembed.js","sourceRoot":"","sources":["../../src/commands/unembed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Creates the update command for updating installed crafts to newer versions.
|
|
4
|
+
*
|
|
5
|
+
* @returns The configured Commander command instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function createUpdateCommand(): Command;
|
|
8
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyCpC;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAW7C"}
|