@intentic/machine 1.233.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 (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +72 -0
  3. package/dist/app.d.ts +2 -0
  4. package/dist/app.d.ts.map +1 -0
  5. package/dist/app.js +12 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/autostart.d.ts +3 -0
  8. package/dist/autostart.d.ts.map +1 -0
  9. package/dist/autostart.js +13 -0
  10. package/dist/autostart.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +5 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands.d.ts +11 -0
  16. package/dist/commands.d.ts.map +1 -0
  17. package/dist/commands.js +91 -0
  18. package/dist/commands.js.map +1 -0
  19. package/dist/computer/audit.d.ts +6 -0
  20. package/dist/computer/audit.d.ts.map +1 -0
  21. package/dist/computer/audit.js +12 -0
  22. package/dist/computer/audit.js.map +1 -0
  23. package/dist/computer/commands.d.ts +8 -0
  24. package/dist/computer/commands.d.ts.map +1 -0
  25. package/dist/computer/commands.js +113 -0
  26. package/dist/computer/commands.js.map +1 -0
  27. package/dist/computer/config.d.ts +19 -0
  28. package/dist/computer/config.d.ts.map +1 -0
  29. package/dist/computer/config.js +31 -0
  30. package/dist/computer/config.js.map +1 -0
  31. package/dist/computer/connection.d.ts +8 -0
  32. package/dist/computer/connection.d.ts.map +1 -0
  33. package/dist/computer/connection.js +63 -0
  34. package/dist/computer/connection.js.map +1 -0
  35. package/dist/computer/mcp.d.ts +3 -0
  36. package/dist/computer/mcp.d.ts.map +1 -0
  37. package/dist/computer/mcp.js +312 -0
  38. package/dist/computer/mcp.js.map +1 -0
  39. package/dist/computer/policy.d.ts +8 -0
  40. package/dist/computer/policy.d.ts.map +1 -0
  41. package/dist/computer/policy.js +42 -0
  42. package/dist/computer/policy.js.map +1 -0
  43. package/dist/computer/router.d.ts +93 -0
  44. package/dist/computer/router.d.ts.map +1 -0
  45. package/dist/computer/router.js +79 -0
  46. package/dist/computer/router.js.map +1 -0
  47. package/dist/computer/tools/apps.d.ts +9 -0
  48. package/dist/computer/tools/apps.d.ts.map +1 -0
  49. package/dist/computer/tools/apps.js +41 -0
  50. package/dist/computer/tools/apps.js.map +1 -0
  51. package/dist/computer/tools/browser.d.ts +11 -0
  52. package/dist/computer/tools/browser.d.ts.map +1 -0
  53. package/dist/computer/tools/browser.js +63 -0
  54. package/dist/computer/tools/browser.js.map +1 -0
  55. package/dist/computer/tools/computer.d.ts +16 -0
  56. package/dist/computer/tools/computer.d.ts.map +1 -0
  57. package/dist/computer/tools/computer.js +80 -0
  58. package/dist/computer/tools/computer.js.map +1 -0
  59. package/dist/computer/tools/describe.d.ts +4 -0
  60. package/dist/computer/tools/describe.d.ts.map +1 -0
  61. package/dist/computer/tools/describe.js +37 -0
  62. package/dist/computer/tools/describe.js.map +1 -0
  63. package/dist/computer/tools/files.d.ts +12 -0
  64. package/dist/computer/tools/files.d.ts.map +1 -0
  65. package/dist/computer/tools/files.js +58 -0
  66. package/dist/computer/tools/files.js.map +1 -0
  67. package/dist/computer/tools/sandboxes.d.ts +45 -0
  68. package/dist/computer/tools/sandboxes.d.ts.map +1 -0
  69. package/dist/computer/tools/sandboxes.js +230 -0
  70. package/dist/computer/tools/sandboxes.js.map +1 -0
  71. package/dist/computer/tools/shell.d.ts +22 -0
  72. package/dist/computer/tools/shell.d.ts.map +1 -0
  73. package/dist/computer/tools/shell.js +78 -0
  74. package/dist/computer/tools/shell.js.map +1 -0
  75. package/dist/config.d.ts +4 -0
  76. package/dist/config.d.ts.map +1 -0
  77. package/dist/config.js +7 -0
  78. package/dist/config.js.map +1 -0
  79. package/dist/resident.d.ts +8 -0
  80. package/dist/resident.d.ts.map +1 -0
  81. package/dist/resident.js +92 -0
  82. package/dist/resident.js.map +1 -0
  83. package/dist/status.d.ts +21 -0
  84. package/dist/status.d.ts.map +1 -0
  85. package/dist/status.js +123 -0
  86. package/dist/status.js.map +1 -0
  87. package/dist/sync/commands.d.ts +20 -0
  88. package/dist/sync/commands.d.ts.map +1 -0
  89. package/dist/sync/commands.js +244 -0
  90. package/dist/sync/commands.js.map +1 -0
  91. package/dist/sync/config.d.ts +41 -0
  92. package/dist/sync/config.d.ts.map +1 -0
  93. package/dist/sync/config.js +35 -0
  94. package/dist/sync/config.js.map +1 -0
  95. package/dist/sync/exec.d.ts +10 -0
  96. package/dist/sync/exec.d.ts.map +1 -0
  97. package/dist/sync/exec.js +26 -0
  98. package/dist/sync/exec.js.map +1 -0
  99. package/dist/sync/git-bridge.d.ts +11 -0
  100. package/dist/sync/git-bridge.d.ts.map +1 -0
  101. package/dist/sync/git-bridge.js +122 -0
  102. package/dist/sync/git-bridge.js.map +1 -0
  103. package/dist/sync/mirror.d.ts +19 -0
  104. package/dist/sync/mirror.d.ts.map +1 -0
  105. package/dist/sync/mirror.js +310 -0
  106. package/dist/sync/mirror.js.map +1 -0
  107. package/dist/sync/mutagen.d.ts +68 -0
  108. package/dist/sync/mutagen.d.ts.map +1 -0
  109. package/dist/sync/mutagen.js +289 -0
  110. package/dist/sync/mutagen.js.map +1 -0
  111. package/dist/sync/report.d.ts +6 -0
  112. package/dist/sync/report.d.ts.map +1 -0
  113. package/dist/sync/report.js +66 -0
  114. package/dist/sync/report.js.map +1 -0
  115. package/dist/sync/ssh.d.ts +29 -0
  116. package/dist/sync/ssh.d.ts.map +1 -0
  117. package/dist/sync/ssh.js +165 -0
  118. package/dist/sync/ssh.js.map +1 -0
  119. package/dist/sync/tunnel.d.ts +22 -0
  120. package/dist/sync/tunnel.d.ts.map +1 -0
  121. package/dist/sync/tunnel.js +160 -0
  122. package/dist/sync/tunnel.js.map +1 -0
  123. package/dist/upgrade.d.ts +36 -0
  124. package/dist/upgrade.d.ts.map +1 -0
  125. package/dist/upgrade.js +95 -0
  126. package/dist/upgrade.js.map +1 -0
  127. package/dist/version.d.ts +2 -0
  128. package/dist/version.d.ts.map +1 -0
  129. package/dist/version.js +2 -0
  130. package/dist/version.js.map +1 -0
  131. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/sync/tunnel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AA6BjD,eAAO,MAAM,WAAW,cAAe,MAAM,KAAG,MAM/C,CAAC;AAGF,eAAO,MAAM,YAAY,eAAgB,MAAM,KAAG,MAAmF,CAAC;AAiCtI,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AAMD,eAAO,MAAM,aAAa,aACZ,SAAS;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAC9G,SAAS,YAAY,EAGsE,CAAC;AAI/F,eAAO,MAAM,gBAAgB,WAAY,MAAM,UAAU,YAAY,WAAW,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,KAAG,IA6E3G,CAAC;AAeF,eAAO,MAAM,cAAc,WAAkB,YAAY,OAAO,GAAG,KAAG,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CA4B9G,CAAC;AASF,eAAO,MAAM,gBAAgB,QAAS,GAAG;IAGjC,SAAS,YAAkB,SAAS,YAAY,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC;IAsBlE,OAAO,QAAY,OAAO,CAAC,IAAI,CAAC;CAMvC,CAAC;AAQF,eAAO,MAAM,WAAW,SAAgB,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,OAAO,CAmBlF,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { connect, createServer } from "node:net";
2
+ const SSH_PORT_BASE = 24000;
3
+ const SSH_PORT_SPAN = 4000;
4
+ export const syncSshPort = (sandboxId) => {
5
+ const hex = (/[0-9a-f]{6}/i.exec(sandboxId)?.[0] ?? "000000").toLowerCase();
6
+ return SSH_PORT_BASE + (Number.parseInt(hex, 16) % SSH_PORT_SPAN);
7
+ };
8
+ export const sshSocketUrl = (sandboxUrl) => `${sandboxUrl.replace(/\/$/, "").replace(/^http/, "ws")}/system/sync/ssh`;
9
+ const BUFFER_HIGH = 1_048_576;
10
+ const BUFFER_LOW = 262_144;
11
+ const DRAIN_POLL_MS = 50;
12
+ const OPEN_TIMEOUT_MS = 10_000;
13
+ const frameOf = (chunk) => {
14
+ const frame = new Uint8Array(chunk.byteLength);
15
+ frame.set(chunk);
16
+ return frame;
17
+ };
18
+ export const tunnelTargets = (pairings) => pairings
19
+ .filter((pairing) => pairing.syncToken !== undefined)
20
+ .map(({ sandboxId, sandboxUrl, syncToken }) => ({ sandboxId, sandboxUrl, syncToken }));
21
+ export const bridgeConnection = (socket, target, onError) => {
22
+ const ws = new WebSocket(sshSocketUrl(target.sandboxUrl), { headers: { "x-intentic-sync": target.syncToken } });
23
+ ws.binaryType = "arraybuffer";
24
+ const queued = [];
25
+ let open = false;
26
+ let drain;
27
+ socket.pause();
28
+ const close = () => {
29
+ clearInterval(drain);
30
+ drain = undefined;
31
+ clearTimeout(handshake);
32
+ socket.destroy();
33
+ if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
34
+ ws.close();
35
+ }
36
+ };
37
+ const handshake = setTimeout(() => {
38
+ onError(`the sync transport to ${target.sandboxId} did not open within ${OPEN_TIMEOUT_MS / 1000}s: the sandbox is not answering`);
39
+ close();
40
+ }, OPEN_TIMEOUT_MS);
41
+ socket.on("data", (chunk) => {
42
+ if (!open) {
43
+ queued.push(chunk);
44
+ return;
45
+ }
46
+ ws.send(frameOf(chunk));
47
+ if (drain === undefined && ws.bufferedAmount > BUFFER_HIGH) {
48
+ socket.pause();
49
+ drain = setInterval(() => {
50
+ if (ws.bufferedAmount < BUFFER_LOW) {
51
+ clearInterval(drain);
52
+ drain = undefined;
53
+ socket.resume();
54
+ }
55
+ }, DRAIN_POLL_MS);
56
+ }
57
+ });
58
+ socket.on("close", close);
59
+ socket.on("error", close);
60
+ ws.addEventListener("open", () => {
61
+ open = true;
62
+ clearTimeout(handshake);
63
+ for (const chunk of queued) {
64
+ ws.send(frameOf(chunk));
65
+ }
66
+ queued.length = 0;
67
+ socket.resume();
68
+ });
69
+ ws.addEventListener("message", (event) => {
70
+ const data = event.data;
71
+ if (data instanceof ArrayBuffer) {
72
+ socket.write(Buffer.from(data));
73
+ }
74
+ else if (typeof data === "string") {
75
+ socket.write(Buffer.from(data, "binary"));
76
+ }
77
+ });
78
+ ws.addEventListener("error", () => {
79
+ onError(`the sync transport to ${target.sandboxId} could not be opened`);
80
+ close();
81
+ });
82
+ ws.addEventListener("close", close);
83
+ };
84
+ export const startSshTunnel = async (target, log) => {
85
+ const port = syncSshPort(target.sandboxId);
86
+ const sockets = new Set();
87
+ const server = createServer((socket) => {
88
+ sockets.add(socket);
89
+ socket.on("close", () => sockets.delete(socket));
90
+ bridgeConnection(socket, target, (message) => log(message));
91
+ });
92
+ const bound = await new Promise((resolve) => {
93
+ server.once("error", (error) => {
94
+ log(error.code === "EADDRINUSE"
95
+ ? `port ${port} is already taken, so ${target.sandboxId} has no sync transport on this machine. Free it and restart the mirror watcher.`
96
+ : `the sync transport for ${target.sandboxId} could not listen on ${port}: ${error.message}`);
97
+ resolve(false);
98
+ });
99
+ server.listen(port, "127.0.0.1", () => resolve(true));
100
+ });
101
+ if (!bound) {
102
+ return undefined;
103
+ }
104
+ return async () => {
105
+ for (const socket of sockets) {
106
+ socket.destroy();
107
+ }
108
+ await new Promise((resolve) => server.close(() => resolve()));
109
+ };
110
+ };
111
+ export const createTunnelPool = (log) => {
112
+ const running = new Map();
113
+ return {
114
+ reconcile: async (targets) => {
115
+ const wanted = new Set(targets.map((target) => target.sandboxId));
116
+ for (const [sandboxId, stop] of running) {
117
+ if (!wanted.has(sandboxId)) {
118
+ running.delete(sandboxId);
119
+ await stop();
120
+ log(` sync transport for ${sandboxId} stopped: it is no longer paired`);
121
+ }
122
+ }
123
+ for (const target of targets) {
124
+ if (running.has(target.sandboxId)) {
125
+ continue;
126
+ }
127
+ const stop = await startSshTunnel(target, log);
128
+ if (stop !== undefined) {
129
+ running.set(target.sandboxId, stop);
130
+ log(` sync transport for ${target.sandboxId} listening on 127.0.0.1:${syncSshPort(target.sandboxId)}`);
131
+ }
132
+ }
133
+ },
134
+ stopAll: async () => {
135
+ const stops = [...running.values()];
136
+ running.clear();
137
+ await Promise.all(stops.map(async (stop) => await stop()));
138
+ },
139
+ };
140
+ };
141
+ const READY_POLL_MS = 100;
142
+ export const tunnelReady = async (port, timeoutMs) => {
143
+ const deadline = Date.now() + timeoutMs;
144
+ for (;;) {
145
+ const open = await new Promise((resolve) => {
146
+ const probe = connect(port, "127.0.0.1");
147
+ const settle = (value) => {
148
+ probe.destroy();
149
+ resolve(value);
150
+ };
151
+ probe.once("connect", () => settle(true));
152
+ probe.once("error", () => settle(false));
153
+ });
154
+ if (open || Date.now() >= deadline) {
155
+ return open;
156
+ }
157
+ await new Promise((resolve) => setTimeout(resolve, READY_POLL_MS));
158
+ }
159
+ };
160
+ //# sourceMappingURL=tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/sync/tunnel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Log } from "@intentic/local-agent";
2
+ export declare const agentPath: string;
3
+ export declare const assetUrl: () => string;
4
+ export type Probe = {
5
+ readonly kind: "version";
6
+ readonly version: string;
7
+ } | {
8
+ readonly kind: "no-version-command";
9
+ } | {
10
+ readonly kind: "unusable";
11
+ };
12
+ export type UpgradeOutcome = {
13
+ readonly kind: "current";
14
+ readonly version: string;
15
+ readonly note?: string;
16
+ } | {
17
+ readonly kind: "upgraded";
18
+ readonly from: string;
19
+ readonly to: string;
20
+ } | {
21
+ readonly kind: "failed";
22
+ readonly reason: string;
23
+ };
24
+ export interface UpgradeExec {
25
+ readonly fetchTo: (url: string, dest: string) => Promise<void>;
26
+ readonly probe: (binary: string) => Probe;
27
+ readonly swap: (from: string, to: string) => Promise<void>;
28
+ readonly stopWatcher: () => Promise<number | undefined>;
29
+ readonly startWatcher: () => Promise<void>;
30
+ readonly watcherAlive: () => Promise<boolean>;
31
+ readonly discard: (path: string) => Promise<void>;
32
+ }
33
+ export declare const runUpgrade: (exec: UpgradeExec, url: string, installed: string, force: boolean, log: Log) => Promise<UpgradeOutcome>;
34
+ export declare const realUpgradeExec: (stopWatcher: () => Promise<number | undefined>, startWatcher: () => Promise<void>, alive: () => Promise<boolean>) => UpgradeExec;
35
+ export declare const upgradeMessage: (outcome: UpgradeOutcome) => string;
36
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAwBjD,eAAO,MAAM,SAAS,QAAyC,CAAC;AAIhE,eAAO,MAAM,QAAQ,QAAO,MAC0F,CAAC;AAWvH,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAmBrJ,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACzE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAI3D,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAMD,eAAO,MAAM,UAAU,SAAgB,WAAW,OAAO,MAAM,aAAa,MAAM,SAAS,OAAO,OAAO,GAAG,KAAG,OAAO,CAAC,cAAc,CAyEpI,CAAC;AAIF,eAAO,MAAM,eAAe,gBACX,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,gBAChC,MAAM,OAAO,CAAC,IAAI,CAAC,SAC1B,MAAM,OAAO,CAAC,OAAO,CAAC,KAC9B,WAWD,CAAC;AAGH,eAAO,MAAM,cAAc,YAAa,cAAc,KAAG,MAQxD,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { chmod, rename, rm } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { DEV_VERSION, isNewer } from "@intentic/sandbox-contract";
5
+ import { binDir } from "./sync/config.js";
6
+ import { archToken, download, exe, osToken } from "./sync/mutagen.js";
7
+ export const agentPath = join(binDir, `intentic-machine${exe}`);
8
+ export const assetUrl = () => `https://github.com/intentic/intentic/releases/latest/download/intentic-machine-${osToken()}-${archToken()}${exe}`;
9
+ const probeVersion = (binary) => {
10
+ const result = spawnSync(binary, ["version"], { encoding: "utf8", timeout: 30_000, windowsHide: true });
11
+ if (result.error !== undefined) {
12
+ return { kind: "unusable" };
13
+ }
14
+ const version = result.status === 0 ? /^\d+\.\d+\.\d+$/.exec(result.stdout.trim())?.[0] : undefined;
15
+ if (version !== undefined) {
16
+ return { kind: "version", version };
17
+ }
18
+ return { kind: result.status === 0 ? "unusable" : "no-version-command" };
19
+ };
20
+ export const runUpgrade = async (exec, url, installed, force, log) => {
21
+ const staged = `${agentPath}.new`;
22
+ const previous = `${agentPath}.previous`;
23
+ log(`Downloading the current agent…`);
24
+ try {
25
+ await exec.fetchTo(url, staged);
26
+ }
27
+ catch (error) {
28
+ await exec.discard(staged);
29
+ return { kind: "failed", reason: `the download failed (${error instanceof Error ? error.message : String(error)}), nothing was changed.` };
30
+ }
31
+ const probed = exec.probe(staged);
32
+ if (probed.kind === "unusable") {
33
+ await exec.discard(staged);
34
+ return { kind: "failed", reason: `what downloaded doesn't run as an agent, keeping the one you have.` };
35
+ }
36
+ if (probed.kind === "no-version-command") {
37
+ await exec.discard(staged);
38
+ return {
39
+ kind: "current",
40
+ version: installed,
41
+ note: `the published agent predates \`intentic-machine version\`, so it is older than the one on this machine, yours is kept.`,
42
+ };
43
+ }
44
+ const candidate = probed.version;
45
+ if (installed !== DEV_VERSION && !isNewer(candidate, installed)) {
46
+ await exec.discard(staged);
47
+ return { kind: "current", version: installed };
48
+ }
49
+ if (installed === DEV_VERSION && !force) {
50
+ await exec.discard(staged);
51
+ return {
52
+ kind: "current",
53
+ version: installed,
54
+ note: `this agent was built from source, not installed from a release. \`intentic-machine upgrade --force\` replaces it with the published ${candidate}.`,
55
+ };
56
+ }
57
+ const wasRunning = (await exec.stopWatcher()) !== undefined;
58
+ await exec.swap(agentPath, previous);
59
+ await exec.swap(staged, agentPath);
60
+ if (!wasRunning) {
61
+ await exec.discard(previous);
62
+ return { kind: "upgraded", from: installed, to: candidate };
63
+ }
64
+ await exec.startWatcher();
65
+ if (await exec.watcherAlive()) {
66
+ await exec.discard(previous);
67
+ return { kind: "upgraded", from: installed, to: candidate };
68
+ }
69
+ log(`The new agent didn't stay running: putting the previous one back.`);
70
+ await exec.swap(previous, agentPath);
71
+ await exec.startWatcher();
72
+ return { kind: "failed", reason: `the new agent (${candidate}) wouldn't start, so ${installed} was restored and is running again.` };
73
+ };
74
+ export const realUpgradeExec = (stopWatcher, startWatcher, alive) => ({
75
+ fetchTo: async (url, dest) => {
76
+ await download(url, dest);
77
+ await chmod(dest, 0o755);
78
+ },
79
+ probe: probeVersion,
80
+ swap: async (from, to) => await rename(from, to),
81
+ stopWatcher,
82
+ startWatcher,
83
+ watcherAlive: alive,
84
+ discard: async (path) => await rm(path, { force: true }).catch(() => undefined),
85
+ });
86
+ export const upgradeMessage = (outcome) => {
87
+ if (outcome.kind === "current") {
88
+ return outcome.note === undefined ? `Already on the current agent (${outcome.version}). Nothing to do.` : `Left as it is: ${outcome.note}`;
89
+ }
90
+ if (outcome.kind === "upgraded") {
91
+ return `Upgraded the agent: ${outcome.from} → ${outcome.to}.`;
92
+ }
93
+ return `Upgrade didn't happen: ${outcome.reason}`;
94
+ };
95
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const MACHINE_VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,eAAe,EAAE,MAAsF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const MACHINE_VERSION = typeof INTENTIC_AGENT_VERSION === "string" ? INTENTIC_AGENT_VERSION : "0.0.0";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,eAAe,GAAW,OAAO,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@intentic/machine",
3
+ "version": "1.233.0",
4
+ "description": "The one agent that lives on a user's own computer: lets an intentic sandbox work on it (outbound WebSocket, MCP tools, scopes enforced here) and keeps folders and ports mirrored with it (Mutagen over tunnel SSH)",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/intentic/intentic.git",
10
+ "directory": "_computers/machine"
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "bin": {
20
+ "intentic-machine": "./dist/cli.js"
21
+ },
22
+ "dependencies": {
23
+ "@orpc/server": "1.14.13",
24
+ "@stricli/core": "1.3.0",
25
+ "tslib": "2.8.1",
26
+ "zod": "4.4.3",
27
+ "@intentic/constants": "1.233.0",
28
+ "@intentic/sandbox-contract": "1.233.0",
29
+ "@intentic/browser": "1.233.0",
30
+ "@intentic/local-agent": "1.233.0",
31
+ "@intentic/desktop": "1.233.0"
32
+ },
33
+ "devDependencies": {
34
+ "@orpc/client": "1.14.13",
35
+ "@orpc/contract": "1.14.13",
36
+ "@types/node": "24.13.2",
37
+ "@typescript/native-preview": "7.0.0-dev.20260707.2",
38
+ "vitest": "4.1.10",
39
+ "@intentic/testing": "0.0.0",
40
+ "@intentic/tsconfig": "0.0.0"
41
+ },
42
+ "scripts": {
43
+ "build": "tsgo",
44
+ "typecheck": "tsgo --noEmit -p tsconfig.test.json",
45
+ "watch": "tsgo --build --watch",
46
+ "test": "vitest run",
47
+ "test:watch": "vitest"
48
+ }
49
+ }