@springbrand/cli 0.1.8 → 0.1.9

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/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@springbrand/cli",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "SpringBrand CLI — connect MCP hosts to the SpringBrand Gateway",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,3 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerUninstall(program: Command): void;
3
- //# sourceMappingURL=uninstall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6CxD"}
@@ -1,71 +0,0 @@
1
- import { runConnectAll } from '../lib/connect-all.js';
2
- import { errLine, outLine } from '../lib/output.js';
3
- import { applySkillRemoval, clearSkillLock, hasLocalCredential, hasSkill, hasSkillLockEntry, removeLocalState, uninstallPlan } from '../lib/uninstall.js';
4
- function printPlan() {
5
- const plan = uninstallPlan();
6
- outLine('SpringBrand uninstall plan (dry-run):');
7
- outLine(' MCP registrations: sp connect --all --uninstall');
8
- for (const dir of plan.skillDirs)
9
- if (hasSkill(dir))
10
- outLine(` skill: move ${dir} to a recoverable uninstall backup`);
11
- if (hasSkillLockEntry())
12
- outLine(` skill lock: remove SpringBrand entry from ${plan.skillLock}`);
13
- if (hasLocalCredential())
14
- outLine(` local credential: remove API key from ${plan.config} (value not shown)`);
15
- if (process.env['SPRINGBRAND_API_KEY'])
16
- outLine(' current process: SPRINGBRAND_API_KEY is set (a child cannot unset its parent shell)');
17
- outLine(` shell export: remove SpringBrand export from ${plan.profile}`);
18
- outLine(' CLI package: keep installed (pass --remove-cli to uninstall @springbrand/cli)');
19
- outLine('Nothing changed. Re-run with --apply to execute this plan.');
20
- }
21
- export function registerUninstall(program) {
22
- program
23
- .command('uninstall')
24
- .description('Remove SpringBrand MCP, skills and local credentials')
25
- .option('--apply', 'Apply the uninstall; without this flag only print the plan')
26
- .option('--remove-cli', 'Also run npm uninstall --global @springbrand/cli after cleanup')
27
- .option('--verbose', 'Print client removal details')
28
- .action(async (options) => {
29
- if (!options.apply) {
30
- printPlan();
31
- return;
32
- }
33
- const exitCode = await runConnectAll({
34
- dryRun: false,
35
- uninstall: true,
36
- noLaunch: true,
37
- pick: false,
38
- verbose: options.verbose ?? false,
39
- mcpUrl: '',
40
- });
41
- if (exitCode !== 0)
42
- throw new Error(`MCP cleanup finished with exit code ${exitCode}`);
43
- const plan = uninstallPlan();
44
- const moved = applySkillRemoval(plan.skillDirs);
45
- clearSkillLock();
46
- const local = removeLocalState();
47
- outLine(`Moved ${moved.moved.length} SpringBrand skill director${moved.moved.length === 1 ? 'y' : 'ies'} to a recoverable backup.`);
48
- if (moved.backupRoot)
49
- outLine(`Skill backup: ${moved.backupRoot}`);
50
- outLine(local.configRemoved ? 'Removed the locally saved API key.' : 'No locally saved API key found.');
51
- if (local.profile.status === 'cleared')
52
- outLine(`Removed the API-key export from ${local.profile.path}.`);
53
- else if (local.profile.status === 'unsupported')
54
- errLine('Windows user-environment cleanup is not automatic; remove SPRINGBRAND_API_KEY from the user environment.');
55
- else
56
- outLine('No SpringBrand API-key export found in the shell profile.');
57
- if (process.env['SPRINGBRAND_API_KEY'])
58
- errLine('SPRINGBRAND_API_KEY remains in the parent shell; open a new terminal before reinstalling.');
59
- if (options.removeCli) {
60
- outLine('Uninstalling @springbrand/cli globally...');
61
- const { spawnSync } = await import('node:child_process');
62
- const result = spawnSync('npm', ['uninstall', '--global', '@springbrand/cli'], { stdio: 'inherit' });
63
- if (result.error || result.status !== 0)
64
- throw result.error ?? new Error(`npm uninstall exited with ${result.status}`);
65
- }
66
- else {
67
- outLine('CLI package kept. To remove it, re-run: sp uninstall --apply --remove-cli');
68
- }
69
- });
70
- }
71
- //# sourceMappingURL=uninstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { clearApiKeyFromEnvironment } from './auth.js';
2
- export type UninstallPlan = {
3
- skillDirs: string[];
4
- skillLock: string;
5
- config: string;
6
- profile: string;
7
- cliPackage: string;
8
- };
9
- export declare function uninstallPlan(): UninstallPlan;
10
- /** Move exact SpringBrand skill directories aside so an uninstall remains recoverable. */
11
- export declare function applySkillRemoval(skillDirs: string[], root?: string): {
12
- moved: string[];
13
- backupRoot?: string;
14
- };
15
- export declare function removeLocalState(): {
16
- configRemoved: boolean;
17
- profile: ReturnType<typeof clearApiKeyFromEnvironment>;
18
- };
19
- export declare function clearSkillLock(): void;
20
- export declare function hasLocalCredential(): boolean;
21
- export declare function hasSkill(dir: string): boolean;
22
- export declare function hasSkillLockEntry(): boolean;
23
- //# sourceMappingURL=uninstall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/lib/uninstall.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAA+C,MAAM,WAAW,CAAC;AAOpG,MAAM,MAAM,aAAa,GAAG;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,aAAa,IAAI,aAAa,CAQ7C;AAMD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,SAAe,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAepH;AAED,wBAAgB,gBAAgB,IAAI;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAA;CAAE,CAKrH;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAQ5C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO7C;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C"}
@@ -1,72 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as os from 'node:os';
3
- import * as path from 'node:path';
4
- import { clearApiKeyFromEnvironment, clearConfig, configFile, resolveProfilePath } from './auth.js';
5
- import { clearSkillLockEntry } from './skill-vendor.js';
6
- import { skillLockPath, skillTargetDir } from './skill-paths.js';
7
- const SKILL_AGENTS = ['claude-code', 'codex', 'command-code', 'cursor', 'hermes-agent', 'opencode', 'pi'];
8
- export function uninstallPlan() {
9
- return {
10
- skillDirs: [...new Set(SKILL_AGENTS.map(skillTargetDir))],
11
- skillLock: skillLockPath(),
12
- config: configFile(),
13
- profile: resolveProfilePath(path.basename(process.env['SHELL'] ?? ''), process.platform),
14
- cliPackage: '@springbrand/cli',
15
- };
16
- }
17
- function backupRoot() {
18
- return path.join(os.homedir(), '.springbrand', 'uninstall-backups', String(Date.now()));
19
- }
20
- /** Move exact SpringBrand skill directories aside so an uninstall remains recoverable. */
21
- export function applySkillRemoval(skillDirs, root = backupRoot()) {
22
- const existing = skillDirs.filter((dir) => fs.existsSync(dir));
23
- if (existing.length === 0)
24
- return { moved: [] };
25
- fs.mkdirSync(root, { recursive: true, mode: 0o700 });
26
- const moved = [];
27
- for (const dir of existing) {
28
- const relative = path.relative(os.homedir(), dir);
29
- const backupName = relative.split(path.sep).map((part) => part === '..' ? 'up' : part).join('-').replace(/[^A-Za-z0-9._-]/g, '_');
30
- const destination = path.join(root, backupName);
31
- fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 });
32
- fs.renameSync(dir, destination);
33
- moved.push(dir);
34
- }
35
- return { moved, backupRoot: root };
36
- }
37
- export function removeLocalState() {
38
- return {
39
- configRemoved: clearConfig(),
40
- profile: clearApiKeyFromEnvironment(),
41
- };
42
- }
43
- export function clearSkillLock() {
44
- clearSkillLockEntry({ verbose: true });
45
- }
46
- export function hasLocalCredential() {
47
- try {
48
- const parsed = JSON.parse(fs.readFileSync(configFile(), 'utf8'));
49
- return typeof parsed.api_key === 'string' && parsed.api_key.length > 0;
50
- }
51
- catch {
52
- return false;
53
- }
54
- }
55
- export function hasSkill(dir) {
56
- try {
57
- return fs.lstatSync(dir).isDirectory();
58
- }
59
- catch {
60
- return false;
61
- }
62
- }
63
- export function hasSkillLockEntry() {
64
- try {
65
- const parsed = JSON.parse(fs.readFileSync(skillLockPath(), 'utf8'));
66
- return Boolean(parsed.skills && Object.hasOwn(parsed.skills, 'use-springbrand'));
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- //# sourceMappingURL=uninstall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/lib/uninstall.ts"],"names":[],"mappings":"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"}