@simonepri/refined-antigravity-acp 0.1.0 → 0.1.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 (81) hide show
  1. package/dist/bin/cli.d.ts +3 -0
  2. package/dist/bin/cli.d.ts.map +1 -0
  3. package/dist/bin/cli.js +56 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/index.server.d.ts +4 -0
  6. package/dist/index.server.d.ts.map +1 -0
  7. package/dist/index.server.js +7 -0
  8. package/dist/index.server.js.map +1 -0
  9. package/dist/src/agy-patch.d.ts +65 -0
  10. package/dist/src/agy-patch.d.ts.map +1 -0
  11. package/dist/src/agy-patch.js +351 -0
  12. package/dist/src/agy-patch.js.map +1 -0
  13. package/dist/src/auth.d.ts +27 -0
  14. package/dist/src/auth.d.ts.map +1 -0
  15. package/dist/src/auth.js +113 -0
  16. package/dist/src/auth.js.map +1 -0
  17. package/dist/src/command.d.ts +5 -0
  18. package/dist/src/command.d.ts.map +1 -0
  19. package/dist/src/command.js +74 -0
  20. package/dist/src/command.js.map +1 -0
  21. package/dist/src/connector.d.ts +188 -0
  22. package/dist/src/connector.d.ts.map +1 -0
  23. package/dist/src/connector.js +1138 -0
  24. package/dist/src/connector.js.map +1 -0
  25. package/dist/src/history.d.ts +12 -0
  26. package/dist/src/history.d.ts.map +1 -0
  27. package/dist/src/history.js +152 -0
  28. package/dist/src/history.js.map +1 -0
  29. package/dist/src/mcp-proxy.d.ts +83 -0
  30. package/dist/src/mcp-proxy.d.ts.map +1 -0
  31. package/dist/src/mcp-proxy.js +308 -0
  32. package/dist/src/mcp-proxy.js.map +1 -0
  33. package/dist/src/provider.d.ts +11 -0
  34. package/dist/src/provider.d.ts.map +1 -0
  35. package/dist/src/provider.js +31 -0
  36. package/dist/src/provider.js.map +1 -0
  37. package/dist/src/sanitize.d.ts +29 -0
  38. package/dist/src/sanitize.d.ts.map +1 -0
  39. package/dist/src/sanitize.js +237 -0
  40. package/dist/src/sanitize.js.map +1 -0
  41. package/dist/src/skills.d.ts +17 -0
  42. package/dist/src/skills.d.ts.map +1 -0
  43. package/dist/src/skills.js +140 -0
  44. package/dist/src/skills.js.map +1 -0
  45. package/dist/src/steering.d.ts +30 -0
  46. package/dist/src/steering.d.ts.map +1 -0
  47. package/dist/src/steering.js +174 -0
  48. package/dist/src/steering.js.map +1 -0
  49. package/package.json +20 -13
  50. package/readme.md +3 -5
  51. package/.fallowrc.json +0 -11
  52. package/.github/workflows/ci.yml +0 -24
  53. package/.github/workflows/release.yml +0 -41
  54. package/.oxlintignore +0 -2
  55. package/.oxlintrc.json +0 -152
  56. package/.release-please-manifest.json +0 -3
  57. package/bin/cli.ts +0 -58
  58. package/index.server.ts +0 -9
  59. package/pnpm-workspace.yaml +0 -44
  60. package/release-please-config.json +0 -13
  61. package/server/agy-patch.test.ts +0 -445
  62. package/server/agy-patch.ts +0 -445
  63. package/server/auth.test.ts +0 -51
  64. package/server/auth.ts +0 -122
  65. package/server/command.test.ts +0 -18
  66. package/server/command.ts +0 -92
  67. package/server/connector.test.ts +0 -1136
  68. package/server/connector.ts +0 -1386
  69. package/server/history.test.ts +0 -139
  70. package/server/history.ts +0 -157
  71. package/server/mcp-proxy.test.ts +0 -368
  72. package/server/mcp-proxy.ts +0 -375
  73. package/server/provider.test.ts +0 -11
  74. package/server/provider.ts +0 -37
  75. package/server/sanitize.test.ts +0 -174
  76. package/server/sanitize.ts +0 -286
  77. package/server/skills.test.ts +0 -121
  78. package/server/skills.ts +0 -183
  79. package/server/steering.test.ts +0 -405
  80. package/server/steering.ts +0 -199
  81. package/tsconfig.json +0 -14
@@ -0,0 +1,113 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+ /**
6
+ * Resolves the path to the ACP token JSON file under the Gemini home directory.
7
+ */
8
+ export function getAcpTokenPath() {
9
+ const geminiHome = process.env.GEMINI_HOME || path.join(os.homedir(), ".gemini");
10
+ return path.join(geminiHome, "antigravity-acp", "acp_token.json");
11
+ }
12
+ /**
13
+ * Checks if the local ACP token file contains an active refresh token.
14
+ */
15
+ export function hasValidRefreshToken(tokenPath = getAcpTokenPath()) {
16
+ if (!fs.existsSync(tokenPath))
17
+ return false;
18
+ try {
19
+ const existing = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
20
+ return typeof existing.refresh_token === "string" && existing.refresh_token.length > 0;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ /**
27
+ * Extracts the CLI refresh token from macOS Keychain if available.
28
+ */
29
+ function extractClientId(idToken) {
30
+ if (typeof idToken !== "string")
31
+ return undefined;
32
+ try {
33
+ const parts = idToken.split(".");
34
+ if (parts.length < 2)
35
+ return undefined;
36
+ const payload = JSON.parse(Buffer.from(parts[1], "base64").toString("utf-8"));
37
+ return typeof payload.aud === "string" ? payload.aud : undefined;
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ export function readKeychainCredentials() {
44
+ if (process.platform !== "darwin")
45
+ return null;
46
+ try {
47
+ const raw = execFileSync("security", ["find-generic-password", "-s", "gemini", "-a", "antigravity", "-w"], { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"], timeout: 3000 }).trim();
48
+ if (!raw)
49
+ return null;
50
+ const b64 = raw.replace(/^go-keyring-base64:/, "");
51
+ const parsed = JSON.parse(Buffer.from(b64, "base64").toString("utf-8"));
52
+ const refreshToken = parsed?.token?.refresh_token;
53
+ if (!refreshToken)
54
+ return null;
55
+ const clientId = extractClientId(parsed.id_token);
56
+ return { refreshToken, clientId };
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Writes an authorized_user credential blob to the ACP token path with mode 0600.
64
+ */
65
+ export function writeAcpTokenFile(tokenPath, refreshToken, clientId) {
66
+ const acpBlob = {
67
+ refresh_token: refreshToken,
68
+ type: "authorized_user",
69
+ };
70
+ if (clientId) {
71
+ acpBlob.client_id = clientId;
72
+ }
73
+ fs.mkdirSync(path.dirname(tokenPath), { recursive: true, mode: 0o700 });
74
+ fs.writeFileSync(tokenPath, JSON.stringify(acpBlob, null, 2), { mode: 0o600 });
75
+ try {
76
+ fs.chmodSync(tokenPath, 0o600);
77
+ }
78
+ catch {
79
+ // Ignore chmod failure on filesystems that do not support POSIX modes
80
+ }
81
+ }
82
+ /**
83
+ * Syncs credentials from the official `agy` CLI's Keychain entry (`antigravity`)
84
+ * into `~/.gemini/antigravity-acp/acp_token.json` if the token file is missing or invalid.
85
+ */
86
+ export function syncAgyCredentials() {
87
+ const tokenPath = getAcpTokenPath();
88
+ if (hasValidRefreshToken(tokenPath)) {
89
+ return true;
90
+ }
91
+ const creds = readKeychainCredentials();
92
+ if (!creds) {
93
+ return false;
94
+ }
95
+ try {
96
+ writeAcpTokenFile(tokenPath, creds.refreshToken, creds.clientId);
97
+ return true;
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ /**
104
+ * Ensures the user is authenticated with Antigravity before starting the ACP server.
105
+ * Throws an actionable error directing the user to run `agy` in their terminal.
106
+ */
107
+ export function ensureAuthenticated() {
108
+ const ok = syncAgyCredentials();
109
+ if (!ok && !hasValidRefreshToken(getAcpTokenPath())) {
110
+ throw new Error("Not logged in to Google Antigravity. Please run 'agy' in your terminal to log in.");
111
+ }
112
+ }
113
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getPlatformKey(platform?: NodeJS.Platform, arch?: string): string | null;
2
+ export declare function extractZip(zipPath: string, targetDir: string): void;
3
+ export declare function ensureAntigravityBinary(): Promise<string>;
4
+ export declare function agyCommand(platform?: NodeJS.Platform, override?: string | undefined): readonly [string, ...string[]];
5
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"AAkBA,wBAAgB,cAAc,CAC5B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAqB,GAC1B,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOnE;AAYD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuB/D;AAcD,wBAAgB,UAAU,CACxB,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,QAAQ,qBAAgC,GACvC,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAMhC"}
@@ -0,0 +1,74 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { execFileSync } from "node:child_process";
5
+ const BINARY_URLS = {
6
+ "darwin-arm64": "https://dl.google.com/agy-extensions/releases/macos/agy-acp-server-agy_acp_server_1.1.1-darwin-arm64.zip",
7
+ "linux-x64": "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_1.1.1-linux-x86_64.zip",
8
+ "linux-arm64": "https://dl.google.com/agy-extensions/releases/linux/agy-acp-server-agy_acp_server_1.1.1-linux-arm64.zip",
9
+ "win32-x64": "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_1.1.1-windows-x86_64.zip",
10
+ "win32-arm64": "https://dl.google.com/agy-extensions/releases/windows/agy-acp-server-agy_acp_server_1.1.1-windows-arm64.zip",
11
+ };
12
+ export function getPlatformKey(platform = process.platform, arch = process.arch) {
13
+ const key = `${platform}-${arch}`;
14
+ return BINARY_URLS[key] ? key : null;
15
+ }
16
+ export function extractZip(zipPath, targetDir) {
17
+ fs.mkdirSync(targetDir, { recursive: true, mode: 0o755 });
18
+ try {
19
+ execFileSync("tar", ["-xf", zipPath, "-C", targetDir], { stdio: "ignore" });
20
+ }
21
+ catch {
22
+ execFileSync("unzip", ["-q", "-o", zipPath, "-d", targetDir], { stdio: "ignore" });
23
+ }
24
+ }
25
+ async function downloadBinaryZip(url) {
26
+ const res = await fetch(url, { signal: AbortSignal.timeout(30000) });
27
+ if (!res.ok || !res.body) {
28
+ throw new Error(`Failed to download Antigravity ACP binary: HTTP ${res.status}`);
29
+ }
30
+ const tempZip = path.join(os.tmpdir(), `agy-acp-${Date.now()}.zip`);
31
+ fs.writeFileSync(tempZip, Buffer.from(await res.arrayBuffer()));
32
+ return tempZip;
33
+ }
34
+ export async function ensureAntigravityBinary() {
35
+ const platformKey = getPlatformKey();
36
+ const url = platformKey ? BINARY_URLS[platformKey] : null;
37
+ if (!url) {
38
+ throw new Error(`Unsupported platform for Antigravity ACP: ${process.platform} (${process.arch})`);
39
+ }
40
+ const installDir = path.join(os.homedir(), ".local", "share", "antigravity-acp");
41
+ const tempZip = await downloadBinaryZip(url);
42
+ try {
43
+ extractZip(tempZip, installDir);
44
+ }
45
+ finally {
46
+ fs.rmSync(tempZip, { force: true });
47
+ }
48
+ const binaryName = process.platform === "win32" ? "agy_acp_server.exe" : "agy_acp_server.par";
49
+ const binaryPath = path.join(installDir, binaryName);
50
+ if (process.platform !== "win32" && fs.existsSync(binaryPath)) {
51
+ fs.chmodSync(binaryPath, 0o755);
52
+ }
53
+ return binaryPath;
54
+ }
55
+ function resolveExecutable(platform, override) {
56
+ const trimmed = override?.trim();
57
+ if (trimmed)
58
+ return trimmed;
59
+ const defaultName = platform === "win32" ? "agy_acp_server.exe" : "agy_acp_server.par";
60
+ const candidates = [
61
+ path.join(os.homedir(), ".local", "share", "antigravity-acp", defaultName),
62
+ path.join("/opt", "homebrew", "bin", defaultName),
63
+ path.join("/usr", "local", "bin", defaultName),
64
+ ];
65
+ return candidates.find((p) => fs.existsSync(p)) ?? defaultName;
66
+ }
67
+ export function agyCommand(platform = process.platform, override = process.env.PASEO_AGY_ACP_BIN) {
68
+ if (platform !== "darwin" && platform !== "linux" && platform !== "win32") {
69
+ throw new Error(`Antigravity ACP server does not support ${platform}`);
70
+ }
71
+ const executable = resolveExecutable(platform, override);
72
+ return platform === "linux" ? [executable, "--uid="] : [executable];
73
+ }
74
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ import readline from "node:readline";
3
+ import type { AcpConnector, AcpStreamMessage } from "@getpaseo/plugin/server/acp";
4
+ import { StreamSanitizer } from "./sanitize.js";
5
+ import { type McpProxyPool } from "./mcp-proxy.js";
6
+ export declare const DEFAULT_HANG_GRACE_MS = 5000;
7
+ export declare const DEFAULT_HANG_INACTIVITY_MS = 30000;
8
+ export declare const DEFAULT_RECYCLE_TIMEOUT_MS = 30000;
9
+ export declare const RECYCLE_ID_PREFIX = "paseo-antigravity:recycle:";
10
+ export declare const RECYCLE_INIT_ID = "paseo-antigravity:recycle:init";
11
+ export declare const RECYCLE_LOAD_ID = "paseo-antigravity:recycle:load";
12
+ export declare const RECYCLE_MODE_ID = "paseo-antigravity:recycle:mode";
13
+ export declare const RECYCLE_CONFIG_PREFIX = "paseo-antigravity:recycle:config:";
14
+ export declare function parseTrajectoryStateUpdate(line: string): {
15
+ trajectoryId: string;
16
+ state: string;
17
+ } | null;
18
+ export declare function parseStepUpdate(line: string): {
19
+ trajectoryId: string;
20
+ state: string;
21
+ target?: string;
22
+ source?: string;
23
+ } | null;
24
+ export interface PendingPrompt {
25
+ nativeSessionId: string;
26
+ sentAt: number;
27
+ lastActivityAt: number;
28
+ timer?: NodeJS.Timeout;
29
+ inactivityTimer?: NodeJS.Timeout;
30
+ }
31
+ export interface HangDetectorOptions {
32
+ graceMs?: number;
33
+ inactivityMs?: number;
34
+ onHangDeclared?: (nativeSessionId: string, promptId: string | number) => void;
35
+ now?: () => number;
36
+ }
37
+ export declare class HangDetector {
38
+ readonly graceMs: number;
39
+ readonly inactivityMs: number;
40
+ onHangDeclared?: (nativeSessionId: string, promptId: string | number) => void;
41
+ readonly pendingPrompts: Map<string | number, PendingPrompt>;
42
+ readonly lastStates: Map<string, string>;
43
+ readonly hungSessions: Set<string>;
44
+ private readonly now;
45
+ constructor(options?: HangDetectorOptions);
46
+ isHung(nativeSessionId: string): boolean;
47
+ clearHung(nativeSessionId: string): void;
48
+ private scheduleInactivityTimer;
49
+ private startGraceTimer;
50
+ recordPrompt(id: string | number, nativeSessionId: string): void;
51
+ recordActivity(nativeSessionId: string): void;
52
+ resolvePrompt(id: string | number): void;
53
+ private clearPromptTimers;
54
+ private logHangReason;
55
+ private declareHang;
56
+ private onGraceTimerFired;
57
+ private checkInactivity;
58
+ private handleWaitingForTasks;
59
+ private handleTurnCompleteCandidate;
60
+ private clearGraceTimersForSession;
61
+ processStderrLine(line: string): void;
62
+ processOutbound(msg: AcpStreamMessage): void;
63
+ processInbound(msg: AcpStreamMessage): void;
64
+ dispose(): void;
65
+ }
66
+ /**
67
+ * Strips duplicate mode configuration options from ACP session/new and session/load responses.
68
+ *
69
+ * agy_acp_server returns modes both in `result.modes` and as a setting option with `id: "mode"`
70
+ * in `result.configOptions`. Filtering out `id: "mode"` prevents duplicate controls in the Paseo UI.
71
+ */
72
+ export declare function filterConfigOptions(result: unknown): void;
73
+ export interface SystemPromptState {
74
+ pendingSystemPrompts: Map<string | number, string | undefined>;
75
+ sessionSystemPrompts: Map<string, string | undefined>;
76
+ injectedSessions: Set<string>;
77
+ }
78
+ export declare function createSystemPromptState(): SystemPromptState;
79
+ export declare function resetSystemPromptState(): void;
80
+ /** Tracks the session a turn belongs to so flushed text can be attributed to it. */
81
+ export interface InboundState {
82
+ lastSessionId: string | null;
83
+ }
84
+ export interface CachedConfigOption {
85
+ value: unknown;
86
+ type?: string;
87
+ }
88
+ export interface CachedSessionMetadata {
89
+ sessionId: string;
90
+ cwd?: string;
91
+ mcpServers?: unknown[];
92
+ _meta?: unknown;
93
+ lastModeId?: string;
94
+ lastConfigOptions: Map<string, CachedConfigOption>;
95
+ needsRecycle?: boolean;
96
+ }
97
+ export interface SessionCache {
98
+ sessions: Map<string, CachedSessionMetadata>;
99
+ pendingSessionMetadata: Map<string | number, Partial<CachedSessionMetadata>>;
100
+ cachedInitializeParams?: unknown;
101
+ }
102
+ export declare function createSessionCache(): SessionCache;
103
+ export declare function resetSessionCache(): void;
104
+ export declare function getOrCreateSession(cache: SessionCache, sessionId: string): CachedSessionMetadata;
105
+ export declare function processInboundMessage(msg: AcpStreamMessage, sanitizer?: StreamSanitizer, state?: InboundState, promptState?: SystemPromptState, sessionCache?: SessionCache): AcpStreamMessage[];
106
+ /**
107
+ * Rewrites Paseo MCP server declarations for agy_acp_server:
108
+ * 1. Routes the URL through a local proxy that normalizes the MCP protocol version.
109
+ * 2. Normalizes headers to array shape [{ name, value }].
110
+ *
111
+ * The transport type is passed through untouched. agy advertises
112
+ * `mcpCapabilities: {http: true, sse: true}` and issues streamable-HTTP POSTs either
113
+ * way, so declaring Paseo's streamable-HTTP endpoint as "sse" only misdescribed it.
114
+ */
115
+ export declare function rewriteMcpServers(servers: unknown[], proxies?: McpProxyPool): Promise<void>;
116
+ export declare function extractSessionId(msg: AcpStreamMessage): string | null;
117
+ export declare function processOutboundMessage(msg: AcpStreamMessage, proxies?: McpProxyPool, promptState?: SystemPromptState, sessionCache?: SessionCache): Promise<AcpStreamMessage>;
118
+ export interface StreamState {
119
+ isClosed: boolean;
120
+ }
121
+ export interface AntigravityConnectorOptions extends HangDetectorOptions {
122
+ spawnProcess?: (cmd: string, args: string[]) => ChildProcess | Promise<ChildProcess>;
123
+ recycleTimeoutMs?: number;
124
+ }
125
+ export interface ChildSlotParams {
126
+ cmd: string;
127
+ args: string[];
128
+ initialChild: ChildProcess;
129
+ proxies?: McpProxyPool;
130
+ options?: AntigravityConnectorOptions;
131
+ }
132
+ export declare function resolveHarnessPath(cmd: string): string | undefined;
133
+ export declare class ChildSlot {
134
+ currentChild: ChildProcess;
135
+ rlOut: readline.Interface | null;
136
+ rlErr: readline.Interface | null;
137
+ isRecycling: boolean;
138
+ isSwallowingUpdates: boolean;
139
+ readonly suppressedResponseIds: Set<string | number>;
140
+ readonly sessionCache: SessionCache;
141
+ readonly promptState: SystemPromptState;
142
+ readonly hangDetector: HangDetector;
143
+ readonly state: StreamState;
144
+ readableController: ReadableStreamDefaultController<AcpStreamMessage> | null;
145
+ private readonly cmd;
146
+ private readonly args;
147
+ private readonly spawnFn;
148
+ private readonly recycleTimeoutMs;
149
+ private readonly sanitizer;
150
+ private readonly inboundState;
151
+ private readonly pendingRequests;
152
+ private activeRecycle;
153
+ constructor(params: ChildSlotParams);
154
+ setReadableController(controller: ReadableStreamDefaultController<AcpStreamMessage>): void;
155
+ private parseJsonLine;
156
+ private tryHandleInternalRecycle;
157
+ private tryHandleSuppressedResponse;
158
+ private forwardInbound;
159
+ handleStdoutLine(line: string): void;
160
+ handleChildClose(err?: Error): void;
161
+ handleHangDeclared(nativeSessionId: string, promptId: string | number): void;
162
+ sendInternalRequest(child: ChildProcess, id: string, method: string, params?: unknown): Promise<AcpStreamMessage>;
163
+ private resyncSessionLoad;
164
+ private resyncSessionMode;
165
+ private resyncSessionConfig;
166
+ private performResync;
167
+ private cleanupOldChild;
168
+ private handleRecycleFailure;
169
+ recycleProcess(session: CachedSessionMetadata): Promise<void>;
170
+ private writeToChild;
171
+ write(msg: AcpStreamMessage, proxies?: McpProxyPool): Promise<void>;
172
+ close(): void;
173
+ abort(): void;
174
+ bindChild(child: ChildProcess): void;
175
+ }
176
+ export declare function createAcpReadableStream(slot: ChildSlot): ReadableStream<AcpStreamMessage>;
177
+ export declare function createAcpWritableStream(slot: ChildSlot, proxies?: McpProxyPool): WritableStream<AcpStreamMessage>;
178
+ /**
179
+ * Creates an in-process ACP connector stream that launches the official `agy_acp_server` binary,
180
+ * automatically downloading it if not present, and applies mode option filtering, outbound MCP adaptation,
181
+ * text sanitization, hang detection, and transparent process recycling.
182
+ *
183
+ * MCP proxies come from a process-wide pool rather than being owned by this stream.
184
+ * Antigravity persists the rewritten MCP URL into its per-session database, so a proxy
185
+ * torn down with the stream would leave resumed sessions pointing at a dead port.
186
+ */
187
+ export declare function createAntigravityConnector(proxies?: McpProxyPool, options?: AntigravityConnectorOptions): AcpConnector;
188
+ //# sourceMappingURL=connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../src/connector.ts"],"names":[],"mappings":"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"}