@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.
Files changed (58) hide show
  1. package/README.md +44 -5
  2. package/dist/device/grant.d.ts +17 -0
  3. package/dist/device/grant.d.ts.map +1 -1
  4. package/dist/device/router.d.ts +17 -0
  5. package/dist/device/router.d.ts.map +1 -1
  6. package/dist/status.d.ts.map +1 -1
  7. package/dist/status.js +22 -1
  8. package/dist/status.js.map +1 -1
  9. package/dist/sync/commands.d.ts +2 -1
  10. package/dist/sync/commands.d.ts.map +1 -1
  11. package/dist/sync/commands.js +22 -63
  12. package/dist/sync/commands.js.map +1 -1
  13. package/dist/sync/config.d.ts +19 -1
  14. package/dist/sync/config.d.ts.map +1 -1
  15. package/dist/sync/config.js +19 -4
  16. package/dist/sync/config.js.map +1 -1
  17. package/dist/sync/exec.d.ts +17 -0
  18. package/dist/sync/exec.d.ts.map +1 -1
  19. package/dist/sync/exec.js +56 -2
  20. package/dist/sync/exec.js.map +1 -1
  21. package/dist/sync/git-bridge.d.ts +35 -3
  22. package/dist/sync/git-bridge.d.ts.map +1 -1
  23. package/dist/sync/git-bridge.js +201 -16
  24. package/dist/sync/git-bridge.js.map +1 -1
  25. package/dist/sync/low-disk.d.ts +25 -0
  26. package/dist/sync/low-disk.d.ts.map +1 -0
  27. package/dist/sync/low-disk.js +98 -0
  28. package/dist/sync/low-disk.js.map +1 -0
  29. package/dist/sync/mirror.d.ts.map +1 -1
  30. package/dist/sync/mirror.js +64 -20
  31. package/dist/sync/mirror.js.map +1 -1
  32. package/dist/sync/mutagen-env.d.ts +9 -0
  33. package/dist/sync/mutagen-env.d.ts.map +1 -0
  34. package/dist/sync/mutagen-env.js +25 -0
  35. package/dist/sync/mutagen-env.js.map +1 -0
  36. package/dist/sync/mutagen-move.d.ts +53 -0
  37. package/dist/sync/mutagen-move.d.ts.map +1 -0
  38. package/dist/sync/mutagen-move.js +206 -0
  39. package/dist/sync/mutagen-move.js.map +1 -0
  40. package/dist/sync/mutagen.d.ts +9 -5
  41. package/dist/sync/mutagen.d.ts.map +1 -1
  42. package/dist/sync/mutagen.js +58 -44
  43. package/dist/sync/mutagen.js.map +1 -1
  44. package/dist/sync/project/project-remote.d.ts.map +1 -1
  45. package/dist/sync/project/project-remote.js +2 -1
  46. package/dist/sync/project/project-remote.js.map +1 -1
  47. package/dist/sync/report.d.ts.map +1 -1
  48. package/dist/sync/report.js +13 -3
  49. package/dist/sync/report.js.map +1 -1
  50. package/dist/sync/uninstall.d.ts +9 -0
  51. package/dist/sync/uninstall.d.ts.map +1 -0
  52. package/dist/sync/uninstall.js +75 -0
  53. package/dist/sync/uninstall.js.map +1 -0
  54. package/dist/upkeep/login.d.ts +0 -9
  55. package/dist/upkeep/login.d.ts.map +1 -1
  56. package/dist/upkeep/login.js +12 -59
  57. package/dist/upkeep/login.js.map +1 -1
  58. 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":"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"}
@@ -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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"}
@@ -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 { type CliLauncher, type Log } from "@intentic/local-agent";
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":"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"}
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,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAIjD,OAAO,EAAsC,KAAK,OAAO,EAAkD,MAAM,aAAa,CAAC;AAC/H,OAAO,EAAuF,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAK1I,OAAO,EAAwB,KAAK,cAAc,EAAuB,MAAM,cAAc,CAAC;AAE9F,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjE,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAK9C,eAAO,MAAM,yBAAyB,QAAa,CAAC;AAGpD,eAAO,MAAM,cAAc,cAAc,CAAC;AAQ1C,eAAO,MAAM,WAAW,mBAAmB,CAAC;AAK5C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,cAAe,MAAM,QAAQ,WAAW,UAAS,MAAM,KAAoB,aAInG,CAAC;AAIH,eAAO,MAAM,SAAS,WAAY,aAAa,GAAG,SAAS,KAAG,MAAM,EAG+E,CAAC;AAIpJ,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,YAAY,CAAC;AACzD,eAAO,MAAM,WAAW,WAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,SAAS,MAAM,KAAG,SAGjG,CAAC;AAOF,eAAO,MAAM,WAAW,QAAS,MAAM,KAAG,MAQzC,CAAC;AAIF,eAAO,MAAM,iBAAiB,QAAS,MAAM,KAAG,MAAqC,CAAC;AAOtF,eAAO,MAAM,gBAAgB,YAAa,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,KAAK,GAAG,cAAc,CAAC,KAAG,SAAS,MAAM,EAM1H,CAAC;AAKF,eAAO,MAAM,kBAAkB,cAAe,MAAM,QAAQ,MAAM,KAAG,MAA6D,CAAC;AAMnI,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAID,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,aAAa,EAOnD,CAAC;AAmBX,eAAO,MAAM,kBAAkB,WAAY,MAAM,SAAS,SAAS,MAAM,EAAE,UAAU,MAAM,SAAS,MAAM,KAAG,MAAM,EAMlH,CAAC;AAOF,eAAO,MAAM,iBAAiB,WAAY,MAAM,cAAc,MAAM,UAAU,MAAM,KAAG,MAAM,EAO5F,CAAC;AAIF,eAAO,MAAM,uBAAuB,WAAY,MAAM,kBAAkB,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAMjH,CAAC;AAKF,eAAO,MAAM,oBAAoB,WAAY,MAAM,QAAQ,SAAS,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAGpG,CAAC;AA4BF,eAAO,MAAM,iBAAiB,QAAS,GAAG,GAAG,SAAS,KAAG,IAExD,CAAC;AAKF,eAAO,MAAM,mBAAmB,WAAY,MAAM,KAAG,OAAwC,CAAC;AAE9F,eAAO,MAAM,cAAc,WAAY,MAAM,KAAG,OAAmE,CAAC;AAIpH,eAAO,MAAM,iBAAiB,WAAY,MAAM,OAAO,MAAM,eAAe,MAAM,KAAG,OACZ,CAAC;AAI1E,eAAO,MAAM,eAAe,WAAY,MAAM,WAAW,OAAO,OAAO,MAAM,aAAa,MAAM,KAAG,OACxB,CAAC;AAI5E,eAAO,MAAM,kBAAkB,YAAa,MAAM,KAAG,OAC6D,CAAC;AA4CnH,eAAO,MAAM,kBAAkB,YAAa,MAAM,cAAc,MAAM,KAAG,MAAM,EAAE,GAAG,SAGnF,CAAC;AAIF,eAAO,MAAM,iBAAiB,WAAY,MAAM,aAAa,MAAM,UAAU,MAAM,KAAG,MAAM,EAItF,CAAC;AAGP,eAAO,MAAM,cAAc,YAAa,MAAM,aAAa,MAAM,KAAG,MAAM,EAAE,GAAG,SAG9E,CAAC;AAKF,eAAO,MAAM,kBAAkB,SAAU;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC/C,KAAG,MAAM,EAQT,CAAC;AAKF,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAIpC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAGnC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAI/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAG7B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC/C;AAGD,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,CAAC;AAOlF,eAAO,MAAM,QAAQ,YAAa,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,KAAG,cAAc,GAAG,cACiB,CAAC;AAI9G,eAAO,MAAM,WAAW,YAAa,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,YAAY,WAAW,UAAU,MAAM,KAAG,eAWpH,CAAC;AA8CH,eAAO,MAAM,iBAAiB,SAAU,eAAe,UAAU,OAAO,KAAG,MAAM,EA6BhF,CAAC;AAWF,UAAU,SAAS;IACf,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,UAAU,UAAU;IAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CACnC;AAGD,UAAU,YAAY;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAChD;AAID,UAAU,SAAS;IACf,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACrC;AAGD,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC9B;AAKD,eAAO,MAAM,YAAY,QAAS,YAAY,KAAG,MAAoE,CAAC;AAEtH,MAAM,WAAW,WAAW;IAGxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAE3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAI7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAEhF,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAE7C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD;AAcD,eAAO,MAAM,eAAe,YAAa,MAAM,KAAG,WAAW,EAAE,GAAG,SAAsC,CAAC;AAuBzG,eAAO,MAAM,cAAc,aAAc,SAAS,WAAW,EAAE,KAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAQhG,CAAC;AAKF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAgErC,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CACjD;AAID,eAAO,MAAM,oBAAoB,YAAa,MAAM,QAAQ,MAAM,KAAG,gBAAgB,GAAG,YAAY,GAAG,SAOtG,CAAC;AAKF,eAAO,MAAM,YAAY,YAAmB,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAE9E,CAAC;AAEF,eAAO,MAAM,aAAa,YACb,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,mBAAmB,CAAC,KAC9D;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,GAAG,SAM/C,CAAC;AAIF,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;CAC3D;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,QAAQ,MAAM,KAAG,YAGb,CAAC;AAGrD,eAAO,MAAM,cAAc,YAAa,WAAW,GAAG,SAAS,KAAG,YAajE,CAAC;AAMF,eAAO,MAAM,oBAAoB,YAAa,MAAM,SAAS,SAAS,MAAM,EAAE,KAAG,MAAM,EAAE,GAAG,SAO3F,CAAC;AAMF,eAAO,MAAM,gBAAgB,YAAa,MAAM,WAAW,OAAO,KAAG,OAYpE,CAAC;AAKF,eAAO,MAAM,oBAAoB,YAAa,MAAM,WAAW,OAAO,KAAG,SAAS,MAAM,EAAE,GAAG,SAa5F,CAAC;AAGF,eAAO,MAAM,mBAAmB,YAAa,MAAM,SAAS,SAAS,MAAM,EAAE,KAAG,OAS/E,CAAC;AAIF,eAAO,MAAM,oBAAoB,YAAa,MAAM,WAAW,OAAO,KAAG,OASxE,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,WAAW,OAAO,KAAG,OAUxE,CAAC;AAIF,eAAO,MAAM,uBAAuB,YAAa,MAAM,WAAW,OAAO,KAAG,OAAiD,CAAC;AAO9H,eAAO,MAAM,QAAQ,YAAa,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,eAAe,KAAG,OAW9F,CAAC;AAIF,eAAO,MAAM,QAAQ,YAAa,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,KAAG,MAAwC,CAAC;AAQvG,eAAO,MAAM,aAAa,YAAa,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,eAAe,CAAC,MAAM,CAAC,KAAG,MAC5C,CAAC;AAE3E,eAAO,MAAM,eAAe,YAAa,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,eAAe,CAAC,MAAM,CAAC,KAAG,MACN,CAAC;AAOnH,eAAO,MAAM,kBAAkB,YAAa,WAAW,QAAQ,eAAe,KAAG,OAYhF,CAAC;AASF,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC;CAChC;AAED,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,aAW7C,CAAC;AASF,eAAO,MAAM,iBAAiB,YAAmB,MAAM,WAAW,OAAO,OAAO,GAAG,aAAY,aAAa,KAAiB,OAAO,CAAC,OAAO,CAuB3I,CAAC;AAkCF,eAAO,MAAM,YAAY,YAAa,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,YAAY,WAAW,UAAU,MAAM,KAAG,SAAS,eAAe,EAGxD,CAAC;AAKxF,eAAO,MAAM,mBAAmB,YAAa,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC,QAAQ,SAAS,MAAM,EAAE,KAAG,MAAM,EAClB,CAAC;AAkB5G,eAAO,MAAM,eAAe,aAAc,SAAS,WAAW,EAAE,KAAG,MAAM,EACiC,CAAC;AAuB3G,eAAO,MAAM,YAAY,aAAc,SAAS,WAAW,EAAE,QAAQ,eAAe,KAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAStH,CAAC;AAeF,eAAO,MAAM,YAAY,SAAU,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,SAAS,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,KAAG,OACd,CAAC;AA0DlG,eAAO,MAAM,gBAAgB,YAAa,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC,KAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAKxI,CAAC;AAIF,eAAO,MAAM,kBAAkB,aAAc,SAAS,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,QAAQ,MAAM,KAAG,MAAM,EAG9F,CAAC;AAyFjB,eAAO,MAAM,oBAAoB,YAAmB,MAAM,WAAW,OAAO,OAAO,GAAG,sBAAkB,OAAO,CAAC,cAAc,CAmB7H,CAAC;AAQF,eAAO,MAAM,oBAAoB,YAAa,MAAM,YAAY,SAAS,OAAO,EAAE,OAAO,GAAG,UAAS,MAAM,KAAoB,IAiC9H,CAAC;AA8BF,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,MAAM,GAAG,SAUxD,CAAC;AAGF,eAAO,MAAM,cAAc,QAAO,MAAuC,CAAC;AAQ1E,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,MAAM,CAgBpD,CAAC;AAsBF,eAAO,MAAM,eAAe,YAAmB,MAAM,QAAQ,SAAS,MAAM,EAAE,OAAO,GAAG,KAAG,OAAO,CAAC,IAAI,CAUtG,CAAC;AAMF,eAAO,MAAM,UAAU,YAAa,MAAM,QAAQ,MAAM,EAAE,KAAG,gBAAgB,CAAC,MAAM,CASnF,CAAC;AAOF,eAAO,MAAM,iBAAiB,0BAA0B,CAAC"}
@@ -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, mutagenDaemonLogPath, pairingKey, pairingRemoteDir, projectDirection } from "./config.js";
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 restartsDaemonFor = (stderr, now, lastRestart) => VERSION_MISMATCH.test(stderr) && now - lastRestart >= DAEMON_RESTART_MS;
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 = runProcessSync(mutagen, ["daemon", "start"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS, quiet: true });
116
- daemonLog?.(`the Mutagen daemon running here is another version than this agent's (${mutagen}); ${started.status === 0 ? "restarted it with this agent's copy" : "could not restart it"}. Its sessions are kept on disk and come back with it.`);
117
- return started.status === 0;
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 runMutagenAsync(mutagen, mutagenCreateArgs(spec, live?.paused === true), log);
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