@nimbus-sh/worker 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +5 -0
- package/README.md +10 -0
- package/dist/_shared/session-router.d.ts +7 -0
- package/dist/_shared/session-router.d.ts.map +1 -1
- package/dist/_shared/session-router.js +7 -0
- package/dist/bindings/body.d.ts +6 -0
- package/dist/bindings/body.d.ts.map +1 -0
- package/dist/bindings/body.js +37 -0
- package/dist/bindings/kv.d.ts +0 -2
- package/dist/bindings/kv.d.ts.map +1 -1
- package/dist/bindings/kv.js +3 -42
- package/dist/bindings/r2.d.ts +0 -2
- package/dist/bindings/r2.d.ts.map +1 -1
- package/dist/bindings/r2.js +4 -44
- package/dist/esbuild-cli-artifact.generated.d.ts +18 -0
- package/dist/esbuild-cli-artifact.generated.d.ts.map +1 -0
- package/dist/esbuild-cli-artifact.generated.js +17 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts +24 -24
- package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -1
- package/dist/esbuild-wasm-bundle.generated.js +24 -24
- package/dist/facets/cirrus-real.d.ts.map +1 -1
- package/dist/facets/cirrus-real.js +11 -6
- package/dist/facets/compose.d.ts +11 -7
- package/dist/facets/compose.d.ts.map +1 -1
- package/dist/facets/compose.js +8 -31
- package/dist/facets/data-plan.d.ts +79 -0
- package/dist/facets/data-plan.d.ts.map +1 -0
- package/dist/facets/data-plan.js +477 -0
- package/dist/facets/esbuild-bundle-pool.d.ts +1 -1
- package/dist/facets/esbuild-bundle-pool.js +3 -3
- package/dist/facets/esbuild-transform.d.ts +38 -8
- package/dist/facets/esbuild-transform.d.ts.map +1 -1
- package/dist/facets/esbuild-transform.js +219 -19
- package/dist/facets/exec-telemetry.d.ts +7 -3
- package/dist/facets/exec-telemetry.d.ts.map +1 -1
- package/dist/facets/manager.d.ts +198 -69
- package/dist/facets/manager.d.ts.map +1 -1
- package/dist/facets/manager.js +1276 -652
- package/dist/facets/opencode-staging.d.ts +0 -2
- package/dist/facets/opencode-staging.d.ts.map +1 -1
- package/dist/facets/opencode-staging.js +5 -11
- package/dist/facets/process.d.ts +4 -0
- package/dist/facets/process.d.ts.map +1 -1
- package/dist/facets/process.js +3 -0
- package/dist/facets/read-profile.d.ts +149 -0
- package/dist/facets/read-profile.d.ts.map +1 -0
- package/dist/facets/read-profile.js +483 -0
- package/dist/facets/real-vite-hmr.d.ts +2 -0
- package/dist/facets/real-vite-hmr.d.ts.map +1 -1
- package/dist/facets/real-vite-hmr.js +3 -2
- package/dist/facets/resident-identity.d.ts +0 -1
- package/dist/facets/resident-identity.d.ts.map +1 -1
- package/dist/facets/resident-identity.js +0 -3
- package/dist/facets/wasm-swap-registry.d.ts +34 -25
- package/dist/facets/wasm-swap-registry.d.ts.map +1 -1
- package/dist/facets/wasm-swap-registry.js +62 -56
- package/dist/facets/ws-terminal.d.ts +4 -4
- package/dist/facets/ws-terminal.d.ts.map +1 -1
- package/dist/facets/ws-terminal.js +4 -5
- package/dist/git/commands.d.ts +33 -10
- package/dist/git/commands.d.ts.map +1 -1
- package/dist/git/commands.js +1891 -197
- package/dist/git/network-facet.d.ts +12 -2
- package/dist/git/network-facet.d.ts.map +1 -1
- package/dist/git/network-facet.js +69 -18
- package/dist/git/unified-diff.d.ts +74 -0
- package/dist/git/unified-diff.d.ts.map +1 -0
- package/dist/git/unified-diff.js +676 -0
- package/dist/git-bundle.generated.d.ts +7 -11
- package/dist/git-bundle.generated.d.ts.map +1 -1
- package/dist/git-bundle.generated.js +7 -11
- package/dist/hosted/commands.d.ts.map +1 -1
- package/dist/hosted/commands.js +64 -245
- package/dist/hosted/runtime.d.ts +22 -15
- package/dist/hosted/runtime.d.ts.map +1 -1
- package/dist/hosted/runtime.js +72 -14
- package/dist/hosted/services.d.ts +8 -1
- package/dist/hosted/services.d.ts.map +1 -1
- package/dist/hosted/services.js +12 -13
- package/dist/hosted/session.d.ts +165 -0
- package/dist/hosted/session.d.ts.map +1 -0
- package/dist/hosted/session.js +132 -0
- package/dist/loaders/generated-workers.d.ts +6 -3
- package/dist/loaders/generated-workers.d.ts.map +1 -1
- package/dist/loaders/generated-workers.js +8 -5
- package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -1
- package/dist/loaders/npm-resolve-preamble.js +0 -27
- package/dist/loaders/pre-bundle-preamble.d.ts +6 -3
- package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -1
- package/dist/loaders/pre-bundle-preamble.js +13 -8
- package/dist/node-shims-artifact.generated.d.ts +13 -4
- package/dist/node-shims-artifact.generated.d.ts.map +1 -1
- package/dist/node-shims-artifact.generated.js +16 -7
- package/dist/npm/bin-links.d.ts +3 -1
- package/dist/npm/bin-links.d.ts.map +1 -1
- package/dist/npm/bin-links.js +32 -8
- package/dist/npm/cache.d.ts +11 -1
- package/dist/npm/cache.d.ts.map +1 -1
- package/dist/npm/cache.js +21 -7
- package/dist/npm/install-batch-facet.d.ts +4 -2
- package/dist/npm/install-batch-facet.d.ts.map +1 -1
- package/dist/npm/install-batch-facet.js +32 -18
- package/dist/npm/installer.d.ts +23 -3
- package/dist/npm/installer.d.ts.map +1 -1
- package/dist/npm/installer.js +330 -131
- package/dist/npm/npx-install.d.ts +3 -1
- package/dist/npm/npx-install.d.ts.map +1 -1
- package/dist/npm/npx-install.js +4 -1
- package/dist/npm/package-lock.d.ts +32 -0
- package/dist/npm/package-lock.d.ts.map +1 -0
- package/dist/npm/package-lock.js +65 -0
- package/dist/npm/placement.d.ts +16 -0
- package/dist/npm/placement.d.ts.map +1 -0
- package/dist/npm/placement.js +33 -0
- package/dist/npm/pre-bundle-facet.d.ts +1 -30
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
- package/dist/npm/pre-bundle-facet.js +3 -5
- package/dist/npm/r2-cache.d.ts +12 -6
- package/dist/npm/r2-cache.d.ts.map +1 -1
- package/dist/npm/r2-cache.js +34 -16
- package/dist/npm/resolve-one-facet.d.ts +3 -0
- package/dist/npm/resolve-one-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.js +15 -3
- package/dist/npm/resolver.d.ts +11 -13
- package/dist/npm/resolver.d.ts.map +1 -1
- package/dist/npm/resolver.js +12 -25
- package/dist/opencode-artifact.generated.js +2 -2
- package/dist/replica/routing.d.ts +2 -38
- package/dist/replica/routing.d.ts.map +1 -1
- package/dist/replica/routing.js +3 -55
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +15 -2
- package/dist/router/public-directory.d.ts +18 -0
- package/dist/router/public-directory.d.ts.map +1 -1
- package/dist/router/public-directory.js +1 -1
- package/dist/router/remote-api.d.ts +3 -1
- package/dist/router/remote-api.d.ts.map +1 -1
- package/dist/router/remote-api.js +42 -79
- package/dist/runtime/bash-repl.js +2 -2
- package/dist/runtime/bun-repl.d.ts.map +1 -1
- package/dist/runtime/bun-repl.js +2 -13
- package/dist/runtime/cpython-resident.d.ts.map +1 -1
- package/dist/runtime/cpython-resident.js +2 -10
- package/dist/runtime/esbuild-wasm-bytes.d.ts +37 -18
- package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/esbuild-wasm-bytes.js +66 -92
- package/dist/runtime/facet-loader-host.d.ts.map +1 -1
- package/dist/runtime/facet-loader-host.js +0 -7
- package/dist/runtime/git-bundle-artifact.d.ts +17 -0
- package/dist/runtime/git-bundle-artifact.d.ts.map +1 -0
- package/dist/runtime/git-bundle-artifact.js +25 -0
- package/dist/runtime/node-repl.d.ts.map +1 -1
- package/dist/runtime/node-repl.js +2 -13
- package/dist/runtime/node-shims-artifact.d.ts +22 -23
- package/dist/runtime/node-shims-artifact.d.ts.map +1 -1
- package/dist/runtime/node-shims-artifact.js +48 -78
- package/dist/runtime/node-shims.d.ts.map +1 -1
- package/dist/runtime/node-shims.js +2358 -996
- package/dist/runtime/opencode-artifact.d.ts.map +1 -1
- package/dist/runtime/opencode-artifact.js +17 -53
- package/dist/runtime/opencode-facet-runner.d.ts +3 -6
- package/dist/runtime/opencode-facet-runner.d.ts.map +1 -1
- package/dist/runtime/opencode-facet-runner.js +45 -10
- package/dist/runtime/opentui-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/opentui-wasm-bytes.js +16 -49
- package/dist/runtime/package-manager.d.ts +0 -2
- package/dist/runtime/package-manager.d.ts.map +1 -1
- package/dist/runtime/package-manager.js +0 -3
- package/dist/runtime/python-repl.d.ts.map +1 -1
- package/dist/runtime/python-repl.js +4 -35
- package/dist/runtime/repl-session.d.ts +10 -0
- package/dist/runtime/repl-session.d.ts.map +1 -1
- package/dist/runtime/repl-session.js +7 -0
- package/dist/runtime/ruby-repl.d.ts.map +1 -1
- package/dist/runtime/ruby-repl.js +2 -2
- package/dist/runtime/ruby-resident.d.ts.map +1 -1
- package/dist/runtime/ruby-resident.js +41 -51
- package/dist/runtime/runtime-catalog.d.ts +10 -3
- package/dist/runtime/runtime-catalog.d.ts.map +1 -1
- package/dist/runtime/runtime-catalog.js +125 -15
- package/dist/runtime/sqlite-wasm-bytes.d.ts +4 -4
- package/dist/runtime/sqlite-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/sqlite-wasm-bytes.js +21 -57
- package/dist/runtime/staged-source.d.ts +67 -0
- package/dist/runtime/staged-source.d.ts.map +1 -0
- package/dist/runtime/staged-source.js +113 -0
- package/dist/runtime/wasi/preamble.d.ts +0 -22
- package/dist/runtime/wasi/preamble.d.ts.map +1 -1
- package/dist/runtime/wasi/preamble.js +98 -1425
- package/dist/runtime-catalog.generated.js +1 -1
- package/dist/session/agent.d.ts +14 -2
- package/dist/session/agent.d.ts.map +1 -1
- package/dist/session/agent.js +57 -19
- package/dist/session/ai.d.ts +0 -11
- package/dist/session/ai.d.ts.map +1 -1
- package/dist/session/ai.js +0 -4
- package/dist/session/fs-watch.d.ts +0 -11
- package/dist/session/fs-watch.d.ts.map +1 -1
- package/dist/session/fs-watch.js +0 -21
- package/dist/session/hibernation.d.ts +68 -2
- package/dist/session/hibernation.d.ts.map +1 -1
- package/dist/session/hibernation.js +95 -1
- package/dist/session/init-phases.d.ts +1 -2
- package/dist/session/init-phases.d.ts.map +1 -1
- package/dist/session/init-phases.js +1 -2
- package/dist/session/init.d.ts.map +1 -1
- package/dist/session/init.js +7 -20
- package/dist/session/keys.d.ts +0 -3
- package/dist/session/keys.d.ts.map +1 -1
- package/dist/session/keys.js +0 -3
- package/dist/session/legacy-reset.d.ts +11 -0
- package/dist/session/legacy-reset.d.ts.map +1 -0
- package/dist/session/legacy-reset.js +16 -0
- package/dist/session/nimbus-session.d.ts +50 -16
- package/dist/session/nimbus-session.d.ts.map +1 -1
- package/dist/session/nimbus-session.js +77 -71
- package/dist/session/npm-install-port.d.ts.map +1 -1
- package/dist/session/npm-install-port.js +2 -0
- package/dist/session/programmatic.d.ts +13 -18
- package/dist/session/programmatic.d.ts.map +1 -1
- package/dist/session/programmatic.js +53 -39
- package/dist/session/replica-routes.d.ts +2 -3
- package/dist/session/replica-routes.d.ts.map +1 -1
- package/dist/session/replica-routes.js +3 -10
- package/dist/session/routes.d.ts.map +1 -1
- package/dist/session/routes.js +11 -12
- package/dist/session/rpc.d.ts +108 -21
- package/dist/session/rpc.d.ts.map +1 -1
- package/dist/session/rpc.js +194 -39
- package/dist/session/start-real-vite.js +2 -2
- package/dist/session/state-store.d.ts +1 -17
- package/dist/session/state-store.d.ts.map +1 -1
- package/dist/session/state-store.js +3 -53
- package/dist/session/supervisor-op.d.ts +7 -0
- package/dist/session/supervisor-op.d.ts.map +1 -1
- package/dist/session/supervisor-op.js +6 -1
- package/dist/session/supervisor-rpc.d.ts +116 -19
- package/dist/session/supervisor-rpc.d.ts.map +1 -1
- package/dist/session/supervisor-rpc.js +194 -84
- package/dist/session/vite-command.d.ts.map +1 -1
- package/dist/session/vite-command.js +17 -14
- package/dist/session/ws.d.ts.map +1 -1
- package/dist/session/ws.js +20 -8
- package/dist/shell/npm-bin-entrypoints.d.ts.map +1 -1
- package/dist/shell/npm-bin-entrypoints.js +30 -5
- package/dist/vfs/facet-resident-limits.d.ts +33 -0
- package/dist/vfs/facet-resident-limits.d.ts.map +1 -0
- package/dist/vfs/facet-resident-limits.js +33 -0
- package/dist/vfs/facet-resident-store.d.ts +2 -10
- package/dist/vfs/facet-resident-store.d.ts.map +1 -1
- package/dist/vfs/facet-resident-store.js +1594 -219
- package/dist/workspace-host.d.ts +3 -1
- package/dist/workspace-host.d.ts.map +1 -1
- package/dist/workspace-host.js +2 -0
- package/dist/wrangler/nimbus-wrangler.d.ts +0 -2
- package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -1
- package/dist/wrangler/nimbus-wrangler.js +8 -22
- package/package.json +34 -7
- package/public/_assets/esbuild-0.24.2.js +2380 -0
- package/public/_assets/opencode/1.16.2/index-attach.js +2 -2
- package/public/_assets/runtime/esbuild-cli-c4fda380d52befc1.js +6892 -0
- package/public/_assets/runtime/git-de3e60c9f3ff006a.js +103 -0
- package/public/_assets/runtime/{node-shims-acaa037e6d26ec0d.js → node-shims-06565b121555c194.js} +2879 -992
- package/public/_assets/runtime/resident-store-6ffb1939c53d982f.js +2264 -0
- package/public/_assets/runtime/vfs-write-ledger-e501e8fc793bc2c1.js +889 -0
- package/scripts/build-opencode-attach-entry.mjs +51 -1
- package/scripts/bundle-esbuild-wasm.mjs +55 -39
- package/scripts/bundle-facet-workers.mjs +159 -10
- package/scripts/bundle-git.mjs +88 -27
- package/scripts/bundle-node-shims.mjs +72 -46
- package/scripts/bundle-runtime.mjs +18 -421
- package/scripts/cf-git-patch.mjs +137 -0
- package/scripts/patch-install-deps.mjs +49 -96
- package/scripts/runtime-specs.mjs +435 -0
- package/vendor/git-http.generated.d.ts +82 -0
- package/vendor/git-upstream.generated.d.ts +4378 -0
- package/vendor/git.LICENSE +7 -0
- package/vendor/git.generated.d.mts +21 -0
- package/vendor/git.generated.mjs +103 -0
- package/dist/replica/suspension.d.ts +0 -36
- package/dist/replica/suspension.d.ts.map +0 -1
- package/dist/replica/suspension.js +0 -49
- package/dist/runtime/static-server.d.ts +0 -3
- package/dist/runtime/static-server.d.ts.map +0 -1
- package/dist/runtime/static-server.js +0 -133
- package/scripts/clean-dist.mjs +0 -7
package/dist/npm/cache.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* npm
|
|
2
|
+
* npm/cache.ts — SQLite-backed package cache for Nimbus npm v2.
|
|
3
3
|
*
|
|
4
4
|
* Four tables:
|
|
5
5
|
* 1. pkg_registry_cache — packument metadata (avoids re-fetching full JSON)
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* Hit = row(s) returned with size > 0; miss = empty result set. Callers
|
|
19
19
|
* fall through to L2/L3/L4 on miss.
|
|
20
20
|
*/
|
|
21
|
+
import { placementName } from './placement.js';
|
|
21
22
|
import { recordHit as _l1RecordHit, recordMiss as _l1RecordMiss } from '@nimbus-sh/core/_shared/cache-stats.js';
|
|
22
23
|
// ── NpmCache ────────────────────────────────────────────────────────────
|
|
23
24
|
export class NpmCache {
|
|
@@ -233,7 +234,7 @@ export class NpmCache {
|
|
|
233
234
|
return { written, failed };
|
|
234
235
|
}
|
|
235
236
|
// ── Lockfile ──────────────────────────────────────────────────────────
|
|
236
|
-
/** Read the lockfile for a project.
|
|
237
|
+
/** Read the lockfile for a project, keyed by placement path. Null if not found. */
|
|
237
238
|
readLockfile(projectPath) {
|
|
238
239
|
this.ensureSchema();
|
|
239
240
|
const rows = [...this.sql.exec(`SELECT name, resolved_ver, integrity, deps_json, hoisted_path
|
|
@@ -242,8 +243,9 @@ export class NpmCache {
|
|
|
242
243
|
return null;
|
|
243
244
|
const result = new Map();
|
|
244
245
|
for (const r of rows) {
|
|
245
|
-
|
|
246
|
-
|
|
246
|
+
const placement = String(r.name);
|
|
247
|
+
result.set(placement, {
|
|
248
|
+
name: placementName(placement),
|
|
247
249
|
resolvedVer: String(r.resolved_ver),
|
|
248
250
|
integrity: String(r.integrity),
|
|
249
251
|
depsJson: String(r.deps_json),
|
|
@@ -252,6 +254,18 @@ export class NpmCache {
|
|
|
252
254
|
}
|
|
253
255
|
return result;
|
|
254
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Every installed package directory (namespace key, no leading slash) and
|
|
259
|
+
* the integrity its tarball was pinned to, across projects.
|
|
260
|
+
*/
|
|
261
|
+
installedIntegrities() {
|
|
262
|
+
this.ensureSchema();
|
|
263
|
+
const out = new Map();
|
|
264
|
+
for (const r of this.sql.exec(`SELECT hoisted_path, integrity FROM pkg_lockfile WHERE integrity <> ''`)) {
|
|
265
|
+
out.set(String(r.hoisted_path).replace(/^\/+/, ''), String(r.integrity));
|
|
266
|
+
}
|
|
267
|
+
return out;
|
|
268
|
+
}
|
|
255
269
|
/** Write/overwrite the lockfile for a project. Atomic via transaction. */
|
|
256
270
|
writeLockfile(projectPath, entries, ctx) {
|
|
257
271
|
this.ensureSchema();
|
|
@@ -267,14 +281,14 @@ export class NpmCache {
|
|
|
267
281
|
// Clear existing lockfile for this project
|
|
268
282
|
this.sql.exec(`DELETE FROM pkg_lockfile WHERE project_path = ?`, projectPath);
|
|
269
283
|
// Batch insert: DO SQLite ~100 var limit. 6 cols → max 16 rows (16×6=96).
|
|
270
|
-
const entryList = [...entries
|
|
284
|
+
const entryList = [...entries];
|
|
271
285
|
const BATCH = 16;
|
|
272
286
|
for (let i = 0; i < entryList.length; i += BATCH) {
|
|
273
287
|
const batch = entryList.slice(i, i + BATCH);
|
|
274
288
|
const placeholders = batch.map(() => '(?,?,?,?,?,?)').join(',');
|
|
275
289
|
const values = [];
|
|
276
|
-
for (const e of batch) {
|
|
277
|
-
values.push(projectPath,
|
|
290
|
+
for (const [placement, e] of batch) {
|
|
291
|
+
values.push(projectPath, placement, e.resolvedVer, e.integrity, e.depsJson, e.hoistedPath);
|
|
278
292
|
}
|
|
279
293
|
this.sql.exec(`INSERT INTO pkg_lockfile (project_path, name, resolved_ver, integrity, deps_json, hoisted_path) VALUES ${placeholders}`, ...values);
|
|
280
294
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* ONE dynamic worker per pool slot. With concurrency=4, that's 4 permanent
|
|
8
8
|
* loader entries in workerd's loader cache (each `loader.get(id, …)` call
|
|
9
9
|
* is cached by id and the cache is never released — confirmed in
|
|
10
|
-
* src/
|
|
10
|
+
* packages/fabric/src/isolate-pool.ts). Combine with:
|
|
11
11
|
* - resolver-facet pool: 1 loader entry
|
|
12
12
|
* - fetch-proxy: 1 loader entry
|
|
13
13
|
* - pre-bundle pool: 1 effective entry
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* The fix: ONE facet for the whole install batch. The facet receives
|
|
20
20
|
* the full FacetPackageSpec[] and loops internally with pLimit(3),
|
|
21
21
|
* producing 1 loader entry instead of 4. Same architectural shape as
|
|
22
|
-
* src/npm
|
|
22
|
+
* src/npm/resolve-facet.ts — proven to work in production (commit 9194998).
|
|
23
23
|
*
|
|
24
24
|
* The shared producer wave pre-flushes before 4 MiB or 128 paths. One
|
|
25
25
|
* oversize file may occupy a wave by itself; the supervisor's weighted
|
|
@@ -49,6 +49,8 @@ export interface InstallBatchSpec {
|
|
|
49
49
|
export interface InstallBatchPerPackage {
|
|
50
50
|
name: string;
|
|
51
51
|
version: string;
|
|
52
|
+
/** The spec's identity: one version may land at two directories. Absent from pre-placement shards. */
|
|
53
|
+
pkgDir?: string;
|
|
52
54
|
fileCount: number;
|
|
53
55
|
bytesWritten: number;
|
|
54
56
|
elapsed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-batch-facet.d.ts","sourceRoot":"","sources":["../../src/npm/install-batch-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAShF,MAAM,WAAW,gBAAgB;IAC/B;mDAC+C;IAC/C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB;uFACmF;IACnF,aAAa,EAAE;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB;;uDAE+C;QAC/C,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC;;;0DAGkD;QAClD,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;qEAI6D;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;;;;;;OAUG;IACH,eAAe,EAAE,KAAK,CAClB;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CACnE,CAAC;CACH;AAUD,eAAO,MAAM,sBAAsB,GACjC,OAAO,gBAAgB,EACvB,KAAK;IACH,UAAU,EAAE;QAIV,gBAAgB,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAK1F,gBAAgB,CAAC,EAAE,CACjB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;YACX,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,EAAE,KAAK,CACT;gBAAE,IAAI,EAAE,KAAK,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAC/D;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CACpD,CAAC;SACH,CAAC,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7F,CAAC;CACH,KACA,OAAO,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"install-batch-facet.d.ts","sourceRoot":"","sources":["../../src/npm/install-batch-facet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAShF,MAAM,WAAW,gBAAgB;IAC/B;mDAC+C;IAC/C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB;uFACmF;IACnF,aAAa,EAAE;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,sBAAsB,EAAE,MAAM,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;QACrB;;uDAE+C;QAC/C,wBAAwB,EAAE,MAAM,CAAC;QACjC,0BAA0B,EAAE,MAAM,CAAC;QACnC;;;0DAGkD;QAClD,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B;;;;qEAI6D;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF;;;;;;;;;;OAUG;IACH,eAAe,EAAE,KAAK,CAClB;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE,CACnE,CAAC;CACH;AAUD,eAAO,MAAM,sBAAsB,GACjC,OAAO,gBAAgB,EACvB,KAAK;IACH,UAAU,EAAE;QAIV,gBAAgB,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAK1F,gBAAgB,CAAC,EAAE,CACjB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;YACX,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;YACzB,MAAM,EAAE,KAAK,CACT;gBAAE,IAAI,EAAE,KAAK,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,GAC/D;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CACpD,CAAC;SACH,CAAC,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7F,CAAC;CACH,KACA,OAAO,CAAC,kBAAkB,CAo2B5B,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* ONE dynamic worker per pool slot. With concurrency=4, that's 4 permanent
|
|
8
8
|
* loader entries in workerd's loader cache (each `loader.get(id, …)` call
|
|
9
9
|
* is cached by id and the cache is never released — confirmed in
|
|
10
|
-
* src/
|
|
10
|
+
* packages/fabric/src/isolate-pool.ts). Combine with:
|
|
11
11
|
* - resolver-facet pool: 1 loader entry
|
|
12
12
|
* - fetch-proxy: 1 loader entry
|
|
13
13
|
* - pre-bundle pool: 1 effective entry
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* The fix: ONE facet for the whole install batch. The facet receives
|
|
20
20
|
* the full FacetPackageSpec[] and loops internally with pLimit(3),
|
|
21
21
|
* producing 1 loader entry instead of 4. Same architectural shape as
|
|
22
|
-
* src/npm
|
|
22
|
+
* src/npm/resolve-facet.ts — proven to work in production (commit 9194998).
|
|
23
23
|
*
|
|
24
24
|
* The shared producer wave pre-flushes before 4 MiB or 128 paths. One
|
|
25
25
|
* oversize file may occupy a wave by itself; the supervisor's weighted
|
|
@@ -66,7 +66,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
66
66
|
const SPECULATIVE_FETCH_DELAY_MS = 75;
|
|
67
67
|
const concurrency = Math.max(1, Math.min(batch.concurrency ?? 3, 8));
|
|
68
68
|
// ── pLimit (inlined; preamble doesn't carry a limiter helper) ────────
|
|
69
|
-
//
|
|
69
|
+
// Waiting package tasks enter in arrival order.
|
|
70
70
|
let active = 0;
|
|
71
71
|
const queue = [];
|
|
72
72
|
const limit = (fn) => {
|
|
@@ -363,6 +363,11 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
363
363
|
});
|
|
364
364
|
sharedBufferedBytes += additionalBytes;
|
|
365
365
|
});
|
|
366
|
+
// A tarball placed twice in this shard is acquired once: the first owner
|
|
367
|
+
// publishes its bytes here, later owners of the URL wait for them. `null`
|
|
368
|
+
// means it had nothing to share and the waiter acquires on its own.
|
|
369
|
+
// Owners register on entry, so no waiter blocks an unstarted owner.
|
|
370
|
+
const tarballBytesByUrl = new Map();
|
|
366
371
|
// ── Per-package install (inlined fetchAndStagePackage logic) ─────────
|
|
367
372
|
//
|
|
368
373
|
// Kept inline because cloudflare-parallel serializes this whole function
|
|
@@ -374,6 +379,19 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
374
379
|
inFlight++;
|
|
375
380
|
if (inFlight > inFlightPeak)
|
|
376
381
|
inFlightPeak = inFlight;
|
|
382
|
+
let publishTarballBytes = () => { };
|
|
383
|
+
let sharedBytes = null;
|
|
384
|
+
const owner = tarballBytesByUrl.get(spec.tarballUrl);
|
|
385
|
+
if (owner) {
|
|
386
|
+
sharedBytes = await owner;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
tarballBytesByUrl.set(spec.tarballUrl, new Promise((rs) => { publishTarballBytes = rs; }));
|
|
390
|
+
}
|
|
391
|
+
// [W4] Compressed bytes for R2 write-back, captured by the integrity
|
|
392
|
+
// tee below (null without integrity); published to duplicates on exit.
|
|
393
|
+
let capturedTgzBytes = null;
|
|
394
|
+
let r2HitBytes = sharedBytes;
|
|
377
395
|
// [W4] 1a. R2 cache lookup, hedged by the network fetch.
|
|
378
396
|
//
|
|
379
397
|
// The R2 GET is bounded by R2_RACE_TIMEOUT_MS. That bound guards against a
|
|
@@ -393,7 +411,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
393
411
|
// supervisor deployment) the R2 leg becomes a noop and there is nothing to
|
|
394
412
|
// overlap with, so no hedge is armed — the retry loop's own first fetch is
|
|
395
413
|
// already the first thing that happens.
|
|
396
|
-
const r2Available = typeof env.SUPERVISOR.getCachedTarball === 'function';
|
|
414
|
+
const r2Available = sharedBytes === null && typeof env.SUPERVISOR.getCachedTarball === 'function';
|
|
397
415
|
const r2WaitStart = Date.now();
|
|
398
416
|
const r2P = r2Available
|
|
399
417
|
? Promise.race([
|
|
@@ -438,13 +456,6 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
438
456
|
hedgeAbort.abort();
|
|
439
457
|
};
|
|
440
458
|
try {
|
|
441
|
-
// [W4] Captured compressed bytes for write-back to R2 on miss.
|
|
442
|
-
// Populated by the integrity-tee path below; remains null when
|
|
443
|
-
// integrity isn't present (rare; we only writeback when we can
|
|
444
|
-
// verify on next read). Hoisted to installOne scope per W4-plan
|
|
445
|
-
// §11 finding #4 lifecycle correctness.
|
|
446
|
-
let capturedTgzBytes = null;
|
|
447
|
-
let r2HitBytes = null;
|
|
448
459
|
// Acquisition span, measured from the first cache probe to the moment
|
|
449
460
|
// the tarball body is in hand.
|
|
450
461
|
let tarballElapsedMs = 0;
|
|
@@ -501,10 +512,12 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
501
512
|
// Cache HIT. The cross-tenant store is content-addressed and
|
|
502
513
|
// re-hashes on every read, so bytes that come back are already
|
|
503
514
|
// proven to be spec.integrity's tarball — there is exactly one
|
|
504
|
-
// verification point and it is not here.
|
|
515
|
+
// verification point and it is not here. Bytes shared by another
|
|
516
|
+
// placement were verified by their owner; not an R2 outcome.
|
|
505
517
|
discardPendingNetwork();
|
|
506
518
|
tarballElapsedMs = Date.now() - r2WaitStart;
|
|
507
|
-
|
|
519
|
+
if (!sharedBytes)
|
|
520
|
+
pipelinedTarballRaceWins++;
|
|
508
521
|
tarballsCompleted++;
|
|
509
522
|
cumulativeBytesDecoded += r2HitBytes.length;
|
|
510
523
|
// Synthesize a Response body from the R2 bytes so the existing
|
|
@@ -556,14 +569,14 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
556
569
|
}
|
|
557
570
|
if (!resp) {
|
|
558
571
|
return {
|
|
559
|
-
name: spec.name, version: spec.version,
|
|
572
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
560
573
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
561
574
|
errorText: `fetch failed: ${lastErr?.message || String(lastErr)}`,
|
|
562
575
|
};
|
|
563
576
|
}
|
|
564
577
|
if (!resp.ok) {
|
|
565
578
|
return {
|
|
566
|
-
name: spec.name, version: spec.version,
|
|
579
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
567
580
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
568
581
|
errorText: `HTTP ${resp.status}`,
|
|
569
582
|
};
|
|
@@ -571,7 +584,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
571
584
|
const body = resp.body;
|
|
572
585
|
if (!body) {
|
|
573
586
|
return {
|
|
574
|
-
name: spec.name, version: spec.version,
|
|
587
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
575
588
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
576
589
|
errorText: 'no response body',
|
|
577
590
|
};
|
|
@@ -767,7 +780,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
767
780
|
}
|
|
768
781
|
}
|
|
769
782
|
return {
|
|
770
|
-
name: spec.name, version: spec.version,
|
|
783
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
771
784
|
fileCount: totalFileInodes, bytesWritten: totalBytesWritten,
|
|
772
785
|
elapsed: Date.now() - t0, warnings,
|
|
773
786
|
tarballSource: r2HitBytes ? 'cache' : 'registry',
|
|
@@ -776,7 +789,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
776
789
|
}
|
|
777
790
|
catch (e) {
|
|
778
791
|
return {
|
|
779
|
-
name: spec.name, version: spec.version,
|
|
792
|
+
name: spec.name, version: spec.version, pkgDir: spec.pkgDir,
|
|
780
793
|
fileCount: 0, bytesWritten: 0, elapsed: Date.now() - t0, warnings,
|
|
781
794
|
errorText: e?.message || String(e),
|
|
782
795
|
};
|
|
@@ -784,6 +797,7 @@ export const installPackagesInFacet = async function installPackagesInFacet(batc
|
|
|
784
797
|
finally {
|
|
785
798
|
// No-op once the retry loop has taken it; closes every early return.
|
|
786
799
|
discardPendingNetwork();
|
|
800
|
+
publishTarballBytes(capturedTgzBytes ?? r2HitBytes);
|
|
787
801
|
inFlight = Math.max(0, inFlight - 1);
|
|
788
802
|
}
|
|
789
803
|
};
|
package/dist/npm/installer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* npm
|
|
2
|
+
* npm/installer.ts — Unified npm installer for Nimbus.
|
|
3
3
|
*
|
|
4
4
|
* Designed for bun/pnpm-level performance on Cloudflare DO + SQLite.
|
|
5
5
|
*
|
|
@@ -88,9 +88,11 @@ export declare class NpmInstaller {
|
|
|
88
88
|
install(projectDir: string, opts?: {
|
|
89
89
|
packages?: string[];
|
|
90
90
|
production?: boolean;
|
|
91
|
+
fromLockfile?: boolean;
|
|
91
92
|
pid?: number;
|
|
92
93
|
npmLog?: NpmLogEmitter;
|
|
93
94
|
onProgress?: (msg: string) => void;
|
|
95
|
+
registry?: string;
|
|
94
96
|
}): Promise<NpmInstallResult>;
|
|
95
97
|
private _installInner;
|
|
96
98
|
/**
|
|
@@ -103,8 +105,13 @@ export declare class NpmInstaller {
|
|
|
103
105
|
* width < IN_DO_THRESHOLD (5) → in-DO fanout in-DO loader-pool
|
|
104
106
|
* width >= IN_DO_THRESHOLD → peer-DO fanout peer-DO (sibling NimbusSession DOs)
|
|
105
107
|
*
|
|
108
|
+
* Resolution is per edge, not per name: the first version of a name goes
|
|
109
|
+
* to root; a later edge the nearest visible placement does not satisfy
|
|
110
|
+
* nests a copy under its dependent, never higher (placement.ts; live case
|
|
111
|
+
* in tests/unit/npm-install-nested-conflict.mjs).
|
|
112
|
+
*
|
|
106
113
|
* The supervisor still owns:
|
|
107
|
-
* -
|
|
114
|
+
* - placement (`placed` / `pending` / `settled`, by placement path),
|
|
108
115
|
* - X.5-F top-level / required-peer policy,
|
|
109
116
|
* - X.5-G G1 optional-native silent-skip,
|
|
110
117
|
* - X.5-drizzle best-effort tagging on optional-peer subtrees,
|
|
@@ -155,6 +162,13 @@ export declare class NpmInstaller {
|
|
|
155
162
|
* W6: apply the PACKAGE_ABI_POLICY swap rewrites and reject deny list
|
|
156
163
|
* to a top-level spec map. Emits `[swap]` notices via onProgress.
|
|
157
164
|
*
|
|
165
|
+
* A swap rewrites the spec's RANGE to an npm alias of the swap target
|
|
166
|
+
* (`esbuild` → `npm:esbuild-wasm@<range>`), never its key: the key names
|
|
167
|
+
* the install directory, so `resolved`, node_modules, the bin links, the
|
|
168
|
+
* lockfile and package.json all keep the name the user declared. The
|
|
169
|
+
* resolver facet treats the alias as authoritative and does not announce
|
|
170
|
+
* the swap a second time.
|
|
171
|
+
*
|
|
158
172
|
* G2: rejects are advisories — a listed package stays in the spec map
|
|
159
173
|
* and installs like any other (npm parity: it cannot run here, but
|
|
160
174
|
* install is the wrong place to say so). Each gets one `[npm] note:`
|
|
@@ -171,8 +185,14 @@ export declare class NpmInstaller {
|
|
|
171
185
|
*/
|
|
172
186
|
private isLockfileValid;
|
|
173
187
|
/**
|
|
174
|
-
*
|
|
188
|
+
* npm ci: the placements package-lock.json (or npm-shrinkwrap.json)
|
|
189
|
+
* records, checked against package.json first. The ABI policy the resolver
|
|
190
|
+
* applies still holds: platform-native optional shards are skipped, a
|
|
191
|
+
* required one is refused, and a swapped package resolves its swap target
|
|
192
|
+
* at the locked version.
|
|
175
193
|
*/
|
|
194
|
+
private treeFromPackageLock;
|
|
195
|
+
/** Convert a lockfile back to resolved packages: root by name, nested by placement path. */
|
|
176
196
|
private lockfileToResolved;
|
|
177
197
|
/**
|
|
178
198
|
* Write lockfile to SQLite.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/npm/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAsB,MAAM,YAAY,CAAC;AAC1D,OAAO,EAEiC,KAAK,OAAO,EACnD,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/npm/installer.ts"],"names":[],"mappings":"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"}
|