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.
Files changed (215) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +1609 -132
  3. package/dist/commands/add.d.ts +5 -0
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +306 -8
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/convert.d.ts +8 -0
  8. package/dist/commands/convert.d.ts.map +1 -0
  9. package/dist/commands/convert.js +146 -0
  10. package/dist/commands/convert.js.map +1 -0
  11. package/dist/commands/detect-agents.d.ts +14 -0
  12. package/dist/commands/detect-agents.d.ts.map +1 -0
  13. package/dist/commands/detect-agents.js +86 -0
  14. package/dist/commands/detect-agents.js.map +1 -0
  15. package/dist/commands/embed.d.ts +14 -0
  16. package/dist/commands/embed.d.ts.map +1 -0
  17. package/dist/commands/embed.js +147 -0
  18. package/dist/commands/embed.js.map +1 -0
  19. package/dist/commands/info.d.ts +8 -0
  20. package/dist/commands/info.d.ts.map +1 -0
  21. package/dist/commands/info.js +66 -0
  22. package/dist/commands/info.js.map +1 -0
  23. package/dist/commands/init.d.ts +5 -0
  24. package/dist/commands/init.d.ts.map +1 -1
  25. package/dist/commands/init.js +8 -2
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/install.d.ts +5 -0
  28. package/dist/commands/install.d.ts.map +1 -1
  29. package/dist/commands/install.js +24 -4
  30. package/dist/commands/install.js.map +1 -1
  31. package/dist/commands/list.d.ts +5 -0
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +75 -7
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/login.d.ts +8 -0
  36. package/dist/commands/login.d.ts.map +1 -0
  37. package/dist/commands/login.js +158 -0
  38. package/dist/commands/login.js.map +1 -0
  39. package/dist/commands/logout.d.ts +8 -0
  40. package/dist/commands/logout.d.ts.map +1 -0
  41. package/dist/commands/logout.js +51 -0
  42. package/dist/commands/logout.js.map +1 -0
  43. package/dist/commands/outdated.d.ts +23 -0
  44. package/dist/commands/outdated.d.ts.map +1 -0
  45. package/dist/commands/outdated.js +268 -0
  46. package/dist/commands/outdated.js.map +1 -0
  47. package/dist/commands/publish.d.ts +8 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +203 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/remove.d.ts +5 -0
  52. package/dist/commands/remove.d.ts.map +1 -1
  53. package/dist/commands/remove.js +51 -10
  54. package/dist/commands/remove.js.map +1 -1
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.d.ts.map +1 -0
  57. package/dist/commands/search.js +60 -0
  58. package/dist/commands/search.js.map +1 -0
  59. package/dist/commands/setup-multi-agent.d.ts +17 -0
  60. package/dist/commands/setup-multi-agent.d.ts.map +1 -0
  61. package/dist/commands/setup-multi-agent.js +188 -0
  62. package/dist/commands/setup-multi-agent.js.map +1 -0
  63. package/dist/commands/sync.d.ts +14 -0
  64. package/dist/commands/sync.d.ts.map +1 -0
  65. package/dist/commands/sync.js +144 -0
  66. package/dist/commands/sync.js.map +1 -0
  67. package/dist/commands/unembed.d.ts +14 -0
  68. package/dist/commands/unembed.d.ts.map +1 -0
  69. package/dist/commands/unembed.js +96 -0
  70. package/dist/commands/unembed.js.map +1 -0
  71. package/dist/commands/update.d.ts +8 -0
  72. package/dist/commands/update.d.ts.map +1 -0
  73. package/dist/commands/update.js +372 -0
  74. package/dist/commands/update.js.map +1 -0
  75. package/dist/commands/verify.d.ts +14 -0
  76. package/dist/commands/verify.d.ts.map +1 -0
  77. package/dist/commands/verify.js +143 -0
  78. package/dist/commands/verify.js.map +1 -0
  79. package/dist/commands/whoami.d.ts +8 -0
  80. package/dist/commands/whoami.d.ts.map +1 -0
  81. package/dist/commands/whoami.js +58 -0
  82. package/dist/commands/whoami.js.map +1 -0
  83. package/dist/converters/base-converter.d.ts +89 -0
  84. package/dist/converters/base-converter.d.ts.map +1 -0
  85. package/dist/converters/base-converter.js +249 -0
  86. package/dist/converters/base-converter.js.map +1 -0
  87. package/dist/converters/continue-converter.d.ts +53 -0
  88. package/dist/converters/continue-converter.d.ts.map +1 -0
  89. package/dist/converters/continue-converter.js +243 -0
  90. package/dist/converters/continue-converter.js.map +1 -0
  91. package/dist/converters/cursor-converter.d.ts +70 -0
  92. package/dist/converters/cursor-converter.d.ts.map +1 -0
  93. package/dist/converters/cursor-converter.js +272 -0
  94. package/dist/converters/cursor-converter.js.map +1 -0
  95. package/dist/index.js +56 -3
  96. package/dist/index.js.map +1 -1
  97. package/dist/services/agent-detector.d.ts +57 -0
  98. package/dist/services/agent-detector.d.ts.map +1 -0
  99. package/dist/services/agent-detector.js +146 -0
  100. package/dist/services/agent-detector.js.map +1 -0
  101. package/dist/services/config-manager.d.ts +128 -10
  102. package/dist/services/config-manager.d.ts.map +1 -1
  103. package/dist/services/config-manager.js +190 -18
  104. package/dist/services/config-manager.js.map +1 -1
  105. package/dist/services/converter.d.ts +53 -0
  106. package/dist/services/converter.d.ts.map +1 -0
  107. package/dist/services/converter.js +185 -0
  108. package/dist/services/converter.js.map +1 -0
  109. package/dist/services/craft-wrapper.d.ts +108 -0
  110. package/dist/services/craft-wrapper.d.ts.map +1 -0
  111. package/dist/services/craft-wrapper.js +268 -0
  112. package/dist/services/craft-wrapper.js.map +1 -0
  113. package/dist/services/git-resolver.d.ts +9 -3
  114. package/dist/services/git-resolver.d.ts.map +1 -1
  115. package/dist/services/git-resolver.js +44 -20
  116. package/dist/services/git-resolver.js.map +1 -1
  117. package/dist/services/gitignore-manager.d.ts +74 -0
  118. package/dist/services/gitignore-manager.d.ts.map +1 -0
  119. package/dist/services/gitignore-manager.js +188 -0
  120. package/dist/services/gitignore-manager.js.map +1 -0
  121. package/dist/services/installer.d.ts +60 -1
  122. package/dist/services/installer.d.ts.map +1 -1
  123. package/dist/services/installer.js +295 -20
  124. package/dist/services/installer.js.map +1 -1
  125. package/dist/services/multi-agent-sync.d.ts +88 -0
  126. package/dist/services/multi-agent-sync.d.ts.map +1 -0
  127. package/dist/services/multi-agent-sync.js +316 -0
  128. package/dist/services/multi-agent-sync.js.map +1 -0
  129. package/dist/services/plugin-resolver.d.ts +80 -0
  130. package/dist/services/plugin-resolver.d.ts.map +1 -0
  131. package/dist/services/plugin-resolver.js +183 -0
  132. package/dist/services/plugin-resolver.js.map +1 -0
  133. package/dist/services/registry-client.d.ts +132 -5
  134. package/dist/services/registry-client.d.ts.map +1 -1
  135. package/dist/services/registry-client.js +239 -34
  136. package/dist/services/registry-client.js.map +1 -1
  137. package/dist/services/settings-manager.d.ts +151 -0
  138. package/dist/services/settings-manager.d.ts.map +1 -0
  139. package/dist/services/settings-manager.js +333 -0
  140. package/dist/services/settings-manager.js.map +1 -0
  141. package/dist/types/claude-settings.d.ts +155 -0
  142. package/dist/types/claude-settings.d.ts.map +1 -0
  143. package/dist/types/claude-settings.js +20 -0
  144. package/dist/types/claude-settings.js.map +1 -0
  145. package/dist/types/converter.d.ts +98 -0
  146. package/dist/types/converter.d.ts.map +1 -0
  147. package/dist/types/converter.js +6 -0
  148. package/dist/types/converter.js.map +1 -0
  149. package/dist/types/craftdesk-json.d.ts +76 -3
  150. package/dist/types/craftdesk-json.d.ts.map +1 -1
  151. package/dist/types/craftdesk-lock.d.ts +62 -1
  152. package/dist/types/craftdesk-lock.d.ts.map +1 -1
  153. package/dist/types/multi-agent.d.ts +85 -0
  154. package/dist/types/multi-agent.d.ts.map +1 -0
  155. package/dist/types/multi-agent.js +6 -0
  156. package/dist/types/multi-agent.js.map +1 -0
  157. package/dist/utils/crypto.d.ts +23 -0
  158. package/dist/utils/crypto.d.ts.map +1 -0
  159. package/dist/utils/crypto.js +52 -0
  160. package/dist/utils/crypto.js.map +1 -0
  161. package/dist/utils/file-system.d.ts +43 -0
  162. package/dist/utils/file-system.d.ts.map +1 -1
  163. package/dist/utils/file-system.js +45 -2
  164. package/dist/utils/file-system.js.map +1 -1
  165. package/dist/utils/logger.d.ts +75 -0
  166. package/dist/utils/logger.d.ts.map +1 -1
  167. package/dist/utils/logger.js +76 -1
  168. package/dist/utils/logger.js.map +1 -1
  169. package/dist/utils/version-utils.d.ts +63 -0
  170. package/dist/utils/version-utils.d.ts.map +1 -0
  171. package/dist/utils/version-utils.js +130 -0
  172. package/dist/utils/version-utils.js.map +1 -0
  173. package/package.json +36 -9
  174. package/.claude/settings.local.json +0 -19
  175. package/.github/workflows/ci.yml +0 -94
  176. package/API.md +0 -414
  177. package/TESTING.md +0 -263
  178. package/dist/commands/config.d.ts +0 -3
  179. package/dist/commands/config.d.ts.map +0 -1
  180. package/dist/commands/config.js +0 -56
  181. package/dist/commands/config.js.map +0 -1
  182. package/dist/types/config.d.ts +0 -17
  183. package/dist/types/config.d.ts.map +0 -1
  184. package/dist/types/config.js +0 -3
  185. package/dist/types/config.js.map +0 -1
  186. package/docs/DEPENDENCY_RESOLUTION.md +0 -237
  187. package/examples/craftdesk-all-sources.json +0 -79
  188. package/examples/craftdesk-git-monorepo.json +0 -41
  189. package/examples/craftdesk-multi-registry.json +0 -40
  190. package/examples/craftdesk-with-registries.json +0 -49
  191. package/examples/simple-craftdesk.json +0 -10
  192. package/src/commands/add.ts +0 -314
  193. package/src/commands/init.ts +0 -55
  194. package/src/commands/install.ts +0 -126
  195. package/src/commands/list.ts +0 -126
  196. package/src/commands/remove.ts +0 -82
  197. package/src/index.ts +0 -56
  198. package/src/services/config-manager.ts +0 -150
  199. package/src/services/git-resolver.ts +0 -373
  200. package/src/services/installer.ts +0 -314
  201. package/src/services/registry-client.ts +0 -163
  202. package/src/types/craftdesk-json.ts +0 -53
  203. package/src/types/craftdesk-lock.ts +0 -38
  204. package/src/utils/file-system.ts +0 -55
  205. package/src/utils/logger.ts +0 -82
  206. package/tests/fixtures/craftdesk-git.json +0 -17
  207. package/tests/fixtures/craftdesk.json +0 -15
  208. package/tests/helpers/test-utils.ts +0 -60
  209. package/tests/integration/init-command.test.ts +0 -70
  210. package/tests/integration/list-command.test.ts +0 -77
  211. package/tests/unit/config-manager.test.ts +0 -228
  212. package/tests/unit/git-resolver.test.ts +0 -303
  213. package/tests/unit/installer.test.ts +0 -105
  214. package/tsconfig.json +0 -20
  215. 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":"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"}
@@ -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":";AAAA;;;;;GAKG;;;;;AAyBH,oDAwFC;AA/GD,yCAAoC;AACpC,wDAA0B;AAC1B,gDAAwB;AACxB,4CAAyC;AACzC,+DAA2D;AAC3D,qEAAiE;AAajE;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAI,mBAAO,CAAC,SAAS,CAAC;SAC1B,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;SAClD,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAuB,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,eAAM,CAAC,YAAY,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;YAE9C,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAEjE,iCAAiC;YACjC,IAAI,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxC,eAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;gBAC9C,eAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,2DAA2D;YAC3D,MAAM,MAAM,GAAkB,MAAM,kBAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,eAAM,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,eAAM,CAAC,WAAW,CAAC,GAAG,IAAI,kBAAkB,CAAC,CAAC;gBAC9C,eAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBAClD,eAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,4BAA4B;YAC5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;YAClE,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC;gBACjD,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;gBACpC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YAE9C,uBAAuB;YACvB,MAAM,kBAAE,CAAC,SAAS,CAChB,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC7C,OAAO,CACR,CAAC;YAEF,eAAM,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;YAE5C,oBAAoB;YACpB,eAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;YAC9C,MAAM,oCAAgB,CAAC,UAAU,EAAE,CAAC;YACpC,eAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;YAE5C,0BAA0B;YAC1B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,8BAAa,CAAC,cAAc,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAEvE,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,eAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;oBAC/C,MAAM,kBAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC1B,eAAM,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,WAAW,CAAC,CAAC;gBACpE,OAAO,CAAC,GAAG,CAAC,yBAAyB,8BAAa,CAAC,cAAc,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAElB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;YAC9C,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;AACP,CAAC"}
@@ -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"}