@pleri/olam-cli 0.1.111 → 0.1.112

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.
@@ -27,6 +27,8 @@
27
27
  * services healthy, prints a brief status table and exits 0 in ≤30s.
28
28
  */
29
29
  import type { Command } from 'commander';
30
+ import { pullImageWithRetry, realDocker, type DockerImpl, type DockerCommandResult, type PullPolicy } from '@olam/adapters';
31
+ export { pullImageWithRetry, realDocker, type DockerImpl, type DockerCommandResult, type PullPolicy, };
30
32
  export interface ImageDigests {
31
33
  readonly 'host-cp': string;
32
34
  readonly auth: string;
@@ -51,51 +53,6 @@ export interface BootstrapOpts {
51
53
  }
52
54
  /** Image-digests.json schema validation + load. */
53
55
  export declare function loadImageDigests(installRootDir?: string): ImageDigests;
54
- export type DockerCommandResult = {
55
- readonly exitCode: number;
56
- readonly stdout: string;
57
- readonly stderr: string;
58
- };
59
- export interface DockerImpl {
60
- /** `docker info` — used for daemon smoke. */
61
- info(): Promise<DockerCommandResult>;
62
- /**
63
- * `docker pull <ref>`. Single attempt — retry/coalesce wrapping
64
- * happens at a higher layer.
65
- */
66
- pull(imageRef: string, opts?: {
67
- signal?: AbortSignal;
68
- }): Promise<DockerCommandResult>;
69
- /**
70
- * `docker inspect <ref> --format '{{ index .Config.Labels "<label>" }}'`.
71
- * Returns the label value (empty string when absent / `<no value>`).
72
- */
73
- inspectLabel(imageRef: string, label: string): Promise<DockerCommandResult>;
74
- /**
75
- * `docker tag <source> <target>` — re-tag an already-local image.
76
- * Used after a digest-pinned pull to alias the verified image as
77
- * `<image>:latest` so `compose up` (which reads tagged refs from
78
- * compose.yaml, not digests) finds the same bytes we just pulled.
79
- */
80
- tag(source: string, target: string): Promise<DockerCommandResult>;
81
- }
82
- /** Real docker shell-out impl. */
83
- export declare const realDocker: DockerImpl;
84
- export interface PullPolicy {
85
- /** AbortSignal hard-cap per pull attempt. Default: 180s. */
86
- readonly perAttemptTimeoutMs: number;
87
- /**
88
- * Retry once on transient failure (mirrors withCredential's exactly-
89
- * one-retry). Default: true.
90
- */
91
- readonly retryOnce: boolean;
92
- }
93
- /**
94
- * Pull one image with bounded retry + coalesce.
95
- *
96
- * Test injection: pass `docker` to override the real shell-out.
97
- */
98
- export declare function pullImageWithRetry(imageRef: string, docker?: DockerImpl, policy?: PullPolicy): Promise<DockerCommandResult>;
99
56
  export interface BootstrapResult {
100
57
  readonly exitCode: number;
101
58
  readonly summary: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,cAAc,GAAE,MAAsB,GAAG,YAAY,CA2BrF;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,6CAA6C;IAC7C,IAAI,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrC;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtF;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5E;;;;;OAKG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnE;AAED,kCAAkC;AAClC,eAAO,MAAM,UAAU,EAAE,UAkBxB,CAAC;AAuCF,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAoBD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,UAAuB,EAC/B,MAAM,GAAE,UAAgC,GACvC,OAAO,CAAC,mBAAmB,CAAC,CAmB9B;AAkBD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,mBAAmB,CAAC;CAC/E;AAiBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,eAAe,CAAC,CA8P1B;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyBxD"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAexB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,GAChB,CAAC;AAIF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,cAAc,GAAE,MAAsB,GAAG,YAAY,CA2BrF;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,mBAAmB,CAAC;CAC/E;AAiBD,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,eAAe,CAAC,CA8P1B;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyBxD"}
@@ -26,15 +26,22 @@
26
26
  * Idempotent re-run: when all images present + matching digests +
27
27
  * services healthy, prints a brief status table and exits 0 in ≤30s.
28
28
  */
29
- import { spawn, spawnSync } from 'node:child_process';
29
+ import { spawnSync } from 'node:child_process';
30
30
  import { existsSync, readFileSync } from 'node:fs';
31
31
  import { join } from 'node:path';
32
32
  import ora, {} from 'ora';
33
33
  import pc from 'picocolors';
34
+ import { pullImageWithRetry, realDocker, } from '@olam/adapters';
34
35
  import { installRoot } from '../install-root.js';
35
36
  import { EXIT_BOOTSTRAP_PULL_FAILED, EXIT_GENERIC_ERROR, EXIT_PROTOCOL_MISMATCH, } from '../exit-codes.js';
36
37
  import { checkProtocolOverlap, parseProtocolVersionsLabel } from '../protocol-version.js';
37
38
  import { printError, printSuccess, printInfo, printHeader } from '../output.js';
39
+ // Re-export so existing call sites (upgrade.ts, auth-upgrade.ts, tests)
40
+ // keep importing from `./bootstrap.js` unchanged. The implementation
41
+ // moved to @olam/adapters/docker/pull.ts so the adapter layer can
42
+ // pull-before-createContainer without inverting the cli↔adapters dep
43
+ // direction.
44
+ export { pullImageWithRetry, realDocker, };
38
45
  /** Image-digests.json schema validation + load. */
39
46
  export function loadImageDigests(installRootDir = installRoot()) {
40
47
  const digestsPath = join(installRootDir, 'dist', 'image-digests.json');
@@ -61,106 +68,6 @@ export function loadImageDigests(installRootDir = installRoot()) {
61
68
  }
62
69
  return parsed;
63
70
  }
64
- /** Real docker shell-out impl. */
65
- export const realDocker = {
66
- async info() {
67
- return spawnAsync('docker', ['info']);
68
- },
69
- async pull(imageRef, opts) {
70
- return spawnAsync('docker', ['pull', imageRef], { signal: opts?.signal });
71
- },
72
- async inspectLabel(imageRef, label) {
73
- return spawnAsync('docker', [
74
- 'inspect',
75
- imageRef,
76
- '--format',
77
- `{{ index .Config.Labels "${label}" }}`,
78
- ]);
79
- },
80
- async tag(source, target) {
81
- return spawnAsync('docker', ['tag', source, target]);
82
- },
83
- };
84
- function spawnAsync(cmd, args, opts = {}) {
85
- return new Promise((resolve) => {
86
- const child = spawn(cmd, [...args], {
87
- stdio: ['ignore', 'pipe', 'pipe'],
88
- signal: opts.signal,
89
- });
90
- let stdout = '';
91
- let stderr = '';
92
- child.stdout?.on('data', (chunk) => {
93
- stdout += chunk.toString();
94
- });
95
- child.stderr?.on('data', (chunk) => {
96
- stderr += chunk.toString();
97
- });
98
- child.on('error', (err) => {
99
- resolve({ exitCode: -1, stdout, stderr: stderr + err.message });
100
- });
101
- child.on('close', (code) => {
102
- resolve({ exitCode: code ?? -1, stdout, stderr });
103
- });
104
- });
105
- }
106
- // ── Pull orchestration with retry-throttle-coalesce ───────────────
107
- /**
108
- * Mirrors packages/auth-client/src/coalesce.ts: deduplicates concurrent
109
- * identical-key pulls behind a single in-flight promise. If two callers
110
- * ask for the same digest reference at the same time, only one
111
- * `docker pull` runs; both await the same result.
112
- */
113
- const inflightPulls = new Map();
114
- const DEFAULT_PULL_POLICY = {
115
- perAttemptTimeoutMs: 180_000,
116
- retryOnce: true,
117
- };
118
- function isTransientPullFailure(result) {
119
- // Network / 5xx / rate-limit / timeout signals from docker pull's stderr.
120
- // Conservative — most other failures (manifest unknown, auth required,
121
- // disk full) won't recover on retry.
122
- const s = result.stderr.toLowerCase();
123
- return (result.exitCode !== 0 &&
124
- (/timeout|connection|temporarily|429|503|tls handshake|network/.test(s) ||
125
- result.exitCode === 124 /* command timed out */ ||
126
- result.exitCode === -1 /* aborted by AbortController */));
127
- }
128
- /**
129
- * Pull one image with bounded retry + coalesce.
130
- *
131
- * Test injection: pass `docker` to override the real shell-out.
132
- */
133
- export async function pullImageWithRetry(imageRef, docker = realDocker, policy = DEFAULT_PULL_POLICY) {
134
- const existing = inflightPulls.get(imageRef);
135
- if (existing)
136
- return existing;
137
- const promise = (async () => {
138
- let result = await pullOnce(imageRef, docker, policy.perAttemptTimeoutMs);
139
- if (result.exitCode !== 0 && policy.retryOnce && isTransientPullFailure(result)) {
140
- // Single retry — bounded, NOT exponential infinity.
141
- result = await pullOnce(imageRef, docker, policy.perAttemptTimeoutMs);
142
- }
143
- return result;
144
- })();
145
- inflightPulls.set(imageRef, promise);
146
- try {
147
- return await promise;
148
- }
149
- finally {
150
- inflightPulls.delete(imageRef);
151
- }
152
- }
153
- async function pullOnce(imageRef, docker, timeoutMs) {
154
- const ac = new AbortController();
155
- const timer = setTimeout(() => ac.abort(), timeoutMs).unref?.();
156
- try {
157
- return await docker.pull(imageRef, { signal: ac.signal });
158
- }
159
- finally {
160
- if (timer)
161
- clearTimeout(timer);
162
- }
163
- }
164
71
  const REAL_OLAM_SUBCOMMAND = (args) => {
165
72
  const result = spawnSync(process.execPath, [
166
73
  process.argv[1] ?? 'olam',
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "auth": "sha256:c8ebf817e09719289c7d7e37056b24adacb9d9fbc555e2540fbe88dfd400f2d9",
3
- "devbox": "sha256:a3de0eeef0abfdfc97979e1b13a884832f404cbdb3dc0c62e4ec8694eea865b8",
4
- "devbox-base": "sha256:dd8abd8599eebd7ae181b32269f0ce60dfc9880471239abcafc32c6a13048146",
5
- "host-cp": "sha256:0ad4bda950a29422125199a8b3aa6a83831f89c4fa8a8a94e0fd9d49446e743c",
3
+ "devbox": "sha256:1a8d31c28333c69619d653d73403002fc3eebced3e634eae02371797e0f867e1",
4
+ "devbox-base": "sha256:22b1d82972d14252e12558ba51e5bb80f0522b6fc8fe9f8a55b340ca4c1ff8ef",
5
+ "host-cp": "sha256:5ecedfe153127cc8c37a887795cc40675ed862410b99e334ea056c645374c28c",
6
6
  "mcp-auth": "sha256:c82fcfca7ed1b139cbea252697487889b96b45a6575cfba076de7f57eaa943ac",
7
7
  "$schema_version": 1,
8
- "$published_version": "0.1.111",
8
+ "$published_version": "0.1.112",
9
9
  "$registry": "ghcr.io/pleri"
10
10
  }
package/dist/index.js CHANGED
@@ -5645,6 +5645,98 @@ var init_network = __esm({
5645
5645
  }
5646
5646
  });
5647
5647
 
5648
+ // ../adapters/dist/docker/pull.js
5649
+ import { spawn } from "node:child_process";
5650
+ function spawnAsync(cmd, args, opts = {}) {
5651
+ return new Promise((resolve11) => {
5652
+ const child = spawn(cmd, [...args], {
5653
+ stdio: ["ignore", "pipe", "pipe"],
5654
+ signal: opts.signal
5655
+ });
5656
+ let stdout = "";
5657
+ let stderr = "";
5658
+ child.stdout?.on("data", (chunk) => {
5659
+ stdout += chunk.toString();
5660
+ });
5661
+ child.stderr?.on("data", (chunk) => {
5662
+ stderr += chunk.toString();
5663
+ });
5664
+ child.on("error", (err) => {
5665
+ resolve11({ exitCode: -1, stdout, stderr: stderr + err.message });
5666
+ });
5667
+ child.on("close", (code) => {
5668
+ resolve11({ exitCode: code ?? -1, stdout, stderr });
5669
+ });
5670
+ });
5671
+ }
5672
+ function isTransientPullFailure(result) {
5673
+ const s = result.stderr.toLowerCase();
5674
+ return result.exitCode !== 0 && (/timeout|connection|temporarily|429|503|tls handshake|network/.test(s) || result.exitCode === 124 || result.exitCode === -1);
5675
+ }
5676
+ async function pullImageWithRetry(imageRef, docker2 = realDocker, policy = DEFAULT_PULL_POLICY) {
5677
+ const key = policy.platform ? `${imageRef}@@${policy.platform}` : imageRef;
5678
+ const existing = inflightPulls.get(key);
5679
+ if (existing)
5680
+ return existing;
5681
+ const promise = (async () => {
5682
+ let result = await pullOnce(imageRef, docker2, policy.perAttemptTimeoutMs, policy.platform);
5683
+ if (result.exitCode !== 0 && policy.retryOnce && isTransientPullFailure(result)) {
5684
+ result = await pullOnce(imageRef, docker2, policy.perAttemptTimeoutMs, policy.platform);
5685
+ }
5686
+ return result;
5687
+ })();
5688
+ inflightPulls.set(key, promise);
5689
+ try {
5690
+ return await promise;
5691
+ } finally {
5692
+ inflightPulls.delete(key);
5693
+ }
5694
+ }
5695
+ async function pullOnce(imageRef, docker2, timeoutMs, platform) {
5696
+ const ac = new AbortController();
5697
+ const timer = setTimeout(() => ac.abort(), timeoutMs).unref?.();
5698
+ try {
5699
+ return await docker2.pull(imageRef, { signal: ac.signal, ...platform ? { platform } : {} });
5700
+ } finally {
5701
+ if (timer)
5702
+ clearTimeout(timer);
5703
+ }
5704
+ }
5705
+ var realDocker, inflightPulls, DEFAULT_PULL_POLICY;
5706
+ var init_pull = __esm({
5707
+ "../adapters/dist/docker/pull.js"() {
5708
+ "use strict";
5709
+ realDocker = {
5710
+ async info() {
5711
+ return spawnAsync("docker", ["info"]);
5712
+ },
5713
+ async pull(imageRef, opts) {
5714
+ const args = ["pull"];
5715
+ if (opts?.platform)
5716
+ args.push(`--platform=${opts.platform}`);
5717
+ args.push(imageRef);
5718
+ return spawnAsync("docker", args, { signal: opts?.signal });
5719
+ },
5720
+ async inspectLabel(imageRef, label) {
5721
+ return spawnAsync("docker", [
5722
+ "inspect",
5723
+ imageRef,
5724
+ "--format",
5725
+ `{{ index .Config.Labels "${label}" }}`
5726
+ ]);
5727
+ },
5728
+ async tag(source, target) {
5729
+ return spawnAsync("docker", ["tag", source, target]);
5730
+ }
5731
+ };
5732
+ inflightPulls = /* @__PURE__ */ new Map();
5733
+ DEFAULT_PULL_POLICY = {
5734
+ perAttemptTimeoutMs: 18e4,
5735
+ retryOnce: true
5736
+ };
5737
+ }
5738
+ });
5739
+
5648
5740
  // ../adapters/dist/docker/volume.js
5649
5741
  var volumeName, createVolume;
5650
5742
  var init_volume = __esm({
@@ -5736,12 +5828,14 @@ async function auditPortsForZombies(docker2, hostPorts) {
5736
5828
  }
5737
5829
  }
5738
5830
  }
5739
- var serviceContainerName, worldContainerName, miseCacheVolumeName, PACKAGE_MANAGER_CACHE_DIRS, createServiceContainer, DEFAULT_IMAGE2, CONTROL_PLANE_PORT, HOST_CONTROL_PLANE_BASE, HOST_APP_PORT_BASE_DELTA, DEFAULT_MEMORY_BYTES, PortHeldByZombieError, createWorldContainer, stopAndRemove;
5831
+ var realPullImage, serviceContainerName, worldContainerName, miseCacheVolumeName, PACKAGE_MANAGER_CACHE_DIRS, createServiceContainer, DEFAULT_IMAGE2, CONTROL_PLANE_PORT, HOST_CONTROL_PLANE_BASE, HOST_APP_PORT_BASE_DELTA, DEFAULT_MEMORY_BYTES, PortHeldByZombieError, createWorldContainer, stopAndRemove;
5740
5832
  var init_container2 = __esm({
5741
5833
  "../adapters/dist/docker/container.js"() {
5742
5834
  "use strict";
5743
5835
  init_network();
5836
+ init_pull();
5744
5837
  init_volume();
5838
+ realPullImage = (imageRef, platform) => pullImageWithRetry(imageRef, void 0, platform ? { perAttemptTimeoutMs: 18e4, retryOnce: true, platform } : { perAttemptTimeoutMs: 18e4, retryOnce: true });
5745
5839
  serviceContainerName = (worldId, serviceName) => `olam-${sanitizeContainerName(worldId)}-${sanitizeContainerName(serviceName)}`;
5746
5840
  worldContainerName = (worldId) => `olam-${sanitizeContainerName(worldId)}-devbox`;
5747
5841
  miseCacheVolumeName = (arch2 = process.arch) => `olam-mise-cache-${arch2}`;
@@ -5751,10 +5845,15 @@ var init_container2 = __esm({
5751
5845
  { name: "yarn", hostSubpath: ".olam/cache/yarn", containerPath: "/usr/local/share/.cache/yarn" },
5752
5846
  { name: "pip", hostSubpath: ".olam/cache/pip", containerPath: "/home/olam/.cache/pip" }
5753
5847
  ];
5754
- createServiceContainer = async (docker2, worldId, worldName, service, portOffset) => {
5848
+ createServiceContainer = async (docker2, worldId, worldName, service, portOffset, pullImage = realPullImage) => {
5755
5849
  const labels = olamLabels(worldId, worldName);
5756
5850
  const hostPort = service.port + portOffset;
5757
5851
  const envList = service.environment ? Object.entries(service.environment).map(([k, v]) => `${k}=${v}`) : [];
5852
+ const pullResult = await pullImage(service.image, service.platform);
5853
+ if (pullResult.exitCode !== 0) {
5854
+ const reason = pullResult.stderr.trim() || `exit ${pullResult.exitCode}`;
5855
+ throw new Error(`failed to pull ${service.image}${service.platform ? ` (platform=${service.platform})` : ""}: ${reason}`);
5856
+ }
5758
5857
  const container = await docker2.createContainer({
5759
5858
  name: serviceContainerName(worldId, service.name),
5760
5859
  Image: service.image,
@@ -6112,10 +6211,18 @@ var init_provider = __esm({
6112
6211
  };
6113
6212
  docker;
6114
6213
  dockerOptions;
6115
- constructor(dockerOptions) {
6214
+ /**
6215
+ * Injectable image-pull helper. Defaults to the real
6216
+ * `pullImageWithRetry` (docker CLI shell-out). Tests override with a
6217
+ * no-op so they don't need a real Docker daemon to exercise the
6218
+ * dockerode-mocked code paths.
6219
+ */
6220
+ pullImage;
6221
+ constructor(dockerOptions, opts) {
6116
6222
  super();
6117
6223
  this.docker = new Dockerode(dockerOptions);
6118
6224
  this.dockerOptions = dockerOptions;
6225
+ this.pullImage = opts?.pullImage;
6119
6226
  }
6120
6227
  // -----------------------------------------------------------------------
6121
6228
  // createWorld
@@ -6134,7 +6241,7 @@ var init_provider = __esm({
6134
6241
  await createVolume(this.docker, id, name, svc.name);
6135
6242
  }
6136
6243
  for (const svc of services) {
6137
- await createServiceContainer(this.docker, id, name, svc, portOffset);
6244
+ await createServiceContainer(this.docker, id, name, svc, portOffset, this.pullImage);
6138
6245
  }
6139
6246
  const SERVICE_ENV_ALIASES = {
6140
6247
  postgres: "POSTGRESQL",
@@ -7012,6 +7119,8 @@ __export(dist_exports, {
7012
7119
  buildPackageManagerCacheBinds: () => buildPackageManagerCacheBinds,
7013
7120
  cleanupOrphanedResources: () => cleanupOrphanedResources,
7014
7121
  describeDockerEndpoint: () => describeDockerEndpoint,
7122
+ pullImageWithRetry: () => pullImageWithRetry,
7123
+ realDocker: () => realDocker,
7015
7124
  resolveDockerHostOptions: () => resolveDockerHostOptions
7016
7125
  });
7017
7126
  var init_dist = __esm({
@@ -7023,6 +7132,7 @@ var init_dist = __esm({
7023
7132
  init_host();
7024
7133
  init_container2();
7025
7134
  init_container2();
7135
+ init_pull();
7026
7136
  init_provider2();
7027
7137
  init_provider3();
7028
7138
  }
@@ -9056,7 +9166,7 @@ import * as crypto4 from "node:crypto";
9056
9166
  import * as fs16 from "node:fs";
9057
9167
  import * as os10 from "node:os";
9058
9168
  import * as path17 from "node:path";
9059
- import { execFileSync as execFileSync4, spawn } from "node:child_process";
9169
+ import { execFileSync as execFileSync4, spawn as spawn2 } from "node:child_process";
9060
9170
  import { gunzipSync } from "node:zlib";
9061
9171
  function snapshotsDir() {
9062
9172
  return process.env["OLAM_SNAPSHOTS_DIR"] ?? path17.join(os10.homedir(), ".olam", "snapshots");
@@ -9477,7 +9587,7 @@ function spawnAutoCapture(worldId, olamBin = "olam") {
9477
9587
  if (!/^[a-zA-Z0-9_\-.]+$/.test(worldId))
9478
9588
  return null;
9479
9589
  try {
9480
- const child = spawn(olamBin, ["world", "snapshot", "create", worldId, "--kind", "all"], {
9590
+ const child = spawn2(olamBin, ["world", "snapshot", "create", worldId, "--kind", "all"], {
9481
9591
  detached: true,
9482
9592
  stdio: "ignore",
9483
9593
  // OLAM_INTERNAL_SNAPSHOT=1 sentinel — Phase D D1's deprecation
@@ -12966,7 +13076,7 @@ var init_state2 = __esm({
12966
13076
  });
12967
13077
 
12968
13078
  // ../core/dist/dashboard/tunnel.js
12969
- import { spawn as spawn2, execSync as execSync6 } from "node:child_process";
13079
+ import { spawn as spawn3, execSync as execSync6 } from "node:child_process";
12970
13080
  function isCloudflaredAvailable() {
12971
13081
  try {
12972
13082
  execSync6("which cloudflared", { stdio: "ignore" });
@@ -12977,7 +13087,7 @@ function isCloudflaredAvailable() {
12977
13087
  }
12978
13088
  function startTunnel(port) {
12979
13089
  return new Promise((resolve11, reject) => {
12980
- const child = spawn2("cloudflared", ["tunnel", "--url", `http://localhost:${port}`], {
13090
+ const child = spawn3("cloudflared", ["tunnel", "--url", `http://localhost:${port}`], {
12981
13091
  stdio: ["ignore", "pipe", "pipe"],
12982
13092
  detached: false
12983
13093
  });
@@ -14931,11 +15041,12 @@ import ora2 from "ora";
14931
15041
  import pc7 from "picocolors";
14932
15042
 
14933
15043
  // src/commands/bootstrap.ts
15044
+ init_dist();
14934
15045
  init_install_root();
14935
15046
  init_exit_codes();
14936
15047
  init_protocol_version();
14937
15048
  init_output();
14938
- import { spawn as spawn3, spawnSync as spawnSync6 } from "node:child_process";
15049
+ import { spawnSync as spawnSync6 } from "node:child_process";
14939
15050
  import { existsSync as existsSync24, readFileSync as readFileSync18 } from "node:fs";
14940
15051
  import { join as join29 } from "node:path";
14941
15052
  import ora from "ora";
@@ -14966,82 +15077,6 @@ function loadImageDigests(installRootDir = installRoot()) {
14966
15077
  }
14967
15078
  return parsed;
14968
15079
  }
14969
- var realDocker = {
14970
- async info() {
14971
- return spawnAsync("docker", ["info"]);
14972
- },
14973
- async pull(imageRef, opts) {
14974
- return spawnAsync("docker", ["pull", imageRef], { signal: opts?.signal });
14975
- },
14976
- async inspectLabel(imageRef, label) {
14977
- return spawnAsync("docker", [
14978
- "inspect",
14979
- imageRef,
14980
- "--format",
14981
- `{{ index .Config.Labels "${label}" }}`
14982
- ]);
14983
- },
14984
- async tag(source, target) {
14985
- return spawnAsync("docker", ["tag", source, target]);
14986
- }
14987
- };
14988
- function spawnAsync(cmd, args, opts = {}) {
14989
- return new Promise((resolve11) => {
14990
- const child = spawn3(cmd, [...args], {
14991
- stdio: ["ignore", "pipe", "pipe"],
14992
- signal: opts.signal
14993
- });
14994
- let stdout = "";
14995
- let stderr = "";
14996
- child.stdout?.on("data", (chunk) => {
14997
- stdout += chunk.toString();
14998
- });
14999
- child.stderr?.on("data", (chunk) => {
15000
- stderr += chunk.toString();
15001
- });
15002
- child.on("error", (err) => {
15003
- resolve11({ exitCode: -1, stdout, stderr: stderr + err.message });
15004
- });
15005
- child.on("close", (code) => {
15006
- resolve11({ exitCode: code ?? -1, stdout, stderr });
15007
- });
15008
- });
15009
- }
15010
- var inflightPulls = /* @__PURE__ */ new Map();
15011
- var DEFAULT_PULL_POLICY = {
15012
- perAttemptTimeoutMs: 18e4,
15013
- retryOnce: true
15014
- };
15015
- function isTransientPullFailure(result) {
15016
- const s = result.stderr.toLowerCase();
15017
- return result.exitCode !== 0 && (/timeout|connection|temporarily|429|503|tls handshake|network/.test(s) || result.exitCode === 124 || result.exitCode === -1);
15018
- }
15019
- async function pullImageWithRetry(imageRef, docker2 = realDocker, policy = DEFAULT_PULL_POLICY) {
15020
- const existing = inflightPulls.get(imageRef);
15021
- if (existing) return existing;
15022
- const promise = (async () => {
15023
- let result = await pullOnce(imageRef, docker2, policy.perAttemptTimeoutMs);
15024
- if (result.exitCode !== 0 && policy.retryOnce && isTransientPullFailure(result)) {
15025
- result = await pullOnce(imageRef, docker2, policy.perAttemptTimeoutMs);
15026
- }
15027
- return result;
15028
- })();
15029
- inflightPulls.set(imageRef, promise);
15030
- try {
15031
- return await promise;
15032
- } finally {
15033
- inflightPulls.delete(imageRef);
15034
- }
15035
- }
15036
- async function pullOnce(imageRef, docker2, timeoutMs) {
15037
- const ac = new AbortController();
15038
- const timer = setTimeout(() => ac.abort(), timeoutMs).unref?.();
15039
- try {
15040
- return await docker2.pull(imageRef, { signal: ac.signal });
15041
- } finally {
15042
- if (timer) clearTimeout(timer);
15043
- }
15044
- }
15045
15080
  var REAL_OLAM_SUBCOMMAND = (args) => {
15046
15081
  const result = spawnSync6(process.execPath, [
15047
15082
  process.argv[1] ?? "olam",
@@ -22986,6 +22986,92 @@ var removeNetwork = async (docker, worldId) => {
22986
22986
  }
22987
22987
  };
22988
22988
 
22989
+ // ../adapters/dist/docker/pull.js
22990
+ import { spawn } from "node:child_process";
22991
+ var realDocker = {
22992
+ async info() {
22993
+ return spawnAsync("docker", ["info"]);
22994
+ },
22995
+ async pull(imageRef, opts) {
22996
+ const args = ["pull"];
22997
+ if (opts?.platform)
22998
+ args.push(`--platform=${opts.platform}`);
22999
+ args.push(imageRef);
23000
+ return spawnAsync("docker", args, { signal: opts?.signal });
23001
+ },
23002
+ async inspectLabel(imageRef, label) {
23003
+ return spawnAsync("docker", [
23004
+ "inspect",
23005
+ imageRef,
23006
+ "--format",
23007
+ `{{ index .Config.Labels "${label}" }}`
23008
+ ]);
23009
+ },
23010
+ async tag(source, target) {
23011
+ return spawnAsync("docker", ["tag", source, target]);
23012
+ }
23013
+ };
23014
+ function spawnAsync(cmd, args, opts = {}) {
23015
+ return new Promise((resolve8) => {
23016
+ const child = spawn(cmd, [...args], {
23017
+ stdio: ["ignore", "pipe", "pipe"],
23018
+ signal: opts.signal
23019
+ });
23020
+ let stdout = "";
23021
+ let stderr = "";
23022
+ child.stdout?.on("data", (chunk) => {
23023
+ stdout += chunk.toString();
23024
+ });
23025
+ child.stderr?.on("data", (chunk) => {
23026
+ stderr += chunk.toString();
23027
+ });
23028
+ child.on("error", (err) => {
23029
+ resolve8({ exitCode: -1, stdout, stderr: stderr + err.message });
23030
+ });
23031
+ child.on("close", (code) => {
23032
+ resolve8({ exitCode: code ?? -1, stdout, stderr });
23033
+ });
23034
+ });
23035
+ }
23036
+ var inflightPulls = /* @__PURE__ */ new Map();
23037
+ var DEFAULT_PULL_POLICY = {
23038
+ perAttemptTimeoutMs: 18e4,
23039
+ retryOnce: true
23040
+ };
23041
+ function isTransientPullFailure(result) {
23042
+ const s = result.stderr.toLowerCase();
23043
+ return result.exitCode !== 0 && (/timeout|connection|temporarily|429|503|tls handshake|network/.test(s) || result.exitCode === 124 || result.exitCode === -1);
23044
+ }
23045
+ async function pullImageWithRetry(imageRef, docker = realDocker, policy = DEFAULT_PULL_POLICY) {
23046
+ const key = policy.platform ? `${imageRef}@@${policy.platform}` : imageRef;
23047
+ const existing = inflightPulls.get(key);
23048
+ if (existing)
23049
+ return existing;
23050
+ const promise = (async () => {
23051
+ let result = await pullOnce(imageRef, docker, policy.perAttemptTimeoutMs, policy.platform);
23052
+ if (result.exitCode !== 0 && policy.retryOnce && isTransientPullFailure(result)) {
23053
+ result = await pullOnce(imageRef, docker, policy.perAttemptTimeoutMs, policy.platform);
23054
+ }
23055
+ return result;
23056
+ })();
23057
+ inflightPulls.set(key, promise);
23058
+ try {
23059
+ return await promise;
23060
+ } finally {
23061
+ inflightPulls.delete(key);
23062
+ }
23063
+ }
23064
+ async function pullOnce(imageRef, docker, timeoutMs, platform) {
23065
+ const ac = new AbortController();
23066
+ const timer = setTimeout(() => ac.abort(), timeoutMs).unref?.();
23067
+ try {
23068
+ return await docker.pull(imageRef, { signal: ac.signal, ...platform ? { platform } : {} });
23069
+ } finally {
23070
+ if (timer)
23071
+ clearTimeout(timer);
23072
+ }
23073
+ }
23074
+
22989
23075
  // ../adapters/dist/docker/volume.js
22990
23076
  var volumeName = (worldId, serviceName) => `olam-${worldId}-${serviceName}-data`;
22991
23077
  var createVolume = async (docker, worldId, worldName, serviceName) => {
@@ -22998,6 +23084,7 @@ var createVolume = async (docker, worldId, worldName, serviceName) => {
22998
23084
  };
22999
23085
 
23000
23086
  // ../adapters/dist/docker/container.js
23087
+ var realPullImage = (imageRef, platform) => pullImageWithRetry(imageRef, void 0, platform ? { perAttemptTimeoutMs: 18e4, retryOnce: true, platform } : { perAttemptTimeoutMs: 18e4, retryOnce: true });
23001
23088
  function readAuthSecret() {
23002
23089
  const fromEnv = process.env["OLAM_AUTH_SECRET"];
23003
23090
  if (fromEnv && fromEnv.length > 0)
@@ -23048,10 +23135,15 @@ function buildPackageManagerCacheBinds(homeDir) {
23048
23135
  }
23049
23136
  return result;
23050
23137
  }
23051
- var createServiceContainer = async (docker, worldId, worldName, service, portOffset) => {
23138
+ var createServiceContainer = async (docker, worldId, worldName, service, portOffset, pullImage = realPullImage) => {
23052
23139
  const labels = olamLabels(worldId, worldName);
23053
23140
  const hostPort = service.port + portOffset;
23054
23141
  const envList = service.environment ? Object.entries(service.environment).map(([k, v]) => `${k}=${v}`) : [];
23142
+ const pullResult = await pullImage(service.image, service.platform);
23143
+ if (pullResult.exitCode !== 0) {
23144
+ const reason = pullResult.stderr.trim() || `exit ${pullResult.exitCode}`;
23145
+ throw new Error(`failed to pull ${service.image}${service.platform ? ` (platform=${service.platform})` : ""}: ${reason}`);
23146
+ }
23055
23147
  const container = await docker.createContainer({
23056
23148
  name: serviceContainerName(worldId, service.name),
23057
23149
  Image: service.image,
@@ -23413,10 +23505,18 @@ var DockerProvider = class extends ComputeProvider {
23413
23505
  };
23414
23506
  docker;
23415
23507
  dockerOptions;
23416
- constructor(dockerOptions) {
23508
+ /**
23509
+ * Injectable image-pull helper. Defaults to the real
23510
+ * `pullImageWithRetry` (docker CLI shell-out). Tests override with a
23511
+ * no-op so they don't need a real Docker daemon to exercise the
23512
+ * dockerode-mocked code paths.
23513
+ */
23514
+ pullImage;
23515
+ constructor(dockerOptions, opts) {
23417
23516
  super();
23418
23517
  this.docker = new Dockerode(dockerOptions);
23419
23518
  this.dockerOptions = dockerOptions;
23519
+ this.pullImage = opts?.pullImage;
23420
23520
  }
23421
23521
  // -----------------------------------------------------------------------
23422
23522
  // createWorld
@@ -23435,7 +23535,7 @@ var DockerProvider = class extends ComputeProvider {
23435
23535
  await createVolume(this.docker, id, name, svc.name);
23436
23536
  }
23437
23537
  for (const svc of services) {
23438
- await createServiceContainer(this.docker, id, name, svc, portOffset);
23538
+ await createServiceContainer(this.docker, id, name, svc, portOffset, this.pullImage);
23439
23539
  }
23440
23540
  const SERVICE_ENV_ALIASES = {
23441
23541
  postgres: "POSTGRESQL",
@@ -30609,7 +30709,7 @@ import * as crypto4 from "node:crypto";
30609
30709
  import * as fs17 from "node:fs";
30610
30710
  import * as os11 from "node:os";
30611
30711
  import * as path19 from "node:path";
30612
- import { execFileSync as execFileSync4, spawn } from "node:child_process";
30712
+ import { execFileSync as execFileSync4, spawn as spawn2 } from "node:child_process";
30613
30713
  import { gunzipSync } from "node:zlib";
30614
30714
  function snapshotsDir() {
30615
30715
  return process.env["OLAM_SNAPSHOTS_DIR"] ?? path19.join(os11.homedir(), ".olam", "snapshots");
@@ -30972,7 +31072,7 @@ function spawnAutoCapture(worldId, olamBin = "olam") {
30972
31072
  if (!/^[a-zA-Z0-9_\-.]+$/.test(worldId))
30973
31073
  return null;
30974
31074
  try {
30975
- const child = spawn(olamBin, ["world", "snapshot", "create", worldId, "--kind", "all"], {
31075
+ const child = spawn2(olamBin, ["world", "snapshot", "create", worldId, "--kind", "all"], {
30976
31076
  detached: true,
30977
31077
  stdio: "ignore",
30978
31078
  // OLAM_INTERNAL_SNAPSHOT=1 sentinel — Phase D D1's deprecation
@@ -33678,7 +33778,7 @@ function isDashboardRunning() {
33678
33778
  }
33679
33779
 
33680
33780
  // ../core/dist/dashboard/tunnel.js
33681
- import { spawn as spawn2, execSync as execSync6 } from "node:child_process";
33781
+ import { spawn as spawn3, execSync as execSync6 } from "node:child_process";
33682
33782
  var tunnelProcess = null;
33683
33783
  function isCloudflaredAvailable() {
33684
33784
  try {
@@ -33690,7 +33790,7 @@ function isCloudflaredAvailable() {
33690
33790
  }
33691
33791
  function startTunnel(port) {
33692
33792
  return new Promise((resolve8, reject2) => {
33693
- const child = spawn2("cloudflared", ["tunnel", "--url", `http://localhost:${port}`], {
33793
+ const child = spawn3("cloudflared", ["tunnel", "--url", `http://localhost:${port}`], {
33694
33794
  stdio: ["ignore", "pipe", "pipe"],
33695
33795
  detached: false
33696
33796
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pleri/olam-cli",
3
- "version": "0.1.111",
3
+ "version": "0.1.112",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "olam": "./bin/olam.cjs"