@cybedefend/vibedefend 1.4.3 → 1.4.5
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/README.md +39 -3
- package/dist/auth/auth-store.js +5 -6
- package/dist/auth/auth-store.js.map +1 -1
- package/dist/clients/claude-code.js +27 -0
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/codex.js +80 -8
- package/dist/clients/codex.js.map +1 -1
- package/dist/clients/cursor-guards-rules.js +26 -1
- package/dist/clients/cursor-guards-rules.js.map +1 -1
- package/dist/clients/cursor.js +16 -0
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/unwire.js +57 -0
- package/dist/clients/unwire.js.map +1 -0
- package/dist/clients/vscode.js +29 -1
- package/dist/clients/vscode.js.map +1 -1
- package/dist/clients/windsurf.js +24 -1
- package/dist/clients/windsurf.js.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/diagnostics.js +3 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/doctor.js +3 -1
- package/dist/doctor.js.map +1 -1
- package/dist/global-cli.js +138 -0
- package/dist/global-cli.js.map +1 -0
- package/dist/hook-runner.js +323 -151
- package/dist/hooks/install.js +1 -0
- package/dist/hooks/install.js.map +1 -1
- package/dist/hooks/runtime/fetch-rules.js +3 -1
- package/dist/hooks/runtime/fetch-rules.js.map +1 -1
- package/dist/hooks/runtime/hook-refresh-trigger.js +76 -0
- package/dist/hooks/runtime/hook-refresh-trigger.js.map +1 -0
- package/dist/hooks/runtime/pre-compact.js +9 -2
- package/dist/hooks/runtime/pre-compact.js.map +1 -1
- package/dist/hooks/runtime/proposal-mode.js +75 -0
- package/dist/hooks/runtime/proposal-mode.js.map +1 -0
- package/dist/hooks/runtime/resolve.js +89 -64
- package/dist/hooks/runtime/resolve.js.map +1 -1
- package/dist/hooks/runtime/session-review.js +40 -20
- package/dist/hooks/runtime/session-review.js.map +1 -1
- package/dist/hooks/runtime/session-start.js +19 -7
- package/dist/hooks/runtime/session-start.js.map +1 -1
- package/dist/hooks/runtime/shell-writes.js +3 -2
- package/dist/hooks/runtime/shell-writes.js.map +1 -1
- package/dist/hooks/runtime/user-prompt-submit.js +15 -3
- package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/install.js +23 -1
- package/dist/install.js.map +1 -1
- package/dist/prompts.js +18 -3
- package/dist/prompts.js.map +1 -1
- package/dist/refresh-hooks.js +74 -0
- package/dist/refresh-hooks.js.map +1 -0
- package/dist/self-update.js +5 -0
- package/dist/self-update.js.map +1 -1
- package/dist/uninstall.js +166 -0
- package/dist/uninstall.js.map +1 -0
- package/dist/update.js +4 -0
- package/dist/update.js.map +1 -1
- package/package.json +3 -3
package/dist/prompts.js
CHANGED
|
@@ -37,6 +37,11 @@ export async function askRegion() {
|
|
|
37
37
|
* - auto-update ON → hooks self-refresh in the background so users
|
|
38
38
|
* don't have to re-run install; opt out here if
|
|
39
39
|
* you pin versions or run in a locked-down env.
|
|
40
|
+
* - non-blocking OFF → the agent pauses for Accept/Reject on proposals.
|
|
41
|
+
* Turn it on for autonomous agents (Cyrus, CI…)
|
|
42
|
+
* that have no human in the chat: proposals are
|
|
43
|
+
* then reviewed in the dashboard instead. When ON,
|
|
44
|
+
* the auto-propose question is skipped (moot).
|
|
40
45
|
* - auto-propose OFF → policy mutations require a chat-side "yes" by
|
|
41
46
|
* default. Power users can flip this on if they
|
|
42
47
|
* trust the agent to draft + push proposals
|
|
@@ -76,14 +81,24 @@ export async function askHookConfig() {
|
|
|
76
81
|
message: `Enable automatic background updates (keep hooks current without re-running install)? ${kleur.dim('(recommended)')}`,
|
|
77
82
|
default: HOOK_DEFAULTS.autoUpdate,
|
|
78
83
|
});
|
|
79
|
-
const
|
|
80
|
-
message: `Enable
|
|
81
|
-
default: HOOK_DEFAULTS.
|
|
84
|
+
const nonBlockingMode = await confirm({
|
|
85
|
+
message: `Enable non-blocking mode (for autonomous agents like Cyrus — never pause for an Accept/Reject on business-rule proposals)? ${kleur.dim('(default off — proposals are then reviewed in the CybeDefend dashboard instead of the chat)')}`,
|
|
86
|
+
default: HOOK_DEFAULTS.nonBlockingMode,
|
|
82
87
|
});
|
|
88
|
+
// Non-blocking already pushes proposals without asking, so the auto-propose
|
|
89
|
+
// question would be moot — skip it and keep the default.
|
|
90
|
+
let autoProposeMode = HOOK_DEFAULTS.autoProposeMode;
|
|
91
|
+
if (!nonBlockingMode) {
|
|
92
|
+
autoProposeMode = await confirm({
|
|
93
|
+
message: `Enable auto-propose mode (agent proposes rules WITHOUT asking you first)? ${kleur.dim('(NOT recommended; default off — proposals normally require an explicit chat-side "yes")')}`,
|
|
94
|
+
default: HOOK_DEFAULTS.autoProposeMode,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
83
97
|
return {
|
|
84
98
|
enableSessionReview,
|
|
85
99
|
reviewThreshold,
|
|
86
100
|
autoProposeMode,
|
|
101
|
+
nonBlockingMode,
|
|
87
102
|
autoUpdate,
|
|
88
103
|
enableDiffScan,
|
|
89
104
|
};
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAqB,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE;QAChD,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,OAAO,MAAM,MAAM,CAAe;QAChC,OAAO,EAAE,gBAAgB;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-render our hook entries after an upgrade, without any prompt.
|
|
3
|
+
*
|
|
4
|
+
* The background auto-update (and `update --self`, and a manual `npm i -g`)
|
|
5
|
+
* only replaces the package: the agents' settings keep the hook entries the
|
|
6
|
+
* PREVIOUS version rendered. When a release changes the wiring itself — 1.4.3
|
|
7
|
+
* put fetch-rules on `Bash` so shell writes fetch the rules too (BACK-173) —
|
|
8
|
+
* every upgraded install silently kept the old wiring.
|
|
9
|
+
*
|
|
10
|
+
* `vibedefend update` fixes it but is interactive (it runs the installer).
|
|
11
|
+
* This re-wires only the clients whose hooks are ALREADY wired (a client the
|
|
12
|
+
* user left out stays out), with the region and hook settings already on
|
|
13
|
+
* disk, then stamps `installedVersion`. It never touches MCP registration and
|
|
14
|
+
* never logs in. Target of `vibedefend update --refresh-hooks`, which the
|
|
15
|
+
* SessionStart hook spawns when it sees the drift (hook-refresh-trigger.ts).
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { ALL_ADAPTERS } from './clients/registry.js';
|
|
20
|
+
import { resolveHookConfigFrom } from './doctor.js';
|
|
21
|
+
import { VIBEDEFEND_DIR } from './hooks/install.js';
|
|
22
|
+
import { writeJson } from './utils.js';
|
|
23
|
+
import { pkg } from './version.js';
|
|
24
|
+
export function refreshWiredHooks(deps = {}) {
|
|
25
|
+
const configPath = deps.configPath ?? join(VIBEDEFEND_DIR, 'runtime-config.json');
|
|
26
|
+
const adapters = deps.adapters ?? ALL_ADAPTERS;
|
|
27
|
+
const currentVersion = deps.currentVersion ?? pkg.version;
|
|
28
|
+
const result = { refreshed: [], failed: [], stamped: false };
|
|
29
|
+
// Raw JSON, not the typed loader: the stamp must keep every field the file
|
|
30
|
+
// carries (the selected organization, fields from newer versions).
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
if (!existsSync(configPath))
|
|
34
|
+
return result;
|
|
35
|
+
raw = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
const config = raw;
|
|
41
|
+
if (!config.region)
|
|
42
|
+
return result;
|
|
43
|
+
const region = config.region;
|
|
44
|
+
const hooks = resolveHookConfigFrom(config.hooks);
|
|
45
|
+
for (const adapter of adapters) {
|
|
46
|
+
try {
|
|
47
|
+
if (!adapter.inspect(region).hooksWired)
|
|
48
|
+
continue;
|
|
49
|
+
adapter.writeSettings({
|
|
50
|
+
hookDir: '',
|
|
51
|
+
enableSessionReview: hooks.enableSessionReview,
|
|
52
|
+
region,
|
|
53
|
+
hooks,
|
|
54
|
+
});
|
|
55
|
+
result.refreshed.push(adapter.id);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
result.failed.push(adapter.id);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Leave the stamp stale when a client failed: `status` keeps reporting the
|
|
62
|
+
// drift and `vibedefend update` remains the way out.
|
|
63
|
+
if (result.failed.length === 0) {
|
|
64
|
+
try {
|
|
65
|
+
writeJson(configPath, { ...raw, installedVersion: currentVersion });
|
|
66
|
+
result.stamped = true;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
/* stamp is best-effort; the wiring itself is already refreshed */
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=refresh-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-hooks.js","sourceRoot":"","sources":["../src/refresh-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAkBnC,MAAM,UAAU,iBAAiB,CAAC,OAA8B,EAAE;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,OAAO,CAAC;IAC1D,MAAM,MAAM,GAAkB,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE5E,2EAA2E;IAC3E,mEAAmE;IACnE,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,MAAM,CAAC;QAC3C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAA4B,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,GAA+B,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAsB,CAAC;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAElD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU;gBAAE,SAAS;YAClD,OAAO,CAAC,aAAa,CAAC;gBACpB,OAAO,EAAE,EAAE;gBACX,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;gBAC9C,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,SAAS,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/self-update.js
CHANGED
|
@@ -52,6 +52,11 @@ export function detectInstallMode(scriptPath) {
|
|
|
52
52
|
// npx cache (ephemeral; npm `~/.npm/_npx/<hash>` or pnpm `.../pnpm/_npx`).
|
|
53
53
|
if (/[\\/]_npx[\\/]/i.test(scriptPath))
|
|
54
54
|
return 'npx-cache';
|
|
55
|
+
// `pnpm dlx` (`<cache>/pnpm/dlx/<hash>/…`, older pnpm `<tmp>/dlx-<pid>/…`) and
|
|
56
|
+
// `yarn dlx` (`<tmp>/xfs-<hash>/dlx-<pid>/…`) are just as ephemeral — checked
|
|
57
|
+
// before the generic `node_modules` match that would call them project-local.
|
|
58
|
+
if (/[\\/]dlx(?:-\d+)?[\\/]/i.test(scriptPath))
|
|
59
|
+
return 'npx-cache';
|
|
55
60
|
// pnpm global: Unix `~/.local/share/pnpm` / `~/Library/pnpm`;
|
|
56
61
|
// Windows `%LOCALAPPDATA%\pnpm\global`.
|
|
57
62
|
if (/[\\/]pnpm(?:[\\/]global|[\\/]nodejs|[\\/]node_modules)/i.test(scriptPath)) {
|
package/dist/self-update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../src/self-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAUjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAA6B,IAAI,GAAG,CAAC;IAC5D,YAAY;IACZ,aAAa;IACb,aAAa;CACd,CAAC,CAAC;AAcH;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,yEAAyE;IACzE,wEAAwE;IACxE,oEAAoE;IAEpE,2EAA2E;IAC3E,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"self-update.js","sourceRoot":"","sources":["../src/self-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vibedefend uninstall` — remove what `vibedefend install` put on this
|
|
3
|
+
* machine:
|
|
4
|
+
*
|
|
5
|
+
* 1. every agent's hook entries + MCP server registration (each adapter's
|
|
6
|
+
* `uninstall()`; third-party hooks and servers are never touched);
|
|
7
|
+
* 2. VibeDefend's own stored credentials (keychain / file fallback);
|
|
8
|
+
* 3. `~/.cybedefend/` — runner, runtime config, caches, logs.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately left in place:
|
|
11
|
+
* - `~/.cybedefend/regions.json` — written by the user, not by the installer;
|
|
12
|
+
* - repositories' committed `.cybedefend/config.json` links;
|
|
13
|
+
* - the CLI package itself: a running binary should not delete itself, so we
|
|
14
|
+
* print the matching `npm uninstall -g` (pnpm / yarn) command instead.
|
|
15
|
+
*
|
|
16
|
+
* Order matters: the MCP names come from `~/.cybedefend/runtime-config.json`
|
|
17
|
+
* and `regions.json`, so they are resolved before the directory goes.
|
|
18
|
+
*/
|
|
19
|
+
import { confirm as confirmImpl } from '@inquirer/prompts';
|
|
20
|
+
import { existsSync, readdirSync, readFileSync, rmSync } from 'node:fs';
|
|
21
|
+
import { join } from 'node:path';
|
|
22
|
+
import kleur from 'kleur';
|
|
23
|
+
import { clearAuth } from './auth/auth-store.js';
|
|
24
|
+
import { ALL_ADAPTERS } from './clients/registry.js';
|
|
25
|
+
import { REGIONS } from './config.js';
|
|
26
|
+
import { detectInstallMode, GLOBAL_MODES, resolveScriptPath, } from './self-update.js';
|
|
27
|
+
import { home, log } from './utils.js';
|
|
28
|
+
import { pkg } from './version.js';
|
|
29
|
+
/** Files under `~/.cybedefend/` the user wrote themselves — never deleted. */
|
|
30
|
+
const USER_OWNED_FILES = new Set(['regions.json']);
|
|
31
|
+
/**
|
|
32
|
+
* MCP server names end up in client config keys AND in a CLI argv
|
|
33
|
+
* (`claude mcp remove <name>`, through a shell on Windows) — so anything
|
|
34
|
+
* outside this charset is dropped, not escaped.
|
|
35
|
+
*/
|
|
36
|
+
const MCP_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
37
|
+
/**
|
|
38
|
+
* MCP server names VibeDefend may have registered, from USER-trusted sources
|
|
39
|
+
* only: the built-in regions, the region recorded at install time
|
|
40
|
+
* (`runtime-config.json`) and the user-global `regions.json`. The cwd
|
|
41
|
+
* `vibedefend.regions.json` (which `loadCustomRegions` also reads) is
|
|
42
|
+
* deliberately excluded — a cloned repository could otherwise name ANY of the
|
|
43
|
+
* user's MCP servers for removal. See `hooks/runtime/trusted-api-base.ts`.
|
|
44
|
+
*/
|
|
45
|
+
export function trustedMcpNames(cybeDir = home('.cybedefend')) {
|
|
46
|
+
const names = REGIONS.map((r) => r.mcpName);
|
|
47
|
+
const runtime = readJsonQuiet(join(cybeDir, 'runtime-config.json'));
|
|
48
|
+
if (runtime && typeof runtime === 'object') {
|
|
49
|
+
names.push(runtime.region?.mcpName);
|
|
50
|
+
}
|
|
51
|
+
const userRegions = readJsonQuiet(join(cybeDir, 'regions.json'));
|
|
52
|
+
if (Array.isArray(userRegions)) {
|
|
53
|
+
for (const r of userRegions) {
|
|
54
|
+
if (r && typeof r === 'object')
|
|
55
|
+
names.push(r.mcpName);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const valid = names.filter((n) => typeof n === 'string' && MCP_NAME_RE.test(n));
|
|
59
|
+
return [...new Set(valid)];
|
|
60
|
+
}
|
|
61
|
+
export async function runUninstall(opts = {}, deps = {}) {
|
|
62
|
+
const adapters = deps.adapters ?? ALL_ADAPTERS;
|
|
63
|
+
const confirm = deps.confirm ?? confirmImpl;
|
|
64
|
+
const cybeDir = deps.cybeDir ?? home('.cybedefend');
|
|
65
|
+
const clearAuthFn = deps.clearAuth ?? clearAuth;
|
|
66
|
+
log.step('Uninstall VibeDefend');
|
|
67
|
+
log.hint('Removes, from every supported agent: the VibeDefend hooks and the CybeDefend MCP server.');
|
|
68
|
+
log.hint(`Also signs you out and deletes ${cybeDir} (your regions.json is kept).`);
|
|
69
|
+
if (!opts.yes) {
|
|
70
|
+
const ok = await confirm({ message: 'Remove VibeDefend from this machine?', default: false });
|
|
71
|
+
if (!ok) {
|
|
72
|
+
log.info('Nothing removed.');
|
|
73
|
+
return { cancelled: true, clients: [], removedPaths: [] };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Resolve the names BEFORE ~/.cybedefend (which records them) is deleted.
|
|
77
|
+
const mcpNames = trustedMcpNames(cybeDir);
|
|
78
|
+
const clients = [];
|
|
79
|
+
for (const adapter of adapters) {
|
|
80
|
+
try {
|
|
81
|
+
const result = adapter.uninstall({ mcpNames });
|
|
82
|
+
clients.push({ label: adapter.label, result });
|
|
83
|
+
reportClient(adapter.label, result);
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
87
|
+
clients.push({ label: adapter.label, error });
|
|
88
|
+
log.warn(`${adapter.label}: could not clean up — ${error}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (const name of mcpNames) {
|
|
92
|
+
try {
|
|
93
|
+
clearAuthFn(name);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Best-effort: a stale keychain entry is not worth failing the uninstall.
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
log.ok('Signed out (VibeDefend credentials cleared).');
|
|
100
|
+
const removedPaths = removeCybeDir(cybeDir);
|
|
101
|
+
if (removedPaths.length > 0) {
|
|
102
|
+
log.ok(`Removed ${cybeDir}`);
|
|
103
|
+
if (existsSync(join(cybeDir, 'regions.json'))) {
|
|
104
|
+
log.hint(`Kept your custom regions: ${join(cybeDir, 'regions.json')}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
printFooter(deps.installMode ?? detectInstallMode(resolveScriptPath()));
|
|
108
|
+
return { cancelled: false, clients, removedPaths };
|
|
109
|
+
}
|
|
110
|
+
function reportClient(label, result) {
|
|
111
|
+
if (result.hookFiles.length === 0 && result.mcpRemoved.length === 0) {
|
|
112
|
+
log.hint(`${label}: nothing to remove.`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const parts = [];
|
|
116
|
+
if (result.hookFiles.length > 0)
|
|
117
|
+
parts.push(`hooks removed from ${result.hookFiles.join(', ')}`);
|
|
118
|
+
if (result.mcpRemoved.length > 0)
|
|
119
|
+
parts.push(`MCP ${result.mcpRemoved.join(', ')} unregistered`);
|
|
120
|
+
log.ok(`${label}: ${parts.join('; ')}.`);
|
|
121
|
+
}
|
|
122
|
+
/** Delete everything under `dir` but the user-owned files; drop `dir` once empty. */
|
|
123
|
+
function removeCybeDir(dir) {
|
|
124
|
+
if (!existsSync(dir))
|
|
125
|
+
return [];
|
|
126
|
+
const removed = [];
|
|
127
|
+
for (const entry of readdirSync(dir)) {
|
|
128
|
+
if (USER_OWNED_FILES.has(entry))
|
|
129
|
+
continue;
|
|
130
|
+
const path = join(dir, entry);
|
|
131
|
+
rmSync(path, { recursive: true, force: true });
|
|
132
|
+
removed.push(path);
|
|
133
|
+
}
|
|
134
|
+
if (readdirSync(dir).length === 0) {
|
|
135
|
+
rmSync(dir, { recursive: true, force: true });
|
|
136
|
+
removed.push(dir);
|
|
137
|
+
}
|
|
138
|
+
return removed;
|
|
139
|
+
}
|
|
140
|
+
function printFooter(mode) {
|
|
141
|
+
console.log();
|
|
142
|
+
log.ok('VibeDefend uninstalled.');
|
|
143
|
+
const remove = mode === 'pnpm-global'
|
|
144
|
+
? 'pnpm remove -g'
|
|
145
|
+
: mode === 'yarn-global'
|
|
146
|
+
? 'yarn global remove'
|
|
147
|
+
: 'npm uninstall -g';
|
|
148
|
+
if (GLOBAL_MODES.has(mode)) {
|
|
149
|
+
log.info(`Last step — remove the CLI itself: ${kleur.bold(`${remove} ${pkg.name}`)}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
log.hint(`If the CLI is installed globally (\`npx … install\` does that), remove it with: ${remove} ${pkg.name}`);
|
|
153
|
+
}
|
|
154
|
+
log.hint('Repositories keep their committed `.cybedefend/config.json`, and any other repo ' +
|
|
155
|
+
'wired for Windsurf keeps its `.windsurfrules` block — delete those by hand if unwanted.');
|
|
156
|
+
console.log();
|
|
157
|
+
}
|
|
158
|
+
function readJsonQuiet(path) {
|
|
159
|
+
try {
|
|
160
|
+
return existsSync(path) ? JSON.parse(readFileSync(path, 'utf8')) : null;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":"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"}
|
package/dist/update.js
CHANGED
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
import { isNewer } from './hooks/runtime/semver.js';
|
|
20
20
|
import { GLOBAL_MODES } from './self-update.js';
|
|
21
21
|
export async function runUpdate(opts, deps) {
|
|
22
|
+
// Background re-wire after an upgrade: no version check, no installer.
|
|
23
|
+
if (opts.refreshHooks) {
|
|
24
|
+
return deps.refreshHooks();
|
|
25
|
+
}
|
|
22
26
|
// Re-exec target after a self-upgrade: render hooks with the NEW binary.
|
|
23
27
|
if (opts.postUpgrade) {
|
|
24
28
|
await deps.renderHooks();
|
package/dist/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAoB,MAAM,kBAAkB,CAAC;AA0ClE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAmB,EACnB,IAAmB;IAEnB,uEAAuE;IACvE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAED,yEAAyE;IACzE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4CAA4C;IAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,yEAAyE;IACzE,iEAAiE;IACjE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAEpE,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,2EAA2E,CAC5E,CAAC;QACJ,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,4BAA4B,IAAI,CAAC,cAAc,MAAM,MAAM,cAAc,CAC1E,CAAC;YACF,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACV,4DAA4D;gBAC5D,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,8EAA8E,CAC/E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,kCAAkC,MAAM,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,uBAAuB,IAAI,CAAC,WAAW,uCAAuC;YAC5E,8CAA8C;YAC9C,kDAAkD,CACrD,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,yCAAyC;IACzC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACzB,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cybedefend/vibedefend",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.5",
|
|
4
4
|
"description": "VibeDefend — one-shot installer for CybeDefend's MCP server and Claude Code / Cursor / Codex / Windsurf hooks (for AI coding agents).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"commander": "^12.1.0",
|
|
31
31
|
"kleur": "^4.1.5",
|
|
32
32
|
"re2-wasm": "^1.0.2",
|
|
33
|
-
"shell-quote": "^1.
|
|
33
|
+
"shell-quote": "^1.12.0",
|
|
34
34
|
"update-notifier": "^7.3.1",
|
|
35
35
|
"zod": "^3.25.76"
|
|
36
36
|
},
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@types/shell-quote": "^1.7.5",
|
|
40
40
|
"@types/update-notifier": "^6.0.8",
|
|
41
41
|
"esbuild": "^0.28.2",
|
|
42
|
-
"tsx": "^4.23.
|
|
42
|
+
"tsx": "^4.23.15",
|
|
43
43
|
"typescript": "^5.9.3",
|
|
44
44
|
"vitest": "^4.1.11"
|
|
45
45
|
},
|