@a5c-ai/hooks-adapter-antigravity 5.1.1-staging.52898ebfc24f

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 ADDED
@@ -0,0 +1,21 @@
1
+ # @a5c-ai/hooks-adapter-antigravity
2
+
3
+ Google Antigravity CLI harness adapter for the hooks-adapter system.
4
+
5
+ Normalizes Antigravity's workflow-driven hook events into the unified babysitter hook protocol, enabling lifecycle hooks, session tracking, and plugin integration for the Antigravity CLI agent.
6
+
7
+ ## Adapter Family
8
+
9
+ `workflow-hook` — Antigravity uses workflow-driven orchestration rather than shell-script hooks.
10
+
11
+ ## Supported Events
12
+
13
+ | Native Event | Canonical Phase |
14
+ |---|---|
15
+ | BeforeToolSelection | turn.pre-tool-selection |
16
+ | BeforeModel | turn.pre-model |
17
+ | AfterModel | turn.post-model |
18
+ | BeforeAgent | session.pre-agent |
19
+ | AfterAgent | session.post-agent |
20
+ | BeforeTool | turn.pre-tool |
21
+ | AfterTool | turn.post-tool |
@@ -0,0 +1,3 @@
1
+ import type { AdapterCapabilities } from '@a5c-ai/hooks-adapter-core';
2
+ export declare function createAdapter(name?: string): AdapterCapabilities;
3
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAetE,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAA6B,GAAG,mBAAmB,CAuBtF"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAdapter = createAdapter;
4
+ const catalog_1 = require("@a5c-ai/atlas/catalog");
5
+ /**
6
+ * Creates the Antigravity CLI adapter capability descriptor.
7
+ *
8
+ * Reads capability data from the Atlas graph via the agent-catalog.
9
+ * Falls back to hardcoded defaults if the catalog is unavailable.
10
+ *
11
+ * Antigravity CLI is Google's successor to Gemini CLI. It uses a
12
+ * workflow-driven hook model (not shell-hook) and a SKILL.md plugin
13
+ * system. It is model-agnostic, supporting Gemini, Claude, and GPT.
14
+ */
15
+ const DEFAULT_ADAPTER_NAME = 'antigravity';
16
+ function createAdapter(name = DEFAULT_ADAPTER_NAME) {
17
+ const target = (0, catalog_1.getPluginTargetDescriptor)(name === 'antigravity' ? 'antigravity-cli' : name);
18
+ return {
19
+ name,
20
+ family: target?.hooksMuxFamily ?? 'workflow-hook',
21
+ sessionIdQuality: target?.sessionIdQuality ?? 'derived',
22
+ supportsOrderedFanout: target?.supportsOrderedFanout ?? true,
23
+ supportsNativeAdditionalContext: target?.supportsNativeAdditionalContext ?? true,
24
+ supportsBlock: target?.supportsBlock ?? true,
25
+ supportsAsk: target?.supportsAsk ?? true,
26
+ supportsToolInputMutation: target?.supportsToolInputMutation ?? true,
27
+ supportsToolResultMutation: target?.supportsToolResultMutation ?? false,
28
+ supportsPersistedEnv: target?.supportsPersistedEnv ?? false,
29
+ envPersistenceMode: target?.envPersistenceMode ?? 'wrapper_only',
30
+ toolInterceptionScope: target?.toolInterceptionScope ?? 'all',
31
+ notes: [
32
+ 'Workflow-driven hook model (successor to Gemini CLI shell-hook)',
33
+ 'SKILL.md plugin system with workflow, rules, and MCP integration',
34
+ 'Model-agnostic: Gemini 3.5 Flash (default), Claude Sonnet 4.6, GPT-OSS-120B',
35
+ 'Logs must go to stderr; final JSON to stdout only',
36
+ 'Session ID derived from ANTIGRAVITY_SESSION_ID env or workspace + timestamp',
37
+ ],
38
+ };
39
+ }
40
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":";;AAeA,sCAuBC;AArCD,mDAAkE;AAElE;;;;;;;;;GASG;AACH,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAE3C,SAAgB,aAAa,CAAC,OAAe,oBAAoB;IAC/D,MAAM,MAAM,GAAG,IAAA,mCAAyB,EAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5F,OAAO;QACL,IAAI;QACJ,MAAM,EAAG,MAAM,EAAE,cAAgD,IAAI,eAAe;QACpF,gBAAgB,EAAG,MAAM,EAAE,gBAA4D,IAAI,SAAS;QACpG,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,IAAI,IAAI;QAC5D,+BAA+B,EAAE,MAAM,EAAE,+BAA+B,IAAI,IAAI;QAChF,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,IAAI;QAC5C,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI;QACxC,yBAAyB,EAAE,MAAM,EAAE,yBAAyB,IAAI,IAAI;QACpE,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,IAAI,KAAK;QACvE,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,IAAI,KAAK;QAC3D,kBAAkB,EAAG,MAAM,EAAE,kBAAgE,IAAI,cAAc;QAC/G,qBAAqB,EAAG,MAAM,EAAE,qBAAsE,IAAI,KAAK;QAC/G,KAAK,EAAE;YACL,iEAAiE;YACjE,kEAAkE;YAClE,6EAA6E;YAC7E,mDAAmD;YACnD,6EAA6E;SAC9E;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { createAdapter } from './adapter';
2
+ export { ANTIGRAVITY_PHASE_MAPPINGS, getAntigravityPhaseMapping, getSupportedPhases } from './mappings';
3
+ export { normalizeAntigravity, parseStdin, buildExecutionContext, buildPayload, setAdapterName } from './normalizer';
4
+ export { normalizeAntigravity as normalizeForInvoke } from './normalizer';
5
+ export { renderAntigravityOutput } from './renderer';
6
+ export { renderAntigravityOutput as renderForInvoke } from './renderer';
7
+ export { resolveSessionId, deriveSessionId } from './session-resolver';
8
+ export type { AntigravityStdinBase, AntigravitySessionStartPayload, AntigravityBeforeToolSelectionPayload, AntigravityBeforeModelPayload, AntigravityAfterModelPayload, AntigravityBeforeAgentPayload, AntigravityAfterAgentPayload, AntigravityBeforeToolPayload, AntigravityAfterToolPayload, } from './normalizer';
9
+ export type { AntigravityBeforeToolSelectionOutput, AntigravityBeforeModelOutput, AntigravityAfterModelOutput, AntigravityBeforeAgentOutput, AntigravityAfterAgentOutput, AntigravityBeforeToolOutput, AntigravityAfterToolOutput, AntigravitySessionStartOutput, } from './renderer';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrH,OAAO,EAAE,oBAAoB,IAAI,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,uBAAuB,IAAI,eAAe,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,YAAY,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,qCAAqC,EACrC,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,oCAAoC,EACpC,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deriveSessionId = exports.resolveSessionId = exports.renderForInvoke = exports.renderAntigravityOutput = exports.normalizeForInvoke = exports.setAdapterName = exports.buildPayload = exports.buildExecutionContext = exports.parseStdin = exports.normalizeAntigravity = exports.getSupportedPhases = exports.getAntigravityPhaseMapping = exports.ANTIGRAVITY_PHASE_MAPPINGS = exports.createAdapter = void 0;
4
+ var adapter_1 = require("./adapter");
5
+ Object.defineProperty(exports, "createAdapter", { enumerable: true, get: function () { return adapter_1.createAdapter; } });
6
+ var mappings_1 = require("./mappings");
7
+ Object.defineProperty(exports, "ANTIGRAVITY_PHASE_MAPPINGS", { enumerable: true, get: function () { return mappings_1.ANTIGRAVITY_PHASE_MAPPINGS; } });
8
+ Object.defineProperty(exports, "getAntigravityPhaseMapping", { enumerable: true, get: function () { return mappings_1.getAntigravityPhaseMapping; } });
9
+ Object.defineProperty(exports, "getSupportedPhases", { enumerable: true, get: function () { return mappings_1.getSupportedPhases; } });
10
+ var normalizer_1 = require("./normalizer");
11
+ Object.defineProperty(exports, "normalizeAntigravity", { enumerable: true, get: function () { return normalizer_1.normalizeAntigravity; } });
12
+ Object.defineProperty(exports, "parseStdin", { enumerable: true, get: function () { return normalizer_1.parseStdin; } });
13
+ Object.defineProperty(exports, "buildExecutionContext", { enumerable: true, get: function () { return normalizer_1.buildExecutionContext; } });
14
+ Object.defineProperty(exports, "buildPayload", { enumerable: true, get: function () { return normalizer_1.buildPayload; } });
15
+ Object.defineProperty(exports, "setAdapterName", { enumerable: true, get: function () { return normalizer_1.setAdapterName; } });
16
+ var normalizer_2 = require("./normalizer");
17
+ Object.defineProperty(exports, "normalizeForInvoke", { enumerable: true, get: function () { return normalizer_2.normalizeAntigravity; } });
18
+ var renderer_1 = require("./renderer");
19
+ Object.defineProperty(exports, "renderAntigravityOutput", { enumerable: true, get: function () { return renderer_1.renderAntigravityOutput; } });
20
+ var renderer_2 = require("./renderer");
21
+ Object.defineProperty(exports, "renderForInvoke", { enumerable: true, get: function () { return renderer_2.renderAntigravityOutput; } });
22
+ var session_resolver_1 = require("./session-resolver");
23
+ Object.defineProperty(exports, "resolveSessionId", { enumerable: true, get: function () { return session_resolver_1.resolveSessionId; } });
24
+ Object.defineProperty(exports, "deriveSessionId", { enumerable: true, get: function () { return session_resolver_1.deriveSessionId; } });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AACtB,uCAAwG;AAA/F,sHAAA,0BAA0B,OAAA;AAAE,sHAAA,0BAA0B,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AACnF,2CAAqH;AAA5G,kHAAA,oBAAoB,OAAA;AAAE,wGAAA,UAAU,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,4GAAA,cAAc,OAAA;AAC9F,2CAA0E;AAAjE,gHAAA,oBAAoB,OAAsB;AACnD,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,uCAAwE;AAA/D,2GAAA,uBAAuB,OAAmB;AACnD,uDAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AAAE,mHAAA,eAAe,OAAA"}
@@ -0,0 +1,11 @@
1
+ import type { PhaseMapping } from '@a5c-ai/hooks-adapter-core';
2
+ export declare const ANTIGRAVITY_PHASE_MAPPINGS: PhaseMapping[];
3
+ /**
4
+ * Look up the phase mapping for a given Antigravity native event name.
5
+ */
6
+ export declare function getAntigravityPhaseMapping(nativeEventName: string): PhaseMapping | undefined;
7
+ /**
8
+ * Get all canonical phases supported by the Antigravity adapter.
9
+ */
10
+ export declare function getSupportedPhases(): string[];
11
+ //# sourceMappingURL=mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappings.d.ts","sourceRoot":"","sources":["../src/mappings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAmF/D,eAAO,MAAM,0BAA0B,EAAE,YAAY,EAAuB,CAAC;AAE7E;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ANTIGRAVITY_PHASE_MAPPINGS = void 0;
4
+ exports.getAntigravityPhaseMapping = getAntigravityPhaseMapping;
5
+ exports.getSupportedPhases = getSupportedPhases;
6
+ const catalog_1 = require("@a5c-ai/atlas/catalog");
7
+ /**
8
+ * Antigravity CLI native event name to canonical phase mappings.
9
+ *
10
+ * Antigravity CLI inherits the event vocabulary from Gemini CLI but
11
+ * uses a workflow-driven hook dispatch model. Phase mappings are
12
+ * built from the Atlas graph HookMapping records via the agent-catalog,
13
+ * falling back to hardcoded defaults when the catalog is unavailable.
14
+ */
15
+ const SUPPORT_LEVEL_MAP = {
16
+ supported: 'native',
17
+ native: 'native',
18
+ lossy: 'lossy',
19
+ emulated: 'emulated',
20
+ unsupported: 'unsupported',
21
+ };
22
+ function hookMappingToPhaseMapping(mapping) {
23
+ if (!mapping.canonicalPhase)
24
+ return null;
25
+ return {
26
+ canonicalPhase: mapping.canonicalPhase,
27
+ nativeHook: mapping.nativeName,
28
+ supportLevel: SUPPORT_LEVEL_MAP[mapping.supportLevel] ?? 'native',
29
+ blockCapability: mapping.blockCapability ?? false,
30
+ mutationCapability: mapping.mutationCapability ?? false,
31
+ scope: (mapping.scope ?? 'session'),
32
+ notes: mapping.nativeName === 'BeforeToolSelection'
33
+ ? 'Union-style aggregation across matching workflow handlers.'
34
+ : undefined,
35
+ };
36
+ }
37
+ /**
38
+ * Hardcoded phase mappings for Antigravity CLI.
39
+ *
40
+ * Antigravity inherits the same event names as Gemini CLI, so the
41
+ * native hook names are identical. The key architectural difference
42
+ * is the hook dispatch mechanism (workflow-driven vs shell scripts).
43
+ */
44
+ const HARDCODED_PHASE_MAPPINGS = [
45
+ { canonicalPhase: 'planner.before_tool_selection', nativeHook: 'BeforeToolSelection', supportLevel: 'native', blockCapability: false, mutationCapability: true, scope: 'planner' },
46
+ { canonicalPhase: 'model.before_request', nativeHook: 'BeforeModel', supportLevel: 'native', blockCapability: true, mutationCapability: true, scope: 'model' },
47
+ { canonicalPhase: 'model.after_response', nativeHook: 'AfterModel', supportLevel: 'native', blockCapability: false, mutationCapability: false, scope: 'model' },
48
+ { canonicalPhase: 'turn.before_agent', nativeHook: 'BeforeAgent', supportLevel: 'native', blockCapability: true, mutationCapability: false, scope: 'turn' },
49
+ { canonicalPhase: 'turn.after_agent', nativeHook: 'AfterAgent', supportLevel: 'native', blockCapability: false, mutationCapability: false, scope: 'turn' },
50
+ { canonicalPhase: 'tool.before', nativeHook: 'BeforeTool', supportLevel: 'native', blockCapability: true, mutationCapability: true, scope: 'tool' },
51
+ { canonicalPhase: 'tool.after', nativeHook: 'AfterTool', supportLevel: 'native', blockCapability: false, mutationCapability: false, scope: 'tool' },
52
+ ];
53
+ const BRIDGE_LIFECYCLE_MAPPINGS = [
54
+ { canonicalPhase: 'session.start', nativeHook: 'SessionStart', supportLevel: 'emulated', blockCapability: false, mutationCapability: false, scope: 'session' },
55
+ { canonicalPhase: 'turn.stop', nativeHook: 'Stop', supportLevel: 'emulated', blockCapability: true, mutationCapability: false, scope: 'turn' },
56
+ ];
57
+ function buildFromCatalog() {
58
+ const mappings = (0, catalog_1.listHookMappingsByAdapterFamily)('antigravity');
59
+ if (mappings.length > 0) {
60
+ const phaseMappings = mappings
61
+ .map(hookMappingToPhaseMapping)
62
+ .filter((m) => m !== null);
63
+ const merged = [...phaseMappings, ...BRIDGE_LIFECYCLE_MAPPINGS];
64
+ const seen = new Set();
65
+ return merged.filter((m) => {
66
+ if (seen.has(m.nativeHook))
67
+ return false;
68
+ seen.add(m.nativeHook);
69
+ return true;
70
+ });
71
+ }
72
+ // No catalog entries yet for antigravity — use hardcoded mappings
73
+ const merged = [...HARDCODED_PHASE_MAPPINGS, ...BRIDGE_LIFECYCLE_MAPPINGS];
74
+ const seen = new Set();
75
+ return merged.filter((m) => {
76
+ if (seen.has(m.nativeHook))
77
+ return false;
78
+ seen.add(m.nativeHook);
79
+ return true;
80
+ });
81
+ }
82
+ exports.ANTIGRAVITY_PHASE_MAPPINGS = buildFromCatalog();
83
+ /**
84
+ * Look up the phase mapping for a given Antigravity native event name.
85
+ */
86
+ function getAntigravityPhaseMapping(nativeEventName) {
87
+ return exports.ANTIGRAVITY_PHASE_MAPPINGS.find((m) => m.nativeHook === nativeEventName);
88
+ }
89
+ /**
90
+ * Get all canonical phases supported by the Antigravity adapter.
91
+ */
92
+ function getSupportedPhases() {
93
+ return exports.ANTIGRAVITY_PHASE_MAPPINGS.map((m) => m.canonicalPhase);
94
+ }
95
+ //# sourceMappingURL=mappings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappings.js","sourceRoot":"","sources":["../src/mappings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import type { UnifiedHookEvent, UnifiedExecutionContext } from '@a5c-ai/hooks-adapter-core';
2
+ /** The default adapter name. */
3
+ export declare const ADAPTER_NAME = "antigravity";
4
+ /** Override the adapter name used in normalized events. */
5
+ export declare function setAdapterName(name: string): void;
6
+ /**
7
+ * Antigravity CLI stdin JSON payload shapes.
8
+ *
9
+ * Antigravity CLI passes hook input as JSON on stdin with fields varying by event type.
10
+ * The payload shapes are inherited from Gemini CLI, with identical field names.
11
+ */
12
+ /** Common fields present across most Antigravity hook events. */
13
+ export interface AntigravityStdinBase {
14
+ /** Workspace or project directory. */
15
+ cwd?: string;
16
+ /** Model identifier (multi-provider: gemini, claude, gpt). */
17
+ model?: string;
18
+ /** Skill path for the calling SKILL.md workflow. */
19
+ skillPath?: string;
20
+ /** Provider name (gemini, claude, gpt). */
21
+ provider?: string;
22
+ [key: string]: unknown;
23
+ }
24
+ /** SessionStart-specific fields. */
25
+ export interface AntigravitySessionStartPayload extends AntigravityStdinBase {
26
+ /** Initial user prompt if available. */
27
+ prompt?: string;
28
+ }
29
+ /** BeforeToolSelection-specific fields. */
30
+ export interface AntigravityBeforeToolSelectionPayload extends AntigravityStdinBase {
31
+ /** List of available tool names. */
32
+ availableTools?: string[];
33
+ /** The user prompt or current context driving tool selection. */
34
+ prompt?: string;
35
+ }
36
+ /** BeforeModel-specific fields. */
37
+ export interface AntigravityBeforeModelPayload extends AntigravityStdinBase {
38
+ /** The request about to be sent to the model. */
39
+ request?: unknown;
40
+ /** Messages in the conversation so far. */
41
+ messages?: unknown[];
42
+ }
43
+ /** AfterModel-specific fields. */
44
+ export interface AntigravityAfterModelPayload extends AntigravityStdinBase {
45
+ /** The model's response. */
46
+ response?: unknown;
47
+ /** Token usage information. */
48
+ usage?: {
49
+ promptTokens?: number;
50
+ completionTokens?: number;
51
+ totalTokens?: number;
52
+ };
53
+ }
54
+ /** BeforeAgent-specific fields. */
55
+ export interface AntigravityBeforeAgentPayload extends AntigravityStdinBase {
56
+ /** The prompt that will drive the agent turn. */
57
+ prompt?: string;
58
+ }
59
+ /** AfterAgent-specific fields. */
60
+ export interface AntigravityAfterAgentPayload extends AntigravityStdinBase {
61
+ /** The agent's last output message. */
62
+ lastMessage?: string;
63
+ /** Reason the agent turn ended. */
64
+ reason?: string;
65
+ }
66
+ /** BeforeTool-specific fields. */
67
+ export interface AntigravityBeforeToolPayload extends AntigravityStdinBase {
68
+ /** Name of the tool being executed. */
69
+ toolName?: string;
70
+ /** Input arguments for the tool. */
71
+ toolInput?: unknown;
72
+ /** Tool call identifier. */
73
+ toolCallId?: string;
74
+ }
75
+ /** AfterTool-specific fields. */
76
+ export interface AntigravityAfterToolPayload extends AntigravityStdinBase {
77
+ /** Name of the tool that was executed. */
78
+ toolName?: string;
79
+ /** Input arguments for the tool. */
80
+ toolInput?: unknown;
81
+ /** Tool execution result. */
82
+ toolResult?: unknown;
83
+ /** Tool call identifier. */
84
+ toolCallId?: string;
85
+ }
86
+ /**
87
+ * Parse raw stdin input (string or object) into a structured object.
88
+ */
89
+ export declare function parseStdin(raw: unknown): Record<string, unknown>;
90
+ /**
91
+ * Build a UnifiedExecutionContext from an Antigravity stdin payload and environment.
92
+ */
93
+ export declare function buildExecutionContext(stdinData: Record<string, unknown>, nativeEventName: string, env: Record<string, string>): UnifiedExecutionContext;
94
+ /**
95
+ * Build the payload portion of the unified event from Antigravity stdin data.
96
+ * Extracts event-specific fields into the normalized payload.
97
+ */
98
+ export declare function buildPayload(nativeEventName: string, stdinData: Record<string, unknown>): Record<string, unknown>;
99
+ /**
100
+ * Normalize an Antigravity CLI hook invocation into a UnifiedHookEvent.
101
+ *
102
+ * @param nativeEventName - The Antigravity event name (e.g. 'BeforeToolSelection', 'AfterAgent').
103
+ * @param rawStdin - Raw stdin content (string or parsed object).
104
+ * @param env - Environment variables at invocation time.
105
+ */
106
+ export declare function normalizeAntigravity(nativeEventName: string, rawStdin: unknown, env?: Record<string, string>): UnifiedHookEvent;
107
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../src/normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ADAPTER_NAME = void 0;
4
+ exports.setAdapterName = setAdapterName;
5
+ exports.parseStdin = parseStdin;
6
+ exports.buildExecutionContext = buildExecutionContext;
7
+ exports.buildPayload = buildPayload;
8
+ exports.normalizeAntigravity = normalizeAntigravity;
9
+ const mappings_1 = require("./mappings");
10
+ const session_resolver_1 = require("./session-resolver");
11
+ /** The default adapter name. */
12
+ exports.ADAPTER_NAME = 'antigravity';
13
+ /** Mutable adapter name, defaulting to the Antigravity adapter identity. */
14
+ let _adapterName = 'antigravity';
15
+ /** Override the adapter name used in normalized events. */
16
+ function setAdapterName(name) {
17
+ _adapterName = name;
18
+ }
19
+ /**
20
+ * Parse raw stdin input (string or object) into a structured object.
21
+ */
22
+ function parseStdin(raw) {
23
+ if (raw == null) {
24
+ return {};
25
+ }
26
+ if (typeof raw === 'string') {
27
+ try {
28
+ const parsed = JSON.parse(raw);
29
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
30
+ return parsed;
31
+ }
32
+ return { raw: parsed };
33
+ }
34
+ catch {
35
+ return { raw };
36
+ }
37
+ }
38
+ if (typeof raw === 'object' && !Array.isArray(raw)) {
39
+ return raw;
40
+ }
41
+ return { raw };
42
+ }
43
+ /**
44
+ * Build a UnifiedExecutionContext from an Antigravity stdin payload and environment.
45
+ */
46
+ function buildExecutionContext(stdinData, nativeEventName, env) {
47
+ const persistedEnv = {};
48
+ const contextVars = {};
49
+ for (const [key, value] of Object.entries(env)) {
50
+ if (key.startsWith('HOOKS_PROXY_PERSIST_')) {
51
+ persistedEnv[key] = value;
52
+ }
53
+ }
54
+ const sessionId = (0, session_resolver_1.resolveSessionId)(stdinData, env);
55
+ return {
56
+ sessionId,
57
+ turnId: env['HOOKS_PROXY_TURN_ID'] ?? null,
58
+ conversationId: env['HOOKS_PROXY_CONVERSATION_ID'] ?? null,
59
+ adapter: _adapterName,
60
+ cwd: stdinData.cwd ?? env['PWD'] ?? null,
61
+ worktree: env['HOOKS_PROXY_WORKTREE'] ?? null,
62
+ transcriptPath: null,
63
+ source: null,
64
+ model: stdinData.model ?? env['HOOKS_PROXY_MODEL'] ?? null,
65
+ agentType: null,
66
+ permissionMode: null,
67
+ toolName: stdinData.toolName ?? null,
68
+ toolCallId: stdinData.toolCallId ?? null,
69
+ nativeEventName,
70
+ rawEventScope: null,
71
+ persistedEnv,
72
+ contextVars,
73
+ metadata: {
74
+ ...(stdinData.skillPath != null ? { skillPath: stdinData.skillPath } : {}),
75
+ ...(stdinData.provider != null ? { provider: stdinData.provider } : {}),
76
+ },
77
+ };
78
+ }
79
+ /**
80
+ * Build the payload portion of the unified event from Antigravity stdin data.
81
+ * Extracts event-specific fields into the normalized payload.
82
+ */
83
+ function buildPayload(nativeEventName, stdinData) {
84
+ const payload = {};
85
+ switch (nativeEventName) {
86
+ case 'SessionStart':
87
+ if (stdinData.prompt != null)
88
+ payload.initialPrompt = stdinData.prompt;
89
+ break;
90
+ case 'SessionEnd':
91
+ // No event-specific fields beyond common ones
92
+ break;
93
+ case 'BeforeToolSelection':
94
+ if (stdinData.availableTools != null)
95
+ payload.availableTools = stdinData.availableTools;
96
+ if (stdinData.prompt != null)
97
+ payload.prompt = stdinData.prompt;
98
+ break;
99
+ case 'BeforeModel':
100
+ if (stdinData.request != null)
101
+ payload.llmRequest = stdinData.request;
102
+ if (stdinData.messages != null)
103
+ payload.messages = stdinData.messages;
104
+ break;
105
+ case 'AfterModel':
106
+ if (stdinData.response != null)
107
+ payload.llmResponse = stdinData.response;
108
+ if (stdinData.usage != null)
109
+ payload.usage = stdinData.usage;
110
+ break;
111
+ case 'BeforeAgent':
112
+ if (stdinData.prompt != null)
113
+ payload.prompt = stdinData.prompt;
114
+ break;
115
+ case 'AfterAgent':
116
+ if (stdinData.lastMessage != null)
117
+ payload.lastAssistantMessage = stdinData.lastMessage;
118
+ if (stdinData.reason != null)
119
+ payload.reason = stdinData.reason;
120
+ break;
121
+ case 'BeforeTool':
122
+ if (stdinData.toolName != null)
123
+ payload.toolName = stdinData.toolName;
124
+ if (stdinData.toolInput != null)
125
+ payload.toolInput = stdinData.toolInput;
126
+ if (stdinData.toolCallId != null)
127
+ payload.toolCallId = stdinData.toolCallId;
128
+ break;
129
+ case 'AfterTool':
130
+ if (stdinData.toolName != null)
131
+ payload.toolName = stdinData.toolName;
132
+ if (stdinData.toolInput != null)
133
+ payload.toolInput = stdinData.toolInput;
134
+ if (stdinData.toolResult != null)
135
+ payload.toolResponse = stdinData.toolResult;
136
+ if (stdinData.toolCallId != null)
137
+ payload.toolCallId = stdinData.toolCallId;
138
+ break;
139
+ default:
140
+ // Unknown event: pass through all non-common fields
141
+ for (const [key, value] of Object.entries(stdinData)) {
142
+ if (!['cwd', 'model', 'skillPath', 'provider'].includes(key)) {
143
+ payload[key] = value;
144
+ }
145
+ }
146
+ break;
147
+ }
148
+ return payload;
149
+ }
150
+ /**
151
+ * Normalize an Antigravity CLI hook invocation into a UnifiedHookEvent.
152
+ *
153
+ * @param nativeEventName - The Antigravity event name (e.g. 'BeforeToolSelection', 'AfterAgent').
154
+ * @param rawStdin - Raw stdin content (string or parsed object).
155
+ * @param env - Environment variables at invocation time.
156
+ */
157
+ function normalizeAntigravity(nativeEventName, rawStdin, env = {}) {
158
+ const stdinData = parseStdin(rawStdin);
159
+ const mapping = (0, mappings_1.getAntigravityPhaseMapping)(nativeEventName);
160
+ const phase = mapping?.canonicalPhase ?? 'unknown';
161
+ const supportLevel = mapping?.supportLevel ?? 'unsupported';
162
+ const execution = buildExecutionContext(stdinData, nativeEventName, env);
163
+ const payload = buildPayload(nativeEventName, stdinData);
164
+ // Split env into input and persisted buckets
165
+ const inputEnv = {};
166
+ const persistedEnv = {};
167
+ for (const [key, value] of Object.entries(env)) {
168
+ if (key.startsWith('HOOKS_PROXY_PERSIST_')) {
169
+ persistedEnv[key] = value;
170
+ }
171
+ else if (key.startsWith('HOOKS_PROXY_')) {
172
+ inputEnv[key] = value;
173
+ }
174
+ }
175
+ return {
176
+ version: 'a5c.hooks.v1',
177
+ adapter: _adapterName,
178
+ phase,
179
+ rawEventName: nativeEventName,
180
+ supportLevel,
181
+ execution,
182
+ payload,
183
+ env: {
184
+ input: inputEnv,
185
+ persisted: persistedEnv,
186
+ },
187
+ raw: rawStdin,
188
+ };
189
+ }
190
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../src/normalizer.ts"],"names":[],"mappings":";;;AAWA,wCAEC;AA+FD,gCAmBC;AAKD,sDAuCC;AAMD,oCA+DC;AASD,oDAuCC;AA/RD,yCAAwD;AACxD,yDAAsD;AAEtD,gCAAgC;AACnB,QAAA,YAAY,GAAG,aAAa,CAAC;AAE1C,4EAA4E;AAC5E,IAAI,YAAY,GAAW,aAAa,CAAC;AAEzC,2DAA2D;AAC3D,SAAgB,cAAc,CAAC,IAAY;IACzC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AA4FD;;GAEG;AACH,SAAgB,UAAU,CAAC,GAAY;IACrC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,OAAO,MAAiC,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,GAA8B,CAAC;IACxC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,SAAkC,EAClC,eAAuB,EACvB,GAA2B;IAE3B,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3C,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,mCAAgB,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEnD,OAAO;QACL,SAAS;QACT,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI;QAC1C,cAAc,EAAE,GAAG,CAAC,6BAA6B,CAAC,IAAI,IAAI;QAC1D,OAAO,EAAE,YAAY;QACrB,GAAG,EAAG,SAAS,CAAC,GAA0B,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;QAChE,QAAQ,EAAE,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI;QAC7C,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAG,SAAS,CAAC,KAA4B,IAAI,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI;QAClF,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAG,SAAS,CAAC,QAA+B,IAAI,IAAI;QAC5D,UAAU,EAAG,SAAS,CAAC,UAAiC,IAAI,IAAI;QAChE,eAAe;QACf,aAAa,EAAE,IAAI;QACnB,YAAY;QACZ,WAAW;QACX,QAAQ,EAAE;YACR,GAAG,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAC1B,eAAuB,EACvB,SAAkC;IAElC,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,cAAc;YACjB,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI;gBAAE,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;YACvE,MAAM;QAER,KAAK,YAAY;YACf,8CAA8C;YAC9C,MAAM;QAER,KAAK,qBAAqB;YACxB,IAAI,SAAS,CAAC,cAAc,IAAI,IAAI;gBAAE,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;YACxF,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI;gBAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChE,MAAM;QAER,KAAK,aAAa;YAChB,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI;gBAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;YACtE,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACtE,MAAM;QAER,KAAK,YAAY;YACf,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YACzE,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI;gBAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC7D,MAAM;QAER,KAAK,aAAa;YAChB,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI;gBAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChE,MAAM;QAER,KAAK,YAAY;YACf,IAAI,SAAS,CAAC,WAAW,IAAI,IAAI;gBAAE,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,WAAW,CAAC;YACxF,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI;gBAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChE,MAAM;QAER,KAAK,YAAY;YACf,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACtE,IAAI,SAAS,CAAC,SAAS,IAAI,IAAI;gBAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACzE,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI;gBAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAC5E,MAAM;QAER,KAAK,WAAW;YACd,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACtE,IAAI,SAAS,CAAC,SAAS,IAAI,IAAI;gBAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACzE,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI;gBAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC;YAC9E,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI;gBAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YAC5E,MAAM;QAER;YACE,oDAAoD;YACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,MAAM;IACV,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,eAAuB,EACvB,QAAiB,EACjB,MAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAA,qCAA0B,EAAC,eAAe,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,OAAO,EAAE,cAAc,IAAI,SAAS,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,aAAa,CAAC;IAE5D,MAAM,SAAS,GAAG,qBAAqB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3C,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,YAAY;QACrB,KAAK;QACL,YAAY,EAAE,eAAe;QAC7B,YAAY;QACZ,SAAS;QACT,OAAO;QACP,GAAG,EAAE;YACH,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,YAAY;SACxB;QACD,GAAG,EAAE,QAAQ;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { UnifiedHookResult } from '@a5c-ai/hooks-adapter-core';
2
+ /**
3
+ * Antigravity CLI native hook output formats.
4
+ *
5
+ * Antigravity CLI hooks communicate results via JSON on stdout only.
6
+ * All diagnostic/log output MUST go to stderr.
7
+ *
8
+ * The output format is inherited from Gemini CLI, with the same
9
+ * field structure per event type. The dispatch mechanism differs
10
+ * (workflow-driven vs shell scripts) but the wire protocol is identical.
11
+ */
12
+ /** BeforeToolSelection hook output: tool filtering via union aggregation. */
13
+ export interface AntigravityBeforeToolSelectionOutput {
14
+ /** Tools to include — unioned across multiple hook responses. */
15
+ selectedTools?: string[];
16
+ /** Additional context to inject. */
17
+ additionalContext?: string;
18
+ }
19
+ /** BeforeModel hook output: request mutation. */
20
+ export interface AntigravityBeforeModelOutput {
21
+ /** System message to prepend or inject. */
22
+ systemMessage?: string;
23
+ /** Additional context to inject. */
24
+ additionalContext?: string;
25
+ /** Whether to block the model request entirely. */
26
+ block?: boolean;
27
+ /** Reason for blocking. */
28
+ reason?: string;
29
+ }
30
+ /** AfterModel hook output. */
31
+ export interface AntigravityAfterModelOutput {
32
+ /** Additional context to inject. */
33
+ additionalContext?: string;
34
+ }
35
+ /** BeforeAgent hook output. */
36
+ export interface AntigravityBeforeAgentOutput {
37
+ /** Additional context to inject. */
38
+ additionalContext?: string;
39
+ /** Whether to block the agent turn. */
40
+ block?: boolean;
41
+ /** Reason for blocking. */
42
+ reason?: string;
43
+ }
44
+ /** AfterAgent hook output: continuation control. */
45
+ export interface AntigravityAfterAgentOutput {
46
+ /** If true, continue the session with a follow-up. */
47
+ continueSession?: boolean;
48
+ /** Follow-up prompt to inject if continuing. */
49
+ followUpMessage?: string;
50
+ /** Additional context to inject. */
51
+ additionalContext?: string;
52
+ /** Reason for the decision. */
53
+ reason?: string;
54
+ }
55
+ /** BeforeTool hook output: permission and mutation. */
56
+ export interface AntigravityBeforeToolOutput {
57
+ /** Permission decision. */
58
+ decision?: 'allow' | 'deny';
59
+ /** Reason for the decision. */
60
+ reason?: string;
61
+ /** Mutated tool input (replaces original). */
62
+ toolInput?: unknown;
63
+ /** Additional context to inject. */
64
+ additionalContext?: string;
65
+ }
66
+ /** AfterTool hook output. */
67
+ export interface AntigravityAfterToolOutput {
68
+ /** Additional context to inject. */
69
+ additionalContext?: string;
70
+ }
71
+ /** SessionStart hook output. */
72
+ export interface AntigravitySessionStartOutput {
73
+ /** Additional context to inject. */
74
+ additionalContext?: string;
75
+ }
76
+ /**
77
+ * Render a UnifiedHookResult back to Antigravity's native JSON output format.
78
+ *
79
+ * Output JSON goes to stdout. Any diagnostic or log output must go to stderr
80
+ * (handled by the caller, not here).
81
+ *
82
+ * @param result - The unified hook result from handler execution.
83
+ * @param nativeEventName - The original Antigravity event name.
84
+ * @returns The native JSON output to write to stdout.
85
+ */
86
+ export declare function renderAntigravityOutput(result: UnifiedHookResult, nativeEventName: string): Record<string, unknown>;
87
+ /**
88
+ * Write JSON output to stdout and log message to stderr.
89
+ *
90
+ * Antigravity CLI requires that only the final JSON result goes to stdout.
91
+ * All diagnostic messages must go to stderr.
92
+ */
93
+ export declare function emitOutput(output: Record<string, unknown>, log?: string): void;
94
+ /**
95
+ * Write a log/diagnostic message to stderr (never stdout).
96
+ */
97
+ export declare function logToStderr(message: string): void;
98
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE;;;;;;;;;GASG;AAEH,6EAA6E;AAC7E,MAAM,WAAW,oCAAoC;IACnD,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,iDAAiD;AACjD,MAAM,WAAW,4BAA4B;IAC3C,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8BAA8B;AAC9B,MAAM,WAAW,2BAA2B;IAC1C,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,+BAA+B;AAC/B,MAAM,WAAW,4BAA4B;IAC3C,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,2BAA2B;IAC1C,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,2BAA2B;IAC1C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,6BAA6B;AAC7B,MAAM,WAAW,0BAA0B;IACzC,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,gCAAgC;AAChC,MAAM,WAAW,6BAA6B;IAC5C,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,MAAM,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB;AAqJD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAK9E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderAntigravityOutput = renderAntigravityOutput;
4
+ exports.emitOutput = emitOutput;
5
+ exports.logToStderr = logToStderr;
6
+ /**
7
+ * Render a UnifiedHookResult back to Antigravity's native JSON output format.
8
+ *
9
+ * Output JSON goes to stdout. Any diagnostic or log output must go to stderr
10
+ * (handled by the caller, not here).
11
+ *
12
+ * @param result - The unified hook result from handler execution.
13
+ * @param nativeEventName - The original Antigravity event name.
14
+ * @returns The native JSON output to write to stdout.
15
+ */
16
+ function renderAntigravityOutput(result, nativeEventName) {
17
+ switch (nativeEventName) {
18
+ case 'BeforeToolSelection':
19
+ return renderBeforeToolSelectionOutput(result);
20
+ case 'BeforeModel':
21
+ return renderBeforeModelOutput(result);
22
+ case 'AfterModel':
23
+ return renderAfterModelOutput(result);
24
+ case 'BeforeAgent':
25
+ return renderBeforeAgentOutput(result);
26
+ case 'AfterAgent':
27
+ return renderAfterAgentOutput(result);
28
+ case 'BeforeTool':
29
+ return renderBeforeToolOutput(result);
30
+ case 'AfterTool':
31
+ return renderAfterToolOutput(result);
32
+ case 'SessionStart':
33
+ return renderSessionStartOutput(result);
34
+ default:
35
+ return renderGenericOutput(result);
36
+ }
37
+ }
38
+ function renderBeforeToolSelectionOutput(result) {
39
+ const output = {};
40
+ // toolMutation for BeforeToolSelection carries the selected tool list
41
+ if (result.toolMutation?.value != null && Array.isArray(result.toolMutation.value)) {
42
+ output.selectedTools = result.toolMutation.value;
43
+ }
44
+ if (result.additionalContext != null) {
45
+ output.additionalContext = result.additionalContext;
46
+ }
47
+ return output;
48
+ }
49
+ function renderBeforeModelOutput(result) {
50
+ const output = {};
51
+ if (result.systemMessage != null) {
52
+ output.systemMessage = result.systemMessage;
53
+ }
54
+ if (result.additionalContext != null) {
55
+ output.additionalContext = result.additionalContext;
56
+ }
57
+ if (result.decision === 'deny') {
58
+ output.block = true;
59
+ if (result.reason != null) {
60
+ output.reason = result.reason;
61
+ }
62
+ }
63
+ return output;
64
+ }
65
+ function renderAfterModelOutput(result) {
66
+ const output = {};
67
+ if (result.additionalContext != null) {
68
+ output.additionalContext = result.additionalContext;
69
+ }
70
+ return output;
71
+ }
72
+ function renderBeforeAgentOutput(result) {
73
+ const output = {};
74
+ if (result.additionalContext != null) {
75
+ output.additionalContext = result.additionalContext;
76
+ }
77
+ if (result.decision === 'deny') {
78
+ output.block = true;
79
+ if (result.reason != null) {
80
+ output.reason = result.reason;
81
+ }
82
+ }
83
+ return output;
84
+ }
85
+ function renderAfterAgentOutput(result) {
86
+ const output = {};
87
+ if (result.continueSession != null) {
88
+ output.continueSession = result.continueSession;
89
+ }
90
+ if (result.followUpMessage != null) {
91
+ output.followUpMessage = result.followUpMessage;
92
+ }
93
+ if (result.additionalContext != null) {
94
+ output.additionalContext = result.additionalContext;
95
+ }
96
+ if (result.stopReason != null) {
97
+ output.reason = result.stopReason;
98
+ }
99
+ else if (result.reason != null) {
100
+ output.reason = result.reason;
101
+ }
102
+ return output;
103
+ }
104
+ function renderBeforeToolOutput(result) {
105
+ const output = {};
106
+ if (result.decision === 'allow') {
107
+ output.decision = 'allow';
108
+ }
109
+ else if (result.decision === 'deny') {
110
+ output.decision = 'deny';
111
+ }
112
+ // 'ask', 'continue', 'noop' produce no decision — Antigravity defaults to allow
113
+ if (result.reason != null) {
114
+ output.reason = result.reason;
115
+ }
116
+ // Tool input mutation
117
+ if (result.toolMutation?.value != null) {
118
+ output.toolInput = result.toolMutation.value;
119
+ }
120
+ if (result.additionalContext != null) {
121
+ output.additionalContext = result.additionalContext;
122
+ }
123
+ return output;
124
+ }
125
+ function renderAfterToolOutput(result) {
126
+ const output = {};
127
+ if (result.additionalContext != null) {
128
+ output.additionalContext = result.additionalContext;
129
+ }
130
+ return output;
131
+ }
132
+ function renderSessionStartOutput(result) {
133
+ const output = {};
134
+ if (result.additionalContext != null) {
135
+ output.additionalContext = result.additionalContext;
136
+ }
137
+ return output;
138
+ }
139
+ function renderGenericOutput(result) {
140
+ const output = {};
141
+ if (result.additionalContext != null) {
142
+ output.additionalContext = result.additionalContext;
143
+ }
144
+ return output;
145
+ }
146
+ /**
147
+ * Write JSON output to stdout and log message to stderr.
148
+ *
149
+ * Antigravity CLI requires that only the final JSON result goes to stdout.
150
+ * All diagnostic messages must go to stderr.
151
+ */
152
+ function emitOutput(output, log) {
153
+ if (log != null) {
154
+ process.stderr.write(log + '\n');
155
+ }
156
+ process.stdout.write(JSON.stringify(output) + '\n');
157
+ }
158
+ /**
159
+ * Write a log/diagnostic message to stderr (never stdout).
160
+ */
161
+ function logToStderr(message) {
162
+ process.stderr.write(message + '\n');
163
+ }
164
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Resolve a session ID for Antigravity CLI.
3
+ *
4
+ * Antigravity CLI does not provide a native session ID on stdin.
5
+ * The session ID is derived from available signals:
6
+ *
7
+ * 1. Explicit env: AGENT_SESSION_ID or HOOKS_PROXY_SESSION_ID
8
+ * 2. Antigravity-specific env: ANTIGRAVITY_SESSION_ID
9
+ * 3. Derived from workspace (cwd) + a date-bucket to avoid accidental
10
+ * cross-session merging while keeping the ID stable within a session window.
11
+ *
12
+ * Session ID quality: 'derived'.
13
+ */
14
+ export declare function resolveSessionId(stdinData: Record<string, unknown>, env: Record<string, string>): string | null;
15
+ /**
16
+ * Derive a deterministic session ID from the workspace directory.
17
+ *
18
+ * Uses a 15-minute time bucket so that hooks fired within the same
19
+ * working session are grouped together, while separate launches
20
+ * in different time windows get different IDs.
21
+ *
22
+ * The bucket window is intentionally coarse to keep the same session ID
23
+ * stable across rapid hook invocations within a single CLI session.
24
+ */
25
+ export declare function deriveSessionId(cwd: string): string;
26
+ //# sourceMappingURL=session-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-resolver.d.ts","sourceRoot":"","sources":["../src/session-resolver.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,GAAG,IAAI,CAqBf;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMnD"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolveSessionId = resolveSessionId;
37
+ exports.deriveSessionId = deriveSessionId;
38
+ const crypto = __importStar(require("crypto"));
39
+ /**
40
+ * Resolve a session ID for Antigravity CLI.
41
+ *
42
+ * Antigravity CLI does not provide a native session ID on stdin.
43
+ * The session ID is derived from available signals:
44
+ *
45
+ * 1. Explicit env: AGENT_SESSION_ID or HOOKS_PROXY_SESSION_ID
46
+ * 2. Antigravity-specific env: ANTIGRAVITY_SESSION_ID
47
+ * 3. Derived from workspace (cwd) + a date-bucket to avoid accidental
48
+ * cross-session merging while keeping the ID stable within a session window.
49
+ *
50
+ * Session ID quality: 'derived'.
51
+ */
52
+ function resolveSessionId(stdinData, env) {
53
+ // 1. Explicit session ID from env (highest priority)
54
+ if (env['AGENT_SESSION_ID']) {
55
+ return env['AGENT_SESSION_ID'];
56
+ }
57
+ if (env['HOOKS_PROXY_SESSION_ID']) {
58
+ return env['HOOKS_PROXY_SESSION_ID'];
59
+ }
60
+ // 2. Antigravity-specific session env
61
+ if (env['ANTIGRAVITY_SESSION_ID']) {
62
+ return env['ANTIGRAVITY_SESSION_ID'];
63
+ }
64
+ // 3. Derive from workspace + date bucket
65
+ const cwd = stdinData.cwd ?? env['PWD'] ?? null;
66
+ if (cwd != null) {
67
+ return deriveSessionId(cwd);
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Derive a deterministic session ID from the workspace directory.
73
+ *
74
+ * Uses a 15-minute time bucket so that hooks fired within the same
75
+ * working session are grouped together, while separate launches
76
+ * in different time windows get different IDs.
77
+ *
78
+ * The bucket window is intentionally coarse to keep the same session ID
79
+ * stable across rapid hook invocations within a single CLI session.
80
+ */
81
+ function deriveSessionId(cwd) {
82
+ const bucketMs = 15 * 60 * 1000; // 15 minutes
83
+ const timeBucket = Math.floor(Date.now() / bucketMs);
84
+ const input = `antigravity:${cwd}:${timeBucket}`;
85
+ const hash = crypto.createHash('sha256').update(input).digest('hex').slice(0, 16);
86
+ return `antigravity-derived-${hash}`;
87
+ }
88
+ //# sourceMappingURL=session-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-resolver.js","sourceRoot":"","sources":["../src/session-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,4CAwBC;AAYD,0CAMC;AAzDD,+CAAiC;AAEjC;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAC9B,SAAkC,EAClC,GAA2B;IAE3B,qDAAqD;IACrD,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;IAED,yCAAyC;IACzC,MAAM,GAAG,GAAI,SAAS,CAAC,GAA0B,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACxE,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,eAAe,GAAG,IAAI,UAAU,EAAE,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,uBAAuB,IAAI,EAAE,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@a5c-ai/hooks-adapter-antigravity",
3
+ "version": "5.1.1-staging.52898ebfc24f",
4
+ "description": "Antigravity CLI harness adapter for the hooks-adapter system",
5
+ "license": "MIT",
6
+ "type": "commonjs",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/a5c-ai/babysitter.git",
15
+ "directory": "packages/adapters/hooks/adapter-antigravity"
16
+ },
17
+ "homepage": "https://github.com/a5c-ai/babysitter/tree/main/packages/adapters/hooks/adapter-antigravity#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/a5c-ai/babysitter/issues"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "clean": "rimraf dist",
28
+ "lint": "eslint \"src/**/*.ts\" --max-warnings=0",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest"
31
+ },
32
+ "dependencies": {
33
+ "@a5c-ai/hooks-adapter-core": "5.1.1-staging.52898ebfc24f"
34
+ },
35
+ "devDependencies": {
36
+ "rimraf": "^6.0.0",
37
+ "typescript": "^5.7.0",
38
+ "vitest": "^4.1.8"
39
+ }
40
+ }