@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.
Files changed (67) hide show
  1. package/README.md +39 -3
  2. package/dist/auth/auth.js +15 -2
  3. package/dist/auth/auth.js.map +1 -1
  4. package/dist/clients/claude-code.js +108 -30
  5. package/dist/clients/claude-code.js.map +1 -1
  6. package/dist/clients/codex.js +117 -18
  7. package/dist/clients/codex.js.map +1 -1
  8. package/dist/clients/cursor-guards-rules.js +26 -1
  9. package/dist/clients/cursor-guards-rules.js.map +1 -1
  10. package/dist/clients/cursor.js +24 -14
  11. package/dist/clients/cursor.js.map +1 -1
  12. package/dist/clients/mcp-url.js +42 -0
  13. package/dist/clients/mcp-url.js.map +1 -0
  14. package/dist/clients/unwire.js +57 -0
  15. package/dist/clients/unwire.js.map +1 -0
  16. package/dist/clients/vscode.js +38 -16
  17. package/dist/clients/vscode.js.map +1 -1
  18. package/dist/clients/windsurf.js +32 -14
  19. package/dist/clients/windsurf.js.map +1 -1
  20. package/dist/config.js +7 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/diagnostics.js +4 -2
  23. package/dist/diagnostics.js.map +1 -1
  24. package/dist/doctor.js +15 -3
  25. package/dist/doctor.js.map +1 -1
  26. package/dist/global-cli.js +138 -0
  27. package/dist/global-cli.js.map +1 -0
  28. package/dist/hook-runner.js +196 -85
  29. package/dist/hooks/install.js +3 -1
  30. package/dist/hooks/install.js.map +1 -1
  31. package/dist/hooks/runtime/pre-compact.js +9 -2
  32. package/dist/hooks/runtime/pre-compact.js.map +1 -1
  33. package/dist/hooks/runtime/proposal-mode.js +75 -0
  34. package/dist/hooks/runtime/proposal-mode.js.map +1 -0
  35. package/dist/hooks/runtime/resolve.js +12 -5
  36. package/dist/hooks/runtime/resolve.js.map +1 -1
  37. package/dist/hooks/runtime/session-review.js +40 -20
  38. package/dist/hooks/runtime/session-review.js.map +1 -1
  39. package/dist/hooks/runtime/session-start.js +7 -1
  40. package/dist/hooks/runtime/session-start.js.map +1 -1
  41. package/dist/hooks/runtime/shell-writes.js +3 -2
  42. package/dist/hooks/runtime/shell-writes.js.map +1 -1
  43. package/dist/hooks/runtime/user-prompt-submit.js +12 -2
  44. package/dist/hooks/runtime/user-prompt-submit.js.map +1 -1
  45. package/dist/index.js +12 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/install.js +118 -23
  48. package/dist/install.js.map +1 -1
  49. package/dist/json-file.js +115 -0
  50. package/dist/json-file.js.map +1 -0
  51. package/dist/link.js +5 -2
  52. package/dist/link.js.map +1 -1
  53. package/dist/login.js +12 -4
  54. package/dist/login.js.map +1 -1
  55. package/dist/prompts.js +18 -3
  56. package/dist/prompts.js.map +1 -1
  57. package/dist/refresh-hooks.js +1 -1
  58. package/dist/refresh-hooks.js.map +1 -1
  59. package/dist/self-update.js +5 -0
  60. package/dist/self-update.js.map +1 -1
  61. package/dist/status.js +5 -1
  62. package/dist/status.js.map +1 -1
  63. package/dist/uninstall.js +166 -0
  64. package/dist/uninstall.js.map +1 -0
  65. package/dist/utils.js +1 -20
  66. package/dist/utils.js.map +1 -1
  67. package/package.json +6 -4
package/README.md CHANGED
@@ -29,7 +29,14 @@ The installer is fully interactive, and signs you in **first**:
29
29
  waits while you create or join one (Ctrl-C to skip and finish later).
30
30
  4. **Pick which agents to wire** (auto-detected), confirm. That's it.
31
31
 
32
- Prefer a global install?
32
+ Run through `npx` (or `pnpm dlx` / `yarn dlx`), the installer first installs
33
+ the CLI globally (`npm install -g @cybedefend/vibedefend`), so the
34
+ `vibedefend` command is available afterwards and the hooks auto-update. If that
35
+ global install fails (e.g. a root-owned npm prefix), MCP + hooks are still set
36
+ up and the installer prints the command to run yourself. Pass `--no-global` to
37
+ skip it and only wire MCP + hooks.
38
+
39
+ Or install globally yourself first:
33
40
 
34
41
  ```bash
35
42
  npm install -g @cybedefend/vibedefend && vibedefend install
@@ -70,6 +77,26 @@ pre-commit check that complements (never replaces) a full scan. It rides on the
70
77
  Session Review hook, so it follows the same edits threshold. Decline it at
71
78
  install, or set `"enableDiffScan": false` in `~/.cybedefend/runtime-config.json`.
72
79
 
80
+ **Non-blocking mode (autonomous agents, off by default):** by default the agent
81
+ pauses for you on business-rule proposals: an Accept / Reject picker for the
82
+ pending ones at session start, and a "Propose this rule? Yes / No" at the end of
83
+ a session. An autonomous agent such as Cyrus or a CI runner has nobody in the chat to answer, so turn on non-blocking mode
84
+ at install. The agent then never asks: pending proposals are left for a human to
85
+ accept or reject in the CybeDefend dashboard, and the end-of-session gap
86
+ analysis pushes its (at most one) proposal there directly. The agent never
87
+ accepts or rejects a proposal on its own. You can set it per process with
88
+ `CYBEDEFEND_NON_BLOCKING=1` (or `0` to force the prompts back), which takes
89
+ precedence over the installed setting. For example, set it only in the autonomous
90
+ agent's environment on a machine a human also codes on. You can also set
91
+ `"nonBlockingMode": true` in `~/.cybedefend/runtime-config.json`.
92
+
93
+ **Auto-propose mode** (also asked at install, off by default) is the middle
94
+ ground. The end-of-session gap analysis proposes its rule without asking first,
95
+ but you still accept or reject pending proposals at the next session start.
96
+ It works the same way: `CYBEDEFEND_AUTO_PROPOSE=1` (or `0`) takes precedence
97
+ over `"autoProposeMode"` in `~/.cybedefend/runtime-config.json`. Non-blocking
98
+ mode supersedes it.
99
+
73
100
  Unchecked agents stay untouched. Re-run `vibedefend install` later to
74
101
  toggle any on or off.
75
102
 
@@ -158,11 +185,20 @@ After that, updates are hands-off (or one `vibedefend update`) as above.
158
185
  ## Uninstalling
159
186
 
160
187
  ```bash
161
- vibedefend uninstall
162
- # Then drop the global package if you installed it:
188
+ vibedefend uninstall # asks for confirmation; --yes to skip
189
+ # Then drop the global package (the command prints the exact one for npm / pnpm / yarn):
163
190
  npm uninstall -g @cybedefend/vibedefend
164
191
  ```
165
192
 
193
+ `uninstall` removes, from every supported agent, the VibeDefend hook entries
194
+ and the CybeDefend MCP server registration — hooks and MCP servers that aren't
195
+ ours are left untouched. It also clears VibeDefend's stored credentials and
196
+ deletes `~/.cybedefend/`, keeping only your own `~/.cybedefend/regions.json`.
197
+ Repositories keep their committed `.cybedefend/config.json`. A Windsurf
198
+ `.windsurfrules` block is removed from the current directory only: in any other
199
+ repo you wired for Windsurf, delete it by hand. Codex's `[features] hooks = true`
200
+ flag stays set, since other hooks may rely on it.
201
+
166
202
  ## Sibling: `cybedefend-cli`
167
203
 
168
204
  [`cybedefend-cli`](https://github.com/CybeDefend/cybedefend-cli) is the
package/dist/auth/auth.js CHANGED
@@ -79,9 +79,22 @@ export async function getValidAccessToken(mcpName) {
79
79
  * Synchronous check: does the given MCP name have any stored credentials?
80
80
  * Used by the install chain to skip the login prompt on re-install when
81
81
  * credentials are already present.
82
+ *
83
+ * With `logtoEndpoint`, only a bundle issued by THAT Logto counts. Both
84
+ * production regions register under the same MCP name, so after switching
85
+ * EU → US the stored bundle is still the EU one — it must not pass for a
86
+ * US sign-in.
82
87
  */
83
- export function hasStoredAuth(mcpName) {
84
- return loadAuth(mcpName) !== null;
88
+ export function hasStoredAuth(mcpName, logtoEndpoint) {
89
+ const stored = loadAuth(mcpName);
90
+ if (stored === null)
91
+ return false;
92
+ return logtoEndpoint === undefined || isAuthFrom(stored, logtoEndpoint);
93
+ }
94
+ /** Was this bundle issued by the Logto at `logtoEndpoint`? */
95
+ export function isAuthFrom(stored, logtoEndpoint) {
96
+ const norm = (url) => url.replace(/\/+$/, '');
97
+ return norm(stored.logtoEndpoint) === norm(logtoEndpoint);
85
98
  }
86
99
  // ─── Internal refresh logic ───────────────────────────────────────────────────
87
100
  async function doRefresh(mcpName, stored) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,14 @@
8
8
  * universal bundled runner installed at `~/.cybedefend/hook-runner.js`.
9
9
  * No bash, no jq — runs the same way on Linux / macOS / Windows.
10
10
  */
11
- import { execFileSync } from 'node:child_process';
12
11
  import { existsSync, readFileSync } from 'node:fs';
13
- import { home, log, readJson, run, which, writeJson } from '../utils.js';
12
+ import { join } from 'node:path';
13
+ import { readJson, writeJson } from '../json-file.js';
14
+ import { home, log, run, which } from '../utils.js';
14
15
  import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
15
16
  import { probeBinaryVersion } from './detect.js';
17
+ import { mcpStatus } from './mcp-url.js';
18
+ import { dropFromEventArrays, editJsonFile } from './unwire.js';
16
19
  const CLAUDE_SETTINGS = home('.claude', 'settings.json');
17
20
  function detect() {
18
21
  if (which('claude') === null) {
@@ -99,11 +102,34 @@ function writeSettings(opts) {
99
102
  writeJson(CLAUDE_SETTINGS, settings);
100
103
  log.ok(`Claude Code hooks wired into ${CLAUDE_SETTINGS}`);
101
104
  }
102
- function registerMcp(opts) {
103
- const { region } = opts;
104
- log.step(`Registering MCP "${region.mcpName}" in Claude Code`);
105
- log.hint(`URL: ${region.mcpUrl}`);
106
- const code = run('claude',
105
+ /**
106
+ * Claude Code's user-scope config file, where `claude mcp add --scope user`
107
+ * writes the top-level `mcpServers`. Honours `CLAUDE_CONFIG_DIR` like
108
+ * Claude Code itself.
109
+ */
110
+ function claudeUserConfigPath() {
111
+ const dir = process.env.CLAUDE_CONFIG_DIR;
112
+ return dir ? join(dir, '.claude.json') : home('.claude.json');
113
+ }
114
+ /**
115
+ * The user-scope registration of `name`, read straight from Claude Code's
116
+ * config (`claude mcp get` health-checks the server first, which is slow).
117
+ * `null` when absent or unreadable.
118
+ */
119
+ function readUserScopeMcp(name) {
120
+ try {
121
+ const config = JSON.parse(readFileSync(claudeUserConfigPath(), 'utf8'));
122
+ const entry = config.mcpServers?.[name];
123
+ return entry !== null && typeof entry === 'object' ? entry : null;
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ // `claude` is a `.cmd` shim on Windows — needs a shell to resolve.
130
+ const CLAUDE_SHELL = process.platform === 'win32';
131
+ function addUserScopeMcp(region) {
132
+ return run('claude',
107
133
  // `--scope user` is NOT optional: `claude mcp add` defaults to `local`,
108
134
  // which stores the server under `projects[<cwd>].mcpServers` in
109
135
  // `~/.claude.json` — i.e. only visible from the directory `install` ran
@@ -118,24 +144,61 @@ function registerMcp(opts) {
118
144
  '--transport',
119
145
  'http',
120
146
  region.mcpUrl,
121
- ],
122
- // `claude` is a `.cmd` shim on Windows — needs a shell to resolve.
123
- { shell: process.platform === 'win32' });
147
+ ], { shell: CLAUDE_SHELL });
148
+ }
149
+ function removeUserScopeMcp(name) {
150
+ return run('claude', ['mcp', 'remove', name, '--scope', 'user'], {
151
+ silent: true,
152
+ shell: CLAUDE_SHELL,
153
+ });
154
+ }
155
+ /**
156
+ * Register the region's MCP server at user scope, replacing a registration
157
+ * that points elsewhere.
158
+ *
159
+ * Both production regions use the same `mcpName`, and `claude mcp add`
160
+ * refuses to overwrite an existing server ("already exists", exit 1). So
161
+ * re-installing on US after EU used to fail with a warning and leave Claude
162
+ * Code on `mcp-eu` while the hooks and login moved to US. A stale entry is
163
+ * now removed first; an entry already on the right URL is left untouched so
164
+ * a same-region re-install doesn't churn Claude Code's MCP OAuth session.
165
+ */
166
+ function registerMcp(opts) {
167
+ const { region } = opts;
168
+ log.step(`Registering MCP "${region.mcpName}" in Claude Code`);
169
+ log.hint(`URL: ${region.mcpUrl}`);
170
+ const existing = readUserScopeMcp(region.mcpName);
171
+ if (existing?.type === 'http' && existing.url === region.mcpUrl) {
172
+ log.ok(`MCP "${region.mcpName}" already registered.`);
173
+ return true;
174
+ }
175
+ if (existing) {
176
+ log.hint(`Replacing the previous registration (${typeof existing.url === 'string' ? existing.url : 'no URL'}).`);
177
+ removeUserScopeMcp(region.mcpName);
178
+ }
179
+ let code = addUserScopeMcp(region);
180
+ if (code !== 0 && !existing && removeUserScopeMcp(region.mcpName) === 0) {
181
+ // Registered where `readUserScopeMcp` couldn't see it, so the add failed
182
+ // on "already exists" — the remove just proved it; add again.
183
+ code = addUserScopeMcp(region);
184
+ }
124
185
  if (code === 0) {
125
186
  log.ok(`MCP "${region.mcpName}" registered.`);
187
+ if (existing) {
188
+ log.hint('Restart Claude Code, then authenticate the server with /mcp if it asks.');
189
+ }
126
190
  return true;
127
191
  }
128
- log.warn(`\`claude mcp add\` returned exit ${code}. It may already be registered — run \`claude mcp list\` to verify.`);
192
+ log.warn(`\`claude mcp add\` returned exit ${code}. Run \`claude mcp list\` to check the registration.`);
129
193
  return false;
130
194
  }
131
195
  /**
132
196
  * Pure introspection — never throws. Reports whether our hooks are wired
133
197
  * into `~/.claude/settings.json` and whether the MCP server is registered.
134
198
  *
135
- * `mcpRegistered` shells out to `claude mcp list` (the MCP registry lives
136
- * in Claude Code's internal store, not a file we can read directly). If
137
- * the `claude` binary is absent or the command fails, we degrade to
138
- * `false` rather than throwing.
199
+ * The MCP check reads the user-scope entry `registerMcp` writes, straight
200
+ * from Claude Code's config: `claude mcp list` health-checks every server
201
+ * (seconds each) and only prints names, which are the same for EU and US.
139
202
  */
140
203
  function inspect(region) {
141
204
  let hooksWired = false;
@@ -147,21 +210,35 @@ function inspect(region) {
147
210
  catch {
148
211
  /* missing/unreadable → false */
149
212
  }
150
- let mcpRegistered = false;
151
- try {
152
- const stdout = execFileSync('claude', ['mcp', 'list'], {
153
- encoding: 'utf8',
154
- stdio: ['ignore', 'pipe', 'ignore'],
155
- // `claude` is a `.cmd` shim on Windows — needs a shell to resolve.
156
- shell: process.platform === 'win32',
157
- windowsHide: true,
158
- });
159
- mcpRegistered = stdout.includes(region.mcpName);
160
- }
161
- catch {
162
- /* `claude` binary absent or command failed → false */
163
- }
164
- return { hooksWired, mcpRegistered };
213
+ return {
214
+ hooksWired,
215
+ ...mcpStatus(readUserScopeMcp(region.mcpName)?.url, region),
216
+ };
217
+ }
218
+ /**
219
+ * Drop our entries from every hook event in `~/.claude/settings.json`, then
220
+ * `claude mcp remove <name> --scope user` for each name (the scope
221
+ * `registerMcp` writes to). A non-zero exit means "not registered" (or no
222
+ * `claude` CLI) and is not an error.
223
+ */
224
+ function uninstall(opts) {
225
+ const hooksRemoved = editJsonFile(CLAUDE_SETTINGS, (settings) => {
226
+ if (!settings.hooks || typeof settings.hooks !== 'object')
227
+ return false;
228
+ const hooks = settings.hooks;
229
+ const removed = dropFromEventArrays(hooks, dropOurs);
230
+ if (removed && Object.keys(hooks).length === 0)
231
+ delete settings.hooks;
232
+ return removed;
233
+ });
234
+ const runCommand = opts.runCommand ??
235
+ ((cmd, args) => which(cmd) === null
236
+ ? 1
237
+ : // `claude` is a `.cmd` shim on Windows — needs a shell to resolve.
238
+ // Safe: `mcpNames` are validated against a strict charset upstream.
239
+ run(cmd, args, { silent: true, shell: process.platform === 'win32' }));
240
+ const mcpRemoved = opts.mcpNames.filter((name) => runCommand('claude', ['mcp', 'remove', name, '--scope', 'user']) === 0);
241
+ return { hookFiles: hooksRemoved ? [CLAUDE_SETTINGS] : [], mcpRemoved };
165
242
  }
166
243
  export const claudeCodeAdapter = {
167
244
  id: 'claude-code',
@@ -171,6 +248,7 @@ export const claudeCodeAdapter = {
171
248
  writeSettings,
172
249
  registerMcp,
173
250
  inspect,
251
+ uninstall,
174
252
  };
175
253
  /**
176
254
  * Cross-platform sanity gate (used by the installer banner).
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"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"}
@@ -28,8 +28,11 @@
28
28
  import { execFileSync } from 'node:child_process';
29
29
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
30
30
  import { dirname } from 'node:path';
31
- import { home, log, readJson, writeJson, which } from '../utils.js';
31
+ import { readJson, writeJson } from '../json-file.js';
32
+ import { home, log, which } from '../utils.js';
32
33
  import { hookCommand, textReferencesHookRunner, isVibedefendOwnedHookCommand, } from '../hooks/install.js';
34
+ import { mcpStatus } from './mcp-url.js';
35
+ import { dropFromEventArrays, editJsonFile } from './unwire.js';
33
36
  import { configDirExists, probeBinaryVersion, } from './detect.js';
34
37
  const CODEX_HOOKS = home('.codex', 'hooks.json');
35
38
  const CODEX_CONFIG_TOML = home('.codex', 'config.toml');
@@ -151,6 +154,56 @@ export function ensureCodexFeatureFlag(configPath = CODEX_CONFIG_TOML) {
151
154
  writeFileSync(configPath, content);
152
155
  return true;
153
156
  }
157
+ /**
158
+ * The table a TOML header line opens — `[a.b]` / `[[a.b]]` → `a.b`, trailing
159
+ * comment allowed — or null when the line is no table header (a multi-line
160
+ * array's continuation such as `[1, 2],` is not one). Callers compare the
161
+ * result as a plain string: no regex is ever built from a server name
162
+ * (CWE-1333).
163
+ */
164
+ function tomlTableName(line) {
165
+ const m = /^\[\[?([^[\],]+)\]\]?\s*(?:#.*)?$/.exec(line.trim());
166
+ return m ? m[1].trim() : null;
167
+ }
168
+ /** Offset + length of the `[mcp_servers.<name>]` header line, or null. */
169
+ function findMcpServerHeader(content, mcpName) {
170
+ const table = `mcp_servers.${mcpName}`;
171
+ let offset = 0;
172
+ for (const line of content.split('\n')) {
173
+ if (tomlTableName(line) === table) {
174
+ return { index: offset, length: line.replace(/\r$/, '').length };
175
+ }
176
+ offset += line.length + 1;
177
+ }
178
+ return null;
179
+ }
180
+ /**
181
+ * Bounds of the `[mcp_servers.<name>]` table: the end of its header line and
182
+ * the end of its body (the next `\n[` — start of another table — or end of
183
+ * file). `null` when the table is absent.
184
+ */
185
+ function findMcpServerBlock(content, mcpName) {
186
+ const headerMatch = findMcpServerHeader(content, mcpName);
187
+ if (headerMatch === null)
188
+ return null;
189
+ const headerEnd = headerMatch.index + headerMatch.length;
190
+ const nextHeaderRelative = content.slice(headerEnd).search(/\n\[/);
191
+ const blockEnd = nextHeaderRelative === -1 ? content.length : headerEnd + nextHeaderRelative;
192
+ return { headerEnd, blockEnd };
193
+ }
194
+ /**
195
+ * The `url` of the `[mcp_servers.<name>]` table — a basic (`"…"`) or literal
196
+ * (`'…'`) TOML string — or `undefined` when the table or the key is absent.
197
+ *
198
+ * Exported for tests.
199
+ */
200
+ export function readCodexMcpServerUrl(content, mcpName) {
201
+ const block = findMcpServerBlock(content, mcpName);
202
+ if (block === null)
203
+ return undefined;
204
+ const m = /^url[ \t]*=[ \t]*(?:"([^"]*)"|'([^']*)')/m.exec(content.slice(block.headerEnd, block.blockEnd));
205
+ return m ? (m[1] ?? m[2]) : undefined;
206
+ }
154
207
  /**
155
208
  * Register the CybeDefend MCP server under `[mcp_servers.<name>]` in
156
209
  * `~/.codex/config.toml`. Idempotent — if the same header already exists,
@@ -166,11 +219,10 @@ export function ensureCodexFeatureFlag(configPath = CODEX_CONFIG_TOML) {
166
219
  export function ensureCodexMcpServer(configPath, region) {
167
220
  let content = existsSync(configPath) ? readFileSync(configPath, 'utf8') : '';
168
221
  const headerLine = `[mcp_servers.${region.mcpName}]`;
169
- // Locate the header line at the START of a line (avoids accidental match
170
- // inside a comment or inside another key's value).
171
- const headerSearchRe = new RegExp(`^\\[mcp_servers\\.${region.mcpName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\]\\s*$`, 'm');
172
- const headerMatch = content.match(headerSearchRe);
173
- if (headerMatch === null || headerMatch.index === undefined) {
222
+ // Locate the header as a whole line (avoids accidental match inside a
223
+ // comment or inside another key's value).
224
+ const block = findMcpServerBlock(content, region.mcpName);
225
+ if (block === null) {
174
226
  // Not found — append a fresh block.
175
227
  if (content.length > 0 && !content.endsWith('\n'))
176
228
  content += '\n';
@@ -181,10 +233,7 @@ export function ensureCodexMcpServer(configPath, region) {
181
233
  }
182
234
  // Slice out the existing block: from the header to either the next
183
235
  // `\n[` (start of another table) or end of file.
184
- const headerStart = headerMatch.index;
185
- const headerEnd = headerStart + headerMatch[0].length;
186
- const nextHeaderRelative = content.slice(headerEnd).search(/\n\[/);
187
- const blockEnd = nextHeaderRelative === -1 ? content.length : headerEnd + nextHeaderRelative;
236
+ const { headerEnd, blockEnd } = block;
188
237
  const body = content.slice(headerEnd, blockEnd);
189
238
  // Replace the `url = ...` line if present; append one otherwise.
190
239
  //
@@ -208,6 +257,35 @@ export function ensureCodexMcpServer(configPath, region) {
208
257
  writeFileSync(configPath, newContent);
209
258
  return { added: false, updated: true };
210
259
  }
260
+ /**
261
+ * Inverse of {@link ensureCodexMcpServer}: delete the `[mcp_servers.<name>]`
262
+ * table — and any `[mcp_servers.<name>.<sub>]` table under it, which would
263
+ * otherwise re-create a url-less server entry — from `config.toml`. Other
264
+ * tables and comments are kept byte-for-byte. Returns whether the file changed.
265
+ *
266
+ * Exported for tests.
267
+ */
268
+ export function removeCodexMcpServer(configPath, mcpName) {
269
+ if (!existsSync(configPath))
270
+ return false;
271
+ const content = readFileSync(configPath, 'utf8');
272
+ const table = `mcp_servers.${mcpName}`;
273
+ let skipping = false;
274
+ const kept = [];
275
+ for (const line of content.split('\n')) {
276
+ const name = tomlTableName(line);
277
+ if (name !== null)
278
+ skipping = name === table || name.startsWith(`${table}.`);
279
+ if (!skipping)
280
+ kept.push(line);
281
+ }
282
+ if (kept.length === content.split('\n').length)
283
+ return false;
284
+ // The block we append is preceded by a blank line — don't leave a run of them.
285
+ const next = kept.join('\n').replace(/(\r?\n){3,}/g, '\n\n').replace(/\s+$/, '');
286
+ writeFileSync(configPath, next.length > 0 ? next + '\n' : '');
287
+ return true;
288
+ }
211
289
  function registerMcp(opts) {
212
290
  log.step(`Registering MCP "${opts.region.mcpName}" in Codex`);
213
291
  log.hint(`URL: ${opts.region.mcpUrl}`);
@@ -353,10 +431,11 @@ function writeSettings(opts) {
353
431
  }
354
432
  /**
355
433
  * Pure introspection — never throws. `hooksWired` from `~/.codex/hooks.json`,
356
- * `mcpRegistered` by testing for the `[mcp_servers.<mcpName>]` table header
357
- * in `~/.codex/config.toml` (the same anchor `ensureCodexMcpServer` writes).
358
- * The header is matched at line-start so it doesn't false-positive inside a
359
- * comment or another key's value.
434
+ * `mcpRegistered` from the `url` of the `[mcp_servers.<mcpName>]` table in
435
+ * `~/.codex/config.toml` (the same anchor `ensureCodexMcpServer` writes) —
436
+ * it must point at this region, not just exist. The header is matched at
437
+ * line-start so it doesn't false-positive inside a comment or another key's
438
+ * value.
360
439
  */
361
440
  function inspect(region) {
362
441
  let hooksWired = false;
@@ -368,16 +447,35 @@ function inspect(region) {
368
447
  catch {
369
448
  /* missing/unreadable → false */
370
449
  }
371
- let mcpRegistered = false;
450
+ let url;
372
451
  try {
373
452
  if (existsSync(CODEX_CONFIG_TOML)) {
374
- mcpRegistered = new RegExp(`^\\[mcp_servers\\.${region.mcpName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\]\\s*$`, 'm').test(readFileSync(CODEX_CONFIG_TOML, 'utf8'));
453
+ url = readCodexMcpServerUrl(readFileSync(CODEX_CONFIG_TOML, 'utf8'), region.mcpName);
375
454
  }
376
455
  }
377
456
  catch {
378
- /* → false */
457
+ /* → not registered */
379
458
  }
380
- return { hooksWired, mcpRegistered };
459
+ return { hooksWired, ...mcpStatus(url, region) };
460
+ }
461
+ /**
462
+ * Drop our entries from `~/.codex/hooks.json` (both nested and legacy flat
463
+ * shapes, via `dropOurs`) and our `[mcp_servers.*]` tables from
464
+ * `config.toml`. `[features].hooks = true` stays: it is a global switch other
465
+ * hooks may rely on, and it is inert with no hooks configured.
466
+ */
467
+ function uninstall(opts) {
468
+ const hooksRemoved = editJsonFile(CODEX_HOOKS, (file) => {
469
+ if (!file.hooks || typeof file.hooks !== 'object')
470
+ return false;
471
+ const hooks = file.hooks;
472
+ const removed = dropFromEventArrays(hooks, dropOurs);
473
+ if (removed && Object.keys(hooks).length === 0)
474
+ delete file.hooks;
475
+ return removed;
476
+ });
477
+ const mcpRemoved = opts.mcpNames.filter((name) => removeCodexMcpServer(CODEX_CONFIG_TOML, name));
478
+ return { hookFiles: hooksRemoved ? [CODEX_HOOKS] : [], mcpRemoved };
381
479
  }
382
480
  export const codexAdapter = {
383
481
  id: 'codex',
@@ -388,5 +486,6 @@ export const codexAdapter = {
388
486
  registerMcp,
389
487
  postRegister,
390
488
  inspect,
489
+ uninstall,
391
490
  };
392
491
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/clients/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/clients/codex.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@
16
16
  * project ID at injection time so the model can reference the correct
17
17
  * project in MCP tool calls.
18
18
  */
19
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
20
20
  import { dirname } from 'node:path';
21
21
  /** Sentinel string that identifies our block — used for idempotency checks. */
22
22
  const GUARD_SENTINEL = '## VibeDefend Action Guards';
@@ -91,4 +91,29 @@ export function appendGuardSnippetIdempotent(filePath, snippet, projectId) {
91
91
  // Append (existing content + snippet)
92
92
  writeFileSync(filePath, existing + finalSnippet, 'utf8');
93
93
  }
94
+ /**
95
+ * Inverse of {@link appendGuardSnippetIdempotent}: cut our block — from the
96
+ * sentinel heading through its closing `Project ID for cybe_guards_check
97
+ * calls:` line, plus the blank lines we prepended — out of a rules file.
98
+ * Deletes the file when nothing else is left in it. A block the user edited
99
+ * past recognition (closing line gone) is left alone. Returns whether the file
100
+ * changed.
101
+ */
102
+ export function removeGuardSnippet(filePath) {
103
+ if (!existsSync(filePath))
104
+ return false;
105
+ const existing = readFileSync(filePath, 'utf8');
106
+ const sentinel = GUARD_SENTINEL.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
107
+ // `(?:\r?\n){0,2}` = exactly the two newlines the snippet starts with, so
108
+ // the user's own trailing newline survives.
109
+ const block = new RegExp(`(?:\\r?\\n){0,2}${sentinel}\\r?\\n[\\s\\S]*?Project ID for cybe_guards_check calls:[^\\n]*\\n?`);
110
+ const next = existing.replace(block, '');
111
+ if (next === existing)
112
+ return false;
113
+ if (next.trim().length === 0)
114
+ rmSync(filePath, { force: true });
115
+ else
116
+ writeFileSync(filePath, next, 'utf8');
117
+ return true;
118
+ }
94
119
  //# sourceMappingURL=cursor-guards-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor-guards-rules.js","sourceRoot":"","sources":["../../src/clients/cursor-guards-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,+EAA+E;AAC/E,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;EAEnC,cAAc;;;;;;;;;;;;CAYf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;EAErC,cAAc;;;;;;;;;;;;CAYf,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAgB,EAChB,OAAe,EACf,SAAiB;IAEjB,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChC,CAAC,CAAC,EAAE,CAAC;IAEP,+CAA+C;IAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO;IAE9C,wCAAwC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAClC,0BAA0B,EAC1B,SAAS,CACV,CAAC;IAEF,iCAAiC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"cursor-guards-rules.js","sourceRoot":"","sources":["../../src/clients/cursor-guards-rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,+EAA+E;AAC/E,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;EAEnC,cAAc;;;;;;;;;;;;CAYf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;EAErC,cAAc;;;;;;;;;;;;CAYf,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAgB,EAChB,OAAe,EACf,SAAiB;IAEjB,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;QACnC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;QAChC,CAAC,CAAC,EAAE,CAAC;IAEP,+CAA+C;IAC/C,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO;IAE9C,wCAAwC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAClC,0BAA0B,EAC1B,SAAS,CACV,CAAC;IAEF,iCAAiC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACvE,0EAA0E;IAC1E,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAI,MAAM,CACtB,mBAAmB,QAAQ,qEAAqE,CACjG,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;QAC3D,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC"}