@volter/browser-wali 0.1.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/browser-wali-command.d.ts +22 -0
  4. package/dist/browser-wali-command.d.ts.map +1 -0
  5. package/dist/browser-wali-command.js +44 -0
  6. package/dist/browser-wali-command.js.map +1 -0
  7. package/dist/capabilities.d.ts +3 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +23 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/coherent-file-locks.d.ts +23 -0
  12. package/dist/coherent-file-locks.d.ts.map +1 -0
  13. package/dist/coherent-file-locks.js +134 -0
  14. package/dist/coherent-file-locks.js.map +1 -0
  15. package/dist/events.d.ts +30 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +289 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/filesystem-protocol.d.ts +48 -0
  20. package/dist/filesystem-protocol.d.ts.map +1 -0
  21. package/dist/filesystem-protocol.js +27 -0
  22. package/dist/filesystem-protocol.js.map +1 -0
  23. package/dist/filesystem-remote.d.ts +65 -0
  24. package/dist/filesystem-remote.d.ts.map +1 -0
  25. package/dist/filesystem-remote.js +271 -0
  26. package/dist/filesystem-remote.js.map +1 -0
  27. package/dist/filesystem-worker.d.ts +2 -0
  28. package/dist/filesystem-worker.d.ts.map +1 -0
  29. package/dist/filesystem-worker.js +269 -0
  30. package/dist/filesystem-worker.js.map +1 -0
  31. package/dist/filesystem.d.ts +115 -0
  32. package/dist/filesystem.d.ts.map +1 -0
  33. package/dist/filesystem.js +1179 -0
  34. package/dist/filesystem.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/inspect.d.ts +7 -0
  40. package/dist/inspect.d.ts.map +1 -0
  41. package/dist/inspect.js +32 -0
  42. package/dist/inspect.js.map +1 -0
  43. package/dist/local-sockets.d.ts +13 -0
  44. package/dist/local-sockets.d.ts.map +1 -0
  45. package/dist/local-sockets.js +139 -0
  46. package/dist/local-sockets.js.map +1 -0
  47. package/dist/loopback-host.d.ts +14 -0
  48. package/dist/loopback-host.d.ts.map +1 -0
  49. package/dist/loopback-host.js +476 -0
  50. package/dist/loopback-host.js.map +1 -0
  51. package/dist/loopback-protocol.d.ts +41 -0
  52. package/dist/loopback-protocol.d.ts.map +1 -0
  53. package/dist/loopback-protocol.js +2 -0
  54. package/dist/loopback-protocol.js.map +1 -0
  55. package/dist/memory.d.ts +39 -0
  56. package/dist/memory.d.ts.map +1 -0
  57. package/dist/memory.js +520 -0
  58. package/dist/memory.js.map +1 -0
  59. package/dist/module-layout.d.ts +9 -0
  60. package/dist/module-layout.d.ts.map +1 -0
  61. package/dist/module-layout.js +105 -0
  62. package/dist/module-layout.js.map +1 -0
  63. package/dist/network-protocol.d.ts +43 -0
  64. package/dist/network-protocol.d.ts.map +1 -0
  65. package/dist/network-protocol.js +26 -0
  66. package/dist/network-protocol.js.map +1 -0
  67. package/dist/network-worker.d.ts +2 -0
  68. package/dist/network-worker.d.ts.map +1 -0
  69. package/dist/network-worker.js +943 -0
  70. package/dist/network-worker.js.map +1 -0
  71. package/dist/network.d.ts +52 -0
  72. package/dist/network.d.ts.map +1 -0
  73. package/dist/network.js +427 -0
  74. package/dist/network.js.map +1 -0
  75. package/dist/process-adapter.d.ts +14 -0
  76. package/dist/process-adapter.d.ts.map +1 -0
  77. package/dist/process-adapter.js +45 -0
  78. package/dist/process-adapter.js.map +1 -0
  79. package/dist/process-bridge.d.ts +54 -0
  80. package/dist/process-bridge.d.ts.map +1 -0
  81. package/dist/process-bridge.js +150 -0
  82. package/dist/process-bridge.js.map +1 -0
  83. package/dist/program.d.ts +49 -0
  84. package/dist/program.d.ts.map +1 -0
  85. package/dist/program.js +204 -0
  86. package/dist/program.js.map +1 -0
  87. package/dist/runtime.d.ts +9 -0
  88. package/dist/runtime.d.ts.map +1 -0
  89. package/dist/runtime.js +528 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/shared-pipes.d.ts +44 -0
  92. package/dist/shared-pipes.d.ts.map +1 -0
  93. package/dist/shared-pipes.js +306 -0
  94. package/dist/shared-pipes.js.map +1 -0
  95. package/dist/snapshot-filesystem.d.ts +31 -0
  96. package/dist/snapshot-filesystem.d.ts.map +1 -0
  97. package/dist/snapshot-filesystem.js +247 -0
  98. package/dist/snapshot-filesystem.js.map +1 -0
  99. package/dist/stdin.d.ts +36 -0
  100. package/dist/stdin.d.ts.map +1 -0
  101. package/dist/stdin.js +143 -0
  102. package/dist/stdin.js.map +1 -0
  103. package/dist/symlink.d.ts +8 -0
  104. package/dist/symlink.d.ts.map +1 -0
  105. package/dist/symlink.js +66 -0
  106. package/dist/symlink.js.map +1 -0
  107. package/dist/system.d.ts +41 -0
  108. package/dist/system.d.ts.map +1 -0
  109. package/dist/system.js +305 -0
  110. package/dist/system.js.map +1 -0
  111. package/dist/thread-coordinator-worker.d.ts +25 -0
  112. package/dist/thread-coordinator-worker.d.ts.map +1 -0
  113. package/dist/thread-coordinator-worker.js +49 -0
  114. package/dist/thread-coordinator-worker.js.map +1 -0
  115. package/dist/thread-worker.d.ts +2 -0
  116. package/dist/thread-worker.d.ts.map +1 -0
  117. package/dist/thread-worker.js +725 -0
  118. package/dist/thread-worker.js.map +1 -0
  119. package/dist/threads.d.ts +44 -0
  120. package/dist/threads.d.ts.map +1 -0
  121. package/dist/threads.js +154 -0
  122. package/dist/threads.js.map +1 -0
  123. package/dist/types.d.ts +112 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +2 -0
  126. package/dist/types.js.map +1 -0
  127. package/dist/websocket-peer.d.ts +38 -0
  128. package/dist/websocket-peer.d.ts.map +1 -0
  129. package/dist/websocket-peer.js +407 -0
  130. package/dist/websocket-peer.js.map +1 -0
  131. package/dist/worker-program-protocol.d.ts +71 -0
  132. package/dist/worker-program-protocol.d.ts.map +1 -0
  133. package/dist/worker-program-protocol.js +2 -0
  134. package/dist/worker-program-protocol.js.map +1 -0
  135. package/dist/worker-program-worker.d.ts +2 -0
  136. package/dist/worker-program-worker.d.ts.map +1 -0
  137. package/dist/worker-program-worker.js +109 -0
  138. package/dist/worker-program-worker.js.map +1 -0
  139. package/dist/worker-program.d.ts +58 -0
  140. package/dist/worker-program.d.ts.map +1 -0
  141. package/dist/worker-program.js +425 -0
  142. package/dist/worker-program.js.map +1 -0
  143. package/package.json +23 -0
@@ -0,0 +1,14 @@
1
+ import type { BrowserExecutableResolver, BrowserProcessHost } from "@volter/browser-runtime/browser-process-host.js";
2
+ import { BrowserWaliRuntime } from "./runtime.js";
3
+ import type { WaliFileSystem, WaliModuleSource } from "./types.js";
4
+ export interface BrowserWaliProgramDefinition {
5
+ source: WaliModuleSource | (() => Promise<WaliModuleSource>);
6
+ env?: Readonly<Record<string, string>>;
7
+ filesystem?: WaliFileSystem;
8
+ runtime?: BrowserWaliRuntime;
9
+ }
10
+ /** Registers a WALI executable with the provider-neutral browser process host. */
11
+ export declare function registerBrowserWaliProgram(host: BrowserProcessHost, name: string, definition: BrowserWaliProgramDefinition): void;
12
+ /** Resolves marker-backed WALI symlinks without teaching the process host WALI. */
13
+ export declare function createWaliExecutableResolver(filesystem: WaliFileSystem): BrowserExecutableResolver;
14
+ //# sourceMappingURL=process-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-adapter.d.ts","sourceRoot":"","sources":["../src/process-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,iDAAiD,CAAC;AAKzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,gBAAgB,GAAG,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7D,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,4BAA4B,GACvC,IAAI,CAyBN;AAED,mFAAmF;AACnF,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,cAAc,GAAG,yBAAyB,CAElG"}
@@ -0,0 +1,45 @@
1
+ import { BrowserWaliRuntime } from "./runtime.js";
2
+ import { normalizeWaliAbsolutePath, readWaliSymlink } from "./symlink.js";
3
+ /** Registers a WALI executable with the provider-neutral browser process host. */
4
+ export function registerBrowserWaliProgram(host, name, definition) {
5
+ const runtime = definition.runtime ?? new BrowserWaliRuntime();
6
+ host.registerProgram(name, async (argv, options) => {
7
+ if (options.signal?.aborted)
8
+ throw options.signal.reason;
9
+ const source = typeof definition.source === "function"
10
+ ? await definition.source() : definition.source;
11
+ const env = { ...options.env, ...definition.env };
12
+ const result = await runtime.run(source, {
13
+ argv,
14
+ cwd: options.cwd ?? "/",
15
+ ...(definition.filesystem ? { filesystem: definition.filesystem } : {}),
16
+ ...(Object.keys(env).length > 0 ? { env } : {}),
17
+ ...(options.stdin !== undefined ? { stdin: options.stdin } : {}),
18
+ ...(options.onStdout
19
+ ? { onStdout: (chunk) => options.onStdout(new TextDecoder().decode(chunk)) }
20
+ : {}),
21
+ ...(options.onStderr
22
+ ? { onStderr: (chunk) => options.onStderr(new TextDecoder().decode(chunk)) }
23
+ : {}),
24
+ });
25
+ return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode };
26
+ });
27
+ }
28
+ /** Resolves marker-backed WALI symlinks without teaching the process host WALI. */
29
+ export function createWaliExecutableResolver(filesystem) {
30
+ return (requested, isRegistered) => resolveExecutable(filesystem, requested, isRegistered);
31
+ }
32
+ function resolveExecutable(filesystem, requested, isRegistered, depth = 0) {
33
+ if (!requested.startsWith("/") || depth >= 40)
34
+ return;
35
+ const target = readWaliSymlink(filesystem, requested);
36
+ if (target !== undefined) {
37
+ const resolved = target.startsWith("/")
38
+ ? normalizeWaliAbsolutePath(target)
39
+ : normalizeWaliAbsolutePath(`${requested.slice(0, requested.lastIndexOf("/"))}/${target}`);
40
+ return resolveExecutable(filesystem, resolved, isRegistered, depth + 1);
41
+ }
42
+ const basename = requested.slice(requested.lastIndexOf("/") + 1);
43
+ return isRegistered(basename) ? basename : undefined;
44
+ }
45
+ //# sourceMappingURL=process-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-adapter.js","sourceRoot":"","sources":["../src/process-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
2
+ import { type BrowserProcessFilesystemPatch } from "@volter/browser-runtime/browser-process-filesystem.js";
3
+ export { applyProcessFilesystemPatch, createProcessFilesystemPatch, type BrowserProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
4
+ export declare const BROWSER_PROCESS_RESPONSE_BYTES: number;
5
+ export declare const BROWSER_PROCESS_PIPE_BYTES: number;
6
+ export interface BrowserProcessPipeHandle {
7
+ control: SharedArrayBuffer;
8
+ payload: SharedArrayBuffer;
9
+ role: "reader" | "writer";
10
+ controlOffset?: number;
11
+ payloadOffset?: number;
12
+ payloadLength?: number;
13
+ }
14
+ export interface BrowserProcessSharedState {
15
+ /** 0 running, 1 complete. */
16
+ control: SharedArrayBuffer;
17
+ /** UTF-8 JSON-encoded BrowserFileSystemSnapshot after completion. */
18
+ response: SharedArrayBuffer;
19
+ }
20
+ export interface WaliBrowserSpawnRequest extends BrowserProcessSharedState {
21
+ pid: number;
22
+ executablePath: string;
23
+ argv: string[];
24
+ env: Record<string, string>;
25
+ cwd: string;
26
+ stdin?: BrowserProcessPipeHandle;
27
+ stdout?: BrowserProcessPipeHandle;
28
+ stderr?: BrowserProcessPipeHandle;
29
+ }
30
+ export interface WaliBrowserSpawnMessage extends WaliBrowserSpawnRequest {
31
+ filesystemPatch: BrowserProcessFilesystemPatch;
32
+ }
33
+ export type WaliBrowserProcessPortMessage = ({
34
+ type: "spawn";
35
+ } & WaliBrowserSpawnMessage) | {
36
+ type: "kill";
37
+ pid: number;
38
+ signal: number;
39
+ };
40
+ export declare function createSharedPipe(): {
41
+ reader: BrowserProcessPipeHandle;
42
+ writer: BrowserProcessPipeHandle;
43
+ };
44
+ export declare function retainSharedPipe(handle: BrowserProcessPipeHandle): BrowserProcessPipeHandle;
45
+ export declare function closeSharedPipe(handle: BrowserProcessPipeHandle): void;
46
+ export declare function pollSharedPipe(handle: BrowserProcessPipeHandle, events: number): number;
47
+ export declare function readSharedPipe(handle: BrowserProcessPipeHandle, maximum: number): Uint8Array | bigint;
48
+ /** Synchronous writer used by a WALI worker, where Atomics.wait is legal. */
49
+ export declare function writeSharedPipeSync(handle: BrowserProcessPipeHandle, value: Uint8Array): bigint;
50
+ /** Cooperative writer used by the browser UI thread, which cannot Atomics.wait. */
51
+ export declare function writeSharedPipe(handle: BrowserProcessPipeHandle, value: Uint8Array): Promise<void>;
52
+ export declare function encodeProcessSnapshot(shared: BrowserProcessSharedState, before: BrowserFileSystemSnapshot, after: BrowserFileSystemSnapshot, exitCode: number): void;
53
+ export declare function decodeProcessSnapshot(shared: BrowserProcessSharedState): BrowserProcessFilesystemPatch | undefined;
54
+ //# sourceMappingURL=process-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-bridge.d.ts","sourceRoot":"","sources":["../src/process-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,uDAAuD,CAAC;AAE/D,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,6BAA6B,GACnC,MAAM,uDAAuD,CAAC;AAQ/D,eAAO,MAAM,8BAA8B,QAAmB,CAAC;AAC/D,eAAO,MAAM,0BAA0B,QAAc,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,MAAM,CAAC,EAAE,wBAAwB,CAAC;CACnC;AAED,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACtE,eAAe,EAAE,6BAA6B,CAAC;CAChD;AAED,MAAM,MAAM,6BAA6B,GACrC,CAAC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,uBAAuB,CAAC,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,wBAAgB,gBAAgB,IAAI;IAAE,MAAM,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,CAUzG;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,GAAG,wBAAwB,CAI3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAKtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAavF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAgBrG;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAsB/F;AAED,mFAAmF;AACnF,wBAAsB,eAAe,CAAC,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBxG;AAYD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,yBAAyB,EAChC,QAAQ,EAAE,MAAM,GACf,IAAI,CAWN;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,yBAAyB,GAAG,6BAA6B,GAAG,SAAS,CAMlH"}
@@ -0,0 +1,150 @@
1
+ import { createProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
2
+ export { applyProcessFilesystemPatch, createProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
3
+ const READ_INDEX = 0;
4
+ const WRITE_INDEX = 1;
5
+ const LENGTH_INDEX = 2;
6
+ const READER_REFS_INDEX = 3;
7
+ const WRITER_REFS_INDEX = 4;
8
+ export const BROWSER_PROCESS_RESPONSE_BYTES = 16 * 1024 * 1024;
9
+ export const BROWSER_PROCESS_PIPE_BYTES = 1024 * 1024;
10
+ export function createSharedPipe() {
11
+ const control = new SharedArrayBuffer(8 * Int32Array.BYTES_PER_ELEMENT);
12
+ const payload = new SharedArrayBuffer(BROWSER_PROCESS_PIPE_BYTES);
13
+ const state = new Int32Array(control);
14
+ Atomics.store(state, READER_REFS_INDEX, 1);
15
+ Atomics.store(state, WRITER_REFS_INDEX, 1);
16
+ return {
17
+ reader: { control, payload, role: "reader" },
18
+ writer: { control, payload, role: "writer" },
19
+ };
20
+ }
21
+ export function retainSharedPipe(handle) {
22
+ const state = pipeState(handle);
23
+ Atomics.add(state, handle.role === "reader" ? READER_REFS_INDEX : WRITER_REFS_INDEX, 1);
24
+ return handle;
25
+ }
26
+ export function closeSharedPipe(handle) {
27
+ const state = pipeState(handle);
28
+ const index = handle.role === "reader" ? READER_REFS_INDEX : WRITER_REFS_INDEX;
29
+ if (Atomics.sub(state, index, 1) <= 1)
30
+ Atomics.store(state, index, 0);
31
+ Atomics.notify(state, LENGTH_INDEX);
32
+ }
33
+ export function pollSharedPipe(handle, events) {
34
+ const state = pipeState(handle);
35
+ const payload = pipePayload(handle);
36
+ const length = Atomics.load(state, LENGTH_INDEX);
37
+ let ready = 0;
38
+ if (handle.role === "reader") {
39
+ if ((events & 1) && (length > 0 || Atomics.load(state, WRITER_REFS_INDEX) === 0))
40
+ ready |= 1;
41
+ if (Atomics.load(state, WRITER_REFS_INDEX) === 0)
42
+ ready |= 0x10;
43
+ }
44
+ else {
45
+ if ((events & 4) && Atomics.load(state, READER_REFS_INDEX) > 0 && length < payload.byteLength)
46
+ ready |= 4;
47
+ if (Atomics.load(state, READER_REFS_INDEX) === 0)
48
+ ready |= 0x10;
49
+ }
50
+ return ready;
51
+ }
52
+ export function readSharedPipe(handle, maximum) {
53
+ if (handle.role !== "reader")
54
+ return -9n;
55
+ const state = pipeState(handle);
56
+ const payload = pipePayload(handle);
57
+ const length = Atomics.load(state, LENGTH_INDEX);
58
+ if (length === 0)
59
+ return Atomics.load(state, WRITER_REFS_INDEX) === 0 ? new Uint8Array() : -11n;
60
+ const count = Math.min(Math.max(0, maximum), length);
61
+ const read = Atomics.load(state, READ_INDEX);
62
+ const first = Math.min(count, payload.byteLength - read);
63
+ const result = new Uint8Array(count);
64
+ result.set(payload.subarray(read, read + first));
65
+ if (first < count)
66
+ result.set(payload.subarray(0, count - first), first);
67
+ Atomics.store(state, READ_INDEX, (read + count) % payload.byteLength);
68
+ Atomics.sub(state, LENGTH_INDEX, count);
69
+ Atomics.notify(state, LENGTH_INDEX);
70
+ return result;
71
+ }
72
+ /** Synchronous writer used by a WALI worker, where Atomics.wait is legal. */
73
+ export function writeSharedPipeSync(handle, value) {
74
+ if (handle.role !== "writer")
75
+ return -9n;
76
+ const state = pipeState(handle);
77
+ const payload = pipePayload(handle);
78
+ let offset = 0;
79
+ while (offset < value.byteLength) {
80
+ if (Atomics.load(state, READER_REFS_INDEX) === 0)
81
+ return offset > 0 ? BigInt(offset) : -32n;
82
+ const length = Atomics.load(state, LENGTH_INDEX);
83
+ const available = payload.byteLength - length;
84
+ if (available === 0) {
85
+ Atomics.wait(state, LENGTH_INDEX, length, 50);
86
+ continue;
87
+ }
88
+ const write = Atomics.load(state, WRITE_INDEX);
89
+ const count = Math.min(value.byteLength - offset, available, payload.byteLength - write);
90
+ payload.set(value.subarray(offset, offset + count), write);
91
+ Atomics.store(state, WRITE_INDEX, (write + count) % payload.byteLength);
92
+ Atomics.add(state, LENGTH_INDEX, count);
93
+ Atomics.notify(state, LENGTH_INDEX);
94
+ offset += count;
95
+ }
96
+ return BigInt(offset);
97
+ }
98
+ /** Cooperative writer used by the browser UI thread, which cannot Atomics.wait. */
99
+ export async function writeSharedPipe(handle, value) {
100
+ if (handle.role !== "writer")
101
+ throw new Error("Cannot write through a shared-pipe reader.");
102
+ const state = pipeState(handle);
103
+ const payload = pipePayload(handle);
104
+ let offset = 0;
105
+ while (offset < value.byteLength) {
106
+ if (Atomics.load(state, READER_REFS_INDEX) === 0)
107
+ return;
108
+ const length = Atomics.load(state, LENGTH_INDEX);
109
+ const available = payload.byteLength - length;
110
+ if (available === 0) {
111
+ await new Promise((resolve) => setTimeout(resolve, 1));
112
+ continue;
113
+ }
114
+ const write = Atomics.load(state, WRITE_INDEX);
115
+ const count = Math.min(value.byteLength - offset, available, payload.byteLength - write);
116
+ payload.set(value.subarray(offset, offset + count), write);
117
+ Atomics.store(state, WRITE_INDEX, (write + count) % payload.byteLength);
118
+ Atomics.add(state, LENGTH_INDEX, count);
119
+ Atomics.notify(state, LENGTH_INDEX);
120
+ offset += count;
121
+ }
122
+ }
123
+ function pipeState(handle) {
124
+ return new Int32Array(handle.control, handle.controlOffset ?? 0, 8);
125
+ }
126
+ function pipePayload(handle) {
127
+ const offset = handle.payloadOffset ?? 0;
128
+ const length = handle.payloadLength ?? handle.payload.byteLength - offset;
129
+ return new Uint8Array(handle.payload, offset, length);
130
+ }
131
+ export function encodeProcessSnapshot(shared, before, after, exitCode) {
132
+ const encoded = new TextEncoder().encode(JSON.stringify(createProcessFilesystemPatch(before, after)));
133
+ if (encoded.byteLength > shared.response.byteLength)
134
+ throw new Error(`Browser child filesystem patch is ${encoded.byteLength} bytes; limit is ${shared.response.byteLength}.`);
135
+ new Uint8Array(shared.response).set(encoded);
136
+ const control = new Int32Array(shared.control);
137
+ Atomics.store(control, 1, exitCode | 0);
138
+ Atomics.store(control, 2, encoded.byteLength);
139
+ Atomics.store(control, 0, 1);
140
+ Atomics.notify(control, 0);
141
+ }
142
+ export function decodeProcessSnapshot(shared) {
143
+ const length = Atomics.load(new Int32Array(shared.control), 2);
144
+ if (length <= 0 || length > shared.response.byteLength)
145
+ return;
146
+ // Browser TextDecoder rejects views backed by SharedArrayBuffer.
147
+ const copy = Uint8Array.from(new Uint8Array(shared.response, 0, length));
148
+ return JSON.parse(new TextDecoder().decode(copy));
149
+ }
150
+ //# sourceMappingURL=process-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-bridge.js","sourceRoot":"","sources":["../src/process-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,4BAA4B,GAE7B,MAAM,uDAAuD,CAAC;AAE/D,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,GAE7B,MAAM,uDAAuD,CAAC;AAE/D,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAAC;AAqCtD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,CAAC,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO;QACL,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5C,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAgC;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAgC;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC/E,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAgC,EAAE,MAAc;IAC7E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7F,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU;YAAE,KAAK,IAAI,CAAC,CAAC;QAC1G,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAgC,EAAE,OAAe;IAC9E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,IAAI,KAAK,GAAG,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,MAAgC,EAAE,KAAiB;IACrF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;QAC9C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAgC,EAAE,KAAiB;IACvF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAAE,OAAO;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;QAC9C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAgC;IACjD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,MAAgC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1E,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAiC,EACjC,MAAiC,EACjC,KAAgC,EAChC,QAAgB;IAEhB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAClE,qCAAqC,OAAO,CAAC,UAAU,oBAAoB,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,CACzG,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU;QAAE,OAAO;IAC/D,iEAAiE;IACjE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAkC,CAAC;AACrF,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
2
+ import type { BrowserProgramManifest } from "@volter/browser-runtime/browser-program-manifest.js";
3
+ import type { BrowserProcessHost } from "@volter/browser-runtime/browser-process-host.js";
4
+ import type { BrowserProcessResult, BrowserProcessRunOptions } from "@volter/browser-runtime/browser-process.js";
5
+ import type { BrowserProgram } from "@volter/browser-runtime/browser-program.js";
6
+ import type { WaliLoopbackAttachment } from "./loopback-protocol.js";
7
+ export interface BrowserWaliProgramOptions {
8
+ artifactUrl?: string;
9
+ userHome?: string;
10
+ relayUrl?: string;
11
+ loopback?: WaliLoopbackAttachment;
12
+ vaultNamespace?: string;
13
+ onStateChange?(): void;
14
+ }
15
+ /** Durable, private state and terminal behavior around one unchanged WALI program. */
16
+ export declare class BrowserWaliProgram implements BrowserProgram {
17
+ private readonly filesystem;
18
+ private readonly processHost;
19
+ readonly manifest: BrowserProgramManifest;
20
+ private readonly options;
21
+ private readonly worker;
22
+ private readonly privateFiles;
23
+ private active;
24
+ constructor(filesystem: BrowserFileSystem, processHost: BrowserProcessHost, manifest: BrowserProgramManifest, options?: BrowserWaliProgramOptions);
25
+ get command(): string;
26
+ get displayName(): string;
27
+ /** True only once the worker owns a live stdin channel. */
28
+ get running(): boolean;
29
+ action(name: string): readonly string[];
30
+ hasPrivateState(vault?: string): boolean;
31
+ acceptsOpenUrl(value: string | URL): boolean;
32
+ setOpenUrlHandler(handler: ((url: string) => void) | undefined): void;
33
+ sendInput(data: string): boolean;
34
+ resize(columns: number, rows: number): void;
35
+ terminate(): void;
36
+ restoreState(): Promise<void>;
37
+ run(argv: readonly string[], runOptions?: BrowserProcessRunOptions): Promise<BrowserProcessResult>;
38
+ private createWorker;
39
+ private expand;
40
+ private actionName;
41
+ private materializePrivateFiles;
42
+ private persistTouchedFiles;
43
+ private synchronizePrivateFiles;
44
+ private synchronize;
45
+ private filePresent;
46
+ private unmount;
47
+ }
48
+ export declare function encodeTerminalInput(mode: BrowserProgramManifest["terminal"]["input"], data: string): string;
49
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACjH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AASrE,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,IAAI,IAAI,CAAC;CACxB;AAUD,sFAAsF;AACtF,qBAAa,kBAAmB,YAAW,cAAc;IAMrD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,MAAM,CAAS;gBAGJ,UAAU,EAAE,iBAAiB,EAC7B,WAAW,EAAE,kBAAkB,EACvC,QAAQ,EAAE,sBAAsB,EACxB,OAAO,GAAE,yBAA8B;IAc1D,IAAI,OAAO,IAAI,MAAM,CAAqC;IAC1D,IAAI,WAAW,IAAI,MAAM,CAAsC;IAC/D,2DAA2D;IAC3D,IAAI,OAAO,IAAI,OAAO,CAAgC;IAEtD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE;IAMvC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAKxC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO;IAO5C,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI;IAMrE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAC3C,SAAS,IAAI,IAAI;IAEX,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,GAAE,wBAA6B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqB5G,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,UAAU;YAKJ,uBAAuB;YAWvB,mBAAmB;YAMnB,uBAAuB;YAOvB,WAAW;IAUzB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,OAAO;CAGhB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU3G"}
@@ -0,0 +1,204 @@
1
+ import { BrowserByteVault } from "@volter/browser-runtime/browser-byte-vault.js";
2
+ import { BrowserWaliWorkerProgram } from "./worker-program.js";
3
+ // Compatibility ABI: existing Grok and Codex sign-ins live in this database.
4
+ // Changing it would strand valid credentials after upgrading the host.
5
+ const VAULT_DATABASE = "supercode-browser-credentials";
6
+ const VAULT_STORE = "credentials";
7
+ const MAXIMUM_PRIVATE_FILE_BYTES = 1024 * 1024;
8
+ /** Durable, private state and terminal behavior around one unchanged WALI program. */
9
+ export class BrowserWaliProgram {
10
+ filesystem;
11
+ processHost;
12
+ manifest;
13
+ options;
14
+ worker;
15
+ privateFiles;
16
+ active = false;
17
+ constructor(filesystem, processHost, manifest, options = {}) {
18
+ this.filesystem = filesystem;
19
+ this.processHost = processHost;
20
+ this.manifest = manifest;
21
+ this.options = options;
22
+ if (manifest.engine !== "wali")
23
+ throw new Error(`${manifest.id} is not a WALI program.`);
24
+ const namespace = options.vaultNamespace ?? "default";
25
+ this.privateFiles = manifest.storage.privateFiles.map((file) => ({
26
+ path: this.expand(file.path),
27
+ vault: createVault(namespace === "default" ? file.vault : `${namespace}-${file.vault}`),
28
+ ...(file.defaultContent !== undefined ? { defaultContent: file.defaultContent } : {}),
29
+ clearOnActions: new Set(file.clearOnActions ?? []),
30
+ available: false,
31
+ }));
32
+ this.worker = this.createWorker();
33
+ }
34
+ get command() { return this.manifest.executable; }
35
+ get displayName() { return this.manifest.displayName; }
36
+ /** True only once the worker owns a live stdin channel. */
37
+ get running() { return this.worker.running; }
38
+ action(name) {
39
+ const argv = this.manifest.actions[name];
40
+ if (!argv)
41
+ throw new Error(`${this.manifest.id} has no ${name} action.`);
42
+ return argv;
43
+ }
44
+ hasPrivateState(vault) {
45
+ return this.privateFiles.some((file, index) => file.available
46
+ && (vault === undefined || this.manifest.storage.privateFiles[index]?.vault === vault));
47
+ }
48
+ acceptsOpenUrl(value) {
49
+ let url;
50
+ try {
51
+ url = value instanceof URL ? value : new URL(value);
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ return this.manifest.openUrls.some((allowed) => url.protocol === allowed.protocol
57
+ && url.hostname === allowed.hostname && url.pathname === allowed.pathname);
58
+ }
59
+ setOpenUrlHandler(handler) {
60
+ this.worker.setOpenUrlHandler(handler ? (url) => {
61
+ if (this.acceptsOpenUrl(url))
62
+ handler(url);
63
+ } : undefined);
64
+ }
65
+ sendInput(data) {
66
+ return this.worker.sendInput(encodeTerminalInput(this.manifest.terminal.input, data));
67
+ }
68
+ resize(columns, rows) { this.worker.resize(columns, rows); }
69
+ terminate() { this.worker.terminate(); }
70
+ async restoreState() {
71
+ for (const file of this.privateFiles) {
72
+ if (this.filePresent(file.path))
73
+ await file.vault.save(this.filesystem.readFileSync(file.path));
74
+ this.unmount(file.path);
75
+ let stored = await file.vault.load();
76
+ if (!stored && file.defaultContent !== undefined) {
77
+ stored = new TextEncoder().encode(file.defaultContent);
78
+ await file.vault.save(stored);
79
+ }
80
+ file.available = Boolean(stored);
81
+ }
82
+ this.options.onStateChange?.();
83
+ }
84
+ async run(argv, runOptions = {}) {
85
+ if (this.active)
86
+ throw new Error(`${this.manifest.displayName} is already running.`);
87
+ const effectiveArgv = argv.length === 1 && argv[0] === this.manifest.executable
88
+ ? this.action("start") : argv;
89
+ const action = this.actionName(effectiveArgv);
90
+ this.active = true;
91
+ let completedAction;
92
+ try {
93
+ await this.materializePrivateFiles();
94
+ this.options.onStateChange?.();
95
+ const result = await this.worker.run(effectiveArgv, runOptions);
96
+ if (result.exitCode === 0)
97
+ completedAction = action;
98
+ return result;
99
+ }
100
+ finally {
101
+ await this.synchronizePrivateFiles(completedAction);
102
+ this.active = false;
103
+ this.privateFiles.forEach((file) => this.unmount(file.path));
104
+ this.options.onStateChange?.();
105
+ }
106
+ }
107
+ createWorker() {
108
+ return new BrowserWaliWorkerProgram(this.filesystem, {
109
+ url: this.options.artifactUrl ?? this.manifest.artifact.url,
110
+ integrity: this.manifest.artifact.integrity,
111
+ cwd: "/workspace",
112
+ env: Object.fromEntries(Object.entries(this.manifest.environment)
113
+ .map(([name, value]) => [name, this.expand(value)])),
114
+ threadPoolSize: this.manifest.requirements.workers ?? 18,
115
+ network: {
116
+ ...(this.options.relayUrl ? { relayUrl: this.options.relayUrl } : {}),
117
+ allowedHosts: this.manifest.network.allowedHosts,
118
+ },
119
+ ...(this.options.loopback ? { loopback: this.options.loopback } : {}),
120
+ spawn: this.processHost,
121
+ onFilesystemCommit: (_filesystem, patch) => this.persistTouchedFiles(patch),
122
+ });
123
+ }
124
+ expand(value) {
125
+ return value.replaceAll("${HOME}", this.options.userHome ?? "/home/browser");
126
+ }
127
+ actionName(argv) {
128
+ return Object.entries(this.manifest.actions)
129
+ .find(([, expected]) => equalArgv(argv, expected))?.[0];
130
+ }
131
+ async materializePrivateFiles() {
132
+ for (const file of this.privateFiles) {
133
+ if (this.filePresent(file.path))
134
+ continue;
135
+ const stored = await file.vault.load();
136
+ if (!stored) {
137
+ file.available = false;
138
+ continue;
139
+ }
140
+ this.filesystem.mkdirSync(file.path.slice(0, file.path.lastIndexOf("/")), { recursive: true });
141
+ this.filesystem.writeFileSync(file.path, stored);
142
+ file.available = true;
143
+ }
144
+ }
145
+ async persistTouchedFiles(patch) {
146
+ await Promise.all(this.privateFiles.filter((file) => !patch
147
+ || patch.files.some((entry) => entry.path === file.path)
148
+ || patch.removed.includes(file.path)).map((file) => this.synchronize(file)));
149
+ }
150
+ async synchronizePrivateFiles(completedAction) {
151
+ await Promise.all(this.privateFiles.map((file) => this.synchronize(file, completedAction !== undefined && file.clearOnActions.has(completedAction))));
152
+ }
153
+ async synchronize(file, clearIfMissing = false) {
154
+ if (this.filePresent(file.path)) {
155
+ await file.vault.save(this.filesystem.readFileSync(file.path));
156
+ file.available = true;
157
+ }
158
+ else if (clearIfMissing) {
159
+ await file.vault.clear();
160
+ file.available = false;
161
+ }
162
+ }
163
+ filePresent(path) {
164
+ try {
165
+ return this.filesystem.existsSync(path) && this.filesystem.statSync(path).isFile()
166
+ && this.filesystem.readFileSync(path).byteLength > 0;
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }
172
+ unmount(path) {
173
+ if (this.filePresent(path))
174
+ this.filesystem.unlinkSync(path);
175
+ }
176
+ }
177
+ export function encodeTerminalInput(mode, data) {
178
+ if (mode === "canonical-lines")
179
+ return data.replaceAll("\r", "\n");
180
+ if (mode === "kitty-key-events") {
181
+ if (/^[^\u0000-\u001f\u007f]+$/u.test(data)) {
182
+ return [...data].map((character) => `\u001b[${character.codePointAt(0)};1:2u`).join("");
183
+ }
184
+ if (data === "\r")
185
+ return "\u001b[13;1:2u";
186
+ if (data === "\t")
187
+ return "\u001b[9;1:2u";
188
+ }
189
+ return data;
190
+ }
191
+ function equalArgv(left, right) {
192
+ return left.length === right.length && left.every((value, index) => value === right[index]);
193
+ }
194
+ function createVault(key) {
195
+ return new BrowserByteVault({
196
+ databaseName: VAULT_DATABASE,
197
+ storeName: VAULT_STORE,
198
+ primaryKey: key,
199
+ backupKey: `${key}-backup`,
200
+ minimumBytes: 1,
201
+ maximumBytes: MAXIMUM_PRIVATE_FILE_BYTES,
202
+ });
203
+ }
204
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { WaliModuleSource, WaliRunOptions, WaliRunResult } from "./types.js";
2
+ export declare class UnsupportedWaliImportError extends Error {
3
+ readonly imports: readonly string[];
4
+ constructor(imports: readonly string[]);
5
+ }
6
+ export declare class BrowserWaliRuntime {
7
+ run(source: WaliModuleSource, options?: WaliRunOptions): Promise<WaliRunResult>;
8
+ }
9
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AAQD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CAib1F"}