@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.
- package/dist/commands/bootstrap.d.ts +2 -45
- package/dist/commands/bootstrap.d.ts.map +1 -1
- package/dist/commands/bootstrap.js +8 -101
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/image-digests.json +4 -4
- package/dist/index.js +120 -85
- package/dist/mcp-server.js +107 -7
- package/package.json +1 -1
|
@@ -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;
|
|
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 {
|
|
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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"}
|
package/dist/image-digests.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"auth": "sha256:c8ebf817e09719289c7d7e37056b24adacb9d9fbc555e2540fbe88dfd400f2d9",
|
|
3
|
-
"devbox": "sha256:
|
|
4
|
-
"devbox-base": "sha256:
|
|
5
|
-
"host-cp": "sha256:
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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 {
|
|
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",
|
package/dist/mcp-server.js
CHANGED
|
@@ -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
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
33793
|
+
const child = spawn3("cloudflared", ["tunnel", "--url", `http://localhost:${port}`], {
|
|
33694
33794
|
stdio: ["ignore", "pipe", "pipe"],
|
|
33695
33795
|
detached: false
|
|
33696
33796
|
});
|