@intentic/machine 1.304.0 → 1.306.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -52
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -5
- package/dist/app.js.map +1 -1
- package/dist/commands.d.ts +1 -9
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +41 -27
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon-base.d.ts +4 -3
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/auto-prepare.js +3 -3
- package/dist/device/auto-prepare.js.map +1 -1
- package/dist/device/commands.d.ts +2 -1
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +48 -30
- package/dist/device/commands.js.map +1 -1
- package/dist/device/config.d.ts +17 -12
- package/dist/device/config.d.ts.map +1 -1
- package/dist/device/config.js +29 -17
- package/dist/device/config.js.map +1 -1
- package/dist/device/connection.d.ts +3 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +7 -3
- package/dist/device/connection.js.map +1 -1
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/policy.d.ts +4 -4
- package/dist/device/policy.d.ts.map +1 -1
- package/dist/device/policy.js.map +1 -1
- package/dist/device/router.d.ts +76 -3
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +12 -4
- package/dist/device/router.js.map +1 -1
- package/dist/device/tools/agent.d.ts +3 -3
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +25 -11
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/apps.d.ts +6 -6
- package/dist/device/tools/apps.d.ts.map +1 -1
- package/dist/device/tools/apps.js.map +1 -1
- package/dist/device/tools/browser.d.ts +9 -9
- package/dist/device/tools/browser.d.ts.map +1 -1
- package/dist/device/tools/browser.js.map +1 -1
- package/dist/device/tools/describe.d.ts +5 -3
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +19 -2
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/device.d.ts +2 -2
- package/dist/device/tools/device.d.ts.map +1 -1
- package/dist/device/tools/device.js.map +1 -1
- package/dist/device/tools/files.d.ts +5 -5
- package/dist/device/tools/files.d.ts.map +1 -1
- package/dist/device/tools/files.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +16 -11
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +36 -54
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +2 -24
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/device/tools/shell.js +2 -53
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/environments/auto-upgrade.d.ts +20 -0
- package/dist/environments/auto-upgrade.d.ts.map +1 -0
- package/dist/environments/auto-upgrade.js +77 -0
- package/dist/environments/auto-upgrade.js.map +1 -0
- package/dist/environments/children.d.ts +27 -0
- package/dist/environments/children.d.ts.map +1 -0
- package/dist/environments/children.js +106 -0
- package/dist/environments/children.js.map +1 -0
- package/dist/environments/commands.d.ts +12 -0
- package/dist/environments/commands.d.ts.map +1 -0
- package/dist/environments/commands.js +102 -0
- package/dist/environments/commands.js.map +1 -0
- package/dist/environments/crossing.d.ts +31 -0
- package/dist/environments/crossing.d.ts.map +1 -0
- package/dist/environments/crossing.js +64 -0
- package/dist/environments/crossing.js.map +1 -0
- package/dist/environments/machine-upgrade.d.ts +26 -0
- package/dist/environments/machine-upgrade.d.ts.map +1 -0
- package/dist/environments/machine-upgrade.js +153 -0
- package/dist/environments/machine-upgrade.js.map +1 -0
- package/dist/environments/machine.d.ts +29 -0
- package/dist/environments/machine.d.ts.map +1 -0
- package/dist/environments/machine.js +88 -0
- package/dist/environments/machine.js.map +1 -0
- package/dist/install.d.ts +4 -6
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +35 -47
- package/dist/install.js.map +1 -1
- package/dist/installed.d.ts +1 -1
- package/dist/installed.d.ts.map +1 -1
- package/dist/installed.js +3 -8
- package/dist/installed.js.map +1 -1
- package/dist/release.d.ts +27 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +132 -0
- package/dist/release.js.map +1 -0
- package/dist/resident.d.ts +12 -6
- package/dist/resident.d.ts.map +1 -1
- package/dist/resident.js +163 -84
- package/dist/resident.js.map +1 -1
- package/dist/status.d.ts +3 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +21 -7
- package/dist/status.js.map +1 -1
- package/dist/supervision.d.ts +11 -0
- package/dist/supervision.d.ts.map +1 -0
- package/dist/supervision.js +98 -0
- package/dist/supervision.js.map +1 -0
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +7 -5
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +0 -1
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +0 -1
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/mirror.d.ts +1 -2
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +2 -3
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen.d.ts +0 -8
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +12 -80
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/report.d.ts +2 -0
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +4 -2
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/residue.d.ts.map +1 -1
- package/dist/sync/residue.js +8 -0
- package/dist/sync/residue.js.map +1 -1
- package/dist/upgrade.d.ts +7 -16
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +93 -116
- package/dist/upgrade.js.map +1 -1
- package/dist/wsl.d.ts +6 -0
- package/dist/wsl.d.ts.map +1 -1
- package/dist/wsl.js +23 -2
- package/dist/wsl.js.map +1 -1
- package/package.json +12 -12
- package/dist/device/testing.d.ts +0 -10
- package/dist/device/testing.d.ts.map +0 -1
- package/dist/device/testing.js +0 -51
- package/dist/device/testing.js.map +0 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { LOG_ROTATE_BYTES, ROTATE_LOG_SH } from "@intentic/local-agent";
|
|
3
|
+
import { MACHINE_AUTOSTART } from "../autostart.js";
|
|
4
|
+
import { listDistros } from "../wsl.js";
|
|
5
|
+
import { crossEnv, NO_AGENT_EXIT } from "./crossing.js";
|
|
6
|
+
import { SUPERVISOR_ENV, WINDOWS_SUPERVISOR } from "./machine.js";
|
|
7
|
+
const CHILD_SH = [
|
|
8
|
+
`a="$HOME/.intentic/machine/bin/intentic-machine"; [ -x "$a" ] || exit ${NO_AGENT_EXIT}`,
|
|
9
|
+
`log="$HOME/.intentic/machine/machine.log"; mkdir -p "$HOME/.intentic/machine"`,
|
|
10
|
+
`rotate() { ${ROTATE_LOG_SH}; }; rotate "$log" "$1"`,
|
|
11
|
+
`PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin" exec "$a" ${MACHINE_AUTOSTART.foregroundArgs.join(" ")} >>"$log" 2>&1`,
|
|
12
|
+
].join("\n");
|
|
13
|
+
export const childArgv = (distro) => ({
|
|
14
|
+
command: "wsl.exe",
|
|
15
|
+
args: ["-d", distro, "--cd", "~", "--exec", "sh", "-c", CHILD_SH, "sh", String(LOG_ROTATE_BYTES)],
|
|
16
|
+
});
|
|
17
|
+
const STOPPED_EXITS = new Set([129, 130, 143]);
|
|
18
|
+
const RESTART_LADDER_MS = [1_000, 5_000, 15_000, 60_000, 300_000];
|
|
19
|
+
const HEALTHY_RUN_MS = 10 * 60_000;
|
|
20
|
+
export const childVerdict = (code, ranForMs, failures) => {
|
|
21
|
+
if (code === 0) {
|
|
22
|
+
return { kind: "drop", why: "its agent has nothing left to serve" };
|
|
23
|
+
}
|
|
24
|
+
if (code === NO_AGENT_EXIT) {
|
|
25
|
+
return { kind: "drop", why: "no agent is installed there any more" };
|
|
26
|
+
}
|
|
27
|
+
if (code !== null && STOPPED_EXITS.has(code)) {
|
|
28
|
+
return { kind: "restart", delayMs: RESTART_LADDER_MS[0] ?? 1_000, failures: 0 };
|
|
29
|
+
}
|
|
30
|
+
const next = ranForMs >= HEALTHY_RUN_MS ? 1 : failures + 1;
|
|
31
|
+
return { kind: "restart", delayMs: RESTART_LADDER_MS[Math.min(next, RESTART_LADDER_MS.length) - 1] ?? 300_000, failures: next };
|
|
32
|
+
};
|
|
33
|
+
const realSpawner = {
|
|
34
|
+
spawn: (distro) => {
|
|
35
|
+
const { command, args } = childArgv(distro);
|
|
36
|
+
return spawn(command, [...args], { windowsHide: true, stdio: "ignore", env: crossEnv({ [SUPERVISOR_ENV]: WINDOWS_SUPERVISOR }, "u") });
|
|
37
|
+
},
|
|
38
|
+
distros: async () => await listDistros(),
|
|
39
|
+
now: Date.now,
|
|
40
|
+
};
|
|
41
|
+
export const superviseChildren = (log, drop, spawner = realSpawner) => {
|
|
42
|
+
const held = new Map();
|
|
43
|
+
let stopping = false;
|
|
44
|
+
const start = (distro, entry) => {
|
|
45
|
+
entry.timer = undefined;
|
|
46
|
+
entry.startedAt = spawner.now();
|
|
47
|
+
const child = spawner.spawn(distro);
|
|
48
|
+
entry.process = child;
|
|
49
|
+
child.once("error", (error) => log(`${distro}: could not start its agent through wsl.exe (${error.message})`));
|
|
50
|
+
child.once("exit", (code) => void exited(distro, entry, child, code));
|
|
51
|
+
};
|
|
52
|
+
const exited = async (distro, entry, child, code) => {
|
|
53
|
+
if (held.get(distro) !== entry || entry.process !== child || stopping) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
entry.process = undefined;
|
|
57
|
+
const listed = code === 0 || code === NO_AGENT_EXIT ? undefined : await spawner.distros();
|
|
58
|
+
const verdict = listed !== undefined && !listed.includes(distro)
|
|
59
|
+
? { kind: "drop", why: "WSL no longer has that distro" }
|
|
60
|
+
: childVerdict(code, spawner.now() - entry.startedAt, entry.failures);
|
|
61
|
+
if (verdict.kind === "drop") {
|
|
62
|
+
held.delete(distro);
|
|
63
|
+
log(`${distro}: no longer kept running from here, ${verdict.why}.`);
|
|
64
|
+
await drop(distro, verdict.why).catch((error) => log(`${distro}: could not be taken off the list (${String(error)})`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
entry.failures = verdict.failures;
|
|
68
|
+
log(`${distro}: its agent stopped (exit ${code ?? "by signal"}); starting it again in ${Math.round(verdict.delayMs / 1000)}s.`);
|
|
69
|
+
entry.timer = setTimeout(() => {
|
|
70
|
+
if (held.get(distro) === entry && !stopping) {
|
|
71
|
+
start(distro, entry);
|
|
72
|
+
}
|
|
73
|
+
}, verdict.delayMs);
|
|
74
|
+
};
|
|
75
|
+
const release = (distro, entry) => {
|
|
76
|
+
clearTimeout(entry.timer);
|
|
77
|
+
held.delete(distro);
|
|
78
|
+
entry.process?.kill();
|
|
79
|
+
};
|
|
80
|
+
return {
|
|
81
|
+
reconcile: (wanted) => {
|
|
82
|
+
for (const [distro, entry] of held) {
|
|
83
|
+
if (!wanted.includes(distro)) {
|
|
84
|
+
release(distro, entry);
|
|
85
|
+
log(`${distro}: let go, it is no longer attached to this PC's Windows side.`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const distro of wanted) {
|
|
89
|
+
if (!held.has(distro)) {
|
|
90
|
+
const entry = { process: undefined, startedAt: 0, failures: 0, timer: undefined };
|
|
91
|
+
held.set(distro, entry);
|
|
92
|
+
log(`${distro}: keeping its agent running from here.`);
|
|
93
|
+
start(distro, entry);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
held: () => [...held.keys()],
|
|
98
|
+
stopAll: () => {
|
|
99
|
+
stopping = true;
|
|
100
|
+
for (const [distro, entry] of held) {
|
|
101
|
+
release(distro, entry);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=children.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"children.js","sourceRoot":"","sources":["../../src/environments/children.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Log } from "@intentic/local-agent";
|
|
2
|
+
import { type CommandContext } from "@stricli/core";
|
|
3
|
+
import { type MachineConfig } from "./machine.js";
|
|
4
|
+
export declare const environmentRoutes: import("@stricli/core").RouteMap<CommandContext>;
|
|
5
|
+
export declare const adoptRunningDistros: (log: Log) => Promise<void>;
|
|
6
|
+
export interface UpdatesFlags {
|
|
7
|
+
readonly agent?: "on" | "off";
|
|
8
|
+
readonly sandboxes?: "on" | "off";
|
|
9
|
+
}
|
|
10
|
+
export declare const withSwitches: (config: MachineConfig, flags: UpdatesFlags) => MachineConfig;
|
|
11
|
+
export declare const updates: import("@stricli/core").Command<CommandContext>;
|
|
12
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/environments/commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAA+B,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAc,KAAK,aAAa,EAAgF,MAAM,cAAc,CAAC;AA8B5I,eAAO,MAAM,iBAAiB,kDAG5B,CAAC;AAMH,eAAO,MAAM,mBAAmB,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAiBhE,CAAC;AASF,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CACrC;AAGD,eAAO,MAAM,YAAY,WAAY,aAAa,SAAS,YAAY,KAAG,aAKzE,CAAC;AAQF,eAAO,MAAM,OAAO,iDAqClB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { buildCommand, buildRouteMap } from "@stricli/core";
|
|
4
|
+
import { ensureResident } from "../resident.js";
|
|
5
|
+
import { listDistros } from "../wsl.js";
|
|
6
|
+
import { childrenOf, readMachineConfig, runOnWindows, updateMachineConfig, windowsRoot, withChild } from "./machine.js";
|
|
7
|
+
const exec = promisify(execFile);
|
|
8
|
+
const attach = buildCommand({
|
|
9
|
+
docs: { brief: "Keep a WSL distro's agent running from this PC's Windows side (the distro's own agent asks for this)" },
|
|
10
|
+
parameters: {
|
|
11
|
+
positional: { kind: "tuple", parameters: [{ brief: "The distro, as `wsl -l` names it", parse: String, placeholder: "distro" }] },
|
|
12
|
+
},
|
|
13
|
+
async func(_flags, distro) {
|
|
14
|
+
const out = (message) => void this.process.stdout.write(`${message}\n`);
|
|
15
|
+
if (process.platform !== "win32") {
|
|
16
|
+
throw new Error("only the Windows side of a PC keeps its distros running.");
|
|
17
|
+
}
|
|
18
|
+
const listed = await listDistros();
|
|
19
|
+
if (listed === undefined) {
|
|
20
|
+
throw new Error("wsl.exe could not be asked which distros this PC has.");
|
|
21
|
+
}
|
|
22
|
+
if (!listed.includes(distro)) {
|
|
23
|
+
throw new Error(`WSL has no distro called "${distro}"; it lists ${listed.join(", ") || "none"}.`);
|
|
24
|
+
}
|
|
25
|
+
const before = childrenOf(await readMachineConfig());
|
|
26
|
+
await updateMachineConfig((config) => withChild(config, distro));
|
|
27
|
+
await ensureResident(out);
|
|
28
|
+
out(before.includes(distro) ? `${distro} is already kept running from here.` : `${distro}'s agent is kept running from here now.`);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
export const environmentRoutes = buildRouteMap({
|
|
32
|
+
routes: { attach },
|
|
33
|
+
docs: { brief: "How the environments of this PC (Windows and its WSL distros) run as one machine" },
|
|
34
|
+
});
|
|
35
|
+
const HAS_RESIDENT_SH = `[ -x "$HOME/.intentic/machine/bin/intentic-machine" ] && [ -s "$HOME/.intentic/machine/machine.pid" ]`;
|
|
36
|
+
export const adoptRunningDistros = async (log) => {
|
|
37
|
+
if (process.platform !== "win32") {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const held = childrenOf(await readMachineConfig());
|
|
41
|
+
const running = ((await listDistros({ running: true })) ?? []).filter((distro) => !held.includes(distro));
|
|
42
|
+
for (const distro of running) {
|
|
43
|
+
const has = await exec("wsl.exe", ["-d", distro, "--exec", "sh", "-c", HAS_RESIDENT_SH], { timeout: 30_000, windowsHide: true })
|
|
44
|
+
.then(() => true)
|
|
45
|
+
.catch(() => false);
|
|
46
|
+
if (has) {
|
|
47
|
+
await updateMachineConfig((config) => withChild(config, distro));
|
|
48
|
+
log(`${distro} runs an agent too: it is kept running from this side now.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const onOff = (value) => {
|
|
53
|
+
if (value === "on" || value === "off") {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`"${value}" is not on or off.`);
|
|
57
|
+
};
|
|
58
|
+
export const withSwitches = (config, flags) => {
|
|
59
|
+
const { agentUpdates, sandboxUpdates, ...rest } = config;
|
|
60
|
+
const agent = flags.agent === undefined ? agentUpdates : flags.agent === "on" ? undefined : false;
|
|
61
|
+
const sandboxes = flags.sandboxes === undefined ? sandboxUpdates : flags.sandboxes === "on" ? undefined : false;
|
|
62
|
+
return { ...rest, ...(agent === undefined ? {} : { agentUpdates: agent }), ...(sandboxes === undefined ? {} : { sandboxUpdates: sandboxes }) };
|
|
63
|
+
};
|
|
64
|
+
const updatesArgs = (flags) => [
|
|
65
|
+
...(flags.agent === undefined ? [] : ["--agent", flags.agent]),
|
|
66
|
+
...(flags.sandboxes === undefined ? [] : ["--sandboxes", flags.sandboxes]),
|
|
67
|
+
];
|
|
68
|
+
export const updates = buildCommand({
|
|
69
|
+
docs: { brief: "What this machine updates by itself: its agent (the whole PC at once) and the next image of each sandbox" },
|
|
70
|
+
parameters: {
|
|
71
|
+
flags: {
|
|
72
|
+
agent: { kind: "parsed", parse: onOff, optional: true, brief: "Update the agent on this PC by itself when a release is published (on by default)" },
|
|
73
|
+
sandboxes: {
|
|
74
|
+
kind: "parsed",
|
|
75
|
+
parse: onOff,
|
|
76
|
+
optional: true,
|
|
77
|
+
brief: "Download each sandbox's next update in the background, so applying it is a short restart (on by default)",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
async func(flags) {
|
|
82
|
+
const out = (message) => void this.process.stdout.write(`${message}\n`);
|
|
83
|
+
const root = await windowsRoot();
|
|
84
|
+
if (root !== undefined) {
|
|
85
|
+
if (runOnWindows(root, ["updates", ...updatesArgs(flags)], { inherit: true }).status !== 0) {
|
|
86
|
+
throw new Error("the Windows side's agent did not take that; run it there: intentic-machine updates");
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (flags.agent !== undefined || flags.sandboxes !== undefined) {
|
|
91
|
+
await updateMachineConfig((config) => withSwitches(config, flags));
|
|
92
|
+
}
|
|
93
|
+
const config = await readMachineConfig();
|
|
94
|
+
out(config.agentUpdates === false
|
|
95
|
+
? "Agent: updated only when asked (`intentic-machine upgrade`, or Update on the sandbox's Devices tab). Turn it back on with --agent on."
|
|
96
|
+
: "Agent: updated by itself when a release is published, the whole PC at once. Turn it off with --agent off.");
|
|
97
|
+
out(config.sandboxUpdates === false
|
|
98
|
+
? "Sandboxes: each update downloads when you take it, a wait of minutes. Turn background downloads back on with --sandboxes on."
|
|
99
|
+
: "Sandboxes: each one's next update is downloaded in the background, so applying it is a restart of about half a minute. Turn it off with --sandboxes off.");
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/environments/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const POWERSHELL_FLAGS: string[];
|
|
2
|
+
export type CommandTarget = {
|
|
3
|
+
readonly kind: "native";
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "wsl";
|
|
6
|
+
readonly distro: string | undefined;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "windows";
|
|
9
|
+
};
|
|
10
|
+
export declare const targetOf: (raw: string | undefined) => CommandTarget;
|
|
11
|
+
export interface Interpreter {
|
|
12
|
+
readonly command: string;
|
|
13
|
+
readonly args: readonly string[];
|
|
14
|
+
readonly cwd: string | undefined;
|
|
15
|
+
readonly env: NodeJS.ProcessEnv;
|
|
16
|
+
}
|
|
17
|
+
export declare const WINDOWS_POWERSHELL: string[];
|
|
18
|
+
export declare const crossInterpreter: (target: Exclude<CommandTarget, {
|
|
19
|
+
kind: "native";
|
|
20
|
+
}>, script: string, cwd: string | undefined, { platform, inWsl, exists }: {
|
|
21
|
+
platform: NodeJS.Platform;
|
|
22
|
+
inWsl: boolean;
|
|
23
|
+
exists: (path: string) => boolean;
|
|
24
|
+
}) => Interpreter;
|
|
25
|
+
export declare const crossEnv: (vars: Readonly<Record<string, string>>, direction: "u" | "w", base?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
|
|
26
|
+
export declare const NO_AGENT_EXIT = 64;
|
|
27
|
+
export declare const agentInDistro: (distro: string, args: readonly string[]) => {
|
|
28
|
+
readonly command: string;
|
|
29
|
+
readonly args: readonly string[];
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=crossing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossing.d.ts","sourceRoot":"","sources":["../../src/environments/crossing.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,UAA8E,CAAC;AAG5G,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAGvJ,eAAO,MAAM,QAAQ,QAAS,MAAM,GAAG,SAAS,KAAG,aAclD,CAAC;AAEF,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACnC;AAGD,eAAO,MAAM,kBAAkB,UAI9B,CAAC;AA0CF,eAAO,MAAM,gBAAgB,WACjB,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,UAC1C,MAAM,OACT,MAAM,GAAG,SAAS,+BACM;IAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,KAC9G,WAA8I,CAAC;AAIlJ,eAAO,MAAM,QAAQ,SAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,aAAa,GAAG,GAAG,GAAG,SAAQ,MAAM,CAAC,UAAU,KAAiB,MAAM,CAAC,UAGrI,CAAC;AAGF,eAAO,MAAM,aAAa,KAAK,CAAC;AAKhC,eAAO,MAAM,aAAa,WAAY,MAAM,QAAQ,SAAS,MAAM,EAAE,KAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAGlI,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { wslPathOf } from "@intentic/sandbox-contract";
|
|
2
|
+
export const POWERSHELL_FLAGS = ["-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass", "-Command"];
|
|
3
|
+
export const targetOf = (raw) => {
|
|
4
|
+
if (raw === undefined || raw === "") {
|
|
5
|
+
return { kind: "native" };
|
|
6
|
+
}
|
|
7
|
+
if (raw === "windows") {
|
|
8
|
+
return { kind: "windows" };
|
|
9
|
+
}
|
|
10
|
+
if (raw === "wsl") {
|
|
11
|
+
return { kind: "wsl", distro: undefined };
|
|
12
|
+
}
|
|
13
|
+
if (raw.startsWith("wsl:") && raw.length > "wsl:".length) {
|
|
14
|
+
return { kind: "wsl", distro: raw.slice("wsl:".length) };
|
|
15
|
+
}
|
|
16
|
+
throw new Error(`Unknown \`in\` "${raw}": use "wsl", "wsl:<distro>" or "windows".`);
|
|
17
|
+
};
|
|
18
|
+
export const WINDOWS_POWERSHELL = [
|
|
19
|
+
"/mnt/c/Program Files/PowerShell/7/pwsh.exe",
|
|
20
|
+
"/mnt/c/Program Files/PowerShell/7-preview/pwsh.exe",
|
|
21
|
+
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe",
|
|
22
|
+
];
|
|
23
|
+
const wslInterpreter = (distro, script, cwd, platform) => {
|
|
24
|
+
if (platform !== "win32") {
|
|
25
|
+
throw new Error(`Only a Windows PC can run a command in WSL; this device runs ${platform}.`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
command: "wsl.exe",
|
|
29
|
+
args: [...(distro === undefined ? [] : ["-d", distro]), "--cd", cwd ?? "~", "--exec", "sh", "-lc", script],
|
|
30
|
+
cwd: undefined,
|
|
31
|
+
env: { ...process.env, WSL_UTF8: "1" },
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const windowsInterpreter = (script, cwd, inWsl, exists) => {
|
|
35
|
+
if (!inWsl) {
|
|
36
|
+
throw new Error("Only a WSL distro can run a command on Windows; this device is not one.");
|
|
37
|
+
}
|
|
38
|
+
const command = WINDOWS_POWERSHELL.find(exists);
|
|
39
|
+
if (command === undefined) {
|
|
40
|
+
throw new Error("No PowerShell is reachable from this distro: Windows interop is off, or C: is not mounted at /mnt/c.");
|
|
41
|
+
}
|
|
42
|
+
const start = cwd === undefined ? undefined : cwd.startsWith("/mnt/") ? cwd : wslPathOf(cwd);
|
|
43
|
+
if (cwd !== undefined && start === undefined) {
|
|
44
|
+
throw new Error(`A Windows working directory is a drive path (C:\\Users\\you) or its /mnt form, not "${cwd}".`);
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
command,
|
|
48
|
+
args: [...POWERSHELL_FLAGS, start === undefined ? `Set-Location -LiteralPath $env:USERPROFILE\n${script}` : script],
|
|
49
|
+
cwd: start,
|
|
50
|
+
env: process.env,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export const crossInterpreter = (target, script, cwd, { platform, inWsl, exists }) => (target.kind === "wsl" ? wslInterpreter(target.distro, script, cwd, platform) : windowsInterpreter(script, cwd, inWsl, exists));
|
|
54
|
+
export const crossEnv = (vars, direction, base = process.env) => {
|
|
55
|
+
const existing = (base["WSLENV"] ?? "").split(":").filter((entry) => entry !== "" && !Object.hasOwn(vars, entry.split("/")[0] ?? ""));
|
|
56
|
+
return { ...base, ...vars, WSLENV: [...existing, ...Object.keys(vars).map((name) => `${name}/${direction}`)].join(":") };
|
|
57
|
+
};
|
|
58
|
+
export const NO_AGENT_EXIT = 64;
|
|
59
|
+
const AGENT_IN_DISTRO_SH = `a="$HOME/.intentic/machine/bin/intentic-machine"; [ -x "$a" ] || exit ${NO_AGENT_EXIT}; exec "$a" "$@"`;
|
|
60
|
+
export const agentInDistro = (distro, args) => ({
|
|
61
|
+
command: "wsl.exe",
|
|
62
|
+
args: ["-d", distro, "--cd", "~", "--exec", "sh", "-c", AGENT_IN_DISTRO_SH, "sh", ...args],
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=crossing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossing.js","sourceRoot":"","sources":["../../src/environments/crossing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Log } from "@intentic/local-agent";
|
|
2
|
+
import { type UpgradeOutcome } from "../upgrade.js";
|
|
3
|
+
export declare const UPGRADE_ENV = "INTENTIC_MACHINE_UPGRADE";
|
|
4
|
+
export declare const machineTarget: (published: string | undefined, installed: readonly (string | undefined)[]) => string | undefined;
|
|
5
|
+
export declare const upgradeHere: (target: string, force: boolean, log: Log) => Promise<UpgradeOutcome>;
|
|
6
|
+
export declare const installedIn: (distro: string) => Promise<string | undefined>;
|
|
7
|
+
export interface MachineIo {
|
|
8
|
+
readonly leg: string | undefined;
|
|
9
|
+
readonly windowsRoot: () => Promise<string | undefined>;
|
|
10
|
+
readonly delegate: (agent: string, args: readonly string[]) => number;
|
|
11
|
+
readonly children: () => Promise<readonly string[]>;
|
|
12
|
+
readonly published: () => Promise<string | undefined>;
|
|
13
|
+
readonly installedHere: () => string | undefined;
|
|
14
|
+
readonly installedIn: (distro: string) => Promise<string | undefined>;
|
|
15
|
+
readonly upgradeIn: (distro: string, target: string) => Promise<boolean>;
|
|
16
|
+
readonly upgradeHere: (target: string) => Promise<UpgradeOutcome>;
|
|
17
|
+
readonly recorded: (failedTarget: string | undefined) => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface MachineUpgradeAsk {
|
|
20
|
+
readonly force: boolean;
|
|
21
|
+
readonly level: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const upgradeMachine: (io: MachineIo, ask: MachineUpgradeAsk, log: Log) => Promise<boolean>;
|
|
24
|
+
export declare const realMachineIo: (ask: MachineUpgradeAsk, log: Log) => MachineIo;
|
|
25
|
+
export declare const siblingVersions: () => Promise<readonly (string | undefined)[]>;
|
|
26
|
+
//# sourceMappingURL=machine-upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-upgrade.d.ts","sourceRoot":"","sources":["../../src/environments/machine-upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,GAAG,EAAkB,MAAM,uBAAuB,CAAC;AAM/E,OAAO,EAA+B,KAAK,cAAc,EAAiC,MAAM,eAAe,CAAC;AAUhH,eAAO,MAAM,WAAW,6BAA6B,CAAC;AAGtD,eAAO,MAAM,aAAa,cAAe,MAAM,GAAG,SAAS,aAAa,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,KAAG,MAAM,GAAG,SAGe,CAAC;AAiCnI,eAAO,MAAM,WAAW,WAAkB,MAAM,SAAS,OAAO,OAAO,GAAG,KAAG,OAAO,CAAC,cAAc,CAQ7F,CAAC;AAGP,eAAO,MAAM,WAAW,WAAkB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAI5E,CAAC;AAkCF,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAGD,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CAC3B;AAkCD,eAAO,MAAM,cAAc,OAAc,SAAS,OAAO,iBAAiB,OAAO,GAAG,KAAG,OAAO,CAAC,OAAO,CAYrG,CAAC;AAcF,eAAO,MAAM,aAAa,QAAS,iBAAiB,OAAO,GAAG,KAAG,SAW/D,CAAC;AAGH,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAO/E,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { claimPidFile, releasePidFile } from "@intentic/local-agent";
|
|
5
|
+
import { DEV_VERSION, isNewer } from "@intentic/sandbox-contract";
|
|
6
|
+
import { binDir, upgradeLockPath } from "../config.js";
|
|
7
|
+
import { installedBuild } from "../installed.js";
|
|
8
|
+
import { publishedVersion } from "../release.js";
|
|
9
|
+
import { readResident, restartResident } from "../supervision.js";
|
|
10
|
+
import { realUpgradeExec, runUpgrade, upgradeLanded, upgradeMessage } from "../upgrade.js";
|
|
11
|
+
import { MACHINE_VERSION } from "../version.js";
|
|
12
|
+
import { agentInDistro, crossEnv, NO_AGENT_EXIT } from "./crossing.js";
|
|
13
|
+
import { childrenOf, readMachineConfig, runOnWindows, updateMachineConfig, windowsRoot } from "./machine.js";
|
|
14
|
+
const exec = promisify(execFile);
|
|
15
|
+
export const UPGRADE_ENV = "INTENTIC_MACHINE_UPGRADE";
|
|
16
|
+
export const machineTarget = (published, installed) => [published, ...installed]
|
|
17
|
+
.filter((version) => version !== undefined && version !== DEV_VERSION)
|
|
18
|
+
.reduce((best, version) => (best === undefined || isNewer(version, best) ? version : best), undefined);
|
|
19
|
+
const LOCK_WAIT_MS = 15 * 60_000;
|
|
20
|
+
const LOCK_POLL_MS = 2_000;
|
|
21
|
+
const withUpgradeLock = async (log, run) => {
|
|
22
|
+
const deadline = Date.now() + LOCK_WAIT_MS;
|
|
23
|
+
let said = false;
|
|
24
|
+
for (;;) {
|
|
25
|
+
const claim = await claimPidFile(upgradeLockPath, binDir, { pid: process.pid });
|
|
26
|
+
if (claim.claimed) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (Date.now() > deadline) {
|
|
30
|
+
return { kind: "failed", reason: `another upgrade (pid ${claim.holder.pid}) is still running here.` };
|
|
31
|
+
}
|
|
32
|
+
if (!said) {
|
|
33
|
+
said = true;
|
|
34
|
+
log(`Waiting for the upgrade already running here (pid ${claim.holder.pid})…`);
|
|
35
|
+
}
|
|
36
|
+
await sleep(LOCK_POLL_MS);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return await run();
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
await releasePidFile(upgradeLockPath, process.pid);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export const upgradeHere = async (target, force, log) => await withUpgradeLock(log, async () => {
|
|
46
|
+
const running = async () => (await readResident())?.build;
|
|
47
|
+
const restart = async () => {
|
|
48
|
+
await restartResident(() => undefined);
|
|
49
|
+
return await running();
|
|
50
|
+
};
|
|
51
|
+
return await runUpgrade(realUpgradeExec(restart, running, log), target, installedBuild() ?? MACHINE_VERSION, force, log);
|
|
52
|
+
});
|
|
53
|
+
export const installedIn = async (distro) => {
|
|
54
|
+
const { command, args } = agentInDistro(distro, ["version"]);
|
|
55
|
+
const answer = await exec(command, [...args], { timeout: 60_000, windowsHide: true }).catch(() => undefined);
|
|
56
|
+
return /^\d+\.\d+\.\d+$/.exec(answer?.stdout.trim() ?? "")?.[0];
|
|
57
|
+
};
|
|
58
|
+
const upgradeIn = async (distro, target, force, log) => await new Promise((resolve) => {
|
|
59
|
+
const { command, args } = agentInDistro(distro, ["upgrade", ...(force ? ["--force"] : [])]);
|
|
60
|
+
const child = spawn(command, [...args], {
|
|
61
|
+
windowsHide: true,
|
|
62
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
63
|
+
env: crossEnv({ [UPGRADE_ENV]: target }, "u"),
|
|
64
|
+
});
|
|
65
|
+
const relay = (chunk) => {
|
|
66
|
+
for (const line of chunk
|
|
67
|
+
.toString("utf8")
|
|
68
|
+
.split(/\r?\n/)
|
|
69
|
+
.filter((one) => one.trim() !== "")) {
|
|
70
|
+
log(` [${distro}] ${line}`);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
child.stdout.on("data", relay);
|
|
74
|
+
child.stderr.on("data", relay);
|
|
75
|
+
child.once("error", (error) => {
|
|
76
|
+
log(` [${distro}] could not be reached through wsl.exe (${error.message}).`);
|
|
77
|
+
resolve(false);
|
|
78
|
+
});
|
|
79
|
+
child.once("close", (code) => {
|
|
80
|
+
if (code === NO_AGENT_EXIT) {
|
|
81
|
+
log(` [${distro}] has no agent installed any more; nothing to upgrade there.`);
|
|
82
|
+
}
|
|
83
|
+
resolve(code === 0 || code === NO_AGENT_EXIT);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
const askArgs = (ask) => [...(ask.force ? ["--force"] : []), ...(ask.level ? ["--level"] : [])];
|
|
87
|
+
const upgradeFromRoot = async (io, ask, log) => {
|
|
88
|
+
const children = await io.children();
|
|
89
|
+
const [published, ...theirs] = await Promise.all([ask.level ? Promise.resolve(undefined) : io.published(), ...children.map(io.installedIn)]);
|
|
90
|
+
const target = machineTarget(published, [io.installedHere(), ...theirs]);
|
|
91
|
+
if (target === undefined) {
|
|
92
|
+
log(ask.level
|
|
93
|
+
? "Nothing to level: no side of this machine runs a released agent."
|
|
94
|
+
: "Upgrade didn't happen: couldn't reach the release channel, nothing was changed.");
|
|
95
|
+
return ask.level;
|
|
96
|
+
}
|
|
97
|
+
if (children.length > 0) {
|
|
98
|
+
log(`Bringing this PC to ${target}: ${[...children, "this side"].join(", ")}.`);
|
|
99
|
+
}
|
|
100
|
+
const legs = [];
|
|
101
|
+
for (const child of children) {
|
|
102
|
+
legs.push(await io.upgradeIn(child, target));
|
|
103
|
+
}
|
|
104
|
+
const here = await io.upgradeHere(target);
|
|
105
|
+
log(upgradeMessage(here));
|
|
106
|
+
const landed = legs.every(Boolean) && upgradeLanded(here);
|
|
107
|
+
await io.recorded(landed ? undefined : target);
|
|
108
|
+
return landed;
|
|
109
|
+
};
|
|
110
|
+
export const upgradeMachine = async (io, ask, log) => {
|
|
111
|
+
if (io.leg !== undefined) {
|
|
112
|
+
const outcome = await io.upgradeHere(io.leg);
|
|
113
|
+
log(upgradeMessage(outcome));
|
|
114
|
+
return upgradeLanded(outcome);
|
|
115
|
+
}
|
|
116
|
+
const root = await io.windowsRoot();
|
|
117
|
+
if (root !== undefined) {
|
|
118
|
+
log("This is a WSL distro: the whole PC is upgraded from its Windows side.");
|
|
119
|
+
return io.delegate(root, ["upgrade", ...askArgs(ask)]) === 0;
|
|
120
|
+
}
|
|
121
|
+
return await upgradeFromRoot(io, ask, log);
|
|
122
|
+
};
|
|
123
|
+
const recordFailure = async (failedTarget) => {
|
|
124
|
+
await updateMachineConfig((config) => {
|
|
125
|
+
const { upgradeFailure: previous, ...rest } = config;
|
|
126
|
+
if (failedTarget === undefined) {
|
|
127
|
+
return rest;
|
|
128
|
+
}
|
|
129
|
+
const count = previous?.target === failedTarget ? previous.count + 1 : 1;
|
|
130
|
+
return { ...rest, upgradeFailure: { target: failedTarget, count, at: Date.now() } };
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
export const realMachineIo = (ask, log) => ({
|
|
134
|
+
leg: process.env[UPGRADE_ENV],
|
|
135
|
+
windowsRoot,
|
|
136
|
+
delegate: (agent, args) => runOnWindows(agent, args, { inherit: true }).status,
|
|
137
|
+
children: async () => (process.platform === "win32" ? childrenOf(await readMachineConfig()) : []),
|
|
138
|
+
published: publishedVersion,
|
|
139
|
+
installedHere: installedBuild,
|
|
140
|
+
installedIn,
|
|
141
|
+
upgradeIn: async (distro, target) => await upgradeIn(distro, target, ask.force, log),
|
|
142
|
+
upgradeHere: async (target) => await upgradeHere(target, ask.force, log),
|
|
143
|
+
recorded: recordFailure,
|
|
144
|
+
});
|
|
145
|
+
export const siblingVersions = async () => {
|
|
146
|
+
const root = await windowsRoot();
|
|
147
|
+
if (root !== undefined) {
|
|
148
|
+
const answer = runOnWindows(root, ["version"]);
|
|
149
|
+
return [answer.status === 0 ? /^\d+\.\d+\.\d+$/.exec(answer.output)?.[0] : undefined];
|
|
150
|
+
}
|
|
151
|
+
return process.platform === "win32" ? await Promise.all(childrenOf(await readMachineConfig()).map(installedIn)) : [];
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=machine-upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine-upgrade.js","sourceRoot":"","sources":["../../src/environments/machine-upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const SUPERVISOR_ENV = "INTENTIC_MACHINE_SUPERVISOR";
|
|
2
|
+
export declare const WINDOWS_SUPERVISOR = "windows";
|
|
3
|
+
export declare const supervisedByWindows: (env?: NodeJS.ProcessEnv) => boolean;
|
|
4
|
+
export interface MachineConfig {
|
|
5
|
+
readonly children?: readonly string[];
|
|
6
|
+
readonly agentUpdates?: boolean;
|
|
7
|
+
readonly sandboxUpdates?: boolean;
|
|
8
|
+
readonly upgradeFailure?: {
|
|
9
|
+
readonly target: string;
|
|
10
|
+
readonly count: number;
|
|
11
|
+
readonly at: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare const readMachineConfig: () => Promise<MachineConfig>;
|
|
15
|
+
export declare const updateMachineConfig: (mutate: (config: MachineConfig) => MachineConfig) => Promise<MachineConfig>;
|
|
16
|
+
export declare const childrenOf: (config: MachineConfig) => readonly string[];
|
|
17
|
+
export declare const withChild: (config: MachineConfig, distro: string) => MachineConfig;
|
|
18
|
+
export declare const withoutChild: (config: MachineConfig, distro: string) => MachineConfig;
|
|
19
|
+
export declare const windowsRoot: () => Promise<string | undefined>;
|
|
20
|
+
export declare const runOnWindows: (agent: string, args: readonly string[], { vars, inherit }?: {
|
|
21
|
+
readonly vars?: Readonly<Record<string, string>>;
|
|
22
|
+
readonly inherit?: boolean;
|
|
23
|
+
}) => {
|
|
24
|
+
readonly status: number;
|
|
25
|
+
readonly output: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const attachArgs: (distro: string) => readonly string[];
|
|
28
|
+
export declare const attachToWindows: (log: (message: string) => void) => Promise<boolean>;
|
|
29
|
+
//# sourceMappingURL=machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../src/environments/machine.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,cAAc,gCAAgC,CAAC;AAC5D,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,mBAAmB,SAAS,MAAM,CAAC,UAAU,KAAiB,OAAqD,CAAC;AAGjI,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACtG;AAGD,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,aAAa,CAQ/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAkB,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,KAAG,OAAO,CAAC,aAAa,CAIjH,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,SAAS,MAAM,EAA2B,CAAC;AAE9F,eAAO,MAAM,SAAS,WAAY,aAAa,UAAU,MAAM,KAAG,aACoD,CAAC;AAEvH,eAAO,MAAM,YAAY,WAAY,aAAa,UAAU,MAAM,KAAG,aAIpE,CAAC;AA4BF,eAAO,MAAM,WAAW,QAAO,OAAO,CAAC,MAAM,GAAG,SAAS,CAShD,CAAC;AAGV,eAAO,MAAM,YAAY,UACd,MAAM,QACP,SAAS,MAAM,EAAE,sBACS;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KACjH;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CASpD,CAAC;AAEF,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,SAAS,MAAM,EAAuC,CAAC;AAGnG,eAAO,MAAM,eAAe,QAAe,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAG,OAAO,CAAC,OAAO,CAWrF,CAAC"}
|