@wenathlan/saddle 1.8.18 → 2.0.2

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 (802) hide show
  1. package/Dockerfile +1339 -0
  2. package/README.md +33 -12
  3. package/alternatives.ts +1218 -0
  4. package/biome.json +153 -0
  5. package/boards.json +1517 -0
  6. package/compute.ts +3144 -0
  7. package/cores.json +1801 -0
  8. package/dist/acquisition.d.ts +359 -0
  9. package/dist/acquisition.d.ts.map +1 -0
  10. package/dist/acquisition.js +629 -0
  11. package/dist/acquisition.js.map +1 -0
  12. package/dist/alternatives.d.ts +509 -0
  13. package/dist/alternatives.d.ts.map +1 -0
  14. package/dist/alternatives.js +951 -0
  15. package/dist/alternatives.js.map +1 -0
  16. package/dist/automation.d.ts +426 -0
  17. package/dist/automation.d.ts.map +1 -0
  18. package/dist/automation.js +561 -0
  19. package/dist/automation.js.map +1 -0
  20. package/dist/browser.d.ts +562 -0
  21. package/dist/browser.d.ts.map +1 -0
  22. package/dist/browser.js +1057 -0
  23. package/dist/browser.js.map +1 -0
  24. package/dist/capacitor.config.d.ts +13 -0
  25. package/dist/capacitor.config.d.ts.map +1 -0
  26. package/dist/capacitor.config.js +26 -0
  27. package/dist/capacitor.config.js.map +1 -0
  28. package/dist/cli.d.ts +17 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +111 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/communication.d.ts +192 -0
  33. package/dist/communication.d.ts.map +1 -0
  34. package/dist/communication.js +418 -0
  35. package/dist/communication.js.map +1 -0
  36. package/dist/compute.d.ts +1161 -0
  37. package/dist/compute.d.ts.map +1 -0
  38. package/dist/compute.js +2273 -0
  39. package/dist/compute.js.map +1 -0
  40. package/dist/distribution.d.ts +529 -0
  41. package/dist/distribution.d.ts.map +1 -0
  42. package/dist/distribution.js +811 -0
  43. package/dist/distribution.js.map +1 -0
  44. package/dist/execution.d.ts +530 -0
  45. package/dist/execution.d.ts.map +1 -0
  46. package/dist/execution.js +761 -0
  47. package/dist/execution.js.map +1 -0
  48. package/dist/format.d.ts +19 -0
  49. package/dist/format.d.ts.map +1 -0
  50. package/dist/format.js +60 -0
  51. package/dist/format.js.map +1 -0
  52. package/dist/foundation.d.ts +176 -0
  53. package/dist/foundation.d.ts.map +1 -0
  54. package/dist/foundation.js +309 -0
  55. package/dist/foundation.js.map +1 -0
  56. package/dist/index.d.ts +733 -123
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1018 -123
  59. package/dist/index.js.map +1 -1
  60. package/dist/integration.d.ts +236 -0
  61. package/dist/integration.d.ts.map +1 -0
  62. package/dist/integration.js +236 -0
  63. package/dist/integration.js.map +1 -0
  64. package/dist/intelligence.d.ts +94 -0
  65. package/dist/intelligence.d.ts.map +1 -0
  66. package/dist/intelligence.js +145 -0
  67. package/dist/intelligence.js.map +1 -0
  68. package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
  69. package/dist/isolation.d.ts.map +1 -0
  70. package/dist/{isolation/contracts.js → isolation.js} +13 -1
  71. package/dist/isolation.js.map +1 -0
  72. package/dist/media.d.ts +344 -0
  73. package/dist/media.d.ts.map +1 -0
  74. package/dist/media.js +986 -0
  75. package/dist/media.js.map +1 -0
  76. package/dist/modes.d.ts +359 -0
  77. package/dist/modes.d.ts.map +1 -0
  78. package/dist/modes.js +134 -0
  79. package/dist/modes.js.map +1 -0
  80. package/dist/{library/public.d.ts → operations.d.ts} +15 -1
  81. package/dist/operations.d.ts.map +1 -0
  82. package/dist/{library/public.js → operations.js} +18 -7
  83. package/dist/operations.js.map +1 -0
  84. package/dist/orchestrator.d.ts +1339 -0
  85. package/dist/orchestrator.d.ts.map +1 -0
  86. package/dist/orchestrator.js +4308 -0
  87. package/dist/orchestrator.js.map +1 -0
  88. package/dist/performance.d.ts +416 -0
  89. package/dist/performance.d.ts.map +1 -0
  90. package/dist/performance.js +827 -0
  91. package/dist/performance.js.map +1 -0
  92. package/dist/quantum.d.ts +810 -0
  93. package/dist/quantum.d.ts.map +1 -0
  94. package/dist/quantum.js +2073 -0
  95. package/dist/quantum.js.map +1 -0
  96. package/dist/render.d.ts +381 -0
  97. package/dist/render.d.ts.map +1 -0
  98. package/dist/render.js +1073 -0
  99. package/dist/render.js.map +1 -0
  100. package/dist/scheduler.d.ts +596 -0
  101. package/dist/scheduler.d.ts.map +1 -0
  102. package/dist/scheduler.js +1259 -0
  103. package/dist/scheduler.js.map +1 -0
  104. package/dist/security.d.ts +501 -0
  105. package/dist/security.d.ts.map +1 -0
  106. package/dist/security.js +1170 -0
  107. package/dist/security.js.map +1 -0
  108. package/dist/server.d.ts +21 -0
  109. package/dist/server.d.ts.map +1 -0
  110. package/dist/{server/node.js → server.js} +16 -2
  111. package/dist/server.js.map +1 -0
  112. package/dist/tiers.d.ts +1002 -0
  113. package/dist/tiers.d.ts.map +1 -0
  114. package/dist/tiers.js +2165 -0
  115. package/dist/tiers.js.map +1 -0
  116. package/dist/virtual.d.ts +641 -0
  117. package/dist/virtual.d.ts.map +1 -0
  118. package/dist/virtual.js +1285 -0
  119. package/dist/virtual.js.map +1 -0
  120. package/dist/virtualcpu.d.ts +316 -0
  121. package/dist/virtualcpu.d.ts.map +1 -0
  122. package/dist/virtualcpu.js +1180 -0
  123. package/dist/virtualcpu.js.map +1 -0
  124. package/dist/virtualgpu.d.ts +345 -0
  125. package/dist/virtualgpu.d.ts.map +1 -0
  126. package/dist/virtualgpu.js +1000 -0
  127. package/dist/virtualgpu.js.map +1 -0
  128. package/dist/virtualization.d.ts +607 -0
  129. package/dist/virtualization.d.ts.map +1 -0
  130. package/dist/virtualization.js +1187 -0
  131. package/dist/virtualization.js.map +1 -0
  132. package/dist/virtualmemory.d.ts +818 -0
  133. package/dist/virtualmemory.d.ts.map +1 -0
  134. package/dist/virtualmemory.js +1796 -0
  135. package/dist/virtualmemory.js.map +1 -0
  136. package/dist/webscrape.d.ts +720 -0
  137. package/dist/webscrape.d.ts.map +1 -0
  138. package/dist/webscrape.js +2697 -0
  139. package/dist/webscrape.js.map +1 -0
  140. package/docker.config +769 -0
  141. package/docs/CONVERSA.txt +1523 -0
  142. package/docs/alternatives.md +499 -0
  143. package/docs/architecture-1.8.19.md +76 -0
  144. package/docs/architecture-1.8.19.mmd +33 -0
  145. package/docs/architecture-1.8.19.png +0 -0
  146. package/docs/architecture.md +355 -0
  147. package/docs/brancharchive-2026-08-18.md +18 -0
  148. package/docs/browser.md +7 -0
  149. package/docs/consolidation.md +70 -0
  150. package/docs/e2ugh-engine.md +528 -0
  151. package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
  152. package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
  153. package/docs/hardware.md +342 -0
  154. package/docs/optimization.md +126 -0
  155. package/docs/performance.md +499 -0
  156. package/docs/planning.1.8.18.md +94 -0
  157. package/docs/planning.1.8.19.md +49 -0
  158. package/docs/releasenotes-1.8.19.md +35 -0
  159. package/docs/research-1.8.19-virtual-browser.md +27 -0
  160. package/docs/security.md +454 -0
  161. package/docs/todo-1.8.18.md +12 -0
  162. package/docs/todo-1.8.19.md +241 -0
  163. package/docs/viability.md +777 -0
  164. package/docs/virtualization.md +335 -0
  165. package/docs/web-duplicatecleanup.md +9 -0
  166. package/docs/web-ideas.md +106 -0
  167. package/docs/workflowimprovements-2026-08-19.md +70 -0
  168. package/gpumonitor.cpp +1543 -0
  169. package/gpus.json +2408 -0
  170. package/index.ts +1478 -0
  171. package/media.ts +1337 -0
  172. package/mttg.config +1549 -0
  173. package/orchestrator.ts +5462 -0
  174. package/package.json +304 -56
  175. package/passage.config +1331 -0
  176. package/performance.ts +1049 -0
  177. package/processors.json +2217 -0
  178. package/qemu.config +1062 -0
  179. package/qemubridge.py +1340 -0
  180. package/quantum.ts +2393 -0
  181. package/render.ts +1325 -0
  182. package/scheduler.ts +1600 -0
  183. package/security.ts +1449 -0
  184. package/tiers.ts +2871 -0
  185. package/tsconfig.json +29 -0
  186. package/virtualcpu.ts +1273 -0
  187. package/virtualgpu.ts +1181 -0
  188. package/virtualhardware.c +1011 -0
  189. package/virtualhardware.json +739 -0
  190. package/virtualization.ts +1628 -0
  191. package/virtualizationcore.cpp +4635 -0
  192. package/virtualmemory.ts +2303 -0
  193. package/vm.config.json +1910 -0
  194. package/{extension → web/extension}/manifest.json +1 -1
  195. package/web/readme.md +382 -0
  196. package/web/tsconfig.json +25 -0
  197. package/dist/adapters/forge.d.ts +0 -17
  198. package/dist/adapters/forge.d.ts.map +0 -1
  199. package/dist/adapters/forge.js +0 -19
  200. package/dist/adapters/forge.js.map +0 -1
  201. package/dist/adapters/forgejo.d.ts +0 -49
  202. package/dist/adapters/forgejo.d.ts.map +0 -1
  203. package/dist/adapters/forgejo.js +0 -8
  204. package/dist/adapters/forgejo.js.map +0 -1
  205. package/dist/adapters/github.d.ts +0 -12
  206. package/dist/adapters/github.d.ts.map +0 -1
  207. package/dist/adapters/github.js +0 -20
  208. package/dist/adapters/github.js.map +0 -1
  209. package/dist/adapters/gitlab.d.ts +0 -17
  210. package/dist/adapters/gitlab.d.ts.map +0 -1
  211. package/dist/adapters/gitlab.js +0 -10
  212. package/dist/adapters/gitlab.js.map +0 -1
  213. package/dist/adapters/huggingface.d.ts +0 -17
  214. package/dist/adapters/huggingface.d.ts.map +0 -1
  215. package/dist/adapters/huggingface.js +0 -6
  216. package/dist/adapters/huggingface.js.map +0 -1
  217. package/dist/adapters/socket.d.ts +0 -11
  218. package/dist/adapters/socket.d.ts.map +0 -1
  219. package/dist/adapters/socket.js +0 -17
  220. package/dist/adapters/socket.js.map +0 -1
  221. package/dist/adapters/transport.d.ts +0 -7
  222. package/dist/adapters/transport.d.ts.map +0 -1
  223. package/dist/adapters/transport.js +0 -36
  224. package/dist/adapters/transport.js.map +0 -1
  225. package/dist/ai/chunk.d.ts +0 -2
  226. package/dist/ai/chunk.d.ts.map +0 -1
  227. package/dist/ai/chunk.js +0 -36
  228. package/dist/ai/chunk.js.map +0 -1
  229. package/dist/ai/llmstxt.d.ts +0 -6
  230. package/dist/ai/llmstxt.d.ts.map +0 -1
  231. package/dist/ai/llmstxt.js +0 -12
  232. package/dist/ai/llmstxt.js.map +0 -1
  233. package/dist/ai/provenance.d.ts +0 -22
  234. package/dist/ai/provenance.d.ts.map +0 -1
  235. package/dist/ai/provenance.js +0 -25
  236. package/dist/ai/provenance.js.map +0 -1
  237. package/dist/ai/rag.d.ts +0 -26
  238. package/dist/ai/rag.d.ts.map +0 -1
  239. package/dist/ai/rag.js +0 -22
  240. package/dist/ai/rag.js.map +0 -1
  241. package/dist/ai/tokens.d.ts +0 -15
  242. package/dist/ai/tokens.d.ts.map +0 -1
  243. package/dist/ai/tokens.js +0 -9
  244. package/dist/ai/tokens.js.map +0 -1
  245. package/dist/api/auth.d.ts +0 -16
  246. package/dist/api/auth.d.ts.map +0 -1
  247. package/dist/api/auth.js +0 -19
  248. package/dist/api/auth.js.map +0 -1
  249. package/dist/api/contracts.d.ts +0 -28
  250. package/dist/api/contracts.d.ts.map +0 -1
  251. package/dist/api/contracts.js +0 -14
  252. package/dist/api/contracts.js.map +0 -1
  253. package/dist/api/control.d.ts +0 -10
  254. package/dist/api/control.d.ts.map +0 -1
  255. package/dist/api/control.js +0 -35
  256. package/dist/api/control.js.map +0 -1
  257. package/dist/api/http.d.ts +0 -7
  258. package/dist/api/http.d.ts.map +0 -1
  259. package/dist/api/http.js +0 -12
  260. package/dist/api/http.js.map +0 -1
  261. package/dist/api/rate.d.ts +0 -28
  262. package/dist/api/rate.d.ts.map +0 -1
  263. package/dist/api/rate.js +0 -36
  264. package/dist/api/rate.js.map +0 -1
  265. package/dist/api/security.d.ts +0 -12
  266. package/dist/api/security.d.ts.map +0 -1
  267. package/dist/api/security.js +0 -56
  268. package/dist/api/security.js.map +0 -1
  269. package/dist/api/service.d.ts +0 -5
  270. package/dist/api/service.d.ts.map +0 -1
  271. package/dist/api/service.js +0 -70
  272. package/dist/api/service.js.map +0 -1
  273. package/dist/apps/registry.d.ts +0 -33
  274. package/dist/apps/registry.d.ts.map +0 -1
  275. package/dist/apps/registry.js +0 -24
  276. package/dist/apps/registry.js.map +0 -1
  277. package/dist/binary/archive.d.ts +0 -27
  278. package/dist/binary/archive.d.ts.map +0 -1
  279. package/dist/binary/archive.js +0 -46
  280. package/dist/binary/archive.js.map +0 -1
  281. package/dist/binary/build.d.ts +0 -29
  282. package/dist/binary/build.d.ts.map +0 -1
  283. package/dist/binary/build.js +0 -17
  284. package/dist/binary/build.js.map +0 -1
  285. package/dist/binary/transform.d.ts +0 -70
  286. package/dist/binary/transform.d.ts.map +0 -1
  287. package/dist/binary/transform.js +0 -105
  288. package/dist/binary/transform.js.map +0 -1
  289. package/dist/bot/adapter.d.ts +0 -5
  290. package/dist/bot/adapter.d.ts.map +0 -1
  291. package/dist/bot/adapter.js +0 -11
  292. package/dist/bot/adapter.js.map +0 -1
  293. package/dist/bot/bot.d.ts +0 -28
  294. package/dist/bot/bot.d.ts.map +0 -1
  295. package/dist/bot/bot.js +0 -52
  296. package/dist/bot/bot.js.map +0 -1
  297. package/dist/bot/commands.d.ts +0 -8
  298. package/dist/bot/commands.d.ts.map +0 -1
  299. package/dist/bot/commands.js +0 -19
  300. package/dist/bot/commands.js.map +0 -1
  301. package/dist/bot/permissions.d.ts +0 -13
  302. package/dist/bot/permissions.d.ts.map +0 -1
  303. package/dist/bot/permissions.js +0 -16
  304. package/dist/bot/permissions.js.map +0 -1
  305. package/dist/browser/actions.d.ts +0 -33
  306. package/dist/browser/actions.d.ts.map +0 -1
  307. package/dist/browser/actions.js +0 -44
  308. package/dist/browser/actions.js.map +0 -1
  309. package/dist/browser/agent.d.ts +0 -21
  310. package/dist/browser/agent.d.ts.map +0 -1
  311. package/dist/browser/agent.js +0 -13
  312. package/dist/browser/agent.js.map +0 -1
  313. package/dist/browser/context.d.ts +0 -43
  314. package/dist/browser/context.d.ts.map +0 -1
  315. package/dist/browser/context.js +0 -54
  316. package/dist/browser/context.js.map +0 -1
  317. package/dist/browser/fingerprint.d.ts +0 -4
  318. package/dist/browser/fingerprint.d.ts.map +0 -1
  319. package/dist/browser/fingerprint.js +0 -12
  320. package/dist/browser/fingerprint.js.map +0 -1
  321. package/dist/browser/index.d.ts +0 -11
  322. package/dist/browser/index.d.ts.map +0 -1
  323. package/dist/browser/index.js +0 -11
  324. package/dist/browser/index.js.map +0 -1
  325. package/dist/browser/playwright.d.ts +0 -11
  326. package/dist/browser/playwright.d.ts.map +0 -1
  327. package/dist/browser/playwright.js +0 -24
  328. package/dist/browser/playwright.js.map +0 -1
  329. package/dist/browser/recorder.d.ts +0 -21
  330. package/dist/browser/recorder.d.ts.map +0 -1
  331. package/dist/browser/recorder.js +0 -58
  332. package/dist/browser/recorder.js.map +0 -1
  333. package/dist/browser/session.d.ts +0 -14
  334. package/dist/browser/session.d.ts.map +0 -1
  335. package/dist/browser/session.js +0 -21
  336. package/dist/browser/session.js.map +0 -1
  337. package/dist/browser/snapshot.d.ts +0 -69
  338. package/dist/browser/snapshot.d.ts.map +0 -1
  339. package/dist/browser/snapshot.js +0 -133
  340. package/dist/browser/snapshot.js.map +0 -1
  341. package/dist/captcha/contract.d.ts +0 -35
  342. package/dist/captcha/contract.d.ts.map +0 -1
  343. package/dist/captcha/contract.js +0 -17
  344. package/dist/captcha/contract.js.map +0 -1
  345. package/dist/captcha/evidence.d.ts +0 -10
  346. package/dist/captcha/evidence.d.ts.map +0 -1
  347. package/dist/captcha/evidence.js +0 -9
  348. package/dist/captcha/evidence.js.map +0 -1
  349. package/dist/captcha/guard.d.ts +0 -23
  350. package/dist/captcha/guard.d.ts.map +0 -1
  351. package/dist/captcha/guard.js +0 -12
  352. package/dist/captcha/guard.js.map +0 -1
  353. package/dist/cli/main.d.ts +0 -4
  354. package/dist/cli/main.d.ts.map +0 -1
  355. package/dist/cli/main.js +0 -46
  356. package/dist/cli/main.js.map +0 -1
  357. package/dist/core/errors.d.ts +0 -84
  358. package/dist/core/errors.d.ts.map +0 -1
  359. package/dist/core/errors.js +0 -54
  360. package/dist/core/errors.js.map +0 -1
  361. package/dist/core/events.d.ts +0 -9
  362. package/dist/core/events.d.ts.map +0 -1
  363. package/dist/core/events.js +0 -21
  364. package/dist/core/events.js.map +0 -1
  365. package/dist/core/hash.d.ts +0 -10
  366. package/dist/core/hash.d.ts.map +0 -1
  367. package/dist/core/hash.js +0 -82
  368. package/dist/core/hash.js.map +0 -1
  369. package/dist/core/ids.d.ts +0 -10
  370. package/dist/core/ids.d.ts.map +0 -1
  371. package/dist/core/ids.js +0 -15
  372. package/dist/core/ids.js.map +0 -1
  373. package/dist/delivery/manifest.d.ts +0 -35
  374. package/dist/delivery/manifest.d.ts.map +0 -1
  375. package/dist/delivery/manifest.js +0 -68
  376. package/dist/delivery/manifest.js.map +0 -1
  377. package/dist/deploy/index.d.ts +0 -6
  378. package/dist/deploy/index.d.ts.map +0 -1
  379. package/dist/deploy/index.js +0 -6
  380. package/dist/deploy/index.js.map +0 -1
  381. package/dist/dispatch/resumable.d.ts +0 -102
  382. package/dist/dispatch/resumable.d.ts.map +0 -1
  383. package/dist/dispatch/resumable.js +0 -64
  384. package/dist/dispatch/resumable.js.map +0 -1
  385. package/dist/dispatch/workflow.d.ts +0 -6
  386. package/dist/dispatch/workflow.d.ts.map +0 -1
  387. package/dist/dispatch/workflow.js +0 -37
  388. package/dist/dispatch/workflow.js.map +0 -1
  389. package/dist/domain/artifacts.d.ts +0 -12
  390. package/dist/domain/artifacts.d.ts.map +0 -1
  391. package/dist/domain/artifacts.js +0 -14
  392. package/dist/domain/artifacts.js.map +0 -1
  393. package/dist/domain/jobs.d.ts +0 -12
  394. package/dist/domain/jobs.d.ts.map +0 -1
  395. package/dist/domain/jobs.js +0 -20
  396. package/dist/domain/jobs.js.map +0 -1
  397. package/dist/domain/providers.d.ts +0 -10
  398. package/dist/domain/providers.d.ts.map +0 -1
  399. package/dist/domain/providers.js +0 -8
  400. package/dist/domain/providers.js.map +0 -1
  401. package/dist/domain/runtime.d.ts +0 -14
  402. package/dist/domain/runtime.d.ts.map +0 -1
  403. package/dist/domain/runtime.js +0 -10
  404. package/dist/domain/runtime.js.map +0 -1
  405. package/dist/domain/sessions.d.ts +0 -12
  406. package/dist/domain/sessions.d.ts.map +0 -1
  407. package/dist/domain/sessions.js +0 -57
  408. package/dist/domain/sessions.js.map +0 -1
  409. package/dist/examples/localjob.d.ts +0 -2
  410. package/dist/examples/localjob.d.ts.map +0 -1
  411. package/dist/examples/localjob.js.map +0 -1
  412. package/dist/examples/publicapi.d.ts +0 -2
  413. package/dist/examples/publicapi.d.ts.map +0 -1
  414. package/dist/examples/publicapi.js.map +0 -1
  415. package/dist/extension/build.d.ts +0 -9
  416. package/dist/extension/build.d.ts.map +0 -1
  417. package/dist/extension/build.js +0 -85
  418. package/dist/extension/build.js.map +0 -1
  419. package/dist/extension/content.d.ts +0 -6
  420. package/dist/extension/content.d.ts.map +0 -1
  421. package/dist/extension/content.js +0 -135
  422. package/dist/extension/content.js.map +0 -1
  423. package/dist/extension/index.d.ts +0 -7
  424. package/dist/extension/index.d.ts.map +0 -1
  425. package/dist/extension/index.js +0 -7
  426. package/dist/extension/index.js.map +0 -1
  427. package/dist/extension/pagebridge.d.ts +0 -6
  428. package/dist/extension/pagebridge.d.ts.map +0 -1
  429. package/dist/extension/pagebridge.js +0 -42
  430. package/dist/extension/pagebridge.js.map +0 -1
  431. package/dist/extension/permissions.d.ts +0 -26
  432. package/dist/extension/permissions.d.ts.map +0 -1
  433. package/dist/extension/permissions.js +0 -28
  434. package/dist/extension/permissions.js.map +0 -1
  435. package/dist/extension/popup.d.ts +0 -5
  436. package/dist/extension/popup.d.ts.map +0 -1
  437. package/dist/extension/popup.js +0 -26
  438. package/dist/extension/popup.js.map +0 -1
  439. package/dist/extension/protocol.d.ts +0 -58
  440. package/dist/extension/protocol.d.ts.map +0 -1
  441. package/dist/extension/protocol.js +0 -101
  442. package/dist/extension/protocol.js.map +0 -1
  443. package/dist/extension/serviceworker.d.ts +0 -25
  444. package/dist/extension/serviceworker.d.ts.map +0 -1
  445. package/dist/extension/serviceworker.js +0 -102
  446. package/dist/extension/serviceworker.js.map +0 -1
  447. package/dist/extension/worker.d.ts +0 -28
  448. package/dist/extension/worker.d.ts.map +0 -1
  449. package/dist/extension/worker.js +0 -22
  450. package/dist/extension/worker.js.map +0 -1
  451. package/dist/format/check.d.ts +0 -8
  452. package/dist/format/check.d.ts.map +0 -1
  453. package/dist/format/check.js +0 -38
  454. package/dist/format/check.js.map +0 -1
  455. package/dist/isolation/contracts.d.ts.map +0 -1
  456. package/dist/isolation/contracts.js.map +0 -1
  457. package/dist/library/public.d.ts.map +0 -1
  458. package/dist/library/public.js.map +0 -1
  459. package/dist/mcp/browser.d.ts +0 -9
  460. package/dist/mcp/browser.d.ts.map +0 -1
  461. package/dist/mcp/browser.js +0 -13
  462. package/dist/mcp/browser.js.map +0 -1
  463. package/dist/mcp/server.d.ts +0 -35
  464. package/dist/mcp/server.d.ts.map +0 -1
  465. package/dist/mcp/server.js +0 -40
  466. package/dist/mcp/server.js.map +0 -1
  467. package/dist/mcp/transport.d.ts +0 -7
  468. package/dist/mcp/transport.d.ts.map +0 -1
  469. package/dist/mcp/transport.js +0 -17
  470. package/dist/mcp/transport.js.map +0 -1
  471. package/dist/memory/bridge.d.ts +0 -14
  472. package/dist/memory/bridge.d.ts.map +0 -1
  473. package/dist/memory/bridge.js +0 -16
  474. package/dist/memory/bridge.js.map +0 -1
  475. package/dist/memory/engine.d.ts +0 -38
  476. package/dist/memory/engine.d.ts.map +0 -1
  477. package/dist/memory/engine.js +0 -109
  478. package/dist/memory/engine.js.map +0 -1
  479. package/dist/memory/modes.d.ts +0 -43
  480. package/dist/memory/modes.d.ts.map +0 -1
  481. package/dist/memory/modes.js +0 -66
  482. package/dist/memory/modes.js.map +0 -1
  483. package/dist/memory/objects.d.ts +0 -21
  484. package/dist/memory/objects.d.ts.map +0 -1
  485. package/dist/memory/objects.js +0 -20
  486. package/dist/memory/objects.js.map +0 -1
  487. package/dist/memory/planner.d.ts +0 -66
  488. package/dist/memory/planner.d.ts.map +0 -1
  489. package/dist/memory/planner.js +0 -108
  490. package/dist/memory/planner.js.map +0 -1
  491. package/dist/memory/targets.d.ts +0 -78
  492. package/dist/memory/targets.d.ts.map +0 -1
  493. package/dist/memory/targets.js +0 -29
  494. package/dist/memory/targets.js.map +0 -1
  495. package/dist/memory/transforms.d.ts +0 -19
  496. package/dist/memory/transforms.d.ts.map +0 -1
  497. package/dist/memory/transforms.js +0 -14
  498. package/dist/memory/transforms.js.map +0 -1
  499. package/dist/modes/matrix.d.ts +0 -23
  500. package/dist/modes/matrix.d.ts.map +0 -1
  501. package/dist/modes/matrix.js +0 -18
  502. package/dist/modes/matrix.js.map +0 -1
  503. package/dist/modes/modes.d.ts +0 -33
  504. package/dist/modes/modes.d.ts.map +0 -1
  505. package/dist/modes/modes.js +0 -15
  506. package/dist/modes/modes.js.map +0 -1
  507. package/dist/modes/resolve.d.ts +0 -96
  508. package/dist/modes/resolve.d.ts.map +0 -1
  509. package/dist/modes/resolve.js +0 -48
  510. package/dist/modes/resolve.js.map +0 -1
  511. package/dist/observability/metrics.d.ts +0 -14
  512. package/dist/observability/metrics.d.ts.map +0 -1
  513. package/dist/observability/metrics.js +0 -18
  514. package/dist/observability/metrics.js.map +0 -1
  515. package/dist/packager/manifest.d.ts +0 -66
  516. package/dist/packager/manifest.d.ts.map +0 -1
  517. package/dist/packager/manifest.js +0 -94
  518. package/dist/packager/manifest.js.map +0 -1
  519. package/dist/packager/publish.d.ts +0 -51
  520. package/dist/packager/publish.d.ts.map +0 -1
  521. package/dist/packager/publish.js +0 -18
  522. package/dist/packager/publish.js.map +0 -1
  523. package/dist/packager/targetcli.d.ts +0 -7
  524. package/dist/packager/targetcli.d.ts.map +0 -1
  525. package/dist/packager/targetcli.js +0 -22
  526. package/dist/packager/targetcli.js.map +0 -1
  527. package/dist/persistence/adapter.d.ts +0 -5
  528. package/dist/persistence/adapter.d.ts.map +0 -1
  529. package/dist/persistence/adapter.js +0 -11
  530. package/dist/persistence/adapter.js.map +0 -1
  531. package/dist/persistence/drizzle.d.ts +0 -2
  532. package/dist/persistence/drizzle.d.ts.map +0 -1
  533. package/dist/persistence/drizzle.js +0 -12
  534. package/dist/persistence/drizzle.js.map +0 -1
  535. package/dist/persistence/memory.d.ts +0 -2
  536. package/dist/persistence/memory.d.ts.map +0 -1
  537. package/dist/persistence/memory.js +0 -27
  538. package/dist/persistence/memory.js.map +0 -1
  539. package/dist/persistence/migrations.d.ts +0 -19
  540. package/dist/persistence/migrations.d.ts.map +0 -1
  541. package/dist/persistence/migrations.js +0 -13
  542. package/dist/persistence/migrations.js.map +0 -1
  543. package/dist/persistence/prisma.d.ts +0 -2
  544. package/dist/persistence/prisma.d.ts.map +0 -1
  545. package/dist/persistence/prisma.js +0 -25
  546. package/dist/persistence/prisma.js.map +0 -1
  547. package/dist/persistence/schema.d.ts +0 -63
  548. package/dist/persistence/schema.d.ts.map +0 -1
  549. package/dist/persistence/schema.js +0 -28
  550. package/dist/persistence/schema.js.map +0 -1
  551. package/dist/persistence/sql.d.ts +0 -3
  552. package/dist/persistence/sql.d.ts.map +0 -1
  553. package/dist/persistence/sql.js +0 -37
  554. package/dist/persistence/sql.js.map +0 -1
  555. package/dist/protocol/blocks.d.ts +0 -10
  556. package/dist/protocol/blocks.d.ts.map +0 -1
  557. package/dist/protocol/blocks.js +0 -26
  558. package/dist/protocol/blocks.js.map +0 -1
  559. package/dist/protocol/json.d.ts +0 -6
  560. package/dist/protocol/json.d.ts.map +0 -1
  561. package/dist/protocol/json.js +0 -6
  562. package/dist/protocol/json.js.map +0 -1
  563. package/dist/protocol/ndjson.d.ts +0 -3
  564. package/dist/protocol/ndjson.d.ts.map +0 -1
  565. package/dist/protocol/ndjson.js +0 -20
  566. package/dist/protocol/ndjson.js.map +0 -1
  567. package/dist/protocol/sse.d.ts +0 -7
  568. package/dist/protocol/sse.d.ts.map +0 -1
  569. package/dist/protocol/sse.js +0 -25
  570. package/dist/protocol/sse.js.map +0 -1
  571. package/dist/proxy/pool.d.ts +0 -9
  572. package/dist/proxy/pool.d.ts.map +0 -1
  573. package/dist/proxy/pool.js +0 -27
  574. package/dist/proxy/pool.js.map +0 -1
  575. package/dist/queue/idempotency.d.ts +0 -10
  576. package/dist/queue/idempotency.d.ts.map +0 -1
  577. package/dist/queue/idempotency.js +0 -13
  578. package/dist/queue/idempotency.js.map +0 -1
  579. package/dist/queue/persistent.d.ts +0 -14
  580. package/dist/queue/persistent.d.ts.map +0 -1
  581. package/dist/queue/persistent.js +0 -66
  582. package/dist/queue/persistent.js.map +0 -1
  583. package/dist/queue/queue.d.ts +0 -7
  584. package/dist/queue/queue.d.ts.map +0 -1
  585. package/dist/queue/queue.js +0 -55
  586. package/dist/queue/queue.js.map +0 -1
  587. package/dist/queue/saga.d.ts +0 -5
  588. package/dist/queue/saga.d.ts.map +0 -1
  589. package/dist/queue/saga.js +0 -20
  590. package/dist/queue/saga.js.map +0 -1
  591. package/dist/release/assets.d.ts +0 -144
  592. package/dist/release/assets.d.ts.map +0 -1
  593. package/dist/release/assets.js +0 -157
  594. package/dist/release/assets.js.map +0 -1
  595. package/dist/release/evidence.d.ts +0 -92
  596. package/dist/release/evidence.d.ts.map +0 -1
  597. package/dist/release/evidence.js +0 -148
  598. package/dist/release/evidence.js.map +0 -1
  599. package/dist/release/verify.d.ts +0 -12
  600. package/dist/release/verify.d.ts.map +0 -1
  601. package/dist/release/verify.js +0 -112
  602. package/dist/release/verify.js.map +0 -1
  603. package/dist/runners/chain.d.ts +0 -125
  604. package/dist/runners/chain.d.ts.map +0 -1
  605. package/dist/runners/chain.js +0 -95
  606. package/dist/runners/chain.js.map +0 -1
  607. package/dist/runners/health.d.ts +0 -36
  608. package/dist/runners/health.d.ts.map +0 -1
  609. package/dist/runners/health.js +0 -26
  610. package/dist/runners/health.js.map +0 -1
  611. package/dist/runners/heartbeat.d.ts +0 -23
  612. package/dist/runners/heartbeat.d.ts.map +0 -1
  613. package/dist/runners/heartbeat.js +0 -29
  614. package/dist/runners/heartbeat.js.map +0 -1
  615. package/dist/runners/inprocess.d.ts +0 -17
  616. package/dist/runners/inprocess.d.ts.map +0 -1
  617. package/dist/runners/inprocess.js +0 -20
  618. package/dist/runners/inprocess.js.map +0 -1
  619. package/dist/runners/scheduler.d.ts +0 -5
  620. package/dist/runners/scheduler.d.ts.map +0 -1
  621. package/dist/runners/scheduler.js +0 -19
  622. package/dist/runners/scheduler.js.map +0 -1
  623. package/dist/runtime/abort.d.ts +0 -8
  624. package/dist/runtime/abort.d.ts.map +0 -1
  625. package/dist/runtime/abort.js +0 -13
  626. package/dist/runtime/abort.js.map +0 -1
  627. package/dist/runtime/compatibility.d.ts +0 -37
  628. package/dist/runtime/compatibility.d.ts.map +0 -1
  629. package/dist/runtime/compatibility.js +0 -10
  630. package/dist/runtime/compatibility.js.map +0 -1
  631. package/dist/runtime/detect.d.ts +0 -13
  632. package/dist/runtime/detect.d.ts.map +0 -1
  633. package/dist/runtime/detect.js +0 -18
  634. package/dist/runtime/detect.js.map +0 -1
  635. package/dist/runtime/engine.d.ts +0 -20
  636. package/dist/runtime/engine.d.ts.map +0 -1
  637. package/dist/runtime/engine.js +0 -61
  638. package/dist/runtime/engine.js.map +0 -1
  639. package/dist/runtime/retry.d.ts +0 -19
  640. package/dist/runtime/retry.d.ts.map +0 -1
  641. package/dist/runtime/retry.js +0 -54
  642. package/dist/runtime/retry.js.map +0 -1
  643. package/dist/runtime/worker.d.ts +0 -10
  644. package/dist/runtime/worker.d.ts.map +0 -1
  645. package/dist/runtime/worker.js +0 -25
  646. package/dist/runtime/worker.js.map +0 -1
  647. package/dist/scrape/cache.d.ts +0 -45
  648. package/dist/scrape/cache.d.ts.map +0 -1
  649. package/dist/scrape/cache.js +0 -45
  650. package/dist/scrape/cache.js.map +0 -1
  651. package/dist/scrape/crawl.d.ts +0 -47
  652. package/dist/scrape/crawl.d.ts.map +0 -1
  653. package/dist/scrape/crawl.js +0 -114
  654. package/dist/scrape/crawl.js.map +0 -1
  655. package/dist/scrape/extract.d.ts +0 -63
  656. package/dist/scrape/extract.d.ts.map +0 -1
  657. package/dist/scrape/extract.js +0 -47
  658. package/dist/scrape/extract.js.map +0 -1
  659. package/dist/scrape/normalize.d.ts +0 -52
  660. package/dist/scrape/normalize.d.ts.map +0 -1
  661. package/dist/scrape/normalize.js +0 -102
  662. package/dist/scrape/normalize.js.map +0 -1
  663. package/dist/scrape/robots.d.ts +0 -37
  664. package/dist/scrape/robots.d.ts.map +0 -1
  665. package/dist/scrape/robots.js +0 -71
  666. package/dist/scrape/robots.js.map +0 -1
  667. package/dist/scrape/schema.d.ts +0 -23
  668. package/dist/scrape/schema.d.ts.map +0 -1
  669. package/dist/scrape/schema.js +0 -92
  670. package/dist/scrape/schema.js.map +0 -1
  671. package/dist/scrape/scraper.d.ts +0 -6
  672. package/dist/scrape/scraper.d.ts.map +0 -1
  673. package/dist/scrape/scraper.js +0 -46
  674. package/dist/scrape/scraper.js.map +0 -1
  675. package/dist/scrape/semantic.d.ts +0 -25
  676. package/dist/scrape/semantic.d.ts.map +0 -1
  677. package/dist/scrape/semantic.js +0 -27
  678. package/dist/scrape/semantic.js.map +0 -1
  679. package/dist/server/node.d.ts +0 -7
  680. package/dist/server/node.d.ts.map +0 -1
  681. package/dist/server/node.js.map +0 -1
  682. package/dist/sessions/file.d.ts +0 -25
  683. package/dist/sessions/file.d.ts.map +0 -1
  684. package/dist/sessions/file.js +0 -13
  685. package/dist/sessions/file.js.map +0 -1
  686. package/dist/sessions/replay.d.ts +0 -9
  687. package/dist/sessions/replay.d.ts.map +0 -1
  688. package/dist/sessions/replay.js +0 -70
  689. package/dist/sessions/replay.js.map +0 -1
  690. package/dist/sessions/store.d.ts +0 -25
  691. package/dist/sessions/store.d.ts.map +0 -1
  692. package/dist/sessions/store.js +0 -13
  693. package/dist/sessions/store.js.map +0 -1
  694. package/dist/storage/adapter.d.ts +0 -5
  695. package/dist/storage/adapter.d.ts.map +0 -1
  696. package/dist/storage/adapter.js +0 -11
  697. package/dist/storage/adapter.js.map +0 -1
  698. package/dist/storage/cache.d.ts +0 -23
  699. package/dist/storage/cache.d.ts.map +0 -1
  700. package/dist/storage/cache.js +0 -79
  701. package/dist/storage/cache.js.map +0 -1
  702. package/dist/storage/checksum.d.ts +0 -3
  703. package/dist/storage/checksum.d.ts.map +0 -1
  704. package/dist/storage/checksum.js +0 -19
  705. package/dist/storage/checksum.js.map +0 -1
  706. package/dist/storage/chunked.d.ts +0 -21
  707. package/dist/storage/chunked.d.ts.map +0 -1
  708. package/dist/storage/chunked.js +0 -67
  709. package/dist/storage/chunked.js.map +0 -1
  710. package/dist/storage/content.d.ts +0 -24
  711. package/dist/storage/content.d.ts.map +0 -1
  712. package/dist/storage/content.js +0 -44
  713. package/dist/storage/content.js.map +0 -1
  714. package/dist/storage/filehosting.d.ts +0 -2
  715. package/dist/storage/filehosting.d.ts.map +0 -1
  716. package/dist/storage/filehosting.js +0 -24
  717. package/dist/storage/filehosting.js.map +0 -1
  718. package/dist/storage/githubcontents.d.ts +0 -2
  719. package/dist/storage/githubcontents.d.ts.map +0 -1
  720. package/dist/storage/githubcontents.js +0 -29
  721. package/dist/storage/githubcontents.js.map +0 -1
  722. package/dist/storage/index.d.ts +0 -12
  723. package/dist/storage/index.d.ts.map +0 -1
  724. package/dist/storage/index.js +0 -12
  725. package/dist/storage/index.js.map +0 -1
  726. package/dist/storage/local.d.ts +0 -2
  727. package/dist/storage/local.d.ts.map +0 -1
  728. package/dist/storage/local.js +0 -72
  729. package/dist/storage/local.js.map +0 -1
  730. package/dist/storage/memory.d.ts +0 -6
  731. package/dist/storage/memory.d.ts.map +0 -1
  732. package/dist/storage/memory.js +0 -36
  733. package/dist/storage/memory.js.map +0 -1
  734. package/dist/storage/pool.d.ts +0 -95
  735. package/dist/storage/pool.d.ts.map +0 -1
  736. package/dist/storage/pool.js +0 -202
  737. package/dist/storage/pool.js.map +0 -1
  738. package/dist/storage/s3compatible.d.ts +0 -3
  739. package/dist/storage/s3compatible.d.ts.map +0 -1
  740. package/dist/storage/s3compatible.js +0 -70
  741. package/dist/storage/s3compatible.js.map +0 -1
  742. package/dist/storage/sync.d.ts +0 -47
  743. package/dist/storage/sync.d.ts.map +0 -1
  744. package/dist/storage/sync.js +0 -75
  745. package/dist/storage/sync.js.map +0 -1
  746. package/dist/surfaces/adapters.d.ts +0 -97
  747. package/dist/surfaces/adapters.d.ts.map +0 -1
  748. package/dist/surfaces/adapters.js +0 -50
  749. package/dist/surfaces/adapters.js.map +0 -1
  750. package/dist/surfaces/controls.d.ts +0 -18
  751. package/dist/surfaces/controls.d.ts.map +0 -1
  752. package/dist/surfaces/controls.js +0 -45
  753. package/dist/surfaces/controls.js.map +0 -1
  754. package/dist/surfaces/manifest.d.ts +0 -68
  755. package/dist/surfaces/manifest.d.ts.map +0 -1
  756. package/dist/surfaces/manifest.js +0 -42
  757. package/dist/surfaces/manifest.js.map +0 -1
  758. package/dist/surfaces/n8n.d.ts +0 -25
  759. package/dist/surfaces/n8n.d.ts.map +0 -1
  760. package/dist/surfaces/n8n.js +0 -31
  761. package/dist/surfaces/n8n.js.map +0 -1
  762. package/dist/surfaces/operations.d.ts +0 -32
  763. package/dist/surfaces/operations.d.ts.map +0 -1
  764. package/dist/surfaces/operations.js +0 -53
  765. package/dist/surfaces/operations.js.map +0 -1
  766. package/dist/surfaces/requirements.d.ts +0 -29
  767. package/dist/surfaces/requirements.d.ts.map +0 -1
  768. package/dist/surfaces/requirements.js +0 -50
  769. package/dist/surfaces/requirements.js.map +0 -1
  770. package/dist/surfaces/targets.d.ts +0 -196
  771. package/dist/surfaces/targets.d.ts.map +0 -1
  772. package/dist/surfaces/targets.js +0 -27
  773. package/dist/surfaces/targets.js.map +0 -1
  774. package/dist/webhook/delivery.d.ts +0 -18
  775. package/dist/webhook/delivery.d.ts.map +0 -1
  776. package/dist/webhook/delivery.js +0 -36
  777. package/dist/webhook/delivery.js.map +0 -1
  778. package/dist/webhook/receiver.d.ts +0 -26
  779. package/dist/webhook/receiver.d.ts.map +0 -1
  780. package/dist/webhook/receiver.js +0 -24
  781. package/dist/webhook/receiver.js.map +0 -1
  782. package/dist/webhook/signature.d.ts +0 -3
  783. package/dist/webhook/signature.d.ts.map +0 -1
  784. package/dist/webhook/signature.js +0 -7
  785. package/dist/webhook/signature.js.map +0 -1
  786. package/dist/workflow/manifest.d.ts +0 -22
  787. package/dist/workflow/manifest.d.ts.map +0 -1
  788. package/dist/workflow/manifest.js +0 -21
  789. package/dist/workflow/manifest.js.map +0 -1
  790. package/dist/workflow/registry.d.ts +0 -7
  791. package/dist/workflow/registry.d.ts.map +0 -1
  792. package/dist/workflow/registry.js +0 -18
  793. package/dist/workflow/registry.js.map +0 -1
  794. package/dist/workflow/templates.d.ts +0 -6
  795. package/dist/workflow/templates.d.ts.map +0 -1
  796. package/dist/workflow/templates.js +0 -18
  797. package/dist/workflow/templates.js.map +0 -1
  798. package/dist/workflow/triggers.d.ts +0 -64
  799. package/dist/workflow/triggers.d.ts.map +0 -1
  800. package/dist/workflow/triggers.js +0 -99
  801. package/dist/workflow/triggers.js.map +0 -1
  802. /package/{extension/README.md → docs/extension.md} +0 -0
@@ -0,0 +1,499 @@
1
+ # Alternatives - Ten Categories, Thirteen Engines, 105 Variants
2
+
3
+ The `alternatives.ts` module (1,218 lines, 29 exports) models the competitive
4
+ landscape of sandbox execution engines. Ten categories cover thirteen
5
+ concrete engines, every one wired through a real adapter implementing the
6
+ shared `SandboxEngine` interface (`create`/`exec`/`snapshot`/`destroy`/
7
+ `metrics`), so a host can swap execution backends without touching call
8
+ sites. Beyond the registry, this document consolidates the 105-variant
9
+ taxonomy (microVMM backends, Kata derivatives, secure runtimes, OCI engines,
10
+ hypervisor primitives, GPU mediation, compositional stacks, network and
11
+ storage derivations) and the open-source research landscape that produced it.
12
+ All versions and figures were confirmed on 2026-08-22 against primary
13
+ sources (release feeds, official docs, vendor blogs). Engine internals for
14
+ the runtimes e2ugh itself orchestrates (QEMU 11.1.0, Firecracker 1.16.1,
15
+ Cloud Hypervisor v53.0, Kata 4.1.0, gVisor) are specified in
16
+ `virtualization.md`; this document is about choosing among engines, not
17
+ re-describing them. Spoofing techniques belong to `viability.md`; benchmark
18
+ methodology to `performance.md`.
19
+
20
+ Contexts covered (25): SandboxEngine contract, EngineRegistry aliases,
21
+ selectEngine criteria, Wasmtime 48.0.0 fuel metering, gVisor systrap, Kata
22
+ 4.1.0 runtime-rs, Cloud Hypervisor v53.0 offloaded snapshots, WebContainers,
23
+ Daytona MCP, Modal elastic GPUs, Fly Machines snapshot resume, E2B family,
24
+ Vercel Sandbox $1M challenge, Apple Containers 1.2.2, CubeSandbox, EmberVM,
25
+ five-lens variant scoring, security posture tiers, compositional stacks,
26
+ SR-IOV vendor VFIO, passt, virtiofs DAX, open-sandbox-router, forge mirrors,
27
+ disruptive tiers.
28
+
29
+ ## Contents
30
+
31
+ 1. [How the adapters are wired](#wiring)
32
+ 2. [The ten categories](#categories)
33
+ 3. [Engines documented beyond the registry](#beyond)
34
+ 4. [Comparison matrix (13 engines)](#matrix)
35
+ 5. [Choosing with selectEngine](#selecting)
36
+ 6. [Variants and derivations: 105 variants](#variants)
37
+ 7. [Security posture tiers](#tiers)
38
+ 8. [Disruptive matrix](#disruptive)
39
+ 9. [Open-source research landscape](#landscape)
40
+ 10. [Forge mirrors](#forge)
41
+ 11. [Sources](#sources)
42
+
43
+ ## How the adapters are wired
44
+
45
+ Three code artifacts matter when reading this document:
46
+
47
+ | Artifact | Role |
48
+ |---|---|
49
+ | `SandboxEngine` interface | The five-method contract every adapter implements; `SandboxCapabilities` declares isolation class, snapshotting, network egress, GPU, self-hosting, and KVM requirements |
50
+ | `BaseEngine` abstract class | Consolidates lifecycle bookkeeping: a `#sandboxes` Map, per-engine `coldBootMs` and `execOverheadRatio` constants, and the `SandboxEngineError` type thrown on unknown sandboxes or missing capabilities |
51
+ | `EngineRegistry` + `createDefaultEngineRegistry()` | Factory registry with alias resolution (`runsc` -> gvisor, `ch` -> cloud-hypervisor, `wasm` -> wasmtime, `vercel` -> vercel-sandbox, `tupper` -> apple-containers); unknown ids raise a suggestion error listing the closest known engine |
52
+
53
+ The registry loads thirteen engines: wasmtime, gvisor, kata,
54
+ cloud-hypervisor, webcontainers, daytona, modal, fly-machines, e2b, morph,
55
+ cognitora, vercel-sandbox, and apple-containers. `comparisonMatrix` carries
56
+ the verified row data, `renderComparisonTable()` prints it as markdown for
57
+ CI logs, and `selectEngine(criteria)` scores the matrix by boot latency,
58
+ isolation, snapshot, GPU, and self-hosting needs, returning a ranked top
59
+ three.
60
+
61
+ ## The ten categories
62
+
63
+ ### 1. Wasmtime v48.0.0 LTS (wasm runtime)
64
+
65
+ How it works. Wasmtime executes WebAssembly components inside a sandbox with
66
+ no ambient authority by default: a component may only use the WASI interfaces
67
+ explicitly granted to it. Two interruption mechanisms bound runaway guests -
68
+ fuel metering (a deterministic per-instruction budget, 50 million in the
69
+ engine's canonical profile) and epoch interruption (a coarse wall-clock
70
+ deadline checked at callback points, roughly 10 percent overhead, 180 seconds
71
+ canonical). WASI 0.3.0 (ratified 2026-06-11) added native async calls to the
72
+ component model, and the v48 line (released 2026-08-20; libraries keep the
73
+ multiple-of-twelve line for long support) carries it alongside WASI 0.2.8.
74
+ The adapter models `setFuelBudget`, `setEpochDeadline`, the interrupt
75
+ policy, and a `runCommand` shape mirroring `wasmtime serve`.
76
+
77
+ | Attribute | Wasmtime v48.0.0 | e2ugh |
78
+ |---|---|---|
79
+ | Boot / instantiation | ~3 ms component instantiation | 125 ms (Firecracker) to 1-2 s (Docker cold) |
80
+ | Isolation | wasm sandbox, deny-by-default components | container + microVM hybrid with virtualized hardware views |
81
+ | License | Apache-2.0 WITH LLVM-exception | open-source repository over an MIT/Apache-2.0 stack |
82
+ | Self-host | yes, embeddable library | yes, self-hosted by design |
83
+
84
+ Choose Wasmtime when the workload is already a wasm component or compiles to
85
+ one, when millisecond instantiation beats POSIX compatibility, and when
86
+ deterministic resource budgets are mandatory (fuel is exact, unlike
87
+ wall-clock cgroup limits). Choose e2ugh when the workload runs unmodified
88
+ Python/Node/CUDA-flavored code, expects a full `/proc` with forged CPU and
89
+ memory views, or needs the Mesa software GPU APIs that wasm sandboxes do not
90
+ expose.
91
+
92
+ ### 2. gVisor release-20260817.0 (user-space kernel)
93
+
94
+ How it works. gVisor's `runsc` is an OCI runtime that implements the Linux
95
+ kernel surface in userspace: the Sentry intercepts guest syscalls and
96
+ services them itself instead of forwarding them to the host kernel. The
97
+ default systrap platform delivers syscalls through SECCOMP_RET_TRAP/SIGSYS
98
+ (faster than ptrace on most workloads; ptrace and KVM platforms also exist),
99
+ and DirectFS lets the Sentry hand selected filesystem operations to the host
100
+ to cut I/O costs. The measured cost is 10-30 percent on I/O-heavy workloads,
101
+ up to 2x on syscall-bound ones; io_uring is disabled by default (the policy
102
+ alignment with `security.md` is exact).
103
+
104
+ | Attribute | gVisor release-20260817.0 | e2ugh |
105
+ |---|---|---|
106
+ | Boot | ~35 ms sandbox start | 125 ms-2 s depending on runtime tier |
107
+ | Isolation | Sentry syscall interception (systrap) | container/microVM with virtualized devices |
108
+ | Overhead | 10-30 percent I/O; up to 2x syscall-bound | spoofing is report-level; execution is native CPU |
109
+ | Self-host | yes, OCI runtime (`docker --runtime runsc`) | yes |
110
+
111
+ Choose gVisor for defense in depth for unmodified Linux binaries inside
112
+ standard OCI images at near-native CPU speed with plain Docker/Kubernetes
113
+ tooling. Choose e2ugh when hardware spoofing is the actual product
114
+ requirement, or when the syscall tax on I/O-heavy agents is unacceptable.
115
+
116
+ ### 3. Kata Containers 4.1.0 (microVM container runtime)
117
+
118
+ How it works. Kata runs each container inside a lightweight VM, combining
119
+ Kubernetes/CRI compatibility with hardware isolation. Version 4.0.0 (GA July
120
+ 2026) made runtime-rs, the Rust runtime, the default and deprecated the Go
121
+ runtime (bugfix/security only until a removal not earlier than 5.0.0,
122
+ planned Q1 2028); 4.1.0 (2026-08-21) added OpenVMM support in runtime-rs,
123
+ Cloud Hypervisor VM templates, configurable nested virtualization, NVSwitch
124
+ passthrough via IOMMUFD, and a rootless+seccomp baseline for QEMU. Supported
125
+ hypervisors: QEMU, Cloud Hypervisor, Firecracker, Dragonball, OpenVMM.
126
+
127
+ | Attribute | Kata 4.1.0 | e2ugh |
128
+ |---|---|---|
129
+ | Boot | ~240 ms per pod VM (template-assisted) | 125 ms-2 s |
130
+ | Isolation | hardware-isolated microVM per container | container/microVM hybrid |
131
+ | KVM required | yes (`/dev/kvm`), absent on hosted runners | no (TCG fallback tier) |
132
+ | Self-host | yes, Kubernetes CRI | yes |
133
+
134
+ Choose Kata when the deployment is Kubernetes-first and each pod must be
135
+ hardware-isolated while keeping the CRI workflow. Choose e2ugh when the
136
+ target is a single-agent sandbox service with virtual hardware views, or
137
+ when KVM is unavailable - Kata, like Firecracker, requires `/dev/kvm`, which
138
+ GitHub-hosted runners do not expose.
139
+
140
+ ### 4. Cloud Hypervisor v53.0 (rust-vmm VMM)
141
+
142
+ How it works. Cloud Hypervisor is a virtual machine monitor built from
143
+ rust-vmm crates, speaking KVM on Linux and MSHV on Windows/Hyper-V, with
144
+ CPU/memory/PCI hotplug, VFIO passthrough, vhost-user devices, and Windows
145
+ guest support - the general-purpose VMM role Firecracker deliberately lacks.
146
+ The v53.0 release (2026-07-13) shipped the offloaded snapshot/restore daemon
147
+ (an external process that services restore page faults through userfaultfd
148
+ and vhost-user, moving snapshot work off the VMM thread), migratable
149
+ same-host VFIO devices, pre-opened VFIO character devices, and an
150
+ experimental vfio-user device backend attached through `ch-remote
151
+ add-user-device --socket=...`. The release cadence is a major version
152
+ roughly every six weeks.
153
+
154
+ | Attribute | Cloud Hypervisor v53.0 | e2ugh |
155
+ |---|---|---|
156
+ | Boot | ~90 ms microVM start | 125 ms-2 s |
157
+ | Isolation | KVM/MSHV microVM | container/microVM hybrid with virtualized views |
158
+ | Role | building block VMM | application-facing layer that can sit on top of it |
159
+
160
+ Choose Cloud Hypervisor when the product is a VMM or a snapshot-heavy cloud;
161
+ it is a component e2ugh itself can sit on top of. Choose e2ugh directly
162
+ when the requirement is the application-facing layer - forged `/proc`, virtual
163
+ nvidia-smi adapter, software GL/Vulkan/OpenCL - that a bare VMM does not provide.
164
+
165
+ ### 5. WebContainers by StackBlitz (browser runtime)
166
+
167
+ How it works. WebContainers run a Node.js-compatible runtime, including npm
168
+ installs, entirely inside the browser's sandbox: the Node APIs are
169
+ implemented in WebAssembly and WebWorkers, the filesystem lives in memory,
170
+ and networking is bound by same-origin policies. Boot is measured in
171
+ milliseconds (2-5 s for full boots including heavier frameworks), there is
172
+ zero server footprint - the compute is the client's tab - and the practical
173
+ isolate ceiling is 128 MB, which rules out megabyte-scale JSON parsing per
174
+ request. Ruby 3.3 WASM runs alongside Node tooling; COOP/COEP headers are
175
+ required for the multi-threaded paths. WebContainers are the foundation of
176
+ bolt.new, the AI web-development agent; the product is a commercial GA API
177
+ whose public repository hosts issues rather than source.
178
+
179
+ | Attribute | WebContainers | e2ugh |
180
+ |---|---|---|
181
+ | Boot | ~15 ms in-tab boot | 125 ms-2 s |
182
+ | Isolation | browser sandbox (same-origin policies) | container/microVM hybrid |
183
+ | Server cost | none (client-side) | self-hosted |
184
+ | License | proprietary (commercial API) | open source |
185
+
186
+ Choose WebContainers when the sandbox must run on end-user machines with no
187
+ server budget and the workload is npm/Node-centric. Choose e2ugh when
188
+ server-side execution is available (heavy CPU-bound rendering, CUDA-flavored
189
+ workloads, or /proc spoofing that browsers forbid), or when full Linux
190
+ filesystem semantics and Docker images are required.
191
+
192
+ ### 6. Daytona (self-hostable sandbox platform)
193
+
194
+ How it works. Daytona provisions stateful, full-Linux sandboxes for AI
195
+ agents, exposing them through an SDK and through the Model Context Protocol
196
+ (MCP), so agent frameworks can request sandboxes as tools; sandbox creation
197
+ is around 90 ms, and workspaces persist state across sessions (volumes FUSE
198
+ S3-backed, LSP, SSH, snapshots, hot resizing). The 2026 trajectory matters
199
+ for adopters: production source closed in June 2026, leaving the
200
+ open-source control-plane history and community forks (including Chinese
201
+ forks noted in the research pass) - the adapter models the ~90 ms figure and
202
+ carries an MCP tool descriptor, with the closure recorded as a risk fact.
203
+
204
+ | Attribute | Daytona | e2ugh |
205
+ |---|---|---|
206
+ | Boot | ~90 ms sandbox creation | 125 ms-2 s |
207
+ | Isolation | container sandbox, stateful workspaces | container/microVM hybrid with virtualized views |
208
+ | Status | OSS core history; production closed June 2026 | open source, no platform dependency |
209
+ | Self-host | core forks; original SaaS ended | yes |
210
+
211
+ Choose Daytona when a maintained platform (control plane, dashboard, MCP
212
+ integration) fits and a managed or forked third-party product is acceptable.
213
+ Choose e2ugh when the sandbox itself must present virtual hardware or the
214
+ requirement is a single embeddable engine with no platform dependency.
215
+
216
+ ### 7. Modal (serverless containers for AI)
217
+
218
+ How it works. Modal executes Python-first (JavaScript secondary) functions
219
+ and containers on a serverless fabric - gVisor on KVM internally - that
220
+ scales to 100,000+ concurrent sandboxes with sub-second scheduling; sessions
221
+ run up to 24 hours, and GPUs attach elastically across T4, L4, H100, H200
222
+ and B200 inventory. Cold starts with custom images are the acknowledged weak
223
+ point (~250 ms warm pool mitigation aside; the SDK benchmark below shows
224
+ 4.66 s end-to-end for a cold SQLite workload), and snapshots plus live
225
+ migration smooth long sessions.
226
+
227
+ | Attribute | Modal | e2ugh |
228
+ |---|---|---|
229
+ | Concurrency | 100,000+ sandboxes | bounded by operator hardware |
230
+ | GPUs | elastic real GPUs (T4 to B200) | software GPUs by design; real GPUs only via VFIO tiers |
231
+ | License | proprietary SaaS | open source |
232
+ | Self-host | no | yes |
233
+
234
+ Choose Modal when elastic scale and real GPUs on demand matter more than
235
+ hardware realism and a SaaS dependency is acceptable. Choose e2ugh when the
236
+ workload must believe it owns specific hardware (an agent that shells out to
237
+ nvidia-smi before choosing kernels), or when everything must run self-hosted
238
+ at zero marginal cost.
239
+
240
+ ### 8. Fly.io Machines (global microVM API)
241
+
242
+ How it works. Fly Machines expose Firecracker microVMs through a global API
243
+ across 30+ regions, with start times from 10 to 600 ms, per-millisecond
244
+ billing, snapshot resumption (~300 ms restore, P99 2 s, 100 GB NVMe
245
+ checkpoint volumes), and private networking (WireGuard mesh) between
246
+ machines. A Machine can be stopped and resumed with its memory intact, so
247
+ warm starts behave like Firecracker snapshot restores - the same mechanism
248
+ e2ugh's warm pool implements locally.
249
+
250
+ | Attribute | Fly.io Machines | e2ugh |
251
+ |---|---|---|
252
+ | Boot | ~300 ms create (sub-second start/stop) | 125 ms-2 s |
253
+ | Regions | 30+ global regions | wherever the operator hosts |
254
+ | License | proprietary SaaS | open source |
255
+
256
+ Choose Fly when global latency placement and an operated Firecracker fleet
257
+ are worth paying for. Choose e2ugh to self-host the whole stack, including
258
+ Firecracker itself on KVM-capable hardware, and to control the virtual
259
+ hardware presentation end to end.
260
+
261
+ ### 9. The E2B family (E2B, Morph, Cognitora, Vercel Sandbox)
262
+
263
+ How it works. This category gathers the AI-first sandbox clouds. E2B runs
264
+ agent code in Firecracker microVMs with ~150 ms cold starts achieved through
265
+ snapshot restore with userfaultfd, sessions capped at 24 hours, and an
266
+ Apache-2.0 SDK over a closed cloud (a self-host reference exists in
267
+ e2b-dev/infra: Nomad + Consul + Packer + Terraform 1.5.7 + PostgreSQL + S3).
268
+ Morph differentiates on VM forking: ~250 ms to fork a running VM so agents
269
+ explore parallel paths from a checkpoint. Cognitora is a smaller-footprint
270
+ AI code execution platform (Firecracker + Kata hardware-level isolation,
271
+ each execution with its own kernel, hvsock debugging via `socat stdin
272
+ unix-connect:kata.hvsock`). Vercel Sandbox reached GA on 2026-01-30, runs on
273
+ Firecracker at 2M+ builds/day (32 vCPU, 64 GB, 24 h ephemeral), and put a $1
274
+ million HackerOne challenge behind its security posture in August 2026. One
275
+ adapter (`E2bFamilyEngine`) covers all four through a `variant` selector.
276
+
277
+ | Attribute | E2B | Morph | Cognitora | Vercel Sandbox | e2ugh |
278
+ |---|---|---|---|---|---|
279
+ | Cold boot | ~150 ms | ~250 ms (fork) | ~220 ms | ~200 ms | 125 ms-2 s |
280
+ | Isolation | Firecracker microVM | forkable VM | per-execution kernel | Firecracker microVM | hybrid |
281
+ | License | Apache-2.0 SDK, closed infra | proprietary | proprietary | proprietary | open source |
282
+ | Self-host | reference only | no | no | no | yes |
283
+
284
+ Choose the E2B family when time-to-integration dominates: one SDK call
285
+ returns a running sandbox with an API key, and the cloud absorbs capacity
286
+ planning. Choose e2ugh when self-hosting, hardware spoofing, or per-sandbox
287
+ cost control is the driver - e2ugh targets E2B-class latency on hardware
288
+ the operator already owns. Related research artifacts: Zeropod (CRIU + eBPF
289
+ TCP redirect, turn-aware checkpointing) and Aivisor (namespaces + cgroupv2 +
290
+ Landlock + seccomp + eBPF LSM, four layers) document the family's
291
+ isolation internals.
292
+
293
+ ### 10. Apple Containers 1.2.2 (macOS container runtime)
294
+
295
+ How it works. Apple's open-source Swift project (Apache-2.0) runs each Linux
296
+ container in a lightweight microVM optimized for Apple Silicon, booting in
297
+ under one second; OCI images pull and run through a `container` CLI. v0.1.0
298
+ (2025-06) established the base using the Containerization Swift package and
299
+ the Kata 3.26.0 kernel (3.17.0 arm64); 1.0.0 landed 2026-07-06, 1.2.2 on
300
+ 2026-08-08, and WWDC26 (2026-06-08, session 389) introduced "container
301
+ machines" - persistent, lightweight Linux environments configured through
302
+ TOML. Security posture is Seatbelt (Landlock-like) plus seccomp for the
303
+ "mostly-helpful-but-careless agent" threat model rather than kernel/VM
304
+ boundaries; `/dev/shm` sizing needs a post-startup remount (no --shm-size
305
+ flag), the exact PyTorch pitfall `performance.md` documents for the Linux
306
+ path.
307
+
308
+ | Attribute | Apple Containers 1.2.2 | e2ugh |
309
+ |---|---|---|
310
+ | Boot | <1 s (600-900 ms modeled) | 125 ms-2 s |
311
+ | Host | macOS only (Apple Silicon) | Linux |
312
+ | License | Apache-2.0 | open source |
313
+
314
+ Choose Apple Containers when the fleet is macOS and the goal is Linux
315
+ containers with VM-grade isolation on developer machines or Mac mini
316
+ clusters. Choose e2ugh when the host is Linux, when x86_64 virtual CPU
317
+ models are needed (EPYC-v5 in QEMU), or when the Mesa software GPU trio
318
+ matters - the Apple Silicon path has its own graphics stack.
319
+
320
+ ## Engines documented beyond the registry
321
+
322
+ Two engines are documented in the research corpus without registry adapters,
323
+ kept out of the code because no public contract was verifiable on 2026-08-22
324
+ - they are documented facts, not invented adapters:
325
+
326
+ | Engine | Verified facts |
327
+ |---|---|
328
+ | CubeSandbox (TencentCloud) | rust-vmm/KVM microVM service for AI agents, E2B-compatible APIs, sub-60 ms startup, single-concurrency average 67 ms, P95 90 ms, P99 137 ms, under 5 MB per sandbox, eBPF isolation, credential vault (keys never enter the sandbox), CubeCoW snapshot framework, K8s + Terraform deployment |
329
+ | EmberVM | AGPL-3.0 Firecracker + ZFS + userfaultfd: O(1) copy-on-write clone, lazy page loading, working-set prefetch (pure lazy faulting 43 MB/s versus 533 MB/s with prefetch), Lz4 8-16 KiB chunks, FastCDC content-addressed S3 on Garage/SeaweedFS, resume average 400 ms P99 2 s, proven at CodeSandbox; supports nested virtualization on GCP/AWS C8i (2026-02+) and bare-metal Hetzner at EUR 25-40 |
330
+
331
+ ## Comparison matrix (all thirteen registered engines)
332
+
333
+ Boot times are the documented figures each adapter models.
334
+
335
+ | Engine | Version | Boot ms | Overhead | Isolation | Snapshot | Hosting |
336
+ |---|---|---|---|---|---|---|
337
+ | wasmtime | v48.0.0 | 3 | epoch guard ~10%; near-native | wasm sandbox, deny-by-default | component image | self-hosted library |
338
+ | gvisor | release-20260817.0 | 35 | 10-30% I/O; up to 2x syscall-bound | sentry syscall interception | none | self-hosted OCI runtime |
339
+ | kata | 4.1.0 | 240 | near-native after boot | hardware-isolated microVM per container | criu + hypervisor snapshots | self-hosted Kubernetes CRI |
340
+ | cloud-hypervisor | v53.0 | 90 | near-native | KVM/MSHV microVM | offloaded userfaultfd daemon | self-hosted rust-vmm crates |
341
+ | webcontainers | ga api | 15 | in-browser process emulation | browser sandbox | none | client-side commercial API |
342
+ | daytona | oss core + saas | 90 | light container layer | container sandbox, stateful | pause/resume state | self-hosted or saas |
343
+ | modal | saas | 250 | scheduling layer, near-native exec | cloud sandbox, elastic GPUs | warm pool snapshots | saas only |
344
+ | fly-machines | saas | 300 | near-native (Firecracker) | Firecracker microVM | firecracker snapshots | saas (30+ regions) |
345
+ | e2b | sdk apache-2.0 | 150 | near-native (Firecracker + UFFD restore) | microVM sandbox for agent code | uffd snapshot restore | saas (self-host reference) |
346
+ | morph | saas | 250 | near-native | forkable VM per agent path | vm fork | saas |
347
+ | cognitora | saas | 220 | near-native | cloud sandbox, per-execution kernel | none documented | saas |
348
+ | vercel-sandbox | ga 2026-01-30 | 200 | near-native (Firecracker) | microVM sandbox | none documented | saas |
349
+ | apple-containers | 1.2.2 | 600 | near-native on Apple Silicon | lightweight microVM per container | none | self-hosted (macOS) |
350
+
351
+ ## Choosing with selectEngine
352
+
353
+ The `selectEngine(criteria)` function scores the matrix with five weighted
354
+ criteria (boot latency, isolation, snapshot, GPU, self-hosting) and returns
355
+ a ranked top three; the criteria map directly to this decision table:
356
+
357
+ | If the requirement is... | Highest-scoring engines | Why |
358
+ |---|---|---|
359
+ | Millisecond instantiation of trusted code | wasmtime, webcontainers | no OS boot at all |
360
+ | Strongest isolation for unmodified Linux binaries | kata, gvisor, cloud-hypervisor | hardware VM or sentry interception |
361
+ | Snapshot/restore of running sandboxes | e2b, fly-machines, cloud-hypervisor | UFFD restore or offloaded snapshots |
362
+ | Real GPUs at elastic scale | modal | elastic GPU inventory |
363
+ | Self-hosted, virtualized virtual hardware | e2ugh itself | the only engine forging /proc and GPU APIs |
364
+
365
+ Positioning note: none of the thirteen engines claims e2ugh's core
366
+ capability - presenting virtual hardware (CPUs, memory, GPUs) that standard
367
+ Linux tooling reads as real while executing everything on software
368
+ rasterizers and emulated CPUs. The alternatives either virtualize real
369
+ hardware honestly (Kata, Cloud Hypervisor, Firecracker-based clouds),
370
+ isolate without hardware claims (gVisor, wasm), or move execution to the
371
+ client (WebContainers). The selection question is therefore not "which of
372
+ these replaces e2ugh" but "which tier of the stack each one occupies" -
373
+ and several of them (Wasmtime, Cloud Hypervisor, Firecracker) are
374
+ simultaneously components e2ugh orchestrates internally.
375
+
376
+ ## Variants and derivations: 105 variants
377
+
378
+ The variant taxonomy enumerates 105 runtime alternatives across eight
379
+ tables, each variant scored 0-10 under five lenses: Optimized (latency and
380
+ throughput tuned), Robust (hardened, audited, CVE SLA), Simple (few
381
+ dependencies, runs without /dev/kvm), Disruptive (research frontier,
382
+ changes the security model), Realistic (balanced default). The layer
383
+ notation: L0 silicon, L1 hypervisor primitive, L2 VMM, L3 secure container
384
+ wrapper, L4 OCI runtime UX, L5 orchestration and config.
385
+
386
+ | Table | Count | Representative variants | Key analysis |
387
+ |---|---|---|---|
388
+ | 1. MicroVMM backends | 15 | QEMU-KVM q35 (V001), CH-IOThreads (V004), FC+Jailer (V006), CrosVM (V007), StratoVirt (V008), Dragonball (V009), CH-TDX (V010), SEV-SNP CC (V011), pKVM (V012), OpenVMM (V015) | QEMU is the only VMM with GPU+TDX+SEV-SNP together; AI labs converge on Firecracker |
389
+ | 2. Kata derivatives | 12 | kata-qemu-standard (K016), kata-clh (K017), kata-fc (K018), SEV-SNP confidential (K019), kata-qemu-nvidia-gpu-snp (K023), SR-IOV VFIO variant (K025), CoCo OPA (K027) | K025 is mandatory for Ada+/Blackwell: NVIDIA retired mdev on kernel 6.8+, replaced by vendor VFIO via SR-IOV VFs |
390
+ | 3. Secure runtimes | 12 | gVisor-KVM (S028), gVisor-ptrace-rootless (S029), Nabla (S030), Edera per-kernel (S031/S039), Sysbox (S032), Firejail (S036), nsjail (S037) | Edera eliminates shared kernel state with a per-container kernel; Nabla is EOL (2022) |
391
+ | 4. OCI engines | 12 | Docker CE BuildKit (O040), Podman rootless (O041), nerdctl (O042), containerd raw (O043), CRI-O (O044), Incus (O045), nspawn (O047), Finch (O048) | Docker default for build and CI; containerd/CRI-O inside Kubernetes |
392
+ | 5. Hypervisor primitives | 12 | KVM (H052), ARM CCA (H053), Hyper-V WS2025 (H054), bhyve (H056), Xen PVH (H057), ESXi (H058), Apple Vz (H059), TCG fallback (H063) | H063 is the no-KVM fallback: detect CPUID hypervisor bit and fall back from Kata to gVisor or TCG (10-100x slower) |
393
+ | 6. GPU mediation | 12 | whole-GPU VFIO (G064), legacy mdev (G065), SR-IOV vendor VFIO (G066), MIG (G067), virtio-gpu virgl/venus (G068), API remoting rCUDA/WSL2 (G070), MIGv2+CC (G075) | G066 is the 2026 default for Blackwell/L40S; whole passthrough remains the only driver-free option |
394
+ | 7. Compositional stacks | 15 | QEMU+Docker+gVisor (C076), SEV-SNP+CoCo (C079), Blackwell 2xB200+SR-IOV-12VF+Edera flagship (C089), Xen edge telco (C090) | C089 combines G066+G073+G075 with per-kernel zones at Tier 4+ |
395
+ | 8. Network and storage | 15 | vhost-user-DPDK 18 us (N091), passt rootless (N092), SR-IOV 8 us (N095), virtiofs DAX (N096), virtio-blk io_uring (N097), SPDK (N100), EROFS/Nydus lazy (N101), vsock (N102), iommufd v2 (N105) | passt replaces slirp for rootless; virtiofs DAX default for shared trees |
396
+
397
+ Realistic defaults distilled from the matrix: KVM + Cloud Hypervisor
398
+ (no-GPU labs) or QEMU VFIO-variant (Blackwell); kata-clh and kata-qemu
399
+ SR-IOV variant; gVisor runsc KVM with ptrace fallback; Docker 29.7+/nerdctl
400
+ (the variants freeze was measured at 27.3 and re-pinned date-first);
401
+ passt + virtiofs DAX + virtio-blk io_uring + iommufd v2. Performance notes
402
+ from the reference host (Ryzen 9 9950X3D or Threadripper 7980X, WRX90, 2x
403
+ B200, 100 Gb SR-IOV): bare container spawn 45 ms; gVisor KVM 180 ms at 5
404
+ percent nginx overhead; CH microVM 165-210 ms at 2 percent; Firecracker
405
+ jailer 125-135 ms; QEMU q35 KVM 850 ms cold, 420 ms with microvm machine;
406
+ SEV-SNP +250 ms attestation; VFIO whole-GPU under 1 percent of bare-metal
407
+ CUDA (7.8 TB/s sustained HBM3e); SR-IOV VF 2-4 percent under whole-GPU; MIG
408
+ 1g slice delivers 1/7 compute with full isolation. Rootless note: Podman
409
+ rootless with passt loses 2-3 percent throughput to userspace NAT but
410
+ removes the tun/tap CAP_NET_ADMIN requirement.
411
+
412
+ ## Security posture tiers
413
+
414
+ | Tier | Variants included | Isolation guarantee | Attack surface | GPU CC |
415
+ |---|---|---|---|---|
416
+ | 1 Host container | Docker alone | process + namespaces (weak) | ~400 syscalls | no |
417
+ | 2 Filtered | gVisor, Firejail, passt | syscall filter, ~50 percent reduction; user namespaces | ~200 + seccomp BPF | no |
418
+ | 3 VM | QEMU/CH + Kata | hardware VT-x/EPT/IOMMU boundary | ~20 virtio devices | no |
419
+ | 4 vGPU + per-kernel | SR-IOV VFIO + Edera zones | per-container kernel + isolated VF | ~5 devices per zone | optional |
420
+ | 5 Confidential | SEV-SNP/TDX/CoCo | measured boot + KBS attestation + dm-verity + OPA | ~5 + attestation | via MIGv2-CC |
421
+
422
+ Tier definitions align with the engine's own layering in `security.md`:
423
+ tiers 2-5 are additive depth rungs on the same ladder, and the confidential
424
+ tier reuses the TDX/SEV-SNP flags already wired into the QEMU wrapper.
425
+
426
+ ## Disruptive matrix
427
+
428
+ The disruptive-tier comparison from the research corpus (executors ranked by
429
+ what they emulate and what they honestly cannot):
430
+
431
+ | Tier | Executor | Verdict from research |
432
+ |---|---|---|
433
+ | Baseline | LLVMpipe container | simplest, free, zero hardware - the e2ugh foundation |
434
+ | Similar | SwiftShader | comparable CPU Vulkan (Chrome lineage), generally worse than Mesa 2026 |
435
+ | Emulation | QEMU TCG user-mode | slower; user-mode static builds 5-10x lighter than full-system |
436
+ | Emulation | QEMU full-system MTTCG | much slower; one host thread per vCPU; can emulate any CPU |
437
+ | MicroVM | Firecracker self-hosted | real host hardware, 125 ms, 150 VMs/s, under 5 MB; closest E2B path; needs KVM |
438
+ | Interception | gVisor runsc | ~30 percent syscall overhead; more secure; zero hardware claims |
439
+ | MicroVM | Kata Containers | 4,749 MB/s versus Kata 1,113 MB/s in the Firecracker comparison (4.3x); hardware isolation |
440
+ | VMM | Cloud Hypervisor | general-purpose Rust VMM; hotplug; VFIO |
441
+ | WASM | Wasmtime fuel metering | fast, deterministic, JS-friendly; no POSIX fidelity |
442
+ | Browser | WebContainers | Node.js in the browser via WASM; no server |
443
+ | Cloud | Vercel Sandbox | GA 2026-01, Firecracker, 2M builds/day, 32 vCPU/64 GB |
444
+ | Cloud | Modal / Fly / CubeSandbox / EmberVM | elastic GPUs; global Firecracker; 67 ms P95; uffd O(1) clones |
445
+
446
+ ## Open-source research landscape
447
+
448
+ The 1000+ search multilingual pass catalogued the ecosystem in ten
449
+ categories (E2B alternatives, Firecracker-based, Kata+CH, WASM sandboxes,
450
+ GPU virtualization alternatives, virtual-hardware interception libraries, Docker
451
+ optimizations, emerging trends, study repositories, conclusion). Repos with
452
+ direct engineering value:
453
+
454
+ | Repository | Value |
455
+ |---|---|
456
+ | Mossaka/awesome-agent-sandboxes | 80+ tools: the canonical index of the category |
457
+ | e2b-dev/infra | Apache-2.0 self-host reference (Nomad, Consul, Packer, Terraform 1.5.7) |
458
+ | arpeetk/open-sandbox-router | provider-agnostic router across e2b, modal, vercel, kubernetes with failover |
459
+ | majestic81/firecracker-sandbox-skill | self-hosted E2B-class sandbox: 125 ms, 150 VMs/s, jailer + seccomp |
460
+ | joshuaisaact/hearth | local-first KVM microVMs; Apple hypervisor on Mac, Firecracker on Linux |
461
+ | zkwentz/sandbox-bench | benchmark suite (Time, Errors, Friction, ToolCalls, Cost) across providers |
462
+ | agentstep/mvm | hardware-isolated Linux VMs on Mac in 0.35 s |
463
+ | lmasiero/tupper | isolation-tier taxonomy (process/container/microVM) with boot bands |
464
+ | copyleftdev/micro-containers | 5-runtime benchmark: runc vs gVisor vs Kata-QEMU vs Kata-FC vs WASM on one 3 MB Go binary |
465
+ | stantheawesomeman/memoverlay, cdt4/dolos, pogusthewhisper/fake-nvidia-smi, x0x0x00/gpuadapter, rick-hsu/nvml-unified-shim | the fake-hardware library tier (mechanisms in `viability.md`) |
466
+ | fdevx/qemu-bench-method | reproducible QEMU benchmark methodology |
467
+
468
+ Emerging trends confirmed by the pass: Firecracker dominance for agent
469
+ isolation; Rusticl winning after Clover deletion (Mesa 25.2); AVX-512
470
+ LLVMpipe on Zen 4 and Sapphire Rapids; WASM fuel metering for infinite-loop
471
+ control; free arm64 GitHub runners; Kata + Cloud Hypervisor flexibility.
472
+
473
+ ## Forge mirrors
474
+
475
+ Distribution mirrors keep the zero-dollar property end to end (the full
476
+ publishing workflow is specified in `architecture.md`):
477
+
478
+ | Mirror | Mechanism | Cost |
479
+ |---|---|---|
480
+ | GitHub | public repository; Actions unlimited minutes; self-hosted runners optional | $0 for public repos |
481
+ | GHCR | container registry storage and bandwidth for public images | $0 |
482
+ | npm | package publication with provenance, 21 formats supported across ecosystems (npm, pnpm, yarn, bun, nuget, maven, pypi, cargo, go modules, dart pub, composer, gradle, homebrew, chocolatey, winget, snap, flatpak, helm, oci, mcp, vsix) | $0 |
483
+
484
+ ## Sources
485
+
486
+ - Wasmtime releases: https://github.com/bytecodealliance/wasmtime/releases - interruption: https://docs.wasmtime.dev/examples-interrupting-wasm
487
+ - WASI roadmap: https://wasi.dev/roadmap - component model: https://component-model.bytecodealliance.org
488
+ - gVisor platforms: https://gvisor.dev/docs/architecture_guide/platforms - performance: https://gvisor.dev/docs/architecture_guide/performance - releases: https://github.com/google/gvisor/releases
489
+ - Kata 4.0.0 overview: https://katacontainers.io/blog/kata-containers-4-0-0-release-overview - releases: https://github.com/kata-containers/kata-containers/releases
490
+ - Cloud Hypervisor: https://www.cloudhypervisor.org, https://github.com/cloud-hypervisor/cloud-hypervisor/releases, https://www.phoronix.com/news/Cloud-Hypervisor-53
491
+ - WebContainers: https://webcontainers.io and https://blog.stackblitz.com/posts/introducing-webcontainers
492
+ - Daytona: https://daytona.io - Modal: https://modal.com - Fly Machines: https://fly.io/machines
493
+ - E2B: https://e2b.dev, https://github.com/e2b-dev/e2b, https://e2b.dev/blog/firecracker-vs-qemu, self-host: https://github.com/e2b-dev/infra/blob/main/self-host.md
494
+ - Morph: https://morphllm.com/comparisons/daytona-alternative - Cognitora: https://cognitora.dev
495
+ - Vercel Sandbox GA: https://vercel.com/blog/vercel-sandbox-is-now-generally-available - $1M challenge: https://vercel.com/blog/one-million-dollar-hacker-challenge-for-vercel-sandbox
496
+ - Apple container: https://github.com/apple/container and https://developer.apple.com/videos/play/wwdc2026/389
497
+ - Northflank alternatives: https://northflank.com/blog/self-hostable-alternatives-to-daytona - Upstash providers: https://upstash.com/blog/best-sandbox-providers-for-ai-agents
498
+ - Mossaka awesome-agent-sandboxes: https://github.com/mossaka/awesome-agent-sandboxes - Unit42: https://unit42.paloaltonetworks.com
499
+ - GitHub Actions limits: https://docs.github.com/en/actions/usage-limits - GHCR: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry
@@ -0,0 +1,76 @@
1
+ # Saddle 1.8.19 architecture organization
2
+
3
+ ## Objective
4
+
5
+ This reorganization preserves every existing capability while making ownership and dependency direction easier to inspect. The root entry point remains a thin universal router. Public contracts remain additive and stable. Existing package subpaths remain compatible. Generated `dist/` output remains untracked.
6
+
7
+ > A domain groups correlated behavior, contracts and tests. It is not a claim that unrelated code is removed or that an infrastructure adapter is activated.
8
+
9
+ ## Twenty correlated domains
10
+
11
+ | ID | Domain | Current ownership | Allowed direction |
12
+ | --- | --- | --- | --- |
13
+ | 01 | Public surface | `index.ts`, `library/` | Re-exports domain façades only. |
14
+ | 02 | Foundation | `core/` | Defines errors, identifiers, hashing, events and serializable nouns. |
15
+ | 03 | Isolation policy | `isolation/`, API policy helpers | Evaluates approval, denial, handoff and receipt boundaries. |
16
+ | 04 | Execution planning | `runtime/`, `runners/` | Plans and observes work through caller-owned adapters. |
17
+ | 05 | Memory planning | `memory/` | Defines internal working-set, targets, transforms and bounded plans. |
18
+ | 06 | Storage planning | `storage/` | Defines adapter-owned content, cache, chunk and synchronization contracts. |
19
+ | 07 | Persistence | `persistence/` | Defines optional schema, migration and provider-neutral persistence adapters. |
20
+ | 08 | Browser | `browser/`, `extension/` | Defines browser, virtual-browser, extension and session contracts without user-profile access. |
21
+ | 09 | Acquisition | `scrape/`, `captcha/` | Defines request, crawl, extract, proxy and challenge contracts. |
22
+ | 10 | Communication | `api/` | Defines authenticated envelopes, transports, rate policy and event serialization. |
23
+ | 11 | External adapters | `adapters/` | Defines replaceable forge, socket, app and MCP adapters. |
24
+ | 12 | Automation | `automation/`, `surfaces/` | Defines automation manifests, permissions, triggers and surface requirements. |
25
+ | 13 | Intelligence | `ai/` | Defines token, chunk, retrieval, provenance and metric contracts. |
26
+ | 14 | Binary handling | `binary/` | Defines archive, build and transformation plans without execution. |
27
+ | 15 | Distribution | `packager/`, `release/` | Defines package, artifact, delivery, readiness and evidence contracts; filesystem-backed asset verification remains an explicit subpath. |
28
+ | 16 | Modes | `modes/`, `server/` | Defines target modes, surface profiles and host-neutral service/deployment adapters; the Node server remains an explicit subpath only. |
29
+ | 17 | Commands | `cli/` | Defines command parsing, presentation and command-level integration. |
30
+ | 18 | Web application | `web/` | Defines static routes, UI components, visual assets and build boundaries. |
31
+ | 19 | Native modes | `desktop/`, `android/`, `ios/`, `extension/` | Defines platform packaging metadata and calls library contracts. |
32
+ | 20 | Quality and operations | `tests/`, `.github/`, `docs/` | Defines deterministic evidence, build checks, release operations and architecture records. |
33
+
34
+ ## Dependency flow
35
+
36
+ ![Rendered organization diagram](architecture-1.8.19.png)
37
+
38
+ ```mermaid
39
+ flowchart TD
40
+ public[Public surface] --> foundation[Foundation]
41
+ public --> policy[Isolation policy]
42
+ public --> execution[Execution planning]
43
+ public --> memory[Memory planning]
44
+ public --> storage[Storage planning]
45
+ public --> browser[Browser]
46
+ public --> acquisition[Acquisition]
47
+ public --> communication[Communication]
48
+ public --> automation[Automation]
49
+ public --> intelligence[Intelligence]
50
+ public --> binary[Binary handling]
51
+ public --> distribution[Distribution]
52
+ public --> modes[Modes]
53
+ foundation --> policy
54
+ policy --> execution
55
+ memory --> storage
56
+ storage --> persistence[Persistence]
57
+ acquisition --> browser
58
+ automation --> communication
59
+ execution --> adapters[External adapters]
60
+ browser --> adapters
61
+ communication --> adapters
62
+ binary --> distribution
63
+ modes --> surfaces[Commands, web and native modes]
64
+ distribution --> operations[Quality and operations]
65
+ surfaces --> operations
66
+ ```
67
+
68
+ The root may import only domain façades. Each façade may import its owned modules and lower-level contracts. Runtime, browser, storage, binary and remote-provider behavior remain adapter-owned: no domain may add implicit host, filesystem, browser-profile, network or provider effects.
69
+
70
+ ## Compatibility rules
71
+
72
+ Existing module paths referenced by package exports remain valid. A module may be moved only after a compatibility shim or an equivalent export is in place, all relative imports are updated, and the package dry-run includes the expected output. Native mode metadata, workflow paths, CLI command paths and static web routing are release boundaries and therefore move only with corresponding validation.
73
+
74
+ ## Implementation order
75
+
76
+ The first reorganization block groups the public root exports behind domain façades. The second groups adjacent library modules where no package subpath or native workflow depends on their exact location. The final block aligns tests and documentation with the same 20 domains. Each block must pass the engine build, active tests, legacy tests, formatting, package inspection, web checks and native-flat validation before the next block begins.
@@ -0,0 +1,33 @@
1
+ flowchart TD
2
+ public[01 Public surface] --> foundation[02 Foundation]
3
+ public --> policy[03 Isolation policy]
4
+ public --> execution[04 Execution]
5
+ public --> memory[05 Memory]
6
+ public --> storage[06 Storage]
7
+ public --> persistence[07 Persistence]
8
+ public --> browser[08 Browser]
9
+ public --> acquisition[09 Acquisition]
10
+ public --> communication[10 Communication]
11
+ public --> integration[11 External adapters]
12
+ public --> automation[12 Automation]
13
+ public --> intelligence[13 Intelligence]
14
+ public --> binary[14 Binary]
15
+ public --> distribution[15 Distribution]
16
+ public --> modes[16 Modes]
17
+ public --> commands[17 Commands]
18
+ public --> web[18 Web application]
19
+ public --> native[19 Native modes]
20
+ public --> quality[20 Quality operations]
21
+ foundation --> policy
22
+ policy --> execution
23
+ memory --> storage --> persistence
24
+ acquisition --> browser
25
+ automation --> communication --> integration
26
+ execution --> integration
27
+ browser --> integration
28
+ binary --> distribution --> quality
29
+ modes --> commands
30
+ modes --> web
31
+ modes --> native
32
+ web --> quality
33
+ native --> quality
Binary file