@agents-inc/cli 0.42.1 → 0.46.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 (186) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +128 -113
  3. package/assets/logo.png +0 -0
  4. package/assets/logo.svg +75 -0
  5. package/dist/{chunk-ZHJEZ7AU.js → chunk-3WKFSTG6.js} +2 -2
  6. package/dist/{chunk-IUYU2TP6.js → chunk-4C7PDDLY.js} +7 -7
  7. package/dist/{chunk-AQANPOLS.js → chunk-5M6JI76P.js} +2 -2
  8. package/dist/{chunk-UXNHU7Y7.js → chunk-5QRJUBK7.js} +133 -56
  9. package/dist/chunk-5QRJUBK7.js.map +1 -0
  10. package/dist/{chunk-33D24DAF.js → chunk-72GS6PIH.js} +10 -10
  11. package/dist/{chunk-PP7NDFFE.js → chunk-74HSA7C4.js} +10 -1
  12. package/dist/chunk-74HSA7C4.js.map +1 -0
  13. package/dist/chunk-7LDSHHKN.js +132 -0
  14. package/dist/chunk-7LDSHHKN.js.map +1 -0
  15. package/dist/{chunk-52SI5XJH.js → chunk-C7BO2ASM.js} +2 -7
  16. package/dist/chunk-C7BO2ASM.js.map +1 -0
  17. package/dist/{chunk-53K3URKF.js → chunk-CD64ZNYI.js} +5 -3
  18. package/dist/chunk-CD64ZNYI.js.map +1 -0
  19. package/dist/chunk-CDGHSTB6.js +69 -0
  20. package/dist/chunk-CDGHSTB6.js.map +1 -0
  21. package/dist/{chunk-FF4Z7MHY.js → chunk-CTQHZELA.js} +28 -20
  22. package/dist/chunk-CTQHZELA.js.map +1 -0
  23. package/dist/{chunk-44QCEK7E.js → chunk-D7JTL3DJ.js} +2 -2
  24. package/dist/{chunk-MMD26LKJ.js → chunk-DO5OZHSS.js} +2 -2
  25. package/dist/{chunk-ORJPGZVD.js → chunk-FKBCYT7B.js} +7 -7
  26. package/dist/chunk-FKBCYT7B.js.map +1 -0
  27. package/dist/{chunk-WMAALRQI.js → chunk-FUEZQ2H6.js} +5 -5
  28. package/dist/{chunk-WMAALRQI.js.map → chunk-FUEZQ2H6.js.map} +1 -1
  29. package/dist/{chunk-HMGWGWFT.js → chunk-G2WNOT3R.js} +2 -2
  30. package/dist/{chunk-BKW34TKI.js → chunk-GVLYNP2I.js} +4 -4
  31. package/dist/{chunk-VHGIQN5O.js → chunk-HM3DHMW7.js} +70 -24
  32. package/dist/chunk-HM3DHMW7.js.map +1 -0
  33. package/dist/{chunk-MI4NWOWD.js → chunk-I26YP2Q3.js} +5 -12
  34. package/dist/chunk-I26YP2Q3.js.map +1 -0
  35. package/dist/{chunk-FDY6SGSA.js → chunk-J64CA4V6.js} +5 -3
  36. package/dist/chunk-J64CA4V6.js.map +1 -0
  37. package/dist/{chunk-EFZN22TO.js → chunk-KWQ2BQXF.js} +3 -3
  38. package/dist/{chunk-ALWLM5MC.js → chunk-LFZXMQOH.js} +2 -2
  39. package/dist/{chunk-2TWELY5M.js → chunk-NMXNHRAK.js} +3 -3
  40. package/dist/{chunk-GCN7GGWE.js → chunk-ODQ2BKWU.js} +3 -3
  41. package/dist/{chunk-KA253GGY.js → chunk-PZLUO4OY.js} +4 -4
  42. package/dist/{chunk-X34RGEFX.js → chunk-QBUOZVNZ.js} +2 -2
  43. package/dist/{chunk-SYHRJG5G.js → chunk-RT6IBH37.js} +3498 -3592
  44. package/dist/chunk-RT6IBH37.js.map +1 -0
  45. package/dist/{chunk-YRVTXSXP.js → chunk-RWR56UVK.js} +3 -18
  46. package/dist/chunk-RWR56UVK.js.map +1 -0
  47. package/dist/{chunk-PEAPABFI.js → chunk-SGXUMZWL.js} +2 -2
  48. package/dist/{chunk-MHET2RG2.js → chunk-TOWP4T5L.js} +2 -2
  49. package/dist/{chunk-XRA4LHTJ.js → chunk-UK3AMBR7.js} +18 -14
  50. package/dist/chunk-UK3AMBR7.js.map +1 -0
  51. package/dist/{chunk-GIZ6DENW.js → chunk-VH3PI43B.js} +4 -4
  52. package/dist/{chunk-J73KIP6Z.js → chunk-XE6RTHUD.js} +66 -5
  53. package/dist/chunk-XE6RTHUD.js.map +1 -0
  54. package/dist/{chunk-EPJ2GJNJ.js → chunk-YT7UHV67.js} +10 -10
  55. package/dist/{chunk-UVVNWF43.js → chunk-YVMYQSED.js} +2 -2
  56. package/dist/commands/build/marketplace.js +12 -126
  57. package/dist/commands/build/marketplace.js.map +1 -1
  58. package/dist/commands/build/plugins.js +5 -5
  59. package/dist/commands/build/stack.js +5 -5
  60. package/dist/commands/compile.js +6 -6
  61. package/dist/commands/config/get.js +4 -4
  62. package/dist/commands/config/index.js +5 -5
  63. package/dist/commands/config/path.js +4 -4
  64. package/dist/commands/config/set-project.js +4 -4
  65. package/dist/commands/config/show.js +5 -5
  66. package/dist/commands/config/unset-project.js +4 -4
  67. package/dist/commands/diff.js +4 -4
  68. package/dist/commands/doctor.js +4 -4
  69. package/dist/commands/edit.js +33 -30
  70. package/dist/commands/edit.js.map +1 -1
  71. package/dist/commands/eject.js +54 -33
  72. package/dist/commands/eject.js.map +1 -1
  73. package/dist/commands/import/skill.js +5 -5
  74. package/dist/commands/info.js +5 -5
  75. package/dist/commands/init.js +33 -37
  76. package/dist/commands/init.js.map +1 -1
  77. package/dist/commands/list.js +4 -4
  78. package/dist/commands/new/agent.js +52 -38
  79. package/dist/commands/new/agent.js.map +1 -1
  80. package/dist/commands/new/marketplace.js +252 -0
  81. package/dist/commands/new/marketplace.js.map +1 -0
  82. package/dist/commands/new/skill.js +30 -15
  83. package/dist/commands/new/skill.js.map +1 -1
  84. package/dist/commands/outdated.js +4 -4
  85. package/dist/commands/search.js +7 -7
  86. package/dist/commands/uninstall.js +6 -6
  87. package/dist/commands/update.js +6 -6
  88. package/dist/commands/validate.js +5 -5
  89. package/dist/components/skill-search/skill-search.js +3 -3
  90. package/dist/components/wizard/category-grid.js +2 -2
  91. package/dist/components/wizard/category-grid.test.js +184 -98
  92. package/dist/components/wizard/category-grid.test.js.map +1 -1
  93. package/dist/components/wizard/checkbox-grid.js +3 -3
  94. package/dist/components/wizard/checkbox-grid.test.js +3 -3
  95. package/dist/components/wizard/domain-selection.js +9 -8
  96. package/dist/components/wizard/help-modal.js +2 -2
  97. package/dist/components/wizard/menu-item.js +1 -1
  98. package/dist/components/wizard/search-modal.js +2 -2
  99. package/dist/components/wizard/search-modal.test.js +2 -11
  100. package/dist/components/wizard/search-modal.test.js.map +1 -1
  101. package/dist/components/wizard/section-progress.js +2 -2
  102. package/dist/components/wizard/section-progress.test.js +2 -2
  103. package/dist/components/wizard/selection-card.js +2 -2
  104. package/dist/components/wizard/source-grid.js +3 -3
  105. package/dist/components/wizard/source-grid.test.js +5 -9
  106. package/dist/components/wizard/source-grid.test.js.map +1 -1
  107. package/dist/components/wizard/stack-selection.js +8 -9
  108. package/dist/components/wizard/step-agents.js +8 -7
  109. package/dist/components/wizard/step-agents.test.js +25 -20
  110. package/dist/components/wizard/step-agents.test.js.map +1 -1
  111. package/dist/components/wizard/step-build.js +8 -8
  112. package/dist/components/wizard/step-build.test.js +25 -40
  113. package/dist/components/wizard/step-build.test.js.map +1 -1
  114. package/dist/components/wizard/step-confirm.js +4 -4
  115. package/dist/components/wizard/step-confirm.test.js +8 -8
  116. package/dist/components/wizard/step-refine.js +2 -2
  117. package/dist/components/wizard/step-refine.test.js +2 -2
  118. package/dist/components/wizard/step-settings.js +5 -5
  119. package/dist/components/wizard/step-settings.test.js +8 -8
  120. package/dist/components/wizard/step-sources.js +11 -11
  121. package/dist/components/wizard/step-sources.test.js +14 -20
  122. package/dist/components/wizard/step-sources.test.js.map +1 -1
  123. package/dist/components/wizard/step-stack.js +12 -12
  124. package/dist/components/wizard/step-stack.test.js +32 -29
  125. package/dist/components/wizard/step-stack.test.js.map +1 -1
  126. package/dist/components/wizard/view-title.js +2 -2
  127. package/dist/components/wizard/wizard-layout.js +8 -8
  128. package/dist/components/wizard/wizard-tabs.js +2 -2
  129. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  130. package/dist/components/wizard/wizard.js +26 -26
  131. package/dist/hooks/init.js +3 -5
  132. package/dist/hooks/init.js.map +1 -1
  133. package/dist/{source-manager-ABK5COKX.js → source-manager-6QZ2GDUA.js} +4 -4
  134. package/dist/stores/wizard-store.js +5 -5
  135. package/dist/stores/wizard-store.test.js +29 -49
  136. package/dist/stores/wizard-store.test.js.map +1 -1
  137. package/package.json +3 -1
  138. package/src/schemas/agent.schema.json +3 -0
  139. package/src/schemas/metadata.schema.json +4 -46
  140. package/src/schemas/project-config.schema.json +8 -4
  141. package/src/schemas/skills-matrix.schema.json +11 -298
  142. package/src/schemas/stacks.schema.json +2 -4
  143. package/dist/chunk-52SI5XJH.js.map +0 -1
  144. package/dist/chunk-53K3URKF.js.map +0 -1
  145. package/dist/chunk-FDY6SGSA.js.map +0 -1
  146. package/dist/chunk-FF4Z7MHY.js.map +0 -1
  147. package/dist/chunk-GVRZY5KI.js +0 -45
  148. package/dist/chunk-GVRZY5KI.js.map +0 -1
  149. package/dist/chunk-J73KIP6Z.js.map +0 -1
  150. package/dist/chunk-MI4NWOWD.js.map +0 -1
  151. package/dist/chunk-ORJPGZVD.js.map +0 -1
  152. package/dist/chunk-PP7NDFFE.js.map +0 -1
  153. package/dist/chunk-SYHRJG5G.js.map +0 -1
  154. package/dist/chunk-UXNHU7Y7.js.map +0 -1
  155. package/dist/chunk-VHGIQN5O.js.map +0 -1
  156. package/dist/chunk-XRA4LHTJ.js.map +0 -1
  157. package/dist/chunk-YRVTXSXP.js.map +0 -1
  158. package/dist/cli/defaults/agent-mappings.yaml +0 -215
  159. package/dist/commands/version/bump.js +0 -79
  160. package/dist/commands/version/bump.js.map +0 -1
  161. package/dist/commands/version/index.js +0 -54
  162. package/dist/commands/version/index.js.map +0 -1
  163. package/dist/commands/version/set.js +0 -86
  164. package/dist/commands/version/set.js.map +0 -1
  165. package/dist/commands/version/show.js +0 -54
  166. package/dist/commands/version/show.js.map +0 -1
  167. /package/dist/{chunk-ZHJEZ7AU.js.map → chunk-3WKFSTG6.js.map} +0 -0
  168. /package/dist/{chunk-IUYU2TP6.js.map → chunk-4C7PDDLY.js.map} +0 -0
  169. /package/dist/{chunk-AQANPOLS.js.map → chunk-5M6JI76P.js.map} +0 -0
  170. /package/dist/{chunk-33D24DAF.js.map → chunk-72GS6PIH.js.map} +0 -0
  171. /package/dist/{chunk-44QCEK7E.js.map → chunk-D7JTL3DJ.js.map} +0 -0
  172. /package/dist/{chunk-MMD26LKJ.js.map → chunk-DO5OZHSS.js.map} +0 -0
  173. /package/dist/{chunk-HMGWGWFT.js.map → chunk-G2WNOT3R.js.map} +0 -0
  174. /package/dist/{chunk-BKW34TKI.js.map → chunk-GVLYNP2I.js.map} +0 -0
  175. /package/dist/{chunk-EFZN22TO.js.map → chunk-KWQ2BQXF.js.map} +0 -0
  176. /package/dist/{chunk-ALWLM5MC.js.map → chunk-LFZXMQOH.js.map} +0 -0
  177. /package/dist/{chunk-2TWELY5M.js.map → chunk-NMXNHRAK.js.map} +0 -0
  178. /package/dist/{chunk-GCN7GGWE.js.map → chunk-ODQ2BKWU.js.map} +0 -0
  179. /package/dist/{chunk-KA253GGY.js.map → chunk-PZLUO4OY.js.map} +0 -0
  180. /package/dist/{chunk-X34RGEFX.js.map → chunk-QBUOZVNZ.js.map} +0 -0
  181. /package/dist/{chunk-PEAPABFI.js.map → chunk-SGXUMZWL.js.map} +0 -0
  182. /package/dist/{chunk-MHET2RG2.js.map → chunk-TOWP4T5L.js.map} +0 -0
  183. /package/dist/{chunk-GIZ6DENW.js.map → chunk-VH3PI43B.js.map} +0 -0
  184. /package/dist/{chunk-EPJ2GJNJ.js.map → chunk-YT7UHV67.js.map} +0 -0
  185. /package/dist/{chunk-UVVNWF43.js.map → chunk-YVMYQSED.js.map} +0 -0
  186. /package/dist/{source-manager-ABK5COKX.js.map → source-manager-6QZ2GDUA.js.map} +0 -0
@@ -1,25 +1,21 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ generateMarketplace,
4
+ getMarketplaceStats,
5
+ writeMarketplace
6
+ } from "../../chunk-7LDSHHKN.js";
2
7
  import {
3
8
  BaseCommand
4
- } from "../../chunk-ALWLM5MC.js";
9
+ } from "../../chunk-LFZXMQOH.js";
5
10
  import {
6
- ensureDir,
7
- getErrorMessage,
8
- glob,
9
- pluginManifestSchema,
10
- readFileSafe,
11
- setVerbose,
12
- verbose,
13
- warn,
14
- writeFile
15
- } from "../../chunk-UXNHU7Y7.js";
11
+ setVerbose
12
+ } from "../../chunk-5QRJUBK7.js";
16
13
  import {
17
14
  DEFAULT_BRANDING,
18
15
  DEFAULT_PLUGIN_NAME,
19
16
  DEFAULT_VERSION,
20
- MAX_PLUGIN_FILE_SIZE,
21
17
  PLUGIN_MANIFEST_DIR
22
- } from "../../chunk-PP7NDFFE.js";
18
+ } from "../../chunk-74HSA7C4.js";
23
19
  import {
24
20
  init_esm_shims
25
21
  } from "../../chunk-DHET7RCE.js";
@@ -27,118 +23,8 @@ import {
27
23
  // src/cli/commands/build/marketplace.ts
28
24
  init_esm_shims();
29
25
  import { Flags } from "@oclif/core";
30
- import path2 from "path";
31
- import { sortBy as sortBy2 } from "remeda";
32
-
33
- // src/cli/lib/marketplace-generator.ts
34
- init_esm_shims();
35
26
  import path from "path";
36
27
  import { sortBy } from "remeda";
37
- var PLUGIN_MANIFEST_PATH = ".claude-plugin/plugin.json";
38
- var MARKETPLACE_SCHEMA_URL = "https://anthropic.com/claude-code/marketplace.schema.json";
39
- var CATEGORY_PATTERNS = [
40
- { pattern: /^web-/, category: "web" },
41
- { pattern: /^api-/, category: "api" },
42
- { pattern: /^cli-/, category: "cli" },
43
- { pattern: /^meta-/, category: "methodology" },
44
- { pattern: /^infra-/, category: "infra" },
45
- { pattern: /^mobile-/, category: "mobile" },
46
- { pattern: /^security-/, category: "security" }
47
- ];
48
- function inferCategoryFromPluginName(pluginName) {
49
- for (const { pattern, category } of CATEGORY_PATTERNS) {
50
- if (pattern.test(pluginName)) {
51
- return category;
52
- }
53
- }
54
- return void 0;
55
- }
56
- async function readPluginManifest(pluginDir) {
57
- const manifestPath = path.join(pluginDir, PLUGIN_MANIFEST_PATH);
58
- try {
59
- const content = await readFileSafe(manifestPath, MAX_PLUGIN_FILE_SIZE);
60
- return pluginManifestSchema.parse(JSON.parse(content));
61
- } catch (error) {
62
- verbose(`Failed to read plugin manifest at '${manifestPath}': ${getErrorMessage(error)}`);
63
- return null;
64
- }
65
- }
66
- function convertManifestToMarketplacePlugin(manifest, pluginRoot, pluginDirName) {
67
- const category = inferCategoryFromPluginName(manifest.name);
68
- const plugin = {
69
- name: manifest.name,
70
- source: `./${pluginRoot}/${pluginDirName}`,
71
- description: manifest.description,
72
- version: manifest.version,
73
- author: manifest.author,
74
- keywords: manifest.keywords
75
- };
76
- if (category) {
77
- plugin.category = category;
78
- }
79
- return plugin;
80
- }
81
- async function generateMarketplace(pluginsDir, options) {
82
- verbose(`Scanning plugins directory: ${pluginsDir}`);
83
- const manifestFiles = await glob(`**/${PLUGIN_MANIFEST_PATH}`, pluginsDir);
84
- verbose(`Found ${manifestFiles.length} plugin manifests`);
85
- const plugins = [];
86
- for (const manifestFile of manifestFiles) {
87
- const pluginDirName = manifestFile.split("/")[0];
88
- const pluginDir = path.join(pluginsDir, pluginDirName);
89
- const manifest = await readPluginManifest(pluginDir);
90
- if (!manifest) {
91
- warn(`Could not read plugin manifest: '${manifestFile}'`);
92
- continue;
93
- }
94
- const plugin = convertManifestToMarketplacePlugin(
95
- manifest,
96
- options.pluginRoot.replace(/^\.\//, ""),
97
- pluginDirName
98
- );
99
- plugins.push(plugin);
100
- verbose(` [OK] ${plugin.name}`);
101
- }
102
- const sortedPlugins = sortBy(plugins, (p) => p.name);
103
- const marketplace = {
104
- $schema: MARKETPLACE_SCHEMA_URL,
105
- name: options.name,
106
- version: options.version ?? "1.0.0",
107
- owner: {
108
- name: options.ownerName
109
- },
110
- metadata: {
111
- pluginRoot: options.pluginRoot
112
- },
113
- plugins: sortedPlugins
114
- };
115
- if (options.description) {
116
- marketplace.description = options.description;
117
- }
118
- if (options.ownerEmail) {
119
- marketplace.owner.email = options.ownerEmail;
120
- }
121
- return marketplace;
122
- }
123
- async function writeMarketplace(outputPath, marketplace) {
124
- await ensureDir(path.dirname(outputPath));
125
- const content = `${JSON.stringify(marketplace, null, 2)}
126
- `;
127
- await writeFile(outputPath, content);
128
- }
129
- function getMarketplaceStats(marketplace) {
130
- const byCategory = {};
131
- for (const plugin of marketplace.plugins) {
132
- const category = plugin.category ?? "uncategorized";
133
- byCategory[category] = (byCategory[category] ?? 0) + 1;
134
- }
135
- return {
136
- total: marketplace.plugins.length,
137
- byCategory
138
- };
139
- }
140
-
141
- // src/cli/commands/build/marketplace.ts
142
28
  var DEFAULT_PLUGINS_DIR = "dist/plugins";
143
29
  var DEFAULT_OUTPUT_FILE = `${PLUGIN_MANIFEST_DIR}/marketplace.json`;
144
30
  var DEFAULT_DESCRIPTION = "Community skills and stacks for Claude Code";
@@ -195,8 +81,8 @@ var BuildMarketplace = class _BuildMarketplace extends BaseCommand {
195
81
  const { flags } = await this.parse(_BuildMarketplace);
196
82
  setVerbose(flags.verbose);
197
83
  const projectRoot = process.cwd();
198
- const pluginsDir = path2.resolve(projectRoot, flags["plugins-dir"]);
199
- const outputPath = path2.resolve(projectRoot, flags.output);
84
+ const pluginsDir = path.resolve(projectRoot, flags["plugins-dir"]);
85
+ const outputPath = path.resolve(projectRoot, flags.output);
200
86
  this.log("");
201
87
  this.log("Generating marketplace.json");
202
88
  this.log(` Plugins directory: ${pluginsDir}`);
@@ -216,7 +102,7 @@ var BuildMarketplace = class _BuildMarketplace extends BaseCommand {
216
102
  this.log(`Found ${stats.total} plugins`);
217
103
  this.log("");
218
104
  this.log("Category breakdown:");
219
- const sortedCategories = sortBy2(Object.entries(stats.byCategory), ([, count]) => -count);
105
+ const sortedCategories = sortBy(Object.entries(stats.byCategory), ([, count]) => -count);
220
106
  for (const [category, count] of sortedCategories) {
221
107
  this.log(` ${category}: ${count}`);
222
108
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/build/marketplace.ts","../../../src/cli/lib/marketplace-generator.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { sortBy } from \"remeda\";\n\nimport { BaseCommand } from \"../../base-command\";\nimport { setVerbose } from \"../../utils/logger\";\nimport {\n generateMarketplace,\n writeMarketplace,\n getMarketplaceStats,\n} from \"../../lib/marketplace-generator\";\nimport {\n DEFAULT_BRANDING,\n DEFAULT_PLUGIN_NAME,\n DEFAULT_VERSION,\n PLUGIN_MANIFEST_DIR,\n} from \"../../consts\";\n\nconst DEFAULT_PLUGINS_DIR = \"dist/plugins\";\nconst DEFAULT_OUTPUT_FILE = `${PLUGIN_MANIFEST_DIR}/marketplace.json`;\nconst DEFAULT_DESCRIPTION = \"Community skills and stacks for Claude Code\";\nconst DEFAULT_OWNER_NAME = DEFAULT_BRANDING.NAME;\nconst DEFAULT_OWNER_EMAIL = `hello@${DEFAULT_PLUGIN_NAME}.com`;\n\nexport default class BuildMarketplace extends BaseCommand {\n static summary = \"Generate marketplace.json from built plugins (requires skills repo)\";\n\n static description =\n \"Generate marketplace.json from built plugins. This command scans the plugins directory and generates a marketplace manifest file.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --plugins-dir dist/stacks\",\n \"<%= config.bin %> <%= command.id %> --output .claude-plugin/market.json\",\n \"<%= config.bin %> <%= command.id %> --name my-marketplace --version 2.0.0\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n \"plugins-dir\": Flags.string({\n char: \"p\",\n description: \"Plugins directory\",\n default: DEFAULT_PLUGINS_DIR,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output file\",\n default: DEFAULT_OUTPUT_FILE,\n }),\n name: Flags.string({\n description: \"Marketplace name\",\n default: DEFAULT_PLUGIN_NAME,\n }),\n version: Flags.string({\n description: \"Marketplace version\",\n default: DEFAULT_VERSION,\n }),\n description: Flags.string({\n description: \"Marketplace description\",\n default: DEFAULT_DESCRIPTION,\n }),\n \"owner-name\": Flags.string({\n description: \"Owner name\",\n default: DEFAULT_OWNER_NAME,\n }),\n \"owner-email\": Flags.string({\n description: \"Owner email\",\n default: DEFAULT_OWNER_EMAIL,\n }),\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(BuildMarketplace);\n\n setVerbose(flags.verbose);\n\n const projectRoot = process.cwd();\n const pluginsDir = path.resolve(projectRoot, flags[\"plugins-dir\"]);\n const outputPath = path.resolve(projectRoot, flags.output);\n\n this.log(\"\");\n this.log(\"Generating marketplace.json\");\n this.log(` Plugins directory: ${pluginsDir}`);\n this.log(` Output file: ${outputPath}`);\n this.log(\"\");\n\n try {\n this.log(\"Scanning plugins...\");\n\n const marketplace = await generateMarketplace(pluginsDir, {\n name: flags.name,\n version: flags.version,\n description: flags.description,\n ownerName: flags[\"owner-name\"],\n ownerEmail: flags[\"owner-email\"],\n pluginRoot: `./${flags[\"plugins-dir\"]}`,\n });\n\n const stats = getMarketplaceStats(marketplace);\n this.log(`Found ${stats.total} plugins`);\n\n this.log(\"\");\n this.log(\"Category breakdown:\");\n const sortedCategories = sortBy(Object.entries(stats.byCategory), ([, count]) => -count);\n for (const [category, count] of sortedCategories) {\n this.log(` ${category}: ${count}`);\n }\n\n this.log(\"Writing marketplace.json...\");\n await writeMarketplace(outputPath, marketplace);\n this.log(`Wrote ${outputPath}`);\n\n this.log(\"\");\n this.log(\"Sample plugins:\");\n const sampleSize = 5;\n for (const plugin of marketplace.plugins.slice(0, sampleSize)) {\n const version = plugin.version ? `v${plugin.version}` : \"\";\n const category = plugin.category ? `[${plugin.category}]` : \"\";\n this.log(` ${plugin.name} ${version} ${category}`);\n if (plugin.description) {\n this.log(` ${plugin.description}`);\n }\n }\n if (marketplace.plugins.length > sampleSize) {\n this.log(` ... and ${marketplace.plugins.length - sampleSize} more`);\n }\n\n this.log(\"\");\n this.logSuccess(`Marketplace generated with ${stats.total} plugins!`);\n this.log(\"\");\n } catch (error) {\n this.log(\"Generation failed\");\n this.handleError(error);\n }\n }\n}\n","import path from \"path\";\nimport { sortBy } from \"remeda\";\n\nimport { MAX_PLUGIN_FILE_SIZE } from \"../consts\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport { readFileSafe, writeFile, glob, ensureDir } from \"../utils/fs\";\nimport { verbose, warn } from \"../utils/logger\";\nimport type { Marketplace, MarketplacePlugin, PluginManifest } from \"../types\";\nimport { pluginManifestSchema } from \"./schemas\";\n\nconst PLUGIN_MANIFEST_PATH = \".claude-plugin/plugin.json\";\nconst MARKETPLACE_SCHEMA_URL = \"https://anthropic.com/claude-code/marketplace.schema.json\";\n\n/**\n * Category patterns for marketplace plugins.\n *\n * Plugin names match skill IDs directly (e.g., \"web-framework-react\").\n * The category is the first segment of the ID:\n * - web-* -> web\n * - api-* -> api\n * - cli-* -> cli\n * - meta-* -> methodology\n * - infra-* -> infra\n * - mobile-* -> mobile\n * - security-* -> security\n */\nconst CATEGORY_PATTERNS: Array<{ pattern: RegExp; category: string }> = [\n { pattern: /^web-/, category: \"web\" },\n { pattern: /^api-/, category: \"api\" },\n { pattern: /^cli-/, category: \"cli\" },\n { pattern: /^meta-/, category: \"methodology\" },\n { pattern: /^infra-/, category: \"infra\" },\n { pattern: /^mobile-/, category: \"mobile\" },\n { pattern: /^security-/, category: \"security\" },\n];\n\ntype MarketplaceOptions = {\n name: string;\n version?: string;\n description?: string;\n ownerName: string;\n ownerEmail?: string;\n pluginRoot: string;\n};\n\nfunction inferCategoryFromPluginName(pluginName: string): string | undefined {\n for (const { pattern, category } of CATEGORY_PATTERNS) {\n if (pattern.test(pluginName)) {\n return category;\n }\n }\n return undefined;\n}\n\nasync function readPluginManifest(pluginDir: string): Promise<PluginManifest | null> {\n const manifestPath = path.join(pluginDir, PLUGIN_MANIFEST_PATH);\n\n try {\n const content = await readFileSafe(manifestPath, MAX_PLUGIN_FILE_SIZE);\n return pluginManifestSchema.parse(JSON.parse(content));\n } catch (error) {\n verbose(`Failed to read plugin manifest at '${manifestPath}': ${getErrorMessage(error)}`);\n return null;\n }\n}\n\nfunction convertManifestToMarketplacePlugin(\n manifest: PluginManifest,\n pluginRoot: string,\n pluginDirName: string,\n): MarketplacePlugin {\n const category = inferCategoryFromPluginName(manifest.name);\n\n const plugin: MarketplacePlugin = {\n name: manifest.name,\n source: `./${pluginRoot}/${pluginDirName}`,\n description: manifest.description,\n version: manifest.version,\n author: manifest.author,\n keywords: manifest.keywords,\n };\n\n if (category) {\n plugin.category = category;\n }\n\n return plugin;\n}\n\nexport async function generateMarketplace(\n pluginsDir: string,\n options: MarketplaceOptions,\n): Promise<Marketplace> {\n verbose(`Scanning plugins directory: ${pluginsDir}`);\n\n const manifestFiles = await glob(`**/${PLUGIN_MANIFEST_PATH}`, pluginsDir);\n verbose(`Found ${manifestFiles.length} plugin manifests`);\n\n const plugins: MarketplacePlugin[] = [];\n\n for (const manifestFile of manifestFiles) {\n const pluginDirName = manifestFile.split(\"/\")[0];\n const pluginDir = path.join(pluginsDir, pluginDirName);\n\n const manifest = await readPluginManifest(pluginDir);\n if (!manifest) {\n warn(`Could not read plugin manifest: '${manifestFile}'`);\n continue;\n }\n\n const plugin = convertManifestToMarketplacePlugin(\n manifest,\n options.pluginRoot.replace(/^\\.\\//, \"\"),\n pluginDirName,\n );\n plugins.push(plugin);\n verbose(` [OK] ${plugin.name}`);\n }\n\n const sortedPlugins = sortBy(plugins, (p) => p.name);\n\n const marketplace: Marketplace = {\n $schema: MARKETPLACE_SCHEMA_URL,\n name: options.name,\n version: options.version ?? \"1.0.0\",\n owner: {\n name: options.ownerName,\n },\n metadata: {\n pluginRoot: options.pluginRoot,\n },\n plugins: sortedPlugins,\n };\n\n if (options.description) {\n marketplace.description = options.description;\n }\n\n if (options.ownerEmail) {\n marketplace.owner.email = options.ownerEmail;\n }\n\n return marketplace;\n}\n\nexport async function writeMarketplace(\n outputPath: string,\n marketplace: Marketplace,\n): Promise<void> {\n await ensureDir(path.dirname(outputPath));\n const content = `${JSON.stringify(marketplace, null, 2)}\\n`;\n await writeFile(outputPath, content);\n}\n\nexport function getMarketplaceStats(marketplace: Marketplace): {\n total: number;\n byCategory: Record<string, number>;\n} {\n const byCategory: Record<string, number> = {};\n\n for (const plugin of marketplace.plugins) {\n const category = plugin.category ?? \"uncategorized\";\n byCategory[category] = (byCategory[category] ?? 0) + 1;\n }\n\n return {\n total: marketplace.plugins.length,\n byCategory,\n };\n}\n"],"mappings":"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","names":["path","sortBy","path","sortBy"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/build/marketplace.ts"],"sourcesContent":["import { Flags } from \"@oclif/core\";\nimport path from \"path\";\nimport { sortBy } from \"remeda\";\n\nimport { BaseCommand } from \"../../base-command\";\nimport { setVerbose } from \"../../utils/logger\";\nimport {\n generateMarketplace,\n writeMarketplace,\n getMarketplaceStats,\n} from \"../../lib/marketplace-generator\";\nimport {\n DEFAULT_BRANDING,\n DEFAULT_PLUGIN_NAME,\n DEFAULT_VERSION,\n PLUGIN_MANIFEST_DIR,\n} from \"../../consts\";\n\nconst DEFAULT_PLUGINS_DIR = \"dist/plugins\";\nconst DEFAULT_OUTPUT_FILE = `${PLUGIN_MANIFEST_DIR}/marketplace.json`;\nconst DEFAULT_DESCRIPTION = \"Community skills and stacks for Claude Code\";\nconst DEFAULT_OWNER_NAME = DEFAULT_BRANDING.NAME;\nconst DEFAULT_OWNER_EMAIL = `hello@${DEFAULT_PLUGIN_NAME}.com`;\n\nexport default class BuildMarketplace extends BaseCommand {\n static summary = \"Generate marketplace.json from built plugins (requires skills repo)\";\n\n static description =\n \"Generate marketplace.json from built plugins. This command scans the plugins directory and generates a marketplace manifest file.\";\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --plugins-dir dist/stacks\",\n \"<%= config.bin %> <%= command.id %> --output .claude-plugin/market.json\",\n \"<%= config.bin %> <%= command.id %> --name my-marketplace --version 2.0.0\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n \"plugins-dir\": Flags.string({\n char: \"p\",\n description: \"Plugins directory\",\n default: DEFAULT_PLUGINS_DIR,\n }),\n output: Flags.string({\n char: \"o\",\n description: \"Output file\",\n default: DEFAULT_OUTPUT_FILE,\n }),\n name: Flags.string({\n description: \"Marketplace name\",\n default: DEFAULT_PLUGIN_NAME,\n }),\n version: Flags.string({\n description: \"Marketplace version\",\n default: DEFAULT_VERSION,\n }),\n description: Flags.string({\n description: \"Marketplace description\",\n default: DEFAULT_DESCRIPTION,\n }),\n \"owner-name\": Flags.string({\n description: \"Owner name\",\n default: DEFAULT_OWNER_NAME,\n }),\n \"owner-email\": Flags.string({\n description: \"Owner email\",\n default: DEFAULT_OWNER_EMAIL,\n }),\n verbose: Flags.boolean({\n char: \"v\",\n description: \"Enable verbose logging\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(BuildMarketplace);\n\n setVerbose(flags.verbose);\n\n const projectRoot = process.cwd();\n const pluginsDir = path.resolve(projectRoot, flags[\"plugins-dir\"]);\n const outputPath = path.resolve(projectRoot, flags.output);\n\n this.log(\"\");\n this.log(\"Generating marketplace.json\");\n this.log(` Plugins directory: ${pluginsDir}`);\n this.log(` Output file: ${outputPath}`);\n this.log(\"\");\n\n try {\n this.log(\"Scanning plugins...\");\n\n const marketplace = await generateMarketplace(pluginsDir, {\n name: flags.name,\n version: flags.version,\n description: flags.description,\n ownerName: flags[\"owner-name\"],\n ownerEmail: flags[\"owner-email\"],\n pluginRoot: `./${flags[\"plugins-dir\"]}`,\n });\n\n const stats = getMarketplaceStats(marketplace);\n this.log(`Found ${stats.total} plugins`);\n\n this.log(\"\");\n this.log(\"Category breakdown:\");\n const sortedCategories = sortBy(Object.entries(stats.byCategory), ([, count]) => -count);\n for (const [category, count] of sortedCategories) {\n this.log(` ${category}: ${count}`);\n }\n\n this.log(\"Writing marketplace.json...\");\n await writeMarketplace(outputPath, marketplace);\n this.log(`Wrote ${outputPath}`);\n\n this.log(\"\");\n this.log(\"Sample plugins:\");\n const sampleSize = 5;\n for (const plugin of marketplace.plugins.slice(0, sampleSize)) {\n const version = plugin.version ? `v${plugin.version}` : \"\";\n const category = plugin.category ? `[${plugin.category}]` : \"\";\n this.log(` ${plugin.name} ${version} ${category}`);\n if (plugin.description) {\n this.log(` ${plugin.description}`);\n }\n }\n if (marketplace.plugins.length > sampleSize) {\n this.log(` ... and ${marketplace.plugins.length - sampleSize} more`);\n }\n\n this.log(\"\");\n this.logSuccess(`Marketplace generated with ${stats.total} plugins!`);\n this.log(\"\");\n } catch (error) {\n this.log(\"Generation failed\");\n this.handleError(error);\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,22 +2,22 @@
2
2
  import {
3
3
  compileAllAgentPlugins,
4
4
  printAgentCompilationSummary
5
- } from "../../chunk-KA253GGY.js";
5
+ } from "../../chunk-PZLUO4OY.js";
6
6
  import {
7
7
  BaseCommand
8
- } from "../../chunk-ALWLM5MC.js";
8
+ } from "../../chunk-LFZXMQOH.js";
9
9
  import {
10
10
  compileAllSkillPlugins,
11
11
  compileSkillPlugin,
12
12
  printCompilationSummary
13
- } from "../../chunk-SYHRJG5G.js";
13
+ } from "../../chunk-RT6IBH37.js";
14
14
  import "../../chunk-T4EXUIBY.js";
15
15
  import {
16
16
  setVerbose
17
- } from "../../chunk-UXNHU7Y7.js";
17
+ } from "../../chunk-5QRJUBK7.js";
18
18
  import {
19
19
  DIRS
20
- } from "../../chunk-PP7NDFFE.js";
20
+ } from "../../chunk-74HSA7C4.js";
21
21
  import {
22
22
  init_esm_shims
23
23
  } from "../../chunk-DHET7RCE.js";
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getAgentDefinitions
4
- } from "../../chunk-KA253GGY.js";
4
+ } from "../../chunk-PZLUO4OY.js";
5
5
  import {
6
6
  BaseCommand,
7
7
  EXIT_CODES
8
- } from "../../chunk-ALWLM5MC.js";
8
+ } from "../../chunk-LFZXMQOH.js";
9
9
  import {
10
10
  compileStackPlugin,
11
11
  loadStacks,
12
12
  printStackCompilationSummary
13
- } from "../../chunk-SYHRJG5G.js";
13
+ } from "../../chunk-RT6IBH37.js";
14
14
  import "../../chunk-T4EXUIBY.js";
15
15
  import {
16
16
  setVerbose
17
- } from "../../chunk-UXNHU7Y7.js";
17
+ } from "../../chunk-5QRJUBK7.js";
18
18
  import {
19
19
  PROJECT_ROOT
20
- } from "../../chunk-PP7NDFFE.js";
20
+ } from "../../chunk-74HSA7C4.js";
21
21
  import {
22
22
  init_esm_shims
23
23
  } from "../../chunk-DHET7RCE.js";
@@ -2,18 +2,18 @@
2
2
  import {
3
3
  getAgentDefinitions,
4
4
  recompileAgents
5
- } from "../chunk-KA253GGY.js";
5
+ } from "../chunk-PZLUO4OY.js";
6
6
  import {
7
7
  DRY_RUN_MESSAGES,
8
8
  ERROR_MESSAGES,
9
9
  INFO_MESSAGES,
10
10
  STATUS_MESSAGES,
11
11
  SUCCESS_MESSAGES
12
- } from "../chunk-HMGWGWFT.js";
12
+ } from "../chunk-G2WNOT3R.js";
13
13
  import {
14
14
  BaseCommand,
15
15
  EXIT_CODES
16
- } from "../chunk-ALWLM5MC.js";
16
+ } from "../chunk-LFZXMQOH.js";
17
17
  import {
18
18
  detectInstallation,
19
19
  discoverAllPluginSkills,
@@ -21,7 +21,7 @@ import {
21
21
  normalizeStackRecord,
22
22
  parseFrontmatter,
23
23
  resolveSource
24
- } from "../chunk-SYHRJG5G.js";
24
+ } from "../chunk-RT6IBH37.js";
25
25
  import {
26
26
  typedEntries,
27
27
  typedKeys
@@ -36,12 +36,12 @@ import {
36
36
  setVerbose,
37
37
  verbose,
38
38
  warn
39
- } from "../chunk-UXNHU7Y7.js";
39
+ } from "../chunk-5QRJUBK7.js";
40
40
  import {
41
41
  CLI_BIN_NAME,
42
42
  LOCAL_SKILLS_PATH,
43
43
  STANDARD_FILES
44
- } from "../chunk-PP7NDFFE.js";
44
+ } from "../chunk-74HSA7C4.js";
45
45
  import {
46
46
  init_esm_shims
47
47
  } from "../chunk-DHET7RCE.js";
@@ -2,15 +2,15 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../../chunk-ALWLM5MC.js";
5
+ } from "../../chunk-LFZXMQOH.js";
6
6
  import {
7
7
  loadProjectSourceConfig,
8
8
  resolveAgentsSource,
9
9
  resolveSource
10
- } from "../../chunk-SYHRJG5G.js";
10
+ } from "../../chunk-RT6IBH37.js";
11
11
  import "../../chunk-T4EXUIBY.js";
12
- import "../../chunk-UXNHU7Y7.js";
13
- import "../../chunk-PP7NDFFE.js";
12
+ import "../../chunk-5QRJUBK7.js";
13
+ import "../../chunk-74HSA7C4.js";
14
14
  import {
15
15
  init_esm_shims
16
16
  } from "../../chunk-DHET7RCE.js";
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ConfigShow
4
- } from "../../chunk-GIZ6DENW.js";
5
- import "../../chunk-ALWLM5MC.js";
6
- import "../../chunk-SYHRJG5G.js";
4
+ } from "../../chunk-VH3PI43B.js";
5
+ import "../../chunk-LFZXMQOH.js";
6
+ import "../../chunk-RT6IBH37.js";
7
7
  import "../../chunk-T4EXUIBY.js";
8
- import "../../chunk-UXNHU7Y7.js";
9
- import "../../chunk-PP7NDFFE.js";
8
+ import "../../chunk-5QRJUBK7.js";
9
+ import "../../chunk-74HSA7C4.js";
10
10
  import {
11
11
  init_esm_shims
12
12
  } from "../../chunk-DHET7RCE.js";
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  BaseCommand
4
- } from "../../chunk-ALWLM5MC.js";
4
+ } from "../../chunk-LFZXMQOH.js";
5
5
  import {
6
6
  getProjectConfigPath
7
- } from "../../chunk-SYHRJG5G.js";
7
+ } from "../../chunk-RT6IBH37.js";
8
8
  import "../../chunk-T4EXUIBY.js";
9
- import "../../chunk-UXNHU7Y7.js";
10
- import "../../chunk-PP7NDFFE.js";
9
+ import "../../chunk-5QRJUBK7.js";
10
+ import "../../chunk-74HSA7C4.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "../../chunk-DHET7RCE.js";
@@ -2,15 +2,15 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../../chunk-ALWLM5MC.js";
5
+ } from "../../chunk-LFZXMQOH.js";
6
6
  import {
7
7
  getProjectConfigPath,
8
8
  loadProjectSourceConfig,
9
9
  saveProjectConfig
10
- } from "../../chunk-SYHRJG5G.js";
10
+ } from "../../chunk-RT6IBH37.js";
11
11
  import "../../chunk-T4EXUIBY.js";
12
- import "../../chunk-UXNHU7Y7.js";
13
- import "../../chunk-PP7NDFFE.js";
12
+ import "../../chunk-5QRJUBK7.js";
13
+ import "../../chunk-74HSA7C4.js";
14
14
  import {
15
15
  init_esm_shims
16
16
  } from "../../chunk-DHET7RCE.js";
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ConfigShow
4
- } from "../../chunk-GIZ6DENW.js";
5
- import "../../chunk-ALWLM5MC.js";
6
- import "../../chunk-SYHRJG5G.js";
4
+ } from "../../chunk-VH3PI43B.js";
5
+ import "../../chunk-LFZXMQOH.js";
6
+ import "../../chunk-RT6IBH37.js";
7
7
  import "../../chunk-T4EXUIBY.js";
8
- import "../../chunk-UXNHU7Y7.js";
9
- import "../../chunk-PP7NDFFE.js";
8
+ import "../../chunk-5QRJUBK7.js";
9
+ import "../../chunk-74HSA7C4.js";
10
10
  import "../../chunk-DHET7RCE.js";
11
11
  export {
12
12
  ConfigShow as default
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../../chunk-ALWLM5MC.js";
5
+ } from "../../chunk-LFZXMQOH.js";
6
6
  import {
7
7
  loadProjectSourceConfig,
8
8
  saveProjectConfig
9
- } from "../../chunk-SYHRJG5G.js";
9
+ } from "../../chunk-RT6IBH37.js";
10
10
  import "../../chunk-T4EXUIBY.js";
11
- import "../../chunk-UXNHU7Y7.js";
12
- import "../../chunk-PP7NDFFE.js";
11
+ import "../../chunk-5QRJUBK7.js";
12
+ import "../../chunk-74HSA7C4.js";
13
13
  import {
14
14
  init_esm_shims
15
15
  } from "../../chunk-DHET7RCE.js";
@@ -2,23 +2,23 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../chunk-ALWLM5MC.js";
5
+ } from "../chunk-LFZXMQOH.js";
6
6
  import {
7
7
  loadSkillsMatrixFromSource,
8
8
  readForkedFromMetadata
9
- } from "../chunk-SYHRJG5G.js";
9
+ } from "../chunk-RT6IBH37.js";
10
10
  import "../chunk-T4EXUIBY.js";
11
11
  import {
12
12
  fileExists,
13
13
  getErrorMessage,
14
14
  listDirectories,
15
15
  readFile
16
- } from "../chunk-UXNHU7Y7.js";
16
+ } from "../chunk-5QRJUBK7.js";
17
17
  import {
18
18
  CLI_BIN_NAME,
19
19
  LOCAL_SKILLS_PATH,
20
20
  STANDARD_FILES
21
- } from "../chunk-PP7NDFFE.js";
21
+ } from "../chunk-74HSA7C4.js";
22
22
  import {
23
23
  init_esm_shims
24
24
  } from "../chunk-DHET7RCE.js";
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  BaseCommand,
4
4
  EXIT_CODES
5
- } from "../chunk-ALWLM5MC.js";
5
+ } from "../chunk-LFZXMQOH.js";
6
6
  import {
7
7
  discoverLocalSkills,
8
8
  getStackSkillIds,
9
9
  loadProjectConfig,
10
10
  loadSkillsMatrixFromSource,
11
11
  validateProjectConfig
12
- } from "../chunk-SYHRJG5G.js";
12
+ } from "../chunk-RT6IBH37.js";
13
13
  import "../chunk-T4EXUIBY.js";
14
14
  import {
15
15
  directoryExists,
@@ -17,12 +17,12 @@ import {
17
17
  getErrorMessage,
18
18
  glob,
19
19
  setVerbose
20
- } from "../chunk-UXNHU7Y7.js";
20
+ } from "../chunk-5QRJUBK7.js";
21
21
  import {
22
22
  CLAUDE_DIR,
23
23
  CLI_BIN_NAME,
24
24
  DEFAULT_BRANDING
25
- } from "../chunk-PP7NDFFE.js";
25
+ } from "../chunk-74HSA7C4.js";
26
26
  import {
27
27
  init_esm_shims
28
28
  } from "../chunk-DHET7RCE.js";
@@ -2,49 +2,49 @@
2
2
  import {
3
3
  getAgentDefinitions,
4
4
  recompileAgents
5
- } from "../chunk-KA253GGY.js";
5
+ } from "../chunk-PZLUO4OY.js";
6
6
  import {
7
7
  Wizard
8
- } from "../chunk-FF4Z7MHY.js";
9
- import "../chunk-WMAALRQI.js";
10
- import "../chunk-ORJPGZVD.js";
11
- import "../chunk-MHET2RG2.js";
12
- import "../chunk-BKW34TKI.js";
13
- import "../chunk-IUYU2TP6.js";
14
- import "../chunk-33D24DAF.js";
15
- import "../chunk-EFZN22TO.js";
16
- import "../chunk-7SOPVGDV.js";
17
- import "../chunk-MI4NWOWD.js";
18
- import "../chunk-ZHJEZ7AU.js";
19
- import "../chunk-VHGIQN5O.js";
20
- import "../chunk-EPJ2GJNJ.js";
21
- import "../chunk-YRVTXSXP.js";
8
+ } from "../chunk-CTQHZELA.js";
9
+ import "../chunk-FKBCYT7B.js";
10
+ import "../chunk-TOWP4T5L.js";
11
+ import "../chunk-4C7PDDLY.js";
12
+ import "../chunk-72GS6PIH.js";
13
+ import "../chunk-FUEZQ2H6.js";
14
+ import "../chunk-I26YP2Q3.js";
15
+ import "../chunk-HM3DHMW7.js";
16
+ import "../chunk-YT7UHV67.js";
22
17
  import "../chunk-K77I4XGL.js";
23
- import "../chunk-GVRZY5KI.js";
24
- import "../chunk-GCN7GGWE.js";
25
- import "../chunk-MMD26LKJ.js";
26
- import "../chunk-44QCEK7E.js";
27
- import "../chunk-52SI5XJH.js";
18
+ import "../chunk-GVLYNP2I.js";
19
+ import "../chunk-D7JTL3DJ.js";
20
+ import "../chunk-3WKFSTG6.js";
21
+ import "../chunk-KWQ2BQXF.js";
22
+ import "../chunk-7SOPVGDV.js";
23
+ import "../chunk-C7BO2ASM.js";
28
24
  import "../chunk-KUV24B5M.js";
29
- import "../chunk-53K3URKF.js";
25
+ import "../chunk-CD64ZNYI.js";
30
26
  import "../chunk-GG4BSB6S.js";
31
- import "../chunk-AQANPOLS.js";
27
+ import "../chunk-CDGHSTB6.js";
28
+ import "../chunk-RWR56UVK.js";
29
+ import "../chunk-ODQ2BKWU.js";
30
+ import "../chunk-DO5OZHSS.js";
31
+ import "../chunk-5M6JI76P.js";
32
32
  import "../chunk-U3IGFMCY.js";
33
33
  import {
34
34
  claudePluginInstall,
35
35
  claudePluginUninstall
36
- } from "../chunk-X34RGEFX.js";
37
- import "../chunk-XRA4LHTJ.js";
38
- import "../chunk-FDY6SGSA.js";
36
+ } from "../chunk-QBUOZVNZ.js";
37
+ import "../chunk-UK3AMBR7.js";
38
+ import "../chunk-J64CA4V6.js";
39
39
  import {
40
40
  ERROR_MESSAGES,
41
41
  INFO_MESSAGES,
42
42
  STATUS_MESSAGES
43
- } from "../chunk-HMGWGWFT.js";
43
+ } from "../chunk-G2WNOT3R.js";
44
44
  import {
45
45
  BaseCommand,
46
46
  EXIT_CODES
47
- } from "../chunk-ALWLM5MC.js";
47
+ } from "../chunk-LFZXMQOH.js";
48
48
  import {
49
49
  archiveLocalSkill,
50
50
  detectInstallation,
@@ -53,16 +53,17 @@ import {
53
53
  loadProjectConfig,
54
54
  loadSkillsMatrixFromSource,
55
55
  restoreArchivedSkill
56
- } from "../chunk-SYHRJG5G.js";
56
+ } from "../chunk-RT6IBH37.js";
57
57
  import {
58
58
  typedEntries
59
59
  } from "../chunk-T4EXUIBY.js";
60
60
  import {
61
61
  getErrorMessage
62
- } from "../chunk-UXNHU7Y7.js";
62
+ } from "../chunk-5QRJUBK7.js";
63
63
  import {
64
+ ASCII_LOGO,
64
65
  CLI_BIN_NAME
65
- } from "../chunk-PP7NDFFE.js";
66
+ } from "../chunk-74HSA7C4.js";
66
67
  import {
67
68
  init_esm_shims
68
69
  } from "../chunk-DHET7RCE.js";
@@ -163,10 +164,12 @@ var Edit = class _Edit extends BaseCommand {
163
164
  matrix: sourceResult.matrix,
164
165
  version: this.config.version,
165
166
  marketplaceLabel,
167
+ logo: ASCII_LOGO,
166
168
  initialStep: "build",
167
169
  initialInstallMode,
168
170
  initialExpertMode: projectConfig?.config?.expertMode,
169
171
  initialDomains: projectConfig?.config?.domains,
172
+ initialAgents: projectConfig?.config?.selectedAgents,
170
173
  installedSkillIds: currentSkillIds,
171
174
  projectDir: process.cwd(),
172
175
  onComplete: (result2) => {