@simonepri/refined-antigravity-acp 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +2 -51
- package/dist/bin/cli.js.map +1 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +44 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/{command.d.ts → core/command.d.ts} +4 -0
- package/dist/src/core/command.d.ts.map +1 -0
- package/dist/src/{command.js → core/command.js} +27 -11
- package/dist/src/core/command.js.map +1 -0
- package/dist/src/core/pipeline.d.ts +20 -0
- package/dist/src/core/pipeline.d.ts.map +1 -0
- package/dist/src/core/pipeline.js +94 -0
- package/dist/src/core/pipeline.js.map +1 -0
- package/dist/src/core/session-cache.d.ts +12 -0
- package/dist/src/core/session-cache.d.ts.map +1 -0
- package/dist/src/core/session-cache.js +85 -0
- package/dist/src/core/session-cache.js.map +1 -0
- package/dist/src/core/supervisor.d.ts +90 -0
- package/dist/src/core/supervisor.d.ts.map +1 -0
- package/dist/src/core/supervisor.js +582 -0
- package/dist/src/core/supervisor.js.map +1 -0
- package/dist/src/core/telemetry.d.ts +23 -0
- package/dist/src/core/telemetry.d.ts.map +1 -0
- package/dist/src/core/telemetry.js +75 -0
- package/dist/src/core/telemetry.js.map +1 -0
- package/dist/src/core/transport.d.ts +7 -0
- package/dist/src/core/transport.d.ts.map +1 -0
- package/dist/src/core/transport.js +37 -0
- package/dist/src/core/transport.js.map +1 -0
- package/dist/src/core/types.d.ts +293 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +78 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/fixes/active-turn-collision/index.d.ts +27 -0
- package/dist/src/fixes/active-turn-collision/index.d.ts.map +1 -0
- package/dist/src/fixes/active-turn-collision/index.js +117 -0
- package/dist/src/fixes/active-turn-collision/index.js.map +1 -0
- package/dist/src/fixes/cancellation-leak/index.d.ts +17 -0
- package/dist/src/fixes/cancellation-leak/index.d.ts.map +1 -0
- package/dist/src/fixes/cancellation-leak/index.js +57 -0
- package/dist/src/fixes/cancellation-leak/index.js.map +1 -0
- package/dist/src/fixes/dangling-tool-calls/index.d.ts +32 -0
- package/dist/src/fixes/dangling-tool-calls/index.d.ts.map +1 -0
- package/dist/src/fixes/dangling-tool-calls/index.js +188 -0
- package/dist/src/fixes/dangling-tool-calls/index.js.map +1 -0
- package/dist/src/fixes/dropped-history-chunks/index.d.ts +47 -0
- package/dist/src/fixes/dropped-history-chunks/index.d.ts.map +1 -0
- package/dist/src/fixes/dropped-history-chunks/index.js +202 -0
- package/dist/src/fixes/dropped-history-chunks/index.js.map +1 -0
- package/dist/src/fixes/flattened-model-efforts/index.d.ts +39 -0
- package/dist/src/fixes/flattened-model-efforts/index.d.ts.map +1 -0
- package/dist/src/fixes/flattened-model-efforts/index.js +306 -0
- package/dist/src/fixes/flattened-model-efforts/index.js.map +1 -0
- package/dist/src/fixes/index.d.ts +25 -0
- package/dist/src/fixes/index.d.ts.map +1 -0
- package/dist/src/fixes/index.js +61 -0
- package/dist/src/fixes/index.js.map +1 -0
- package/dist/src/fixes/malformed-stream-syntax/index.d.ts +44 -0
- package/dist/src/fixes/malformed-stream-syntax/index.d.ts.map +1 -0
- package/dist/src/fixes/malformed-stream-syntax/index.js +346 -0
- package/dist/src/fixes/malformed-stream-syntax/index.js.map +1 -0
- package/dist/src/fixes/missing-localharness/index.d.ts +20 -0
- package/dist/src/fixes/missing-localharness/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-localharness/index.js +103 -0
- package/dist/src/fixes/missing-localharness/index.js.map +1 -0
- package/dist/src/fixes/missing-question-fallback/index.d.ts +30 -0
- package/dist/src/fixes/missing-question-fallback/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-question-fallback/index.js +119 -0
- package/dist/src/fixes/missing-question-fallback/index.js.map +1 -0
- package/dist/src/fixes/missing-slash-skills/index.d.ts +17 -0
- package/dist/src/fixes/missing-slash-skills/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-slash-skills/index.js +107 -0
- package/dist/src/fixes/missing-slash-skills/index.js.map +1 -0
- package/dist/src/{skills.d.ts → fixes/missing-slash-skills/skills.d.ts} +2 -1
- package/dist/src/fixes/missing-slash-skills/skills.d.ts.map +1 -0
- package/dist/src/fixes/missing-slash-skills/skills.js +199 -0
- package/dist/src/fixes/missing-slash-skills/skills.js.map +1 -0
- package/dist/src/fixes/missing-system-prompt/index.d.ts +19 -0
- package/dist/src/fixes/missing-system-prompt/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-system-prompt/index.js +118 -0
- package/dist/src/fixes/missing-system-prompt/index.js.map +1 -0
- package/dist/src/fixes/missing-usage-metrics/index.d.ts +26 -0
- package/dist/src/fixes/missing-usage-metrics/index.d.ts.map +1 -0
- package/dist/src/fixes/missing-usage-metrics/index.js +132 -0
- package/dist/src/fixes/missing-usage-metrics/index.js.map +1 -0
- package/dist/src/fixes/noisy-stderr-logs/index.d.ts +15 -0
- package/dist/src/fixes/noisy-stderr-logs/index.d.ts.map +1 -0
- package/dist/src/fixes/noisy-stderr-logs/index.js +23 -0
- package/dist/src/fixes/noisy-stderr-logs/index.js.map +1 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.d.ts +26 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.d.ts.map +1 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.js +47 -0
- package/dist/src/fixes/non-canonical-mode-ids/index.js.map +1 -0
- package/dist/src/fixes/orphaned-checkpoints/index.d.ts +31 -0
- package/dist/src/fixes/orphaned-checkpoints/index.d.ts.map +1 -0
- package/dist/src/fixes/orphaned-checkpoints/index.js +82 -0
- package/dist/src/fixes/orphaned-checkpoints/index.js.map +1 -0
- package/dist/src/fixes/silent-background-tasks/index.d.ts +66 -0
- package/dist/src/fixes/silent-background-tasks/index.d.ts.map +1 -0
- package/dist/src/fixes/silent-background-tasks/index.js +491 -0
- package/dist/src/fixes/silent-background-tasks/index.js.map +1 -0
- package/dist/src/{mcp-proxy.d.ts → fixes/stale-mcp-endpoints/index.d.ts} +31 -4
- package/dist/src/fixes/stale-mcp-endpoints/index.d.ts.map +1 -0
- package/dist/src/{mcp-proxy.js → fixes/stale-mcp-endpoints/index.js} +162 -14
- package/dist/src/fixes/stale-mcp-endpoints/index.js.map +1 -0
- package/dist/src/fixes/subagent-hang/index.d.ts +2 -0
- package/dist/src/fixes/subagent-hang/index.d.ts.map +1 -0
- package/dist/src/fixes/subagent-hang/index.js +2 -0
- package/dist/src/fixes/subagent-hang/index.js.map +1 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.d.ts +43 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.d.ts.map +1 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.js +114 -0
- package/dist/src/fixes/subagent-hang/subagent-hang.js.map +1 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +43 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/protobuf.d.ts +9 -0
- package/dist/src/lib/protobuf.d.ts.map +1 -0
- package/dist/src/lib/protobuf.js +89 -0
- package/dist/src/lib/protobuf.js.map +1 -0
- package/package.json +22 -7
- package/readme.md +147 -141
- package/assets/icon.svg +0 -3
- package/build/paseo/assets/icon.svg +0 -3
- package/build/paseo/assets/logo.svg +0 -62
- package/build/paseo/index.server.ts +0 -9
- package/build/paseo/paseo-plugin.json +0 -7
- package/build/paseo/server/agy-patch.ts +0 -445
- package/build/paseo/server/auth.ts +0 -122
- package/build/paseo/server/command.ts +0 -92
- package/build/paseo/server/connector.ts +0 -1371
- package/build/paseo/server/history.ts +0 -157
- package/build/paseo/server/mcp-proxy.ts +0 -375
- package/build/paseo/server/provider.ts +0 -37
- package/build/paseo/server/sanitize.ts +0 -286
- package/build/paseo/server/skills.ts +0 -183
- package/build/paseo/server/steering.ts +0 -199
- package/dist/index.server.d.ts +0 -4
- package/dist/index.server.d.ts.map +0 -1
- package/dist/index.server.js +0 -7
- package/dist/index.server.js.map +0 -1
- package/dist/src/agy-patch.d.ts +0 -65
- package/dist/src/agy-patch.d.ts.map +0 -1
- package/dist/src/agy-patch.js +0 -351
- package/dist/src/agy-patch.js.map +0 -1
- package/dist/src/auth.d.ts +0 -27
- package/dist/src/auth.d.ts.map +0 -1
- package/dist/src/auth.js +0 -113
- package/dist/src/auth.js.map +0 -1
- package/dist/src/command.d.ts.map +0 -1
- package/dist/src/command.js.map +0 -1
- package/dist/src/connector.d.ts +0 -187
- package/dist/src/connector.d.ts.map +0 -1
- package/dist/src/connector.js +0 -1127
- package/dist/src/connector.js.map +0 -1
- package/dist/src/history.d.ts +0 -12
- package/dist/src/history.d.ts.map +0 -1
- package/dist/src/history.js +0 -152
- package/dist/src/history.js.map +0 -1
- package/dist/src/mcp-proxy.d.ts.map +0 -1
- package/dist/src/mcp-proxy.js.map +0 -1
- package/dist/src/provider.d.ts +0 -11
- package/dist/src/provider.d.ts.map +0 -1
- package/dist/src/provider.js +0 -31
- package/dist/src/provider.js.map +0 -1
- package/dist/src/sanitize.d.ts +0 -29
- package/dist/src/sanitize.d.ts.map +0 -1
- package/dist/src/sanitize.js +0 -237
- package/dist/src/sanitize.js.map +0 -1
- package/dist/src/skills.d.ts.map +0 -1
- package/dist/src/skills.js +0 -140
- package/dist/src/skills.js.map +0 -1
- package/dist/src/steering.d.ts +0 -30
- package/dist/src/steering.d.ts.map +0 -1
- package/dist/src/steering.js +0 -174
- package/dist/src/steering.js.map +0 -1
- package/paseo-plugin.json +0 -8
- package/scripts/build-paseo.js +0 -60
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* When an upstream process hangs or panics and is recycled, resending client `mcpServers`
|
|
4
|
+
* with stale ephemeral localhost ports fails because proxy endpoints have moved or closed.
|
|
5
|
+
*
|
|
6
|
+
* Solution:
|
|
7
|
+
* Establishes a dynamic loopback MCP proxy pool that intercepts outbound `mcpServers` URLs,
|
|
8
|
+
* remaps ephemeral ports to stable virtual endpoints, and rewrites headers across process restarts.
|
|
9
|
+
*/
|
|
1
10
|
import fs from "node:fs";
|
|
2
11
|
import http from "node:http";
|
|
3
12
|
import https from "node:https";
|
|
4
13
|
import os from "node:os";
|
|
5
14
|
import path from "node:path";
|
|
15
|
+
import { ACP_METHODS, getFixData, setFixData, } from "../../core/types.js";
|
|
16
|
+
import { getOrCreateSession, extractSessionId } from "../../core/session-cache.js";
|
|
6
17
|
/**
|
|
7
|
-
* Protocol versions the target MCP server understands.
|
|
18
|
+
* Protocol versions the target MCP server understands. Standard MCP servers embed
|
|
8
19
|
* `@modelcontextprotocol/sdk`, whose streamable-HTTP transport rejects any request
|
|
9
20
|
* carrying an `MCP-Protocol-Version` header outside this list with HTTP 400.
|
|
10
21
|
*/
|
|
@@ -16,7 +27,7 @@ export const DEFAULT_SUPPORTED_PROTOCOL_VERSIONS = [
|
|
|
16
27
|
"2024-10-07",
|
|
17
28
|
];
|
|
18
29
|
/** Headers that are meaningful only for a single hop and must not be forwarded. */
|
|
19
|
-
const HOP_BY_HOP_HEADERS = [
|
|
30
|
+
const HOP_BY_HOP_HEADERS = new Set([
|
|
20
31
|
"connection",
|
|
21
32
|
"keep-alive",
|
|
22
33
|
"proxy-authenticate",
|
|
@@ -25,10 +36,10 @@ const HOP_BY_HOP_HEADERS = [
|
|
|
25
36
|
"trailer",
|
|
26
37
|
"transfer-encoding",
|
|
27
38
|
"upgrade",
|
|
28
|
-
];
|
|
39
|
+
]);
|
|
29
40
|
function defaultPortFile() {
|
|
30
|
-
const base = process.env.
|
|
31
|
-
return path.join(base, "
|
|
41
|
+
const base = process.env.REFINED_AGY_DATA_DIR ?? path.join(os.homedir(), ".refined-antigravity");
|
|
42
|
+
return path.join(base, "mcp-proxy-ports.json");
|
|
32
43
|
}
|
|
33
44
|
function readPortFile(file) {
|
|
34
45
|
try {
|
|
@@ -88,7 +99,7 @@ function describeJsonRpc(body) {
|
|
|
88
99
|
}
|
|
89
100
|
function formatNotificationAbsorbLog(statusCode, method) {
|
|
90
101
|
const methodLabel = method ? '"' + method + '"' : "unknown";
|
|
91
|
-
const base = "[
|
|
102
|
+
const base = "[refined-antigravity-acp][mcp-proxy] Absorbed upstream " +
|
|
92
103
|
statusCode +
|
|
93
104
|
" on notification " +
|
|
94
105
|
methodLabel +
|
|
@@ -109,8 +120,9 @@ function normalizeAccept(rawAccept) {
|
|
|
109
120
|
* A loopback reverse proxy for a single upstream MCP origin.
|
|
110
121
|
*
|
|
111
122
|
* Google's `agy_acp_server` ships an MCP client that advertises protocol version
|
|
112
|
-
* `2026-07-28`, which
|
|
123
|
+
* `2026-07-28`, which standard MCP daemons reject with HTTP 400 on every request after
|
|
113
124
|
* `initialize`. This proxy normalizes that header down to a version the upstream
|
|
125
|
+
|
|
114
126
|
* accepts, turning a hard transport failure into ordinary version negotiation.
|
|
115
127
|
*
|
|
116
128
|
* It is origin-bound and forwards the request path and query verbatim, so
|
|
@@ -118,7 +130,7 @@ function normalizeAccept(rawAccept) {
|
|
|
118
130
|
* (`/.well-known/oauth-protected-resource/...`) reach the real upstream path
|
|
119
131
|
* instead of being collapsed onto the MCP endpoint.
|
|
120
132
|
*/
|
|
121
|
-
export class
|
|
133
|
+
export class McpProxyServer {
|
|
122
134
|
server = null;
|
|
123
135
|
port = null;
|
|
124
136
|
origin;
|
|
@@ -133,10 +145,12 @@ export class McpProxy {
|
|
|
133
145
|
this.portFile = options.portFile === undefined ? defaultPortFile() : options.portFile;
|
|
134
146
|
}
|
|
135
147
|
buildForwardHeaders(req, bodyLength) {
|
|
136
|
-
const headers = {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
148
|
+
const headers = {};
|
|
149
|
+
for (const [name, val] of Object.entries(req.headers)) {
|
|
150
|
+
if (name !== "host" && !HOP_BY_HOP_HEADERS.has(name) && val !== undefined) {
|
|
151
|
+
headers[name] = val;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
140
154
|
const version = req.headers["mcp-protocol-version"];
|
|
141
155
|
if (typeof version === "string" && !this.supportedProtocolVersions.has(version)) {
|
|
142
156
|
headers["mcp-protocol-version"] = this.fallbackProtocolVersion;
|
|
@@ -270,6 +284,8 @@ export class McpProxy {
|
|
|
270
284
|
await new Promise((resolve) => server.close(() => resolve()));
|
|
271
285
|
}
|
|
272
286
|
}
|
|
287
|
+
/** Backward compatibility alias */
|
|
288
|
+
export { McpProxyServer as McpProxy };
|
|
273
289
|
/**
|
|
274
290
|
* Process-wide pool of proxies keyed by upstream origin.
|
|
275
291
|
*
|
|
@@ -288,7 +304,7 @@ export class McpProxyPool {
|
|
|
288
304
|
let pending = this.proxies.get(origin);
|
|
289
305
|
if (!pending) {
|
|
290
306
|
pending = (async () => {
|
|
291
|
-
const proxy = new
|
|
307
|
+
const proxy = new McpProxyServer(origin, this.options);
|
|
292
308
|
await proxy.start();
|
|
293
309
|
return proxy;
|
|
294
310
|
})();
|
|
@@ -305,4 +321,136 @@ export class McpProxyPool {
|
|
|
305
321
|
}
|
|
306
322
|
/** Shared pool. One proxy per upstream origin for the lifetime of the daemon process. */
|
|
307
323
|
export const sharedMcpProxyPool = new McpProxyPool();
|
|
308
|
-
|
|
324
|
+
function normalizeArrayHeaders(headers) {
|
|
325
|
+
const result = [];
|
|
326
|
+
for (const h of headers) {
|
|
327
|
+
if (!h || typeof h !== "object")
|
|
328
|
+
continue;
|
|
329
|
+
const entry = h;
|
|
330
|
+
const name = typeof entry.name === "string" ? entry.name : typeof entry.key === "string" ? entry.key : "";
|
|
331
|
+
const value = typeof entry.value === "string" ? entry.value : "";
|
|
332
|
+
if (name)
|
|
333
|
+
result.push({ name, value });
|
|
334
|
+
}
|
|
335
|
+
return result;
|
|
336
|
+
}
|
|
337
|
+
function normalizeObjectHeaders(headers) {
|
|
338
|
+
const result = [];
|
|
339
|
+
for (const [name, val] of Object.entries(headers)) {
|
|
340
|
+
if (typeof val === "string")
|
|
341
|
+
result.push({ name, value: val });
|
|
342
|
+
}
|
|
343
|
+
return result;
|
|
344
|
+
}
|
|
345
|
+
export function normalizeMcpHeaders(headers) {
|
|
346
|
+
if (!headers)
|
|
347
|
+
return undefined;
|
|
348
|
+
if (Array.isArray(headers))
|
|
349
|
+
return normalizeArrayHeaders(headers);
|
|
350
|
+
if (typeof headers === "object") {
|
|
351
|
+
return normalizeObjectHeaders(headers);
|
|
352
|
+
}
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
export const MCP_SERVERS_KEY = "mcpServers";
|
|
356
|
+
export const MCP_SERVERS_ORIGINAL_KEY = "mcpServersOriginal";
|
|
357
|
+
export function getSessionMcpServers(session) {
|
|
358
|
+
return getFixData(session, MCP_SERVERS_KEY);
|
|
359
|
+
}
|
|
360
|
+
export function setSessionMcpServers(session, servers) {
|
|
361
|
+
setFixData(session, MCP_SERVERS_KEY, servers);
|
|
362
|
+
}
|
|
363
|
+
export function getSessionMcpServersOriginal(session) {
|
|
364
|
+
return getFixData(session, MCP_SERVERS_ORIGINAL_KEY);
|
|
365
|
+
}
|
|
366
|
+
export function setSessionMcpServersOriginal(session, servers) {
|
|
367
|
+
setFixData(session, MCP_SERVERS_ORIGINAL_KEY, servers);
|
|
368
|
+
}
|
|
369
|
+
export async function rewriteMcpServers(servers, proxies) {
|
|
370
|
+
for (const s of servers) {
|
|
371
|
+
if (!s || typeof s !== "object")
|
|
372
|
+
continue;
|
|
373
|
+
const server = s;
|
|
374
|
+
if (server.url && proxies) {
|
|
375
|
+
server.url = await proxies.rewriteUrl(server.url);
|
|
376
|
+
}
|
|
377
|
+
const normalized = normalizeMcpHeaders(server.headers);
|
|
378
|
+
if (normalized) {
|
|
379
|
+
server.headers = normalized;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function handleSessionLoadMcp(params, context) {
|
|
384
|
+
if (typeof params.sessionId !== "string" || params.mcpServers)
|
|
385
|
+
return false;
|
|
386
|
+
const session = getOrCreateSession(context.sessionCache, params.sessionId);
|
|
387
|
+
const cachedServers = getSessionMcpServers(session);
|
|
388
|
+
if (cachedServers) {
|
|
389
|
+
params.mcpServers = structuredClone(cachedServers);
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
function recordOutboundMcpServersOriginal(msg, context, sessionId, original) {
|
|
395
|
+
if (!original)
|
|
396
|
+
return;
|
|
397
|
+
if (sessionId) {
|
|
398
|
+
const session = getOrCreateSession(context.sessionCache, sessionId);
|
|
399
|
+
setSessionMcpServersOriginal(session, original);
|
|
400
|
+
}
|
|
401
|
+
else if ("id" in msg && msg.id !== null && msg.id !== undefined) {
|
|
402
|
+
const pending = context.sessionCache.pendingSessionMetadata.get(msg.id) ?? {};
|
|
403
|
+
pending.fixData ??= new Map();
|
|
404
|
+
pending.fixData.set(MCP_SERVERS_ORIGINAL_KEY, original);
|
|
405
|
+
context.sessionCache.pendingSessionMetadata.set(msg.id, pending);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
function recordOutboundMcpServers(msg, context, sessionId, servers) {
|
|
409
|
+
if (!servers)
|
|
410
|
+
return;
|
|
411
|
+
if (sessionId) {
|
|
412
|
+
const session = getOrCreateSession(context.sessionCache, sessionId);
|
|
413
|
+
setSessionMcpServers(session, servers);
|
|
414
|
+
}
|
|
415
|
+
else if ("id" in msg && msg.id !== null && msg.id !== undefined) {
|
|
416
|
+
const pending = context.sessionCache.pendingSessionMetadata.get(msg.id) ?? {};
|
|
417
|
+
pending.fixData ??= new Map();
|
|
418
|
+
pending.fixData.set(MCP_SERVERS_KEY, servers);
|
|
419
|
+
context.sessionCache.pendingSessionMetadata.set(msg.id, pending);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
export const staleMcpEndpointsFix = {
|
|
423
|
+
name: "stale-mcp-endpoints",
|
|
424
|
+
description: "Dynamic loopback proxy pool to maintain stable MCP tool URLs across child process recycling",
|
|
425
|
+
async onOutbound(msg, context) {
|
|
426
|
+
if (!("method" in msg))
|
|
427
|
+
return msg;
|
|
428
|
+
const params = msg.params;
|
|
429
|
+
if (!params)
|
|
430
|
+
return msg;
|
|
431
|
+
if (msg.method === ACP_METHODS.SESSION_LOAD && handleSessionLoadMcp(params, context)) {
|
|
432
|
+
return msg;
|
|
433
|
+
}
|
|
434
|
+
if (Array.isArray(params.mcpServers)) {
|
|
435
|
+
const sessionId = extractSessionId(msg);
|
|
436
|
+
const original = structuredClone(params.mcpServers);
|
|
437
|
+
recordOutboundMcpServersOriginal(msg, context, sessionId, original);
|
|
438
|
+
await rewriteMcpServers(params.mcpServers, context.proxies);
|
|
439
|
+
recordOutboundMcpServers(msg, context, sessionId, params.mcpServers);
|
|
440
|
+
}
|
|
441
|
+
return msg;
|
|
442
|
+
},
|
|
443
|
+
async onRecycle(session, _newChild, context) {
|
|
444
|
+
const original = getSessionMcpServersOriginal(session);
|
|
445
|
+
if (!original)
|
|
446
|
+
return;
|
|
447
|
+
const reRewritten = structuredClone(original);
|
|
448
|
+
await rewriteMcpServers(reRewritten, context.proxies);
|
|
449
|
+
setSessionMcpServers(session, reRewritten);
|
|
450
|
+
},
|
|
451
|
+
dispose() {
|
|
452
|
+
void sharedMcpProxyPool.stopAll();
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
export const mcpPortRemappingFix = staleMcpEndpointsFix;
|
|
456
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/stale-mcp-endpoints/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fixes/subagent-hang/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/fixes/subagent-hang/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Subprocesses can enter unmonitored deadlocks or panic (`could not find doneCh for checkpoint`)
|
|
4
|
+
* during background subagent execution, causing turns to hang indefinitely with no client response.
|
|
5
|
+
*
|
|
6
|
+
* Solution:
|
|
7
|
+
* Monitors telemetry stream events and stderr panic signatures in real-time, declaring hangs
|
|
8
|
+
* to trigger automatic supervisor process recycling and turn re-execution.
|
|
9
|
+
*/
|
|
10
|
+
import { type AcpStreamMessage, type AcpFix } from "../../core/types.js";
|
|
11
|
+
import { RAW_WS_MSG_MARKER, TELEMETRY_STATES, TARGET_ENVIRONMENT, parseTrajectoryStateUpdate, parseStepUpdate, type TrajectoryStateUpdate, type StepUpdate } from "../../core/telemetry.js";
|
|
12
|
+
import { DONE_CH_PANIC_MARKER } from "../orphaned-checkpoints/index.js";
|
|
13
|
+
export { RAW_WS_MSG_MARKER, TELEMETRY_STATES, TARGET_ENVIRONMENT, DONE_CH_PANIC_MARKER, parseTrajectoryStateUpdate, parseStepUpdate, };
|
|
14
|
+
export type { TrajectoryStateUpdate, StepUpdate };
|
|
15
|
+
export interface HangDetectorOptions {
|
|
16
|
+
onHangDeclared?: ((nativeSessionId: string, promptId: string | number) => void) | undefined;
|
|
17
|
+
onSessionIdle?: ((nativeSessionId: string) => void) | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare class HangDetector {
|
|
20
|
+
onHangDeclared?: ((nativeSessionId: string, promptId: string | number) => void) | undefined;
|
|
21
|
+
onSessionIdle?: ((nativeSessionId: string) => void) | undefined;
|
|
22
|
+
readonly pendingPrompts: Map<string | number, string>;
|
|
23
|
+
readonly lastStates: Map<string, string>;
|
|
24
|
+
constructor(options?: HangDetectorOptions);
|
|
25
|
+
getPendingPrompt(id: string | number): string | undefined;
|
|
26
|
+
isWaitingForTasks(nativeSessionId: string): boolean;
|
|
27
|
+
recordPrompt(id: string | number, nativeSessionId: string): void;
|
|
28
|
+
resolvePrompt(id: string | number): void;
|
|
29
|
+
declareHang(nativeSessionId: string, promptId: string | number): void;
|
|
30
|
+
private declareCrashForAllPending;
|
|
31
|
+
private handleTrajectoryState;
|
|
32
|
+
processStderrLine(line: string): void;
|
|
33
|
+
processOutbound(msg: AcpStreamMessage): void;
|
|
34
|
+
processInbound(msg: AcpStreamMessage): void;
|
|
35
|
+
dispose(): void;
|
|
36
|
+
}
|
|
37
|
+
export declare function createSubagentHangFix(options?: HangDetectorOptions): AcpFix & {
|
|
38
|
+
detector: HangDetector;
|
|
39
|
+
};
|
|
40
|
+
export declare const subagentHangFix: AcpFix & {
|
|
41
|
+
detector: HangDetector;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=subagent-hang.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-hang.d.ts","sourceRoot":"","sources":["../../../../src/fixes/subagent-hang/subagent-hang.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,MAAM,EAEZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,GAChB,CAAC;AACF,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5F,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACjE;AAED,qBAAa,YAAY;IAChB,cAAc,CAAC,EAClB,CAAC,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,GAC9D,SAAS,CAAC;IACP,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvE,SAAgB,cAAc,+BAAsC;IACpE,SAAgB,UAAU,sBAA6B;gBAE3C,OAAO,CAAC,EAAE,mBAAmB;IAKzC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzD,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;IAInD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAIhE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5E,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,qBAAqB;IAW7B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrC,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAQ5C,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAM3C,OAAO,IAAI,IAAI;CAIhB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,GAAG;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE,CAoCrC;AAED,eAAO,MAAM,eAAe;cAtCJ,YAAY;CAsCkB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Problem:
|
|
3
|
+
* Subprocesses can enter unmonitored deadlocks or panic (`could not find doneCh for checkpoint`)
|
|
4
|
+
* during background subagent execution, causing turns to hang indefinitely with no client response.
|
|
5
|
+
*
|
|
6
|
+
* Solution:
|
|
7
|
+
* Monitors telemetry stream events and stderr panic signatures in real-time, declaring hangs
|
|
8
|
+
* to trigger automatic supervisor process recycling and turn re-execution.
|
|
9
|
+
*/
|
|
10
|
+
import { ACP_METHODS, isJsonRpcRequest, } from "../../core/types.js";
|
|
11
|
+
import { extractSessionId } from "../../core/session-cache.js";
|
|
12
|
+
import { RAW_WS_MSG_MARKER, TELEMETRY_STATES, TARGET_ENVIRONMENT, parseTrajectoryStateUpdate, parseStepUpdate, } from "../../core/telemetry.js";
|
|
13
|
+
import { DONE_CH_PANIC_MARKER } from "../orphaned-checkpoints/index.js";
|
|
14
|
+
export { RAW_WS_MSG_MARKER, TELEMETRY_STATES, TARGET_ENVIRONMENT, DONE_CH_PANIC_MARKER, parseTrajectoryStateUpdate, parseStepUpdate, };
|
|
15
|
+
export class HangDetector {
|
|
16
|
+
onHangDeclared;
|
|
17
|
+
onSessionIdle;
|
|
18
|
+
pendingPrompts = new Map();
|
|
19
|
+
lastStates = new Map();
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.onHangDeclared = options?.onHangDeclared;
|
|
22
|
+
this.onSessionIdle = options?.onSessionIdle;
|
|
23
|
+
}
|
|
24
|
+
getPendingPrompt(id) {
|
|
25
|
+
return this.pendingPrompts.get(id);
|
|
26
|
+
}
|
|
27
|
+
isWaitingForTasks(nativeSessionId) {
|
|
28
|
+
return this.lastStates.get(nativeSessionId) === TELEMETRY_STATES.WAITING_FOR_TASKS;
|
|
29
|
+
}
|
|
30
|
+
recordPrompt(id, nativeSessionId) {
|
|
31
|
+
this.pendingPrompts.set(id, nativeSessionId);
|
|
32
|
+
}
|
|
33
|
+
resolvePrompt(id) {
|
|
34
|
+
this.pendingPrompts.delete(id);
|
|
35
|
+
}
|
|
36
|
+
declareHang(nativeSessionId, promptId) {
|
|
37
|
+
this.pendingPrompts.delete(promptId);
|
|
38
|
+
console.error(`[refined-antigravity-acp] Harness crash detected for session ${nativeSessionId}, prompt ${promptId} (doneCh for checkpoint)`);
|
|
39
|
+
this.onHangDeclared?.(nativeSessionId, promptId);
|
|
40
|
+
}
|
|
41
|
+
declareCrashForAllPending() {
|
|
42
|
+
for (const [promptId, nativeSessionId] of Array.from(this.pendingPrompts.entries())) {
|
|
43
|
+
this.declareHang(nativeSessionId, promptId);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
handleTrajectoryState(trajectoryId, state) {
|
|
47
|
+
this.lastStates.set(trajectoryId, state);
|
|
48
|
+
if (state === TELEMETRY_STATES.FULLY_IDLE ||
|
|
49
|
+
state === TELEMETRY_STATES.COMPLETE ||
|
|
50
|
+
state === TELEMETRY_STATES.IDLE) {
|
|
51
|
+
this.onSessionIdle?.(trajectoryId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
processStderrLine(line) {
|
|
55
|
+
if (line.includes(DONE_CH_PANIC_MARKER)) {
|
|
56
|
+
this.declareCrashForAllPending();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const tsu = parseTrajectoryStateUpdate(line);
|
|
60
|
+
if (tsu) {
|
|
61
|
+
this.handleTrajectoryState(tsu.trajectoryId, tsu.state);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
processOutbound(msg) {
|
|
65
|
+
if (!isJsonRpcRequest(msg) || msg.method !== ACP_METHODS.SESSION_PROMPT)
|
|
66
|
+
return;
|
|
67
|
+
const sessionId = extractSessionId(msg);
|
|
68
|
+
if (sessionId) {
|
|
69
|
+
this.recordPrompt(msg.id, sessionId);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
processInbound(msg) {
|
|
73
|
+
if ("id" in msg && msg.id !== null && msg.id !== undefined) {
|
|
74
|
+
this.resolvePrompt(msg.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
dispose() {
|
|
78
|
+
this.pendingPrompts.clear();
|
|
79
|
+
this.lastStates.clear();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function createSubagentHangFix(options) {
|
|
83
|
+
const detector = new HangDetector(options);
|
|
84
|
+
return {
|
|
85
|
+
name: "subagent-hang",
|
|
86
|
+
description: "Subagent crash recovery and telemetry watchdog",
|
|
87
|
+
detector,
|
|
88
|
+
onOutbound(msg) {
|
|
89
|
+
detector.processOutbound(msg);
|
|
90
|
+
return msg;
|
|
91
|
+
},
|
|
92
|
+
onInbound(msg) {
|
|
93
|
+
detector.processInbound(msg);
|
|
94
|
+
return [msg];
|
|
95
|
+
},
|
|
96
|
+
onStderrLine(line, context) {
|
|
97
|
+
if (detector.onHangDeclared === undefined) {
|
|
98
|
+
detector.onHangDeclared = (sessionId, promptId) => {
|
|
99
|
+
context.declareHang(sessionId, promptId, "hang");
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
detector.processStderrLine(line);
|
|
103
|
+
return false;
|
|
104
|
+
},
|
|
105
|
+
onRecycle() {
|
|
106
|
+
detector.dispose();
|
|
107
|
+
},
|
|
108
|
+
dispose() {
|
|
109
|
+
detector.dispose();
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export const subagentHangFix = createSubagentHangFix();
|
|
114
|
+
//# sourceMappingURL=subagent-hang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-hang.js","sourceRoot":"","sources":["../../../../src/fixes/subagent-hang/subagent-hang.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ChildProcess } from "node:child_process";
|
|
2
|
+
import type { AcpConnector, AcpStreamMessage } from "./core/types.js";
|
|
3
|
+
import { type McpProxyPool } from "./fixes/stale-mcp-endpoints/index.js";
|
|
4
|
+
export * from "./fixes/index.js";
|
|
5
|
+
export * from "./core/types.js";
|
|
6
|
+
export * from "./core/session-cache.js";
|
|
7
|
+
export * from "./core/transport.js";
|
|
8
|
+
export * from "./core/pipeline.js";
|
|
9
|
+
export * from "./core/supervisor.js";
|
|
10
|
+
export * from "./core/command.js";
|
|
11
|
+
export declare const PROMPT_RETRY_DELAY_MS = 500;
|
|
12
|
+
export interface AntigravityConnectorOptions {
|
|
13
|
+
spawnProcess?: (cmd: string, args: string[]) => ChildProcess | Promise<ChildProcess>;
|
|
14
|
+
recycleTimeoutMs?: number;
|
|
15
|
+
/** Total spawn+resync attempts per recycle before giving up (including the first). */
|
|
16
|
+
recycleSpawnAttempts?: number;
|
|
17
|
+
/** Delay between failed respawn attempts. */
|
|
18
|
+
recycleRetryDelayMs?: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates an in-process ACP connector stream that launches the official `agy_acp_server` binary,
|
|
22
|
+
* automatically downloading it if not present, and applies mode option filtering, outbound MCP adaptation,
|
|
23
|
+
* text sanitization, hang detection, and transparent process recycling.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createAntigravityConnector(proxies?: McpProxyPool, options?: AntigravityConnectorOptions): AcpConnector;
|
|
26
|
+
export type { AcpConnector, AcpStreamMessage };
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAa,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWjF,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,sCAAsC,CAAC;AAG7F,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,eAAO,MAAM,qBAAqB,MAAgC,CAAC;AAEnE,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,GAAE,YAAiC,EAC1C,OAAO,CAAC,EAAE,2BAA2B,GACpC,YAAY,CAqBd;AAED,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Core generic transport and plumbing
|
|
2
|
+
import { AcpPipeline } from "./core/pipeline.js";
|
|
3
|
+
import { defaultSpawnProcess } from "./core/transport.js";
|
|
4
|
+
import { ProcessSupervisor } from "./core/supervisor.js";
|
|
5
|
+
// Dedicated Fixes (Mapped 1:1 to Readme Table)
|
|
6
|
+
import { createDefaultFixes } from "./fixes/index.js";
|
|
7
|
+
import { resolveBinaryCommand } from "./fixes/missing-localharness/index.js";
|
|
8
|
+
import { DEFAULT_PROMPT_RETRY_DELAY_MS } from "./fixes/active-turn-collision/index.js";
|
|
9
|
+
import { sharedMcpProxyPool } from "./fixes/stale-mcp-endpoints/index.js";
|
|
10
|
+
// Export all fixes and plumbing
|
|
11
|
+
export * from "./fixes/index.js";
|
|
12
|
+
export * from "./core/types.js";
|
|
13
|
+
export * from "./core/session-cache.js";
|
|
14
|
+
export * from "./core/transport.js";
|
|
15
|
+
export * from "./core/pipeline.js";
|
|
16
|
+
export * from "./core/supervisor.js";
|
|
17
|
+
export * from "./core/command.js";
|
|
18
|
+
export const PROMPT_RETRY_DELAY_MS = DEFAULT_PROMPT_RETRY_DELAY_MS;
|
|
19
|
+
/**
|
|
20
|
+
* Creates an in-process ACP connector stream that launches the official `agy_acp_server` binary,
|
|
21
|
+
* automatically downloading it if not present, and applies mode option filtering, outbound MCP adaptation,
|
|
22
|
+
* text sanitization, hang detection, and transparent process recycling.
|
|
23
|
+
*/
|
|
24
|
+
export function createAntigravityConnector(proxies = sharedMcpProxyPool, options) {
|
|
25
|
+
return async () => {
|
|
26
|
+
const [cmd, ...args] = await resolveBinaryCommand();
|
|
27
|
+
const spawnFn = options?.spawnProcess ?? ((c, a) => defaultSpawnProcess(c, a));
|
|
28
|
+
const initialChild = await spawnFn(cmd, args);
|
|
29
|
+
const supervisor = new ProcessSupervisor({
|
|
30
|
+
cmd,
|
|
31
|
+
args,
|
|
32
|
+
initialChild,
|
|
33
|
+
pipeline: new AcpPipeline(createDefaultFixes()),
|
|
34
|
+
proxies,
|
|
35
|
+
spawnProcess: options?.spawnProcess,
|
|
36
|
+
recycleTimeoutMs: options?.recycleTimeoutMs,
|
|
37
|
+
recycleSpawnAttempts: options?.recycleSpawnAttempts,
|
|
38
|
+
recycleRetryDelayMs: options?.recycleRetryDelayMs,
|
|
39
|
+
});
|
|
40
|
+
return supervisor.createStreams();
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,sCAAsC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,+CAA+C;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAqB,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE7F,gCAAgC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAElC,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAWnE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAAwB,kBAAkB,EAC1C,OAAqC;IAErC,OAAO,KAAK,IAAwB,EAAE;QACpC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAEpD,MAAM,OAAO,GAAG,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC;YACvC,GAAG;YACH,IAAI;YACJ,YAAY;YACZ,QAAQ,EAAE,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YAC/C,OAAO;YACP,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;YAC3C,oBAAoB,EAAE,OAAO,EAAE,oBAAoB;YACnD,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;SAClD,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC,aAAa,EAAE,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero-dependency Protobuf wire-format encoders and decoders.
|
|
3
|
+
*/
|
|
4
|
+
export declare function encodeVarint(val: number): Buffer;
|
|
5
|
+
export declare function encodeLengthDelimited(fieldNumber: number, data: Buffer): Buffer;
|
|
6
|
+
export declare function decodeVarint(buffer: Uint8Array, start: number): [number, number];
|
|
7
|
+
export declare function getField(buffer: Uint8Array | null | undefined, targetField: number): Uint8Array | null;
|
|
8
|
+
export declare function getVarintField(buffer: Uint8Array | null | undefined, targetField: number): number | null;
|
|
9
|
+
//# sourceMappingURL=protobuf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protobuf.d.ts","sourceRoot":"","sources":["../../../src/lib/protobuf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAShD;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYhF;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,IAAI,CAqBnB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAoBf"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero-dependency Protobuf wire-format encoders and decoders.
|
|
3
|
+
*/
|
|
4
|
+
export function encodeVarint(val) {
|
|
5
|
+
const bytes = [];
|
|
6
|
+
let v = val;
|
|
7
|
+
while (v >= 0x80) {
|
|
8
|
+
bytes.push((v & 0x7f) | 0x80);
|
|
9
|
+
v >>>= 7;
|
|
10
|
+
}
|
|
11
|
+
bytes.push(v);
|
|
12
|
+
return Buffer.from(bytes);
|
|
13
|
+
}
|
|
14
|
+
export function encodeLengthDelimited(fieldNumber, data) {
|
|
15
|
+
const tag = (fieldNumber << 3) | 2;
|
|
16
|
+
return Buffer.concat([encodeVarint(tag), encodeVarint(data.length), data]);
|
|
17
|
+
}
|
|
18
|
+
export function decodeVarint(buffer, start) {
|
|
19
|
+
let res = 0;
|
|
20
|
+
let shift = 0;
|
|
21
|
+
let offset = start;
|
|
22
|
+
while (offset < buffer.length) {
|
|
23
|
+
const b = buffer[offset++];
|
|
24
|
+
if (b === undefined)
|
|
25
|
+
break;
|
|
26
|
+
res |= (b & 0x7f) << shift;
|
|
27
|
+
shift += 7;
|
|
28
|
+
if (!(b & 0x80))
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return [res, offset];
|
|
32
|
+
}
|
|
33
|
+
export function getField(buffer, targetField) {
|
|
34
|
+
if (!buffer)
|
|
35
|
+
return null;
|
|
36
|
+
let offset = 0;
|
|
37
|
+
while (offset < buffer.length) {
|
|
38
|
+
const [tag, nextOffset] = decodeVarint(buffer, offset);
|
|
39
|
+
offset = nextOffset;
|
|
40
|
+
const wireType = tag & 0x7;
|
|
41
|
+
const fieldNum = tag >> 3;
|
|
42
|
+
if (wireType === 2) {
|
|
43
|
+
const [len, afterLen] = decodeVarint(buffer, offset);
|
|
44
|
+
const slice = buffer.subarray(afterLen, afterLen + len);
|
|
45
|
+
offset = afterLen + len;
|
|
46
|
+
if (fieldNum === targetField)
|
|
47
|
+
return slice;
|
|
48
|
+
}
|
|
49
|
+
else if (wireType === 0) {
|
|
50
|
+
[, offset] = decodeVarint(buffer, offset);
|
|
51
|
+
}
|
|
52
|
+
else if (wireType === 1)
|
|
53
|
+
offset += 8;
|
|
54
|
+
else if (wireType === 5)
|
|
55
|
+
offset += 4;
|
|
56
|
+
else
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
export function getVarintField(buffer, targetField) {
|
|
62
|
+
if (!buffer)
|
|
63
|
+
return null;
|
|
64
|
+
let offset = 0;
|
|
65
|
+
while (offset < buffer.length) {
|
|
66
|
+
const [tag, nextOffset] = decodeVarint(buffer, offset);
|
|
67
|
+
offset = nextOffset;
|
|
68
|
+
const wireType = tag & 0x7;
|
|
69
|
+
const fieldNum = tag >> 3;
|
|
70
|
+
if (wireType === 0) {
|
|
71
|
+
const [val, afterVal] = decodeVarint(buffer, offset);
|
|
72
|
+
offset = afterVal;
|
|
73
|
+
if (fieldNum === targetField)
|
|
74
|
+
return val;
|
|
75
|
+
}
|
|
76
|
+
else if (wireType === 2) {
|
|
77
|
+
const [len, afterLen] = decodeVarint(buffer, offset);
|
|
78
|
+
offset = afterLen + len;
|
|
79
|
+
}
|
|
80
|
+
else if (wireType === 1)
|
|
81
|
+
offset += 8;
|
|
82
|
+
else if (wireType === 5)
|
|
83
|
+
offset += 4;
|
|
84
|
+
else
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=protobuf.js.map
|