@wenathlan/saddle 2.0.6 → 2.0.151

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 (284) hide show
  1. package/Dockerfile +70 -24
  2. package/LICENSE +0 -0
  3. package/README.md +19 -3
  4. package/alternatives.ts +0 -0
  5. package/biome.jsonc +127 -0
  6. package/boards.json +2 -2
  7. package/compute.ts +4 -4
  8. package/cores.json +2 -2
  9. package/docker.config +16 -9
  10. package/docs/.gitkeep +0 -0
  11. package/docs/CONVERSA.txt +0 -0
  12. package/docs/actionrecorder.md +0 -0
  13. package/docs/actionsincident.md +0 -0
  14. package/docs/alternatives.md +0 -0
  15. package/docs/architecture-1.8.19.md +0 -0
  16. package/docs/architecture-1.8.19.mmd +0 -0
  17. package/docs/architecture-1.8.19.png +0 -0
  18. package/docs/architecture.md +3 -3
  19. package/docs/artifactavailability.md +0 -0
  20. package/docs/artifactresearch-1.8.9.md +0 -0
  21. package/docs/assets/architecture.svg +0 -0
  22. package/docs/assets/saddle-browser-trace.webp +0 -0
  23. package/docs/assets/saddle-hero-bridge.webp +0 -0
  24. package/docs/assets/saddle-mark.webp +0 -0
  25. package/docs/assets/saddle-runtime-map.webp +0 -0
  26. package/docs/assets/saddlemark.svg +0 -0
  27. package/docs/batches-1816-1820.md +0 -0
  28. package/docs/brancharchive-2026-08-18.md +0 -0
  29. package/docs/branchaudit.md +0 -0
  30. package/docs/browser.md +0 -0
  31. package/docs/capabilityreport.md +0 -0
  32. package/docs/comparativeaudit.md +0 -0
  33. package/docs/consolidation.md +0 -0
  34. package/docs/containerplatforms-1.8.17.md +0 -0
  35. package/docs/containerplatforms-2.1.0.md +73 -0
  36. package/docs/documentmap-1.8.12.md +0 -0
  37. package/docs/e2ugh-engine.md +0 -0
  38. package/docs/ecosystemplan.md +0 -0
  39. package/docs/enginearchitecture.md +0 -0
  40. package/docs/example-localjob.ts +0 -0
  41. package/docs/extension.md +0 -0
  42. package/docs/featureaudit.md +0 -0
  43. package/docs/flatbuildresearch-1.8.11.md +0 -0
  44. package/docs/gapmatrix.md +0 -0
  45. package/docs/hardware.md +0 -0
  46. package/docs/libraryapi.md +0 -0
  47. package/docs/licenseaudit-1.8.12.md +0 -0
  48. package/docs/logs/examplesession.json +54 -0
  49. package/docs/memoryengine.md +0 -0
  50. package/docs/mobileconversionresearch-1.8.10.md +0 -0
  51. package/docs/modes.md +0 -0
  52. package/docs/native-wrappers.md +38 -0
  53. package/docs/nativeidentityresearch-1.8.11.md +0 -0
  54. package/docs/optimization.md +0 -0
  55. package/docs/packageaudit185.md +0 -0
  56. package/docs/performance.md +0 -0
  57. package/docs/planning.1.8.18.md +0 -0
  58. package/docs/planning.1.8.19.md +0 -0
  59. package/docs/planning.engine.md +186 -0
  60. package/docs/platformpipelineaudit.md +0 -0
  61. package/docs/platformpipelines.md +0 -0
  62. package/docs/productindex.md +0 -0
  63. package/docs/registryresearch.md +0 -0
  64. package/docs/release.md +0 -0
  65. package/docs/release17notes.md +0 -0
  66. package/docs/release181notes.md +0 -0
  67. package/docs/release182notes.md +0 -0
  68. package/docs/release184notes.md +0 -0
  69. package/docs/release185notes.md +0 -0
  70. package/docs/release18notes.md +0 -0
  71. package/docs/releaseassets.md +0 -0
  72. package/docs/releasenotes-1.8.12.md +0 -0
  73. package/docs/releasenotes-1.8.13.md +0 -0
  74. package/docs/releasenotes-1.8.14.md +0 -0
  75. package/docs/releasenotes-1.8.15.md +0 -0
  76. package/docs/releasenotes-1.8.16.md +0 -0
  77. package/docs/releasenotes-1.8.17.md +0 -0
  78. package/docs/releasenotes-1.8.18.md +0 -0
  79. package/docs/releasenotes-1.8.19.md +0 -0
  80. package/docs/reorganization-1.8.8.md +0 -0
  81. package/docs/reorganization-1.8.9.md +0 -0
  82. package/docs/repo-analysis-1.8.21.json +0 -0
  83. package/docs/repo-candidates-1.8.21.jsonl +0 -0
  84. package/docs/repo-research-1.8.16.md +0 -0
  85. package/docs/repo-research-1.8.21.md +0 -0
  86. package/docs/repo-selected-1.8.21.json +0 -0
  87. package/docs/repo-synthesis-1.8.16.md +0 -0
  88. package/docs/repo-synthesis-1.8.21.md +0 -0
  89. package/docs/research-1.8.18-isolation.md +0 -0
  90. package/docs/research-1.8.19-virtual-browser.md +0 -0
  91. package/docs/roadmapp2p3.md +0 -0
  92. package/docs/s3compatible.md +0 -0
  93. package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
  94. package/docs/scanningresearch-1.8.11.md +0 -0
  95. package/docs/security.md +0 -0
  96. package/docs/securityaudit-1.8.7.md +0 -0
  97. package/docs/securityreferences-1.8.11.md +0 -0
  98. package/docs/securityresearch-1.8.11.md +0 -0
  99. package/docs/signingresearch-1.8.12.md +0 -0
  100. package/docs/signingwithoutcertificates.md +0 -0
  101. package/docs/signpathapplication.md +0 -0
  102. package/docs/sitemap.md +0 -0
  103. package/docs/tauri-glib-risk-1.8.11.md +0 -0
  104. package/docs/todo-1.8.15.md +0 -0
  105. package/docs/todo-1.8.16.md +0 -0
  106. package/docs/todo-1.8.18.md +0 -0
  107. package/docs/todo-1.8.19.md +0 -0
  108. package/docs/todo.md +0 -0
  109. package/docs/toolchainresearch-1.8.9.md +0 -0
  110. package/docs/toolchains.md +0 -0
  111. package/docs/usage.md +0 -0
  112. package/docs/viability.md +0 -0
  113. package/docs/virtualization.md +0 -0
  114. package/docs/web-duplicatecleanup.md +0 -0
  115. package/docs/web-ideas.md +0 -0
  116. package/docs/workflowimprovements-2026-08-19.md +0 -0
  117. package/docs/workflowinputs.md +0 -0
  118. package/docs/workflowoperations.md +0 -0
  119. package/gpumonitor.cpp +0 -0
  120. package/gpus.json +1 -1
  121. package/index.ts +15 -15
  122. package/manifest.json +20 -0
  123. package/media.ts +0 -0
  124. package/modalityregistry.ts +156 -0
  125. package/mttg.config +1 -1
  126. package/orchestrator.ts +5 -2
  127. package/package.json +147 -97
  128. package/passage.config +2 -2
  129. package/performance.ts +0 -0
  130. package/processors.json +1 -1
  131. package/qemu.config +2 -2
  132. package/qemubridge.py +0 -0
  133. package/quantum.ts +0 -0
  134. package/render.ts +0 -0
  135. package/scheduler.ts +0 -0
  136. package/security.ts +0 -0
  137. package/tiers.ts +9 -3
  138. package/tsconfig.json +22 -17
  139. package/virtualcpu.ts +1 -0
  140. package/virtualgpu.ts +1 -0
  141. package/virtualhardware.c +0 -0
  142. package/virtualhardware.json +2 -2
  143. package/virtualization.ts +0 -0
  144. package/virtualizationcore.cpp +0 -0
  145. package/virtualmemory.ts +0 -0
  146. package/vm.config.json +3 -3
  147. package/biome.json +0 -153
  148. package/dist/acquisition.d.ts +0 -359
  149. package/dist/acquisition.d.ts.map +0 -1
  150. package/dist/acquisition.js +0 -629
  151. package/dist/acquisition.js.map +0 -1
  152. package/dist/alternatives.d.ts +0 -509
  153. package/dist/alternatives.d.ts.map +0 -1
  154. package/dist/alternatives.js +0 -951
  155. package/dist/alternatives.js.map +0 -1
  156. package/dist/automation.d.ts +0 -426
  157. package/dist/automation.d.ts.map +0 -1
  158. package/dist/automation.js +0 -561
  159. package/dist/automation.js.map +0 -1
  160. package/dist/browser.d.ts +0 -562
  161. package/dist/browser.d.ts.map +0 -1
  162. package/dist/browser.js +0 -1057
  163. package/dist/browser.js.map +0 -1
  164. package/dist/capacitor.config.d.ts +0 -13
  165. package/dist/capacitor.config.d.ts.map +0 -1
  166. package/dist/capacitor.config.js +0 -26
  167. package/dist/capacitor.config.js.map +0 -1
  168. package/dist/cli.d.ts +0 -17
  169. package/dist/cli.d.ts.map +0 -1
  170. package/dist/cli.js +0 -111
  171. package/dist/cli.js.map +0 -1
  172. package/dist/communication.d.ts +0 -192
  173. package/dist/communication.d.ts.map +0 -1
  174. package/dist/communication.js +0 -418
  175. package/dist/communication.js.map +0 -1
  176. package/dist/compute.d.ts +0 -1161
  177. package/dist/compute.d.ts.map +0 -1
  178. package/dist/compute.js +0 -2273
  179. package/dist/compute.js.map +0 -1
  180. package/dist/distribution.d.ts +0 -529
  181. package/dist/distribution.d.ts.map +0 -1
  182. package/dist/distribution.js +0 -811
  183. package/dist/distribution.js.map +0 -1
  184. package/dist/execution.d.ts +0 -530
  185. package/dist/execution.d.ts.map +0 -1
  186. package/dist/execution.js +0 -761
  187. package/dist/execution.js.map +0 -1
  188. package/dist/format.d.ts +0 -19
  189. package/dist/format.d.ts.map +0 -1
  190. package/dist/format.js +0 -60
  191. package/dist/format.js.map +0 -1
  192. package/dist/foundation.d.ts +0 -176
  193. package/dist/foundation.d.ts.map +0 -1
  194. package/dist/foundation.js +0 -309
  195. package/dist/foundation.js.map +0 -1
  196. package/dist/index.d.ts +0 -735
  197. package/dist/index.d.ts.map +0 -1
  198. package/dist/index.js +0 -1020
  199. package/dist/index.js.map +0 -1
  200. package/dist/integration.d.ts +0 -236
  201. package/dist/integration.d.ts.map +0 -1
  202. package/dist/integration.js +0 -236
  203. package/dist/integration.js.map +0 -1
  204. package/dist/intelligence.d.ts +0 -94
  205. package/dist/intelligence.d.ts.map +0 -1
  206. package/dist/intelligence.js +0 -145
  207. package/dist/intelligence.js.map +0 -1
  208. package/dist/isolation.d.ts +0 -129
  209. package/dist/isolation.d.ts.map +0 -1
  210. package/dist/isolation.js +0 -96
  211. package/dist/isolation.js.map +0 -1
  212. package/dist/media.d.ts +0 -344
  213. package/dist/media.d.ts.map +0 -1
  214. package/dist/media.js +0 -986
  215. package/dist/media.js.map +0 -1
  216. package/dist/modes.d.ts +0 -359
  217. package/dist/modes.d.ts.map +0 -1
  218. package/dist/modes.js +0 -134
  219. package/dist/modes.js.map +0 -1
  220. package/dist/operations.d.ts +0 -67
  221. package/dist/operations.d.ts.map +0 -1
  222. package/dist/operations.js +0 -94
  223. package/dist/operations.js.map +0 -1
  224. package/dist/orchestrator.d.ts +0 -1339
  225. package/dist/orchestrator.d.ts.map +0 -1
  226. package/dist/orchestrator.js +0 -4308
  227. package/dist/orchestrator.js.map +0 -1
  228. package/dist/packager/targetcli.js +0 -4
  229. package/dist/performance.d.ts +0 -416
  230. package/dist/performance.d.ts.map +0 -1
  231. package/dist/performance.js +0 -827
  232. package/dist/performance.js.map +0 -1
  233. package/dist/quantum.d.ts +0 -810
  234. package/dist/quantum.d.ts.map +0 -1
  235. package/dist/quantum.js +0 -2073
  236. package/dist/quantum.js.map +0 -1
  237. package/dist/render.d.ts +0 -381
  238. package/dist/render.d.ts.map +0 -1
  239. package/dist/render.js +0 -1073
  240. package/dist/render.js.map +0 -1
  241. package/dist/scheduler.d.ts +0 -596
  242. package/dist/scheduler.d.ts.map +0 -1
  243. package/dist/scheduler.js +0 -1259
  244. package/dist/scheduler.js.map +0 -1
  245. package/dist/security.d.ts +0 -501
  246. package/dist/security.d.ts.map +0 -1
  247. package/dist/security.js +0 -1170
  248. package/dist/security.js.map +0 -1
  249. package/dist/server.d.ts +0 -21
  250. package/dist/server.d.ts.map +0 -1
  251. package/dist/server.js +0 -52
  252. package/dist/server.js.map +0 -1
  253. package/dist/tiers.d.ts +0 -1002
  254. package/dist/tiers.d.ts.map +0 -1
  255. package/dist/tiers.js +0 -2165
  256. package/dist/tiers.js.map +0 -1
  257. package/dist/virtual.d.ts +0 -641
  258. package/dist/virtual.d.ts.map +0 -1
  259. package/dist/virtual.js +0 -1285
  260. package/dist/virtual.js.map +0 -1
  261. package/dist/virtualcpu.d.ts +0 -316
  262. package/dist/virtualcpu.d.ts.map +0 -1
  263. package/dist/virtualcpu.js +0 -1180
  264. package/dist/virtualcpu.js.map +0 -1
  265. package/dist/virtualgpu.d.ts +0 -345
  266. package/dist/virtualgpu.d.ts.map +0 -1
  267. package/dist/virtualgpu.js +0 -1000
  268. package/dist/virtualgpu.js.map +0 -1
  269. package/dist/virtualization.d.ts +0 -607
  270. package/dist/virtualization.d.ts.map +0 -1
  271. package/dist/virtualization.js +0 -1187
  272. package/dist/virtualization.js.map +0 -1
  273. package/dist/virtualmemory.d.ts +0 -818
  274. package/dist/virtualmemory.d.ts.map +0 -1
  275. package/dist/virtualmemory.js +0 -1796
  276. package/dist/virtualmemory.js.map +0 -1
  277. package/dist/webscrape.d.ts +0 -720
  278. package/dist/webscrape.d.ts.map +0 -1
  279. package/dist/webscrape.js +0 -2697
  280. package/dist/webscrape.js.map +0 -1
  281. package/docs/example-publicapi.ts +0 -7
  282. package/web/extension/manifest.json +0 -23
  283. package/web/readme.md +0 -382
  284. package/web/tsconfig.json +0 -25
File without changes
File without changes
File without changes
File without changes
File without changes
package/docs/extension.md CHANGED
File without changes
File without changes
File without changes
package/docs/gapmatrix.md CHANGED
File without changes
package/docs/hardware.md CHANGED
File without changes
File without changes
File without changes
@@ -0,0 +1,54 @@
1
+ {
2
+ "version": 1,
3
+ "session": {
4
+ "id": "examplesession-0001",
5
+ "browser": "brave",
6
+ "seed": "examplesession-seed-0001"
7
+ },
8
+ "events": [
9
+ {
10
+ "t": 140,
11
+ "type": "move",
12
+ "x": 120,
13
+ "y": 90
14
+ },
15
+ {
16
+ "t": 300,
17
+ "type": "move",
18
+ "x": 180,
19
+ "y": 140
20
+ },
21
+ {
22
+ "t": 480,
23
+ "type": "click",
24
+ "x": 180,
25
+ "y": 140
26
+ },
27
+ {
28
+ "t": 680,
29
+ "type": "type",
30
+ "key": "k"
31
+ },
32
+ {
33
+ "t": 900,
34
+ "type": "move",
35
+ "x": 240,
36
+ "y": 200
37
+ },
38
+ {
39
+ "t": 1140,
40
+ "type": "click",
41
+ "x": 240,
42
+ "y": 200
43
+ },
44
+ {
45
+ "t": 1400,
46
+ "type": "scroll",
47
+ "dy": 320
48
+ }
49
+ ],
50
+ "captcha": {
51
+ "kind": "hcaptcha",
52
+ "passed": true
53
+ }
54
+ }
File without changes
File without changes
package/docs/modes.md CHANGED
File without changes
@@ -0,0 +1,38 @@
1
+ # Saddle native wrappers (generated doctrine)
2
+
3
+ The native wrappers — Android, iOS and desktop — are **generated on the CI runners and never committed**. The repository carries only the conversion configs and the icon source; the Gradle/Xcode/Rust envelopes are 100% regenerable toolchain output (audited in the 2.1.0 wave: `web/android` and `web/ios` were stock Capacitor templates, and the former `web/desktop` Rust files were 12 lines of Tauri boilerplate).
4
+
5
+ ## Doctrine
6
+
7
+ - **Generated on the runners, never committed**: the mobile workflows run `npx cap add android` / `npx cap add ios` into `build/native/` (gitignored); the desktop workflow scaffolds the Tauri Rust envelope (Cargo.toml, main.rs, lib.rs, build.rs) via heredoc into `build/native/desktop`. The historical templates remain recoverable from git history.
8
+ - **Single icon source**: `web/icon.svg` is the one source of every native icon family. Runners derive the Android mipmaps/splashs, the iOS AppIcon set and the Tauri bundle icons from it (`npx cap assets` equivalents and `npx --yes @tauri-apps/cli@2.11.4 icon web/icon.svg --output build/native/desktop/icons`).
9
+ - **Versions injected via `SADDLE_VERSION` env**: the workflows patch the generated `tauri.conf.json` copy, the Cargo manifest, the Gradle config and the iOS project with the resolved release version at build time — no committed file carries a stale native version.
10
+ - **One conversion config pair**: `web/capacitor.config.ts` (the web root, where the Capacitor CLI resolves it: `webDir` = `dist/public`, `android.path`/`ios.path` = `../build/native/{android,ios}` at the repository root) and `tauri.conf.json` (the repository root, `frontendDist` = `web/dist/public`, `bundle.icon` relative to the scaffold directory where the runner copies this config).
11
+
12
+ ## Android surface (from the retired `web/android/README.md`)
13
+
14
+ The Android surface is a Capacitor conversion target for the shared Saddle web application. The TypeScript library remains the source of engine logic, while the compiled `web/dist/public` directory supplies the WebView payload. The generated project owns application metadata, Gradle configuration, resources and signing hooks only. The workflow runs `npm run web:build:pages`, `npx cap sync android`, regenerates the Saddle icon family from `web/icon.svg` and executes Gradle release tasks. Release builds enable R8 code shrinking and resource shrinking. A production keystore is never committed; `ANDROID_KEY_BASE64`, `ANDROID_KEY_ALIAS`, `ANDROID_STORE_PASSWORD` and `ANDROID_KEY_PASSWORD` are repository secret contracts. A manual test run may opt into a clearly labeled CI test key, but that output is not a trusted store artifact. The public artifact contract is version-derived and uses dotted lowercase names such as `saddle.apk.<version>.apk` and `saddle.aab.<version>.aab`; the release manifest records the signing status and the workflow verifies the APK and AAB signatures before upload.
15
+
16
+ ## iOS surface (from the retired `web/ios/README.md`)
17
+
18
+ The iOS surface is a Capacitor conversion target for the shared Saddle web application. The TypeScript library and the compiled `web/dist/public` directory remain authoritative; the generated Xcode project owns only platform metadata, WebView hosting, entitlements and caller-provided signing configuration. The workflow runs on macOS, synchronizes the web output with `npx cap sync ios` and builds an IPA only when Apple certificates, provisioning profiles and export settings are explicitly configured. No signing material is stored in the repository, and an unsigned or unprovisioned build is never described as App Store ready. The public artifact contract is version-derived and uses the dotted lowercase pattern `saddle.ipa.<version>.ipa`.
19
+
20
+ ## Desktop surface (from the retired `web/desktop/README.md`)
21
+
22
+ The desktop surface is the Saddle browser application: one Tauri application wrapping the `web/` build. Windows, Linux and macOS use the same web assets, compiled library contracts, window policy and release version; platform differences are limited to native WebView integration, installer format and caller-owned signing. The Rust entrypoint, Cargo manifest and Tauri configuration are scaffolded by the runner (heredoc) — the frontend is `web/dist/public`, generated by `npm run web:build:pages`; the shell never copies or reimplements React routes, storage logic or engine logic. Local regeneration commands:
23
+
24
+ ```bash
25
+ npm ci
26
+ mkdir -p build/native/desktop && cd build/native/desktop
27
+ # heredoc Cargo.toml / main.rs / lib.rs / build.rs here (as the workflow does)
28
+ npx --yes @tauri-apps/cli@2.11.4 icon ../../web/icon.svg --output icons
29
+ cp ../../../tauri.conf.json .
30
+ npx --yes @tauri-apps/cli@2.11.4 dev
31
+ npx --yes @tauri-apps/cli@2.11.4 build --ci --no-sign --bundles deb,rpm,appimage
32
+ ```
33
+
34
+ The release workflow runs the native command on the matching GitHub-hosted runner, attaches only files that were actually generated and renames them to `saddle.browser.<version>.<format>`. Signing, notarization, Microsoft Store submission, Snap publication, Flatpak publication and Apple App Store submission require caller-owned credentials and are not embedded in this repository.
35
+
36
+ ## Weight removed in the 2.1.0 flatten (shadcn kit pruning, rule 98)
37
+
38
+ The static template kit `web/components/ui/` carried 50 files; only the four referenced by the live React tree survived as loose files at the web root (`button.tsx`, `card.tsx`, `tooltip.tsx`, `sonner.tsx`). The 46 unreferenced template components were deleted as dead weight (OAuth-portal template, never imported by any live page): accordion, alert, alert-dialog, aspect-ratio, avatar, badge, breadcrumb, button-group, calendar, carousel, chart, checkbox, collapsible, command, context-menu, dialog, drawer, dropdown-menu, empty, field, form, hover-card, input, input-group, input-otp, item, kbd, label, menubar, navigation-menu, pagination, popover, progress, radio-group, resizable, scroll-area, select, separator, sheet, sidebar, skeleton, slider, spinner, switch, table, tabs, textarea, toggle, toggle-group. `web/components.json` (zero readers among tests and source) and the whole `web/hooks/` folder (useMobile/useComposition/usePersistFn — imported only by the pruned kit and the dead `Map.tsx`) were deleted with it.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,186 @@
1
+ # planning.engine — the saddle engine ladder (the sandbox that actually runs)
2
+
3
+ > the owner order: the interface exists, the engine must WORK — the saddle
4
+ > engine planned for real and wired into the whole system, 100% customizable
5
+ > (storage, ram, aliases, drivers, every knob editable through the api), the
6
+ > git storage and the github tree system living in the db, the sandbox
7
+ > modalities opening with their drivers (vgpu, vcpu, memory) running real on
8
+ > the hosts and NEVER touching the person's machine. the flows of the
9
+ > competitors (the telas files: z.ai, grok, manus, bolt, ai studio, vercel,
10
+ > netlify, cloudflare) are the recipe the engine follows; the framework, the
11
+ > library and the package choice stay open as long as node and the engines
12
+ > orchestrate behind. everything rides mime types + https.
13
+ >
14
+ > ## the competitor recipe the engine copies (from telas-sandbox-fluxo)
15
+ >
16
+ > - one sandbox per session, created implicitly at the first send, discovered
17
+ > never hand-built: workspaces/up (z.ai), /api/preview/{id} (grok),
18
+ > preview/resolve (manus).
19
+ > - the sandbox state streams: checking → quota ok → initializing → ready
20
+ > (sse of states with explicit quotas per user), the pod id in the ready
21
+ > payload.
22
+ > - the preview lives in its own subdomain with the port in it:
23
+ > preview-chat-<id>.devthink.pro, <port>-<hash>.<region>.devthink.run.
24
+ > - versioned storage OUTSIDE the sandbox: versions/<uuid> per write
25
+ > (z.ai), codestorage + commitSha (bolt), git repo in s3 (manus) — the
26
+ > saddle form: git objects inside the db (vault, libgit2) with the
27
+ > commitSha pointer the sandbox rootfs commits against.
28
+ > - ephemeral credentials only: jwt 300s per preview session (grok), otp per
29
+ > vnc (manus) — the saddle form: session-scoped tokens minted per sandbox
30
+ > bind, never a long-lived secret at the edge.
31
+ > - capabilities announced as an event (computer.capabilities.updated): the
32
+ > image inventory (node 26, git, ffmpeg, playwright-headless) reaches the
33
+ > front so features toggle by real capacity.
34
+ > - quotas explicit and queryable (x/min, y/4h, z/global) and the 429 typed
35
+ > before the bind.
36
+ > - the runtime daemon inside the sandbox: supervisord + runtime service
37
+ > (manus :8330/:8340 form) → devthink-runtime on its own port with the
38
+ > watcher loop and the upgrade lock, env in two layers (platform + user).
39
+ > - zero captcha anywhere, zero traffic from the person's browser: the code
40
+ > never transits the visitor, the agent's own headless browser runs inside
41
+ > the sandbox.
42
+
43
+ ## wave SV0 — what already stands (verified, 411 tests green)
44
+
45
+ - [x] SV0.001 the virtual hardware engine: cpu/gpu banks, topology solver,
46
+ the host inventory probes (meminfo, nvidia-smi, glxinfo, vulkan)
47
+ - [x] SV0.002 the vgpu drivers lane: pci ids, nvml shim env, vfio
48
+ bind/unbind, rom dump, looking glass b7, nvidia vgpu profiles, mig
49
+ layouts (blackwell) with density validation, intel sriov dkms, nvenc
50
+ dual engine
51
+ - [x] SV0.003 the vcpu and memory lanes: topology composition, the mttg and
52
+ passage envelopes, the qemu and docker envelopes, the tier policy
53
+ - [x] SV0.004 the orchestrator with the gitops flux planning, the scheduler,
54
+ the queue and the quota lanes, the isolation and security gates
55
+ - [x] SV0.005 the webserver (health, specs, sandbox lifecycle, exec, spa
56
+ shell) and the browser-pure engine port with the transport-neutral
57
+ bundle set
58
+ - [x] SV0.006 the build engine riding node directly (the windows spawnSync
59
+ EINVAL wall gone), the lockstep version stamp across the envelope
60
+ - [x] SV0.007 the competitor flows captured (the telas files live beside the
61
+ md corpus) and the recipe distilled into this plan
62
+
63
+ ## wave SV1 — the modality registry (the fifty, one catalog, the join)
64
+
65
+ - [ ] SV1.001 modalityregistry.ts: every sandbox modality as a record (id,
66
+ family, isolation level, driver requirements, boot cost class, the
67
+ mime contract, the driver modules it mounts) — the catalog grows
68
+ toward the fifty the owner counts, seeded from the rules list
69
+ - [ ] SV1.002 the families: complete virtual (drivers, cpu, gpu, memory, the
70
+ three profiles), universal runner, node packages, docker hardened,
71
+ ghcr immutable, microvm per workflow, browser/webcontainer server side,
72
+ mobile (capacitor, termux, postmarketos), confidential (sev-snp, tdx),
73
+ qemu and firecracker, pod per session, local opt-in, vm+vnc,
74
+ wasm/wasi, vfs, cdn
75
+ - [ ] SV1.003 the join resolver: the workload asks, the engine answers the
76
+ modality set (the nuclear modality — the person chooses none, the
77
+ platform resolves the join of all)
78
+ - [ ] SV1.004 the capability contract per modality: what the workload may
79
+ ask (net off, dropped caps, read-only root, pid limits for the docker
80
+ hardened; the clean rootfs, injected vcpu count, mesa llvmpipe,
81
+ lavapipe, rusticl, xvfb for the microvm)
82
+ - [ ] SV1.005 the boot ladder per modality: cold, warm, hot classes with
83
+ the measured budgets (gvisor without kvm about 200 ms, firecracker
84
+ 125 ms boot the sandbox.ts banner already answers, v8 isolates for
85
+ serverless)
86
+ - [ ] SV1.006 tests: the registry determinism, the join resolution on the
87
+ three base profiles (max, balanced, lite), every record complete
88
+
89
+ ## wave SV2 — the vfs and the cdn lane (the packages never touch the visitor)
90
+
91
+ - [ ] SV2.001 vfs.ts: the virtual file system born from prisma/git/db —
92
+ read(path) → chunk pointers from the db, write(path, bytes) → chunk
93
+ catalog with sha-256 and compression, automatic reuse of equal chunks
94
+ - [ ] SV2.002 the cdn lane: the ~45 cdns (esm.sh among them) fetched INSIDE
95
+ the sandbox over https through the vfs mirror — the person's browser
96
+ never loads a cdn byte of a sandbox workload
97
+ - [ ] SV2.003 the granular materialization: packages install ten by ten,
98
+ forty by forty inside the sandbox from the catalog (package.10 law) —
99
+ never on the build host
100
+ - [ ] SV2.004 the mime contract: every vfs object answers its mimetype, the
101
+ api serves content-type on every read (the mimetypes file feeds the
102
+ mapping)
103
+ - [ ] SV2.005 tests: chunk dedupe round trip, sha-256 stability, the cdn
104
+ mirror mock, the mime headers on every route
105
+
106
+ ## wave SV3 — the git storage and the github tree (the code survives the sandbox)
107
+
108
+ - [ ] SV3.001 gitobjects.ts: git objects and blobs inside the db through
109
+ libgit2 semantics — the tree system the github tree law names: read
110
+ tree(path) → entries, write tree, commit with the parent chain
111
+ - [ ] SV3.002 the versioned write: every sandbox write stamps versions/<uuid>
112
+ with the commitSha — the bolt/z.ai pattern with the vault storage
113
+ - [ ] SV3.003 the github tree lane: read the live tree of a repository over
114
+ the api (authenticated), mirror into the git objects table, the
115
+ sandbox mounts the tree as its rootfs through the vfs
116
+ - [ ] SV3.004 the rollback: checkout any commitSha back into a running
117
+ sandbox (the history the vitrine clicks through)
118
+ - [ ] SV3.005 tests: tree round trip, commit chain integrity, the github
119
+ mirror with a recorded fixture, rollback determinism
120
+
121
+ ## wave SV4 — the session sandbox law (pod per session, the states stream)
122
+
123
+ - [ ] SV4.001 sandboxup: one sandbox per session created implicitly at the
124
+ first send, discovered by session id — never a hand-built url
125
+ - [ ] SV4.002 the states stream over sse: checking → quota ok →
126
+ initializing → ready with the sandbox id, quotas per user explicit in
127
+ the handshake
128
+ - [ ] SV4.003 the capabilities event: the image inventory (node 26, git,
129
+ ffmpeg, playwright-headless, ffmpeg) announced when the sandbox turns
130
+ ready
131
+ - [ ] SV4.004 the preview subdomain: preview-<session>.devthink.pro with the
132
+ port binding, the ephemeral jwt 300s per bind (claims sub, session,
133
+ port)
134
+ - [ ] SV4.005 the runtime daemon: devthink-runtime inside the sandbox (the
135
+ supervisord + watcher loop + upgrade lock the manus form proves), env
136
+ in two layers (platform + session)
137
+ - [ ] SV4.006 the sweep: ttl 15 minutes, the sweep period the webserver
138
+ already carries, the workspace quota answering with the sandbox id
139
+ - [ ] SV4.007 tests: the state ladder order, the quota refusal typed 429,
140
+ the jwt expiry, the capabilities payload
141
+
142
+ ## wave SV5 — config and aliases (100% customizable through the api)
143
+
144
+ - [ ] SV5.001 sandboxconfig.ts: every knob editable — base (max, balanced,
145
+ lite), os image (android, grapheneos, linux, omarchy, windows,
146
+ distros), arch (arm64, amd64), vcpu count, vram mib, storage quota,
147
+ the modality join, the driver set
148
+ - [ ] SV5.002 the aliases table: user-defined aliases per sandbox (the
149
+ short names the shell and the api resolve), add/rename/remove through
150
+ the api, unique per owner
151
+ - [ ] SV5.003 the config store: rows in sqlite through parameter binding,
152
+ the api serves and accepts the whole surface (the ui edits the same
153
+ rows), defaults from the seed catalog never hardcoded in components
154
+ - [ ] SV5.004 the presets: named profiles (the three bases plus user
155
+ presets) shareable and versioned
156
+ - [ ] SV5.005 tests: config round trip, alias uniqueness, preset apply,
157
+ the api contract with a fake request
158
+
159
+ ## wave SV6 — the runners (forge at the frontier, foundry the face)
160
+
161
+ - [ ] SV6.001 the docker hardened runner: no network, dropped caps,
162
+ read-only root, pid limits, runsc option
163
+ - [ ] SV6.002 the microvm runner: clean rootfs, injected vcpu count, the
164
+ cpu id via ld_preload, mesa llvmpipe + lavapipe + rusticl + xvfb for
165
+ the gpu-less render, iso-style and ghcr sources
166
+ - [ ] SV6.003 the wasm/wasi runner: wasmer and wasmedge behind the same
167
+ dispatch contract
168
+ - [ ] SV6.004 the universal runner: any binary of the market through the
169
+ binfmt form, the platform processes included
170
+ - [ ] SV6.005 the dispatch result: the same SandboxState/DispatchResult
171
+ shape every runner answers (the contract the tests already pin)
172
+ - [ ] SV6.006 tests: per-runner dispatch on the recorded fixtures, the
173
+ hardening gates refusing the forbidden flags
174
+
175
+ ## wave SV7 — the verification (the owner reads the live proof)
176
+
177
+ - [ ] SV7.001 the full battery green on every wave's modules
178
+ - [ ] SV7.002 the live proof: sandbox up through the api, the states stream
179
+ answering, exec inside, the vfs fetch of a cdn package, the git
180
+ commit with the commitSha, the preview subdomain bound with the
181
+ ephemeral jwt
182
+ - [ ] SV7.003 the live proof: the config edited through the api (ram,
183
+ storage, alias), the next boot honoring it
184
+ - [ ] SV7.004 the debonair bridge: the render jobs of the audio engine run
185
+ inside a saddle sandbox (the no-client-dsp law of the music pipeline)
186
+ - [ ] SV7.005 the worklog and the ladder ticked, the wave committed
File without changes
File without changes
File without changes
File without changes
package/docs/release.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/docs/security.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/docs/sitemap.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/docs/todo.md CHANGED
File without changes
File without changes
File without changes
package/docs/usage.md CHANGED
File without changes
package/docs/viability.md CHANGED
File without changes
File without changes
File without changes
package/docs/web-ideas.md CHANGED
File without changes
File without changes
File without changes
File without changes
package/gpumonitor.cpp CHANGED
File without changes
package/gpus.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "meta": {
4
4
  "name": "gpus.json",
5
5
  "title": "saddle - Unified Virtual GPU Database",
6
- "version": "2.0.0",
6
+ "version": "2.0.127",
7
7
  "date": "2026-08-22",
8
8
  "language": "en",
9
9
  "description": "Union of the v5 GPU database (7 virtual identity identities), the S6 registry (RX 8900 XTX + Arc B770 unique), Blackwell architecture specs v5+v6 (B100/GB200/RTX 5070/5070 Ti SKUs), gpu.config TOML SKUs (incl. 5 AMD APU RDNA iGPUs) and the 11-entry vfio profile table. PCI device id for RTX PRO 6000 corrected 2BB5->26B5 per canonical v5.",
package/index.ts CHANGED
@@ -40,7 +40,7 @@ export const engineversions = {
40
40
  npm: '12.0.2',
41
41
  /** python stable confirmed 2026-08-23. */
42
42
  python: '3.14.7',
43
- nodecurrent: '26.7.0',
43
+ nodecurrent: '26.12.1',
44
44
  nodelts: '24.19.0',
45
45
  typescript: '7.0.2',
46
46
  docker: '29.7.2',
@@ -1460,19 +1460,19 @@ export type { migprofileid } from './virtualmemory.js';
1460
1460
  /** Re-exports the memory tier catalog and virtual memory manager. */
1461
1461
  export * from './virtualmemory.js';
1462
1462
 
1463
-
1464
1463
  /* ── Section 2: the saddle domain routing barrel ── */
1465
1464
 
1466
- export * from "./foundation.js";
1467
- export * from "./isolation.js";
1468
- export * from "./virtual.js";
1469
- export * from "./execution.js";
1470
- export * from "./browser.js";
1471
- export * from "./acquisition.js";
1472
- export * from "./communication.js";
1473
- export * from "./integration.js";
1474
- export * from "./automation.js";
1475
- export * from "./intelligence.js";
1476
- export * from "./distribution.js";
1477
- export * from "./modes.js";
1478
- export * from "./operations.js";
1465
+ export * from './automation.js';
1466
+ export * from './browser.js';
1467
+ export * from './communication.js';
1468
+ export * from './distribution.js';
1469
+ export * from './execution.js';
1470
+ export * from './foundation.js';
1471
+ export * from './integration.js';
1472
+ export * from './intelligence.js';
1473
+ export * from './isolation.js';
1474
+ /** Re-exports the sandbox modality registry — the catalog the join
1475
+ * resolver reads (the spine of the sandbox modalities the engine opens). */
1476
+ export * from './modalityregistry.js';
1477
+ export * from './modes.js';
1478
+ export * from './virtual.js';
package/manifest.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "manifest_version": 3,
3
+ "name": "Saddle browser bridge",
4
+ "version": "2.0.151",
5
+ "description": "User initiated page snapshots through the Saddle browser contract.",
6
+ "minimum_chrome_version": "110",
7
+ "permissions": [
8
+ "activeTab",
9
+ "scripting",
10
+ "storage"
11
+ ],
12
+ "icons": {
13
+ "32": "icon.svg",
14
+ "64": "icon.svg",
15
+ "128": "icon.svg"
16
+ },
17
+ "action": {
18
+ "default_title": "Saddle"
19
+ }
20
+ }
package/media.ts CHANGED
File without changes