@agents-inc/cli 0.73.0 → 0.74.2

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 (95) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/{chunk-4KLUOFP6.js → chunk-3U3PDPFQ.js} +2 -2
  3. package/dist/{chunk-G23HPF6K.js → chunk-44F6SUEX.js} +3 -3
  4. package/dist/{chunk-WJL4KU5V.js → chunk-4CRWKTNQ.js} +1 -22
  5. package/dist/{chunk-WJL4KU5V.js.map → chunk-4CRWKTNQ.js.map} +1 -1
  6. package/dist/{chunk-3REVX6S5.js → chunk-6H6T3SZI.js} +2 -2
  7. package/dist/{chunk-OLWGGD4G.js → chunk-6XHBWP2D.js} +3 -3
  8. package/dist/{chunk-H4ETXZVL.js → chunk-AXZJ63V5.js} +3 -3
  9. package/dist/{chunk-T7QY777F.js → chunk-BM5Y6LIC.js} +2 -2
  10. package/dist/{chunk-3K6FSET7.js → chunk-CC6TML4P.js} +3 -3
  11. package/dist/{chunk-3VNQPCOE.js → chunk-FUWLQBKW.js} +54 -30
  12. package/dist/chunk-FUWLQBKW.js.map +1 -0
  13. package/dist/{chunk-KE2EAVFQ.js → chunk-H4OIZV7U.js} +4 -4
  14. package/dist/{chunk-PNZCVOCE.js → chunk-I7VZ6HVE.js} +16 -8
  15. package/dist/chunk-I7VZ6HVE.js.map +1 -0
  16. package/dist/{chunk-6JRQPSKV.js → chunk-IJLAVOKZ.js} +2 -2
  17. package/dist/{chunk-Y4VUU5BT.js → chunk-JDUYWY6S.js} +3 -3
  18. package/dist/{chunk-JHMECCBN.js → chunk-ORXRSFEA.js} +2 -2
  19. package/dist/{chunk-GSFZDUV2.js → chunk-PCR4DZH3.js} +4 -4
  20. package/dist/{chunk-ZBLSWJFM.js → chunk-RRBWNEG3.js} +2 -2
  21. package/dist/{chunk-Y47CLMWE.js → chunk-UTJ45YM6.js} +2 -2
  22. package/dist/{chunk-EMWP363L.js → chunk-YNLRLJ6P.js} +37 -30
  23. package/dist/chunk-YNLRLJ6P.js.map +1 -0
  24. package/dist/{chunk-K7WYMQQB.js → chunk-ZMMUR2NZ.js} +9 -9
  25. package/dist/commands/build/marketplace.js +3 -3
  26. package/dist/commands/build/plugins.js +5 -5
  27. package/dist/commands/build/stack.js +5 -5
  28. package/dist/commands/compile.js +5 -5
  29. package/dist/commands/config/index.js +5 -5
  30. package/dist/commands/config/path.js +4 -4
  31. package/dist/commands/config/show.js +5 -5
  32. package/dist/commands/diff.js +4 -4
  33. package/dist/commands/doctor.js +4 -4
  34. package/dist/commands/edit.js +18 -18
  35. package/dist/commands/edit.js.map +1 -1
  36. package/dist/commands/eject.js +5 -5
  37. package/dist/commands/eject.js.map +1 -1
  38. package/dist/commands/import/skill.js +4 -4
  39. package/dist/commands/info.js +4 -4
  40. package/dist/commands/init.js +15 -15
  41. package/dist/commands/list.js +4 -4
  42. package/dist/commands/new/agent.js +5 -5
  43. package/dist/commands/new/marketplace.js +6 -6
  44. package/dist/commands/new/skill.js +5 -5
  45. package/dist/commands/outdated.js +4 -4
  46. package/dist/commands/search.js +4 -4
  47. package/dist/commands/uninstall.js +23 -12
  48. package/dist/commands/uninstall.js.map +1 -1
  49. package/dist/commands/update.js +5 -5
  50. package/dist/commands/validate.js +4 -4
  51. package/dist/components/wizard/category-grid.test.js +4 -4
  52. package/dist/components/wizard/domain-selection.js +5 -5
  53. package/dist/components/wizard/source-grid.test.js +4 -4
  54. package/dist/components/wizard/stack-selection.js +5 -5
  55. package/dist/components/wizard/step-agents.js +5 -5
  56. package/dist/components/wizard/step-agents.test.js +5 -5
  57. package/dist/components/wizard/step-build.js +5 -5
  58. package/dist/components/wizard/step-build.test.js +5 -5
  59. package/dist/components/wizard/step-confirm.test.js +4 -4
  60. package/dist/components/wizard/step-settings.js +4 -4
  61. package/dist/components/wizard/step-settings.test.js +7 -7
  62. package/dist/components/wizard/step-sources.js +5 -5
  63. package/dist/components/wizard/step-sources.test.js +5 -5
  64. package/dist/components/wizard/step-stack.js +7 -7
  65. package/dist/components/wizard/step-stack.test.js +7 -7
  66. package/dist/components/wizard/wizard-layout.js +5 -5
  67. package/dist/components/wizard/wizard.js +13 -13
  68. package/dist/hooks/init.js +15 -15
  69. package/dist/{loader-XQ3WBTVP.js → loader-NHUCFMFQ.js} +3 -3
  70. package/dist/{source-loader-F4PGP6LH.js → source-loader-2AOYLOMV.js} +4 -4
  71. package/dist/{source-manager-QCIO4XZK.js → source-manager-754LZUVK.js} +4 -4
  72. package/dist/stores/wizard-store.js +4 -4
  73. package/dist/stores/wizard-store.test.js +4 -4
  74. package/package.json +1 -1
  75. package/dist/chunk-3VNQPCOE.js.map +0 -1
  76. package/dist/chunk-EMWP363L.js.map +0 -1
  77. package/dist/chunk-PNZCVOCE.js.map +0 -1
  78. /package/dist/{chunk-4KLUOFP6.js.map → chunk-3U3PDPFQ.js.map} +0 -0
  79. /package/dist/{chunk-G23HPF6K.js.map → chunk-44F6SUEX.js.map} +0 -0
  80. /package/dist/{chunk-3REVX6S5.js.map → chunk-6H6T3SZI.js.map} +0 -0
  81. /package/dist/{chunk-OLWGGD4G.js.map → chunk-6XHBWP2D.js.map} +0 -0
  82. /package/dist/{chunk-H4ETXZVL.js.map → chunk-AXZJ63V5.js.map} +0 -0
  83. /package/dist/{chunk-T7QY777F.js.map → chunk-BM5Y6LIC.js.map} +0 -0
  84. /package/dist/{chunk-3K6FSET7.js.map → chunk-CC6TML4P.js.map} +0 -0
  85. /package/dist/{chunk-KE2EAVFQ.js.map → chunk-H4OIZV7U.js.map} +0 -0
  86. /package/dist/{chunk-6JRQPSKV.js.map → chunk-IJLAVOKZ.js.map} +0 -0
  87. /package/dist/{chunk-Y4VUU5BT.js.map → chunk-JDUYWY6S.js.map} +0 -0
  88. /package/dist/{chunk-JHMECCBN.js.map → chunk-ORXRSFEA.js.map} +0 -0
  89. /package/dist/{chunk-GSFZDUV2.js.map → chunk-PCR4DZH3.js.map} +0 -0
  90. /package/dist/{chunk-ZBLSWJFM.js.map → chunk-RRBWNEG3.js.map} +0 -0
  91. /package/dist/{chunk-Y47CLMWE.js.map → chunk-UTJ45YM6.js.map} +0 -0
  92. /package/dist/{chunk-K7WYMQQB.js.map → chunk-ZMMUR2NZ.js.map} +0 -0
  93. /package/dist/{loader-XQ3WBTVP.js.map → loader-NHUCFMFQ.js.map} +0 -0
  94. /package/dist/{source-loader-F4PGP6LH.js.map → source-loader-2AOYLOMV.js.map} +0 -0
  95. /package/dist/{source-manager-QCIO4XZK.js.map → source-manager-754LZUVK.js.map} +0 -0
@@ -2,31 +2,31 @@
2
2
  import {
3
3
  generateSkillCategoriesTs,
4
4
  generateSkillRulesTs
5
- } from "../../chunk-GSFZDUV2.js";
5
+ } from "../../chunk-PCR4DZH3.js";
6
6
  import {
7
7
  generateMarketplace,
8
8
  writeMarketplace
9
- } from "../../chunk-T7QY777F.js";
9
+ } from "../../chunk-BM5Y6LIC.js";
10
10
  import {
11
11
  LOCAL_DEFAULTS,
12
12
  compileAllSkillPlugins,
13
13
  generateConfigSource,
14
14
  loadConfigTypesDataInBackground,
15
15
  regenerateConfigTypes
16
- } from "../../chunk-3VNQPCOE.js";
17
- import "../../chunk-ZBLSWJFM.js";
16
+ } from "../../chunk-FUWLQBKW.js";
17
+ import "../../chunk-RRBWNEG3.js";
18
18
  import "../../chunk-EMX7PA2I.js";
19
19
  import "../../chunk-E74Q7GUE.js";
20
20
  import {
21
21
  BaseCommand,
22
22
  EXIT_CODES
23
- } from "../../chunk-6JRQPSKV.js";
23
+ } from "../../chunk-IJLAVOKZ.js";
24
24
  import {
25
25
  directoryExists,
26
26
  ensureDir,
27
27
  getErrorMessage,
28
28
  writeFile
29
- } from "../../chunk-WJL4KU5V.js";
29
+ } from "../../chunk-4CRWKTNQ.js";
30
30
  import "../../chunk-SRIH4U5Y.js";
31
31
  import {
32
32
  CLAUDE_SRC_DIR,
@@ -7,13 +7,13 @@ import {
7
7
  generateSkillRulesTs,
8
8
  toTitleCase,
9
9
  validateSkillName
10
- } from "../../chunk-GSFZDUV2.js";
11
- import "../../chunk-3VNQPCOE.js";
12
- import "../../chunk-ZBLSWJFM.js";
10
+ } from "../../chunk-PCR4DZH3.js";
11
+ import "../../chunk-FUWLQBKW.js";
12
+ import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-EMX7PA2I.js";
14
14
  import "../../chunk-E74Q7GUE.js";
15
- import "../../chunk-6JRQPSKV.js";
16
- import "../../chunk-WJL4KU5V.js";
15
+ import "../../chunk-IJLAVOKZ.js";
16
+ import "../../chunk-4CRWKTNQ.js";
17
17
  import "../../chunk-SRIH4U5Y.js";
18
18
  import "../../chunk-EGMQ3SXN.js";
19
19
  import "../../chunk-NKKYTCBH.js";
@@ -3,8 +3,8 @@ import {
3
3
  compareLocalSkillsWithSource,
4
4
  detectInstallation,
5
5
  loadSkillsMatrixFromSource
6
- } from "../chunk-3VNQPCOE.js";
7
- import "../chunk-ZBLSWJFM.js";
6
+ } from "../chunk-FUWLQBKW.js";
7
+ import "../chunk-RRBWNEG3.js";
8
8
  import {
9
9
  typedEntries
10
10
  } from "../chunk-EMX7PA2I.js";
@@ -12,11 +12,11 @@ import "../chunk-E74Q7GUE.js";
12
12
  import {
13
13
  BaseCommand,
14
14
  EXIT_CODES
15
- } from "../chunk-6JRQPSKV.js";
15
+ } from "../chunk-IJLAVOKZ.js";
16
16
  import {
17
17
  fileExists,
18
18
  getErrorMessage
19
- } from "../chunk-WJL4KU5V.js";
19
+ } from "../chunk-4CRWKTNQ.js";
20
20
  import "../chunk-SRIH4U5Y.js";
21
21
  import {
22
22
  CLI_BIN_NAME,
@@ -14,23 +14,23 @@ import {
14
14
  fetchFromSource,
15
15
  loadSkillsMatrixFromSource,
16
16
  resolveAllSources
17
- } from "../chunk-3VNQPCOE.js";
17
+ } from "../chunk-FUWLQBKW.js";
18
18
  import {
19
19
  parseFrontmatter
20
- } from "../chunk-ZBLSWJFM.js";
20
+ } from "../chunk-RRBWNEG3.js";
21
21
  import "../chunk-EMX7PA2I.js";
22
22
  import "../chunk-E74Q7GUE.js";
23
23
  import {
24
24
  BaseCommand,
25
25
  EXIT_CODES
26
- } from "../chunk-6JRQPSKV.js";
26
+ } from "../chunk-IJLAVOKZ.js";
27
27
  import {
28
28
  copy,
29
29
  ensureDir,
30
30
  fileExists,
31
31
  listDirectories,
32
32
  readFile
33
- } from "../chunk-WJL4KU5V.js";
33
+ } from "../chunk-4CRWKTNQ.js";
34
34
  import "../chunk-SRIH4U5Y.js";
35
35
  import {
36
36
  DEFAULT_SKILLS_SUBDIR,
@@ -13,20 +13,20 @@ import {
13
13
  listPluginNames,
14
14
  loadProjectSourceConfig,
15
15
  readForkedFromMetadata
16
- } from "../chunk-3VNQPCOE.js";
17
- import "../chunk-ZBLSWJFM.js";
16
+ } from "../chunk-FUWLQBKW.js";
17
+ import "../chunk-RRBWNEG3.js";
18
18
  import "../chunk-EMX7PA2I.js";
19
19
  import "../chunk-E74Q7GUE.js";
20
20
  import {
21
21
  BaseCommand,
22
22
  EXIT_CODES
23
- } from "../chunk-6JRQPSKV.js";
23
+ } from "../chunk-IJLAVOKZ.js";
24
24
  import {
25
25
  directoryExists,
26
26
  getErrorMessage,
27
27
  listDirectories,
28
28
  remove
29
- } from "../chunk-WJL4KU5V.js";
29
+ } from "../chunk-4CRWKTNQ.js";
30
30
  import "../chunk-SRIH4U5Y.js";
31
31
  import {
32
32
  CLAUDE_DIR,
@@ -44,6 +44,7 @@ init_esm_shims();
44
44
  import { Flags } from "@oclif/core";
45
45
  import { render, Box, Text, useApp } from "ink";
46
46
  import path from "path";
47
+ import os from "os";
47
48
  import { jsx, jsxs } from "react/jsx-runtime";
48
49
  function collectConfiguredSources(config) {
49
50
  if (!config) return [];
@@ -56,6 +57,10 @@ function collectConfiguredAgents(config) {
56
57
  if (!config?.agents) return [];
57
58
  return config.agents.map((a) => a.name);
58
59
  }
60
+ function getCliInstalledPluginKeys(config) {
61
+ if (!config?.skills) return /* @__PURE__ */ new Set();
62
+ return new Set(config.skills.map((skill) => `${skill.id}@${skill.source}`));
63
+ }
59
64
  async function detectUninstallTarget(projectDir) {
60
65
  const pluginsDir = getProjectPluginsDir(projectDir);
61
66
  const skillsDir = path.join(projectDir, CLAUDE_DIR, "skills");
@@ -78,9 +83,12 @@ async function detectUninstallTarget(projectDir) {
78
83
  }
79
84
  const configuredSources = collectConfiguredSources(config);
80
85
  const configuredAgents = collectConfiguredAgents(config);
86
+ const cliInstalledKeys = getCliInstalledPluginKeys(config);
87
+ const cliPluginNames = pluginNames.filter((name) => cliInstalledKeys.has(name));
81
88
  return {
82
- hasPlugins: pluginNames.length > 0,
89
+ hasPlugins: cliPluginNames.length > 0,
83
90
  pluginNames,
91
+ cliPluginNames,
84
92
  hasLocalSkills,
85
93
  hasLocalAgents,
86
94
  hasClaudeDir,
@@ -107,10 +115,10 @@ var UninstallConfirm = ({
107
115
  /* @__PURE__ */ jsx(Text, { children: " " }),
108
116
  target.hasPlugins && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
109
117
  /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: " Plugins:" }),
110
- /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
118
+ target.cliPluginNames.map((name) => /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
111
119
  " ",
112
- target.pluginsDir
113
- ] })
120
+ name
121
+ ] }, name))
114
122
  ] }),
115
123
  (target.hasLocalSkills || target.hasLocalAgents) && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
116
124
  /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: " CLI-managed files:" }),
@@ -228,7 +236,9 @@ var Uninstall = class _Uninstall extends BaseCommand {
228
236
  this.log("");
229
237
  if (target.hasPlugins) {
230
238
  this.log(" Plugins:");
231
- this.log(` ${target.pluginsDir}`);
239
+ for (const pluginName of target.cliPluginNames) {
240
+ this.log(` ${pluginName}`);
241
+ }
232
242
  }
233
243
  if (target.hasLocalSkills || target.hasLocalAgents) {
234
244
  this.log(" CLI-managed files:");
@@ -249,10 +259,11 @@ var Uninstall = class _Uninstall extends BaseCommand {
249
259
  this.log("Uninstalling plugins...");
250
260
  try {
251
261
  const cliAvailable = await isClaudeCLIAvailable();
252
- for (const pluginName of target.pluginNames) {
262
+ for (const pluginName of target.cliPluginNames) {
253
263
  if (cliAvailable) {
254
264
  try {
255
- await claudePluginUninstall(pluginName, "project", projectDir);
265
+ const pluginScope = projectDir === os.homedir() ? "user" : "project";
266
+ await claudePluginUninstall(pluginName, pluginScope, projectDir);
256
267
  } catch {
257
268
  }
258
269
  }
@@ -261,7 +272,7 @@ var Uninstall = class _Uninstall extends BaseCommand {
261
272
  this.log(` Uninstalled plugin '${pluginName}'`);
262
273
  }
263
274
  this.logSuccess(
264
- `Uninstalled ${target.pluginNames.length} ${target.pluginNames.length === 1 ? "plugin" : "plugins"}`
275
+ `Uninstalled ${target.cliPluginNames.length} ${target.cliPluginNames.length === 1 ? "plugin" : "plugins"}`
265
276
  );
266
277
  } catch (error) {
267
278
  this.log("Plugin uninstall failed");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/uninstall.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render, Box, Text, useApp } from \"ink\";\nimport path from \"path\";\n\nimport { BaseCommand } from \"../base-command\";\nimport { Confirm } from \"../components/common/confirm\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport { directoryExists, listDirectories, remove } from \"../utils/fs\";\nimport { claudePluginUninstall, isClaudeCLIAvailable } from \"../utils/exec\";\nimport { listPluginNames, getProjectPluginsDir } from \"../lib/plugins\";\nimport { readForkedFromMetadata } from \"../lib/skills\";\nimport { loadProjectSourceConfig } from \"../lib/configuration/config\";\nimport type { ProjectConfig } from \"../types\";\nimport { CLAUDE_DIR, CLAUDE_SRC_DIR, CLI_COLORS, DEFAULT_BRANDING } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { SUCCESS_MESSAGES, INFO_MESSAGES } from \"../utils/messages\";\n\ntype UninstallTarget = {\n hasPlugins: boolean;\n pluginNames: string[];\n hasLocalSkills: boolean;\n hasLocalAgents: boolean;\n hasClaudeDir: boolean;\n hasClaudeSrcDir: boolean;\n pluginsDir: string;\n skillsDir: string;\n agentsDir: string;\n claudeDir: string;\n claudeSrcDir: string;\n /** Resolved project source config from .claude-src/config.ts */\n config: Partial<ProjectConfig> | null;\n /** All configured source URLs (primary + extras) */\n configuredSources: string[];\n /** Agent names from the generated config (e.g., [\"web-developer\"]) */\n configuredAgents: string[];\n};\n\nfunction collectConfiguredSources(config: Partial<ProjectConfig> | null): string[] {\n if (!config) return [];\n return [\n ...(config.source ? [config.source] : []),\n ...(config.sources?.map((entry) => entry.url) ?? []),\n ];\n}\n\nfunction collectConfiguredAgents(config: Partial<ProjectConfig> | null): string[] {\n if (!config?.agents) return [];\n return config.agents.map((a) => a.name);\n}\n\nasync function detectUninstallTarget(projectDir: string): Promise<UninstallTarget> {\n const pluginsDir = getProjectPluginsDir(projectDir);\n const skillsDir = path.join(projectDir, CLAUDE_DIR, \"skills\");\n const agentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const claudeDir = path.join(projectDir, CLAUDE_DIR);\n const claudeSrcDir = path.join(projectDir, CLAUDE_SRC_DIR);\n\n const [hasLocalSkills, hasLocalAgents, hasClaudeDir, hasClaudeSrcDir, config] = await Promise.all(\n [\n directoryExists(skillsDir),\n directoryExists(agentsDir),\n directoryExists(claudeDir),\n directoryExists(claudeSrcDir),\n loadProjectSourceConfig(projectDir),\n ],\n );\n\n let pluginNames: string[] = [];\n try {\n pluginNames = await listPluginNames(projectDir);\n } catch {\n // Best-effort: plugin detection may fail\n }\n\n const configuredSources = collectConfiguredSources(config);\n const configuredAgents = collectConfiguredAgents(config);\n\n return {\n hasPlugins: pluginNames.length > 0,\n pluginNames,\n hasLocalSkills,\n hasLocalAgents,\n hasClaudeDir,\n hasClaudeSrcDir,\n pluginsDir,\n skillsDir,\n agentsDir,\n claudeDir,\n claudeSrcDir,\n config,\n configuredSources,\n configuredAgents,\n };\n}\n\ntype UninstallConfirmProps = {\n target: UninstallTarget;\n removeAll: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nconst UninstallConfirm: React.FC<UninstallConfirmProps> = ({\n target,\n removeAll,\n onConfirm,\n onCancel,\n}) => {\n const { exit } = useApp();\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>The following will be removed:</Text>\n <Text> </Text>\n\n {target.hasPlugins && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Plugins:</Text>\n <Text dimColor> {target.pluginsDir}</Text>\n </Box>\n )}\n\n {(target.hasLocalSkills || target.hasLocalAgents) && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> CLI-managed files:</Text>\n {target.hasLocalSkills && <Text dimColor> {target.skillsDir}/ (matching sources)</Text>}\n {target.hasLocalAgents && <Text dimColor> {target.agentsDir}/ (CLI-compiled)</Text>}\n </Box>\n )}\n\n {removeAll && target.hasClaudeSrcDir && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Config:</Text>\n <Text dimColor> {target.claudeSrcDir}/</Text>\n </Box>\n )}\n\n <Text> </Text>\n <Confirm\n message=\"Are you sure you want to uninstall?\"\n onConfirm={() => {\n onConfirm();\n exit();\n }}\n onCancel={() => {\n onCancel();\n exit();\n }}\n defaultValue={false}\n />\n </Box>\n );\n};\n\nasync function isDirectoryEmpty(dirPath: string): Promise<boolean> {\n const { readdir } = await import(\"fs/promises\");\n try {\n const allEntries = await readdir(dirPath);\n return allEntries.length === 0;\n } catch {\n return true;\n }\n}\n\nfunction skillMatchesConfiguredSource(\n forkedFromSource: string | undefined,\n configuredSources: string[],\n): boolean {\n if (!forkedFromSource || configuredSources.length === 0) return false;\n return configuredSources.includes(forkedFromSource);\n}\n\nfunction shouldRemoveSkill(\n forkedFrom: { source?: string } | null,\n configuredSources: string[],\n hasConfig: boolean,\n): boolean {\n return (\n forkedFrom !== null &&\n (skillMatchesConfiguredSource(forkedFrom.source, configuredSources) ||\n (!forkedFrom.source && hasConfig))\n );\n}\n\nexport default class Uninstall extends BaseCommand {\n static summary = `Remove ${DEFAULT_BRANDING.NAME} from this project`;\n\n static description = `Uninstall ${DEFAULT_BRANDING.NAME} from this project. Removes CLI-managed skills (matched by source), compiled agents, and plugins. User-created content is preserved.`;\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --yes\",\n \"<%= config.bin %> <%= command.id %> --all\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n yes: Flags.boolean({\n char: \"y\",\n description: \"Skip confirmation prompt\",\n default: false,\n }),\n all: Flags.boolean({\n description: \"Also remove .claude-src/ config directory\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Uninstall);\n const projectDir = process.cwd();\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} Uninstall`);\n this.log(\"\");\n\n const target = await detectUninstallTarget(projectDir);\n\n const hasAnythingToRemove =\n target.hasPlugins ||\n target.hasLocalSkills ||\n target.hasLocalAgents ||\n (flags.all && target.hasClaudeSrcDir);\n\n if (!hasAnythingToRemove) {\n this.warn(\"Nothing to uninstall.\");\n this.log(\"\");\n this.log(INFO_MESSAGES.NOT_INSTALLED);\n this.log(\"\");\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n return;\n }\n\n if (!flags.yes) {\n const confirmed = await new Promise<boolean>((resolve) => {\n const { waitUntilExit } = render(\n <UninstallConfirm\n target={target}\n removeAll={flags.all}\n onConfirm={() => resolve(true)}\n onCancel={() => resolve(false)}\n />,\n );\n\n waitUntilExit().catch(() => resolve(false));\n });\n\n if (!confirmed) {\n this.log(\"\");\n this.log(\"Uninstall cancelled\");\n this.exit(EXIT_CODES.CANCELLED);\n }\n } else {\n this.log(\"The following will be removed:\");\n this.log(\"\");\n\n if (target.hasPlugins) {\n this.log(\" Plugins:\");\n this.log(` ${target.pluginsDir}`);\n }\n\n if (target.hasLocalSkills || target.hasLocalAgents) {\n this.log(\" CLI-managed files:\");\n if (target.hasLocalSkills) {\n this.log(` ${target.skillsDir}/ (matching sources)`);\n }\n if (target.hasLocalAgents) {\n this.log(` ${target.agentsDir}/ (CLI-compiled)`);\n }\n }\n\n if (flags.all && target.hasClaudeSrcDir) {\n this.log(\" Config:\");\n this.log(` ${target.claudeSrcDir}/`);\n }\n\n this.log(\"\");\n }\n\n if (target.hasPlugins) {\n this.log(\"Uninstalling plugins...\");\n\n try {\n const cliAvailable = await isClaudeCLIAvailable();\n\n for (const pluginName of target.pluginNames) {\n if (cliAvailable) {\n try {\n await claudePluginUninstall(pluginName, \"project\", projectDir);\n } catch {\n // Best-effort: plugin may not be registered with Claude CLI\n }\n }\n\n const pluginPath = path.join(target.pluginsDir, pluginName);\n await remove(pluginPath);\n this.log(` Uninstalled plugin '${pluginName}'`);\n }\n\n this.logSuccess(\n `Uninstalled ${target.pluginNames.length} ${target.pluginNames.length === 1 ? \"plugin\" : \"plugins\"}`,\n );\n } catch (error) {\n this.log(\"Plugin uninstall failed\");\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n try {\n await this.removeLocalFiles(target, flags.all);\n } catch (error) {\n this.log(\"Failed to remove local files\");\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} has been uninstalled.`);\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.UNINSTALL_COMPLETE);\n this.log(\"\");\n }\n\n private async removeLocalFiles(target: UninstallTarget, removeAll: boolean): Promise<void> {\n await this.removeMatchingSkills(target);\n await this.removeMatchingAgents(target);\n\n if (removeAll && target.hasClaudeSrcDir) {\n await remove(target.claudeSrcDir);\n this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);\n }\n\n await this.removeEmptyClaudeDir(target);\n }\n\n private async removeMatchingSkills(target: UninstallTarget): Promise<void> {\n if (!target.hasLocalSkills) return;\n\n const skillDirNames = await listDirectories(target.skillsDir);\n let removedCount = 0;\n let skippedCount = 0;\n\n for (const skillDirName of skillDirNames) {\n const skillDir = path.join(target.skillsDir, skillDirName);\n const forkedFrom = await readForkedFromMetadata(skillDir);\n\n if (shouldRemoveSkill(forkedFrom, target.configuredSources, target.config !== null)) {\n await remove(skillDir);\n removedCount++;\n this.log(` Uninstalled skill '${skillDirName}'`);\n } else {\n this.warn(`Skipping '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`);\n skippedCount++;\n }\n }\n\n if (removedCount > 0) {\n this.logSuccess(\n `Removed ${removedCount} CLI-installed ${removedCount === 1 ? \"skill\" : \"skills\"}`,\n );\n }\n\n if (skippedCount > 0) return;\n if (!(await directoryExists(target.skillsDir))) return;\n if (await isDirectoryEmpty(target.skillsDir)) {\n await remove(target.skillsDir);\n }\n }\n\n private async removeMatchingAgents(target: UninstallTarget): Promise<void> {\n if (!target.hasLocalAgents) return;\n if (target.configuredAgents.length === 0) return;\n\n const agentFiles = await this.listAgentFiles(target.agentsDir);\n let removedCount = 0;\n\n for (const agentFile of agentFiles) {\n const agentName = agentFile.replace(/\\.md$/, \"\");\n if (!target.configuredAgents.includes(agentName)) continue;\n\n await remove(path.join(target.agentsDir, agentFile));\n this.log(` Uninstalled agent '${agentName}'`);\n removedCount++;\n }\n\n if (removedCount > 0) {\n this.logSuccess(\n `Removed ${removedCount} compiled ${removedCount === 1 ? \"agent\" : \"agents\"}`,\n );\n }\n\n if (!(await directoryExists(target.agentsDir))) return;\n if (await isDirectoryEmpty(target.agentsDir)) {\n await remove(target.agentsDir);\n }\n }\n\n private async listAgentFiles(agentsDir: string): Promise<string[]> {\n try {\n const { readdir } = await import(\"fs/promises\");\n return (await readdir(agentsDir)).filter((f) => f.endsWith(\".md\"));\n } catch {\n return [];\n }\n }\n\n private async removeEmptyClaudeDir(target: UninstallTarget): Promise<void> {\n if (!target.hasClaudeDir) return;\n if (!(await directoryExists(target.claudeDir))) return;\n\n if (await isDirectoryEmpty(target.claudeDir)) {\n await remove(target.claudeDir);\n this.logSuccess(`Removed ${CLAUDE_DIR}/`);\n } else {\n this.log(`Kept ${CLAUDE_DIR}/ (contains user content)`);\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/commands/uninstall.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render, Box, Text, useApp } from \"ink\";\nimport path from \"path\";\nimport os from \"os\";\n\nimport { BaseCommand } from \"../base-command\";\nimport { Confirm } from \"../components/common/confirm\";\nimport { getErrorMessage } from \"../utils/errors\";\nimport { directoryExists, listDirectories, remove } from \"../utils/fs\";\nimport { claudePluginUninstall, isClaudeCLIAvailable } from \"../utils/exec\";\nimport { listPluginNames, getProjectPluginsDir } from \"../lib/plugins\";\nimport { readForkedFromMetadata } from \"../lib/skills\";\nimport { loadProjectSourceConfig } from \"../lib/configuration/config\";\nimport type { ProjectConfig } from \"../types\";\nimport { CLAUDE_DIR, CLAUDE_SRC_DIR, CLI_COLORS, DEFAULT_BRANDING } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { SUCCESS_MESSAGES, INFO_MESSAGES } from \"../utils/messages\";\n\ntype UninstallTarget = {\n hasPlugins: boolean;\n pluginNames: string[];\n /** Plugin names filtered to only those installed by this CLI (matched against config skills) */\n cliPluginNames: string[];\n hasLocalSkills: boolean;\n hasLocalAgents: boolean;\n hasClaudeDir: boolean;\n hasClaudeSrcDir: boolean;\n pluginsDir: string;\n skillsDir: string;\n agentsDir: string;\n claudeDir: string;\n claudeSrcDir: string;\n /** Resolved project source config from .claude-src/config.ts */\n config: Partial<ProjectConfig> | null;\n /** All configured source URLs (primary + extras) */\n configuredSources: string[];\n /** Agent names from the generated config (e.g., [\"web-developer\"]) */\n configuredAgents: string[];\n};\n\nfunction collectConfiguredSources(config: Partial<ProjectConfig> | null): string[] {\n if (!config) return [];\n return [\n ...(config.source ? [config.source] : []),\n ...(config.sources?.map((entry) => entry.url) ?? []),\n ];\n}\n\nfunction collectConfiguredAgents(config: Partial<ProjectConfig> | null): string[] {\n if (!config?.agents) return [];\n return config.agents.map((a) => a.name);\n}\n\nfunction getCliInstalledPluginKeys(config: Partial<ProjectConfig> | null): Set<string> {\n if (!config?.skills) return new Set();\n return new Set(config.skills.map((skill) => `${skill.id}@${skill.source}`));\n}\n\nasync function detectUninstallTarget(projectDir: string): Promise<UninstallTarget> {\n const pluginsDir = getProjectPluginsDir(projectDir);\n const skillsDir = path.join(projectDir, CLAUDE_DIR, \"skills\");\n const agentsDir = path.join(projectDir, CLAUDE_DIR, \"agents\");\n const claudeDir = path.join(projectDir, CLAUDE_DIR);\n const claudeSrcDir = path.join(projectDir, CLAUDE_SRC_DIR);\n\n const [hasLocalSkills, hasLocalAgents, hasClaudeDir, hasClaudeSrcDir, config] = await Promise.all(\n [\n directoryExists(skillsDir),\n directoryExists(agentsDir),\n directoryExists(claudeDir),\n directoryExists(claudeSrcDir),\n loadProjectSourceConfig(projectDir),\n ],\n );\n\n let pluginNames: string[] = [];\n try {\n pluginNames = await listPluginNames(projectDir);\n } catch {\n // Best-effort: plugin detection may fail\n }\n\n const configuredSources = collectConfiguredSources(config);\n const configuredAgents = collectConfiguredAgents(config);\n const cliInstalledKeys = getCliInstalledPluginKeys(config);\n const cliPluginNames = pluginNames.filter((name) => cliInstalledKeys.has(name));\n\n return {\n hasPlugins: cliPluginNames.length > 0,\n pluginNames,\n cliPluginNames,\n hasLocalSkills,\n hasLocalAgents,\n hasClaudeDir,\n hasClaudeSrcDir,\n pluginsDir,\n skillsDir,\n agentsDir,\n claudeDir,\n claudeSrcDir,\n config,\n configuredSources,\n configuredAgents,\n };\n}\n\ntype UninstallConfirmProps = {\n target: UninstallTarget;\n removeAll: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nconst UninstallConfirm: React.FC<UninstallConfirmProps> = ({\n target,\n removeAll,\n onConfirm,\n onCancel,\n}) => {\n const { exit } = useApp();\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>The following will be removed:</Text>\n <Text> </Text>\n\n {target.hasPlugins && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Plugins:</Text>\n {target.cliPluginNames.map((name) => (\n <Text key={name} dimColor>\n {\" \"}\n {name}\n </Text>\n ))}\n </Box>\n )}\n\n {(target.hasLocalSkills || target.hasLocalAgents) && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> CLI-managed files:</Text>\n {target.hasLocalSkills && <Text dimColor> {target.skillsDir}/ (matching sources)</Text>}\n {target.hasLocalAgents && <Text dimColor> {target.agentsDir}/ (CLI-compiled)</Text>}\n </Box>\n )}\n\n {removeAll && target.hasClaudeSrcDir && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Config:</Text>\n <Text dimColor> {target.claudeSrcDir}/</Text>\n </Box>\n )}\n\n <Text> </Text>\n <Confirm\n message=\"Are you sure you want to uninstall?\"\n onConfirm={() => {\n onConfirm();\n exit();\n }}\n onCancel={() => {\n onCancel();\n exit();\n }}\n defaultValue={false}\n />\n </Box>\n );\n};\n\nasync function isDirectoryEmpty(dirPath: string): Promise<boolean> {\n const { readdir } = await import(\"fs/promises\");\n try {\n const allEntries = await readdir(dirPath);\n return allEntries.length === 0;\n } catch {\n return true;\n }\n}\n\nfunction skillMatchesConfiguredSource(\n forkedFromSource: string | undefined,\n configuredSources: string[],\n): boolean {\n if (!forkedFromSource || configuredSources.length === 0) return false;\n return configuredSources.includes(forkedFromSource);\n}\n\nfunction shouldRemoveSkill(\n forkedFrom: { source?: string } | null,\n configuredSources: string[],\n hasConfig: boolean,\n): boolean {\n return (\n forkedFrom !== null &&\n (skillMatchesConfiguredSource(forkedFrom.source, configuredSources) ||\n (!forkedFrom.source && hasConfig))\n );\n}\n\nexport default class Uninstall extends BaseCommand {\n static summary = `Remove ${DEFAULT_BRANDING.NAME} from this project`;\n\n static description = `Uninstall ${DEFAULT_BRANDING.NAME} from this project. Removes CLI-managed skills (matched by source), compiled agents, and plugins. User-created content is preserved.`;\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --yes\",\n \"<%= config.bin %> <%= command.id %> --all\",\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n yes: Flags.boolean({\n char: \"y\",\n description: \"Skip confirmation prompt\",\n default: false,\n }),\n all: Flags.boolean({\n description: \"Also remove .claude-src/ config directory\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Uninstall);\n const projectDir = process.cwd();\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} Uninstall`);\n this.log(\"\");\n\n const target = await detectUninstallTarget(projectDir);\n\n const hasAnythingToRemove =\n target.hasPlugins ||\n target.hasLocalSkills ||\n target.hasLocalAgents ||\n (flags.all && target.hasClaudeSrcDir);\n\n if (!hasAnythingToRemove) {\n this.warn(\"Nothing to uninstall.\");\n this.log(\"\");\n this.log(INFO_MESSAGES.NOT_INSTALLED);\n this.log(\"\");\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n return;\n }\n\n if (!flags.yes) {\n const confirmed = await new Promise<boolean>((resolve) => {\n const { waitUntilExit } = render(\n <UninstallConfirm\n target={target}\n removeAll={flags.all}\n onConfirm={() => resolve(true)}\n onCancel={() => resolve(false)}\n />,\n );\n\n waitUntilExit().catch(() => resolve(false));\n });\n\n if (!confirmed) {\n this.log(\"\");\n this.log(\"Uninstall cancelled\");\n this.exit(EXIT_CODES.CANCELLED);\n }\n } else {\n this.log(\"The following will be removed:\");\n this.log(\"\");\n\n if (target.hasPlugins) {\n this.log(\" Plugins:\");\n for (const pluginName of target.cliPluginNames) {\n this.log(` ${pluginName}`);\n }\n }\n\n if (target.hasLocalSkills || target.hasLocalAgents) {\n this.log(\" CLI-managed files:\");\n if (target.hasLocalSkills) {\n this.log(` ${target.skillsDir}/ (matching sources)`);\n }\n if (target.hasLocalAgents) {\n this.log(` ${target.agentsDir}/ (CLI-compiled)`);\n }\n }\n\n if (flags.all && target.hasClaudeSrcDir) {\n this.log(\" Config:\");\n this.log(` ${target.claudeSrcDir}/`);\n }\n\n this.log(\"\");\n }\n\n if (target.hasPlugins) {\n this.log(\"Uninstalling plugins...\");\n\n try {\n const cliAvailable = await isClaudeCLIAvailable();\n\n for (const pluginName of target.cliPluginNames) {\n if (cliAvailable) {\n try {\n const pluginScope = projectDir === os.homedir() ? \"user\" : \"project\";\n await claudePluginUninstall(pluginName, pluginScope, projectDir);\n } catch {\n // Best-effort: plugin may not be registered with Claude CLI\n }\n }\n\n const pluginPath = path.join(target.pluginsDir, pluginName);\n await remove(pluginPath);\n this.log(` Uninstalled plugin '${pluginName}'`);\n }\n\n this.logSuccess(\n `Uninstalled ${target.cliPluginNames.length} ${target.cliPluginNames.length === 1 ? \"plugin\" : \"plugins\"}`,\n );\n } catch (error) {\n this.log(\"Plugin uninstall failed\");\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n try {\n await this.removeLocalFiles(target, flags.all);\n } catch (error) {\n this.log(\"Failed to remove local files\");\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} has been uninstalled.`);\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.UNINSTALL_COMPLETE);\n this.log(\"\");\n }\n\n private async removeLocalFiles(target: UninstallTarget, removeAll: boolean): Promise<void> {\n await this.removeMatchingSkills(target);\n await this.removeMatchingAgents(target);\n\n if (removeAll && target.hasClaudeSrcDir) {\n await remove(target.claudeSrcDir);\n this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);\n }\n\n await this.removeEmptyClaudeDir(target);\n }\n\n private async removeMatchingSkills(target: UninstallTarget): Promise<void> {\n if (!target.hasLocalSkills) return;\n\n const skillDirNames = await listDirectories(target.skillsDir);\n let removedCount = 0;\n let skippedCount = 0;\n\n for (const skillDirName of skillDirNames) {\n const skillDir = path.join(target.skillsDir, skillDirName);\n const forkedFrom = await readForkedFromMetadata(skillDir);\n\n if (shouldRemoveSkill(forkedFrom, target.configuredSources, target.config !== null)) {\n await remove(skillDir);\n removedCount++;\n this.log(` Uninstalled skill '${skillDirName}'`);\n } else {\n this.warn(`Skipping '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`);\n skippedCount++;\n }\n }\n\n if (removedCount > 0) {\n this.logSuccess(\n `Removed ${removedCount} CLI-installed ${removedCount === 1 ? \"skill\" : \"skills\"}`,\n );\n }\n\n if (skippedCount > 0) return;\n if (!(await directoryExists(target.skillsDir))) return;\n if (await isDirectoryEmpty(target.skillsDir)) {\n await remove(target.skillsDir);\n }\n }\n\n private async removeMatchingAgents(target: UninstallTarget): Promise<void> {\n if (!target.hasLocalAgents) return;\n if (target.configuredAgents.length === 0) return;\n\n const agentFiles = await this.listAgentFiles(target.agentsDir);\n let removedCount = 0;\n\n for (const agentFile of agentFiles) {\n const agentName = agentFile.replace(/\\.md$/, \"\");\n if (!target.configuredAgents.includes(agentName)) continue;\n\n await remove(path.join(target.agentsDir, agentFile));\n this.log(` Uninstalled agent '${agentName}'`);\n removedCount++;\n }\n\n if (removedCount > 0) {\n this.logSuccess(\n `Removed ${removedCount} compiled ${removedCount === 1 ? \"agent\" : \"agents\"}`,\n );\n }\n\n if (!(await directoryExists(target.agentsDir))) return;\n if (await isDirectoryEmpty(target.agentsDir)) {\n await remove(target.agentsDir);\n }\n }\n\n private async listAgentFiles(agentsDir: string): Promise<string[]> {\n try {\n const { readdir } = await import(\"fs/promises\");\n return (await readdir(agentsDir)).filter((f) => f.endsWith(\".md\"));\n } catch {\n return [];\n }\n }\n\n private async removeEmptyClaudeDir(target: UninstallTarget): Promise<void> {\n if (!target.hasClaudeDir) return;\n if (!(await directoryExists(target.claudeDir))) return;\n\n if (await isDirectoryEmpty(target.claudeDir)) {\n await remove(target.claudeDir);\n this.logSuccess(`Removed ${CLAUDE_DIR}/`);\n } else {\n this.log(`Kept ${CLAUDE_DIR}/ (contains user content)`);\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-N6S7ZRIL.js";
5
5
  import {
6
6
  recompileAgents
7
- } from "../chunk-PNZCVOCE.js";
7
+ } from "../chunk-I7VZ6HVE.js";
8
8
  import {
9
9
  ERROR_MESSAGES,
10
10
  INFO_MESSAGES,
@@ -15,8 +15,8 @@ import {
15
15
  compareLocalSkillsWithSource,
16
16
  injectForkedFromMetadata,
17
17
  loadSkillsMatrixFromSource
18
- } from "../chunk-3VNQPCOE.js";
19
- import "../chunk-ZBLSWJFM.js";
18
+ } from "../chunk-FUWLQBKW.js";
19
+ import "../chunk-RRBWNEG3.js";
20
20
  import "../chunk-EMX7PA2I.js";
21
21
  import {
22
22
  matrix
@@ -24,12 +24,12 @@ import {
24
24
  import {
25
25
  BaseCommand,
26
26
  EXIT_CODES
27
- } from "../chunk-6JRQPSKV.js";
27
+ } from "../chunk-IJLAVOKZ.js";
28
28
  import {
29
29
  copy,
30
30
  fileExists,
31
31
  getErrorMessage
32
- } from "../chunk-WJL4KU5V.js";
32
+ } from "../chunk-4CRWKTNQ.js";
33
33
  import "../chunk-SRIH4U5Y.js";
34
34
  import {
35
35
  CLI_BIN_NAME,
@@ -11,10 +11,10 @@ import {
11
11
  validateAllPlugins,
12
12
  validateAllSchemas,
13
13
  validatePlugin
14
- } from "../chunk-3VNQPCOE.js";
14
+ } from "../chunk-FUWLQBKW.js";
15
15
  import {
16
16
  parseFrontmatter
17
- } from "../chunk-ZBLSWJFM.js";
17
+ } from "../chunk-RRBWNEG3.js";
18
18
  import "../chunk-EMX7PA2I.js";
19
19
  import {
20
20
  matrix
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  BaseCommand,
24
24
  EXIT_CODES
25
- } from "../chunk-6JRQPSKV.js";
25
+ } from "../chunk-IJLAVOKZ.js";
26
26
  import {
27
27
  SKILL_ID_PATTERN,
28
28
  directoryExists,
@@ -31,7 +31,7 @@ import {
31
31
  glob,
32
32
  metadataValidationSchema,
33
33
  readFile
34
- } from "../chunk-WJL4KU5V.js";
34
+ } from "../chunk-4CRWKTNQ.js";
35
35
  import "../chunk-SRIH4U5Y.js";
36
36
  import {
37
37
  SKILLS_DIR_PATH,
@@ -30,16 +30,16 @@ import {
30
30
  } from "../../chunk-KSMT5FVM.js";
31
31
  import "../../chunk-GG4BSB6S.js";
32
32
  import "../../chunk-AUNBGZS4.js";
33
- import "../../chunk-OLWGGD4G.js";
33
+ import "../../chunk-6XHBWP2D.js";
34
34
  import "../../chunk-6VIOO74O.js";
35
- import "../../chunk-3VNQPCOE.js";
36
- import "../../chunk-ZBLSWJFM.js";
35
+ import "../../chunk-FUWLQBKW.js";
36
+ import "../../chunk-RRBWNEG3.js";
37
37
  import "../../chunk-EMX7PA2I.js";
38
38
  import {
39
39
  BUILT_IN_MATRIX,
40
40
  initializeMatrix
41
41
  } from "../../chunk-E74Q7GUE.js";
42
- import "../../chunk-WJL4KU5V.js";
42
+ import "../../chunk-4CRWKTNQ.js";
43
43
  import "../../chunk-SRIH4U5Y.js";
44
44
  import "../../chunk-EGMQ3SXN.js";
45
45
  import "../../chunk-NKKYTCBH.js";
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  DomainSelection
4
- } from "../../chunk-4KLUOFP6.js";
4
+ } from "../../chunk-3U3PDPFQ.js";
5
5
  import "../../chunk-BH4LN7XV.js";
6
6
  import "../../chunk-OV5UJWS5.js";
7
7
  import "../../chunk-XMLCXRTS.js";
8
8
  import "../../chunk-AQYAVLZK.js";
9
9
  import "../../chunk-AUNBGZS4.js";
10
- import "../../chunk-OLWGGD4G.js";
11
- import "../../chunk-3VNQPCOE.js";
12
- import "../../chunk-ZBLSWJFM.js";
10
+ import "../../chunk-6XHBWP2D.js";
11
+ import "../../chunk-FUWLQBKW.js";
12
+ import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-EMX7PA2I.js";
14
14
  import "../../chunk-E74Q7GUE.js";
15
- import "../../chunk-WJL4KU5V.js";
15
+ import "../../chunk-4CRWKTNQ.js";
16
16
  import "../../chunk-SRIH4U5Y.js";
17
17
  import "../../chunk-EGMQ3SXN.js";
18
18
  import "../../chunk-NKKYTCBH.js";
@@ -39,16 +39,16 @@ import "../../chunk-GG4BSB6S.js";
39
39
  import "../../chunk-AUNBGZS4.js";
40
40
  import "../../chunk-WF5PMBIR.js";
41
41
  import "../../chunk-KUV24B5M.js";
42
- import "../../chunk-OLWGGD4G.js";
42
+ import "../../chunk-6XHBWP2D.js";
43
43
  import "../../chunk-6VIOO74O.js";
44
- import "../../chunk-3VNQPCOE.js";
45
- import "../../chunk-ZBLSWJFM.js";
44
+ import "../../chunk-FUWLQBKW.js";
45
+ import "../../chunk-RRBWNEG3.js";
46
46
  import "../../chunk-EMX7PA2I.js";
47
47
  import {
48
48
  BUILT_IN_MATRIX,
49
49
  initializeMatrix
50
50
  } from "../../chunk-E74Q7GUE.js";
51
- import "../../chunk-WJL4KU5V.js";
51
+ import "../../chunk-4CRWKTNQ.js";
52
52
  import "../../chunk-SRIH4U5Y.js";
53
53
  import "../../chunk-EGMQ3SXN.js";
54
54
  import "../../chunk-NKKYTCBH.js";
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StackSelection
4
- } from "../../chunk-JHMECCBN.js";
4
+ } from "../../chunk-ORXRSFEA.js";
5
5
  import "../../chunk-MWGDG4QN.js";
6
6
  import "../../chunk-AUNBGZS4.js";
7
- import "../../chunk-OLWGGD4G.js";
8
- import "../../chunk-3VNQPCOE.js";
9
- import "../../chunk-ZBLSWJFM.js";
7
+ import "../../chunk-6XHBWP2D.js";
8
+ import "../../chunk-FUWLQBKW.js";
9
+ import "../../chunk-RRBWNEG3.js";
10
10
  import "../../chunk-EMX7PA2I.js";
11
11
  import "../../chunk-E74Q7GUE.js";
12
- import "../../chunk-WJL4KU5V.js";
12
+ import "../../chunk-4CRWKTNQ.js";
13
13
  import "../../chunk-SRIH4U5Y.js";
14
14
  import "../../chunk-EGMQ3SXN.js";
15
15
  import "../../chunk-NKKYTCBH.js";
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepAgents
4
- } from "../../chunk-3REVX6S5.js";
4
+ } from "../../chunk-6H6T3SZI.js";
5
5
  import "../../chunk-K77I4XGL.js";
6
6
  import "../../chunk-BH4LN7XV.js";
7
7
  import "../../chunk-XMLCXRTS.js";
8
8
  import "../../chunk-AQYAVLZK.js";
9
9
  import "../../chunk-AUNBGZS4.js";
10
- import "../../chunk-OLWGGD4G.js";
11
- import "../../chunk-3VNQPCOE.js";
12
- import "../../chunk-ZBLSWJFM.js";
10
+ import "../../chunk-6XHBWP2D.js";
11
+ import "../../chunk-FUWLQBKW.js";
12
+ import "../../chunk-RRBWNEG3.js";
13
13
  import "../../chunk-EMX7PA2I.js";
14
14
  import "../../chunk-E74Q7GUE.js";
15
- import "../../chunk-WJL4KU5V.js";
15
+ import "../../chunk-4CRWKTNQ.js";
16
16
  import "../../chunk-SRIH4U5Y.js";
17
17
  import "../../chunk-EGMQ3SXN.js";
18
18
  import "../../chunk-NKKYTCBH.js";
@@ -25,7 +25,7 @@ import {
25
25
  } from "../../chunk-XY3XDVMI.js";
26
26
  import {
27
27
  StepAgents
28
- } from "../../chunk-3REVX6S5.js";
28
+ } from "../../chunk-6H6T3SZI.js";
29
29
  import "../../chunk-K77I4XGL.js";
30
30
  import "../../chunk-BH4LN7XV.js";
31
31
  import "../../chunk-XMLCXRTS.js";
@@ -33,14 +33,14 @@ import "../../chunk-AQYAVLZK.js";
33
33
  import "../../chunk-AUNBGZS4.js";
34
34
  import {
35
35
  useWizardStore
36
- } from "../../chunk-OLWGGD4G.js";
37
- import "../../chunk-3VNQPCOE.js";
38
- import "../../chunk-ZBLSWJFM.js";
36
+ } from "../../chunk-6XHBWP2D.js";
37
+ import "../../chunk-FUWLQBKW.js";
38
+ import "../../chunk-RRBWNEG3.js";
39
39
  import "../../chunk-EMX7PA2I.js";
40
40
  import {
41
41
  initializeMatrix
42
42
  } from "../../chunk-E74Q7GUE.js";
43
- import "../../chunk-WJL4KU5V.js";
43
+ import "../../chunk-4CRWKTNQ.js";
44
44
  import "../../chunk-SRIH4U5Y.js";
45
45
  import "../../chunk-EGMQ3SXN.js";
46
46
  import "../../chunk-NKKYTCBH.js";
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepBuild
4
- } from "../../chunk-Y4VUU5BT.js";
4
+ } from "../../chunk-JDUYWY6S.js";
5
5
  import "../../chunk-K77I4XGL.js";
6
6
  import "../../chunk-KSMT5FVM.js";
7
7
  import "../../chunk-GG4BSB6S.js";
8
8
  import "../../chunk-BH4LN7XV.js";
9
9
  import "../../chunk-AQYAVLZK.js";
10
10
  import "../../chunk-AUNBGZS4.js";
11
- import "../../chunk-OLWGGD4G.js";
11
+ import "../../chunk-6XHBWP2D.js";
12
12
  import "../../chunk-6VIOO74O.js";
13
- import "../../chunk-3VNQPCOE.js";
14
- import "../../chunk-ZBLSWJFM.js";
13
+ import "../../chunk-FUWLQBKW.js";
14
+ import "../../chunk-RRBWNEG3.js";
15
15
  import "../../chunk-EMX7PA2I.js";
16
16
  import "../../chunk-E74Q7GUE.js";
17
- import "../../chunk-WJL4KU5V.js";
17
+ import "../../chunk-4CRWKTNQ.js";
18
18
  import "../../chunk-SRIH4U5Y.js";
19
19
  import "../../chunk-EGMQ3SXN.js";
20
20
  import "../../chunk-NKKYTCBH.js";
@@ -33,7 +33,7 @@ import {
33
33
  import {
34
34
  StepBuild,
35
35
  validateBuildStep
36
- } from "../../chunk-Y4VUU5BT.js";
36
+ } from "../../chunk-JDUYWY6S.js";
37
37
  import "../../chunk-K77I4XGL.js";
38
38
  import "../../chunk-KSMT5FVM.js";
39
39
  import "../../chunk-GG4BSB6S.js";
@@ -42,15 +42,15 @@ import {
42
42
  } from "../../chunk-BH4LN7XV.js";
43
43
  import "../../chunk-AQYAVLZK.js";
44
44
  import "../../chunk-AUNBGZS4.js";
45
- import "../../chunk-OLWGGD4G.js";
45
+ import "../../chunk-6XHBWP2D.js";
46
46
  import "../../chunk-6VIOO74O.js";
47
- import "../../chunk-3VNQPCOE.js";
48
- import "../../chunk-ZBLSWJFM.js";
47
+ import "../../chunk-FUWLQBKW.js";
48
+ import "../../chunk-RRBWNEG3.js";
49
49
  import "../../chunk-EMX7PA2I.js";
50
50
  import {
51
51
  initializeMatrix
52
52
  } from "../../chunk-E74Q7GUE.js";
53
- import "../../chunk-WJL4KU5V.js";
53
+ import "../../chunk-4CRWKTNQ.js";
54
54
  import "../../chunk-SRIH4U5Y.js";
55
55
  import "../../chunk-EGMQ3SXN.js";
56
56
  import "../../chunk-NKKYTCBH.js";
@@ -23,13 +23,13 @@ import {
23
23
  } from "../../chunk-NUJHWYCR.js";
24
24
  import "../../chunk-BH4LN7XV.js";
25
25
  import "../../chunk-AQYAVLZK.js";
26
- import "../../chunk-OLWGGD4G.js";
26
+ import "../../chunk-6XHBWP2D.js";
27
27
  import "../../chunk-6VIOO74O.js";
28
- import "../../chunk-3VNQPCOE.js";
29
- import "../../chunk-ZBLSWJFM.js";
28
+ import "../../chunk-FUWLQBKW.js";
29
+ import "../../chunk-RRBWNEG3.js";
30
30
  import "../../chunk-EMX7PA2I.js";
31
31
  import "../../chunk-E74Q7GUE.js";
32
- import "../../chunk-WJL4KU5V.js";
32
+ import "../../chunk-4CRWKTNQ.js";
33
33
  import "../../chunk-SRIH4U5Y.js";
34
34
  import "../../chunk-EGMQ3SXN.js";
35
35
  import "../../chunk-NKKYTCBH.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepSettings
4
- } from "../../chunk-H4ETXZVL.js";
4
+ } from "../../chunk-AXZJ63V5.js";
5
5
  import "../../chunk-7SOPVGDV.js";
6
6
  import "../../chunk-XMLCXRTS.js";
7
7
  import "../../chunk-AQYAVLZK.js";
@@ -9,11 +9,11 @@ import "../../chunk-AUNBGZS4.js";
9
9
  import "../../chunk-KUV24B5M.js";
10
10
  import "../../chunk-U3IGFMCY.js";
11
11
  import "../../chunk-6VIOO74O.js";
12
- import "../../chunk-3VNQPCOE.js";
13
- import "../../chunk-ZBLSWJFM.js";
12
+ import "../../chunk-FUWLQBKW.js";
13
+ import "../../chunk-RRBWNEG3.js";
14
14
  import "../../chunk-EMX7PA2I.js";
15
15
  import "../../chunk-E74Q7GUE.js";
16
- import "../../chunk-WJL4KU5V.js";
16
+ import "../../chunk-4CRWKTNQ.js";
17
17
  import "../../chunk-SRIH4U5Y.js";
18
18
  import "../../chunk-EGMQ3SXN.js";
19
19
  import "../../chunk-NKKYTCBH.js";