@intentic/machine 1.308.2 → 1.310.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -2
- package/dist/daemon-base.d.ts +7 -0
- package/dist/daemon-base.d.ts.map +1 -1
- package/dist/daemon-base.js +22 -0
- package/dist/daemon-base.js.map +1 -1
- package/dist/device/commands.d.ts.map +1 -1
- package/dist/device/commands.js +12 -41
- package/dist/device/commands.js.map +1 -1
- package/dist/device/connection.d.ts +2 -1
- package/dist/device/connection.d.ts.map +1 -1
- package/dist/device/connection.js +13 -2
- package/dist/device/connection.js.map +1 -1
- package/dist/device/indicator.d.ts +28 -0
- package/dist/device/indicator.d.ts.map +1 -0
- package/dist/device/indicator.js +115 -0
- package/dist/device/indicator.js.map +1 -0
- package/dist/device/mcp.d.ts.map +1 -1
- package/dist/device/mcp.js +62 -8
- package/dist/device/mcp.js.map +1 -1
- package/dist/device/policy.d.ts +4 -1
- package/dist/device/policy.d.ts.map +1 -1
- package/dist/device/policy.js +23 -5
- package/dist/device/policy.js.map +1 -1
- package/dist/device/router.d.ts +2 -0
- package/dist/device/router.d.ts.map +1 -1
- package/dist/device/router.js +4 -3
- package/dist/device/router.js.map +1 -1
- package/dist/device/tools/agent.d.ts.map +1 -1
- package/dist/device/tools/agent.js +9 -12
- package/dist/device/tools/agent.js.map +1 -1
- package/dist/device/tools/apps.d.ts +3 -2
- package/dist/device/tools/apps.d.ts.map +1 -1
- package/dist/device/tools/apps.js +5 -2
- package/dist/device/tools/apps.js.map +1 -1
- package/dist/device/tools/describe.d.ts +0 -1
- package/dist/device/tools/describe.d.ts.map +1 -1
- package/dist/device/tools/describe.js +3 -12
- package/dist/device/tools/describe.js.map +1 -1
- package/dist/device/tools/device.d.ts +2 -1
- package/dist/device/tools/device.d.ts.map +1 -1
- package/dist/device/tools/device.js +30 -37
- package/dist/device/tools/device.js.map +1 -1
- package/dist/device/tools/files.d.ts +14 -2
- package/dist/device/tools/files.d.ts.map +1 -1
- package/dist/device/tools/files.js +164 -16
- package/dist/device/tools/files.js.map +1 -1
- package/dist/device/tools/sandboxes.d.ts +7 -4
- package/dist/device/tools/sandboxes.d.ts.map +1 -1
- package/dist/device/tools/sandboxes.js +22 -10
- package/dist/device/tools/sandboxes.js.map +1 -1
- package/dist/device/tools/shell.d.ts +7 -2
- package/dist/device/tools/shell.d.ts.map +1 -1
- package/dist/device/tools/shell.js +101 -43
- package/dist/device/tools/shell.js.map +1 -1
- package/dist/environments/auto-upgrade.d.ts +1 -1
- package/dist/environments/auto-upgrade.d.ts.map +1 -1
- package/dist/environments/auto-upgrade.js +4 -10
- package/dist/environments/auto-upgrade.js.map +1 -1
- package/dist/environments/commands.d.ts.map +1 -1
- package/dist/environments/commands.js +6 -6
- package/dist/environments/commands.js.map +1 -1
- package/dist/environments/crossing.d.ts +2 -5
- package/dist/environments/crossing.d.ts.map +1 -1
- package/dist/environments/crossing.js +6 -6
- package/dist/environments/crossing.js.map +1 -1
- package/dist/environments/machine-upgrade.d.ts +2 -1
- package/dist/environments/machine-upgrade.d.ts.map +1 -1
- package/dist/environments/machine-upgrade.js +24 -20
- package/dist/environments/machine-upgrade.js.map +1 -1
- package/dist/environments/machine.d.ts +1 -0
- package/dist/environments/machine.d.ts.map +1 -1
- package/dist/environments/machine.js +2 -1
- package/dist/environments/machine.js.map +1 -1
- package/dist/install.d.ts +1 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +5 -13
- package/dist/install.js.map +1 -1
- package/dist/release.d.ts +1 -10
- package/dist/release.d.ts.map +1 -1
- package/dist/release.js +4 -16
- package/dist/release.js.map +1 -1
- package/dist/resident.d.ts.map +1 -1
- package/dist/resident.js +6 -9
- package/dist/resident.js.map +1 -1
- package/dist/status.d.ts +1 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +16 -5
- package/dist/status.js.map +1 -1
- package/dist/supervision.d.ts.map +1 -1
- package/dist/supervision.js +12 -14
- package/dist/supervision.js.map +1 -1
- package/dist/sync/commands.d.ts.map +1 -1
- package/dist/sync/commands.js +91 -141
- package/dist/sync/commands.js.map +1 -1
- package/dist/sync/mutagen.d.ts.map +1 -1
- package/dist/sync/mutagen.js +6 -9
- package/dist/sync/mutagen.js.map +1 -1
- package/dist/sync/residue.d.ts +1 -1
- package/dist/sync/residue.d.ts.map +1 -1
- package/dist/sync/residue.js +17 -47
- package/dist/sync/residue.js.map +1 -1
- package/dist/upgrade.d.ts +1 -2
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +6 -13
- package/dist/upgrade.js.map +1 -1
- package/dist/wsl.d.ts +3 -0
- package/dist/wsl.d.ts.map +1 -1
- package/dist/wsl.js +5 -2
- package/dist/wsl.js.map +1 -1
- package/package.json +8 -8
|
@@ -4,7 +4,7 @@ import { promisify } from "node:util";
|
|
|
4
4
|
import { readLinkStates, unreachableIn } from "../config.js";
|
|
5
5
|
import { rootsOf } from "../policy.js";
|
|
6
6
|
import { shellFor } from "./shell.js";
|
|
7
|
-
import { wslEnvironment } from "../../wsl.js";
|
|
7
|
+
import { listDistros, WINDOWS_SIDE, wslEnvironment } from "../../wsl.js";
|
|
8
8
|
const exec = promisify(execFile);
|
|
9
9
|
const osName = async () => {
|
|
10
10
|
if (platform() === "win32") {
|
|
@@ -23,18 +23,9 @@ const engineFacts = async () => {
|
|
|
23
23
|
const [memoryBytes, cpus] = stdout.trim().split(/\s+/).map(Number);
|
|
24
24
|
return memoryBytes !== undefined && cpus !== undefined && memoryBytes > 0 && cpus > 0 ? { memoryBytes, cpus } : undefined;
|
|
25
25
|
};
|
|
26
|
-
export const distrosFrom = (stdout) => stdout
|
|
27
|
-
.replaceAll("\0", "")
|
|
28
|
-
.split(/\r?\n/)
|
|
29
|
-
.map((line) => line.trim())
|
|
30
|
-
.filter((line) => line !== "");
|
|
31
26
|
const wslDistros = async () => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
const { stdout } = await exec("wsl.exe", ["-l", "-q"], { timeout: 5_000, windowsHide: true, env: { ...process.env, WSL_UTF8: "1" } }).catch(() => ({ stdout: "" }));
|
|
36
|
-
const distros = distrosFrom(stdout);
|
|
37
|
-
return distros.length === 0 ? undefined : distros;
|
|
27
|
+
const distros = WINDOWS_SIDE ? await listDistros() : undefined;
|
|
28
|
+
return distros === undefined || distros.length === 0 ? undefined : distros;
|
|
38
29
|
};
|
|
39
30
|
export const linkFacts = (stamped) => {
|
|
40
31
|
if (stamped === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../src/device/tools/describe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAoB,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../src/device/tools/describe.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Desktop, type ScrollDirection } from "@intentic/desktop-automation";
|
|
2
2
|
import type { DeviceScopes } from "@intentic/sandbox-contract";
|
|
3
|
+
import { type Indicator } from "../indicator.js";
|
|
3
4
|
export type DeviceAction = "mouse_move" | "left_click" | "right_click" | "middle_click" | "double_click" | "left_click_drag" | "type" | "key" | "scroll" | "wait";
|
|
4
5
|
export interface DeviceInput {
|
|
5
6
|
readonly action: DeviceAction;
|
|
@@ -11,6 +12,6 @@ export interface DeviceInput {
|
|
|
11
12
|
readonly ms?: number | undefined;
|
|
12
13
|
}
|
|
13
14
|
export declare const describeAction: (input: DeviceInput) => string;
|
|
14
|
-
export declare const act: (screen: Desktop, input: DeviceInput, scopes: DeviceScopes) => Promise<void>;
|
|
15
|
+
export declare const act: (screen: Desktop, input: DeviceInput, scopes: DeviceScopes, indicator?: Indicator) => Promise<void>;
|
|
15
16
|
export declare const settle: () => Promise<void>;
|
|
16
17
|
//# sourceMappingURL=device.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/device/tools/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9H,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/device/tools/device.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9H,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAW,KAAK,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAQ5E,MAAM,MAAM,YAAY,GACpB,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3I,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AA4BD,eAAO,MAAM,cAAc,UAAW,WAAW,KAAG,MAenD,CAAC;AAqCF,eAAO,MAAM,GAAG,WAAkB,OAAO,SAAS,WAAW,UAAU,YAAY,cAAa,SAAS,KAAwB,OAAO,CAAC,IAAI,CAQ5I,CAAC;AAIF,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,IAAI,CAA2B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { sleep } from "@intentic/base/async";
|
|
2
2
|
import { DesktopError } from "@intentic/desktop-automation";
|
|
3
|
+
import { calling, machineIndicator } from "../indicator.js";
|
|
3
4
|
import { assertScope } from "../policy.js";
|
|
4
5
|
const SETTLE_MS = 400;
|
|
5
6
|
const MAX_WAIT_MS = 10_000;
|
|
@@ -32,49 +33,41 @@ export const describeAction = (input) => {
|
|
|
32
33
|
return `${input.action.replace(/_/g, " ")} at (${input.coordinate?.join(", ") ?? ""}).`;
|
|
33
34
|
}
|
|
34
35
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
await sleep(Math.min(Math.max(0, input.ms ?? SETTLE_MS), MAX_WAIT_MS));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (input.action === "type") {
|
|
42
|
-
if (input.text === undefined || input.text === "") {
|
|
43
|
-
throw new DesktopError(`"text" is required to type.`);
|
|
44
|
-
}
|
|
45
|
-
await screen.type(input.text);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
if (input.action === "key") {
|
|
49
|
-
if (input.text === undefined || input.text === "") {
|
|
50
|
-
throw new DesktopError(`"text" is required to press a key: for example "Return", "ctrl+c", "alt+Tab".`);
|
|
51
|
-
}
|
|
52
|
-
await screen.key(input.text);
|
|
53
|
-
return;
|
|
36
|
+
const keyboard = async (screen, action, text) => {
|
|
37
|
+
if (text === undefined || text === "") {
|
|
38
|
+
throw new DesktopError(action === "type" ? `"text" is required to type.` : `"text" is required to press a key: for example "Return", "ctrl+c", "alt+Tab".`);
|
|
54
39
|
}
|
|
40
|
+
await (action === "type" ? screen.type(text) : screen.key(text));
|
|
41
|
+
};
|
|
42
|
+
const pointer = async (screen, input) => {
|
|
55
43
|
const frame = await screen.frame();
|
|
56
44
|
const at = within(point(input.coordinate, "coordinate"), frame, "The coordinate");
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
45
|
+
switch (input.action) {
|
|
46
|
+
case "mouse_move":
|
|
47
|
+
return await screen.move(at);
|
|
48
|
+
case "double_click":
|
|
49
|
+
return await screen.doubleClick(at);
|
|
50
|
+
case "left_click_drag":
|
|
51
|
+
return await screen.drag(at, within(point(input.to, "to"), frame, "The drag target"));
|
|
52
|
+
case "scroll":
|
|
53
|
+
return await screen.scroll(at, input.direction ?? "down", input.amount ?? 3);
|
|
54
|
+
default: {
|
|
55
|
+
const button = CLICK_BUTTON[input.action];
|
|
56
|
+
if (button === undefined) {
|
|
57
|
+
throw new DesktopError(`"${input.action}" is not something this device can do.`);
|
|
58
|
+
}
|
|
59
|
+
return await screen.click(at, button);
|
|
60
|
+
}
|
|
68
61
|
}
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
};
|
|
63
|
+
export const act = async (screen, input, scopes, indicator = machineIndicator()) => {
|
|
64
|
+
assertScope(scopes, "control");
|
|
65
|
+
if (input.action === "wait") {
|
|
66
|
+
await sleep(Math.min(Math.max(0, input.ms ?? SETTLE_MS), MAX_WAIT_MS));
|
|
71
67
|
return;
|
|
72
68
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
throw new DesktopError(`"${input.action}" is not something this device can do.`);
|
|
76
|
-
}
|
|
77
|
-
await screen.click(at, button);
|
|
69
|
+
await indicator.control(calling.getStore());
|
|
70
|
+
await (input.action === "type" || input.action === "key" ? keyboard(screen, input.action, input.text) : pointer(screen, input));
|
|
78
71
|
};
|
|
79
72
|
export const settle = async () => await sleep(SETTLE_MS);
|
|
80
73
|
//# sourceMappingURL=device.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/device/tools/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAgB,YAAY,EAAsD,MAAM,8BAA8B,CAAC;AAE9H,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsB3C,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,MAAM,KAAK,GAAG,CAAC,KAA4C,EAAE,IAAY,EAAS,EAAE;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,YAAY,CAAC,IAAI,IAAI,wCAAwC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,EAAS,EAAE,KAAwC,EAAE,IAAY,EAAS,EAAE;IACxF,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACtE,MAAM,IAAI,YAAY,CAClB,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,qCAAqC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,sDAAsD,CAClJ,CAAC;IACN,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAA+C,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAItI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAU,EAAE;IACzD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM;YACP,OAAO,SAAS,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1D,KAAK,KAAK;YACN,OAAO,WAAW,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC;QAC1C,KAAK,MAAM;YACP,OAAO,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC;QACvE,KAAK,QAAQ;YACT,OAAO,YAAY,KAAK,CAAC,SAAS,IAAI,MAAM,QAAQ,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAC/F,KAAK,iBAAiB;YAClB,OAAO,iBAAiB,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QACtG;YACI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAChG,CAAC;AACL,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/device/tools/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAgB,YAAY,EAAsD,MAAM,8BAA8B,CAAC;AAE9H,OAAO,EAAE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsB3C,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,MAAM,KAAK,GAAG,CAAC,KAA4C,EAAE,IAAY,EAAS,EAAE;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,YAAY,CAAC,IAAI,IAAI,wCAAwC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,EAAS,EAAE,KAAwC,EAAE,IAAY,EAAS,EAAE;IACxF,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACtE,MAAM,IAAI,YAAY,CAClB,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,qCAAqC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,sDAAsD,CAClJ,CAAC;IACN,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAA+C,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;AAItI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAU,EAAE;IACzD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,MAAM;YACP,OAAO,SAAS,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1D,KAAK,KAAK;YACN,OAAO,WAAW,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC;QAC1C,KAAK,MAAM;YACP,OAAO,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC;QACvE,KAAK,QAAQ;YACT,OAAO,YAAY,KAAK,CAAC,SAAS,IAAI,MAAM,QAAQ,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QAC/F,KAAK,iBAAiB;YAClB,OAAO,iBAAiB,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QACtG;YACI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAChG,CAAC;AACL,CAAC,CAAC;AAGF,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAe,EAAE,MAAsB,EAAE,IAAwB,EAAiB,EAAE;IACxG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,YAAY,CAClB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,+EAA+E,CACtI,CAAC;IACN,CAAC;IACD,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC;AAGF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAe,EAAE,KAAkB,EAAiB,EAAE;IACzE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAClF,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,YAAY;YACb,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,cAAc;YACf,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,iBAAiB;YAClB,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1F,KAAK,QAAQ;YACT,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACjF,SAAS,CAAC;YACN,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,MAAM,wCAAwC,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,MAAe,EAAE,KAAkB,EAAE,MAAoB,EAAE,SAAS,GAAc,gBAAgB,EAAE,EAAiB,EAAE;IAC7I,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACvE,OAAO;IACX,CAAC;IACD,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACpI,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { DeviceScopes } from "@intentic/sandbox-contract";
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export interface FileRead {
|
|
3
|
+
readonly text: string;
|
|
4
|
+
readonly note: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const readTextFile: (path: string, range: {
|
|
7
|
+
readonly offset?: number | undefined;
|
|
8
|
+
readonly limit?: number | undefined;
|
|
9
|
+
}, scopes: DeviceScopes) => Promise<FileRead>;
|
|
10
|
+
export declare const writeTextFile: (path: string, content: string, revision: string | undefined, scopes: DeviceScopes) => Promise<string>;
|
|
11
|
+
export declare const editTextFile: (path: string, edit: {
|
|
12
|
+
readonly oldString: string;
|
|
13
|
+
readonly newString: string;
|
|
14
|
+
readonly revision: string;
|
|
15
|
+
}, scopes: DeviceScopes) => Promise<string>;
|
|
4
16
|
export interface DirEntry {
|
|
5
17
|
readonly name: string;
|
|
6
18
|
readonly kind: "file" | "directory" | "other";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/device/tools/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/device/tools/files.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAyG/D,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAkCD,eAAO,MAAM,YAAY,SACf,MAAM,SACL;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,UAC5E,YAAY,KACrB,OAAO,CAAC,QAAQ,CAOlB,CAAC;AAsCF,eAAO,MAAM,aAAa,SAAgB,MAAM,WAAW,MAAM,YAAY,MAAM,GAAG,SAAS,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAuBrI,CAAC;AAGF,eAAO,MAAM,YAAY,SACf,MAAM,QACN;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,UACnF,YAAY,KACrB,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,SAAgB,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,QAAQ,EAAE,CAe1F,CAAC;AAMF,eAAO,MAAM,SAAS,SAAgB,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAuBlF,CAAC"}
|
|
@@ -1,29 +1,177 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isUtf8 } from "node:buffer";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { chmod, lstat, mkdir, readdir, readFile, rename, stat } from "node:fs/promises";
|
|
2
4
|
import { basename, dirname, join } from "node:path";
|
|
3
|
-
import { agentHome } from "@intentic/local-agent";
|
|
5
|
+
import { agentHome, writeFileAtomic } from "@intentic/local-agent";
|
|
4
6
|
import { assertPath, assertScope } from "../policy.js";
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
const MAX_READ_CHARS = 2_000_000;
|
|
8
|
+
const MAX_FILE_BYTES = 10_000_000;
|
|
9
|
+
const UTF8_BOM = Buffer.from([0xef, 0xbb, 0xbf]);
|
|
10
|
+
const UTF16LE_BOM = Buffer.from([0xff, 0xfe]);
|
|
11
|
+
const revisionOf = (bytes) => createHash("sha256").update(bytes).digest("hex").slice(0, 16);
|
|
12
|
+
const decode = (bytes, path) => {
|
|
13
|
+
const utf16 = bytes.subarray(0, 2).equals(UTF16LE_BOM);
|
|
14
|
+
if (!utf16 && bytes.subarray(0, 8000).includes(0)) {
|
|
15
|
+
throw new Error(`"${path}" is not a text file: it has NUL bytes, which text does not.`);
|
|
16
|
+
}
|
|
17
|
+
const bom = !utf16 && bytes.subarray(0, 3).equals(UTF8_BOM);
|
|
18
|
+
const body = bytes.subarray(utf16 ? 2 : bom ? 3 : 0);
|
|
19
|
+
const encoding = utf16 ? "utf16le-bom" : !isUtf8(body) ? undefined : bom ? "utf8-bom" : "utf8";
|
|
20
|
+
const raw = body.toString(utf16 ? "utf16le" : "utf8");
|
|
21
|
+
const text = raw.replaceAll("\r\n", "\n");
|
|
22
|
+
const crlfs = raw.length - text.length;
|
|
23
|
+
return { text, encoding, crlf: crlfs > text.split("\n").length - 1 - crlfs, revision: revisionOf(bytes) };
|
|
24
|
+
};
|
|
25
|
+
const encode = (text, file) => {
|
|
26
|
+
if (file === undefined) {
|
|
27
|
+
return Buffer.from(text, "utf8");
|
|
28
|
+
}
|
|
29
|
+
const lf = text.replace(/^\uFEFF/, "").replaceAll("\r\n", "\n");
|
|
30
|
+
const body = file.crlf ? lf.replaceAll("\n", "\r\n") : lf;
|
|
31
|
+
if (file.encoding === "utf16le-bom") {
|
|
32
|
+
return Buffer.concat([UTF16LE_BOM, Buffer.from(body, "utf16le")]);
|
|
33
|
+
}
|
|
34
|
+
return file.encoding === "utf8-bom" ? Buffer.concat([UTF8_BOM, Buffer.from(body, "utf8")]) : Buffer.from(body, "utf8");
|
|
35
|
+
};
|
|
36
|
+
const formatOf = (file) => [
|
|
37
|
+
file.encoding === "utf8-bom" ? "as UTF-8 with BOM" : file.encoding === "utf16le-bom" ? "as UTF-16LE with BOM" : "",
|
|
38
|
+
file.crlf ? "with CRLF line endings" : "",
|
|
39
|
+
]
|
|
40
|
+
.filter((part) => part !== "")
|
|
41
|
+
.join(" and ");
|
|
42
|
+
const noteOf = (file, position) => [
|
|
43
|
+
position,
|
|
44
|
+
`Revision ${file.revision}: write_file and edit_file need it to change this file.`,
|
|
45
|
+
file.encoding === undefined
|
|
46
|
+
? "Not UTF-8 or UTF-16 text (a legacy code page, most likely): bytes that did not decode show as �, and write_file and edit_file will not change this file."
|
|
47
|
+
: formatOf(file) === ""
|
|
48
|
+
? ""
|
|
49
|
+
: `Saved ${formatOf(file)}${file.crlf ? " (shown here as LF)" : ""}, which a write keeps.`,
|
|
50
|
+
]
|
|
51
|
+
.filter((part) => part !== "")
|
|
52
|
+
.join(" ");
|
|
53
|
+
const linesOf = (text) => (text === "" ? [] : (text.endsWith("\n") ? text.slice(0, -1) : text).split("\n"));
|
|
54
|
+
const megabytes = (bytes) => `${(bytes / 1_000_000).toFixed(1)} MB`;
|
|
55
|
+
const linesText = (count) => (count === 1 ? "1 line" : `${count} lines`);
|
|
56
|
+
const load = async (target, path) => {
|
|
8
57
|
const info = await stat(target);
|
|
9
58
|
if (info.isDirectory()) {
|
|
10
59
|
throw new Error(`"${path}" is a directory: use list_dir for it.`);
|
|
11
60
|
}
|
|
12
|
-
if (info.
|
|
13
|
-
throw new Error(`"${path}" is
|
|
61
|
+
if (!info.isFile()) {
|
|
62
|
+
throw new Error(`"${path}" is not a regular file, and these tools open only those.`);
|
|
63
|
+
}
|
|
64
|
+
if (info.size > MAX_FILE_BYTES) {
|
|
65
|
+
throw new Error(`"${path}" is ${megabytes(info.size)}, more than these tools open. Read or change it with a command instead.`);
|
|
66
|
+
}
|
|
67
|
+
return { bytes: await readFile(target), mode: info.mode & 0o7777 };
|
|
68
|
+
};
|
|
69
|
+
const wholeRead = (file, lines, path) => {
|
|
70
|
+
if (file.text.length > MAX_READ_CHARS) {
|
|
71
|
+
throw new Error(`"${path}" is ${linesText(lines.length)}, more than one read answers with: read it in parts with offset and limit.`);
|
|
14
72
|
}
|
|
15
|
-
return
|
|
73
|
+
return { text: file.text, note: noteOf(file, lines.length === 0 ? "The file is empty." : `All ${linesText(lines.length)}.`) };
|
|
16
74
|
};
|
|
17
|
-
|
|
75
|
+
const rangeRead = (file, lines, offset, limit, path) => {
|
|
76
|
+
if (offset > lines.length) {
|
|
77
|
+
throw new Error(`"${path}" has ${linesText(lines.length)}, so there is nothing from line ${offset} on.`);
|
|
78
|
+
}
|
|
79
|
+
const wanted = lines.slice(offset - 1, limit === undefined ? undefined : offset - 1 + limit);
|
|
80
|
+
let size = 0;
|
|
81
|
+
let shown = 0;
|
|
82
|
+
for (const line of wanted) {
|
|
83
|
+
size += line.length + 1;
|
|
84
|
+
if (size > MAX_READ_CHARS) {
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
shown += 1;
|
|
88
|
+
}
|
|
89
|
+
if (shown === 0) {
|
|
90
|
+
throw new Error(`Line ${offset} of "${path}" alone is longer than one read answers with: read it with a command.`);
|
|
91
|
+
}
|
|
92
|
+
const end = offset - 1 + shown;
|
|
93
|
+
const rest = lines.length - end;
|
|
94
|
+
const position = `Lines ${offset}-${end} of ${lines.length}.${rest === 0 ? "" : ` ${rest} more after these: continue with offset ${end + 1}.`}`;
|
|
95
|
+
return { text: wanted.slice(0, shown).join("\n"), note: noteOf(file, position) };
|
|
96
|
+
};
|
|
97
|
+
export const readTextFile = async (path, range, scopes) => {
|
|
98
|
+
const target = await assertPath(path, scopes, "read");
|
|
99
|
+
const file = decode((await load(target, path)).bytes, path);
|
|
100
|
+
const lines = linesOf(file.text);
|
|
101
|
+
return (range.offset === undefined && range.limit === undefined) || lines.length === 0
|
|
102
|
+
? wholeRead(file, lines, path)
|
|
103
|
+
: rangeRead(file, lines, range.offset ?? 1, range.limit, path);
|
|
104
|
+
};
|
|
105
|
+
const current = async (target, path, revision) => {
|
|
106
|
+
const { bytes, mode } = await load(target, path);
|
|
107
|
+
const file = decode(bytes, path);
|
|
108
|
+
if (file.revision !== revision) {
|
|
109
|
+
throw new Error(`"${path}" has changed since you read it (you read revision ${revision}, it is now ${file.revision}): read it again and make your change to what is there now.`);
|
|
110
|
+
}
|
|
111
|
+
if (file.encoding === undefined) {
|
|
112
|
+
throw new Error(`"${path}" is not UTF-8 or UTF-16 text, so writing it back would corrupt every character that did not decode. Change it with a command instead.`);
|
|
113
|
+
}
|
|
114
|
+
if ((mode & 0o200) === 0) {
|
|
115
|
+
throw new Error(`"${path}" is read-only, and these tools leave it that way.`);
|
|
116
|
+
}
|
|
117
|
+
return { file, mode };
|
|
118
|
+
};
|
|
119
|
+
const replace = async (target, bytes, mode) => {
|
|
120
|
+
await writeFileAtomic(target, bytes, mode);
|
|
121
|
+
await chmod(target, mode);
|
|
122
|
+
};
|
|
123
|
+
const exists = async (target) => await stat(target).then(() => true, (error) => {
|
|
124
|
+
if (error.code === "ENOENT") {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
});
|
|
129
|
+
export const writeTextFile = async (path, content, revision, scopes) => {
|
|
18
130
|
assertScope(scopes, "write");
|
|
19
|
-
const target = assertPath(path, scopes, "write");
|
|
131
|
+
const target = await assertPath(path, scopes, "write");
|
|
132
|
+
if (await exists(target)) {
|
|
133
|
+
if (revision === undefined) {
|
|
134
|
+
throw new Error(`"${path}" already exists. Read it first: replacing a file takes the revision read_file answered with, and creating one takes none.`);
|
|
135
|
+
}
|
|
136
|
+
const { file, mode } = await current(target, path, revision);
|
|
137
|
+
const bytes = encode(content, file);
|
|
138
|
+
await replace(target, bytes, mode);
|
|
139
|
+
const kept = formatOf(file) === "" ? "" : `, saved ${formatOf(file)} as before`;
|
|
140
|
+
return `Overwrote ${target} (${content.length} characters${kept}). Revision ${revisionOf(bytes)}.`;
|
|
141
|
+
}
|
|
142
|
+
if (revision !== undefined) {
|
|
143
|
+
throw new Error(`"${path}" no longer exists: it was moved or deleted after you read it. Call write_file without a revision to create it again.`);
|
|
144
|
+
}
|
|
20
145
|
await mkdir(dirname(target), { recursive: true });
|
|
21
|
-
const
|
|
22
|
-
await
|
|
23
|
-
return
|
|
146
|
+
const bytes = encode(content, undefined);
|
|
147
|
+
await writeFileAtomic(target, bytes, 0o666);
|
|
148
|
+
return `Created ${target} (${content.length} characters). Revision ${revisionOf(bytes)}.`;
|
|
149
|
+
};
|
|
150
|
+
export const editTextFile = async (path, edit, scopes) => {
|
|
151
|
+
assertScope(scopes, "write");
|
|
152
|
+
const target = await assertPath(path, scopes, "edit");
|
|
153
|
+
if (!(await exists(target))) {
|
|
154
|
+
throw new Error(`"${path}" does not exist: create it with write_file.`);
|
|
155
|
+
}
|
|
156
|
+
const { file, mode } = await current(target, path, edit.revision);
|
|
157
|
+
const before = edit.oldString.replaceAll("\r\n", "\n");
|
|
158
|
+
const after = edit.newString.replaceAll("\r\n", "\n");
|
|
159
|
+
if (before === after) {
|
|
160
|
+
throw new Error("old_string and new_string are the same, so there is nothing to change.");
|
|
161
|
+
}
|
|
162
|
+
const at = file.text.indexOf(before);
|
|
163
|
+
if (at === -1) {
|
|
164
|
+
throw new Error(`old_string is not in "${path}". It has to match the text read_file shows exactly, whitespace and indentation included.`);
|
|
165
|
+
}
|
|
166
|
+
if (file.text.includes(before, at + 1)) {
|
|
167
|
+
throw new Error(`old_string matches more than one place in "${path}": include more of the lines around it, so that it matches one.`);
|
|
168
|
+
}
|
|
169
|
+
const bytes = encode(`${file.text.slice(0, at)}${after}${file.text.slice(at + before.length)}`, file);
|
|
170
|
+
await replace(target, bytes, mode);
|
|
171
|
+
return `Edited ${target}. Revision ${revisionOf(bytes)}.`;
|
|
24
172
|
};
|
|
25
173
|
export const listDirectory = async (path, scopes) => {
|
|
26
|
-
const target = assertPath(path, scopes, "list");
|
|
174
|
+
const target = await assertPath(path, scopes, "list");
|
|
27
175
|
const entries = await readdir(target, { withFileTypes: true });
|
|
28
176
|
return await Promise.all(entries.map(async (entry) => {
|
|
29
177
|
const kind = entry.isDirectory() ? "directory" : entry.isFile() ? "file" : "other";
|
|
@@ -37,8 +185,8 @@ export const listDirectory = async (path, scopes) => {
|
|
|
37
185
|
const trashDir = () => join(agentHome("machine").dir, "trash");
|
|
38
186
|
export const trashFile = async (path, scopes) => {
|
|
39
187
|
assertScope(scopes, "write");
|
|
40
|
-
const target = assertPath(path, scopes, "trash");
|
|
41
|
-
await
|
|
188
|
+
const target = await assertPath(path, scopes, "trash", { link: "itself" });
|
|
189
|
+
await lstat(target);
|
|
42
190
|
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
43
191
|
const destination = join(trashDir(), stamp);
|
|
44
192
|
await mkdir(destination, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/device/tools/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AASvD,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoB,EAAmB,EAAE;IACtF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,wCAAwC,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,uEAAuE,CAAC,CAAC;IAC9I,CAAC;IACD,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,MAAoB,EAAmB,EAAE;IACxG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACnC,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACd,CAAC;IACF,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAGzC,OAAO,OAAO,CAAC,CAAC,CAAC,aAAa,MAAM,KAAK,OAAO,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,WAAW,MAAM,KAAK,OAAO,CAAC,MAAM,eAAe,CAAC;AACjI,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoB,EAAuB,EAAE;IAC3F,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAM,OAAO,CAAC,GAAG,CACpB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACnF,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAClB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QACtC,CAAC;QAGD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC7I,CAAC,CAAC,CACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoB,EAAmB,EAAE;IACnF,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;IAGnB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACX,IAAI,IAAI,oDAAoD,QAAQ,EAAE,8EAA8E,EACpJ,EAAE,KAAK,EAAE,KAAK,EAAE,CACnB,CAAC;QACN,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,MAAM,OAAO,KAAK,oEAAoE,CAAC;AAC3G,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/device/tools/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,9 @@ export declare const icCandidates: (platform: NodeJS.Platform, home: string | un
|
|
|
31
31
|
export declare const icSwapArgs: (swap: SandboxSwap, slug: string, hash: string | undefined) => string[];
|
|
32
32
|
export declare const icRemoveArgs: (slug: string) => string[];
|
|
33
33
|
export declare const icConnectArgs: (setupCode: string | undefined) => string[];
|
|
34
|
+
export declare const icConnectEnv: (platformUrl: string | undefined) => {
|
|
35
|
+
readonly PLATFORM_URL: string;
|
|
36
|
+
};
|
|
34
37
|
export declare const icReshapeArgs: (slug: string, ask: SandboxResourcesAsk | undefined) => string[];
|
|
35
38
|
export interface RunnerShapeFiles {
|
|
36
39
|
readonly definitionFile?: string;
|
|
@@ -43,18 +46,18 @@ export declare const runnerFlow: (op: "runner-up" | "runner-remove", name: strin
|
|
|
43
46
|
overlay?: string;
|
|
44
47
|
overlayHash?: string;
|
|
45
48
|
}, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
46
|
-
export declare const runIc: (args: readonly string[], onLine: (line: string) => void) => Promise<{
|
|
49
|
+
export declare const runIc: (args: readonly string[], onLine: (line: string) => void, env?: Readonly<Record<string, string>>) => Promise<{
|
|
47
50
|
code: number;
|
|
48
51
|
output: string;
|
|
49
52
|
}>;
|
|
50
|
-
export declare const icFlow: (slug: string, args: readonly string[], onLine: (line: string) => void) => Promise<{
|
|
53
|
+
export declare const icFlow: (slug: string, args: readonly string[], onLine: (line: string) => void, env?: Readonly<Record<string, string>>) => Promise<{
|
|
51
54
|
code: number;
|
|
52
55
|
output: string;
|
|
53
56
|
}>;
|
|
54
57
|
export declare const swapSandbox: (swap: SandboxSwap, slug: string, hash: string | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
55
58
|
export declare const reshapeSandbox: (slug: string, ask: SandboxResourcesAsk | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
56
|
-
export declare const reconnectSandbox: (slug: string, setupCode: string | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
57
|
-
export declare const createSandbox: (slug: string, setupCode: string | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
59
|
+
export declare const reconnectSandbox: (slug: string, setupCode: string | undefined, platformUrl: string | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
60
|
+
export declare const createSandbox: (slug: string, setupCode: string | undefined, platformUrl: string | undefined, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
58
61
|
export declare const removeSandbox: (slug: string, scopes: DeviceScopes, onLine: (line: string) => void) => Promise<string>;
|
|
59
62
|
export declare const DEFAULT_LOG_LINES = 200;
|
|
60
63
|
export declare const MAX_LOG_LINES = 2000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandboxes.d.ts","sourceRoot":"","sources":["../../../src/device/tools/sandboxes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAErH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAID,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,SAAS,EAYzC,CAAC;AAKX,eAAO,MAAM,aAAa,SAAU,SAAS,SAAS,EAAE,KAAG,aAAa,EAmBvE,CAAC;AAsBF,eAAO,MAAM,UAAU,EAAE,SAAS,MAAM,EAOvC,CAAC;AAGF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,aAAa,EAAE,CAA+D,CAAC;AA8BtH,eAAO,MAAM,aAAa,cAAe,OAAO,KAAG,gBAAgB,GAAG,SAgBrE,CAAC;AAMF,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,aAAa,EAAE,CA6B7D,CAAC;AAKF,eAAO,MAAM,UAAU,aAAoB,CAAC;AAI5C,eAAO,MAAM,aAAa,WAAkB,YAAY,KAAG,OAAO,CAAC,MAAM,CAKxE,CAAC;AAIF,eAAO,MAAM,eAAe;;;;EAAuC,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAcxD,eAAO,MAAM,aAAa,OAAc,SAAS,QAAQ,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CASrG,CAAC;AAOF,eAAO,MAAM,iBAAiB;;;;;EAAuD,CAAC;AACtF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAO5D,eAAO,MAAM,YAAY,aAAc,MAAM,CAAC,QAAQ,QAAQ,MAAM,GAAG,SAAS,KAAG,MAAM,EAKxF,CAAC;AAKF,eAAO,MAAM,UAAU,SAAU,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG,SAAS,KAAG,MAAM,EAQ5F,CAAC;AAIF,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAAM,EAAuC,CAAC;AAK1F,eAAO,MAAM,aAAa,cAAe,MAAM,GAAG,SAAS,KAAG,MAAM,EAQnE,CAAC;AAWF,eAAO,MAAM,aAAa,SAAU,MAAM,OAAO,mBAAmB,GAAG,SAAS,KAAG,MAAM,EAYxF,CAAC;AAKF,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACrC;AAKD,eAAO,MAAM,YAAY,OACjB,WAAW,GAAG,eAAe,QAC3B,MAAM,aACD,MAAM,GAAG,SAAS,QACvB,MAAM,GAAG,SAAS,UACjB,gBAAgB,KACxB,MAAM,EA6BR,CAAC;AAKF,eAAO,MAAM,UAAU,OACf,WAAW,GAAG,eAAe,QAC3B,MAAM,aACD,MAAM,GAAG,SAAS,QACvB,MAAM,GAAG,SAAS,SACjB;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,UAC9D,YAAY,UACZ,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAC/B,OAAO,CAAC,MAAM,CAsChB,CAAC;
|
|
1
|
+
{"version":3,"file":"sandboxes.d.ts","sourceRoot":"","sources":["../../../src/device/tools/sandboxes.ts"],"names":[],"mappings":"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"}
|
|
@@ -159,6 +159,16 @@ export const icConnectArgs = (setupCode) => {
|
|
|
159
159
|
}
|
|
160
160
|
return ["sandbox", "connect", "-y", "--", setupCode.trim()];
|
|
161
161
|
};
|
|
162
|
+
export const icConnectEnv = (platformUrl) => {
|
|
163
|
+
if (platformUrl === undefined || platformUrl.trim() === "") {
|
|
164
|
+
throw new Error(`"platformUrl" is required: a setup code is redeemable only on the platform that minted it.`);
|
|
165
|
+
}
|
|
166
|
+
const url = new URL(platformUrl.trim());
|
|
167
|
+
if (url.hostname === "host.docker.internal") {
|
|
168
|
+
url.hostname = "localhost";
|
|
169
|
+
}
|
|
170
|
+
return { PLATFORM_URL: `${url.origin}${url.pathname.replace(/\/+$/, "")}` };
|
|
171
|
+
};
|
|
162
172
|
const capFlag = (value, spell) => value === undefined ? undefined : value === null ? "default" : spell(value);
|
|
163
173
|
const switchFlag = (value) => (value === undefined ? undefined : value ? "on" : "off");
|
|
164
174
|
export const icReshapeArgs = (slug, ask) => {
|
|
@@ -232,7 +242,7 @@ export const runnerFlow = async (op, name, parentUrl, pair, shape, scopes, onLin
|
|
|
232
242
|
}
|
|
233
243
|
}
|
|
234
244
|
};
|
|
235
|
-
const runStreamed = (binary, args, onLine) => {
|
|
245
|
+
const runStreamed = (binary, args, onLine, env) => {
|
|
236
246
|
const lines = [];
|
|
237
247
|
const emit = (chunk) => {
|
|
238
248
|
for (const line of chunk.split(/\r?\n/)) {
|
|
@@ -243,7 +253,7 @@ const runStreamed = (binary, args, onLine) => {
|
|
|
243
253
|
}
|
|
244
254
|
};
|
|
245
255
|
return new Promise((resolve) => {
|
|
246
|
-
const child = spawn(binary, [...args], { windowsHide: true });
|
|
256
|
+
const child = spawn(binary, [...args], { windowsHide: true, env: { ...process.env, ...env } });
|
|
247
257
|
let missing = false;
|
|
248
258
|
child.stdout.setEncoding("utf8").on("data", emit);
|
|
249
259
|
child.stderr.setEncoding("utf8").on("data", emit);
|
|
@@ -257,10 +267,10 @@ const runStreamed = (binary, args, onLine) => {
|
|
|
257
267
|
child.on("close", (code) => resolve(missing ? "missing" : { code: code ?? 1, output: lines.join("\n") }));
|
|
258
268
|
});
|
|
259
269
|
};
|
|
260
|
-
export const runIc = async (args, onLine) => {
|
|
270
|
+
export const runIc = async (args, onLine, env = {}) => {
|
|
261
271
|
const candidates = icCandidates(process.platform, homedir());
|
|
262
272
|
for (const [index, binary] of candidates.entries()) {
|
|
263
|
-
const attempt = await runStreamed(binary, args, onLine);
|
|
273
|
+
const attempt = await runStreamed(binary, args, onLine, env);
|
|
264
274
|
if (attempt !== "missing") {
|
|
265
275
|
return attempt;
|
|
266
276
|
}
|
|
@@ -270,10 +280,10 @@ export const runIc = async (args, onLine) => {
|
|
|
270
280
|
}
|
|
271
281
|
throw new Error("no ic candidate was tried");
|
|
272
282
|
};
|
|
273
|
-
export const icFlow = async (slug, args, onLine) => {
|
|
283
|
+
export const icFlow = async (slug, args, onLine, env = {}) => {
|
|
274
284
|
icInFlight.add(slug);
|
|
275
285
|
try {
|
|
276
|
-
return await runIc(args, onLine);
|
|
286
|
+
return await runIc(args, onLine, env);
|
|
277
287
|
}
|
|
278
288
|
finally {
|
|
279
289
|
icInFlight.delete(slug);
|
|
@@ -303,23 +313,25 @@ export const reshapeSandbox = async (slug, ask, scopes, onLine) => {
|
|
|
303
313
|
}
|
|
304
314
|
return `Reshaped sandbox "${slug}". Its files and its history were kept, and the new share survives every later update.`;
|
|
305
315
|
};
|
|
306
|
-
export const reconnectSandbox = async (slug, setupCode, scopes, onLine) => {
|
|
316
|
+
export const reconnectSandbox = async (slug, setupCode, platformUrl, scopes, onLine) => {
|
|
307
317
|
assertScope(scopes, "sandboxes");
|
|
308
318
|
const args = icConnectArgs(setupCode);
|
|
319
|
+
const env = icConnectEnv(platformUrl);
|
|
309
320
|
await find(slug);
|
|
310
|
-
const run = await icFlow(slug, args, onLine);
|
|
321
|
+
const run = await icFlow(slug, args, onLine, env);
|
|
311
322
|
if (run.code !== 0) {
|
|
312
323
|
throw new Error(`That reconnect failed on this device.\n\n${run.output}`);
|
|
313
324
|
}
|
|
314
325
|
return `Reconnected sandbox "${slug}". Its files and its history were kept, and it now has what it was missing.`;
|
|
315
326
|
};
|
|
316
|
-
export const createSandbox = async (slug, setupCode, scopes, onLine) => {
|
|
327
|
+
export const createSandbox = async (slug, setupCode, platformUrl, scopes, onLine) => {
|
|
317
328
|
assertScope(scopes, "sandboxes");
|
|
318
329
|
const args = icConnectArgs(setupCode);
|
|
330
|
+
const env = icConnectEnv(platformUrl);
|
|
319
331
|
if ((await fleet()).some((box) => box.slug === slug)) {
|
|
320
332
|
throw new Error(`This device already runs a sandbox called "${slug}". Nothing was created and the setup code was not spent.`);
|
|
321
333
|
}
|
|
322
|
-
const run = await icFlow(slug, args, onLine);
|
|
334
|
+
const run = await icFlow(slug, args, onLine, env);
|
|
323
335
|
if (run.code !== 0) {
|
|
324
336
|
throw new Error(`That sandbox could not be created on this device.\n\n${run.output}`);
|
|
325
337
|
}
|