@moxt-ai/mobius 0.0.324 → 0.0.325
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/cli/handler/daemon/upgrade.d.ts.map +1 -1
- package/dist/cli/handler/daemon/upgrade.js +2 -5
- package/dist/cli/handler/daemon/upgrade.js.map +1 -1
- package/dist/cli.js +287 -280
- package/dist/cli.js.map +4 -4
- package/dist/daemon/lifecycle/manager-client.d.ts +1 -1
- package/dist/daemon/lifecycle/manager-client.d.ts.map +1 -1
- package/dist/daemon/lifecycle/manager-client.js +9 -1
- package/dist/daemon/lifecycle/manager-client.js.map +1 -1
- package/dist/daemon/lifecycle/worker.js +2 -2
- package/dist/daemon/lifecycle/worker.js.map +1 -1
- package/dist/daemon/pairing/pair-local-machine.d.ts +1 -0
- package/dist/daemon/pairing/pair-local-machine.d.ts.map +1 -1
- package/dist/daemon/pairing/pair-local-machine.js +10 -3
- package/dist/daemon/pairing/pair-local-machine.js.map +1 -1
- package/dist/runtime.js +10 -63
- package/dist/runtime.js.map +4 -4
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -780,8 +780,8 @@ var require_gt = __commonJS({
|
|
|
780
780
|
"../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gt.js"(exports, module) {
|
|
781
781
|
"use strict";
|
|
782
782
|
var compare = require_compare();
|
|
783
|
-
var
|
|
784
|
-
module.exports =
|
|
783
|
+
var gt5 = (a, b2, loose) => compare(a, b2, loose) > 0;
|
|
784
|
+
module.exports = gt5;
|
|
785
785
|
}
|
|
786
786
|
});
|
|
787
787
|
|
|
@@ -841,7 +841,7 @@ var require_cmp = __commonJS({
|
|
|
841
841
|
"use strict";
|
|
842
842
|
var eq3 = require_eq();
|
|
843
843
|
var neq = require_neq();
|
|
844
|
-
var
|
|
844
|
+
var gt5 = require_gt();
|
|
845
845
|
var gte3 = require_gte();
|
|
846
846
|
var lt3 = require_lt();
|
|
847
847
|
var lte3 = require_lte();
|
|
@@ -870,7 +870,7 @@ var require_cmp = __commonJS({
|
|
|
870
870
|
case "!=":
|
|
871
871
|
return neq(a, b2, loose);
|
|
872
872
|
case ">":
|
|
873
|
-
return
|
|
873
|
+
return gt5(a, b2, loose);
|
|
874
874
|
case ">=":
|
|
875
875
|
return gte3(a, b2, loose);
|
|
876
876
|
case "<":
|
|
@@ -1599,7 +1599,7 @@ var require_min_version = __commonJS({
|
|
|
1599
1599
|
"use strict";
|
|
1600
1600
|
var SemVer = require_semver();
|
|
1601
1601
|
var Range = require_range();
|
|
1602
|
-
var
|
|
1602
|
+
var gt5 = require_gt();
|
|
1603
1603
|
var minVersion = (range, loose) => {
|
|
1604
1604
|
range = new Range(range, loose);
|
|
1605
1605
|
let minver = new SemVer("0.0.0");
|
|
@@ -1627,7 +1627,7 @@ var require_min_version = __commonJS({
|
|
|
1627
1627
|
/* fallthrough */
|
|
1628
1628
|
case "":
|
|
1629
1629
|
case ">=":
|
|
1630
|
-
if (!setMin ||
|
|
1630
|
+
if (!setMin || gt5(compver, setMin)) {
|
|
1631
1631
|
setMin = compver;
|
|
1632
1632
|
}
|
|
1633
1633
|
break;
|
|
@@ -1639,7 +1639,7 @@ var require_min_version = __commonJS({
|
|
|
1639
1639
|
throw new Error(`Unexpected operation: ${comparator.operator}`);
|
|
1640
1640
|
}
|
|
1641
1641
|
});
|
|
1642
|
-
if (setMin && (!minver ||
|
|
1642
|
+
if (setMin && (!minver || gt5(minver, setMin))) {
|
|
1643
1643
|
minver = setMin;
|
|
1644
1644
|
}
|
|
1645
1645
|
}
|
|
@@ -1677,7 +1677,7 @@ var require_outside = __commonJS({
|
|
|
1677
1677
|
var { ANY } = Comparator;
|
|
1678
1678
|
var Range = require_range();
|
|
1679
1679
|
var satisfies3 = require_satisfies();
|
|
1680
|
-
var
|
|
1680
|
+
var gt5 = require_gt();
|
|
1681
1681
|
var lt3 = require_lt();
|
|
1682
1682
|
var lte3 = require_lte();
|
|
1683
1683
|
var gte3 = require_gte();
|
|
@@ -1687,7 +1687,7 @@ var require_outside = __commonJS({
|
|
|
1687
1687
|
let gtfn, ltefn, ltfn, comp, ecomp;
|
|
1688
1688
|
switch (hilo) {
|
|
1689
1689
|
case ">":
|
|
1690
|
-
gtfn =
|
|
1690
|
+
gtfn = gt5;
|
|
1691
1691
|
ltefn = lte3;
|
|
1692
1692
|
ltfn = lt3;
|
|
1693
1693
|
comp = ">";
|
|
@@ -1696,7 +1696,7 @@ var require_outside = __commonJS({
|
|
|
1696
1696
|
case "<":
|
|
1697
1697
|
gtfn = lt3;
|
|
1698
1698
|
ltefn = gte3;
|
|
1699
|
-
ltfn =
|
|
1699
|
+
ltfn = gt5;
|
|
1700
1700
|
comp = "<";
|
|
1701
1701
|
ecomp = "<=";
|
|
1702
1702
|
break;
|
|
@@ -1874,10 +1874,10 @@ var require_subset = __commonJS({
|
|
|
1874
1874
|
}
|
|
1875
1875
|
}
|
|
1876
1876
|
const eqSet = /* @__PURE__ */ new Set();
|
|
1877
|
-
let
|
|
1877
|
+
let gt5, lt3;
|
|
1878
1878
|
for (const c of sub) {
|
|
1879
1879
|
if (c.operator === ">" || c.operator === ">=") {
|
|
1880
|
-
|
|
1880
|
+
gt5 = higherGT(gt5, c, options);
|
|
1881
1881
|
} else if (c.operator === "<" || c.operator === "<=") {
|
|
1882
1882
|
lt3 = lowerLT(lt3, c, options);
|
|
1883
1883
|
} else {
|
|
@@ -1888,16 +1888,16 @@ var require_subset = __commonJS({
|
|
|
1888
1888
|
return null;
|
|
1889
1889
|
}
|
|
1890
1890
|
let gtltComp;
|
|
1891
|
-
if (
|
|
1892
|
-
gtltComp = compare(
|
|
1891
|
+
if (gt5 && lt3) {
|
|
1892
|
+
gtltComp = compare(gt5.semver, lt3.semver, options);
|
|
1893
1893
|
if (gtltComp > 0) {
|
|
1894
1894
|
return null;
|
|
1895
|
-
} else if (gtltComp === 0 && (
|
|
1895
|
+
} else if (gtltComp === 0 && (gt5.operator !== ">=" || lt3.operator !== "<=")) {
|
|
1896
1896
|
return null;
|
|
1897
1897
|
}
|
|
1898
1898
|
}
|
|
1899
1899
|
for (const eq3 of eqSet) {
|
|
1900
|
-
if (
|
|
1900
|
+
if (gt5 && !satisfies3(eq3, String(gt5), options)) {
|
|
1901
1901
|
return null;
|
|
1902
1902
|
}
|
|
1903
1903
|
if (lt3 && !satisfies3(eq3, String(lt3), options)) {
|
|
@@ -1913,25 +1913,25 @@ var require_subset = __commonJS({
|
|
|
1913
1913
|
let higher, lower;
|
|
1914
1914
|
let hasDomLT, hasDomGT;
|
|
1915
1915
|
let needDomLTPre = lt3 && !options.includePrerelease && lt3.semver.prerelease.length ? lt3.semver : false;
|
|
1916
|
-
let needDomGTPre =
|
|
1916
|
+
let needDomGTPre = gt5 && !options.includePrerelease && gt5.semver.prerelease.length ? gt5.semver : false;
|
|
1917
1917
|
if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt3.operator === "<" && needDomLTPre.prerelease[0] === 0) {
|
|
1918
1918
|
needDomLTPre = false;
|
|
1919
1919
|
}
|
|
1920
1920
|
for (const c of dom) {
|
|
1921
1921
|
hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
|
|
1922
1922
|
hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
|
|
1923
|
-
if (
|
|
1923
|
+
if (gt5) {
|
|
1924
1924
|
if (needDomGTPre) {
|
|
1925
1925
|
if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) {
|
|
1926
1926
|
needDomGTPre = false;
|
|
1927
1927
|
}
|
|
1928
1928
|
}
|
|
1929
1929
|
if (c.operator === ">" || c.operator === ">=") {
|
|
1930
|
-
higher = higherGT(
|
|
1931
|
-
if (higher === c && higher !==
|
|
1930
|
+
higher = higherGT(gt5, c, options);
|
|
1931
|
+
if (higher === c && higher !== gt5) {
|
|
1932
1932
|
return false;
|
|
1933
1933
|
}
|
|
1934
|
-
} else if (
|
|
1934
|
+
} else if (gt5.operator === ">=" && !c.test(gt5.semver)) {
|
|
1935
1935
|
return false;
|
|
1936
1936
|
}
|
|
1937
1937
|
}
|
|
@@ -1950,14 +1950,14 @@ var require_subset = __commonJS({
|
|
|
1950
1950
|
return false;
|
|
1951
1951
|
}
|
|
1952
1952
|
}
|
|
1953
|
-
if (!c.operator && (lt3 ||
|
|
1953
|
+
if (!c.operator && (lt3 || gt5) && gtltComp !== 0) {
|
|
1954
1954
|
return false;
|
|
1955
1955
|
}
|
|
1956
1956
|
}
|
|
1957
|
-
if (
|
|
1957
|
+
if (gt5 && hasDomLT && !lt3 && gtltComp !== 0) {
|
|
1958
1958
|
return false;
|
|
1959
1959
|
}
|
|
1960
|
-
if (lt3 && hasDomGT && !
|
|
1960
|
+
if (lt3 && hasDomGT && !gt5 && gtltComp !== 0) {
|
|
1961
1961
|
return false;
|
|
1962
1962
|
}
|
|
1963
1963
|
if (needDomGTPre || needDomLTPre) {
|
|
@@ -2006,7 +2006,7 @@ var require_semver2 = __commonJS({
|
|
|
2006
2006
|
var compareBuild = require_compare_build();
|
|
2007
2007
|
var sort = require_sort();
|
|
2008
2008
|
var rsort = require_rsort();
|
|
2009
|
-
var
|
|
2009
|
+
var gt5 = require_gt();
|
|
2010
2010
|
var lt3 = require_lt();
|
|
2011
2011
|
var eq3 = require_eq();
|
|
2012
2012
|
var neq = require_neq();
|
|
@@ -2045,7 +2045,7 @@ var require_semver2 = __commonJS({
|
|
|
2045
2045
|
compareBuild,
|
|
2046
2046
|
sort,
|
|
2047
2047
|
rsort,
|
|
2048
|
-
gt:
|
|
2048
|
+
gt: gt5,
|
|
2049
2049
|
lt: lt3,
|
|
2050
2050
|
eq: eq3,
|
|
2051
2051
|
neq,
|
|
@@ -2086,7 +2086,7 @@ var init_package = __esm({
|
|
|
2086
2086
|
"package.json"() {
|
|
2087
2087
|
package_default = {
|
|
2088
2088
|
name: "@moxt-ai/mobius",
|
|
2089
|
-
version: "0.0.
|
|
2089
|
+
version: "0.0.325",
|
|
2090
2090
|
description: "Mobius CLI for pairing and running local AI agent services.",
|
|
2091
2091
|
type: "module",
|
|
2092
2092
|
bin: {
|
|
@@ -91350,243 +91350,9 @@ var init_version_data = __esm({
|
|
|
91350
91350
|
}
|
|
91351
91351
|
});
|
|
91352
91352
|
|
|
91353
|
-
// src/storage/daemon/control-token.ts
|
|
91354
|
-
import { randomBytes } from "node:crypto";
|
|
91355
|
-
import { readFile as readFile8, writeFile as writeFile3 } from "node:fs/promises";
|
|
91356
|
-
import { join as join26 } from "node:path";
|
|
91357
|
-
function controlTokenPath(stateDirectory) {
|
|
91358
|
-
return join26(stateDirectory, "manager.token");
|
|
91359
|
-
}
|
|
91360
|
-
async function readOrCreateControlToken(stateDirectory) {
|
|
91361
|
-
const path8 = controlTokenPath(stateDirectory);
|
|
91362
|
-
try {
|
|
91363
|
-
return (await readFile8(path8, "utf8")).trim();
|
|
91364
|
-
} catch (cause) {
|
|
91365
|
-
if (!isNodeError(cause, "ENOENT")) {
|
|
91366
|
-
throw cause;
|
|
91367
|
-
}
|
|
91368
|
-
}
|
|
91369
|
-
const token = randomBytes(32).toString("base64url");
|
|
91370
|
-
try {
|
|
91371
|
-
await writeFile3(path8, `${token}
|
|
91372
|
-
`, { flag: "wx", mode: 384 });
|
|
91373
|
-
return token;
|
|
91374
|
-
} catch (cause) {
|
|
91375
|
-
if (!isNodeError(cause, "EEXIST")) {
|
|
91376
|
-
throw cause;
|
|
91377
|
-
}
|
|
91378
|
-
return (await readFile8(path8, "utf8")).trim();
|
|
91379
|
-
}
|
|
91380
|
-
}
|
|
91381
|
-
var init_control_token = __esm({
|
|
91382
|
-
"src/storage/daemon/control-token.ts"() {
|
|
91383
|
-
"use strict";
|
|
91384
|
-
init_node_error();
|
|
91385
|
-
}
|
|
91386
|
-
});
|
|
91387
|
-
|
|
91388
|
-
// src/daemon/control/local-client.ts
|
|
91389
|
-
import { createHash as createHash6 } from "node:crypto";
|
|
91390
|
-
import { createConnection } from "node:net";
|
|
91391
|
-
function controlSocketPath(stateDirectory, endpoint = "manager") {
|
|
91392
|
-
const installationHash = createHash6("sha256").update(endpoint === "manager" ? stateDirectory : `${stateDirectory}:worker`).digest("hex").slice(0, 32);
|
|
91393
|
-
return managerPlatform.controlSocketPath(installationHash);
|
|
91394
|
-
}
|
|
91395
|
-
async function readSocketMessage(socket, signal) {
|
|
91396
|
-
signal.throwIfAborted();
|
|
91397
|
-
return await new Promise((resolve21, reject2) => {
|
|
91398
|
-
let encoded = "";
|
|
91399
|
-
const finish = (error62, value) => {
|
|
91400
|
-
signal.removeEventListener("abort", abort);
|
|
91401
|
-
socket.removeAllListeners("data");
|
|
91402
|
-
socket.removeAllListeners("error");
|
|
91403
|
-
socket.removeAllListeners("end");
|
|
91404
|
-
if (error62 === void 0) {
|
|
91405
|
-
resolve21(value);
|
|
91406
|
-
} else {
|
|
91407
|
-
reject2(error62);
|
|
91408
|
-
}
|
|
91409
|
-
};
|
|
91410
|
-
const abort = () => {
|
|
91411
|
-
socket.destroy();
|
|
91412
|
-
finish(signal.reason);
|
|
91413
|
-
};
|
|
91414
|
-
socket.on("data", (chunk) => {
|
|
91415
|
-
encoded += chunk.toString("utf8");
|
|
91416
|
-
if (encoded.length > MAXIMUM_MESSAGE_BYTES) {
|
|
91417
|
-
finish(new Error("The manager message is too large"));
|
|
91418
|
-
socket.destroy();
|
|
91419
|
-
return;
|
|
91420
|
-
}
|
|
91421
|
-
const newline = encoded.indexOf("\n");
|
|
91422
|
-
if (newline >= 0) {
|
|
91423
|
-
try {
|
|
91424
|
-
finish(void 0, JSON.parse(encoded.slice(0, newline)));
|
|
91425
|
-
} catch (cause) {
|
|
91426
|
-
finish(cause);
|
|
91427
|
-
}
|
|
91428
|
-
}
|
|
91429
|
-
});
|
|
91430
|
-
socket.once("error", finish);
|
|
91431
|
-
socket.once("end", () => finish(new Error("The manager connection closed without a response")));
|
|
91432
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
91433
|
-
});
|
|
91434
|
-
}
|
|
91435
|
-
async function sendLocalRequest(stateDirectory, endpoint, command, signal) {
|
|
91436
|
-
const token = await readOrCreateControlToken(stateDirectory);
|
|
91437
|
-
const deadline = AbortSignal.any([signal, AbortSignal.timeout(CONTROL_TIMEOUT_MILLISECONDS)]);
|
|
91438
|
-
deadline.throwIfAborted();
|
|
91439
|
-
const socket = createConnection(controlSocketPath(stateDirectory, endpoint));
|
|
91440
|
-
try {
|
|
91441
|
-
await new Promise((resolve21, reject2) => {
|
|
91442
|
-
const abort = () => {
|
|
91443
|
-
socket.destroy();
|
|
91444
|
-
reject2(deadline.reason);
|
|
91445
|
-
};
|
|
91446
|
-
socket.once("connect", () => {
|
|
91447
|
-
deadline.removeEventListener("abort", abort);
|
|
91448
|
-
resolve21();
|
|
91449
|
-
});
|
|
91450
|
-
socket.once("error", reject2);
|
|
91451
|
-
deadline.addEventListener("abort", abort, { once: true });
|
|
91452
|
-
});
|
|
91453
|
-
socket.write(`${JSON.stringify({ ...command, token })}
|
|
91454
|
-
`);
|
|
91455
|
-
return await readSocketMessage(socket, deadline);
|
|
91456
|
-
} finally {
|
|
91457
|
-
socket.destroy();
|
|
91458
|
-
}
|
|
91459
|
-
}
|
|
91460
|
-
var CONTROL_TIMEOUT_MILLISECONDS, MAXIMUM_MESSAGE_BYTES, managerPlatform;
|
|
91461
|
-
var init_local_client = __esm({
|
|
91462
|
-
"src/daemon/control/local-client.ts"() {
|
|
91463
|
-
"use strict";
|
|
91464
|
-
init_control_token();
|
|
91465
|
-
init_platform();
|
|
91466
|
-
CONTROL_TIMEOUT_MILLISECONDS = 13e4;
|
|
91467
|
-
MAXIMUM_MESSAGE_BYTES = 64 * 1024;
|
|
91468
|
-
managerPlatform = platformSupportFor(process.platform);
|
|
91469
|
-
}
|
|
91470
|
-
});
|
|
91471
|
-
|
|
91472
|
-
// src/daemon/control/protocol.ts
|
|
91473
|
-
var workerLaunch, transition, daemonSwitchState, lifecycleCommand, lifecycleResponse;
|
|
91474
|
-
var init_protocol2 = __esm({
|
|
91475
|
-
"src/daemon/control/protocol.ts"() {
|
|
91476
|
-
"use strict";
|
|
91477
|
-
init_zod();
|
|
91478
|
-
workerLaunch = external_exports.object({
|
|
91479
|
-
executable: external_exports.string().min(1),
|
|
91480
|
-
entry: external_exports.string().min(1),
|
|
91481
|
-
version: external_exports.string().min(1).max(128)
|
|
91482
|
-
}).readonly();
|
|
91483
|
-
transition = {
|
|
91484
|
-
id: external_exports.string().min(1).max(256),
|
|
91485
|
-
context: external_exports.string().max(256),
|
|
91486
|
-
previous: workerLaunch,
|
|
91487
|
-
next: workerLaunch
|
|
91488
|
-
};
|
|
91489
|
-
daemonSwitchState = external_exports.discriminatedUnion("kind", [
|
|
91490
|
-
external_exports.object({ ...transition, kind: external_exports.literal("switching") }),
|
|
91491
|
-
external_exports.object({ ...transition, kind: external_exports.literal("switched") }),
|
|
91492
|
-
external_exports.object({
|
|
91493
|
-
...transition,
|
|
91494
|
-
kind: external_exports.literal("rolled-back"),
|
|
91495
|
-
code: external_exports.string(),
|
|
91496
|
-
message: external_exports.string(),
|
|
91497
|
-
stdout: external_exports.string().max(4096),
|
|
91498
|
-
stderr: external_exports.string().max(4096),
|
|
91499
|
-
retryAfter: external_exports.number().int().nonnegative()
|
|
91500
|
-
})
|
|
91501
|
-
]).readonly();
|
|
91502
|
-
lifecycleCommand = external_exports.discriminatedUnion("kind", [
|
|
91503
|
-
external_exports.object({ kind: external_exports.literal("status") }),
|
|
91504
|
-
external_exports.object({ kind: external_exports.literal("ensure"), launch: workerLaunch }),
|
|
91505
|
-
external_exports.object({ kind: external_exports.literal("stop") }),
|
|
91506
|
-
external_exports.object({
|
|
91507
|
-
kind: external_exports.literal("switch"),
|
|
91508
|
-
id: external_exports.string().min(1).max(256),
|
|
91509
|
-
context: external_exports.string().max(256),
|
|
91510
|
-
launch: workerLaunch
|
|
91511
|
-
}),
|
|
91512
|
-
external_exports.object({ kind: external_exports.literal("switch-status"), wait: external_exports.boolean() })
|
|
91513
|
-
]).readonly();
|
|
91514
|
-
lifecycleResponse = external_exports.discriminatedUnion("kind", [
|
|
91515
|
-
external_exports.object({
|
|
91516
|
-
kind: external_exports.literal("status"),
|
|
91517
|
-
protocolVersion: external_exports.literal(2),
|
|
91518
|
-
worker: external_exports.object({ pid: external_exports.number().int().positive(), version: external_exports.string() }).readonly().nullable()
|
|
91519
|
-
}),
|
|
91520
|
-
external_exports.object({ kind: external_exports.literal("switch-status"), state: daemonSwitchState.nullable() }),
|
|
91521
|
-
external_exports.object({ kind: external_exports.literal("stopped") }),
|
|
91522
|
-
external_exports.object({ kind: external_exports.literal("switching") }),
|
|
91523
|
-
external_exports.object({ kind: external_exports.literal("error"), code: external_exports.string(), message: external_exports.string() })
|
|
91524
|
-
]).readonly();
|
|
91525
|
-
}
|
|
91526
|
-
});
|
|
91527
|
-
|
|
91528
|
-
// src/daemon/control/switch-status.ts
|
|
91529
|
-
async function readSwitchStatus(directory, signal, wait = false) {
|
|
91530
|
-
const response = lifecycleResponse.parse(
|
|
91531
|
-
await sendLocalRequest(directory, "manager", { kind: "switch-status", wait }, signal)
|
|
91532
|
-
);
|
|
91533
|
-
if (response.kind !== "switch-status") {
|
|
91534
|
-
throw new Error("The manager could not return the switch status");
|
|
91535
|
-
}
|
|
91536
|
-
return response.state;
|
|
91537
|
-
}
|
|
91538
|
-
var init_switch_status = __esm({
|
|
91539
|
-
"src/daemon/control/switch-status.ts"() {
|
|
91540
|
-
"use strict";
|
|
91541
|
-
init_local_client();
|
|
91542
|
-
init_protocol2();
|
|
91543
|
-
}
|
|
91544
|
-
});
|
|
91545
|
-
|
|
91546
|
-
// src/daemon/upgrades/data.ts
|
|
91547
|
-
async function prepareVersionData(version2, signal, environment = process.env, fallbackVersion = null) {
|
|
91548
|
-
signal.throwIfAborted();
|
|
91549
|
-
const root = readStateDirectory(environment);
|
|
91550
|
-
const targetVersion = runtimeUpgradeVersionSchema.parse(version2);
|
|
91551
|
-
if (await versionDataExists(root, targetVersion, signal)) {
|
|
91552
|
-
return;
|
|
91553
|
-
}
|
|
91554
|
-
const previous = await readCurrentDataVersion(root, signal) ?? fallbackVersion;
|
|
91555
|
-
if (previous === null) {
|
|
91556
|
-
return;
|
|
91557
|
-
}
|
|
91558
|
-
const leftBehind = await copyVersionData(root, runtimeUpgradeVersionSchema.parse(previous), targetVersion, signal);
|
|
91559
|
-
for (const entry of leftBehind) {
|
|
91560
|
-
process.stderr.write(
|
|
91561
|
-
`Mobius did not carry ${entry} into version ${targetVersion}: an earlier Mobius ran with that installation as its state root.
|
|
91562
|
-
`
|
|
91563
|
-
);
|
|
91564
|
-
}
|
|
91565
|
-
}
|
|
91566
|
-
async function discardRolledBackData(version2, signal) {
|
|
91567
|
-
await discardVersionData(readStateDirectory(), runtimeUpgradeVersionSchema.parse(version2), signal);
|
|
91568
|
-
}
|
|
91569
|
-
async function recordCurrentData(version2, signal) {
|
|
91570
|
-
await writeCurrentDataVersion(readStateDirectory(), runtimeUpgradeVersionSchema.parse(version2), signal);
|
|
91571
|
-
}
|
|
91572
|
-
async function prepareUpgradeData(controlDirectory, version2, signal) {
|
|
91573
|
-
const transition2 = await readSwitchStatus(controlDirectory, signal);
|
|
91574
|
-
const previous = transition2?.kind === "switching" && transition2.next.version === version2 ? transition2.previous.version : null;
|
|
91575
|
-
await prepareVersionData(version2, signal, process.env, previous);
|
|
91576
|
-
}
|
|
91577
|
-
var init_data = __esm({
|
|
91578
|
-
"src/daemon/upgrades/data.ts"() {
|
|
91579
|
-
"use strict";
|
|
91580
|
-
init_protocol();
|
|
91581
|
-
init_version_data();
|
|
91582
|
-
init_state_directory();
|
|
91583
|
-
init_switch_status();
|
|
91584
|
-
}
|
|
91585
|
-
});
|
|
91586
|
-
|
|
91587
91353
|
// src/daemon/pairing/pair-local-machine.ts
|
|
91588
91354
|
import { hostname as hostname3 } from "node:os";
|
|
91589
|
-
import { basename as basename7, join as
|
|
91355
|
+
import { basename as basename7, join as join26, resolve as resolve16 } from "node:path";
|
|
91590
91356
|
import { fetch as fetch3 } from "undici";
|
|
91591
91357
|
function hasExactKeys2(value, expectedKeys) {
|
|
91592
91358
|
const keys = Object.keys(value);
|
|
@@ -91839,11 +91605,15 @@ async function openMobiusControlInstallation(signal, environment) {
|
|
|
91839
91605
|
);
|
|
91840
91606
|
}
|
|
91841
91607
|
async function openMobiusCliInstallation(signal, environment) {
|
|
91842
|
-
|
|
91608
|
+
const root = readStateDirectory(environment);
|
|
91609
|
+
const version2 = await readCurrentDataVersion(root, signal) ?? package_default.version;
|
|
91610
|
+
return await openMobiusVersionInstallation(version2, signal, environment);
|
|
91611
|
+
}
|
|
91612
|
+
async function openMobiusVersionInstallation(version2, signal, environment) {
|
|
91843
91613
|
return await openRuntimeInstallationStore(
|
|
91844
91614
|
{
|
|
91845
91615
|
applicationId: MOBIUS_CLI_APPLICATION_ID,
|
|
91846
|
-
stateDirectory:
|
|
91616
|
+
stateDirectory: join26(readStateDirectory(environment), "versions", version2)
|
|
91847
91617
|
},
|
|
91848
91618
|
signal
|
|
91849
91619
|
);
|
|
@@ -91882,11 +91652,11 @@ var init_pair_local_machine = __esm({
|
|
|
91882
91652
|
init_resolve_catalog_agent();
|
|
91883
91653
|
init_config();
|
|
91884
91654
|
init_runtime_installation_store();
|
|
91655
|
+
init_version_data();
|
|
91885
91656
|
init_local_files();
|
|
91886
91657
|
init_state_directory();
|
|
91887
91658
|
init_environment_proxy();
|
|
91888
91659
|
init_value_utils();
|
|
91889
|
-
init_data();
|
|
91890
91660
|
PAIRING_TIMEOUT_MILLISECONDS = 2e4;
|
|
91891
91661
|
PAIRING_CODE_PATTERN = /^[A-HJ-NP-Z2-9]{4}(?:-[A-HJ-NP-Z2-9]{4}){4}$/;
|
|
91892
91662
|
TOKEN_PATTERN = /^[a-zA-Z0-9_-]{32,256}$/;
|
|
@@ -92115,20 +91885,20 @@ var init_agents = __esm({
|
|
|
92115
91885
|
});
|
|
92116
91886
|
|
|
92117
91887
|
// src/storage/daemon/manager-lock.ts
|
|
92118
|
-
import { readFile as
|
|
92119
|
-
import { join as
|
|
91888
|
+
import { readFile as readFile8, unlink as unlink4, writeFile as writeFile3 } from "node:fs/promises";
|
|
91889
|
+
import { join as join27 } from "node:path";
|
|
92120
91890
|
async function acquireManagerLock(stateDirectory, name2 = "manager.lock") {
|
|
92121
|
-
const path8 =
|
|
91891
|
+
const path8 = join27(stateDirectory, name2);
|
|
92122
91892
|
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
92123
91893
|
try {
|
|
92124
|
-
await
|
|
91894
|
+
await writeFile3(path8, `${process.pid.toString()}
|
|
92125
91895
|
`, { flag: "wx", mode: 384 });
|
|
92126
91896
|
return async () => await unlink4(path8).catch(() => void 0);
|
|
92127
91897
|
} catch (cause) {
|
|
92128
91898
|
if (!isNodeError(cause, "EEXIST")) {
|
|
92129
91899
|
throw cause;
|
|
92130
91900
|
}
|
|
92131
|
-
const encoded = await
|
|
91901
|
+
const encoded = await readFile8(path8, "utf8").catch(() => "");
|
|
92132
91902
|
const pid = Number(encoded.trim());
|
|
92133
91903
|
if (Number.isSafeInteger(pid) && pid > 1) {
|
|
92134
91904
|
try {
|
|
@@ -92147,7 +91917,7 @@ async function acquireManagerLock(stateDirectory, name2 = "manager.lock") {
|
|
|
92147
91917
|
}
|
|
92148
91918
|
async function managerLockExists(stateDirectory) {
|
|
92149
91919
|
try {
|
|
92150
|
-
await
|
|
91920
|
+
await readFile8(join27(stateDirectory, "manager.lock"), "utf8");
|
|
92151
91921
|
return true;
|
|
92152
91922
|
} catch (cause) {
|
|
92153
91923
|
if (isNodeError(cause, "ENOENT")) {
|
|
@@ -92163,6 +91933,125 @@ var init_manager_lock = __esm({
|
|
|
92163
91933
|
}
|
|
92164
91934
|
});
|
|
92165
91935
|
|
|
91936
|
+
// src/storage/daemon/control-token.ts
|
|
91937
|
+
import { randomBytes } from "node:crypto";
|
|
91938
|
+
import { readFile as readFile9, writeFile as writeFile4 } from "node:fs/promises";
|
|
91939
|
+
import { join as join28 } from "node:path";
|
|
91940
|
+
function controlTokenPath(stateDirectory) {
|
|
91941
|
+
return join28(stateDirectory, "manager.token");
|
|
91942
|
+
}
|
|
91943
|
+
async function readOrCreateControlToken(stateDirectory) {
|
|
91944
|
+
const path8 = controlTokenPath(stateDirectory);
|
|
91945
|
+
try {
|
|
91946
|
+
return (await readFile9(path8, "utf8")).trim();
|
|
91947
|
+
} catch (cause) {
|
|
91948
|
+
if (!isNodeError(cause, "ENOENT")) {
|
|
91949
|
+
throw cause;
|
|
91950
|
+
}
|
|
91951
|
+
}
|
|
91952
|
+
const token = randomBytes(32).toString("base64url");
|
|
91953
|
+
try {
|
|
91954
|
+
await writeFile4(path8, `${token}
|
|
91955
|
+
`, { flag: "wx", mode: 384 });
|
|
91956
|
+
return token;
|
|
91957
|
+
} catch (cause) {
|
|
91958
|
+
if (!isNodeError(cause, "EEXIST")) {
|
|
91959
|
+
throw cause;
|
|
91960
|
+
}
|
|
91961
|
+
return (await readFile9(path8, "utf8")).trim();
|
|
91962
|
+
}
|
|
91963
|
+
}
|
|
91964
|
+
var init_control_token = __esm({
|
|
91965
|
+
"src/storage/daemon/control-token.ts"() {
|
|
91966
|
+
"use strict";
|
|
91967
|
+
init_node_error();
|
|
91968
|
+
}
|
|
91969
|
+
});
|
|
91970
|
+
|
|
91971
|
+
// src/daemon/control/local-client.ts
|
|
91972
|
+
import { createHash as createHash6 } from "node:crypto";
|
|
91973
|
+
import { createConnection } from "node:net";
|
|
91974
|
+
function controlSocketPath(stateDirectory, endpoint = "manager") {
|
|
91975
|
+
const installationHash = createHash6("sha256").update(endpoint === "manager" ? stateDirectory : `${stateDirectory}:worker`).digest("hex").slice(0, 32);
|
|
91976
|
+
return managerPlatform.controlSocketPath(installationHash);
|
|
91977
|
+
}
|
|
91978
|
+
async function readSocketMessage(socket, signal) {
|
|
91979
|
+
signal.throwIfAborted();
|
|
91980
|
+
return await new Promise((resolve21, reject2) => {
|
|
91981
|
+
let encoded = "";
|
|
91982
|
+
const finish = (error62, value) => {
|
|
91983
|
+
signal.removeEventListener("abort", abort);
|
|
91984
|
+
socket.removeAllListeners("data");
|
|
91985
|
+
socket.removeAllListeners("error");
|
|
91986
|
+
socket.removeAllListeners("end");
|
|
91987
|
+
if (error62 === void 0) {
|
|
91988
|
+
resolve21(value);
|
|
91989
|
+
} else {
|
|
91990
|
+
reject2(error62);
|
|
91991
|
+
}
|
|
91992
|
+
};
|
|
91993
|
+
const abort = () => {
|
|
91994
|
+
socket.destroy();
|
|
91995
|
+
finish(signal.reason);
|
|
91996
|
+
};
|
|
91997
|
+
socket.on("data", (chunk) => {
|
|
91998
|
+
encoded += chunk.toString("utf8");
|
|
91999
|
+
if (encoded.length > MAXIMUM_MESSAGE_BYTES) {
|
|
92000
|
+
finish(new Error("The manager message is too large"));
|
|
92001
|
+
socket.destroy();
|
|
92002
|
+
return;
|
|
92003
|
+
}
|
|
92004
|
+
const newline = encoded.indexOf("\n");
|
|
92005
|
+
if (newline >= 0) {
|
|
92006
|
+
try {
|
|
92007
|
+
finish(void 0, JSON.parse(encoded.slice(0, newline)));
|
|
92008
|
+
} catch (cause) {
|
|
92009
|
+
finish(cause);
|
|
92010
|
+
}
|
|
92011
|
+
}
|
|
92012
|
+
});
|
|
92013
|
+
socket.once("error", finish);
|
|
92014
|
+
socket.once("end", () => finish(new Error("The manager connection closed without a response")));
|
|
92015
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
92016
|
+
});
|
|
92017
|
+
}
|
|
92018
|
+
async function sendLocalRequest(stateDirectory, endpoint, command, signal) {
|
|
92019
|
+
const token = await readOrCreateControlToken(stateDirectory);
|
|
92020
|
+
const deadline = AbortSignal.any([signal, AbortSignal.timeout(CONTROL_TIMEOUT_MILLISECONDS)]);
|
|
92021
|
+
deadline.throwIfAborted();
|
|
92022
|
+
const socket = createConnection(controlSocketPath(stateDirectory, endpoint));
|
|
92023
|
+
try {
|
|
92024
|
+
await new Promise((resolve21, reject2) => {
|
|
92025
|
+
const abort = () => {
|
|
92026
|
+
socket.destroy();
|
|
92027
|
+
reject2(deadline.reason);
|
|
92028
|
+
};
|
|
92029
|
+
socket.once("connect", () => {
|
|
92030
|
+
deadline.removeEventListener("abort", abort);
|
|
92031
|
+
resolve21();
|
|
92032
|
+
});
|
|
92033
|
+
socket.once("error", reject2);
|
|
92034
|
+
deadline.addEventListener("abort", abort, { once: true });
|
|
92035
|
+
});
|
|
92036
|
+
socket.write(`${JSON.stringify({ ...command, token })}
|
|
92037
|
+
`);
|
|
92038
|
+
return await readSocketMessage(socket, deadline);
|
|
92039
|
+
} finally {
|
|
92040
|
+
socket.destroy();
|
|
92041
|
+
}
|
|
92042
|
+
}
|
|
92043
|
+
var CONTROL_TIMEOUT_MILLISECONDS, MAXIMUM_MESSAGE_BYTES, managerPlatform;
|
|
92044
|
+
var init_local_client = __esm({
|
|
92045
|
+
"src/daemon/control/local-client.ts"() {
|
|
92046
|
+
"use strict";
|
|
92047
|
+
init_control_token();
|
|
92048
|
+
init_platform();
|
|
92049
|
+
CONTROL_TIMEOUT_MILLISECONDS = 13e4;
|
|
92050
|
+
MAXIMUM_MESSAGE_BYTES = 64 * 1024;
|
|
92051
|
+
managerPlatform = platformSupportFor(process.platform);
|
|
92052
|
+
}
|
|
92053
|
+
});
|
|
92054
|
+
|
|
92166
92055
|
// src/daemon/control/local-server.ts
|
|
92167
92056
|
import { createServer } from "node:net";
|
|
92168
92057
|
async function serveLocalControl(stateDirectory, endpoint, signal, handle, onListening = () => void 0, onResponse = () => void 0) {
|
|
@@ -92233,6 +92122,121 @@ var init_local_server = __esm({
|
|
|
92233
92122
|
}
|
|
92234
92123
|
});
|
|
92235
92124
|
|
|
92125
|
+
// src/daemon/control/protocol.ts
|
|
92126
|
+
var workerLaunch, transition, daemonSwitchState, lifecycleCommand, lifecycleResponse;
|
|
92127
|
+
var init_protocol2 = __esm({
|
|
92128
|
+
"src/daemon/control/protocol.ts"() {
|
|
92129
|
+
"use strict";
|
|
92130
|
+
init_zod();
|
|
92131
|
+
workerLaunch = external_exports.object({
|
|
92132
|
+
executable: external_exports.string().min(1),
|
|
92133
|
+
entry: external_exports.string().min(1),
|
|
92134
|
+
version: external_exports.string().min(1).max(128)
|
|
92135
|
+
}).readonly();
|
|
92136
|
+
transition = {
|
|
92137
|
+
id: external_exports.string().min(1).max(256),
|
|
92138
|
+
context: external_exports.string().max(256),
|
|
92139
|
+
previous: workerLaunch,
|
|
92140
|
+
next: workerLaunch
|
|
92141
|
+
};
|
|
92142
|
+
daemonSwitchState = external_exports.discriminatedUnion("kind", [
|
|
92143
|
+
external_exports.object({ ...transition, kind: external_exports.literal("switching") }),
|
|
92144
|
+
external_exports.object({ ...transition, kind: external_exports.literal("switched") }),
|
|
92145
|
+
external_exports.object({
|
|
92146
|
+
...transition,
|
|
92147
|
+
kind: external_exports.literal("rolled-back"),
|
|
92148
|
+
code: external_exports.string(),
|
|
92149
|
+
message: external_exports.string(),
|
|
92150
|
+
stdout: external_exports.string().max(4096),
|
|
92151
|
+
stderr: external_exports.string().max(4096),
|
|
92152
|
+
retryAfter: external_exports.number().int().nonnegative()
|
|
92153
|
+
})
|
|
92154
|
+
]).readonly();
|
|
92155
|
+
lifecycleCommand = external_exports.discriminatedUnion("kind", [
|
|
92156
|
+
external_exports.object({ kind: external_exports.literal("status") }),
|
|
92157
|
+
external_exports.object({ kind: external_exports.literal("ensure"), launch: workerLaunch }),
|
|
92158
|
+
external_exports.object({ kind: external_exports.literal("stop") }),
|
|
92159
|
+
external_exports.object({
|
|
92160
|
+
kind: external_exports.literal("switch"),
|
|
92161
|
+
id: external_exports.string().min(1).max(256),
|
|
92162
|
+
context: external_exports.string().max(256),
|
|
92163
|
+
launch: workerLaunch
|
|
92164
|
+
}),
|
|
92165
|
+
external_exports.object({ kind: external_exports.literal("switch-status"), wait: external_exports.boolean() })
|
|
92166
|
+
]).readonly();
|
|
92167
|
+
lifecycleResponse = external_exports.discriminatedUnion("kind", [
|
|
92168
|
+
external_exports.object({
|
|
92169
|
+
kind: external_exports.literal("status"),
|
|
92170
|
+
protocolVersion: external_exports.literal(2),
|
|
92171
|
+
worker: external_exports.object({ pid: external_exports.number().int().positive(), version: external_exports.string() }).readonly().nullable()
|
|
92172
|
+
}),
|
|
92173
|
+
external_exports.object({ kind: external_exports.literal("switch-status"), state: daemonSwitchState.nullable() }),
|
|
92174
|
+
external_exports.object({ kind: external_exports.literal("stopped") }),
|
|
92175
|
+
external_exports.object({ kind: external_exports.literal("switching") }),
|
|
92176
|
+
external_exports.object({ kind: external_exports.literal("error"), code: external_exports.string(), message: external_exports.string() })
|
|
92177
|
+
]).readonly();
|
|
92178
|
+
}
|
|
92179
|
+
});
|
|
92180
|
+
|
|
92181
|
+
// src/daemon/control/switch-status.ts
|
|
92182
|
+
async function readSwitchStatus(directory, signal, wait = false) {
|
|
92183
|
+
const response = lifecycleResponse.parse(
|
|
92184
|
+
await sendLocalRequest(directory, "manager", { kind: "switch-status", wait }, signal)
|
|
92185
|
+
);
|
|
92186
|
+
if (response.kind !== "switch-status") {
|
|
92187
|
+
throw new Error("The manager could not return the switch status");
|
|
92188
|
+
}
|
|
92189
|
+
return response.state;
|
|
92190
|
+
}
|
|
92191
|
+
var init_switch_status = __esm({
|
|
92192
|
+
"src/daemon/control/switch-status.ts"() {
|
|
92193
|
+
"use strict";
|
|
92194
|
+
init_local_client();
|
|
92195
|
+
init_protocol2();
|
|
92196
|
+
}
|
|
92197
|
+
});
|
|
92198
|
+
|
|
92199
|
+
// src/daemon/upgrades/data.ts
|
|
92200
|
+
async function prepareVersionData(version2, signal, environment = process.env, fallbackVersion = null) {
|
|
92201
|
+
signal.throwIfAborted();
|
|
92202
|
+
const root = readStateDirectory(environment);
|
|
92203
|
+
const targetVersion = runtimeUpgradeVersionSchema.parse(version2);
|
|
92204
|
+
if (await versionDataExists(root, targetVersion, signal)) {
|
|
92205
|
+
return;
|
|
92206
|
+
}
|
|
92207
|
+
const previous = await readCurrentDataVersion(root, signal) ?? fallbackVersion;
|
|
92208
|
+
if (previous === null) {
|
|
92209
|
+
return;
|
|
92210
|
+
}
|
|
92211
|
+
const leftBehind = await copyVersionData(root, runtimeUpgradeVersionSchema.parse(previous), targetVersion, signal);
|
|
92212
|
+
for (const entry of leftBehind) {
|
|
92213
|
+
process.stderr.write(
|
|
92214
|
+
`Mobius did not carry ${entry} into version ${targetVersion}: an earlier Mobius ran with that installation as its state root.
|
|
92215
|
+
`
|
|
92216
|
+
);
|
|
92217
|
+
}
|
|
92218
|
+
}
|
|
92219
|
+
async function discardRolledBackData(version2, signal) {
|
|
92220
|
+
await discardVersionData(readStateDirectory(), runtimeUpgradeVersionSchema.parse(version2), signal);
|
|
92221
|
+
}
|
|
92222
|
+
async function recordCurrentData(version2, signal) {
|
|
92223
|
+
await writeCurrentDataVersion(readStateDirectory(), runtimeUpgradeVersionSchema.parse(version2), signal);
|
|
92224
|
+
}
|
|
92225
|
+
async function prepareUpgradeData(controlDirectory, version2, signal) {
|
|
92226
|
+
const transition2 = await readSwitchStatus(controlDirectory, signal);
|
|
92227
|
+
const previous = transition2?.kind === "switching" && transition2.next.version === version2 ? transition2.previous.version : null;
|
|
92228
|
+
await prepareVersionData(version2, signal, process.env, previous);
|
|
92229
|
+
}
|
|
92230
|
+
var init_data = __esm({
|
|
92231
|
+
"src/daemon/upgrades/data.ts"() {
|
|
92232
|
+
"use strict";
|
|
92233
|
+
init_protocol();
|
|
92234
|
+
init_version_data();
|
|
92235
|
+
init_state_directory();
|
|
92236
|
+
init_switch_status();
|
|
92237
|
+
}
|
|
92238
|
+
});
|
|
92239
|
+
|
|
92236
92240
|
// src/storage/logs/bounded-log.ts
|
|
92237
92241
|
import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync4, readFileSync as readFileSync9, renameSync as renameSync2, statSync as statSync5, writeFileSync as writeFileSync2 } from "node:fs";
|
|
92238
92242
|
import { join as join29 } from "node:path";
|
|
@@ -93166,7 +93170,9 @@ async function waitForManagerExit(stateDirectory, signal) {
|
|
|
93166
93170
|
}
|
|
93167
93171
|
throw deadline.reason;
|
|
93168
93172
|
}
|
|
93169
|
-
async function ensureWorkingProcess(stateDirectory,
|
|
93173
|
+
async function ensureWorkingProcess(stateDirectory, cliVersion, signal) {
|
|
93174
|
+
const current = await readCurrentDataVersion(readStateDirectory(), signal);
|
|
93175
|
+
const version2 = current !== null && (0, import_semver2.gt)(current, cliVersion) ? current : cliVersion;
|
|
93170
93176
|
const launch = await prepareDaemonReleaseVersion(version2, signal);
|
|
93171
93177
|
const deadline = AbortSignal.any([signal, AbortSignal.timeout(CONTROL_TIMEOUT_MILLISECONDS)]);
|
|
93172
93178
|
await ensureManager(stateDirectory, launch, deadline);
|
|
@@ -93179,6 +93185,7 @@ async function ensureWorkingProcess(stateDirectory, version2, signal) {
|
|
|
93179
93185
|
if (response.kind !== "status" || response.worker?.version !== version2) {
|
|
93180
93186
|
throw new Error("The working daemon did not start");
|
|
93181
93187
|
}
|
|
93188
|
+
return version2;
|
|
93182
93189
|
}
|
|
93183
93190
|
async function readWorkingProcessVersion(stateDirectory, signal) {
|
|
93184
93191
|
try {
|
|
@@ -93254,10 +93261,14 @@ async function stopManager(stateDirectory, signal) {
|
|
|
93254
93261
|
throw cause;
|
|
93255
93262
|
}
|
|
93256
93263
|
}
|
|
93264
|
+
var import_semver2;
|
|
93257
93265
|
var init_manager_client = __esm({
|
|
93258
93266
|
"src/daemon/lifecycle/manager-client.ts"() {
|
|
93259
93267
|
"use strict";
|
|
93268
|
+
import_semver2 = __toESM(require_semver2(), 1);
|
|
93260
93269
|
init_manager_lock();
|
|
93270
|
+
init_version_data();
|
|
93271
|
+
init_state_directory();
|
|
93261
93272
|
init_node_error();
|
|
93262
93273
|
init_local_client();
|
|
93263
93274
|
init_protocol2();
|
|
@@ -102152,7 +102163,7 @@ async function runWorker(version2, signal) {
|
|
|
102152
102163
|
async function runWorkerRuntime(version2, combined, shutdown, rejectionGuard) {
|
|
102153
102164
|
const control = await openMobiusControlInstallation(combined, process.env);
|
|
102154
102165
|
await prepareUpgradeData(control.stateDirectory, version2, combined);
|
|
102155
|
-
const installation = await
|
|
102166
|
+
const installation = await openMobiusVersionInstallation(version2, combined, process.env);
|
|
102156
102167
|
const deadline = AbortSignal.any([combined, AbortSignal.timeout(15e3)]);
|
|
102157
102168
|
let release = null;
|
|
102158
102169
|
while (release === null) {
|
|
@@ -102324,11 +102335,7 @@ function registerUpgradeCommand(program2, context) {
|
|
|
102324
102335
|
program2.command("upgrade").description("start the daemon if needed and upgrade it to the newest npm release").action(async () => {
|
|
102325
102336
|
const signal = context.shutdownSignal;
|
|
102326
102337
|
const control = await openMobiusControlInstallation(signal, process.env);
|
|
102327
|
-
const
|
|
102328
|
-
const current = running ?? context.version;
|
|
102329
|
-
if (running === null) {
|
|
102330
|
-
await ensureWorkingProcess(control.stateDirectory, context.version, signal);
|
|
102331
|
-
}
|
|
102338
|
+
const current = await readWorkingProcessVersion(control.stateDirectory, signal) ?? await ensureWorkingProcess(control.stateDirectory, context.version, signal);
|
|
102332
102339
|
await reloadDaemon(control.stateDirectory, signal);
|
|
102333
102340
|
const attempt = await requestDaemonReleaseUpgrade(control.stateDirectory, current, signal);
|
|
102334
102341
|
if (attempt.kind === "current") {
|
|
@@ -102804,9 +102811,9 @@ var init_cli = __esm({
|
|
|
102804
102811
|
});
|
|
102805
102812
|
|
|
102806
102813
|
// src/cli/entrypoint.ts
|
|
102807
|
-
var
|
|
102814
|
+
var import_semver3 = __toESM(require_semver2(), 1);
|
|
102808
102815
|
init_package();
|
|
102809
|
-
if (!(0,
|
|
102816
|
+
if (!(0, import_semver3.satisfies)(process.versions.node, package_default.engines.node)) {
|
|
102810
102817
|
process.stderr.write(
|
|
102811
102818
|
`Mobius requires Node.js ${package_default.engines.node}; found ${process.versions.node} at ${process.execPath}. Update Node.js and reinstall Mobius.
|
|
102812
102819
|
`
|