@agents-inc/cli 0.34.1 → 0.35.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 +8 -0
- package/config/skills-matrix.yaml +9 -9
- package/config/stacks.yaml +8 -8
- package/dist/{chunk-B47QYIUL.js → chunk-5LPPIT6H.js} +4 -4
- package/dist/chunk-AQQVSNUX.js +33 -0
- package/dist/chunk-AQQVSNUX.js.map +1 -0
- package/dist/{chunk-GVMA2EKC.js → chunk-BLLXNFWP.js} +2 -2
- package/dist/{chunk-KENWMEKN.js → chunk-BPD4VUAU.js} +4 -4
- package/dist/{chunk-X7SPCWY6.js → chunk-CXWPUVA7.js} +12 -7
- package/dist/chunk-CXWPUVA7.js.map +1 -0
- package/dist/{chunk-QC37C32G.js → chunk-IG7CUREJ.js} +2 -2
- package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
- package/dist/chunk-KUV24B5M.js.map +1 -0
- package/dist/{chunk-ZI5EBHCC.js → chunk-KWF6D7ZP.js} +21 -10
- package/dist/chunk-KWF6D7ZP.js.map +1 -0
- package/dist/{chunk-ZP4BI6J2.js → chunk-NJ775OJ4.js} +3 -3
- package/dist/{chunk-ALS7SH7X.js → chunk-NVQEHRJY.js} +2 -2
- package/dist/{chunk-TKB4O2RY.js → chunk-OGJ7DFCL.js} +2 -2
- package/dist/{chunk-R3AD6XBJ.js → chunk-OGXSTJP2.js} +3 -3
- package/dist/{chunk-NLR6Z37M.js → chunk-OI4WBRC7.js} +12 -3
- package/dist/chunk-OI4WBRC7.js.map +1 -0
- package/dist/{chunk-JZOLJVWA.js → chunk-PKUIO2Z7.js} +6 -5
- package/dist/chunk-PKUIO2Z7.js.map +1 -0
- package/dist/{chunk-CB7GYRUP.js → chunk-U36YCEBK.js} +76 -36
- package/dist/chunk-U36YCEBK.js.map +1 -0
- package/dist/{chunk-2LUXM5FB.js → chunk-UFUQUFV6.js} +7 -28
- package/dist/chunk-UFUQUFV6.js.map +1 -0
- package/dist/{chunk-TM4I4EHK.js → chunk-WMVGRAFB.js} +2884 -2925
- package/dist/chunk-WMVGRAFB.js.map +1 -0
- package/dist/{chunk-A5CYQQVG.js → chunk-XNQJBQ5X.js} +2 -2
- package/dist/{chunk-GIFEDW27.js → chunk-YIKBNGE3.js} +3 -3
- package/dist/{chunk-ANGAZ444.js → chunk-YN35L5NE.js} +1 -1
- package/dist/chunk-YN35L5NE.js.map +1 -0
- package/dist/commands/build/marketplace.js +2 -2
- package/dist/commands/build/plugins.js +4 -4
- package/dist/commands/build/stack.js +4 -4
- package/dist/commands/compile.js +17 -6
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +3 -3
- package/dist/commands/config/index.js +4 -4
- package/dist/commands/config/path.js +3 -3
- package/dist/commands/config/set-project.js +3 -3
- package/dist/commands/config/show.js +4 -4
- package/dist/commands/config/unset-project.js +3 -3
- package/dist/commands/diff.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/edit.js +24 -18
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +3 -3
- package/dist/commands/import/skill.js +3 -3
- package/dist/commands/info.js +3 -3
- package/dist/commands/init.js +18 -16
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/new/agent.js +4 -4
- package/dist/commands/new/skill.js +3 -3
- package/dist/commands/outdated.js +3 -3
- package/dist/commands/search.js +3 -3
- package/dist/commands/uninstall.js +103 -26
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +4 -4
- package/dist/commands/validate.js +3 -3
- package/dist/commands/version/bump.js +3 -3
- package/dist/commands/version/index.js +3 -3
- package/dist/commands/version/set.js +3 -3
- package/dist/commands/version/show.js +3 -3
- package/dist/components/wizard/domain-selection.js +4 -4
- package/dist/components/wizard/search-modal.js +2 -2
- package/dist/components/wizard/search-modal.test.js +2 -2
- package/dist/components/wizard/source-grid.js +3 -3
- package/dist/components/wizard/source-grid.test.js +3 -3
- package/dist/components/wizard/stack-selection.js +4 -4
- package/dist/components/wizard/step-build.js +4 -3
- package/dist/components/wizard/step-build.test.js +5 -4
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.test.js +3 -3
- package/dist/components/wizard/step-settings.js +4 -4
- package/dist/components/wizard/step-settings.test.js +7 -7
- package/dist/components/wizard/step-sources.js +8 -7
- package/dist/components/wizard/step-sources.test.js +9 -8
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +6 -6
- package/dist/components/wizard/step-stack.test.js +7 -7
- package/dist/components/wizard/wizard-layout.js +4 -4
- package/dist/components/wizard/wizard.js +15 -14
- package/dist/config/skills-matrix.yaml +9 -9
- package/dist/config/stacks.yaml +8 -8
- package/dist/hooks/init.js +4 -2
- package/dist/hooks/init.js.map +1 -1
- package/dist/{source-manager-WJYANKDI.js → source-manager-PTK4P6BF.js} +3 -3
- package/dist/stores/wizard-store.js +3 -3
- package/dist/stores/wizard-store.test.js +4 -4
- package/package.json +1 -1
- package/src/schemas/project-config.schema.json +3 -0
- package/src/schemas/project-source-config.schema.json +12 -0
- package/dist/chunk-2LUXM5FB.js.map +0 -1
- package/dist/chunk-ANGAZ444.js.map +0 -1
- package/dist/chunk-CB7GYRUP.js.map +0 -1
- package/dist/chunk-JMVWYAHT.js.map +0 -1
- package/dist/chunk-JZOLJVWA.js.map +0 -1
- package/dist/chunk-NLR6Z37M.js.map +0 -1
- package/dist/chunk-TM4I4EHK.js.map +0 -1
- package/dist/chunk-X7SPCWY6.js.map +0 -1
- package/dist/chunk-ZI5EBHCC.js.map +0 -1
- /package/dist/{chunk-B47QYIUL.js.map → chunk-5LPPIT6H.js.map} +0 -0
- /package/dist/{chunk-GVMA2EKC.js.map → chunk-BLLXNFWP.js.map} +0 -0
- /package/dist/{chunk-KENWMEKN.js.map → chunk-BPD4VUAU.js.map} +0 -0
- /package/dist/{chunk-QC37C32G.js.map → chunk-IG7CUREJ.js.map} +0 -0
- /package/dist/{chunk-ZP4BI6J2.js.map → chunk-NJ775OJ4.js.map} +0 -0
- /package/dist/{chunk-ALS7SH7X.js.map → chunk-NVQEHRJY.js.map} +0 -0
- /package/dist/{chunk-TKB4O2RY.js.map → chunk-OGJ7DFCL.js.map} +0 -0
- /package/dist/{chunk-R3AD6XBJ.js.map → chunk-OGXSTJP2.js.map} +0 -0
- /package/dist/{chunk-A5CYQQVG.js.map → chunk-XNQJBQ5X.js.map} +0 -0
- /package/dist/{chunk-GIFEDW27.js.map → chunk-YIKBNGE3.js.map} +0 -0
- /package/dist/{source-manager-WJYANKDI.js.map → source-manager-PTK4P6BF.js.map} +0 -0
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
claudePluginUninstall,
|
|
7
7
|
isClaudeCLIAvailable
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-XNQJBQ5X.js";
|
|
9
9
|
import {
|
|
10
10
|
DRY_RUN_MESSAGES,
|
|
11
11
|
ERROR_MESSAGES,
|
|
@@ -15,17 +15,19 @@ import {
|
|
|
15
15
|
import {
|
|
16
16
|
BaseCommand,
|
|
17
17
|
EXIT_CODES
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-BLLXNFWP.js";
|
|
19
19
|
import {
|
|
20
20
|
getProjectPluginsDir,
|
|
21
|
-
listPluginNames
|
|
22
|
-
|
|
21
|
+
listPluginNames,
|
|
22
|
+
readLocalSkillMetadata
|
|
23
|
+
} from "../chunk-WMVGRAFB.js";
|
|
23
24
|
import "../chunk-T4EXUIBY.js";
|
|
24
25
|
import {
|
|
25
26
|
directoryExists,
|
|
26
27
|
fileExists,
|
|
28
|
+
listDirectories,
|
|
27
29
|
remove
|
|
28
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-OI4WBRC7.js";
|
|
29
31
|
import {
|
|
30
32
|
CLAUDE_DIR,
|
|
31
33
|
CLAUDE_SRC_DIR,
|
|
@@ -129,9 +131,19 @@ var UninstallConfirm = ({
|
|
|
129
131
|
)
|
|
130
132
|
] });
|
|
131
133
|
};
|
|
134
|
+
async function isDirectoryEmpty(dirPath) {
|
|
135
|
+
const entries = await listDirectories(dirPath);
|
|
136
|
+
const { readdir } = await import("fs/promises");
|
|
137
|
+
try {
|
|
138
|
+
const allEntries = await readdir(dirPath);
|
|
139
|
+
return allEntries.length === 0;
|
|
140
|
+
} catch {
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
132
144
|
var Uninstall = class _Uninstall extends BaseCommand {
|
|
133
145
|
static summary = `Remove ${DEFAULT_BRANDING.NAME} from this project`;
|
|
134
|
-
static description = `Uninstall the ${DEFAULT_BRANDING.NAME} plugin and/or local directories (.claude/ and .claude-src/). By default, removes everything.`;
|
|
146
|
+
static description = `Uninstall the ${DEFAULT_BRANDING.NAME} plugin and/or local directories (.claude/ and .claude-src/). By default, removes everything. Only removes skills that were installed by the CLI (marked with generatedByAgentsInc in metadata.yaml).`;
|
|
135
147
|
static examples = [
|
|
136
148
|
"<%= config.bin %> <%= command.id %>",
|
|
137
149
|
"<%= config.bin %> <%= command.id %> --yes",
|
|
@@ -233,12 +245,7 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
233
245
|
}
|
|
234
246
|
}
|
|
235
247
|
if (hasLocalToRemove) {
|
|
236
|
-
|
|
237
|
-
this.log(`[dry-run] Would remove ${target.claudeDir}/`);
|
|
238
|
-
}
|
|
239
|
-
if (target.hasClaudeSrcDir) {
|
|
240
|
-
this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);
|
|
241
|
-
}
|
|
248
|
+
await this.dryRunLocalRemoval(target);
|
|
242
249
|
}
|
|
243
250
|
this.log("");
|
|
244
251
|
this.log(DRY_RUN_MESSAGES.COMPLETE_NO_FILES_REMOVED);
|
|
@@ -268,22 +275,11 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
268
275
|
}
|
|
269
276
|
}
|
|
270
277
|
if (hasLocalToRemove) {
|
|
271
|
-
this.log("Removing local
|
|
278
|
+
this.log("Removing local files...");
|
|
272
279
|
try {
|
|
273
|
-
|
|
274
|
-
if (target.hasClaudeDir) {
|
|
275
|
-
await remove(target.claudeDir);
|
|
276
|
-
removed.push(CLAUDE_DIR);
|
|
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
|
-
);
|
|
280
|
+
await this.removeLocalFiles(target);
|
|
285
281
|
} catch (error) {
|
|
286
|
-
this.log("Failed to remove local
|
|
282
|
+
this.log("Failed to remove local files");
|
|
287
283
|
this.error(error instanceof Error ? error.message : ERROR_MESSAGES.UNKNOWN_ERROR, {
|
|
288
284
|
exit: EXIT_CODES.ERROR
|
|
289
285
|
});
|
|
@@ -295,6 +291,87 @@ var Uninstall = class _Uninstall extends BaseCommand {
|
|
|
295
291
|
this.logSuccess(SUCCESS_MESSAGES.UNINSTALL_COMPLETE);
|
|
296
292
|
this.log("");
|
|
297
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Selectively removes local files installed by the CLI.
|
|
296
|
+
*
|
|
297
|
+
* - Skills: only removes skill dirs with `generatedByAgentsInc: true` in metadata.yaml
|
|
298
|
+
* - Agents: removes the entire `.claude/agents/` directory (compiled by CLI)
|
|
299
|
+
* - Config: removes `.claude-src/` entirely (CLI-owned config)
|
|
300
|
+
* - `.claude/`: only removed if empty after selective cleanup
|
|
301
|
+
*/
|
|
302
|
+
async removeLocalFiles(target) {
|
|
303
|
+
let removedSkillCount = 0;
|
|
304
|
+
let skippedSkillCount = 0;
|
|
305
|
+
if (target.hasLocalSkills) {
|
|
306
|
+
const skillDirNames = await listDirectories(target.skillsDir);
|
|
307
|
+
for (const skillDirName of skillDirNames) {
|
|
308
|
+
const skillDir = path.join(target.skillsDir, skillDirName);
|
|
309
|
+
const metadata = await readLocalSkillMetadata(skillDir);
|
|
310
|
+
if (metadata?.generatedByAgentsInc) {
|
|
311
|
+
await remove(skillDir);
|
|
312
|
+
removedSkillCount++;
|
|
313
|
+
} else {
|
|
314
|
+
this.warn(`Skipping '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`);
|
|
315
|
+
skippedSkillCount++;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (removedSkillCount > 0) {
|
|
319
|
+
this.logSuccess(
|
|
320
|
+
`Removed ${removedSkillCount} CLI-installed ${removedSkillCount === 1 ? "skill" : "skills"}`
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
if (skippedSkillCount === 0 && await directoryExists(target.skillsDir)) {
|
|
324
|
+
if (await isDirectoryEmpty(target.skillsDir)) {
|
|
325
|
+
await remove(target.skillsDir);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (target.hasLocalAgents) {
|
|
330
|
+
await remove(target.agentsDir);
|
|
331
|
+
this.logSuccess("Removed compiled agents");
|
|
332
|
+
}
|
|
333
|
+
if (target.hasClaudeSrcDir) {
|
|
334
|
+
await remove(target.claudeSrcDir);
|
|
335
|
+
this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);
|
|
336
|
+
}
|
|
337
|
+
if (target.hasClaudeDir && await directoryExists(target.claudeDir)) {
|
|
338
|
+
if (await isDirectoryEmpty(target.claudeDir)) {
|
|
339
|
+
await remove(target.claudeDir);
|
|
340
|
+
this.logSuccess(`Removed ${CLAUDE_DIR}/`);
|
|
341
|
+
} else {
|
|
342
|
+
this.log(`Kept ${CLAUDE_DIR}/ (contains user content)`);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Dry-run preview of local file removal.
|
|
348
|
+
* Shows what would be removed/skipped without making changes.
|
|
349
|
+
*/
|
|
350
|
+
async dryRunLocalRemoval(target) {
|
|
351
|
+
if (target.hasLocalSkills) {
|
|
352
|
+
const skillDirNames = await listDirectories(target.skillsDir);
|
|
353
|
+
for (const skillDirName of skillDirNames) {
|
|
354
|
+
const skillDir = path.join(target.skillsDir, skillDirName);
|
|
355
|
+
const metadata = await readLocalSkillMetadata(skillDir);
|
|
356
|
+
if (metadata?.generatedByAgentsInc) {
|
|
357
|
+
this.log(`[dry-run] Would remove skill '${skillDirName}'`);
|
|
358
|
+
} else {
|
|
359
|
+
this.log(
|
|
360
|
+
`[dry-run] Would skip '${skillDirName}': not created by ${DEFAULT_BRANDING.NAME} CLI`
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
if (target.hasLocalAgents) {
|
|
366
|
+
this.log(`[dry-run] Would remove ${target.agentsDir}/`);
|
|
367
|
+
}
|
|
368
|
+
if (target.hasClaudeSrcDir) {
|
|
369
|
+
this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);
|
|
370
|
+
}
|
|
371
|
+
if (target.hasClaudeDir) {
|
|
372
|
+
this.log(`[dry-run] Would remove ${target.claudeDir}/ only if empty after cleanup`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
298
375
|
};
|
|
299
376
|
export {
|
|
300
377
|
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 { directoryExists, fileExists, listDirectories, remove } from \"../utils/fs\";\nimport { claudePluginUninstall, isClaudeCLIAvailable } from \"../utils/exec\";\nimport { listPluginNames, getProjectPluginsDir } from \"../lib/plugins\";\nimport { readLocalSkillMetadata } from \"../lib/skills\";\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\n/**\n * Checks whether a directory is empty (contains no entries).\n * Returns true if the directory has no subdirectories or files.\n */\nasync function isDirectoryEmpty(dirPath: string): Promise<boolean> {\n const entries = await listDirectories(dirPath);\n // listDirectories only returns directories; also check for files\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\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. Only removes skills that were installed by the CLI (marked with generatedByAgentsInc in metadata.yaml).`;\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 await this.dryRunLocalRemoval(target);\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 files...\");\n\n try {\n await this.removeLocalFiles(target);\n } catch (error) {\n this.log(\"Failed to remove local files\");\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 /**\n * Selectively removes local files installed by the CLI.\n *\n * - Skills: only removes skill dirs with `generatedByAgentsInc: true` in metadata.yaml\n * - Agents: removes the entire `.claude/agents/` directory (compiled by CLI)\n * - Config: removes `.claude-src/` entirely (CLI-owned config)\n * - `.claude/`: only removed if empty after selective cleanup\n */\n private async removeLocalFiles(target: UninstallTarget): Promise<void> {\n let removedSkillCount = 0;\n let skippedSkillCount = 0;\n\n // Selectively remove skills based on generatedByAgentsInc flag\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 metadata = await readLocalSkillMetadata(skillDir);\n\n if (metadata?.generatedByAgentsInc) {\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 // Remove skills/ directory if now empty\n if (skippedSkillCount === 0 && (await directoryExists(target.skillsDir))) {\n if (await isDirectoryEmpty(target.skillsDir)) {\n await remove(target.skillsDir);\n }\n }\n }\n\n // Remove compiled agents directory entirely (generated by CLI)\n if (target.hasLocalAgents) {\n await remove(target.agentsDir);\n this.logSuccess(\"Removed compiled agents\");\n }\n\n // Remove .claude-src/ entirely (CLI-owned config)\n if (target.hasClaudeSrcDir) {\n await remove(target.claudeSrcDir);\n this.logSuccess(`Removed ${CLAUDE_SRC_DIR}/`);\n }\n\n // Only remove .claude/ itself if it is empty after cleanup\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 /**\n * Dry-run preview of local file removal.\n * Shows what would be removed/skipped without making changes.\n */\n private async dryRunLocalRemoval(target: UninstallTarget): Promise<void> {\n // Preview skill removal\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 metadata = await readLocalSkillMetadata(skillDir);\n\n if (metadata?.generatedByAgentsInc) {\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 // Preview agents removal\n if (target.hasLocalAgents) {\n this.log(`[dry-run] Would remove ${target.agentsDir}/`);\n }\n\n // Preview .claude-src/ removal\n if (target.hasClaudeSrcDir) {\n this.log(`[dry-run] Would remove ${target.claudeSrcDir}/`);\n }\n\n // Preview .claude/ removal\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,7 +4,7 @@ import {
|
|
|
4
4
|
} from "../chunk-N6S7ZRIL.js";
|
|
5
5
|
import {
|
|
6
6
|
recompileAgents
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-YIKBNGE3.js";
|
|
8
8
|
import {
|
|
9
9
|
ERROR_MESSAGES,
|
|
10
10
|
INFO_MESSAGES,
|
|
@@ -14,18 +14,18 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
BaseCommand,
|
|
16
16
|
EXIT_CODES
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-BLLXNFWP.js";
|
|
18
18
|
import {
|
|
19
19
|
compareLocalSkillsWithSource,
|
|
20
20
|
injectForkedFromMetadata,
|
|
21
21
|
loadSkillsMatrixFromSource
|
|
22
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-WMVGRAFB.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-OI4WBRC7.js";
|
|
29
29
|
import {
|
|
30
30
|
LOCAL_SKILLS_PATH
|
|
31
31
|
} from "../chunk-YCS7GF6Y.js";
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
BaseCommand,
|
|
7
7
|
EXIT_CODES
|
|
8
|
-
} from "../chunk-
|
|
8
|
+
} from "../chunk-BLLXNFWP.js";
|
|
9
9
|
import {
|
|
10
10
|
extractFrontmatter,
|
|
11
11
|
printPluginValidationResult,
|
|
12
12
|
validateAllPlugins,
|
|
13
13
|
validatePlugin
|
|
14
|
-
} from "../chunk-
|
|
14
|
+
} from "../chunk-WMVGRAFB.js";
|
|
15
15
|
import "../chunk-T4EXUIBY.js";
|
|
16
16
|
import {
|
|
17
17
|
agentFrontmatterValidationSchema,
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
skillsMatrixConfigSchema,
|
|
28
28
|
stackConfigValidationSchema,
|
|
29
29
|
stacksConfigSchema
|
|
30
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-OI4WBRC7.js";
|
|
31
31
|
import {
|
|
32
32
|
CLAUDE_DIR,
|
|
33
33
|
CLAUDE_SRC_DIR,
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
bumpPluginVersion,
|
|
8
8
|
findPluginManifest
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
11
|
import {
|
|
12
12
|
pluginManifestSchema,
|
|
13
13
|
readFile
|
|
14
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-OI4WBRC7.js";
|
|
15
15
|
import {
|
|
16
16
|
PLUGIN_MANIFEST_DIR,
|
|
17
17
|
PLUGIN_MANIFEST_FILE
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
findPluginManifest,
|
|
8
8
|
getPluginVersion
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-OI4WBRC7.js";
|
|
12
12
|
import {
|
|
13
13
|
PLUGIN_MANIFEST_DIR,
|
|
14
14
|
PLUGIN_MANIFEST_FILE
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
findPluginManifest
|
|
8
|
-
} from "../../chunk-
|
|
8
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
9
9
|
import "../../chunk-T4EXUIBY.js";
|
|
10
10
|
import {
|
|
11
11
|
pluginManifestSchema,
|
|
12
12
|
readFile,
|
|
13
13
|
writeFile
|
|
14
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-OI4WBRC7.js";
|
|
15
15
|
import {
|
|
16
16
|
PLUGIN_MANIFEST_DIR,
|
|
17
17
|
PLUGIN_MANIFEST_FILE
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BaseCommand,
|
|
4
4
|
EXIT_CODES
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-BLLXNFWP.js";
|
|
6
6
|
import {
|
|
7
7
|
findPluginManifest,
|
|
8
8
|
getPluginVersion
|
|
9
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-WMVGRAFB.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-OI4WBRC7.js";
|
|
12
12
|
import {
|
|
13
13
|
PLUGIN_MANIFEST_DIR,
|
|
14
14
|
PLUGIN_MANIFEST_FILE
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
DomainSelection
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-NVQEHRJY.js";
|
|
5
|
+
import "../../chunk-OGXSTJP2.js";
|
|
6
|
+
import "../../chunk-WMVGRAFB.js";
|
|
7
7
|
import "../../chunk-T4EXUIBY.js";
|
|
8
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-OI4WBRC7.js";
|
|
9
9
|
import "../../chunk-YCS7GF6Y.js";
|
|
10
10
|
import "../../chunk-DHET7RCE.js";
|
|
11
11
|
export {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SearchModal
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-IG7CUREJ.js";
|
|
5
|
+
import "../../chunk-KUV24B5M.js";
|
|
6
6
|
import "../../chunk-YCS7GF6Y.js";
|
|
7
7
|
import "../../chunk-DHET7RCE.js";
|
|
8
8
|
export {
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
} from "../../chunk-XY3XDVMI.js";
|
|
21
21
|
import {
|
|
22
22
|
SearchModal
|
|
23
|
-
} from "../../chunk-
|
|
24
|
-
import "../../chunk-
|
|
23
|
+
} from "../../chunk-IG7CUREJ.js";
|
|
24
|
+
import "../../chunk-KUV24B5M.js";
|
|
25
25
|
import "../../chunk-YCS7GF6Y.js";
|
|
26
26
|
import {
|
|
27
27
|
init_esm_shims
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SourceGrid
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-U36YCEBK.js";
|
|
5
5
|
import "../../chunk-7SOPVGDV.js";
|
|
6
6
|
import "../../chunk-DC5AK3LW.js";
|
|
7
|
-
import "../../chunk-
|
|
8
|
-
import "../../chunk-
|
|
7
|
+
import "../../chunk-IG7CUREJ.js";
|
|
8
|
+
import "../../chunk-KUV24B5M.js";
|
|
9
9
|
import "../../chunk-YCS7GF6Y.js";
|
|
10
10
|
import "../../chunk-DHET7RCE.js";
|
|
11
11
|
export {
|
|
@@ -23,11 +23,11 @@ import {
|
|
|
23
23
|
} from "../../chunk-XY3XDVMI.js";
|
|
24
24
|
import {
|
|
25
25
|
SourceGrid
|
|
26
|
-
} from "../../chunk-
|
|
26
|
+
} from "../../chunk-U36YCEBK.js";
|
|
27
27
|
import "../../chunk-7SOPVGDV.js";
|
|
28
28
|
import "../../chunk-DC5AK3LW.js";
|
|
29
|
-
import "../../chunk-
|
|
30
|
-
import "../../chunk-
|
|
29
|
+
import "../../chunk-IG7CUREJ.js";
|
|
30
|
+
import "../../chunk-KUV24B5M.js";
|
|
31
31
|
import "../../chunk-YCS7GF6Y.js";
|
|
32
32
|
import {
|
|
33
33
|
init_esm_shims
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StackSelection
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-OGJ7DFCL.js";
|
|
5
5
|
import "../../chunk-MZB3GGOH.js";
|
|
6
6
|
import "../../chunk-HTTPKSL6.js";
|
|
7
7
|
import "../../chunk-YPJKOM42.js";
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-OGXSTJP2.js";
|
|
9
|
+
import "../../chunk-WMVGRAFB.js";
|
|
10
10
|
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-OI4WBRC7.js";
|
|
12
12
|
import "../../chunk-YCS7GF6Y.js";
|
|
13
13
|
import "../../chunk-DHET7RCE.js";
|
|
14
14
|
export {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
StepBuild
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-UFUQUFV6.js";
|
|
5
|
+
import "../../chunk-AQQVSNUX.js";
|
|
5
6
|
import "../../chunk-MZB3GGOH.js";
|
|
6
7
|
import "../../chunk-HTTPKSL6.js";
|
|
7
8
|
import "../../chunk-OKILA27U.js";
|
|
8
9
|
import "../../chunk-DC5AK3LW.js";
|
|
9
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-WMVGRAFB.js";
|
|
10
11
|
import "../../chunk-T4EXUIBY.js";
|
|
11
|
-
import "../../chunk-
|
|
12
|
+
import "../../chunk-OI4WBRC7.js";
|
|
12
13
|
import "../../chunk-YCS7GF6Y.js";
|
|
13
14
|
import "../../chunk-DHET7RCE.js";
|
|
14
15
|
export {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
createMockCategory,
|
|
14
14
|
createMockMatrix,
|
|
15
15
|
createMockSkill
|
|
16
|
-
} from "../../chunk-
|
|
16
|
+
} from "../../chunk-YN35L5NE.js";
|
|
17
17
|
import {
|
|
18
18
|
afterEach,
|
|
19
19
|
describe,
|
|
@@ -25,14 +25,15 @@ import {
|
|
|
25
25
|
StepBuild,
|
|
26
26
|
getSkillDisplayLabel,
|
|
27
27
|
validateBuildStep
|
|
28
|
-
} from "../../chunk-
|
|
28
|
+
} from "../../chunk-UFUQUFV6.js";
|
|
29
|
+
import "../../chunk-AQQVSNUX.js";
|
|
29
30
|
import "../../chunk-MZB3GGOH.js";
|
|
30
31
|
import "../../chunk-HTTPKSL6.js";
|
|
31
32
|
import "../../chunk-OKILA27U.js";
|
|
32
33
|
import "../../chunk-DC5AK3LW.js";
|
|
33
|
-
import "../../chunk-
|
|
34
|
+
import "../../chunk-WMVGRAFB.js";
|
|
34
35
|
import "../../chunk-T4EXUIBY.js";
|
|
35
|
-
import "../../chunk-
|
|
36
|
+
import "../../chunk-OI4WBRC7.js";
|
|
36
37
|
import "../../chunk-YCS7GF6Y.js";
|
|
37
38
|
import {
|
|
38
39
|
init_esm_shims
|