@intentic/machine 1.331.0 → 1.332.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 +56 -4
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/autostart/autostart.js +1 -1
- package/dist/autostart/autostart.js.map +1 -1
- package/dist/cli-ui.d.ts +10 -0
- package/dist/cli-ui.d.ts.map +1 -0
- package/dist/cli-ui.js +62 -0
- package/dist/cli-ui.js.map +1 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +61 -26
- package/dist/commands.js.map +1 -1
- package/dist/daemon-base.d.ts +1 -0
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js +21 -18
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/audit.d.ts.map +1 -1
- package/dist/device/audit.js.map +1 -1
- package/dist/device/commands.d.ts +8 -6
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +64 -42
- package/dist/device/commands.js.map +1 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +2 -3
- package/dist/device/connection.js.map +1 -1
- package/dist/device/grant.d.ts +7 -0
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/loopback-catch.d.ts.map +1 -1
- package/dist/device/loopback-catch.js +1 -1
- package/dist/device/loopback-catch.js.map +1 -1
- package/dist/device/mcp.d.ts.map +1 -1
- package/dist/device/mcp.js +19 -0
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/policy.d.ts.map +1 -1
- package/dist/device/policy.js +3 -5
- package/dist/device/policy.js.map +1 -1
- package/dist/device/router.d.ts +7 -0
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +17 -5
- package/dist/device/router.js.map +1 -1
- package/dist/device/sandbox-cli.d.ts +12 -1
- package/dist/device/sandbox-cli.d.ts.map +1 -1
- package/dist/device/sandbox-cli.js +90 -18
- package/dist/device/sandbox-cli.js.map +1 -1
- package/dist/device/sandbox-rounds/keeper.d.ts +28 -1
- package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/keeper.js +115 -18
- package/dist/device/sandbox-rounds/keeper.js.map +1 -1
- package/dist/device/sandbox-rounds/sleep.d.ts +52 -0
- package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -0
- package/dist/device/sandbox-rounds/sleep.js +115 -0
- package/dist/device/sandbox-rounds/sleep.js.map +1 -0
- package/dist/device/tools/agent.js +1 -1
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/android.d.ts.map +1 -1
- package/dist/device/tools/android.js +7 -62
- package/dist/device/tools/android.js.map +1 -1
- package/dist/device/tools/describe.d.ts +6 -0
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +30 -9
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/ic-binary.d.ts +7 -0
- package/dist/device/tools/ic-binary.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.js +16 -8
- package/dist/device/tools/ic-binary.js.map +1 -1
- package/dist/device/tools/logs/logs.d.ts +30 -0
- package/dist/device/tools/logs/logs.d.ts.map +1 -0
- package/dist/device/tools/logs/logs.js +147 -0
- package/dist/device/tools/logs/logs.js.map +1 -0
- package/dist/device/tools/programs/artifacts.d.ts.map +1 -1
- package/dist/device/tools/programs/artifacts.js +5 -10
- package/dist/device/tools/programs/artifacts.js.map +1 -1
- package/dist/device/tools/programs/{tunnel.d.ts → device-tunnel.d.ts} +1 -1
- package/dist/device/tools/programs/device-tunnel.d.ts.map +1 -0
- package/dist/device/tools/programs/{tunnel.js → device-tunnel.js} +1 -1
- package/dist/device/tools/programs/device-tunnel.js.map +1 -0
- package/dist/device/tools/programs/isolated.d.ts +0 -1
- package/dist/device/tools/programs/isolated.d.ts.map +1 -1
- package/dist/device/tools/programs/isolated.js +8 -10
- package/dist/device/tools/programs/isolated.js.map +1 -1
- package/dist/device/tools/programs/programs.d.ts.map +1 -1
- package/dist/device/tools/programs/programs.js +87 -35
- package/dist/device/tools/programs/programs.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +11 -10
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +3 -4
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/device/tools/shell.js +24 -86
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/engine-env.d.ts +15 -0
- package/dist/engine-env.d.ts.map +1 -0
- package/dist/engine-env.js +80 -0
- package/dist/engine-env.js.map +1 -0
- package/dist/environments/commands.d.ts +7 -1
- package/dist/environments/commands.d.ts.map +1 -1
- package/dist/environments/commands.js +37 -31
- package/dist/environments/commands.js.map +1 -1
- package/dist/environments/machine-upgrade.d.ts +8 -1
- package/dist/environments/machine-upgrade.d.ts.map +1 -1
- package/dist/environments/machine-upgrade.js +35 -26
- package/dist/environments/machine-upgrade.js.map +1 -1
- package/dist/environments/machine.d.ts +5 -4
- package/dist/environments/machine.d.ts.map +1 -1
- package/dist/environments/machine.js +13 -16
- package/dist/environments/machine.js.map +1 -1
- package/dist/environments/wsl.d.ts.map +1 -1
- package/dist/environments/wsl.js +4 -7
- package/dist/environments/wsl.js.map +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +28 -30
- package/dist/install.js.map +1 -1
- package/dist/resident/last-exit.d.ts +40 -0
- package/dist/resident/last-exit.d.ts.map +1 -0
- package/dist/resident/last-exit.js +147 -0
- package/dist/resident/last-exit.js.map +1 -0
- package/dist/resident/log-roll.d.ts +8 -0
- package/dist/resident/log-roll.d.ts.map +1 -0
- package/dist/resident/log-roll.js +30 -0
- package/dist/resident/log-roll.js.map +1 -0
- package/dist/{resident.d.ts → resident/resident.d.ts} +1 -1
- package/dist/resident/resident.d.ts.map +1 -0
- package/dist/{resident.js → resident/resident.js} +52 -27
- package/dist/resident/resident.js.map +1 -0
- package/dist/{supervision.d.ts → resident/supervision.d.ts} +7 -3
- package/dist/resident/supervision.d.ts.map +1 -0
- package/dist/{supervision.js → resident/supervision.js} +17 -14
- package/dist/resident/supervision.js.map +1 -0
- package/dist/resident/watchdog.d.ts +24 -0
- package/dist/resident/watchdog.d.ts.map +1 -0
- package/dist/resident/watchdog.js +69 -0
- package/dist/resident/watchdog.js.map +1 -0
- package/dist/status.d.ts +14 -8
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +141 -107
- package/dist/status.js.map +1 -1
- package/dist/sync/attach-commands.d.ts +1 -1
- package/dist/sync/attach-commands.d.ts.map +1 -1
- package/dist/sync/attach-commands.js +19 -12
- package/dist/sync/attach-commands.js.map +1 -1
- package/dist/sync/commands.d.ts +6 -3
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +149 -113
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/exec.d.ts +9 -0
- package/dist/sync/exec.d.ts.map +1 -1
- package/dist/sync/exec.js +21 -22
- package/dist/sync/exec.js.map +1 -1
- package/dist/sync/folders.d.ts.map +1 -1
- package/dist/sync/folders.js +3 -14
- package/dist/sync/folders.js.map +1 -1
- package/dist/sync/forget-command.d.ts +1 -1
- package/dist/sync/forget-command.d.ts.map +1 -1
- package/dist/sync/forget-command.js +10 -7
- package/dist/sync/forget-command.js.map +1 -1
- package/dist/sync/git-bridge.d.ts.map +1 -1
- package/dist/sync/git-bridge.js +4 -2
- package/dist/sync/git-bridge.js.map +1 -1
- package/dist/sync/local-sandboxes.d.ts.map +1 -1
- package/dist/sync/local-sandboxes.js +2 -4
- package/dist/sync/local-sandboxes.js.map +1 -1
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +7 -16
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +33 -37
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/project-commands.d.ts +7 -2
- package/dist/sync/project/project-commands.d.ts.map +1 -1
- package/dist/sync/project/project-commands.js +110 -46
- package/dist/sync/project/project-commands.js.map +1 -1
- package/dist/sync/project/project-files.d.ts +4 -6
- package/dist/sync/project/project-files.d.ts.map +1 -1
- package/dist/sync/project/project-files.js +4 -6
- package/dist/sync/project/project-files.js.map +1 -1
- package/dist/sync/project/project-local.d.ts.map +1 -1
- package/dist/sync/project/project-local.js +3 -19
- package/dist/sync/project/project-local.js.map +1 -1
- package/dist/sync/project/project-remote.js +4 -4
- package/dist/sync/project/project-transfer.d.ts +13 -30
- package/dist/sync/project/project-transfer.d.ts.map +1 -1
- package/dist/sync/project/project-transfer.js +1 -1
- package/dist/sync/project/project-transfer.js.map +1 -1
- package/dist/sync/retire.d.ts.map +1 -1
- package/dist/sync/retire.js +3 -3
- package/dist/sync/retire.js.map +1 -1
- package/dist/sync/siblings.d.ts.map +1 -1
- package/dist/sync/siblings.js +3 -6
- package/dist/sync/siblings.js.map +1 -1
- package/dist/sync/ssh.d.ts +1 -1
- package/dist/sync/ssh.d.ts.map +1 -1
- package/dist/sync/ssh.js +8 -7
- package/dist/sync/ssh.js.map +1 -1
- package/dist/sync/swap-pause.d.ts.map +1 -1
- package/dist/sync/swap-pause.js +2 -2
- package/dist/sync/swap-pause.js.map +1 -1
- package/dist/upgrade.d.ts +7 -0
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +24 -13
- package/dist/upgrade.js.map +1 -1
- package/dist/upkeep/doctor.d.ts +4 -2
- package/dist/upkeep/doctor.d.ts.map +1 -1
- package/dist/upkeep/doctor.js +40 -26
- package/dist/upkeep/doctor.js.map +1 -1
- package/dist/upkeep/login.js +1 -1
- package/dist/upkeep/login.js.map +1 -1
- package/dist/upkeep/retention.d.ts +6 -0
- package/dist/upkeep/retention.d.ts.map +1 -1
- package/dist/upkeep/retention.js +55 -3
- package/dist/upkeep/retention.js.map +1 -1
- package/dist/upkeep/retired.js +1 -1
- package/dist/upkeep/retired.js.map +1 -1
- package/dist/upkeep/second-ic.d.ts.map +1 -1
- package/dist/upkeep/second-ic.js +4 -6
- package/dist/upkeep/second-ic.js.map +1 -1
- package/dist/upkeep/trash.d.ts.map +1 -1
- package/dist/upkeep/trash.js +5 -6
- package/dist/upkeep/trash.js.map +1 -1
- package/package.json +9 -9
- package/dist/device/tools/programs/tunnel.d.ts.map +0 -1
- package/dist/device/tools/programs/tunnel.js.map +0 -1
- package/dist/resident.d.ts.map +0 -1
- package/dist/resident.js.map +0 -1
- package/dist/supervision.d.ts.map +0 -1
- package/dist/supervision.js.map +0 -1
- package/dist/watchdog.d.ts +0 -13
- package/dist/watchdog.d.ts.map +0 -1
- package/dist/watchdog.js +0 -38
- package/dist/watchdog.js.map +0 -1
|
@@ -4,31 +4,34 @@ import { setTimeout as sleep } from "node:timers/promises";
|
|
|
4
4
|
import { errorMessage } from "@intentic/base/errors";
|
|
5
5
|
import { plural } from "@intentic/base/format";
|
|
6
6
|
import { autostart, claimPidFile, holdPidFile, releasePidFile, stopProcess } from "@intentic/local-agent";
|
|
7
|
-
import { beginTrial } from "
|
|
8
|
-
import { MACHINE_AUTOSTART } from "
|
|
9
|
-
import { baseDir, runPidPath } from "
|
|
10
|
-
import { startAutoBackup } from "
|
|
11
|
-
import { startAutoPrepare } from "
|
|
12
|
-
import { LINK_STAMP_MS, linkStatePath, readLinks, stampLinkStates } from "
|
|
13
|
-
import { connect, reachedOverLoopback } from "
|
|
14
|
-
import { hostedSlugs, keeperOn, startKeeper } from "
|
|
15
|
-
import { startProbationWatch } from "
|
|
16
|
-
import { readChannelSlugs } from "
|
|
17
|
-
import { fleet } from "
|
|
18
|
-
import { takeOverCommandLedger } from "
|
|
19
|
-
import { stopRunningCommands } from "
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
7
|
+
import { beginTrial } from "../agent-trial.js";
|
|
8
|
+
import { MACHINE_AUTOSTART } from "../autostart/autostart.js";
|
|
9
|
+
import { baseDir, runLogPath, runPidPath } from "../config.js";
|
|
10
|
+
import { startAutoBackup } from "../device/sandbox-rounds/auto-backup.js";
|
|
11
|
+
import { startAutoPrepare } from "../device/sandbox-rounds/auto-prepare.js";
|
|
12
|
+
import { LINK_STAMP_MS, linkStatePath, readLinks, stampLinkStates } from "../device/config.js";
|
|
13
|
+
import { connect, reachedOverLoopback } from "../device/connection.js";
|
|
14
|
+
import { hostedSlugs, keeperOn, startKeeper } from "../device/sandbox-rounds/keeper.js";
|
|
15
|
+
import { startProbationWatch } from "../device/sandbox-rounds/probation-watch.js";
|
|
16
|
+
import { readChannelSlugs } from "../device/sandbox-rounds/swap-records.js";
|
|
17
|
+
import { fleet } from "../device/tools/sandboxes.js";
|
|
18
|
+
import { takeOverCommandLedger } from "../device/tools/command-ledger.js";
|
|
19
|
+
import { stopRunningCommands } from "../device/tools/shell.js";
|
|
20
|
+
import { syncEngineEnv } from "../engine-env.js";
|
|
21
|
+
import { superviseChildren } from "../environments/children.js";
|
|
22
|
+
import { startAutoUpgrade } from "../environments/auto-upgrade.js";
|
|
23
|
+
import { heldDistros, SUPERVISOR_ENV, supervisedByWindows, updateMachineConfig, withoutChild } from "../environments/machine.js";
|
|
24
|
+
import { UPGRADE_ENV } from "../environments/machine-upgrade.js";
|
|
25
|
+
import { sweepBin } from "../release.js";
|
|
25
26
|
import { assertSupervisor, machineLauncher, readResident, retireResident, startResident } from "./supervision.js";
|
|
26
|
-
import { mirrorHeartbeatPath, readState } from "
|
|
27
|
-
import { runMirrorWatch } from "
|
|
28
|
-
import { startUpkeep } from "
|
|
29
|
-
import { MACHINE_VERSION } from "
|
|
27
|
+
import { mirrorHeartbeatPath, readState } from "../sync/config.js";
|
|
28
|
+
import { runMirrorWatch } from "../sync/mirror.js";
|
|
29
|
+
import { startUpkeep } from "../upkeep/reconcile.js";
|
|
30
|
+
import { MACHINE_VERSION } from "../version.js";
|
|
31
|
+
import { beginExitRecord, lastExitPath, reasonForCode, recordExit, recordUnexpectedExits, stampAlive, thisRun } from "./last-exit.js";
|
|
32
|
+
import { startLogRoll } from "./log-roll.js";
|
|
30
33
|
import { startWatchdog } from "./watchdog.js";
|
|
31
|
-
import { WINDOWS_SIDE } from "
|
|
34
|
+
import { WINDOWS_SIDE } from "../environments/wsl.js";
|
|
32
35
|
export const readResidentPid = async () => (await readResident())?.pid;
|
|
33
36
|
export const readResidentBuild = async () => (await readResident())?.build;
|
|
34
37
|
export const signalExitCode = (signal) => 128 + (constants.signals[signal] ?? 15);
|
|
@@ -46,7 +49,7 @@ export const keptSandboxes = async () => {
|
|
|
46
49
|
? await hostedSlugs(async () => (await fleet({ current: false })).map(({ slug, keptElsewhere }) => ({ slug, keptElsewhere })), async () => await readChannelSlugs())
|
|
47
50
|
: [];
|
|
48
51
|
};
|
|
49
|
-
const keptNote = (kept) => `this
|
|
52
|
+
const keptNote = (kept) => `this device runs ${plural(kept.length, "sandbox", "sandboxes")} (${kept.join(", ")}), so the agent stays to bring ${kept.length === 1 ? "it" : "them"} back after a restart; turning the sandbox keeper off lets it go.`;
|
|
50
53
|
export const ensureResident = async (log, { forGood = false } = {}) => {
|
|
51
54
|
if (nothingToServe(await readServed())) {
|
|
52
55
|
const kept = forGood ? [] : await keptSandboxes();
|
|
@@ -81,7 +84,7 @@ const claim = async (record, supervised, log) => {
|
|
|
81
84
|
}
|
|
82
85
|
const claimed = await claimPidFile(runPidPath, baseDir, record);
|
|
83
86
|
if (!claimed.claimed) {
|
|
84
|
-
log(`
|
|
87
|
+
log(`An agent is already running (pid ${claimed.holder.pid}): leaving it alone. intentic-machine run --stop stops it first.`);
|
|
85
88
|
}
|
|
86
89
|
return claimed.claimed;
|
|
87
90
|
};
|
|
@@ -151,7 +154,7 @@ const runtimeOf = (supervised, trial, kept, lease, log) => {
|
|
|
151
154
|
});
|
|
152
155
|
const later = supervised ? SUPERVISED_ROUND_DELAY_MS : 0;
|
|
153
156
|
const upkeep = startUpkeep(log, lease.supervisor);
|
|
154
|
-
const rounds = [watch, keeper, startAutoPrepare(log, { delayMs: later }), startAutoBackup(log, { delayMs: later }), upkeep];
|
|
157
|
+
const rounds = [watch, keeper, startAutoPrepare(log, { delayMs: later }), startAutoBackup(log, { delayMs: later }), upkeep, startLogRoll(runLogPath, log)];
|
|
155
158
|
const autoUpgrade = supervised ? undefined : startAutoUpgrade(log);
|
|
156
159
|
const unproven = trial.prove(log);
|
|
157
160
|
const finish = async (code) => {
|
|
@@ -167,6 +170,8 @@ const runtimeOf = (supervised, trial, kept, lease, log) => {
|
|
|
167
170
|
await stopRunningCommands();
|
|
168
171
|
await trial.clean();
|
|
169
172
|
await release();
|
|
173
|
+
const { reason, detail } = reasonForCode(code);
|
|
174
|
+
recordExit(reason, detail);
|
|
170
175
|
process.exit(code);
|
|
171
176
|
};
|
|
172
177
|
for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
@@ -179,6 +184,7 @@ const tick = async (runtime, lease, log) => {
|
|
|
179
184
|
log("another machine agent took this environment over: leaving.");
|
|
180
185
|
await runtime.finish(EXIT_REPLACED);
|
|
181
186
|
}
|
|
187
|
+
syncEngineEnv();
|
|
182
188
|
const now = await readServed().catch((error) => {
|
|
183
189
|
log(`config unreadable (${errorMessage(error)}): keeping what already runs.`);
|
|
184
190
|
return undefined;
|
|
@@ -198,6 +204,7 @@ const tick = async (runtime, lease, log) => {
|
|
|
198
204
|
}
|
|
199
205
|
}
|
|
200
206
|
await stampLinks(runtime.connections);
|
|
207
|
+
await stampAlive();
|
|
201
208
|
};
|
|
202
209
|
const begin = async (supervised, log) => {
|
|
203
210
|
const record = { pid: process.pid, build: MACHINE_VERSION };
|
|
@@ -224,13 +231,30 @@ const begin = async (supervised, log) => {
|
|
|
224
231
|
await takeOverCommandLedger(log);
|
|
225
232
|
return { served, lease, kept };
|
|
226
233
|
};
|
|
234
|
+
const beginRecord = async (watchdog, log) => {
|
|
235
|
+
try {
|
|
236
|
+
const before = await beginExitRecord(process.pid, MACHINE_VERSION);
|
|
237
|
+
if (before !== undefined) {
|
|
238
|
+
log(before);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
log(`could not start this run's exit record (${errorMessage(error)}); the next agent will not know why this one ended.`);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
recordUnexpectedExits();
|
|
246
|
+
const run = thisRun();
|
|
247
|
+
if (run !== undefined) {
|
|
248
|
+
watchdog.record({ path: lastExitPath, base: run });
|
|
249
|
+
}
|
|
250
|
+
};
|
|
227
251
|
const serving = (served) => [
|
|
228
252
|
plural(served.links.length, "linked sandbox"),
|
|
229
253
|
plural(served.pairings, "sync pairing"),
|
|
230
254
|
...(WINDOWS_SIDE ? [plural(served.children.length, "WSL distro")] : []),
|
|
231
255
|
].join(", ");
|
|
232
256
|
export const runForeground = async (log) => {
|
|
233
|
-
startWatchdog();
|
|
257
|
+
const watchdog = startWatchdog();
|
|
234
258
|
const supervised = supervisedByWindows();
|
|
235
259
|
delete process.env[SUPERVISOR_ENV];
|
|
236
260
|
delete process.env[UPGRADE_ENV];
|
|
@@ -244,6 +268,7 @@ export const runForeground = async (log) => {
|
|
|
244
268
|
await trial.clean();
|
|
245
269
|
return;
|
|
246
270
|
}
|
|
271
|
+
await beginRecord(watchdog, log);
|
|
247
272
|
const runtime = runtimeOf(supervised, trial, started.kept, started.lease, log);
|
|
248
273
|
log(`serving ${serving(started.served)}`);
|
|
249
274
|
for (;;) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resident.js","sourceRoot":"","sources":["../../src/resident/resident.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { type AutostartKind, type CliLauncher, type Log, type PidRecord } from "@intentic/local-agent";
|
|
2
|
-
import { WINDOWS_SUPERVISOR } from "
|
|
2
|
+
import { WINDOWS_SUPERVISOR } from "../environments/machine.js";
|
|
3
3
|
export declare const machineLauncher: () => CliLauncher;
|
|
4
4
|
export declare const readResident: () => Promise<PidRecord | undefined>;
|
|
5
5
|
export type Supervisor = AutostartKind | typeof WINDOWS_SUPERVISOR;
|
|
6
|
-
export
|
|
6
|
+
export interface StopWhy {
|
|
7
|
+
readonly reason: "stopped" | "restart" | "update";
|
|
8
|
+
readonly detail: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const stopResident: (why?: StopWhy) => Promise<number | undefined>;
|
|
7
11
|
export declare const startResident: (log: Log) => Promise<void>;
|
|
8
12
|
export declare const waitOutSwaps: (log: Log) => Promise<void>;
|
|
9
|
-
export declare const restartResident: (log: Log) => Promise<void>;
|
|
13
|
+
export declare const restartResident: (log: Log, why?: StopWhy) => Promise<void>;
|
|
10
14
|
export declare const retireResident: (log: Log) => Promise<void>;
|
|
11
15
|
export declare const assertSupervisor: (supervised: boolean, log: Log) => Promise<Supervisor>;
|
|
12
16
|
//# sourceMappingURL=supervision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervision.d.ts","sourceRoot":"","sources":["../../src/resident/supervision.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAElB,KAAK,WAAW,EAGhB,KAAK,GAAG,EACR,KAAK,SAAS,EAIjB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAmB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMjF,eAAO,MAAM,eAAe,QAAO,WAA8C,CAAC;AAIlF,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,SAAS,GAAG,SAAS,CAAoC,CAAC;AAGxG,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,OAAO,kBAAkB,CAAC;AA2BnE,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAKD,eAAO,MAAM,YAAY,SAAe,OAAO,KAAqB,OAAO,CAAC,MAAM,GAAG,SAAS,CAc7F,CAAC;AAoBF,eAAO,MAAM,aAAa,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAoB1D,CAAC;AAQF,eAAO,MAAM,YAAY,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAazD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAe,GAAG,QAAO,OAAO,KAAgE,OAAO,CAAC,IAAI,CAIvI,CAAC;AAGF,eAAO,MAAM,cAAc,QAAe,GAAG,KAAG,OAAO,CAAC,IAAI,CAG3D,CAAC;AAGF,eAAO,MAAM,gBAAgB,eAAsB,OAAO,OAAO,GAAG,KAAG,OAAO,CAAC,UAAU,CAWxF,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { rm } from "node:fs/promises";
|
|
2
2
|
import { pollUntil } from "@intentic/base/async";
|
|
3
3
|
import { autostart, cliLauncher, livePidRecord, releasePidFile, spawnDetached, stopProcess, } from "@intentic/local-agent";
|
|
4
|
-
import { recordStopped } from "
|
|
5
|
-
import { MACHINE_AUTOSTART } from "
|
|
6
|
-
import { runLogPath, runPidPath } from "
|
|
7
|
-
import { linkStatePath } from "
|
|
8
|
-
import { CUTOVER_HOLDS_MS, readSwapRecords, swapsUnderway } from "
|
|
9
|
-
import { attachToWindows, WINDOWS_SUPERVISOR } from "
|
|
10
|
-
import { mirrorHeartbeatPath } from "
|
|
4
|
+
import { recordStopped } from "../agent-trial.js";
|
|
5
|
+
import { MACHINE_AUTOSTART } from "../autostart/autostart.js";
|
|
6
|
+
import { runLogPath, runPidPath } from "../config.js";
|
|
7
|
+
import { linkStatePath } from "../device/config.js";
|
|
8
|
+
import { CUTOVER_HOLDS_MS, readSwapRecords, swapsUnderway } from "../device/sandbox-rounds/swap-records.js";
|
|
9
|
+
import { attachToWindows, WINDOWS_SUPERVISOR } from "../environments/machine.js";
|
|
10
|
+
import { mirrorHeartbeatPath } from "../sync/config.js";
|
|
11
|
+
import { recordStopFor } from "./last-exit.js";
|
|
11
12
|
export const machineLauncher = () => cliLauncher("intentic-machine");
|
|
12
13
|
const machineAutostart = (log) => autostart(MACHINE_AUTOSTART, machineLauncher(), log);
|
|
13
14
|
export const readResident = async () => await livePidRecord(runPidPath);
|
|
@@ -29,11 +30,13 @@ const waitForResident = async (reask) => {
|
|
|
29
30
|
await pollUntil(came, { intervalMs: START_POLL_MS, timeoutMs: START_TIMEOUT_MS });
|
|
30
31
|
return held;
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
+
const STOPPED_BY_HAND = { reason: "stopped", detail: "by `intentic-machine run --stop`" };
|
|
34
|
+
export const stopResident = async (why = STOPPED_BY_HAND) => {
|
|
33
35
|
const held = await readResident();
|
|
34
36
|
if (held === undefined) {
|
|
35
37
|
return undefined;
|
|
36
38
|
}
|
|
39
|
+
recordStopFor(held.pid, why.reason, why.detail);
|
|
37
40
|
await stopProcess(held.pid, STOP_TIMEOUT_MS);
|
|
38
41
|
await recordStopped(held.pid);
|
|
39
42
|
if (await releasePidFile(runPidPath, held.pid)) {
|
|
@@ -42,14 +45,14 @@ export const stopResident = async () => {
|
|
|
42
45
|
}
|
|
43
46
|
return held.pid;
|
|
44
47
|
};
|
|
45
|
-
const started = (log, held, by) => log(`
|
|
48
|
+
const started = (log, held, by) => log(`The agent is running in the background (pid ${held.pid}, ${by}); its log is ${runLogPath}.`);
|
|
46
49
|
const startThroughWindows = async (log) => {
|
|
47
50
|
if (!(await attachToWindows(log))) {
|
|
48
51
|
return false;
|
|
49
52
|
}
|
|
50
53
|
const held = await waitForResident();
|
|
51
54
|
if (held === undefined) {
|
|
52
|
-
log("
|
|
55
|
+
log("The Windows side took this distro over, but its agent did not come up here in time; starting it directly.");
|
|
53
56
|
return false;
|
|
54
57
|
}
|
|
55
58
|
started(log, held, "kept running by the Windows side");
|
|
@@ -71,7 +74,7 @@ export const startResident = async (log) => {
|
|
|
71
74
|
started(log, held, `started by its ${kind} entry`);
|
|
72
75
|
return;
|
|
73
76
|
}
|
|
74
|
-
log(`
|
|
77
|
+
log(`The ${kind} login entry did not start the agent within ${START_TIMEOUT_MS / 1000}s; starting it directly.`);
|
|
75
78
|
}
|
|
76
79
|
const pid = await spawnDetached(runLogPath, machineLauncher(), MACHINE_AUTOSTART.foregroundArgs);
|
|
77
80
|
log(`machine agent running in the background (pid ${pid}). Details: ${runLogPath}`);
|
|
@@ -88,13 +91,13 @@ export const waitOutSwaps = async (log) => {
|
|
|
88
91
|
return swapping === "";
|
|
89
92
|
}, { intervalMs: SWAP_POLL_MS, timeoutMs: CUTOVER_HOLDS_MS });
|
|
90
93
|
};
|
|
91
|
-
export const restartResident = async (log) => {
|
|
94
|
+
export const restartResident = async (log, why = { reason: "restart", detail: "by `intentic-machine run`" }) => {
|
|
92
95
|
await waitOutSwaps(log);
|
|
93
|
-
await stopResident();
|
|
96
|
+
await stopResident(why);
|
|
94
97
|
await startResident(log);
|
|
95
98
|
};
|
|
96
99
|
export const retireResident = async (log) => {
|
|
97
|
-
await stopResident();
|
|
100
|
+
await stopResident({ reason: "stopped", detail: "retired: uninstalled, or nothing left to serve here" });
|
|
98
101
|
await machineAutostart(log).unregister();
|
|
99
102
|
};
|
|
100
103
|
export const assertSupervisor = async (supervised, log) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervision.js","sourceRoot":"","sources":["../../src/resident/supervision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ExitRecord } from "./last-exit.js";
|
|
2
|
+
export declare const WATCHDOG_PING_MS = 5000;
|
|
3
|
+
export declare const WATCHDOG_STALL_MS: number;
|
|
4
|
+
export declare const stalledFor: (lastPing: number, now: number, limitMs: number) => number | undefined;
|
|
5
|
+
export declare const pausedAcross: (previousCheck: number, now: number, checkMs: number, limitMs: number) => boolean;
|
|
6
|
+
export declare const wallJump: (previousCheck: number, now: number, previousWall: number, wall: number) => number;
|
|
7
|
+
export declare const WALL_JUMP_MS = 10000;
|
|
8
|
+
export declare const AFTER_SLEEP_MS: number;
|
|
9
|
+
export declare const sleepLine: (seconds: number, at: Date) => string;
|
|
10
|
+
export declare const stallLine: (seconds: number, at: Date, sinceSleepSeconds?: number) => string;
|
|
11
|
+
export interface WatchdogRecord {
|
|
12
|
+
readonly path: string;
|
|
13
|
+
readonly base: ExitRecord;
|
|
14
|
+
}
|
|
15
|
+
export interface Watchdog {
|
|
16
|
+
readonly stop: () => void;
|
|
17
|
+
readonly record: (record: WatchdogRecord) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare const startWatchdog: ({ pingMs, limitMs, jumpMs, }?: {
|
|
20
|
+
readonly pingMs?: number;
|
|
21
|
+
readonly limitMs?: number;
|
|
22
|
+
readonly jumpMs?: number;
|
|
23
|
+
}) => Watchdog;
|
|
24
|
+
//# sourceMappingURL=watchdog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchdog.d.ts","sourceRoot":"","sources":["../../src/resident/watchdog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAsBjD,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAK5C,eAAO,MAAM,UAAU,aAAc,MAAM,OAAO,MAAM,WAAW,MAAM,KAAG,MAAM,GAAG,SACN,CAAC;AAQhF,eAAO,MAAM,YAAY,kBAAmB,MAAM,OAAO,MAAM,WAAW,MAAM,WAAW,MAAM,KAAG,OACvB,CAAC;AAO9E,eAAO,MAAM,QAAQ,kBAAmB,MAAM,OAAO,MAAM,gBAAgB,MAAM,QAAQ,MAAM,KAAG,MAAqD,CAAC;AAIxJ,eAAO,MAAM,YAAY,QAAS,CAAC;AAGnC,eAAO,MAAM,cAAc,QAAc,CAAC;AAG1C,eAAO,MAAM,SAAS,YAAa,MAAM,MAAM,IAAI,KAAG,MACmH,CAAC;AAI1K,eAAO,MAAM,SAAS,YAAa,MAAM,MAAM,IAAI,sBAAsB,MAAM,KAAG,MACiI,CAAC;AAmDpN,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAE1B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;CACrD;AAID,eAAO,MAAM,aAAa,kCAIvB;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAQ,QAiB3F,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Worker } from "node:worker_threads";
|
|
2
|
+
export const WATCHDOG_PING_MS = 5_000;
|
|
3
|
+
export const WATCHDOG_STALL_MS = 3 * 60_000;
|
|
4
|
+
export const stalledFor = (lastPing, now, limitMs) => now - lastPing >= limitMs ? Math.round((now - lastPing) / 1000) : undefined;
|
|
5
|
+
export const pausedAcross = (previousCheck, now, checkMs, limitMs) => now - previousCheck >= Math.min(Math.max(checkMs * 3, 3000), limitMs / 2);
|
|
6
|
+
export const wallJump = (previousCheck, now, previousWall, wall) => wall - previousWall - (now - previousCheck);
|
|
7
|
+
export const WALL_JUMP_MS = 10_000;
|
|
8
|
+
export const AFTER_SLEEP_MS = 10 * 60_000;
|
|
9
|
+
export const sleepLine = (seconds, at) => `[${at.toISOString()}] watchdog: the agent was paused for ${seconds} s (suspected sleep/resume, or the clock was set forward); not a stall, the count starts again\n`;
|
|
10
|
+
export const stallLine = (seconds, at, sinceSleepSeconds) => `[${at.toISOString()}] event loop stalled for ${seconds} s${sinceSleepSeconds === undefined ? "" : ` (${sinceSleepSeconds} s after a suspected sleep/resume)`}; exiting so the supervisor restarts the agent\n`;
|
|
11
|
+
const WORKER_SOURCE = `
|
|
12
|
+
const { parentPort, workerData } = require("node:worker_threads");
|
|
13
|
+
const { writeSync, writeFileSync } = require("node:fs");
|
|
14
|
+
const stalledFor = ${stalledFor.toString()};
|
|
15
|
+
const stallLine = ${stallLine.toString()};
|
|
16
|
+
const sleepLine = ${sleepLine.toString()};
|
|
17
|
+
const pausedAcross = ${pausedAcross.toString()};
|
|
18
|
+
const wallJump = ${wallJump.toString()};
|
|
19
|
+
const say = (line) => { try { writeSync(2, line); } catch { /* allow(silent-catch): a log that will not take the line must not keep a hung agent alive */ } };
|
|
20
|
+
let last = performance.now();
|
|
21
|
+
let checked = last;
|
|
22
|
+
let checkedWall = Date.now();
|
|
23
|
+
let sleptAt;
|
|
24
|
+
let record;
|
|
25
|
+
parentPort.on("message", (message) => {
|
|
26
|
+
last = performance.now();
|
|
27
|
+
if (typeof message === "object" && message !== null) record = message;
|
|
28
|
+
});
|
|
29
|
+
setInterval(() => {
|
|
30
|
+
const now = performance.now();
|
|
31
|
+
const wall = Date.now();
|
|
32
|
+
const jump = wallJump(checked, now, checkedWall, wall);
|
|
33
|
+
if (pausedAcross(checked, now, workerData.checkMs, workerData.limitMs) || jump >= workerData.jumpMs) {
|
|
34
|
+
last = now;
|
|
35
|
+
sleptAt = now;
|
|
36
|
+
say(sleepLine(Math.round(Math.max(wall - checkedWall, now - checked) / 1000), new Date()));
|
|
37
|
+
}
|
|
38
|
+
checked = now;
|
|
39
|
+
checkedWall = wall;
|
|
40
|
+
const seconds = stalledFor(last, now, workerData.limitMs);
|
|
41
|
+
if (seconds === undefined) return;
|
|
42
|
+
const sinceSleep = sleptAt !== undefined && now - sleptAt <= workerData.afterSleepMs ? Math.round((now - sleptAt) / 1000) : undefined;
|
|
43
|
+
const line = stallLine(seconds, new Date(), sinceSleep);
|
|
44
|
+
say(line);
|
|
45
|
+
if (record !== undefined) {
|
|
46
|
+
try {
|
|
47
|
+
writeFileSync(record.path, JSON.stringify({ ...record.base, reason: "watchdog", at: new Date().toISOString(), detail: line.slice(line.indexOf("]") + 2).trim() }) + "\\n");
|
|
48
|
+
} catch { /* allow(silent-catch): an unwritten record must not keep a hung agent alive; the line above says it */ }
|
|
49
|
+
}
|
|
50
|
+
process.kill(process.pid, "SIGKILL");
|
|
51
|
+
}, workerData.checkMs);
|
|
52
|
+
`;
|
|
53
|
+
export const startWatchdog = ({ pingMs = WATCHDOG_PING_MS, limitMs = WATCHDOG_STALL_MS, jumpMs = WALL_JUMP_MS, } = {}) => {
|
|
54
|
+
const worker = new Worker(WORKER_SOURCE, {
|
|
55
|
+
eval: true,
|
|
56
|
+
workerData: { limitMs, checkMs: Math.min(pingMs, limitMs), jumpMs, afterSleepMs: AFTER_SLEEP_MS },
|
|
57
|
+
});
|
|
58
|
+
worker.unref();
|
|
59
|
+
const ping = setInterval(() => worker.postMessage(0), pingMs);
|
|
60
|
+
ping.unref();
|
|
61
|
+
return {
|
|
62
|
+
stop: () => {
|
|
63
|
+
clearInterval(ping);
|
|
64
|
+
void worker.terminate();
|
|
65
|
+
},
|
|
66
|
+
record: (record) => worker.postMessage(record),
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=watchdog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watchdog.js","sourceRoot":"","sources":["../../src/resident/watchdog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuB7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,MAAM,CAAC;AAK5C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,GAAW,EAAE,OAAe,EAAsB,EAAE,CAC7F,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAQhF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,aAAqB,EAAE,GAAW,EAAE,OAAe,EAAE,OAAe,EAAW,EAAE,CAC1G,GAAG,GAAG,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAO9E,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,aAAqB,EAAE,GAAW,EAAE,YAAoB,EAAE,IAAY,EAAU,EAAE,CAAC,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC;AAIxJ,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAGnC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,MAAM,CAAC;AAG1C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAQ,EAAU,EAAE,CAC3D,IAAI,EAAE,CAAC,WAAW,EAAE,wCAAwC,OAAO,kGAAkG,CAAC;AAI1K,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAQ,EAAE,iBAA0B,EAAU,EAAE,CACvF,IAAI,EAAE,CAAC,WAAW,EAAE,4BAA4B,OAAO,KAAK,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,iBAAiB,oCAAoC,kDAAkD,CAAC;AAOpN,MAAM,aAAa,GAAG;;;qBAGD,UAAU,CAAC,QAAQ,EAAE;oBACtB,SAAS,CAAC,QAAQ,EAAE;oBACpB,SAAS,CAAC,QAAQ,EAAE;uBACjB,YAAY,CAAC,QAAQ,EAAE;mBAC3B,QAAQ,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCrC,CAAC;AAgBF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC1B,MAAM,GAAG,gBAAgB,EACzB,OAAO,GAAG,iBAAiB,EAC3B,MAAM,GAAG,YAAY,GACxB,GAAsF,EAAE,EAAY,EAAE;IACnG,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE;QACrC,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE;KACpG,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;IAEf,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,OAAO;QACH,IAAI,EAAE,GAAG,EAAE;YACP,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;KACjD,CAAC;AACN,CAAC,CAAC"}
|
package/dist/status.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Item } from "@intentic/local-agent";
|
|
2
|
+
import type { DeviceScopes, DevicePort, DeviceReport } from "@intentic/sandbox-contract";
|
|
2
3
|
import type { PeerLinkState } from "@intentic/sandbox-contract/peer-dial";
|
|
3
|
-
import {
|
|
4
|
+
import type { CommandContext } from "@stricli/core";
|
|
4
5
|
export interface DeviceStatus {
|
|
5
6
|
readonly version: string;
|
|
6
7
|
readonly running?: number;
|
|
@@ -19,11 +20,16 @@ export interface StatusLink {
|
|
|
19
20
|
}
|
|
20
21
|
export declare const statusSummary: (running: number | undefined, links: number, sync: DeviceReport, now: number, connected?: number) => string;
|
|
21
22
|
export declare const deviceStatus: (mutagen: string | undefined) => Promise<DeviceStatus>;
|
|
22
|
-
export declare const
|
|
23
|
-
export declare const
|
|
24
|
-
export declare const
|
|
25
|
-
export declare const
|
|
26
|
-
export declare const
|
|
27
|
-
export declare const
|
|
23
|
+
export declare const portItem: (port: DevicePort) => Item;
|
|
24
|
+
export declare const CONFLICTS_SAID = "Both ends changed these since they last agreed, so neither copy was overwritten and they have stopped syncing.";
|
|
25
|
+
export declare const CONFLICTS_SETTLED = "Resolve one by making both copies the same, or both gone; the session picks it up on its next pass.";
|
|
26
|
+
export declare const conflictItems: (pairing: DeviceReport["pairings"][number]) => Item[];
|
|
27
|
+
export declare const pairingItem: (pairing: DeviceReport["pairings"][number]) => Item;
|
|
28
|
+
export declare const agentItem: (agent: DeviceReport["agent"], now: number) => Item;
|
|
29
|
+
export declare const agentNote: (agent: DeviceReport["agent"], now: number) => string | undefined;
|
|
30
|
+
export declare const buildSkewItem: (report: DeviceReport) => Item | undefined;
|
|
31
|
+
export declare const placeLine: (distro: string | undefined, supervisor: string | undefined, children: readonly string[]) => string | undefined;
|
|
32
|
+
export declare const linkItem: (link: StatusLink) => Item;
|
|
33
|
+
export declare const grantLine: (link: StatusLink) => string;
|
|
28
34
|
export declare const status: import("@stricli/core").Command<CommandContext>;
|
|
29
35
|
//# sourceMappingURL=status.d.ts.map
|
package/dist/status.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,IAAI,EAAY,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAAuD,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9I,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAmBpD,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAG1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;QAEtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B;AAKD,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAClC;AAeD,eAAO,MAAM,aAAa,YAAa,MAAM,GAAG,SAAS,SAAS,MAAM,QAAQ,YAAY,OAAO,MAAM,cAAc,MAAM,KAAG,MA2B/H,CAAC;AAEF,eAAO,MAAM,YAAY,YAAmB,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,YAAY,CAyBpF,CAAC;AAIF,eAAO,MAAM,QAAQ,SAAU,UAAU,KAAG,IAO3C,CAAC;AA8BF,eAAO,MAAM,cAAc,mHAAmH,CAAC;AAC/I,eAAO,MAAM,iBAAiB,wGAAwG,CAAC;AA0BvI,eAAO,MAAM,aAAa,YAAa,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAG,IAAI,EAU7E,CAAC;AAMF,eAAO,MAAM,WAAW,YAAa,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAG,IAqBvE,CAAC;AAMF,eAAO,MAAM,SAAS,UAAW,YAAY,CAAC,OAAO,CAAC,OAAO,MAAM,KAAG,IAiBrE,CAAC;AAGF,eAAO,MAAM,SAAS,UAAW,YAAY,CAAC,OAAO,CAAC,OAAO,MAAM,KAAG,MAAM,GAAG,SAU9E,CAAC;AAKF,eAAO,MAAM,aAAa,WAAY,YAAY,KAAG,IAAI,GAAG,SAY3D,CAAC;AAGF,eAAO,MAAM,SAAS,WAAY,MAAM,GAAG,SAAS,cAAc,MAAM,GAAG,SAAS,YAAY,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAO5H,CAAC;AAIF,eAAO,MAAM,QAAQ,SAAU,UAAU,KAAG,IAW3C,CAAC;AAEF,eAAO,MAAM,SAAS,SAAU,UAAU,KAAG,MACmI,CAAC;AA+EjL,eAAO,MAAM,MAAM,iDAmEjB,CAAC"}
|