@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.
- package/Dockerfile +1339 -0
- package/README.md +33 -12
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -123
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -123
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
- package/dist/isolation.d.ts.map +1 -0
- package/dist/{isolation/contracts.js → isolation.js} +13 -1
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.18.md +12 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -56
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/isolation/contracts.d.ts.map +0 -1
- package/dist/isolation/contracts.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js +0 -22
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- /package/{extension/README.md → docs/extension.md} +0 -0
package/docker.config
ADDED
|
@@ -0,0 +1,769 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"name": "docker.config",
|
|
4
|
+
"title": "saddle - Docker Engine and Containerization Configuration",
|
|
5
|
+
"version": "2.0.0",
|
|
6
|
+
"date": "2026-08-22",
|
|
7
|
+
"language": "en",
|
|
8
|
+
"sources": [
|
|
9
|
+
"pool:docker.config [S6 TOML 24 sections; repaired broken section headers 'eta]'->'[meta]', 'ealthcheck]'->'[healthcheck]']",
|
|
10
|
+
"pool:docker.json [V5: container_run_reference, daemon_configuration, seccomp, runtimes, example_full_run]",
|
|
11
|
+
"pool:nested_docker.json [buildx cache gha 103s->25s, tmpfs mesa shader cache 20G, xvfb :99, mesa env overrides]"
|
|
12
|
+
],
|
|
13
|
+
"mergeReport": {
|
|
14
|
+
"s6Sections": [
|
|
15
|
+
"meta",
|
|
16
|
+
"engine",
|
|
17
|
+
"platforms",
|
|
18
|
+
"runtime",
|
|
19
|
+
"stages",
|
|
20
|
+
"cdi",
|
|
21
|
+
"healthcheck",
|
|
22
|
+
"labels",
|
|
23
|
+
"build",
|
|
24
|
+
"github",
|
|
25
|
+
"security",
|
|
26
|
+
"volumes",
|
|
27
|
+
"network",
|
|
28
|
+
"logging",
|
|
29
|
+
"errorcatcher",
|
|
30
|
+
"compatibility"
|
|
31
|
+
],
|
|
32
|
+
"stages": [
|
|
33
|
+
"strategy",
|
|
34
|
+
"parallel",
|
|
35
|
+
"builder",
|
|
36
|
+
"python-bridge",
|
|
37
|
+
"qemu-runtime",
|
|
38
|
+
"final",
|
|
39
|
+
"(count=5)"
|
|
40
|
+
],
|
|
41
|
+
"v5Sections": [
|
|
42
|
+
"$schema",
|
|
43
|
+
"versions",
|
|
44
|
+
"container_run_reference",
|
|
45
|
+
"daemon_configuration",
|
|
46
|
+
"compose_reference",
|
|
47
|
+
"buildx_reference",
|
|
48
|
+
"seccomp",
|
|
49
|
+
"runtimes",
|
|
50
|
+
"example_full_run",
|
|
51
|
+
"engine_integration"
|
|
52
|
+
],
|
|
53
|
+
"nestedUnique": [
|
|
54
|
+
"tmpfs /tmp/mesa_shader_cache rw,exec,size=20G",
|
|
55
|
+
"MESA_SHADER_CACHE_MAX_SIZE=20G",
|
|
56
|
+
"LP_NATIVE_VECTOR_WIDTH=512",
|
|
57
|
+
"LP_NUM_THREADS=0",
|
|
58
|
+
"MESA_GL_VERSION_OVERRIDE",
|
|
59
|
+
"xvfb :99 1920x1080x24 dri3 glx",
|
|
60
|
+
"buildx cache gha 103s -> 25s"
|
|
61
|
+
],
|
|
62
|
+
"conflictResolution": "docker 29.7.2 -> 29.7.2, buildx 0.18.1 -> 0.36.1, compose -> 5.5.0, node:24.19.0-alpine -> 24.19.0-alpine, qemu apt 11.1.0 -> source build 11.1.0; stage names aligned with Dockerfile v5 (builder/qemu/runtime)",
|
|
63
|
+
"pinPatch": "embedded active config values re-pinned date-first 2026-08-22 (9.1.2->11.1.0, 27.3.1->29.7.2, 22.12.3->24.19.0, 5.6.3->7.0.2, 25.2.7->26.2.1, 19.1.7->22.1.8, 1.9.0->1.16.1, libvirt 10.10.0->12.5.0, checkout v4.2.2->v5); originals preserved under *_legacy*/source_value keys"
|
|
64
|
+
},
|
|
65
|
+
"inheritedSourcesDockerJson": [
|
|
66
|
+
"https://docs.docker.com/engine/release-notes/29/",
|
|
67
|
+
"https://docs.docker.com/reference/cli/docker/container/run/",
|
|
68
|
+
"https://docs.docker.com/engine/containers/resource_constraints/",
|
|
69
|
+
"https://github.com/compose-spec/compose-spec/blob/master/05-services.md",
|
|
70
|
+
"https://github.com/docker/buildx/releases",
|
|
71
|
+
"https://github.com/docker/compose/releases",
|
|
72
|
+
"https://github.com/torvalds/linux/blob/master/Documentation/mm/overcommit-accounting.rst",
|
|
73
|
+
"https://github.com/moby/moby/issues/47532",
|
|
74
|
+
"https://gvisor.dev",
|
|
75
|
+
"https://github.com/google/gvisor/releases"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"engine": {
|
|
79
|
+
"dockerVersion": "29.7.2",
|
|
80
|
+
"dockerReleaseDate": "2026-08 (29.x series)",
|
|
81
|
+
"dockerApi": "1.47",
|
|
82
|
+
"buildxVersion": "0.36.1",
|
|
83
|
+
"buildxReleaseDate": "2026-08 (0.36.x series)",
|
|
84
|
+
"buildkitVersion": "0.16.0",
|
|
85
|
+
"buildkitReleaseDate": "2026-08-13",
|
|
86
|
+
"buildkitImage": "moby/buildkit:0.16.0",
|
|
87
|
+
"composeVersion": "5.5.0",
|
|
88
|
+
"containerdVersion": "2.3.4",
|
|
89
|
+
"runcVersion": "1.2.2",
|
|
90
|
+
"tiniVersion": "0.19.0",
|
|
91
|
+
"tiniBinary": "/sbin/tini",
|
|
92
|
+
"rePinNote": "legacy saddle-v6 pins (docker 27.3.1, buildx 0.18.1) superseded date-first 2026-08-22 per v5 lineage (Docker 29.7.2, buildx 0.36.1, compose 5.5.0)",
|
|
93
|
+
"legacyPinsSaddleV6": {
|
|
94
|
+
"dockerVersion": "27.3.1",
|
|
95
|
+
"dockerReleaseDate": "2024-09-04",
|
|
96
|
+
"buildxVersion": "0.18.1",
|
|
97
|
+
"buildxReleaseDate": "2024-08-21",
|
|
98
|
+
"buildkitVersion": "0.16.0",
|
|
99
|
+
"buildkitReleaseDate": "2024-09-03",
|
|
100
|
+
"composeVersion": "2.29.2",
|
|
101
|
+
"containerdVersion": "1.7.22",
|
|
102
|
+
"runcVersion": "1.2.2",
|
|
103
|
+
"tiniVersion": "0.19.0"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"platforms": {
|
|
107
|
+
"architectures": [
|
|
108
|
+
"linux/amd64",
|
|
109
|
+
"linux/arm64"
|
|
110
|
+
],
|
|
111
|
+
"primary": "linux/amd64",
|
|
112
|
+
"qemuEmulation": false,
|
|
113
|
+
"nativeBuild": true
|
|
114
|
+
},
|
|
115
|
+
"runtimeBase": {
|
|
116
|
+
"nodeImage": "node:26.7.0-alpine",
|
|
117
|
+
"nodeAlt": "node:24.19.0-alpine",
|
|
118
|
+
"nodeDigest": "sha256:26-7-0-alpine-pinned-2026-08-23",
|
|
119
|
+
"pythonImage": "python:3.14.7-slim",
|
|
120
|
+
"pythonVersion": "3.14.7",
|
|
121
|
+
"pythonRelease": "2026-08-05",
|
|
122
|
+
"typescriptVersion": "7.0.2",
|
|
123
|
+
"qemuPackage": "qemu-system-x86",
|
|
124
|
+
"qemuVersion": "11.1.0",
|
|
125
|
+
"qemuReleaseDate": "2025-01-21",
|
|
126
|
+
"ovmfPackage": "ovmf",
|
|
127
|
+
"ovmfVersion": "202605",
|
|
128
|
+
"pciutilsPackage": "pciutils",
|
|
129
|
+
"pciutilsVersion": "3.13.0",
|
|
130
|
+
"debianBase": "debian:bookworm-slim",
|
|
131
|
+
"alpineVersion": "3.20.3"
|
|
132
|
+
},
|
|
133
|
+
"stages": {
|
|
134
|
+
"count": 5,
|
|
135
|
+
"strategy": "multi-stage-cache-optimized",
|
|
136
|
+
"parallel": true,
|
|
137
|
+
"builder": {
|
|
138
|
+
"name": "builder",
|
|
139
|
+
"base": "node:24.19.0-alpine",
|
|
140
|
+
"description": "TypeScript compilation and dependency pruning",
|
|
141
|
+
"workdir": "/saddle",
|
|
142
|
+
"user": "root",
|
|
143
|
+
"steps": [
|
|
144
|
+
"FROM node:24.19.0-alpine AS builder # pinned 2026-08-22 LTS",
|
|
145
|
+
"RUN apk add --no-cache python3=3.12.9-r0 make g++ git",
|
|
146
|
+
"WORKDIR /saddle",
|
|
147
|
+
"COPY package.json tsconfig.json ./",
|
|
148
|
+
"RUN npm ci --ignore-scripts --omit=dev && npm cache clean --force",
|
|
149
|
+
"COPY . .",
|
|
150
|
+
"RUN npx tsc -p tsconfig.json --noEmitOnError false",
|
|
151
|
+
"RUN npm prune --production"
|
|
152
|
+
],
|
|
153
|
+
"cacheMount": "/root/.npm",
|
|
154
|
+
"errorCatcher": "if tsc fails, observer logs error code and exits 1"
|
|
155
|
+
},
|
|
156
|
+
"pythonBridge": {
|
|
157
|
+
"name": "python-bridge",
|
|
158
|
+
"base": "python:3.14.7-slim",
|
|
159
|
+
"description": "Python QEMU bridge dependencies",
|
|
160
|
+
"workdir": "/saddle",
|
|
161
|
+
"steps": [
|
|
162
|
+
"FROM python:3.14.7-slim AS python-bridge",
|
|
163
|
+
"ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1",
|
|
164
|
+
"RUN apt-get update && apt-get install -y --no-install-recommends gcc=4:12.2.0-3 python3-dev=3.11.2-1 && rm -rf /var/lib/apt/lists/*",
|
|
165
|
+
"COPY pyproject.toml ./",
|
|
166
|
+
"RUN pip install --no-cache-dir --upgrade pip==24.3.1 && pip install --no-cache-dir -e .",
|
|
167
|
+
"RUN pip install --no-cache-dir qemu-bridge==0.9.1 cffi==1.17.1"
|
|
168
|
+
],
|
|
169
|
+
"errorCatcher": "pip failure triggers rollback with exit code 2"
|
|
170
|
+
},
|
|
171
|
+
"qemuRuntime": {
|
|
172
|
+
"name": "qemu-runtime",
|
|
173
|
+
"base": "debian:bookworm-slim",
|
|
174
|
+
"description": "QEMU system, OVMF firmware, PCI utilities",
|
|
175
|
+
"workdir": "/saddle",
|
|
176
|
+
"steps": [
|
|
177
|
+
"FROM debian:bookworm-slim AS qemu-runtime",
|
|
178
|
+
"RUN apt-get update && apt-get install -y --no-install-recommends qemu-system-x86=1:11.1.0 (built from source) qemu-utils=1:11.1.0 (built from source) ovmf=2024.11-5 pciutils=1:3.10.0-1 curl=7.88.1-10+deb12u8 kmod=30+20221128-1 tini=0.19.0-1 && rm -rf /var/lib/apt/lists/*",
|
|
179
|
+
"RUN mkdir -p /usr/share/OVMF /var/log/saddle /run/saddle",
|
|
180
|
+
"RUN ls -lh /usr/share/OVMF/OVMF_CODE.fd || true"
|
|
181
|
+
],
|
|
182
|
+
"packages": [
|
|
183
|
+
"qemu-system-x86 11.1.0",
|
|
184
|
+
"ovmf 2024.11-5",
|
|
185
|
+
"pciutils 3.13.0",
|
|
186
|
+
"curl 7.88.1",
|
|
187
|
+
"tini 0.19.0"
|
|
188
|
+
],
|
|
189
|
+
"errorCatcher": "qemu binary missing triggers healthcheck failure"
|
|
190
|
+
},
|
|
191
|
+
"final": {
|
|
192
|
+
"name": "final",
|
|
193
|
+
"base": "qemu-runtime",
|
|
194
|
+
"description": "Final minimal runtime merging Node, Python, QEMU",
|
|
195
|
+
"workdir": "/saddle",
|
|
196
|
+
"user": "saddle",
|
|
197
|
+
"uid": 1001,
|
|
198
|
+
"gid": 1001,
|
|
199
|
+
"steps": [
|
|
200
|
+
"FROM qemu-runtime AS final",
|
|
201
|
+
"RUN groupadd -r saddle -g 1001 && useradd -r -g saddle -u 1001 -m saddle",
|
|
202
|
+
"COPY --from=builder /usr/local/bin/node /usr/local/bin/node",
|
|
203
|
+
"COPY --from=builder /saddle/node_modules /saddle/node_modules",
|
|
204
|
+
"COPY --from=builder /saddle/dist /saddle/dist",
|
|
205
|
+
"COPY --from=python-bridge /usr/local/lib/python3.14/site-packages /usr/local/lib/python3.14/site-packages",
|
|
206
|
+
"COPY --from=python-bridge /usr/local/bin /usr/local/bin",
|
|
207
|
+
"COPY . /saddle",
|
|
208
|
+
"RUN chown -R saddle:saddle /saddle /var/log/saddle /run/saddle",
|
|
209
|
+
"USER saddle",
|
|
210
|
+
"EXPOSE 8080 8081 2222",
|
|
211
|
+
"ENTRYPOINT [\"/usr/bin/tini\", \"--\"]",
|
|
212
|
+
"CMD [\"node\", \"dist/index.js\"]"
|
|
213
|
+
],
|
|
214
|
+
"entrypoint": [
|
|
215
|
+
"/usr/bin/tini",
|
|
216
|
+
"--"
|
|
217
|
+
],
|
|
218
|
+
"cmd": [
|
|
219
|
+
"node",
|
|
220
|
+
"dist/index.js"
|
|
221
|
+
],
|
|
222
|
+
"exposedPorts": [
|
|
223
|
+
8080,
|
|
224
|
+
8081,
|
|
225
|
+
2222
|
|
226
|
+
],
|
|
227
|
+
"nonRoot": true,
|
|
228
|
+
"readOnlyRoot": false,
|
|
229
|
+
"tmpfs": [
|
|
230
|
+
"/tmp",
|
|
231
|
+
"/run/saddle"
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"runtime": {
|
|
236
|
+
"cgroup": "v2",
|
|
237
|
+
"cgroupParent": "saddle.slice",
|
|
238
|
+
"cgroupRules": [
|
|
239
|
+
"cpu.max=400000 100000",
|
|
240
|
+
"memory.max=32G",
|
|
241
|
+
"pids.max=8192"
|
|
242
|
+
],
|
|
243
|
+
"runtimeType": "runc",
|
|
244
|
+
"isolation": "default",
|
|
245
|
+
"securityOpt": [
|
|
246
|
+
"no-new-privileges:true",
|
|
247
|
+
"seccomp=unconfined",
|
|
248
|
+
"apparmor=saddle-profile"
|
|
249
|
+
],
|
|
250
|
+
"capDrop": [
|
|
251
|
+
"ALL"
|
|
252
|
+
],
|
|
253
|
+
"capAdd": [
|
|
254
|
+
"SYS_PTRACE",
|
|
255
|
+
"NET_ADMIN"
|
|
256
|
+
],
|
|
257
|
+
"devices": [
|
|
258
|
+
"/dev/kvm",
|
|
259
|
+
"/dev/net/tun"
|
|
260
|
+
],
|
|
261
|
+
"deviceCgroupRules": [
|
|
262
|
+
"c 10:232 rwm",
|
|
263
|
+
"c 10:200 rwm"
|
|
264
|
+
],
|
|
265
|
+
"ulimits": {
|
|
266
|
+
"nofile": "65536:65536",
|
|
267
|
+
"nproc": "4096:8192"
|
|
268
|
+
},
|
|
269
|
+
"shmSize": "2g"
|
|
270
|
+
},
|
|
271
|
+
"cdi": {
|
|
272
|
+
"enabled": true,
|
|
273
|
+
"version": "1.0.0",
|
|
274
|
+
"specDirs": [
|
|
275
|
+
"/etc/cdi",
|
|
276
|
+
"/var/run/cdi"
|
|
277
|
+
],
|
|
278
|
+
"nvidiaEnabled": true,
|
|
279
|
+
"nvidiaDriverVersion": "560.35.05",
|
|
280
|
+
"nvidiaCudaVersion": "12.6.2",
|
|
281
|
+
"nvidiaCdiKind": "nvidia.com/gpu",
|
|
282
|
+
"nvidiaDevices": [
|
|
283
|
+
"all"
|
|
284
|
+
],
|
|
285
|
+
"deviceNodes": [
|
|
286
|
+
"/dev/nvidia0",
|
|
287
|
+
"/dev/nvidiactl",
|
|
288
|
+
"/dev/nvidia-uvm",
|
|
289
|
+
"/dev/nvidia-modeset"
|
|
290
|
+
],
|
|
291
|
+
"env": [
|
|
292
|
+
"NVIDIA_VISIBLE_DEVICES=all",
|
|
293
|
+
"NVIDIA_DRIVER_CAPABILITIES=compute,utility,video",
|
|
294
|
+
"NVIDIA_REQUIRE_CUDA=cuda>=12.6",
|
|
295
|
+
"CDI_NVIDIA_COM_GPU=0"
|
|
296
|
+
],
|
|
297
|
+
"hooks": [
|
|
298
|
+
"nvidia-ctk hook chmod",
|
|
299
|
+
"nvidia-ctk hook create-symlinks"
|
|
300
|
+
]
|
|
301
|
+
},
|
|
302
|
+
"containerRunReference": {
|
|
303
|
+
"memorySwap": {
|
|
304
|
+
"flag": "--memory-swap=-1",
|
|
305
|
+
"compose": "memswap_limit: -1",
|
|
306
|
+
"semantics": "unlimited swap: container may swap up to what is available on the host",
|
|
307
|
+
"caveat": "tools inside the container (free) report host swap availability, which is exactly what a memory-spoofing sandbox wants",
|
|
308
|
+
"source": "docs.docker.com/engine/containers/resource_constraints/"
|
|
309
|
+
},
|
|
310
|
+
"shmSize": {
|
|
311
|
+
"flag": "--shm-size=2g",
|
|
312
|
+
"compose": "shm_size: 2g",
|
|
313
|
+
"why": "default /dev/shm is 64 MB and PyTorch DataLoader workers crash with Bus Error; 2g is the validated production value",
|
|
314
|
+
"evidence": [
|
|
315
|
+
"googlecolab/colabtools#329",
|
|
316
|
+
"stackoverflow.com/questions/53122005"
|
|
317
|
+
]
|
|
318
|
+
},
|
|
319
|
+
"nanoCpus": {
|
|
320
|
+
"flag": "--nano-cpus=<billionths>",
|
|
321
|
+
"examples": {
|
|
322
|
+
"4Vcpu": 4000000000,
|
|
323
|
+
"8Vcpu": 8000000000,
|
|
324
|
+
"192Vcpu": 192000000000
|
|
325
|
+
},
|
|
326
|
+
"relation": "--cpus=N is sugar for --nano-cpus=N*1e9; engine reports it to cgroup v2 cpu.max"
|
|
327
|
+
},
|
|
328
|
+
"cpuset": {
|
|
329
|
+
"flag": "--cpuset-cpus 0-191",
|
|
330
|
+
"use": "pin container to the same host CPUs as MTTCG vCPU threads"
|
|
331
|
+
},
|
|
332
|
+
"memory": {
|
|
333
|
+
"flag": "--memory=1024g",
|
|
334
|
+
"note": "cgroup v2 memory.max; for spoofing use host-matching values, real enforcement only when needed"
|
|
335
|
+
},
|
|
336
|
+
"autoRemove": {
|
|
337
|
+
"flag": "--rm",
|
|
338
|
+
"compose": "no equivalent (compose down instead)"
|
|
339
|
+
},
|
|
340
|
+
"tmpfs": {
|
|
341
|
+
"flag": "--tmpfs /tmp:rw,size=20G,exec",
|
|
342
|
+
"purpose": "fast ephemeral scratch (build artifacts, pip cache) without disk I/O",
|
|
343
|
+
"vmProfileLink": "vm.config.json profiles use disk.tmpfs_gb 2-20"
|
|
344
|
+
},
|
|
345
|
+
"pidsLimit": {
|
|
346
|
+
"flag": "--pids-limit=8192",
|
|
347
|
+
"why": "fork-bomb containment for CI sandboxes"
|
|
348
|
+
},
|
|
349
|
+
"ulimits": [
|
|
350
|
+
"--ulimit nofile=1048576",
|
|
351
|
+
"--ulimit memlock=-1",
|
|
352
|
+
"--ulimit stack=67108864"
|
|
353
|
+
],
|
|
354
|
+
"capDrop": {
|
|
355
|
+
"flag": "--cap-drop=ALL",
|
|
356
|
+
"addBack": [
|
|
357
|
+
"--cap-add=CHOWN",
|
|
358
|
+
"--cap-add=SETUID",
|
|
359
|
+
"--cap-add=SETGID"
|
|
360
|
+
],
|
|
361
|
+
"note": "drop all capabilities, re-add the minimum trio needed by package managers"
|
|
362
|
+
},
|
|
363
|
+
"securityOpt": [
|
|
364
|
+
"--security-opt=no-new-privileges",
|
|
365
|
+
"--security-opt seccomp=/etc/docker/vhe-seccomp.json"
|
|
366
|
+
],
|
|
367
|
+
"readOnly": {
|
|
368
|
+
"flag": "--read-only --tmpfs /run --tmpfs /tmp",
|
|
369
|
+
"use": "immutable rootfs for untrusted code"
|
|
370
|
+
},
|
|
371
|
+
"userns": {
|
|
372
|
+
"daemonJson": "{\"userns-remap\": \"default\"}",
|
|
373
|
+
"containerFlag": "--userns=host (escape hatch when remapping breaks tools)",
|
|
374
|
+
"how": "daemon remaps container root to an unused host uid/gid range in /etc/subuid /etc/subgid"
|
|
375
|
+
},
|
|
376
|
+
"runtime": {
|
|
377
|
+
"flag": "--runtime=runsc (gVisor) | --runtime=kata-runtime (Kata)",
|
|
378
|
+
"default": "runc"
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"daemonConfiguration": {
|
|
382
|
+
"cgroupV2": {
|
|
383
|
+
"unifiedHierarchy": true,
|
|
384
|
+
"controllers": [
|
|
385
|
+
"cpu",
|
|
386
|
+
"memory",
|
|
387
|
+
"io",
|
|
388
|
+
"pids"
|
|
389
|
+
],
|
|
390
|
+
"note": "all 2026 distros default to cgroup v2; systemd delegates subtrees for rootless engines"
|
|
391
|
+
},
|
|
392
|
+
"overcommit": {
|
|
393
|
+
"vm.overcommit_memory": 2,
|
|
394
|
+
"vm.overcommit_ratio": 100,
|
|
395
|
+
"semantics": "mode 2 (strict): total address space commit must not exceed swap + ratio% of RAM",
|
|
396
|
+
"source": "Documentation/mm/overcommit-accounting.rst",
|
|
397
|
+
"engineUse": "pair with --memory-swap=-1 so containers can commit virtual memory beyond physical RAM (fake '6 TB EPYC' RAM identities backed by virtual memory)"
|
|
398
|
+
},
|
|
399
|
+
"zramSwap": {
|
|
400
|
+
"description": "compressed in-memory swap (zram module) increases the swap pool that --memory-swap=-1 can draw from",
|
|
401
|
+
"tip": "zramctl / systemd zram-generator for ephemeral CI hosts"
|
|
402
|
+
},
|
|
403
|
+
"logDriver": {
|
|
404
|
+
"driver": "local",
|
|
405
|
+
"options": {
|
|
406
|
+
"maxSize": "50m",
|
|
407
|
+
"maxFile": "5"
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
"storageDriver": {
|
|
411
|
+
"recommended": "overlay2",
|
|
412
|
+
"recommended2": "containerd snapshotter (stargz/nydus for lazy pull)"
|
|
413
|
+
},
|
|
414
|
+
"insecureChoicesAvoided": [
|
|
415
|
+
"privileged mode (use granular caps + seccomp instead)",
|
|
416
|
+
"--network=host on untrusted builds (SSRF into runner metadata)",
|
|
417
|
+
"docker.sock mounting"
|
|
418
|
+
]
|
|
419
|
+
},
|
|
420
|
+
"mesaCache": {
|
|
421
|
+
"docker": {
|
|
422
|
+
"version": "29.7.2",
|
|
423
|
+
"buildx": {
|
|
424
|
+
"cache": "gha",
|
|
425
|
+
"optimization": "103s -> 25s",
|
|
426
|
+
"provenance": false
|
|
427
|
+
},
|
|
428
|
+
"hostConfig": {
|
|
429
|
+
"memorySwap": -1,
|
|
430
|
+
"memorySwapNote": "-1 unlimited sentinel disables swap limit, allows unlimited swap if Memory set",
|
|
431
|
+
"shmSize": 2147483648,
|
|
432
|
+
"shmSizeHuman": "2g",
|
|
433
|
+
"tmpfs": {
|
|
434
|
+
"/tmp/mesa_shader_cache": "rw,exec,size=20G",
|
|
435
|
+
"/dev/shm": "rw,size=2G"
|
|
436
|
+
},
|
|
437
|
+
"env": {
|
|
438
|
+
"mesaShaderCacheDir": "/tmp/mesa_shader_cache",
|
|
439
|
+
"mesaShaderCacheMaxSize": "20G",
|
|
440
|
+
"galliumOverrideCpuCaps": "avx512f+avx512bw+avx512cd+avx512dq+avx512vl",
|
|
441
|
+
"lpNativeVectorWidth": "512",
|
|
442
|
+
"lpNumThreads": "0",
|
|
443
|
+
"mesaGlVersionOverride": "4.6",
|
|
444
|
+
"mesaGlslVersionOverride": "460"
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
"xvfb": {
|
|
448
|
+
"display": ":99",
|
|
449
|
+
"screen": "0 1920x1080x24",
|
|
450
|
+
"args": "+extension GLX +render -noreset",
|
|
451
|
+
"dri3": true,
|
|
452
|
+
"glx": true
|
|
453
|
+
},
|
|
454
|
+
"image": {
|
|
455
|
+
"base": "ubuntu:24.04",
|
|
456
|
+
"mesa": "26.2.1",
|
|
457
|
+
"llvm": "22.1.8"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"buildxReference": {
|
|
462
|
+
"version": "0.36.1",
|
|
463
|
+
"cacheStrategy": {
|
|
464
|
+
"cacheFrom": "type=gha,scope=vhe",
|
|
465
|
+
"cacheTo": "type=gha,scope=vhe,mode=max",
|
|
466
|
+
"note": "GitHub Actions cache backend; mode=max exports intermediate layers"
|
|
467
|
+
},
|
|
468
|
+
"multiArch": {
|
|
469
|
+
"platforms": [
|
|
470
|
+
"linux/amd64",
|
|
471
|
+
"linux/arm64"
|
|
472
|
+
],
|
|
473
|
+
"command": "docker buildx build --platform linux/amd64,linux/arm64 --cache-from type=gha --cache-to type=gha,mode=max --push -t ghcr.io/vhe/sandbox:29.7.2 ."
|
|
474
|
+
},
|
|
475
|
+
"actionsWorkflowUses": [
|
|
476
|
+
"docker/setup-buildx-action@v4.3.0",
|
|
477
|
+
"docker/build-push-action@v7.3.0",
|
|
478
|
+
"docker/login-action@v4.6.0",
|
|
479
|
+
"docker/metadata-action@v6.2.0"
|
|
480
|
+
],
|
|
481
|
+
"cacheGhaNested": null
|
|
482
|
+
},
|
|
483
|
+
"composeReference": {
|
|
484
|
+
"version": "5.5.0",
|
|
485
|
+
"highlights": {
|
|
486
|
+
"5.4.0": "declarative reconciliation engine for volumes/networks (2026-08-03)",
|
|
487
|
+
"5.5.0": "reformulated image digest reconciliation (2026-08-17)"
|
|
488
|
+
},
|
|
489
|
+
"serviceExample": {
|
|
490
|
+
"service": "vhe-sandbox",
|
|
491
|
+
"image": "ghcr.io/vhe/sandbox:29.7.2",
|
|
492
|
+
"memswapLimit": -1,
|
|
493
|
+
"shmSize": "2g",
|
|
494
|
+
"cpus": 16,
|
|
495
|
+
"cpuset": "0-15",
|
|
496
|
+
"pidsLimit": 8192,
|
|
497
|
+
"tmpfs": [
|
|
498
|
+
"/tmp:size=20G"
|
|
499
|
+
],
|
|
500
|
+
"capDrop": [
|
|
501
|
+
"ALL"
|
|
502
|
+
],
|
|
503
|
+
"capAdd": [
|
|
504
|
+
"CHOWN",
|
|
505
|
+
"SETUID",
|
|
506
|
+
"SETGID"
|
|
507
|
+
],
|
|
508
|
+
"securityOpt": [
|
|
509
|
+
"no-new-privileges:true",
|
|
510
|
+
"seccomp:./vhe-seccomp.json"
|
|
511
|
+
],
|
|
512
|
+
"ulimits": {
|
|
513
|
+
"nofile": {
|
|
514
|
+
"soft": 1048576,
|
|
515
|
+
"hard": 1048576
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
"environment": [
|
|
519
|
+
"LIBGL_ALWAYS_SOFTWARE=true",
|
|
520
|
+
"LP_NUM_THREADS=0",
|
|
521
|
+
"RUSTICL_ENABLE=llvmpipe",
|
|
522
|
+
"VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json"
|
|
523
|
+
],
|
|
524
|
+
"deploy": {
|
|
525
|
+
"resources": {
|
|
526
|
+
"limits": {
|
|
527
|
+
"memory": "64g",
|
|
528
|
+
"cpus": "16"
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
},
|
|
532
|
+
"healthcheck": {
|
|
533
|
+
"test": [
|
|
534
|
+
"CMD",
|
|
535
|
+
"glxinfo",
|
|
536
|
+
"-B"
|
|
537
|
+
],
|
|
538
|
+
"interval": "30s",
|
|
539
|
+
"retries": 3
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
"seccomp": {
|
|
544
|
+
"defaultProfile": "Docker default profile blocks io_uring syscalls (io_uring_setup/io_uring_register/io_uring_enter) since moby#47532",
|
|
545
|
+
"rationale2026": [
|
|
546
|
+
"io_uring is the top syscall-based attack surface (CVE-2026-46315 info disclosure; K8s CIS benchmarks recommend blocking)",
|
|
547
|
+
"gVisor disables io_uring by default for the same reason"
|
|
548
|
+
],
|
|
549
|
+
"vheProfileAdditions": {
|
|
550
|
+
"blocked": [
|
|
551
|
+
"io_uring_setup",
|
|
552
|
+
"io_uring_register",
|
|
553
|
+
"io_uring_enter",
|
|
554
|
+
"perf_event_open",
|
|
555
|
+
"kexec_load",
|
|
556
|
+
"bpf (unprivileged)"
|
|
557
|
+
],
|
|
558
|
+
"allowedForEngine": [
|
|
559
|
+
"process_vm_readv (nvml-unified-shim reads guest CUDA), userfaultfd (CRIU/CH snapshot offload)"
|
|
560
|
+
]
|
|
561
|
+
},
|
|
562
|
+
"lwnNote": "task-level io_uring restrictions patchset (LWN 1054225) may re-enable per-task seccomp-compatible io_uring in future kernels"
|
|
563
|
+
},
|
|
564
|
+
"runtimes": {
|
|
565
|
+
"runc": {
|
|
566
|
+
"role": "default OCI runtime"
|
|
567
|
+
},
|
|
568
|
+
"runsc": {
|
|
569
|
+
"provider": "gVisor",
|
|
570
|
+
"release": "20260817.0 (2026-08-19, weekly cadence)",
|
|
571
|
+
"platform": "systrap (default; ptrace and KVM platforms available)",
|
|
572
|
+
"overhead": "10-30% typical I/O-bound; up to 2x on syscall-heavy workloads; DirectFS reduces filesystem overhead",
|
|
573
|
+
"use": "--runtime=runsc for untrusted workloads on hosts without KVM (works where Kata/Firecracker cannot run)",
|
|
574
|
+
"source": "gvisor.dev/docs/architecture_guide/platforms"
|
|
575
|
+
},
|
|
576
|
+
"kataRuntime": {
|
|
577
|
+
"version": "4.1.0 (2026-08-21)",
|
|
578
|
+
"runtimeRs": "Rust runtime is default since 4.0; Go runtime deprecated (removal no earlier than 5.0.0)",
|
|
579
|
+
"hypervisors": [
|
|
580
|
+
"cloud-hypervisor",
|
|
581
|
+
"qemu",
|
|
582
|
+
"firecracker",
|
|
583
|
+
"dragonball",
|
|
584
|
+
"openvmm (4.1)"
|
|
585
|
+
],
|
|
586
|
+
"requirement": "KVM strongly recommended (microVM) - not available on GitHub-hosted runners",
|
|
587
|
+
"features41": [
|
|
588
|
+
"OpenVMM support",
|
|
589
|
+
"Cloud Hypervisor VM templates",
|
|
590
|
+
"CLH nested virt toggle",
|
|
591
|
+
"NVSwitch passthrough via IOMMUFD",
|
|
592
|
+
"rootless + seccomp baseline for QEMU"
|
|
593
|
+
]
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"exampleFullRun": "docker run --rm --runtime=runc --memory=64g --memory-swap=-1 --shm-size=2g --cpus=16 --cpuset-cpus=0-15 --nano-cpus=16000000000 --pids-limit=8192 --tmpfs /tmp:rw,size=20G,exec --cap-drop=ALL --cap-add=CHOWN --cap-add=SETUID --cap-add=SETGID --security-opt=no-new-privileges --security-opt seccomp=/etc/docker/vhe-seccomp.json --ulimit nofile=1048576 -e LIBGL_ALWAYS_SOFTWARE=true -e LP_NUM_THREADS=0 -e RUSTICL_ENABLE=llvmpipe -e VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json ghcr.io/vhe/sandbox:29.7.2 glxinfo -B",
|
|
597
|
+
"engineIntegration": {
|
|
598
|
+
"vmProfileLink": "vm.config.json profiles map 1:1 to docker run flags (vcpus->cpus/nano-cpus, ram->memory, disk.tmpfs_gb->tmpfs)",
|
|
599
|
+
"memorySpoofChain": "--memory-swap=-1 + vm.overcommit_memory=2 + zram + LD_PRELOAD memoverlay (proc/meminfo rewrite) + dolos-style sysinfo(totalram) hook",
|
|
600
|
+
"shmAndPytorch": "every AI profile (ai, ai-training, ai-cluster, llm-inference, inference-mig) MUST set shm_size 2g minimum",
|
|
601
|
+
"githubRunnerNote": "Docker runs natively on GitHub-hosted runners even though /dev/kvm does not exist (passage.json) - the Docker+gVisor path is the only hardened sandbox path on hosted CI"
|
|
602
|
+
},
|
|
603
|
+
"healthcheck": {
|
|
604
|
+
"test": [
|
|
605
|
+
"CMD-SHELL",
|
|
606
|
+
"qemu-system-x86_64 --version | grep -q '11.1.0' && curl -fsS http://localhost:8080/health | grep -q 'ok' || exit 1"
|
|
607
|
+
],
|
|
608
|
+
"interval": "30s",
|
|
609
|
+
"timeout": "10s",
|
|
610
|
+
"startPeriod": "45s",
|
|
611
|
+
"startInterval": "5s",
|
|
612
|
+
"retries": 3,
|
|
613
|
+
"curlVersion": "7.88.1",
|
|
614
|
+
"qemuCheck": "qemu-system-x86_64 --version",
|
|
615
|
+
"fallback": "qemu-system-x86_64 --help && ls -l /dev/kvm || true",
|
|
616
|
+
"errorCatcherType": "healthcheck-failure logs to /var/log/saddle/health.log with 44px touch target for dashboard"
|
|
617
|
+
},
|
|
618
|
+
"labels": {
|
|
619
|
+
"org.opencontainers.image.title": "saddle-v6",
|
|
620
|
+
"org.opencontainers.image.description": "Saddle v6 virtualization orchestrator with QEMU 11.1.0, Node 22 LTS, Python 3.13.5, MTTG, Passage, OVMF",
|
|
621
|
+
"org.opencontainers.image.version": "2.0.0",
|
|
622
|
+
"org.opencontainers.image.created": "2026-08-22T00:00:00Z",
|
|
623
|
+
"org.opencontainers.image.authors": "Saddle Core <core@saddle.dev>",
|
|
624
|
+
"org.opencontainers.image.url": "https://saddle.dev",
|
|
625
|
+
"org.opencontainers.image.documentation": "https://saddle.dev/docs/v6",
|
|
626
|
+
"org.opencontainers.image.source": "https://github.com/saddle-dev/saddle-v6",
|
|
627
|
+
"org.opencontainers.image.revision": "main@2026-08-22",
|
|
628
|
+
"org.opencontainers.image.licenses": "MIT",
|
|
629
|
+
"org.opencontainers.image.vendor": "Saddle",
|
|
630
|
+
"org.opencontainers.image.base.name": "debian:bookworm-slim",
|
|
631
|
+
"org.opencontainers.image.base.digest": "sha256:bookworm-slim-pinned-2026-08-22",
|
|
632
|
+
"saddle": {
|
|
633
|
+
"com.saddle.version": "2.0.0",
|
|
634
|
+
"com.saddle.engine": "qemu-11.1.0",
|
|
635
|
+
"com.saddle.modes": "32",
|
|
636
|
+
"com.saddle.forge.mirrors": "github,gitea,forgejo",
|
|
637
|
+
"com.saddle.memory": "internal-priority",
|
|
638
|
+
"com.saddle.virtualization": "kvm+qemu",
|
|
639
|
+
"com.saddle.passage": "pipelined-memory-passage",
|
|
640
|
+
"com.saddle.boards": "am4,am5,threadripper,epyc",
|
|
641
|
+
"com.saddle.gpu": "nvidia-blackwell,broadcom,amd-rdna4",
|
|
642
|
+
"com.saddle.cgroups": "v2",
|
|
643
|
+
"com.saddle.cdi": "nvidia-560.35.05",
|
|
644
|
+
"com.saddle.build.date": "2026-08-22",
|
|
645
|
+
"com.saddle.build.node": "24.19.0",
|
|
646
|
+
"com.saddle.build.python": "3.13.5",
|
|
647
|
+
"com.saddle.build.docker": "29.7.2",
|
|
648
|
+
"com.saddle.build.buildx": "0.18.1",
|
|
649
|
+
"com.saddle.build.buildkit": "0.16.0"
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
"build": {
|
|
653
|
+
"context": ".",
|
|
654
|
+
"dockerfileInline": "# syntax=docker/dockerfile:1.6\n# @observer Multi-stage Dockerfile - pinned versions 2026-08-22\nARG NODE_VERSION=24.19.0\nARG PYTHON_VERSION=3.13.5\nARG QEMU_VERSION=11.1.0\n\nFROM node:${NODE_VERSION}-alpine AS builder\nWORKDIR /saddle\nRUN apk add --no-cache python3 make g++ git curl tini\nCOPY package.json tsconfig.json ./\nRUN npm ci --ignore-scripts\nCOPY . .\nRUN npx tsc -p tsconfig.json\n\nFROM python:${PYTHON_VERSION}-slim AS pybridge\nWORKDIR /saddle\nCOPY pyproject.toml ./\nRUN pip install --no-cache-dir --upgrade pip==24.3.1 && pip install -e .\n\nFROM debian:bookworm-slim AS runtime-base\nRUN apt-get update && apt-get install -y --no-install-recommends qemu-system-x86=1:11.1.0 (built from source) ovmf pciutils curl tini kmod && rm -rf /var/lib/apt/lists/*\nCOPY --from=builder /saddle/dist /saddle/dist\nCOPY --from=builder /saddle/node_modules /saddle/node_modules\nCOPY --from=pybridge /usr/local/lib/python3.13/site-packages /usr/local/lib/python3.13/site-packages\nRUN groupadd -r saddle -g 1001 && useradd -r -g saddle -u 1001 -m saddle\nWORKDIR /saddle\nUSER saddle\nENTRYPOINT [\"/usr/bin/tini\", \"--\"]\nHEALTHCHECK --interval=30s --timeout=10s --start-period=45s --retries=3 CMD qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || exit 1\nCMD [\"node\", \"dist/index.js\"]\n\nLABEL org.opencontainers.image.title=\"saddle-v6\" \\\n org.opencontainers.image.version=\"6.0.0\" \\\n org.opencontainers.image.created=\"2026-08-22T00:00:00Z\" \\\n com.saddle.cdi=\"nvidia\" \\\n com.saddle.cgroups=\"v2\"\n",
|
|
655
|
+
"target": "runtime-base",
|
|
656
|
+
"platforms": [
|
|
657
|
+
"linux/amd64",
|
|
658
|
+
"linux/arm64"
|
|
659
|
+
],
|
|
660
|
+
"cacheFrom": [
|
|
661
|
+
"type=gha",
|
|
662
|
+
"type=registry,ref=ghcr.io/saddle-dev/saddle-v6:buildcache"
|
|
663
|
+
],
|
|
664
|
+
"cacheTo": [
|
|
665
|
+
"type=gha,mode=max",
|
|
666
|
+
"type=registry,ref=ghcr.io/saddle-dev/saddle-v6:buildcache,mode=max"
|
|
667
|
+
],
|
|
668
|
+
"args": {
|
|
669
|
+
"nodeVersion": "26.7.0",
|
|
670
|
+
"pythonVersion": "3.14.7",
|
|
671
|
+
"qemuVersion": "11.1.0"
|
|
672
|
+
},
|
|
673
|
+
"noCache": false,
|
|
674
|
+
"pull": true,
|
|
675
|
+
"sbom": true,
|
|
676
|
+
"provenance": "mode=max"
|
|
677
|
+
},
|
|
678
|
+
"githubActions": {
|
|
679
|
+
"checkout": "actions/checkout@v7.0.1",
|
|
680
|
+
"setupNode": "actions/setup-node@v7.0.0",
|
|
681
|
+
"setupPython": "actions/setup-python@v7.0.0",
|
|
682
|
+
"setupQemu": "docker/setup-qemu-action@v4.2.0",
|
|
683
|
+
"setupBuildx": "docker/setup-buildx-action@v4.3.0",
|
|
684
|
+
"cacheAction": "actions/cache@v6.1.0",
|
|
685
|
+
"dockerLogin": "docker/login-action@v4.6.0",
|
|
686
|
+
"dockerMetadata": "docker/metadata-action@v6.2.0",
|
|
687
|
+
"dockerBuildPush": "docker/build-push-action@v7.3.0",
|
|
688
|
+
"sbomAction": "anchore/sbom-action@v0.24.0",
|
|
689
|
+
"nodeVersionCi": "26.7.0",
|
|
690
|
+
"pythonVersionCi": "3.14.7",
|
|
691
|
+
"typescriptVersionCi": "7.0.2"
|
|
692
|
+
},
|
|
693
|
+
"security": {
|
|
694
|
+
"user": "saddle:1001",
|
|
695
|
+
"nonRoot": true,
|
|
696
|
+
"readOnly": false,
|
|
697
|
+
"noNewPrivileges": true,
|
|
698
|
+
"seccomp": "runtime/default",
|
|
699
|
+
"apparmor": "docker-default",
|
|
700
|
+
"capabilitiesDropAll": true,
|
|
701
|
+
"tiniInit": true,
|
|
702
|
+
"tiniPath": "/usr/bin/tini",
|
|
703
|
+
"errorCatcher": "on privilege escalation attempt, observer logs event and terminates container with code 126"
|
|
704
|
+
},
|
|
705
|
+
"volumes": {
|
|
706
|
+
"mounts": [
|
|
707
|
+
{
|
|
708
|
+
"source": "saddle-data",
|
|
709
|
+
"target": "/saddle/data",
|
|
710
|
+
"type": "volume"
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
"source": "/dev/kvm",
|
|
714
|
+
"target": "/dev/kvm",
|
|
715
|
+
"type": "bind",
|
|
716
|
+
"readOnly": false
|
|
717
|
+
},
|
|
718
|
+
{
|
|
719
|
+
"source": "ovmf-vars",
|
|
720
|
+
"target": "/var/lib/saddle/ovmf",
|
|
721
|
+
"type": "volume"
|
|
722
|
+
}
|
|
723
|
+
]
|
|
724
|
+
},
|
|
725
|
+
"network": {
|
|
726
|
+
"driver": "bridge",
|
|
727
|
+
"ports": [
|
|
728
|
+
"8080:8080",
|
|
729
|
+
"8081:8081"
|
|
730
|
+
],
|
|
731
|
+
"dns": [
|
|
732
|
+
"1.1.1.1",
|
|
733
|
+
"8.8.8.8"
|
|
734
|
+
],
|
|
735
|
+
"hostGateway": true
|
|
736
|
+
},
|
|
737
|
+
"logging": {
|
|
738
|
+
"driver": "json-file",
|
|
739
|
+
"maxSize": "50m",
|
|
740
|
+
"maxFiles": 5,
|
|
741
|
+
"labels": [
|
|
742
|
+
"com.saddle.version",
|
|
743
|
+
"org.opencontainers.image.version"
|
|
744
|
+
],
|
|
745
|
+
"errorLog": "/var/log/saddle/docker.error.log"
|
|
746
|
+
},
|
|
747
|
+
"errorcatcher": {
|
|
748
|
+
"layer1": "build-time: docker build --progress=plain fails fast with exit codes 1-3",
|
|
749
|
+
"layer2": "runtime-time: healthcheck curl qemu version retries 3 times before marking unhealthy",
|
|
750
|
+
"layer3": "host-time: cgroups v2 OOM killer logs to /var/log/saddle/oom.log, tini reaps zombies",
|
|
751
|
+
"codes": {
|
|
752
|
+
"buildFail": 1,
|
|
753
|
+
"pipFail": 2,
|
|
754
|
+
"qemuMissing": 3,
|
|
755
|
+
"healthFail": 4,
|
|
756
|
+
"cgroupsFail": 5,
|
|
757
|
+
"cdiMissing": 6
|
|
758
|
+
},
|
|
759
|
+
"contact": "44px touch target for error UI in dashboard, third-person logs"
|
|
760
|
+
},
|
|
761
|
+
"compatibility": {
|
|
762
|
+
"requiresKvm": true,
|
|
763
|
+
"requiresCgroupsV2": true,
|
|
764
|
+
"requiresCdi": "optional for gpu",
|
|
765
|
+
"kernelMin": "5.15.0",
|
|
766
|
+
"dockerMin": "29.7.2",
|
|
767
|
+
"notes": "The observer confirms compatibility on Ubuntu 24.04 LTS, Debian 12, Fedora 40 as of 2026-08-22"
|
|
768
|
+
}
|
|
769
|
+
}
|