@volter/browser-python 0.1.4 → 0.1.6

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 (49) hide show
  1. package/README.md +2 -1
  2. package/dist/command.d.ts +13 -1
  3. package/dist/command.d.ts.map +1 -1
  4. package/dist/command.js +79 -11
  5. package/dist/command.js.map +1 -1
  6. package/dist/filesystem.d.ts +9 -0
  7. package/dist/filesystem.d.ts.map +1 -1
  8. package/dist/filesystem.js +29 -0
  9. package/dist/filesystem.js.map +1 -1
  10. package/dist/host.d.ts +31 -0
  11. package/dist/host.d.ts.map +1 -0
  12. package/dist/host.js +76 -0
  13. package/dist/host.js.map +1 -0
  14. package/dist/pack-filesystem.d.ts +22 -0
  15. package/dist/pack-filesystem.d.ts.map +1 -0
  16. package/dist/pack-filesystem.js +252 -0
  17. package/dist/pack-filesystem.js.map +1 -0
  18. package/dist/package-manager.d.ts +14 -0
  19. package/dist/package-manager.d.ts.map +1 -1
  20. package/dist/package-manager.js +58 -3
  21. package/dist/package-manager.js.map +1 -1
  22. package/dist/process-host.d.ts +13 -2
  23. package/dist/process-host.d.ts.map +1 -1
  24. package/dist/process-host.js +45 -8
  25. package/dist/process-host.js.map +1 -1
  26. package/dist/protocol.d.ts +28 -4
  27. package/dist/protocol.d.ts.map +1 -1
  28. package/dist/pyodide-artifacts.d.ts +22 -0
  29. package/dist/pyodide-artifacts.d.ts.map +1 -0
  30. package/dist/pyodide-artifacts.js +40 -0
  31. package/dist/pyodide-artifacts.js.map +1 -0
  32. package/dist/pyodide-runtime.d.ts +10 -2
  33. package/dist/pyodide-runtime.d.ts.map +1 -1
  34. package/dist/pyodide-runtime.js +23 -13
  35. package/dist/pyodide-runtime.js.map +1 -1
  36. package/dist/server-host.d.ts +2 -2
  37. package/dist/server-host.d.ts.map +1 -1
  38. package/dist/server-host.js +4 -4
  39. package/dist/server-host.js.map +1 -1
  40. package/dist/subprocess-bridge.d.ts +6 -2
  41. package/dist/subprocess-bridge.d.ts.map +1 -1
  42. package/dist/subprocess-bridge.js +9 -8
  43. package/dist/subprocess-bridge.js.map +1 -1
  44. package/dist/worker.js +147 -20
  45. package/dist/worker.js.map +1 -1
  46. package/dist/wsgi-bridge.d.ts.map +1 -1
  47. package/dist/wsgi-bridge.js +3 -0
  48. package/dist/wsgi-bridge.js.map +1 -1
  49. package/package.json +21 -7
package/README.md CHANGED
@@ -5,7 +5,8 @@ The Pyodide execution engine for Browser Substrate. It registers `python`,
5
5
  the browser workspace coherent across its worker boundary.
6
6
 
7
7
  Supported application paths include scripts, `python -c`, hash-resolved
8
- Micropip installs, static HTTP servers, Flask/WSGI, ASGI HTTP streaming and
8
+ Micropip installs (an in-tab install: a stopgap W32 ends, after which a
9
+ project's Python dependencies arrive as packs prepared on the machine), static HTTP servers, Flask/WSGI, ASGI HTTP streaming and
9
10
  WebSockets, lifecycle events, SQLite file coherence, and routed subprocesses.
10
11
  Virtual servers use the same port and sandbox bridge as Node and WALI; they do
11
12
  not open a host-machine listener.
package/dist/command.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
1
+ import { type BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
2
2
  import type { BrowserProcessResult, BrowserProcessRunOptions } from "@volter/browser-runtime/browser-process.js";
3
3
  import type { PythonServerAttachment } from "./protocol.js";
4
4
  import type { BrowserWorkerLike } from "@volter/browser-runtime/cross-origin-worker.js";
@@ -8,6 +8,8 @@ export interface BrowserPythonCommandOptions {
8
8
  server: PythonServerAttachment;
9
9
  onFilesystemCommit?(filesystem: BrowserFileSystem): void | Promise<void>;
10
10
  createWorker?(): Promise<BrowserWorkerLike>;
11
+ /** An https index, or on a host an absolute directory, the pinned Pyodide loads from. */
12
+ runtimeIndexUrl?: string;
11
13
  /** Enables SAB-backed file coherence and subprocess calls for same-origin workers. */
12
14
  sharedMemoryChannels?: boolean;
13
15
  network?: {
@@ -21,11 +23,21 @@ export declare class BrowserPythonCommand {
21
23
  private readonly filesystem;
22
24
  private readonly options;
23
25
  private filesystemCommitTail;
26
+ /**
27
+ * A worker already booting Pyodide for the next run, which finds an
28
+ * interpreter loaded and unused instead of loading one: every `python`
29
+ * started a worker and booted Pyodide from nothing (ADR-0042).
30
+ */
31
+ private standby;
32
+ private standbyTimer;
24
33
  private readonly nativeFetch;
25
34
  private activeFetches;
26
35
  private networkBytes;
27
36
  constructor(filesystem: BrowserFileSystem, options: BrowserPythonCommandOptions);
28
37
  run: (argv: readonly string[], options?: BrowserProcessRunOptions) => Promise<BrowserProcessResult>;
38
+ private createWorker;
39
+ /** The standby, or a new worker; either way the next run's standby starts booting now. */
40
+ private takeWorker;
29
41
  private applyResult;
30
42
  private persistFilesystem;
31
43
  private handleNetwork;
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAA6B,MAAM,+CAA+C,CAAC;AAKlH,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAoB,sBAAsB,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAWxF,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,kBAAkB,CAAC,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,YAAY,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,oFAAoF;AACpF,qBAAa,oBAAoB;IAO7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,oBAAoB,CAAoC;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;gBAGN,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,2BAA2B;IAGvD,GAAG,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,wBAA6B,KAAG,OAAO,CAAC,oBAAoB,CAAC,CAkG1G;YAEY,WAAW;YAaX,iBAAiB;YAMjB,aAAa;IAsD3B,OAAO,CAAC,cAAc;CAMvB"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AACA,OAAO,EAA8D,KAAK,iBAAiB,EAAkC,MAAM,+CAA+C,CAAC;AAMnL,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAoB,sBAAsB,EAAuB,MAAM,eAAe,CAAC;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAYxF,MAAM,WAAW,2BAA2B;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,kBAAkB,CAAC,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,YAAY,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5C,yFAAyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AASD,oFAAoF;AACpF,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,oBAAoB,CAAoC;IAChE;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAK;gBAGN,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,2BAA2B;IAGvD,GAAG,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,wBAA6B,KAAG,OAAO,CAAC,oBAAoB,CAAC,CAmH1G;IAEF,OAAO,CAAC,YAAY;IAMpB,0FAA0F;IAC1F,OAAO,CAAC,UAAU;YAwBJ,WAAW;YASX,iBAAiB;YAMjB,aAAa;IAwD3B,OAAO,CAAC,cAAc;CAMvB"}
package/dist/command.js CHANGED
@@ -1,12 +1,28 @@
1
- import { applyProcessFilesystemPatch, createProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
1
+ import { requireProcessFilesystemPolicySupport } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
2
+ import { localBrowserFileSystemStore, readBrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
3
+ import { applyProcessFilesystemPatch, patchedSnapshot, } from "@volter/browser-runtime/browser-process-filesystem.js";
2
4
  import { assertManagedPythonRequest } from "./pyodide-runtime.js";
3
5
  import { createBrowserFileLockChannel, sharedBrowserFileLockCoordinator, } from "@volter/browser-runtime/browser-file-locks.js";
4
6
  import { createBrowserFileCoherenceChannel, sharedBrowserFileCoherenceCoordinator, } from "@volter/browser-runtime/browser-file-coherence.js";
7
+ import { pageWorker } from "@volter/browser-runtime/page-workers.js";
8
+ /**
9
+ * How long a worker booted for the next `python` waits for it. A standby is
10
+ * started only once a container has run Python, so a container that never
11
+ * does pays nothing; one that stops running it gives the memory back.
12
+ */
13
+ const STANDBY_IDLE_MS = 30_000;
5
14
  /** Runs CPython/Pyodide in a worker against the shared project and process host. */
6
15
  export class BrowserPythonCommand {
7
16
  filesystem;
8
17
  options;
9
18
  filesystemCommitTail = Promise.resolve();
19
+ /**
20
+ * A worker already booting Pyodide for the next run, which finds an
21
+ * interpreter loaded and unused instead of loading one: every `python`
22
+ * started a worker and booted Pyodide from nothing (ADR-0042).
23
+ */
24
+ standby;
25
+ standbyTimer;
10
26
  nativeFetch = globalThis.fetch.bind(globalThis);
11
27
  activeFetches = 0;
12
28
  networkBytes = 0;
@@ -15,16 +31,14 @@ export class BrowserPythonCommand {
15
31
  this.options = options;
16
32
  }
17
33
  run = async (argv, options = {}) => {
34
+ requireProcessFilesystemPolicySupport(options.filesystemPolicy, undefined);
18
35
  if (options.signal?.aborted)
19
36
  return Promise.resolve({ stdout: "", stderr: "", exitCode: 130 });
20
37
  const stdin = await collectStdin(options);
21
38
  if (options.signal?.aborted)
22
39
  return { stdout: "", stderr: "", exitCode: 130 };
23
- const worker = this.options.createWorker
24
- ? await this.options.createWorker()
25
- : new Worker(new URL("./worker.js", import.meta.url), { type: "module", name: "browser-python" });
40
+ const worker = await this.takeWorker();
26
41
  const channel = new MessageChannel();
27
- const releaseServer = this.options.server.attach(channel.port1);
28
42
  const sharedMemoryChannels = this.options.sharedMemoryChannels !== false;
29
43
  const lockOwner = sharedMemoryChannels ? `python:${crypto.randomUUID()}` : undefined;
30
44
  const lockChannel = sharedMemoryChannels ? createBrowserFileLockChannel() : undefined;
@@ -33,8 +47,24 @@ export class BrowserPythonCommand {
33
47
  const coherenceChannel = sharedMemoryChannels ? createBrowserFileCoherenceChannel() : undefined;
34
48
  const releaseFileCoherence = coherenceChannel
35
49
  ? sharedBrowserFileCoherenceCoordinator.attach(coherenceChannel.server, this.filesystem, () => this.persistFilesystem()) : undefined;
36
- const before = this.filesystem.toSnapshot();
50
+ // A page over a worker's store sends the worker to the store, not the
51
+ // tree: the worker reads what the program opens, and the page keeps a
52
+ // metadata snapshot to tell what changed.
53
+ const store = localBrowserFileSystemStore(this.filesystem);
54
+ // What the page has written must be in the store before the worker
55
+ // opens it, or the worker's first look at the tree is behind the
56
+ // snapshot the page keeps to tell what the program changed.
57
+ if (store)
58
+ await this.filesystem.flush?.();
59
+ const before = await readBrowserFileSystemSnapshot(this.filesystem, "/", store ? { metadataRoots: ["/workspace"] } : {});
37
60
  let synchronized = before;
61
+ // The tree as the worker holds it. The worker's reports are against it,
62
+ // and so are the changes a child of this program leaves behind: what
63
+ // crosses either way is the difference, never the tree.
64
+ const releaseServer = this.options.server.attach(channel.port1, {
65
+ base: () => synchronized,
66
+ advance: (patch) => { synchronized = patchedSnapshot(synchronized, patch); },
67
+ });
38
68
  let commitQueue = Promise.resolve();
39
69
  let stdout = "";
40
70
  let stderr = "";
@@ -75,11 +105,13 @@ export class BrowserPythonCommand {
75
105
  void this.handleNetwork(worker, message);
76
106
  return;
77
107
  }
78
- if (!("filesystem" in message))
108
+ if (!("patch" in message))
79
109
  return;
110
+ // The worker reports what changed since its last report; the page
111
+ // keeps the snapshot that report was against.
80
112
  const previous = synchronized;
81
- synchronized = message.filesystem;
82
- commitQueue = commitQueue.then(() => this.applyResult(previous, message.filesystem));
113
+ synchronized = patchedSnapshot(previous, message.patch);
114
+ commitQueue = commitQueue.then(() => this.applyResult(previous, message.patch));
83
115
  if (message.type === "commit") {
84
116
  void commitQueue.then(() => worker.postMessage({ type: "commit-ack", commitId: message.commitId }), (cause) => worker.postMessage({
85
117
  type: "commit-ack",
@@ -106,7 +138,9 @@ export class BrowserPythonCommand {
106
138
  cwd: options.cwd ?? this.options.cwd ?? "/workspace",
107
139
  env: { ...this.options.env, ...options.env },
108
140
  filesystem: before,
141
+ ...(store ? { store: { projectId: store } } : {}),
109
142
  stdinBase64: encodeBase64(stdin),
143
+ ...(this.options.runtimeIndexUrl ? { runtimeIndexUrl: this.options.runtimeIndexUrl } : {}),
110
144
  serverPort: channel.port2,
111
145
  ...(lockChannel && lockOwner ? { fileLocks: { channel: lockChannel.client, owner: lockOwner } } : {}),
112
146
  ...(coherenceChannel ? { fileCoherence: coherenceChannel.client } : {}),
@@ -118,9 +152,41 @@ export class BrowserPythonCommand {
118
152
  ]);
119
153
  });
120
154
  };
121
- async applyResult(before, after) {
155
+ createWorker() {
156
+ return this.options.createWorker
157
+ ? this.options.createWorker()
158
+ : Promise.resolve(pageWorker(new Worker(new URL("./worker.js", import.meta.url), { type: "module", name: "browser-python" })));
159
+ }
160
+ /** The standby, or a new worker; either way the next run's standby starts booting now. */
161
+ takeWorker() {
162
+ const ready = this.standby;
163
+ this.standby = undefined;
164
+ if (this.standbyTimer !== undefined)
165
+ clearTimeout(this.standbyTimer);
166
+ const worker = ready ?? this.createWorker();
167
+ const next = this.createWorker().then((standby) => {
168
+ // Booting fetches the runtime through the page, as a run's worker does.
169
+ standby.onmessage = (event) => {
170
+ const message = event.data;
171
+ if (message.type === "network-request")
172
+ void this.handleNetwork(standby, message);
173
+ };
174
+ standby.postMessage({ type: "prepare", ...(this.options.runtimeIndexUrl ? { runtimeIndexUrl: this.options.runtimeIndexUrl } : {}) });
175
+ return standby;
176
+ });
177
+ void next.catch(() => undefined);
178
+ this.standby = next;
179
+ this.standbyTimer = setTimeout(() => {
180
+ if (this.standby !== next)
181
+ return;
182
+ this.standby = undefined;
183
+ void next.then((standby) => standby.terminate(), () => undefined);
184
+ }, STANDBY_IDLE_MS);
185
+ return worker;
186
+ }
187
+ async applyResult(before, patch) {
122
188
  const commit = this.filesystemCommitTail.then(async () => {
123
- applyProcessFilesystemPatch(this.filesystem, createProcessFilesystemPatch(before, after), before);
189
+ applyProcessFilesystemPatch(this.filesystem, patch, before);
124
190
  await this.options.onFilesystemCommit?.(this.filesystem);
125
191
  });
126
192
  this.filesystemCommitTail = commit.catch(() => undefined);
@@ -181,6 +247,8 @@ export class BrowserPythonCommand {
181
247
  }, [body]);
182
248
  }
183
249
  catch (cause) {
250
+ // A refused or failed request is visible on the page, not only as a Python exception.
251
+ console.warn(`Browser Python request to ${message.url} failed: ${cause instanceof Error ? cause.message : String(cause)}`);
184
252
  worker.postMessage({
185
253
  type: "network-error",
186
254
  requestId: message.requestId,
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,14 @@
1
1
  import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
2
+ import { type BrowserProcessFileSystem, type BrowserProcessFilesystemPatch } from "@volter/browser-runtime/browser-process-filesystem.js";
2
3
  import { type PyodideFileSystem } from "./pyodide-runtime.js";
4
+ /**
5
+ * Pyodide's filesystem behind the reconciliation every browser runtime
6
+ * adapter shares, so a child's changes land here exactly as the page lands
7
+ * what the program wrote: same ordering, same conflict rule.
8
+ */
9
+ export declare function pythonProcessFileSystem(fs: PyodideFileSystem): BrowserProcessFileSystem;
10
+ /** What a child changed, applied to this realm's tree against the base the page measured from. */
11
+ export declare function applyPythonProcessPatch(fs: PyodideFileSystem, patch: BrowserProcessFilesystemPatch, base: BrowserFileSystemSnapshot): void;
3
12
  export declare function restorePythonSnapshot(fs: PyodideFileSystem, value: BrowserFileSystemSnapshot): void;
4
13
  export declare function snapshotPythonFilesystem(fs: PyodideFileSystem, original: BrowserFileSystemSnapshot): BrowserFileSystemSnapshot;
5
14
  export declare function absolutePythonPath(path: string, cwd: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAE/F,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAkBnG;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,yBAAyB,CAM9H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAkD;AAEtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMtD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAGtD"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EACnC,MAAM,uDAAuD,CAAC;AAE/D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIhF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,GAAG,wBAAwB,CAgBvF;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,6BAA6B,EACpC,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAEN;AAID,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,GAAG,IAAI,CAkBnG;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,yBAAyB,CAM9H;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAkD;AAEtG,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMtD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAGtD"}
@@ -1,4 +1,33 @@
1
+ import { applyProcessFilesystemPatch, } from "@volter/browser-runtime/browser-process-filesystem.js";
1
2
  import { PYTHON_WORKSPACE } from "./pyodide-runtime.js";
3
+ const S_IFDIR = 0o040000;
4
+ /**
5
+ * Pyodide's filesystem behind the reconciliation every browser runtime
6
+ * adapter shares, so a child's changes land here exactly as the page lands
7
+ * what the program wrote: same ordering, same conflict rule.
8
+ */
9
+ export function pythonProcessFileSystem(fs) {
10
+ return {
11
+ existsSync: (path) => fs.analyzePath(path).exists,
12
+ statSync: (path) => {
13
+ const stat = fs.stat(path);
14
+ const directory = (stat.mode & 0o170000) === S_IFDIR;
15
+ return { isDirectory: () => directory, ...(typeof stat.size === "number" ? { size: stat.size } : {}), ...pythonMetadata(stat) };
16
+ },
17
+ readFile: (path) => Promise.resolve(fs.readFile(path)),
18
+ writeFileSync: (path, data) => fs.writeFile(path, typeof data === "string" ? new TextEncoder().encode(data) : data),
19
+ mkdirSync: (path) => fs.mkdirTree(path),
20
+ unlinkSync: (path) => fs.unlink(path),
21
+ rmdirSync: (path) => fs.rmdir(path),
22
+ chmodSync: (path, mode) => fs.chmod(path, mode),
23
+ utimesSync: (path, atime, mtime) => fs.utime(path, msOf(atime), msOf(mtime)),
24
+ };
25
+ }
26
+ /** What a child changed, applied to this realm's tree against the base the page measured from. */
27
+ export function applyPythonProcessPatch(fs, patch, base) {
28
+ applyProcessFilesystemPatch(pythonProcessFileSystem(fs), patch, base);
29
+ }
30
+ function msOf(time) { return time instanceof Date ? time.getTime() : time; }
2
31
  export function restorePythonSnapshot(fs, value) {
3
32
  clearTree(fs, PYTHON_WORKSPACE);
4
33
  fs.mkdirTree(PYTHON_WORKSPACE);
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
package/dist/host.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import type { BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
2
+ import type { BrowserServerBridge } from "@volter/browser-runtime/browser-http.js";
3
+ import type { BrowserRuntime } from "@volter/browser-runtime/browser-runtime.js";
4
+ import { BrowserPythonCommand } from "./command.js";
5
+ import { BrowserPythonServerHost } from "./server-host.js";
6
+ export interface HostPythonOptions {
7
+ /** Where the pinned Pyodide is kept; defaults to `~/.cache/browser-substrate/pyodide`. */
8
+ cacheDirectory?: string;
9
+ cwd?: string;
10
+ env?: Readonly<Record<string, string>>;
11
+ }
12
+ export interface HostPython {
13
+ command: BrowserPythonCommand;
14
+ server: BrowserPythonServerHost;
15
+ /** The directory the lane loads Pyodide from. */
16
+ indexUrl: string;
17
+ }
18
+ /**
19
+ * Registers `python`, `pip`, and `uvicorn` on a host runtime, backed by the
20
+ * same worker script the tab runs. The worker surface must already be in the
21
+ * process; without it the host cannot start a lane worker and says which
22
+ * import supplies one.
23
+ */
24
+ export declare function installHostPython(runtime: BrowserRuntime, filesystem: BrowserFileSystem, ports: BrowserServerBridge, options?: HostPythonOptions): Promise<HostPython>;
25
+ /**
26
+ * The pinned Pyodide as a directory: `<cache>/<version>/`, each file fetched
27
+ * from the published index once, checked against its pin, and written whole.
28
+ * A file already present is checked again rather than trusted.
29
+ */
30
+ export declare function materializePyodide(cacheDirectory: string): Promise<string>;
31
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC,CAwBrB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhF"}
package/dist/host.js ADDED
@@ -0,0 +1,76 @@
1
+ // The Python lane on a Node host. The tab's own worker script and command run
2
+ // unchanged; what a host adds is the worker surface (`--import
3
+ // @volter/browser-host-node/host-loader.js`) and the pinned Pyodide on disk,
4
+ // since Pyodide's Node loader reads its index from a filesystem. Every file is
5
+ // checked against its pin as it is written, and a directory that does not
6
+ // verify is not used.
7
+ import { randomUUID } from "node:crypto";
8
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { join } from "node:path";
11
+ import { BrowserPythonCommand } from "./command.js";
12
+ import { PYODIDE_ARTIFACTS, PYODIDE_INDEX, PYODIDE_VERSION, pyodideDigest } from "./pyodide-artifacts.js";
13
+ import { BrowserPythonServerHost } from "./server-host.js";
14
+ import { pageWorker } from "@volter/browser-runtime/page-workers.js";
15
+ const COMMANDS = ["python", "python3", "pip", "pip3", "uvicorn", "gunicorn"];
16
+ const PACKAGE_HOSTS = ["pypi.org", "files.pythonhosted.org"];
17
+ /**
18
+ * Registers `python`, `pip`, and `uvicorn` on a host runtime, backed by the
19
+ * same worker script the tab runs. The worker surface must already be in the
20
+ * process; without it the host cannot start a lane worker and says which
21
+ * import supplies one.
22
+ */
23
+ export async function installHostPython(runtime, filesystem, ports, options = {}) {
24
+ if (typeof globalThis.Worker === "undefined") {
25
+ throw new Error("The host has no worker surface for the Python lane; run node with --import @volter/browser-host-node/host-loader.js.");
26
+ }
27
+ const directory = await materializePyodide(options.cacheDirectory ?? join(homedir(), ".cache", "browser-substrate", "pyodide"));
28
+ const indexUrl = `${directory}/`;
29
+ const server = new BrowserPythonServerHost(filesystem, ports, runtime.processHost, runtime.webSockets);
30
+ const workerUrl = new URL("./worker.js", import.meta.url);
31
+ const command = new BrowserPythonCommand(filesystem, {
32
+ cwd: options.cwd ?? "/workspace",
33
+ env: options.env ?? { HOME: "/home/user", PATH: "/usr/local/bin:/usr/bin:/bin", TERM: "xterm-256color" },
34
+ server,
35
+ createWorker: () => Promise.resolve(pageWorker(new Worker(workerUrl, { type: "module", name: "browser-python" }))),
36
+ runtimeIndexUrl: indexUrl,
37
+ sharedMemoryChannels: false,
38
+ network: {
39
+ authorize: (url) => runtime.policy.assertEgress("python", url, "https"),
40
+ maxConnections: runtime.policy.limits.maxEgressConnections,
41
+ maxBytes: runtime.policy.limits.maxEgressBytes,
42
+ },
43
+ });
44
+ for (const name of COMMANDS)
45
+ runtime.registerProgram(name, command.run);
46
+ for (const hostname of PACKAGE_HOSTS)
47
+ runtime.policy.grantEgress({ program: "python", hostname, protocol: "https" });
48
+ return { command, server, indexUrl };
49
+ }
50
+ /**
51
+ * The pinned Pyodide as a directory: `<cache>/<version>/`, each file fetched
52
+ * from the published index once, checked against its pin, and written whole.
53
+ * A file already present is checked again rather than trusted.
54
+ */
55
+ export async function materializePyodide(cacheDirectory) {
56
+ const directory = join(cacheDirectory, PYODIDE_VERSION);
57
+ mkdirSync(directory, { recursive: true });
58
+ for (const artifact of PYODIDE_ARTIFACTS) {
59
+ const path = join(directory, artifact.file);
60
+ if (existsSync(path) && await pyodideDigest(new Uint8Array(readFileSync(path))) === artifact.integrity)
61
+ continue;
62
+ const response = await fetch(`${PYODIDE_INDEX}${artifact.file}`);
63
+ if (!response.ok)
64
+ throw new Error(`Pyodide ${PYODIDE_VERSION} ${artifact.file} answered ${response.status} from ${PYODIDE_INDEX}.`);
65
+ const bytes = new Uint8Array(await response.arrayBuffer());
66
+ const digest = await pyodideDigest(bytes);
67
+ if (digest !== artifact.integrity) {
68
+ throw new Error(`Pyodide ${PYODIDE_VERSION} ${artifact.file} is ${digest}, not the pinned ${artifact.integrity}; the host refuses it.`);
69
+ }
70
+ const staging = `${path}.${randomUUID()}.part`;
71
+ writeFileSync(staging, bytes);
72
+ renameSync(staging, path);
73
+ }
74
+ return directory;
75
+ }
76
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+DAA+D;AAC/D,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAC1E,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAgBrE,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AACtF,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,wBAAwB,CAAU,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,UAA6B,EAC7B,KAA0B,EAC1B,UAA6B,EAAE;IAE/B,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sHAAsH,CAAC,CAAC;IAC1I,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;IAChI,MAAM,QAAQ,GAAG,GAAG,SAAS,GAAG,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACvG,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,UAAU,EAAE;QACnD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,YAAY;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACxG,MAAM;QACN,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAiC,CAAC;QAClJ,eAAe,EAAE,QAAQ;QACzB,oBAAoB,EAAE,KAAK;QAC3B,OAAO,EAAE;YACP,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC;YACvE,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB;YAC1D,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc;SAC/C;KACF,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,QAAQ;QAAE,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACxE,KAAK,MAAM,QAAQ,IAAI,aAAa;QAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACrH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,cAAsB;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACxD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,SAAS;YAAE,SAAS;QACjH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,IAAI,QAAQ,CAAC,IAAI,aAAa,QAAQ,CAAC,MAAM,SAAS,aAAa,GAAG,CAAC,CAAC;QACpI,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,QAAQ,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,IAAI,QAAQ,CAAC,IAAI,OAAO,MAAM,oBAAoB,QAAQ,CAAC,SAAS,wBAAwB,CAAC,CAAC;QAC1I,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,OAAO,CAAC;QAC/C,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
2
+ import type { PackStore } from "@volter/browser-runtime/browser-pack-store.js";
3
+ import { type PyodideFileSystem } from "./pyodide-runtime.js";
4
+ /** What the program changed under the workspace: written files, and paths removed. */
5
+ export interface PackWorkspaceChanges {
6
+ dirty: Set<string>;
7
+ removed: Set<string>;
8
+ }
9
+ /**
10
+ * Mounts the store's workspace at Pyodide's workspace path. Returns the
11
+ * record of changes the snapshot reads, or undefined when this Pyodide
12
+ * exposes no filesystem to mount over, in which case the caller restores
13
+ * a snapshot the old way.
14
+ */
15
+ export declare function mountPackWorkspace(filesystem: PyodideFileSystem, store: PackStore): PackWorkspaceChanges | undefined;
16
+ /**
17
+ * The workspace as the page reconciles it: metadata for every entry, and
18
+ * bytes only for what the program wrote. Entries outside the workspace are
19
+ * the page's own, carried through from the snapshot it sent.
20
+ */
21
+ export declare function snapshotPackWorkspace(filesystem: PyodideFileSystem, changes: PackWorkspaceChanges, original: BrowserFileSystemSnapshot): BrowserFileSystemSnapshot;
22
+ //# sourceMappingURL=pack-filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-filesystem.d.ts","sourceRoot":"","sources":["../src/pack-filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAE/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAyDhF,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAqLpH;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,yBAAyB,CAmBlK"}