@intentic/machine 1.344.0 → 1.345.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 (185) hide show
  1. package/README.md +91 -25
  2. package/dist/autostart/autostart.d.ts +0 -1
  3. package/dist/autostart/autostart.d.ts.map +1 -1
  4. package/dist/autostart/autostart.js +3 -9
  5. package/dist/autostart/autostart.js.map +1 -1
  6. package/dist/commands.d.ts.map +1 -1
  7. package/dist/commands.js +4 -21
  8. package/dist/commands.js.map +1 -1
  9. package/dist/device/commands.d.ts +2 -1
  10. package/dist/device/commands.d.ts.map +1 -1
  11. package/dist/device/commands.js +4 -2
  12. package/dist/device/commands.js.map +1 -1
  13. package/dist/device/connection.d.ts.map +1 -1
  14. package/dist/device/connection.js +27 -9
  15. package/dist/device/connection.js.map +1 -1
  16. package/dist/device/grant.d.ts +242 -0
  17. package/dist/device/grant.d.ts.map +1 -1
  18. package/dist/device/mcp.d.ts.map +1 -1
  19. package/dist/device/mcp.js +25 -8
  20. package/dist/device/mcp.js.map +1 -1
  21. package/dist/device/router.d.ts +467 -225
  22. package/dist/device/router.d.ts.map +1 -1
  23. package/dist/device/router.js +18 -10
  24. package/dist/device/router.js.map +1 -1
  25. package/dist/device/sandbox-rounds/keeper.d.ts +4 -1
  26. package/dist/device/sandbox-rounds/keeper.d.ts.map +1 -1
  27. package/dist/device/sandbox-rounds/keeper.js +12 -6
  28. package/dist/device/sandbox-rounds/keeper.js.map +1 -1
  29. package/dist/device/sandbox-rounds/sleep.d.ts +15 -2
  30. package/dist/device/sandbox-rounds/sleep.d.ts.map +1 -1
  31. package/dist/device/sandbox-rounds/sleep.js +68 -13
  32. package/dist/device/sandbox-rounds/sleep.js.map +1 -1
  33. package/dist/device/tools/agent.d.ts +15 -0
  34. package/dist/device/tools/agent.d.ts.map +1 -1
  35. package/dist/device/tools/agent.js +75 -19
  36. package/dist/device/tools/agent.js.map +1 -1
  37. package/dist/device/tools/android.d.ts +1 -1
  38. package/dist/device/tools/android.d.ts.map +1 -1
  39. package/dist/device/tools/android.js +17 -8
  40. package/dist/device/tools/android.js.map +1 -1
  41. package/dist/device/tools/browser.d.ts.map +1 -1
  42. package/dist/device/tools/browser.js +3 -5
  43. package/dist/device/tools/browser.js.map +1 -1
  44. package/dist/device/tools/ic-binary.d.ts +1 -1
  45. package/dist/device/tools/ic-binary.d.ts.map +1 -1
  46. package/dist/device/tools/ic-binary.js +6 -4
  47. package/dist/device/tools/ic-binary.js.map +1 -1
  48. package/dist/device/tools/programs/app-wait-tools.d.ts +12 -0
  49. package/dist/device/tools/programs/app-wait-tools.d.ts.map +1 -0
  50. package/dist/device/tools/programs/app-wait-tools.js +60 -0
  51. package/dist/device/tools/programs/app-wait-tools.js.map +1 -0
  52. package/dist/device/tools/programs/app-wait.d.ts +19 -0
  53. package/dist/device/tools/programs/app-wait.d.ts.map +1 -0
  54. package/dist/device/tools/programs/app-wait.js +89 -0
  55. package/dist/device/tools/programs/app-wait.js.map +1 -0
  56. package/dist/device/tools/programs/file-changes.d.ts +2 -0
  57. package/dist/device/tools/programs/file-changes.d.ts.map +1 -0
  58. package/dist/device/tools/programs/file-changes.js +19 -0
  59. package/dist/device/tools/programs/file-changes.js.map +1 -0
  60. package/dist/device/tools/programs/programs.d.ts +12 -0
  61. package/dist/device/tools/programs/programs.d.ts.map +1 -1
  62. package/dist/device/tools/programs/programs.js +13 -12
  63. package/dist/device/tools/programs/programs.js.map +1 -1
  64. package/dist/device/tools/programs/stop-all.d.ts +10 -0
  65. package/dist/device/tools/programs/stop-all.d.ts.map +1 -0
  66. package/dist/device/tools/programs/stop-all.js +52 -0
  67. package/dist/device/tools/programs/stop-all.js.map +1 -0
  68. package/dist/device/tools/sandboxes.d.ts +1 -0
  69. package/dist/device/tools/sandboxes.d.ts.map +1 -1
  70. package/dist/device/tools/sandboxes.js +4 -1
  71. package/dist/device/tools/sandboxes.js.map +1 -1
  72. package/dist/device/tools/shell.d.ts +1 -1
  73. package/dist/device/tools/shell.d.ts.map +1 -1
  74. package/dist/install.d.ts +6 -0
  75. package/dist/install.d.ts.map +1 -1
  76. package/dist/install.js +7 -2
  77. package/dist/install.js.map +1 -1
  78. package/dist/keyring/app-commands.d.ts +15 -0
  79. package/dist/keyring/app-commands.d.ts.map +1 -0
  80. package/dist/keyring/app-commands.js +247 -0
  81. package/dist/keyring/app-commands.js.map +1 -0
  82. package/dist/keyring/commands.d.ts +1 -1
  83. package/dist/keyring/commands.d.ts.map +1 -1
  84. package/dist/keyring/commands.js +26 -32
  85. package/dist/keyring/commands.js.map +1 -1
  86. package/dist/keyring/git-helper.d.ts +8 -0
  87. package/dist/keyring/git-helper.d.ts.map +1 -0
  88. package/dist/keyring/git-helper.js +60 -0
  89. package/dist/keyring/git-helper.js.map +1 -0
  90. package/dist/keyring/keyring-status.d.ts +8 -1
  91. package/dist/keyring/keyring-status.d.ts.map +1 -1
  92. package/dist/keyring/keyring-status.js +39 -4
  93. package/dist/keyring/keyring-status.js.map +1 -1
  94. package/dist/keyring/native-host-install.d.ts +28 -0
  95. package/dist/keyring/native-host-install.d.ts.map +1 -0
  96. package/dist/keyring/native-host-install.js +99 -0
  97. package/dist/keyring/native-host-install.js.map +1 -0
  98. package/dist/keyring/relay.d.ts +5 -1
  99. package/dist/keyring/relay.d.ts.map +1 -1
  100. package/dist/keyring/relay.js +16 -0
  101. package/dist/keyring/relay.js.map +1 -1
  102. package/dist/keyring/sandbox-push.d.ts +4 -0
  103. package/dist/keyring/sandbox-push.d.ts.map +1 -0
  104. package/dist/keyring/sandbox-push.js +21 -0
  105. package/dist/keyring/sandbox-push.js.map +1 -0
  106. package/dist/keyring/service.d.ts +11 -5
  107. package/dist/keyring/service.d.ts.map +1 -1
  108. package/dist/keyring/service.js +34 -51
  109. package/dist/keyring/service.js.map +1 -1
  110. package/dist/resident/resident.d.ts +1 -0
  111. package/dist/resident/resident.d.ts.map +1 -1
  112. package/dist/resident/resident.js +9 -0
  113. package/dist/resident/resident.js.map +1 -1
  114. package/dist/sync/attach-commands.d.ts.map +1 -1
  115. package/dist/sync/attach-commands.js +2 -1
  116. package/dist/sync/attach-commands.js.map +1 -1
  117. package/dist/sync/binary/mutagen-binary.d.ts +4 -0
  118. package/dist/sync/binary/mutagen-binary.d.ts.map +1 -0
  119. package/dist/sync/binary/mutagen-binary.js +65 -0
  120. package/dist/sync/binary/mutagen-binary.js.map +1 -0
  121. package/dist/sync/commands.d.ts.map +1 -1
  122. package/dist/sync/commands.js +8 -2
  123. package/dist/sync/commands.js.map +1 -1
  124. package/dist/sync/forget-command.js +1 -1
  125. package/dist/sync/forget-command.js.map +1 -1
  126. package/dist/sync/gone-watch.d.ts +1 -0
  127. package/dist/sync/gone-watch.d.ts.map +1 -1
  128. package/dist/sync/gone-watch.js +20 -7
  129. package/dist/sync/gone-watch.js.map +1 -1
  130. package/dist/sync/low-disk.d.ts +2 -2
  131. package/dist/sync/low-disk.d.ts.map +1 -1
  132. package/dist/sync/low-disk.js +7 -14
  133. package/dist/sync/low-disk.js.map +1 -1
  134. package/dist/sync/mirror.d.ts +2 -0
  135. package/dist/sync/mirror.d.ts.map +1 -1
  136. package/dist/sync/mirror.js +15 -10
  137. package/dist/sync/mirror.js.map +1 -1
  138. package/dist/sync/mutagen-move.d.ts.map +1 -1
  139. package/dist/sync/mutagen-move.js +2 -1
  140. package/dist/sync/mutagen-move.js.map +1 -1
  141. package/dist/sync/mutagen.d.ts +6 -7
  142. package/dist/sync/mutagen.d.ts.map +1 -1
  143. package/dist/sync/mutagen.js +16 -83
  144. package/dist/sync/mutagen.js.map +1 -1
  145. package/dist/sync/project/project-commands.d.ts.map +1 -1
  146. package/dist/sync/project/project-commands.js +2 -1
  147. package/dist/sync/project/project-commands.js.map +1 -1
  148. package/dist/sync/project/project-delivery.d.ts.map +1 -1
  149. package/dist/sync/project/project-delivery.js +2 -1
  150. package/dist/sync/project/project-delivery.js.map +1 -1
  151. package/dist/sync/report.d.ts.map +1 -1
  152. package/dist/sync/report.js +2 -1
  153. package/dist/sync/report.js.map +1 -1
  154. package/dist/sync/uninstall.d.ts.map +1 -1
  155. package/dist/sync/uninstall.js +3 -2
  156. package/dist/sync/uninstall.js.map +1 -1
  157. package/dist/uninstall/command.d.ts +3 -0
  158. package/dist/uninstall/command.d.ts.map +1 -0
  159. package/dist/uninstall/command.js +40 -0
  160. package/dist/uninstall/command.js.map +1 -0
  161. package/dist/uninstall/distros.d.ts +8 -0
  162. package/dist/uninstall/distros.d.ts.map +1 -0
  163. package/dist/uninstall/distros.js +103 -0
  164. package/dist/uninstall/distros.js.map +1 -0
  165. package/dist/uninstall/plan.d.ts +23 -0
  166. package/dist/uninstall/plan.d.ts.map +1 -0
  167. package/dist/uninstall/plan.js +71 -0
  168. package/dist/uninstall/plan.js.map +1 -0
  169. package/dist/uninstall/purge.d.ts +3 -0
  170. package/dist/uninstall/purge.d.ts.map +1 -0
  171. package/dist/uninstall/purge.js +79 -0
  172. package/dist/uninstall/purge.js.map +1 -0
  173. package/dist/uninstall/steps.d.ts +12 -0
  174. package/dist/uninstall/steps.d.ts.map +1 -0
  175. package/dist/uninstall/steps.js +200 -0
  176. package/dist/uninstall/steps.js.map +1 -0
  177. package/dist/uninstall/sweep.d.ts +12 -0
  178. package/dist/uninstall/sweep.d.ts.map +1 -0
  179. package/dist/uninstall/sweep.js +90 -0
  180. package/dist/uninstall/sweep.js.map +1 -0
  181. package/dist/uninstall/tally.d.ts +14 -0
  182. package/dist/uninstall/tally.d.ts.map +1 -0
  183. package/dist/uninstall/tally.js +25 -0
  184. package/dist/uninstall/tally.js.map +1 -0
  185. package/package.json +9 -9
@@ -0,0 +1,103 @@
1
+ import { errorMessage } from "@intentic/base/errors";
2
+ import { runBounded } from "@intentic/base/process";
3
+ import { agentInDistro, crossEnv } from "../environments/crossing.js";
4
+ import { childrenOf, readMachineConfig, updateMachineConfig } from "../environments/machine.js";
5
+ import { distroOutcome } from "./plan.js";
6
+ const DISTRO_PURGE_TIMEOUT_MS = 5 * 60_000;
7
+ const byHand = (distro, deleteData) => `wsl -d ${distro} -- ~/.intentic/machine/bin/intentic-machine uninstall --purge${deleteData ? " --delete-data" : ""}`;
8
+ const relayNotes = (distro, stdout, say) => {
9
+ for (const line of stdout.split(/\r?\n/u)) {
10
+ const text = line.replace(/^intentic: /u, "").trim();
11
+ if (text !== "") {
12
+ say.note(`${distro}: ${text}`);
13
+ }
14
+ }
15
+ };
16
+ export const stderrBlocks = (stderr) => {
17
+ const warnings = [];
18
+ const stop = [];
19
+ let into;
20
+ for (const line of stderr.split(/\r?\n/u)) {
21
+ if (line.startsWith("intentic: ")) {
22
+ warnings.push(line.slice("intentic: ".length));
23
+ into = warnings;
24
+ }
25
+ else if (line.startsWith("error: ")) {
26
+ stop.push(line.slice("error: ".length));
27
+ into = stop;
28
+ }
29
+ else if (line.trim() !== "" && into !== undefined && into.length > 0) {
30
+ into[into.length - 1] = `${into.at(-1) ?? ""}\n ${line.trim()}`;
31
+ }
32
+ }
33
+ return { warnings, stop };
34
+ };
35
+ const relay = (distro, output, say) => {
36
+ relayNotes(distro, output.stdout, say);
37
+ const { warnings, stop } = stderrBlocks(output.stderr);
38
+ for (const warning of warnings) {
39
+ say.warn(`${distro}: ${warning}`);
40
+ }
41
+ for (const block of stop) {
42
+ say.note(`${distro}: ${block}`);
43
+ }
44
+ };
45
+ const runInDistro = async (distro, args) => {
46
+ const { command, args: argv } = agentInDistro(distro, args);
47
+ const result = await runBounded(command, argv, { timeoutMs: DISTRO_PURGE_TIMEOUT_MS, env: crossEnv({ INTENTIC_UI: "plain" }, "u") });
48
+ if (result.spawnError !== undefined) {
49
+ throw result.spawnError;
50
+ }
51
+ return { code: result.timedOut ? null : result.exitCode, output: { stdout: result.stdout.text, stderr: result.stderr.text } };
52
+ };
53
+ const purgeOne = async (distro, deleteData, say) => {
54
+ const flags = ["uninstall", "--purge", ...(deleteData ? ["--delete-data"] : [])];
55
+ const { code, output } = await runInDistro(distro, flags);
56
+ relay(distro, output, say);
57
+ const outcome = distroOutcome(code);
58
+ if (outcome === "purged") {
59
+ say.note(`Removed the agent from the ${distro} distro.`);
60
+ return;
61
+ }
62
+ if (outcome === "no-agent") {
63
+ say.note(`The ${distro} distro has no agent installed any more.`);
64
+ return;
65
+ }
66
+ if (outcome === "older") {
67
+ const plain = await runInDistro(distro, ["uninstall"]);
68
+ relay(distro, plain.output, say);
69
+ say.warn(`The ${distro} distro's agent is older than this one and cannot purge itself: its links and pairings went, its files stay there.`, `wsl -d ${distro} -- sh -c '~/.intentic/machine/bin/intentic-machine upgrade && ~/.intentic/machine/bin/intentic-machine uninstall --purge${deleteData ? " --delete-data" : ""}'`);
70
+ return;
71
+ }
72
+ say.warn(code === null
73
+ ? `The ${distro} distro's agent did not finish removing itself within ${DISTRO_PURGE_TIMEOUT_MS / 60_000} minutes.`
74
+ : `The ${distro} distro's agent did not remove itself (exit ${code}).`, byHand(distro, deleteData));
75
+ };
76
+ const withoutChildren = (config) => {
77
+ const { children: _gone, ...rest } = config;
78
+ return rest;
79
+ };
80
+ export const purgeDistros = async (deleteData, say) => {
81
+ let distros;
82
+ try {
83
+ distros = childrenOf(await readMachineConfig());
84
+ }
85
+ catch (error) {
86
+ say.warn(`This device's list of WSL distros could not be read (${errorMessage(error)}), so no distro's agent was removed from here.`, "wsl -d <distro> -- ~/.intentic/machine/bin/intentic-machine uninstall --purge");
87
+ return;
88
+ }
89
+ for (const distro of distros) {
90
+ await purgeOne(distro, deleteData, say).catch((error) => say.warn(`The ${distro} distro could not be reached through wsl.exe (${errorMessage(error)}).`, byHand(distro, deleteData)));
91
+ }
92
+ if (distros.length === 0) {
93
+ return;
94
+ }
95
+ try {
96
+ await updateMachineConfig(withoutChildren);
97
+ say.note(`Nothing on this device keeps ${distros.length === 1 ? "that distro's agent" : "those distros' agents"} running any more.`);
98
+ }
99
+ catch (error) {
100
+ say.warn(`This device's list of WSL distros could not be emptied (${errorMessage(error)}); it goes with the agent's folder.`);
101
+ }
102
+ };
103
+ //# sourceMappingURL=distros.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distros.js","sourceRoot":"","sources":["../../src/uninstall/distros.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface PurgeChoice {
2
+ readonly purge: boolean;
3
+ readonly deleteData: boolean;
4
+ }
5
+ export declare const purgeChoice: (flags: {
6
+ readonly purge?: boolean;
7
+ readonly deleteData?: boolean;
8
+ }) => PurgeChoice;
9
+ export declare const sandboxTrashName: (name: string) => boolean;
10
+ export interface Sweep {
11
+ readonly remove: readonly string[];
12
+ readonly keep: readonly string[];
13
+ }
14
+ export declare const machineSweep: (names: readonly string[], trashNames: readonly string[], deleteData: boolean) => Sweep;
15
+ export declare const keyringSweep: (names: readonly string[], deleteData: boolean) => Sweep;
16
+ export declare const holdingBack: (sweep: Sweep, held: readonly string[]) => Sweep;
17
+ export type LingerAction = "off" | "theirs" | "disable" | "unknown";
18
+ export declare const lingerAction: (markerFound: boolean, lingering: boolean | undefined) => LingerAction;
19
+ export type DistroOutcome = "purged" | "no-agent" | "older" | "failed";
20
+ export declare const distroOutcome: (code: number | null) => DistroOutcome;
21
+ export declare const linkIsOurs: (target: string | undefined, agentPath: string, binDir: string) => boolean;
22
+ export declare const windowsCleanupScript: (pid: number, paths: readonly string[], emptyDirs: readonly string[]) => string;
23
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/uninstall/plan.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAChC;AAGD,eAAO,MAAM,WAAW,UAAW;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,WAG/F,CAAC;AASH,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,OAAmC,CAAC;AAMpF,MAAM,WAAW,KAAK;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAKD,eAAO,MAAM,YAAY,UAAW,SAAS,MAAM,EAAE,cAAc,SAAS,MAAM,EAAE,cAAc,OAAO,KAAG,KAiB3G,CAAC;AAGF,eAAO,MAAM,YAAY,UAAW,SAAS,MAAM,EAAE,cAAc,OAAO,KAAG,KACsE,CAAC;AAGpJ,eAAO,MAAM,WAAW,UAAW,KAAK,QAAQ,SAAS,MAAM,EAAE,KAAG,KAGlE,CAAC;AAIH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE,eAAO,MAAM,YAAY,gBAAiB,OAAO,aAAa,OAAO,GAAG,SAAS,KAAG,YAQnF,CAAC;AAQF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEvE,eAAO,MAAM,aAAa,SAAU,MAAM,GAAG,IAAI,KAAG,aAQnD,CAAC;AAIF,eAAO,MAAM,UAAU,WAAY,MAAM,GAAG,SAAS,aAAa,MAAM,UAAU,MAAM,KAAG,OACb,CAAC;AAU/E,eAAO,MAAM,oBAAoB,QAAS,MAAM,SAAS,SAAS,MAAM,EAAE,aAAa,SAAS,MAAM,EAAE,KAAG,MAa3F,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { isInside } from "../upkeep/trash.js";
2
+ export const purgeChoice = (flags) => ({
3
+ purge: flags.purge === true || flags.deleteData === true,
4
+ deleteData: flags.deleteData === true,
5
+ });
6
+ const SANDBOX_TRASH = /^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z$/u;
7
+ const machineDataName = (name) => name === "restore" || name.startsWith("audit.jsonl");
8
+ export const sandboxTrashName = (name) => SANDBOX_TRASH.test(name);
9
+ const keyringDataName = (name) => name === "vault.json" || name === "keys.json" || name.startsWith("audit.jsonl");
10
+ const TRASH = "trash";
11
+ export const machineSweep = (names, trashNames, deleteData) => {
12
+ if (deleteData) {
13
+ return { remove: [...names], keep: [] };
14
+ }
15
+ const remove = [];
16
+ const keep = [];
17
+ for (const name of names) {
18
+ if (machineDataName(name)) {
19
+ keep.push(name);
20
+ }
21
+ else if (name === TRASH && trashNames.some(sandboxTrashName)) {
22
+ keep.push(...trashNames.filter(sandboxTrashName).map((entry) => `${TRASH}/${entry}`));
23
+ remove.push(...trashNames.filter((entry) => !sandboxTrashName(entry)).map((entry) => `${TRASH}/${entry}`));
24
+ }
25
+ else {
26
+ remove.push(name);
27
+ }
28
+ }
29
+ return { remove, keep };
30
+ };
31
+ export const keyringSweep = (names, deleteData) => deleteData ? { remove: [...names], keep: [] } : { remove: names.filter((name) => !keyringDataName(name)), keep: names.filter(keyringDataName) };
32
+ export const holdingBack = (sweep, held) => ({
33
+ remove: sweep.remove.filter((name) => !held.includes(name)),
34
+ keep: [...sweep.keep, ...sweep.remove.filter((name) => held.includes(name))],
35
+ });
36
+ export const lingerAction = (markerFound, lingering) => {
37
+ if (lingering === undefined) {
38
+ return "unknown";
39
+ }
40
+ if (!lingering) {
41
+ return "off";
42
+ }
43
+ return markerFound ? "disable" : "theirs";
44
+ };
45
+ const DISTRO_NO_AGENT_EXIT = 64;
46
+ const DISTRO_UNKNOWN_FLAG_EXIT = 252;
47
+ export const distroOutcome = (code) => {
48
+ if (code === 0) {
49
+ return "purged";
50
+ }
51
+ if (code === DISTRO_NO_AGENT_EXIT) {
52
+ return "no-agent";
53
+ }
54
+ return code === DISTRO_UNKNOWN_FLAG_EXIT ? "older" : "failed";
55
+ };
56
+ export const linkIsOurs = (target, agentPath, binDir) => target !== undefined && (target === agentPath || isInside(target, binDir));
57
+ const psQuoted = (text) => `'${text.replaceAll("'", "''")}'`;
58
+ export const windowsCleanupScript = (pid, paths, emptyDirs) => [
59
+ "$ErrorActionPreference = 'SilentlyContinue'",
60
+ `Wait-Process -Id ${pid} -Timeout 120`,
61
+ `$paths = @(${paths.map(psQuoted).join(", ")})`,
62
+ "for ($i = 0; $i -lt 15; $i++) {",
63
+ " foreach ($p in $paths) { if (Test-Path -LiteralPath $p) { Remove-Item -LiteralPath $p -Recurse -Force } }",
64
+ " if (-not ($paths | Where-Object { Test-Path -LiteralPath $_ })) { break }",
65
+ " Start-Sleep -Seconds 2",
66
+ "}",
67
+ `foreach ($d in @(${emptyDirs.map(psQuoted).join(", ")})) {`,
68
+ " if ((Test-Path -LiteralPath $d) -and -not (Get-ChildItem -LiteralPath $d -Force)) { Remove-Item -LiteralPath $d -Force }",
69
+ "}",
70
+ ].join("\n");
71
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/uninstall/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Ui } from "@intentic/local-agent";
2
+ export declare const purgeAgent: (ui: Ui, deleteData: boolean) => Promise<void>;
3
+ //# sourceMappingURL=purge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge.d.ts","sourceRoot":"","sources":["../../src/uninstall/purge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAuEhD,eAAO,MAAM,UAAU,OAAc,EAAE,cAAc,OAAO,KAAG,OAAO,CAAC,IAAI,CA+B1E,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { errorMessage } from "@intentic/base/errors";
2
+ import { plural } from "@intentic/base/format";
3
+ import { deviceUninstall } from "../device/commands.js";
4
+ import { WINDOWS_SIDE } from "../environments/wsl.js";
5
+ import { syncUninstall } from "../sync/commands.js";
6
+ import { purgeDistros } from "./distros.js";
7
+ import { setAgentAside, sweepAgentFiles } from "./sweep.js";
8
+ import { sandboxTrashName } from "./plan.js";
9
+ import { removeFromPath, removeKeyring, removeLegacy, residentGone, restoreLinger, retireStartBeforeSignIn, stopApps, stopOwnMutagen } from "./steps.js";
10
+ import { stopOf, tally } from "./tally.js";
11
+ const teardown = async (say, deleteData) => {
12
+ try {
13
+ say.note(await syncUninstall(say, undefined, { forGood: true }));
14
+ }
15
+ catch (error) {
16
+ say.warn(`File sync was not torn down cleanly (${errorMessage(error)}); its pairings go with the agent's files.`);
17
+ }
18
+ try {
19
+ say.note(await deviceUninstall(say, undefined, { forGood: true, recordStays: !deleteData }));
20
+ }
21
+ catch (error) {
22
+ say.warn(`The sandbox links were not removed cleanly (${errorMessage(error)}); they go with the agent's files.`);
23
+ }
24
+ };
25
+ const DATA_WORDS = [
26
+ [(name) => name === "vault.json", "your saved passwords (the keyring vault)", "keyring"],
27
+ [(name) => name === "restore", "the restore points of your synced folders", "machine"],
28
+ [(name) => name.startsWith("audit.jsonl"), "the record of what this agent did on this device", "machine"],
29
+ [(name) => name.startsWith("trash/") && sandboxTrashName(name.slice("trash/".length)), "files a sandbox moved to this device's trash", "machine"],
30
+ ];
31
+ const dataWords = (machine, keyring) => DATA_WORDS.filter(([matches, , where]) => (where === "machine" ? machine : keyring).some(matches)).map(([, words]) => words);
32
+ const sayFiles = (say, swept, deleteData) => {
33
+ if (swept.folders.length > 0) {
34
+ say.note(`Removed the agent's files from ${swept.folders.join(" and ")}.`);
35
+ }
36
+ const words = dataWords(swept.machineData, swept.keyringData);
37
+ if (words.length > 0) {
38
+ say.note(deleteData
39
+ ? `Deleted your data too, as asked: ${words.join("; ")}.`
40
+ : `Kept your data, which only an uninstall that deletes data removes: ${words.join("; ")}.${swept.keyringData.includes("vault.json") ? " Set the keyring up again and the same passphrase opens the vault." : ""}`);
41
+ }
42
+ if (swept.afterExit.length > 0) {
43
+ say.note(`The last ${plural(swept.afterExit.length, "file")} still in use go once this program exits.`);
44
+ }
45
+ if (swept.stuck.length > 0) {
46
+ say.fail(`${plural(swept.stuck.length, "path")} of the agent's could not be removed: ${swept.stuck.join(", ")}.`, process.platform === "win32" ? `Remove-Item -Recurse -Force ${swept.stuck.join(", ")}` : `rm -rf ${swept.stuck.join(" ")}`);
47
+ }
48
+ };
49
+ export const purgeAgent = async (ui, deleteData) => {
50
+ const say = tally(ui);
51
+ if (WINDOWS_SIDE) {
52
+ await purgeDistros(deleteData, say);
53
+ }
54
+ await setAgentAside().catch((error) => say.note(`The agent's binary could not be set aside first (${errorMessage(error)}); it goes with the files.`));
55
+ await stopApps(say);
56
+ await teardown(say, deleteData);
57
+ if (process.platform === "win32") {
58
+ await retireStartBeforeSignIn(say);
59
+ }
60
+ await residentGone(say);
61
+ await stopOwnMutagen(say);
62
+ const { holdBin } = await removeKeyring(say);
63
+ await removeLegacy(say);
64
+ if (!holdBin) {
65
+ await removeFromPath(say);
66
+ }
67
+ restoreLinger(say);
68
+ const swept = await sweepAgentFiles(deleteData, holdBin, say);
69
+ sayFiles(say, swept, deleteData);
70
+ const failures = say.failures();
71
+ if (failures.length > 0) {
72
+ throw new Error(stopOf("The agent was not removed from this device entirely.", failures));
73
+ }
74
+ const warnings = say.warnings();
75
+ ui.done(warnings === 0
76
+ ? "Removed the agent from this device. Nothing of it runs here any more."
77
+ : `Removed the agent from this device; ${plural(warnings, "step")} above ${warnings === 1 ? "needs" : "need"} finishing by hand.`);
78
+ };
79
+ //# sourceMappingURL=purge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge.js","sourceRoot":"","sources":["../../src/uninstall/purge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Tally } from "./tally.js";
2
+ export declare const stopApps: (say: Tally) => Promise<void>;
3
+ export declare const retireStartBeforeSignIn: (say: Tally) => Promise<void>;
4
+ export declare const residentGone: (say: Tally) => Promise<void>;
5
+ export declare const stopOwnMutagen: (say: Tally) => Promise<void>;
6
+ export declare const removeKeyring: (say: Tally) => Promise<{
7
+ readonly holdBin: boolean;
8
+ }>;
9
+ export declare const removeLegacy: (say: Tally) => Promise<void>;
10
+ export declare const removeFromPath: (say: Tally) => Promise<void>;
11
+ export declare const restoreLinger: (say: Tally) => void;
12
+ //# sourceMappingURL=steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/uninstall/steps.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWxC,eAAO,MAAM,QAAQ,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAYvD,CAAC;AAGF,eAAO,MAAM,uBAAuB,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAgBtE,CAAC;AAGF,eAAO,MAAM,YAAY,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAM3D,CAAC;AAGF,eAAO,MAAM,cAAc,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAS7D,CAAC;AAGF,eAAO,MAAM,aAAa,QAAe,KAAK,KAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAqCrF,CAAC;AAKF,eAAO,MAAM,YAAY,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAmC3D,CAAC;AA+BF,eAAO,MAAM,cAAc,QAAe,KAAK,KAAG,OAAO,CAAC,IAAI,CAqB7D,CAAC;AAGF,eAAO,MAAM,aAAa,QAAS,KAAK,KAAG,IAmB1C,CAAC"}
@@ -0,0 +1,200 @@
1
+ import { existsSync } from "node:fs";
2
+ import { rm } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { errorMessage } from "@intentic/base/errors";
5
+ import { plural } from "@intentic/base/format";
6
+ import { keyringPaths } from "@intentic/keyring";
7
+ import { autostart, beforeSignIn, beforeSignInTaskName, clearWindowsRunValue, disableLinger, homeDir, lingerMarkerPath, lingerOn, } from "@intentic/local-agent";
8
+ import { KEYRING_AUTOSTART, MACHINE_AUTOSTART } from "../autostart/autostart.js";
9
+ import { binDir, baseDir } from "../config.js";
10
+ import { stopAllApps } from "../device/tools/programs/stop-all.js";
11
+ import { readWindowsPath, removeFromWindowsPathValue, writeWindowsPath } from "../install.js";
12
+ import { uninstallAskpass } from "../keyring/askpass.js";
13
+ import { uninstallGitHelper } from "../keyring/git-helper.js";
14
+ import { uninstallNativeHost } from "../keyring/native-host-install.js";
15
+ import { keyringInstalled, keyringPid, serviceHere, uninstallKeyring } from "../keyring/service.js";
16
+ import { agentPath } from "../release.js";
17
+ import { machineLauncher, readResident, retireResident } from "../resident/supervision.js";
18
+ import { runProcess } from "../sync/exec.js";
19
+ import { MUTAGEN_CALL_TIMEOUT_MS, MUTAGEN_RUN_VALUE } from "../sync/mutagen.js";
20
+ import { ownMutagenPath } from "../sync/binary/mutagen-binary.js";
21
+ import { removeManagedSshConfig } from "../sync/ssh.js";
22
+ import { legacyAutostart, linkWatchPaths, retiredPaths } from "../upkeep/retired.js";
23
+ import { exists, isInside, linkTarget, processesFrom } from "../upkeep/trash.js";
24
+ import { lingerAction, linkIsOurs } from "./plan.js";
25
+ const WINDOWS = process.platform === "win32";
26
+ const killCommand = (pid) => (WINDOWS ? `taskkill /PID ${pid} /T /F` : `kill ${pid}`);
27
+ export const stopApps = async (say) => {
28
+ try {
29
+ const { stopped, left } = await stopAllApps();
30
+ if (stopped.length > 0) {
31
+ say.note(`Stopped ${plural(stopped.length, "program")} a sandbox had started on this device: ${stopped.join(", ")}.`);
32
+ }
33
+ for (const { run, why } of left) {
34
+ say.warn(`${run.name} may still be running: ${why}.`, killCommand(run.pid));
35
+ }
36
+ }
37
+ catch (error) {
38
+ say.warn(`The programs sandboxes started on this device could not be listed (${errorMessage(error)}), so none was stopped.`);
39
+ }
40
+ };
41
+ export const retireStartBeforeSignIn = async (say) => {
42
+ const entry = beforeSignIn(MACHINE_AUTOSTART, machineLauncher());
43
+ if (entry === undefined || entry.state() === "off") {
44
+ return;
45
+ }
46
+ say.note("Windows also starts this agent before sign-in; removing that asks Windows for permission on this device.");
47
+ try {
48
+ await entry.disable();
49
+ say.note("Removed the start before sign-in.");
50
+ }
51
+ catch (error) {
52
+ say.warn(`Windows still has the task that starts this agent before sign-in (${errorMessage(error)}).`, `schtasks /delete /tn ${beforeSignInTaskName(MACHINE_AUTOSTART)} /f, in a terminal run as administrator`);
53
+ }
54
+ };
55
+ export const residentGone = async (say) => {
56
+ await retireResident(say.note);
57
+ const still = await readResident();
58
+ if (still !== undefined) {
59
+ say.fail(`the agent is still running (pid ${still.pid}) after being asked to stop.`, killCommand(still.pid));
60
+ }
61
+ };
62
+ export const stopOwnMutagen = async (say) => {
63
+ if (WINDOWS) {
64
+ clearWindowsRunValue(MUTAGEN_RUN_VALUE);
65
+ }
66
+ await removeManagedSshConfig().catch((error) => say.warn(`The ssh-config include could not be removed (${errorMessage(error)}).`, "remove the Include of intentic's file from ~/.ssh/config"));
67
+ if (existsSync(ownMutagenPath())) {
68
+ await runProcess(ownMutagenPath(), ["daemon", "stop"], { timeoutMs: MUTAGEN_CALL_TIMEOUT_MS });
69
+ }
70
+ };
71
+ export const removeKeyring = async (say) => {
72
+ try {
73
+ await uninstallAskpass();
74
+ }
75
+ catch (error) {
76
+ say.warn(`ssh, sudo and git may still ask intentic-askpass for passwords (${errorMessage(error)}).`, WINDOWS ? "unset SSH_ASKPASS, SSH_ASKPASS_REQUIRE, SUDO_ASKPASS and GIT_ASKPASS in your user environment" : "rm ~/.config/environment.d/intentic-askpass.conf");
77
+ }
78
+ try {
79
+ await uninstallGitHelper();
80
+ await uninstallNativeHost();
81
+ }
82
+ catch (error) {
83
+ say.warn(`git or a browser may still try Passwords' helper (${errorMessage(error)}).`, "git config --global --unset-all credential.helper intentic, and remove dev.intentic.keyring from the browsers' NativeMessagingHosts");
84
+ }
85
+ const service = await serviceHere();
86
+ const installed = keyringInstalled();
87
+ if (!service && !installed && !existsSync(keyringPaths().dir)) {
88
+ return { holdBin: false };
89
+ }
90
+ try {
91
+ const { service: was } = await uninstallKeyring(say.note);
92
+ if (was || installed) {
93
+ say.note(was ? "Removed Passwords, its protected service and its login entry." : "Removed Passwords and its login entry.");
94
+ }
95
+ return { holdBin: false };
96
+ }
97
+ catch (error) {
98
+ if (service) {
99
+ say.warn(`Passwords' protected service stays (${errorMessage(error)}), so this agent's programs stay to finish it.`, "intentic-machine uninstall --purge");
100
+ return { holdBin: true };
101
+ }
102
+ const pid = await keyringPid();
103
+ say.warn(`The keyring was not removed entirely (${errorMessage(error)}).`, pid === undefined ? "intentic-machine uninstall --purge" : killCommand(pid));
104
+ return { holdBin: false };
105
+ }
106
+ };
107
+ const quiet = () => undefined;
108
+ export const removeLegacy = async (say) => {
109
+ const removed = [];
110
+ for (const spec of legacyAutostart(baseDir)) {
111
+ const entry = autostart(spec, machineLauncher(), quiet);
112
+ if (await entry.present()) {
113
+ await entry.unregister();
114
+ removed.push(`the ${spec.id} login entry`);
115
+ }
116
+ }
117
+ const home = homeDir();
118
+ const { dirs, links } = retiredPaths(home, baseDir);
119
+ for (const link of links) {
120
+ const target = await linkTarget(link);
121
+ if (target !== undefined && dirs.some((dir) => isInside(target, dir))) {
122
+ await rm(link, { force: true });
123
+ removed.push(link);
124
+ }
125
+ }
126
+ for (const dir of dirs.filter((each) => existsSync(each))) {
127
+ const running = (await processesFrom(dir)) ?? [];
128
+ if (running.length > 0) {
129
+ say.warn(`A program from ${dir} is still running (pid ${running.join(", ")}), an agent from before this one.`, running.map(killCommand).join("; "));
130
+ }
131
+ await rm(dir, { recursive: true, force: true }).then(() => removed.push(dir), (error) => say.warn(`${dir} could not be removed (${errorMessage(error)}).`, WINDOWS ? `Remove-Item -Recurse -Force ${dir}` : `rm -rf ${dir}`));
132
+ }
133
+ removed.push(...(await removeLinkWatch(home)));
134
+ if (removed.length > 0) {
135
+ say.note(`Removed what the agents before this one left: ${removed.join(", ")}.`);
136
+ }
137
+ };
138
+ const userSystemctl = async (...args) => void (await runProcess("systemctl", ["--user", ...args], { timeoutMs: 30_000 }));
139
+ const removeLinkWatch = async (home) => {
140
+ if (process.platform !== "linux") {
141
+ return [];
142
+ }
143
+ const present = [];
144
+ for (const path of linkWatchPaths(home)) {
145
+ if (await exists(path)) {
146
+ present.push(path);
147
+ }
148
+ }
149
+ if (present.length === 0) {
150
+ return [];
151
+ }
152
+ await userSystemctl("disable", "--now", "intentic-link-watch.timer");
153
+ await userSystemctl("stop", "intentic-link-watch.service");
154
+ for (const path of present) {
155
+ await rm(path, { force: true });
156
+ }
157
+ await userSystemctl("daemon-reload");
158
+ return ["intentic-link-watch"];
159
+ };
160
+ export const removeFromPath = async (say) => {
161
+ if (WINDOWS) {
162
+ try {
163
+ const { kind, stored } = await readWindowsPath();
164
+ const next = removeFromWindowsPathValue(stored, binDir);
165
+ if (next !== undefined) {
166
+ await writeWindowsPath(kind, next);
167
+ say.note(`Took ${binDir} off your PATH.`);
168
+ }
169
+ }
170
+ catch (error) {
171
+ say.warn(`${binDir} could not be taken off your PATH (${errorMessage(error)}).`, `remove ${binDir} from your user PATH in Windows' environment variables`);
172
+ }
173
+ return;
174
+ }
175
+ const link = join(homeDir(), ".local", "bin", "intentic-machine");
176
+ if (linkIsOurs(await linkTarget(link), agentPath, binDir)) {
177
+ await rm(link, { force: true }).then(() => say.note(`Removed the intentic-machine link from ${join(homeDir(), ".local", "bin")}.`), (error) => say.warn(`${link} could not be removed (${errorMessage(error)}).`, `rm ${link}`));
178
+ }
179
+ };
180
+ export const restoreLinger = (say) => {
181
+ if (process.platform !== "linux") {
182
+ return;
183
+ }
184
+ const marked = [lingerMarkerPath(MACHINE_AUTOSTART), lingerMarkerPath(KEYRING_AUTOSTART)].some((marker) => existsSync(marker));
185
+ const action = lingerAction(marked, lingerOn());
186
+ if (action === "theirs") {
187
+ say.note("Lingering stays on for your user: it was on before this agent asked for it.");
188
+ return;
189
+ }
190
+ if (action !== "disable") {
191
+ return;
192
+ }
193
+ const refused = disableLinger();
194
+ if (refused === undefined) {
195
+ say.note("Turned lingering off for your user: this agent had turned it on.");
196
+ return;
197
+ }
198
+ say.warn(`Lingering stays on for your user (${refused}), which this agent had turned on.`, "loginctl disable-linger");
199
+ };
200
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/uninstall/steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Tally } from "./tally.js";
2
+ export declare const asidePath: string;
3
+ export declare const setAgentAside: () => Promise<void>;
4
+ export interface SweptFiles {
5
+ readonly machineData: readonly string[];
6
+ readonly keyringData: readonly string[];
7
+ readonly folders: readonly string[];
8
+ readonly stuck: readonly string[];
9
+ readonly afterExit: readonly string[];
10
+ }
11
+ export declare const sweepAgentFiles: (deleteData: boolean, holdBin: boolean, say: Tally) => Promise<SweptFiles>;
12
+ //# sourceMappingURL=sweep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/uninstall/sweep.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAUxC,eAAO,MAAM,SAAS,QAA8B,CAAC;AASrD,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CAIlD,CAAC;AAEF,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AA6DD,eAAO,MAAM,eAAe,eAAsB,OAAO,WAAW,OAAO,OAAO,KAAK,KAAG,OAAO,CAAC,UAAU,CA4B3G,CAAC"}