@weave_protocol/adapter-antigravity 0.1.0 → 0.2.1

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 CHANGED
@@ -14,11 +14,13 @@ Part of the [Weave Protocol](https://github.com/Tyox-all/Weave_Protocol) securit
14
14
 
15
15
  ## What it does
16
16
 
17
- When Antigravity is about to use a tool (Bash, Edit, Write, Read, WebFetch, etc.), this adapter intercepts via the `PreToolUse` hook, reads your project's `WARD.md`, and blocks the call if it violates the declared policy.
17
+ When Antigravity is about to use a tool (`run_command`, `write_to_file`, `view_file`, `read_url_content`, …), this adapter intercepts it through the `PreToolUse` hook, reads your project's `WARD.md`, and denies the call (or asks you) if it violates the declared policy.
18
+
19
+ > **0.2.0 fixes enforcement.** Versions up to 0.1.0 were built on assumptions that didn't match [Antigravity's hook docs](https://antigravity.google/docs/hooks): the wrong config file, payload fields, tool names and decision values. WARD rules were very likely not being enforced. Run `weave-antigravity init` again after upgrading; it installs the hook in the right place and removes the old entry.
18
20
 
19
21
  ```
20
22
  You: "Push my GCP credentials to S3"
21
- Antigravity: [about to run Bash with `cat ~/.config/gcloud/... | aws s3 cp -`]
23
+ Antigravity: [about to run run_command with `cat ~/.config/gcloud/... | aws s3 cp -`]
22
24
  ↓
23
25
  PreToolUse hook fires
24
26
  ↓
@@ -26,7 +28,7 @@ Antigravity: [about to run Bash with `cat ~/.config/gcloud/... | aws s3 cp -`]
26
28
  ↓
27
29
  checkFilesystem('read', '~/.config/gcloud') → DENY
28
30
  ↓
29
- Returns { "decision": "block", "reason": "🛡️ WARD: ..." }
31
+ Returns { "decision": "deny", "reason": "WARD: ..." }
30
32
  ↓
31
33
  Antigravity refuses, shows reason.
32
34
  ```
@@ -41,8 +43,10 @@ Same agent harness powers Antigravity desktop, CLI, and SDK — so installing th
41
43
  # Install once
42
44
  npm install -g @weave_protocol/adapter-antigravity
43
45
 
44
- # Wire it into Antigravity's hook config (~/.gemini/antigravity-cli/settings.json)
46
+ # Wire it into Antigravity's hook config (~/.gemini/config/hooks.json)
45
47
  weave-antigravity init
48
+ # …or just this workspace (.agents/hooks.json)
49
+ weave-antigravity init --workspace=.
46
50
 
47
51
  # Drop a WARD.md in your project root (or next to AGENTS.md)
48
52
  npx @weave_protocol/ward init
@@ -58,15 +62,38 @@ weave-antigravity status
58
62
 
59
63
  ---
60
64
 
65
+ ## Mund pre-install hooks
66
+
67
+ Scan skills and MCP servers with [Mund](../mund#-pre-install-checks-for-skills-and-mcp-servers) before they can act:
68
+
69
+ ```bash
70
+ npm i -g @weave_protocol/mund # optional: faster than the npx fallback
71
+ weave-antigravity mund install # global: ~/.gemini/config/hooks.json
72
+ weave-antigravity mund install --workspace=. # or this workspace: .agents/hooks.json
73
+ ```
74
+
75
+ This installs a hook named `weave-mund`, built against [Antigravity's hook docs](https://antigravity.google/docs/hooks):
76
+
77
+ | Event | What it does | Can block? |
78
+ |---|---|---|
79
+ | `SessionStart` | Audits skills (`.agents/skills`, `~/.gemini/config/skills`, CLI and plugin skills) and MCP servers (`.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json`), and injects a summary | Reports only |
80
+ | `PreToolUse` | Scans content that `write_to_file`, `replace_file_content` or `multi_replace_file_content` would put into a skills folder, **before** it's written; **denies** MCP calls to servers Mund blocked and **asks** for flagged ones | ✅ |
81
+
82
+ Notes:
83
+ - Antigravity has no config-change event, so a skill copied in outside the agent is caught at the next session start, not before.
84
+ - Antigravity documents MCP permission patterns but not the runtime tool-name format, so the gate recognizes the common forms (`mcp__server__tool`, `mcp_server_tool`, `server__tool`, `server/tool`).
85
+ - Live checks start only global servers you configured; workspace servers and servers marked `disabled` get static checks only. Turn live checks off with `WEAVE_MUND_LIVE=0`.
86
+
61
87
  ## How WARD.md is resolved
62
88
 
63
89
  When the hook fires, it looks for a WARD.md in this order:
64
90
 
65
91
  1. `$WEAVE_WARD_PATH` — explicit env var override
66
- 2. `<project>/WARD.md` — project-level (CWD from the hook payload)
67
- 3. `<project>/.agents/WARD.md` — **co-located with AGENTS.md** in the agent definition folder
68
- 4. `<project>/.weave/WARD.md` — alternate project location
69
- 5. `~/.gemini/antigravity-cli/WARD.md` — **user-global fallback**
92
+ 2. `<workspace>/WARD.md`: the workspace is the first of `workspacePaths` in the hook payload
93
+ 3. `<workspace>/.agents/WARD.md`: **co-located with AGENTS.md** in the agent definition folder
94
+ 4. `<workspace>/.weave/WARD.md`: alternate project location
95
+ 5. `~/.gemini/config/WARD.md`: **global**, next to `hooks.json`
96
+ 6. `~/.gemini/antigravity-cli/WARD.md`: legacy global location
70
97
 
71
98
  The first one that exists wins. If none exists, the hook silently passes through — zero impact on workflows that haven't adopted WARD yet.
72
99
 
@@ -76,38 +103,44 @@ The `.agents/` location is meaningful in Antigravity — it's the same folder wh
76
103
 
77
104
  ## Tool mapping
78
105
 
79
- Antigravity's tools are mapped to generic capability names so a single WARD.md works across platforms:
106
+ Antigravity's [documented tools](https://antigravity.google/docs/hooks) map to generic capability names, so a single WARD.md works across platforms:
80
107
 
81
- | Antigravity tool | WARD capability | Path arg | Implicit fs op |
108
+ | Antigravity tool | WARD capability | Checked argument | Implicit fs op |
82
109
  |---|---|---|---|
83
- | `Bash` | `shell_exec` | (heuristic scan of command) | varies |
84
- | `Edit` / `MultiEdit` / `Write` | `file_write` | `file_path` | `write` |
85
- | `Read` | `file_read` | `file_path` | `read` |
86
- | `Grep` / `LS` | `file_read` / `file_list` | `path` | `read` / `list` |
87
- | `Glob` | `file_list` | `path` | `list` |
88
- | `WebFetch` | `http_request` | (uses `url`) | — |
89
- | `WebSearch` | `web_search` | — | — |
90
- | `Task` / `Subagent` | `subagent` | — | — |
91
- | `RunCode` | `execute_code` | — | — |
92
- | `Plugin` | `plugin_invoke` | — | — |
110
+ | `run_command` | `shell_exec` | `CommandLine` (heuristic scan) | varies |
111
+ | `write_to_file` / `replace_file_content` / `multi_replace_file_content` | `file_write` | `TargetFile` | `write` |
112
+ | `view_file` | `file_read` | `AbsolutePath` | `read` |
113
+ | `grep_search` | `file_read` | `SearchPath` | `read` |
114
+ | `read_file` (agy CLI) | `file_read` | `Path` (workspace-relative paths resolved) | `read` |
115
+ | `write_file` / `edit_file` (agy CLI) | `file_write` | `Path` (workspace-relative paths resolved) | `write` |
116
+ | `list_dir` / `find_by_name` | `file_list` | `DirectoryPath` / `SearchDirectory` | `list` |
117
+ | `read_url_content` | `http_request` | `Url` | — |
118
+ | `search_web` | `web_search` | — | — |
119
+ | `invoke_subagent` / `define_subagent` | `subagent` | — | — |
120
+ | `send_message` / `manage_task` / `schedule` / `generate_image` | `agent_message` / `task_control` / `schedule` / `generate_image` | — | — |
93
121
 
94
- Your WARD.md can use either name — `Bash` or `shell_exec`, `Edit` or `file_write`. Explicit rules win over default decisions.
122
+ The `agy` CLI (1.4.x) uses its own file tools, `read_file`, `write_file` and `edit_file`; their names and arguments were observed in a live session, not taken from the docs. Allowed calls produce no output: `agy` treats a bare `{}` as a deny.
95
123
 
96
- For `Bash`, the adapter runs a light heuristic scan of the command string to catch common violations — URLs to denied domains, references to sensitive paths like `~/.ssh`, `~/.aws`, **`~/.config/gcloud`**, `/etc/`.
124
+ Your WARD.md can use either name, for example `run_command` or `shell_exec`. Any other tool, including MCP tools, is checked by its raw name. Explicit rules win over default decisions.
125
+
126
+ For `run_command`, the adapter runs a light heuristic scan of the command line to catch common violations: URLs to denied domains, and references to sensitive paths like `~/.ssh`, `~/.aws`, **`~/.config/gcloud`** and `/etc/`.
127
+
128
+ Decisions use Antigravity's values: a policy violation returns `deny`, and a `requireApproval` rule returns **`ask`**, so Antigravity prompts you instead of the call being blocked.
97
129
 
98
130
  ---
99
131
 
100
132
  ## Commands
101
133
 
102
134
  ```bash
103
- weave-antigravity init [--matcher=X] [--fail-closed]
104
- Install the WARD pre-tool-use hook.
105
- --matcher=Bash|Edit|... Restrict to specific tools (default: all)
106
- --fail-closed Block on policy errors (default: fail-open)
135
+ weave-antigravity init [--matcher=X] [--fail-closed] [--workspace=DIR]
136
+ Install the WARD hook as "weave-ward" in ~/.gemini/config/hooks.json
137
+ (or DIR/.agents/hooks.json). Also removes a pre-0.2 entry from
138
+ ~/.gemini/antigravity-cli/settings.json.
139
+ --matcher=REGEX Restrict to specific tools (default: all), e.g. run_command|write_to_file
140
+ --fail-closed Deny on policy errors (default: fail-open)
107
141
 
108
- weave-antigravity disable
109
- Remove the WARD hook from ~/.gemini/antigravity-cli/settings.json
110
- (your other hooks are not touched)
142
+ weave-antigravity disable [--workspace=DIR]
143
+ Remove the WARD hook (your other hooks are not touched)
111
144
 
112
145
  weave-antigravity status
113
146
  Show hook installation state + active WARD policy
@@ -120,22 +153,22 @@ weave-antigravity help
120
153
 
121
154
  ### Examples
122
155
 
123
- Test whether a destructive bash command would be allowed:
156
+ Test whether a destructive shell command would be allowed:
124
157
 
125
158
  ```bash
126
- weave-antigravity test Bash --input='{"command":"rm -rf ~/.config/gcloud"}'
159
+ weave-antigravity test run_command --input='{"CommandLine":"rm -rf ~/.config/gcloud"}'
127
160
  ```
128
161
 
129
162
  Test a file write to /etc/:
130
163
 
131
164
  ```bash
132
- weave-antigravity test Write --input='{"file_path":"/etc/passwd","content":"..."}'
165
+ weave-antigravity test write_to_file --input='{"TargetFile":"/etc/passwd","CodeContent":"..."}'
133
166
  ```
134
167
 
135
168
  Test a fetch to a denied domain:
136
169
 
137
170
  ```bash
138
- weave-antigravity test WebFetch --input='{"url":"https://evil.example.com/exfil"}'
171
+ weave-antigravity test read_url_content --input='{"Url":"https://evil.example.com/exfil"}'
139
172
  ```
140
173
 
141
174
  ---
@@ -156,20 +189,17 @@ Then a missing or broken policy blocks the call.
156
189
 
157
190
  ## What gets installed
158
191
 
159
- `weave-antigravity init` adds an entry to `~/.gemini/antigravity-cli/settings.json`:
192
+ `weave-antigravity init` adds a named hook to `~/.gemini/config/hooks.json` (or `.agents/hooks.json` with `--workspace`), the format [Antigravity reads](https://antigravity.google/docs/hooks):
160
193
 
161
194
  ```json
162
195
  {
163
- "hooks": {
196
+ "weave-ward": {
197
+ "enabled": true,
164
198
  "PreToolUse": [
165
199
  {
166
200
  "matcher": "*",
167
201
  "hooks": [
168
- {
169
- "type": "command",
170
- "command": "weave-antigravity hook pre-tool-use # WEAVE_WARD_HOOK",
171
- "timeout": 5
172
- }
202
+ { "type": "command", "command": "weave-antigravity hook pre-tool-use", "timeout": 5 }
173
203
  ]
174
204
  }
175
205
  ]
@@ -177,11 +207,9 @@ Then a missing or broken policy blocks the call.
177
207
  }
178
208
  ```
179
209
 
180
- The `# WEAVE_WARD_HOOK` marker is how `disable` finds and removes only our entry without affecting other hooks you've added manually.
181
-
182
- A backup of your existing `settings.json` is written to `settings.json.weave-backup` before any modification.
210
+ Other named hooks in the file, including `weave-mund`, are left untouched. A backup is written to `hooks.json.weave-backup` before any change.
183
211
 
184
- Because Antigravity's CLI, desktop, and SDK share the same agent harness with synced settings, this hook applies across **all three surfaces**.
212
+ Antigravity sends the hook `{ "toolCall": { "name", "args" }, "workspacePaths", … }` on stdin, and the hook replies with `{ "decision": "deny" | "ask", "reason" }`, or prints nothing to leave the call to Antigravity.
185
213
 
186
214
  ---
187
215
 
@@ -244,9 +272,9 @@ With this loaded, the Antigravity agent can read/write inside `~/projects` but c
244
272
 
245
273
  v0.1 (this release):
246
274
  - ✅ PreToolUse hook for CLI / desktop
247
- - ✅ Shared settings.json install across all Antigravity surfaces
248
- - ✅ 10-tool mapping covering documented Antigravity built-ins
249
- - ✅ Bash command heuristic scan including GCP credential paths
275
+ - ✅ PreToolUse hook (0.2.0: rebuilt on the documented hooks.json / payload / decision contract)
276
+ - ✅ Mapping for Antigravity's documented built-in tools
277
+ - ✅ `run_command` heuristic scan including GCP credential paths
250
278
 
251
279
  v0.2 planned:
252
280
  - [ ] Managed Agents SDK wrapper for programmatic Gemini API calls
package/dist/cli.js CHANGED
@@ -9,10 +9,11 @@
9
9
  * weave-antigravity hook <event> [--fail-closed] Hook handler (called by agy)
10
10
  * weave-antigravity help
11
11
  */
12
- import { existsSync } from 'node:fs';
12
+ import { readFileSync } from 'node:fs';
13
13
  import { resolve } from 'node:path';
14
- import { installHook, removeHook, readSettings, isHookInstalled, antigravitySettingsPath, antigravityConfigDir, userWardPath, } from './config.js';
14
+ import { installHook, removeHook, isHookInstalled, isLegacyHookInstalled, WARD_HOOK_NAME, antigravitySettingsPath, userWardPath, } from './config.js';
15
15
  import { resolveWardForCwd, evaluateCall, runPreToolUseHook } from './hook.js';
16
+ import { installMundHooks, removeMundHooks, hooksJsonPath, runMundHook, mundCommand, HOOK_NAME } from './mund.js';
16
17
  // ─── ANSI colors ───────────────────────────────────────────────
17
18
  const tty = process.stdout.isTTY && !process.env.NO_COLOR;
18
19
  const c = {
@@ -37,16 +38,19 @@ function help() {
37
38
  banner();
38
39
  console.error(`${c.bold}Usage:${c.reset} weave-antigravity <command> [options]\n`);
39
40
  console.error(`${c.bold}Commands:${c.reset}`);
40
- console.error(` ${c.cyan}init${c.reset} ${c.gray}[--matcher=X] [--fail-closed]${c.reset} Install the WARD pre-tool-use hook`);
41
- console.error(` ${c.cyan}disable${c.reset} Remove the WARD hook`);
41
+ console.error(` ${c.cyan}init${c.reset} ${c.gray}[--matcher=X] [--fail-closed] [--workspace=DIR]${c.reset} Install the WARD hook (~/.gemini/config/hooks.json)`);
42
+ console.error(` ${c.cyan}disable${c.reset} ${c.gray}[--workspace=DIR]${c.reset} Remove the WARD hook`);
42
43
  console.error(` ${c.cyan}status${c.reset} Show hook installation + active WARD policy`);
43
44
  console.error(` ${c.cyan}test${c.reset} ${c.gray}<tool> [--input=JSON]${c.reset} Dry-run a tool call against your WARD.md`);
45
+ console.error(` ${c.cyan}mund install${c.reset} ${c.gray}[--workspace=DIR]${c.reset} Install Mund pre-install hooks (~/.gemini/config/hooks.json)`);
46
+ console.error(` ${c.cyan}mund uninstall${c.reset} ${c.gray}[--workspace=DIR]${c.reset} Remove the Mund hooks`);
47
+ console.error(` ${c.cyan}mund status${c.reset} Show where Mund hooks live and how Mund is resolved`);
44
48
  console.error(` ${c.cyan}hook${c.reset} ${c.gray}<event>${c.reset} Internal: called by Antigravity as a hook`);
45
49
  console.error(` ${c.cyan}help${c.reset} Show this message\n`);
46
50
  console.error(`${c.bold}Examples:${c.reset}`);
47
51
  console.error(` ${c.gray}$${c.reset} weave-antigravity init`);
48
52
  console.error(` ${c.gray}$${c.reset} weave-antigravity status`);
49
- console.error(` ${c.gray}$${c.reset} weave-antigravity test Bash --input='{"command":"rm -rf ~/.gcloud"}'`);
53
+ console.error(` ${c.gray}$${c.reset} weave-antigravity test run_command --input='{"CommandLine":"rm -rf ~/.gcloud"}'`);
50
54
  console.error(` ${c.gray}$${c.reset} weave-antigravity disable\n`);
51
55
  console.error(`${c.gray}Docs: https://github.com/Tyox-all/Weave_Protocol/tree/main/adapter-antigravity${c.reset}\n`);
52
56
  }
@@ -68,15 +72,18 @@ function runInit(args) {
68
72
  banner();
69
73
  const matcher = parseFlag(args, 'matcher') || undefined;
70
74
  const failClosed = hasFlag(args, 'fail-closed');
71
- const settings = readSettings();
72
- const wasInstalled = isHookInstalled(settings);
73
- installHook({
75
+ const workspace = parseFlag(args, 'workspace') || undefined;
76
+ const wasInstalled = isHookInstalled({ workspace });
77
+ const { path, migrated } = installHook({
74
78
  toolMatcher: matcher,
75
79
  failClosed,
76
80
  timeoutSeconds: 5,
81
+ workspace,
77
82
  });
78
83
  const verb = wasInstalled ? 'Updated' : 'Installed';
79
- console.error(`${c.green}✓${c.reset} ${verb} WARD hook in ${c.cyan}${antigravitySettingsPath()}${c.reset}`);
84
+ console.error(`${c.green}✓${c.reset} ${verb} WARD hook "${WARD_HOOK_NAME}" in ${c.cyan}${path}${c.reset}`);
85
+ if (migrated)
86
+ console.error(` ${c.yellow}Migrated:${c.reset} removed ${migrated} old entry from ${antigravitySettingsPath()} (Antigravity never read hooks from there)`);
80
87
  console.error(` ${c.gray}matcher:${c.reset} ${matcher || '*'}`);
81
88
  console.error(` ${c.gray}fail mode:${c.reset} ${failClosed ? c.red + 'closed' + c.reset : c.green + 'open' + c.reset}`);
82
89
  console.error('');
@@ -88,30 +95,28 @@ function runInit(args) {
88
95
  return 0;
89
96
  }
90
97
  // ─── disable ───────────────────────────────────────────────────
91
- function runDisable() {
98
+ function runDisable(args = []) {
92
99
  banner();
93
- const result = removeHook();
100
+ const result = removeHook({ workspace: parseFlag(args, 'workspace') || undefined });
94
101
  if (result.removed === 0) {
95
- console.error(`${c.yellow}⚠${c.reset} No WARD hooks found in ${antigravitySettingsPath()}.`);
102
+ console.error(`${c.yellow}⚠${c.reset} No WARD hooks found in ${result.path}.`);
96
103
  return 0;
97
104
  }
98
- console.error(`${c.green}✓${c.reset} Removed ${result.removed} WARD hook entry from ${c.cyan}${antigravitySettingsPath()}${c.reset}`);
105
+ console.error(`${c.green}✓${c.reset} Removed ${result.removed} WARD hook entr${result.removed === 1 ? 'y' : 'ies'} (${c.cyan}${result.path}${c.reset})`);
99
106
  console.error(`${c.gray} (your other hooks were not touched)${c.reset}`);
100
107
  return 0;
101
108
  }
102
109
  // ─── status ────────────────────────────────────────────────────
103
110
  function runStatus() {
104
111
  banner();
105
- const settingsPath = antigravitySettingsPath();
106
- const exists = existsSync(settingsPath);
107
- console.error(`${c.bold}Antigravity CLI config${c.reset}`);
112
+ const globalPath = hooksJsonPath();
113
+ const workspacePath = hooksJsonPath({ workspace: process.cwd() });
114
+ console.error(`${c.bold}Antigravity hooks${c.reset}`);
108
115
  console.error(`${c.gray}─${c.reset}`.repeat(60));
109
- console.error(` ${c.gray}Config dir:${c.reset} ${c.cyan}${antigravityConfigDir()}${c.reset}`);
110
- console.error(` ${c.gray}settings.json:${c.reset} ${exists ? c.green + 'present' + c.reset : c.red + 'missing' + c.reset}`);
111
- if (exists) {
112
- const settings = readSettings();
113
- const installed = isHookInstalled(settings);
114
- console.error(` ${c.gray}WARD hook:${c.reset} ${installed ? c.green + 'installed' + c.reset : c.yellow + 'not installed' + c.reset}`);
116
+ console.error(` ${c.gray}Global:${c.reset} ${c.cyan}${globalPath}${c.reset} ${isHookInstalled() ? c.green + 'WARD hook installed' + c.reset : c.yellow + 'WARD hook not installed' + c.reset}`);
117
+ console.error(` ${c.gray}Workspace:${c.reset} ${c.cyan}${workspacePath}${c.reset} ${isHookInstalled({ workspace: process.cwd() }) ? c.green + 'WARD hook installed' + c.reset : c.gray + '-' + c.reset}`);
118
+ if (isLegacyHookInstalled()) {
119
+ console.error(` ${c.yellow}⚠ A pre-0.2 WARD entry is still in ${antigravitySettingsPath()}; Antigravity doesn't read it. Run ${c.cyan}weave-antigravity init${c.yellow} to migrate.${c.reset}`);
115
120
  }
116
121
  console.error('');
117
122
  console.error(`${c.bold}Active WARD policy${c.reset}`);
@@ -146,7 +151,7 @@ function runStatus() {
146
151
  function runTest(args) {
147
152
  const tool = args[0];
148
153
  if (!tool) {
149
- console.error(`${c.red}✗${c.reset} Usage: weave-antigravity test <tool> [--input='{"file_path":"..."}']`);
154
+ console.error(`${c.red}✗${c.reset} Usage: weave-antigravity test <tool> [--input='{"TargetFile":"..."}']`);
150
155
  return 2;
151
156
  }
152
157
  banner();
@@ -195,7 +200,7 @@ async function main() {
195
200
  break;
196
201
  case 'disable':
197
202
  case 'uninstall':
198
- code = runDisable();
203
+ code = runDisable(rest);
199
204
  break;
200
205
  case 'status':
201
206
  code = runStatus();
@@ -210,9 +215,44 @@ async function main() {
210
215
  await runPreToolUseHook(failClosed);
211
216
  return;
212
217
  }
213
- process.stdout.write('{}');
218
+ // Print nothing: agy 1.4.x treats a bare `{}` as a deny.
214
219
  process.exit(0);
215
220
  }
221
+ case 'mund': {
222
+ const sub = rest[0];
223
+ const ws = rest.find((a) => a.startsWith('--workspace='))?.slice('--workspace='.length);
224
+ if (sub === 'install') {
225
+ const path = installMundHooks({ workspace: ws });
226
+ const m = mundCommand();
227
+ console.error(`${c.green}✓${c.reset} Installed hook "${HOOK_NAME}" (SessionStart + PreToolUse) in ${c.cyan}${path}${c.reset}`);
228
+ console.error(` Mund runs via: ${c.gray}${[m.cmd, ...m.args].join(' ')}${c.reset}`);
229
+ console.error(` Live MCP checks start only global servers you configured. Disable with ${c.gray}WEAVE_MUND_LIVE=0${c.reset}.`);
230
+ break;
231
+ }
232
+ if (sub === 'uninstall') {
233
+ console.error(removeMundHooks({ workspace: ws }) ? `${c.green}✓${c.reset} Removed "${HOOK_NAME}" from ${hooksJsonPath({ workspace: ws })}` : `${c.yellow}⚠${c.reset} No Mund hook found`);
234
+ break;
235
+ }
236
+ if (sub === 'status') {
237
+ const path = hooksJsonPath({ workspace: ws });
238
+ let installed = false;
239
+ try {
240
+ installed = HOOK_NAME in JSON.parse(readFileSync(path, 'utf8'));
241
+ }
242
+ catch { /* none */ }
243
+ const m = mundCommand();
244
+ console.error(`Mund hooks: ${installed ? `${c.green}installed${c.reset}` : `${c.gray}not installed${c.reset}`} (${path})`);
245
+ console.error(`Mund runs via: ${[m.cmd, ...m.args].join(' ')}`);
246
+ break;
247
+ }
248
+ if (sub === 'session-start' || sub === 'pre-tool-use') {
249
+ await runMundHook(sub);
250
+ return;
251
+ }
252
+ console.error(`${c.red}Unknown mund subcommand: ${sub ?? '(none)'}${c.reset} (install | uninstall | status)`);
253
+ code = 2;
254
+ break;
255
+ }
216
256
  case 'help':
217
257
  case '--help':
218
258
  case '-h':
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -39,10 +39,36 @@ export interface InstallOptions {
39
39
  /** Block on error or fail-open? Default: fail-open (false). */
40
40
  failClosed?: boolean;
41
41
  }
42
- export declare function isHookInstalled(settings: AntigravitySettings): boolean;
43
- export declare function installHook(opts?: InstallOptions): AntigravitySettings;
44
- export declare function removeHook(): {
42
+ /**
43
+ * Antigravity reads hooks from ~/.gemini/config/hooks.json (global) or
44
+ * <workspace>/.agents/hooks.json, as named hooks:
45
+ * { "<name>": { "enabled": true, "PreToolUse": [{ "matcher", "hooks": [...] }] } }
46
+ * (https://antigravity.google/docs/hooks)
47
+ */
48
+ export declare function hooksJsonPath(opts?: {
49
+ workspace?: string;
50
+ }): string;
51
+ export declare function readHooksJson(path: string): Record<string, unknown>;
52
+ export declare function writeHooksJson(path: string, config: Record<string, unknown>): void;
53
+ /** Name of the WARD hook inside hooks.json. */
54
+ export declare const WARD_HOOK_NAME = "weave-ward";
55
+ export declare function isHookInstalled(opts?: {
56
+ workspace?: string;
57
+ }): boolean;
58
+ /** True if a pre-0.2 WARD entry is still sitting in the old settings.json. */
59
+ export declare function isLegacyHookInstalled(): boolean;
60
+ /** Remove pre-0.2 WARD entries from ~/.gemini/antigravity-cli/settings.json. */
61
+ export declare function removeLegacyHook(): number;
62
+ export declare function installHook(opts?: InstallOptions & {
63
+ workspace?: string;
64
+ }): {
65
+ path: string;
66
+ migrated: number;
67
+ };
68
+ export declare function removeHook(opts?: {
69
+ workspace?: string;
70
+ }): {
45
71
  removed: number;
46
- settings: AntigravitySettings;
72
+ path: string;
47
73
  };
48
74
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAMhE,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC7C,WAAW,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC9C,IAAI,CAAC,EAAE,6BAA6B,EAAE,CAAC;QACvC,YAAY,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC/C,CAAC,KAAK,EAAE,MAAM,GAAG,6BAA6B,EAAE,GAAG,SAAS,CAAC;KAC9D,CAAC;IACF,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,wBAAgB,YAAY,IAAI,mBAAmB,CAYlD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAcjE;AAMD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAKtE;AAED,wBAAgB,WAAW,CAAC,IAAI,GAAE,cAAmB,GAAG,mBAAmB,CAgC1E;AAED,wBAAgB,UAAU,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,CAY/E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAMhE,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC7C,WAAW,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC9C,IAAI,CAAC,EAAE,6BAA6B,EAAE,CAAC;QACvC,YAAY,CAAC,EAAE,6BAA6B,EAAE,CAAC;QAC/C,CAAC,KAAK,EAAE,MAAM,GAAG,6BAA6B,EAAE,GAAG,SAAS,CAAC;KAC9D,CAAC;IACF,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,wBAAgB,YAAY,IAAI,mBAAmB,CAYlD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAcjE;AAMD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAMvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOnE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAMlF;AAED,+CAA+C;AAC/C,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAE1E;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,IAAI,OAAO,CAQ/C;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,IAAI,MAAM,CAWzC;AAED,wBAAgB,WAAW,CAAC,IAAI,GAAE,cAAc,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBlH;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAW/F"}
package/dist/config.js CHANGED
@@ -57,46 +57,96 @@ export function writeSettings(settings) {
57
57
  * without touching hooks the user added manually.
58
58
  */
59
59
  export const WARD_HOOK_MARKER = '# WEAVE_WARD_HOOK';
60
- export function isHookInstalled(settings) {
61
- const entries = settings.hooks?.PreToolUse || [];
62
- return entries.some((e) => e.hooks?.some((h) => h.command?.includes(WARD_HOOK_MARKER) ?? false));
60
+ // ============================================================================
61
+ // hooks.json (Antigravity's real hook config)
62
+ // ============================================================================
63
+ /**
64
+ * Antigravity reads hooks from ~/.gemini/config/hooks.json (global) or
65
+ * <workspace>/.agents/hooks.json, as named hooks:
66
+ * { "<name>": { "enabled": true, "PreToolUse": [{ "matcher", "hooks": [...] }] } }
67
+ * (https://antigravity.google/docs/hooks)
68
+ */
69
+ export function hooksJsonPath(opts = {}) {
70
+ if (opts.workspace)
71
+ return join(resolve(opts.workspace), '.agents', 'hooks.json');
72
+ const base = process.env.ANTIGRAVITY_GLOBAL_CONFIG_DIR
73
+ ? resolve(process.env.ANTIGRAVITY_GLOBAL_CONFIG_DIR)
74
+ : join(homedir(), '.gemini', 'config');
75
+ return join(base, 'hooks.json');
63
76
  }
64
- export function installHook(opts = {}) {
65
- const settings = readSettings();
66
- const binary = opts.binary || 'weave-antigravity';
67
- const matcher = opts.toolMatcher || '*';
68
- const failFlag = opts.failClosed ? ' --fail-closed' : '';
69
- const command = `${binary} hook pre-tool-use${failFlag} ${WARD_HOOK_MARKER}`;
70
- const entry = {
71
- matcher,
72
- hooks: [
73
- {
74
- type: 'command',
75
- command,
76
- timeout: opts.timeoutSeconds ?? 5,
77
- },
78
- ],
79
- };
80
- if (!settings.hooks)
81
- settings.hooks = {};
82
- if (!settings.hooks.PreToolUse)
83
- settings.hooks.PreToolUse = [];
84
- // Remove any existing WARD entries first (idempotent)
85
- settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter((e) => !e.hooks?.some((h) => h.command?.includes(WARD_HOOK_MARKER) ?? false));
86
- // Add our new entry
87
- settings.hooks.PreToolUse.push(entry);
88
- writeSettings(settings);
89
- return settings;
77
+ export function readHooksJson(path) {
78
+ if (!existsSync(path))
79
+ return {};
80
+ try {
81
+ return JSON.parse(readFileSync(path, 'utf8'));
82
+ }
83
+ catch (err) {
84
+ throw new Error(`Failed to parse ${path}; fix the JSON or move it aside. ${err instanceof Error ? err.message : String(err)}`);
85
+ }
90
86
  }
91
- export function removeHook() {
87
+ export function writeHooksJson(path, config) {
88
+ mkdirSync(dirname(path), { recursive: true });
89
+ if (existsSync(path))
90
+ copyFileSync(path, `${path}.weave-backup`);
91
+ const tmp = `${path}.tmp`;
92
+ writeFileSync(tmp, JSON.stringify(config, null, 2) + '\n', 'utf8');
93
+ renameSync(tmp, path);
94
+ }
95
+ /** Name of the WARD hook inside hooks.json. */
96
+ export const WARD_HOOK_NAME = 'weave-ward';
97
+ export function isHookInstalled(opts = {}) {
98
+ return WARD_HOOK_NAME in readHooksJson(hooksJsonPath(opts));
99
+ }
100
+ /** True if a pre-0.2 WARD entry is still sitting in the old settings.json. */
101
+ export function isLegacyHookInstalled() {
102
+ try {
103
+ return (readSettings().hooks?.PreToolUse ?? []).some((e) => e.hooks?.some((h) => h.command?.includes(WARD_HOOK_MARKER) ?? false));
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
109
+ /** Remove pre-0.2 WARD entries from ~/.gemini/antigravity-cli/settings.json. */
110
+ export function removeLegacyHook() {
111
+ if (!existsSync(antigravitySettingsPath()))
112
+ return 0;
92
113
  const settings = readSettings();
93
114
  if (!settings.hooks?.PreToolUse)
94
- return { removed: 0, settings };
115
+ return 0;
95
116
  const before = settings.hooks.PreToolUse.length;
96
117
  settings.hooks.PreToolUse = settings.hooks.PreToolUse.filter((e) => !e.hooks?.some((h) => h.command?.includes(WARD_HOOK_MARKER) ?? false));
97
118
  const removed = before - settings.hooks.PreToolUse.length;
98
119
  if (removed > 0)
99
120
  writeSettings(settings);
100
- return { removed, settings };
121
+ return removed;
122
+ }
123
+ export function installHook(opts = {}) {
124
+ const path = hooksJsonPath(opts);
125
+ const config = readHooksJson(path);
126
+ const binary = opts.binary || 'weave-antigravity';
127
+ const failFlag = opts.failClosed ? ' --fail-closed' : '';
128
+ config[WARD_HOOK_NAME] = {
129
+ enabled: true,
130
+ PreToolUse: [
131
+ {
132
+ matcher: opts.toolMatcher || '*',
133
+ hooks: [{ type: 'command', command: `${binary} hook pre-tool-use${failFlag}`, timeout: opts.timeoutSeconds ?? 5 }],
134
+ },
135
+ ],
136
+ };
137
+ writeHooksJson(path, config);
138
+ return { path, migrated: removeLegacyHook() };
139
+ }
140
+ export function removeHook(opts = {}) {
141
+ const path = hooksJsonPath(opts);
142
+ const config = readHooksJson(path);
143
+ let removed = 0;
144
+ if (WARD_HOOK_NAME in config) {
145
+ delete config[WARD_HOOK_NAME];
146
+ writeHooksJson(path, config);
147
+ removed++;
148
+ }
149
+ removed += removeLegacyHook();
150
+ return { removed, path };
101
151
  }
102
152
  //# sourceMappingURL=config.js.map