@cybedefend/vibedefend 1.4.4 → 1.4.6
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.js +15 -2
- package/dist/auth/auth.js.map +1 -1
- package/dist/clients/claude-code.js +108 -30
- package/dist/clients/claude-code.js.map +1 -1
- package/dist/clients/codex.js +117 -18
- 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 +24 -14
- package/dist/clients/cursor.js.map +1 -1
- package/dist/clients/mcp-url.js +42 -0
- package/dist/clients/mcp-url.js.map +1 -0
- package/dist/clients/unwire.js +57 -0
- package/dist/clients/unwire.js.map +1 -0
- package/dist/clients/vscode.js +38 -16
- package/dist/clients/vscode.js.map +1 -1
- package/dist/clients/windsurf.js +32 -14
- 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 +4 -2
- package/dist/diagnostics.js.map +1 -1
- package/dist/doctor.js +15 -3
- 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 +196 -85
- package/dist/hooks/install.js +3 -1
- package/dist/hooks/install.js.map +1 -1
- 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 +12 -5
- 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 +7 -1
- 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 +12 -2
- package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/install.js +118 -23
- package/dist/install.js.map +1 -1
- package/dist/json-file.js +115 -0
- package/dist/json-file.js.map +1 -0
- package/dist/link.js +5 -2
- package/dist/link.js.map +1 -1
- package/dist/login.js +12 -4
- package/dist/login.js.map +1 -1
- package/dist/prompts.js +18 -3
- package/dist/prompts.js.map +1 -1
- package/dist/refresh-hooks.js +1 -1
- package/dist/refresh-hooks.js.map +1 -1
- package/dist/self-update.js +5 -0
- package/dist/self-update.js.map +1 -1
- package/dist/status.js +5 -1
- package/dist/status.js.map +1 -1
- package/dist/uninstall.js +166 -0
- package/dist/uninstall.js.map +1 -0
- package/dist/utils.js +1 -20
- package/dist/utils.js.map +1 -1
- package/package.json +6 -4
package/dist/clients/cursor.js
CHANGED
|
@@ -25,8 +25,11 @@
|
|
|
25
25
|
* Claude Code and Codex.
|
|
26
26
|
*/
|
|
27
27
|
import { existsSync, readFileSync } from 'node:fs';
|
|
28
|
-
import {
|
|
28
|
+
import { readJson, writeJson } from '../json-file.js';
|
|
29
|
+
import { home, log } from '../utils.js';
|
|
29
30
|
import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
|
|
31
|
+
import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
|
|
32
|
+
import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
|
|
30
33
|
import { configDirExists, probeBinaryVersion, versionAtLeast, } from './detect.js';
|
|
31
34
|
const CURSOR_HOOKS = home('.cursor', 'hooks.json');
|
|
32
35
|
const CURSOR_MCP = home('.cursor', 'mcp.json');
|
|
@@ -135,9 +138,9 @@ function registerMcp(opts) {
|
|
|
135
138
|
return true;
|
|
136
139
|
}
|
|
137
140
|
/**
|
|
138
|
-
* Pure introspection — never throws. `hooksWired` from `~/.cursor/hooks.json
|
|
139
|
-
* `mcpRegistered` from
|
|
140
|
-
*
|
|
141
|
+
* Pure introspection — never throws. `hooksWired` from `~/.cursor/hooks.json`
|
|
142
|
+
* (raw-text marker check), `mcpRegistered` from the `url` of our entry in
|
|
143
|
+
* `~/.cursor/mcp.json` — it must point at this region, not just exist.
|
|
141
144
|
*/
|
|
142
145
|
function inspect(region) {
|
|
143
146
|
let hooksWired = false;
|
|
@@ -149,16 +152,22 @@ function inspect(region) {
|
|
|
149
152
|
catch {
|
|
150
153
|
/* missing/unreadable → false */
|
|
151
154
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
155
|
+
const entry = readJsonServerEntry(() => readFileSync(CURSOR_MCP, 'utf8'), 'mcpServers', region.mcpName);
|
|
156
|
+
return { hooksWired, ...mcpStatus(entry?.url, region) };
|
|
157
|
+
}
|
|
158
|
+
/** Drop our entries from `~/.cursor/hooks.json` and our servers from `~/.cursor/mcp.json`. */
|
|
159
|
+
function uninstall(opts) {
|
|
160
|
+
const hooksRemoved = editJsonFile(CURSOR_HOOKS, (file) => {
|
|
161
|
+
if (!file.hooks || typeof file.hooks !== 'object')
|
|
162
|
+
return false;
|
|
163
|
+
return dropFromEventArrays(file.hooks, dropOurs);
|
|
164
|
+
});
|
|
165
|
+
let mcpRemoved = [];
|
|
166
|
+
editJsonFile(CURSOR_MCP, (file) => {
|
|
167
|
+
mcpRemoved = deleteKeys(file.mcpServers, opts.mcpNames);
|
|
168
|
+
return mcpRemoved.length > 0;
|
|
169
|
+
});
|
|
170
|
+
return { hookFiles: hooksRemoved ? [CURSOR_HOOKS] : [], mcpRemoved };
|
|
162
171
|
}
|
|
163
172
|
export const cursorAdapter = {
|
|
164
173
|
id: 'cursor',
|
|
@@ -168,5 +177,6 @@ export const cursorAdapter = {
|
|
|
168
177
|
writeSettings,
|
|
169
178
|
registerMcp,
|
|
170
179
|
inspect,
|
|
180
|
+
uninstall,
|
|
171
181
|
};
|
|
172
182
|
//# sourceMappingURL=cursor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/clients/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { parseJsonc } from '../json-file.js';
|
|
2
|
+
/** Same MCP endpoint? A trailing slash doesn't change it. */
|
|
3
|
+
export function sameMcpUrl(a, b) {
|
|
4
|
+
const norm = (url) => url.trim().replace(/\/+$/, '');
|
|
5
|
+
return norm(a) === norm(b);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The MCP half of an `InspectResult`, from the `url` field of the entry
|
|
9
|
+
* registered under `region.mcpName` (`undefined` when there is no entry).
|
|
10
|
+
* A non-string URL counts as no URL.
|
|
11
|
+
*/
|
|
12
|
+
export function mcpStatus(registeredUrl, region) {
|
|
13
|
+
const mcpUrl = typeof registeredUrl === 'string' && registeredUrl.trim() !== ''
|
|
14
|
+
? registeredUrl
|
|
15
|
+
: null;
|
|
16
|
+
return {
|
|
17
|
+
mcpRegistered: mcpUrl !== null && sameMcpUrl(mcpUrl, region.mcpUrl),
|
|
18
|
+
mcpUrl,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The entry registered under `name` in a JSON config's server map
|
|
23
|
+
* (`mcpServers` for Cursor / Windsurf, `servers` for VS Code), or `null`.
|
|
24
|
+
* Read as JSONC, like the clients do. Never throws: a missing / malformed
|
|
25
|
+
* file or map is `null`.
|
|
26
|
+
*/
|
|
27
|
+
export function readJsonServerEntry(read, mapKey, name) {
|
|
28
|
+
try {
|
|
29
|
+
const config = parseJsonc(read(), 'config');
|
|
30
|
+
const servers = config?.[mapKey];
|
|
31
|
+
if (servers === null || typeof servers !== 'object')
|
|
32
|
+
return null;
|
|
33
|
+
const entry = servers[name];
|
|
34
|
+
return entry !== null && typeof entry === 'object'
|
|
35
|
+
? entry
|
|
36
|
+
: null;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=mcp-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-url.js","sourceRoot":"","sources":["../../src/clients/mcp-url.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,aAAsB,EACtB,MAAoB;IAEpB,MAAM,MAAM,GACV,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE;QAC9D,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,IAAI,CAAC;IACX,OAAO;QACL,aAAa,EAAE,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACnE,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAkB,EAClB,MAAc,EACd,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAmC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,KAAK,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;YAChD,CAAC,CAAE,KAAiC;YACpC,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for the adapters' `uninstall()` — the inverse of
|
|
3
|
+
* `writeSettings` / `registerMcp`. Each adapter keeps its own `dropOurs`
|
|
4
|
+
* (entry shapes differ per client); these only walk the containers and make
|
|
5
|
+
* sure a config file is rewritten only when something was actually removed.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { readJson, writeJson } from '../json-file.js';
|
|
9
|
+
/**
|
|
10
|
+
* Apply `drop` to every array under `container` (an object keyed by event
|
|
11
|
+
* name), then delete the arrays left empty — including the empty ones the
|
|
12
|
+
* installer itself created with `??= []`. Non-array keys are left alone.
|
|
13
|
+
* Returns true when `drop` removed at least one entry.
|
|
14
|
+
*/
|
|
15
|
+
export function dropFromEventArrays(container, drop) {
|
|
16
|
+
let removed = false;
|
|
17
|
+
for (const [event, entries] of Object.entries(container)) {
|
|
18
|
+
if (!Array.isArray(entries))
|
|
19
|
+
continue;
|
|
20
|
+
const kept = drop(entries);
|
|
21
|
+
if (kept.length !== entries.length)
|
|
22
|
+
removed = true;
|
|
23
|
+
container[event] = kept;
|
|
24
|
+
}
|
|
25
|
+
if (removed) {
|
|
26
|
+
for (const [event, entries] of Object.entries(container)) {
|
|
27
|
+
if (Array.isArray(entries) && entries.length === 0)
|
|
28
|
+
delete container[event];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return removed;
|
|
32
|
+
}
|
|
33
|
+
/** Delete each of `names` from `obj`; returns the names that were present. */
|
|
34
|
+
export function deleteKeys(obj, names) {
|
|
35
|
+
if (!obj || typeof obj !== 'object')
|
|
36
|
+
return [];
|
|
37
|
+
const record = obj;
|
|
38
|
+
const present = names.filter((n) => Object.prototype.hasOwnProperty.call(record, n));
|
|
39
|
+
for (const n of present)
|
|
40
|
+
delete record[n];
|
|
41
|
+
return present;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Read the JSON file at `path`, let `mutate` edit it in place, and write it
|
|
45
|
+
* back only when `mutate` reports a change. A missing file is a no-op.
|
|
46
|
+
* Returns whether the file was rewritten.
|
|
47
|
+
*/
|
|
48
|
+
export function editJsonFile(path, mutate) {
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return false;
|
|
51
|
+
const data = readJson(path, {});
|
|
52
|
+
if (!data || typeof data !== 'object' || !mutate(data))
|
|
53
|
+
return false;
|
|
54
|
+
writeJson(path, data);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=unwire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unwire.js","sourceRoot":"","sources":["../../src/clients/unwire.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAkC,EAClC,IAA2B;IAE3B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAc,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;YAAE,OAAO,GAAG,IAAI,CAAC;QACnD,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,KAAwB;IAC/D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,MAA4B;IAE5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAI,IAAI,EAAE,EAAO,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/clients/vscode.js
CHANGED
|
@@ -17,11 +17,14 @@
|
|
|
17
17
|
*
|
|
18
18
|
* Min version: 1.110.0 (February 2026 — first release with hook support).
|
|
19
19
|
*/
|
|
20
|
-
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
|
|
21
21
|
import { dirname, join } from 'node:path';
|
|
22
22
|
import { platform } from 'node:os';
|
|
23
|
-
import {
|
|
23
|
+
import { readJson, writeJson } from '../json-file.js';
|
|
24
|
+
import { home, log } from '../utils.js';
|
|
24
25
|
import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
|
|
26
|
+
import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
|
|
27
|
+
import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
|
|
25
28
|
import { probeBinaryVersion, versionAtLeast } from './detect.js';
|
|
26
29
|
const COPILOT_HOOKS = home('.copilot', 'hooks', 'cybedefend.json');
|
|
27
30
|
const MIN_VERSION = '1.110.0';
|
|
@@ -149,9 +152,10 @@ function registerMcp(opts) {
|
|
|
149
152
|
}
|
|
150
153
|
/**
|
|
151
154
|
* Pure introspection — never throws. `hooksWired` from
|
|
152
|
-
* `~/.copilot/hooks/cybedefend.json
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
+
* `~/.copilot/hooks/cybedefend.json` (raw-text marker check),
|
|
156
|
+
* `mcpRegistered` from the `url` of our entry in the per-OS user-profile
|
|
157
|
+
* `mcp.json` (same path `registerMcp` writes to) — it must point at this
|
|
158
|
+
* region, not just exist.
|
|
155
159
|
*/
|
|
156
160
|
function inspect(region) {
|
|
157
161
|
let hooksWired = false;
|
|
@@ -163,17 +167,34 @@ function inspect(region) {
|
|
|
163
167
|
catch {
|
|
164
168
|
/* missing/unreadable → false */
|
|
165
169
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
170
|
+
const entry = readJsonServerEntry(() => readFileSync(vscodeUserMcpPath(), 'utf8'), 'servers', region.mcpName);
|
|
171
|
+
return { hooksWired, ...mcpStatus(entry?.url, region) };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Drop our entries from `~/.copilot/hooks/cybedefend.json` — a file we own,
|
|
175
|
+
* deleted outright once nothing else is left in it — and our servers from the
|
|
176
|
+
* user-profile `mcp.json`.
|
|
177
|
+
*/
|
|
178
|
+
function uninstall(opts) {
|
|
179
|
+
let leftEmpty = false;
|
|
180
|
+
const hooksRemoved = editJsonFile(COPILOT_HOOKS, (file) => {
|
|
181
|
+
if (!file.hooks || typeof file.hooks !== 'object')
|
|
182
|
+
return false;
|
|
183
|
+
const hooks = file.hooks;
|
|
184
|
+
const removed = dropFromEventArrays(hooks, dropOurs);
|
|
185
|
+
if (removed && Object.keys(hooks).length === 0)
|
|
186
|
+
delete file.hooks;
|
|
187
|
+
leftEmpty = Object.keys(file).length === 0;
|
|
188
|
+
return removed;
|
|
189
|
+
});
|
|
190
|
+
if (hooksRemoved && leftEmpty)
|
|
191
|
+
rmSync(COPILOT_HOOKS, { force: true });
|
|
192
|
+
let mcpRemoved = [];
|
|
193
|
+
editJsonFile(vscodeUserMcpPath(), (file) => {
|
|
194
|
+
mcpRemoved = deleteKeys(file.servers, opts.mcpNames);
|
|
195
|
+
return mcpRemoved.length > 0;
|
|
196
|
+
});
|
|
197
|
+
return { hookFiles: hooksRemoved ? [COPILOT_HOOKS] : [], mcpRemoved };
|
|
177
198
|
}
|
|
178
199
|
export const vscodeAdapter = {
|
|
179
200
|
id: 'vscode',
|
|
@@ -183,5 +204,6 @@ export const vscodeAdapter = {
|
|
|
183
204
|
writeSettings,
|
|
184
205
|
registerMcp,
|
|
185
206
|
inspect,
|
|
207
|
+
uninstall,
|
|
186
208
|
};
|
|
187
209
|
//# sourceMappingURL=vscode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/clients/vscode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/clients/vscode.ts"],"names":[],"mappings":"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"}
|
package/dist/clients/windsurf.js
CHANGED
|
@@ -27,9 +27,12 @@
|
|
|
27
27
|
*/
|
|
28
28
|
import { existsSync, readFileSync } from 'node:fs';
|
|
29
29
|
import { join } from 'node:path';
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
30
|
+
import { readJson, writeJson } from '../json-file.js';
|
|
31
|
+
import { home, log } from '../utils.js';
|
|
32
|
+
import { WINDSURF_GUARDS_SNIPPET, appendGuardSnippetIdempotent, removeGuardSnippet, } from './cursor-guards-rules.js';
|
|
32
33
|
import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
|
|
34
|
+
import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
|
|
35
|
+
import { deleteKeys, dropFromEventArrays, editJsonFile } from './unwire.js';
|
|
33
36
|
import { configDirExists, probeBinaryVersion, } from './detect.js';
|
|
34
37
|
const WINDSURF_HOOKS = home('.codeium', 'windsurf', 'hooks.json');
|
|
35
38
|
const WINDSURF_MCP = home('.codeium', 'windsurf', 'mcp_config.json');
|
|
@@ -114,9 +117,10 @@ function registerMcp(opts) {
|
|
|
114
117
|
}
|
|
115
118
|
/**
|
|
116
119
|
* Pure introspection — never throws. `hooksWired` from
|
|
117
|
-
* `~/.codeium/windsurf/hooks.json
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
+
* `~/.codeium/windsurf/hooks.json` (raw-text marker check),
|
|
121
|
+
* `mcpRegistered` from the `serverUrl` of our entry in
|
|
122
|
+
* `~/.codeium/windsurf/mcp_config.json` — it must point at this region,
|
|
123
|
+
* not just exist.
|
|
120
124
|
*/
|
|
121
125
|
function inspect(region) {
|
|
122
126
|
let hooksWired = false;
|
|
@@ -128,16 +132,29 @@ function inspect(region) {
|
|
|
128
132
|
catch {
|
|
129
133
|
/* missing/unreadable → false */
|
|
130
134
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
135
|
+
const entry = readJsonServerEntry(() => readFileSync(WINDSURF_MCP, 'utf8'), 'mcpServers', region.mcpName);
|
|
136
|
+
return { hooksWired, ...mcpStatus(entry?.serverUrl, region) };
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Drop our entries from `~/.codeium/windsurf/hooks.json` (event arrays sit at
|
|
140
|
+
* the top level) and our servers from `mcp_config.json`. The `.windsurfrules`
|
|
141
|
+
* snippet is per-repo — written to the cwd at install time — so only the
|
|
142
|
+
* current directory's copy can be cleaned here.
|
|
143
|
+
*/
|
|
144
|
+
function uninstall(opts) {
|
|
145
|
+
const hookFiles = [];
|
|
146
|
+
if (editJsonFile(WINDSURF_HOOKS, (file) => dropFromEventArrays(file, dropOurs))) {
|
|
147
|
+
hookFiles.push(WINDSURF_HOOKS);
|
|
139
148
|
}
|
|
140
|
-
|
|
149
|
+
const rulesPath = join(opts.cwd ?? process.cwd(), '.windsurfrules');
|
|
150
|
+
if (removeGuardSnippet(rulesPath))
|
|
151
|
+
hookFiles.push(rulesPath);
|
|
152
|
+
let mcpRemoved = [];
|
|
153
|
+
editJsonFile(WINDSURF_MCP, (file) => {
|
|
154
|
+
mcpRemoved = deleteKeys(file.mcpServers, opts.mcpNames);
|
|
155
|
+
return mcpRemoved.length > 0;
|
|
156
|
+
});
|
|
157
|
+
return { hookFiles, mcpRemoved };
|
|
141
158
|
}
|
|
142
159
|
export const windsurfAdapter = {
|
|
143
160
|
id: 'windsurf',
|
|
@@ -147,5 +164,6 @@ export const windsurfAdapter = {
|
|
|
147
164
|
writeSettings,
|
|
148
165
|
registerMcp,
|
|
149
166
|
inspect,
|
|
167
|
+
uninstall,
|
|
150
168
|
};
|
|
151
169
|
//# sourceMappingURL=windsurf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/clients/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/clients/windsurf.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -31,11 +31,18 @@ export const REGIONS = [
|
|
|
31
31
|
* low threshold surfaces genuine gaps without spamming proposals. Raise it if
|
|
32
32
|
* a team finds the nudge too noisy. `autoProposeMode` stays OFF because policy
|
|
33
33
|
* mutations need an explicit user "yes" in the chat by default.
|
|
34
|
+
* `nonBlockingMode` stays OFF too: it is meant for autonomous agents (Cyrus,
|
|
35
|
+
* CI runners…) that have no human in the chat to answer an Accept/Reject.
|
|
34
36
|
*/
|
|
35
37
|
export const HOOK_DEFAULTS = {
|
|
36
38
|
enableSessionReview: true,
|
|
37
39
|
reviewThreshold: 1,
|
|
38
40
|
autoProposeMode: false,
|
|
41
|
+
// Non-blocking mode: the hooks never ask the agent to pause for a chat-side
|
|
42
|
+
// Accept/Reject on business-rule proposals. Pending proposals are left for a
|
|
43
|
+
// human to review in the dashboard, and the gap analysis pushes its proposal
|
|
44
|
+
// directly. Overridable per process with CYBEDEFEND_NON_BLOCKING=1|0.
|
|
45
|
+
nonBlockingMode: false,
|
|
39
46
|
autoUpdate: true,
|
|
40
47
|
// Pre-commit diff scan ON by default: the Stop hook asks the agent to scan
|
|
41
48
|
// the files it changed (cybe_scan_diff) before the user commits. Opt-out at
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;QAC5E,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;CACO,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,OAAO,GAA4B;IAC9C;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,kFAAkF;QACpF,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;IACD;QACE,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;QAC5E,MAAM,EAAE,mCAAmC;QAC3C,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,2BAA2B;KAC1C;CACO,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,KAAK;IACtB,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,sEAAsE;IACtE,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,IAAI;IAChB,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,cAAc,EAAE,IAAI;CACZ,CAAC"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -54,22 +54,24 @@ export async function gatherInstallState(opts = {}) {
|
|
|
54
54
|
return false;
|
|
55
55
|
}
|
|
56
56
|
})();
|
|
57
|
+
const absent = { hooksWired: false, mcpRegistered: false, mcpUrl: null };
|
|
57
58
|
const ins = region
|
|
58
59
|
? (() => {
|
|
59
60
|
try {
|
|
60
61
|
return a.inspect(region);
|
|
61
62
|
}
|
|
62
63
|
catch {
|
|
63
|
-
return
|
|
64
|
+
return absent;
|
|
64
65
|
}
|
|
65
66
|
})()
|
|
66
|
-
:
|
|
67
|
+
: absent;
|
|
67
68
|
return {
|
|
68
69
|
id: a.id,
|
|
69
70
|
label: a.label,
|
|
70
71
|
detected,
|
|
71
72
|
hooksWired: ins.hooksWired,
|
|
72
73
|
mcpRegistered: ins.mcpRegistered,
|
|
74
|
+
mcpUrl: ins.mcpUrl,
|
|
73
75
|
};
|
|
74
76
|
});
|
|
75
77
|
// `resolveProjectId` never throws — it swallows malformed config JSON and
|
package/dist/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAkB,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.js
CHANGED
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
* derives repairs, prints them, confirms, and applies the fixes.
|
|
11
11
|
*/
|
|
12
12
|
import kleur from 'kleur';
|
|
13
|
+
import { sameMcpUrl } from './clients/mcp-url.js';
|
|
13
14
|
import { adapterFor } from './clients/registry.js';
|
|
14
15
|
import { gatherInstallState } from './diagnostics.js';
|
|
15
16
|
import { installHookRuntime } from './hooks/install.js';
|
|
16
17
|
import { loadRuntimeConfig } from './hooks/runtime/config.js';
|
|
17
|
-
import { HOOK_DEFAULTS } from './config.js';
|
|
18
|
+
import { HOOK_DEFAULTS, REGIONS } from './config.js';
|
|
18
19
|
import { log } from './utils.js';
|
|
19
20
|
import { pkg } from './version.js';
|
|
20
21
|
/**
|
|
@@ -34,7 +35,8 @@ function resolveHookConfig() {
|
|
|
34
35
|
* when no config exists), return a complete `HookConfig`. `enableDiffScan` is
|
|
35
36
|
* defaulted from `HOOK_DEFAULTS` when absent so the default-on rollout reaches
|
|
36
37
|
* legacy configs, while an explicit `false` is preserved (opt-out survives a
|
|
37
|
-
* doctor repair).
|
|
38
|
+
* doctor repair). `nonBlockingMode` is backfilled the same way (absent → OFF,
|
|
39
|
+
* an explicit `true` survives). Exported for unit testing.
|
|
38
40
|
*/
|
|
39
41
|
export function resolveHookConfigFrom(hooks) {
|
|
40
42
|
if (!hooks)
|
|
@@ -42,8 +44,14 @@ export function resolveHookConfigFrom(hooks) {
|
|
|
42
44
|
return {
|
|
43
45
|
...hooks,
|
|
44
46
|
enableDiffScan: hooks.enableDiffScan ?? HOOK_DEFAULTS.enableDiffScan,
|
|
47
|
+
nonBlockingMode: hooks.nonBlockingMode ?? HOOK_DEFAULTS.nonBlockingMode,
|
|
45
48
|
};
|
|
46
49
|
}
|
|
50
|
+
/** A built-in region's label + URL for its MCP URL, else the URL alone. */
|
|
51
|
+
function describeMcpUrl(url) {
|
|
52
|
+
const known = REGIONS.find((r) => sameMcpUrl(r.mcpUrl, url));
|
|
53
|
+
return known ? `${known.label}, ${url}` : url;
|
|
54
|
+
}
|
|
47
55
|
/** Pure: derive the repair list from a gathered state. */
|
|
48
56
|
export function deriveRepairs(state) {
|
|
49
57
|
const repairs = [];
|
|
@@ -98,9 +106,13 @@ export function deriveRepairs(state) {
|
|
|
98
106
|
});
|
|
99
107
|
}
|
|
100
108
|
if (c.detected && !c.mcpRegistered) {
|
|
109
|
+
// An entry under our name with a URL, yet not registered: it points at
|
|
110
|
+
// another region (EU and US share the name) — `registerMcp` re-points it.
|
|
101
111
|
repairs.push({
|
|
102
112
|
id: `mcp-${c.id}`,
|
|
103
|
-
description:
|
|
113
|
+
description: c.mcpUrl !== null
|
|
114
|
+
? `${c.label}'s MCP server points at another region (${describeMcpUrl(c.mcpUrl)}), not ${region.label} — re-point it.`
|
|
115
|
+
: `${c.label} is installed but the MCP server is not registered — register it.`,
|
|
104
116
|
fix: () => {
|
|
105
117
|
const adapter = adapterFor(c.id);
|
|
106
118
|
adapter.registerMcp?.({ region });
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|