@wenathlan/saddle 1.8.18 → 2.0.3

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 +1346 -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/packager/targetcli.js +4 -22
  89. package/dist/performance.d.ts +416 -0
  90. package/dist/performance.d.ts.map +1 -0
  91. package/dist/performance.js +827 -0
  92. package/dist/performance.js.map +1 -0
  93. package/dist/quantum.d.ts +810 -0
  94. package/dist/quantum.d.ts.map +1 -0
  95. package/dist/quantum.js +2073 -0
  96. package/dist/quantum.js.map +1 -0
  97. package/dist/render.d.ts +381 -0
  98. package/dist/render.d.ts.map +1 -0
  99. package/dist/render.js +1073 -0
  100. package/dist/render.js.map +1 -0
  101. package/dist/scheduler.d.ts +596 -0
  102. package/dist/scheduler.d.ts.map +1 -0
  103. package/dist/scheduler.js +1259 -0
  104. package/dist/scheduler.js.map +1 -0
  105. package/dist/security.d.ts +501 -0
  106. package/dist/security.d.ts.map +1 -0
  107. package/dist/security.js +1170 -0
  108. package/dist/security.js.map +1 -0
  109. package/dist/server.d.ts +21 -0
  110. package/dist/server.d.ts.map +1 -0
  111. package/dist/{server/node.js → server.js} +16 -2
  112. package/dist/server.js.map +1 -0
  113. package/dist/tiers.d.ts +1002 -0
  114. package/dist/tiers.d.ts.map +1 -0
  115. package/dist/tiers.js +2165 -0
  116. package/dist/tiers.js.map +1 -0
  117. package/dist/virtual.d.ts +641 -0
  118. package/dist/virtual.d.ts.map +1 -0
  119. package/dist/virtual.js +1285 -0
  120. package/dist/virtual.js.map +1 -0
  121. package/dist/virtualcpu.d.ts +316 -0
  122. package/dist/virtualcpu.d.ts.map +1 -0
  123. package/dist/virtualcpu.js +1180 -0
  124. package/dist/virtualcpu.js.map +1 -0
  125. package/dist/virtualgpu.d.ts +345 -0
  126. package/dist/virtualgpu.d.ts.map +1 -0
  127. package/dist/virtualgpu.js +1000 -0
  128. package/dist/virtualgpu.js.map +1 -0
  129. package/dist/virtualization.d.ts +607 -0
  130. package/dist/virtualization.d.ts.map +1 -0
  131. package/dist/virtualization.js +1187 -0
  132. package/dist/virtualization.js.map +1 -0
  133. package/dist/virtualmemory.d.ts +818 -0
  134. package/dist/virtualmemory.d.ts.map +1 -0
  135. package/dist/virtualmemory.js +1796 -0
  136. package/dist/virtualmemory.js.map +1 -0
  137. package/dist/webscrape.d.ts +720 -0
  138. package/dist/webscrape.d.ts.map +1 -0
  139. package/dist/webscrape.js +2697 -0
  140. package/dist/webscrape.js.map +1 -0
  141. package/docker.config +769 -0
  142. package/docs/CONVERSA.txt +1523 -0
  143. package/docs/alternatives.md +499 -0
  144. package/docs/architecture-1.8.19.md +76 -0
  145. package/docs/architecture-1.8.19.mmd +33 -0
  146. package/docs/architecture-1.8.19.png +0 -0
  147. package/docs/architecture.md +355 -0
  148. package/docs/brancharchive-2026-08-18.md +18 -0
  149. package/docs/browser.md +7 -0
  150. package/docs/consolidation.md +70 -0
  151. package/docs/e2ugh-engine.md +528 -0
  152. package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
  153. package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
  154. package/docs/hardware.md +342 -0
  155. package/docs/optimization.md +126 -0
  156. package/docs/performance.md +499 -0
  157. package/docs/planning.1.8.18.md +94 -0
  158. package/docs/planning.1.8.19.md +49 -0
  159. package/docs/releasenotes-1.8.19.md +35 -0
  160. package/docs/research-1.8.19-virtual-browser.md +27 -0
  161. package/docs/security.md +454 -0
  162. package/docs/todo-1.8.18.md +12 -0
  163. package/docs/todo-1.8.19.md +241 -0
  164. package/docs/viability.md +777 -0
  165. package/docs/virtualization.md +335 -0
  166. package/docs/web-duplicatecleanup.md +9 -0
  167. package/docs/web-ideas.md +106 -0
  168. package/docs/workflowimprovements-2026-08-19.md +70 -0
  169. package/gpumonitor.cpp +1543 -0
  170. package/gpus.json +2408 -0
  171. package/index.ts +1478 -0
  172. package/media.ts +1337 -0
  173. package/mttg.config +1549 -0
  174. package/orchestrator.ts +5462 -0
  175. package/package.json +304 -56
  176. package/passage.config +1331 -0
  177. package/performance.ts +1049 -0
  178. package/processors.json +2217 -0
  179. package/qemu.config +1062 -0
  180. package/qemubridge.py +1340 -0
  181. package/quantum.ts +2393 -0
  182. package/render.ts +1325 -0
  183. package/scheduler.ts +1600 -0
  184. package/security.ts +1449 -0
  185. package/tiers.ts +2871 -0
  186. package/tsconfig.json +29 -0
  187. package/virtualcpu.ts +1273 -0
  188. package/virtualgpu.ts +1181 -0
  189. package/virtualhardware.c +1011 -0
  190. package/virtualhardware.json +739 -0
  191. package/virtualization.ts +1628 -0
  192. package/virtualizationcore.cpp +4635 -0
  193. package/virtualmemory.ts +2303 -0
  194. package/vm.config.json +1910 -0
  195. package/{extension → web/extension}/manifest.json +1 -1
  196. package/web/readme.md +382 -0
  197. package/web/tsconfig.json +25 -0
  198. package/dist/adapters/forge.d.ts +0 -17
  199. package/dist/adapters/forge.d.ts.map +0 -1
  200. package/dist/adapters/forge.js +0 -19
  201. package/dist/adapters/forge.js.map +0 -1
  202. package/dist/adapters/forgejo.d.ts +0 -49
  203. package/dist/adapters/forgejo.d.ts.map +0 -1
  204. package/dist/adapters/forgejo.js +0 -8
  205. package/dist/adapters/forgejo.js.map +0 -1
  206. package/dist/adapters/github.d.ts +0 -12
  207. package/dist/adapters/github.d.ts.map +0 -1
  208. package/dist/adapters/github.js +0 -20
  209. package/dist/adapters/github.js.map +0 -1
  210. package/dist/adapters/gitlab.d.ts +0 -17
  211. package/dist/adapters/gitlab.d.ts.map +0 -1
  212. package/dist/adapters/gitlab.js +0 -10
  213. package/dist/adapters/gitlab.js.map +0 -1
  214. package/dist/adapters/huggingface.d.ts +0 -17
  215. package/dist/adapters/huggingface.d.ts.map +0 -1
  216. package/dist/adapters/huggingface.js +0 -6
  217. package/dist/adapters/huggingface.js.map +0 -1
  218. package/dist/adapters/socket.d.ts +0 -11
  219. package/dist/adapters/socket.d.ts.map +0 -1
  220. package/dist/adapters/socket.js +0 -17
  221. package/dist/adapters/socket.js.map +0 -1
  222. package/dist/adapters/transport.d.ts +0 -7
  223. package/dist/adapters/transport.d.ts.map +0 -1
  224. package/dist/adapters/transport.js +0 -36
  225. package/dist/adapters/transport.js.map +0 -1
  226. package/dist/ai/chunk.d.ts +0 -2
  227. package/dist/ai/chunk.d.ts.map +0 -1
  228. package/dist/ai/chunk.js +0 -36
  229. package/dist/ai/chunk.js.map +0 -1
  230. package/dist/ai/llmstxt.d.ts +0 -6
  231. package/dist/ai/llmstxt.d.ts.map +0 -1
  232. package/dist/ai/llmstxt.js +0 -12
  233. package/dist/ai/llmstxt.js.map +0 -1
  234. package/dist/ai/provenance.d.ts +0 -22
  235. package/dist/ai/provenance.d.ts.map +0 -1
  236. package/dist/ai/provenance.js +0 -25
  237. package/dist/ai/provenance.js.map +0 -1
  238. package/dist/ai/rag.d.ts +0 -26
  239. package/dist/ai/rag.d.ts.map +0 -1
  240. package/dist/ai/rag.js +0 -22
  241. package/dist/ai/rag.js.map +0 -1
  242. package/dist/ai/tokens.d.ts +0 -15
  243. package/dist/ai/tokens.d.ts.map +0 -1
  244. package/dist/ai/tokens.js +0 -9
  245. package/dist/ai/tokens.js.map +0 -1
  246. package/dist/api/auth.d.ts +0 -16
  247. package/dist/api/auth.d.ts.map +0 -1
  248. package/dist/api/auth.js +0 -19
  249. package/dist/api/auth.js.map +0 -1
  250. package/dist/api/contracts.d.ts +0 -28
  251. package/dist/api/contracts.d.ts.map +0 -1
  252. package/dist/api/contracts.js +0 -14
  253. package/dist/api/contracts.js.map +0 -1
  254. package/dist/api/control.d.ts +0 -10
  255. package/dist/api/control.d.ts.map +0 -1
  256. package/dist/api/control.js +0 -35
  257. package/dist/api/control.js.map +0 -1
  258. package/dist/api/http.d.ts +0 -7
  259. package/dist/api/http.d.ts.map +0 -1
  260. package/dist/api/http.js +0 -12
  261. package/dist/api/http.js.map +0 -1
  262. package/dist/api/rate.d.ts +0 -28
  263. package/dist/api/rate.d.ts.map +0 -1
  264. package/dist/api/rate.js +0 -36
  265. package/dist/api/rate.js.map +0 -1
  266. package/dist/api/security.d.ts +0 -12
  267. package/dist/api/security.d.ts.map +0 -1
  268. package/dist/api/security.js +0 -56
  269. package/dist/api/security.js.map +0 -1
  270. package/dist/api/service.d.ts +0 -5
  271. package/dist/api/service.d.ts.map +0 -1
  272. package/dist/api/service.js +0 -70
  273. package/dist/api/service.js.map +0 -1
  274. package/dist/apps/registry.d.ts +0 -33
  275. package/dist/apps/registry.d.ts.map +0 -1
  276. package/dist/apps/registry.js +0 -24
  277. package/dist/apps/registry.js.map +0 -1
  278. package/dist/binary/archive.d.ts +0 -27
  279. package/dist/binary/archive.d.ts.map +0 -1
  280. package/dist/binary/archive.js +0 -46
  281. package/dist/binary/archive.js.map +0 -1
  282. package/dist/binary/build.d.ts +0 -29
  283. package/dist/binary/build.d.ts.map +0 -1
  284. package/dist/binary/build.js +0 -17
  285. package/dist/binary/build.js.map +0 -1
  286. package/dist/binary/transform.d.ts +0 -70
  287. package/dist/binary/transform.d.ts.map +0 -1
  288. package/dist/binary/transform.js +0 -105
  289. package/dist/binary/transform.js.map +0 -1
  290. package/dist/bot/adapter.d.ts +0 -5
  291. package/dist/bot/adapter.d.ts.map +0 -1
  292. package/dist/bot/adapter.js +0 -11
  293. package/dist/bot/adapter.js.map +0 -1
  294. package/dist/bot/bot.d.ts +0 -28
  295. package/dist/bot/bot.d.ts.map +0 -1
  296. package/dist/bot/bot.js +0 -52
  297. package/dist/bot/bot.js.map +0 -1
  298. package/dist/bot/commands.d.ts +0 -8
  299. package/dist/bot/commands.d.ts.map +0 -1
  300. package/dist/bot/commands.js +0 -19
  301. package/dist/bot/commands.js.map +0 -1
  302. package/dist/bot/permissions.d.ts +0 -13
  303. package/dist/bot/permissions.d.ts.map +0 -1
  304. package/dist/bot/permissions.js +0 -16
  305. package/dist/bot/permissions.js.map +0 -1
  306. package/dist/browser/actions.d.ts +0 -33
  307. package/dist/browser/actions.d.ts.map +0 -1
  308. package/dist/browser/actions.js +0 -44
  309. package/dist/browser/actions.js.map +0 -1
  310. package/dist/browser/agent.d.ts +0 -21
  311. package/dist/browser/agent.d.ts.map +0 -1
  312. package/dist/browser/agent.js +0 -13
  313. package/dist/browser/agent.js.map +0 -1
  314. package/dist/browser/context.d.ts +0 -43
  315. package/dist/browser/context.d.ts.map +0 -1
  316. package/dist/browser/context.js +0 -54
  317. package/dist/browser/context.js.map +0 -1
  318. package/dist/browser/fingerprint.d.ts +0 -4
  319. package/dist/browser/fingerprint.d.ts.map +0 -1
  320. package/dist/browser/fingerprint.js +0 -12
  321. package/dist/browser/fingerprint.js.map +0 -1
  322. package/dist/browser/index.d.ts +0 -11
  323. package/dist/browser/index.d.ts.map +0 -1
  324. package/dist/browser/index.js +0 -11
  325. package/dist/browser/index.js.map +0 -1
  326. package/dist/browser/playwright.d.ts +0 -11
  327. package/dist/browser/playwright.d.ts.map +0 -1
  328. package/dist/browser/playwright.js +0 -24
  329. package/dist/browser/playwright.js.map +0 -1
  330. package/dist/browser/recorder.d.ts +0 -21
  331. package/dist/browser/recorder.d.ts.map +0 -1
  332. package/dist/browser/recorder.js +0 -58
  333. package/dist/browser/recorder.js.map +0 -1
  334. package/dist/browser/session.d.ts +0 -14
  335. package/dist/browser/session.d.ts.map +0 -1
  336. package/dist/browser/session.js +0 -21
  337. package/dist/browser/session.js.map +0 -1
  338. package/dist/browser/snapshot.d.ts +0 -69
  339. package/dist/browser/snapshot.d.ts.map +0 -1
  340. package/dist/browser/snapshot.js +0 -133
  341. package/dist/browser/snapshot.js.map +0 -1
  342. package/dist/captcha/contract.d.ts +0 -35
  343. package/dist/captcha/contract.d.ts.map +0 -1
  344. package/dist/captcha/contract.js +0 -17
  345. package/dist/captcha/contract.js.map +0 -1
  346. package/dist/captcha/evidence.d.ts +0 -10
  347. package/dist/captcha/evidence.d.ts.map +0 -1
  348. package/dist/captcha/evidence.js +0 -9
  349. package/dist/captcha/evidence.js.map +0 -1
  350. package/dist/captcha/guard.d.ts +0 -23
  351. package/dist/captcha/guard.d.ts.map +0 -1
  352. package/dist/captcha/guard.js +0 -12
  353. package/dist/captcha/guard.js.map +0 -1
  354. package/dist/cli/main.d.ts +0 -4
  355. package/dist/cli/main.d.ts.map +0 -1
  356. package/dist/cli/main.js +0 -46
  357. package/dist/cli/main.js.map +0 -1
  358. package/dist/core/errors.d.ts +0 -84
  359. package/dist/core/errors.d.ts.map +0 -1
  360. package/dist/core/errors.js +0 -54
  361. package/dist/core/errors.js.map +0 -1
  362. package/dist/core/events.d.ts +0 -9
  363. package/dist/core/events.d.ts.map +0 -1
  364. package/dist/core/events.js +0 -21
  365. package/dist/core/events.js.map +0 -1
  366. package/dist/core/hash.d.ts +0 -10
  367. package/dist/core/hash.d.ts.map +0 -1
  368. package/dist/core/hash.js +0 -82
  369. package/dist/core/hash.js.map +0 -1
  370. package/dist/core/ids.d.ts +0 -10
  371. package/dist/core/ids.d.ts.map +0 -1
  372. package/dist/core/ids.js +0 -15
  373. package/dist/core/ids.js.map +0 -1
  374. package/dist/delivery/manifest.d.ts +0 -35
  375. package/dist/delivery/manifest.d.ts.map +0 -1
  376. package/dist/delivery/manifest.js +0 -68
  377. package/dist/delivery/manifest.js.map +0 -1
  378. package/dist/deploy/index.d.ts +0 -6
  379. package/dist/deploy/index.d.ts.map +0 -1
  380. package/dist/deploy/index.js +0 -6
  381. package/dist/deploy/index.js.map +0 -1
  382. package/dist/dispatch/resumable.d.ts +0 -102
  383. package/dist/dispatch/resumable.d.ts.map +0 -1
  384. package/dist/dispatch/resumable.js +0 -64
  385. package/dist/dispatch/resumable.js.map +0 -1
  386. package/dist/dispatch/workflow.d.ts +0 -6
  387. package/dist/dispatch/workflow.d.ts.map +0 -1
  388. package/dist/dispatch/workflow.js +0 -37
  389. package/dist/dispatch/workflow.js.map +0 -1
  390. package/dist/domain/artifacts.d.ts +0 -12
  391. package/dist/domain/artifacts.d.ts.map +0 -1
  392. package/dist/domain/artifacts.js +0 -14
  393. package/dist/domain/artifacts.js.map +0 -1
  394. package/dist/domain/jobs.d.ts +0 -12
  395. package/dist/domain/jobs.d.ts.map +0 -1
  396. package/dist/domain/jobs.js +0 -20
  397. package/dist/domain/jobs.js.map +0 -1
  398. package/dist/domain/providers.d.ts +0 -10
  399. package/dist/domain/providers.d.ts.map +0 -1
  400. package/dist/domain/providers.js +0 -8
  401. package/dist/domain/providers.js.map +0 -1
  402. package/dist/domain/runtime.d.ts +0 -14
  403. package/dist/domain/runtime.d.ts.map +0 -1
  404. package/dist/domain/runtime.js +0 -10
  405. package/dist/domain/runtime.js.map +0 -1
  406. package/dist/domain/sessions.d.ts +0 -12
  407. package/dist/domain/sessions.d.ts.map +0 -1
  408. package/dist/domain/sessions.js +0 -57
  409. package/dist/domain/sessions.js.map +0 -1
  410. package/dist/examples/localjob.d.ts +0 -2
  411. package/dist/examples/localjob.d.ts.map +0 -1
  412. package/dist/examples/localjob.js.map +0 -1
  413. package/dist/examples/publicapi.d.ts +0 -2
  414. package/dist/examples/publicapi.d.ts.map +0 -1
  415. package/dist/examples/publicapi.js.map +0 -1
  416. package/dist/extension/build.d.ts +0 -9
  417. package/dist/extension/build.d.ts.map +0 -1
  418. package/dist/extension/build.js +0 -85
  419. package/dist/extension/build.js.map +0 -1
  420. package/dist/extension/content.d.ts +0 -6
  421. package/dist/extension/content.d.ts.map +0 -1
  422. package/dist/extension/content.js +0 -135
  423. package/dist/extension/content.js.map +0 -1
  424. package/dist/extension/index.d.ts +0 -7
  425. package/dist/extension/index.d.ts.map +0 -1
  426. package/dist/extension/index.js +0 -7
  427. package/dist/extension/index.js.map +0 -1
  428. package/dist/extension/pagebridge.d.ts +0 -6
  429. package/dist/extension/pagebridge.d.ts.map +0 -1
  430. package/dist/extension/pagebridge.js +0 -42
  431. package/dist/extension/pagebridge.js.map +0 -1
  432. package/dist/extension/permissions.d.ts +0 -26
  433. package/dist/extension/permissions.d.ts.map +0 -1
  434. package/dist/extension/permissions.js +0 -28
  435. package/dist/extension/permissions.js.map +0 -1
  436. package/dist/extension/popup.d.ts +0 -5
  437. package/dist/extension/popup.d.ts.map +0 -1
  438. package/dist/extension/popup.js +0 -26
  439. package/dist/extension/popup.js.map +0 -1
  440. package/dist/extension/protocol.d.ts +0 -58
  441. package/dist/extension/protocol.d.ts.map +0 -1
  442. package/dist/extension/protocol.js +0 -101
  443. package/dist/extension/protocol.js.map +0 -1
  444. package/dist/extension/serviceworker.d.ts +0 -25
  445. package/dist/extension/serviceworker.d.ts.map +0 -1
  446. package/dist/extension/serviceworker.js +0 -102
  447. package/dist/extension/serviceworker.js.map +0 -1
  448. package/dist/extension/worker.d.ts +0 -28
  449. package/dist/extension/worker.d.ts.map +0 -1
  450. package/dist/extension/worker.js +0 -22
  451. package/dist/extension/worker.js.map +0 -1
  452. package/dist/format/check.d.ts +0 -8
  453. package/dist/format/check.d.ts.map +0 -1
  454. package/dist/format/check.js +0 -38
  455. package/dist/format/check.js.map +0 -1
  456. package/dist/isolation/contracts.d.ts.map +0 -1
  457. package/dist/isolation/contracts.js.map +0 -1
  458. package/dist/library/public.d.ts.map +0 -1
  459. package/dist/library/public.js.map +0 -1
  460. package/dist/mcp/browser.d.ts +0 -9
  461. package/dist/mcp/browser.d.ts.map +0 -1
  462. package/dist/mcp/browser.js +0 -13
  463. package/dist/mcp/browser.js.map +0 -1
  464. package/dist/mcp/server.d.ts +0 -35
  465. package/dist/mcp/server.d.ts.map +0 -1
  466. package/dist/mcp/server.js +0 -40
  467. package/dist/mcp/server.js.map +0 -1
  468. package/dist/mcp/transport.d.ts +0 -7
  469. package/dist/mcp/transport.d.ts.map +0 -1
  470. package/dist/mcp/transport.js +0 -17
  471. package/dist/mcp/transport.js.map +0 -1
  472. package/dist/memory/bridge.d.ts +0 -14
  473. package/dist/memory/bridge.d.ts.map +0 -1
  474. package/dist/memory/bridge.js +0 -16
  475. package/dist/memory/bridge.js.map +0 -1
  476. package/dist/memory/engine.d.ts +0 -38
  477. package/dist/memory/engine.d.ts.map +0 -1
  478. package/dist/memory/engine.js +0 -109
  479. package/dist/memory/engine.js.map +0 -1
  480. package/dist/memory/modes.d.ts +0 -43
  481. package/dist/memory/modes.d.ts.map +0 -1
  482. package/dist/memory/modes.js +0 -66
  483. package/dist/memory/modes.js.map +0 -1
  484. package/dist/memory/objects.d.ts +0 -21
  485. package/dist/memory/objects.d.ts.map +0 -1
  486. package/dist/memory/objects.js +0 -20
  487. package/dist/memory/objects.js.map +0 -1
  488. package/dist/memory/planner.d.ts +0 -66
  489. package/dist/memory/planner.d.ts.map +0 -1
  490. package/dist/memory/planner.js +0 -108
  491. package/dist/memory/planner.js.map +0 -1
  492. package/dist/memory/targets.d.ts +0 -78
  493. package/dist/memory/targets.d.ts.map +0 -1
  494. package/dist/memory/targets.js +0 -29
  495. package/dist/memory/targets.js.map +0 -1
  496. package/dist/memory/transforms.d.ts +0 -19
  497. package/dist/memory/transforms.d.ts.map +0 -1
  498. package/dist/memory/transforms.js +0 -14
  499. package/dist/memory/transforms.js.map +0 -1
  500. package/dist/modes/matrix.d.ts +0 -23
  501. package/dist/modes/matrix.d.ts.map +0 -1
  502. package/dist/modes/matrix.js +0 -18
  503. package/dist/modes/matrix.js.map +0 -1
  504. package/dist/modes/modes.d.ts +0 -33
  505. package/dist/modes/modes.d.ts.map +0 -1
  506. package/dist/modes/modes.js +0 -15
  507. package/dist/modes/modes.js.map +0 -1
  508. package/dist/modes/resolve.d.ts +0 -96
  509. package/dist/modes/resolve.d.ts.map +0 -1
  510. package/dist/modes/resolve.js +0 -48
  511. package/dist/modes/resolve.js.map +0 -1
  512. package/dist/observability/metrics.d.ts +0 -14
  513. package/dist/observability/metrics.d.ts.map +0 -1
  514. package/dist/observability/metrics.js +0 -18
  515. package/dist/observability/metrics.js.map +0 -1
  516. package/dist/packager/manifest.d.ts +0 -66
  517. package/dist/packager/manifest.d.ts.map +0 -1
  518. package/dist/packager/manifest.js +0 -94
  519. package/dist/packager/manifest.js.map +0 -1
  520. package/dist/packager/publish.d.ts +0 -51
  521. package/dist/packager/publish.d.ts.map +0 -1
  522. package/dist/packager/publish.js +0 -18
  523. package/dist/packager/publish.js.map +0 -1
  524. package/dist/packager/targetcli.d.ts +0 -7
  525. package/dist/packager/targetcli.d.ts.map +0 -1
  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,1000 @@
1
+ /**
2
+ * virtualgpu - physical gpu virtualization: passthrough, vgpu slicing, MIG
3
+ * layouts and the verified gpu identity bank.
4
+ *
5
+ * This module owns the physical side of gpu virtualization. It absorbs the
6
+ * gpu-passthrough module in full (vfio bind/unbind through driverctl with
7
+ * the new_id fallback, vbios rom dumping from sysfs, the Looking Glass B7
8
+ * IVshmem recipe, the NVIDIA vGPU profile-size formula, the vendor-reset
9
+ * family list and the Intel SR-IOV DKMS parameters), the v2 stub
10
+ * (nvmlMockEnv and the pciIds table, corrected against the v5 sources) and
11
+ * a TS mirror of the C++ virtualization core data: the vgpu slice profile
12
+ * table (B100-1Q through RX9070XT-4Q), the Blackwell MIG layout catalog
13
+ * with the 7c/192GB density validator, the static spec database (GB100,
14
+ * GB202, GB203, Navi48, Navi44) and the NVENC dual-engine throughput table.
15
+ *
16
+ * The verified bank embeds seven real identities confirmed on 2026-08-22
17
+ * against vendor pages, TechPowerUp and the PCI id databases: RTX 5090
18
+ * (10DE:2B85, 32 GB GDDR7), RTX PRO 6000 Blackwell (10DE:26B5, 96 GB GDDR7
19
+ * ECC, 24064 CUDA cores), B200 (10DE:2665, 192 GB HBM3e at 8 TB/s), H100
20
+ * (10DE:2330, 80 GB HBM3), A100 (10DE:20B0, 40 GB HBM2e), RX 9070 XT
21
+ * (1002:748E, 16 GB GDDR6) and Instinct MI350X (1002:75A0, 288 GB HBM3e).
22
+ * The legacy 10DE:2BB5 spelling for the RTX PRO 6000 found in the v4
23
+ * sources is wrong; the verified id is 26B5 and the divergence is recorded
24
+ * here for traceability.
25
+ *
26
+ * Data for the extra identities discovered in the Meta jsons (B100
27
+ * 10DE:2664, GB200 superchip, RTX 5070, RX 8900 XTX, Arc B770 and the RDNA
28
+ * APU family) stays in the json data files (gpus.json, processors.json);
29
+ * this module only ships the logic: the registry, the fluent builder, the
30
+ * factory and the registergpudata normalizer that turns a json record into
31
+ * a bank entry.
32
+ *
33
+ * Domain split: render.ts keeps the software identity stack (Mesa, the
34
+ * nvidia-smi); virtualmemory.ts keeps the guest MIG slicing profiles
35
+ * (1g.24gb, 2g.48gb, 4g.96gb) which this module imports to compose the
36
+ * complete catalog; virtualization.ts re-exports the passthrough helpers
37
+ * for the QEMU command line.
38
+ *
39
+ * Contexts (25): gpuerror, pciids, nvmlmockenv, virtualgpuspec, gpubank,
40
+ * smidriveranchor, bindvfio, unbindvfio, romdump, lookingglassb7,
41
+ * nvidiavgpuprofiles, vendorresetfamilies, intelsriovdkms, vgpuprofiles,
42
+ * miglayoutblackwell, validatedensity, composemigcatalog, gpustaticspecs,
43
+ * nvencdualengine, nvencsessiontable, nvencCanFit, gpuregistry,
44
+ * virtualgpubuilder, registergpudata, createvirtualgpu.
45
+ *
46
+ * Patterns: registry (gpuregistry), builder (virtualgpubuilder), factory
47
+ * (createvirtualgpu), normalizer (registergpudata).
48
+ * Rules: lowercase identifiers, english jsdoc, third person, no emoji,
49
+ * try/catch catcher on every fallible path, node:* built-ins only, and no
50
+ * hardcoded localhost address anywhere.
51
+ */
52
+ import { execFileSync } from 'node:child_process';
53
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
54
+ import { dirname } from 'node:path';
55
+ import { MIGPROFILES } from './virtualmemory.js';
56
+ /** pci bdf (bus:device.function) validator: strict hex format only.
57
+ * blocks any shell metacharacter or path traversal. */
58
+ function issafebdf(value) {
59
+ return (typeof value === 'string' && /^[0-9a-fA-F]{4}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}\.[0-7]$/.test(value));
60
+ }
61
+ /** pci vendor:device id validator: strict hex format only. */
62
+ function issafevendordevice(value) {
63
+ return typeof value === 'string' && /^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{4}$/.test(value);
64
+ }
65
+ /* ------------------------------------------------------------------ */
66
+ /* Section 1: errors */
67
+ /* ------------------------------------------------------------------ */
68
+ /** Error thrown by every virtualgpu subsystem with an optional cause chain. */
69
+ export class gpuerror extends Error {
70
+ /** Machine readable subsystem tag. */
71
+ subsystem;
72
+ constructor(message, options) {
73
+ super(message, options);
74
+ this.name = 'gpuerror';
75
+ this.subsystem = options?.subsystem ?? 'virtualgpu';
76
+ }
77
+ }
78
+ /* ------------------------------------------------------------------ */
79
+ /* Section 2: pci ids and nvml adapter (stub absorbed, data corrected) */
80
+ /* ------------------------------------------------------------------ */
81
+ /**
82
+ * Canonical PCI ids of the verified bank, keyed by registry name. The
83
+ * RTX PRO 6000 entry uses 26B5 as confirmed in the v5 research; the 2BB5
84
+ * value found in the v4 nested_gpu.json is a transcription error and is
85
+ * intentionally not reproduced.
86
+ */
87
+ export const pciIds = {
88
+ rtx5090: '10DE:2B85',
89
+ rtxpro6000: '10DE:26B5',
90
+ b200: '10DE:2665',
91
+ h100: '10DE:2330',
92
+ a100: '10DE:20B0',
93
+ rx9070xt: '1002:748E',
94
+ mi350x: '1002:75A0',
95
+ };
96
+ /**
97
+ * NVIDIA driver and CUDA anchor shared by the smi-adapter header and the nvenc
98
+ * engine description (v2 anchor; supersedes the 560.35.03 and 580.82.07
99
+ * strings found in the older sources).
100
+ */
101
+ export const smidriveranchor = {
102
+ driver: '575.57.08',
103
+ cuda: '12.9',
104
+ };
105
+ /**
106
+ * Builds the NVML mock environment consumed by the virtual nvidia-smi adapter
107
+ * emulator and the nvml-unified-shim (their documented interface): FAKE_VRAM pins the reported memory in
108
+ * MiB and FAKE_MODEL pins the reported device name.
109
+ */
110
+ export function nvmlMockEnv(vrammib, model) {
111
+ try {
112
+ if (!Number.isFinite(vrammib) || vrammib <= 0) {
113
+ throw new gpuerror(`vrammib must be a positive number, received ${vrammib}`);
114
+ }
115
+ if (model.trim().length === 0) {
116
+ throw new gpuerror('model must not be empty');
117
+ }
118
+ return { FAKE_VRAM: String(Math.round(vrammib)), FAKE_MODEL: model };
119
+ }
120
+ catch (cause) {
121
+ if (cause instanceof gpuerror) {
122
+ throw cause;
123
+ }
124
+ throw new gpuerror('nvmlMockEnv failed', { cause: cause });
125
+ }
126
+ }
127
+ /**
128
+ * The verified bank: seven real identities with every field cross-checked
129
+ * on 2026-08-22. vrammib is the physical capacity and smireportedmib is the
130
+ * value nvidia-smi and rocm-smi print after the firmware carveout.
131
+ */
132
+ export const GPU_BANK = [
133
+ {
134
+ id: 'rtx5090',
135
+ name: 'NVIDIA GeForce RTX 5090',
136
+ vendor: 'nvidia',
137
+ pcivendor: '10DE',
138
+ pcidevice: '2B85',
139
+ vrammib: 32768,
140
+ smireportedmib: 32607,
141
+ memtype: 'GDDR7',
142
+ busbits: 512,
143
+ bandwidthgbs: 1792,
144
+ tdpwatts: 575,
145
+ arch: 'GB202 Blackwell',
146
+ smarch: 'sm_120',
147
+ computeunits: 21760,
148
+ smcount: 170,
149
+ mig: false,
150
+ sriov: true,
151
+ launch: '2025-01-30',
152
+ },
153
+ {
154
+ id: 'rtxpro6000',
155
+ name: 'NVIDIA RTX PRO 6000 Blackwell Workstation Edition',
156
+ vendor: 'nvidia',
157
+ pcivendor: '10DE',
158
+ pcidevice: '26B5',
159
+ vrammib: 98304,
160
+ smireportedmib: 98304,
161
+ memtype: 'GDDR7 ECC',
162
+ busbits: 512,
163
+ bandwidthgbs: 1792,
164
+ tdpwatts: 600,
165
+ arch: 'GB202 Blackwell workstation',
166
+ smarch: 'sm_120',
167
+ computeunits: 24064,
168
+ smcount: 188,
169
+ mig: true,
170
+ sriov: true,
171
+ launch: '2025-04',
172
+ },
173
+ {
174
+ id: 'b200',
175
+ name: 'NVIDIA B200',
176
+ vendor: 'nvidia',
177
+ pcivendor: '10DE',
178
+ pcidevice: '2665',
179
+ vrammib: 196608,
180
+ smireportedmib: 184320,
181
+ memtype: 'HBM3e',
182
+ busbits: 8192,
183
+ bandwidthgbs: 8000,
184
+ tdpwatts: 1000,
185
+ arch: 'GB100 Blackwell dual-die (NV-HBI 10 TB/s)',
186
+ smarch: 'sm_100',
187
+ computeunits: 0,
188
+ smcount: 208,
189
+ mig: true,
190
+ sriov: true,
191
+ launch: '2024-03',
192
+ },
193
+ {
194
+ id: 'h100',
195
+ name: 'NVIDIA H100 80GB HBM3',
196
+ vendor: 'nvidia',
197
+ pcivendor: '10DE',
198
+ pcidevice: '2330',
199
+ vrammib: 81920,
200
+ smireportedmib: 81559,
201
+ memtype: 'HBM3',
202
+ busbits: 6144,
203
+ bandwidthgbs: 3350,
204
+ tdpwatts: 700,
205
+ arch: 'GH100 Hopper SXM5',
206
+ smarch: 'sm_90',
207
+ computeunits: 16896,
208
+ smcount: 132,
209
+ mig: true,
210
+ sriov: false,
211
+ launch: '2022-09',
212
+ },
213
+ {
214
+ id: 'a100',
215
+ name: 'NVIDIA A100-SXM4-40GB',
216
+ vendor: 'nvidia',
217
+ pcivendor: '10DE',
218
+ pcidevice: '20B0',
219
+ vrammib: 40960,
220
+ smireportedmib: 40536,
221
+ memtype: 'HBM2e',
222
+ busbits: 5120,
223
+ bandwidthgbs: 1555,
224
+ tdpwatts: 400,
225
+ arch: 'GA100 Ampere SXM4',
226
+ smarch: 'sm_80',
227
+ computeunits: 6912,
228
+ smcount: 108,
229
+ mig: true,
230
+ sriov: false,
231
+ launch: '2020-05',
232
+ },
233
+ {
234
+ id: 'rx9070xt',
235
+ name: 'AMD Radeon RX 9070 XT',
236
+ vendor: 'amd',
237
+ pcivendor: '1002',
238
+ pcidevice: '748E',
239
+ vrammib: 16384,
240
+ smireportedmib: 16384,
241
+ memtype: 'GDDR6',
242
+ busbits: 256,
243
+ bandwidthgbs: 640,
244
+ tdpwatts: 304,
245
+ arch: 'Navi 48 RDNA 4',
246
+ smarch: 'gfx1201',
247
+ computeunits: 4096,
248
+ smcount: 64,
249
+ mig: false,
250
+ sriov: false,
251
+ launch: '2025-03-06',
252
+ },
253
+ {
254
+ id: 'mi350x',
255
+ name: 'AMD Instinct MI350X',
256
+ vendor: 'amd',
257
+ pcivendor: '1002',
258
+ pcidevice: '75A0',
259
+ vrammib: 294912,
260
+ smireportedmib: 294912,
261
+ memtype: 'HBM3e',
262
+ busbits: 8192,
263
+ bandwidthgbs: 8000,
264
+ tdpwatts: 1000,
265
+ arch: 'CDNA 4 Aqua Vanjaram',
266
+ smarch: 'gfx950',
267
+ computeunits: 19456,
268
+ smcount: 304,
269
+ mig: false,
270
+ sriov: true,
271
+ launch: '2025-06',
272
+ },
273
+ ];
274
+ /** Renders the canonical "vendor:device" pci id of a bank entry. */
275
+ export function fullpciid(spec) {
276
+ return `${spec.pcivendor}:${spec.pcidevice}`;
277
+ }
278
+ /* ------------------------------------------------------------------ */
279
+ /* Section 4: vfio passthrough (gpu-passthrough absorbed in full) */
280
+ /* ------------------------------------------------------------------ */
281
+ /**
282
+ * Binds a gpu to vfio-pci for passthrough. driverctl set-override is the
283
+ * primary path; when it is unavailable the function falls back to the
284
+ * vfio-pci new_id sysfs write. The returned plan carries the quirks the
285
+ * passthrough research mandates: disable_idle_d3, pcie_port_pm off and the
286
+ * lspci alive check that verifies the config header is not 0xFF.
287
+ */
288
+ export function bindVfio(bdf, vendorDevice) {
289
+ try {
290
+ if (!issafebdf(bdf)) {
291
+ throw new gpuerror(`bdf "${bdf}" must look like 0000:01:00.0`);
292
+ }
293
+ if (!issafevendordevice(vendorDevice)) {
294
+ throw new gpuerror(`vendor:device "${vendorDevice}" must look like 10DE:2B85`);
295
+ }
296
+ // validated above; execFileSync passes argv directly, no shell.
297
+ try {
298
+ execFileSync('driverctl', ['set-override', bdf, 'vfio-pci']);
299
+ }
300
+ catch {
301
+ // fallback: write vendor:device to the vfio-pci new_id sysfs file.
302
+ try {
303
+ writeFileSync('/sys/bus/pci/drivers/vfio-pci/new_id', vendorDevice);
304
+ }
305
+ catch {
306
+ /* catcher: new_id write may fail if the driver is not loaded */
307
+ }
308
+ }
309
+ return {
310
+ bdf,
311
+ driver: 'vfio-pci',
312
+ disable_idle_d3: 1,
313
+ pcie_port_pm: 'off',
314
+ aliveCheck: `lspci -s ${bdf} -xxx | verify config header != 0xFF`,
315
+ };
316
+ }
317
+ catch (cause) {
318
+ if (cause instanceof gpuerror) {
319
+ throw cause;
320
+ }
321
+ throw new gpuerror('bindVfio failed', { cause: cause });
322
+ }
323
+ }
324
+ /** Releases a gpu from vfio-pci back to its native driver. */
325
+ export function unbindVfio(bdf) {
326
+ if (!issafebdf(bdf)) {
327
+ throw new gpuerror(`unbindVfio: invalid bdf "${bdf}"`);
328
+ }
329
+ // execFileSync: argv array, no shell -> no injection from bdf.
330
+ // failures are swallowed to match the original `|| true` behavior.
331
+ try {
332
+ execFileSync('driverctl', ['unset-override', bdf]);
333
+ }
334
+ catch {
335
+ /* not bound to vfio-pci or already released */
336
+ }
337
+ }
338
+ /**
339
+ * Dumps the gpu vbios from sysfs for romfile passthrough. The rom is
340
+ * enabled with echo 1, copied to the output path and disabled again; the
341
+ * returned path feeds the QEMU romfile= option.
342
+ */
343
+ export function romDump(bdf, out = '/usr/share/kvm/vbios/gpu.rom') {
344
+ if (!issafebdf(bdf)) {
345
+ throw new gpuerror(`romDump: invalid bdf "${bdf}"`);
346
+ }
347
+ if (typeof out !== 'string' || out.length === 0 || out.includes('..')) {
348
+ throw new gpuerror('romDump: invalid output path');
349
+ }
350
+ const rompath = `/sys/bus/pci/devices/${bdf}/rom`;
351
+ try {
352
+ // enable rom read, dump, disable: pure fs api, no shell, no injection.
353
+ writeFileSync(rompath, '1');
354
+ const rom = readFileSync(rompath);
355
+ mkdirSync(dirname(out), { recursive: true });
356
+ writeFileSync(out, rom);
357
+ try {
358
+ writeFileSync(rompath, '0');
359
+ }
360
+ catch {
361
+ /* rom disable may fail harmlessly */
362
+ }
363
+ return out;
364
+ }
365
+ catch (cause) {
366
+ try {
367
+ writeFileSync(rompath, '0');
368
+ }
369
+ catch {
370
+ /* best-effort cleanup */
371
+ }
372
+ throw new gpuerror('romDump failed', { cause: cause });
373
+ }
374
+ }
375
+ /**
376
+ * Looking Glass B7 guest display recipe: the kvmfr 0.0.12-7 module backs a
377
+ * 128 MB ivshmem-plain device so the D12 host renderer can DMA frames with
378
+ * zero CPU copies (300 UPS class latency), including the libvirt shmem xml.
379
+ */
380
+ export function lookingGlassB7() {
381
+ return {
382
+ version: 'B7',
383
+ kvmfr: '0.0.12-7',
384
+ ivshmem: '128M',
385
+ backend: 'd12',
386
+ dma: 'GPU hardware copy engine, zero CPU',
387
+ indirectCopy: true,
388
+ xml: "<shmem name='looking-glass'><model type='ivshmem-plain'/><size unit='M'>128</size></shmem>",
389
+ };
390
+ }
391
+ /**
392
+ * NVIDIA vGPU profile-size formula as documented by the vgpu-unlock
393
+ * research: profileSize equals X times 0x40000000 (1 GB units), the
394
+ * framebuffer reservation is 0x8000000 plus one sixteenth of the excess
395
+ * over the first gigabyte, and the usable framebuffer never drops below
396
+ * 384 MiB. The example computes the X=2 (2 GB) profile.
397
+ */
398
+ export function nvidiaVgpuProfiles() {
399
+ try {
400
+ const calc = (x) => {
401
+ const profileSize = x * 0x40000000;
402
+ const fbReservation = 0x8000000 + (profileSize - 0x40000000) / 0x10;
403
+ return { profileSize, fbReservation, fb: profileSize - fbReservation };
404
+ };
405
+ return {
406
+ formula: 'profileSize=X*0x40000000, fbReservation=0x8000000+(profileSize-0x40000000)/0x10',
407
+ min: '384 MiB',
408
+ example: calc(2),
409
+ };
410
+ }
411
+ catch (cause) {
412
+ throw new gpuerror('nvidiaVgpuProfiles failed', { cause: cause });
413
+ }
414
+ }
415
+ /**
416
+ * GPU families supported by the vendor-reset module: the reset quirk list
417
+ * covering Polaris through Navi 48 plus the Rembrandt iGPU and the 5600 XT
418
+ * exception, required to recover amdgpu devices stuck in a bad state
419
+ * before rebinding them to vfio-pci.
420
+ */
421
+ export function vendorResetFamilies() {
422
+ return [
423
+ 'polaris10',
424
+ 'polaris11',
425
+ 'polaris12',
426
+ 'vega10',
427
+ 'vega20',
428
+ 'navi10',
429
+ 'navi12',
430
+ 'navi14',
431
+ 'navi48',
432
+ '680M Rembrandt',
433
+ '5600XT',
434
+ ];
435
+ }
436
+ /**
437
+ * Intel SR-IOV DKMS package and kernel parameters for the Xe and i915
438
+ * stacks: i915-sriov-dkms 2026.02.09 with i915.enable_guc=3 and up to 7
439
+ * VFs, or the xe driver with xe.force_probe=0xa7a0 for Battlemage.
440
+ */
441
+ export function intelSriovDkms() {
442
+ return {
443
+ pkg: 'i915-sriov-dkms_2026.02.09',
444
+ kernel: 'intel_iommu=on i915.enable_guc=3 i915.max_vfs=7',
445
+ xe: 'intel_iommu=on xe.max_vfs=7 xe.force_probe=0xa7a0',
446
+ maxVfs: 7,
447
+ };
448
+ }
449
+ /**
450
+ * vgpu slice catalog: NVIDIA B100 quarter profiles (1Q through 8Q), the
451
+ * GB202 consumer slices for RTX 5090 class boards and the AMD MxGPU
452
+ * SR-IOV slices for RX 9070 XT (Navi 48). Instances attach through the
453
+ * mdev_supported_types sysfs interface.
454
+ */
455
+ export const VGPUPROFILES = [
456
+ {
457
+ id: 'B100-1Q',
458
+ vrammb: 4096,
459
+ maxinstances: 24,
460
+ encodersessions: 1,
461
+ decodersessions: 2,
462
+ weight: 30,
463
+ flavor: 'vgpu',
464
+ },
465
+ {
466
+ id: 'B100-4Q',
467
+ vrammb: 16384,
468
+ maxinstances: 6,
469
+ encodersessions: 2,
470
+ decodersessions: 4,
471
+ weight: 50,
472
+ flavor: 'vgpu',
473
+ },
474
+ {
475
+ id: 'B100-8Q',
476
+ vrammb: 32768,
477
+ maxinstances: 3,
478
+ encodersessions: 3,
479
+ decodersessions: 6,
480
+ weight: 70,
481
+ flavor: 'vgpu',
482
+ },
483
+ {
484
+ id: 'GB202-4Q',
485
+ vrammb: 8192,
486
+ maxinstances: 4,
487
+ encodersessions: 2,
488
+ decodersessions: 4,
489
+ weight: 60,
490
+ flavor: 'vgpu',
491
+ },
492
+ {
493
+ id: 'GB202-8Q',
494
+ vrammb: 16384,
495
+ maxinstances: 2,
496
+ encodersessions: 2,
497
+ decodersessions: 4,
498
+ weight: 80,
499
+ flavor: 'vgpu',
500
+ },
501
+ {
502
+ id: 'RX9070XT-2Q',
503
+ vrammb: 4096,
504
+ maxinstances: 4,
505
+ encodersessions: 1,
506
+ decodersessions: 2,
507
+ weight: 40,
508
+ flavor: 'sriov',
509
+ },
510
+ {
511
+ id: 'RX9070XT-4Q',
512
+ vrammb: 8192,
513
+ maxinstances: 2,
514
+ encodersessions: 2,
515
+ decodersessions: 4,
516
+ weight: 70,
517
+ flavor: 'sriov',
518
+ },
519
+ ];
520
+ /** Resolves a vgpu slice profile by id, throwing for unknown names. */
521
+ export function getvgpuprofile(id) {
522
+ const found = VGPUPROFILES.find((profile) => profile.id === id);
523
+ if (found === undefined) {
524
+ throw new gpuerror(`unknown vgpu profile "${id}"; known profiles: ${VGPUPROFILES.map((profile) => profile.id).join(', ')}`);
525
+ }
526
+ return found;
527
+ }
528
+ /**
529
+ * Blackwell B100 MIG layout catalog (192 GB HBM3e, 8 TB/s): eight profiles
530
+ * from 1g.12gb (14 SMs, 7 instances) to the monolithic 7g.192gb (192 SMs),
531
+ * each mapped to its compatible mdev type so vgpu and MIG compose.
532
+ */
533
+ export const MIGLAYOUTBLACKWELL = [
534
+ {
535
+ profile: '1g.12gb',
536
+ computeslices: 1,
537
+ memorymb: 12288,
538
+ hbmgb: 12,
539
+ smcount: 14,
540
+ decoders: 1,
541
+ encoders: 1,
542
+ maxinstances: 7,
543
+ mdev: 'nvidia-b100-mig-1g-12gb',
544
+ c2ccoherent: true,
545
+ },
546
+ {
547
+ profile: '1g.24gb',
548
+ computeslices: 1,
549
+ memorymb: 24576,
550
+ hbmgb: 24,
551
+ smcount: 28,
552
+ decoders: 1,
553
+ encoders: 1,
554
+ maxinstances: 7,
555
+ mdev: 'nvidia-b100-mig-1g-24gb',
556
+ c2ccoherent: true,
557
+ },
558
+ {
559
+ profile: '2g.24gb',
560
+ computeslices: 2,
561
+ memorymb: 24576,
562
+ hbmgb: 24,
563
+ smcount: 28,
564
+ decoders: 2,
565
+ encoders: 1,
566
+ maxinstances: 3,
567
+ mdev: 'nvidia-b100-mig-2g-24gb',
568
+ c2ccoherent: true,
569
+ },
570
+ {
571
+ profile: '2g.48gb',
572
+ computeslices: 2,
573
+ memorymb: 49152,
574
+ hbmgb: 48,
575
+ smcount: 56,
576
+ decoders: 2,
577
+ encoders: 2,
578
+ maxinstances: 3,
579
+ mdev: 'nvidia-b100-mig-2g-48gb',
580
+ c2ccoherent: true,
581
+ },
582
+ {
583
+ profile: '3g.48gb',
584
+ computeslices: 3,
585
+ memorymb: 49152,
586
+ hbmgb: 48,
587
+ smcount: 56,
588
+ decoders: 2,
589
+ encoders: 2,
590
+ maxinstances: 2,
591
+ mdev: 'nvidia-b100-mig-3g-48gb',
592
+ c2ccoherent: true,
593
+ },
594
+ {
595
+ profile: '3g.96gb',
596
+ computeslices: 3,
597
+ memorymb: 98304,
598
+ hbmgb: 96,
599
+ smcount: 84,
600
+ decoders: 3,
601
+ encoders: 2,
602
+ maxinstances: 2,
603
+ mdev: 'nvidia-b100-mig-3g-96gb',
604
+ c2ccoherent: true,
605
+ },
606
+ {
607
+ profile: '4g.96gb',
608
+ computeslices: 4,
609
+ memorymb: 98304,
610
+ hbmgb: 96,
611
+ smcount: 112,
612
+ decoders: 4,
613
+ encoders: 3,
614
+ maxinstances: 1,
615
+ mdev: 'nvidia-b100-mig-4g-96gb',
616
+ c2ccoherent: true,
617
+ },
618
+ {
619
+ profile: '7g.192gb',
620
+ computeslices: 7,
621
+ memorymb: 196608,
622
+ hbmgb: 192,
623
+ smcount: 192,
624
+ decoders: 7,
625
+ encoders: 4,
626
+ maxinstances: 1,
627
+ mdev: 'nvidia-b100-mig-7g-192gb',
628
+ c2ccoherent: true,
629
+ },
630
+ ];
631
+ /**
632
+ * Validates that a requested MIG instance set does not oversubscribe the
633
+ * Blackwell physical limits: at most 7 compute slices and at most 192 GB of
634
+ * HBM3e in aggregate.
635
+ */
636
+ export function validatedensity(requested) {
637
+ try {
638
+ let slices = 0;
639
+ let gb = 0;
640
+ for (const layout of requested) {
641
+ slices += layout.computeslices;
642
+ gb += layout.hbmgb;
643
+ }
644
+ return slices <= 7 && gb <= 192;
645
+ }
646
+ catch (cause) {
647
+ throw new gpuerror('validatedensity failed', { cause: cause });
648
+ }
649
+ }
650
+ /**
651
+ * Composes the complete MIG catalog visible to planners: the guest-side
652
+ * VRAM slicing profiles owned by virtualmemory.ts (1g.24gb, 2g.48gb and
653
+ * 4g.96gb on the 96 GB virtual device) plus the host-side Blackwell
654
+ * layouts mirrored above.
655
+ */
656
+ export function composemigcatalog() {
657
+ try {
658
+ return [
659
+ ...MIGPROFILES.map((profile) => profile.id),
660
+ ...MIGLAYOUTBLACKWELL.map((row) => row.profile),
661
+ ];
662
+ }
663
+ catch (cause) {
664
+ throw new gpuerror('composemigcatalog failed', { cause: cause });
665
+ }
666
+ }
667
+ /**
668
+ * Static spec database mirrored from the C++ virtualization core. GB100 is
669
+ * the 168 SM datacenter die with 8192-bit HBM3e at 8 TB/s; GB202 is the
670
+ * 170 SM consumer die with 512-bit GDDR7 at 1792 GB/s; Navi 48 carries 64
671
+ * CUs organized as 32 WGPs with 128 AI accelerators on VCN 5.0.
672
+ */
673
+ export const GPUSTATICSPECS = [
674
+ {
675
+ arch: 'gb100',
676
+ vendor: 'nvidia',
677
+ marketingname: 'NVIDIA B100 Tensor Core 192GB HBM3e SXM',
678
+ smorcu: 168,
679
+ busbits: 8192,
680
+ bandwidthgbps: 8000,
681
+ tdpwatts: 700,
682
+ encoders: 2,
683
+ decoders: 4,
684
+ mig: true,
685
+ sriov: false,
686
+ maxvgpuinstances: 24,
687
+ mediaengine: 'NVENC 9th Gen dual',
688
+ },
689
+ {
690
+ arch: 'gb202',
691
+ vendor: 'nvidia',
692
+ marketingname: 'NVIDIA GeForce RTX 5090 32GB GDDR7 GB202-300',
693
+ smorcu: 170,
694
+ busbits: 512,
695
+ bandwidthgbps: 1792,
696
+ tdpwatts: 575,
697
+ encoders: 2,
698
+ decoders: 2,
699
+ mig: false,
700
+ sriov: true,
701
+ maxvgpuinstances: 4,
702
+ mediaengine: 'NVENC 9th Gen',
703
+ },
704
+ {
705
+ arch: 'gb203',
706
+ vendor: 'nvidia',
707
+ marketingname: 'NVIDIA GeForce RTX 5080 16GB GDDR7 GB203-400',
708
+ smorcu: 84,
709
+ busbits: 256,
710
+ bandwidthgbps: 960,
711
+ tdpwatts: 360,
712
+ encoders: 1,
713
+ decoders: 1,
714
+ mig: false,
715
+ sriov: true,
716
+ maxvgpuinstances: 4,
717
+ mediaengine: 'NVENC 9th Gen',
718
+ },
719
+ {
720
+ arch: 'navi48',
721
+ vendor: 'amd',
722
+ marketingname: 'AMD Radeon RX 9070 XT Navi48 16GB GDDR6',
723
+ smorcu: 64,
724
+ busbits: 256,
725
+ bandwidthgbps: 640,
726
+ tdpwatts: 304,
727
+ encoders: 2,
728
+ decoders: 2,
729
+ mig: false,
730
+ sriov: true,
731
+ maxvgpuinstances: 4,
732
+ wgps: 32,
733
+ aiaccelerators: 128,
734
+ mediaengine: 'VCN 5.0 / VPE 1.1',
735
+ },
736
+ {
737
+ arch: 'navi44',
738
+ vendor: 'amd',
739
+ marketingname: 'AMD Radeon RX 9060 XT Navi44 16GB GDDR6',
740
+ smorcu: 32,
741
+ busbits: 128,
742
+ bandwidthgbps: 322,
743
+ tdpwatts: 160,
744
+ encoders: 1,
745
+ decoders: 1,
746
+ mig: false,
747
+ sriov: true,
748
+ maxvgpuinstances: 2,
749
+ wgps: 16,
750
+ aiaccelerators: 64,
751
+ mediaengine: 'VCN 5.0',
752
+ },
753
+ ];
754
+ /* ------------------------------------------------------------------ */
755
+ /* Section 8: nvenc dual engine mirror */
756
+ /* ------------------------------------------------------------------ */
757
+ /** Throughput contract of the B100 dual NVENC engines (SDK 13.0 data). */
758
+ export const NVENCDUALENGINE = {
759
+ totalmpixpersec: 1600,
760
+ perenginempix: 800,
761
+ engines: 2,
762
+ };
763
+ /** Session table: 8K60 ceilings per codec with HDR10 and split-frame. */
764
+ export function nvencsessiontable() {
765
+ return [
766
+ {
767
+ codec: 'h264',
768
+ maxwidth: 8192,
769
+ maxheight: 8192,
770
+ maxfps: 60,
771
+ mpixpersec: 480,
772
+ hdr10: false,
773
+ splitframe: true,
774
+ },
775
+ {
776
+ codec: 'hevc',
777
+ maxwidth: 8192,
778
+ maxheight: 8192,
779
+ maxfps: 60,
780
+ mpixpersec: 800,
781
+ hdr10: true,
782
+ splitframe: true,
783
+ },
784
+ {
785
+ codec: 'av1',
786
+ maxwidth: 8192,
787
+ maxheight: 8192,
788
+ maxfps: 60,
789
+ mpixpersec: 800,
790
+ hdr10: true,
791
+ splitframe: true,
792
+ },
793
+ ];
794
+ }
795
+ /**
796
+ * Checks whether a resolution at a frame rate (and session count) fits
797
+ * within the 1600 MPix/s aggregate budget of the dual engines.
798
+ */
799
+ export function nvencCanFit(w, h, fps, sessions = 1) {
800
+ try {
801
+ const mpix = ((w * h * fps) / 1_000_000) * sessions;
802
+ return mpix <= NVENCDUALENGINE.totalmpixpersec;
803
+ }
804
+ catch (cause) {
805
+ throw new gpuerror('nvencCanFit failed', { cause: cause });
806
+ }
807
+ }
808
+ /** Human readable engine description pinned to the v2 driver anchor. */
809
+ export function nvencdescribe() {
810
+ return (`NVENC Blackwell B100 dual-engine ${NVENCDUALENGINE.totalmpixpersec} MPix/s total ` +
811
+ `(${NVENCDUALENGINE.perenginempix} per engine), AV1/HEVC 8K HDR60, split-frame, ` +
812
+ `SDK 13.0, driver ${smidriveranchor.driver}`);
813
+ }
814
+ /* ------------------------------------------------------------------ */
815
+ /* Section 9: registry, builder and factory */
816
+ /* ------------------------------------------------------------------ */
817
+ /**
818
+ * Registry of gpu identities. Seeded with the verified GPU_BANK and
819
+ * extensible at runtime; the Meta json identities (B100, GB200, RTX 5070,
820
+ * RX 8900 XTX, Arc B770, RDNA APUs) register here after being loaded from
821
+ * their json data files.
822
+ */
823
+ export const gpuregistry = new Map(GPU_BANK.map((spec) => [spec.id, spec]));
824
+ /** Lists every registered gpu identity id in registry order. */
825
+ export function listgpus() {
826
+ return [...gpuregistry.keys()];
827
+ }
828
+ /** Resolves a gpu identity by id, throwing with the known ids on miss. */
829
+ export function getgpu(id) {
830
+ const found = gpuregistry.get(id.toLowerCase());
831
+ if (found === undefined) {
832
+ throw new gpuerror(`unknown gpu identity "${id}"; known ids: ${listgpus().join(', ')}`);
833
+ }
834
+ return found;
835
+ }
836
+ /** Resolves a capability flag that may arrive as a boolean or as an object
837
+ * carrying a nested "supported" key (both json schemas appear in the pool). */
838
+ function resolveflag(value, key) {
839
+ if (typeof value === 'object' && value !== null) {
840
+ const nested = value[key];
841
+ return nested === undefined ? false : Boolean(nested);
842
+ }
843
+ return Boolean(value);
844
+ }
845
+ /**
846
+ * Normalizes a loose json record from the data files (gpus.json,
847
+ * processors.json) into a bank-grade virtualgpuspec and registers it. This
848
+ * is the logic half of the Meta identities: the numbers live in the jsons,
849
+ * this function only maps shapes. Accepted key spellings cover both the
850
+ * v5 schema (pciId as "vendor:device", memoryGB, vramGb, memoryBandwidthGBs,
851
+ * tdpW, cudaCores) and the Meta schema (vram_gb, bandwidth_gbs, tdp_w,
852
+ * cuCount, streamProcessors).
853
+ */
854
+ export function registergpudata(record) {
855
+ try {
856
+ const id = String(record.id ?? record.sku ?? '').toLowerCase();
857
+ if (id.length === 0) {
858
+ throw new gpuerror('gpu record requires an id');
859
+ }
860
+ const name = String(record.name ?? record.model ?? id);
861
+ const vendorraw = String(record.vendor ?? '').toLowerCase();
862
+ const vendor = vendorraw.includes('amd')
863
+ ? 'amd'
864
+ : vendorraw.includes('intel')
865
+ ? 'intel'
866
+ : 'nvidia';
867
+ const pciRaw = record.pciId ?? record.pci_id;
868
+ const pcifull = typeof pciRaw === 'string'
869
+ ? pciRaw
870
+ : typeof pciRaw === 'object' && pciRaw !== null
871
+ ? String(pciRaw.full ?? '')
872
+ : String(record.pci ?? '');
873
+ const [pcivendor, pcidevice] = pcifull.length === 9 ? pcifull.split(':') : ['0000', '0000'];
874
+ const vramgb = Number(record.memoryGB ?? record.vramGb ?? record.vram_gb ?? record.vramgb ?? 0);
875
+ if (vramgb <= 0) {
876
+ throw new gpuerror(`gpu record "${id}" requires a positive memory size`);
877
+ }
878
+ const spec = {
879
+ id,
880
+ name,
881
+ vendor,
882
+ pcivendor: pcivendor.toUpperCase(),
883
+ pcidevice: pcidevice.toUpperCase(),
884
+ vrammib: Math.round(vramgb * 1024),
885
+ smireportedmib: Math.round(Number(record.reportedMib ?? record.reported_mib ?? vramgb * 1024)),
886
+ memtype: String(record.memoryType ?? record.vramType ?? record.vram_type ?? 'GDDR6').toUpperCase(),
887
+ busbits: Number(record.busBits ?? record.bus_bits ?? record.memoryBusBit ?? 0),
888
+ bandwidthgbs: Number(record.bandwidthGBs ?? record.bandwidth_gbs ?? record.memoryBandwidthGBs ?? 0),
889
+ tdpwatts: Number(record.tdpW ?? record.tdp_w ?? 0),
890
+ arch: String(record.architecture ?? record.arch ?? record.codename ?? 'virtual'),
891
+ smarch: String(record.smarch ?? record.gfxTarget ?? record.gfx_target ?? ''),
892
+ computeunits: Number(record.cudaCores ?? record.cuda_cores ?? record.cuCount ?? record.streamProcessors ?? 0),
893
+ smcount: Number(record.sms ?? record.smCount ?? record.sm_count ?? 0),
894
+ mig: resolveflag(record.mig, 'supported'),
895
+ sriov: resolveflag(record.sriov, 'supported'),
896
+ launch: String(record.releaseDate ?? record.launch ?? '2026-08-22'),
897
+ };
898
+ gpuregistry.set(id, spec);
899
+ return spec;
900
+ }
901
+ catch (cause) {
902
+ if (cause instanceof gpuerror) {
903
+ throw cause;
904
+ }
905
+ throw new gpuerror('registergpudata failed', { cause: cause });
906
+ }
907
+ }
908
+ /**
909
+ * Fluent builder for custom gpu identities. The builder starts from the
910
+ * RTX 5090 baseline, collects overrides through chainable with* methods
911
+ * and freezes the result into the registry.
912
+ */
913
+ export class virtualgpubuilder {
914
+ #spec;
915
+ constructor() {
916
+ this.#spec = GPU_BANK[0];
917
+ }
918
+ /** Sets the registry id and display name. */
919
+ withid(id, name) {
920
+ this.#spec = { ...this.#spec, id: id.toLowerCase(), name };
921
+ return this;
922
+ }
923
+ /** Sets the vendor and the pci vendor id that matches it. */
924
+ withvendor(vendor) {
925
+ this.#spec = {
926
+ ...this.#spec,
927
+ vendor,
928
+ pcivendor: vendor === 'nvidia' ? '10DE' : vendor === 'amd' ? '1002' : '8086',
929
+ };
930
+ return this;
931
+ }
932
+ /** Sets the pci device id; must be exactly 4 hex digits. */
933
+ withpcidevice(device) {
934
+ if (!/^[0-9A-Fa-f]{4}$/.test(device)) {
935
+ throw new gpuerror(`pci device "${device}" must be 4 hex digits`);
936
+ }
937
+ this.#spec = { ...this.#spec, pcidevice: device.toUpperCase() };
938
+ return this;
939
+ }
940
+ /** Sets the memory geometry: capacity, type, bus width and bandwidth. */
941
+ withmemory(vrammib, memtype, busbits, bandwidthgbs) {
942
+ this.#spec = { ...this.#spec, vrammib, memtype, busbits, bandwidthgbs };
943
+ return this;
944
+ }
945
+ /** Sets power and architecture strings. */
946
+ withpower(tdpwatts, arch) {
947
+ this.#spec = { ...this.#spec, tdpwatts, arch };
948
+ return this;
949
+ }
950
+ /** Sets compute topology and the virtualization capabilities. */
951
+ withcompute(computeunits, smcount, smarch, mig, sriov) {
952
+ this.#spec = { ...this.#spec, computeunits, smcount, smarch, mig, sriov };
953
+ return this;
954
+ }
955
+ /** Validates the accumulated fields and freezes the identity. */
956
+ build() {
957
+ try {
958
+ const spec = Object.freeze(this.#spec);
959
+ if (spec.id.length === 0 || spec.name.length === 0) {
960
+ throw new gpuerror('gpu identity requires an id and a name');
961
+ }
962
+ if (!/^[0-9A-Fa-f]{4}$/.test(spec.pcidevice)) {
963
+ throw new gpuerror(`pci device "${spec.pcidevice}" must be 4 hex digits`);
964
+ }
965
+ if (spec.vrammib <= 0 || spec.bandwidthgbs < 0 || spec.tdpwatts < 0) {
966
+ throw new gpuerror('gpu identity requires positive vram, bandwidth and tdp values');
967
+ }
968
+ gpuregistry.set(spec.id, spec);
969
+ return spec;
970
+ }
971
+ catch (cause) {
972
+ if (cause instanceof gpuerror) {
973
+ throw cause;
974
+ }
975
+ throw new gpuerror('virtualgpubuilder.build failed', { cause: cause });
976
+ }
977
+ }
978
+ }
979
+ /**
980
+ * Factory that materializes a bank identity together with its NVML mock
981
+ * environment: one call resolves the registry entry and pins the FAKE_VRAM
982
+ * and FAKE_MODEL variables the smi adapter emulators read.
983
+ */
984
+ export function createvirtualgpu(id) {
985
+ try {
986
+ const spec = getgpu(id);
987
+ return {
988
+ spec,
989
+ pciid: fullpciid(spec),
990
+ nvmlenv: nvmlMockEnv(spec.smireportedmib, spec.name),
991
+ };
992
+ }
993
+ catch (cause) {
994
+ if (cause instanceof gpuerror) {
995
+ throw cause;
996
+ }
997
+ throw new gpuerror('createvirtualgpu failed', { cause: cause });
998
+ }
999
+ }
1000
+ //# sourceMappingURL=virtualgpu.js.map