@wenathlan/saddle 2.0.161 → 2.0.163

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/package.json CHANGED
@@ -1,50 +1,7 @@
1
1
  {
2
2
  "name": "@wenathlan/saddle",
3
- "version": "2.0.161",
3
+ "version": "2.0.163",
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
- "type": "module",
6
- "private": false,
7
- "license": "GPL-3.0-only",
8
- "author": "Wenathlan",
9
- "sideEffects": false,
10
- "main": "./index.ts",
11
- "module": "./index.ts",
12
- "browser": "./index.ts",
13
- "types": "./index.ts",
14
- "packageManager": "pnpm@12.3.4",
15
- "publishConfig": {
16
- "access": "public"
17
- },
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",
35
- "xcode": {
36
- "uuid": "11.1.1"
37
- },
38
- "@grpc/grpc-js": "1.14.5"
39
- },
40
- "repository": {
41
- "type": "git",
42
- "url": "https://github.com/wenathlan/devthink"
43
- },
44
- "bugs": {
45
- "url": "https://github.com/wenathlan/saddle/issues"
46
- },
47
- "homepage": "https://github.com/wenathlan/saddle#readme",
48
5
  "keywords": [
49
6
  "distributed computing",
50
7
  "virtual memory",
@@ -61,39 +18,20 @@
61
18
  "mesa",
62
19
  "ghcr"
63
20
  ],
64
- "engines": {
65
- "bare": "^1.18.0",
66
- "bun": "^1.4.4",
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.2.1",
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"
88
- },
89
- "peerDependencies": {
90
- "playwright": "^1.63.0"
21
+ "homepage": "https://github.com/wenathlan/saddle#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/wenathlan/saddle/issues"
91
24
  },
92
- "peerDependenciesMeta": {
93
- "playwright": {
94
- "optional": true
95
- }
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "https://github.com/wenathlan/devthink"
96
28
  },
29
+ "license": "GPL-3.0-only",
30
+ "author": "Wenathlan",
31
+ "type": "module",
32
+ "sideEffects": false,
33
+ "main": "./index.ts",
34
+ "types": "./index.ts",
97
35
  "bin": {
98
36
  "saddle": "./cli.ts"
99
37
  },
@@ -204,6 +142,34 @@
204
142
  "tiers.ts",
205
143
  "quantum.ts"
206
144
  ],
145
+ "engines": {
146
+ "bare": "^1.18.0",
147
+ "bun": "^1.4.4",
148
+ "cargo": ">=1.85.0",
149
+ "chrome": "^16.0.912",
150
+ "cnpm": "^9.4.0",
151
+ "corepack": "^0.35.0",
152
+ "deno": "^2.9.5",
153
+ "dotnet": ">=8.0.0",
154
+ "ecmascript": "^5.0.0",
155
+ "firefox": ">=0.8.0",
156
+ "go": ">=1.24.0",
157
+ "iojs": "^1.0.0",
158
+ "java": ">=17",
159
+ "node": ">=26.13.0 <27",
160
+ "npm": "^12.2.1",
161
+ "pnpm": "^12.6.0",
162
+ "python": ">=3.11.0",
163
+ "rust": ">=1.85.0",
164
+ "teleport": ">=0.2.0",
165
+ "typescript": "^5.8.0",
166
+ "v": "^0.5.2",
167
+ "vscode": "^1.118.0",
168
+ "yarn": "^4.17.1"
169
+ },
170
+ "peerDependencies": {
171
+ "playwright": "^1.63.0"
172
+ },
207
173
  "scripts": {
208
174
  "build:engine": "node scriptsbuildengine.ts",
209
175
  "check": "tsc -p tsconfig.json --noEmit",
@@ -248,9 +214,9 @@
248
214
  "vm:create": "node --import tsx ./cli.ts vm",
249
215
  "vm:validate": "node --import tsx ./cli.ts vmlint",
250
216
  "gpu:list": "node --import tsx ./cli.ts gpus",
251
- "docker:build": "docker build -f Dockerfile -t saddle:2.0.161 .",
252
- "docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.0.161",
253
- "docker:health": "docker run --rm saddle:2.0.161 qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || true",
217
+ "docker:build": "docker build -f Dockerfile -t saddle:2.0.163 .",
218
+ "docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.0.163",
219
+ "docker:health": "docker run --rm saddle:2.0.163 qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || true",
254
220
  "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'",
255
221
  "py:bridge": "python3 qemubridge.py",
256
222
  "py:test": "python3 -m pytest -q || python3 qemubridge.py",
@@ -386,6 +352,40 @@
386
352
  "yaml": "^2.9.1",
387
353
  "zod": "^4.6.7"
388
354
  },
355
+ "overrides": {
356
+ "uuid": "^11.1.1",
357
+ "deepmerge-ts": "^8.0.0",
358
+ "esbuild": "^0.28.2",
359
+ "follow-redirects": "^1.16.2",
360
+ "minimatch": "^11.0.3",
361
+ "glob": "^14.0.3",
362
+ "mysql2": "^3.24.6",
363
+ "postcss-selector-parser": "^7.1.6",
364
+ "source-map-js": "1.2.2",
365
+ "proxy-addr": "2.0.8",
366
+ "body-parser": "^2.4.0",
367
+ "fast-uri": "^3.1.9",
368
+ "zod": "^4.6.7",
369
+ "undici": "^7.30.1",
370
+ "katex": "^0.18.2",
371
+ "shell-quote": "^1.11.0",
372
+ "xcode": {
373
+ "uuid": "11.1.1"
374
+ },
375
+ "@grpc/grpc-js": "1.14.5"
376
+ },
377
+ "publishConfig": {
378
+ "access": "public"
379
+ },
380
+ "packageManager": "pnpm@12.3.4",
381
+ "private": false,
382
+ "module": "./index.ts",
383
+ "browser": "./index.ts",
384
+ "peerDependenciesMeta": {
385
+ "playwright": {
386
+ "optional": true
387
+ }
388
+ },
389
389
  "optionalDependencies": {
390
390
  "commander": "^15.0.0",
391
391
  "dockerode": "^5.0.1",
package/sandbox.ts CHANGED
@@ -142,11 +142,14 @@ export type SandboxState = {
142
142
  };
143
143
 
144
144
  /** command result matching the api exec contract; clear is set by the
145
- * clear command so the terminal can wipe the screen. */
145
+ * clear command so the terminal can wipe the screen. code carries the
146
+ * machine refusal code of a structured honest answer — the sandbox never
147
+ * pretends a binary the image does not carry. */
146
148
  export type DispatchResult = {
147
149
  output: string;
148
150
  exitCode: number;
149
151
  clear?: boolean;
152
+ code?: string;
150
153
  };
151
154
 
152
155
  /** optional exec context provided by the api host. */
@@ -1379,7 +1382,7 @@ export function bootSequence(
1379
1382
  `${stamp(onlinetime + 0.0837)} rusticl: opencl ${mesastack.opencl} on llvmpipe, features fp64 (fp16 default since 25.2)`,
1380
1383
  `${stamp(onlinetime + 0.091)} virtualgpu: identity ${gpuspec.name} [${gpuspec.pcivendor}:${gpuspec.pcidevice}] ${gpuspec.memtype} ${gpuspec.vrammib / 1024} GB`,
1381
1384
  `${stamp(onlinetime + 0.0922)} nvml shim: FAKE_MODEL="${gpuspec.name}" FAKE_VRAM=${gpuspec.smireportedmib} (fake-nvidia-smi adapter ready)`,
1382
- `${stamp(onlinetime + 0.1045)} saddle: virtual hardware engine v2.0.127, sandbox created -> running`,
1385
+ `${stamp(onlinetime + 0.1045)} saddle: virtual hardware engine v2.0.162, sandbox created -> running`,
1383
1386
  `${stamp(onlinetime + 0.1047)} saddle: persistent workspace: ${humanbytes(quota)} quota, data stays with the sandbox id`,
1384
1387
  `${stamp(onlinetime + 0.1046)} Freeing unused kernel image memory`,
1385
1388
  ];
@@ -1452,8 +1455,8 @@ function helpText(): string {
1452
1455
  ['uname -a', 'kernel and architecture line'],
1453
1456
  ['ls /etc/virtual', 'virtual hardware definition files'],
1454
1457
  ['env', 'mesa llvmpipe environment variables'],
1455
- ['docker --version', 'docker engine version'],
1456
- ['qemu-system-x86_64 --version', 'qemu bridge version'],
1458
+ ['docker --version', 'honest refusal: the binary is absent from the sandbox image'],
1459
+ ['qemu-system-x86_64 --version', 'honest refusal: the binary is absent from the sandbox image'],
1457
1460
  ['uptime', 'sandbox uptime and load average'],
1458
1461
  ['whoami', 'current user'],
1459
1462
  ['neofetch', 'saddle ascii logo and sandbox specs'],
@@ -1497,7 +1500,7 @@ function neofetch(state: SandboxState): string {
1497
1500
  const info = [
1498
1501
  `root@${state.hostname}`,
1499
1502
  '-----------------',
1500
- 'OS: saddle linux (virtual hardware engine v2.0.127)',
1503
+ 'OS: saddle linux (virtual hardware engine v2.0.162)',
1501
1504
  'Host: firecracker microvm (125 ms boot)',
1502
1505
  `Kernel: ${state.kernel}`,
1503
1506
  `Uptime: ${uptimeText}`,
@@ -1534,7 +1537,7 @@ function envText(state: SandboxState): string {
1534
1537
  ...mesaenv(state.vcpus),
1535
1538
  FAKE_MODEL: state.gpuspec.name,
1536
1539
  FAKE_VRAM: String(mig !== null ? mig.slicegb * 1024 : state.gpuspec.smireportedmib),
1537
- SADDLE_VERSION: '2.0.127',
1540
+ SADDLE_VERSION: '2.0.162',
1538
1541
  SADDLE_SANDBOX: state.id,
1539
1542
  SADDLE_STATE: 'running',
1540
1543
  SADDLE_CPU: state.model,
@@ -1826,15 +1829,18 @@ export function dispatch(
1826
1829
  }
1827
1830
  case 'env':
1828
1831
  return { output: envText(state), exitCode: 0 };
1832
+ /* the honesty law: the sandbox image carries no container daemon
1833
+ * and no emulator binary, so the shell never fakes a version
1834
+ * banner — the answer is the structured honest refusal, the
1835
+ * machine code rides the result and the message names the absence
1836
+ * and the real surface (the host container and qemu runtimes ride
1837
+ * the edge plane lanes, never a pretended guest binary). */
1829
1838
  case 'docker':
1830
- return { output: 'Docker version 29.7.2, build 5ea4c1f', exitCode: 0 };
1831
1839
  case 'qemu-system-x86_64':
1832
1840
  return {
1833
- output: [
1834
- 'QEMU emulator version 11.1.0 (saddle bridge)',
1835
- 'Copyright (c) 2003-2026 Fabrice Bellard and the QEMU Project developers',
1836
- ].join('\n'),
1837
- exitCode: 0,
1841
+ output: `bash: ${head}: the ${head} binary is absent from this sandbox image (SANDBOX_IMAGE_ABSENT) — the sandbox mounts no container daemon and no emulator, the engine drives the host container and qemu lanes through the edge plane`,
1842
+ exitCode: 127,
1843
+ code: 'SANDBOX_IMAGE_ABSENT',
1838
1844
  };
1839
1845
  case 'uptime':
1840
1846
  return { output: uptimeLine(state), exitCode: 0 };
package/tsconfig.json CHANGED
@@ -8,20 +8,20 @@
8
8
  // one project keeps covering the Sol surface.
9
9
  {
10
10
  "compilerOptions": {
11
- "module": "NodeNext",
12
- "moduleResolution": "NodeNext",
13
11
  "target": "ES2024",
14
- "lib": ["ES2024", "dom", "dom.iterable"],
15
- "jsx": "react-jsx",
16
12
  "noEmit": true,
17
- "allowImportingTsExtensions": true,
13
+ "module": "NodeNext",
18
14
  "strict": false,
19
15
  "noCheck": true,
16
+ "lib": ["es2024", "dom", "dom.iterable"],
17
+ "jsx": "react-jsx",
20
18
  "esModuleInterop": true,
19
+ "allowSyntheticDefaultImports": true,
21
20
  "skipLibCheck": true,
21
+ "allowImportingTsExtensions": true,
22
22
  "isolatedModules": true,
23
- "allowSyntheticDefaultImports": true,
24
23
  "forceConsistentCasingInFileNames": true,
24
+ "moduleResolution": "NodeNext",
25
25
  "types": ["node", "vite/client"],
26
26
  "paths": {
27
27
  "@/*": ["./sol/*", "./*"],
package/workloadlaw.ts CHANGED
File without changes