@namzu/sandbox 24.0.0 → 26.0.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 (158) hide show
  1. package/CHANGELOG.md +284 -0
  2. package/dist/backends/http-worker-client.d.ts +3 -1
  3. package/dist/backends/http-worker-client.d.ts.map +1 -1
  4. package/dist/backends/http-worker-client.js +15 -4
  5. package/dist/backends/http-worker-client.js.map +1 -1
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/local-virtual-computer/client.d.ts +21 -0
  11. package/dist/local-virtual-computer/client.d.ts.map +1 -0
  12. package/dist/local-virtual-computer/client.js +503 -0
  13. package/dist/local-virtual-computer/client.js.map +1 -0
  14. package/dist/local-virtual-computer/detached-process.d.ts +15 -0
  15. package/dist/local-virtual-computer/detached-process.d.ts.map +1 -0
  16. package/dist/local-virtual-computer/detached-process.js +111 -0
  17. package/dist/local-virtual-computer/detached-process.js.map +1 -0
  18. package/dist/local-virtual-computer/detached-worker.d.ts +11 -0
  19. package/dist/local-virtual-computer/detached-worker.d.ts.map +1 -0
  20. package/dist/local-virtual-computer/detached-worker.js +97 -0
  21. package/dist/local-virtual-computer/detached-worker.js.map +1 -0
  22. package/dist/local-virtual-computer/dialect.d.ts +26 -0
  23. package/dist/local-virtual-computer/dialect.d.ts.map +1 -0
  24. package/dist/local-virtual-computer/dialect.js +61 -0
  25. package/dist/local-virtual-computer/dialect.js.map +1 -0
  26. package/dist/local-virtual-computer/engine.d.ts +63 -0
  27. package/dist/local-virtual-computer/engine.d.ts.map +1 -0
  28. package/dist/local-virtual-computer/engine.js +125 -0
  29. package/dist/local-virtual-computer/engine.js.map +1 -0
  30. package/dist/local-virtual-computer/guest-stdio.d.ts +15 -0
  31. package/dist/local-virtual-computer/guest-stdio.d.ts.map +1 -0
  32. package/dist/local-virtual-computer/guest-stdio.js +330 -0
  33. package/dist/local-virtual-computer/guest-stdio.js.map +1 -0
  34. package/dist/local-virtual-computer/index.d.ts +36 -0
  35. package/dist/local-virtual-computer/index.d.ts.map +1 -0
  36. package/dist/local-virtual-computer/index.js +341 -0
  37. package/dist/local-virtual-computer/index.js.map +1 -0
  38. package/dist/local-virtual-computer/podman-machine.d.ts +17 -0
  39. package/dist/local-virtual-computer/podman-machine.d.ts.map +1 -0
  40. package/dist/local-virtual-computer/podman-machine.js +181 -0
  41. package/dist/local-virtual-computer/podman-machine.js.map +1 -0
  42. package/dist/local-virtual-computer/setup/contract.d.ts +360 -0
  43. package/dist/local-virtual-computer/setup/contract.d.ts.map +1 -0
  44. package/dist/local-virtual-computer/setup/contract.js +3 -0
  45. package/dist/local-virtual-computer/setup/contract.js.map +1 -0
  46. package/dist/local-virtual-computer/setup/elevated.d.ts +78 -0
  47. package/dist/local-virtual-computer/setup/elevated.d.ts.map +1 -0
  48. package/dist/local-virtual-computer/setup/elevated.js +548 -0
  49. package/dist/local-virtual-computer/setup/elevated.js.map +1 -0
  50. package/dist/local-virtual-computer/setup/host.d.ts +12 -0
  51. package/dist/local-virtual-computer/setup/host.d.ts.map +1 -0
  52. package/dist/local-virtual-computer/setup/host.js +93 -0
  53. package/dist/local-virtual-computer/setup/host.js.map +1 -0
  54. package/dist/local-virtual-computer/setup/idle.d.ts +18 -0
  55. package/dist/local-virtual-computer/setup/idle.d.ts.map +1 -0
  56. package/dist/local-virtual-computer/setup/idle.js +38 -0
  57. package/dist/local-virtual-computer/setup/idle.js.map +1 -0
  58. package/dist/local-virtual-computer/setup/image.d.ts +7 -0
  59. package/dist/local-virtual-computer/setup/image.d.ts.map +1 -0
  60. package/dist/local-virtual-computer/setup/image.js +124 -0
  61. package/dist/local-virtual-computer/setup/image.js.map +1 -0
  62. package/dist/local-virtual-computer/setup/index.d.ts +17 -0
  63. package/dist/local-virtual-computer/setup/index.d.ts.map +1 -0
  64. package/dist/local-virtual-computer/setup/index.js +17 -0
  65. package/dist/local-virtual-computer/setup/index.js.map +1 -0
  66. package/dist/local-virtual-computer/setup/limits.d.ts +30 -0
  67. package/dist/local-virtual-computer/setup/limits.d.ts.map +1 -0
  68. package/dist/local-virtual-computer/setup/limits.js +58 -0
  69. package/dist/local-virtual-computer/setup/limits.js.map +1 -0
  70. package/dist/local-virtual-computer/setup/plan.d.ts +8 -0
  71. package/dist/local-virtual-computer/setup/plan.d.ts.map +1 -0
  72. package/dist/local-virtual-computer/setup/plan.js +131 -0
  73. package/dist/local-virtual-computer/setup/plan.js.map +1 -0
  74. package/dist/local-virtual-computer/setup/readiness.d.ts +11 -0
  75. package/dist/local-virtual-computer/setup/readiness.d.ts.map +1 -0
  76. package/dist/local-virtual-computer/setup/readiness.js +320 -0
  77. package/dist/local-virtual-computer/setup/readiness.js.map +1 -0
  78. package/dist/local-virtual-computer/setup/registry.d.ts +18 -0
  79. package/dist/local-virtual-computer/setup/registry.d.ts.map +1 -0
  80. package/dist/local-virtual-computer/setup/registry.js +50 -0
  81. package/dist/local-virtual-computer/setup/registry.js.map +1 -0
  82. package/dist/local-virtual-computer/setup/restart.d.ts +8 -0
  83. package/dist/local-virtual-computer/setup/restart.d.ts.map +1 -0
  84. package/dist/local-virtual-computer/setup/restart.js +60 -0
  85. package/dist/local-virtual-computer/setup/restart.js.map +1 -0
  86. package/dist/local-virtual-computer/setup/resume.d.ts +14 -0
  87. package/dist/local-virtual-computer/setup/resume.d.ts.map +1 -0
  88. package/dist/local-virtual-computer/setup/resume.js +58 -0
  89. package/dist/local-virtual-computer/setup/resume.js.map +1 -0
  90. package/dist/local-virtual-computer/setup/run.d.ts +8 -0
  91. package/dist/local-virtual-computer/setup/run.d.ts.map +1 -0
  92. package/dist/local-virtual-computer/setup/run.js +200 -0
  93. package/dist/local-virtual-computer/setup/run.js.map +1 -0
  94. package/dist/local-virtual-computer/setup/windows-folder.d.ts +11 -0
  95. package/dist/local-virtual-computer/setup/windows-folder.d.ts.map +1 -0
  96. package/dist/local-virtual-computer/setup/windows-folder.js +14 -0
  97. package/dist/local-virtual-computer/setup/windows-folder.js.map +1 -0
  98. package/dist/local-virtual-computer/setup/wsl-package.d.ts +19 -0
  99. package/dist/local-virtual-computer/setup/wsl-package.d.ts.map +1 -0
  100. package/dist/local-virtual-computer/setup/wsl-package.js +242 -0
  101. package/dist/local-virtual-computer/setup/wsl-package.js.map +1 -0
  102. package/dist/local-virtual-computer/setup/wslc-shared.d.ts +27 -0
  103. package/dist/local-virtual-computer/setup/wslc-shared.d.ts.map +1 -0
  104. package/dist/local-virtual-computer/setup/wslc-shared.js +137 -0
  105. package/dist/local-virtual-computer/setup/wslc-shared.js.map +1 -0
  106. package/dist/local-virtual-computer/ssh-forward.d.ts +19 -0
  107. package/dist/local-virtual-computer/ssh-forward.d.ts.map +1 -0
  108. package/dist/local-virtual-computer/ssh-forward.js +179 -0
  109. package/dist/local-virtual-computer/ssh-forward.js.map +1 -0
  110. package/dist/local-virtual-computer/wslc-engine.d.ts +27 -0
  111. package/dist/local-virtual-computer/wslc-engine.d.ts.map +1 -0
  112. package/dist/local-virtual-computer/wslc-engine.js +98 -0
  113. package/dist/local-virtual-computer/wslc-engine.js.map +1 -0
  114. package/local-computer/Dockerfile +99 -0
  115. package/local-computer/app-catalog.cjs +240 -0
  116. package/local-computer/app-native-host.cjs +144 -0
  117. package/local-computer/browser-home.cjs +249 -0
  118. package/local-computer/build-image.mjs +310 -0
  119. package/local-computer/desktop-worker.cjs +477 -0
  120. package/local-computer/entrypoint.sh +161 -0
  121. package/local-computer/home.html +28 -0
  122. package/local-computer/new-tab/home.css +255 -0
  123. package/local-computer/new-tab/home.js +65 -0
  124. package/local-computer/new-tab/manifest.json +12 -0
  125. package/local-computer/new-tab/wordmark.svg +33 -0
  126. package/local-computer/openbox-rc.xml +41 -0
  127. package/local-computer/prepare-home.cjs +121 -0
  128. package/local-computer/tint2rc +44 -0
  129. package/package.json +13 -4
  130. package/src/backends/http-worker-client.ts +31 -3
  131. package/src/index.ts +13 -0
  132. package/src/local-virtual-computer/client.ts +573 -0
  133. package/src/local-virtual-computer/detached-process.ts +133 -0
  134. package/src/local-virtual-computer/detached-worker.ts +124 -0
  135. package/src/local-virtual-computer/dialect.ts +83 -0
  136. package/src/local-virtual-computer/engine.ts +197 -0
  137. package/src/local-virtual-computer/guest-stdio.ts +332 -0
  138. package/src/local-virtual-computer/index.ts +447 -0
  139. package/src/local-virtual-computer/podman-machine.ts +264 -0
  140. package/src/local-virtual-computer/setup/contract.ts +395 -0
  141. package/src/local-virtual-computer/setup/elevated.ts +655 -0
  142. package/src/local-virtual-computer/setup/host.ts +100 -0
  143. package/src/local-virtual-computer/setup/idle.ts +39 -0
  144. package/src/local-virtual-computer/setup/image.ts +159 -0
  145. package/src/local-virtual-computer/setup/index.ts +16 -0
  146. package/src/local-virtual-computer/setup/limits.ts +68 -0
  147. package/src/local-virtual-computer/setup/plan.ts +144 -0
  148. package/src/local-virtual-computer/setup/readiness.ts +386 -0
  149. package/src/local-virtual-computer/setup/registry.ts +50 -0
  150. package/src/local-virtual-computer/setup/restart.ts +64 -0
  151. package/src/local-virtual-computer/setup/resume.ts +65 -0
  152. package/src/local-virtual-computer/setup/run.ts +225 -0
  153. package/src/local-virtual-computer/setup/windows-folder.ts +13 -0
  154. package/src/local-virtual-computer/setup/wsl-package.ts +242 -0
  155. package/src/local-virtual-computer/setup/wslc-shared.ts +147 -0
  156. package/src/local-virtual-computer/ssh-forward.ts +195 -0
  157. package/src/local-virtual-computer/wslc-engine.ts +124 -0
  158. package/worker/server.js +1499 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detached-process.js","sourceRoot":"","sources":["../../src/local-virtual-computer/detached-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const LOCAL_BACKGROUND_TIMEOUT_MS = 2147000000;
2
+ export interface DetachedWorkerConfiguration {
3
+ readonly type: 'start';
4
+ readonly executionUrl: string;
5
+ readonly token: string;
6
+ readonly command: string;
7
+ readonly args: string[];
8
+ readonly cwd?: string;
9
+ readonly env?: Record<string, string>;
10
+ }
11
+ //# sourceMappingURL=detached-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detached-worker.d.ts","sourceRoot":"","sources":["../../src/local-virtual-computer/detached-worker.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,2BAA2B,aAAgB,CAAA;AAExD,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC"}
@@ -0,0 +1,97 @@
1
+ /** Host-side stream bridge. No command is executed on this host process. */
2
+ import { HttpWorkerClient } from '../backends/http-worker-client.js';
3
+ import { RemoteCancellationUnknownError } from '../backends/remote-execution-controller.js';
4
+ export const LOCAL_BACKGROUND_TIMEOUT_MS = 2_147_000_000;
5
+ const controller = new AbortController();
6
+ let started = false;
7
+ let disconnected = false;
8
+ let cancellation;
9
+ let retirement;
10
+ function cancel(signal = 'SIGTERM') {
11
+ cancellation ??= signal;
12
+ controller.abort(new Error('Guest background command cancelled'));
13
+ }
14
+ process.on('SIGTERM', () => cancel());
15
+ process.on('SIGINT', () => cancel('SIGINT'));
16
+ process.on('disconnect', () => {
17
+ disconnected = true;
18
+ cancel();
19
+ retirement?.(false);
20
+ });
21
+ async function finish(code, confirmed = true) {
22
+ // Drain Node's own pipe buffers before reporting terminal state.
23
+ await Promise.all([
24
+ new Promise((resolve) => process.stdout.write('', () => resolve())),
25
+ new Promise((resolve) => process.stderr.write('', () => resolve())),
26
+ ]);
27
+ if (confirmed && process.connected)
28
+ await new Promise((resolve) => process.send?.({ type: 'terminal-confirmed' }, () => resolve()));
29
+ process.exit(code);
30
+ }
31
+ async function requireRetirement() {
32
+ let confirmed = disconnected
33
+ ? false
34
+ : await new Promise((resolve) => {
35
+ retirement = resolve;
36
+ process.send?.({ type: 'retire-computer' }, (error) => {
37
+ if (error)
38
+ resolve(false);
39
+ });
40
+ });
41
+ while (!confirmed && !disconnected) {
42
+ process.stderr.write('\n[Guest cancellation could not be confirmed; the computer requires operator recovery.]\n');
43
+ // Keep the bridge and ownership alive. The provider's next termination
44
+ // attempt retries retirement, never the command or its guest signals.
45
+ confirmed = await new Promise((resolve) => {
46
+ retirement = resolve;
47
+ });
48
+ }
49
+ return await finish(1, confirmed);
50
+ }
51
+ async function execute(config) {
52
+ try {
53
+ const result = await new HttpWorkerClient(config.executionUrl, config.token).exec(config.command, config.args, {
54
+ timeout: LOCAL_BACKGROUND_TIMEOUT_MS,
55
+ cwd: config.cwd,
56
+ env: config.env,
57
+ signal: controller.signal,
58
+ onOutput: (chunk) => (chunk.stream === 'stdout' ? process.stdout : process.stderr).write(chunk.data),
59
+ });
60
+ if (result.stdoutTruncated || result.stderrTruncated)
61
+ process.stderr.write('\n[Guest worker output exceeded its capture cap; the omitted bytes are unavailable.]\n');
62
+ if (result.timedOut)
63
+ process.stderr.write('\n[Guest background command reached its maximum lifetime.]\n');
64
+ await finish(result.exitCode);
65
+ }
66
+ catch (error) {
67
+ if (error instanceof RemoteCancellationUnknownError) {
68
+ // Closing a host pipe cannot prove a guest tree stopped. Ask the
69
+ // owning provider to retire the actual computer before exiting.
70
+ await requireRetirement();
71
+ }
72
+ if (controller.signal.aborted)
73
+ await finish(128 + (cancellation === 'SIGINT' ? 2 : 15));
74
+ process.stderr.write('\n[Guest background command could not be completed.]\n');
75
+ // A transport failure may happen after admission. Retire the computer
76
+ // rather than report a host bridge failure as a guest process exit.
77
+ await requireRetirement();
78
+ }
79
+ }
80
+ process.on('message', (raw) => {
81
+ if (!raw || typeof raw !== 'object' || !('type' in raw))
82
+ return;
83
+ const message = raw;
84
+ if (message.type === 'cancel') {
85
+ cancel(message.signal);
86
+ return;
87
+ }
88
+ if (message.type === 'retired') {
89
+ retirement?.(message.confirmed === true);
90
+ return;
91
+ }
92
+ if (message.type !== 'start' || started)
93
+ return;
94
+ started = true;
95
+ void execute(raw);
96
+ });
97
+ //# sourceMappingURL=detached-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detached-worker.js","sourceRoot":"","sources":["../../src/local-virtual-computer/detached-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { EngineDialect, LocalEngine } from './engine.js';
2
+ /**
3
+ * The engines speak nearly the same command line. Every place they differ is
4
+ * here, so the lifecycle in index.ts reads the same for all of them.
5
+ */
6
+ export type PublishedPorts = Record<string, {
7
+ HostIp?: string;
8
+ HostPort?: string;
9
+ }[]>;
10
+ /** Podman machines on WSL can lack delegated cgroup controllers. */
11
+ export declare function resourceFlags(dialect: EngineDialect): string[];
12
+ /**
13
+ * The container boundary. wslc has no flag for any of these; its boundary is
14
+ * the per-user virtual machine, the unprivileged guest user and the image.
15
+ */
16
+ export declare function hardeningFlags(dialect: EngineDialect): string[];
17
+ /** Command line that prints full container ids, one per line, for a filter. */
18
+ export declare function containerIdQuery(dialect: EngineDialect, filter: string, options: {
19
+ readonly full: boolean;
20
+ }): string[];
21
+ export declare function portsQuery(dialect: EngineDialect, name: string): string[];
22
+ /** Read published ports from what `portsQuery` printed. */
23
+ export declare function parsePublishedPorts(dialect: EngineDialect, output: string): PublishedPorts;
24
+ /** Make sure the labelled volume exists, creating it only when absent. */
25
+ export declare function ensureVolume(engine: LocalEngine, dialect: EngineDialect, volume: string, label: string, signal?: AbortSignal): Promise<void>;
26
+ //# sourceMappingURL=dialect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.d.ts","sourceRoot":"","sources":["../../src/local-virtual-computer/dialect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE7D;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAAA;AAErF,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAG/D;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACjC,MAAM,EAAE,CAYV;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGzE;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAO1F;AAED,0EAA0E;AAC1E,wBAAsB,YAAY,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,61 @@
1
+ /** Podman machines on WSL can lack delegated cgroup controllers. */
2
+ export function resourceFlags(dialect) {
3
+ return dialect === 'podman' ? ['--cgroups=disabled'] : [];
4
+ }
5
+ /**
6
+ * The container boundary. wslc has no flag for any of these; its boundary is
7
+ * the per-user virtual machine, the unprivileged guest user and the image.
8
+ */
9
+ export function hardeningFlags(dialect) {
10
+ if (dialect === 'wslc')
11
+ return [];
12
+ return ['--cap-drop=ALL', '--security-opt=no-new-privileges', '--read-only', '--ipc=private'];
13
+ }
14
+ /** Command line that prints full container ids, one per line, for a filter. */
15
+ export function containerIdQuery(dialect, filter, options) {
16
+ // wslc has no Go templates and truncates -q ids to 12 characters.
17
+ if (dialect === 'wslc')
18
+ return ['ps', '-a', '--filter', filter, '-q', '--no-trunc'];
19
+ return [
20
+ 'ps',
21
+ '--all',
22
+ '--filter',
23
+ filter,
24
+ ...(options.full ? ['--no-trunc'] : []),
25
+ '--format',
26
+ '{{.ID}}',
27
+ ];
28
+ }
29
+ export function portsQuery(dialect, name) {
30
+ if (dialect === 'wslc')
31
+ return ['inspect', '-f', 'json', name];
32
+ return ['inspect', '--format', '{{json .NetworkSettings.Ports}}', name];
33
+ }
34
+ /** Read published ports from what `portsQuery` printed. */
35
+ export function parsePublishedPorts(dialect, output) {
36
+ const parsed = JSON.parse(output);
37
+ if (dialect !== 'wslc')
38
+ return parsed;
39
+ const first = (Array.isArray(parsed) ? parsed[0] : undefined);
40
+ return first?.Ports ?? first?.NetworkSettings?.Ports ?? {};
41
+ }
42
+ /** Make sure the labelled volume exists, creating it only when absent. */
43
+ export async function ensureVolume(engine, dialect, volume, label, signal) {
44
+ if (dialect !== 'wslc') {
45
+ await engine.run(['volume', 'create', ...(dialect === 'podman' ? ['--ignore'] : []), '--label', label, volume], { signal });
46
+ return;
47
+ }
48
+ // wslc has no --ignore. A missing volume is either a failed command or an
49
+ // empty list, depending on how the output was captured.
50
+ let present = false;
51
+ try {
52
+ const found = JSON.parse(await engine.run(['volume', 'inspect', volume], { signal }));
53
+ present = Array.isArray(found) && found.length > 0;
54
+ }
55
+ catch {
56
+ signal?.throwIfAborted();
57
+ }
58
+ if (!present)
59
+ await engine.run(['volume', 'create', '--label', label, volume], { signal });
60
+ }
61
+ //# sourceMappingURL=dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../src/local-virtual-computer/dialect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /** Stable reasons a caller can branch on without parsing prose. */
2
+ export type LocalComputerSetupCode = 'engine-missing' | 'engine-too-old' | 'virtualization-off' | 'blocked-by-policy' | 'image-missing' | 'sdk-mismatch';
3
+ /** Safe operator-facing diagnosis, without daemon output or credentials. */
4
+ export declare class LocalComputerSetupError extends Error {
5
+ readonly name = "LocalComputerSetupError";
6
+ readonly code?: LocalComputerSetupCode;
7
+ constructor(message: string, code?: LocalComputerSetupCode, options?: {
8
+ cause?: unknown;
9
+ });
10
+ }
11
+ /**
12
+ * A failed engine command. The message never carries engine output; only
13
+ * recognised machine-readable codes (HRESULTs, WSLC_E_* names, spawn errno
14
+ * names) survive, so a typed diagnosis can be made without leaking text.
15
+ */
16
+ export declare class LocalCommandError extends Error {
17
+ readonly name = "LocalCommandError";
18
+ readonly errorCodes: readonly string[];
19
+ /** The process exit status, when the command ran and failed. */
20
+ readonly exitCode?: number;
21
+ constructor(message: string, errorCodes?: readonly string[], exitCode?: number);
22
+ }
23
+ /** Extract the codes worth keeping from a command's stderr. */
24
+ export declare function extractErrorCodes(text: string): string[];
25
+ /** Which command-line dialect an engine speaks. */
26
+ export type EngineDialect = 'docker' | 'podman' | 'wslc';
27
+ /** A host-controlled transport. Never pass this or its environment to an agent. */
28
+ export interface LocalComputerCommandRunner {
29
+ run(binary: string, args: readonly string[], options?: {
30
+ readonly signal?: AbortSignal;
31
+ readonly env?: NodeJS.ProcessEnv;
32
+ readonly cwd?: string;
33
+ }): Promise<string>;
34
+ }
35
+ export declare const nodeCommandRunner: LocalComputerCommandRunner;
36
+ /** TCP, SSH and remote named pipes cannot establish a local-device boundary. */
37
+ export declare function assertLocalEngineEndpoint(endpoint: string): void;
38
+ export interface LocalEngineOptions {
39
+ readonly dockerBinary?: string;
40
+ readonly engineEndpoint?: string;
41
+ readonly runner?: LocalComputerCommandRunner;
42
+ }
43
+ export interface LocalEngine {
44
+ readonly endpoint: string;
45
+ /** Command-line dialect. Absent means the engine was selected as Docker. */
46
+ readonly dialect?: EngineDialect;
47
+ forwardPorts?(ports: readonly number[], options: {
48
+ readonly signal?: AbortSignal;
49
+ readonly onLost: () => void;
50
+ }): Promise<LocalPortForward>;
51
+ run(args: readonly string[], options?: {
52
+ readonly signal?: AbortSignal;
53
+ readonly env?: NodeJS.ProcessEnv;
54
+ }): Promise<string>;
55
+ }
56
+ export interface LocalPortForward {
57
+ readonly ports: readonly number[];
58
+ assertAlive(): void;
59
+ close(): Promise<void>;
60
+ }
61
+ /** Resolve once, then pin every operation to the verified endpoint. */
62
+ export declare function resolveLocalEngine(options: LocalEngineOptions, signal?: AbortSignal): Promise<LocalEngine>;
63
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/local-virtual-computer/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { spawn } from 'node:child_process';
2
+ /** Safe operator-facing diagnosis, without daemon output or credentials. */
3
+ export class LocalComputerSetupError extends Error {
4
+ name = 'LocalComputerSetupError';
5
+ code;
6
+ constructor(message, code, options) {
7
+ super(message, options);
8
+ this.code = code;
9
+ }
10
+ }
11
+ /**
12
+ * A failed engine command. The message never carries engine output; only
13
+ * recognised machine-readable codes (HRESULTs, WSLC_E_* names, spawn errno
14
+ * names) survive, so a typed diagnosis can be made without leaking text.
15
+ */
16
+ export class LocalCommandError extends Error {
17
+ name = 'LocalCommandError';
18
+ errorCodes;
19
+ /** The process exit status, when the command ran and failed. */
20
+ exitCode;
21
+ constructor(message, errorCodes = [], exitCode) {
22
+ super(message);
23
+ this.errorCodes = errorCodes;
24
+ if (exitCode !== undefined)
25
+ this.exitCode = exitCode;
26
+ }
27
+ }
28
+ const ERROR_CODE_PATTERN = /WSLC_E_[A-Z0-9_]+|HCS_E_[A-Z0-9_]+|0x[0-9A-Fa-f]{8}/g;
29
+ /** Extract the codes worth keeping from a command's stderr. */
30
+ export function extractErrorCodes(text) {
31
+ const found = new Set();
32
+ for (const match of text.match(ERROR_CODE_PATTERN) ?? []) {
33
+ found.add(match.startsWith('0x') ? `0x${match.slice(2).toUpperCase()}` : match);
34
+ }
35
+ return [...found];
36
+ }
37
+ export const nodeCommandRunner = {
38
+ run(binary, args, options) {
39
+ options?.signal?.throwIfAborted();
40
+ return new Promise((resolve, reject) => {
41
+ const child = spawn(binary, [...args], {
42
+ env: options?.env ?? process.env,
43
+ cwd: options?.cwd,
44
+ signal: options?.signal,
45
+ windowsHide: true,
46
+ stdio: ['ignore', 'pipe', 'pipe'],
47
+ });
48
+ const output = [];
49
+ const diagnostics = [];
50
+ let diagnosticBytes = 0;
51
+ let outputBytes = 0;
52
+ let failed = false;
53
+ child.stdout.on('data', (chunk) => {
54
+ output.push(chunk);
55
+ outputBytes += chunk.byteLength;
56
+ if (outputBytes > 1024 * 1024) {
57
+ failed = true;
58
+ child.kill();
59
+ }
60
+ });
61
+ // Docker's error text can echo worker configuration. Preserve the exit
62
+ // code, never stdout/stderr or the environment in a failure message.
63
+ child.stderr.on('data', (chunk) => {
64
+ if (diagnosticBytes >= 64 * 1024)
65
+ return;
66
+ diagnostics.push(chunk);
67
+ diagnosticBytes += chunk.byteLength;
68
+ });
69
+ child.once('error', (error) => reject(new LocalCommandError('The local container engine could not be started', error.code ? [error.code] : [])));
70
+ child.once('close', (code) => {
71
+ if (failed)
72
+ reject(new Error('The local container engine response exceeded its size limit'));
73
+ else if (code !== 0)
74
+ reject(new LocalCommandError(`The local container engine command failed (${code})`, extractErrorCodes(Buffer.concat(diagnostics).toString('utf8')), code ?? undefined));
75
+ else {
76
+ const bytes = Buffer.concat(output);
77
+ // Native wsl.exe emits UTF-16LE through a redirected pipe.
78
+ const utf16 = bytes[1] === 0 || (bytes[0] === 0xff && bytes[1] === 0xfe);
79
+ resolve(bytes.toString(utf16 ? 'utf16le' : 'utf8').replace(/^\uFEFF/, ''));
80
+ }
81
+ });
82
+ });
83
+ },
84
+ };
85
+ /** TCP, SSH and remote named pipes cannot establish a local-device boundary. */
86
+ export function assertLocalEngineEndpoint(endpoint) {
87
+ if (/^unix:\/\/\/[\S]+$/.test(endpoint))
88
+ return;
89
+ if (/^npipe:\/\/\/\/\.\/pipe\/[a-zA-Z0-9_.-]+$/.test(endpoint))
90
+ return;
91
+ throw new LocalComputerSetupError('Pals require a local Docker Unix socket or Windows named pipe; remote engines are refused');
92
+ }
93
+ /** Resolve once, then pin every operation to the verified endpoint. */
94
+ export async function resolveLocalEngine(options, signal) {
95
+ const binary = options.dockerBinary ?? 'docker';
96
+ const runner = options.runner ?? nodeCommandRunner;
97
+ let endpoint = options.engineEndpoint;
98
+ if (endpoint === undefined) {
99
+ const current = (await runner.run(binary, ['context', 'show'], { signal })).trim();
100
+ if (!current)
101
+ throw new LocalComputerSetupError('The current Docker context could not be determined');
102
+ const contexts = JSON.parse(await runner.run(binary, ['context', 'inspect', current], { signal }));
103
+ endpoint = contexts[0]?.Endpoints?.docker?.Host;
104
+ // DOCKER_HOST overrides a context in normal Docker invocations. Honor
105
+ // its actual destination and validate it rather than checking one
106
+ // endpoint while accidentally provisioning on another.
107
+ if (!process.env.DOCKER_CONTEXT && process.env.DOCKER_HOST)
108
+ endpoint = process.env.DOCKER_HOST;
109
+ }
110
+ if (!endpoint)
111
+ throw new LocalComputerSetupError('Docker did not provide a local engine endpoint');
112
+ assertLocalEngineEndpoint(endpoint);
113
+ const host = endpoint;
114
+ const run = (args, call) => {
115
+ const env = { ...process.env, ...call?.env };
116
+ env.DOCKER_CONTEXT = undefined;
117
+ env.DOCKER_HOST = undefined;
118
+ return runner.run(binary, ['--host', host, ...args], { ...call, env });
119
+ };
120
+ const info = JSON.parse(await run(['info', '--format', '{{json .}}'], { signal }));
121
+ if (info.OSType !== 'linux')
122
+ throw new LocalComputerSetupError('The local Docker engine must run Linux containers');
123
+ return { endpoint: host, run };
124
+ }
125
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/local-virtual-computer/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAW1C,4EAA4E;AAC5E,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC/B,IAAI,GAAG,yBAAyB,CAAA;IACzC,IAAI,CAAyB;IACtC,YAAY,OAAe,EAAE,IAA6B,EAAE,OAA6B;QACxF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,CAAC;CACD;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACzB,IAAI,GAAG,mBAAmB,CAAA;IACnC,UAAU,CAAmB;IACtC,gEAAgE;IACvD,QAAQ,CAAS;IAC1B,YAAY,OAAe,EAAE,aAAgC,EAAE,EAAE,QAAiB;QACjF,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrD,CAAC;CACD;AAED,MAAM,kBAAkB,GAAG,sDAAsD,CAAA;AAEjF,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;AAClB,CAAC;AAkBD,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC5D,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO;QACxB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBACtC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;gBAChC,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aACjC,CAAC,CAAA;YACF,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,WAAW,GAAa,EAAE,CAAA;YAChC,IAAI,eAAe,GAAG,CAAC,CAAA;YACvB,IAAI,WAAW,GAAG,CAAC,CAAA;YACnB,IAAI,MAAM,GAAG,KAAK,CAAA;YAClB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAClB,WAAW,IAAI,KAAK,CAAC,UAAU,CAAA;gBAC/B,IAAI,WAAW,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;oBAC/B,MAAM,GAAG,IAAI,CAAA;oBACb,KAAK,CAAC,IAAI,EAAE,CAAA;gBACb,CAAC;YACF,CAAC,CAAC,CAAA;YACF,uEAAuE;YACvE,qEAAqE;YACrE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,IAAI,eAAe,IAAI,EAAE,GAAG,IAAI;oBAAE,OAAM;gBACxC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACvB,eAAe,IAAI,KAAK,CAAC,UAAU,CAAA;YACpC,CAAC,CAAC,CAAA;YACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE,CACpD,MAAM,CACL,IAAI,iBAAiB,CACpB,iDAAiD,EACjD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9B,CACD,CACD,CAAA;YACD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC5B,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAA;qBACvF,IAAI,IAAI,KAAK,CAAC;oBAClB,MAAM,CACL,IAAI,iBAAiB,CACpB,8CAA8C,IAAI,GAAG,EACrD,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAC9D,IAAI,IAAI,SAAS,CACjB,CACD,CAAA;qBACG,CAAC;oBACL,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBACnC,2DAA2D;oBAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;oBACxE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC3E,CAAC;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC;CACD,CAAA;AAED,gFAAgF;AAChF,MAAM,UAAU,yBAAyB,CAAC,QAAgB;IACzD,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAM;IAC/C,IAAI,2CAA2C,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAM;IACtE,MAAM,IAAI,uBAAuB,CAChC,2FAA2F,CAC3F,CAAA;AACF,CAAC;AA4BD,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACvC,OAA2B,EAC3B,MAAoB;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAA;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAA;IAClD,IAAI,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAA;IACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClF,IAAI,CAAC,OAAO;YACX,MAAM,IAAI,uBAAuB,CAAC,oDAAoD,CAAC,CAAA;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CACjB,CAAA;QACrD,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAA;QAC/C,sEAAsE;QACtE,kEAAkE;QAClE,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;YAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAC/F,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,uBAAuB,CAAC,gDAAgD,CAAC,CAAA;IAClG,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAA;IACrB,MAAM,GAAG,GAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAA;QAC5C,GAAG,CAAC,cAAc,GAAG,SAAS,CAAA;QAC9B,GAAG,CAAC,WAAW,GAAG,SAAS,CAAA;QAC3B,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;IACvE,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAEhF,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAC1B,MAAM,IAAI,uBAAuB,CAAC,mDAAmD,CAAC,CAAA;IACvF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SandboxStdioChannel, SandboxStdioOptions } from '@namzu/sdk';
2
+ interface GuestStdioHost {
3
+ readonly executionUrl: string;
4
+ readonly token: string;
5
+ readonly acquire: (signal?: AbortSignal) => Promise<() => void>;
6
+ readonly uncertain: () => void;
7
+ }
8
+ export interface OwnedGuestStdioChannel extends SandboxStdioChannel {
9
+ /** Host-only: the owning engine has positively confirmed allocation removal. */
10
+ allocationEnded(): void;
11
+ }
12
+ /** Private allocation token stays inside this host channel, never in guest argv/env. */
13
+ export declare function openGuestStdio(host: GuestStdioHost, command: string, args: readonly string[], options?: SandboxStdioOptions): Promise<OwnedGuestStdioChannel>;
14
+ export {};
15
+ //# sourceMappingURL=guest-stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guest-stdio.d.ts","sourceRoot":"","sources":["../../src/local-virtual-computer/guest-stdio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EAGnB,mBAAmB,EACnB,MAAM,YAAY,CAAA;AAGnB,UAAU,cAAc;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAA;CAC9B;AAKD,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IAClE,gFAAgF;IAChF,eAAe,IAAI,IAAI,CAAA;CACvB;AAED,wFAAwF;AACxF,wBAAsB,cAAc,CACnC,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CAkRjC"}