@cybedefend/vibedefend 1.7.0 → 1.8.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.
Files changed (42) hide show
  1. package/README.md +22 -13
  2. package/dist/clients/antigravity.js +342 -0
  3. package/dist/clients/antigravity.js.map +1 -0
  4. package/dist/clients/registry.js +2 -0
  5. package/dist/clients/registry.js.map +1 -1
  6. package/dist/clients/windsurf.js +20 -8
  7. package/dist/clients/windsurf.js.map +1 -1
  8. package/dist/hook-runner.js +930 -227
  9. package/dist/hooks/install.js +1 -1
  10. package/dist/hooks/install.js.map +1 -1
  11. package/dist/hooks/runtime/antigravity-session.js +400 -0
  12. package/dist/hooks/runtime/antigravity-session.js.map +1 -0
  13. package/dist/hooks/runtime/emit.js +206 -0
  14. package/dist/hooks/runtime/emit.js.map +1 -1
  15. package/dist/hooks/runtime/exit-deadlock-guard.js +46 -0
  16. package/dist/hooks/runtime/exit-deadlock-guard.js.map +1 -0
  17. package/dist/hooks/runtime/fetch-rules.js +39 -3
  18. package/dist/hooks/runtime/fetch-rules.js.map +1 -1
  19. package/dist/hooks/runtime/pre-invocation.js +45 -0
  20. package/dist/hooks/runtime/pre-invocation.js.map +1 -0
  21. package/dist/hooks/runtime/runner-args.js +12 -0
  22. package/dist/hooks/runtime/runner-args.js.map +1 -0
  23. package/dist/hooks/runtime/session-activation.js +10 -4
  24. package/dist/hooks/runtime/session-activation.js.map +1 -1
  25. package/dist/hooks/runtime/session-review.js +42 -0
  26. package/dist/hooks/runtime/session-review.js.map +1 -1
  27. package/dist/hooks/runtime/session-start.js +21 -1
  28. package/dist/hooks/runtime/session-start.js.map +1 -1
  29. package/dist/hooks/runtime/sniff.js +345 -71
  30. package/dist/hooks/runtime/sniff.js.map +1 -1
  31. package/dist/hooks/runtime/work-dir.js +3 -0
  32. package/dist/hooks/runtime/work-dir.js.map +1 -1
  33. package/dist/hooks/shim.js +102 -5
  34. package/dist/hooks/shim.js.map +1 -1
  35. package/dist/install.js +17 -3
  36. package/dist/install.js.map +1 -1
  37. package/dist/json-file.js +6 -3
  38. package/dist/json-file.js.map +1 -1
  39. package/dist/shim.js +53 -3
  40. package/dist/utils.js +9 -0
  41. package/dist/utils.js.map +1 -1
  42. package/package.json +3 -2
@@ -1,3 +1,54 @@
1
+ /**
2
+ * Per-client output formatter.
3
+ *
4
+ * Every agent reads our hook's stdout differently, AND the same agent reads
5
+ * it differently per hook event. What each one documents (checked against
6
+ * each agent's hook reference, October 2026):
7
+ *
8
+ * - Claude Code: plain stdout reaches the model ONLY for SessionStart /
9
+ * UserPromptSubmit. PreToolUse context must travel in
10
+ * `hookSpecificOutput.additionalContext` (BACK-173). Stop reads
11
+ * `decision: "block"` + `reason`.
12
+ * - Codex: SessionStart and PreToolUse take the
13
+ * `{ hookSpecificOutput: { hookEventName, additionalContext } }` envelope
14
+ * (plain SessionStart stdout was observed not to surface; PreToolUse
15
+ * disregards plain stdout). Stop REQUIRES JSON — "plain text output is
16
+ * invalid" — and continues on `decision: "block"` with `reason` as the
17
+ * next prompt.
18
+ * - VS Code Copilot: two harnesses read the same `~/.copilot/hooks/` file
19
+ * and send the same payload, but read output differently. The default
20
+ * Copilot harness reads TOP-LEVEL fields (`additionalContext` on
21
+ * SessionStart, `decision`/`reason` on Stop, `permissionDecision` on
22
+ * PreToolUse) and treats anything that is not one JSON object as no
23
+ * output. The older Local harness reads only `hookSpecificOutput.*`.
24
+ * One object carrying both shapes reaches either harness exactly once.
25
+ * The Copilot harness has NO context field on PreToolUse.
26
+ * - Cursor: sessionStart reads `additional_context`; stop reads
27
+ * `followup_message` (sent as the next user message). preToolUse
28
+ * `agent_message` reaches the model only when the call is DENIED, and
29
+ * preCompact only reads `user_message` (shown to the user) — neither
30
+ * event can carry context to the model. preToolUse is a permission hook:
31
+ * invalid JSON there blocks the action, so never write plain text to it.
32
+ * - Windsurf: plain stdout (unchanged here).
33
+ * - Antigravity (BACK-241): a hook answers with its own `injectSteps` /
34
+ * `decision` shapes (see the Antigravity branches below), and NEVER
35
+ * with more than one JSON object: Antigravity BLOCKS the tool call
36
+ * when a PreToolUse hook crashes, times out, exits non-zero, or prints
37
+ * anything that is not exactly one JSON object on stdout. Every
38
+ * Antigravity write therefore goes through `writeAntigravityPayload`,
39
+ * which tracks, in module state, whether this run already wrote one,
40
+ * and `finishAntigravityRun` is the safety net the hook runner calls on
41
+ * every exit path so a crashed or silent run still answers `allow`.
42
+ * That one write goes synchronously to fd 1 (`writeStdoutSync`), never
43
+ * through `process.stdout`, so the runner can exit right after it.
44
+ *
45
+ * `emitContext` is the context-injection path for hooks whose body must
46
+ * reach the MODEL (session-start, fetch-rules). It takes the emitting hook's
47
+ * event name because the envelope's `hookEventName` MUST match the hook that
48
+ * produces it — a hardcoded value copied from one hook to another is exactly
49
+ * how a valid-looking payload gets silently ignored.
50
+ */
51
+ import { writeSync } from 'node:fs';
1
52
  /**
2
53
  * Which clients need the `hookSpecificOutput.additionalContext` envelope for
3
54
  * a given event. Everything not listed here keeps its plain-markdown (or
@@ -11,6 +62,11 @@
11
62
  const ENVELOPE_CLIENTS = {
12
63
  SessionStart: new Set(['codex']),
13
64
  PreToolUse: new Set(['claude-code', 'codex', 'vscode']),
65
+ // Antigravity never reaches this generic envelope: it has its own shapes
66
+ // per event, handled in `emitAntigravityContext` below. Kept as an empty
67
+ // set (rather than omitted) so `ENVELOPE_CLIENTS[hookEventName]` stays a
68
+ // total function over `ContextHookEvent`.
69
+ PreInvocation: new Set(),
14
70
  };
15
71
  /**
16
72
  * Client/event pairs where NO output field reaches the model, so the hook
@@ -31,6 +87,143 @@ const NO_MODEL_CHANNEL = {
31
87
  export function hasModelChannel(client, event) {
32
88
  return !NO_MODEL_CHANNEL[event]?.has(client);
33
89
  }
90
+ // ─── Antigravity (BACK-241) ────────────────────────────────────────────────
91
+ //
92
+ // Antigravity's contract is stricter than every other client's: exactly ONE
93
+ // JSON object on stdout per hook run, exit code 0, always — a crash, a
94
+ // timeout, a non-zero exit or a second object are all read as "block". That
95
+ // is enforced in two places:
96
+ // - here, with a per-run ledger (`antigravityWritten`) so a SECOND write
97
+ // in the same process (e.g. a hook that both emits context and later
98
+ // emits a Stop decision) is silently dropped instead of producing two
99
+ // objects;
100
+ // - in the hook runner's entry point (index.ts), which calls
101
+ // `finishAntigravityRun` on every exit path so a run that wrote nothing
102
+ // — because it crashed, or because the event has no Antigravity channel
103
+ // — still answers with a safe default.
104
+ //
105
+ // `resetAntigravityRunState` exists for tests only: production always starts
106
+ // a fresh process per hook run, so the ledger is naturally unset.
107
+ let antigravityWritten = false;
108
+ export function resetAntigravityRunState() {
109
+ antigravityWritten = false;
110
+ }
111
+ /**
112
+ * Writes `text` whole to fd 1, synchronously, and returns once every byte is
113
+ * in the pipe, so the hook runner can `process.exit(0)` on the next line
114
+ * (R4, the live check of 2026-10-22). Through `process.stdout`, a write to a
115
+ * pipe can still be queued when it returns (on macOS, past 64 KB), and the
116
+ * runner had to wait for a stream callback (an empty write's) before it
117
+ * could exit; this one leaves nothing queued and nothing to wait for. (The
118
+ * hang that live check found was `process.exit` itself: see
119
+ * exit-deadlock-guard.ts.)
120
+ *
121
+ * fd 1 can be non-blocking: Node makes a pipe non-blocking as soon as
122
+ * anything reads `process.stdout` (kleur does, at import), and the agent may
123
+ * hand one over that way. A full pipe then answers `EAGAIN`: the write is
124
+ * retried every 5 ms, for 2 s at most in total, then dropped. Any other
125
+ * error drops it too. Never throws: an answer that cannot be written is
126
+ * Antigravity's to read as a block, not a crash of ours.
127
+ *
128
+ * shim.ts carries a copy (it imports nothing of the runtime), pinned to
129
+ * behave the same by tests/e2e/stdout-sync.e2e.test.ts.
130
+ */
131
+ export function writeStdoutSync(text) {
132
+ const buf = Buffer.from(text, 'utf8');
133
+ const deadline = Date.now() + 2_000;
134
+ let pause;
135
+ let offset = 0;
136
+ while (offset < buf.length) {
137
+ let written = 0;
138
+ try {
139
+ written = writeSync(1, buf, offset, buf.length - offset);
140
+ }
141
+ catch (e) {
142
+ if (e?.code !== 'EAGAIN')
143
+ return;
144
+ }
145
+ offset += written;
146
+ if (written > 0)
147
+ continue;
148
+ if (Date.now() >= deadline)
149
+ return;
150
+ pause ??= new Int32Array(new SharedArrayBuffer(4));
151
+ Atomics.wait(pause, 0, 0, 5);
152
+ }
153
+ }
154
+ /**
155
+ * Where Antigravity's answer goes: `writeStdoutSync` (fd 1). For tests
156
+ * only, `setAntigravityWriter` sends it elsewhere — a synchronous write to
157
+ * fd 1 bypasses a spy on `process.stdout.write` — and `null` restores fd 1.
158
+ */
159
+ let antigravityWriter = writeStdoutSync;
160
+ export function setAntigravityWriter(writer) {
161
+ antigravityWriter = writer ?? writeStdoutSync;
162
+ }
163
+ /** The only function that writes to stdout for Antigravity. */
164
+ function writeAntigravityPayload(payload) {
165
+ if (antigravityWritten)
166
+ return;
167
+ antigravityWritten = true;
168
+ antigravityWriter(JSON.stringify(payload) + '\n');
169
+ }
170
+ /**
171
+ * Writes Antigravity's guard-check decision. Used by guard-check (Task 12)
172
+ * in place of the regex/judge verdict's generic `emitAgentMessage` path.
173
+ */
174
+ export function emitAntigravityDecision(decision, reason) {
175
+ writeAntigravityPayload({ decision, ...(reason ? { reason } : {}) });
176
+ }
177
+ /**
178
+ * The subcommands that gate a tool call (see `finishAntigravityRun`).
179
+ * Exported so the adapter's own command-builder (`antigravityHookCommand`)
180
+ * reads the SAME set when it decides which PreToolUse subcommands need the
181
+ * `{"decision":"allow"}` shell fallback instead of `{}` — one place names
182
+ * "the subcommands that gate a tool call", not two lists that can drift.
183
+ */
184
+ export const PRE_TOOL_USE_SUBCOMMANDS = new Set([
185
+ 'fetch-rules',
186
+ 'guard-check',
187
+ 'pre-tool-use',
188
+ 'PreToolUse',
189
+ ]);
190
+ /**
191
+ * The safety net: called by the hook runner on EVERY exit path of an
192
+ * Antigravity run (the normal path, a caught exception, and the guard-check
193
+ * path that would otherwise `process.exit(2)`). When nothing was written
194
+ * this run it writes a default answer — `{"decision":"allow"}` for the two
195
+ * hooks that gate a tool call (`fetch-rules` injects context before a write,
196
+ * `guard-check` decides whether it proceeds — and its aliases `pre-tool-use`
197
+ * / `PreToolUse`, which index.ts routes to the same guard), `{}` for every
198
+ * other subcommand, which Antigravity reads as "no action" for non-gating
199
+ * hooks. A run that already wrote (a decision, or a context shape below) is
200
+ * left alone — this is a fallback, never a second object.
201
+ */
202
+ export function finishAntigravityRun(subcommand) {
203
+ const payload = PRE_TOOL_USE_SUBCOMMANDS.has(subcommand)
204
+ ? { decision: 'allow' }
205
+ : {};
206
+ writeAntigravityPayload(payload);
207
+ }
208
+ /**
209
+ * Antigravity's context-injection shapes, one per event. SessionStart and
210
+ * PreInvocation both reach the model, but through different `injectSteps`
211
+ * entries (Antigravity's own vocabulary). PreToolUse has no documented
212
+ * context channel at all: this writes NOTHING and does not mark the run as
213
+ * written, so `finishAntigravityRun` still gets to answer `allow` for it.
214
+ */
215
+ function emitAntigravityContext(body, hookEventName) {
216
+ if (hookEventName === 'PreToolUse')
217
+ return;
218
+ if (hookEventName === 'SessionStart') {
219
+ writeAntigravityPayload({
220
+ injectSteps: [{ systemMessage: { systemMessage: body } }],
221
+ });
222
+ return;
223
+ }
224
+ // PreInvocation
225
+ writeAntigravityPayload({ injectSteps: [{ ephemeralMessage: body }] });
226
+ }
34
227
  /**
35
228
  * Plain-markdown context for the clients whose contract is plain stdout
36
229
  * (Claude Code SessionStart / UserPromptSubmit, Windsurf).
@@ -41,6 +234,10 @@ export function hasModelChannel(client, event) {
41
234
  export function emit(body, client) {
42
235
  if (!body)
43
236
  return;
237
+ if (client === 'antigravity') {
238
+ writeAntigravityPayload({ injectSteps: [{ ephemeralMessage: body }] });
239
+ return;
240
+ }
44
241
  if (client === 'cursor')
45
242
  return;
46
243
  process.stdout.write(body);
@@ -56,6 +253,10 @@ export function emit(body, client) {
56
253
  export function emitContext(body, client, hookEventName) {
57
254
  if (!body)
58
255
  return;
256
+ if (client === 'antigravity') {
257
+ emitAntigravityContext(body, hookEventName);
258
+ return;
259
+ }
59
260
  if (!hasModelChannel(client, hookEventName))
60
261
  return;
61
262
  // Cursor's sessionStart reads only `additional_context` ("added to the
@@ -125,6 +326,8 @@ export function emitSessionNotice(notice, client) {
125
326
  * - VS Code: top-level `decision`/`reason` (Copilot harness) plus the same
126
327
  * inside `hookSpecificOutput` (Local harness).
127
328
  * - Cursor: `followup_message`, submitted as the next user message.
329
+ * - Antigravity (BACK-241): `{ decision: "continue", reason }`, written
330
+ * once (`writeAntigravityPayload`).
128
331
  *
129
332
  * The non-Claude clients get the full `body` as the next prompt: they have
130
333
  * no per-prompt doctrine hook, so the concise reason would name tools
@@ -155,6 +358,9 @@ export function emitStop(body, client, reason) {
155
358
  case 'cursor':
156
359
  writeJson({ followup_message: body });
157
360
  return;
361
+ case 'antigravity':
362
+ writeAntigravityPayload({ decision: 'continue', reason: body });
363
+ return;
158
364
  default:
159
365
  emit(body, client);
160
366
  }
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/hooks/runtime/emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../../src/hooks/runtime/emit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Keeps an Antigravity run from hanging inside its own `process.exit`
3
+ * (BACK-241, R4). Imported FIRST by index.ts, so this runs before the rest
4
+ * of the runner loads.
5
+ *
6
+ * From Node 24 on, V8 compiles warm functions in the background (concurrent
7
+ * Sparkplug, Maglev). Such a job that runs out of heap parks and waits for
8
+ * the main thread to collect garbage. `process.exit` joins V8's worker
9
+ * threads without disposing the isolate first, so nothing ever runs that
10
+ * collection: the join waits for the parked job, the job for the main
11
+ * thread, and the process never exits. Node has not fixed it
12
+ * (https://github.com/nodejs/node/pull/66171, open as of 2026-10-22).
13
+ *
14
+ * Seen during the live check of 2026-10-22 on macOS with Node 25.6.1: a
15
+ * stack sample of a hung `pre-invocation` run shows the main thread in
16
+ * `WorkerThreadsTaskRunner::Shutdown` → `uv_thread_join`, and a
17
+ * `node-V8Worker` thread in `BaselineBatchCompilerJob::Compile` →
18
+ * `CollectionBarrier::AwaitCollectionBackground`. The run had printed its
19
+ * answer; Antigravity kills a hook after 10 s (PreInvocation) or 30 s
20
+ * (PreToolUse, where a kill counts as a deny). Whether it hangs depends on
21
+ * the heap at exit: the same bundle hung 24 runs out of 25 from the
22
+ * package's `dist/` and none from a copy in /tmp.
23
+ *
24
+ * With both compilers off, 0 hangs in 125 runs from `dist/`, and runs were
25
+ * no slower (a hook run is about 80 ms; there is nothing for those
26
+ * compilers to win there). Only an Antigravity run turns them off: Node
27
+ * has the same hang on every other client's exit, but changing their runs
28
+ * is outside BACK-241.
29
+ */
30
+ import { setFlagsFromString } from 'node:v8';
31
+ import { parseRunnerArgs } from './runner-args.js';
32
+ /** The V8 flags a run with this argv sets before anything else loads. */
33
+ export function exitDeadlockFlags(argv) {
34
+ if (parseRunnerArgs(argv).client !== 'antigravity')
35
+ return [];
36
+ return ['--no-concurrent-sparkplug', '--no-maglev'];
37
+ }
38
+ for (const flag of exitDeadlockFlags(process.argv.slice(2))) {
39
+ try {
40
+ setFlagsFromString(flag);
41
+ }
42
+ catch {
43
+ // A Node that refuses the flag runs as before.
44
+ }
45
+ }
46
+ //# sourceMappingURL=exit-deadlock-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-deadlock-guard.js","sourceRoot":"","sources":["../../../src/hooks/runtime/exit-deadlock-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,yEAAyE;AACzE,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IAC9D,OAAO,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,IAAI,CAAC;QACH,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC"}
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * Triggered by every agent on every tool call (Cursor and Claude Code
5
5
  * honour matchers; VS Code ignores matchers, so we self-filter; Windsurf
6
- * has its own pre_write_code event; Codex uses apply_patch). We early-exit
7
- * unless the tool name is in our interested set.
6
+ * has its own pre_write_code event; Codex uses apply_patch; Antigravity is
7
+ * wired with matcher `*`, since its tool names change with the model). We
8
+ * early-exit unless the tool name is in our interested set.
8
9
  *
9
10
  * `Bash` is in that set (BACK-173 follow-up): a shell command that writes
10
11
  * files — `cat > f <<EOF`, `sed -i`, `tee`, `cp`… — fetches the rules for
@@ -21,6 +22,7 @@ import { isSessionInactive, sessionFolderOf, } from './session-activation.js';
21
22
  import { emitContext, hasModelChannel } from './emit.js';
22
23
  import { loadRuntimeConfig, readStdinJson } from './config.js';
23
24
  import { projectDirForFile } from './work-dir.js';
25
+ import { conversationKey, recordEdit, stashContext } from './antigravity-session.js';
24
26
  /**
25
27
  * Production emitter: the rules body must reach the MODEL, and on Claude
26
28
  * Code / Codex a PreToolUse hook's plain stdout never does (BACK-173) — it
@@ -30,6 +32,27 @@ import { projectDirForFile } from './work-dir.js';
30
32
  function emitPreToolUseContext(body, client) {
31
33
  emitContext(body, client, 'PreToolUse');
32
34
  }
35
+ /**
36
+ * Default emitter when the caller supplies no `emitFn` override — what
37
+ * production actually runs. Every other client keeps `emitPreToolUseContext`
38
+ * unchanged; Antigravity alone diverts to the stash (BACK-241 Task 11): its
39
+ * PreToolUse run can never reach the model (`emitContext(…, 'antigravity',
40
+ * 'PreToolUse')` writes nothing, see emit.ts), so the
41
+ * combined body is kept per conversation instead of being dropped, and
42
+ * delivered at the model's next call by the PreInvocation hook
43
+ * (pre-invocation.ts, which drains it).
44
+ */
45
+ function defaultEmit(stdin, stateDir) {
46
+ return (body, client) => {
47
+ if (client === 'antigravity') {
48
+ const key = conversationKey(stdin);
49
+ if (key)
50
+ stashContext(key, body, stateDir);
51
+ return;
52
+ }
53
+ emitPreToolUseContext(body, client);
54
+ };
55
+ }
33
56
  const INTERESTED_TOOLS = new Set([
34
57
  'Edit',
35
58
  'Write',
@@ -44,10 +67,10 @@ export async function fetchRulesHook(deps = {}) {
44
67
  const resolveTok = deps.resolveTokenFn ?? resolveToken;
45
68
  const fetchRules = deps.fetchRulesFn ?? fetchBusinessRules;
46
69
  const fetchSecRules = deps.fetchSecurityRulesFn ?? fetchSecurityRules;
47
- const emitFn = deps.emitFn ?? emitPreToolUseContext;
48
70
  const usageNotifier = deps.usageNotifier ?? makeUsageNotifier();
49
71
  const stdin = await readStdin();
50
72
  const event = sniff(stdin);
73
+ const emitFn = deps.emitFn ?? defaultEmit(stdin, deps.antigravityStateDir);
51
74
  // Self-filter: ignore tool calls we don't care about. Crucial for
52
75
  // VS Code Copilot which ignores matchers and fires PreToolUse on
53
76
  // every tool call.
@@ -60,6 +83,19 @@ export async function fetchRulesHook(deps = {}) {
60
83
  // and logged, then dropped — the BACK-173 defect. See emit.ts.
61
84
  if (!hasModelChannel(event.client, 'PreToolUse'))
62
85
  return;
86
+ // Antigravity-only: record this edit for Task 13's end-of-session review
87
+ // BEFORE any of the early returns below — the review must count an edit
88
+ // even on a tool call that resolves no project (no config, no project, no
89
+ // token). `Bash` / `run_command` is deliberately excluded: a shell write
90
+ // is not one of the three edit tools the review counts.
91
+ if (event.client === 'antigravity' &&
92
+ (event.toolName === 'Write' ||
93
+ event.toolName === 'Edit' ||
94
+ event.toolName === 'MultiEdit')) {
95
+ const key = conversationKey(stdin);
96
+ if (key)
97
+ recordEdit(key, event.filePath, deps.antigravityStateDir);
98
+ }
63
99
  const config = loadConfig();
64
100
  if (!config)
65
101
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-rules.js","sourceRoot":"","sources":["../../../src/hooks/runtime/fetch-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-rules.js","sourceRoot":"","sources":["../../../src/hooks/runtime/fetch-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * PreInvocation hook — deliver Antigravity's stashed rules at its next
3
+ * model call (BACK-241 Task 11).
4
+ *
5
+ * Antigravity's PreToolUse hook has no documented channel to inject context
6
+ * into the model (see emit.ts): an `allow` answer — with or without
7
+ * a `reason` — never reaches it (probe, delta-pr70.md). `fetch-rules`
8
+ * therefore stashes whatever it would have delivered, per conversation
9
+ * (antigravity-session.ts `stashContext`), instead of dropping it.
10
+ *
11
+ * Antigravity's PreInvocation event fires before EVERY model call,
12
+ * independent of any tool call. This hook drains the conversation's stash
13
+ * and, when something was found, delivers it as ONE `ephemeralMessage`
14
+ * inject step (emitContext, 'PreInvocation') — the same single-write
15
+ * contract every other Antigravity hook keeps.
16
+ *
17
+ * Every other client's envelope has no `conversationId` + `workspacePaths`
18
+ * pair (`isAntigravityEnvelope`), so this hook is a silent no-op for them —
19
+ * it is only ever wired into Antigravity's own settings (Task 14).
20
+ */
21
+ import { isAntigravityEnvelope } from './sniff.js';
22
+ import { readStdinJson } from './config.js';
23
+ import { antigravityStateDir, conversationKey, drainContext, } from './antigravity-session.js';
24
+ import { emitContext } from './emit.js';
25
+ /**
26
+ * Joins several stashed bodies into one delivery — distinct rule bodies
27
+ * from distinct PreToolUse runs, not lines of a single one, so the
28
+ * separator mirrors a Markdown horizontal rule rather than a plain newline.
29
+ */
30
+ const STASH_SEPARATOR = '\n\n---\n\n';
31
+ export async function preInvocationHook(deps = {}) {
32
+ const readStdin = deps.readStdin ?? readStdinJson;
33
+ const stdin = await readStdin();
34
+ if (!isAntigravityEnvelope(stdin))
35
+ return;
36
+ const key = conversationKey(stdin);
37
+ if (!key)
38
+ return;
39
+ const dir = deps.stateDir ?? antigravityStateDir();
40
+ const bodies = drainContext(key, dir);
41
+ if (bodies.length === 0)
42
+ return;
43
+ emitContext(bodies.join(STASH_SEPARATOR), 'antigravity', 'PreInvocation');
44
+ }
45
+ //# sourceMappingURL=pre-invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pre-invocation.js","sourceRoot":"","sources":["../../../src/hooks/runtime/pre-invocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AASxC;;;;GAIG;AACH,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA0B,EAAE;IAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC;IAElD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAAE,OAAO;IAE1C,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO;IAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,mBAAmB,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,12 @@
1
+ export function parseRunnerArgs(argv) {
2
+ const subcommand = argv[0] ?? '';
3
+ let client = null;
4
+ for (let i = 1; i < argv.length - 1; i++) {
5
+ if (argv[i] === '--client' && argv[i + 1] === 'antigravity') {
6
+ client = 'antigravity';
7
+ break;
8
+ }
9
+ }
10
+ return { subcommand, client };
11
+ }
12
+ //# sourceMappingURL=runner-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-args.js","sourceRoot":"","sources":["../../../src/hooks/runtime/runner-args.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YAC5D,MAAM,GAAG,aAAa,CAAC;YACvB,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC"}
@@ -103,10 +103,11 @@ export function defaultInactiveSessionStore(file = defaultStoreFile(), now = Dat
103
103
  /**
104
104
  * The agent's session id, whatever the client calls it: `session_id`
105
105
  * (Claude Code, Codex), `sessionId` (VS Code), `conversation_id` (Cursor),
106
- * `trajectory_id` (Windsurf). Null when the payload carries none.
106
+ * `trajectory_id` (Windsurf), `conversationId` (Antigravity). Null when the
107
+ * payload carries none.
107
108
  */
108
109
  export function sessionIdOf(stdin) {
109
- for (const key of ['session_id', 'sessionId', 'conversation_id', 'trajectory_id']) {
110
+ for (const key of ['session_id', 'sessionId', 'conversation_id', 'trajectory_id', 'conversationId']) {
110
111
  const v = stdin[key];
111
112
  if (typeof v === 'string' && v.length > 0)
112
113
  return v;
@@ -117,10 +118,12 @@ export function sessionIdOf(stdin) {
117
118
  * The folder the agent is working in, which is where the project is looked
118
119
  * up. Not always the hook's own working directory: Cursor runs user-level
119
120
  * hooks (`~/.cursor/hooks.json`, where VibeDefend installs them) from
120
- * `~/.cursor/`, and VS Code Copilot does not document its default.
121
+ * `~/.cursor/`, Antigravity runs them from `~/.gemini/config` (BACK-241), and
122
+ * VS Code Copilot does not document its default.
121
123
  *
122
124
  * 1. Cursor: `workspace_roots[0]` (sent on every event), else
123
- * `$CURSOR_PROJECT_DIR`.
125
+ * `$CURSOR_PROJECT_DIR`. Antigravity: the first usable `workspacePaths`
126
+ * entry (sent on every event; its payload has no `cwd`).
124
127
  * 2. `cwd` from the payload (Claude Code, Codex, VS Code Copilot).
125
128
  * 3. The hook's working directory (Windsurf runs hooks from the workspace
126
129
  * root).
@@ -136,6 +139,9 @@ export function sessionFolderOf(stdin, client, env = process.env) {
136
139
  candidates.push(roots[0]);
137
140
  candidates.push(env.CURSOR_PROJECT_DIR);
138
141
  }
142
+ if (client === 'antigravity' && Array.isArray(stdin.workspacePaths)) {
143
+ candidates.push(...stdin.workspacePaths);
144
+ }
139
145
  candidates.push(stdin.cwd);
140
146
  for (const c of candidates) {
141
147
  const folder = absoluteFolder(c);
@@ -1 +1 @@
1
- {"version":3,"file":"session-activation.js","sourceRoot":"","sources":["../../../src/hooks/runtime/session-activation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-activation.js","sourceRoot":"","sources":["../../../src/hooks/runtime/session-activation.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ import { sniff, filePathFromPatch } from './sniff.js';
19
19
  import { emitStop } from './emit.js';
20
20
  import { loadRuntimeConfig, readStdinJson } from './config.js';
21
21
  import { DIRECT_PROPOSE_DIRECTIVES, resolveProposalMode, } from './proposal-mode.js';
22
+ import { conversationKey, isReviewed, markReviewed, readEdits, } from './antigravity-session.js';
22
23
  import { resolveProjectIdWithApi } from './resolve.js';
23
24
  import { defaultReviewSessionStore, } from './review-sessions.js';
24
25
  import { isSessionInactive, sessionFolderOf, sessionIdOf, } from './session-activation.js';
@@ -158,6 +159,47 @@ export async function sessionReviewHook(deps = {}) {
158
159
  return;
159
160
  if (!config.hooks.enableSessionReview)
160
161
  return;
162
+ // Antigravity (BACK-241 Task 13): no transcript format we can rely on —
163
+ // its Stop event carries no `transcript` / `transcript_path` at all — so
164
+ // the review is driven by the per-conversation edits ledger `fetch-rules`
165
+ // kept (Task 10/11) instead of scanning a transcript, and runs at most
166
+ // once per conversation (the `reviewed` marker), the Antigravity analogue
167
+ // of the transcript-sentinel de-dup every other client gets above.
168
+ if (event.client === 'antigravity') {
169
+ const key = conversationKey(stdin);
170
+ const stateDir = deps.antigravityStateDir;
171
+ if (!key || isReviewed(key, stateDir))
172
+ return;
173
+ let { count, files } = readEdits(key, stateDir);
174
+ // Dry-run override for hook-debug — pretend the session had N edits.
175
+ if (process.env.CYBEDEFEND_DRY_RUN === '1') {
176
+ count = parseInt(process.env.CYBEDEFEND_DRY_RUN_EDITS ?? '5', 10);
177
+ }
178
+ if (count === 0)
179
+ return;
180
+ if (count < resolveReviewThreshold(config))
181
+ return;
182
+ // As on every other client below: the hooks are machine-wide, so the
183
+ // review only runs in a folder that maps to a CybeDefend project.
184
+ const folder = sessionFolderOf(stdin, 'antigravity');
185
+ if (isSessionInactive(stdin, { store: deps.sessionStore, cwd: folder }))
186
+ return;
187
+ const { projectId } = await (deps.resolveProject ?? resolveProjectIdWithApi)(folder);
188
+ if (!projectId)
189
+ return;
190
+ const proposalMode = resolveProposalMode(config);
191
+ let body = composeReviewBody(count, 'antigravity', '', proposalMode);
192
+ // Default-on, same rule as below: an explicit `false` opts out.
193
+ const withDiffScan = config.hooks.enableDiffScan !== false;
194
+ if (withDiffScan) {
195
+ body +=
196
+ '\n' +
197
+ composeDiffScanBody(files.slice(0, CHANGED_FILES_MAX).map((f) => relativizePath(f, folder)));
198
+ }
199
+ emitFn(body, 'antigravity', composeStopReason(withDiffScan, proposalMode));
200
+ markReviewed(key, stateDir);
201
+ return;
202
+ }
161
203
  const transcript = loadTranscript(stdin, readTranscriptFile);
162
204
  // The Stop hook fires at the end of EVERY turn, on every client. Edits a
163
205
  // previous review already covered must not trigger it again, and a turn that