@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
@@ -7,23 +7,35 @@ const DEVICE_CODE_PATTERN = /([A-Z0-9]{4}-[A-Z0-9]{4})/;
7
7
  const VERIFICATION_URI_PATTERN = /https:\/\/github\.com\/login\/device/;
8
8
  const CONNECTED_PATTERN = /https:\/\/vscode\.dev\/tunnel\/[\w-]+|is connected|tunnel is ready/i;
9
9
  const TUNNEL_URL_PATTERN = /(https:\/\/vscode\.dev\/tunnel\/[\w-]+[\w\-/]*)/;
10
+ /**
11
+ * Derive a VS Code tunnel name from a cluster UUID.
12
+ *
13
+ * Microsoft's tunnel service requires names to satisfy
14
+ * `/^[a-z][a-z0-9-]{0,19}$/` (≤20 chars, lowercase, letter-initial,
15
+ * `[a-z0-9-]`). UUIDs are 36 chars and hyphens are stripped before slicing.
16
+ *
17
+ * Per-cluster derivation is required for multi-cluster support (#744 FR-001).
18
+ * Using the stable project id (the #618 fix) collided whenever a single
19
+ * project had more than one cluster; cloud-side per-cluster persistence
20
+ * (generacy-cloud#792, merge:true #563) makes the cluster UUID the right key.
21
+ */
10
22
  export function deriveTunnelName(clusterId) {
11
23
  const compact = clusterId.replace(/-/g, "");
12
- return `g-${compact.slice(0, 18)}`;
24
+ const out = `g-${compact.slice(0, 18)}`;
25
+ if (!/^[a-z][a-z0-9-]{0,19}$/.test(out)) {
26
+ throw new Error(`Derived tunnel name "${out}" violates Microsoft tunnel constraints`);
27
+ }
28
+ return out;
13
29
  }
14
30
  export function loadOptionsFromEnv(env = process.env) {
15
- // Derive the tunnel name from the stable project id, not the per-activation
16
- // cluster UUID. GENERACY_CLUSTER_ID is regenerated by the cloud's
17
- // launch-config endpoint on every fresh activation, which would produce a
18
- // new `code tunnel --name` per session and continuously desync from the
19
- // cloud's persisted `vscodeTunnelName` (preserved via merge:true on
20
- // tryRegisterCluster see generacy-ai/generacy-cloud#563). Using the
21
- // project id keeps the tunnel name stable across all activations of the
22
- // same project; the persisted value is always correct, and dashboard URLs
23
- // resolve to the actually-running tunnel. See #618.
24
- const id = env["GENERACY_PROJECT_ID"];
31
+ // Cluster UUID source (reverted from #618). Multi-cluster per project
32
+ // (#744 FR-001/FR-002) requires per-cluster tunnel names; project-id
33
+ // derivation collided across siblings. Cloud-side per-cluster persistence
34
+ // (generacy-cloud#792 + merge:true #563) keeps each cluster's tunnel name
35
+ // stable across activations of THAT cluster.
36
+ const id = env["GENERACY_CLUSTER_ID"];
25
37
  if (!id)
26
- throw new Error("GENERACY_PROJECT_ID is required for VS Code tunnel");
38
+ throw new Error("GENERACY_CLUSTER_ID is required for VS Code tunnel");
27
39
  return {
28
40
  binPath: env["VSCODE_CLI_BIN"] ?? DEFAULT_VSCODE_CLI_BIN,
29
41
  tunnelName: deriveTunnelName(id),
@@ -44,10 +56,21 @@ export class VsCodeTunnelProcessManager {
44
56
  deviceCode = null;
45
57
  verificationUri = null;
46
58
  tunnelUrl = null;
59
+ // The name `code tunnel` actually registered. It can differ from the
60
+ // requested `opts.tunnelName`: if that name is already taken (e.g. a stale
61
+ // registration left behind by a previously-deleted Droplet for the same
62
+ // project — the name is derived from the stable project id, see #618), the
63
+ // CLI silently falls back to a random name. We must report THIS name so the
64
+ // cloud/UI deep-links to the tunnel that's actually running, not the dead one.
65
+ actualTunnelName = null;
47
66
  stopping = false;
48
67
  constructor(opts) {
49
68
  this.opts = opts;
50
69
  }
70
+ /** Extract the registered tunnel name from a `https://vscode.dev/tunnel/<name>/…` URL. */
71
+ tunnelNameFromUrl(url) {
72
+ return url?.match(/vscode\.dev\/tunnel\/([\w-]+)/)?.[1] ?? null;
73
+ }
51
74
  getStatus() {
52
75
  return this.status;
53
76
  }
@@ -64,11 +87,14 @@ export class VsCodeTunnelProcessManager {
64
87
  else if (this.status === "connected") {
65
88
  emitTunnelEvent({
66
89
  status: "connected",
67
- tunnelName: this.opts.tunnelName,
90
+ tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
68
91
  tunnelUrl: this.tunnelUrl ?? undefined,
69
92
  });
70
93
  }
71
- return { status: this.status, tunnelName: this.opts.tunnelName };
94
+ return {
95
+ status: this.status,
96
+ tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
97
+ };
72
98
  }
73
99
  this.status = "starting";
74
100
  this.stdoutBuffer = [];
@@ -93,6 +119,7 @@ export class VsCodeTunnelProcessManager {
93
119
  this.deviceCode = null;
94
120
  this.verificationUri = null;
95
121
  this.tunnelUrl = null;
122
+ this.actualTunnelName = null;
96
123
  if (stopInitiated) {
97
124
  this.status = "stopped";
98
125
  }
@@ -188,6 +215,65 @@ export class VsCodeTunnelProcessManager {
188
215
  async shutdown() {
189
216
  await this.stop();
190
217
  }
218
+ /**
219
+ * Release the cluster's tunnel name from Microsoft's tunnel service so the
220
+ * name can be reused after `generacy destroy`. Best-effort: spawns
221
+ * `code tunnel unregister --name <tunnelName>` with a 10s timeout. On
222
+ * timeout or non-zero exit, emits a warning event and resolves; never throws.
223
+ */
224
+ async unregister() {
225
+ const args = ["tunnel", "unregister", "--name", this.opts.tunnelName];
226
+ const child = spawn(this.opts.binPath, args, {
227
+ stdio: ["ignore", "pipe", "pipe"],
228
+ detached: false,
229
+ });
230
+ child.stdout?.on("data", () => { });
231
+ child.stderr?.on("data", () => { });
232
+ await new Promise((resolve) => {
233
+ let settled = false;
234
+ const settle = () => {
235
+ if (settled)
236
+ return;
237
+ settled = true;
238
+ clearTimeout(killTimer);
239
+ resolve();
240
+ };
241
+ const killTimer = setTimeout(() => {
242
+ emitTunnelEvent({
243
+ status: "error",
244
+ error: "tunnel unregister timed out",
245
+ tunnelName: this.opts.tunnelName,
246
+ });
247
+ try {
248
+ child.kill("SIGKILL");
249
+ }
250
+ catch {
251
+ // already gone
252
+ }
253
+ settle();
254
+ }, 10_000);
255
+ if (typeof killTimer.unref === "function")
256
+ killTimer.unref();
257
+ child.once("exit", (code) => {
258
+ if (code !== 0) {
259
+ emitTunnelEvent({
260
+ status: "error",
261
+ error: `tunnel unregister exited with code ${code}`,
262
+ tunnelName: this.opts.tunnelName,
263
+ });
264
+ }
265
+ settle();
266
+ });
267
+ child.once("error", (err) => {
268
+ emitTunnelEvent({
269
+ status: "error",
270
+ error: `tunnel unregister failed: ${err.message}`,
271
+ tunnelName: this.opts.tunnelName,
272
+ });
273
+ settle();
274
+ });
275
+ });
276
+ }
191
277
  handleStdoutLine(line, child) {
192
278
  this.stdoutBuffer.push(line);
193
279
  // Keep buffer bounded
@@ -223,11 +309,28 @@ export class VsCodeTunnelProcessManager {
223
309
  this.verificationUri = null;
224
310
  const urlMatch = line.match(TUNNEL_URL_PATTERN);
225
311
  this.tunnelUrl = urlMatch?.[1] ?? null;
312
+ // Prefer the name parsed from the actual tunnel URL — `code tunnel` may
313
+ // have fallen back to a random name when the requested name was taken.
314
+ this.actualTunnelName = this.tunnelNameFromUrl(this.tunnelUrl);
226
315
  emitTunnelEvent({
227
316
  status: "connected",
228
- tunnelName: this.opts.tunnelName,
317
+ tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
229
318
  tunnelUrl: this.tunnelUrl ?? undefined,
230
319
  });
320
+ // Observational: surface tunnel-name collisions (#744 FR-012).
321
+ // `g-<uuid18>` collisions are vanishingly rare (~2^-72) but possible via
322
+ // a stale registration of the same cluster id. We emit a clear error
323
+ // event with both names so the cloud/UI can resolve to the actual
324
+ // running tunnel. Does NOT abort the tunnel.
325
+ if (this.actualTunnelName &&
326
+ this.actualTunnelName !== this.opts.tunnelName) {
327
+ emitTunnelEvent({
328
+ status: "error",
329
+ error: "tunnel name collision",
330
+ tunnelName: this.actualTunnelName,
331
+ details: `requested=${this.opts.tunnelName} actual=${this.actualTunnelName}`,
332
+ });
333
+ }
231
334
  }
232
335
  }
233
336
  clearDeviceCodeTimer() {
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-tunnel-manager.js","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vscode-tunnel-manager.js","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,13 @@ export interface WriteWizardEnvFileResult {
9
9
  written: string[];
10
10
  /** Credential IDs that failed to unseal */
11
11
  failed: string[];
12
+ /**
13
+ * True when a usable `GH_TOKEN` was emitted to the env file. Callers gate the
14
+ * early post-activation clone on this — without a GitHub token the deferred
15
+ * clone of a private repo can't authenticate, so firing the (one-shot)
16
+ * post-activation sentinel before the token is sealed clones nothing.
17
+ */
18
+ hasGitHubToken: boolean;
12
19
  }
13
20
  interface EnvEntry {
14
21
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-env-writer.d.ts","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,EAAE,CAwBZ;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAGzD;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAsDnC"}
1
+ {"version":3,"file":"wizard-env-writer.d.ts","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,EAAE,CAwBZ;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAGzD;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAwDnC"}
@@ -53,14 +53,14 @@ export async function writeWizardEnvFile(options) {
53
53
  if (err.code === 'ENOENT') {
54
54
  // No credentials.yaml — write empty env file, no error
55
55
  await fs.writeFile(envFilePath, '', { mode: 0o600 });
56
- return { written: [], failed: [] };
56
+ return { written: [], failed: [], hasGitHubToken: false };
57
57
  }
58
58
  throw err;
59
59
  }
60
60
  const credentialIds = Object.keys(credentialsMap);
61
61
  if (credentialIds.length === 0) {
62
62
  await fs.writeFile(envFilePath, '', { mode: 0o600 });
63
- return { written: [], failed: [] };
63
+ return { written: [], failed: [], hasGitHubToken: false };
64
64
  }
65
65
  const backend = getCredentialBackend();
66
66
  if (!backend) {
@@ -86,6 +86,7 @@ export async function writeWizardEnvFile(options) {
86
86
  }
87
87
  // Write env file (mode 0600) — partial file on partial failure
88
88
  await fs.writeFile(envFilePath, formatEnvFile(entries), { mode: 0o600 });
89
- return { written, failed };
89
+ const hasGitHubToken = entries.some((e) => e.key === 'GH_TOKEN' && e.value.length > 0);
90
+ return { written, failed, hasGitHubToken };
90
91
  }
91
92
  //# sourceMappingURL=wizard-env-writer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-env-writer.js","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wizard-env-writer.js","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Worker enumeration helpers: discover the compose project name and list
3
+ * worker replicas via the Docker Engine API.
4
+ *
5
+ * Extracted from worker-scaler.ts (#714) so both the scaler and the
6
+ * orchestrator's RelayBridge can enumerate workers without dragging in the
7
+ * scale-write paths, env-file rewriting, etc. Pure move — no behavior change.
8
+ */
9
+ import { DockerEngineClient } from './docker-engine-client.js';
10
+ import type { ContainerState } from './docker-engine-types.js';
11
+ export interface WorkerReplica {
12
+ id: string;
13
+ number: number;
14
+ name: string;
15
+ state: ContainerState;
16
+ networkIds: string[];
17
+ }
18
+ /**
19
+ * Discover the compose project name by inspecting the orchestrator's own
20
+ * container. Falls back to COMPOSE_PROJECT_NAME env var. Throws if neither
21
+ * resolves — happens when running outside compose (dev mode, raw docker run).
22
+ */
23
+ export declare function computeProjectName(client: DockerEngineClient): Promise<string>;
24
+ /**
25
+ * Enumerate worker containers for the given compose project. Includes
26
+ * stopped/exited replicas. Containers with missing or non-numeric
27
+ * `com.docker.compose.container-number` labels are skipped with a warning —
28
+ * defensive against manually-added containers.
29
+ */
30
+ export declare function enumerateWorkers(client: DockerEngineClient, project: string): Promise<WorkerReplica[]>;
31
+ //# sourceMappingURL=worker-enumeration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-enumeration.d.ts","sourceRoot":"","sources":["../../../src/services/worker-enumeration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Worker enumeration helpers: discover the compose project name and list
3
+ * worker replicas via the Docker Engine API.
4
+ *
5
+ * Extracted from worker-scaler.ts (#714) so both the scaler and the
6
+ * orchestrator's RelayBridge can enumerate workers without dragging in the
7
+ * scale-write paths, env-file rewriting, etc. Pure move — no behavior change.
8
+ */
9
+ import { hostname } from 'node:os';
10
+ /**
11
+ * Discover the compose project name by inspecting the orchestrator's own
12
+ * container. Falls back to COMPOSE_PROJECT_NAME env var. Throws if neither
13
+ * resolves — happens when running outside compose (dev mode, raw docker run).
14
+ */
15
+ export async function computeProjectName(client) {
16
+ const selfHostname = hostname();
17
+ try {
18
+ const inspect = await client.inspectContainer(selfHostname);
19
+ const project = inspect.Config.Labels?.['com.docker.compose.project'];
20
+ if (project)
21
+ return project;
22
+ }
23
+ catch {
24
+ // Hostname may not be the container ID (e.g. when overridden in compose).
25
+ }
26
+ const envProject = process.env['COMPOSE_PROJECT_NAME'];
27
+ if (envProject)
28
+ return envProject;
29
+ throw new Error('ORCHESTRATOR_NOT_COMPOSE_MANAGED');
30
+ }
31
+ /**
32
+ * Enumerate worker containers for the given compose project. Includes
33
+ * stopped/exited replicas. Containers with missing or non-numeric
34
+ * `com.docker.compose.container-number` labels are skipped with a warning —
35
+ * defensive against manually-added containers.
36
+ */
37
+ export async function enumerateWorkers(client, project) {
38
+ const summaries = await client.listContainers({
39
+ all: true,
40
+ filters: {
41
+ label: [
42
+ `com.docker.compose.project=${project}`,
43
+ 'com.docker.compose.service=worker',
44
+ ],
45
+ },
46
+ });
47
+ const replicas = [];
48
+ for (const summary of summaries) {
49
+ const numberLabel = summary.Labels?.['com.docker.compose.container-number'];
50
+ const parsedNumber = numberLabel ? parseInt(numberLabel, 10) : NaN;
51
+ if (!Number.isInteger(parsedNumber) || parsedNumber < 1) {
52
+ console.warn(`[worker-scaler] skipping container ${summary.Id} with missing/invalid container-number label: ${numberLabel ?? '<none>'}`);
53
+ continue;
54
+ }
55
+ const networkIds = summary.NetworkSettings?.Networks
56
+ ? Object.values(summary.NetworkSettings.Networks).map((n) => n.NetworkID)
57
+ : [];
58
+ // `Names` arrives with a leading '/' from Engine — strip for readability.
59
+ const rawName = summary.Names[0] ?? '';
60
+ const name = rawName.startsWith('/') ? rawName.slice(1) : rawName;
61
+ replicas.push({
62
+ id: summary.Id,
63
+ number: parsedNumber,
64
+ name,
65
+ state: summary.State,
66
+ networkIds,
67
+ });
68
+ }
69
+ return replicas;
70
+ }
71
+ //# sourceMappingURL=worker-enumeration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-enumeration.js","sourceRoot":"","sources":["../../../src/services/worker-enumeration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYnC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B;IACjE,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC;QACtE,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA0B,EAC1B,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;QAC5C,GAAG,EAAE,IAAI;QACT,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,8BAA8B,OAAO,EAAE;gBACvC,mCAAmC;aACpC;SACF;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,qCAAqC,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CACV,sCAAsC,OAAO,CAAC,EAAE,iDAAiD,WAAW,IAAI,QAAQ,EAAE,CAC3H,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,CAAC,CAAC,EAAE,CAAC;QACP,0EAA0E;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,YAAY;YACpB,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { DockerEngineClient } from './docker-engine-client.js';
2
+ import { type ContainerInspect, type ContainerCreateBody, DockerEngineError } from './docker-engine-types.js';
3
+ import { type WorkerReplica, computeProjectName, enumerateWorkers } from './worker-enumeration.js';
4
+ export { computeProjectName, enumerateWorkers, type WorkerReplica };
5
+ export interface ScaleOptions {
6
+ /** Target worker count. Must be >= 1 (validated upstream in lifecycle route). */
7
+ count: number;
8
+ /** Override orchestrator URL for metadata-refresh callback. */
9
+ orchestratorUrl?: string;
10
+ /** Override orchestrator internal API key. */
11
+ orchestratorApiKey?: string;
12
+ /** Override Docker socket. Default: env DOCKER_HOST or unix:///var/run/docker-host.sock. */
13
+ dockerHost?: string;
14
+ /** Override engine client (test seam — production wires the default). */
15
+ engineClient?: DockerEngineClient;
16
+ }
17
+ export interface ScaleResult {
18
+ /** Worker count observed before scaling (from Engine API enumeration, not .env). */
19
+ previousCount: number;
20
+ /** Target count from ScaleOptions.count. */
21
+ requestedCount: number;
22
+ /** Actual achieved count after the operation. Equals requestedCount on success. */
23
+ actualCount: number;
24
+ }
25
+ export declare class PartialScaleError extends Error {
26
+ readonly name = "PartialScaleError";
27
+ readonly requested: number;
28
+ readonly actual: number;
29
+ readonly previousCount: number;
30
+ readonly cause: Error;
31
+ constructor(requested: number, actual: number, previousCount: number, cause: Error);
32
+ }
33
+ export interface ScalePlan {
34
+ toCreate: number[];
35
+ toRemove: string[];
36
+ }
37
+ /**
38
+ * Plan container-number assignment for a scale operation.
39
+ *
40
+ * Scale up: gap-fill ascending in [1..max(existing)], then append.
41
+ * Scale down: sort exited (highest-numbered first), then running (highest-numbered first),
42
+ * take the first (current - target) IDs.
43
+ * No-op: returns `{ toCreate: [], toRemove: [] }`.
44
+ *
45
+ * Pure function — unit-tested independently. FR-006, SC-003, SC-011.
46
+ */
47
+ export declare function assignContainerNumbers(existing: WorkerReplica[], target: number): ScalePlan;
48
+ /**
49
+ * Clone a source replica's inspect response into a create body for a new replica.
50
+ *
51
+ * Strips orchestrator-set fields (Id, Created, State, Status, Hostname, populated
52
+ * NetworkSettings) and keeps Image, Cmd, Env, Entrypoint, WorkingDir, User, Labels,
53
+ * Healthcheck, StopSignal, StopTimeout, ExposedPorts, and all of HostConfig.
54
+ *
55
+ * Overwrites the `com.docker.compose.container-number` label with the new number —
56
+ * preserves all other labels (project, service, config-hash, etc.) per FR-007.
57
+ *
58
+ * Builds NetworkingConfig with **first network only** from source.NetworkSettings.Networks
59
+ * in insertion order. Caller is responsible for `connectNetwork` calls for remaining
60
+ * networks before `startContainer` (Q1=A multi-network sequencing).
61
+ *
62
+ * Throws `Error('SOURCE_REPLICA_HAS_NO_NETWORKS')` if source has zero networks.
63
+ */
64
+ export declare function cloneInspectToCreate(inspect: ContainerInspect, newNumber: number, _newName: string): ContainerCreateBody;
65
+ interface ScaleUpResult {
66
+ created: number[];
67
+ failed?: {
68
+ number: number;
69
+ error: Error;
70
+ };
71
+ }
72
+ interface ScaleDownResult {
73
+ removed: string[];
74
+ failed?: {
75
+ id: string;
76
+ error: Error;
77
+ };
78
+ }
79
+ /**
80
+ * Create + connect-extra-networks + start, repeated per toCreate slot.
81
+ *
82
+ * Per-slot sequencing (Q1=A):
83
+ * 1. Pre-check gap-fill name collision (FR-015, Q5=A) — if any container
84
+ * already holds `<project>-worker-<n>`, force-remove it first. Edge
85
+ * case after manual `docker rm` of a running worker; normal operation
86
+ * doesn't trigger it because exited replicas are counted by FR-002.
87
+ * 2. POST /containers/create with the first network in NetworkingConfig.
88
+ * 3. POST /networks/<id>/connect per additional network from source.
89
+ * 4. POST /containers/<id>/start.
90
+ *
91
+ * On the first error, stop the loop and return `{ created, failed }`. Do NOT
92
+ * roll back already-created replicas (Q2=B: commit what succeeded).
93
+ */
94
+ export declare function scaleUp(client: DockerEngineClient, project: string, source: ContainerInspect, toCreate: number[]): Promise<ScaleUpResult>;
95
+ /**
96
+ * Stop + remove per ID, in the caller-provided order (already sorted by
97
+ * `assignContainerNumbers`: exited first, then running, highest-numbered first).
98
+ * On the first error, stop and return `{ removed, failed }`. (FR-004)
99
+ */
100
+ export declare function scaleDown(client: DockerEngineClient, toRemoveIds: string[]): Promise<ScaleDownResult>;
101
+ /**
102
+ * Scale worker replicas to the requested count via the Docker Engine API.
103
+ *
104
+ * Replaces the previous `docker compose --scale` shell-out: enumerates workers
105
+ * by `com.docker.compose.*` labels, clones an existing replica's config, and
106
+ * issues create/connect/start or stop/remove directly on the daemon. Removes
107
+ * the host compose-file dependency entirely.
108
+ *
109
+ * Concurrent invocations are serialized by an in-process async mutex (FR-014).
110
+ *
111
+ * Stale clone drift case (FR-013): if a user edits the host compose file and
112
+ * rebuilds without `docker compose up -d`, scale-up clones a stale source
113
+ * replica's config — same behavior as compose itself when scaling from an
114
+ * older replica. Documented here per the spec; not actionable in this code path.
115
+ */
116
+ export declare function scaleWorkers(options: ScaleOptions): Promise<ScaleResult>;
117
+ /**
118
+ * Update the `workers` field in cluster.local.yaml atomically.
119
+ * Creates the file if absent. Preserves any other top-level fields already
120
+ * present.
121
+ */
122
+ export declare function updateClusterLocalYaml(localYamlPath: string, count: number): Promise<void>;
123
+ /**
124
+ * POST to orchestrator /internal/refresh-metadata to trigger immediate metadata push.
125
+ */
126
+ export declare function triggerMetadataRefresh(orchestratorUrl: string, apiKey: string): Promise<void>;
127
+ export { DockerEngineError };
128
+ //# sourceMappingURL=worker-scaler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-scaler.d.ts","sourceRoot":"","sources":["../../../src/services/worker-scaler.ts"],"names":[],"mappings":"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"}