@grackle-ai/adapter-sdk 0.173.0 → 0.175.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.
@@ -1,5 +1,6 @@
1
1
  import type { AdapterLogger } from "./logger.js";
2
2
  import type { ExecResult } from "./exec.js";
3
+ import type { TunnelRegistry } from "./tunnel-registry.js";
3
4
  /** Function signature for executing local commands. */
4
5
  export type ExecFunction = (cmd: string, args: string[], opts?: {
5
6
  timeout?: number;
@@ -23,5 +24,7 @@ export interface AdapterDependencies {
23
24
  * Returns `undefined` when no token can be resolved (caller should fall back to `gh auth token`).
24
25
  */
25
26
  resolveGitHubToken?: (accountId?: string) => string | undefined;
27
+ /** Shared tunnel registry for managing active tunnel state (default: new TunnelRegistry()). */
28
+ tunnelRegistry?: TunnelRegistry;
26
29
  }
27
30
  //# sourceMappingURL=adapter-dependencies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-dependencies.d.ts","sourceRoot":"","sources":["../src/adapter-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAC/D,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,qDAAqD;IACrD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC;IACxC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACjE"}
1
+ {"version":3,"file":"adapter-dependencies.d.ts","sourceRoot":"","sources":["../src/adapter-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAC/D,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,qDAAqD;IACrD,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC;IACxC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChE,+FAA+F;IAC/F,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC"}
package/dist/connect.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { AhpClientSocket } from "@grackle-ai/ahp-transport";
2
2
  import type { PowerLineConnection } from "./adapter.js";
3
3
  import { AhpHostTransport } from "./ahp-host-transport.js";
4
+ import type { TunnelRegistry } from "./tunnel-registry.js";
4
5
  import type { AdapterLogger } from "./logger.js";
5
6
  /**
6
7
  * Construct an opened {@link AhpHostTransport} for a single PowerLine.
@@ -33,10 +34,11 @@ export declare function createAhpHostTransport(baseUrl: string, powerlineToken:
33
34
  * @param environmentId - Stable identifier for the environment.
34
35
  * @param localPort - Local TCP port the tunnel forwards to the PowerLine.
35
36
  * @param powerlineToken - Bearer token for the PowerLine.
37
+ * @param tunnelRegistry - Registry to clean up on connect failure.
36
38
  * @param logger - Optional logger.
37
39
  * @returns A {@link PowerLineConnection} ready for session operations.
38
40
  */
39
- export declare function connectThroughTunnel(environmentId: string, localPort: number, powerlineToken: string, logger?: AdapterLogger): Promise<PowerLineConnection>;
41
+ export declare function connectThroughTunnel(environmentId: string, localPort: number, powerlineToken: string, tunnelRegistry: TunnelRegistry, logger?: AdapterLogger): Promise<PowerLineConnection>;
40
42
  /** Single-shot TCP port prober used by {@link waitForLocalPort}. */
41
43
  export interface PortProber {
42
44
  /** Attempt a single TCP connection to `host:port`, returning `true` if it succeeds. */
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAyB,MAAM,2BAA2B,CAAC;AAEnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA0BnE;AAID;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAqD9B;AAID,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,EAAE,UAc7B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAgBf"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAyB,MAAM,2BAA2B,CAAC;AAEnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC,CA0BnE;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,mBAAmB,CAAC,CAyD9B;AAID,oEAAoE;AACpE,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,EAAE,UAc7B,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC,CAkBf"}
package/dist/connect.js CHANGED
@@ -1,8 +1,7 @@
1
1
  import { AhpClientSocket, InMemoryClientIdStore } from "@grackle-ai/ahp-transport";
2
2
  import { createConnection } from "node:net";
3
3
  import { AhpHostTransport } from "./ahp-host-transport.js";
4
- import { closeTunnel } from "./tunnel-registry.js";
5
- import { sleep } from "./utils.js";
4
+ import { retryWithBackoff } from "./retry.js";
6
5
  import { defaultLogger } from "./logger.js";
7
6
  // ─── Constants ──────────────────────────────────────────────
8
7
  /** Delay between connect-with-retry attempts. */
@@ -67,19 +66,27 @@ export async function createAhpHostTransport(baseUrl, powerlineToken, environmen
67
66
  * @param environmentId - Stable identifier for the environment.
68
67
  * @param localPort - Local TCP port the tunnel forwards to the PowerLine.
69
68
  * @param powerlineToken - Bearer token for the PowerLine.
69
+ * @param tunnelRegistry - Registry to clean up on connect failure.
70
70
  * @param logger - Optional logger.
71
71
  * @returns A {@link PowerLineConnection} ready for session operations.
72
72
  */
73
- export async function connectThroughTunnel(environmentId, localPort, powerlineToken, logger = defaultLogger) {
73
+ export async function connectThroughTunnel(environmentId, localPort, powerlineToken, tunnelRegistry, logger = defaultLogger) {
74
74
  const baseUrl = `ws://127.0.0.1:${localPort}`;
75
- let lastError;
76
- for (let attempt = 0; attempt < CONNECT_MAX_RETRIES; attempt++) {
77
- let attemptSocket;
78
- try {
75
+ try {
76
+ return await retryWithBackoff(async () => {
79
77
  const { transport, socket } = await createAhpHostTransport(baseUrl, powerlineToken, environmentId, logger);
80
- attemptSocket = socket;
81
- // Liveness probe via AHP `ping` to verify the wire is alive.
82
- await socket.request("ping", { channel: "ahp-root://" });
78
+ try {
79
+ await socket.request("ping", { channel: "ahp-root://" });
80
+ }
81
+ catch (pingErr) {
82
+ try {
83
+ await socket.close();
84
+ }
85
+ catch (closeErr) {
86
+ logger.error({ environmentId, err: closeErr }, "Failed to close socket after attempt");
87
+ }
88
+ throw pingErr;
89
+ }
83
90
  return {
84
91
  environmentId,
85
92
  port: localPort,
@@ -91,31 +98,24 @@ export async function connectThroughTunnel(environmentId, localPort, powerlineTo
91
98
  await socket.close();
92
99
  },
93
100
  };
94
- }
95
- catch (err) {
96
- lastError = err;
97
- // Close the per-attempt socket so we don't leak open WS connections
98
- // across retries (e.g. when `createAhpHostTransport` succeeded but
99
- // the subsequent `ping` rejected).
100
- if (attemptSocket !== undefined) {
101
- try {
102
- await attemptSocket.close();
103
- }
104
- catch (closeErr) {
105
- logger.error({ environmentId, err: closeErr }, "Failed to close socket after attempt");
106
- }
107
- }
108
- await sleep(CONNECT_RETRY_DELAY_MS);
109
- }
110
- }
111
- // Clean up the tunnel so we don't leak background processes on connect failure
112
- try {
113
- await closeTunnel(environmentId);
101
+ }, {
102
+ maxAttempts: CONNECT_MAX_RETRIES,
103
+ delayMs: CONNECT_RETRY_DELAY_MS,
104
+ onRetry: async (_attempt, err) => {
105
+ logger.debug({ environmentId, err }, "Connect attempt failed, retrying");
106
+ },
107
+ });
114
108
  }
115
109
  catch (err) {
116
- logger.error({ environmentId, err }, "Failed to close tunnel after connect failure");
110
+ // Clean up the tunnel so we don't leak background processes on connect failure
111
+ try {
112
+ await tunnelRegistry.close(environmentId);
113
+ }
114
+ catch (tunnelErr) {
115
+ logger.error({ environmentId, err: tunnelErr }, "Failed to close tunnel after connect failure");
116
+ }
117
+ throw new Error(`Could not reach PowerLine after ${CONNECT_MAX_RETRIES} attempts: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
117
118
  }
118
- throw new Error(`Could not reach PowerLine after ${CONNECT_MAX_RETRIES} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`);
119
119
  }
120
120
  /** Default {@link PortProber} that uses real TCP sockets. */
121
121
  export const TCP_PORT_PROBER = {
@@ -139,14 +139,15 @@ export const TCP_PORT_PROBER = {
139
139
  */
140
140
  export async function waitForLocalPort(port, options) {
141
141
  const prober = options?.portProber ?? TCP_PORT_PROBER;
142
- const sleepFn = options?.sleep ?? sleep;
143
- for (let attempt = 0; attempt < TUNNEL_PORT_POLL_MAX_ATTEMPTS; attempt++) {
142
+ await retryWithBackoff(async () => {
144
143
  const reachable = await prober.probe(port, "127.0.0.1");
145
- if (reachable) {
146
- return;
144
+ if (!reachable) {
145
+ throw new Error(`Local port ${port} did not become reachable after ${TUNNEL_PORT_POLL_MAX_ATTEMPTS} attempts`);
147
146
  }
148
- await sleepFn(TUNNEL_PORT_POLL_DELAY_MS);
149
- }
150
- throw new Error(`Local port ${port} did not become reachable after ${TUNNEL_PORT_POLL_MAX_ATTEMPTS} attempts`);
147
+ }, {
148
+ maxAttempts: TUNNEL_PORT_POLL_MAX_ATTEMPTS,
149
+ delayMs: TUNNEL_PORT_POLL_DELAY_MS,
150
+ sleep: options?.sleep,
151
+ });
151
152
  }
152
153
  //# sourceMappingURL=connect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type { RemoteExecutor } from "./remote-executor.js";
11
11
  export type { RemoteTunnel, TunnelProcessFactory, TunnelPortProbe } from "./tunnel.js";
12
12
  export { ProcessTunnel, ProcessReverseTunnel, REVERSE_TUNNEL_SETTLE_MS } from "./tunnel.js";
13
13
  export type { TunnelState } from "./tunnel-registry.js";
14
- export { registerTunnel, getTunnel, closeTunnel, closeAllTunnels } from "./tunnel-registry.js";
14
+ export { TunnelRegistry } from "./tunnel-registry.js";
15
15
  export type { PortProber, WaitForLocalPortOptions } from "./connect.js";
16
16
  export { createAhpHostTransport, connectThroughTunnel, waitForLocalPort, TCP_PORT_PROBER, } from "./connect.js";
17
17
  export type { BootstrapOptions, StartRemotePowerLineOptions } from "./bootstrap.js";
@@ -20,6 +20,8 @@ export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operation
20
20
  export type { ExecResult } from "./exec.js";
21
21
  export { exec } from "./exec.js";
22
22
  export type { ExecFunction, AdapterDependencies } from "./adapter-dependencies.js";
23
+ export type { RetryOptions } from "./retry.js";
24
+ export { retryWithBackoff } from "./retry.js";
23
25
  export { sleep, findFreePort, isPortConflictError, withFreePort, isDevMode, getPackageVersion, shellEscape, REMOTE_POWERLINE_DIRECTORY, SSH_CONNECTIVITY_TIMEOUT_MS, REMOTE_EXEC_DEFAULT_TIMEOUT_MS, } from "./utils.js";
24
26
  export type { AgentEventFields } from "@grackle-ai/common";
25
27
  export type { IHostTransport, ServerActionEnvelope, CreateSessionParams, CreateSessionResult, ReanimateParams, AuthenticateParams, AuthenticateTokenItem, HostSessionInfo, ResourceWatchOptions, ResourceWatchListener, ResourceWatchSubscription, } from "./host-transport.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5F,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG/F,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,OAAO,EACL,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAMpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKpF,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGpD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5F,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EACL,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAMpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKpF,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -5,12 +5,13 @@ export { reconnectOrProvision } from "./adapter.js";
5
5
  export { BaseAdapter } from "./base-adapter.js";
6
6
  export { RemoteTunnelAdapter } from "./remote-tunnel-adapter.js";
7
7
  export { ProcessTunnel, ProcessReverseTunnel, REVERSE_TUNNEL_SETTLE_MS } from "./tunnel.js";
8
- export { registerTunnel, getTunnel, closeTunnel, closeAllTunnels } from "./tunnel-registry.js";
8
+ export { TunnelRegistry } from "./tunnel-registry.js";
9
9
  export { createAhpHostTransport, connectThroughTunnel, waitForLocalPort, TCP_PORT_PROBER, } from "./connect.js";
10
10
  export { bootstrapPowerLine, buildEnvFileContent, startRemotePowerLine, probeRemotePowerLine, writeRemoteEnvFile, buildRemoteKillCommand, } from "./bootstrap.js";
11
11
  // ─── Shared Operations ─────────────────────────────────────
12
12
  export { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
13
13
  export { exec } from "./exec.js";
14
+ export { retryWithBackoff } from "./retry.js";
14
15
  // ─── Utilities ──────────────────────────────────────────────
15
16
  export { sleep, findFreePort, isPortConflictError, withFreePort, isDevMode, getPackageVersion, shellEscape, REMOTE_POWERLINE_DIRECTORY, SSH_CONNECTIVITY_TIMEOUT_MS, REMOTE_EXEC_DEFAULT_TIMEOUT_MS, } from "./utils.js";
16
17
  export { AhpHostTransport, bindNotificationHandler } from "./ahp-host-transport.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOjE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI/F,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAItF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAoBpB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMpF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAOjE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,8DAA8D;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAItF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,+DAA+D;AAC/D,OAAO,EACL,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,0BAA0B,EAC1B,2BAA2B,EAC3B,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAoBpB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMpF,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -6,6 +6,7 @@ import type { ProcessTunnel } from "./tunnel.js";
6
6
  import type { TunnelState } from "./tunnel-registry.js";
7
7
  import type { BaseEnvironmentConfig } from "./adapter.js";
8
8
  import { BaseAdapter } from "./base-adapter.js";
9
+ import { TunnelRegistry } from "./tunnel-registry.js";
9
10
  /** Configuration fields shared by all remote-tunnel-based adapters. */
10
11
  export interface RemoteTunnelConfig extends BaseEnvironmentConfig {
11
12
  /** Override the local tunnel port (otherwise a free port is chosen). */
@@ -33,6 +34,7 @@ export declare abstract class RemoteTunnelAdapter<TConfig extends RemoteTunnelCo
33
34
  protected readonly sleepFn: (ms: number) => Promise<void>;
34
35
  protected readonly isGitHubProviderEnabled: () => boolean;
35
36
  protected readonly resolveGitHubToken: (accountId?: string) => string | undefined;
37
+ protected readonly tunnelRegistry: TunnelRegistry;
36
38
  constructor(deps?: AdapterDependencies);
37
39
  /**
38
40
  * Validate raw config and return typed config + display metadata.
@@ -1 +1 @@
1
- {"version":3,"file":"remote-tunnel-adapter.d.ts","sourceRoot":"","sources":["../src/remote-tunnel-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-tunnel-adapter.d.ts","sourceRoot":"","sources":["../src/remote-tunnel-adapter.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { FatalAdapterError } from "./fatal-error.js";
3
3
  import { DEFAULT_MCP_PORT } from "@grackle-ai/common";
4
4
  import { bootstrapPowerLine, startRemotePowerLine } from "./bootstrap.js";
5
5
  import { connectThroughTunnel } from "./connect.js";
6
- import { registerTunnel, getTunnel, closeTunnel } from "./tunnel-registry.js";
6
+ import { TunnelRegistry } from "./tunnel-registry.js";
7
7
  import { remoteStop, remoteDestroy, remoteHealthCheck } from "./shared-operations.js";
8
8
  import { sleep as defaultSleep, withFreePort, SSH_CONNECTIVITY_TIMEOUT_MS } from "./utils.js";
9
9
  import { exec as defaultExec } from "./exec.js";
@@ -34,12 +34,14 @@ export class RemoteTunnelAdapter extends BaseAdapter {
34
34
  sleepFn;
35
35
  isGitHubProviderEnabled;
36
36
  resolveGitHubToken;
37
+ tunnelRegistry;
37
38
  constructor(deps = {}) {
38
39
  super();
39
40
  this.execFn = deps.exec ?? defaultExec;
40
41
  this.sleepFn = deps.sleep ?? defaultSleep;
41
42
  this.isGitHubProviderEnabled = deps.isGitHubProviderEnabled ?? (() => false);
42
43
  this.resolveGitHubToken = deps.resolveGitHubToken ?? (() => undefined);
44
+ this.tunnelRegistry = deps.tunnelRegistry ?? new TunnelRegistry();
43
45
  }
44
46
  // ─── Optional hooks ────────────────────────────────────────
45
47
  /**
@@ -75,31 +77,31 @@ export class RemoteTunnelAdapter extends BaseAdapter {
75
77
  }
76
78
  /** Connect to the PowerLine via the tunnel. */
77
79
  async connectToTunnel(environmentId, localPort, powerlineToken) {
78
- return connectThroughTunnel(environmentId, localPort, powerlineToken);
80
+ return connectThroughTunnel(environmentId, localPort, powerlineToken, this.tunnelRegistry);
79
81
  }
80
82
  /** Close and unregister the tunnel(s) for an environment. */
81
83
  async closeTunnelForEnvironment(environmentId) {
82
- await closeTunnel(environmentId);
84
+ await this.tunnelRegistry.close(environmentId);
83
85
  }
84
86
  /** Register an active tunnel pair for an environment. */
85
87
  registerTunnelForEnvironment(environmentId, state) {
86
- registerTunnel(environmentId, state);
88
+ this.tunnelRegistry.register(environmentId, state);
87
89
  }
88
90
  /** Get the tunnel state for an environment. */
89
91
  getTunnelForEnvironment(environmentId) {
90
- return getTunnel(environmentId);
92
+ return this.tunnelRegistry.get(environmentId);
91
93
  }
92
94
  /** Stop the remote PowerLine and close the tunnel. */
93
95
  async runRemoteStop(environmentId, executor) {
94
- await remoteStop(environmentId, executor);
96
+ await remoteStop(environmentId, executor, this.tunnelRegistry);
95
97
  }
96
98
  /** Destroy remote PowerLine artifacts and close the tunnel. */
97
99
  async runRemoteDestroy(environmentId, executor) {
98
- await remoteDestroy(environmentId, executor);
100
+ await remoteDestroy(environmentId, executor, this.tunnelRegistry);
99
101
  }
100
102
  /** Ping the PowerLine to check liveness. */
101
103
  async runHealthCheck(connection) {
102
- return remoteHealthCheck(connection);
104
+ return remoteHealthCheck(connection, this.tunnelRegistry);
103
105
  }
104
106
  // ─── Shared lifecycle ──────────────────────────────────────
105
107
  /** Provision the remote host: test connectivity, bootstrap PowerLine, open tunnels. */
@@ -1 +1 @@
1
- {"version":3,"file":"remote-tunnel-adapter.js","sourceRoot":"","sources":["../src/remote-tunnel-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-tunnel-adapter.js","sourceRoot":"","sources":["../src/remote-tunnel-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Options for {@link retryWithBackoff}. */
2
+ export interface RetryOptions {
3
+ /** Total number of attempts (first try + retries). Must be at least 1. */
4
+ maxAttempts: number;
5
+ /** Delay before the first retry (milliseconds). */
6
+ delayMs: number;
7
+ /** Multiplier applied to the delay after each retry (default `1` = fixed delay). */
8
+ backoffMultiplier?: number;
9
+ /** Upper bound on the computed delay (milliseconds). Only meaningful when `backoffMultiplier` is greater than 1. */
10
+ maxDelayMs?: number;
11
+ /** Called after each failed attempt, before the backoff sleep. */
12
+ onRetry?: (attempt: number, error: unknown) => void | Promise<void>;
13
+ /** Override the sleep implementation (primarily for testing). */
14
+ sleep?: (ms: number) => Promise<void>;
15
+ }
16
+ /**
17
+ * Execute `operation` up to {@link RetryOptions.maxAttempts} times, sleeping
18
+ * with optional exponential backoff between failures.
19
+ *
20
+ * @throws The error from the last failed attempt when all attempts are exhausted.
21
+ */
22
+ export declare function retryWithBackoff<T>(operation: () => Promise<T>, options: RetryOptions): Promise<T>;
23
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAEA,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oHAAoH;IACpH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,iEAAiE;IACjE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,CAAC,CAAC,CAqCZ"}
package/dist/retry.js ADDED
@@ -0,0 +1,33 @@
1
+ import { sleep as defaultSleep } from "./utils.js";
2
+ /**
3
+ * Execute `operation` up to {@link RetryOptions.maxAttempts} times, sleeping
4
+ * with optional exponential backoff between failures.
5
+ *
6
+ * @throws The error from the last failed attempt when all attempts are exhausted.
7
+ */
8
+ export async function retryWithBackoff(operation, options) {
9
+ const { maxAttempts, delayMs, backoffMultiplier = 1, maxDelayMs = Infinity, onRetry, sleep = defaultSleep, } = options;
10
+ if (maxAttempts < 1) {
11
+ throw new RangeError(`retryWithBackoff: maxAttempts must be at least 1, got ${maxAttempts}`);
12
+ }
13
+ let lastError;
14
+ let currentDelay = Math.min(delayMs, maxDelayMs);
15
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
16
+ try {
17
+ return await operation();
18
+ }
19
+ catch (err) {
20
+ lastError = err;
21
+ if (attempt === maxAttempts) {
22
+ break;
23
+ }
24
+ if (onRetry) {
25
+ await onRetry(attempt, err);
26
+ }
27
+ await sleep(currentDelay);
28
+ currentDelay = Math.min(currentDelay * backoffMultiplier, maxDelayMs);
29
+ }
30
+ }
31
+ throw lastError;
32
+ }
33
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAkBnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAA2B,EAC3B,OAAqB;IAErB,MAAM,EACJ,WAAW,EACX,OAAO,EACP,iBAAiB,GAAG,CAAC,EACrB,UAAU,GAAG,QAAQ,EACrB,OAAO,EACP,KAAK,GAAG,YAAY,GACrB,GAAG,OAAO,CAAC;IAEZ,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,yDAAyD,WAAW,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,SAAkB,CAAC;IACvB,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEjD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAEhB,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,MAAM;YACR,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1B,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
@@ -1,16 +1,17 @@
1
1
  import type { PowerLineConnection } from "./adapter.js";
2
2
  import type { RemoteExecutor } from "./remote-executor.js";
3
+ import type { TunnelRegistry } from "./tunnel-registry.js";
3
4
  import type { AdapterLogger } from "./logger.js";
4
5
  /**
5
6
  * Stop the remote PowerLine process and close the tunnel.
6
7
  * Shared by SSH and Codespace adapters.
7
8
  */
8
- export declare function remoteStop(environmentId: string, executor: RemoteExecutor, logger?: AdapterLogger): Promise<void>;
9
+ export declare function remoteStop(environmentId: string, executor: RemoteExecutor, tunnelRegistry: TunnelRegistry, logger?: AdapterLogger): Promise<void>;
9
10
  /**
10
11
  * Stop the remote PowerLine, remove artifacts, and close the tunnel.
11
12
  * Shared by SSH and Codespace adapters.
12
13
  */
13
- export declare function remoteDestroy(environmentId: string, executor: RemoteExecutor, logger?: AdapterLogger): Promise<void>;
14
+ export declare function remoteDestroy(environmentId: string, executor: RemoteExecutor, tunnelRegistry: TunnelRegistry, logger?: AdapterLogger): Promise<void>;
14
15
  /** Check that the tunnel is alive and the PowerLine responds to a ping. */
15
- export declare function remoteHealthCheck(connection: PowerLineConnection): Promise<boolean>;
16
+ export declare function remoteHealthCheck(connection: PowerLineConnection, tunnelRegistry: TunnelRegistry): Promise<boolean>;
16
17
  //# sourceMappingURL=shared-operations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared-operations.d.ts","sourceRoot":"","sources":["../src/shared-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,2EAA2E;AAC3E,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBzF"}
1
+ {"version":3,"file":"shared-operations.d.ts","sourceRoot":"","sources":["../src/shared-operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,aAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,2EAA2E;AAC3E,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,mBAAmB,EAC/B,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
@@ -1,4 +1,3 @@
1
- import { closeTunnel, getTunnel } from "./tunnel-registry.js";
2
1
  import { buildRemoteKillCommand } from "./bootstrap.js";
3
2
  import { REMOTE_POWERLINE_DIRECTORY } from "./utils.js";
4
3
  import { defaultLogger } from "./logger.js";
@@ -6,20 +5,20 @@ import { defaultLogger } from "./logger.js";
6
5
  * Stop the remote PowerLine process and close the tunnel.
7
6
  * Shared by SSH and Codespace adapters.
8
7
  */
9
- export async function remoteStop(environmentId, executor, logger = defaultLogger) {
8
+ export async function remoteStop(environmentId, executor, tunnelRegistry, logger = defaultLogger) {
10
9
  try {
11
10
  await executor.exec(buildRemoteKillCommand());
12
11
  }
13
12
  catch (err) {
14
13
  logger.debug({ environmentId, err }, "Failed to kill remote PowerLine (may already be stopped)");
15
14
  }
16
- await closeTunnel(environmentId);
15
+ await tunnelRegistry.close(environmentId);
17
16
  }
18
17
  /**
19
18
  * Stop the remote PowerLine, remove artifacts, and close the tunnel.
20
19
  * Shared by SSH and Codespace adapters.
21
20
  */
22
- export async function remoteDestroy(environmentId, executor, logger = defaultLogger) {
21
+ export async function remoteDestroy(environmentId, executor, tunnelRegistry, logger = defaultLogger) {
23
22
  try {
24
23
  await executor.exec(`${buildRemoteKillCommand()}; ` +
25
24
  'CRED="$HOME/.claude/.credentials.json"; ' +
@@ -31,11 +30,11 @@ export async function remoteDestroy(environmentId, executor, logger = defaultLog
31
30
  catch (err) {
32
31
  logger.debug({ environmentId, err }, "Failed to clean up remote PowerLine artifacts");
33
32
  }
34
- await closeTunnel(environmentId);
33
+ await tunnelRegistry.close(environmentId);
35
34
  }
36
35
  /** Check that the tunnel is alive and the PowerLine responds to a ping. */
37
- export async function remoteHealthCheck(connection) {
38
- const state = getTunnel(connection.environmentId);
36
+ export async function remoteHealthCheck(connection, tunnelRegistry) {
37
+ const state = tunnelRegistry.get(connection.environmentId);
39
38
  if (!state?.tunnel.isAlive()) {
40
39
  return false;
41
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shared-operations.js","sourceRoot":"","sources":["../src/shared-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,aAAqB,EACrB,QAAwB,EACxB,SAAwB,aAAa;IAErC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,EAAE,aAAa,EAAE,GAAG,EAAE,EACtB,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,QAAwB,EACxB,SAAwB,aAAa;IAErC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CACjB,GAAG,sBAAsB,EAAE,IAAI;YAC7B,0CAA0C;YAC1C,qEAAqE,0BAA0B,gCAAgC;YAC/H,yEAAyE;YACzE,qBAAqB,0BAA0B,gFAAgF;YAC/H,UAAU,0BAA0B,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAA+B;IACrE,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,mEAAmE;IACnE,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"shared-operations.js","sourceRoot":"","sources":["../src/shared-operations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,aAAqB,EACrB,QAAwB,EACxB,cAA8B,EAC9B,SAAwB,aAAa;IAErC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CACV,EAAE,aAAa,EAAE,GAAG,EAAE,EACtB,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAqB,EACrB,QAAwB,EACxB,cAA8B,EAC9B,SAAwB,aAAa;IAErC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CACjB,GAAG,sBAAsB,EAAE,IAAI;YAC7B,0CAA0C;YAC1C,qEAAqE,0BAA0B,gCAAgC;YAC/H,yEAAyE;YACzE,qBAAqB,0BAA0B,gFAAgF;YAC/H,UAAU,0BAA0B,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,+CAA+C,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA+B,EAC/B,cAA8B;IAE9B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,mEAAmE;IACnE,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -6,12 +6,16 @@ export interface TunnelState {
6
6
  /** Optional reverse tunnel so remote agents can reach the host MCP endpoint. */
7
7
  reverseTunnel?: RemoteTunnel;
8
8
  }
9
- /** Register an active tunnel for an environment, closing any existing tunnel first. */
10
- export declare function registerTunnel(environmentId: string, state: TunnelState, logger?: AdapterLogger): void;
11
- /** Get the tunnel state for an environment. */
12
- export declare function getTunnel(environmentId: string): TunnelState | undefined;
13
- /** Close and unregister the tunnel(s) for an environment. */
14
- export declare function closeTunnel(environmentId: string): Promise<void>;
15
- /** Close all active tunnels (called during server shutdown). */
16
- export declare function closeAllTunnels(logger?: AdapterLogger): Promise<void>;
9
+ /** Per-instance registry of active tunnels, injected via {@link AdapterDependencies}. */
10
+ export declare class TunnelRegistry {
11
+ private readonly tunnelMap;
12
+ /** Register an active tunnel for an environment, closing any existing tunnel first. */
13
+ register(environmentId: string, state: TunnelState, logger?: AdapterLogger): void;
14
+ /** Get the tunnel state for an environment. */
15
+ get(environmentId: string): TunnelState | undefined;
16
+ /** Close and unregister the tunnel(s) for an environment. */
17
+ close(environmentId: string): Promise<void>;
18
+ /** Close all active tunnels (called during server shutdown). */
19
+ closeAll(logger?: AdapterLogger): Promise<void>;
20
+ }
17
21
  //# sourceMappingURL=tunnel-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-registry.d.ts","sourceRoot":"","sources":["../src/tunnel-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,gFAAgF;IAChF,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAID,uFAAuF;AACvF,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,aAA6B,GACpC,IAAI,CAmBN;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAExE;AAED,6DAA6D;AAC7D,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStE;AAED,gEAAgE;AAChE,wBAAsB,eAAe,CAAC,MAAM,GAAE,aAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAS1F"}
1
+ {"version":3,"file":"tunnel-registry.d.ts","sourceRoot":"","sources":["../src/tunnel-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,gFAAgF;IAChF,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,yFAAyF;AACzF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4D;IAEtF,uFAAuF;IAChF,QAAQ,CACb,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,aAA6B,GACpC,IAAI;IAqBP,+CAA+C;IACxC,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1D,6DAA6D;IAChD,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,gEAAgE;IACnD,QAAQ,CAAC,MAAM,GAAE,aAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;CAU5E"}
@@ -1,44 +1,47 @@
1
1
  import { defaultLogger } from "./logger.js";
2
- const tunnelMap = new Map();
3
- /** Register an active tunnel for an environment, closing any existing tunnel first. */
4
- export function registerTunnel(environmentId, state, logger = defaultLogger) {
5
- const existing = tunnelMap.get(environmentId);
6
- if (existing) {
7
- existing.tunnel.close().catch((err) => {
8
- logger.warn({ err, environmentId }, "Failed to close existing tunnel before registering new one");
9
- });
10
- if (existing.reverseTunnel) {
11
- existing.reverseTunnel.close().catch((err) => {
12
- logger.warn({ err, environmentId }, "Failed to close existing reverse tunnel before registering new one");
2
+ /** Per-instance registry of active tunnels, injected via {@link AdapterDependencies}. */
3
+ export class TunnelRegistry {
4
+ tunnelMap = new Map();
5
+ /** Register an active tunnel for an environment, closing any existing tunnel first. */
6
+ register(environmentId, state, logger = defaultLogger) {
7
+ const existing = this.tunnelMap.get(environmentId);
8
+ if (existing) {
9
+ existing.tunnel.close().catch((err) => {
10
+ logger.warn({ err, environmentId }, "Failed to close existing tunnel before registering new one");
13
11
  });
12
+ if (existing.reverseTunnel) {
13
+ existing.reverseTunnel.close().catch((err) => {
14
+ logger.warn({ err, environmentId }, "Failed to close existing reverse tunnel before registering new one");
15
+ });
16
+ }
14
17
  }
18
+ this.tunnelMap.set(environmentId, state);
15
19
  }
16
- tunnelMap.set(environmentId, state);
17
- }
18
- /** Get the tunnel state for an environment. */
19
- export function getTunnel(environmentId) {
20
- return tunnelMap.get(environmentId);
21
- }
22
- /** Close and unregister the tunnel(s) for an environment. */
23
- export async function closeTunnel(environmentId) {
24
- const state = tunnelMap.get(environmentId);
25
- if (state) {
26
- await state.tunnel.close();
27
- if (state.reverseTunnel) {
28
- await state.reverseTunnel.close();
29
- }
30
- tunnelMap.delete(environmentId);
20
+ /** Get the tunnel state for an environment. */
21
+ get(environmentId) {
22
+ return this.tunnelMap.get(environmentId);
31
23
  }
32
- }
33
- /** Close all active tunnels (called during server shutdown). */
34
- export async function closeAllTunnels(logger = defaultLogger) {
35
- const ids = [...tunnelMap.keys()];
36
- for (const id of ids) {
37
- try {
38
- await closeTunnel(id);
24
+ /** Close and unregister the tunnel(s) for an environment. */
25
+ async close(environmentId) {
26
+ const state = this.tunnelMap.get(environmentId);
27
+ if (state) {
28
+ await state.tunnel.close();
29
+ if (state.reverseTunnel) {
30
+ await state.reverseTunnel.close();
31
+ }
32
+ this.tunnelMap.delete(environmentId);
39
33
  }
40
- catch (err) {
41
- logger.error({ environmentId: id, err }, "Failed to close tunnel during shutdown");
34
+ }
35
+ /** Close all active tunnels (called during server shutdown). */
36
+ async closeAll(logger = defaultLogger) {
37
+ const ids = [...this.tunnelMap.keys()];
38
+ for (const id of ids) {
39
+ try {
40
+ await this.close(id);
41
+ }
42
+ catch (err) {
43
+ logger.error({ environmentId: id, err }, "Failed to close tunnel during shutdown");
44
+ }
42
45
  }
43
46
  }
44
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tunnel-registry.js","sourceRoot":"","sources":["../src/tunnel-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,MAAM,SAAS,GAA6B,IAAI,GAAG,EAAuB,CAAC;AAE3E,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAC5B,aAAqB,EACrB,KAAkB,EAClB,SAAwB,aAAa;IAErC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,aAAa,EAAE,EACtB,4DAA4D,CAC7D,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3C,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,aAAa,EAAE,EACtB,oEAAoE,CACrE,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,SAAS,CAAC,aAAqB;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,aAAqB;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAwB,aAAa;IACzE,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,wCAAwC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tunnel-registry.js","sourceRoot":"","sources":["../src/tunnel-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,yFAAyF;AACzF,MAAM,OAAO,cAAc;IACR,SAAS,GAA6B,IAAI,GAAG,EAAuB,CAAC;IAEtF,uFAAuF;IAChF,QAAQ,CACb,aAAqB,EACrB,KAAkB,EAClB,SAAwB,aAAa;QAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpC,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,aAAa,EAAE,EACtB,4DAA4D,CAC7D,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;gBAC3B,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC3C,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,aAAa,EAAE,EACtB,oEAAoE,CACrE,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,+CAA+C;IACxC,GAAG,CAAC,aAAqB;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED,6DAA6D;IACtD,KAAK,CAAC,KAAK,CAAC,aAAqB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,gEAAgE;IACzD,KAAK,CAAC,QAAQ,CAAC,SAAwB,aAAa;QACzD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,wCAAwC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grackle-ai/adapter-sdk",
3
- "version": "0.173.0",
3
+ "version": "0.175.0",
4
4
  "description": "SDK for building Grackle environment adapters",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,9 +28,9 @@
28
28
  "dist/"
29
29
  ],
30
30
  "dependencies": {
31
- "@grackle-ai/ahp": "0.173.0",
32
- "@grackle-ai/ahp-transport": "0.173.0",
33
- "@grackle-ai/common": "0.173.0"
31
+ "@grackle-ai/ahp": "0.175.0",
32
+ "@grackle-ai/ahp-transport": "0.175.0",
33
+ "@grackle-ai/common": "0.175.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@rushstack/heft": "1.2.7",