@intentic/machine 1.342.0 → 1.344.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 +44 -5
- package/dist/device/grant.d.ts +17 -0
- package/dist/device/grant.d.ts.map +1 -1
- package/dist/device/router.d.ts +17 -0
- package/dist/device/router.d.ts.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +22 -1
- package/dist/status.js.map +1 -1
- package/dist/sync/commands.d.ts +2 -1
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +22 -63
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/config.d.ts +19 -1
- package/dist/sync/config.d.ts.map +1 -1
- package/dist/sync/config.js +19 -4
- package/dist/sync/config.js.map +1 -1
- package/dist/sync/exec.d.ts +17 -0
- package/dist/sync/exec.d.ts.map +1 -1
- package/dist/sync/exec.js +56 -2
- package/dist/sync/exec.js.map +1 -1
- package/dist/sync/git-bridge.d.ts +35 -3
- package/dist/sync/git-bridge.d.ts.map +1 -1
- package/dist/sync/git-bridge.js +201 -16
- package/dist/sync/git-bridge.js.map +1 -1
- package/dist/sync/low-disk.d.ts +25 -0
- package/dist/sync/low-disk.d.ts.map +1 -0
- package/dist/sync/low-disk.js +98 -0
- package/dist/sync/low-disk.js.map +1 -0
- package/dist/sync/mirror.d.ts.map +1 -1
- package/dist/sync/mirror.js +64 -20
- package/dist/sync/mirror.js.map +1 -1
- package/dist/sync/mutagen-env.d.ts +9 -0
- package/dist/sync/mutagen-env.d.ts.map +1 -0
- package/dist/sync/mutagen-env.js +25 -0
- package/dist/sync/mutagen-env.js.map +1 -0
- package/dist/sync/mutagen-move.d.ts +53 -0
- package/dist/sync/mutagen-move.d.ts.map +1 -0
- package/dist/sync/mutagen-move.js +206 -0
- package/dist/sync/mutagen-move.js.map +1 -0
- package/dist/sync/mutagen.d.ts +9 -5
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +58 -44
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/project/project-remote.d.ts.map +1 -1
- package/dist/sync/project/project-remote.js +2 -1
- package/dist/sync/project/project-remote.js.map +1 -1
- package/dist/sync/report.d.ts.map +1 -1
- package/dist/sync/report.js +13 -3
- package/dist/sync/report.js.map +1 -1
- package/dist/sync/uninstall.d.ts +9 -0
- package/dist/sync/uninstall.d.ts.map +1 -0
- package/dist/sync/uninstall.js +75 -0
- package/dist/sync/uninstall.js.map +1 -0
- package/dist/upkeep/login.d.ts +0 -9
- package/dist/upkeep/login.d.ts.map +1 -1
- package/dist/upkeep/login.js +12 -59
- package/dist/upkeep/login.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutagen-env.d.ts","sourceRoot":"","sources":["../../src/sync/mutagen-env.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,cAAc,QAA2B,CAAC;AAGvD,eAAO,MAAM,UAAU,UAAU,MAAM,CAAC,UAAU,KAAiB,MAAM,CAAC,UAIxE,CAAC;AAIH,eAAO,MAAM,gBAAgB,YAAa,MAAM,KAAG,OAA+E,CAAC;AAKnI,eAAO,MAAM,QAAQ,YAAa,MAAM,QAAQ,MAAM,CAAC,UAAU,KAAG,MAAM,CAAC,UAAU,GAAG,SACvB,CAAC;AAWlE,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAAgC,CAAC;AAEtF,eAAO,MAAM,UAAU,WAAkB,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAAiF,CAAC;AAG3J,eAAO,MAAM,YAAY,SAAgB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAqF,CAAC;AAGvJ,eAAO,MAAM,gBAAgB,SAAgB,MAAM,KAAG,OAAO,CAAC,IAAI,CAKjE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { basename, join } from "node:path";
|
|
2
|
+
import { pathExists, readJsonIfExists, writeFileAtomic } from "@intentic/base/fs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { baseDir } from "../config.js";
|
|
5
|
+
export const mutagenDataDir = join(baseDir, "mutagen");
|
|
6
|
+
export const mutagenEnv = (base = process.env) => ({
|
|
7
|
+
...base,
|
|
8
|
+
MUTAGEN_DATA_DIRECTORY: mutagenDataDir,
|
|
9
|
+
MUTAGEN_DISABLE_AUTOSTART: "1",
|
|
10
|
+
});
|
|
11
|
+
export const isMutagenCommand = (command) => /^mutagen(?:\.exe)?$/i.test(basename(command.replaceAll("\\", "/")));
|
|
12
|
+
export const childEnv = (command, env) => env ?? (isMutagenCommand(command) ? mutagenEnv() : undefined);
|
|
13
|
+
const movedPath = join(baseDir, "mutagen-moved.json");
|
|
14
|
+
const MovedSchema = z.object({ movedAt: z.string(), paused: z.array(z.string()) });
|
|
15
|
+
const writeMoved = async (moved) => await writeFileAtomic(movedPath, `${JSON.stringify(moved)}\n`);
|
|
16
|
+
export const movedAlready = async () => await pathExists(movedPath);
|
|
17
|
+
export const recordMove = async (paused) => await writeMoved({ movedAt: new Date().toISOString(), paused: [...paused] });
|
|
18
|
+
export const carriedPause = async (name) => (await readJsonIfExists(movedPath, MovedSchema))?.paused.includes(name) === true;
|
|
19
|
+
export const dropCarriedPause = async (name) => {
|
|
20
|
+
const moved = await readJsonIfExists(movedPath, MovedSchema);
|
|
21
|
+
if (moved?.paused.includes(name) === true) {
|
|
22
|
+
await writeMoved({ ...moved, paused: moved.paused.filter((held) => held !== name) });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=mutagen-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutagen-env.js","sourceRoot":"","sources":["../../src/sync/mutagen-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgBvC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAGvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAI,GAAsB,OAAO,CAAC,GAAG,EAAqB,EAAE,CAAC,CAAC;IACrF,GAAG,IAAI;IACP,sBAAsB,EAAE,cAAc;IACtC,yBAAyB,EAAE,GAAG;CACjC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAKnI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,GAAuB,EAAiC,EAAE,CAChG,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAKlE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AACtD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAGnF,MAAM,UAAU,GAAG,KAAK,EAAE,KAAY,EAAiB,EAAE,CAAC,MAAM,eAAe,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAEzH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,IAAsB,EAAE,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,MAAyB,EAAiB,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAG3J,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAGvJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;IAClE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7D,IAAI,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type Log } from "@intentic/local-agent";
|
|
2
|
+
export interface StoredSession {
|
|
3
|
+
readonly name?: string;
|
|
4
|
+
readonly identifier?: string;
|
|
5
|
+
readonly labels?: Readonly<Record<string, string>>;
|
|
6
|
+
readonly paused?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface MovingSession {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly target: string;
|
|
11
|
+
readonly identifier: string | undefined;
|
|
12
|
+
readonly paused: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface MovePlan {
|
|
15
|
+
readonly sync: readonly MovingSession[];
|
|
16
|
+
readonly terminateForwards: readonly string[];
|
|
17
|
+
readonly othersRemain: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const movePlan: (sync: readonly StoredSession[], forwards: readonly StoredSession[], owner: string) => MovePlan;
|
|
20
|
+
export declare const stopsOldDaemon: (plan: Pick<MovePlan, "othersRemain">, startedByMove: boolean) => boolean;
|
|
21
|
+
export interface MutagenCall {
|
|
22
|
+
readonly ok: boolean;
|
|
23
|
+
readonly stdout: string;
|
|
24
|
+
readonly stderr: string;
|
|
25
|
+
}
|
|
26
|
+
export interface MoveSeams {
|
|
27
|
+
readonly shared: (args: readonly string[], autostart?: boolean) => MutagenCall;
|
|
28
|
+
readonly own: (args: readonly string[]) => boolean;
|
|
29
|
+
readonly startOwn: () => boolean;
|
|
30
|
+
readonly ownSessions: (names: readonly string[]) => readonly string[] | undefined;
|
|
31
|
+
readonly carry: (identifier: string) => Promise<boolean>;
|
|
32
|
+
readonly restartTheirs: () => boolean;
|
|
33
|
+
readonly settle: () => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
interface Opened {
|
|
36
|
+
readonly sync: StoredSession[];
|
|
37
|
+
readonly forwards: StoredSession[];
|
|
38
|
+
readonly startedByMove: boolean;
|
|
39
|
+
readonly displaced: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare const openShared: (seams: MoveSeams) => Opened | undefined;
|
|
42
|
+
export interface Moved {
|
|
43
|
+
readonly carried: readonly MovingSession[];
|
|
44
|
+
readonly remade: readonly MovingSession[];
|
|
45
|
+
readonly ended: boolean;
|
|
46
|
+
readonly resumed: boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare const moveSessions: (seams: MoveSeams, plan: MovePlan) => Promise<Moved>;
|
|
49
|
+
export declare const registrationIsOurs: (registration: string | undefined, own: string, platform: NodeJS.Platform) => boolean;
|
|
50
|
+
export declare const carryState: (from: string, to: string, identifier: string) => Promise<boolean>;
|
|
51
|
+
export declare const moveOffSharedMutagen: (mutagen: string, log: Log, seams?: MoveSeams) => Promise<void>;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=mutagen-move.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutagen-move.d.ts","sourceRoot":"","sources":["../../src/sync/mutagen-move.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiC,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAsChF,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC7B;AAID,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAE9C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAClC;AAMD,eAAO,MAAM,QAAQ,SAAU,SAAS,aAAa,EAAE,YAAY,SAAS,aAAa,EAAE,SAAS,MAAM,KAAG,QAa5G,CAAC;AAIF,eAAO,MAAM,cAAc,SAAU,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,iBAAiB,OAAO,KAAG,OAA8C,CAAC;AAG7I,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC;IAE/E,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;IAEnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC;IAEjC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAElF,QAAQ,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzD,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IAEtC,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAmBD,UAAU,MAAM;IACZ,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,UAAU,UAAW,SAAS,KAAG,MAAM,GAAG,SActD,CAAC;AAIF,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC7B;AA0DD,eAAO,MAAM,YAAY,UAAiB,SAAS,QAAQ,QAAQ,KAAG,OAAO,CAAC,KAAK,CAOlF,CAAC;AAIF,eAAO,MAAM,kBAAkB,iBAAkB,MAAM,GAAG,SAAS,OAAO,MAAM,YAAY,MAAM,CAAC,QAAQ,KAAG,OAM7G,CAAC;AAkBF,eAAO,MAAM,UAAU,SAAgB,MAAM,MAAM,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,OAAO,CAiB9F,CAAC;AA6CF,eAAO,MAAM,oBAAoB,YAAmB,MAAM,OAAO,GAAG,UAAU,SAAS,KAAG,OAAO,CAAC,IAAI,CAyCrG,CAAC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { copyFile, mkdir, rm } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { setTimeout as sleep } from "node:timers/promises";
|
|
5
|
+
import { readTextIfExists } from "@intentic/base/fs";
|
|
6
|
+
import { parseJsonOr } from "@intentic/base/json";
|
|
7
|
+
import { clearWindowsRunValue, homeDir } from "@intentic/local-agent";
|
|
8
|
+
import { readRegistryValue } from "../windows-registry.js";
|
|
9
|
+
import { sessionOwner } from "./environment.js";
|
|
10
|
+
import { runProcessSync } from "./exec.js";
|
|
11
|
+
import { existingSyncSessions, MUTAGEN_CALL_TIMEOUT_MS, MUTAGEN_RUN_VALUE, ownershipOf, ownMutagenPath, resolveOnPath, saysDaemonDown, saysVersionMismatch, SESSION_PREFIX, startMutagenDaemon, } from "./mutagen.js";
|
|
12
|
+
import { movedAlready, mutagenDataDir, recordMove } from "./mutagen-env.js";
|
|
13
|
+
const ours = (session, owner) => session.name?.startsWith(SESSION_PREFIX) === true && ownershipOf(session.labels, owner) !== "theirs";
|
|
14
|
+
export const movePlan = (sync, forwards, owner) => {
|
|
15
|
+
const mine = sync.filter((session) => ours(session, owner));
|
|
16
|
+
const mineForwards = forwards.filter((session) => ours(session, owner));
|
|
17
|
+
return {
|
|
18
|
+
sync: mine.map((session) => ({
|
|
19
|
+
name: session.name,
|
|
20
|
+
target: session.identifier ?? session.name,
|
|
21
|
+
identifier: session.identifier,
|
|
22
|
+
paused: session.paused === true,
|
|
23
|
+
})),
|
|
24
|
+
terminateForwards: mineForwards.map((session) => session.identifier ?? session.name),
|
|
25
|
+
othersRemain: mine.length < sync.length || mineForwards.length < forwards.length,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export const stopsOldDaemon = (plan, startedByMove) => !plan.othersRemain || startedByMove;
|
|
29
|
+
const listingOf = (call) => {
|
|
30
|
+
if (!call.ok) {
|
|
31
|
+
return { kind: saysVersionMismatch(call.stderr) ? "mismatch" : saysDaemonDown(call.stderr) ? "down" : "unanswered" };
|
|
32
|
+
}
|
|
33
|
+
const parsed = parseJsonOr(call.stdout, undefined);
|
|
34
|
+
return parsed === undefined ? { kind: "unanswered" } : { kind: "listed", sessions: parsed ?? [] };
|
|
35
|
+
};
|
|
36
|
+
const listed = (seams, kind, autostart = false) => listingOf(seams.shared([kind, "list", "--template", "{{json .}}"], autostart));
|
|
37
|
+
export const openShared = (seams) => {
|
|
38
|
+
const first = listed(seams, "sync");
|
|
39
|
+
let sync = first;
|
|
40
|
+
if (first.kind === "mismatch") {
|
|
41
|
+
seams.shared(["daemon", "stop"]);
|
|
42
|
+
}
|
|
43
|
+
if (first.kind === "mismatch" || first.kind === "down") {
|
|
44
|
+
sync = listed(seams, "sync", true);
|
|
45
|
+
}
|
|
46
|
+
const forwards = sync.kind === "listed" ? listed(seams, "forward") : undefined;
|
|
47
|
+
if (sync.kind !== "listed" || forwards?.kind !== "listed") {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return { sync: sync.sessions, forwards: forwards.sessions, startedByMove: first.kind !== "listed", displaced: first.kind === "mismatch" };
|
|
51
|
+
};
|
|
52
|
+
const carrySessions = async (seams, plan) => {
|
|
53
|
+
const running = plan.sync.filter((session) => !session.paused);
|
|
54
|
+
const still = running.length === 0 || seams.shared(["sync", "pause", ...running.map((session) => session.target)]).ok;
|
|
55
|
+
if (!still || plan.sync.length === 0 || !seams.startOwn()) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const names = plan.sync.map((session) => session.name);
|
|
59
|
+
const held = new Set(seams.ownSessions(names) ?? names);
|
|
60
|
+
const carried = [];
|
|
61
|
+
for (const session of plan.sync.filter((candidate) => !held.has(candidate.name))) {
|
|
62
|
+
if (session.identifier !== undefined && (await seams.carry(session.identifier))) {
|
|
63
|
+
carried.push(session);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return carried;
|
|
67
|
+
};
|
|
68
|
+
const RELOAD_TRIES = 20;
|
|
69
|
+
const loadCarried = async (seams, carried) => {
|
|
70
|
+
if (carried.length === 0) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
seams.own(["daemon", "stop"]);
|
|
74
|
+
for (let tries = 0; tries < RELOAD_TRIES && seams.own(["sync", "list"]); tries += 1) {
|
|
75
|
+
await seams.settle();
|
|
76
|
+
}
|
|
77
|
+
seams.startOwn();
|
|
78
|
+
const resume = carried.filter((session) => !session.paused).map((session) => session.name);
|
|
79
|
+
if (resume.length === 0) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
for (let tries = 0; tries < RELOAD_TRIES; tries += 1) {
|
|
83
|
+
if (seams.own(["sync", "resume", ...resume])) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
await seams.settle();
|
|
87
|
+
seams.startOwn();
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
};
|
|
91
|
+
export const moveSessions = async (seams, plan) => {
|
|
92
|
+
const carried = await carrySessions(seams, plan);
|
|
93
|
+
const ended = (plan.sync.length === 0 || seams.shared(["sync", "terminate", ...plan.sync.map((session) => session.target)]).ok) &&
|
|
94
|
+
(plan.terminateForwards.length === 0 || seams.shared(["forward", "terminate", ...plan.terminateForwards]).ok);
|
|
95
|
+
const resumed = await loadCarried(seams, carried);
|
|
96
|
+
return { carried, remade: plan.sync.filter((session) => !carried.includes(session)), ended, resumed };
|
|
97
|
+
};
|
|
98
|
+
export const registrationIsOurs = (registration, own, platform) => {
|
|
99
|
+
if (registration === undefined) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const fold = (text) => (platform === "win32" ? text.replaceAll("/", "\\").toLowerCase() : text);
|
|
103
|
+
return fold(registration).includes(fold(own));
|
|
104
|
+
};
|
|
105
|
+
const sharedDataDir = () => process.env["MUTAGEN_DATA_DIRECTORY"] ?? join(homeDir(), ".mutagen");
|
|
106
|
+
const sharedEnv = (autostart) => {
|
|
107
|
+
const env = { ...process.env };
|
|
108
|
+
delete env["MUTAGEN_DISABLE_AUTOSTART"];
|
|
109
|
+
return autostart ? env : { ...env, MUTAGEN_DISABLE_AUTOSTART: "1" };
|
|
110
|
+
};
|
|
111
|
+
const STATE_FOLDERS = ["sessions", "archives"];
|
|
112
|
+
export const carryState = async (from, to, identifier) => {
|
|
113
|
+
if (!existsSync(join(from, "sessions", identifier))) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
const present = STATE_FOLDERS.filter((folder) => existsSync(join(from, folder, identifier)));
|
|
117
|
+
try {
|
|
118
|
+
for (const folder of present) {
|
|
119
|
+
await mkdir(join(to, folder), { recursive: true });
|
|
120
|
+
await copyFile(join(from, folder, identifier), join(to, folder, identifier));
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
await Promise.all(STATE_FOLDERS.map(async (folder) => await rm(join(to, folder, identifier), { force: true })));
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
const realSeams = (mutagen, from) => ({
|
|
130
|
+
shared: (args, autostart = false) => {
|
|
131
|
+
const ran = runProcessSync(mutagen, args, { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, env: sharedEnv(autostart) });
|
|
132
|
+
return { ok: ran.status === 0, stdout: ran.stdout, stderr: ran.stderr };
|
|
133
|
+
},
|
|
134
|
+
own: (args) => runProcessSync(mutagen, args, { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true }).status === 0,
|
|
135
|
+
startOwn: () => startMutagenDaemon(mutagen),
|
|
136
|
+
ownSessions: (names) => existingSyncSessions(mutagen, names),
|
|
137
|
+
carry: async (identifier) => await carryState(from, mutagenDataDir, identifier),
|
|
138
|
+
settle: async () => await sleep(500),
|
|
139
|
+
restartTheirs: () => {
|
|
140
|
+
const theirs = resolveOnPath("mutagen");
|
|
141
|
+
if (theirs === undefined || theirs.toLowerCase() === ownMutagenPath().toLowerCase()) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return runProcessSync(theirs, ["daemon", "start"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, env: sharedEnv(true), quiet: true }).status === 0;
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
const WINDOWS_RUN_KEY = "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run";
|
|
148
|
+
const LAUNCH_AGENT = join(homeDir(), "Library", "LaunchAgents", "io.mutagen.mutagen.plist");
|
|
149
|
+
const mutagenRegistration = async () => {
|
|
150
|
+
if (process.platform === "win32") {
|
|
151
|
+
return (await readRegistryValue(WINDOWS_RUN_KEY, "Mutagen").catch(() => undefined))?.data;
|
|
152
|
+
}
|
|
153
|
+
return process.platform === "darwin" ? await readTextIfExists(LAUNCH_AGENT) : undefined;
|
|
154
|
+
};
|
|
155
|
+
const retireOldRegistrations = async (seams, log) => {
|
|
156
|
+
if (process.platform === "win32") {
|
|
157
|
+
clearWindowsRunValue(MUTAGEN_RUN_VALUE);
|
|
158
|
+
}
|
|
159
|
+
if (registrationIsOurs(await mutagenRegistration(), ownMutagenPath(), process.platform)) {
|
|
160
|
+
seams.shared(["daemon", "unregister"]);
|
|
161
|
+
log("removed the sign-in entry that started this agent's Mutagen over the shared data directory.");
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
export const moveOffSharedMutagen = async (mutagen, log, seams) => {
|
|
165
|
+
if (await movedAlready()) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const from = sharedDataDir();
|
|
169
|
+
if (!existsSync(from) || from === mutagenDataDir) {
|
|
170
|
+
await recordMove([]);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const acts = seams ?? realSeams(mutagen, from);
|
|
174
|
+
const opened = openShared(acts);
|
|
175
|
+
if (opened === undefined) {
|
|
176
|
+
log(`the Mutagen state this agent kept in ${from} could not be read, so its sessions there are left until its next start.`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const plan = movePlan(opened.sync, opened.forwards, sessionOwner());
|
|
180
|
+
const moved = await moveSessions(acts, plan);
|
|
181
|
+
if (stopsOldDaemon(plan, opened.startedByMove)) {
|
|
182
|
+
acts.shared(["daemon", "stop"]);
|
|
183
|
+
if (!plan.othersRemain) {
|
|
184
|
+
await retireOldRegistrations(acts, log);
|
|
185
|
+
}
|
|
186
|
+
else if (opened.displaced && !acts.restartTheirs()) {
|
|
187
|
+
log(`the Mutagen daemon over ${from} was another version than this agent's and is stopped; your own Mutagen starts it again the next time you use it.`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (process.platform === "win32") {
|
|
191
|
+
clearWindowsRunValue(MUTAGEN_RUN_VALUE);
|
|
192
|
+
}
|
|
193
|
+
if (!moved.resumed) {
|
|
194
|
+
log(`this agent's Mutagen daemon did not resume the carried sessions that were running, so they are paused: \`intentic-machine sync resume\` resumes them.`);
|
|
195
|
+
}
|
|
196
|
+
if (!moved.ended) {
|
|
197
|
+
log(`this agent's sessions in ${from} did not all end, so moving off it is tried again at the next start.`);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const count = plan.sync.length + plan.terminateForwards.length;
|
|
201
|
+
if (count > 0) {
|
|
202
|
+
log(`moved off Mutagen's shared data directory (${from}): carried ${moved.carried.length} of this agent's ${plan.sync.length} sync session(s) to ${mutagenDataDir} with what they had synced${moved.remade.length > 0 ? `, the rest are made again there` : ""}, and ended its ${plan.terminateForwards.length} forward(s), which are made again${plan.othersRemain ? ". Everything else in it is left running" : ""}.`);
|
|
203
|
+
}
|
|
204
|
+
await recordMove(moved.remade.filter((session) => session.paused).map((session) => session.name));
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=mutagen-move.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutagen-move.js","sourceRoot":"","sources":["../../src/sync/mutagen-move.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/mutagen.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type SpawnSyncReturns } from "node:child_process";
|
|
2
2
|
import type { DeviceConflict } from "@intentic/sandbox-contract/schemas/devices";
|
|
3
|
-
import
|
|
3
|
+
import type { Log } from "@intentic/local-agent";
|
|
4
4
|
import { type Pairing } from "./config.js";
|
|
5
5
|
import { type SandboxEndpoint } from "./endpoint.js";
|
|
6
6
|
import { type ResidueOutcome } from "./residue.js";
|
|
7
7
|
import { type SymlinkMode } from "./symlinks.js";
|
|
8
8
|
export declare const MUTAGEN_CALL_TIMEOUT_MS = 60000;
|
|
9
9
|
export declare const MUTAGEN_CREATE_TIMEOUT_MS: number;
|
|
10
|
+
export declare const SESSION_PREFIX = "intentic-";
|
|
10
11
|
export declare const OWNER_LABEL = "intentic-owner";
|
|
11
12
|
export type SessionKind = "sync" | "state" | "forward";
|
|
12
13
|
export interface SessionLabels {
|
|
@@ -33,7 +34,11 @@ export declare const parseForwardNames: (listed: string, sandboxId?: string, own
|
|
|
33
34
|
export declare const parseOrphanForwardNames: (listed: string, keptSandboxIds: readonly string[], owner?: string) => string[];
|
|
34
35
|
export declare const parseOrphanSyncNames: (listed: string, keep: readonly string[], owner?: string) => string[];
|
|
35
36
|
export declare const sayDaemonEventsTo: (log: Log | undefined) => void;
|
|
37
|
+
export declare const saysVersionMismatch: (stderr: string) => boolean;
|
|
38
|
+
export declare const saysDaemonDown: (stderr: string) => boolean;
|
|
36
39
|
export declare const restartsDaemonFor: (stderr: string, now: number, lastRestart: number) => boolean;
|
|
40
|
+
export declare const startsDaemonFor: (stderr: string, watcher: boolean, now: number, lastStart: number) => boolean;
|
|
41
|
+
export declare const startMutagenDaemon: (mutagen: string) => boolean;
|
|
37
42
|
export declare const ourForwardSessions: (mutagen: string, sandboxId?: string) => string[] | undefined;
|
|
38
43
|
export declare const parseForwardPorts: (listed: string, sandboxId: string, owner?: string) => number[];
|
|
39
44
|
export declare const forwardedPorts: (mutagen: string, sandboxId: string) => number[] | undefined;
|
|
@@ -130,6 +135,8 @@ export declare const readSessionState: (mutagen: string, name: string) => Sessio
|
|
|
130
135
|
export declare const sessionStateOf: (session: LiveSession | undefined) => SessionState;
|
|
131
136
|
export declare const existingSyncSessions: (mutagen: string, names: readonly string[]) => string[] | undefined;
|
|
132
137
|
export declare const pauseRunningSync: (mutagen: string, pairing: Pairing) => boolean;
|
|
138
|
+
export declare const pauseRunningSessions: (mutagen: string, pairing: Pairing) => readonly string[] | undefined;
|
|
139
|
+
export declare const resumeNamedSessions: (mutagen: string, names: readonly string[]) => boolean;
|
|
133
140
|
export declare const resumeSwapPausedSync: (mutagen: string, pairing: Pairing) => boolean;
|
|
134
141
|
export declare const resumeAutoPausedSync: (mutagen: string, pairing: Pairing) => boolean;
|
|
135
142
|
export declare const resumeWatcherPausedSync: (mutagen: string, pairing: Pairing) => boolean;
|
|
@@ -154,14 +161,11 @@ export declare const transportAnswers: (pairing: Pick<Pairing, "sandboxId" | "sa
|
|
|
154
161
|
export declare const terminationTargets: (sessions: readonly Pick<LiveSession, "identifier">[], name: string) => string[];
|
|
155
162
|
export declare const healDerivedConflicts: (mutagen: string, pairing: Pairing, log: Log, asked?: boolean) => Promise<ResidueOutcome>;
|
|
156
163
|
export declare const retireOrphanSessions: (mutagen: string, pairings: readonly Pairing[], log: Log, owner?: string) => void;
|
|
164
|
+
export declare const resolveOnPath: (command: string) => string | undefined;
|
|
157
165
|
export declare const ownMutagenPath: () => string;
|
|
158
|
-
export declare const isOwnMutagen: (mutagen: string, own?: string, platform?: NodeJS.Platform) => boolean;
|
|
159
|
-
export declare const userMutagenOnPath: () => string | undefined;
|
|
160
166
|
export declare const ensureMutagen: () => Promise<string>;
|
|
161
167
|
export declare const runMutagenAsync: (mutagen: string, args: readonly string[], log: Log) => Promise<void>;
|
|
162
168
|
export declare const runMutagen: (mutagen: string, args: string[]) => SpawnSyncReturns<Buffer>;
|
|
163
169
|
export declare const MUTAGEN_RUN_VALUE = "IntenticMutagenDaemon";
|
|
164
|
-
export declare const registerMutagenAutostart: (mutagen: string, launcher: CliLauncher, log: Log) => void;
|
|
165
|
-
export declare const unregisterMutagenAutostart: (mutagen: string) => void;
|
|
166
170
|
export {};
|
|
167
171
|
//# sourceMappingURL=mutagen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutagen.d.ts","sourceRoot":"","sources":["../../src/sync/mutagen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AAStE,OAAO,KAAK,EAAE,cAAc,EAA8C,MAAM,4CAA4C,CAAC;AAC7H,OAAO,
|
|
1
|
+
{"version":3,"file":"mutagen.d.ts","sourceRoot":"","sources":["../../src/sync/mutagen.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/mutagen.js
CHANGED
|
@@ -7,14 +7,14 @@ import { errorMessage } from "@intentic/base/errors";
|
|
|
7
7
|
import { plural } from "@intentic/base/format";
|
|
8
8
|
import { parseJsonOr } from "@intentic/base/json";
|
|
9
9
|
import { STATE_DIR, WORKSPACE_ROOT } from "@intentic/constants";
|
|
10
|
-
import { clearWindowsRunValue, quotedCommandLine, setWindowsRunValue, stubCommand, windowsLaunchStub, } from "@intentic/local-agent";
|
|
11
10
|
import { binDir } from "../config.js";
|
|
12
11
|
import { archToken, download, exe, osToken, renameIfPresent } from "../release.js";
|
|
13
12
|
import { adoptFolder } from "./project/adopt.js";
|
|
14
|
-
import { clearAdoptFolder, isProjectPairing,
|
|
13
|
+
import { clearAdoptFolder, isProjectPairing, pairingKey, pairingRemoteDir, projectDirection } from "./config.js";
|
|
15
14
|
import { dockerEndpointAnswers, liveIdentity, mutagenForwardUrl, mutagenUrl, pairingEndpoint } from "./endpoint.js";
|
|
16
15
|
import { labelValue, sessionOwner } from "./environment.js";
|
|
17
16
|
import { runProcess, runProcessSync } from "./exec.js";
|
|
17
|
+
import { carriedPause, dropCarriedPause, mutagenEnv } from "./mutagen-env.js";
|
|
18
18
|
import { projectShell, realProjectRunner, sandboxCopy } from "./project/project-remote.js";
|
|
19
19
|
import { clearConflictResidue, sweepDerivedResidue } from "./residue.js";
|
|
20
20
|
import { BACKUP_IGNORES, ignoresFor, mutagenSshPath, sanitizeId, sshTransportAnswers } from "./ssh.js";
|
|
@@ -22,7 +22,7 @@ import { deviceSymlinks } from "./symlinks.js";
|
|
|
22
22
|
const MUTAGEN_VERSION = "0.18.1";
|
|
23
23
|
export const MUTAGEN_CALL_TIMEOUT_MS = 60_000;
|
|
24
24
|
export const MUTAGEN_CREATE_TIMEOUT_MS = 5 * 60_000;
|
|
25
|
-
const SESSION_PREFIX = "intentic-";
|
|
25
|
+
export const SESSION_PREFIX = "intentic-";
|
|
26
26
|
export const OWNER_LABEL = "intentic-owner";
|
|
27
27
|
const SANDBOX_LABEL = "intentic-sandbox";
|
|
28
28
|
const KIND_LABEL = "intentic-kind";
|
|
@@ -100,21 +100,34 @@ const LIST_TEMPLATE = `{{range .}}{{.Name}}@{{index .Labels "${OWNER_LABEL}"}}@{
|
|
|
100
100
|
const VERSION_MISMATCH = /version mismatch/i;
|
|
101
101
|
const DAEMON_RESTART_MS = 30 * 60_000;
|
|
102
102
|
let daemonRestartedAt = Number.NEGATIVE_INFINITY;
|
|
103
|
+
const DAEMON_DOWN = /unable to connect to daemon|is the daemon running/i;
|
|
104
|
+
const DAEMON_START_MS = 60_000;
|
|
105
|
+
let daemonStartedAt = Number.NEGATIVE_INFINITY;
|
|
103
106
|
let daemonLog;
|
|
104
107
|
export const sayDaemonEventsTo = (log) => {
|
|
105
108
|
daemonLog = log;
|
|
106
109
|
};
|
|
107
|
-
export const
|
|
110
|
+
export const saysVersionMismatch = (stderr) => VERSION_MISMATCH.test(stderr);
|
|
111
|
+
export const saysDaemonDown = (stderr) => DAEMON_DOWN.test(stderr) && !saysVersionMismatch(stderr);
|
|
112
|
+
export const restartsDaemonFor = (stderr, now, lastRestart) => saysVersionMismatch(stderr) && now - lastRestart >= DAEMON_RESTART_MS;
|
|
113
|
+
export const startsDaemonFor = (stderr, watcher, now, lastStart) => watcher && saysDaemonDown(stderr) && now - lastStart >= DAEMON_START_MS;
|
|
114
|
+
export const startMutagenDaemon = (mutagen) => runProcessSync(mutagen, ["daemon", "start"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true }).status === 0;
|
|
108
115
|
const recoverDaemon = (mutagen, stderr) => {
|
|
109
116
|
const now = Date.now();
|
|
117
|
+
if (startsDaemonFor(stderr, daemonLog !== undefined, now, daemonStartedAt)) {
|
|
118
|
+
daemonStartedAt = now;
|
|
119
|
+
const started = startMutagenDaemon(mutagen);
|
|
120
|
+
daemonLog?.(`the Mutagen daemon was not running; ${started ? "started it again" : "could not start it, and will try again shortly"}.`);
|
|
121
|
+
return started;
|
|
122
|
+
}
|
|
110
123
|
if (!restartsDaemonFor(stderr, now, daemonRestartedAt)) {
|
|
111
124
|
return false;
|
|
112
125
|
}
|
|
113
126
|
daemonRestartedAt = now;
|
|
114
127
|
runProcessSync(mutagen, ["daemon", "stop"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true });
|
|
115
|
-
const started =
|
|
116
|
-
daemonLog?.(`the Mutagen daemon running here is another version than this agent's (${mutagen}); ${started
|
|
117
|
-
return started
|
|
128
|
+
const started = startMutagenDaemon(mutagen);
|
|
129
|
+
daemonLog?.(`the Mutagen daemon running here is another version than this agent's (${mutagen}); ${started ? "restarted it with this agent's copy" : "could not restart it"}. Its sessions are kept on disk and come back with it.`);
|
|
130
|
+
return started;
|
|
118
131
|
};
|
|
119
132
|
const listCall = (mutagen, args) => {
|
|
120
133
|
const run = () => runProcessSync(mutagen, args, { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS });
|
|
@@ -317,7 +330,34 @@ export const pauseRunningSync = (mutagen, pairing) => {
|
|
|
317
330
|
const result = runProcessSync(mutagen, ["sync", "pause", ...names], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true });
|
|
318
331
|
return result.status === 0;
|
|
319
332
|
};
|
|
333
|
+
export const pauseRunningSessions = (mutagen, pairing) => {
|
|
334
|
+
if (pairing.mode !== "sync") {
|
|
335
|
+
return [];
|
|
336
|
+
}
|
|
337
|
+
const names = existingSyncSessions(mutagen, syncSessionNames(pairing));
|
|
338
|
+
if (names === undefined) {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
const running = names.filter((name) => readSessionState(mutagen, name).paused !== true);
|
|
342
|
+
if (running.length === 0) {
|
|
343
|
+
return [];
|
|
344
|
+
}
|
|
345
|
+
return runProcessSync(mutagen, ["sync", "pause", ...running], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true }).status === 0 ? running : undefined;
|
|
346
|
+
};
|
|
347
|
+
export const resumeNamedSessions = (mutagen, names) => {
|
|
348
|
+
if (names.length === 0) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
const held = existingSyncSessions(mutagen, names);
|
|
352
|
+
if (held === undefined) {
|
|
353
|
+
return false;
|
|
354
|
+
}
|
|
355
|
+
return held.length === 0 || runProcessSync(mutagen, ["sync", "resume", ...held], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true }).status === 0;
|
|
356
|
+
};
|
|
320
357
|
export const resumeSwapPausedSync = (mutagen, pairing) => {
|
|
358
|
+
if (pairing.fileSyncLowDisk !== undefined) {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
321
361
|
const names = existingSyncSessions(mutagen, syncSessionNames(pairing));
|
|
322
362
|
if (names === undefined || names.length === 0) {
|
|
323
363
|
return false;
|
|
@@ -325,7 +365,7 @@ export const resumeSwapPausedSync = (mutagen, pairing) => {
|
|
|
325
365
|
return runProcessSync(mutagen, ["sync", "resume", ...names], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true }).status === 0;
|
|
326
366
|
};
|
|
327
367
|
export const resumeAutoPausedSync = (mutagen, pairing) => {
|
|
328
|
-
if (pairing.mode !== "sync" || pairing.fileSyncAutoPaused !== true) {
|
|
368
|
+
if (pairing.mode !== "sync" || pairing.fileSyncAutoPaused !== true || pairing.fileSyncLowDisk !== undefined) {
|
|
329
369
|
return false;
|
|
330
370
|
}
|
|
331
371
|
const names = existingSyncSessions(mutagen, syncSessionNames(pairing));
|
|
@@ -536,9 +576,16 @@ const convergeSession = async (mutagen, spec, log, answers, relabels) => {
|
|
|
536
576
|
: `${spec.name}: the running sync session does not match this build's rules (its ignores, its folder, which way it syncs, or what it does with symbolic links): recreating it so they apply, as ${spec.mode}. This starts the comparison from scratch.`);
|
|
537
577
|
await runProcess(mutagen, ["sync", "terminate", ...terminationTargets(sessions, spec.name)], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS });
|
|
538
578
|
}
|
|
539
|
-
await
|
|
579
|
+
await createSession(mutagen, spec, live, log);
|
|
540
580
|
return true;
|
|
541
581
|
};
|
|
582
|
+
const createSession = async (mutagen, spec, replaced, log) => {
|
|
583
|
+
const carried = replaced === undefined && (await carriedPause(spec.name));
|
|
584
|
+
await runMutagenAsync(mutagen, mutagenCreateArgs(spec, replaced?.paused === true || carried), log);
|
|
585
|
+
if (carried) {
|
|
586
|
+
await dropCarriedPause(spec.name);
|
|
587
|
+
}
|
|
588
|
+
};
|
|
542
589
|
const SWEEP_TIMEOUT_MS = 60_000;
|
|
543
590
|
export const healDerivedConflicts = async (mutagen, pairing, log, asked = false) => {
|
|
544
591
|
const idle = { removed: [], standing: 0 };
|
|
@@ -597,7 +644,7 @@ const extractTarball = async (tarball) => {
|
|
|
597
644
|
}
|
|
598
645
|
};
|
|
599
646
|
const PATH_LOOKUP_TIMEOUT_MS = 10_000;
|
|
600
|
-
const resolveOnPath = (command) => {
|
|
647
|
+
export const resolveOnPath = (command) => {
|
|
601
648
|
const whereExe = join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "where.exe");
|
|
602
649
|
const found = process.platform === "win32"
|
|
603
650
|
? spawnSync(whereExe, [command], { encoding: "utf8", windowsHide: true, timeout: PATH_LOOKUP_TIMEOUT_MS })
|
|
@@ -607,14 +654,6 @@ const resolveOnPath = (command) => {
|
|
|
607
654
|
return first === undefined || first === "" || !existsSync(first) ? undefined : first;
|
|
608
655
|
};
|
|
609
656
|
export const ownMutagenPath = () => join(binDir, `mutagen${exe}`);
|
|
610
|
-
export const isOwnMutagen = (mutagen, own = ownMutagenPath(), platform = process.platform) => {
|
|
611
|
-
const fold = (path) => (platform === "win32" ? path.replaceAll("/", "\\").toLowerCase() : path);
|
|
612
|
-
return fold(mutagen) === fold(own);
|
|
613
|
-
};
|
|
614
|
-
export const userMutagenOnPath = () => {
|
|
615
|
-
const found = resolveOnPath("mutagen");
|
|
616
|
-
return found === undefined || isOwnMutagen(found) ? undefined : found;
|
|
617
|
-
};
|
|
618
657
|
export const ensureMutagen = async () => {
|
|
619
658
|
const dest = ownMutagenPath();
|
|
620
659
|
if ((await installedVersion(dest, ["version"])) === MUTAGEN_VERSION) {
|
|
@@ -656,7 +695,7 @@ export const runMutagenAsync = async (mutagen, args, log) => {
|
|
|
656
695
|
throw new Error(`mutagen ${args[0] ?? ""} exited with code ${result.status}`);
|
|
657
696
|
};
|
|
658
697
|
export const runMutagen = (mutagen, args) => {
|
|
659
|
-
const result = spawnSync(mutagen, args, { stdio: "inherit", windowsHide: true, timeout: MUTAGEN_CREATE_TIMEOUT_MS });
|
|
698
|
+
const result = spawnSync(mutagen, args, { stdio: "inherit", windowsHide: true, timeout: MUTAGEN_CREATE_TIMEOUT_MS, env: mutagenEnv() });
|
|
660
699
|
if (result.error !== undefined) {
|
|
661
700
|
throw result.error;
|
|
662
701
|
}
|
|
@@ -666,29 +705,4 @@ export const runMutagen = (mutagen, args) => {
|
|
|
666
705
|
return result;
|
|
667
706
|
};
|
|
668
707
|
export const MUTAGEN_RUN_VALUE = "IntenticMutagenDaemon";
|
|
669
|
-
export const registerMutagenAutostart = (mutagen, launcher, log) => {
|
|
670
|
-
if (process.platform === "linux") {
|
|
671
|
-
return;
|
|
672
|
-
}
|
|
673
|
-
try {
|
|
674
|
-
const stub = windowsLaunchStub(launcher);
|
|
675
|
-
if (stub === undefined) {
|
|
676
|
-
runMutagen(mutagen, ["daemon", "register"]);
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
|
-
runProcessSync(mutagen, ["daemon", "unregister"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true });
|
|
680
|
-
setWindowsRunValue(MUTAGEN_RUN_VALUE, quotedCommandLine(stubCommand(stub, mutagenDaemonLogPath, [mutagen, "daemon", "start"])));
|
|
681
|
-
}
|
|
682
|
-
catch (error) {
|
|
683
|
-
log(`Could not register the Mutagen daemon for autostart (${errorMessage(error)}); it still runs while you're signed in.`);
|
|
684
|
-
}
|
|
685
|
-
};
|
|
686
|
-
export const unregisterMutagenAutostart = (mutagen) => {
|
|
687
|
-
if (process.platform === "win32") {
|
|
688
|
-
clearWindowsRunValue(MUTAGEN_RUN_VALUE);
|
|
689
|
-
}
|
|
690
|
-
if (process.platform !== "linux") {
|
|
691
|
-
runProcessSync(mutagen, ["daemon", "unregister"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true });
|
|
692
|
-
}
|
|
693
|
-
};
|
|
694
708
|
//# sourceMappingURL=mutagen.js.map
|