@agents-inc/cli 0.34.1 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/config/skills-matrix.yaml +26 -26
- package/config/stacks.yaml +8 -8
- package/dist/{chunk-HTTPKSL6.js → chunk-2XX4TMCI.js} +2 -2
- package/dist/{chunk-CEWNZQMH.js → chunk-3E2V5YL3.js} +8 -2
- package/dist/chunk-3E2V5YL3.js.map +1 -0
- package/dist/{chunk-QC37C32G.js → chunk-3NQJOJZL.js} +3 -3
- package/dist/chunk-54ZZCWN4.js +51 -0
- package/dist/chunk-54ZZCWN4.js.map +1 -0
- package/dist/{chunk-VEZ2GZEK.js → chunk-ATLRUR3B.js} +2 -2
- package/dist/{chunk-ZI5EBHCC.js → chunk-CYFU3ARY.js} +38 -17
- package/dist/chunk-CYFU3ARY.js.map +1 -0
- package/dist/{chunk-X7SPCWY6.js → chunk-DUQFF45G.js} +14 -9
- package/dist/chunk-DUQFF45G.js.map +1 -0
- package/dist/{chunk-CB7GYRUP.js → chunk-EISBUEBL.js} +101 -52
- package/dist/chunk-EISBUEBL.js.map +1 -0
- package/dist/chunk-EXFVAEPY.js +80 -0
- package/dist/chunk-EXFVAEPY.js.map +1 -0
- package/dist/{chunk-ANGAZ444.js → chunk-FWQK3HWB.js} +4 -4
- package/dist/chunk-FWQK3HWB.js.map +1 -0
- package/dist/{chunk-DC5AK3LW.js → chunk-GG4BSB6S.js} +5 -11
- package/dist/chunk-GG4BSB6S.js.map +1 -0
- package/dist/{chunk-GGHH3KR2.js → chunk-HKDE4LJW.js} +2 -2
- package/dist/{chunk-R3AD6XBJ.js → chunk-HRMQ2RGY.js} +81 -26
- package/dist/chunk-HRMQ2RGY.js.map +1 -0
- package/dist/{chunk-YPJKOM42.js → chunk-HRW7BIDE.js} +2 -2
- package/dist/{chunk-LFHZBF6N.js → chunk-IVIK776Y.js} +4 -3
- package/dist/chunk-IVIK776Y.js.map +1 -0
- package/dist/{chunk-ALS7SH7X.js → chunk-IWNPFIGY.js} +38 -48
- package/dist/chunk-IWNPFIGY.js.map +1 -0
- package/dist/{chunk-GIFEDW27.js → chunk-IZRVFC2Z.js} +7 -7
- package/dist/chunk-IZRVFC2Z.js.map +1 -0
- package/dist/chunk-K77I4XGL.js +47 -0
- package/dist/chunk-K77I4XGL.js.map +1 -0
- package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
- package/dist/chunk-KUV24B5M.js.map +1 -0
- package/dist/{chunk-KENWMEKN.js → chunk-M6PGIZNS.js} +6 -6
- package/dist/{chunk-B47QYIUL.js → chunk-NFV4SKH5.js} +4 -4
- package/dist/chunk-NI2RSNWB.js +156 -0
- package/dist/chunk-NI2RSNWB.js.map +1 -0
- package/dist/{chunk-ZP4BI6J2.js → chunk-OEX5JDQD.js} +7 -7
- package/dist/chunk-OEX5JDQD.js.map +1 -0
- package/dist/{chunk-OKILA27U.js → chunk-TA6IIQI4.js} +86 -99
- package/dist/chunk-TA6IIQI4.js.map +1 -0
- package/dist/{chunk-JZOLJVWA.js → chunk-TBDIR6LY.js} +12 -11
- package/dist/chunk-TBDIR6LY.js.map +1 -0
- package/dist/{chunk-XYCN2GCV.js → chunk-TNFACSWF.js} +3 -3
- package/dist/{chunk-ZE355C6C.js → chunk-TY5GELDB.js} +9 -4
- package/dist/chunk-TY5GELDB.js.map +1 -0
- package/dist/{chunk-TM4I4EHK.js → chunk-U5OB5ADP.js} +2829 -2793
- package/dist/chunk-U5OB5ADP.js.map +1 -0
- package/dist/{chunk-JXMRTHDT.js → chunk-UOMMQ5M6.js} +2 -2
- package/dist/{chunk-A5CYQQVG.js → chunk-UV6JUGIY.js} +2 -2
- package/dist/{chunk-5YNZJ5TP.js → chunk-VAHVSQIG.js} +2 -2
- package/dist/{chunk-TKB4O2RY.js → chunk-VAK5PX72.js} +5 -5
- package/dist/chunk-WSGGJKD5.js +113 -0
- package/dist/chunk-WSGGJKD5.js.map +1 -0
- package/dist/{chunk-GVMA2EKC.js → chunk-YHQNTBBN.js} +2 -2
- package/dist/{chunk-NLR6Z37M.js → chunk-YJIJTBSX.js} +81 -97
- package/dist/chunk-YJIJTBSX.js.map +1 -0
- package/dist/{chunk-YCS7GF6Y.js → chunk-ZBJQXDQN.js} +3 -1
- package/dist/{chunk-YCS7GF6Y.js.map → chunk-ZBJQXDQN.js.map} +1 -1
- package/dist/cli/defaults/agent-mappings.yaml +4 -4
- package/dist/commands/build/marketplace.js +3 -3
- package/dist/commands/build/plugins.js +5 -5
- package/dist/commands/build/stack.js +5 -5
- package/dist/commands/compile.js +25 -19
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +8 -8
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +5 -5
- package/dist/commands/config/path.js +4 -4
- package/dist/commands/config/set-project.js +7 -7
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +5 -5
- package/dist/commands/config/unset-project.js +5 -5
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +8 -8
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +4 -4
- package/dist/commands/edit.js +37 -28
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +6 -6
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +16 -16
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +5 -5
- package/dist/commands/init.js +31 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +4 -4
- package/dist/commands/new/agent.js +5 -5
- package/dist/commands/new/skill.js +8 -8
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +4 -4
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +181 -97
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +6 -6
- package/dist/commands/validate.js +5 -5
- package/dist/commands/version/bump.js +4 -4
- package/dist/commands/version/index.js +4 -4
- package/dist/commands/version/set.js +4 -4
- package/dist/commands/version/show.js +4 -4
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +3 -3
- package/dist/components/wizard/category-grid.test.js +42 -21
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +10 -0
- package/dist/components/wizard/checkbox-grid.test.js +260 -0
- package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
- package/dist/components/wizard/domain-selection.js +7 -5
- package/dist/components/wizard/help-modal.js +2 -2
- package/dist/components/wizard/menu-item.js +2 -2
- package/dist/components/wizard/search-modal.js +3 -3
- package/dist/components/wizard/search-modal.test.js +3 -3
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +2 -2
- package/dist/components/wizard/source-grid.js +5 -5
- package/dist/components/wizard/source-grid.test.js +5 -5
- package/dist/components/wizard/stack-selection.js +8 -7
- package/dist/components/wizard/step-agents.js +16 -0
- package/dist/components/wizard/step-agents.js.map +1 -0
- package/dist/components/wizard/step-agents.test.js +185 -0
- package/dist/components/wizard/step-agents.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -7
- package/dist/components/wizard/step-build.test.js +25 -22
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +2 -2
- package/dist/components/wizard/step-confirm.test.js +6 -5
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +2 -2
- package/dist/components/wizard/step-settings.js +6 -6
- package/dist/components/wizard/step-settings.test.js +9 -9
- package/dist/components/wizard/step-sources.js +12 -10
- package/dist/components/wizard/step-sources.test.js +14 -12
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +11 -9
- package/dist/components/wizard/step-stack.test.js +12 -10
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +8 -7
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +6 -4
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +27 -23
- package/dist/config/skills-matrix.yaml +26 -26
- package/dist/config/stacks.yaml +8 -8
- package/dist/hooks/init.js +5 -3
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-manager-WJYANKDI.js → source-manager-FEGVYDFZ.js} +4 -4
- package/dist/source-manager-FEGVYDFZ.js.map +1 -0
- package/dist/stores/wizard-store.js +5 -4
- package/dist/stores/wizard-store.test.js +287 -15
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/agent.schema.json +3 -3
- package/src/schemas/metadata.schema.json +14 -14
- package/src/schemas/project-config.schema.json +46 -2
- package/src/schemas/project-source-config.schema.json +17 -5
- package/src/schemas/skills-matrix.schema.json +4 -4
- package/src/schemas/stack.schema.json +1 -1
- package/src/schemas/stacks.schema.json +42 -1
- package/dist/chunk-2LUXM5FB.js +0 -277
- package/dist/chunk-2LUXM5FB.js.map +0 -1
- package/dist/chunk-ALS7SH7X.js.map +0 -1
- package/dist/chunk-ANGAZ444.js.map +0 -1
- package/dist/chunk-CB7GYRUP.js.map +0 -1
- package/dist/chunk-CEWNZQMH.js.map +0 -1
- package/dist/chunk-DC5AK3LW.js.map +0 -1
- package/dist/chunk-GIFEDW27.js.map +0 -1
- package/dist/chunk-JMVWYAHT.js.map +0 -1
- package/dist/chunk-JZOLJVWA.js.map +0 -1
- package/dist/chunk-LFHZBF6N.js.map +0 -1
- package/dist/chunk-NLR6Z37M.js.map +0 -1
- package/dist/chunk-OKILA27U.js.map +0 -1
- package/dist/chunk-R3AD6XBJ.js.map +0 -1
- package/dist/chunk-TM4I4EHK.js.map +0 -1
- package/dist/chunk-X7SPCWY6.js.map +0 -1
- package/dist/chunk-ZE355C6C.js.map +0 -1
- package/dist/chunk-ZI5EBHCC.js.map +0 -1
- package/dist/chunk-ZP4BI6J2.js.map +0 -1
- /package/dist/{chunk-HTTPKSL6.js.map → chunk-2XX4TMCI.js.map} +0 -0
- /package/dist/{chunk-QC37C32G.js.map → chunk-3NQJOJZL.js.map} +0 -0
- /package/dist/{chunk-VEZ2GZEK.js.map → chunk-ATLRUR3B.js.map} +0 -0
- /package/dist/{chunk-GGHH3KR2.js.map → chunk-HKDE4LJW.js.map} +0 -0
- /package/dist/{chunk-YPJKOM42.js.map → chunk-HRW7BIDE.js.map} +0 -0
- /package/dist/{chunk-KENWMEKN.js.map → chunk-M6PGIZNS.js.map} +0 -0
- /package/dist/{chunk-B47QYIUL.js.map → chunk-NFV4SKH5.js.map} +0 -0
- /package/dist/{chunk-XYCN2GCV.js.map → chunk-TNFACSWF.js.map} +0 -0
- /package/dist/{chunk-JXMRTHDT.js.map → chunk-UOMMQ5M6.js.map} +0 -0
- /package/dist/{chunk-A5CYQQVG.js.map → chunk-UV6JUGIY.js.map} +0 -0
- /package/dist/{chunk-5YNZJ5TP.js.map → chunk-VAHVSQIG.js.map} +0 -0
- /package/dist/{chunk-TKB4O2RY.js.map → chunk-VAK5PX72.js.map} +0 -0
- /package/dist/{chunk-GVMA2EKC.js.map → chunk-YHQNTBBN.js.map} +0 -0
- /package/dist/{source-manager-WJYANKDI.js.map → components/wizard/checkbox-grid.js.map} +0 -0
package/dist/commands/search.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SkillSearch
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-TNFACSWF.js";
|
|
5
|
+
import "../chunk-VAHVSQIG.js";
|
|
6
6
|
import "../chunk-U3IGFMCY.js";
|
|
7
7
|
import {
|
|
8
8
|
INFO_MESSAGES,
|
|
9
9
|
STATUS_MESSAGES,
|
|
10
10
|
SUCCESS_MESSAGES
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-HKDE4LJW.js";
|
|
12
12
|
import {
|
|
13
13
|
BaseCommand,
|
|
14
14
|
EXIT_CODES
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-YHQNTBBN.js";
|
|
16
16
|
import {
|
|
17
17
|
fetchFromSource,
|
|
18
18
|
loadSkillsMatrixFromSource,
|
|
19
19
|
resolveAllSources
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-U5OB5ADP.js";
|
|
21
21
|
import "../chunk-T4EXUIBY.js";
|
|
22
22
|
import {
|
|
23
23
|
copy,
|
|
24
24
|
ensureDir,
|
|
25
25
|
fileExists,
|
|
26
26
|
listDirectories
|
|
27
|
-
} from "../chunk-
|
|
27
|
+
} from "../chunk-YJIJTBSX.js";
|
|
28
28
|
import {
|
|
29
29
|
DEFAULT_SKILLS_SUBDIR,
|
|
30
30
|
LOCAL_SKILLS_PATH,
|
|
31
31
|
STANDARD_FILES
|
|
32
|
-
} from "../chunk-
|
|
32
|
+
} from "../chunk-ZBJQXDQN.js";
|
|
33
33
|
import {
|
|
34
34
|
init_esm_shims
|
|
35
35
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -5,34 +5,35 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
claudePluginUninstall,
|
|
7
7
|
isClaudeCLIAvailable
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-UV6JUGIY.js";
|
|
9
9
|
import {
|
|
10
10
|
DRY_RUN_MESSAGES,
|
|
11
|
-
ERROR_MESSAGES,
|
|
12
11
|
INFO_MESSAGES,
|
|
13
12
|
SUCCESS_MESSAGES
|
|
14
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-HKDE4LJW.js";
|
|
15
14
|
import {
|
|
16
15
|
BaseCommand,
|
|
17
16
|
EXIT_CODES
|
|
18
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-YHQNTBBN.js";
|
|
19
18
|
import {
|
|
20
19
|
getProjectPluginsDir,
|
|
21
|
-
listPluginNames
|
|
22
|
-
|
|
20
|
+
listPluginNames,
|
|
21
|
+
loadProjectSourceConfig,
|
|
22
|
+
readForkedFromMetadata
|
|
23
|
+
} from "../chunk-U5OB5ADP.js";
|
|
23
24
|
import "../chunk-T4EXUIBY.js";
|
|
24
25
|
import {
|
|
25
26
|
directoryExists,
|
|
26
|
-
|
|
27
|
+
getErrorMessage,
|
|
28
|
+
listDirectories,
|
|
27
29
|
remove
|
|
28
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-YJIJTBSX.js";
|
|
29
31
|
import {
|
|
30
32
|
CLAUDE_DIR,
|
|
31
33
|
CLAUDE_SRC_DIR,
|
|
32
34
|
CLI_COLORS,
|
|
33
|
-
DEFAULT_BRANDING
|
|
34
|
-
|
|
35
|
-
} from "../chunk-YCS7GF6Y.js";
|
|
35
|
+
DEFAULT_BRANDING
|
|
36
|
+
} from "../chunk-ZBJQXDQN.js";
|
|
36
37
|
import {
|
|
37
38
|
init_esm_shims
|
|
38
39
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -43,69 +44,89 @@ import { Flags } from "@oclif/core";
|
|
|
43
44
|
import { render, Box, Text, useApp } from "ink";
|
|
44
45
|
import path from "path";
|
|
45
46
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
47
|
+
function collectConfiguredSources(config) {
|
|
48
|
+
if (!config) return [];
|
|
49
|
+
const sources = [];
|
|
50
|
+
if (config.source) {
|
|
51
|
+
sources.push(config.source);
|
|
52
|
+
}
|
|
53
|
+
if (config.sources) {
|
|
54
|
+
for (const entry of config.sources) {
|
|
55
|
+
sources.push(entry.url);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return sources;
|
|
59
|
+
}
|
|
46
60
|
async function detectUninstallTarget(projectDir) {
|
|
47
61
|
const pluginsDir = getProjectPluginsDir(projectDir);
|
|
48
62
|
const skillsDir = path.join(projectDir, CLAUDE_DIR, "skills");
|
|
49
63
|
const agentsDir = path.join(projectDir, CLAUDE_DIR, "agents");
|
|
50
|
-
const configPath = path.join(projectDir, CLAUDE_DIR, STANDARD_FILES.CONFIG_YAML);
|
|
51
64
|
const claudeDir = path.join(projectDir, CLAUDE_DIR);
|
|
52
65
|
const claudeSrcDir = path.join(projectDir, CLAUDE_SRC_DIR);
|
|
53
|
-
const [hasLocalSkills, hasLocalAgents,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
const [hasLocalSkills, hasLocalAgents, hasClaudeDir, hasClaudeSrcDir, config] = await Promise.all(
|
|
67
|
+
[
|
|
68
|
+
directoryExists(skillsDir),
|
|
69
|
+
directoryExists(agentsDir),
|
|
70
|
+
directoryExists(claudeDir),
|
|
71
|
+
directoryExists(claudeSrcDir),
|
|
72
|
+
loadProjectSourceConfig(projectDir)
|
|
73
|
+
]
|
|
74
|
+
);
|
|
60
75
|
let pluginNames = [];
|
|
61
76
|
try {
|
|
62
77
|
pluginNames = await listPluginNames(projectDir);
|
|
63
78
|
} catch {
|
|
64
79
|
}
|
|
80
|
+
const configuredSources = collectConfiguredSources(config);
|
|
65
81
|
return {
|
|
66
82
|
hasPlugins: pluginNames.length > 0,
|
|
67
83
|
pluginNames,
|
|
68
84
|
hasLocalSkills,
|
|
69
85
|
hasLocalAgents,
|
|
70
|
-
hasLocalConfig,
|
|
71
86
|
hasClaudeDir,
|
|
72
87
|
hasClaudeSrcDir,
|
|
73
88
|
pluginsDir,
|
|
74
89
|
skillsDir,
|
|
75
90
|
agentsDir,
|
|
76
|
-
configPath,
|
|
77
91
|
claudeDir,
|
|
78
|
-
claudeSrcDir
|
|
92
|
+
claudeSrcDir,
|
|
93
|
+
config,
|
|
94
|
+
configuredSources
|
|
79
95
|
};
|
|
80
96
|
}
|
|
81
97
|
var UninstallConfirm = ({
|
|
82
98
|
target,
|
|
83
|
-
|
|
84
|
-
uninstallLocal,
|
|
99
|
+
removeAll,
|
|
85
100
|
onConfirm,
|
|
86
101
|
onCancel
|
|
87
102
|
}) => {
|
|
88
103
|
const { exit } = useApp();
|
|
89
|
-
const hasPluginToRemove = uninstallPlugin && target.hasPlugins;
|
|
90
|
-
const hasLocalToRemove = uninstallLocal && (target.hasClaudeDir || target.hasClaudeSrcDir);
|
|
91
104
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
92
105
|
/* @__PURE__ */ jsx(Text, { bold: true, children: "The following will be removed:" }),
|
|
93
106
|
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
94
|
-
|
|
107
|
+
target.hasPlugins && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
95
108
|
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: " Plugins:" }),
|
|
96
109
|
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
97
110
|
" ",
|
|
98
111
|
target.pluginsDir
|
|
99
112
|
] })
|
|
100
113
|
] }),
|
|
101
|
-
|
|
102
|
-
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: "
|
|
103
|
-
target.
|
|
114
|
+
(target.hasLocalSkills || target.hasLocalAgents) && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
115
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: " CLI-managed files:" }),
|
|
116
|
+
target.hasLocalSkills && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
104
117
|
" ",
|
|
105
|
-
target.
|
|
106
|
-
"/"
|
|
118
|
+
target.skillsDir,
|
|
119
|
+
"/ (matching sources)"
|
|
107
120
|
] }),
|
|
108
|
-
target.
|
|
121
|
+
target.hasLocalAgents && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
122
|
+
" ",
|
|
123
|
+
target.agentsDir,
|
|
124
|
+
"/ (CLI-compiled)"
|
|
125
|
+
] })
|
|
126
|
+
] }),
|
|
127
|
+
removeAll && target.hasClaudeSrcDir && /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
128
|
+
/* @__PURE__ */ jsx(Text, { color: CLI_COLORS.ERROR, children: " Config:" }),
|
|
129
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
109
130
|
" ",
|
|
110
131
|
target.claudeSrcDir,
|
|
111
132
|
"/"
|
|
@@ -129,14 +150,26 @@ var UninstallConfirm = ({
|
|
|
129
150
|
)
|
|
130
151
|
] });
|
|
131
152
|
};
|
|
153
|
+
async function isDirectoryEmpty(dirPath) {
|
|
154
|
+
const { readdir } = await import("fs/promises");
|
|
155
|
+
try {
|
|
156
|
+
const allEntries = await readdir(dirPath);
|
|
157
|
+
return allEntries.length === 0;
|
|
158
|
+
} catch {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function skillMatchesConfiguredSource(forkedFromSource, configuredSources) {
|
|
163
|
+
if (!forkedFromSource || configuredSources.length === 0) return false;
|
|
164
|
+
return configuredSources.includes(forkedFromSource);
|
|
165
|
+
}
|
|
132
166
|
var Uninstall = class _Uninstall extends BaseCommand {
|
|
133
167
|
static summary = `Remove ${DEFAULT_BRANDING.NAME} from this project`;
|
|
134
|
-
static description = `Uninstall
|
|
168
|
+
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.`;
|
|
135
169
|
static examples = [
|
|
136
170
|
"<%= config.bin %> <%= command.id %>",
|
|
137
171
|
"<%= config.bin %> <%= command.id %> --yes",
|
|
138
|
-
"<%= config.bin %> <%= command.id %> --
|
|
139
|
-
"<%= config.bin %> <%= command.id %> --local",
|
|
172
|
+
"<%= config.bin %> <%= command.id %> --all",
|
|
140
173
|
"<%= config.bin %> <%= command.id %> --dry-run"
|
|
141
174
|
];
|
|
142
175
|
static flags = {
|
|
@@ -146,12 +179,8 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
146
179
|
description: "Skip confirmation prompt",
|
|
147
180
|
default: false
|
|
148
181
|
}),
|
|
149
|
-
|
|
150
|
-
description: "
|
|
151
|
-
default: false
|
|
152
|
-
}),
|
|
153
|
-
local: Flags.boolean({
|
|
154
|
-
description: "Only remove local files (not the plugin)",
|
|
182
|
+
all: Flags.boolean({
|
|
183
|
+
description: "Also remove .claude-src/ config directory",
|
|
155
184
|
default: false
|
|
156
185
|
})
|
|
157
186
|
};
|
|
@@ -166,22 +195,11 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
166
195
|
this.log("");
|
|
167
196
|
}
|
|
168
197
|
const target = await detectUninstallTarget(projectDir);
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
const hasPluginToRemove = uninstallPlugin && target.hasPlugins;
|
|
172
|
-
const hasLocalToRemove = uninstallLocal && (target.hasClaudeDir || target.hasClaudeSrcDir);
|
|
173
|
-
if (!hasPluginToRemove && !hasLocalToRemove) {
|
|
198
|
+
const hasAnythingToRemove = target.hasPlugins || target.hasLocalSkills || target.hasLocalAgents || flags.all && target.hasClaudeSrcDir;
|
|
199
|
+
if (!hasAnythingToRemove) {
|
|
174
200
|
this.warn("Nothing to uninstall.");
|
|
175
201
|
this.log("");
|
|
176
|
-
|
|
177
|
-
this.log(INFO_MESSAGES.NO_PLUGIN_INSTALLATION);
|
|
178
|
-
}
|
|
179
|
-
if (flags.local && !target.hasClaudeDir && !target.hasClaudeSrcDir) {
|
|
180
|
-
this.log(INFO_MESSAGES.NO_LOCAL_INSTALLATION);
|
|
181
|
-
}
|
|
182
|
-
if (!flags.plugin && !flags.local) {
|
|
183
|
-
this.log(INFO_MESSAGES.NOT_INSTALLED);
|
|
184
|
-
}
|
|
202
|
+
this.log(INFO_MESSAGES.NOT_INSTALLED);
|
|
185
203
|
this.log("");
|
|
186
204
|
this.log(INFO_MESSAGES.NO_CHANGES_MADE);
|
|
187
205
|
return;
|
|
@@ -193,8 +211,7 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
193
211
|
UninstallConfirm,
|
|
194
212
|
{
|
|
195
213
|
target,
|
|
196
|
-
|
|
197
|
-
uninstallLocal,
|
|
214
|
+
removeAll: flags.all,
|
|
198
215
|
onConfirm: () => resolve(true),
|
|
199
216
|
onCancel: () => resolve(false)
|
|
200
217
|
}
|
|
@@ -210,42 +227,39 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
210
227
|
} else {
|
|
211
228
|
this.log("The following will be removed:");
|
|
212
229
|
this.log("");
|
|
213
|
-
if (
|
|
230
|
+
if (target.hasPlugins) {
|
|
214
231
|
this.log(" Plugins:");
|
|
215
232
|
this.log(` ${target.pluginsDir}`);
|
|
216
233
|
}
|
|
217
|
-
if (
|
|
218
|
-
this.log("
|
|
219
|
-
if (target.
|
|
220
|
-
this.log(` ${target.
|
|
234
|
+
if (target.hasLocalSkills || target.hasLocalAgents) {
|
|
235
|
+
this.log(" CLI-managed files:");
|
|
236
|
+
if (target.hasLocalSkills) {
|
|
237
|
+
this.log(` ${target.skillsDir}/ (matching sources)`);
|
|
221
238
|
}
|
|
222
|
-
if (target.
|
|
223
|
-
this.log(` ${target.
|
|
239
|
+
if (target.hasLocalAgents) {
|
|
240
|
+
this.log(` ${target.agentsDir}/ (CLI-compiled)`);
|
|
224
241
|
}
|
|
225
242
|
}
|
|
243
|
+
if (flags.all && target.hasClaudeSrcDir) {
|
|
244
|
+
this.log(" Config:");
|
|
245
|
+
this.log(` ${target.claudeSrcDir}/`);
|
|
246
|
+
}
|
|
226
247
|
this.log("");
|
|
227
248
|
}
|
|
228
249
|
if (flags["dry-run"]) {
|
|
229
|
-
if (
|
|
250
|
+
if (target.hasPlugins) {
|
|
230
251
|
this.log(`[dry-run] Would uninstall ${target.pluginNames.length} plugins:`);
|
|
231
252
|
for (const pluginName of target.pluginNames) {
|
|
232
253
|
this.log(`[dry-run] ${pluginName}`);
|
|
233
254
|
}
|
|
234
255
|
}
|
|
235
|
-
|
|
236
|
-
if (target.hasClaudeDir) {
|
|
237
|
-
this.log(`[dry-run] Would remove ${target.claudeDir}/`);
|
|
238
|
-
}
|
|
239
|
-
if (target.hasClaudeSrcDir) {
|
|
240
|
-
this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
256
|
+
await this.dryRunLocalRemoval(target, flags.all);
|
|
243
257
|
this.log("");
|
|
244
258
|
this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_REMOVED);
|
|
245
259
|
this.log("");
|
|
246
260
|
return;
|
|
247
261
|
}
|
|
248
|
-
if (
|
|
262
|
+
if (target.hasPlugins) {
|
|
249
263
|
this.log("Uninstalling plugins...");
|
|
250
264
|
try {
|
|
251
265
|
const cliAvailable = await isClaudeCLIAvailable();
|
|
@@ -262,32 +276,18 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
262
276
|
this.logSuccess("Plugins uninstalled");
|
|
263
277
|
} catch (error) {
|
|
264
278
|
this.log("Plugin uninstall failed");
|
|
265
|
-
this.error(error
|
|
279
|
+
this.error(getErrorMessage(error), {
|
|
266
280
|
exit: EXIT_CODES.ERROR
|
|
267
281
|
});
|
|
268
282
|
}
|
|
269
283
|
}
|
|
270
|
-
|
|
271
|
-
this.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
if (target.hasClaudeSrcDir) {
|
|
279
|
-
await remove(target.claudeSrcDir);
|
|
280
|
-
removed.push(CLAUDE_SRC_DIR);
|
|
281
|
-
}
|
|
282
|
-
this.logSuccess(
|
|
283
|
-
`Removed ${removed.length} ${removed.length === 1 ? "directory" : "directories"}: ${removed.join(", ")}`
|
|
284
|
-
);
|
|
285
|
-
} catch (error) {
|
|
286
|
-
this.log("Failed to remove local directories");
|
|
287
|
-
this.error(error instanceof Error ? error.message : ERROR_MESSAGES.UNKNOWN_ERROR, {
|
|
288
|
-
exit: EXIT_CODES.ERROR
|
|
289
|
-
});
|
|
290
|
-
}
|
|
284
|
+
try {
|
|
285
|
+
await this.removeLocalFiles(target, flags.all);
|
|
286
|
+
} catch (error) {
|
|
287
|
+
this.log("Failed to remove local files");
|
|
288
|
+
this.error(getErrorMessage(error), {
|
|
289
|
+
exit: EXIT_CODES.ERROR
|
|
290
|
+
});
|
|
291
291
|
}
|
|
292
292
|
this.log("");
|
|
293
293
|
this.log(`${DEFAULT_BRANDING.NAME} has been uninstalled.`);
|
|
@@ -295,6 +295,90 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
295
295
|
this.logSuccess(SUCCESS_MESSAGES.UNINSTALL_COMPLETE);
|
|
296
296
|
this.log("");
|
|
297
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Selectively removes local files installed by the CLI using config-based matching.
|
|
300
|
+
*
|
|
301
|
+
* - Skills: removes skill dirs whose forked_from.source matches a configured source
|
|
302
|
+
* - Agents: removes agents whose frontmatter name matches a configured agent, or
|
|
303
|
+
* all agents if config.yaml exists (CLI was used to compile them)
|
|
304
|
+
* - Plugins: removed separately (always)
|
|
305
|
+
* - .claude-src/: only removed with --all flag
|
|
306
|
+
* - .claude/: only removed if empty after selective cleanup
|
|
307
|
+
*/
|
|
308
|
+
async removeLocalFiles(target, removeAll) {
|
|
309
|
+
let removedSkillCount = 0;
|
|
310
|
+
let skippedSkillCount = 0;
|
|
311
|
+
if (target.hasLocalSkills) {
|
|
312
|
+
const skillDirNames = await listDirectories(target.skillsDir);
|
|
313
|
+
for (const skillDirName of skillDirNames) {
|
|
314
|
+
const skillDir = path.join(target.skillsDir, skillDirName);
|
|
315
|
+
const forkedFrom = await readForkedFromMetadata(skillDir);
|
|
316
|
+
const shouldRemove = forkedFrom !== null && (skillMatchesConfiguredSource(forkedFrom.source, target.configuredSources) || // Legacy skills without source field are treated as CLI-managed when config exists
|
|
317
|
+
!forkedFrom.source && target.config !== null);
|
|
318
|
+
if (shouldRemove) {
|
|
319
|
+
await remove(skillDir);
|
|
320
|
+
removedSkillCount++;
|
|
321
|
+
} else {
|
|
322
|
+
this.warn(`Skipping '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`);
|
|
323
|
+
skippedSkillCount++;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (removedSkillCount > 0) {
|
|
327
|
+
this.logSuccess(
|
|
328
|
+
`Removed ${removedSkillCount} CLI-installed ${removedSkillCount === 1 ? "skill" : "skills"}`
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
if (skippedSkillCount === 0 && await directoryExists(target.skillsDir)) {
|
|
332
|
+
if (await isDirectoryEmpty(target.skillsDir)) {
|
|
333
|
+
await remove(target.skillsDir);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (target.hasLocalAgents) {
|
|
338
|
+
if (target.config !== null) {
|
|
339
|
+
await remove(target.agentsDir);
|
|
340
|
+
this.logSuccess("Removed compiled agents");
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (removeAll && target.hasClaudeSrcDir) {
|
|
344
|
+
await remove(target.claudeSrcDir);
|
|
345
|
+
this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);
|
|
346
|
+
}
|
|
347
|
+
if (target.hasClaudeDir && await directoryExists(target.claudeDir)) {
|
|
348
|
+
if (await isDirectoryEmpty(target.claudeDir)) {
|
|
349
|
+
await remove(target.claudeDir);
|
|
350
|
+
this.logSuccess(`Removed ${CLAUDE_DIR}/`);
|
|
351
|
+
} else {
|
|
352
|
+
this.log(`Kept ${CLAUDE_DIR}/ (contains user content)`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async dryRunLocalRemoval(target, removeAll) {
|
|
357
|
+
if (target.hasLocalSkills) {
|
|
358
|
+
const skillDirNames = await listDirectories(target.skillsDir);
|
|
359
|
+
for (const skillDirName of skillDirNames) {
|
|
360
|
+
const skillDir = path.join(target.skillsDir, skillDirName);
|
|
361
|
+
const forkedFrom = await readForkedFromMetadata(skillDir);
|
|
362
|
+
const shouldRemove = forkedFrom !== null && (skillMatchesConfiguredSource(forkedFrom.source, target.configuredSources) || !forkedFrom.source && target.config !== null);
|
|
363
|
+
if (shouldRemove) {
|
|
364
|
+
this.log(`[dry-run] Would remove skill '${skillDirName}'`);
|
|
365
|
+
} else {
|
|
366
|
+
this.log(
|
|
367
|
+
`[dry-run] Would skip '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
if (target.hasLocalAgents && target.config !== null) {
|
|
373
|
+
this.log(`[dry-run] Would remove ${target.agentsDir}/`);
|
|
374
|
+
}
|
|
375
|
+
if (removeAll && target.hasClaudeSrcDir) {
|
|
376
|
+
this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);
|
|
377
|
+
}
|
|
378
|
+
if (target.hasClaudeDir) {
|
|
379
|
+
this.log(`[dry-run] Would remove ${target.claudeDir}/ only if empty after cleanup`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
298
382
|
};
|
|
299
383
|
export {
|
|
300
384
|
Uninstall as default
|
|
@@ -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 { directoryExists, fileExists, remove } from \"../utils/fs\";\nimport { claudePluginUninstall, isClaudeCLIAvailable } from \"../utils/exec\";\nimport { listPluginNames, getProjectPluginsDir } from \"../lib/plugins\";\nimport {\n CLAUDE_DIR,\n CLAUDE_SRC_DIR,\n CLI_COLORS,\n DEFAULT_BRANDING,\n STANDARD_FILES,\n} from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport {\n ERROR_MESSAGES,\n SUCCESS_MESSAGES,\n INFO_MESSAGES,\n DRY_RUN_MESSAGES,\n} from \"../utils/messages\";\n\ntype UninstallTarget = {\n hasPlugins: boolean;\n pluginNames: string[];\n hasLocalSkills: boolean;\n hasLocalAgents: boolean;\n hasLocalConfig: boolean;\n hasClaudeDir: boolean;\n hasClaudeSrcDir: boolean;\n pluginsDir: string;\n skillsDir: string;\n agentsDir: string;\n configPath: string;\n claudeDir: string;\n claudeSrcDir: string;\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 configPath = path.join(projectDir, CLAUDE_DIR, STANDARD_FILES.CONFIG_YAML);\n const claudeDir = path.join(projectDir, CLAUDE_DIR);\n const claudeSrcDir = path.join(projectDir, CLAUDE_SRC_DIR);\n\n const [hasLocalSkills, hasLocalAgents, hasLocalConfig, hasClaudeDir, hasClaudeSrcDir] =\n await Promise.all([\n directoryExists(skillsDir),\n directoryExists(agentsDir),\n fileExists(configPath),\n directoryExists(claudeDir),\n directoryExists(claudeSrcDir),\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 return {\n hasPlugins: pluginNames.length > 0,\n pluginNames,\n hasLocalSkills,\n hasLocalAgents,\n hasLocalConfig,\n hasClaudeDir,\n hasClaudeSrcDir,\n pluginsDir,\n skillsDir,\n agentsDir,\n configPath,\n claudeDir,\n claudeSrcDir,\n };\n}\n\ntype UninstallConfirmProps = {\n target: UninstallTarget;\n uninstallPlugin: boolean;\n uninstallLocal: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nconst UninstallConfirm: React.FC<UninstallConfirmProps> = ({\n target,\n uninstallPlugin,\n uninstallLocal,\n onConfirm,\n onCancel,\n}) => {\n const { exit } = useApp();\n const hasPluginToRemove = uninstallPlugin && target.hasPlugins;\n const hasLocalToRemove = uninstallLocal && (target.hasClaudeDir || target.hasClaudeSrcDir);\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>The following will be removed:</Text>\n <Text> </Text>\n\n {hasPluginToRemove && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Plugins:</Text>\n <Text dimColor> {target.pluginsDir}</Text>\n </Box>\n )}\n\n {hasLocalToRemove && (\n <Box flexDirection=\"column\">\n <Text color={CLI_COLORS.ERROR}> Local directories:</Text>\n {target.hasClaudeDir && <Text dimColor> {target.claudeDir}/</Text>}\n {target.hasClaudeSrcDir && <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\nexport default class Uninstall extends BaseCommand {\n static summary = `Remove ${DEFAULT_BRANDING.NAME} from this project`;\n\n static description = `Uninstall the ${DEFAULT_BRANDING.NAME} plugin and/or local directories (.claude/ and .claude-src/). By default, removes everything.`;\n\n static examples = [\n \"<%= config.bin %> <%= command.id %>\",\n \"<%= config.bin %> <%= command.id %> --yes\",\n \"<%= config.bin %> <%= command.id %> --plugin\",\n \"<%= config.bin %> <%= command.id %> --local\",\n \"<%= config.bin %> <%= command.id %> --dry-run\",\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 plugin: Flags.boolean({\n description: \"Only uninstall the plugin (not local files)\",\n default: false,\n }),\n local: Flags.boolean({\n description: \"Only remove local files (not the plugin)\",\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 if (flags[\"dry-run\"]) {\n this.log(DRY_RUN_MESSAGES.PREVIEW_NO_FILES_REMOVED);\n this.log(\"\");\n }\n\n const target = await detectUninstallTarget(projectDir);\n\n const uninstallPlugin = !flags.local;\n const uninstallLocal = !flags.plugin;\n\n const hasPluginToRemove = uninstallPlugin && target.hasPlugins;\n const hasLocalToRemove = uninstallLocal && (target.hasClaudeDir || target.hasClaudeSrcDir);\n\n if (!hasPluginToRemove && !hasLocalToRemove) {\n this.warn(\"Nothing to uninstall.\");\n this.log(\"\");\n\n if (flags.plugin && !target.hasPlugins) {\n this.log(INFO_MESSAGES.NO_PLUGIN_INSTALLATION);\n }\n if (flags.local && !target.hasClaudeDir && !target.hasClaudeSrcDir) {\n this.log(INFO_MESSAGES.NO_LOCAL_INSTALLATION);\n }\n if (!flags.plugin && !flags.local) {\n this.log(INFO_MESSAGES.NOT_INSTALLED);\n }\n\n this.log(\"\");\n this.log(INFO_MESSAGES.NO_CHANGES_MADE);\n return;\n }\n\n if (!flags.yes && !flags[\"dry-run\"]) {\n const confirmed = await new Promise<boolean>((resolve) => {\n const { waitUntilExit } = render(\n <UninstallConfirm\n target={target}\n uninstallPlugin={uninstallPlugin}\n uninstallLocal={uninstallLocal}\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 (hasPluginToRemove) {\n this.log(\" Plugins:\");\n this.log(` ${target.pluginsDir}`);\n }\n\n if (hasLocalToRemove) {\n this.log(\" Local directories:\");\n if (target.hasClaudeDir) {\n this.log(` ${target.claudeDir}/`);\n }\n if (target.hasClaudeSrcDir) {\n this.log(` ${target.claudeSrcDir}/`);\n }\n }\n\n this.log(\"\");\n }\n\n if (flags[\"dry-run\"]) {\n if (hasPluginToRemove) {\n this.log(`[dry-run] Would uninstall ${target.pluginNames.length} plugins:`);\n for (const pluginName of target.pluginNames) {\n this.log(`[dry-run] ${pluginName}`);\n }\n }\n if (hasLocalToRemove) {\n if (target.hasClaudeDir) {\n this.log(`[dry-run] Would remove ${target.claudeDir}/`);\n }\n if (target.hasClaudeSrcDir) {\n this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);\n }\n }\n this.log(\"\");\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_REMOVED);\n this.log(\"\");\n return;\n }\n\n if (hasPluginToRemove) {\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 }\n\n this.logSuccess(\"Plugins uninstalled\");\n } catch (error) {\n this.log(\"Plugin uninstall failed\");\n this.error(error instanceof Error ? error.message : ERROR_MESSAGES.UNKNOWN_ERROR, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n if (hasLocalToRemove) {\n this.log(\"Removing local directories...\");\n\n try {\n const removed: string[] = [];\n\n if (target.hasClaudeDir) {\n await remove(target.claudeDir);\n removed.push(CLAUDE_DIR);\n }\n\n if (target.hasClaudeSrcDir) {\n await remove(target.claudeSrcDir);\n removed.push(CLAUDE_SRC_DIR);\n }\n\n this.logSuccess(\n `Removed ${removed.length} ${removed.length === 1 ? \"directory\" : \"directories\"}: ${removed.join(\", \")}`,\n );\n } catch (error) {\n this.log(\"Failed to remove local directories\");\n this.error(error instanceof Error ? error.message : ERROR_MESSAGES.UNKNOWN_ERROR, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n this.log(\"\");\n this.log(`${DEFAULT_BRANDING.NAME} has been uninstalled.`);\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.UNINSTALL_COMPLETE);\n this.log(\"\");\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\";\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 { ProjectSourceConfig } from \"../lib/configuration/config\";\nimport { CLAUDE_DIR, CLAUDE_SRC_DIR, CLI_COLORS, DEFAULT_BRANDING } from \"../consts\";\nimport { EXIT_CODES } from \"../lib/exit-codes\";\nimport { SUCCESS_MESSAGES, INFO_MESSAGES, DRY_RUN_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.yaml */\n config: ProjectSourceConfig | null;\n /** All configured source URLs (primary + extras) */\n configuredSources: string[];\n};\n\nfunction collectConfiguredSources(config: ProjectSourceConfig | null): string[] {\n if (!config) return [];\n\n const sources: string[] = [];\n\n if (config.source) {\n sources.push(config.source);\n }\n\n if (config.sources) {\n for (const entry of config.sources) {\n sources.push(entry.url);\n }\n }\n\n return sources;\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\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 };\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\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 \"<%= config.bin %> <%= command.id %> --dry-run\",\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 if (flags[\"dry-run\"]) {\n this.log(DRY_RUN_MESSAGES.PREVIEW_NO_FILES_REMOVED);\n this.log(\"\");\n }\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 && !flags[\"dry-run\"]) {\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 (flags[\"dry-run\"]) {\n if (target.hasPlugins) {\n this.log(`[dry-run] Would uninstall ${target.pluginNames.length} plugins:`);\n for (const pluginName of target.pluginNames) {\n this.log(`[dry-run] ${pluginName}`);\n }\n }\n\n await this.dryRunLocalRemoval(target, flags.all);\n\n this.log(\"\");\n this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_REMOVED);\n this.log(\"\");\n return;\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 }\n\n this.logSuccess(\"Plugins uninstalled\");\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 /**\n * Selectively removes local files installed by the CLI using config-based matching.\n *\n * - Skills: removes skill dirs whose forked_from.source matches a configured source\n * - Agents: removes agents whose frontmatter name matches a configured agent, or\n * all agents if config.yaml exists (CLI was used to compile them)\n * - Plugins: removed separately (always)\n * - .claude-src/: only removed with --all flag\n * - .claude/: only removed if empty after selective cleanup\n */\n private async removeLocalFiles(target: UninstallTarget, removeAll: boolean): Promise<void> {\n let removedSkillCount = 0;\n let skippedSkillCount = 0;\n\n if (target.hasLocalSkills) {\n const skillDirNames = await listDirectories(target.skillsDir);\n\n for (const skillDirName of skillDirNames) {\n const skillDir = path.join(target.skillsDir, skillDirName);\n const forkedFrom = await readForkedFromMetadata(skillDir);\n\n const shouldRemove =\n forkedFrom !== null &&\n (skillMatchesConfiguredSource(forkedFrom.source, target.configuredSources) ||\n // Legacy skills without source field are treated as CLI-managed when config exists\n (!forkedFrom.source && target.config !== null));\n\n if (shouldRemove) {\n await remove(skillDir);\n removedSkillCount++;\n } else {\n this.warn(`Skipping '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`);\n skippedSkillCount++;\n }\n }\n\n if (removedSkillCount > 0) {\n this.logSuccess(\n `Removed ${removedSkillCount} CLI-installed ${removedSkillCount === 1 ? \"skill\" : \"skills\"}`,\n );\n }\n\n if (skippedSkillCount === 0 && (await directoryExists(target.skillsDir))) {\n if (await isDirectoryEmpty(target.skillsDir)) {\n await remove(target.skillsDir);\n }\n }\n }\n\n if (target.hasLocalAgents) {\n // config.yaml presence indicates the CLI compiled these agents\n if (target.config !== null) {\n await remove(target.agentsDir);\n this.logSuccess(\"Removed compiled agents\");\n }\n }\n\n if (removeAll && target.hasClaudeSrcDir) {\n await remove(target.claudeSrcDir);\n this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);\n }\n\n if (target.hasClaudeDir && (await directoryExists(target.claudeDir))) {\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\n private async dryRunLocalRemoval(target: UninstallTarget, removeAll: boolean): Promise<void> {\n if (target.hasLocalSkills) {\n const skillDirNames = await listDirectories(target.skillsDir);\n\n for (const skillDirName of skillDirNames) {\n const skillDir = path.join(target.skillsDir, skillDirName);\n const forkedFrom = await readForkedFromMetadata(skillDir);\n\n const shouldRemove =\n forkedFrom !== null &&\n (skillMatchesConfiguredSource(forkedFrom.source, target.configuredSources) ||\n (!forkedFrom.source && target.config !== null));\n\n if (shouldRemove) {\n this.log(`[dry-run] Would remove skill '${skillDirName}'`);\n } else {\n this.log(\n `[dry-run] Would skip '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`,\n );\n }\n }\n }\n\n if (target.hasLocalAgents && target.config !== null) {\n this.log(`[dry-run] Would remove ${target.agentsDir}/`);\n }\n\n if (removeAll && target.hasClaudeSrcDir) {\n this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);\n }\n\n if (target.hasClaudeDir) {\n this.log(`[dry-run] Would remove ${target.claudeDir}/ only if empty after cleanup`);\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/commands/update.js
CHANGED
|
@@ -4,31 +4,31 @@ import {
|
|
|
4
4
|
} from "../chunk-N6S7ZRIL.js";
|
|
5
5
|
import {
|
|
6
6
|
recompileAgents
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-IZRVFC2Z.js";
|
|
8
8
|
import {
|
|
9
9
|
ERROR_MESSAGES,
|
|
10
10
|
INFO_MESSAGES,
|
|
11
11
|
STATUS_MESSAGES,
|
|
12
12
|
SUCCESS_MESSAGES
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-HKDE4LJW.js";
|
|
14
14
|
import {
|
|
15
15
|
BaseCommand,
|
|
16
16
|
EXIT_CODES
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-YHQNTBBN.js";
|
|
18
18
|
import {
|
|
19
19
|
compareLocalSkillsWithSource,
|
|
20
20
|
injectForkedFromMetadata,
|
|
21
21
|
loadSkillsMatrixFromSource
|
|
22
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-U5OB5ADP.js";
|
|
23
23
|
import "../chunk-T4EXUIBY.js";
|
|
24
24
|
import {
|
|
25
25
|
copy,
|
|
26
26
|
fileExists,
|
|
27
27
|
getErrorMessage
|
|
28
|
-
} from "../chunk-
|
|
28
|
+
} from "../chunk-YJIJTBSX.js";
|
|
29
29
|
import {
|
|
30
30
|
LOCAL_SKILLS_PATH
|
|
31
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-ZBJQXDQN.js";
|
|
32
32
|
import {
|
|
33
33
|
init_esm_shims
|
|
34
34
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ERROR_MESSAGES
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-HKDE4LJW.js";
|
|
5
5
|
import {
|
|
6
6
|
BaseCommand,
|
|
7
7
|
EXIT_CODES
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-YHQNTBBN.js";
|
|
9
9
|
import {
|
|
10
10
|
extractFrontmatter,
|
|
11
11
|
printPluginValidationResult,
|
|
12
12
|
validateAllPlugins,
|
|
13
13
|
validatePlugin
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-U5OB5ADP.js";
|
|
15
15
|
import "../chunk-T4EXUIBY.js";
|
|
16
16
|
import {
|
|
17
17
|
agentFrontmatterValidationSchema,
|
|
@@ -27,12 +27,12 @@ import {
|
|
|
27
27
|
skillsMatrixConfigSchema,
|
|
28
28
|
stackConfigValidationSchema,
|
|
29
29
|
stacksConfigSchema
|
|
30
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-YJIJTBSX.js";
|
|
31
31
|
import {
|
|
32
32
|
CLAUDE_DIR,
|
|
33
33
|
CLAUDE_SRC_DIR,
|
|
34
34
|
STANDARD_FILES
|
|
35
|
-
} from "../chunk-
|
|
35
|
+
} from "../chunk-ZBJQXDQN.js";
|
|
36
36
|
import {
|
|
37
37
|
init_esm_shims
|
|
38
38
|
} from "../chunk-DHET7RCE.js";
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-YHQNTBBN.js";
|
|
6
6
|
import {
|
|
7
7
|
bumpPluginVersion,
|
|
8
8
|
findPluginManifest
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-U5OB5ADP.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
11
|
import {
|
|
12
12
|
pluginManifestSchema,
|
|
13
13
|
readFile
|
|
14
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-YJIJTBSX.js";
|
|
15
15
|
import {
|
|
16
16
|
PLUGIN_MANIFEST_DIR,
|
|
17
17
|
PLUGIN_MANIFEST_FILE
|
|
18
|
-
} from "../../chunk-
|
|
18
|
+
} from "../../chunk-ZBJQXDQN.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esm_shims
|
|
21
21
|
} from "../../chunk-DHET7RCE.js";
|