@wenathlan/saddle 2.1.5 → 2.1.7
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/Dockerfile +158 -60
- package/LICENSE +0 -0
- package/README.md +68 -53
- package/alternatives.ts +0 -0
- package/biome.jsonc +134 -0
- package/boards.json +2 -2
- package/compute.ts +4 -4
- package/cores.json +2 -2
- package/docker.config +37 -9
- package/docs/.gitkeep +0 -0
- package/docs/actionrecorder.md +0 -0
- package/docs/actionsincident.md +0 -0
- package/docs/alternatives.md +0 -0
- package/docs/architecture.md +0 -0
- package/docs/{architecture-1.8.19.md → architecture1819.md} +0 -0
- package/docs/{architecture-1.8.19.mmd → architecture1819.mmd} +0 -0
- package/docs/artifactavailability.md +2 -2
- package/docs/{artifactresearch-1.8.9.md → artifactresearch189.md} +0 -0
- package/docs/{batches-1816-1820.md → batches1816to1820.md} +0 -0
- package/docs/{brancharchive-2026-08-18.md → brancharchive20260818.md} +0 -0
- package/docs/branchaudit.md +0 -0
- package/docs/browser.md +0 -0
- package/docs/capabilityreport.md +0 -0
- package/docs/comparativeaudit.md +0 -0
- package/docs/consolidation.md +0 -0
- package/docs/{containerplatforms-1.8.17.md → containerplatforms1817.md} +0 -0
- package/docs/{containerplatforms-2.1.0.md → containerplatforms210.md} +1 -1
- package/docs/{documentmap-1.8.12.md → documentmap1812.md} +1 -1
- package/docs/{e2ugh-engine.md → e2ughengine.md} +0 -0
- package/docs/ecosystemplan.md +0 -0
- package/docs/enginearchitecture.md +0 -0
- package/docs/extension.md +0 -0
- package/docs/featureaudit.md +0 -0
- package/docs/{flatbuildresearch-1.8.11.md → flatbuildresearch1811.md} +0 -0
- package/docs/gapmatrix.md +0 -0
- package/docs/hardware.md +0 -0
- package/docs/libraryapi.md +0 -0
- package/docs/{licenseaudit-1.8.12.md → licenseaudit1812.md} +0 -0
- package/docs/logs/examplesession.json +54 -0
- package/docs/memoryengine.md +0 -0
- package/docs/{mobileconversionresearch-1.8.10.md → mobileconversionresearch1810.md} +0 -0
- package/docs/modes.md +0 -0
- package/docs/{nativeidentityresearch-1.8.11.md → nativeidentityresearch1811.md} +0 -0
- package/docs/{native-wrappers.md → nativewrappers.md} +0 -0
- package/docs/ninetymodalities.md +191 -0
- package/docs/optimization.md +0 -0
- package/docs/packageaudit185.md +0 -0
- package/docs/performance.md +0 -0
- package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
- package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
- package/docs/planningengine.md +186 -0
- package/docs/planningninety.md +391 -0
- package/docs/platformpipelineaudit.md +0 -0
- package/docs/platformpipelines.md +0 -0
- package/docs/productindex.md +0 -0
- package/docs/registryresearch.md +0 -0
- package/docs/release.md +0 -0
- package/docs/release17notes.md +0 -0
- package/docs/release181notes.md +0 -0
- package/docs/release182notes.md +0 -0
- package/docs/release184notes.md +0 -0
- package/docs/release185notes.md +0 -0
- package/docs/release18notes.md +0 -0
- package/docs/releaseassets.md +0 -0
- package/docs/{releasenotes-1.8.12.md → releasenotes1812.md} +0 -0
- package/docs/{releasenotes-1.8.13.md → releasenotes1813.md} +2 -2
- package/docs/{releasenotes-1.8.14.md → releasenotes1814.md} +1 -1
- package/docs/{releasenotes-1.8.15.md → releasenotes1815.md} +0 -0
- package/docs/{releasenotes-1.8.16.md → releasenotes1816.md} +0 -0
- package/docs/{releasenotes-1.8.17.md → releasenotes1817.md} +0 -0
- package/docs/{releasenotes-1.8.18.md → releasenotes1818.md} +0 -0
- package/docs/{releasenotes-1.8.19.md → releasenotes1819.md} +0 -0
- package/docs/{reorganization-1.8.8.md → reorganization188.md} +0 -0
- package/docs/{reorganization-1.8.9.md → reorganization189.md} +0 -0
- package/docs/{repo-analysis-1.8.21.json → repoanalysis1821.json} +0 -0
- package/docs/{repo-candidates-1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
- package/docs/{repo-research-1.8.16.md → reporesearch1816.md} +0 -0
- package/docs/{repo-research-1.8.21.md → reporesearch1821.md} +0 -0
- package/docs/{repo-selected-1.8.21.json → reposelected1821.json} +0 -0
- package/docs/{repo-synthesis-1.8.16.md → reposynthesis1816.md} +1 -1
- package/docs/{repo-synthesis-1.8.21.md → reposynthesis1821.md} +0 -0
- package/docs/{research-1.8.18-isolation.md → research1818isolation.md} +0 -0
- package/docs/{research-1.8.19-virtual-browser.md → research1819virtualbrowser.md} +0 -0
- package/docs/roadmapp2p3.md +0 -0
- package/docs/s3compatible.md +0 -0
- package/docs/{scanningresearch-1.8.11.md → scanningresearch1811.md} +0 -0
- package/docs/security.md +0 -0
- package/docs/{securityaudit-1.8.7.md → securityaudit187.md} +0 -0
- package/docs/{securityreferences-1.8.11.md → securityreferences1811.md} +0 -0
- package/docs/{securityresearch-1.8.11.md → securityresearch1811.md} +0 -0
- package/docs/{signingresearch-1.8.12.md → signingresearch1812.md} +0 -0
- package/docs/signingwithoutcertificates.md +0 -0
- package/docs/signpathapplication.md +0 -0
- package/docs/sitemap.md +0 -0
- package/docs/{tauri-glib-risk-1.8.11.md → tauriglibrisk1811.md} +0 -0
- package/docs/todo.md +2 -2
- package/docs/{todo-1.8.15.md → todo1815.md} +1 -1
- package/docs/{todo-1.8.16.md → todo1816.md} +5 -5
- package/docs/{todo-1.8.18.md → todo1818.md} +0 -0
- package/docs/{todo-1.8.19.md → todo1819.md} +0 -0
- package/docs/{toolchainresearch-1.8.9.md → toolchainresearch189.md} +0 -0
- package/docs/toolchains.md +0 -0
- package/docs/usage.md +0 -0
- package/docs/viability.md +0 -0
- package/docs/virtualization.md +0 -0
- package/docs/{web-duplicatecleanup.md → webduplicatecleanup.md} +0 -0
- package/docs/{web-ideas.md → webideas.md} +0 -0
- package/docs/{workflowimprovements-2026-08-19.md → workflowimprovements20260819.md} +0 -0
- package/docs/workflowinputs.md +0 -0
- package/docs/workflowoperations.md +0 -0
- package/docs/workloadlaw.md +104 -0
- package/gpumonitor.cpp +0 -0
- package/gpus.json +1 -1
- package/index.ts +19 -10
- package/manifest.json +20 -0
- package/modalityregistry.ts +1493 -0
- package/mttg.config +1 -1
- package/orchestrator.ts +52 -15
- package/package.json +196 -103
- package/passage.config +2 -2
- package/performance.ts +0 -0
- package/processors.json +1 -1
- package/qemu.config +2 -2
- package/qemubridge.py +0 -0
- package/quantum.ts +0 -0
- package/render.ts +0 -0
- package/scheduler.ts +0 -0
- package/security.ts +0 -0
- package/tiers.ts +9 -3
- package/tsconfig.json +21 -11
- package/virtualcpu.ts +1 -0
- package/virtualgpu.ts +1 -0
- package/virtualhardware.c +0 -0
- package/virtualhardware.json +2 -2
- package/virtualization.ts +0 -0
- package/virtualizationcore.cpp +0 -0
- package/virtualmemory.ts +0 -0
- package/vm.config.json +3 -3
- package/biome.json +0 -151
- package/dist/acquisition.d.ts +0 -359
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -629
- package/dist/acquisition.js.map +0 -1
- package/dist/alternatives.d.ts +0 -509
- package/dist/alternatives.d.ts.map +0 -1
- package/dist/alternatives.js +0 -951
- package/dist/alternatives.js.map +0 -1
- package/dist/automation.d.ts +0 -426
- package/dist/automation.d.ts.map +0 -1
- package/dist/automation.js +0 -561
- package/dist/automation.js.map +0 -1
- package/dist/browser.d.ts +0 -562
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js +0 -1057
- package/dist/browser.js.map +0 -1
- package/dist/cli.d.ts +0 -17
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -169
- package/dist/cli.js.map +0 -1
- package/dist/communication.d.ts +0 -192
- package/dist/communication.d.ts.map +0 -1
- package/dist/communication.js +0 -418
- package/dist/communication.js.map +0 -1
- package/dist/compute.d.ts +0 -1161
- package/dist/compute.d.ts.map +0 -1
- package/dist/compute.js +0 -2273
- package/dist/compute.js.map +0 -1
- package/dist/distribution.d.ts +0 -529
- package/dist/distribution.d.ts.map +0 -1
- package/dist/distribution.js +0 -811
- package/dist/distribution.js.map +0 -1
- package/dist/docs/example-localjob.d.ts +0 -2
- package/dist/docs/example-localjob.d.ts.map +0 -1
- package/dist/docs/example-localjob.js +0 -15
- package/dist/docs/example-localjob.js.map +0 -1
- package/dist/docs/example-publicapi.d.ts +0 -2
- package/dist/docs/example-publicapi.d.ts.map +0 -1
- package/dist/docs/example-publicapi.js +0 -7
- package/dist/docs/example-publicapi.js.map +0 -1
- package/dist/execution.d.ts +0 -530
- package/dist/execution.d.ts.map +0 -1
- package/dist/execution.js +0 -761
- package/dist/execution.js.map +0 -1
- package/dist/format.d.ts +0 -19
- package/dist/format.d.ts.map +0 -1
- package/dist/format.js +0 -60
- package/dist/format.js.map +0 -1
- package/dist/foundation.d.ts +0 -176
- package/dist/foundation.d.ts.map +0 -1
- package/dist/foundation.js +0 -309
- package/dist/foundation.js.map +0 -1
- package/dist/index.d.ts +0 -735
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -1020
- package/dist/index.js.map +0 -1
- package/dist/integration.d.ts +0 -236
- package/dist/integration.d.ts.map +0 -1
- package/dist/integration.js +0 -236
- package/dist/integration.js.map +0 -1
- package/dist/intelligence.d.ts +0 -94
- package/dist/intelligence.d.ts.map +0 -1
- package/dist/intelligence.js +0 -145
- package/dist/intelligence.js.map +0 -1
- package/dist/isolation.d.ts +0 -129
- package/dist/isolation.d.ts.map +0 -1
- package/dist/isolation.js +0 -96
- package/dist/isolation.js.map +0 -1
- package/dist/media.d.ts +0 -344
- package/dist/media.d.ts.map +0 -1
- package/dist/media.js +0 -986
- package/dist/media.js.map +0 -1
- package/dist/modes.d.ts +0 -359
- package/dist/modes.d.ts.map +0 -1
- package/dist/modes.js +0 -134
- package/dist/modes.js.map +0 -1
- package/dist/operations.d.ts +0 -67
- package/dist/operations.d.ts.map +0 -1
- package/dist/operations.js +0 -94
- package/dist/operations.js.map +0 -1
- package/dist/orchestrator.d.ts +0 -1339
- package/dist/orchestrator.d.ts.map +0 -1
- package/dist/orchestrator.js +0 -4308
- package/dist/orchestrator.js.map +0 -1
- package/dist/packager/targetcli.js +0 -4
- package/dist/performance.d.ts +0 -416
- package/dist/performance.d.ts.map +0 -1
- package/dist/performance.js +0 -827
- package/dist/performance.js.map +0 -1
- package/dist/quantum.d.ts +0 -810
- package/dist/quantum.d.ts.map +0 -1
- package/dist/quantum.js +0 -2073
- package/dist/quantum.js.map +0 -1
- package/dist/render.d.ts +0 -381
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js +0 -1073
- package/dist/render.js.map +0 -1
- package/dist/scheduler.d.ts +0 -596
- package/dist/scheduler.d.ts.map +0 -1
- package/dist/scheduler.js +0 -1259
- package/dist/scheduler.js.map +0 -1
- package/dist/security.d.ts +0 -501
- package/dist/security.d.ts.map +0 -1
- package/dist/security.js +0 -1170
- package/dist/security.js.map +0 -1
- package/dist/server.d.ts +0 -21
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -52
- package/dist/server.js.map +0 -1
- package/dist/tiers.d.ts +0 -1002
- package/dist/tiers.d.ts.map +0 -1
- package/dist/tiers.js +0 -2165
- package/dist/tiers.js.map +0 -1
- package/dist/virtual.d.ts +0 -641
- package/dist/virtual.d.ts.map +0 -1
- package/dist/virtual.js +0 -1285
- package/dist/virtual.js.map +0 -1
- package/dist/virtualcpu.d.ts +0 -316
- package/dist/virtualcpu.d.ts.map +0 -1
- package/dist/virtualcpu.js +0 -1180
- package/dist/virtualcpu.js.map +0 -1
- package/dist/virtualgpu.d.ts +0 -345
- package/dist/virtualgpu.d.ts.map +0 -1
- package/dist/virtualgpu.js +0 -1000
- package/dist/virtualgpu.js.map +0 -1
- package/dist/virtualization.d.ts +0 -607
- package/dist/virtualization.d.ts.map +0 -1
- package/dist/virtualization.js +0 -1187
- package/dist/virtualization.js.map +0 -1
- package/dist/virtualmemory.d.ts +0 -818
- package/dist/virtualmemory.d.ts.map +0 -1
- package/dist/virtualmemory.js +0 -1796
- package/dist/virtualmemory.js.map +0 -1
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -26
- package/dist/vitest.config.js.map +0 -1
- package/dist/webscrape.d.ts +0 -720
- package/dist/webscrape.d.ts.map +0 -1
- package/dist/webscrape.js +0 -2697
- package/dist/webscrape.js.map +0 -1
- package/docs/CONVERSA.txt +0 -1523
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/assets/architecture.svg +0 -45
- package/docs/assets/saddlemark.svg +0 -13
- package/docs/example-localjob.ts +0 -15
- package/docs/example-publicapi.ts +0 -7
- package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
- package/media.ts +0 -1337
- package/web/manifest.json +0 -30
- package/web/readme.md +0 -383
- package/web/tsconfig.json +0 -25
package/mttg.config
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"meta": {
|
|
3
3
|
"name": "mttg.config",
|
|
4
4
|
"title": "saddle - MTTG Multi-Tenant Task Groups (cgroups v2 + tenants + transcode) with MTTCG (QEMU TCG) section",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.0.154",
|
|
6
6
|
"date": "2026-08-22",
|
|
7
7
|
"language": "en",
|
|
8
8
|
"conceptSeparation": "MTTG = Multi-Tenant Task Groups (cgroup v2 cpu.weight/cpuset/memory/io/pids/hugetlb/rdma + tenants + transcode pipelines). MTTCG = QEMU Multi-Threaded TCG (one host thread per vCPU under TCG). Both live here as DISTINCT sections; MTTCG accel flags also in qemu.config#mttcg.",
|
package/orchestrator.ts
CHANGED
|
@@ -91,7 +91,10 @@ const runtimecatalog = {
|
|
|
91
91
|
|
|
92
92
|
/** toolchain stack reported by dumpstate and the version probe. */
|
|
93
93
|
const stackcatalog = {
|
|
94
|
-
|
|
94
|
+
/* walks with the .nvmrc pin the maintenance rung stamps — the 2.0.133
|
|
95
|
+
publish regression answered the engine advertising a node the repository
|
|
96
|
+
retired, so the anchor rides the pin lane now (never ahead of it) */
|
|
97
|
+
nodecurrent: '26.13.0',
|
|
95
98
|
nodelts: '24.19.0',
|
|
96
99
|
typescript: '7.0.2',
|
|
97
100
|
qemu: runtimecatalog.qemu,
|
|
@@ -1276,8 +1279,12 @@ class firecrackerruntime extends runtimestrategy {
|
|
|
1276
1279
|
* the class also absorbs spawnqemu from the Meta source: the vm plane
|
|
1277
1280
|
* launches qemu with monitor and qmp unix sockets, a numa pin line,
|
|
1278
1281
|
* vfio devices for every gpu assignment, extra args from qemu.config
|
|
1279
|
-
* and
|
|
1280
|
-
*
|
|
1282
|
+
* and — the honest-boot law of the engine-real rung — when the qemu
|
|
1283
|
+
* binary is absent the spawn refuses with ERR_QEMU_ABSENT (the error
|
|
1284
|
+
* names the binary the host must carry) so a vm record never claims
|
|
1285
|
+
* running over a stand-in process: scheduling and lifecycle still
|
|
1286
|
+
* exercise end to end in CI through the argv builders and the create /
|
|
1287
|
+
* destroy planes, never through a faked boot.
|
|
1281
1288
|
*/
|
|
1282
1289
|
class qemuruntime extends runtimestrategy {
|
|
1283
1290
|
override readonly name: sandboxruntime = 'qemu';
|
|
@@ -1343,13 +1350,24 @@ class qemuruntime extends runtimestrategy {
|
|
|
1343
1350
|
|
|
1344
1351
|
/**
|
|
1345
1352
|
* builds the vm plane argv: strategy flags plus the name/uuid, dual
|
|
1346
|
-
* unix sockets, virtio balloon, the
|
|
1347
|
-
*
|
|
1353
|
+
* unix sockets, virtio balloon, the numa pin line and one vfio-pci
|
|
1354
|
+
* device per assigned gpu. the netdev answers the honest network law:
|
|
1355
|
+
* the per-numa bridge (br-vhe-N) rides when the interface exists on
|
|
1356
|
+
* the host (the privileged deployments the bridge plane owns), and a
|
|
1357
|
+
* host without the interface rides user-mode networking (slirp) — a
|
|
1358
|
+
* real qemu network mode that needs no privilege — so the argv a host
|
|
1359
|
+
* without the bridge answers is a bootable argv, never a bridge the
|
|
1360
|
+
* kernel would refuse.
|
|
1348
1361
|
*/
|
|
1349
1362
|
buildvmcommand(vm: vmrecord, assignments: readonly gpuassignment[]): readonly string[] {
|
|
1350
1363
|
const kvm = kvmavailable();
|
|
1351
1364
|
const accel = vm.accel === 'kvm' && kvm ? 'kvm' : 'tcg,thread=multi,tb-size=1024';
|
|
1352
1365
|
const sockets = this.socketsfor(vm.id);
|
|
1366
|
+
const bridgename = `br-vhe-${vm.numanode}`;
|
|
1367
|
+
const bridgeonhost = existsSync(`/sys/class/net/${bridgename}`);
|
|
1368
|
+
const netdev = bridgeonhost
|
|
1369
|
+
? `bridge,br=${bridgename},id=net0`
|
|
1370
|
+
: 'user,id=net0';
|
|
1353
1371
|
const args: string[] = [
|
|
1354
1372
|
vm.qemubinary,
|
|
1355
1373
|
'-machine',
|
|
@@ -1369,7 +1387,7 @@ class qemuruntime extends runtimestrategy {
|
|
|
1369
1387
|
'-device',
|
|
1370
1388
|
'virtio-balloon-pci,id=balloon0',
|
|
1371
1389
|
'-netdev',
|
|
1372
|
-
|
|
1390
|
+
netdev,
|
|
1373
1391
|
'-device',
|
|
1374
1392
|
'virtio-net-pci,netdev=net0',
|
|
1375
1393
|
'-display',
|
|
@@ -1391,8 +1409,12 @@ class qemuruntime extends runtimestrategy {
|
|
|
1391
1409
|
|
|
1392
1410
|
/**
|
|
1393
1411
|
* spawns qemu for a vm record; when the binary does not exist the
|
|
1394
|
-
* method
|
|
1395
|
-
*
|
|
1412
|
+
* method refuses with ERR_QEMU_ABSENT — the honest-boot law of the
|
|
1413
|
+
* engine-real rung: a host without the qemu binary never answers a
|
|
1414
|
+
* stand-in process, the vm record never claims running over a sleep
|
|
1415
|
+
* (startvm catches the refusal, marks the vm failed and publishes the
|
|
1416
|
+
* error, so CI exercises the argv builders and the create / destroy
|
|
1417
|
+
* planes instead of a faked boot).
|
|
1396
1418
|
*/
|
|
1397
1419
|
async spawn(
|
|
1398
1420
|
vm: vmrecord,
|
|
@@ -1401,14 +1423,23 @@ class qemuruntime extends runtimestrategy {
|
|
|
1401
1423
|
): Promise<qemuprocess> {
|
|
1402
1424
|
try {
|
|
1403
1425
|
const sockets = this.socketsfor(vm.id);
|
|
1404
|
-
|
|
1426
|
+
// the socket seats must exist before the guest opens its servers —
|
|
1427
|
+
// qemu creates the socket files itself, never the parent directory
|
|
1428
|
+
mkdirSync(path.dirname(sockets.qmp), { recursive: true });
|
|
1429
|
+
// the foreground law of the honest-boot rung: the tracked child is
|
|
1430
|
+
// the process that lives as long as the vm — the daemonize flag
|
|
1431
|
+
// would fork the daemon and exit the parent at once (the vm would
|
|
1432
|
+
// read stopped over a live machine), so the spawn rides the
|
|
1433
|
+
// foreground argv the exit callback can own
|
|
1434
|
+
const argv = this.buildvmcommand(vm, assignments);
|
|
1405
1435
|
const [bin, ...rest] = argv;
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1436
|
+
if (!existsSync(bin)) {
|
|
1437
|
+
throw new orchestratorerror(
|
|
1438
|
+
`qemu spawn refused for ${vm.id}: the binary ${bin} is absent from the engine host (the honest-boot law — a vm never runs over a stand-in process)`,
|
|
1439
|
+
'ERR_QEMU_ABSENT',
|
|
1440
|
+
);
|
|
1411
1441
|
}
|
|
1442
|
+
const child: ChildProcess = spawn(bin, rest, { stdio: 'ignore', detached: false });
|
|
1412
1443
|
const pid = child.pid ?? randomInt(1000, 11000);
|
|
1413
1444
|
const processinfo: qemuprocess = {
|
|
1414
1445
|
vmid: vm.id,
|
|
@@ -1423,6 +1454,12 @@ class qemuruntime extends runtimestrategy {
|
|
|
1423
1454
|
});
|
|
1424
1455
|
return processinfo;
|
|
1425
1456
|
} catch (error) {
|
|
1457
|
+
// the honest-boot refusal rides through untouched — the code the
|
|
1458
|
+
// law answers (ERR_QEMU_ABSENT) is the code startvm and the vm
|
|
1459
|
+
// record read, never the generic spawn wrap
|
|
1460
|
+
if (error instanceof orchestratorerror) {
|
|
1461
|
+
throw error;
|
|
1462
|
+
}
|
|
1426
1463
|
throw new orchestratorerror(
|
|
1427
1464
|
`qemu spawn failed for ${vm.id}: ${errormessage(error)}`,
|
|
1428
1465
|
'ERR_QEMU_SPAWN',
|
|
@@ -4389,7 +4426,7 @@ class orchestrator {
|
|
|
4389
4426
|
/**
|
|
4390
4427
|
* default contents of the flat config files written by start(); the
|
|
4391
4428
|
* version strings carry the v2 anchors (qemu 11.1.0, docker 29.7.2,
|
|
4392
|
-
* node 26.
|
|
4429
|
+
* node 26.12.0), replacing the stale Meta banners.
|
|
4393
4430
|
*/
|
|
4394
4431
|
#defaultconfigcontents(): Record<configfilename, string> {
|
|
4395
4432
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wenathlan/saddle",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.7",
|
|
4
4
|
"description": "binary computing engine that turns distributed storage into a publishable working set carrying the merged virtual-hardware engine (the saddle + e2ugh grand merge)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -11,19 +11,35 @@
|
|
|
11
11
|
"module": "./dist/index.js",
|
|
12
12
|
"browser": "./dist/index.js",
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
|
-
"packageManager": "
|
|
14
|
+
"packageManager": "pnpm@12.3.4",
|
|
15
15
|
"publishConfig": {
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
18
|
"overrides": {
|
|
19
|
+
"uuid": "^11.1.1",
|
|
20
|
+
"deepmerge-ts": "^8.0.0",
|
|
21
|
+
"esbuild": "^0.28.2",
|
|
22
|
+
"follow-redirects": "^1.16.2",
|
|
23
|
+
"minimatch": "^11.0.3",
|
|
24
|
+
"glob": "^14.0.3",
|
|
25
|
+
"mysql2": "^3.24.6",
|
|
26
|
+
"postcss-selector-parser": "^7.1.6",
|
|
27
|
+
"source-map-js": "1.2.2",
|
|
28
|
+
"proxy-addr": "2.0.8",
|
|
29
|
+
"body-parser": "^2.4.0",
|
|
30
|
+
"fast-uri": "^3.1.9",
|
|
31
|
+
"zod": "^4.6.7",
|
|
32
|
+
"undici": "^7.30.1",
|
|
33
|
+
"katex": "^0.18.2",
|
|
34
|
+
"shell-quote": "^1.11.0",
|
|
19
35
|
"xcode": {
|
|
20
36
|
"uuid": "11.1.1"
|
|
21
37
|
},
|
|
22
|
-
"
|
|
38
|
+
"@grpc/grpc-js": "1.14.5"
|
|
23
39
|
},
|
|
24
40
|
"repository": {
|
|
25
41
|
"type": "git",
|
|
26
|
-
"url": "https://github.com/wenathlan/
|
|
42
|
+
"url": "https://github.com/wenathlan/devthink"
|
|
27
43
|
},
|
|
28
44
|
"bugs": {
|
|
29
45
|
"url": "https://github.com/wenathlan/saddle/issues"
|
|
@@ -37,7 +53,6 @@
|
|
|
37
53
|
"virtual gpu",
|
|
38
54
|
"runner",
|
|
39
55
|
"storage",
|
|
40
|
-
"automation",
|
|
41
56
|
"llvmpipe",
|
|
42
57
|
"lavapipe",
|
|
43
58
|
"rusticl",
|
|
@@ -47,11 +62,32 @@
|
|
|
47
62
|
"ghcr"
|
|
48
63
|
],
|
|
49
64
|
"engines": {
|
|
50
|
-
"
|
|
51
|
-
"
|
|
65
|
+
"bare": "^1.18.0",
|
|
66
|
+
"bun": "^1.4.2",
|
|
67
|
+
"cargo": ">=1.85.0",
|
|
68
|
+
"chrome": "^16.0.912",
|
|
69
|
+
"cnpm": "^9.4.0",
|
|
70
|
+
"corepack": "^0.35.0",
|
|
71
|
+
"deno": "^2.9.5",
|
|
72
|
+
"dotnet": ">=8.0.0",
|
|
73
|
+
"ecmascript": "^5.0.0",
|
|
74
|
+
"firefox": ">=0.8.0",
|
|
75
|
+
"go": ">=1.24.0",
|
|
76
|
+
"iojs": "^1.0.0",
|
|
77
|
+
"java": ">=17",
|
|
78
|
+
"node": ">=26.13.0 <27",
|
|
79
|
+
"npm": "^12.1.0",
|
|
80
|
+
"pnpm": "^12.6.0",
|
|
81
|
+
"python": ">=3.11.0",
|
|
82
|
+
"rust": ">=1.85.0",
|
|
83
|
+
"teleport": ">=0.2.0",
|
|
84
|
+
"typescript": "^5.8.0",
|
|
85
|
+
"v": "^0.5.2",
|
|
86
|
+
"vscode": "^1.118.0",
|
|
87
|
+
"yarn": "^4.17.1"
|
|
52
88
|
},
|
|
53
89
|
"peerDependencies": {
|
|
54
|
-
"playwright": "^1.
|
|
90
|
+
"playwright": "^1.63.0"
|
|
55
91
|
},
|
|
56
92
|
"peerDependenciesMeta": {
|
|
57
93
|
"playwright": {
|
|
@@ -75,23 +111,22 @@
|
|
|
75
111
|
"./sessions": "./dist/foundation.js",
|
|
76
112
|
"./modes": "./dist/modes.js",
|
|
77
113
|
"./mode": "./dist/modes.js",
|
|
114
|
+
"./sandbox": "./dist/sandbox.js",
|
|
115
|
+
"./modalities": "./dist/modalityregistry.js",
|
|
116
|
+
"./workloadlaw": "./dist/workloadlaw.js",
|
|
78
117
|
"./browser": "./dist/browser.js",
|
|
79
118
|
"./browser-playwright": "./dist/browser.js",
|
|
80
|
-
"./bot": "./dist/automation.js",
|
|
81
|
-
"./captcha": "./dist/acquisition.js",
|
|
82
119
|
"./deploy": "./dist/modes.js",
|
|
83
120
|
"./extension": "./dist/browser.js",
|
|
84
121
|
"./server-node": "./dist/server.js",
|
|
85
122
|
"./sessions-file": "./dist/execution.js",
|
|
86
123
|
"./sessions-store": "./dist/execution.js",
|
|
87
124
|
"./queue-persistent": "./dist/execution.js",
|
|
88
|
-
"./captcha-evidence": "./dist/acquisition.js",
|
|
89
125
|
"./hash": "./dist/foundation.js",
|
|
90
126
|
"./release-assets": "./dist/distribution.js",
|
|
91
127
|
"./release-verify": "./dist/distribution.js",
|
|
92
128
|
"./release-evidence": "./dist/distribution.js",
|
|
93
129
|
"./delivery": "./dist/distribution.js",
|
|
94
|
-
"./surface-requirements": "./dist/automation.js",
|
|
95
130
|
"./worker": "./dist/execution.js",
|
|
96
131
|
"./binary-archive": "./dist/distribution.js",
|
|
97
132
|
"./binary-transform": "./dist/distribution.js",
|
|
@@ -105,7 +140,6 @@
|
|
|
105
140
|
"./virtualization": "./virtualization.ts",
|
|
106
141
|
"./scheduler": "./scheduler.ts",
|
|
107
142
|
"./compute": "./compute.ts",
|
|
108
|
-
"./media": "./media.ts",
|
|
109
143
|
"./security": "./security.ts",
|
|
110
144
|
"./performance": "./performance.ts",
|
|
111
145
|
"./alternatives": "./alternatives.ts",
|
|
@@ -124,7 +158,7 @@
|
|
|
124
158
|
},
|
|
125
159
|
"files": [
|
|
126
160
|
"dist",
|
|
127
|
-
"
|
|
161
|
+
"manifest.json",
|
|
128
162
|
"docs",
|
|
129
163
|
"README.md",
|
|
130
164
|
"LICENSE",
|
|
@@ -132,7 +166,6 @@
|
|
|
132
166
|
"orchestrator.ts",
|
|
133
167
|
"scheduler.ts",
|
|
134
168
|
"compute.ts",
|
|
135
|
-
"media.ts",
|
|
136
169
|
"virtualcpu.ts",
|
|
137
170
|
"virtualmemory.ts",
|
|
138
171
|
"virtualgpu.ts",
|
|
@@ -157,16 +190,16 @@
|
|
|
157
190
|
"docker.config",
|
|
158
191
|
"Dockerfile",
|
|
159
192
|
"tsconfig.json",
|
|
160
|
-
"biome.
|
|
193
|
+
"biome.jsonc",
|
|
194
|
+
"modalityregistry.ts",
|
|
161
195
|
"tiers.ts",
|
|
162
196
|
"quantum.ts"
|
|
163
197
|
],
|
|
164
198
|
"scripts": {
|
|
165
|
-
"build:engine": "node
|
|
199
|
+
"build:engine": "node scriptsbuildengine.ts",
|
|
166
200
|
"check": "npm run build:engine && node --check dist/index.js && node --check dist/execution.js && node --check dist/cli.js && node --check dist/browser.js && node --check dist/distribution.js",
|
|
167
201
|
"formatcheck": "node --import tsx format.ts",
|
|
168
|
-
"test": "
|
|
169
|
-
"test:legacy": "vitest run tests/agent-utils.test.ts tests/cache.test.ts tests/chunking.test.ts tests/core.test.ts tests/errors.test.ts tests/llms-txt.test.ts tests/middleware.test.ts tests/proxy.test.ts tests/tokens.test.ts",
|
|
202
|
+
"test": "vitest run",
|
|
170
203
|
"run": "npm run build:engine && node dist/cli.js",
|
|
171
204
|
"extension:build": "npm run build:engine && node dist/browser.js",
|
|
172
205
|
"release:assets": "npm run build:engine && node dist/distribution.js",
|
|
@@ -177,16 +210,17 @@
|
|
|
177
210
|
"tauri": "npx --yes @tauri-apps/cli@2.11.4",
|
|
178
211
|
"capacitor:sync:android": "npm run web:build:pages && cap sync android",
|
|
179
212
|
"capacitor:sync:ios": "npm run web:build:pages && cap sync ios",
|
|
180
|
-
"native:check:flat": "node
|
|
181
|
-
"web:dev": "vite --host
|
|
182
|
-
"web:check": "npm run build:engine && tsc --project
|
|
183
|
-
"web:build": "vite build
|
|
184
|
-
"web:build:pages": "vite build
|
|
213
|
+
"native:check:flat": "node scriptsvalidateflatnative.ts",
|
|
214
|
+
"web:dev": "vite --host",
|
|
215
|
+
"web:check": "npm run build:engine && tsc --project tsconfig.json --noEmit",
|
|
216
|
+
"web:build": "vite build",
|
|
217
|
+
"web:build:pages": "vite build",
|
|
218
|
+
"web:preview": "vite preview --host",
|
|
185
219
|
"build": "npm run build:engine",
|
|
186
220
|
"build:tsc": "tsc -p tsconfig.json --noEmitOnError false",
|
|
187
221
|
"start": "node --import tsx ./cli.ts plan",
|
|
188
222
|
"dev": "node --import tsx --watch ./cli.ts",
|
|
189
|
-
"web": "node
|
|
223
|
+
"web": "node webserver.ts",
|
|
190
224
|
"qemu:bridge": "node ./orchestrator.ts --qemu-bridge",
|
|
191
225
|
"toolchain:verify": "node --version && npx tsc --version && python3 --version && qemu-system-x86_64 --version || true && docker --version",
|
|
192
226
|
"dev:tsx": "node --import tsx --watch ./cli.ts",
|
|
@@ -198,105 +232,164 @@
|
|
|
198
232
|
"format": "biome format --write .",
|
|
199
233
|
"format:biome": "biome format --write .",
|
|
200
234
|
"format:check": "biome check .",
|
|
201
|
-
"test:watch": "node --test --watch tests/*.test.ts",
|
|
202
|
-
"test:coverage": "node --test --experimental-test-coverage tests/*.test.ts",
|
|
203
|
-
"test:unit": "node --test tests/*.test.ts",
|
|
204
|
-
"test:e2e": "node --test tests/*.test.ts",
|
|
235
|
+
"test:watch": "node --test --watch \"tests/*.test.ts\"",
|
|
236
|
+
"test:coverage": "node --test --experimental-test-coverage \"tests/*.test.ts\"",
|
|
237
|
+
"test:unit": "node --test \"tests/*.test.ts\"",
|
|
238
|
+
"test:e2e": "node --test \"tests/*.test.ts\"",
|
|
205
239
|
"qemu:version": "qemu-system-x86_64 --version || echo 'qemu 11.1.0 expected 2026-08-22'",
|
|
206
240
|
"vm:create": "node --import tsx ./cli.ts vm",
|
|
207
241
|
"vm:validate": "node --import tsx ./cli.ts vmlint",
|
|
208
242
|
"gpu:list": "node --import tsx ./cli.ts gpus",
|
|
209
|
-
"docker:build": "docker build -f Dockerfile -t saddle:2.1.
|
|
210
|
-
"docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.1.
|
|
211
|
-
"docker:health": "docker run --rm saddle:2.1.
|
|
243
|
+
"docker:build": "docker build -f Dockerfile -t saddle:2.1.7 .",
|
|
244
|
+
"docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.1.7",
|
|
245
|
+
"docker:health": "docker run --rm saddle:2.1.7 qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || true",
|
|
212
246
|
"firecracker:boot": "firecracker --api-sock /tmp/fc-saddle.sock --config-file vmconfig.json 2>/dev/null || echo 'firecracker 1.16.1 warm-pool boot 125ms target'",
|
|
213
247
|
"py:bridge": "python3 qemubridge.py",
|
|
214
248
|
"py:test": "python3 -m pytest -q || python3 qemubridge.py",
|
|
215
249
|
"clean": "rm -rf dist coverage .biome __pycache__",
|
|
216
|
-
"prepare": "echo 'saddle grand-merge toolchain 2026-08-23: Node 26.
|
|
250
|
+
"prepare": "echo 'saddle grand-merge toolchain 2026-08-23: Node 26.12.0 Current / 24.19.0 LTS, npm 12.0.2, TS 7.0.2, Python 3.14.7, Docker 29.7.2, QEMU 11.1.0, Mesa 26.2.1, LLVM 22.1.8, Firecracker 1.16.1'",
|
|
217
251
|
"start:engine": "node --import tsx ./cli.ts plan"
|
|
218
252
|
},
|
|
253
|
+
"dependencies": {
|
|
254
|
+
"@fluentui/react-icons": "^2.0.345",
|
|
255
|
+
"@fontsource-variable/bricolage-grotesque": "^5.3.0",
|
|
256
|
+
"@fontsource-variable/geist-mono": "^5.3.0",
|
|
257
|
+
"@fontsource-variable/inter": "^5.3.0",
|
|
258
|
+
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
259
|
+
"@fontsource-variable/outfit": "^5.3.0",
|
|
260
|
+
"@hono/node-server": "^2.1.5",
|
|
261
|
+
"@libsql/client": "^0.18.0",
|
|
262
|
+
"@prisma/adapter-libsql": "^7.10.1",
|
|
263
|
+
"@prisma/client": "^7.10.1",
|
|
264
|
+
"@wenathlan/cadria": "^2.0.154",
|
|
265
|
+
"@wenathlan/debonair": "^2.0.154",
|
|
266
|
+
"@wenathlan/getry": "^2.0.154",
|
|
267
|
+
"@wenathlan/saddle": "^2.1.6",
|
|
268
|
+
"@wenathlan/vault": "^2.0.154",
|
|
269
|
+
"better-sqlite3": "^13.0.3",
|
|
270
|
+
"drizzle-orm": "^0.45.4",
|
|
271
|
+
"gsap": "^3.15.0",
|
|
272
|
+
"hono": "^4.13.16",
|
|
273
|
+
"ink": "^7.1.1",
|
|
274
|
+
"lucide-react": "^1.66.0",
|
|
275
|
+
"motion": "^12.43.0",
|
|
276
|
+
"react": "^19.3.1",
|
|
277
|
+
"react-devtools-core": "^8.0.0",
|
|
278
|
+
"react-dom": "^19.3.1",
|
|
279
|
+
"three": "^0.187.0",
|
|
280
|
+
"wouter": "^3.13.0",
|
|
281
|
+
"z-ai-web-dev-sdk": "^0.0.18"
|
|
282
|
+
},
|
|
219
283
|
"devDependencies": {
|
|
220
|
-
"@biomejs/biome": "^2.
|
|
221
|
-
"@capacitor/android": "^8.
|
|
222
|
-
"@capacitor/cli": "^8.
|
|
223
|
-
"@capacitor/core": "^8.
|
|
224
|
-
"@capacitor/ios": "^8.
|
|
225
|
-
"@
|
|
226
|
-
"@
|
|
227
|
-
"@
|
|
228
|
-
"@
|
|
229
|
-
"@
|
|
230
|
-
"@radix-ui/react-
|
|
231
|
-
"@radix-ui/react-
|
|
232
|
-
"@radix-ui/react-
|
|
233
|
-
"@radix-ui/react-
|
|
234
|
-
"@radix-ui/react-
|
|
235
|
-
"@radix-ui/react-
|
|
236
|
-
"@radix-ui/react-
|
|
237
|
-
"@radix-ui/react-
|
|
238
|
-
"@radix-ui/react-
|
|
239
|
-
"@radix-ui/react-
|
|
240
|
-
"@radix-ui/react-
|
|
241
|
-
"@radix-ui/react-
|
|
242
|
-
"@radix-ui/react-
|
|
243
|
-
"@radix-ui/react-
|
|
244
|
-
"@radix-ui/react-
|
|
245
|
-
"@radix-ui/react-
|
|
246
|
-
"@radix-ui/react-
|
|
247
|
-
"@radix-ui/react-
|
|
248
|
-
"@radix-ui/react-
|
|
249
|
-
"@radix-ui/react-
|
|
250
|
-
"@radix-ui/react-
|
|
251
|
-
"@radix-ui/react-
|
|
252
|
-
"@
|
|
253
|
-
"@
|
|
254
|
-
"@
|
|
255
|
-
"@
|
|
256
|
-
"@
|
|
257
|
-
"@
|
|
258
|
-
"@
|
|
259
|
-
"
|
|
260
|
-
"
|
|
261
|
-
"
|
|
284
|
+
"@biomejs/biome": "^2.6.4",
|
|
285
|
+
"@capacitor/android": "^8.6.0",
|
|
286
|
+
"@capacitor/cli": "^8.6.0",
|
|
287
|
+
"@capacitor/core": "^8.6.0",
|
|
288
|
+
"@capacitor/ios": "^8.6.0",
|
|
289
|
+
"@fluentui/react-icons": "^2.0.345",
|
|
290
|
+
"@hookform/resolvers": "^5.9.2",
|
|
291
|
+
"@libsql/client": "^0.18.0",
|
|
292
|
+
"@opencode-ai/sdk": "^1.19.5",
|
|
293
|
+
"@prisma/client": "^7.10.1",
|
|
294
|
+
"@radix-ui/react-accordion": "^1.3.1",
|
|
295
|
+
"@radix-ui/react-alert-dialog": "^1.2.1",
|
|
296
|
+
"@radix-ui/react-aspect-ratio": "^1.2.0",
|
|
297
|
+
"@radix-ui/react-avatar": "^1.3.1",
|
|
298
|
+
"@radix-ui/react-checkbox": "^1.4.1",
|
|
299
|
+
"@radix-ui/react-collapsible": "^1.2.1",
|
|
300
|
+
"@radix-ui/react-context-menu": "^2.4.1",
|
|
301
|
+
"@radix-ui/react-dialog": "^1.3.1",
|
|
302
|
+
"@radix-ui/react-dropdown-menu": "^2.2.1",
|
|
303
|
+
"@radix-ui/react-hover-card": "^1.2.1",
|
|
304
|
+
"@radix-ui/react-label": "^2.1.17",
|
|
305
|
+
"@radix-ui/react-menubar": "^1.2.1",
|
|
306
|
+
"@radix-ui/react-navigation-menu": "^1.4.1",
|
|
307
|
+
"@radix-ui/react-popover": "^1.3.1",
|
|
308
|
+
"@radix-ui/react-progress": "^1.2.1",
|
|
309
|
+
"@radix-ui/react-radio-group": "^1.5.1",
|
|
310
|
+
"@radix-ui/react-scroll-area": "^1.4.0",
|
|
311
|
+
"@radix-ui/react-select": "^2.4.1",
|
|
312
|
+
"@radix-ui/react-separator": "^1.2.0",
|
|
313
|
+
"@radix-ui/react-slider": "^1.6.1",
|
|
314
|
+
"@radix-ui/react-slot": "^1.5.0",
|
|
315
|
+
"@radix-ui/react-switch": "^1.4.1",
|
|
316
|
+
"@radix-ui/react-tabs": "^1.2.1",
|
|
317
|
+
"@radix-ui/react-toggle": "^1.2.1",
|
|
318
|
+
"@radix-ui/react-toggle-group": "^1.2.1",
|
|
319
|
+
"@radix-ui/react-tooltip": "^1.4.1",
|
|
320
|
+
"@tailwindcss/postcss": "^4.3.3",
|
|
321
|
+
"@tailwindcss/typography": "^0.5.20",
|
|
322
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
323
|
+
"@tsconfig/node26": "^26.0.1",
|
|
324
|
+
"@types/better-sqlite3": "^9.6.0",
|
|
325
|
+
"@types/three": "^0.187.0",
|
|
326
|
+
"@types/chrome": "^0.3.7",
|
|
327
|
+
"@types/express": "^5.0.6",
|
|
328
|
+
"@types/google.maps": "^3.66.9",
|
|
329
|
+
"@types/node": "^26.6.6",
|
|
330
|
+
"@types/react": "^19.3.0",
|
|
331
|
+
"@types/react-dom": "^19.3.0",
|
|
332
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
333
|
+
"add": "^2.0.9",
|
|
334
|
+
"autoprefixer": "^10.6.2",
|
|
335
|
+
"axios": "^1.21.0",
|
|
336
|
+
"better-sqlite3": "^13.0.3",
|
|
337
|
+
"bun-types": "^1.4.4",
|
|
338
|
+
"cheerio": "^1.2.0",
|
|
262
339
|
"class-variance-authority": "^0.7.1",
|
|
263
340
|
"clsx": "^2.1.1",
|
|
264
341
|
"cmdk": "^1.1.1",
|
|
342
|
+
"drizzle-kit": "^0.31.11",
|
|
343
|
+
"drizzle-orm": "^0.45.4",
|
|
265
344
|
"embla-carousel-react": "^8.6.0",
|
|
266
|
-
"
|
|
267
|
-
"
|
|
268
|
-
"
|
|
345
|
+
"emittery": "^2.2.0",
|
|
346
|
+
"esbuild": "^0.28.2",
|
|
347
|
+
"express": "^5.3.0",
|
|
348
|
+
"fast-check": "^4.10.2",
|
|
349
|
+
"framer-motion": "^13.5.1",
|
|
350
|
+
"hono": "^4.13.16",
|
|
351
|
+
"input-otp": "^1.5.0",
|
|
269
352
|
"jsdom": "26.1.0",
|
|
270
|
-
"lucide-react": "^
|
|
271
|
-
"
|
|
353
|
+
"lucide-react": "^1.66.0",
|
|
354
|
+
"mysql2": "^3.24.6",
|
|
355
|
+
"nanoid": "^6.0.2",
|
|
272
356
|
"next-themes": "^0.4.6",
|
|
273
|
-
"
|
|
274
|
-
"
|
|
275
|
-
"
|
|
276
|
-
"
|
|
277
|
-
"
|
|
278
|
-
"
|
|
279
|
-
"
|
|
280
|
-
"
|
|
281
|
-
"
|
|
282
|
-
"
|
|
283
|
-
"
|
|
284
|
-
"
|
|
357
|
+
"p-limit": "^7.3.3",
|
|
358
|
+
"p-retry": "^8.0.1",
|
|
359
|
+
"playwright": "^1.64.1",
|
|
360
|
+
"pnpm": "^12.16.1",
|
|
361
|
+
"postcss": "^8.5.32",
|
|
362
|
+
"prettier": "^3.9.10",
|
|
363
|
+
"prisma": "^7.10.1",
|
|
364
|
+
"react": "^19.3.1",
|
|
365
|
+
"react-day-picker": "^10.0.2",
|
|
366
|
+
"react-dom": "^19.3.1",
|
|
367
|
+
"react-hook-form": "^7.91.0",
|
|
368
|
+
"react-resizable-panels": "^4.16.1",
|
|
369
|
+
"recharts": "^3.10.1",
|
|
370
|
+
"sonner": "^2.0.8",
|
|
371
|
+
"streamdown": "^2.7.1",
|
|
372
|
+
"tailwind-merge": "^3.7.0",
|
|
373
|
+
"tailwindcss": "^4.3.3",
|
|
285
374
|
"tailwindcss-animate": "^1.0.7",
|
|
286
|
-
"
|
|
375
|
+
"tsup": "^8.5.1",
|
|
376
|
+
"tsx": "^4.23.15",
|
|
287
377
|
"tw-animate-css": "^1.4.0",
|
|
288
|
-
"typescript": "7.0.2",
|
|
378
|
+
"typescript": "^7.0.2",
|
|
289
379
|
"vaul": "^1.1.2",
|
|
290
|
-
"vite": "^8.
|
|
291
|
-
"vite-plugin-manus-runtime": "^0.0.
|
|
292
|
-
"vitest": "^
|
|
293
|
-
"
|
|
294
|
-
"
|
|
380
|
+
"vite": "^8.3.5",
|
|
381
|
+
"vite-plugin-manus-runtime": "^0.0.59",
|
|
382
|
+
"vitest": "^5.0.5",
|
|
383
|
+
"webpack": "^5.112.2",
|
|
384
|
+
"webpack-cli": "^6.0.1",
|
|
385
|
+
"wouter": "^3.13.0",
|
|
386
|
+
"yaml": "^2.9.1",
|
|
387
|
+
"zod": "^4.6.7"
|
|
295
388
|
},
|
|
296
389
|
"optionalDependencies": {
|
|
297
|
-
"commander": "^
|
|
390
|
+
"commander": "^15.0.0",
|
|
298
391
|
"dockerode": "^5.0.1",
|
|
299
|
-
"express": "^5.
|
|
392
|
+
"express": "^5.3.0"
|
|
300
393
|
},
|
|
301
394
|
"systemLibraries": {
|
|
302
395
|
"note": "system libraries, not npm packages (declared by nested_package.json v3 as dependencies; kept here as build-time system requirements only)",
|
|
@@ -310,9 +403,9 @@
|
|
|
310
403
|
"saddle": {
|
|
311
404
|
"date": "2026-08-23",
|
|
312
405
|
"toolchain": {
|
|
313
|
-
"node": "26.
|
|
406
|
+
"node": "26.12.0",
|
|
314
407
|
"nodeLts": "24.19.0",
|
|
315
|
-
"nodeCurrent": "26.
|
|
408
|
+
"nodeCurrent": "26.12.0",
|
|
316
409
|
"npm": "12.0.2",
|
|
317
410
|
"typescript": "7.0.2",
|
|
318
411
|
"python": "3.14.7",
|
package/passage.config
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"meta": {
|
|
3
3
|
"name": "passage.config",
|
|
4
4
|
"title": "saddle - Passage Configuration (3 homonym domains kept separate + host playbook)",
|
|
5
|
-
"version": "2.1.
|
|
5
|
+
"version": "2.1.6",
|
|
6
6
|
"date": "2026-08-22",
|
|
7
7
|
"language": "en",
|
|
8
8
|
"conceptSeparation": "'passage' has 3 distinct domains in the pool: (1) gateway - L7 Pingora reverse proxy (routes/upstreams/TLS 1.3); (2) passthrough - PCI device passthrough modes (VFIO/MDEV/MIG/vGPU/SR-IOV/vfio-user/hotplug/KVM/none); (3) network_binding - VM network bridge modes + host port binding (never localhost). A 4th section carries the AetherForge host-side VFIO playbook. Sections are NEVER merged.",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"gateway": {
|
|
57
57
|
"meta": {
|
|
58
58
|
"project": "saddle (grand merge)",
|
|
59
|
-
"version": "2.1.
|
|
59
|
+
"version": "2.1.6",
|
|
60
60
|
"schema": "passage.config",
|
|
61
61
|
"schemaversion": "2026.08.22",
|
|
62
62
|
"engine": "passage gateway v6",
|
package/performance.ts
CHANGED
|
File without changes
|
package/processors.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"meta": {
|
|
4
4
|
"name": "processors.json",
|
|
5
5
|
"title": "saddle - Unified Virtual Processor Database",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.0.127",
|
|
7
7
|
"date": "2026-08-22",
|
|
8
8
|
"language": "en",
|
|
9
9
|
"description": "Union of the v5 canonical CPU database (6 x86_64 identities), the e2ugh processor catalog (55 SKUs incl. ARM/Apple/Xeon; lineage kept), Zen5/X3D microarchitecture specs and pool minis. Field conflicts resolved V5-first (model_name/max_boost_ghz/tdp_watts canonical); OMNI complementary fields (arch, core_type, topology, memory_support, release_date) merged in place. Versions re-pinned date-first 2026-08-22.",
|
package/qemu.config
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"meta": {
|
|
3
3
|
"name": "qemu.config",
|
|
4
4
|
"title": "saddle - QEMU Configuration (canonical JSON; sources: S6 TOML + v5 spec 11.1.0 + libvirt overlay)",
|
|
5
|
-
"version": "2.
|
|
5
|
+
"version": "2.0.154",
|
|
6
6
|
"date": "2026-08-22",
|
|
7
7
|
"language": "en",
|
|
8
8
|
"format": "JSON (canonical v2 schema; sources were S6 TOML + V5 JSON schema + libvirt conf overlay)",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"githubSetupPython": "actions/setup-python@v5.4.0",
|
|
91
91
|
"platformKernel": "6.11.0+"
|
|
92
92
|
},
|
|
93
|
-
"version": "2.
|
|
93
|
+
"version": "2.0.154",
|
|
94
94
|
"title": "saddle - QEMU Configuration (canonical JSON; sources: S6 TOML + v5 spec 11.1.0 + libvirt overlay)",
|
|
95
95
|
"project": "e2ugh v6",
|
|
96
96
|
"toolchainV5": {
|
package/qemubridge.py
CHANGED
|
File without changes
|
package/quantum.ts
CHANGED
|
File without changes
|
package/render.ts
CHANGED
|
File without changes
|