@cybedefend/vibedefend 1.6.0 → 1.8.0
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 +24 -13
- package/dist/clients/antigravity.js +327 -0
- package/dist/clients/antigravity.js.map +1 -0
- package/dist/clients/registry.js +2 -0
- package/dist/clients/registry.js.map +1 -1
- package/dist/commands/mcp/proxy.js +67 -11
- package/dist/commands/mcp/proxy.js.map +1 -1
- package/dist/hook-runner.js +902 -227
- package/dist/hooks/install.js +1 -1
- package/dist/hooks/install.js.map +1 -1
- package/dist/hooks/runtime/antigravity-session.js +400 -0
- package/dist/hooks/runtime/antigravity-session.js.map +1 -0
- package/dist/hooks/runtime/emit.js +206 -0
- package/dist/hooks/runtime/emit.js.map +1 -1
- package/dist/hooks/runtime/exit-deadlock-guard.js +46 -0
- package/dist/hooks/runtime/exit-deadlock-guard.js.map +1 -0
- package/dist/hooks/runtime/fetch-rules.js +39 -3
- package/dist/hooks/runtime/fetch-rules.js.map +1 -1
- package/dist/hooks/runtime/pre-invocation.js +45 -0
- package/dist/hooks/runtime/pre-invocation.js.map +1 -0
- package/dist/hooks/runtime/runner-args.js +12 -0
- package/dist/hooks/runtime/runner-args.js.map +1 -0
- package/dist/hooks/runtime/session-activation.js +10 -4
- package/dist/hooks/runtime/session-activation.js.map +1 -1
- package/dist/hooks/runtime/session-review.js +42 -0
- package/dist/hooks/runtime/session-review.js.map +1 -1
- package/dist/hooks/runtime/session-start.js +21 -1
- package/dist/hooks/runtime/session-start.js.map +1 -1
- package/dist/hooks/runtime/sniff.js +325 -70
- package/dist/hooks/runtime/sniff.js.map +1 -1
- package/dist/hooks/runtime/work-dir.js +3 -0
- package/dist/hooks/runtime/work-dir.js.map +1 -1
- package/dist/hooks/shim.js +102 -5
- package/dist/hooks/shim.js.map +1 -1
- package/dist/json-file.js +6 -3
- package/dist/json-file.js.map +1 -1
- package/dist/mcp/proxy/audit.js.map +1 -1
- package/dist/mcp/proxy/inject.js +20 -5
- package/dist/mcp/proxy/inject.js.map +1 -1
- package/dist/mcp/proxy/intercept.js +26 -0
- package/dist/mcp/proxy/intercept.js.map +1 -1
- package/dist/mcp/proxy/paths.js +4 -0
- package/dist/mcp/proxy/paths.js.map +1 -1
- package/dist/mcp/proxy/proxy.js +12 -2
- package/dist/mcp/proxy/proxy.js.map +1 -1
- package/dist/mcp/proxy/serverCheckTimer.js +75 -0
- package/dist/mcp/proxy/serverCheckTimer.js.map +1 -0
- package/dist/mcp/proxy/sessionLifecycle.js +29 -0
- package/dist/mcp/proxy/sessionLifecycle.js.map +1 -0
- package/dist/mcp/proxy/verifyInterceptor.js +186 -27
- package/dist/mcp/proxy/verifyInterceptor.js.map +1 -1
- package/dist/mcp/report/buffer.js +351 -0
- package/dist/mcp/report/buffer.js.map +1 -0
- package/dist/mcp/report/coalesce.js +165 -0
- package/dist/mcp/report/coalesce.js.map +1 -0
- package/dist/mcp/report/constants.js +51 -0
- package/dist/mcp/report/constants.js.map +1 -0
- package/dist/mcp/report/project.js +83 -0
- package/dist/mcp/report/project.js.map +1 -0
- package/dist/mcp/report/reporter.js +443 -0
- package/dist/mcp/report/reporter.js.map +1 -0
- package/dist/mcp/report/types.js +3 -0
- package/dist/mcp/report/types.js.map +1 -0
- package/dist/mcp/report/validate.js +179 -0
- package/dist/mcp/report/validate.js.map +1 -0
- package/dist/mcp/verify/api.js +39 -0
- package/dist/mcp/verify/api.js.map +1 -1
- package/dist/mcp/verify/cache.js +18 -0
- package/dist/mcp/verify/cache.js.map +1 -1
- package/dist/mcp/verify/identity.js +120 -7
- package/dist/mcp/verify/identity.js.map +1 -1
- package/dist/mcp/verify/policy.js +2 -0
- package/dist/mcp/verify/policy.js.map +1 -1
- package/dist/mcp/verify/verifier.js +189 -32
- package/dist/mcp/verify/verifier.js.map +1 -1
- package/dist/shim.js +53 -3
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -1
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -31,7 +31,11 @@ The installer is fully interactive, and signs you in **first**:
|
|
|
31
31
|
5. **MCP proxy** — put the VibeDefend proxy in front of your other MCP
|
|
32
32
|
servers (yes by default), so each tool is checked against your
|
|
33
33
|
organization policy before your agent calls it. CybeDefend's own MCP
|
|
34
|
-
server is never wrapped.
|
|
34
|
+
server is never wrapped. The proxy also reports to your organization the
|
|
35
|
+
MCP servers it sees and the calls it refused, asked about, warned on or
|
|
36
|
+
whose result it flagged (never their arguments or results), and it
|
|
37
|
+
applies your organization's blocks within 15 minutes; this needs the
|
|
38
|
+
CybeDefend gateway of 2026-10-28.
|
|
35
39
|
6. **MCP sign-ins** — the sign-ins Claude Code or Codex already hold for
|
|
36
40
|
those servers are taken over on their own. Your browser opens only for the
|
|
37
41
|
servers left without one, if you say yes (or later:
|
|
@@ -55,16 +59,16 @@ npm install -g @cybedefend/vibedefend && vibedefend install
|
|
|
55
59
|
|
|
56
60
|
VibeDefend auto-detects and wires whichever of these you have installed.
|
|
57
61
|
|
|
58
|
-
| Capability | Claude Code | Cursor | OpenAI Codex | Windsurf | VS Code Copilot |
|
|
59
|
-
|
|
60
|
-
| **MCP server install** | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
61
|
-
| **Business + Security Rules** *(injected pre-write)* | ✅ edit + shell⁴ | ✅ | ✅ edit + shell⁴ | ⚠️ writes only | ✅ |
|
|
62
|
-
| **Action Guards** *(hard block on deny)* | ✅ all tools | ✅ all tools | ✅ all tools | ⚠️ writes + MCP fallback¹ | ❌ not yet wired |
|
|
63
|
-
| **Session Start** *(loads doctrine + proposals inbox)* | ✅ | ✅ | ✅ | ⚠️ proxied² | ✅ |
|
|
64
|
-
| **Session Review** *(end-of-session gap analysis + pre-commit diff scan)* | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
65
|
-
| **PreCompact** *(long-session gap analysis)* | ✅ | ✅ | ❌ no event | ❌ no event | ✅ |
|
|
66
|
-
| **Doctrine backstop** *(per-prompt reminder)* | ✅ | ❌ | ✱ via MCP³ | ❌ | ❌ |
|
|
67
|
-
| **Min version** | latest | ≥ 1.7 | latest | latest | ≥ 1.110 |
|
|
62
|
+
| Capability | Claude Code | Cursor | OpenAI Codex | Windsurf | VS Code Copilot | Google Antigravity |
|
|
63
|
+
|---|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
64
|
+
| **MCP server install** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
65
|
+
| **Business + Security Rules** *(injected pre-write)* | ✅ edit + shell⁴ | ✅ | ✅ edit + shell⁴ | ⚠️ writes only | ✅ | ⚠️ edit + shell⁴, after the edit⁵ |
|
|
66
|
+
| **Action Guards** *(hard block on deny)* | ✅ all tools | ✅ all tools | ✅ all tools | ⚠️ writes + MCP fallback¹ | ❌ not yet wired | ✅ all tools⁶ |
|
|
67
|
+
| **Session Start** *(loads doctrine + proposals inbox)* | ✅ | ✅ | ✅ | ⚠️ proxied² | ✅ | ✅ |
|
|
68
|
+
| **Session Review** *(end-of-session gap analysis + pre-commit diff scan)* | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
69
|
+
| **PreCompact** *(long-session gap analysis)* | ✅ | ✅ | ❌ no event | ❌ no event | ✅ | ❌ no event |
|
|
70
|
+
| **Doctrine backstop** *(per-prompt reminder)* | ✅ | ❌ | ✱ via MCP³ | ❌ | ❌ | ❌ |
|
|
71
|
+
| **Min version** | latest | ≥ 1.7 | latest | latest | ≥ 1.110 | ≥ 2.0 (app / IDE) |
|
|
68
72
|
|
|
69
73
|
**Legend** — ✅ supported · ⚠️ supported with caveats · ❌ not exposed by the agent · ✱ alternate mechanism
|
|
70
74
|
|
|
@@ -74,7 +78,11 @@ VibeDefend auto-detects and wires whichever of these you have installed.
|
|
|
74
78
|
|
|
75
79
|
³ Codex follows the doctrine via the MCP server's `Server.instructions` field on each session, removing the need for a per-prompt reminder hook.
|
|
76
80
|
|
|
77
|
-
⁴ On Claude Code and
|
|
81
|
+
⁴ On Claude Code, Codex and Antigravity (its `run_command` tool) the rules hook also fires on shell commands that write files (`>` / `>>` redirections, heredocs, `tee`, `sed -i`, `perl -pi`, `cp` / `mv`, `dd of=`, `bash -c '…'`), so an agent that edits through the shell gets the same rules as one using the edit tool. Read-only commands fetch nothing. Inline interpreters (`python -c`, `node -e`) and `git apply` / `patch` are not inspected. Cursor, Windsurf and VS Code Copilot: edit tools only.
|
|
82
|
+
|
|
83
|
+
⁵ Antigravity has no channel to inject context into the model from its PreToolUse hook, so rules fetched before a write are held and delivered at the agent's next model call (its PreInvocation event) instead — one step later than on every other client, but before the agent acts on what it just read.
|
|
84
|
+
|
|
85
|
+
⁶ `agy --dangerously-skip-permissions` runs no hook at all, on any event. On Windows, a home path with a space in it is not supported — Antigravity has no way to quote the hook command it runs, so the installer detects this and refuses to wire a dead command rather than silently blocking every tool call. Antigravity's MCP servers are **not** wrapped by the VibeDefend MCP proxy (like Codex today): the CybeDefend server is registered directly against the region's URL.
|
|
78
86
|
|
|
79
87
|
**Codex setup gotcha:** Codex 0.131+ requires you to approve each hook via the `/hooks` panel inside Codex *before* they fire. After running `vibedefend install`, open Codex, run `/hooks`, and trust the `cybedefend` entries — until you do that the panel will show `Installed N / Active 0`.
|
|
80
88
|
|
|
@@ -272,7 +280,10 @@ deletes `~/.cybedefend/`, keeping only your own `~/.cybedefend/regions.json`.
|
|
|
272
280
|
Repositories keep their committed `.cybedefend/config.json`. A Windsurf
|
|
273
281
|
`.windsurfrules` block is removed from the current directory only: in any other
|
|
274
282
|
repo you wired for Windsurf, delete it by hand. Codex's `[features] hooks = true`
|
|
275
|
-
flag stays set, since other hooks may rely on it.
|
|
283
|
+
flag stays set, since other hooks may rely on it. Antigravity's `hooks.json` and
|
|
284
|
+
`mcp_config.json` are user-global (shared by the app, the IDE extension and
|
|
285
|
+
`agy`, never per-project), so uninstall drops our `cybedefend-*` groups and MCP
|
|
286
|
+
server from there once, for every project — there is no per-repo cleanup to do.
|
|
276
287
|
|
|
277
288
|
## Sibling: `cybedefend-cli`
|
|
278
289
|
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Antigravity adapter.
|
|
3
|
+
*
|
|
4
|
+
* Antigravity shares one hooks file between the app, the IDE extension and
|
|
5
|
+
* `agy` — global, never per-project: `~/.gemini/config/hooks.json` (Windows:
|
|
6
|
+
* `%USERPROFILE%\.gemini\config\hooks.json`). Its top-level keys are hook
|
|
7
|
+
* GROUP names, not event names (contrast Cursor/Codex/Windsurf, which key by
|
|
8
|
+
* event). Each group nests its handlers under the events it fires on:
|
|
9
|
+
*
|
|
10
|
+
* PreToolUse (and other tool events):
|
|
11
|
+
* { "<group>": { "PreToolUse": [{ "matcher": "<regex>", "hooks": [
|
|
12
|
+
* { "type": "command", "command": "…", "timeout": 30 } ] }] } }
|
|
13
|
+
* Every other event (SessionStart, PreInvocation, Stop, …) lists the
|
|
14
|
+
* handler directly, with no matcher/hooks nesting:
|
|
15
|
+
* { "<group>": { "SessionStart": [
|
|
16
|
+
* { "type": "command", "command": "…", "timeout": 30 } ] } }
|
|
17
|
+
* A group may also carry a sibling `"enabled"` boolean, which the user can
|
|
18
|
+
* flip in the Antigravity UI; `writeSettings` preserves it across a
|
|
19
|
+
* reinstall (see `writeSettings` below).
|
|
20
|
+
*
|
|
21
|
+
* We write 5 groups, one per moment, all prefixed `cybedefend-`:
|
|
22
|
+
* - cybedefend-session-start SessionStart → session-start
|
|
23
|
+
* - cybedefend-rules PreToolUse → fetch-rules (matcher "*", self-filtered)
|
|
24
|
+
* - cybedefend-rules-delivery PreInvocation → pre-invocation (injects stashed rules)
|
|
25
|
+
* - cybedefend-guards PreToolUse → guard-check (matcher "*", every tool)
|
|
26
|
+
* - cybedefend-session-review Stop → session-review (only when enabled)
|
|
27
|
+
*
|
|
28
|
+
* A top-level key is OURS when its name starts with `cybedefend-` AND its
|
|
29
|
+
* JSON references our managed hook dir (`textReferencesHookRunner`). That
|
|
30
|
+
* is a stronger bar than the prefix alone — a user's own `cybedefend-mine`
|
|
31
|
+
* group, wired to a command of their own, is never touched. `writeSettings`
|
|
32
|
+
* drops our groups wholesale and rewrites them fresh (so a re-install can
|
|
33
|
+
* never duplicate a handler inside a group — there's nothing to dedupe,
|
|
34
|
+
* each key is written exactly once, and an old group of ours under a
|
|
35
|
+
* command shape a previous version wrote is replaced, never kept alongside
|
|
36
|
+
* the new one), and `uninstall` only drops them.
|
|
37
|
+
*
|
|
38
|
+
* Hook commands: Antigravity runs a POSIX hook through `sh -c "<command>"`
|
|
39
|
+
* and a Windows one through `cmd /C "<command>"` — never execve directly —
|
|
40
|
+
* so:
|
|
41
|
+
* - POSIX: `node <runner> <sub> --client antigravity || echo '<fallback>'`.
|
|
42
|
+
* A missing `node`/runner (or any runner crash) then answers the same
|
|
43
|
+
* fallback a healthy run would print on its own early-exit path, instead
|
|
44
|
+
* of blocking every tool call fail-closed forever.
|
|
45
|
+
* - Windows: `node <runner> <sub> --client antigravity`, no quoting and no
|
|
46
|
+
* `|| echo '<fallback>'`. `agy` escapes embedded quotes, and the
|
|
47
|
+
* fallback JSON (`{"decision":"allow"}`) is itself quote-bearing, so
|
|
48
|
+
* there is no way to nest it inside the already-quoted `cmd /C "…"`
|
|
49
|
+
* invocation without `agy` mangling it on the way in. The runner path
|
|
50
|
+
* can't be quoted either, so a path containing whitespace can't be
|
|
51
|
+
* spawned at all — `detect()`, AND `writeSettings()` itself (belt and
|
|
52
|
+
* suspenders: a manually-ticked client that `detect()` never got to
|
|
53
|
+
* veto, or `vibedefend doctor` re-wiring from `detect().installed`
|
|
54
|
+
* alone), both check this (`antigravityWindowsBlock`) and refuse to
|
|
55
|
+
* wire a command that would never run.
|
|
56
|
+
*
|
|
57
|
+
* The fallback is `{"decision":"allow"}` for the two PreToolUse subcommands
|
|
58
|
+
* (fetch-rules, guard-check) — a dead runner must fail OPEN there, exactly
|
|
59
|
+
* like every other client's hook does when it can't execute — and `{}` for
|
|
60
|
+
* every other subcommand, which Antigravity expects verbatim on success.
|
|
61
|
+
*/
|
|
62
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
63
|
+
import { readJson, writeJson } from '../json-file.js';
|
|
64
|
+
import { home, log, stripBom } from '../utils.js';
|
|
65
|
+
import { HOOK_RUNNER_PATH, toPosixPath, quoteCommandPath, textReferencesHookRunner } from '../hooks/install.js';
|
|
66
|
+
import { PRE_TOOL_USE_SUBCOMMANDS } from '../hooks/runtime/emit.js';
|
|
67
|
+
import { mcpStatus, readJsonServerEntry } from './mcp-url.js';
|
|
68
|
+
import { deleteKeys, editJsonFile } from './unwire.js';
|
|
69
|
+
import { configDirExists, probeBinaryVersion } from './detect.js';
|
|
70
|
+
const ANTIGRAVITY_HOOKS = home('.gemini', 'config', 'hooks.json');
|
|
71
|
+
const ANTIGRAVITY_MCP = home('.gemini', 'config', 'mcp_config.json');
|
|
72
|
+
/**
|
|
73
|
+
* The `command` field of an Antigravity hook handler, targeting `sub` on
|
|
74
|
+
* `--client antigravity`. `--client` and `antigravity` are two separate
|
|
75
|
+
* argv tokens — the runner's arg parser skips anything before the
|
|
76
|
+
* subcommand and ignores a combined `--client=antigravity`.
|
|
77
|
+
*/
|
|
78
|
+
export function antigravityHookCommand(sub, opts = {}) {
|
|
79
|
+
const platform = opts.platform ?? process.platform;
|
|
80
|
+
// Forward-slash first (Windows-shell safe), as `hookCommand` does.
|
|
81
|
+
const runnerPath = toPosixPath(opts.runnerPath ?? HOOK_RUNNER_PATH);
|
|
82
|
+
if (platform === 'win32') {
|
|
83
|
+
// No quoting (a quoted path can't be spawned) and no `|| echo` fallback:
|
|
84
|
+
// the fallback JSON is quote-bearing and `agy` escapes embedded quotes,
|
|
85
|
+
// so nesting it inside the already-quoted `cmd /C "…"` invocation would
|
|
86
|
+
// be mangled rather than run.
|
|
87
|
+
return `node ${runnerPath} ${sub} --client antigravity`;
|
|
88
|
+
}
|
|
89
|
+
const fallback = PRE_TOOL_USE_SUBCOMMANDS.has(sub) ? '{"decision":"allow"}' : '{}';
|
|
90
|
+
return `node ${quoteCommandPath(runnerPath)} ${sub} --client antigravity || echo '${fallback}'`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* `null` unless Antigravity on Windows cannot spawn `runnerPath` at all — a
|
|
94
|
+
* whitespace path with no safe quoting mechanism available. Used by both
|
|
95
|
+
* `detect()` and `writeSettings()` (to report/refuse instead of wiring a
|
|
96
|
+
* dead command) and by tests.
|
|
97
|
+
*/
|
|
98
|
+
export function antigravityWindowsBlock(platform, runnerPath) {
|
|
99
|
+
if (platform !== 'win32')
|
|
100
|
+
return null;
|
|
101
|
+
if (!/\s/.test(runnerPath))
|
|
102
|
+
return null;
|
|
103
|
+
return `Antigravity on Windows cannot run a hook whose path contains a space: ${runnerPath}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* The 5 (or 4, with session review off) `cybedefend-*` hook groups, keyed by
|
|
107
|
+
* group name — ready to be merged as whole top-level keys into `hooks.json`.
|
|
108
|
+
*/
|
|
109
|
+
export function buildAntigravityHookGroups(opts) {
|
|
110
|
+
const cmd = (sub) => antigravityHookCommand(sub, { platform: opts.platform, runnerPath: opts.runnerPath });
|
|
111
|
+
const groups = {
|
|
112
|
+
'cybedefend-session-start': {
|
|
113
|
+
SessionStart: [{ type: 'command', command: cmd('session-start'), timeout: 30 }],
|
|
114
|
+
},
|
|
115
|
+
'cybedefend-rules': {
|
|
116
|
+
PreToolUse: [
|
|
117
|
+
{
|
|
118
|
+
// Every tool (Ruling R14): Antigravity's tool names change with the
|
|
119
|
+
// model (`write_to_file` or `write_file`, `replace_file_content` or
|
|
120
|
+
// `edit_file`, …), and a matcher that missed one silently dropped
|
|
121
|
+
// the rules for every write. fetch-rules keeps only the write and
|
|
122
|
+
// shell tools itself and answers `allow` at once on any other.
|
|
123
|
+
matcher: '*',
|
|
124
|
+
hooks: [{ type: 'command', command: cmd('fetch-rules'), timeout: 30 }],
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
'cybedefend-rules-delivery': {
|
|
129
|
+
PreInvocation: [{ type: 'command', command: cmd('pre-invocation'), timeout: 10 }],
|
|
130
|
+
},
|
|
131
|
+
'cybedefend-guards': {
|
|
132
|
+
PreToolUse: [
|
|
133
|
+
{
|
|
134
|
+
matcher: '*',
|
|
135
|
+
hooks: [{ type: 'command', command: cmd('guard-check'), timeout: 30 }],
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
if (opts.enableSessionReview) {
|
|
141
|
+
groups['cybedefend-session-review'] = {
|
|
142
|
+
Stop: [{ type: 'command', command: cmd('session-review'), timeout: 30 }],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return groups;
|
|
146
|
+
}
|
|
147
|
+
/** Top-level keys of `file` that are ours: prefix `cybedefend-` AND the JSON references our managed hook dir. */
|
|
148
|
+
function ourGroupKeys(file) {
|
|
149
|
+
return Object.keys(file).filter((key) => key.startsWith('cybedefend-') && textReferencesHookRunner(JSON.stringify(file[key])));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Delete every top-level key of `file` that is ours (prefix `cybedefend-`
|
|
153
|
+
* AND its JSON references our managed hook dir). A user's own
|
|
154
|
+
* `cybedefend-*` group that doesn't mention our runner is left alone — the
|
|
155
|
+
* prefix alone is not a strong enough signal to delete someone else's
|
|
156
|
+
* config. Returns whether anything was removed.
|
|
157
|
+
*/
|
|
158
|
+
function dropOurGroups(file) {
|
|
159
|
+
const keys = ourGroupKeys(file);
|
|
160
|
+
for (const key of keys)
|
|
161
|
+
delete file[key];
|
|
162
|
+
return keys.length > 0;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The names of our groups the user has switched off (`"enabled": false`,
|
|
166
|
+
* Antigravity's own per-group toggle) before they get dropped and rewritten
|
|
167
|
+
* — so `writeSettings` can carry that flag over onto the fresh replacement
|
|
168
|
+
* instead of silently re-enabling a group the user turned off.
|
|
169
|
+
*/
|
|
170
|
+
function disabledOurGroups(file) {
|
|
171
|
+
const disabled = new Set();
|
|
172
|
+
for (const key of ourGroupKeys(file)) {
|
|
173
|
+
const group = file[key];
|
|
174
|
+
if (group && typeof group === 'object' && group.enabled === false) {
|
|
175
|
+
disabled.add(key);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return disabled;
|
|
179
|
+
}
|
|
180
|
+
function detect() {
|
|
181
|
+
const version = probeBinaryVersion('agy') ?? undefined;
|
|
182
|
+
const hasConfigDir = configDirExists(home('.gemini', 'antigravity')) ||
|
|
183
|
+
configDirExists(home('.gemini', 'antigravity-ide')) ||
|
|
184
|
+
configDirExists(home('.gemini', 'antigravity-cli'));
|
|
185
|
+
const hasApp = process.platform === 'darwin' && existsSync('/Applications/Antigravity.app');
|
|
186
|
+
const installed = version !== undefined || hasConfigDir || hasApp;
|
|
187
|
+
// Computed regardless of `installed`: a Windows home with a whitespace
|
|
188
|
+
// path is the more actionable reason to surface, and `writeSettings` is
|
|
189
|
+
// reachable even from a "not installed" detection (a client manually
|
|
190
|
+
// ticked in the install picker, or `vibedefend doctor` re-wiring from
|
|
191
|
+
// `detect().installed` alone without re-checking `supportsHooks`).
|
|
192
|
+
const windowsBlock = antigravityWindowsBlock(process.platform, HOOK_RUNNER_PATH);
|
|
193
|
+
if (!installed) {
|
|
194
|
+
return {
|
|
195
|
+
installed: false,
|
|
196
|
+
supportsHooks: false,
|
|
197
|
+
reason: windowsBlock ??
|
|
198
|
+
'`agy` CLI not on PATH, no ~/.gemini/antigravity(-ide|-cli)/ directory, ' +
|
|
199
|
+
'and no /Applications/Antigravity.app.',
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// No version gate — hooks shipped with Antigravity's first release.
|
|
203
|
+
if (windowsBlock) {
|
|
204
|
+
return { installed: true, version, supportsHooks: false, reason: windowsBlock };
|
|
205
|
+
}
|
|
206
|
+
return { installed: true, version, supportsHooks: true };
|
|
207
|
+
}
|
|
208
|
+
function supports(event) {
|
|
209
|
+
// Antigravity has no PreCompact and no UserPromptSubmit event. Action
|
|
210
|
+
// Guards (guard-check) and rules delivery (pre-invocation) are wired
|
|
211
|
+
// unconditionally below — they aren't part of the LifecycleEvent surface
|
|
212
|
+
// `supports()` is asked about.
|
|
213
|
+
return event === 'fetch-rules' || event === 'session-start' || event === 'stop';
|
|
214
|
+
}
|
|
215
|
+
function writeSettings(opts) {
|
|
216
|
+
// Belt and suspenders: `detect()` is what normally keeps this adapter out
|
|
217
|
+
// of the picker on an unspawnable Windows path, but `writeSettings` can
|
|
218
|
+
// still be reached directly (a client ticked by hand before `detect()`
|
|
219
|
+
// ran, or a re-wire driven only by `detect().installed`). Never wire a
|
|
220
|
+
// command that would block every Antigravity tool call for want of a
|
|
221
|
+
// runnable hook — and clean up anything an earlier, unguarded install
|
|
222
|
+
// left behind.
|
|
223
|
+
const windowsBlock = antigravityWindowsBlock(process.platform, HOOK_RUNNER_PATH);
|
|
224
|
+
if (windowsBlock) {
|
|
225
|
+
log.warn(windowsBlock);
|
|
226
|
+
editJsonFile(ANTIGRAVITY_HOOKS, dropOurGroups);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const file = readJson(ANTIGRAVITY_HOOKS, {});
|
|
230
|
+
const disabled = disabledOurGroups(file);
|
|
231
|
+
dropOurGroups(file);
|
|
232
|
+
const groups = buildAntigravityHookGroups({ enableSessionReview: opts.enableSessionReview });
|
|
233
|
+
for (const key of disabled) {
|
|
234
|
+
const group = groups[key];
|
|
235
|
+
if (group && typeof group === 'object') {
|
|
236
|
+
group.enabled = false;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
Object.assign(file, groups);
|
|
240
|
+
writeJson(ANTIGRAVITY_HOOKS, file);
|
|
241
|
+
log.ok(`Antigravity hooks wired into ${ANTIGRAVITY_HOOKS}`);
|
|
242
|
+
log.hint('`agy --dangerously-skip-permissions` runs no hook at all.');
|
|
243
|
+
log.hint('Rules reach the agent at its next model call (PreInvocation), not immediately after the edit that triggered them.');
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Register the CybeDefend MCP server in `~/.gemini/config/mcp_config.json`.
|
|
247
|
+
* This is NOT wrapped by the VibeDefend MCP proxy (like Codex today) — the
|
|
248
|
+
* entry points straight at the region's URL.
|
|
249
|
+
*/
|
|
250
|
+
function registerMcp(opts) {
|
|
251
|
+
log.step(`Registering MCP "${opts.region.mcpName}" in Antigravity`);
|
|
252
|
+
log.hint(`URL: ${opts.region.mcpUrl}`);
|
|
253
|
+
const file = readJson(ANTIGRAVITY_MCP, {});
|
|
254
|
+
file.mcpServers ??= {};
|
|
255
|
+
file.mcpServers[opts.region.mcpName] = { serverUrl: opts.region.mcpUrl };
|
|
256
|
+
writeJson(ANTIGRAVITY_MCP, file);
|
|
257
|
+
log.ok(`MCP "${opts.region.mcpName}" registered in ${ANTIGRAVITY_MCP}`);
|
|
258
|
+
log.hint('Antigravity opens a browser sign-in the first time it connects.');
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Pure introspection — never throws, as Windsurf's does. `hooksWired` from a
|
|
263
|
+
* raw-text marker check on `hooks.json`, `mcpRegistered` from the
|
|
264
|
+
* `serverUrl` of our entry in `mcp_config.json` — it must point at this
|
|
265
|
+
* region, not just exist. Both reads strip a leading BOM first, since
|
|
266
|
+
* either file may carry one.
|
|
267
|
+
*/
|
|
268
|
+
function inspect(region) {
|
|
269
|
+
let hooksWired = false;
|
|
270
|
+
try {
|
|
271
|
+
if (existsSync(ANTIGRAVITY_HOOKS)) {
|
|
272
|
+
hooksWired = textReferencesHookRunner(stripBom(readFileSync(ANTIGRAVITY_HOOKS, 'utf8')));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
/* missing/unreadable → false */
|
|
277
|
+
}
|
|
278
|
+
const entry = readJsonServerEntry(() => stripBom(readFileSync(ANTIGRAVITY_MCP, 'utf8')), 'mcpServers', region.mcpName);
|
|
279
|
+
return { hooksWired, ...mcpStatus(entry?.serverUrl, region) };
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Drop our `cybedefend-*` groups from `hooks.json` (whole top-level keys —
|
|
283
|
+
* see `dropOurGroups`) and our servers from `mcp_config.json`. Every other
|
|
284
|
+
* key / server is left untouched.
|
|
285
|
+
*
|
|
286
|
+
* The two files are independent, so both steps always run even when one
|
|
287
|
+
* throws (a malformed `hooks.json` must not leave our MCP server behind) —
|
|
288
|
+
* only once both have been attempted does this re-throw the FIRST error, if
|
|
289
|
+
* any.
|
|
290
|
+
*/
|
|
291
|
+
function uninstall(opts) {
|
|
292
|
+
let hooksRemoved = false;
|
|
293
|
+
let hooksError;
|
|
294
|
+
try {
|
|
295
|
+
hooksRemoved = editJsonFile(ANTIGRAVITY_HOOKS, dropOurGroups);
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
hooksError = err;
|
|
299
|
+
}
|
|
300
|
+
let mcpRemoved = [];
|
|
301
|
+
let mcpError;
|
|
302
|
+
try {
|
|
303
|
+
editJsonFile(ANTIGRAVITY_MCP, (file) => {
|
|
304
|
+
mcpRemoved = deleteKeys(file.mcpServers, opts.mcpNames);
|
|
305
|
+
return mcpRemoved.length > 0;
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
mcpError = err;
|
|
310
|
+
}
|
|
311
|
+
if (hooksError)
|
|
312
|
+
throw hooksError;
|
|
313
|
+
if (mcpError)
|
|
314
|
+
throw mcpError;
|
|
315
|
+
return { hookFiles: hooksRemoved ? [ANTIGRAVITY_HOOKS] : [], mcpRemoved };
|
|
316
|
+
}
|
|
317
|
+
export const antigravityAdapter = {
|
|
318
|
+
id: 'antigravity',
|
|
319
|
+
label: 'Google Antigravity',
|
|
320
|
+
detect,
|
|
321
|
+
supports,
|
|
322
|
+
writeSettings,
|
|
323
|
+
registerMcp,
|
|
324
|
+
inspect,
|
|
325
|
+
uninstall,
|
|
326
|
+
};
|
|
327
|
+
//# sourceMappingURL=antigravity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../src/clients/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAYpE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAClE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAcrE;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAA0B,EAC1B,OAA4D,EAAE;IAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACnD,mEAAmE;IACnE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;IAEpE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,8BAA8B;QAC9B,OAAO,QAAQ,UAAU,IAAI,GAAG,uBAAuB,CAAC;IAC1D,CAAC;IAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,OAAO,QAAQ,gBAAgB,CAAC,UAAU,CAAC,IAAI,GAAG,kCAAkC,QAAQ,GAAG,CAAC;AAClG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAyB,EACzB,UAAkB;IAElB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,yEAAyE,UAAU,EAAE,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAI1C;IACC,MAAM,GAAG,GAAG,CAAC,GAA0B,EAAU,EAAE,CACjD,sBAAsB,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAExF,MAAM,MAAM,GAA4B;QACtC,0BAA0B,EAAE;YAC1B,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;SAChF;QACD,kBAAkB,EAAE;YAClB,UAAU,EAAE;gBACV;oBACE,oEAAoE;oBACpE,oEAAoE;oBACpE,kEAAkE;oBAClE,kEAAkE;oBAClE,+DAA+D;oBAC/D,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;iBACvE;aACF;SACF;QACD,2BAA2B,EAAE;YAC3B,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;SAClF;QACD,mBAAmB,EAAE;YACnB,UAAU,EAAE;gBACV;oBACE,OAAO,EAAE,GAAG;oBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;iBACvE;aACF;SACF;KACF,CAAC;IAEF,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,MAAM,CAAC,2BAA2B,CAAC,GAAG;YACpC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iHAAiH;AACjH,SAAS,YAAY,CAAC,IAA6B;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAC9F,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,IAA6B;IAClD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,IAA6B;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAAiC,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC/F,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,MAAM;IACb,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;IACvD,MAAM,YAAY,GAChB,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACnD,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,OAAO,KAAK,SAAS,IAAI,YAAY,IAAI,MAAM,CAAC;IAElE,uEAAuE;IACvE,wEAAwE;IACxE,qEAAqE;IACrE,sEAAsE;IACtE,mEAAmE;IACnE,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAEjF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,KAAK;YACpB,MAAM,EACJ,YAAY;gBACZ,yEAAyE;oBACvE,uCAAuC;SAC5C,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClF,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAqB;IACrC,sEAAsE;IACtE,qEAAqE;IACrE,yEAAyE;IACzE,+BAA+B;IAC/B,OAAO,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,MAAM,CAAC;AAClF,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,0EAA0E;IAC1E,wEAAwE;IACxE,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,sEAAsE;IACtE,eAAe;IACf,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACjF,IAAI,YAAY,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvB,YAAY,CAA0B,iBAAiB,EAAE,aAAa,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAA0B,iBAAiB,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpB,MAAM,MAAM,GAAG,0BAA0B,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC7F,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtC,KAAiC,CAAC,OAAO,GAAG,KAAK,CAAC;QACrD,CAAC;IACH,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEnC,GAAG,CAAC,EAAE,CAAC,gCAAgC,iBAAiB,EAAE,CAAC,CAAC;IAC5D,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACtE,GAAG,CAAC,IAAI,CACN,mHAAmH,CACpH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAA8B;IACjD,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,QAAQ,CAAqB,eAAe,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACzE,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,eAAe,EAAE,CAAC,CAAC;IACxE,GAAG,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,MAAoB;IACnC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAC/B,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,EACrD,YAAY,EACZ,MAAM,CAAC,OAAO,CACf,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,IAAmB;IACpC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,YAAY,GAAG,YAAY,CAA0B,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,YAAY,CAAqB,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACzD,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxD,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,UAAU;QAAE,MAAM,UAAU,CAAC;IACjC,IAAI,QAAQ;QAAE,MAAM,QAAQ,CAAC;IAE7B,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAkB;IAC/C,EAAE,EAAE,aAAa;IACjB,KAAK,EAAE,oBAAoB;IAC3B,MAAM;IACN,QAAQ;IACR,aAAa;IACb,WAAW;IACX,OAAO;IACP,SAAS;CACV,CAAC"}
|
package/dist/clients/registry.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* order. Claude Code first because it has the most mature hook surface
|
|
7
7
|
* and is the assumed default; the others follow alphabetically.
|
|
8
8
|
*/
|
|
9
|
+
import { antigravityAdapter } from './antigravity.js';
|
|
9
10
|
import { claudeCodeAdapter } from './claude-code.js';
|
|
10
11
|
import { codexAdapter } from './codex.js';
|
|
11
12
|
import { cursorAdapter } from './cursor.js';
|
|
@@ -17,6 +18,7 @@ export const ALL_ADAPTERS = [
|
|
|
17
18
|
vscodeAdapter,
|
|
18
19
|
windsurfAdapter,
|
|
19
20
|
codexAdapter,
|
|
21
|
+
antigravityAdapter,
|
|
20
22
|
];
|
|
21
23
|
/** Look up an adapter by ID. Throws if not found (programming error). */
|
|
22
24
|
export function adapterFor(id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/clients/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,eAAe;IACf,YAAY;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/clients/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,eAAe;IACf,YAAY;IACZ,kBAAkB;CACV,CAAC;AAEX,yEAAyE;AACzE,MAAM,UAAU,UAAU,CAAC,EAAY;IACrC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS;IAIvB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -3,7 +3,15 @@ import { createTokenSource } from '../../mcp/auth/tokenSource.js';
|
|
|
3
3
|
import { connectCommandFor, createAuthInterceptor } from '../../mcp/proxy/authInterceptor.js';
|
|
4
4
|
import { createAudit } from '../../mcp/proxy/audit.js';
|
|
5
5
|
import { createVerifyInterceptor } from '../../mcp/proxy/verifyInterceptor.js';
|
|
6
|
+
import { startServerCheckTimer } from '../../mcp/proxy/serverCheckTimer.js';
|
|
7
|
+
import { createSessionLifecycle } from '../../mcp/proxy/sessionLifecycle.js';
|
|
8
|
+
import { makeReportBuffer } from '../../mcp/report/buffer.js';
|
|
9
|
+
import { resolveReportProjectId } from '../../mcp/report/project.js';
|
|
10
|
+
import { McpReporter } from '../../mcp/report/reporter.js';
|
|
11
|
+
import { postMcpReport } from '../../mcp/verify/api.js';
|
|
6
12
|
import { buildVerifier } from '../../mcp/verify/factory.js';
|
|
13
|
+
import { reportServerIdentity } from '../../mcp/verify/identity.js';
|
|
14
|
+
import { verifyTokenResolver } from '../../mcp/verify/token.js';
|
|
7
15
|
import { isProxyInstalled } from '../../mcp/config/installed.js';
|
|
8
16
|
import { withSyncLock } from '../../mcp/config/lock.js';
|
|
9
17
|
import { checkProxyBinary } from '../../mcp/config/proxyBinary.js';
|
|
@@ -31,6 +39,9 @@ export async function runMcpProxyCommand(options, runtime) {
|
|
|
31
39
|
// see the conformance test that pins it.
|
|
32
40
|
let spec;
|
|
33
41
|
let identitySpec;
|
|
42
|
+
// The client whose config this server was read from; the agent's own
|
|
43
|
+
// `clientInfo` wins when it names itself.
|
|
44
|
+
let fallbackClientName;
|
|
34
45
|
// Variable references the originating client would have resolved. Names
|
|
35
46
|
// only — these are logged, and one of them is an API key.
|
|
36
47
|
let expansion = { resolved: [], missing: [] };
|
|
@@ -44,6 +55,7 @@ export async function runMcpProxyCommand(options, runtime) {
|
|
|
44
55
|
const expanded = expandedSpecOf(entry, runtime.env);
|
|
45
56
|
spec = expanded.value;
|
|
46
57
|
identitySpec = specOf(entry);
|
|
58
|
+
fallbackClientName = entry.source?.client;
|
|
47
59
|
expansion = { resolved: expanded.resolved, missing: expanded.missing };
|
|
48
60
|
}
|
|
49
61
|
else {
|
|
@@ -83,10 +95,12 @@ export async function runMcpProxyCommand(options, runtime) {
|
|
|
83
95
|
logger.warn('a variable referenced by this server is not set and has no default; ' +
|
|
84
96
|
'the literal text is passed through, exactly as the client would', { variable: name });
|
|
85
97
|
}
|
|
98
|
+
const built = buildInterceptor(spec, identitySpec, options.name, logger, runtime, fallbackClientName);
|
|
99
|
+
const backgroundSyncOff = runtime.env[`${PROXY_ENV_PREFIX}NO_SYNC`] === '1';
|
|
86
100
|
const proxy = new Proxy({
|
|
87
101
|
spec,
|
|
88
102
|
logger,
|
|
89
|
-
interceptor:
|
|
103
|
+
interceptor: built.interceptor,
|
|
90
104
|
stdin: runtime.stdin,
|
|
91
105
|
stdout: runtime.stdout,
|
|
92
106
|
stderr: runtime.stderr,
|
|
@@ -99,9 +113,14 @@ export async function runMcpProxyCommand(options, runtime) {
|
|
|
99
113
|
onLookup: (outcome) => logger.info('credential lookup', { outcome }),
|
|
100
114
|
})
|
|
101
115
|
: undefined,
|
|
102
|
-
afterInitialize:
|
|
116
|
+
afterInitialize: backgroundSyncOff && !built.lifecycle
|
|
103
117
|
? undefined
|
|
104
|
-
: () =>
|
|
118
|
+
: async (client) => {
|
|
119
|
+
built.lifecycle?.start(client);
|
|
120
|
+
if (!backgroundSyncOff)
|
|
121
|
+
await backgroundSync(options, runtime, logger);
|
|
122
|
+
},
|
|
123
|
+
onExit: built.lifecycle ? () => built.lifecycle?.stop() : undefined,
|
|
105
124
|
agentInitializeDeadlineMs: positiveMs(runtime.env[`${PROXY_ENV_PREFIX}INIT_DEADLINE_MS`]),
|
|
106
125
|
upstreamInitializeTimeoutMs: positiveMs(runtime.env[`${PROXY_ENV_PREFIX}UPSTREAM_INIT_TIMEOUT_MS`]),
|
|
107
126
|
});
|
|
@@ -204,7 +223,7 @@ async function backgroundSync(options, runtime, logger) {
|
|
|
204
223
|
* says, because it is not verification: it is section 0's rule that
|
|
205
224
|
* `initialize` is always answered.
|
|
206
225
|
*/
|
|
207
|
-
function buildInterceptor(spec, identitySpec, name, logger, runtime) {
|
|
226
|
+
function buildInterceptor(spec, identitySpec, name, logger, runtime, fallbackClientName) {
|
|
208
227
|
const interceptors = [];
|
|
209
228
|
if (spec.transport === 'http') {
|
|
210
229
|
interceptors.push(createAuthInterceptor({
|
|
@@ -216,12 +235,16 @@ function buildInterceptor(spec, identitySpec, name, logger, runtime) {
|
|
|
216
235
|
logger,
|
|
217
236
|
}));
|
|
218
237
|
}
|
|
219
|
-
const verify = buildVerifyInterceptor(identitySpec, name, logger, runtime);
|
|
238
|
+
const verify = buildVerifyInterceptor(identitySpec, name, logger, runtime, fallbackClientName);
|
|
220
239
|
if (verify)
|
|
221
|
-
interceptors.push(verify);
|
|
240
|
+
interceptors.push(verify.interceptor);
|
|
241
|
+
const lifecycle = verify?.lifecycle;
|
|
222
242
|
if (interceptors.length === 0)
|
|
223
|
-
return
|
|
224
|
-
return
|
|
243
|
+
return { lifecycle };
|
|
244
|
+
return {
|
|
245
|
+
interceptor: interceptors.length === 1 ? interceptors[0] : chain(interceptors),
|
|
246
|
+
lifecycle,
|
|
247
|
+
};
|
|
225
248
|
}
|
|
226
249
|
/**
|
|
227
250
|
* The verification seam, wired to the local cache and to the CybeDefend
|
|
@@ -233,7 +256,7 @@ function buildInterceptor(spec, identitySpec, name, logger, runtime) {
|
|
|
233
256
|
* indistinguishable from the server, and a `vibedefend_alert` appended to a
|
|
234
257
|
* tool list is, correctly, a difference.
|
|
235
258
|
*/
|
|
236
|
-
function buildVerifyInterceptor(spec, name, logger, runtime) {
|
|
259
|
+
function buildVerifyInterceptor(spec, name, logger, runtime, fallbackClientName) {
|
|
237
260
|
if (runtime.env[`${PROXY_ENV_PREFIX}NO_VERIFY`] === '1') {
|
|
238
261
|
logger.info('verification disabled by the environment');
|
|
239
262
|
return undefined;
|
|
@@ -249,7 +272,26 @@ function buildVerifyInterceptor(spec, name, logger, runtime) {
|
|
|
249
272
|
backend: backend !== null,
|
|
250
273
|
organization: backend?.organizationId ? 'persisted' : backend ? 'resolved-at-first-call' : 'none',
|
|
251
274
|
});
|
|
252
|
-
|
|
275
|
+
const env = runtime.env;
|
|
276
|
+
// What a report says of this server: a host, a package or a label, and a
|
|
277
|
+
// key. A URL that does not canonicalise gives no identity and no report.
|
|
278
|
+
const identity = reportServerIdentity(spec, name);
|
|
279
|
+
const reporter = identity
|
|
280
|
+
? new McpReporter({
|
|
281
|
+
identity,
|
|
282
|
+
vibedefendVersion: runtime.version,
|
|
283
|
+
fallbackClientName,
|
|
284
|
+
snapshot: () => verifier.inventorySnapshot(),
|
|
285
|
+
backendContext: () => verifier.backendContext(),
|
|
286
|
+
projectId: (clientName) => resolveReportProjectId({ env, clientName }),
|
|
287
|
+
buffer: makeReportBuffer({ env }),
|
|
288
|
+
post: (ctx, body) => postMcpReport(ctx, body, { resolveTokenFn: verifyTokenResolver({ env }) }),
|
|
289
|
+
logger,
|
|
290
|
+
firstDelayMs: positiveMs(env[`${PROXY_ENV_PREFIX}REPORT_DELAY_MS`]),
|
|
291
|
+
minIntervalMs: positiveMs(env[`${PROXY_ENV_PREFIX}REPORT_MIN_INTERVAL_MS`]),
|
|
292
|
+
})
|
|
293
|
+
: undefined;
|
|
294
|
+
const verify = createVerifyInterceptor({
|
|
253
295
|
verifier,
|
|
254
296
|
logger,
|
|
255
297
|
spec,
|
|
@@ -258,7 +300,21 @@ function buildVerifyInterceptor(spec, name, logger, runtime) {
|
|
|
258
300
|
// Sizes and rule names, never arguments and never results: the plan's
|
|
259
301
|
// rule is that nothing from a `tools/call` leaves the machine, and a file
|
|
260
302
|
// quoting them would be a second copy of everything the user has done.
|
|
261
|
-
audit: createAudit({ env
|
|
303
|
+
audit: createAudit({ env }),
|
|
304
|
+
report: reporter,
|
|
262
305
|
});
|
|
306
|
+
return {
|
|
307
|
+
interceptor: verify,
|
|
308
|
+
lifecycle: createSessionLifecycle({
|
|
309
|
+
reporter,
|
|
310
|
+
refreshServerGate: () => verify.refreshServerGate(),
|
|
311
|
+
startTimer: (onChange) => startServerCheckTimer({
|
|
312
|
+
verifier,
|
|
313
|
+
logger,
|
|
314
|
+
intervalMs: positiveMs(env[`${PROXY_ENV_PREFIX}SERVER_CHECK_INTERVAL_MS`]),
|
|
315
|
+
onChange,
|
|
316
|
+
}),
|
|
317
|
+
}),
|
|
318
|
+
};
|
|
263
319
|
}
|
|
264
320
|
//# sourceMappingURL=proxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/commands/mcp/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/commands/mcp/proxy.ts"],"names":[],"mappings":"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"}
|