@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/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
|
-
|
|
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
|
|
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
|
-
|
|
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) {
|
package/dist/auth/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,GAEV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,iFAAiF;AAEjF;;;;;;;GAOG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,GAAG,GAAG,oDAAoD;QACpE,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,iFAAiF;AAEjF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,kBAAkB,CAAC,gDAAgD,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3B,wBAAwB;QACxB,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,2EAA2E;IAC3E,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAC1B,uFAAuF,CACxF,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACxD,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,eAAe,CAAC;AAC/B,CAAC;AAED
|
|
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 {
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
123
|
-
|
|
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}.
|
|
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
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/clients/claude-code.ts"],"names":[],"mappings":"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"}
|
package/dist/clients/codex.js
CHANGED
|
@@ -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 {
|
|
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
|
|
170
|
-
//
|
|
171
|
-
const
|
|
172
|
-
|
|
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
|
|
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`
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
* comment or another key's
|
|
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
|
|
450
|
+
let url;
|
|
372
451
|
try {
|
|
373
452
|
if (existsSync(CODEX_CONFIG_TOML)) {
|
|
374
|
-
|
|
453
|
+
url = readCodexMcpServerUrl(readFileSync(CODEX_CONFIG_TOML, 'utf8'), region.mcpName);
|
|
375
454
|
}
|
|
376
455
|
}
|
|
377
456
|
catch {
|
|
378
|
-
/* →
|
|
457
|
+
/* → not registered */
|
|
379
458
|
}
|
|
380
|
-
return { hooksWired,
|
|
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;
|
|
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"}
|