@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.
Files changed (110) hide show
  1. package/README.md +52 -2
  2. package/dist/daemon-base.d.ts +7 -0
  3. package/dist/daemon-base.d.ts.map +1 -1
  4. package/dist/daemon-base.js +22 -0
  5. package/dist/daemon-base.js.map +1 -1
  6. package/dist/device/commands.d.ts.map +1 -1
  7. package/dist/device/commands.js +12 -41
  8. package/dist/device/commands.js.map +1 -1
  9. package/dist/device/connection.d.ts +2 -1
  10. package/dist/device/connection.d.ts.map +1 -1
  11. package/dist/device/connection.js +13 -2
  12. package/dist/device/connection.js.map +1 -1
  13. package/dist/device/indicator.d.ts +28 -0
  14. package/dist/device/indicator.d.ts.map +1 -0
  15. package/dist/device/indicator.js +115 -0
  16. package/dist/device/indicator.js.map +1 -0
  17. package/dist/device/mcp.d.ts.map +1 -1
  18. package/dist/device/mcp.js +62 -8
  19. package/dist/device/mcp.js.map +1 -1
  20. package/dist/device/policy.d.ts +4 -1
  21. package/dist/device/policy.d.ts.map +1 -1
  22. package/dist/device/policy.js +23 -5
  23. package/dist/device/policy.js.map +1 -1
  24. package/dist/device/router.d.ts +2 -0
  25. package/dist/device/router.d.ts.map +1 -1
  26. package/dist/device/router.js +4 -3
  27. package/dist/device/router.js.map +1 -1
  28. package/dist/device/tools/agent.d.ts.map +1 -1
  29. package/dist/device/tools/agent.js +9 -12
  30. package/dist/device/tools/agent.js.map +1 -1
  31. package/dist/device/tools/apps.d.ts +3 -2
  32. package/dist/device/tools/apps.d.ts.map +1 -1
  33. package/dist/device/tools/apps.js +5 -2
  34. package/dist/device/tools/apps.js.map +1 -1
  35. package/dist/device/tools/describe.d.ts +0 -1
  36. package/dist/device/tools/describe.d.ts.map +1 -1
  37. package/dist/device/tools/describe.js +3 -12
  38. package/dist/device/tools/describe.js.map +1 -1
  39. package/dist/device/tools/device.d.ts +2 -1
  40. package/dist/device/tools/device.d.ts.map +1 -1
  41. package/dist/device/tools/device.js +30 -37
  42. package/dist/device/tools/device.js.map +1 -1
  43. package/dist/device/tools/files.d.ts +14 -2
  44. package/dist/device/tools/files.d.ts.map +1 -1
  45. package/dist/device/tools/files.js +164 -16
  46. package/dist/device/tools/files.js.map +1 -1
  47. package/dist/device/tools/sandboxes.d.ts +7 -4
  48. package/dist/device/tools/sandboxes.d.ts.map +1 -1
  49. package/dist/device/tools/sandboxes.js +22 -10
  50. package/dist/device/tools/sandboxes.js.map +1 -1
  51. package/dist/device/tools/shell.d.ts +7 -2
  52. package/dist/device/tools/shell.d.ts.map +1 -1
  53. package/dist/device/tools/shell.js +101 -43
  54. package/dist/device/tools/shell.js.map +1 -1
  55. package/dist/environments/auto-upgrade.d.ts +1 -1
  56. package/dist/environments/auto-upgrade.d.ts.map +1 -1
  57. package/dist/environments/auto-upgrade.js +4 -10
  58. package/dist/environments/auto-upgrade.js.map +1 -1
  59. package/dist/environments/commands.d.ts.map +1 -1
  60. package/dist/environments/commands.js +6 -6
  61. package/dist/environments/commands.js.map +1 -1
  62. package/dist/environments/crossing.d.ts +2 -5
  63. package/dist/environments/crossing.d.ts.map +1 -1
  64. package/dist/environments/crossing.js +6 -6
  65. package/dist/environments/crossing.js.map +1 -1
  66. package/dist/environments/machine-upgrade.d.ts +2 -1
  67. package/dist/environments/machine-upgrade.d.ts.map +1 -1
  68. package/dist/environments/machine-upgrade.js +24 -20
  69. package/dist/environments/machine-upgrade.js.map +1 -1
  70. package/dist/environments/machine.d.ts +1 -0
  71. package/dist/environments/machine.d.ts.map +1 -1
  72. package/dist/environments/machine.js +2 -1
  73. package/dist/environments/machine.js.map +1 -1
  74. package/dist/install.d.ts +1 -1
  75. package/dist/install.d.ts.map +1 -1
  76. package/dist/install.js +5 -13
  77. package/dist/install.js.map +1 -1
  78. package/dist/release.d.ts +1 -10
  79. package/dist/release.d.ts.map +1 -1
  80. package/dist/release.js +4 -16
  81. package/dist/release.js.map +1 -1
  82. package/dist/resident.d.ts.map +1 -1
  83. package/dist/resident.js +6 -9
  84. package/dist/resident.js.map +1 -1
  85. package/dist/status.d.ts +1 -0
  86. package/dist/status.d.ts.map +1 -1
  87. package/dist/status.js +16 -5
  88. package/dist/status.js.map +1 -1
  89. package/dist/supervision.d.ts.map +1 -1
  90. package/dist/supervision.js +12 -14
  91. package/dist/supervision.js.map +1 -1
  92. package/dist/sync/commands.d.ts.map +1 -1
  93. package/dist/sync/commands.js +91 -141
  94. package/dist/sync/commands.js.map +1 -1
  95. package/dist/sync/mutagen.d.ts.map +1 -1
  96. package/dist/sync/mutagen.js +6 -9
  97. package/dist/sync/mutagen.js.map +1 -1
  98. package/dist/sync/residue.d.ts +1 -1
  99. package/dist/sync/residue.d.ts.map +1 -1
  100. package/dist/sync/residue.js +17 -47
  101. package/dist/sync/residue.js.map +1 -1
  102. package/dist/upgrade.d.ts +1 -2
  103. package/dist/upgrade.d.ts.map +1 -1
  104. package/dist/upgrade.js +6 -13
  105. package/dist/upgrade.js.map +1 -1
  106. package/dist/wsl.d.ts +3 -0
  107. package/dist/wsl.d.ts.map +1 -1
  108. package/dist/wsl.js +5 -2
  109. package/dist/wsl.js.map +1 -1
  110. 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
- if (platform() !== "win32") {
33
- return undefined;
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":"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"}
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;AAQ/D,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;AAIF,eAAO,MAAM,GAAG,WAAkB,OAAO,SAAS,WAAW,UAAU,YAAY,KAAG,OAAO,CAAC,IAAI,CA6CjG,CAAC;AAIF,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,IAAI,CAA2B,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
- export const act = async (screen, input, scopes) => {
36
- assertScope(scopes, "control");
37
- if (input.action === "wait") {
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
- if (input.action === "mouse_move") {
58
- await screen.move(at);
59
- return;
60
- }
61
- if (input.action === "double_click") {
62
- await screen.doubleClick(at);
63
- return;
64
- }
65
- if (input.action === "left_click_drag") {
66
- await screen.drag(at, within(point(input.to, "to"), frame, "The drag target"));
67
- return;
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
- if (input.action === "scroll") {
70
- await screen.scroll(at, input.direction ?? "down", input.amount ?? 3);
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
- const button = CLICK_BUTTON[input.action];
74
- if (button === undefined) {
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":"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"}
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/device/tools/device.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,18 @@
1
1
  import type { DeviceScopes } from "@intentic/sandbox-contract";
2
- export declare const readTextFile: (path: string, scopes: DeviceScopes) => Promise<string>;
3
- export declare const writeTextFile: (path: string, content: string, scopes: DeviceScopes) => Promise<string>;
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":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAY/D,eAAO,MAAM,YAAY,SAAgB,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAUrF,CAAC;AAEF,eAAO,MAAM,aAAa,SAAgB,MAAM,WAAW,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAYvG,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;AAIF,eAAO,MAAM,SAAS,SAAgB,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAuBlF,CAAC"}
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 { mkdir, readdir, readFile, rename, stat, writeFile } from "node:fs/promises";
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 MAX_READ_BYTES = 2_000_000;
6
- export const readTextFile = async (path, scopes) => {
7
- const target = assertPath(path, scopes, "read");
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.size > MAX_READ_BYTES) {
13
- throw new Error(`"${path}" is ${Math.round(info.size / 1_000_000)} MB, too large to read whole. Read part of it with a command instead.`);
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 await readFile(target, "utf8");
73
+ return { text: file.text, note: noteOf(file, lines.length === 0 ? "The file is empty." : `All ${linesText(lines.length)}.`) };
16
74
  };
17
- export const writeTextFile = async (path, content, scopes) => {
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 existed = await stat(target).then(() => true, () => false);
22
- await writeFile(target, content, "utf8");
23
- return existed ? `Overwrote ${target} (${content.length} characters).` : `Created ${target} (${content.length} characters).`;
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 stat(target);
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":"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"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/device/tools/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,cAAc,GAAG,SAAS,CAAC;AAGjC,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAe9C,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAG5G,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAY,EAAE;IACrD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,8DAA8D,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAa,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;IACzG,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9G,CAAC,CAAC;AAGF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAA0B,EAAU,EAAE;IAChE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3H,CAAC,CAAC;AAGF,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAU,EAAE,CACxC;IACI,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;IAClH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;CAC5C;KACI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;KAC7B,IAAI,CAAC,OAAO,CAAC,CAAC;AAGvB,MAAM,MAAM,GAAG,CAAC,IAAc,EAAE,QAAgB,EAAU,EAAE,CACxD;IACI,QAAQ;IACR,YAAY,IAAI,CAAC,QAAQ,yDAAyD;IAClF,IAAI,CAAC,QAAQ,KAAK,SAAS;QACvB,CAAC,CAAC,0JAA0J;QAC5J,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,wBAAwB;CACnG;KACI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;KAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;AAGnB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAY,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAE9H,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAEpF,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AAGzF,MAAM,IAAI,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAA8D,EAAE;IAC5G,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,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,2DAA2D,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;AACvE,CAAC,CAAC;AAQF,MAAM,SAAS,GAAG,CAAC,IAAc,EAAE,KAAwB,EAAE,IAAY,EAAY,EAAE;IACnF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,4EAA4E,CAAC,CAAC;IACzI,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAClI,CAAC,CAAC;AAGF,MAAM,SAAS,GAAG,CAAC,IAAc,EAAE,KAAwB,EAAE,MAAc,EAAE,KAAyB,EAAE,IAAY,EAAY,EAAE;IAC9H,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,mCAAmC,MAAM,MAAM,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC7F,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,GAAG,cAAc,EAAE,CAAC;YACxB,MAAM;QACV,CAAC;QACD,KAAK,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,QAAQ,IAAI,uEAAuE,CAAC,CAAC;IACvH,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAChC,MAAM,QAAQ,GAAG,SAAS,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,2CAA2C,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAChJ,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;AACrF,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC7B,IAAY,EACZ,KAAoF,EACpF,MAAoB,EACH,EAAE;IACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAClF,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;QAC9B,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AAGF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAE,QAAgB,EAA+D,EAAE;IAClI,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACX,IAAI,IAAI,sDAAsD,QAAQ,eAAe,IAAI,CAAC,QAAQ,6DAA6D,CAClK,CAAC;IACN,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,wIAAwI,CAAC,CAAC;IACtK,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,oDAAoD,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC,CAAC;AAIF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,KAAa,EAAE,IAAY,EAAiB,EAAE;IACjF,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAAoB,EAAE,CACtD,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,IAAI,EACV,CAAC,KAA4B,EAAE,EAAE;IAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,CAAC;AAChB,CAAC,CACJ,CAAC;AAEN,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,QAA4B,EAAE,MAAoB,EAAmB,EAAE;IACtI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,4HAA4H,CAAC,CAAC;QAC1J,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAGnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAChF,OAAO,aAAa,MAAM,KAAK,OAAO,CAAC,MAAM,cAAc,IAAI,eAAe,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IACvG,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,uHAAuH,CAAC,CAAC;IACrJ,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEzC,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5C,OAAO,WAAW,MAAM,KAAK,OAAO,CAAC,MAAM,0BAA0B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9F,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC7B,IAAY,EACZ,IAA2F,EAC3F,MAAoB,EACL,EAAE;IACjB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,8CAA8C,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,2FAA2F,CAAC,CAAC;IAC9I,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,iEAAiE,CAAC,CAAC;IACzI,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtG,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,UAAU,MAAM,cAAc,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9D,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoB,EAAuB,EAAE;IAC3F,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,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;AAIvE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,MAAoB,EAAmB,EAAE;IACnF,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IAGpB,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"}
@@ -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":"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"}
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
  }