@generacy-ai/control-plane 0.2.0 → 0.4.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.
Files changed (44) hide show
  1. package/dist/src/errors.d.ts +1 -1
  2. package/dist/src/errors.d.ts.map +1 -1
  3. package/dist/src/errors.js +1 -0
  4. package/dist/src/errors.js.map +1 -1
  5. package/dist/src/index.d.ts +3 -0
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +4 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/routes/app-config.d.ts +1 -1
  10. package/dist/src/routes/app-config.d.ts.map +1 -1
  11. package/dist/src/routes/app-config.js +5 -16
  12. package/dist/src/routes/app-config.js.map +1 -1
  13. package/dist/src/routes/lifecycle.d.ts.map +1 -1
  14. package/dist/src/routes/lifecycle.js +98 -7
  15. package/dist/src/routes/lifecycle.js.map +1 -1
  16. package/dist/src/schemas.d.ts +73 -4
  17. package/dist/src/schemas.d.ts.map +1 -1
  18. package/dist/src/schemas.js +24 -0
  19. package/dist/src/schemas.js.map +1 -1
  20. package/dist/src/services/docker-engine-client.d.ts +57 -0
  21. package/dist/src/services/docker-engine-client.d.ts.map +1 -0
  22. package/dist/src/services/docker-engine-client.js +326 -0
  23. package/dist/src/services/docker-engine-client.js.map +1 -0
  24. package/dist/src/services/docker-engine-types.d.ts +152 -0
  25. package/dist/src/services/docker-engine-types.d.ts.map +1 -0
  26. package/dist/src/services/docker-engine-types.js +37 -0
  27. package/dist/src/services/docker-engine-types.js.map +1 -0
  28. package/dist/src/services/vscode-tunnel-manager.d.ts +23 -0
  29. package/dist/src/services/vscode-tunnel-manager.d.ts.map +1 -1
  30. package/dist/src/services/vscode-tunnel-manager.js +118 -15
  31. package/dist/src/services/vscode-tunnel-manager.js.map +1 -1
  32. package/dist/src/services/wizard-env-writer.d.ts +7 -0
  33. package/dist/src/services/wizard-env-writer.d.ts.map +1 -1
  34. package/dist/src/services/wizard-env-writer.js +4 -3
  35. package/dist/src/services/wizard-env-writer.js.map +1 -1
  36. package/dist/src/services/worker-enumeration.d.ts +31 -0
  37. package/dist/src/services/worker-enumeration.d.ts.map +1 -0
  38. package/dist/src/services/worker-enumeration.js +71 -0
  39. package/dist/src/services/worker-enumeration.js.map +1 -0
  40. package/dist/src/services/worker-scaler.d.ts +128 -0
  41. package/dist/src/services/worker-scaler.d.ts.map +1 -0
  42. package/dist/src/services/worker-scaler.js +405 -0
  43. package/dist/src/services/worker-scaler.js.map +1 -0
  44. package/package.json +2 -1
@@ -0,0 +1,326 @@
1
+ import http from 'node:http';
2
+ import { DockerEngineError, DockerDaemonUnavailableError, } from './docker-engine-types.js';
3
+ const DEFAULT_DOCKER_HOST = 'unix:///var/run/docker-host.sock';
4
+ const DEFAULT_REQUEST_TIMEOUT = 30_000;
5
+ export class DockerEngineClient {
6
+ socketPath;
7
+ requestTimeout;
8
+ constructor(options = {}) {
9
+ const dockerHost = options.dockerHost ?? process.env['DOCKER_HOST'] ?? DEFAULT_DOCKER_HOST;
10
+ if (!dockerHost.startsWith('unix://')) {
11
+ throw new Error(`DOCKER_HOST must use unix:// scheme (got "${dockerHost}"); TCP not supported by this client`);
12
+ }
13
+ this.socketPath = dockerHost.slice('unix://'.length);
14
+ this.requestTimeout = options.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;
15
+ }
16
+ async listContainers(opts = {}) {
17
+ const query = {};
18
+ if (opts.all)
19
+ query['all'] = 'true';
20
+ if (opts.filters) {
21
+ // Docker expects filters as a URL-encoded JSON object of label→value-array maps.
22
+ const labelFilters = [];
23
+ const otherFilters = {};
24
+ for (const [key, values] of Object.entries(opts.filters)) {
25
+ if (key === 'label') {
26
+ labelFilters.push(...values);
27
+ }
28
+ else {
29
+ otherFilters[key] = values;
30
+ }
31
+ }
32
+ const filterObj = { ...otherFilters };
33
+ if (labelFilters.length > 0)
34
+ filterObj['label'] = labelFilters;
35
+ query['filters'] = JSON.stringify(filterObj);
36
+ }
37
+ const path = `/containers/json${this.buildQueryString(query)}`;
38
+ const res = await this.request('GET', path);
39
+ this.assertOk(res, path);
40
+ return JSON.parse(res.body);
41
+ }
42
+ async inspectContainer(id) {
43
+ const path = `/containers/${encodeURIComponent(id)}/json`;
44
+ const res = await this.request('GET', path);
45
+ this.assertOk(res, path);
46
+ return JSON.parse(res.body);
47
+ }
48
+ async createContainer(name, config) {
49
+ const path = `/containers/create?name=${encodeURIComponent(name)}`;
50
+ const res = await this.request('POST', path, JSON.stringify(config));
51
+ this.assertOk(res, path, 201);
52
+ return JSON.parse(res.body);
53
+ }
54
+ async startContainer(id) {
55
+ const path = `/containers/${encodeURIComponent(id)}/start`;
56
+ const res = await this.request('POST', path);
57
+ this.assertOk(res, path, 204);
58
+ }
59
+ async stopContainer(id) {
60
+ const path = `/containers/${encodeURIComponent(id)}/stop`;
61
+ const res = await this.request('POST', path);
62
+ // Engine returns 204 on stop, 304 if already stopped (both fine).
63
+ if (res.statusCode === 204 || res.statusCode === 304)
64
+ return;
65
+ this.assertOk(res, path, 204);
66
+ }
67
+ async removeContainer(id, opts = {}) {
68
+ const query = opts.force ? '?force=true' : '';
69
+ const path = `/containers/${encodeURIComponent(id)}${query}`;
70
+ const res = await this.request('DELETE', path);
71
+ this.assertOk(res, path, 204);
72
+ }
73
+ async connectNetwork(networkId, body) {
74
+ const path = `/networks/${encodeURIComponent(networkId)}/connect`;
75
+ const res = await this.request('POST', path, JSON.stringify(body));
76
+ this.assertOk(res, path);
77
+ }
78
+ /**
79
+ * Subscribe to the Docker Engine `/events` stream.
80
+ *
81
+ * Returns an async iterable that yields one `EngineEvent` per newline-delimited
82
+ * JSON line from the daemon. The stream is long-lived; consumers should
83
+ * implement their own reconnect/backoff. The iterator returns when:
84
+ * - the daemon closes the stream (e.g. its own restart),
85
+ * - the consumer breaks out of the `for await` loop, or
86
+ * - `opts.signal` aborts.
87
+ *
88
+ * Throws `DockerDaemonUnavailableError` if the initial socket connection is
89
+ * refused or the socket file is missing.
90
+ */
91
+ streamContainerEvents(opts) {
92
+ const socketPath = this.socketPath;
93
+ const filtersParam = encodeURIComponent(JSON.stringify(opts.filters));
94
+ const path = `/events?filters=${filtersParam}`;
95
+ const signal = opts.signal;
96
+ return {
97
+ [Symbol.asyncIterator]() {
98
+ let res = null;
99
+ let buffer = '';
100
+ let ended = false;
101
+ const eventQueue = [];
102
+ let pendingResolve = null;
103
+ let pendingReject = null;
104
+ let initError = null;
105
+ let connected = false;
106
+ const settle = () => {
107
+ if (!pendingResolve && !pendingReject)
108
+ return;
109
+ if (initError && !connected) {
110
+ const reject = pendingReject;
111
+ pendingResolve = null;
112
+ pendingReject = null;
113
+ reject?.(initError);
114
+ return;
115
+ }
116
+ if (eventQueue.length > 0) {
117
+ const value = eventQueue.shift();
118
+ const resolve = pendingResolve;
119
+ pendingResolve = null;
120
+ pendingReject = null;
121
+ resolve?.({ value, done: false });
122
+ return;
123
+ }
124
+ if (ended) {
125
+ const resolve = pendingResolve;
126
+ pendingResolve = null;
127
+ pendingReject = null;
128
+ resolve?.({ value: undefined, done: true });
129
+ }
130
+ };
131
+ const handleLine = (line) => {
132
+ const trimmed = line.trim();
133
+ if (trimmed.length === 0)
134
+ return;
135
+ try {
136
+ const parsed = JSON.parse(trimmed);
137
+ eventQueue.push(parsed);
138
+ }
139
+ catch (err) {
140
+ console.warn(`[docker-engine-client] skipping malformed /events line: ${trimmed.slice(0, 200)} (${err instanceof Error ? err.message : String(err)})`);
141
+ }
142
+ };
143
+ const req = http.request({
144
+ socketPath,
145
+ path,
146
+ method: 'GET',
147
+ headers: { Host: 'docker' },
148
+ }, (response) => {
149
+ res = response;
150
+ const statusCode = response.statusCode ?? 0;
151
+ if (statusCode < 200 || statusCode >= 300) {
152
+ // Consume body for the error message, then signal initError.
153
+ let body = '';
154
+ response.on('data', (chunk) => {
155
+ body += chunk.toString();
156
+ });
157
+ response.on('end', () => {
158
+ initError = new DockerEngineError(statusCode, path, body || '<no body>');
159
+ settle();
160
+ });
161
+ return;
162
+ }
163
+ connected = true;
164
+ response.setEncoding('utf8');
165
+ response.on('data', (chunk) => {
166
+ buffer += chunk;
167
+ let idx = buffer.indexOf('\n');
168
+ while (idx !== -1) {
169
+ const line = buffer.slice(0, idx);
170
+ buffer = buffer.slice(idx + 1);
171
+ handleLine(line);
172
+ idx = buffer.indexOf('\n');
173
+ }
174
+ settle();
175
+ });
176
+ response.on('end', () => {
177
+ if (buffer.length > 0) {
178
+ handleLine(buffer);
179
+ buffer = '';
180
+ }
181
+ ended = true;
182
+ settle();
183
+ });
184
+ response.on('error', (err) => {
185
+ if (!ended) {
186
+ initError = err;
187
+ ended = true;
188
+ settle();
189
+ }
190
+ });
191
+ });
192
+ req.on('error', (err) => {
193
+ const code = err.code;
194
+ if (!connected) {
195
+ if (code === 'ECONNREFUSED' || code === 'ENOENT') {
196
+ initError = new DockerDaemonUnavailableError(socketPath, err);
197
+ }
198
+ else {
199
+ initError = err;
200
+ }
201
+ }
202
+ ended = true;
203
+ settle();
204
+ });
205
+ const abortHandler = () => {
206
+ ended = true;
207
+ try {
208
+ req.destroy();
209
+ }
210
+ catch {
211
+ // ignore
212
+ }
213
+ if (res) {
214
+ try {
215
+ res.destroy();
216
+ }
217
+ catch {
218
+ // ignore
219
+ }
220
+ }
221
+ settle();
222
+ };
223
+ if (signal) {
224
+ if (signal.aborted) {
225
+ abortHandler();
226
+ }
227
+ else {
228
+ signal.addEventListener('abort', abortHandler, { once: true });
229
+ }
230
+ }
231
+ req.end();
232
+ return {
233
+ next() {
234
+ return new Promise((resolve, reject) => {
235
+ pendingResolve = resolve;
236
+ pendingReject = reject;
237
+ settle();
238
+ });
239
+ },
240
+ return() {
241
+ ended = true;
242
+ try {
243
+ req.destroy();
244
+ }
245
+ catch {
246
+ // ignore
247
+ }
248
+ if (res) {
249
+ try {
250
+ res.destroy();
251
+ }
252
+ catch {
253
+ // ignore
254
+ }
255
+ }
256
+ if (signal) {
257
+ signal.removeEventListener('abort', abortHandler);
258
+ }
259
+ return Promise.resolve({ value: undefined, done: true });
260
+ },
261
+ };
262
+ },
263
+ };
264
+ }
265
+ buildQueryString(query) {
266
+ const entries = Object.entries(query);
267
+ if (entries.length === 0)
268
+ return '';
269
+ return '?' + entries.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join('&');
270
+ }
271
+ assertOk(res, endpoint, expected = 200) {
272
+ if (res.statusCode === expected)
273
+ return;
274
+ if (res.statusCode >= 200 && res.statusCode < 300)
275
+ return;
276
+ let engineMessage = res.body;
277
+ try {
278
+ const parsed = JSON.parse(res.body);
279
+ if (parsed.message)
280
+ engineMessage = parsed.message;
281
+ }
282
+ catch {
283
+ // Body wasn't JSON — keep raw text.
284
+ }
285
+ throw new DockerEngineError(res.statusCode, endpoint, engineMessage);
286
+ }
287
+ request(method, path, body) {
288
+ return new Promise((resolve, reject) => {
289
+ const req = http.request({
290
+ socketPath: this.socketPath,
291
+ path,
292
+ method,
293
+ headers: {
294
+ ...(body !== undefined && {
295
+ 'Content-Type': 'application/json',
296
+ 'Content-Length': Buffer.byteLength(body),
297
+ }),
298
+ },
299
+ }, (res) => {
300
+ let data = '';
301
+ res.on('data', (chunk) => {
302
+ data += chunk.toString();
303
+ });
304
+ res.on('end', () => {
305
+ resolve({ statusCode: res.statusCode ?? 500, body: data });
306
+ });
307
+ });
308
+ req.setTimeout(this.requestTimeout, () => {
309
+ req.destroy(new Error('Docker Engine API request timeout'));
310
+ });
311
+ req.on('error', (err) => {
312
+ const code = err.code;
313
+ if (code === 'ECONNREFUSED' || code === 'ENOENT') {
314
+ reject(new DockerDaemonUnavailableError(this.socketPath, err));
315
+ return;
316
+ }
317
+ reject(err);
318
+ });
319
+ if (body !== undefined) {
320
+ req.write(body);
321
+ }
322
+ req.end();
323
+ });
324
+ }
325
+ }
326
+ //# sourceMappingURL=docker-engine-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-engine-client.js","sourceRoot":"","sources":["../../../src/services/docker-engine-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ export type ContainerState = 'running' | 'exited' | 'paused' | 'restarting' | 'dead' | 'created';
2
+ export interface ContainerSummary {
3
+ Id: string;
4
+ Names: string[];
5
+ Labels: Record<string, string>;
6
+ State: ContainerState;
7
+ NetworkSettings?: {
8
+ Networks?: Record<string, {
9
+ NetworkID: string;
10
+ }>;
11
+ };
12
+ }
13
+ export interface NetworkEndpoint {
14
+ NetworkID: string;
15
+ Aliases?: string[];
16
+ IPAddress?: string;
17
+ IPPrefixLen?: number;
18
+ IPAMConfig?: {
19
+ IPv4Address?: string;
20
+ };
21
+ }
22
+ export interface HealthConfig {
23
+ Test?: string[];
24
+ Interval?: number;
25
+ Timeout?: number;
26
+ Retries?: number;
27
+ StartPeriod?: number;
28
+ }
29
+ export interface Mount {
30
+ Type: 'bind' | 'volume' | 'tmpfs';
31
+ Source?: string;
32
+ Target: string;
33
+ ReadOnly?: boolean;
34
+ BindOptions?: {
35
+ Propagation?: string;
36
+ };
37
+ VolumeOptions?: {
38
+ NoCopy?: boolean;
39
+ Labels?: Record<string, string>;
40
+ };
41
+ }
42
+ export interface ContainerInspect {
43
+ Id: string;
44
+ Name: string;
45
+ Image: string;
46
+ Config: {
47
+ Hostname?: string;
48
+ Domainname?: string;
49
+ User?: string;
50
+ Env?: string[];
51
+ Cmd?: string[];
52
+ Entrypoint?: string[] | string;
53
+ Labels?: Record<string, string>;
54
+ WorkingDir?: string;
55
+ Healthcheck?: HealthConfig;
56
+ StopSignal?: string;
57
+ StopTimeout?: number;
58
+ ExposedPorts?: Record<string, Record<string, never>>;
59
+ };
60
+ HostConfig: {
61
+ Binds?: string[];
62
+ Mounts?: Mount[];
63
+ NetworkMode?: string;
64
+ RestartPolicy?: {
65
+ Name: string;
66
+ MaximumRetryCount?: number;
67
+ };
68
+ LogConfig?: {
69
+ Type: string;
70
+ Config: Record<string, string>;
71
+ };
72
+ Resources?: {
73
+ Memory?: number;
74
+ MemorySwap?: number;
75
+ CpuShares?: number;
76
+ CpusetCpus?: string;
77
+ };
78
+ SecurityOpt?: string[];
79
+ CapAdd?: string[];
80
+ CapDrop?: string[];
81
+ Devices?: {
82
+ PathOnHost: string;
83
+ PathInContainer: string;
84
+ CgroupPermissions: string;
85
+ }[];
86
+ Init?: boolean;
87
+ IpcMode?: string;
88
+ PidMode?: string;
89
+ ReadonlyRootfs?: boolean;
90
+ Tmpfs?: Record<string, string>;
91
+ };
92
+ NetworkSettings: {
93
+ Networks: Record<string, NetworkEndpoint>;
94
+ };
95
+ }
96
+ export interface NetworkEndpointCreate {
97
+ Aliases?: string[];
98
+ IPAMConfig?: {
99
+ IPv4Address?: string;
100
+ };
101
+ }
102
+ export interface ContainerCreateBody {
103
+ Hostname?: string;
104
+ User?: string;
105
+ Env?: string[];
106
+ Cmd?: string[];
107
+ Entrypoint?: string[] | string;
108
+ Image: string;
109
+ Labels?: Record<string, string>;
110
+ WorkingDir?: string;
111
+ Healthcheck?: HealthConfig;
112
+ StopSignal?: string;
113
+ StopTimeout?: number;
114
+ ExposedPorts?: Record<string, Record<string, never>>;
115
+ HostConfig: ContainerInspect['HostConfig'];
116
+ NetworkingConfig: {
117
+ EndpointsConfig: Record<string, NetworkEndpointCreate>;
118
+ };
119
+ }
120
+ export interface NetworkConnectBody {
121
+ Container: string;
122
+ EndpointConfig?: NetworkEndpointCreate;
123
+ }
124
+ /**
125
+ * Narrowed shape of a Docker Engine `/events` line. Only the fields we read.
126
+ * Stable across Engine API v1.41+.
127
+ */
128
+ export interface EngineEvent {
129
+ Type: 'container';
130
+ Action: string;
131
+ id?: string;
132
+ Actor?: {
133
+ ID?: string;
134
+ Attributes?: Record<string, string>;
135
+ };
136
+ time?: number;
137
+ timeNano?: number;
138
+ }
139
+ export declare class DockerEngineError extends Error {
140
+ readonly name = "DockerEngineError";
141
+ readonly statusCode: number;
142
+ readonly endpoint: string;
143
+ readonly engineMessage: string;
144
+ constructor(statusCode: number, endpoint: string, engineMessage: string);
145
+ }
146
+ export declare class DockerDaemonUnavailableError extends Error {
147
+ readonly name = "DockerDaemonUnavailableError";
148
+ readonly socketPath: string;
149
+ readonly cause?: Error;
150
+ constructor(socketPath: string, cause?: Error);
151
+ }
152
+ //# sourceMappingURL=docker-engine-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-engine-types.d.ts","sourceRoot":"","sources":["../../../src/services/docker-engine-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ // Docker Engine API DTOs and error classes.
2
+ //
3
+ // PascalCase matches the Docker daemon's wire format directly — used as-is in
4
+ // TypeScript types rather than translating to camelCase (saves a layer).
5
+ //
6
+ // Type definitions cover only the fields we read; full responses arrive as
7
+ // `unknown` from node:http and are narrowed at the boundary.
8
+ //
9
+ // Stable across Docker Engine API v1.41+ (matches apt-installed docker on
10
+ // Ubuntu 22+ and the daemon mounted via DooD in cluster-base).
11
+ export class DockerEngineError extends Error {
12
+ name = 'DockerEngineError';
13
+ statusCode;
14
+ endpoint;
15
+ engineMessage;
16
+ constructor(statusCode, endpoint, engineMessage) {
17
+ super(`Docker Engine API ${endpoint} returned ${statusCode}: ${engineMessage}`);
18
+ this.statusCode = statusCode;
19
+ this.endpoint = endpoint;
20
+ this.engineMessage = engineMessage;
21
+ }
22
+ }
23
+ export class DockerDaemonUnavailableError extends Error {
24
+ name = 'DockerDaemonUnavailableError';
25
+ socketPath;
26
+ cause;
27
+ constructor(socketPath, cause) {
28
+ // Message is 'DOCKER_DAEMON_UNAVAILABLE' so existing string-match code paths
29
+ // in lifecycle.ts can continue to discriminate by message before the route
30
+ // handler migrates to instanceof checks.
31
+ super('DOCKER_DAEMON_UNAVAILABLE');
32
+ this.socketPath = socketPath;
33
+ if (cause)
34
+ this.cause = cause;
35
+ }
36
+ }
37
+ //# sourceMappingURL=docker-engine-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-engine-types.js","sourceRoot":"","sources":["../../../src/services/docker-engine-types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,0EAA0E;AAC1E,+DAA+D;AAuI/D,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACxB,IAAI,GAAG,mBAAmB,CAAC;IACpC,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,aAAa,CAAS;IAE/B,YAAY,UAAkB,EAAE,QAAgB,EAAE,aAAqB;QACrE,KAAK,CAAC,qBAAqB,QAAQ,aAAa,UAAU,KAAK,aAAa,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACnC,IAAI,GAAG,8BAA8B,CAAC;IAC/C,UAAU,CAAS;IACV,KAAK,CAAS;IAEhC,YAAY,UAAkB,EAAE,KAAa;QAC3C,6EAA6E;QAC7E,2EAA2E;QAC3E,yCAAyC;QACzC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,CAAC;CACF"}
@@ -15,6 +15,7 @@ export interface VsCodeTunnelEvent {
15
15
  export interface VsCodeTunnelManager {
16
16
  start(): Promise<VsCodeTunnelStartResult>;
17
17
  stop(): Promise<void>;
18
+ unregister(): Promise<void>;
18
19
  getStatus(): VsCodeTunnelStatus;
19
20
  shutdown(): Promise<void>;
20
21
  }
@@ -27,6 +28,18 @@ export interface VsCodeTunnelManagerOptions {
27
28
  export declare const DEFAULT_VSCODE_CLI_BIN = "/usr/local/bin/code";
28
29
  export declare const DEFAULT_DEVICE_CODE_TIMEOUT_MS = 30000;
29
30
  export declare const DEFAULT_FORCE_KILL_TIMEOUT_MS = 5000;
31
+ /**
32
+ * Derive a VS Code tunnel name from a cluster UUID.
33
+ *
34
+ * Microsoft's tunnel service requires names to satisfy
35
+ * `/^[a-z][a-z0-9-]{0,19}$/` (≤20 chars, lowercase, letter-initial,
36
+ * `[a-z0-9-]`). UUIDs are 36 chars and hyphens are stripped before slicing.
37
+ *
38
+ * Per-cluster derivation is required for multi-cluster support (#744 FR-001).
39
+ * Using the stable project id (the #618 fix) collided whenever a single
40
+ * project had more than one cluster; cloud-side per-cluster persistence
41
+ * (generacy-cloud#792, merge:true #563) makes the cluster UUID the right key.
42
+ */
30
43
  export declare function deriveTunnelName(clusterId: string): string;
31
44
  export declare function loadOptionsFromEnv(env?: NodeJS.ProcessEnv): VsCodeTunnelManagerOptions;
32
45
  export declare class VsCodeTunnelProcessManager implements VsCodeTunnelManager {
@@ -39,12 +52,22 @@ export declare class VsCodeTunnelProcessManager implements VsCodeTunnelManager {
39
52
  private deviceCode;
40
53
  private verificationUri;
41
54
  private tunnelUrl;
55
+ private actualTunnelName;
42
56
  private stopping;
43
57
  constructor(opts: VsCodeTunnelManagerOptions);
58
+ /** Extract the registered tunnel name from a `https://vscode.dev/tunnel/<name>/…` URL. */
59
+ private tunnelNameFromUrl;
44
60
  getStatus(): VsCodeTunnelStatus;
45
61
  start(): Promise<VsCodeTunnelStartResult>;
46
62
  stop(): Promise<void>;
47
63
  shutdown(): Promise<void>;
64
+ /**
65
+ * Release the cluster's tunnel name from Microsoft's tunnel service so the
66
+ * name can be reused after `generacy destroy`. Best-effort: spawns
67
+ * `code tunnel unregister --name <tunnelName>` with a 10s timeout. On
68
+ * timeout or non-zero exit, emits a warning event and resolves; never throws.
69
+ */
70
+ unregister(): Promise<void>;
48
71
  private handleStdoutLine;
49
72
  private clearDeviceCodeTimer;
50
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-tunnel-manager.d.ts","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,UAAU,GACV,uBAAuB,GACvB,WAAW,GACX,cAAc,GACd,OAAO,CAAC;AAEZ,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,IAAI,kBAAkB,CAAC;IAChC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAC5D,eAAO,MAAM,8BAA8B,QAAS,CAAC;AACrD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAQnD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,0BAA0B,CAkB5B;AAOD,qBAAa,0BAA2B,YAAW,mBAAmB;IAWxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVjC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAS;gBAEI,IAAI,EAAE,0BAA0B;IAE7D,SAAS,IAAI,kBAAkB;IAIzB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA2HzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,OAAO,CAAC,gBAAgB;IA4CxB,OAAO,CAAC,oBAAoB;CAM7B;AAID,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAE7E"}
1
+ {"version":3,"file":"vscode-tunnel-manager.d.ts","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,UAAU,GACV,uBAAuB,GACvB,WAAW,GACX,cAAc,GACd,OAAO,CAAC;AAEZ,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,IAAI,kBAAkB,CAAC;IAChC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAC5D,eAAO,MAAM,8BAA8B,QAAS,CAAC;AACrD,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AAQnD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,0BAA0B,CAc5B;AAOD,qBAAa,0BAA2B,YAAW,mBAAmB;IAkBxD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAjBjC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IAOxC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAS;gBAEI,IAAI,EAAE,0BAA0B;IAE7D,0FAA0F;IAC1F,OAAO,CAAC,iBAAiB;IAIzB,SAAS,IAAI,kBAAkB;IAIzB,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA+HzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuDjC,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,oBAAoB;CAM7B;AAID,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAE7E"}