@intentic/machine 1.343.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
@@ -6,7 +6,6 @@ export declare const sshDir: string;
6
6
  export declare const sshConfigName = "intentic-machine.conf";
7
7
  export declare const sshConfigPath: string;
8
8
  export declare const userSshConfigPath: string;
9
- export declare const mutagenDaemonLogPath: string;
10
9
  export declare const mirrorHeartbeatPath: string;
11
10
  export interface MirroredPort {
12
11
  readonly port: number;
@@ -51,6 +50,22 @@ export interface Pairing {
51
50
  readonly fileSyncPausedFor?: WatcherPause | undefined;
52
51
  readonly icSlug?: string | undefined;
53
52
  readonly adoptFolder?: true | undefined;
53
+ readonly bridgeHolds?: readonly BridgeHold[] | undefined;
54
+ readonly fileSyncLowDisk?: LowDiskPause | undefined;
55
+ }
56
+ export type BridgeHoldReason = "stalled" | "too-long" | "shallow" | "failed";
57
+ export interface BridgeHold {
58
+ readonly repo: string;
59
+ readonly reason: BridgeHoldReason;
60
+ readonly failures: number;
61
+ readonly since: number;
62
+ readonly retryAt: number;
63
+ }
64
+ export interface LowDiskPause {
65
+ readonly since: number;
66
+ readonly freeBytes: number;
67
+ readonly totalBytes: number;
68
+ readonly paused?: readonly string[] | undefined;
54
69
  }
55
70
  export type GoneWitness = "edge" | "local";
56
71
  export type WatcherPause = "gone" | "container-missing" | "container-trashed";
@@ -86,6 +101,9 @@ export declare const setFileSyncAutoPaused: (key: string, paused: boolean) => Pr
86
101
  export declare const setFileSyncSwapPaused: (key: string, paused: boolean) => Promise<void>;
87
102
  export declare const clearAdoptFolder: (key: string) => Promise<void>;
88
103
  export declare const setFileSyncPausedFor: (key: string, reason: WatcherPause | undefined) => Promise<void>;
104
+ export declare const setFileSyncLowDisk: (key: string, pause: LowDiskPause | undefined) => Promise<void>;
105
+ export declare const setBridgeHold: (key: string, repo: string, hold: BridgeHold | undefined) => Promise<void>;
106
+ export declare const pruneBridgeHolds: (key: string, repos: readonly string[]) => Promise<void>;
89
107
  export declare const updateSandboxPairings: (sandboxId: string, change: (held: Pairing) => Pairing) => Promise<void>;
90
108
  export declare const setSandboxGone: (sandboxId: string, gone: {
91
109
  readonly since: number;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/sync/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/sync/config.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,6 @@ export const sshDir = join(homeDir(), ".ssh");
13
13
  export const sshConfigName = "intentic-machine.conf";
14
14
  export const sshConfigPath = join(sshDir, sshConfigName);
15
15
  export const userSshConfigPath = join(sshDir, "config");
16
- export const mutagenDaemonLogPath = join(baseDir, "mutagen-daemon.log");
17
16
  export const mirrorHeartbeatPath = join(baseDir, "mirror.tick");
18
17
  export const isSandboxContainerName = (name) => name !== undefined &&
19
18
  name.startsWith(SANDBOX_CONTAINER_PREFIX) &&
@@ -109,10 +108,15 @@ export const readState = async () => {
109
108
  assertPairings(parsed.pairings);
110
109
  return { pairings: parsed.pairings };
111
110
  };
111
+ let writing = Promise.resolve();
112
112
  export const updateState = async (mutate) => {
113
- const next = mutate(await readState());
114
- assertPairings(next.pairings);
115
- await writeSecretFile(configPath, baseDir, JSON.stringify(next, undefined, 2));
113
+ const run = writing.then(async () => {
114
+ const next = mutate(await readState());
115
+ assertPairings(next.pairings);
116
+ await writeSecretFile(configPath, baseDir, JSON.stringify(next, undefined, 2));
117
+ });
118
+ writing = run.catch(() => undefined);
119
+ await run;
116
120
  };
117
121
  export const upsertPairing = async (pairing) => await updateState((state) => ({ pairings: withPairing(state.pairings, pairing) }));
118
122
  export const withPairing = (pairings, pairing) => [
@@ -138,6 +142,17 @@ export const setFileSyncAutoPaused = async (key, paused) => await updatePairing(
138
142
  export const setFileSyncSwapPaused = async (key, paused) => await updatePairing(key, (held) => ({ ...held, fileSyncSwapPaused: paused ? true : undefined }));
139
143
  export const clearAdoptFolder = async (key) => await updatePairing(key, (held) => ({ ...held, adoptFolder: undefined }));
140
144
  export const setFileSyncPausedFor = async (key, reason) => await updatePairing(key, (held) => ({ ...held, fileSyncPausedFor: reason }));
145
+ export const setFileSyncLowDisk = async (key, pause) => await updatePairing(key, (held) => ({ ...held, fileSyncLowDisk: pause }));
146
+ export const setBridgeHold = async (key, repo, hold) => await updatePairing(key, (held) => {
147
+ const { bridgeHolds = [], ...rest } = held;
148
+ const next = [...bridgeHolds.filter((entry) => entry.repo !== repo), ...(hold === undefined ? [] : [hold])];
149
+ return next.length === 0 ? rest : { ...rest, bridgeHolds: next };
150
+ });
151
+ export const pruneBridgeHolds = async (key, repos) => await updatePairing(key, (held) => {
152
+ const { bridgeHolds = [], ...rest } = held;
153
+ const next = bridgeHolds.filter((entry) => repos.includes(entry.repo));
154
+ return next.length === 0 ? rest : { ...rest, bridgeHolds: next };
155
+ });
141
156
  export const updateSandboxPairings = async (sandboxId, change) => await updateState((state) => ({ pairings: state.pairings.map((held) => (held.sandboxId === sandboxId ? change(held) : held)) }));
142
157
  export const setSandboxGone = async (sandboxId, gone) => await updateSandboxPairings(sandboxId, (held) => ({
143
158
  ...held,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/sync/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/sync/config.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,24 @@ export declare const CHILD_TIMEOUT_MS: number;
7
7
  export declare const runProcess: (command: string, args: readonly string[], options?: {
8
8
  readonly cwd?: string | undefined;
9
9
  readonly timeoutMs?: number | undefined;
10
+ readonly env?: NodeJS.ProcessEnv | undefined;
10
11
  }) => Promise<ExecResult>;
12
+ export type WatchedEnding = "exited" | "stalled" | "ceiling" | "stopped";
13
+ export interface WatchedResult extends ExecResult {
14
+ readonly ending: WatchedEnding;
15
+ }
16
+ export interface WatchedOptions {
17
+ readonly cwd?: string | undefined;
18
+ readonly env?: NodeJS.ProcessEnv | undefined;
19
+ readonly quietMs: number;
20
+ readonly quietAfter?: {
21
+ readonly said: RegExp;
22
+ readonly quietMs: number;
23
+ } | undefined;
24
+ readonly ceilingMs: number;
25
+ readonly signal?: AbortSignal | undefined;
26
+ }
27
+ export declare const runWatched: (command: string, args: readonly string[], options: WatchedOptions) => Promise<WatchedResult>;
11
28
  export interface SyncExecResult extends ExecResult {
12
29
  readonly error?: Error;
13
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/sync/exec.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAKD,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAK5C,eAAO,MAAM,UAAU,YACV,MAAM,QACT,SAAS,MAAM,EAAE,YACd;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,KACxF,OAAO,CAAC,UAAU,CAKpB,CAAC;AAIF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CAC1B;AAKD,eAAO,MAAM,cAAc,YACd,MAAM,QACT,SAAS,MAAM,EAAE,WACd;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,KACnJ,cAeF,CAAC"}
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/sync/exec.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAKD,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAM5C,eAAO,MAAM,UAAU,YACV,MAAM,QACT,SAAS,MAAM,EAAE,YACd;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAA;CAAE,KACtI,OAAO,CAAC,UAAU,CASpB,CAAC;AAIF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAaD,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC7C;AAKD,eAAO,MAAM,UAAU,YAAmB,MAAM,QAAQ,SAAS,MAAM,EAAE,WAAW,cAAc,KAAG,OAAO,CAAC,aAAa,CAgDzH,CAAC;AAIF,MAAM,WAAW,cAAe,SAAQ,UAAU;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CAC1B;AAKD,eAAO,MAAM,cAAc,YACd,MAAM,QACT,SAAS,MAAM,EAAE,WACd;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,KACnJ,cAeF,CAAC"}
package/dist/sync/exec.js CHANGED
@@ -1,15 +1,69 @@
1
1
  import { runBounded, runBoundedSync } from "@intentic/base/process";
2
+ import { childEnv } from "./mutagen-env.js";
2
3
  export const CHILD_TIMEOUT_MS = 10 * 60_000;
3
4
  export const runProcess = async (command, args, options = {}) => {
4
- const result = await runBounded(command, args, { cwd: options.cwd, timeoutMs: options.timeoutMs ?? CHILD_TIMEOUT_MS });
5
+ const result = await runBounded(command, args, {
6
+ cwd: options.cwd,
7
+ env: childEnv(command, options.env),
8
+ timeoutMs: options.timeoutMs ?? CHILD_TIMEOUT_MS,
9
+ });
5
10
  const failure = result.spawnError?.message ?? "";
6
11
  return { status: result.exitCode, stdout: result.stdout.text, stderr: `${result.stderr.text}${failure}` };
7
12
  };
13
+ const QUIET_CHECK_MS = 5_000;
14
+ const SAID_TAIL_CHARS = 512;
15
+ export const runWatched = async (command, args, options) => {
16
+ const stop = new AbortController();
17
+ const relay = () => stop.abort();
18
+ if (options.signal?.aborted === true) {
19
+ stop.abort();
20
+ }
21
+ options.signal?.addEventListener("abort", relay, { once: true });
22
+ let heard = Date.now();
23
+ let allowance = options.quietMs;
24
+ let stalled = false;
25
+ const quiet = setInterval(() => {
26
+ if (Date.now() - heard >= allowance) {
27
+ stalled = true;
28
+ stop.abort();
29
+ }
30
+ }, Math.min(QUIET_CHECK_MS, options.quietMs));
31
+ const later = options.quietAfter;
32
+ let tail = "";
33
+ const mark = (chunk) => {
34
+ heard = Date.now();
35
+ if (later !== undefined && allowance !== later.quietMs) {
36
+ tail = `${tail}${chunk.toString()}`.slice(-SAID_TAIL_CHARS);
37
+ if (later.said.test(tail)) {
38
+ allowance = later.quietMs;
39
+ }
40
+ }
41
+ };
42
+ try {
43
+ const result = await runBounded(command, args, {
44
+ cwd: options.cwd,
45
+ env: options.env,
46
+ timeoutMs: options.ceilingMs,
47
+ signal: stop.signal,
48
+ onSpawn: (child) => {
49
+ child.stdout?.on("data", mark);
50
+ child.stderr?.on("data", mark);
51
+ },
52
+ });
53
+ const failure = result.spawnError?.message ?? "";
54
+ const ending = result.timedOut ? "ceiling" : stalled ? "stalled" : result.aborted ? "stopped" : "exited";
55
+ return { status: result.exitCode, stdout: result.stdout.text, stderr: `${result.stderr.text}${failure}`, ending };
56
+ }
57
+ finally {
58
+ clearInterval(quiet);
59
+ options.signal?.removeEventListener("abort", relay);
60
+ }
61
+ };
8
62
  export const runProcessSync = (command, args, options) => {
9
63
  const result = runBoundedSync(command, args, {
10
64
  timeoutMs: options.timeoutMs,
11
65
  cwd: options.cwd,
12
- env: options.env,
66
+ env: childEnv(command, options.env),
13
67
  output: options.quiet === true ? "ignore" : "pipe",
14
68
  });
15
69
  const stopped = result.timedOut
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/sync/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAiBpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAK5C,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC3B,OAAe,EACf,IAAuB,EACvB,OAAO,GAAmF,EAAE,EACzE,EAAE;IACrB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAEvH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC;AAC9G,CAAC,CAAC;AAWF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,OAAe,EACf,IAAuB,EACvB,OAAkJ,EACpI,EAAE;IAChB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;KACrD,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ;QAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,iBAAiB,OAAO,CAAC,SAAS,8BAA8B,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC7H,CAAC,CAAC,MAAM,CAAC,UAAU;YACjB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,OAAO,2CAA2C,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACtG,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;IAC3C,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnG,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC,CAAC"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/sync/exec.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,45 @@
1
1
  import type { Log } from "@intentic/local-agent";
2
- import { type Pairing } from "./config.js";
2
+ import { type BridgeHold, type BridgeHoldReason, type Pairing } from "./config.js";
3
3
  export interface BridgeExec {
4
4
  readonly run: (command: string, args: readonly string[], cwd?: string) => Promise<string | undefined>;
5
+ readonly fetch: (args: readonly string[], cwd: string, signal?: AbortSignal) => Promise<FetchResult>;
5
6
  readonly exists: (path: string) => boolean;
6
7
  }
8
+ export type FetchOutcome = "fetched" | "stopped" | BridgeHoldReason;
9
+ export interface FetchResult {
10
+ readonly outcome: FetchOutcome;
11
+ readonly stderr: string;
12
+ }
7
13
  export declare const realBridgeExec: BridgeExec;
14
+ export declare const nextHold: (repo: string, previous: BridgeHold | undefined, reason: BridgeHoldReason, now: number) => BridgeHold;
15
+ export declare const failureReason: (stderr: string) => BridgeHoldReason;
16
+ export interface BridgeMemory {
17
+ readonly held: (repo: string) => BridgeHold | undefined;
18
+ readonly record: (repo: string, hold: BridgeHold | undefined) => Promise<void>;
19
+ }
20
+ export interface PackTemp {
21
+ readonly name: string;
22
+ readonly size: number;
23
+ readonly modifiedAt: number;
24
+ }
25
+ export interface PackFs {
26
+ readonly temps: (packDir: string) => Promise<readonly PackTemp[]>;
27
+ readonly remove: (path: string) => Promise<boolean>;
28
+ readonly settle: () => Promise<void>;
29
+ }
30
+ export declare const STALE_TEMP_MS: number;
31
+ export declare const strandedTemps: (first: readonly PackTemp[], second: readonly PackTemp[], before: ReadonlySet<string>, now: number) => PackTemp[];
32
+ export interface BridgeOptions {
33
+ readonly memory?: BridgeMemory | undefined;
34
+ readonly packs?: PackFs | undefined;
35
+ readonly signal?: AbortSignal | undefined;
36
+ readonly now?: (() => number) | undefined;
37
+ }
8
38
  export declare const listSandboxRepos: (exec: BridgeExec, alias: string) => Promise<string[] | undefined>;
9
- export declare const bridgeRepo: (exec: BridgeExec, alias: string, localDir: string, repo: string, log: Log) => Promise<void>;
10
- export declare const runGitBridge: (exec: BridgeExec, pairing: Pairing, log: Log, known: readonly string[] | undefined) => Promise<readonly string[] | undefined>;
39
+ export declare const bridgeRepo: (exec: BridgeExec, alias: string, localDir: string, repo: string, log: Log, options?: BridgeOptions) => Promise<void>;
40
+ export declare const runGitBridge: (exec: BridgeExec, pairing: Pairing, log: Log, known: readonly string[] | undefined, options?: Pick<BridgeOptions, "signal" | "packs" | "now"> & {
41
+ readonly memory?: BridgeMemory | undefined;
42
+ }) => Promise<readonly string[] | undefined>;
11
43
  export interface UnbridgeFs {
12
44
  readonly subdirs: (dir: string) => Promise<readonly string[]>;
13
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"git-bridge.d.ts","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"AAKA,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;AASD,eAAO,MAAM,cAAc,EAAE,UAO5B,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,CAkGxH,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"}
1
+ {"version":3,"file":"git-bridge.d.ts","sourceRoot":"","sources":["../../src/sync/git-bridge.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,132 @@
1
1
  import { existsSync } from "node:fs";
2
- import { readdir } from "node:fs/promises";
3
- import { join } from "node:path";
2
+ import { readdir, rm, stat } from "node:fs/promises";
3
+ import { join, resolve } from "node:path";
4
+ import { setTimeout as sleep } from "node:timers/promises";
4
5
  import { HISTORY_ROOT, STATE_DIR } from "@intentic/constants";
5
6
  import { GIT_GLOBAL_ARGS } from "@intentic/base/git";
6
- import { isProjectPairing } from "./config.js";
7
- import { runProcess } from "./exec.js";
7
+ import { untranslatedEnv } from "@intentic/base/process";
8
+ import { isProjectPairing, pairingKey, pruneBridgeHolds, setBridgeHold } from "./config.js";
9
+ import { runProcess, runWatched } from "./exec.js";
8
10
  import { sshAlias } from "./ssh.js";
9
11
  const EXEC_TIMEOUT_MS = 120_000;
12
+ const FETCH_QUIET_MS = 3 * 60_000;
13
+ const FETCH_CEILING_MS = 3 * 60 * 60_000;
14
+ const TRANSFER_DONE = /(?:Receiving objects|Resolving deltas): 100%/;
15
+ const FETCH_SETTLING_QUIET_MS = 30 * 60_000;
10
16
  export const realBridgeExec = {
11
17
  run: async (command, args, cwd) => {
12
18
  const argv = command === "git" ? [...GIT_GLOBAL_ARGS, ...args] : args;
13
19
  const result = await runProcess(command, argv, { cwd, timeoutMs: EXEC_TIMEOUT_MS });
14
20
  return result.status === 0 ? result.stdout : undefined;
15
21
  },
22
+ fetch: async (args, cwd, signal) => {
23
+ const result = await runWatched("git", [...GIT_GLOBAL_ARGS, ...args], {
24
+ cwd,
25
+ env: untranslatedEnv(process.env),
26
+ quietMs: FETCH_QUIET_MS,
27
+ quietAfter: { said: TRANSFER_DONE, quietMs: FETCH_SETTLING_QUIET_MS },
28
+ ceilingMs: FETCH_CEILING_MS,
29
+ signal,
30
+ });
31
+ const outcome = result.ending === "stalled"
32
+ ? "stalled"
33
+ : result.ending === "ceiling"
34
+ ? "too-long"
35
+ : result.ending === "stopped"
36
+ ? "stopped"
37
+ : result.status === 0
38
+ ? "fetched"
39
+ : "failed";
40
+ return { outcome, stderr: result.stderr };
41
+ },
16
42
  exists: existsSync,
17
43
  };
44
+ const MINUTE = 60_000;
45
+ const HOUR = 60 * MINUTE;
46
+ const DAY = 24 * HOUR;
47
+ const WAITS = {
48
+ stalled: { first: 10 * MINUTE, most: 12 * HOUR },
49
+ failed: { first: 10 * MINUTE, most: 12 * HOUR },
50
+ "too-long": { first: 12 * HOUR, most: 2 * DAY },
51
+ shallow: { first: DAY, most: 7 * DAY },
52
+ };
53
+ export const nextHold = (repo, previous, reason, now) => {
54
+ const failures = (previous?.failures ?? 0) + 1;
55
+ const { first, most } = WAITS[reason];
56
+ const wait = Math.min(first * 2 ** Math.min(failures - 1, 20), most);
57
+ return { repo, reason, failures, since: previous?.since ?? now, retryAt: now + wait };
58
+ };
59
+ export const failureReason = (stderr) => (/shallow/i.test(stderr) ? "shallow" : "failed");
60
+ const forgetfulMemory = { held: () => undefined, record: async () => { } };
61
+ const pairingMemory = (pairing) => {
62
+ const holds = new Map((pairing.bridgeHolds ?? []).map((hold) => [hold.repo, hold]));
63
+ return {
64
+ held: (repo) => holds.get(repo),
65
+ record: async (repo, hold) => {
66
+ if (hold === undefined && !holds.has(repo)) {
67
+ return;
68
+ }
69
+ if (hold === undefined) {
70
+ holds.delete(repo);
71
+ }
72
+ else {
73
+ holds.set(repo, hold);
74
+ }
75
+ await setBridgeHold(pairingKey(pairing), repo, hold);
76
+ },
77
+ };
78
+ };
79
+ export const STALE_TEMP_MS = HOUR;
80
+ const SETTLE_MS = 2_000;
81
+ const realPackFs = {
82
+ temps: async (packDir) => {
83
+ const names = await readdir(packDir).catch(() => []);
84
+ const temps = [];
85
+ for (const name of names.filter((entry) => entry.startsWith("tmp_"))) {
86
+ const info = await stat(join(packDir, name)).catch(() => undefined);
87
+ if (info?.isFile() === true) {
88
+ temps.push({ name, size: info.size, modifiedAt: info.mtimeMs });
89
+ }
90
+ }
91
+ return temps;
92
+ },
93
+ remove: async (path) => await rm(path, { force: true }).then(() => true, () => false),
94
+ settle: async () => await sleep(SETTLE_MS),
95
+ };
96
+ export const strandedTemps = (first, second, before, now) => {
97
+ const again = new Map(second.map((temp) => [temp.name, temp]));
98
+ return first.filter((temp) => {
99
+ const later = again.get(temp.name);
100
+ const still = later !== undefined && later.size === temp.size && later.modifiedAt === temp.modifiedAt;
101
+ return still && (!before.has(temp.name) || now - temp.modifiedAt >= STALE_TEMP_MS);
102
+ });
103
+ };
104
+ const clearStranded = async (packs, packDir, before, now) => {
105
+ const first = await packs.temps(packDir);
106
+ if (!first.some((temp) => !before.has(temp.name) || now - temp.modifiedAt >= STALE_TEMP_MS)) {
107
+ return 0;
108
+ }
109
+ await packs.settle();
110
+ let freed = 0;
111
+ for (const temp of strandedTemps(first, await packs.temps(packDir), before, now)) {
112
+ if (await packs.remove(join(packDir, temp.name))) {
113
+ freed += temp.size;
114
+ }
115
+ }
116
+ return freed;
117
+ };
118
+ const sweptAt = new Map();
119
+ const gigabytes = (bytes) => `${(bytes / 1024 ** 3).toFixed(1)} GB`;
120
+ const untilWhen = (at, now) => {
121
+ const minutes = Math.max(1, Math.round((at - now) / MINUTE));
122
+ return minutes < 120 ? `${minutes} minutes` : `${Math.round(minutes / 60)} hours`;
123
+ };
124
+ const HOLD_SAID = {
125
+ stalled: "the fetch stopped moving",
126
+ "too-long": `the fetch was still running after ${FETCH_CEILING_MS / HOUR} hours`,
127
+ shallow: "the sandbox's copy is a shallow clone, which this folder's full history cannot take",
128
+ failed: "git refused the fetch",
129
+ };
18
130
  const SEGMENT = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
19
131
  const isSafeRepoId = (id) => {
20
132
  const segments = id.split("/");
@@ -30,15 +142,68 @@ export const listSandboxRepos = async (exec, alias) => {
30
142
  .map((line) => decodeURIComponent(line.trim()))
31
143
  .filter((id) => id !== "" && id !== "root" && isSafeRepoId(id));
32
144
  };
33
- export const bridgeRepo = async (exec, alias, localDir, repo, log) => {
34
- const dir = join(localDir, repo);
35
- if (!exec.exists(dir)) {
145
+ const packDirOf = async (exec, dir) => {
146
+ const out = (await exec.run("git", ["rev-parse", "--git-path", "objects/pack"], dir))?.trim();
147
+ return out === undefined || out === "" ? undefined : resolve(dir, out);
148
+ };
149
+ const sandboxIsShallow = async (exec, alias, repo) => {
150
+ const gitDir = `${HISTORY_ROOT}/gits/${encodeURIComponent(repo)}`;
151
+ const said = (await exec.run("ssh", ["-o", "BatchMode=yes", alias, "git", `--git-dir=${gitDir}`, "rev-parse", "--is-shallow-repository"]))?.trim();
152
+ return said === "true" ? true : said === "false" ? false : undefined;
153
+ };
154
+ const sweepLeftovers = async (seams, dir, repo) => {
155
+ const { exec, packs, now, log } = seams;
156
+ const at = now();
157
+ if (at - (sweptAt.get(dir) ?? Number.NEGATIVE_INFINITY) < STALE_TEMP_MS) {
36
158
  return;
37
159
  }
160
+ sweptAt.set(dir, at);
161
+ const packDir = await packDirOf(exec, dir);
162
+ if (packDir === undefined) {
163
+ return;
164
+ }
165
+ const freed = await clearStranded(packs, packDir, new Set((await packs.temps(packDir)).map((temp) => temp.name)), at);
166
+ if (freed > 0) {
167
+ log(` ${repo}: removed ${gigabytes(freed)} of half-received git packs an earlier fetch left behind`);
168
+ }
169
+ };
170
+ const fetchFromSandbox = async (seams, dir, repo, branch, head, hold) => {
171
+ const { exec, packs, memory, now, log } = seams;
172
+ const shallowOk = head === undefined || (await exec.run("git", ["rev-parse", "--is-shallow-repository"], dir))?.trim() === "true";
173
+ if (!shallowOk && (await sandboxIsShallow(exec, seams.alias, repo)) === true) {
174
+ const next = nextHold(repo, hold, "shallow", now());
175
+ await memory.record(repo, next);
176
+ log(` ${repo}: not fetched from the sandbox (${HOLD_SAID.shallow}); asking again in ${untilWhen(next.retryAt, now())}`);
177
+ return false;
178
+ }
179
+ const packDir = await packDirOf(exec, dir);
180
+ const before = new Set(packDir === undefined ? [] : (await packs.temps(packDir)).map((temp) => temp.name));
181
+ const refspec = `+refs/heads/${branch}:refs/remotes/sandbox/${branch}`;
182
+ const fetched = await exec.fetch(["fetch", "--progress", ...(shallowOk ? ["--update-shallow"] : []), "sandbox", refspec], dir, seams.signal);
183
+ if (fetched.outcome === "fetched") {
184
+ if (hold !== undefined) {
185
+ log(` ${repo}: fetched from the sandbox again, after ${hold.failures === 1 ? "one try" : `${hold.failures} tries`} that did not finish`);
186
+ }
187
+ await memory.record(repo, undefined);
188
+ return true;
189
+ }
190
+ const freed = packDir === undefined ? 0 : await clearStranded(packs, packDir, before, now());
191
+ const cleared = freed > 0 ? `; removed the ${gigabytes(freed)} it had received so far` : "";
192
+ if (fetched.outcome === "stopped") {
193
+ log(` ${repo}: fetch from the sandbox stopped${cleared}`);
194
+ return false;
195
+ }
196
+ const reason = fetched.outcome === "failed" ? failureReason(fetched.stderr) : fetched.outcome;
197
+ const next = nextHold(repo, hold, reason, now());
198
+ await memory.record(repo, next);
199
+ log(` ${repo}: fetch from the sandbox did not finish (${HOLD_SAID[reason]})${cleared}; trying again in ${untilWhen(next.retryAt, now())}`);
200
+ return false;
201
+ };
202
+ const prepareClone = async (exec, alias, dir, repo, log) => {
38
203
  const url = `${alias}:/history/gits/${encodeURIComponent(repo)}`;
39
204
  if (!exec.exists(join(dir, ".git"))) {
40
205
  if ((await exec.run("git", ["init", "-q"], dir)) === undefined) {
41
- return;
206
+ return false;
42
207
  }
43
208
  log(` ${repo}: initialized, this repo's history now follows the sandbox`);
44
209
  }
@@ -47,13 +212,22 @@ export const bridgeRepo = async (exec, alias, localDir, repo, log) => {
47
212
  }
48
213
  const current = (await exec.run("git", ["remote", "get-url", "sandbox"], dir))?.trim();
49
214
  if (current === undefined) {
50
- if ((await exec.run("git", ["remote", "add", "sandbox", url], dir)) === undefined) {
51
- return;
52
- }
215
+ return (await exec.run("git", ["remote", "add", "sandbox", url], dir)) !== undefined;
53
216
  }
54
- else if (current !== url) {
217
+ if (current !== url) {
55
218
  await exec.run("git", ["remote", "set-url", "sandbox", url], dir);
56
219
  }
220
+ return true;
221
+ };
222
+ export const bridgeRepo = async (exec, alias, localDir, repo, log, options = {}) => {
223
+ const memory = options.memory ?? forgetfulMemory;
224
+ const packs = options.packs ?? realPackFs;
225
+ const now = options.now ?? Date.now;
226
+ const dir = join(localDir, repo);
227
+ if (!exec.exists(dir) || !(await prepareClone(exec, alias, dir, repo, log))) {
228
+ return;
229
+ }
230
+ await sweepLeftovers({ exec, packs, now, log }, dir, repo);
57
231
  const symref = (await exec.run("git", ["ls-remote", "--symref", "sandbox", "HEAD"], dir)) ?? "";
58
232
  const branch = /^ref:\s+refs\/heads\/(\S+)\s+HEAD/m.exec(symref)?.[1];
59
233
  const remoteTip = /^([0-9a-f]+)\s+HEAD\s*$/m.exec(symref)?.[1];
@@ -68,10 +242,14 @@ export const bridgeRepo = async (exec, alias, localDir, repo, log) => {
68
242
  if (head !== undefined && installed !== head) {
69
243
  await exec.run("git", ["update-ref", bridged, head], dir);
70
244
  }
245
+ await memory.record(repo, undefined);
246
+ return;
247
+ }
248
+ const hold = memory.held(repo);
249
+ if (hold !== undefined && now() < hold.retryAt) {
71
250
  return;
72
251
  }
73
- if ((await exec.run("git", ["fetch", "-q", "sandbox", `+refs/heads/${branch}:refs/remotes/sandbox/${branch}`], dir)) === undefined) {
74
- log(` ${repo}: fetch from the sandbox failed, will retry next pass`);
252
+ if (!(await fetchFromSandbox({ exec, alias, packs, memory, now, log, signal: options.signal }, dir, repo, branch, head, hold))) {
75
253
  return;
76
254
  }
77
255
  const tip = (await exec.run("git", ["rev-parse", "-q", "--verify", `refs/remotes/sandbox/${branch}`], dir))?.trim();
@@ -108,7 +286,7 @@ export const bridgeRepo = async (exec, alias, localDir, repo, log) => {
108
286
  log(` ${repo}: fast-forwarded ${branch} to ${tip.slice(0, 8)}`);
109
287
  }
110
288
  };
111
- export const runGitBridge = async (exec, pairing, log, known) => {
289
+ export const runGitBridge = async (exec, pairing, log, known, options = {}) => {
112
290
  if (pairing.mode !== "sync" || pairing.localDir === undefined || isProjectPairing(pairing)) {
113
291
  return undefined;
114
292
  }
@@ -118,8 +296,15 @@ export const runGitBridge = async (exec, pairing, log, known) => {
118
296
  log(` ${pairing.sandboxId}: git bridge couldn't list the sandbox's repos, will retry next pass`);
119
297
  return undefined;
120
298
  }
299
+ if (known === undefined && (pairing.bridgeHolds ?? []).some((hold) => !repos.includes(hold.repo))) {
300
+ await pruneBridgeHolds(pairingKey(pairing), repos);
301
+ }
302
+ const memory = options.memory ?? pairingMemory(pairing);
121
303
  for (const repo of repos) {
122
- await bridgeRepo(exec, alias, pairing.localDir, repo, log);
304
+ if (options.signal?.aborted === true) {
305
+ break;
306
+ }
307
+ await bridgeRepo(exec, alias, pairing.localDir, repo, log, { ...options, memory });
123
308
  }
124
309
  return repos;
125
310
  };