@intentic/machine 1.326.0 → 1.327.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 +387 -33
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +2 -0
- package/dist/commands.js.map +1 -1
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js +2 -3
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/audit.d.ts +2 -0
- package/dist/device/audit.d.ts.map +1 -1
- package/dist/device/audit.js +23 -3
- package/dist/device/audit.js.map +1 -1
- package/dist/device/commands.d.ts +4 -0
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +7 -2
- package/dist/device/commands.js.map +1 -1
- package/dist/device/connection.d.ts +12 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +77 -3
- package/dist/device/connection.js.map +1 -1
- package/dist/device/grant.d.ts +52 -0
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/loopback-catch.d.ts +1 -1
- package/dist/device/loopback-catch.d.ts.map +1 -1
- package/dist/device/loopback-catch.js +5 -30
- package/dist/device/loopback-catch.js.map +1 -1
- package/dist/device/mcp.d.ts.map +1 -1
- package/dist/device/mcp.js +190 -30
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/router.d.ts +52 -0
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +21 -0
- package/dist/device/router.js.map +1 -1
- package/dist/device/sandbox-rounds/auto-backup.d.ts +3 -1
- package/dist/device/sandbox-rounds/auto-backup.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/auto-backup.js +14 -5
- package/dist/device/sandbox-rounds/auto-backup.js.map +1 -1
- package/dist/device/sandbox-rounds/auto-prepare.d.ts +3 -1
- package/dist/device/sandbox-rounds/auto-prepare.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/auto-prepare.js +3 -3
- package/dist/device/sandbox-rounds/auto-prepare.js.map +1 -1
- package/dist/device/sandbox-rounds/in-flight.d.ts.map +1 -0
- package/dist/device/sandbox-rounds/in-flight.js.map +1 -0
- package/dist/device/sandbox-rounds/keeper.d.ts +26 -4
- package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/keeper.js +129 -31
- package/dist/device/sandbox-rounds/keeper.js.map +1 -1
- package/dist/device/sandbox-rounds/probation-watch.d.ts.map +1 -1
- package/dist/device/sandbox-rounds/probation-watch.js.map +1 -1
- package/dist/device/tools/android-parse.d.ts +69 -0
- package/dist/device/tools/android-parse.d.ts.map +1 -0
- package/dist/device/tools/android-parse.js +391 -0
- package/dist/device/tools/android-parse.js.map +1 -0
- package/dist/device/tools/android.d.ts +71 -0
- package/dist/device/tools/android.d.ts.map +1 -0
- package/dist/device/tools/android.js +534 -0
- package/dist/device/tools/android.js.map +1 -0
- package/dist/device/tools/apps.d.ts +3 -3
- package/dist/device/tools/apps.d.ts.map +1 -1
- package/dist/device/tools/apps.js +16 -6
- package/dist/device/tools/apps.js.map +1 -1
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +10 -5
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/device.d.ts +9 -15
- package/dist/device/tools/device.d.ts.map +1 -1
- package/dist/device/tools/device.js +34 -58
- package/dist/device/tools/device.js.map +1 -1
- package/dist/device/tools/elements.d.ts +13 -0
- package/dist/device/tools/elements.d.ts.map +1 -0
- package/dist/device/tools/elements.js +84 -0
- package/dist/device/tools/elements.js.map +1 -0
- package/dist/device/tools/ic-binary.d.ts +1 -0
- package/dist/device/tools/ic-binary.d.ts.map +1 -1
- package/dist/device/tools/ic-binary.js +40 -17
- package/dist/device/tools/ic-binary.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +1 -1
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +9 -8
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.js +1 -1
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/device/tools/view.d.ts +4 -0
- package/dist/device/tools/view.d.ts.map +1 -0
- package/dist/device/tools/view.js +4 -0
- package/dist/device/tools/view.js.map +1 -0
- package/dist/environments/children.js +1 -1
- package/dist/environments/children.js.map +1 -1
- package/dist/environments/commands.js +1 -1
- package/dist/environments/commands.js.map +1 -1
- package/dist/environments/crossing.d.ts +1 -1
- package/dist/environments/crossing.d.ts.map +1 -1
- package/dist/environments/machine.js +1 -1
- package/dist/environments/machine.js.map +1 -1
- package/dist/environments/wsl.d.ts.map +1 -0
- package/dist/environments/wsl.js.map +1 -0
- package/dist/resident.d.ts.map +1 -1
- package/dist/resident.js +14 -8
- package/dist/resident.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +16 -13
- package/dist/status.js.map +1 -1
- package/dist/sync/attach-commands.d.ts +39 -0
- package/dist/sync/attach-commands.d.ts.map +1 -0
- package/dist/sync/attach-commands.js +152 -0
- package/dist/sync/attach-commands.js.map +1 -0
- package/dist/sync/commands.d.ts +8 -4
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +137 -79
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +43 -9
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +86 -41
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/endpoint.d.ts +8 -1
- package/dist/sync/endpoint.d.ts.map +1 -1
- package/dist/sync/endpoint.js +41 -1
- package/dist/sync/endpoint.js.map +1 -1
- package/dist/sync/environment.d.ts +11 -0
- package/dist/sync/environment.d.ts.map +1 -0
- package/dist/sync/environment.js +48 -0
- package/dist/sync/environment.js.map +1 -0
- package/dist/sync/exec.d.ts +1 -0
- package/dist/sync/exec.d.ts.map +1 -1
- package/dist/sync/exec.js +4 -5
- package/dist/sync/exec.js.map +1 -1
- package/dist/sync/folders.d.ts +3 -2
- package/dist/sync/folders.d.ts.map +1 -1
- package/dist/sync/folders.js +55 -2
- package/dist/sync/folders.js.map +1 -1
- package/dist/sync/forget-command.d.ts +22 -0
- package/dist/sync/forget-command.d.ts.map +1 -0
- package/dist/sync/forget-command.js +95 -0
- package/dist/sync/forget-command.js.map +1 -0
- package/dist/sync/git-bridge.d.ts +6 -0
- package/dist/sync/git-bridge.d.ts.map +1 -1
- package/dist/sync/git-bridge.js +64 -1
- package/dist/sync/git-bridge.js.map +1 -1
- package/dist/sync/gone-watch.d.ts +18 -0
- package/dist/sync/gone-watch.d.ts.map +1 -0
- package/dist/sync/gone-watch.js +142 -0
- package/dist/sync/gone-watch.js.map +1 -0
- package/dist/sync/gone.d.ts +22 -0
- package/dist/sync/gone.d.ts.map +1 -0
- package/dist/sync/gone.js +60 -0
- package/dist/sync/gone.js.map +1 -0
- package/dist/sync/local-sandboxes.d.ts +6 -0
- package/dist/sync/local-sandboxes.d.ts.map +1 -0
- package/dist/sync/local-sandboxes.js +26 -0
- package/dist/sync/local-sandboxes.js.map +1 -0
- package/dist/sync/mirror.d.ts +7 -0
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +434 -111
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen.d.ts +50 -18
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +294 -80
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/adopt.d.ts +18 -0
- package/dist/sync/project/adopt.d.ts.map +1 -0
- package/dist/sync/project/adopt.js +86 -0
- package/dist/sync/project/adopt.js.map +1 -0
- package/dist/sync/{project-commands.d.ts → project/project-commands.d.ts} +4 -1
- package/dist/sync/project/project-commands.d.ts.map +1 -0
- package/dist/sync/{project-commands.js → project/project-commands.js} +10 -10
- package/dist/sync/project/project-commands.js.map +1 -0
- package/dist/sync/project/project-delivery.d.ts +23 -0
- package/dist/sync/project/project-delivery.d.ts.map +1 -0
- package/dist/sync/project/project-delivery.js +315 -0
- package/dist/sync/project/project-delivery.js.map +1 -0
- package/dist/sync/{project-files.d.ts → project/project-files.d.ts} +1 -1
- package/dist/sync/project/project-files.d.ts.map +1 -0
- package/dist/sync/{project-files.js → project/project-files.js} +5 -2
- package/dist/sync/project/project-files.js.map +1 -0
- package/dist/sync/{project-local.d.ts → project/project-local.d.ts} +1 -1
- package/dist/sync/project/project-local.d.ts.map +1 -0
- package/dist/sync/{project-local.js → project/project-local.js} +1 -1
- package/dist/sync/project/project-local.js.map +1 -0
- package/dist/sync/{project-remote.d.ts → project/project-remote.d.ts} +1 -1
- package/dist/sync/project/project-remote.d.ts.map +1 -0
- package/dist/sync/{project-remote.js → project/project-remote.js} +1 -1
- package/dist/sync/project/project-remote.js.map +1 -0
- package/dist/sync/{project-transfer.d.ts → project/project-transfer.d.ts} +20 -6
- package/dist/sync/project/project-transfer.d.ts.map +1 -0
- package/dist/sync/{project-transfer.js → project/project-transfer.js} +26 -23
- package/dist/sync/project/project-transfer.js.map +1 -0
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +13 -7
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/restore-points.d.ts +15 -11
- package/dist/sync/restore-points.d.ts.map +1 -1
- package/dist/sync/restore-points.js +25 -24
- package/dist/sync/restore-points.js.map +1 -1
- package/dist/sync/retire.d.ts +14 -0
- package/dist/sync/retire.d.ts.map +1 -0
- package/dist/sync/retire.js +66 -0
- package/dist/sync/retire.js.map +1 -0
- package/dist/sync/siblings.d.ts +27 -0
- package/dist/sync/siblings.d.ts.map +1 -0
- package/dist/sync/siblings.js +112 -0
- package/dist/sync/siblings.js.map +1 -0
- package/dist/sync/ssh.d.ts +1 -0
- package/dist/sync/ssh.d.ts.map +1 -1
- package/dist/sync/ssh.js +37 -23
- package/dist/sync/ssh.js.map +1 -1
- package/dist/sync/tunnel.d.ts +6 -2
- package/dist/sync/tunnel.d.ts.map +1 -1
- package/dist/sync/tunnel.js +45 -48
- package/dist/sync/tunnel.js.map +1 -1
- package/dist/upkeep/doctor.d.ts +5 -0
- package/dist/upkeep/doctor.d.ts.map +1 -0
- package/dist/upkeep/doctor.js +73 -0
- package/dist/upkeep/doctor.js.map +1 -0
- package/dist/upkeep/entry.d.ts +26 -0
- package/dist/upkeep/entry.d.ts.map +1 -0
- package/dist/upkeep/entry.js +2 -0
- package/dist/upkeep/entry.js.map +1 -0
- package/dist/upkeep/login.d.ts +15 -0
- package/dist/upkeep/login.d.ts.map +1 -0
- package/dist/upkeep/login.js +128 -0
- package/dist/upkeep/login.js.map +1 -0
- package/dist/upkeep/manifest.d.ts +3 -0
- package/dist/upkeep/manifest.d.ts.map +1 -0
- package/dist/upkeep/manifest.js +6 -0
- package/dist/upkeep/manifest.js.map +1 -0
- package/dist/upkeep/reconcile.d.ts +45 -0
- package/dist/upkeep/reconcile.d.ts.map +1 -0
- package/dist/upkeep/reconcile.js +159 -0
- package/dist/upkeep/reconcile.js.map +1 -0
- package/dist/upkeep/retention.d.ts +10 -0
- package/dist/upkeep/retention.d.ts.map +1 -0
- package/dist/upkeep/retention.js +71 -0
- package/dist/upkeep/retention.js.map +1 -0
- package/dist/upkeep/retired.d.ts +12 -0
- package/dist/upkeep/retired.d.ts.map +1 -0
- package/dist/upkeep/retired.js +125 -0
- package/dist/upkeep/retired.js.map +1 -0
- package/dist/upkeep/second-ic.d.ts +4 -0
- package/dist/upkeep/second-ic.d.ts.map +1 -0
- package/dist/upkeep/second-ic.js +36 -0
- package/dist/upkeep/second-ic.js.map +1 -0
- package/dist/upkeep/trash.d.ts +9 -0
- package/dist/upkeep/trash.d.ts.map +1 -0
- package/dist/upkeep/trash.js +77 -0
- package/dist/upkeep/trash.js.map +1 -0
- package/dist/watchdog.d.ts +13 -0
- package/dist/watchdog.d.ts.map +1 -0
- package/dist/watchdog.js +38 -0
- package/dist/watchdog.js.map +1 -0
- package/package.json +9 -9
- package/dist/autostart/legacy-autostart.d.ts +0 -4
- package/dist/autostart/legacy-autostart.d.ts.map +0 -1
- package/dist/autostart/legacy-autostart.js +0 -33
- package/dist/autostart/legacy-autostart.js.map +0 -1
- package/dist/device/tools/in-flight.d.ts.map +0 -1
- package/dist/device/tools/in-flight.js.map +0 -1
- package/dist/sync/project-commands.d.ts.map +0 -1
- package/dist/sync/project-commands.js.map +0 -1
- package/dist/sync/project-files.d.ts.map +0 -1
- package/dist/sync/project-files.js.map +0 -1
- package/dist/sync/project-local.d.ts.map +0 -1
- package/dist/sync/project-local.js.map +0 -1
- package/dist/sync/project-remote.d.ts.map +0 -1
- package/dist/sync/project-remote.js.map +0 -1
- package/dist/sync/project-transfer.d.ts.map +0 -1
- package/dist/sync/project-transfer.js.map +0 -1
- package/dist/wsl.d.ts.map +0 -1
- package/dist/wsl.js.map +0 -1
- /package/dist/device/{tools → sandbox-rounds}/in-flight.d.ts +0 -0
- /package/dist/device/{tools → sandbox-rounds}/in-flight.js +0 -0
- /package/dist/{wsl.d.ts → environments/wsl.d.ts} +0 -0
- /package/dist/{wsl.js → environments/wsl.js} +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { errorMessage } from "@intentic/base/errors";
|
|
4
|
+
import { buildCommand } from "@stricli/core";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { agentInDistro } from "../environments/crossing.js";
|
|
7
|
+
import { heldDistros } from "../environments/machine.js";
|
|
8
|
+
import { WINDOWS_SIDE } from "../environments/wsl.js";
|
|
9
|
+
import { readState } from "./config.js";
|
|
10
|
+
import { ensureMutagen } from "./mutagen.js";
|
|
11
|
+
import { answer } from "./project/project-commands.js";
|
|
12
|
+
import { retireSandbox, sandboxesNamed } from "./retire.js";
|
|
13
|
+
const exec = promisify(execFile);
|
|
14
|
+
const DISTRO_TIMEOUT_MS = 120_000;
|
|
15
|
+
const RetiredSchema = z.object({ sandboxId: z.string(), pairings: z.array(z.string()), folders: z.array(z.string()) });
|
|
16
|
+
const DistroAnswerSchema = z.union([
|
|
17
|
+
z.object({ ok: z.literal(true), retired: z.array(RetiredSchema).catch([]) }),
|
|
18
|
+
z.object({ ok: z.literal(false), error: z.string() }),
|
|
19
|
+
]);
|
|
20
|
+
const lastObject = (stdout) => {
|
|
21
|
+
const line = stdout
|
|
22
|
+
.split(/\r?\n/)
|
|
23
|
+
.map((text) => text.trim())
|
|
24
|
+
.findLast((text) => text.startsWith("{"));
|
|
25
|
+
try {
|
|
26
|
+
return line === undefined ? undefined : JSON.parse(line);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export const distroAnswer = (environment, status, stdout, stderr) => {
|
|
33
|
+
const parsed = DistroAnswerSchema.safeParse(lastObject(stdout));
|
|
34
|
+
if (parsed.success) {
|
|
35
|
+
return parsed.data.ok ? { environment, ok: true, retired: parsed.data.retired } : { environment, ok: false, error: parsed.data.error };
|
|
36
|
+
}
|
|
37
|
+
const said = `${stderr}${stdout}`.trim().split(/\r?\n/)[0] ?? "";
|
|
38
|
+
return { environment, ok: false, error: said === "" ? `its agent exited with ${status}` : said };
|
|
39
|
+
};
|
|
40
|
+
const forgetInDistro = async (distro, name) => {
|
|
41
|
+
const { command, args } = agentInDistro(distro, ["sync", "forget", name, "--here", "--json"]);
|
|
42
|
+
return await exec(command, [...args], { timeout: DISTRO_TIMEOUT_MS, windowsHide: true, env: { ...process.env, WSL_UTF8: "1" } }).then((ran) => distroAnswer(`wsl:${distro}`, 0, ran.stdout, ran.stderr), (error) => distroAnswer(`wsl:${distro}`, Number.isInteger(error.code) ? Number(error.code) : 1, error.stdout ?? "", error.stderr ?? errorMessage(error)));
|
|
43
|
+
};
|
|
44
|
+
export const forgetSandbox = async (name, log, { here = false, mutagen: resolve = ensureMutagen } = {}) => {
|
|
45
|
+
const ids = sandboxesNamed((await readState()).pairings, name);
|
|
46
|
+
const mutagen = ids.length === 0 ? undefined : await resolve().catch(() => undefined);
|
|
47
|
+
const retired = [];
|
|
48
|
+
for (const sandboxId of ids) {
|
|
49
|
+
const done = await retireSandbox(sandboxId, log, "forgotten by `intentic-machine sync forget`", { mutagen });
|
|
50
|
+
if (done !== undefined) {
|
|
51
|
+
retired.push(done);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (!WINDOWS_SIDE || here) {
|
|
55
|
+
return { ok: true, retired };
|
|
56
|
+
}
|
|
57
|
+
const environments = await Promise.all((await heldDistros()).map(async (distro) => await forgetInDistro(distro, name)));
|
|
58
|
+
return { ok: true, retired, ...(environments.length === 0 ? {} : { environments }) };
|
|
59
|
+
};
|
|
60
|
+
export const forgotInWords = (name, forgot) => {
|
|
61
|
+
const lines = [
|
|
62
|
+
forgot.retired.length === 0
|
|
63
|
+
? `Nothing paired in this environment is called ${name}.`
|
|
64
|
+
: forgot.retired
|
|
65
|
+
.map((entry) => `Forgot ${entry.sandboxId} (${entry.pairings.join(", ")})${entry.folders.length === 0 ? "" : `; kept ${entry.folders.join(", ")} and its restore points`}.`)
|
|
66
|
+
.join("\n"),
|
|
67
|
+
...(forgot.environments ?? []).map((entry) => entry.ok
|
|
68
|
+
? `${entry.environment}: ${(entry.retired ?? []).length === 0 ? "nothing paired there by that name" : `forgot ${(entry.retired ?? []).map((held) => held.sandboxId).join(", ")}`}.`
|
|
69
|
+
: `${entry.environment}: not asked (${entry.error ?? "no answer"}).`),
|
|
70
|
+
];
|
|
71
|
+
return lines.join("\n");
|
|
72
|
+
};
|
|
73
|
+
export const forget = buildCommand({
|
|
74
|
+
docs: {
|
|
75
|
+
brief: "Retire every pairing of one sandbox now (by its slug or sandbox id), in every environment of this PC: its sessions, forwards, ssh entry and caches go; its folders and restore points stay",
|
|
76
|
+
},
|
|
77
|
+
parameters: {
|
|
78
|
+
flags: {
|
|
79
|
+
json: { kind: "boolean", brief: "Print one JSON object, `ok` first" },
|
|
80
|
+
here: {
|
|
81
|
+
kind: "boolean",
|
|
82
|
+
brief: "Only this environment, not the WSL distros a Windows side keeps (what the Windows side asks each distro)",
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
positional: {
|
|
86
|
+
kind: "tuple",
|
|
87
|
+
parameters: [{ brief: "The sandbox's slug (as ic names it) or its sandbox id", parse: String, placeholder: "sandbox" }],
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
async func(flags, name) {
|
|
91
|
+
const log = (message) => void (flags.json ? this.process.stderr : this.process.stdout).write(`${message}\n`);
|
|
92
|
+
await answer(this, flags.json, async () => await forgetSandbox(name, log, { here: flags.here }), (result) => forgotInWords(name, result));
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=forget-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forget-command.js","sourceRoot":"","sources":["../../src/sync/forget-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,10 @@ export declare const realBridgeExec: BridgeExec;
|
|
|
8
8
|
export declare const listSandboxRepos: (exec: BridgeExec, alias: string) => Promise<string[] | undefined>;
|
|
9
9
|
export declare const bridgeRepo: (exec: BridgeExec, alias: string, localDir: string, repo: string, log: Log) => Promise<void>;
|
|
10
10
|
export declare const runGitBridge: (exec: BridgeExec, pairing: Pairing, log: Log, known: readonly string[] | undefined) => Promise<readonly string[] | undefined>;
|
|
11
|
+
export interface UnbridgeFs {
|
|
12
|
+
readonly subdirs: (dir: string) => Promise<readonly string[]>;
|
|
13
|
+
}
|
|
14
|
+
export declare const bridgedRepoCandidates: (fs: UnbridgeFs, exec: BridgeExec, localDir: string) => Promise<string[]>;
|
|
15
|
+
export declare const unbridgeRepos: (exec: BridgeExec, fs: UnbridgeFs, alias: string, localDir: string) => Promise<number>;
|
|
16
|
+
export declare const realUnbridgeFs: UnbridgeFs;
|
|
11
17
|
//# sourceMappingURL=git-bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-bridge.d.ts","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-bridge.d.ts","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAoB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAS7D,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAKD,eAAO,MAAM,cAAc,EAAE,UAM5B,CAAC;AAYF,eAAO,MAAM,gBAAgB,SAAgB,UAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CASpG,CAAC;AAIF,eAAO,MAAM,UAAU,SAAgB,UAAU,SAAS,MAAM,YAAY,MAAM,QAAQ,MAAM,OAAO,GAAG,KAAG,OAAO,CAAC,IAAI,CAiGxH,CAAC;AAMF,eAAO,MAAM,YAAY,SACf,UAAU,WACP,OAAO,OACX,GAAG,SACD,SAAS,MAAM,EAAE,GAAG,SAAS,KACrC,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAiBvC,CAAC;AA0BF,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,qBAAqB,OAAc,UAAU,QAAQ,UAAU,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAuBhH,CAAC;AAIF,eAAO,MAAM,aAAa,SAAgB,UAAU,MAAM,UAAU,SAAS,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,CAuBrH,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,UAM5B,CAAC"}
|
package/dist/sync/git-bridge.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
+
import { readdir } from "node:fs/promises";
|
|
2
3
|
import { join } from "node:path";
|
|
3
|
-
import { HISTORY_ROOT } from "@intentic/constants";
|
|
4
|
+
import { HISTORY_ROOT, STATE_DIR } from "@intentic/constants";
|
|
4
5
|
import { isProjectPairing } from "./config.js";
|
|
5
6
|
import { runProcess } from "./exec.js";
|
|
6
7
|
import { sshAlias } from "./ssh.js";
|
|
@@ -120,4 +121,66 @@ export const runGitBridge = async (exec, pairing, log, known) => {
|
|
|
120
121
|
}
|
|
121
122
|
return repos;
|
|
122
123
|
};
|
|
124
|
+
const UNBRIDGE_MAX_DIRS = 5_000;
|
|
125
|
+
const NEVER_A_BRIDGED_REPO = new Set([
|
|
126
|
+
"node_modules",
|
|
127
|
+
".git",
|
|
128
|
+
"dist",
|
|
129
|
+
".cache",
|
|
130
|
+
".turbo",
|
|
131
|
+
".next",
|
|
132
|
+
".venv",
|
|
133
|
+
"venv",
|
|
134
|
+
".pnpm-store",
|
|
135
|
+
STATE_DIR,
|
|
136
|
+
"refs",
|
|
137
|
+
]);
|
|
138
|
+
export const bridgedRepoCandidates = async (fs, exec, localDir) => {
|
|
139
|
+
const found = [];
|
|
140
|
+
let frontier = [localDir];
|
|
141
|
+
let visited = 0;
|
|
142
|
+
for (let depth = 0; depth < 4 && frontier.length > 0 && visited < UNBRIDGE_MAX_DIRS; depth += 1) {
|
|
143
|
+
const next = [];
|
|
144
|
+
for (const dir of frontier) {
|
|
145
|
+
for (const name of await fs.subdirs(dir)) {
|
|
146
|
+
visited += 1;
|
|
147
|
+
if (NEVER_A_BRIDGED_REPO.has(name) || visited > UNBRIDGE_MAX_DIRS) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const child = join(dir, name);
|
|
151
|
+
if (exec.exists(join(child, ".git"))) {
|
|
152
|
+
found.push(child);
|
|
153
|
+
}
|
|
154
|
+
next.push(child);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
frontier = next;
|
|
158
|
+
}
|
|
159
|
+
return found;
|
|
160
|
+
};
|
|
161
|
+
export const unbridgeRepos = async (exec, fs, alias, localDir) => {
|
|
162
|
+
let touched = 0;
|
|
163
|
+
for (const dir of await bridgedRepoCandidates(fs, exec, localDir)) {
|
|
164
|
+
const url = (await exec.run("git", ["remote", "get-url", "sandbox"], dir))?.trim();
|
|
165
|
+
if (url === undefined || !url.startsWith(`${alias}:`)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
await exec.run("git", ["remote", "remove", "sandbox"], dir);
|
|
169
|
+
const markers = (await exec.run("git", ["for-each-ref", "--format=%(refname)", "refs/intentic/bridged/"], dir)) ?? "";
|
|
170
|
+
for (const ref of markers
|
|
171
|
+
.split("\n")
|
|
172
|
+
.map((line) => line.trim())
|
|
173
|
+
.filter((line) => line.startsWith("refs/intentic/bridged/"))) {
|
|
174
|
+
await exec.run("git", ["update-ref", "-d", ref], dir);
|
|
175
|
+
}
|
|
176
|
+
touched += 1;
|
|
177
|
+
}
|
|
178
|
+
return touched;
|
|
179
|
+
};
|
|
180
|
+
export const realUnbridgeFs = {
|
|
181
|
+
subdirs: async (dir) => {
|
|
182
|
+
const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
183
|
+
return entries.filter((entry) => entry.isDirectory() && !entry.isSymbolicLink()).map((entry) => entry.name);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
123
186
|
//# sourceMappingURL=git-bridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-bridge.js","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"git-bridge.js","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Log } from "@intentic/local-agent";
|
|
2
|
+
import { type GoneWitness, type Pairing } from "./config.js";
|
|
3
|
+
import { containerState } from "./endpoint.js";
|
|
4
|
+
import { type LocalSandboxes } from "./local-sandboxes.js";
|
|
5
|
+
export interface FateSeams {
|
|
6
|
+
readonly mutagen: string;
|
|
7
|
+
readonly releaseForwards: (sandboxId: string) => Promise<unknown>;
|
|
8
|
+
readonly say: Log;
|
|
9
|
+
}
|
|
10
|
+
export declare const sandboxSaidGone: (seams: FateSeams, sandboxId: string, by: GoneWitness, now?: number) => Promise<void>;
|
|
11
|
+
export declare const sandboxAnswered: (seams: FateSeams, sandboxId: string) => Promise<void>;
|
|
12
|
+
export declare const localSlugsOf: (pairing: Pick<Pairing, "sandboxUrl" | "icSlug" | "container">) => string[];
|
|
13
|
+
export declare const checkKeptHere: (seams: FateSeams, pairings: readonly Pairing[], local: ReadonlySet<string>, read?: () => Promise<LocalSandboxes>, answering?: (sandboxId: string) => boolean) => Promise<void>;
|
|
14
|
+
export declare const checkContainers: (seams: FateSeams, pairings: readonly Pairing[], answering: (sandboxId: string) => boolean, { state, read, }?: {
|
|
15
|
+
readonly state?: typeof containerState;
|
|
16
|
+
readonly read?: () => Promise<LocalSandboxes>;
|
|
17
|
+
}) => Promise<void>;
|
|
18
|
+
//# sourceMappingURL=gone-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gone-watch.d.ts","sourceRoot":"","sources":["../../src/sync/gone-watch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EACH,KAAK,WAAW,EAEhB,KAAK,OAAO,EAOf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,KAAK,cAAc,EAAsB,MAAM,sBAAsB,CAAC;AAU/E,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CACrB;AAkCD,eAAO,MAAM,eAAe,UAAiB,SAAS,aAAa,MAAM,MAAM,WAAW,QAAO,MAAM,KAAgB,OAAO,CAAC,IAAI,CAqBlI,CAAC;AAIF,eAAO,MAAM,eAAe,UAAiB,SAAS,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CASvF,CAAC;AAIF,eAAO,MAAM,YAAY,YAAa,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC,KAAG,MAAM,EAMlG,CAAC;AAkBF,eAAO,MAAM,aAAa,UACf,SAAS,YACN,SAAS,OAAO,EAAE,SACrB,WAAW,CAAC,MAAM,CAAC,SACpB,MAAM,OAAO,CAAC,cAAc,CAAC,cACxB,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,KAC1C,OAAO,CAAC,IAAI,CA6Bd,CAAC;AAKF,eAAO,MAAM,eAAe,UACjB,SAAS,YACN,SAAS,OAAO,EAAE,aACjB,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,qBAItC;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,KAC7F,OAAO,CAAC,IAAI,CAcd,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { SANDBOX_CONTAINER_PREFIX } from "@intentic/sandbox-run";
|
|
2
|
+
import { moveSandboxToSsh, pairingKey, readState, setFileSyncPausedFor, setIcSlug, setSandboxGone, } from "./config.js";
|
|
3
|
+
import { containerState } from "./endpoint.js";
|
|
4
|
+
import { dockerStep, keptHere, localVerdict, retiresAt } from "./gone.js";
|
|
5
|
+
import { readLocalSandboxes } from "./local-sandboxes.js";
|
|
6
|
+
import { pauseRunningSync, resumeWatcherPausedSync } from "./mutagen.js";
|
|
7
|
+
import { pairingSlugs } from "./swap-pause.js";
|
|
8
|
+
const utcDay = (at) => new Date(at).toISOString().slice(0, 10);
|
|
9
|
+
const pauseFor = async (seams, pairing, reason) => {
|
|
10
|
+
if (pairing.fileSyncPausedFor !== undefined || !pauseRunningSync(seams.mutagen, pairing)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
await setFileSyncPausedFor(pairingKey(pairing), reason);
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
const liftPauses = async (seams, pairings, reasons) => {
|
|
17
|
+
let lifted = 0;
|
|
18
|
+
for (const pairing of pairings.filter((held) => held.fileSyncPausedFor !== undefined && reasons.includes(held.fileSyncPausedFor))) {
|
|
19
|
+
resumeWatcherPausedSync(seams.mutagen, pairing);
|
|
20
|
+
await setFileSyncPausedFor(pairingKey(pairing), undefined);
|
|
21
|
+
lifted += 1;
|
|
22
|
+
}
|
|
23
|
+
return lifted;
|
|
24
|
+
};
|
|
25
|
+
const pairingsOf = async (sandboxId) => (await readState()).pairings.filter((pairing) => pairing.sandboxId === sandboxId);
|
|
26
|
+
export const sandboxSaidGone = async (seams, sandboxId, by, now = Date.now()) => {
|
|
27
|
+
const pairings = await pairingsOf(sandboxId);
|
|
28
|
+
const first = pairings[0];
|
|
29
|
+
if (first === undefined) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const marked = pairings.find((pairing) => pairing.goneSince !== undefined);
|
|
33
|
+
if (marked?.goneSince !== undefined) {
|
|
34
|
+
await setSandboxGone(first.sandboxId, { since: marked.goneSince, checkedAt: now, by: marked.goneBy ?? by });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await setSandboxGone(first.sandboxId, { since: now, checkedAt: now, by });
|
|
38
|
+
for (const pairing of pairings) {
|
|
39
|
+
await pauseFor(seams, pairing, "gone");
|
|
40
|
+
}
|
|
41
|
+
await seams.releaseForwards(first.sandboxId);
|
|
42
|
+
const folders = pairings.flatMap((pairing) => (pairing.localDir === undefined ? [] : [pairing.localDir]));
|
|
43
|
+
seams.say(`${first.sandboxId}: ${by === "edge" ? "the platform says this sandbox no longer exists" : "this machine's ic no longer holds this sandbox, in its listing or in its trash"}. Paused its file sync, took its ports off localhost, and stopped dialling and reporting to it; it is asked again every hour. Unless it answers, its pairing is retired on ${utcDay(retiresAt(now))}${folders.length === 0 ? "" : `, keeping ${folders.join(", ")} and ${folders.length === 1 ? "its" : "their"} restore points`}.`);
|
|
44
|
+
};
|
|
45
|
+
export const sandboxAnswered = async (seams, sandboxId) => {
|
|
46
|
+
const pairings = await pairingsOf(sandboxId);
|
|
47
|
+
const first = pairings[0];
|
|
48
|
+
if (first === undefined || !pairings.some((pairing) => pairing.goneSince !== undefined)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await setSandboxGone(first.sandboxId, undefined);
|
|
52
|
+
await liftPauses(seams, pairings, ["gone"]);
|
|
53
|
+
seams.say(`${first.sandboxId}: answers again, so it is not gone after all; its file sync is resumed and its ports come back with this pass.`);
|
|
54
|
+
};
|
|
55
|
+
export const localSlugsOf = (pairing) => [
|
|
56
|
+
...new Set([
|
|
57
|
+
...pairingSlugs(pairing.sandboxUrl),
|
|
58
|
+
...(pairing.icSlug === undefined ? [] : [pairing.icSlug]),
|
|
59
|
+
...(pairing.container?.startsWith(SANDBOX_CONTAINER_PREFIX) === true ? [pairing.container.slice(SANDBOX_CONTAINER_PREFIX.length)] : []),
|
|
60
|
+
]),
|
|
61
|
+
];
|
|
62
|
+
const bySandbox = (pairings) => {
|
|
63
|
+
const grouped = new Map();
|
|
64
|
+
for (const pairing of pairings) {
|
|
65
|
+
grouped.set(pairing.sandboxId, [...(grouped.get(pairing.sandboxId) ?? []), pairing]);
|
|
66
|
+
}
|
|
67
|
+
return grouped;
|
|
68
|
+
};
|
|
69
|
+
export const checkKeptHere = async (seams, pairings, local, read = readLocalSandboxes, answering = () => false) => {
|
|
70
|
+
const asked = [...bySandbox(pairings)].filter(([sandboxId, held]) => local.has(sandboxId) || held.some(keptHere));
|
|
71
|
+
if (asked.length === 0) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const answer = await read();
|
|
75
|
+
if (answer.listed === undefined) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
for (const [sandboxId, held] of asked) {
|
|
79
|
+
const slugs = [...new Set(held.flatMap(localSlugsOf))];
|
|
80
|
+
const verdict = localVerdict(slugs, answer.listed, answer.trashed);
|
|
81
|
+
if (verdict === "here") {
|
|
82
|
+
const slug = slugs.find((candidate) => answer.listed?.includes(candidate));
|
|
83
|
+
if (slug !== undefined && held.some((pairing) => pairing.icSlug !== slug)) {
|
|
84
|
+
await setIcSlug(sandboxId, slug);
|
|
85
|
+
}
|
|
86
|
+
if (held.some((pairing) => pairing.goneBy === "local")) {
|
|
87
|
+
await sandboxAnswered(seams, sandboxId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (verdict === "gone" && held.some(keptHere) && !answering(sandboxId)) {
|
|
91
|
+
await sandboxSaidGone(seams, sandboxId, "local");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
export const checkContainers = async (seams, pairings, answering, { state = containerState, read = readLocalSandboxes, } = {}) => {
|
|
96
|
+
let local;
|
|
97
|
+
const askIc = async () => await (local ??= read());
|
|
98
|
+
for (const [sandboxId, held] of bySandbox(pairings)) {
|
|
99
|
+
const docker = held.find((pairing) => pairing.transport === "docker" && pairing.container !== undefined && pairing.goneSince === undefined);
|
|
100
|
+
if (docker?.container !== undefined) {
|
|
101
|
+
await followContainer(seams, { sandboxId, held, container: docker.container, docker }, await state(docker.container, docker.sandboxUrl), {
|
|
102
|
+
answering: answering(sandboxId),
|
|
103
|
+
askIc,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const followContainer = async (seams, sandbox, container, { answering, askIc }) => {
|
|
109
|
+
const { sandboxId, held, docker } = sandbox;
|
|
110
|
+
if (container === "serves") {
|
|
111
|
+
if ((await liftPauses(seams, held, ["container-missing", "container-trashed"])) > 0) {
|
|
112
|
+
seams.say(`${sandboxId}: ${sandbox.container} runs as this sandbox again; its file sync is resumed.`);
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const local = container === "missing" ? await askIc() : undefined;
|
|
117
|
+
const verdict = local === undefined ? "unknown" : localVerdict([...new Set(held.flatMap(localSlugsOf))], local.listed, local.trashed);
|
|
118
|
+
const step = dockerStep({ container, local: verdict, enrolled: docker.syncToken !== undefined, answering });
|
|
119
|
+
if (step === "gone") {
|
|
120
|
+
await sandboxSaidGone(seams, sandboxId, "local");
|
|
121
|
+
}
|
|
122
|
+
else if (step === "ssh") {
|
|
123
|
+
await moveSandboxToSsh(sandboxId);
|
|
124
|
+
seams.say(`${sandboxId}: ${sandbox.container} is no longer on this machine's Docker engine, but the sandbox still answers at ${docker.sandboxUrl}: its file sync moves to ssh, through the sandbox's own address.`);
|
|
125
|
+
}
|
|
126
|
+
else if (step === "pause-missing" || step === "pause-trashed") {
|
|
127
|
+
await pauseForContainer(seams, sandbox, step === "pause-trashed" ? "container-trashed" : "container-missing");
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const pauseForContainer = async (seams, sandbox, reason) => {
|
|
131
|
+
let paused = 0;
|
|
132
|
+
for (const pairing of sandbox.held) {
|
|
133
|
+
paused += (await pauseFor(seams, pairing, reason)) ? 1 : 0;
|
|
134
|
+
}
|
|
135
|
+
if (paused === 0) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
seams.say(reason === "container-trashed"
|
|
139
|
+
? `${sandbox.sandboxId}: was removed from this machine and sits in ic's trash, so its file sync is paused. \`ic sandbox restore\` brings it back, and its file sync with it.`
|
|
140
|
+
: `${sandbox.sandboxId}: ${sandbox.container} is no longer on this machine's Docker engine and the sandbox is not answering, so its file sync is paused until it is back.`);
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=gone-watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gone-watch.js","sourceRoot":"","sources":["../../src/sync/gone-watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Pairing } from "./config.js";
|
|
2
|
+
export declare const GONE_RETIRE_MS: number;
|
|
3
|
+
export declare const GONE_RECHECK_MS: number;
|
|
4
|
+
export declare const answeredGone: (response: Pick<Response, "ok" | "headers">) => boolean;
|
|
5
|
+
export declare class SandboxGoneError extends Error {
|
|
6
|
+
}
|
|
7
|
+
export type GoneStep = "wait" | "recheck" | "retire";
|
|
8
|
+
export declare const goneStep: (pairing: Pick<Pairing, "goneSince" | "goneCheckedAt">, now: number) => GoneStep | undefined;
|
|
9
|
+
export declare const retiresAt: (since: number) => number;
|
|
10
|
+
export type LocalVerdict = "here" | "trashed" | "gone" | "unknown";
|
|
11
|
+
export declare const localVerdict: (slugs: readonly string[], listed: readonly string[] | undefined, trashed: readonly string[] | undefined) => LocalVerdict;
|
|
12
|
+
export declare const keptHere: (pairing: Pick<Pairing, "transport" | "container" | "icSlug">) => boolean;
|
|
13
|
+
export declare const trashedSlugs: (listing: string) => string[];
|
|
14
|
+
export type ContainerState = "serves" | "stopped" | "missing" | "unknown";
|
|
15
|
+
export type DockerStep = "keep" | "ssh" | "pause-missing" | "pause-trashed" | "gone";
|
|
16
|
+
export declare const dockerStep: (args: {
|
|
17
|
+
readonly container: ContainerState;
|
|
18
|
+
readonly local: LocalVerdict;
|
|
19
|
+
readonly enrolled: boolean;
|
|
20
|
+
readonly answering: boolean;
|
|
21
|
+
}) => DockerStep;
|
|
22
|
+
//# sourceMappingURL=gone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gone.d.ts","sourceRoot":"","sources":["../../src/sync/gone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAuB3C,eAAO,MAAM,cAAc,QAAuB,CAAC;AAInD,eAAO,MAAM,eAAe,QAAc,CAAC;AAI3C,eAAO,MAAM,YAAY,aAAc,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC,KAAG,OAMzE,CAAC;AAGF,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAO9C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,eAAO,MAAM,QAAQ,YAAa,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAAC,OAAO,MAAM,KAAG,QAAQ,GAAG,SAUxG,CAAC;AAGF,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAAgC,CAAC;AAS3E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,eAAO,MAAM,YAAY,UACd,SAAS,MAAM,EAAE,UAChB,SAAS,MAAM,EAAE,GAAG,SAAS,WAC5B,SAAS,MAAM,EAAE,GAAG,SAAS,KACvC,YAWF,CAAC;AAKF,eAAO,MAAM,QAAQ,YAAa,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC,KAAG,OACe,CAAC;AAKxG,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,MAAM,EAI/C,CAAC;AAcP,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,eAAe,GAAG,eAAe,GAAG,MAAM,CAAC;AAErF,eAAO,MAAM,UAAU,SAAU;IAC7B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B,KAAG,UAiBH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EDGE_VERDICT_HEADER, edgeVerdictIsFinal, edgeVerdictOf } from "@intentic/sandbox-contract";
|
|
2
|
+
export const GONE_RETIRE_MS = 7 * 24 * 60 * 60_000;
|
|
3
|
+
export const GONE_RECHECK_MS = 60 * 60_000;
|
|
4
|
+
export const answeredGone = (response) => {
|
|
5
|
+
if (response.ok) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const verdict = edgeVerdictOf(response.headers.get(EDGE_VERDICT_HEADER));
|
|
9
|
+
return verdict !== undefined && edgeVerdictIsFinal(verdict);
|
|
10
|
+
};
|
|
11
|
+
export class SandboxGoneError extends Error {
|
|
12
|
+
}
|
|
13
|
+
export const goneStep = (pairing, now) => {
|
|
14
|
+
if (pairing.goneSince === undefined) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const asked = pairing.goneCheckedAt ?? pairing.goneSince;
|
|
18
|
+
const current = now - asked < GONE_RECHECK_MS;
|
|
19
|
+
if (now - pairing.goneSince >= GONE_RETIRE_MS) {
|
|
20
|
+
return current ? "retire" : "recheck";
|
|
21
|
+
}
|
|
22
|
+
return current ? "wait" : "recheck";
|
|
23
|
+
};
|
|
24
|
+
export const retiresAt = (since) => since + GONE_RETIRE_MS;
|
|
25
|
+
export const localVerdict = (slugs, listed, trashed) => {
|
|
26
|
+
if (listed === undefined) {
|
|
27
|
+
return "unknown";
|
|
28
|
+
}
|
|
29
|
+
if (slugs.some((slug) => listed.includes(slug))) {
|
|
30
|
+
return "here";
|
|
31
|
+
}
|
|
32
|
+
if (trashed === undefined) {
|
|
33
|
+
return "unknown";
|
|
34
|
+
}
|
|
35
|
+
return slugs.some((slug) => trashed.includes(slug)) ? "trashed" : "gone";
|
|
36
|
+
};
|
|
37
|
+
export const keptHere = (pairing) => (pairing.transport === "docker" && pairing.container !== undefined) || pairing.icSlug !== undefined;
|
|
38
|
+
export const trashedSlugs = (listing) => listing.split(/\r?\n/).flatMap((line) => {
|
|
39
|
+
const match = /^removed\s+(\S+)\s+\(/.exec(line.trim());
|
|
40
|
+
return match?.[1] === undefined ? [] : [match[1]];
|
|
41
|
+
});
|
|
42
|
+
export const dockerStep = (args) => {
|
|
43
|
+
if (args.container !== "missing") {
|
|
44
|
+
return "keep";
|
|
45
|
+
}
|
|
46
|
+
switch (args.local) {
|
|
47
|
+
case "here":
|
|
48
|
+
return "keep";
|
|
49
|
+
case "trashed":
|
|
50
|
+
return "pause-trashed";
|
|
51
|
+
case "gone":
|
|
52
|
+
if (!args.answering) {
|
|
53
|
+
return "gone";
|
|
54
|
+
}
|
|
55
|
+
return args.enrolled ? "ssh" : "pause-missing";
|
|
56
|
+
case "unknown":
|
|
57
|
+
return args.enrolled && args.answering ? "ssh" : "pause-missing";
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=gone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gone.js","sourceRoot":"","sources":["../../src/sync/gone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-sandboxes.d.ts","sourceRoot":"","sources":["../../src/sync/local-sandboxes.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAiBD,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,cAAc,CAWjE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { homeDir } from "@intentic/local-agent";
|
|
4
|
+
import { icCandidates } from "../device/tools/ic-binary.js";
|
|
5
|
+
import { fleet } from "../device/tools/sandboxes.js";
|
|
6
|
+
import { trashedSlugs } from "./gone.js";
|
|
7
|
+
const exec = promisify(execFile);
|
|
8
|
+
const LIST_TIMEOUT_MS = 60_000;
|
|
9
|
+
const icListingText = async () => {
|
|
10
|
+
for (const binary of icCandidates(process.platform, homeDir())) {
|
|
11
|
+
const answer = await exec(binary, ["sandbox", "list"], { timeout: LIST_TIMEOUT_MS, windowsHide: true, maxBuffer: 4 * 1024 * 1024 }).then((ran) => ({ ran: true, stdout: ran.stdout }), (error) => (error.code === "ENOENT" ? undefined : { ran: false, stdout: "" }));
|
|
12
|
+
if (answer !== undefined) {
|
|
13
|
+
return answer.ran ? answer.stdout : undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
};
|
|
18
|
+
export const readLocalSandboxes = async () => {
|
|
19
|
+
const listed = await fleet({ current: false }).then((rows) => rows.map((row) => row.slug), () => undefined);
|
|
20
|
+
if (listed === undefined) {
|
|
21
|
+
return { listed: undefined, trashed: undefined };
|
|
22
|
+
}
|
|
23
|
+
const text = await icListingText();
|
|
24
|
+
return { listed, trashed: text === undefined ? undefined : trashedSlugs(text) };
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=local-sandboxes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-sandboxes.js","sourceRoot":"","sources":["../../src/sync/local-sandboxes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOzC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAGjC,MAAM,eAAe,GAAG,MAAM,CAAC;AAQ/B,MAAM,aAAa,GAAG,KAAK,IAAiC,EAAE;IAC1D,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CACpI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EACrD,CAAC,KAA4B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAc,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAChH,CAAC;QACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAClD,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAA6B,EAAE;IAElE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EACrC,GAAG,EAAE,CAAC,SAAS,CAClB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AACpF,CAAC,CAAC"}
|
package/dist/sync/mirror.d.ts
CHANGED
|
@@ -31,8 +31,15 @@ export declare const recordedForwards: (pairings: readonly Pick<Pairing, "sandbo
|
|
|
31
31
|
export declare const handOver: (holding: Map<number, string>, sandboxId: string, mirrored: readonly MirroredPort[]) => void;
|
|
32
32
|
export declare const othersHolding: (holding: ReadonlyMap<number, string>, sandboxId: string) => ReadonlyMap<number, string>;
|
|
33
33
|
export declare const busyLastPass: (pairing: Pick<Pairing, "skippedPorts">) => ReadonlySet<number>;
|
|
34
|
+
export declare const reportCarriers: <T extends {
|
|
35
|
+
readonly pairing: Pick<Pairing, "sandboxId" | "syncToken" | "goneSince">;
|
|
36
|
+
}>(dialed: readonly T[], unsupported: ReadonlySet<string>) => T[];
|
|
34
37
|
export declare const unpreparedSetups: (pairings: readonly Pairing[], prepared: ReadonlySet<string>) => Pairing[];
|
|
35
38
|
export declare const markPrepared: (prepared: Set<string>, pairing: Pairing) => void;
|
|
39
|
+
export declare const readyToPrepare: (setups: readonly Pairing[], firstCopyAhead: (pairing: Pairing) => boolean, announce: (pairing: Pairing) => Promise<boolean>) => Promise<Pairing[]>;
|
|
40
|
+
export declare const pollingPairings: (pairings: readonly Pick<Pairing, "sandboxId" | "key">[]) => ReadonlySet<string>;
|
|
41
|
+
export declare const WATCHER_STALL_MS: number;
|
|
42
|
+
export declare const watcherStalled: (progress: number, now: number) => boolean;
|
|
36
43
|
export declare const runMirrorWatch: (log: Log) => Promise<void>;
|
|
37
44
|
export declare const retirePairingMirror: (mutagen: string, sandboxId: string) => Promise<number>;
|
|
38
45
|
export declare const retireMirroredPort: (mutagen: string, sandboxId: string, port: number) => Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mirror.d.ts","sourceRoot":"","sources":["../../src/sync/mirror.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"mirror.d.ts","sourceRoot":"","sources":["../../src/sync/mirror.ts"],"names":[],"mappings":"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"}
|