@wenathlan/saddle 1.8.17 → 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 +68 -22
- 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 -122
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -122
- 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.d.ts +129 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +96 -0
- 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/artifactavailability.md +6 -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.17.md +6 -0
- package/docs/releasenotes-1.8.18.md +32 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.18-isolation.md +43 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.16.md +56 -1
- package/docs/todo-1.8.18.md +164 -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 -55
- 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/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/docs/logs/.gitkeep +0 -0
- package/docs/plans/00.index.md +0 -50
- package/docs/plans/01.architecture.md +0 -86
- package/docs/plans/02.research.computer.use.md +0 -58
- package/docs/plans/03.research.captcha.bypass.md +0 -68
- package/docs/plans/04.research.sandbox.ai.md +0 -52
- package/docs/plans/05.capture.platform.md +0 -57
- package/docs/plans/06.dependencies.md +0 -97
- package/docs/plans/07.captcha.test.page.md +0 -41
- package/docs/plans/08.production.infra.md +0 -70
- package/docs/plans/09.database.schema.md +0 -121
- package/docs/plans/10.cloudinary.storage.md +0 -57
- package/docs/plans/11.movement.logs.json.md +0 -72
- package/docs/plans/12.research.atlas.agent.browser.md +0 -79
- package/docs/plans/13.research.anti.detection.md +0 -898
- package/docs/plans/14.research.proxy.md +0 -1495
- package/docs/plans/15.research.retry.rate.limit.md +0 -1958
- package/docs/plans/16.research.crawling.md +0 -1417
- package/docs/plans/17.research.caching.md +0 -1610
- package/docs/plans/18.research.content.extraction.md +0 -1952
- package/docs/plans/19.research.errors.events.md +0 -1523
- package/docs/plans/20.research.zod.validation.md +0 -1350
- package/docs/plans/21.research.batch.concurrency.md +0 -1888
- package/docs/plans/22.research.universal.runtime.md +0 -944
- package/docs/plans/23.research.ai.integration.md +0 -1465
- package/docs/plans/24.research.memory.persistence.md +0 -1979
- package/docs/plans/25.research.server.api.md +0 -342
- package/docs/plans/26.research.compilation.md +0 -249
- package/docs/plans/27.research.html.parsing.md +0 -251
- package/docs/plans/28.action.plan.md +0 -50
- package/docs/plans/29.api.reference.md +0 -174
- package/docs/plans/30.architecture.plan.md +0 -94
- package/docs/plans/31.auditoria.dados.md +0 -163
- package/docs/plans/32.bots.automacao.computacional.md +0 -214
- package/docs/plans/33.bots.codigo.revisao.md +0 -220
- package/docs/plans/34.bots.seguranca.cicd.md +0 -366
- package/docs/plans/35.comparativo.concorrencia.md +0 -464
- package/docs/plans/36.computational.memory.md +0 -340
- package/docs/plans/37.deploystrategy.md +0 -394
- package/docs/plans/38.flow.md +0 -155
- package/docs/plans/39.multi.platform.bot.md +0 -252
- package/docs/plans/40.npm.publish.md +0 -250
- package/docs/plans/41.o.que.falta.md +0 -407
- package/docs/plans/42.pesquisa.concorrencia.md +0 -721
- package/docs/plans/43.plan.universal.architecture.md +0 -496
- package/docs/plans/44.reference.md +0 -100
- package/docs/plans/45.robotarchitecture.md +0 -237
- package/docs/plans/46.scdnintegration.md +0 -284
- package/docs/plans/47.multiforge.readme.md +0 -129
- package/docs/plans/48.theory.v4.repo.os.md +0 -152
- package/docs/plans/49.third.party.infra.md +0 -12
- package/docs/plans/50.file.as.compute.md +0 -39
- package/docs/plans/51.architecture.virtual.processor.md +0 -80
- package/docs/plans/52.manifesto.v8.md +0 -11
- package/docs/plans/58.cdn.list.md +0 -23
- package/docs/plans/59.sql.frameworks.md +0 -33
- package/docs/plans/60.sql.thirdparty.md +0 -26
- package/docs/plans/61.objective.multiforge.md +0 -63
- package/docs/plans/62.huggingface.upload.md +0 -26
- package/docs/plans/63.kaggle.upload.md +0 -24
- package/docs/plans/64.npm.storage.md +0 -30
- package/docs/plans/65.rclone.terabox.md +0 -32
- package/docs/plans/66.buckets.and.models.todo.md +0 -14
- package/docs/plans/67.database.todo.md +0 -13
- package/docs/plans/68.deploy.packages.todo.md +0 -12
- package/docs/plans/69.report.human.operator.md +0 -133
- package/docs/plans/70.report.brain2qwerty.ems.md +0 -135
- package/docs/plans/71.report.hd.infinito.vram.md +0 -155
- package/docs/plans/72.plan.hd.infinito.node.md +0 -146
- package/docs/plans/73.plan.scifi.repos.md +0 -125
- package/docs/plans/74.000.manifesto.v8.flat.2..md +0 -11
- package/docs/plans/README.md +0 -489
- package/docs/plans/aggregate_platforms.mjs +0 -146
- package/docs/plans/examplesession.json +0 -36
- package/docs/plans/missing-facts.md +0 -192
- package/docs/plans/models.md +0 -64
- package/docs/plans/organize.cjs +0 -270
- package/docs/plans/platforms.md +0 -2887
- package/docs/plans/sites.md +0 -31322
- package/docs/sources/farm.py +0 -117
- package/docs/sources/html/saddle1.html +0 -132
- package/docs/sources/html/saddle2.html +0 -157
- package/docs/sources/html/saddle3.html +0 -119
- package/docs/sources/html/saddle4.html +0 -144
- package/docs/sources/html/saddle5.html +0 -72
- package/docs/sources/html/saddle6.html +0 -171
- package/docs/sources/html/saddle7.html +0 -236
- package/docs/sources/saddle.ts +0 -74
- package/docs/sources/schema.prisma +0 -88
- package/docs/sources/script.sh +0 -64
- package/docs/sources/workflows.yml +0 -458
- package/docs/talks1/_body.txt +0 -14
- package/docs/talks1/_index.md +0 -15
- package/docs/talks1/_screenshot.png +0 -0
- package/docs/talks1/assistant-01.md +0 -5
- package/docs/talks1/assistant-02.md +0 -5
- package/docs/talks1/assistant-03.md +0 -531
- package/docs/talks1/assistant-04.md +0 -26
- package/docs/talks1/assistant-05.md +0 -774
- package/docs/talks1/assistant-06.md +0 -1718
- package/docs/talks1/scrape-share.cjs +0 -185
- package/docs/talks1/scrape-share.ts +0 -183
- package/docs/talks1/user-01.md +0 -3
- package/docs/talks1/user-02.md +0 -3
- package/docs/talks1/user-03.md +0 -88
- package/docs/talks1/user-04.md +0 -3
- package/docs/talks1/user-05.md +0 -3
- package/docs/talks1/user-06.md +0 -88
- package/docs/talks1/user-07.md +0 -88
- package/docs/talks2/_body.txt +0 -14
- package/docs/talks2/_index.md +0 -16
- package/docs/talks2/_screenshot.png +0 -0
- package/docs/talks2/assistant-01.md +0 -5
- package/docs/talks2/assistant-02.md +0 -5
- package/docs/talks2/assistant-03.md +0 -424
- package/docs/talks2/assistant-04.md +0 -598
- package/docs/talks2/assistant-05.md +0 -1280
- package/docs/talks2/assistant-06.md +0 -1227
- package/docs/talks2/assistant-07.md +0 -1252
- package/docs/talks2/user-01.md +0 -3
- package/docs/talks2/user-02.md +0 -3
- package/docs/talks2/user-03.md +0 -88
- package/docs/talks2/user-04.md +0 -88
- package/docs/talks2/user-05.md +0 -88
- package/docs/talks2/user-06.md +0 -88
- package/docs/talks2/user-07.md +0 -3
- package/docs/talks3/_body.txt +0 -467
- package/docs/talks3/_index.md +0 -10
- package/docs/talks3/_screenshot.png +0 -0
- package/docs/talks3/assistant-01.md +0 -417
- package/docs/talks3/assistant-02.md +0 -417
- package/docs/talks3/assistant-03.md +0 -29
- package/docs/talks3/assistant-04.md +0 -727
- package/docs/talks3/user-01.md +0 -88
- package/docs/talks3/user-02.md +0 -88
- package/docs/talks3/user-03.md +0 -3
- package/docs/talks3/user-04.md +0 -3
- package/docs/talks4/_body.txt +0 -14
- package/docs/talks4/_index.md +0 -12
- package/docs/talks4/_screenshot.png +0 -0
- package/docs/talks4/assistant-01.md +0 -5
- package/docs/talks4/assistant-02.md +0 -5
- package/docs/talks4/assistant-03.md +0 -35
- package/docs/talks4/assistant-04.md +0 -512
- package/docs/talks4/assistant-05.md +0 -599
- package/docs/talks4/user-01.md +0 -3
- package/docs/talks4/user-02.md +0 -3
- package/docs/talks4/user-03.md +0 -88
- package/docs/talks4/user-04.md +0 -88
- package/docs/talks4/user-05.md +0 -7
- package/docs/talks5/_body.txt +0 -14
- package/docs/talks5/_index.md +0 -13
- package/docs/talks5/_screenshot.png +0 -0
- package/docs/talks5/assistant-01.md +0 -5
- package/docs/talks5/assistant-02.md +0 -5
- package/docs/talks5/assistant-03.md +0 -690
- package/docs/talks5/assistant-04.md +0 -758
- package/docs/talks5/assistant-05.md +0 -974
- package/docs/talks5/user-01.md +0 -3
- package/docs/talks5/user-02.md +0 -3
- package/docs/talks5/user-03.md +0 -105
- package/docs/talks5/user-04.md +0 -105
- package/docs/talks5/user-05.md +0 -63
- package/docs/talks5/user-06.md +0 -105
- package/docs/talks6/_body.txt +0 -14
- package/docs/talks6/_index.md +0 -9
- package/docs/talks6/_screenshot.png +0 -0
- package/docs/talks6/assistant-01.md +0 -5
- package/docs/talks6/assistant-02.md +0 -5
- package/docs/talks6/assistant-03.md +0 -1499
- package/docs/talks6/user-01.md +0 -3
- package/docs/talks6/user-02.md +0 -3
- package/docs/talks6/user-03.md +0 -88
- package/docs/talks6/user-04.md +0 -88
- package/docs/talks7/_body.txt +0 -14
- package/docs/talks7/_index.md +0 -10
- package/docs/talks7/_screenshot.png +0 -0
- package/docs/talks7/assistant-01.md +0 -5
- package/docs/talks7/assistant-02.md +0 -5
- package/docs/talks7/assistant-03.md +0 -523
- package/docs/talks7/assistant-04.md +0 -617
- package/docs/talks7/user-01.md +0 -3
- package/docs/talks7/user-02.md +0 -3
- package/docs/talks7/user-03.md +0 -105
- package/docs/talks7/user-04.md +0 -67
- package/docs/talks8/conversa1.txt +0 -1322
- package/docs/talks8/conversa2.txt +0 -237
- package/docs/talks9/Beyond the Obvious_ 50 Plataformas Auto-Hospedadas de Forja de C/303/263digo para Al/303/251m de Gitea e GitLab.md" +0 -174
- package/docs/talks9/De NPM a Multi-Linguagem_ Uma Arquitetura T/303/251cnica para a Execu/303/247/303/243o Integrada de C/303/263digo no Ecossistema Node.js.md" +0 -59
- package/docs/talks9/De NPM a VMs Virtuais_ Uma An/303/241lise Arquitet/303/264nica para a Realiza/303/247/303/243o do Ciclo de Vida do Projeto SADDLE.md" +0 -91
- package/docs/talks9/Mapeamento da Engrenagem Computacional_ Uma Arquitetura para Execu/303/247/303/243o Isolada e Persist/303/252ncia em Ambientes Distribu/303/255dos.md" +0 -116
- package/docs/talks9/O Cen/303/241rio Pr/303/241tico do SADDLE_ Uma An/303/241lise de Viabilidade e Modelo de Ciclo de Vida Integrado.md" +0 -128
- package/docs/talks9/README (2).md +0 -489
- package/docs/talks9/README.md +0 -198
- package/docs/talks9/Viabilidade do Saddle_ Uma An/303/241lise T/303/251cnica da Transforma/303/247/303/243o de Armazenamento Remoto em Mem/303/263ria Computacional.md" +0 -80
- package/docs/talks9/conversa.txt +0 -544
- package/docs/talks9/other (2).md +0 -39
- package/docs/talks9/other.md +0 -57
- package/docs/talks9/outro.txt +0 -24
- /package/{extension/README.md → docs/extension.md} +0 -0
|
@@ -1,1280 +0,0 @@
|
|
|
1
|
-
# assistant
|
|
2
|
-
|
|
3
|
-
[Thinking] The user wants me to continue researching and provide more detailed information about their platform concept. They're asking about:
|
|
4
|
-
|
|
5
|
-
Using storage as RAM (virtual memory bridge)
|
|
6
|
-
Libraries that convert storage to memory
|
|
7
|
-
Combining projects, libraries, pipelines, repos together
|
|
8
|
-
Creating a unified platform with all these components
|
|
9
|
-
Both proprietary libraries and third-party/external solutions
|
|
10
|
-
Publishing as npm package and open source repo
|
|
11
|
-
|
|
12
|
-
Let me search for more specific information about these topics.
|
|
13
|
-
|
|
14
|
-
[Thinking] Now let me search for more specific information about ModelScope and other platforms, plus more about virtual memory bridges and storage-to-RAM libraries.
|
|
15
|
-
|
|
16
|
-
[Thinking] Now I have comprehensive information. Let me compile this into a detailed plan covering all the user's requirements. The user wants:
|
|
17
|
-
|
|
18
|
-
A platform with container sandboxes
|
|
19
|
-
Using free infrastructure from GitHub, GitLab, Forgejo, Gitea, Codeberg
|
|
20
|
-
Also HuggingFace, Kaggle, ModelScope
|
|
21
|
-
Memory conversion (storage → RAM)
|
|
22
|
-
Libraries like Prisma, Drizzle, MySQL2
|
|
23
|
-
Open source projects
|
|
24
|
-
Publishing as npm package and open source repo
|
|
25
|
-
|
|
26
|
-
Let me create a comprehensive plan.
|
|
27
|
-
|
|
28
|
-
[Thinking] Now let me create the comprehensive plan. I need to be very thorough and detailed.
|
|
29
|
-
|
|
30
|
-
[Thinking] I've provided a comprehensive plan. Let me now ask the user if they want me to implement any specific part.
|
|
31
|
-
|
|
32
|
-
PLANO COMPLETO: Plataforma Sandbox com Memória Virtual Contínua
|
|
33
|
-
|
|
34
|
-
PARTE 1: MAPA DE INFRAESTRUTURA GRATUITA
|
|
35
|
-
1.1 Repositórios + CI/CD (RAM + CPU)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Plataforma
|
|
40
|
-
RAM Gratuita
|
|
41
|
-
CPU
|
|
42
|
-
Storage
|
|
43
|
-
GPU
|
|
44
|
-
Minutos/mês
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
GitHub Actions (público)
|
|
49
|
-
16 GB
|
|
50
|
-
4 vCPU
|
|
51
|
-
14 GB SSD
|
|
52
|
-
Não
|
|
53
|
-
Ilimitado
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
GitHub Actions (privado)
|
|
57
|
-
16 GB
|
|
58
|
-
4 vCPU
|
|
59
|
-
14 GB SSD
|
|
60
|
-
Não
|
|
61
|
-
2.000 min
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
GitLab CI Free
|
|
65
|
-
8 GB
|
|
66
|
-
2 vCPU
|
|
67
|
-
30 GB
|
|
68
|
-
Não
|
|
69
|
-
400 min
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
Codeberg (Forgejo)
|
|
73
|
-
8 GB
|
|
74
|
-
4 vCPU
|
|
75
|
-
-
|
|
76
|
-
Não
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Forgejo self-hosted
|
|
81
|
-
Ilimitado
|
|
82
|
-
Ilimitado
|
|
83
|
-
Ilimitado
|
|
84
|
-
Não
|
|
85
|
-
Ilimitado
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
1.2 Plataformas de GPU Gratuita
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Plataforma
|
|
93
|
-
RAM
|
|
94
|
-
GPU
|
|
95
|
-
GPU VRAM
|
|
96
|
-
Disk
|
|
97
|
-
Limite
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
HuggingFace Spaces (free)
|
|
102
|
-
16 GB
|
|
103
|
-
Não
|
|
104
|
-
-
|
|
105
|
-
50 GB
|
|
106
|
-
Suspensão após 2 dias inativo
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
HuggingFace Spaces (T4 small)
|
|
110
|
-
15 GB
|
|
111
|
-
Nvidia T4
|
|
112
|
-
16 GB
|
|
113
|
-
50 GB
|
|
114
|
-
$0.40/hora
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Kaggle Notebooks
|
|
118
|
-
29 GB
|
|
119
|
-
T4 x2 ou P100
|
|
120
|
-
16 GB
|
|
121
|
-
20 GB
|
|
122
|
-
30h/semana GPU
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
ModelScope Studios
|
|
126
|
-
Variável
|
|
127
|
-
Variável
|
|
128
|
-
Variável
|
|
129
|
-
Ilimitado
|
|
130
|
-
Free tier generoso
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
1.3 Bancos de Dados em Memória
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
Tecnologia
|
|
138
|
-
Tipo
|
|
139
|
-
RAM Usage
|
|
140
|
-
Uso
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
SQLite in-memory
|
|
145
|
-
Banco relacional
|
|
146
|
-
Variável
|
|
147
|
-
Sandboxes efêmeros
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
Redis
|
|
151
|
-
KV store
|
|
152
|
-
Variável
|
|
153
|
-
Cache + sessões
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
Drizzle ORM + SQLite
|
|
157
|
-
ORM TypeScript
|
|
158
|
-
Zero-copy
|
|
159
|
-
Desenvolvimento local
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
Prisma + SQLite
|
|
163
|
-
ORM TypeScript
|
|
164
|
-
Variável
|
|
165
|
-
Migrações + queries
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
MySQL2 + memory
|
|
169
|
-
Driver MySQL
|
|
170
|
-
Variável
|
|
171
|
-
Compatibilidade
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
PARTE 2: BIBLIOTECAS DE MEMÓRIA VIRTUAL
|
|
176
|
-
2.1 Conversão Storage → RAM
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
Projeto
|
|
181
|
-
Linguagem
|
|
182
|
-
O que faz
|
|
183
|
-
npm/pip
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
memfs
|
|
188
|
-
Node.js
|
|
189
|
-
Filesystem em RAM com API fs
|
|
190
|
-
npm i memfs
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
chuk-virtual-fs
|
|
194
|
-
Python
|
|
195
|
-
Virtual FS multi-backend (Memory, SQLite, S3, E2B)
|
|
196
|
-
pip install chuk-virtual-fs
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
mirage
|
|
200
|
-
Python/Node
|
|
201
|
-
Virtual FS unificado (50+ backends: RAM, Redis, S3, GDrive)
|
|
202
|
-
pip install mirage-ai
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
MAVFS
|
|
206
|
-
Python
|
|
207
|
-
/vram + /vdisk filesystem virtual
|
|
208
|
-
GitHub repo
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
ems
|
|
212
|
-
Node.js/Python
|
|
213
|
-
Memória compartilhada persistente cross-process
|
|
214
|
-
npm i ems
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
node-shared-mem
|
|
218
|
-
Node.js
|
|
219
|
-
Shared memory cross-process via N-API
|
|
220
|
-
npm i node-shared-mem
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
2.2 Memória para AI Agents
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Projeto
|
|
228
|
-
Linguagem
|
|
229
|
-
Backend
|
|
230
|
-
npm/pip
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
@memos/sdk
|
|
235
|
-
TypeScript
|
|
236
|
-
SQLite + Graph memory
|
|
237
|
-
npm i @memos/sdk
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
@memstack/core
|
|
241
|
-
TypeScript
|
|
242
|
-
21 storage adapters
|
|
243
|
-
npm i @memstack/core
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
memory-kernel
|
|
247
|
-
TypeScript
|
|
248
|
-
SQLite + markdown files
|
|
249
|
-
npm i memory-kernel
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
cavemem
|
|
253
|
-
TypeScript
|
|
254
|
-
SQLite + FTS5 + vectors
|
|
255
|
-
npm i cavemem
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
crossagentmemory
|
|
259
|
-
Python
|
|
260
|
-
SQLite/Postgres/Redis/Chroma
|
|
261
|
-
pip install crossagentmemory
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
pmb-ai
|
|
265
|
-
Python
|
|
266
|
-
SQLite + LanceDB vectors
|
|
267
|
-
pip install pmb-ai
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
2.3 Bridges Node.js ↔ Python
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
Projeto
|
|
275
|
-
npm/pip
|
|
276
|
-
O que faz
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
pythonia
|
|
281
|
-
npm i pythonia
|
|
282
|
-
Chama Python de Node.js
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
pymport
|
|
286
|
-
npm i pymport
|
|
287
|
-
Bibliotecas Python nativas em Node
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
node-calls-python
|
|
291
|
-
npm i node-calls-python
|
|
292
|
-
Python in-process via N-API
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
nodepyx
|
|
296
|
-
npm i nodepyx
|
|
297
|
-
CPython embutido no Node.js
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
PARTE 3: PROJETOS DE SANDBOX/microVM
|
|
302
|
-
3.1 Sandboxes Leves (Containers)
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
Projeto
|
|
307
|
-
Linguagem
|
|
308
|
-
Isolamento
|
|
309
|
-
Velocidade
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
kern
|
|
314
|
-
Rust
|
|
315
|
-
Namespaces + cgroups (rootless)
|
|
316
|
-
~1.9ms cold start
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
Docker
|
|
320
|
-
Go
|
|
321
|
-
Namespaces + cgroups
|
|
322
|
-
~308ms
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
Podman
|
|
326
|
-
Go
|
|
327
|
-
Rootless containers
|
|
328
|
-
~300ms
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
3.2 Sandboxes com microVMs (mais isolamento)
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
Projeto
|
|
336
|
-
Linguagem
|
|
337
|
-
Isolamento
|
|
338
|
-
Velocidade
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
quicksand
|
|
343
|
-
Python
|
|
344
|
-
QEMU VMs
|
|
345
|
-
~100ms restore
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
exec-sandbox
|
|
349
|
-
Python/Rust
|
|
350
|
-
QEMU microVMs
|
|
351
|
-
~12ms L1
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
mitos
|
|
355
|
-
Go
|
|
356
|
-
Firecracker
|
|
357
|
-
~27ms warm-claim
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
rust-nano-vm
|
|
361
|
-
Rust
|
|
362
|
-
KVM
|
|
363
|
-
~12ms cold start
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
crucible
|
|
367
|
-
Go
|
|
368
|
-
Firecracker
|
|
369
|
-
~125ms
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
boxlite
|
|
373
|
-
Python/Node
|
|
374
|
-
microVM embutível
|
|
375
|
-
Rápido
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
3.3 Sandboxes para GitHub Actions
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
Projeto
|
|
383
|
-
Linguagem
|
|
384
|
-
Backend
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
outrunner
|
|
389
|
-
Go
|
|
390
|
-
Docker/libvirt/Tart
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
ephemerd
|
|
394
|
-
Go
|
|
395
|
-
containerd embutido
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
ez-gh-actions
|
|
399
|
-
Rust
|
|
400
|
-
Docker+sysbox
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
createos-sandbox-ghar
|
|
404
|
-
TypeScript
|
|
405
|
-
Cloudflare Workers + KVM
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
PARTE 4: ARQUITETURA DA PLATAFORMA
|
|
410
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
411
|
-
│ PLATAFORMA SANDBOX.IO │
|
|
412
|
-
│ │
|
|
413
|
-
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
414
|
-
│ │ API REST │ │ Auth/JWT │ │ Cron/Scheduler│ │
|
|
415
|
-
│ │ (Node.js) │ │ (OAuth2) │ │ (Bull Queue) │ │
|
|
416
|
-
│ └──────┬──────┘ └──────┬───────┘ └──────┬───────┘ │
|
|
417
|
-
│ └────────────────┴─────────────────┘ │
|
|
418
|
-
│ │ │
|
|
419
|
-
│ ┌───────────────────────┴───────────────────────────────────┐ │
|
|
420
|
-
│ │ ORQUESTRADOR CENTRAL │ │
|
|
421
|
-
│ │ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌───────────┐ │ │
|
|
422
|
-
│ │ │ GitHub │ │ GitLab │ │ Forgejo │ │ HuggingFace│ │ │
|
|
423
|
-
│ │ │ Actions │ │ CI │ │ Actions │ │ Spaces │ │ │
|
|
424
|
-
│ │ │ API │ │ API │ │ API │ │ API │ │ │
|
|
425
|
-
│ │ └────┬────┘ └────┬─────┘ └────┬────┘ └─────┬─────┘ │ │
|
|
426
|
-
│ └───────┼────────────┼─────────────┼──────────────┼────────┘ │
|
|
427
|
-
│ │ │ │ │ │
|
|
428
|
-
│ ┌───────┴────────────┴─────────────┴──────────────┴────────┐ │
|
|
429
|
-
│ │ MEMÓRIA VIRTUAL CONTÍNUA │ │
|
|
430
|
-
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
|
431
|
-
│ │ │ zram │ │ tmpfs │ │ overlay │ │ SQLite │ │ │
|
|
432
|
-
│ │ │ swap │ │ /tmp │ │ fs CoW │ │ in-memory│ │ │
|
|
433
|
-
│ │ │ compr. │ │ em RAM │ │ │ │ │ │ │
|
|
434
|
-
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
|
|
435
|
-
│ └───────────────────────────────────────────────────────────┘ │
|
|
436
|
-
│ │ │ │ │ │
|
|
437
|
-
│ ┌───────┴────────────┴─────────────┴──────────────┴────────┐ │
|
|
438
|
-
│ │ SANDBOX RUNNER │ │
|
|
439
|
-
│ │ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌───────────┐ │ │
|
|
440
|
-
│ │ │ Docker │ │ kern │ │ QEMU │ │ Firecracker│ │ │
|
|
441
|
-
│ │ │ Engine │ │ rootless │ │ microVM │ │ microVM │ │ │
|
|
442
|
-
│ │ └─────────┘ └──────────┘ └─────────┘ └───────────┘ │ │
|
|
443
|
-
│ └───────────────────────────────────────────────────────────┘ │
|
|
444
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
445
|
-
|
|
446
|
-
PARTE 5: SCRIPTS DE IMPLEMENTAÇÃO
|
|
447
|
-
5.1 Setup do Orquestrador (Node.js + Drizzle)
|
|
448
|
-
// src/db/schema.ts
|
|
449
|
-
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
|
|
450
|
-
|
|
451
|
-
export const sandboxes = sqliteTable('sandboxes', {
|
|
452
|
-
id: text('id').primaryKey(),
|
|
453
|
-
userId: text('user_id').notNull(),
|
|
454
|
-
platform: text('platform').notNull(), // github|gitlab|forgejo|huggingface
|
|
455
|
-
status: text('status').notNull(), // creating|running|stopped|destroyed
|
|
456
|
-
ramLimit: integer('ram_limit').notNull(), // MB
|
|
457
|
-
cpuLimit: integer('cpu_limit').notNull(),
|
|
458
|
-
gpuEnabled: integer('gpu_enabled', { mode: 'boolean' }).default(false),
|
|
459
|
-
repoUrl: text('repo_url'),
|
|
460
|
-
workflowId: text('workflow_id'),
|
|
461
|
-
createdAt: text('created_at').notNull(),
|
|
462
|
-
expiresAt: text('expires_at'),
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
export const memorySnapshots = sqliteTable('memory_snapshots', {
|
|
466
|
-
id: text('id').primaryKey(),
|
|
467
|
-
sandboxId: text('sandbox_id').references(() => sandboxes.id),
|
|
468
|
-
type: text('type').notNull(), // zram|tmpfs|overlay|sqlite
|
|
469
|
-
sizeBytes: integer('size_bytes').notNull(),
|
|
470
|
-
compressedSize: integer('compressed_size'),
|
|
471
|
-
data: text('data'), // JSON ou path para arquivo
|
|
472
|
-
createdAt: text('created_at').notNull(),
|
|
473
|
-
});
|
|
474
|
-
// src/db/index.ts
|
|
475
|
-
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
476
|
-
import Database from 'better-sqlite3';
|
|
477
|
-
import * as schema from './schema';
|
|
478
|
-
|
|
479
|
-
const sqlite = new Database(':memory:'); // SQLite em memória!
|
|
480
|
-
export const db = drizzle(sqlite, { schema });
|
|
481
|
-
|
|
482
|
-
// Criar tabelas
|
|
483
|
-
sqlite.exec(`
|
|
484
|
-
CREATE TABLE IF NOT EXISTS sandboxes (
|
|
485
|
-
id TEXT PRIMARY KEY,
|
|
486
|
-
user_id TEXT NOT NULL,
|
|
487
|
-
platform TEXT NOT NULL,
|
|
488
|
-
status TEXT NOT NULL,
|
|
489
|
-
ram_limit INTEGER NOT NULL,
|
|
490
|
-
cpu_limit INTEGER NOT NULL,
|
|
491
|
-
gpu_enabled INTEGER DEFAULT 0,
|
|
492
|
-
repo_url TEXT,
|
|
493
|
-
workflow_id TEXT,
|
|
494
|
-
created_at TEXT NOT NULL,
|
|
495
|
-
expires_at TEXT
|
|
496
|
-
);
|
|
497
|
-
|
|
498
|
-
CREATE TABLE IF NOT EXISTS memory_snapshots (
|
|
499
|
-
id TEXT PRIMARY KEY,
|
|
500
|
-
sandbox_id TEXT REFERENCES sandboxes(id),
|
|
501
|
-
type TEXT NOT NULL,
|
|
502
|
-
size_bytes INTEGER NOT NULL,
|
|
503
|
-
compressed_size INTEGER,
|
|
504
|
-
data TEXT,
|
|
505
|
-
created_at TEXT NOT NULL
|
|
506
|
-
);
|
|
507
|
-
`);
|
|
508
|
-
5.2 Orquestrador Multi-Plataforma
|
|
509
|
-
// src/orchestrator/index.ts
|
|
510
|
-
import { db } from '../db';
|
|
511
|
-
import { sandboxes } from '../db/schema';
|
|
512
|
-
|
|
513
|
-
interface SandboxConfig {
|
|
514
|
-
userId: string;
|
|
515
|
-
ramLimit: number; // MB
|
|
516
|
-
cpuLimit: number;
|
|
517
|
-
gpuEnabled?: boolean;
|
|
518
|
-
packages?: string[];
|
|
519
|
-
platform?: 'github' | 'gitlab' | 'forgejo' | 'huggingface';
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
export class SandboxOrchestrator {
|
|
523
|
-
|
|
524
|
-
async createSandbox(config: SandboxConfig): Promise<string> {
|
|
525
|
-
const sandboxId = `sbx-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
526
|
-
|
|
527
|
-
// Auto-escolher plataforma baseado nos requisitos
|
|
528
|
-
const platform = config.platform || this.selectPlatform(config);
|
|
529
|
-
|
|
530
|
-
// Criar registro no banco
|
|
531
|
-
await db.insert(sandboxes).values({
|
|
532
|
-
id: sandboxId,
|
|
533
|
-
userId: config.userId,
|
|
534
|
-
platform,
|
|
535
|
-
status: 'creating',
|
|
536
|
-
ramLimit: config.ramLimit,
|
|
537
|
-
cpuLimit: config.cpuLimit,
|
|
538
|
-
gpuEnabled: config.gpuEnabled || false,
|
|
539
|
-
createdAt: new Date().toISOString(),
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
// Disparar workflow na plataforma escolhida
|
|
543
|
-
switch (platform) {
|
|
544
|
-
case 'github':
|
|
545
|
-
await this.createGitHubSandbox(sandboxId, config);
|
|
546
|
-
break;
|
|
547
|
-
case 'gitlab':
|
|
548
|
-
await this.createGitLabSandbox(sandboxId, config);
|
|
549
|
-
break;
|
|
550
|
-
case 'forgejo':
|
|
551
|
-
await this.createForgejoSandbox(sandboxId, config);
|
|
552
|
-
break;
|
|
553
|
-
case 'huggingface':
|
|
554
|
-
await this.createHuggingFaceSandbox(sandboxId, config);
|
|
555
|
-
break;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
return sandboxId;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
private selectPlatform(config: SandboxConfig): string {
|
|
562
|
-
// GPU requerida → HuggingFace ou Kaggle
|
|
563
|
-
if (config.gpuEnabled) {
|
|
564
|
-
return 'huggingface';
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
// RAM > 16GB → GitLab (até 128GB no premium)
|
|
568
|
-
if (config.ramLimit > 16384) {
|
|
569
|
-
return 'gitlab';
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
// Padrão → GitHub (ilimitado para públicos)
|
|
573
|
-
return 'github';
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
private async createGitHubSandbox(id: string, config: SandboxConfig) {
|
|
577
|
-
const workflow = this.generateGitHubWorkflow(id, config);
|
|
578
|
-
|
|
579
|
-
// Criar repositório
|
|
580
|
-
const repoResponse = await fetch(
|
|
581
|
-
`https://api.github.com/orgs/${process.env.GITHUB_ORG}/repos`,
|
|
582
|
-
{
|
|
583
|
-
method: 'POST',
|
|
584
|
-
headers: {
|
|
585
|
-
'Authorization': `token ${process.env.GITHUB_TOKEN}`,
|
|
586
|
-
'Content-Type': 'application/json',
|
|
587
|
-
},
|
|
588
|
-
body: JSON.stringify({
|
|
589
|
-
name: `sandbox-${id}`,
|
|
590
|
-
private: true,
|
|
591
|
-
auto_init: true,
|
|
592
|
-
}),
|
|
593
|
-
}
|
|
594
|
-
);
|
|
595
|
-
|
|
596
|
-
const repo = await repoResponse.json();
|
|
597
|
-
|
|
598
|
-
// Criar workflow file
|
|
599
|
-
await fetch(
|
|
600
|
-
`https://api.github.com/repos/${process.env.GITHUB_ORG}/sandbox-${id}/contents/.github/workflows/sandbox.yml`,
|
|
601
|
-
{
|
|
602
|
-
method: 'PUT',
|
|
603
|
-
headers: {
|
|
604
|
-
'Authorization': `token ${process.env.GITHUB_TOKEN}`,
|
|
605
|
-
'Content-Type': 'application/json',
|
|
606
|
-
},
|
|
607
|
-
body: JSON.stringify({
|
|
608
|
-
message: 'Create sandbox workflow',
|
|
609
|
-
content: Buffer.from(workflow).toString('base64'),
|
|
610
|
-
}),
|
|
611
|
-
}
|
|
612
|
-
);
|
|
613
|
-
|
|
614
|
-
// Disparar workflow
|
|
615
|
-
await fetch(
|
|
616
|
-
`https://api.github.com/repos/${process.env.GITHUB_ORG}/sandbox-${id}/actions/workflows/sandbox.yml/dispatches`,
|
|
617
|
-
{
|
|
618
|
-
method: 'POST',
|
|
619
|
-
headers: {
|
|
620
|
-
'Authorization': `token ${process.env.GITHUB_TOKEN}`,
|
|
621
|
-
'Content-Type': 'application/json',
|
|
622
|
-
},
|
|
623
|
-
body: JSON.stringify({
|
|
624
|
-
ref: 'main',
|
|
625
|
-
inputs: {
|
|
626
|
-
ram_limit: `${config.ramLimit}M`,
|
|
627
|
-
cpu_limit: config.cpuLimit.toString(),
|
|
628
|
-
packages: config.packages?.join(' ') || '',
|
|
629
|
-
},
|
|
630
|
-
}),
|
|
631
|
-
}
|
|
632
|
-
);
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
private generateGitHubWorkflow(id: string, config: SandboxConfig): string {
|
|
636
|
-
return `
|
|
637
|
-
name: Sandbox ${id}
|
|
638
|
-
|
|
639
|
-
on:
|
|
640
|
-
workflow_dispatch:
|
|
641
|
-
inputs:
|
|
642
|
-
ram_limit:
|
|
643
|
-
description: 'Memory limit'
|
|
644
|
-
default: '${config.ramLimit}M'
|
|
645
|
-
cpu_limit:
|
|
646
|
-
description: 'CPU limit'
|
|
647
|
-
default: '${config.cpuLimit}'
|
|
648
|
-
packages:
|
|
649
|
-
description: 'Packages to install'
|
|
650
|
-
default: '${config.packages?.join(' ') || ''}'
|
|
651
|
-
|
|
652
|
-
jobs:
|
|
653
|
-
sandbox:
|
|
654
|
-
runs-on: ubuntu-latest
|
|
655
|
-
|
|
656
|
-
container:
|
|
657
|
-
image: ubuntu:22.04
|
|
658
|
-
options: >-
|
|
659
|
-
--memory \${{ github.event.inputs.ram_limit }}
|
|
660
|
-
--cpus \${{ github.event.inputs.cpu_limit }}
|
|
661
|
-
--tmpfs /tmp:size=4G
|
|
662
|
-
--tmpfs /run:size=2G
|
|
663
|
-
|
|
664
|
-
steps:
|
|
665
|
-
- name: Setup zram
|
|
666
|
-
run: |
|
|
667
|
-
modprobe zram
|
|
668
|
-
echo lz4 > /sys/block/zram0/comp_algorithm
|
|
669
|
-
echo 8G > /sys/block/zram0/disksize
|
|
670
|
-
mkswap /dev/zram0
|
|
671
|
-
swapon /dev/zram0
|
|
672
|
-
echo "=== zram configurado ==="
|
|
673
|
-
zramctl
|
|
674
|
-
|
|
675
|
-
- name: Setup tmpfs workspace
|
|
676
|
-
run: |
|
|
677
|
-
mount -t tmpfs -o size=4G tmpfs /workspace
|
|
678
|
-
echo "=== tmpfs configurado ==="
|
|
679
|
-
df -h /workspace
|
|
680
|
-
|
|
681
|
-
- name: Install packages
|
|
682
|
-
run: |
|
|
683
|
-
apt-get update
|
|
684
|
-
apt-get install -y \${{ github.event.inputs.packages }}
|
|
685
|
-
|
|
686
|
-
- name: Verify resources
|
|
687
|
-
run: |
|
|
688
|
-
echo "=== RAM ==="
|
|
689
|
-
free -h
|
|
690
|
-
echo "=== Disk ==="
|
|
691
|
-
df -h
|
|
692
|
-
echo "=== CPU ==="
|
|
693
|
-
nproc
|
|
694
|
-
|
|
695
|
-
- name: Run sandbox
|
|
696
|
-
working-directory: /workspace
|
|
697
|
-
run: |
|
|
698
|
-
echo "Sandbox ${id} is running!"
|
|
699
|
-
echo "RAM: \$(free -h | grep Mem | awk '{print \$2}')"
|
|
700
|
-
echo "Disk: \$(df -h / | tail -1 | awk '{print \$2}')"
|
|
701
|
-
# Manter sandbox vivo por 1 hora
|
|
702
|
-
sleep 3600
|
|
703
|
-
`;
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
private async createGitLabSandbox(id: string, config: SandboxConfig) {
|
|
707
|
-
const pipeline = this.generateGitLabPipeline(id, config);
|
|
708
|
-
|
|
709
|
-
// Criar projeto
|
|
710
|
-
const projectResponse = await fetch(
|
|
711
|
-
'https://gitlab.com/api/v4/projects',
|
|
712
|
-
{
|
|
713
|
-
method: 'POST',
|
|
714
|
-
headers: {
|
|
715
|
-
'PRIVATE-TOKEN': process.env.GITLAB_TOKEN!,
|
|
716
|
-
'Content-Type': 'application/json',
|
|
717
|
-
},
|
|
718
|
-
body: JSON.stringify({
|
|
719
|
-
name: `sandbox-${id}`,
|
|
720
|
-
visibility: 'private',
|
|
721
|
-
}),
|
|
722
|
-
}
|
|
723
|
-
);
|
|
724
|
-
|
|
725
|
-
const project = await projectResponse.json();
|
|
726
|
-
|
|
727
|
-
// Criar pipeline
|
|
728
|
-
await fetch(
|
|
729
|
-
`https://gitlab.com/api/v4/projects/${project.id}/repository/files/.gitlab-ci.yml`,
|
|
730
|
-
{
|
|
731
|
-
method: 'POST',
|
|
732
|
-
headers: {
|
|
733
|
-
'PRIVATE-TOKEN': process.env.GITLAB_TOKEN!,
|
|
734
|
-
'Content-Type': 'application/json',
|
|
735
|
-
},
|
|
736
|
-
body: JSON.stringify({
|
|
737
|
-
branch: 'main',
|
|
738
|
-
content: pipeline,
|
|
739
|
-
commit_message: 'Create sandbox pipeline',
|
|
740
|
-
}),
|
|
741
|
-
}
|
|
742
|
-
);
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
private generateGitLabPipeline(id: string, config: SandboxConfig): string {
|
|
746
|
-
const tag = config.ramLimit > 8192 ? 'saas-linux-medium-amd64' : 'saas-linux-small-amd64';
|
|
747
|
-
|
|
748
|
-
return `
|
|
749
|
-
sandbox:
|
|
750
|
-
tags:
|
|
751
|
-
- ${tag}
|
|
752
|
-
image: ubuntu:22.04
|
|
753
|
-
variables:
|
|
754
|
-
MEMORY_LIMIT: "${config.ramLimit}M"
|
|
755
|
-
before_script:
|
|
756
|
-
- apt-get update && apt-get install -y zram-tools
|
|
757
|
-
- zramctl /dev/zram0 --algorithm lz4 --size 4G --type swap
|
|
758
|
-
script:
|
|
759
|
-
- free -h
|
|
760
|
-
- df -h
|
|
761
|
-
- echo "Sandbox ${id} is running!"
|
|
762
|
-
- sleep 3600
|
|
763
|
-
rules:
|
|
764
|
-
- if: $CI_PIPELINE_SOURCE == "web"
|
|
765
|
-
- if: $CI_PIPELINE_SOURCE == "api"
|
|
766
|
-
`;
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
private async createForgejoSandbox(id: string, config: SandboxConfig) {
|
|
770
|
-
// Forgejo/Gitea Actions - mesmo formato do GitHub
|
|
771
|
-
const workflow = this.generateGitHubWorkflow(id, config); // Reutilizar!
|
|
772
|
-
|
|
773
|
-
const forgejoUrl = process.env.FORGEJO_URL || 'https://codeberg.org';
|
|
774
|
-
|
|
775
|
-
// Criar repositório
|
|
776
|
-
await fetch(`${forgejoUrl}/api/v1/user/repos`, {
|
|
777
|
-
method: 'POST',
|
|
778
|
-
headers: {
|
|
779
|
-
'Authorization': `token ${process.env.FORGEJO_TOKEN}`,
|
|
780
|
-
'Content-Type': 'application/json',
|
|
781
|
-
},
|
|
782
|
-
body: JSON.stringify({
|
|
783
|
-
name: `sandbox-${id}`,
|
|
784
|
-
private: true,
|
|
785
|
-
auto_init: true,
|
|
786
|
-
}),
|
|
787
|
-
});
|
|
788
|
-
|
|
789
|
-
// Criar workflow
|
|
790
|
-
await fetch(
|
|
791
|
-
`${forgejoUrl}/api/v1/repos/${process.env.FORGEJO_USER}/sandbox-${id}/contents/.forgejo/workflows/sandbox.yml`,
|
|
792
|
-
{
|
|
793
|
-
method: 'PUT',
|
|
794
|
-
headers: {
|
|
795
|
-
'Authorization': `token ${process.env.FORGEJO_TOKEN}`,
|
|
796
|
-
'Content-Type': 'application/json',
|
|
797
|
-
},
|
|
798
|
-
body: JSON.stringify({
|
|
799
|
-
message: 'Create sandbox workflow',
|
|
800
|
-
content: Buffer.from(workflow).toString('base64'),
|
|
801
|
-
}),
|
|
802
|
-
}
|
|
803
|
-
);
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
private async createHuggingFaceSandbox(id: string, config: SandboxConfig) {
|
|
807
|
-
// HuggingFace Spaces - Dockerfile
|
|
808
|
-
const dockerfile = this.generateHuggingFaceDockerfile(id, config);
|
|
809
|
-
|
|
810
|
-
const hfToken = process.env.HF_TOKEN;
|
|
811
|
-
|
|
812
|
-
// Criar Space
|
|
813
|
-
await fetch(`https://huggingface.co/api/repos/create`, {
|
|
814
|
-
method: 'POST',
|
|
815
|
-
headers: {
|
|
816
|
-
'Authorization': `Bearer ${hfToken}`,
|
|
817
|
-
'Content-Type': 'application/json',
|
|
818
|
-
},
|
|
819
|
-
body: JSON.stringify({
|
|
820
|
-
name: `sandbox-${id}`,
|
|
821
|
-
type: 'space',
|
|
822
|
-
sdk: 'docker',
|
|
823
|
-
license: 'mit',
|
|
824
|
-
hardware: config.gpuEnabled ? 't4-small' : 'cpu-basic',
|
|
825
|
-
}),
|
|
826
|
-
});
|
|
827
|
-
|
|
828
|
-
// Criar Dockerfile
|
|
829
|
-
await fetch(
|
|
830
|
-
`https://huggingface.co/api/repos/${process.env.HF_USER}/sandbox-${id}/contents/Dockerfile`,
|
|
831
|
-
{
|
|
832
|
-
method: 'POST',
|
|
833
|
-
headers: {
|
|
834
|
-
'Authorization': `Bearer ${hfToken}`,
|
|
835
|
-
'Content-Type': 'application/json',
|
|
836
|
-
},
|
|
837
|
-
body: JSON.stringify({
|
|
838
|
-
content: Buffer.from(dockerfile).toString('base64'),
|
|
839
|
-
message: 'Create sandbox Dockerfile',
|
|
840
|
-
}),
|
|
841
|
-
}
|
|
842
|
-
);
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
private generateHuggingFaceDockerfile(id: string, config: SandboxConfig): string {
|
|
846
|
-
return `
|
|
847
|
-
FROM python:3.11-slim
|
|
848
|
-
|
|
849
|
-
RUN useradd -m -u 1000 user
|
|
850
|
-
WORKDIR /app
|
|
851
|
-
|
|
852
|
-
# Instalar dependências
|
|
853
|
-
RUN apt-get update && apt-get install -y \\
|
|
854
|
-
zram-tools \\
|
|
855
|
-
${config.packages?.join(' ') || ''} \\
|
|
856
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
857
|
-
|
|
858
|
-
# Setup zram
|
|
859
|
-
RUN echo "lz4" > /sys/block/zram0/comp_algorithm || true
|
|
860
|
-
|
|
861
|
-
# Copiar código
|
|
862
|
-
COPY --chown=user . /app
|
|
863
|
-
|
|
864
|
-
CMD ["python", "-m", "http.server", "7860"]
|
|
865
|
-
`;
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
5.3 Memória Virtual Contínua
|
|
869
|
-
// src/memory/virtual-memory.ts
|
|
870
|
-
import { fs, Volume } from 'memfs';
|
|
871
|
-
|
|
872
|
-
export class VirtualMemory {
|
|
873
|
-
private volumes: Map<string, ReturnType<typeof Volume.create>> = new Map();
|
|
874
|
-
|
|
875
|
-
constructor() {
|
|
876
|
-
// Criar volume em RAM para cada sandbox
|
|
877
|
-
this.createVolume('system', 8 * 1024 * 1024 * 1024); // 8 GB
|
|
878
|
-
this.createVolume('workspace', 4 * 1024 * 1024 * 1024); // 4 GB
|
|
879
|
-
this.createVolume('tmp', 2 * 1024 * 1024 * 1024); // 2 GB
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
private createVolume(name: string, sizeBytes: number) {
|
|
883
|
-
const vol = Volume.create({ size: sizeBytes });
|
|
884
|
-
this.volumes.set(name, vol);
|
|
885
|
-
|
|
886
|
-
// Montar no filesystem virtual
|
|
887
|
-
fs.mountVol(`/${name}`, vol);
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
// Ler arquivo da memória virtual
|
|
891
|
-
async read(path: string): Promise<Buffer> {
|
|
892
|
-
return new Promise((resolve, reject) => {
|
|
893
|
-
fs.readFile(path, (err, data) => {
|
|
894
|
-
if (err) reject(err);
|
|
895
|
-
else resolve(data);
|
|
896
|
-
});
|
|
897
|
-
});
|
|
898
|
-
}
|
|
899
|
-
|
|
900
|
-
// Escrever arquivo na memória virtual
|
|
901
|
-
async write(path: string, data: Buffer): Promise<void> {
|
|
902
|
-
return new Promise((resolve, reject) => {
|
|
903
|
-
fs.writeFile(path, data, (err) => {
|
|
904
|
-
if (err) reject(err);
|
|
905
|
-
else resolve();
|
|
906
|
-
});
|
|
907
|
-
});
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
// Migrar dados entre volumes (storage → RAM)
|
|
911
|
-
async migrate(srcPath: string, dstPath: string): Promise<void> {
|
|
912
|
-
const data = await this.read(srcPath);
|
|
913
|
-
await this.write(dstPath, data);
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
// Snapshot do estado atual
|
|
917
|
-
async snapshot(): Promise<Map<string, Buffer>> {
|
|
918
|
-
const snapshot = new Map<string, Buffer>();
|
|
919
|
-
|
|
920
|
-
const readdirRecursive = async (dir: string) => {
|
|
921
|
-
const entries = await new Promise<any[]>((resolve, reject) => {
|
|
922
|
-
fs.readdir(dir, { withFileTypes: true }, (err, entries) => {
|
|
923
|
-
if (err) reject(err);
|
|
924
|
-
else resolve(entries);
|
|
925
|
-
});
|
|
926
|
-
});
|
|
927
|
-
|
|
928
|
-
for (const entry of entries) {
|
|
929
|
-
const fullPath = `${dir}/${entry.name}`;
|
|
930
|
-
if (entry.isDirectory()) {
|
|
931
|
-
await readdirRecursive(fullPath);
|
|
932
|
-
} else {
|
|
933
|
-
const data = await this.read(fullPath);
|
|
934
|
-
snapshot.set(fullPath, data);
|
|
935
|
-
}
|
|
936
|
-
}
|
|
937
|
-
};
|
|
938
|
-
|
|
939
|
-
await readdirRecursive('/');
|
|
940
|
-
return snapshot;
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
// Restaurar de snapshot
|
|
944
|
-
async restore(snapshot: Map<string, Buffer>): Promise<void> {
|
|
945
|
-
for (const [path, data] of snapshot) {
|
|
946
|
-
const dir = path.substring(0, path.lastIndexOf('/'));
|
|
947
|
-
await new Promise<void>((resolve, reject) => {
|
|
948
|
-
fs.mkdir(dir, { recursive: true }, (err) => {
|
|
949
|
-
if (err) reject(err);
|
|
950
|
-
else resolve();
|
|
951
|
-
});
|
|
952
|
-
});
|
|
953
|
-
await this.write(path, data);
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
}
|
|
957
|
-
5.4 Bridge de Memória (Storage → RAM)
|
|
958
|
-
// src/memory/memory-bridge.ts
|
|
959
|
-
export class MemoryBridge {
|
|
960
|
-
private zramEnabled = false;
|
|
961
|
-
private tmpfsMounts: Map<string, string> = new Map();
|
|
962
|
-
|
|
963
|
-
// Configurar zram (converte storage em RAM comprimida)
|
|
964
|
-
async setupZram(sizeGB: number = 8): Promise<void> {
|
|
965
|
-
const commands = [
|
|
966
|
-
'modprobe zram',
|
|
967
|
-
`echo lz4 > /sys/block/zram0/comp_algorithm`,
|
|
968
|
-
`echo ${sizeGB}G > /sys/block/zram0/disksize`,
|
|
969
|
-
'mkswap /dev/zram0',
|
|
970
|
-
'swapon /dev/zram0',
|
|
971
|
-
];
|
|
972
|
-
|
|
973
|
-
for (const cmd of commands) {
|
|
974
|
-
await this.exec(cmd);
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
this.zramEnabled = true;
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
// Configurar tmpfs (storage em RAM puro)
|
|
981
|
-
async setupTmpfs(mountPoint: string, sizeGB: number = 4): Promise<void> {
|
|
982
|
-
await this.exec(`mkdir -p ${mountPoint}`);
|
|
983
|
-
await this.exec(`mount -t tmpfs -o size=${sizeGB}G tmpfs ${mountPoint}`);
|
|
984
|
-
this.tmpfsMounts.set(mountPoint, `${sizeGB}G`);
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
// Configurar overlay (CoW em RAM)
|
|
988
|
-
async setupOverlay(
|
|
989
|
-
lowerDir: string,
|
|
990
|
-
upperDir: string,
|
|
991
|
-
mergedDir: string
|
|
992
|
-
): Promise<void> {
|
|
993
|
-
await this.exec(`mkdir -p ${upperDir} ${mergedDir}`);
|
|
994
|
-
await this.exec(
|
|
995
|
-
`mount -t overlay overlay ` +
|
|
996
|
-
`-o lowerdir=${lowerDir},upperdir=${upperDir},workdir=/tmp/work ` +
|
|
997
|
-
mergedDir
|
|
998
|
-
);
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
// Bridge: converter arquivo de storage para RAM
|
|
1002
|
-
async storageToRam(
|
|
1003
|
-
storagePath: string,
|
|
1004
|
-
ramPath: string
|
|
1005
|
-
): Promise<{ originalSize: number; compressedSize: number }> {
|
|
1006
|
-
const data = await this.readFile(storagePath);
|
|
1007
|
-
const originalSize = data.length;
|
|
1008
|
-
|
|
1009
|
-
// Comprimir com lz4 antes de escrever na RAM
|
|
1010
|
-
const compressed = await this.compressLz4(data);
|
|
1011
|
-
const compressedSize = compressed.length;
|
|
1012
|
-
|
|
1013
|
-
// Escrever no tmpfs
|
|
1014
|
-
await this.writeFile(ramPath, compressed);
|
|
1015
|
-
|
|
1016
|
-
return { originalSize, compressedSize };
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
|
-
// Bridge: converter RAM para storage
|
|
1020
|
-
async ramToStorage(
|
|
1021
|
-
ramPath: string,
|
|
1022
|
-
storagePath: string
|
|
1023
|
-
): Promise<void> {
|
|
1024
|
-
const compressed = await this.readFile(ramPath);
|
|
1025
|
-
|
|
1026
|
-
// Descomprimir
|
|
1027
|
-
const data = await this.decompressLz4(compressed);
|
|
1028
|
-
|
|
1029
|
-
// Escrever em storage persistente
|
|
1030
|
-
await this.writeFile(storagePath, data);
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
// Obter estatísticas de memória
|
|
1034
|
-
async getStats(): Promise<{
|
|
1035
|
-
zram: { total: number; used: number; free: number; compressed: number };
|
|
1036
|
-
tmpfs: { mount: string; size: string }[];
|
|
1037
|
-
totalRam: number;
|
|
1038
|
-
usedRam: number;
|
|
1039
|
-
}> {
|
|
1040
|
-
const meminfo = await this.exec('cat /proc/meminfo');
|
|
1041
|
-
const zramctl = this.zramEnabled
|
|
1042
|
-
? await this.exec('zramctl')
|
|
1043
|
-
: '';
|
|
1044
|
-
|
|
1045
|
-
return {
|
|
1046
|
-
zram: this.parseZramStats(zramctl),
|
|
1047
|
-
tmpfs: Array.from(this.tmpfsMounts.entries()).map(([mount, size]) => ({
|
|
1048
|
-
mount,
|
|
1049
|
-
size,
|
|
1050
|
-
})),
|
|
1051
|
-
totalRam: this.parseMemInfo(meminfo, 'MemTotal'),
|
|
1052
|
-
usedRam: this.parseMemInfo(meminfo, 'MemAvailable'),
|
|
1053
|
-
};
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
private async exec(cmd: string): Promise<string> {
|
|
1057
|
-
// Implementar execução de comandos
|
|
1058
|
-
return '';
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
private async readFile(path: string): Promise<Buffer> {
|
|
1062
|
-
return Buffer.alloc(0);
|
|
1063
|
-
}
|
|
1064
|
-
|
|
1065
|
-
private async writeFile(path: string, data: Buffer): Promise<void> {}
|
|
1066
|
-
|
|
1067
|
-
private async compressLz4(data: Buffer): Promise<Buffer> {
|
|
1068
|
-
return data; // Implementar com lz4-native
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
private async decompressLz4(data: Buffer): Promise<Buffer> {
|
|
1072
|
-
return data; // Implementar com lz4-native
|
|
1073
|
-
}
|
|
1074
|
-
|
|
1075
|
-
private parseZramStats(output: string): any {
|
|
1076
|
-
return { total: 0, used: 0, free: 0, compressed: 0 };
|
|
1077
|
-
}
|
|
1078
|
-
|
|
1079
|
-
private parseMemInfo(output: string, key: string): number {
|
|
1080
|
-
const match = output.match(new RegExp(`${key}:\\s+(\\d+)`));
|
|
1081
|
-
return match ? parseInt(match[1]) : 0;
|
|
1082
|
-
}
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
PARTE 5: PACKAGEM NPM + REPO ABERTO
|
|
1086
|
-
5.1 Estrutura do Projeto
|
|
1087
|
-
sandbox-platform/
|
|
1088
|
-
├── package.json
|
|
1089
|
-
├── tsconfig.json
|
|
1090
|
-
├── src/
|
|
1091
|
-
│ ├── index.ts # Entry point
|
|
1092
|
-
│ ├── orchestrator/
|
|
1093
|
-
│ │ ├── index.ts # Orquestrador principal
|
|
1094
|
-
│ │ ├── github.ts # GitHub Actions
|
|
1095
|
-
│ │ ├── gitlab.ts # GitLab CI
|
|
1096
|
-
│ │ ├── forgejo.ts # Forgejo/Gitea
|
|
1097
|
-
│ │ └── huggingface.ts # HuggingFace Spaces
|
|
1098
|
-
│ ├── memory/
|
|
1099
|
-
│ │ ├── virtual-memory.ts # Memória virtual (memfs)
|
|
1100
|
-
│ │ ├── memory-bridge.ts # Bridge storage→RAM
|
|
1101
|
-
│ │ ├── zram.ts # zram manager
|
|
1102
|
-
│ │ └── tmpfs.ts # tmpfs manager
|
|
1103
|
-
│ ├── db/
|
|
1104
|
-
│ │ ├── schema.ts # Drizzle schema
|
|
1105
|
-
│ │ └── index.ts # Database connection
|
|
1106
|
-
│ ├── api/
|
|
1107
|
-
│ │ ├── routes.ts # API routes
|
|
1108
|
-
│ │ └── middleware.ts # Auth middleware
|
|
1109
|
-
│ └── utils/
|
|
1110
|
-
│ ├── crypto.ts # Utilitários
|
|
1111
|
-
│ └── logger.ts # Logger
|
|
1112
|
-
├── workflows/ # Templates de workflow
|
|
1113
|
-
│ ├── github-sandbox.yml
|
|
1114
|
-
│ ├── gitlab-sandbox.yml
|
|
1115
|
-
│ ├── forgejo-sandbox.yml
|
|
1116
|
-
│ └── huggingface-dockerfile
|
|
1117
|
-
├── tests/
|
|
1118
|
-
│ ├── orchestrator.test.ts
|
|
1119
|
-
│ ├── memory.test.ts
|
|
1120
|
-
│ └── api.test.ts
|
|
1121
|
-
├── README.md
|
|
1122
|
-
├── LICENSE
|
|
1123
|
-
└── .github/
|
|
1124
|
-
└── workflows/
|
|
1125
|
-
└── ci.yml # CI do próprio projeto
|
|
1126
|
-
5.2 package.json
|
|
1127
|
-
{
|
|
1128
|
-
"name": "@sandbox-platform/core",
|
|
1129
|
-
"version": "1.0.0",
|
|
1130
|
-
"description": "Plataforma de sandbox com memória virtual contínua usando infraestrutura gratuita",
|
|
1131
|
-
"main": "dist/index.js",
|
|
1132
|
-
"types": "dist/index.d.ts",
|
|
1133
|
-
"scripts": {
|
|
1134
|
-
"build": "tsc",
|
|
1135
|
-
"dev": "tsx watch src/index.ts",
|
|
1136
|
-
"test": "vitest",
|
|
1137
|
-
"lint": "eslint src/",
|
|
1138
|
-
"prepare": "npm run build"
|
|
1139
|
-
},
|
|
1140
|
-
"dependencies": {
|
|
1141
|
-
"drizzle-orm": "^0.30.0",
|
|
1142
|
-
"better-sqlite3": "^11.0.0",
|
|
1143
|
-
"memfs": "^4.6.0",
|
|
1144
|
-
"hono": "^4.0.0",
|
|
1145
|
-
"@hono/node-server": "^1.0.0",
|
|
1146
|
-
"bullmq": "^5.0.0",
|
|
1147
|
-
"ioredis": "^5.0.0",
|
|
1148
|
-
"zod": "^3.23.0"
|
|
1149
|
-
},
|
|
1150
|
-
"devDependencies": {
|
|
1151
|
-
"typescript": "^5.4.0",
|
|
1152
|
-
"tsx": "^4.0.0",
|
|
1153
|
-
"vitest": "^1.0.0",
|
|
1154
|
-
"drizzle-kit": "^0.21.0",
|
|
1155
|
-
"@types/better-sqlite3": "^7.0.0",
|
|
1156
|
-
"@types/node": "^20.0.0"
|
|
1157
|
-
},
|
|
1158
|
-
"keywords": [
|
|
1159
|
-
"sandbox",
|
|
1160
|
-
"virtual-memory",
|
|
1161
|
-
"github-actions",
|
|
1162
|
-
"gitlab-ci",
|
|
1163
|
-
"forgejo",
|
|
1164
|
-
"huggingface",
|
|
1165
|
-
"zram",
|
|
1166
|
-
"tmpfs"
|
|
1167
|
-
],
|
|
1168
|
-
"license": "MIT",
|
|
1169
|
-
"repository": {
|
|
1170
|
-
"type": "git",
|
|
1171
|
-
"url": "https://github.com/your-org/sandbox-platform"
|
|
1172
|
-
}
|
|
1173
|
-
}
|
|
1174
|
-
5.3 README.md
|
|
1175
|
-
# @sandbox-platform/core
|
|
1176
|
-
|
|
1177
|
-
Plataforma de sandbox com memória virtual contínua usando infraestrutura gratuita de repositórios.
|
|
1178
|
-
|
|
1179
|
-
## Funcionalidades
|
|
1180
|
-
|
|
1181
|
-
- **Multi-plataforma**: GitHub Actions, GitLab CI, Forgejo/Gitea, HuggingFace Spaces
|
|
1182
|
-
- **Memória virtual**: zram, tmpfs, overlayfs para converter storage em RAM
|
|
1183
|
-
- **Isolamento**: Docker containers com limits de RAM/CPU
|
|
1184
|
-
- **GPU gratuito**: HuggingFace Spaces com T4 GPU
|
|
1185
|
-
- **ORM**: Drizzle ORM com SQLite em memória
|
|
1186
|
-
|
|
1187
|
-
## Instalação
|
|
1188
|
-
|
|
1189
|
-
```bash
|
|
1190
|
-
npm install @sandbox-platform/core
|
|
1191
|
-
Uso Rápido
|
|
1192
|
-
import { SandboxOrchestrator } from '@sandbox-platform/core';
|
|
1193
|
-
|
|
1194
|
-
const orchestrator = new SandboxOrchestrator();
|
|
1195
|
-
|
|
1196
|
-
// Criar sandbox com 8GB RAM
|
|
1197
|
-
const sandbox = await orchestrator.createSandbox({
|
|
1198
|
-
userId: 'user123',
|
|
1199
|
-
ramLimit: 8192, // 8GB em MB
|
|
1200
|
-
cpuLimit: 4,
|
|
1201
|
-
packages: ['nodejs', 'python3'],
|
|
1202
|
-
});
|
|
1203
|
-
|
|
1204
|
-
console.log(`Sandbox criada: ${sandbox.id}`);
|
|
1205
|
-
Recursos Gratuitos
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
Plataforma
|
|
1210
|
-
RAM
|
|
1211
|
-
CPU
|
|
1212
|
-
GPU
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
GitHub (público)
|
|
1217
|
-
16 GB
|
|
1218
|
-
4 vCPU
|
|
1219
|
-
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
GitLab Free
|
|
1223
|
-
8 GB
|
|
1224
|
-
2 vCPU
|
|
1225
|
-
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
HuggingFace (free)
|
|
1229
|
-
16 GB
|
|
1230
|
-
2 vCPU
|
|
1231
|
-
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
HuggingFace (T4)
|
|
1235
|
-
15 GB
|
|
1236
|
-
4 vCPU
|
|
1237
|
-
16 GB
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
Kaggle
|
|
1241
|
-
29 GB
|
|
1242
|
-
4 vCPU
|
|
1243
|
-
16 GB
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
Licença
|
|
1247
|
-
MIT
|
|
1248
|
-
|
|
1249
|
-
---
|
|
1250
|
-
|
|
1251
|
-
RESUMO FINAL
|
|
1252
|
-
Duas Frentes Principais:
|
|
1253
|
-
FREnte 1: Biblioteca Própria (@sandbox-platform/core)
|
|
1254
|
-
|
|
1255
|
-
Orquestrador multi-plataforma (GitHub, GitLab, Forgejo, HuggingFace)
|
|
1256
|
-
Memória virtual contínua (memfs + zram + tmpfs)
|
|
1257
|
-
Drizzle ORM com SQLite em memória
|
|
1258
|
-
Bridge de conversão storage→RAM
|
|
1259
|
-
|
|
1260
|
-
Frente 2: Projetos de Terceiros (já prontos)
|
|
1261
|
-
|
|
1262
|
-
kern (Rust): sandbox rootless ~1.9ms
|
|
1263
|
-
exec-sandbox (Python): QEMU microVMs ~12ms
|
|
1264
|
-
mirage (Python/Node): 50+ backends de storage
|
|
1265
|
-
@memstack/core (Node): 21 storage adapters
|
|
1266
|
-
chuk-virtual-fs (Python): Virtual FS multi-backend
|
|
1267
|
-
|
|
1268
|
-
Publicação:
|
|
1269
|
-
|
|
1270
|
-
npm: @sandbox-platform/core
|
|
1271
|
-
GitHub: Repo público com MIT license
|
|
1272
|
-
HuggingFace: Spaces para demo
|
|
1273
|
-
PyPI: sandbox-platform (port Python)
|
|
1274
|
-
|
|
1275
|
-
Quer que eu implemente alguma parte específica? Posso:
|
|
1276
|
-
|
|
1277
|
-
Criar o projeto completo no seu diretório
|
|
1278
|
-
Configurar os workflows de CI/CD
|
|
1279
|
-
Implementar a memória virtual
|
|
1280
|
-
Configurar o Forgejo self-hosted
|