@mseep/open-computer-use 1.0.0
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/.coderabbit.yaml +25 -0
- package/.dockerignore +95 -0
- package/.env.example +137 -0
- package/.githooks/pre-commit +68 -0
- package/.github/CODEOWNERS +125 -0
- package/.github/ISSUE_TEMPLATE/adr-proposal.md +41 -0
- package/.github/ISSUE_TEMPLATE/bug-report.md +49 -0
- package/.github/ISSUE_TEMPLATE/component-proposal.md +38 -0
- package/.github/ISSUE_TEMPLATE/config.yml +15 -0
- package/.github/ISSUE_TEMPLATE/dependency-proposal.md +59 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
- package/.github/ISSUE_TEMPLATE/nfr-proposal.md +44 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- package/.github/codeql/codeql-config.yml +11 -0
- package/.github/codeql/extensions/security-models/python-sanitizers.model.yml +17 -0
- package/.github/codeql/extensions/security-models/qlpack.yml +7 -0
- package/.github/dependabot.yml +23 -0
- package/.github/security-exceptions.yml +23 -0
- package/.github/workflows/build.yml +420 -0
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/contracts-lint.yml +90 -0
- package/.github/workflows/docs-lint.yml +151 -0
- package/.github/workflows/helm.yml +131 -0
- package/.github/workflows/identity-lint.yml +30 -0
- package/.github/workflows/release-chart.yml +177 -0
- package/.github/workflows/release.yml +95 -0
- package/.github/workflows/security.yml +332 -0
- package/.github/workflows/stale.yml +31 -0
- package/.github/workflows/supply-chain.yml +242 -0
- package/.gitleaks.toml +53 -0
- package/.markdownlint.yaml +51 -0
- package/.semgrepignore +85 -0
- package/.vale/styles/Architecture/ap13-data-class-substrate.yml +12 -0
- package/.vale/styles/Architecture/banned-phrases.yml +23 -0
- package/.vale/styles/Architecture/banned-vocab.yml +23 -0
- package/.vale/styles/Architecture/marketing-tone.yml +19 -0
- package/.vale.ini +18 -0
- package/CHANGELOG.md +411 -0
- package/CLAUDE.md +218 -0
- package/CONTRIBUTING.md +82 -0
- package/Dockerfile +676 -0
- package/LICENSE +98 -0
- package/LICENSE-APACHE +202 -0
- package/LICENSE-MIT +21 -0
- package/NOTICE +36 -0
- package/README.md +516 -0
- package/SECURITY.md +45 -0
- package/THIRD-PARTY-LICENSES.md +14 -0
- package/apt-packages.txt +108 -0
- package/computer-use-server/.dockerignore +13 -0
- package/computer-use-server/Dockerfile +44 -0
- package/computer-use-server/README.md +84 -0
- package/computer-use-server/app.py +1544 -0
- package/computer-use-server/bin/list-subagent-models +449 -0
- package/computer-use-server/cli-defaults/README.md +31 -0
- package/computer-use-server/cli-defaults/codex.json +7 -0
- package/computer-use-server/cli-defaults/opencode.json +18 -0
- package/computer-use-server/cli_adapters/__init__.py +46 -0
- package/computer-use-server/cli_adapters/claude.py +163 -0
- package/computer-use-server/cli_adapters/codex.py +163 -0
- package/computer-use-server/cli_adapters/opencode.py +169 -0
- package/computer-use-server/cli_adapters/result.py +34 -0
- package/computer-use-server/cli_runtime.py +316 -0
- package/computer-use-server/context_vars.py +24 -0
- package/computer-use-server/docker_manager.py +1100 -0
- package/computer-use-server/docs_html.py +12 -0
- package/computer-use-server/mcp_resources.py +170 -0
- package/computer-use-server/mcp_tools.py +1430 -0
- package/computer-use-server/requirements.txt +17 -0
- package/computer-use-server/security.py +50 -0
- package/computer-use-server/skill_manager.py +664 -0
- package/computer-use-server/static/browser-viewer.js +445 -0
- package/computer-use-server/static/chart.umd.js +14 -0
- package/computer-use-server/static/docs.html +203 -0
- package/computer-use-server/static/github-dark.min.css +10 -0
- package/computer-use-server/static/github.min.css +10 -0
- package/computer-use-server/static/highlight.min.js +1213 -0
- package/computer-use-server/static/highlightjs-line-numbers.min.js +1 -0
- package/computer-use-server/static/icons.js +74 -0
- package/computer-use-server/static/jszip.min.js +13 -0
- package/computer-use-server/static/katex/auto-render.min.js +1 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/katex.min.css +1 -0
- package/computer-use-server/static/katex/katex.min.js +1 -0
- package/computer-use-server/static/locale.js +242 -0
- package/computer-use-server/static/mammoth.browser.min.js +21 -0
- package/computer-use-server/static/marked.min.js +6 -0
- package/computer-use-server/static/mermaid.min.js +2811 -0
- package/computer-use-server/static/pdf.min.js +22 -0
- package/computer-use-server/static/pdf.worker.min.js +22 -0
- package/computer-use-server/static/pptxviewjs.min.js +1 -0
- package/computer-use-server/static/preact-htm.min.js +1 -0
- package/computer-use-server/static/preview.css +1030 -0
- package/computer-use-server/static/preview.js +1522 -0
- package/computer-use-server/static/xlsx.full.min.js +22 -0
- package/computer-use-server/static/xterm-addon-fit.min.js +2 -0
- package/computer-use-server/static/xterm-addon-web-links.min.js +2 -0
- package/computer-use-server/static/xterm.css +218 -0
- package/computer-use-server/static/xterm.min.js +2 -0
- package/computer-use-server/system_prompt.py +761 -0
- package/computer-use-server/uploads.py +82 -0
- package/contracts/README.md +53 -0
- package/contracts/audit/audit-fanin.asyncapi.yaml +407 -0
- package/contracts/exec/exec-channel.schema.json +240 -0
- package/contracts/mcp/2025-06-18/ocu-constraints.schema.json +178 -0
- package/contracts/storage/file-artifact-api.schema.json +390 -0
- package/contracts/storage/file-ops.schema.json +217 -0
- package/contracts/storage/mount-config.schema.json +197 -0
- package/cron/Dockerfile +15 -0
- package/cron/cleanup-quick.sh +21 -0
- package/cron/cleanup.sh +127 -0
- package/data/outputs/.gitkeep +0 -0
- package/data/uploads/.gitkeep +0 -0
- package/docker-compose.test.yml +54 -0
- package/docker-compose.webui.yml +77 -0
- package/docker-compose.yml +96 -0
- package/docs/CLOUD.md +29 -0
- package/docs/COMPARISON.md +128 -0
- package/docs/DOCKER.md +469 -0
- package/docs/DYNAMIC-SKILLS.md +77 -0
- package/docs/FEATURES.md +100 -0
- package/docs/INSTALL.md +111 -0
- package/docs/KNOWN-BUGS.md +86 -0
- package/docs/MCP.md +320 -0
- package/docs/SCREENSHOTS.md +39 -0
- package/docs/SKILLS-USER-GUIDE.md +86 -0
- package/docs/SKILLS.md +483 -0
- package/docs/TERMINAL-TAB.md +56 -0
- package/docs/architecture/02-trust-boundaries.md +224 -0
- package/docs/architecture/03-c4-context.md +61 -0
- package/docs/architecture/04-bounded-contexts.md +119 -0
- package/docs/architecture/05-c4-container.md +88 -0
- package/docs/architecture/06-threat-model.md +172 -0
- package/docs/architecture/08-contracts.md +105 -0
- package/docs/architecture/MANIFESTO.md +38 -0
- package/docs/architecture/PROCESS.md +64 -0
- package/docs/architecture/README.md +37 -0
- package/docs/architecture/adr/0000-template.md +65 -0
- package/docs/architecture/adr/0001-layer-0-gate-legacy-exclusion.md +75 -0
- package/docs/architecture/adr/0002-session-view-descriptor.md +57 -0
- package/docs/architecture/adr/0003-sandbox-runtime-tier-ladder.md +63 -0
- package/docs/architecture/adr/0004-operator-authentication-substrate.md +63 -0
- package/docs/architecture/adr/0005-egress-credential-delivery-envoy-sds.md +62 -0
- package/docs/architecture/adr/0006-egress-forward-proxy-substrate.md +65 -0
- package/docs/architecture/adr/0007-egress-auth-mechanism.md +72 -0
- package/docs/architecture/adr/0008-session-egress-attribution.md +59 -0
- package/docs/architecture/adr/0009-audit-pipeline-pluggable-by-contract.md +76 -0
- package/docs/architecture/adr/0010-storage-backend-pluggable-adapter.md +60 -0
- package/docs/architecture/adr/0011-storage-egress-lane.md +67 -0
- package/docs/architecture/adr/0012-implementation-language.md +67 -0
- package/docs/architecture/adr/0020-sandbox-image-provisioning.md +82 -0
- package/docs/architecture/adr/README.md +53 -0
- package/docs/architecture/compliance/.gitkeep +0 -0
- package/docs/architecture/components/00-overview.md +42 -0
- package/docs/architecture/components/0000-template.md +50 -0
- package/docs/architecture/components/01-mcp-gateway.md +80 -0
- package/docs/architecture/components/02-control-operator-api.md +80 -0
- package/docs/architecture/components/04-storage-broker.md +104 -0
- package/docs/architecture/components/05-session-sandbox.md +93 -0
- package/docs/architecture/components/06-egress-trust-edge.md +95 -0
- package/docs/architecture/components/07-audit-pipeline.md +110 -0
- package/docs/architecture/diagrams/.gitkeep +0 -0
- package/docs/architecture/diagrams/02-trust-boundaries.mmd +111 -0
- package/docs/architecture/diagrams/06-threat-model.mmd +41 -0
- package/docs/architecture/diagrams/08-contracts.mmd +47 -0
- package/docs/architecture/diagrams/c4-container.mmd +59 -0
- package/docs/architecture/diagrams/c4-context.mmd +46 -0
- package/docs/architecture/glossary.md +172 -0
- package/docs/architecture/manifesto/.gitkeep +0 -0
- package/docs/architecture/manifesto/01-audience-and-buyer.md +57 -0
- package/docs/architecture/manifesto/02-nfrs.md +325 -0
- package/docs/architecture/manifesto/03-non-negotiables.md +35 -0
- package/docs/architecture/manifesto/04-non-goals.md +23 -0
- package/docs/architecture/manifesto/05-licensing-posture.md +61 -0
- package/docs/architecture/manifesto/06-starter-mode-policy.md +49 -0
- package/docs/architecture/manifesto/07-governance.md +60 -0
- package/docs/architecture/primitives-backlog.md +51 -0
- package/docs/architecture.svg +117 -0
- package/docs/claude-code-gateway.md +173 -0
- package/docs/cli-config-templates.md +240 -0
- package/docs/data-flow.svg +72 -0
- package/docs/demo-landing-page.gif +0 -0
- package/docs/demo-qwen-trending.gif +0 -0
- package/docs/dynamic-skills.svg +77 -0
- package/docs/file-flow.svg +126 -0
- package/docs/future-architecture/README.md +152 -0
- package/docs/future-architecture/adr/0001-control-plane-language-go.md +80 -0
- package/docs/future-architecture/adr/0002-guest-agent-language-go.md +84 -0
- package/docs/future-architecture/adr/0003-docker-poc-first-then-k8s.md +37 -0
- package/docs/future-architecture/adr/0004-pluggable-runtime-via-runtimeclass.md +34 -0
- package/docs/future-architecture/adr/0005-mcp-as-control-plane-gateway.md +34 -0
- package/docs/future-architecture/adr/0006-no-agpl-no-bsl-dependencies.md +41 -0
- package/docs/future-architecture/adr/0007-superseded-by-future-architecture.md +37 -0
- package/docs/future-architecture/adr/0008-internal-grpc-external-rest-mcp.md +106 -0
- package/docs/future-architecture/adr/0009-external-protocol-dialects.md +94 -0
- package/docs/future-architecture/adr/0010-lambda-as-inspiration-not-runtime.md +86 -0
- package/docs/future-architecture/adr/0011-kata-as-first-class-dind-runtime.md +84 -0
- package/docs/future-architecture/antipatterns.md +552 -0
- package/docs/future-architecture/architecture/01-layers.md +109 -0
- package/docs/future-architecture/architecture/02-layer4-control-plane.md +122 -0
- package/docs/future-architecture/architecture/03-layer3-providers.md +174 -0
- package/docs/future-architecture/architecture/04-layer2-runtimes.md +114 -0
- package/docs/future-architecture/architecture/04b-credential-broker.md +153 -0
- package/docs/future-architecture/architecture/05-layer1-guest-agent.md +138 -0
- package/docs/future-architecture/architecture/06-storage.md +134 -0
- package/docs/future-architecture/architecture/07-security.md +194 -0
- package/docs/future-architecture/architecture/08-networking.md +149 -0
- package/docs/future-architecture/architecture/09-templates.md +122 -0
- package/docs/future-architecture/architecture/10-observability.md +121 -0
- package/docs/future-architecture/design-notes.md +72 -0
- package/docs/future-architecture/gaps.md +281 -0
- package/docs/future-architecture/phase-template.md +123 -0
- package/docs/future-architecture/references.md +225 -0
- package/docs/future-architecture/research/01-kata-containers.md +100 -0
- package/docs/future-architecture/research/02-e2b-infra.md +133 -0
- package/docs/future-architecture/research/03-coder.md +115 -0
- package/docs/future-architecture/research/04-cloud-hypervisor.md +99 -0
- package/docs/future-architecture/research/05-firecracker.md +114 -0
- package/docs/future-architecture/research/06-agent-sandbox.md +142 -0
- package/docs/future-architecture/research/07-chromedp.md +78 -0
- package/docs/future-architecture/research/08-microsandbox.md +78 -0
- package/docs/future-architecture/research/09-agentbox.md +135 -0
- package/docs/future-architecture/research/10-sysbox.md +100 -0
- package/docs/future-architecture/research/11-firecracker-containerd.md +93 -0
- package/docs/future-architecture/research/12-docker-socket-proxy.md +59 -0
- package/docs/future-architecture/research/14-e2b-desktop-and-surf.md +107 -0
- package/docs/future-architecture/research/18-open-webui-terminals-observed.md +135 -0
- package/docs/future-architecture/research/bank-buyer.md +96 -0
- package/docs/future-architecture/research/enthusiast-audience.md +106 -0
- package/docs/future-architecture/research/proof-uipath-anthropic-2026-05.md +76 -0
- package/docs/future-architecture/research/widemoat-thesis-advisor.md +124 -0
- package/docs/future-architecture/roadmap.md +438 -0
- package/docs/kata-runtime.md +267 -0
- package/docs/kubernetes.md +86 -0
- package/docs/logo.png +0 -0
- package/docs/multi-cli.md +161 -0
- package/docs/openwebui-filter.md +134 -0
- package/docs/roadmap/implementation-roadmap.md +104 -0
- package/docs/sandbox-contents.svg +229 -0
- package/docs/screenshots/01-create-document.png +0 -0
- package/docs/screenshots/02-file-preview.png +0 -0
- package/docs/screenshots/03-browser-viewer.png +0 -0
- package/docs/screenshots/04-sub-agent-terminal.png +0 -0
- package/docs/screenshots/05-chat-overview.png +0 -0
- package/docs/screenshots/06-sub-agent-dashboard.png +0 -0
- package/docs/screenshots/07-frontend-design-skill.png +0 -0
- package/docs/screenshots/08-pptx-skill.png +0 -0
- package/docs/screenshots/09-skill-creator.png +0 -0
- package/docs/screenshots/10-data-chart.png +0 -0
- package/docs/shared-browser.svg +102 -0
- package/docs/system-prompt.md +113 -0
- package/docs/terminal-flow.svg +69 -0
- package/examples/helm/README.md +20 -0
- package/examples/helm/standalone/values.yaml +49 -0
- package/examples/helm/with-open-webui/README.md +99 -0
- package/examples/helm/with-open-webui/values-computer-use.yaml +32 -0
- package/examples/helm/with-open-webui/values-open-webui.yaml +67 -0
- package/fonts/NotoEmoji-Regular.ttf +0 -0
- package/helm/computer-use-server/.helmignore +17 -0
- package/helm/computer-use-server/Chart.yaml +32 -0
- package/helm/computer-use-server/README.md +211 -0
- package/helm/computer-use-server/templates/NOTES.txt +66 -0
- package/helm/computer-use-server/templates/_helpers.tpl +115 -0
- package/helm/computer-use-server/templates/configmap-dind-init.yaml +82 -0
- package/helm/computer-use-server/templates/configmap.yaml +18 -0
- package/helm/computer-use-server/templates/deployment.yaml +248 -0
- package/helm/computer-use-server/templates/ingress.yaml +38 -0
- package/helm/computer-use-server/templates/networkpolicy.yaml +50 -0
- package/helm/computer-use-server/templates/pdb.yaml +16 -0
- package/helm/computer-use-server/templates/pvc-data.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-skills-cache.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-user-data.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-var-lib-docker.yaml +27 -0
- package/helm/computer-use-server/templates/secret.yaml +23 -0
- package/helm/computer-use-server/templates/service.yaml +22 -0
- package/helm/computer-use-server/templates/serviceaccount.yaml +15 -0
- package/helm/computer-use-server/templates/tests/test-health.yaml +23 -0
- package/helm/computer-use-server/values.schema.json +183 -0
- package/helm/computer-use-server/values.yaml +297 -0
- package/lychee.toml +36 -0
- package/openwebui/Dockerfile +52 -0
- package/openwebui/README.md +38 -0
- package/openwebui/functions/README.md +48 -0
- package/openwebui/functions/computer_link_filter.py +487 -0
- package/openwebui/init.sh +305 -0
- package/openwebui/patches/README.md +44 -0
- package/openwebui/patches/fix_artifacts_auto_show.py +441 -0
- package/openwebui/patches/fix_attached_files_position.py +87 -0
- package/openwebui/patches/fix_large_tool_args.py +156 -0
- package/openwebui/patches/fix_large_tool_results.py +289 -0
- package/openwebui/patches/fix_preview_url_detection.py +230 -0
- package/openwebui/patches/fix_skip_embedding_chat_files.py +229 -0
- package/openwebui/patches/fix_skip_rag_files_native_fc.py +100 -0
- package/openwebui/patches/fix_tool_loop_errors.py +510 -0
- package/package.json +39 -0
- package/requirements.txt +112 -0
- package/scripts/check-config.sh +141 -0
- package/scripts/docs-lint/ai-slop-detector.sh +202 -0
- package/scripts/docs-lint/architecture-tree-whitelist.sh +131 -0
- package/scripts/docs-lint/ascii-diagram-detector.sh +58 -0
- package/scripts/docs-lint/front-matter-validator.sh +97 -0
- package/scripts/docs-lint/gitignored-ref-detector.sh +122 -0
- package/scripts/docs-lint/identity-email-detector.sh +48 -0
- package/scripts/docs-lint/test-linters.sh +354 -0
- package/scripts/docs-lint/wc-budget.sh +61 -0
- package/scripts/githooks/pre-push +75 -0
- package/server.json +13 -0
- package/settings-wrapper/Dockerfile +9 -0
- package/settings-wrapper/README.md +119 -0
- package/settings-wrapper/app.py +113 -0
- package/settings-wrapper/requirements.txt +2 -0
- package/settings-wrapper/skills.json +25 -0
- package/skills/README.md +46 -0
- package/skills/examples/algorithmic-art/SKILL.md +405 -0
- package/skills/examples/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/examples/algorithmic-art/templates/viewer.html +601 -0
- package/skills/examples/artifacts-builder/SKILL.md +74 -0
- package/skills/examples/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/examples/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/examples/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/examples/canvas-design/LICENSE.txt +202 -0
- package/skills/examples/canvas-design/SKILL.md +130 -0
- package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/examples/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/examples/copy-editing/SKILL.md +447 -0
- package/skills/examples/copy-editing/evals/evals.json +89 -0
- package/skills/examples/copy-editing/references/plain-english-alternatives.md +394 -0
- package/skills/examples/internal-comms/LICENSE.txt +202 -0
- package/skills/examples/internal-comms/SKILL.md +32 -0
- package/skills/examples/internal-comms/examples/3p-updates.md +47 -0
- package/skills/examples/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/examples/internal-comms/examples/faq-answers.md +30 -0
- package/skills/examples/internal-comms/examples/general-comms.md +16 -0
- package/skills/examples/mcp-builder/SKILL.md +328 -0
- package/skills/examples/mcp-builder/reference/evaluation.md +602 -0
- package/skills/examples/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/examples/mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/examples/mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/examples/mcp-builder/scripts/connections.py +151 -0
- package/skills/examples/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/examples/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/examples/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/examples/product-marketing-context/SKILL.md +241 -0
- package/skills/examples/product-marketing-context/evals/evals.json +85 -0
- package/skills/examples/single-cell-rna-qc/SKILL.md +175 -0
- package/skills/examples/single-cell-rna-qc/references/scverse_qc_guidelines.md +186 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_analysis.py +232 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_core.py +233 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_plotting.py +235 -0
- package/skills/examples/skill-creator/SKILL.md +355 -0
- package/skills/examples/skill-creator/references/output-patterns.md +82 -0
- package/skills/examples/skill-creator/references/workflows.md +28 -0
- package/skills/examples/skill-creator/scripts/init_skill.py +303 -0
- package/skills/examples/skill-creator/scripts/package_skill.py +110 -0
- package/skills/examples/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/examples/slack-gif-creator/SKILL.md +254 -0
- package/skills/examples/slack-gif-creator/core/easing.py +234 -0
- package/skills/examples/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/examples/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/examples/slack-gif-creator/core/validators.py +136 -0
- package/skills/examples/slack-gif-creator/requirements.txt +4 -0
- package/skills/examples/social-content/SKILL.md +278 -0
- package/skills/examples/social-content/evals/evals.json +92 -0
- package/skills/examples/social-content/references/platforms.md +170 -0
- package/skills/examples/social-content/references/post-templates.md +177 -0
- package/skills/examples/social-content/references/reverse-engineering.md +195 -0
- package/skills/examples/theme-factory/SKILL.md +59 -0
- package/skills/examples/theme-factory/theme-showcase.pdf +0 -0
- package/skills/examples/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/examples/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/examples/theme-factory/themes/desert-rose.md +19 -0
- package/skills/examples/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/examples/theme-factory/themes/golden-hour.md +19 -0
- package/skills/examples/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/examples/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/examples/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/examples/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/examples/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/examples/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/examples/web-artifacts-builder/SKILL.md +74 -0
- package/skills/examples/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/examples/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/examples/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/examples/writing-skills/SKILL.md +655 -0
- package/skills/examples/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/examples/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/examples/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/examples/writing-skills/persuasion-principles.md +187 -0
- package/skills/examples/writing-skills/render-graphs.js +168 -0
- package/skills/examples/writing-skills/testing-skills-with-subagents.md +384 -0
- package/skills/public/describe-image/SKILL.md +105 -0
- package/skills/public/describe-image/scripts/describe.py +389 -0
- package/skills/public/doc-coauthoring/SKILL.md +375 -0
- package/skills/public/docx/LICENSE.txt +30 -0
- package/skills/public/docx/SKILL.md +199 -0
- package/skills/public/docx/docx-js.md +350 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/public/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/public/docx/ooxml/scripts/pack.py +159 -0
- package/skills/public/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/public/docx/ooxml/scripts/validate.py +69 -0
- package/skills/public/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/public/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/public/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/public/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/public/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/public/docx/ooxml.md +632 -0
- package/skills/public/docx/scripts/__init__.py +1 -0
- package/skills/public/docx/scripts/document.py +1292 -0
- package/skills/public/docx/scripts/templates/comments.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/public/docx/scripts/templates/people.xml +3 -0
- package/skills/public/docx/scripts/utilities.py +374 -0
- package/skills/public/file-reading/LICENSE.txt +30 -0
- package/skills/public/file-reading/SKILL.md +350 -0
- package/skills/public/frontend-design/LICENSE.txt +177 -0
- package/skills/public/frontend-design/SKILL.md +42 -0
- package/skills/public/gitlab-explorer/SKILL.md +174 -0
- package/skills/public/gitlab-explorer/references/git-commands.md +323 -0
- package/skills/public/gitlab-explorer/references/glab-commands.md +282 -0
- package/skills/public/gitlab-explorer/scripts/check_gitlab_auth.sh +109 -0
- package/skills/public/pdf/FORMS.md +205 -0
- package/skills/public/pdf/REFERENCE.md +612 -0
- package/skills/public/pdf/SKILL.md +364 -0
- package/skills/public/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/public/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/public/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/public/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/public/pdf/scripts/create_validation_image.py +41 -0
- package/skills/public/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/public/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/public/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/public/pdf-reading/LICENSE.txt +30 -0
- package/skills/public/pdf-reading/REFERENCE.md +196 -0
- package/skills/public/pdf-reading/SKILL.md +305 -0
- package/skills/public/playwright-cli/SKILL.md +278 -0
- package/skills/public/playwright-cli/references/request-mocking.md +87 -0
- package/skills/public/playwright-cli/references/running-code.md +232 -0
- package/skills/public/playwright-cli/references/session-management.md +169 -0
- package/skills/public/playwright-cli/references/storage-state.md +275 -0
- package/skills/public/playwright-cli/references/test-generation.md +88 -0
- package/skills/public/playwright-cli/references/tracing.md +139 -0
- package/skills/public/playwright-cli/references/video-recording.md +43 -0
- package/skills/public/pptx/LICENSE.txt +30 -0
- package/skills/public/pptx/SKILL.md +484 -0
- package/skills/public/pptx/css.md +335 -0
- package/skills/public/pptx/html2pptx.md +893 -0
- package/skills/public/pptx/html2pptx.tgz +0 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/public/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/public/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/public/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/public/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/public/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/public/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/public/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/public/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/public/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/public/pptx/ooxml.md +427 -0
- package/skills/public/pptx/scripts/inventory.py +1020 -0
- package/skills/public/pptx/scripts/rearrange.py +231 -0
- package/skills/public/pptx/scripts/replace.py +385 -0
- package/skills/public/pptx/scripts/thumbnail.py +450 -0
- package/skills/public/skill-creator/SKILL.md +356 -0
- package/skills/public/skill-creator/references/output-patterns.md +82 -0
- package/skills/public/skill-creator/references/workflows.md +28 -0
- package/skills/public/skill-creator/scripts/init_skill.py +303 -0
- package/skills/public/skill-creator/scripts/package_skill.py +110 -0
- package/skills/public/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/public/sub-agent/SKILL.md +186 -0
- package/skills/public/sub-agent/references/security-review.md +153 -0
- package/skills/public/sub-agent/references/usage.md +207 -0
- package/skills/public/sub-agent/scripts/list_subagent_models.sh +22 -0
- package/skills/public/test-driven-development/SKILL.md +371 -0
- package/skills/public/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/public/webapp-testing/LICENSE.txt +202 -0
- package/skills/public/webapp-testing/SKILL.md +96 -0
- package/skills/public/webapp-testing/examples/console_logging.py +35 -0
- package/skills/public/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/public/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/public/webapp-testing/scripts/with_server.py +106 -0
- package/skills/public/xlsx/LICENSE.txt +30 -0
- package/skills/public/xlsx/SKILL.md +316 -0
- package/skills/public/xlsx/preview_data.py +93 -0
- package/skills/public/xlsx/recalc.py +178 -0
- package/tests/README.md +42 -0
- package/tests/fixtures/cli/claude_v0.9.2.0_argv.json +46 -0
- package/tests/fixtures/cli/claude_v0.9.2.0_stdout.json +32 -0
- package/tests/fixtures/cli/codex_run.jsonl +4 -0
- package/tests/fixtures/cli/opencode_run.jsonl +6 -0
- package/tests/integration/README.md +56 -0
- package/tests/integration/conftest.py +280 -0
- package/tests/integration/pytest.ini +13 -0
- package/tests/integration/test_mcp_auth.py +85 -0
- package/tests/integration/test_mcp_tools.py +101 -0
- package/tests/integration/test_workspace_lifecycle.py +125 -0
- package/tests/orchestrator/mock_llm_server.py +343 -0
- package/tests/orchestrator/test_cli_adapters.py +566 -0
- package/tests/orchestrator/test_cli_adapters_live.py +527 -0
- package/tests/orchestrator/test_cli_runtime.py +451 -0
- package/tests/orchestrator/test_docker_manager.py +302 -0
- package/tests/orchestrator/test_dynamic_instructions.py +69 -0
- package/tests/orchestrator/test_mcp_resources.py +140 -0
- package/tests/orchestrator/test_mcp_tools.py +224 -0
- package/tests/orchestrator/test_passthrough_isolation.py +201 -0
- package/tests/orchestrator/test_readme_in_container.py +76 -0
- package/tests/orchestrator/test_render_cache.py +84 -0
- package/tests/orchestrator/test_runtime_cli_endpoint.py +108 -0
- package/tests/orchestrator/test_single_user_mode.py +212 -0
- package/tests/orchestrator/test_startup_warnings.py +123 -0
- package/tests/orchestrator/test_sub_agent_dispatch.py +327 -0
- package/tests/orchestrator/test_subagent_claude_compat.py +367 -0
- package/tests/orchestrator/test_system_prompt_endpoint.py +191 -0
- package/tests/orchestrator/test_tool_descriptions.py +52 -0
- package/tests/orchestrator/test_view_image.py +201 -0
- package/tests/patches/conftest.py +30 -0
- package/tests/patches/fixtures/__init__.py +10 -0
- package/tests/patches/fixtures/middleware_v0.9.1.py +5057 -0
- package/tests/patches/fixtures/middleware_v0.9.2.py +5120 -0
- package/tests/patches/fixtures/retrieval_v0.9.1.py +2684 -0
- package/tests/patches/fixtures/retrieval_v0.9.2.py +2700 -0
- package/tests/patches/test_fix_attached_files_position.py +118 -0
- package/tests/patches/test_fix_large_tool_args.py +130 -0
- package/tests/patches/test_fix_large_tool_results.py +531 -0
- package/tests/patches/test_fix_skip_embedding_chat_files.py +160 -0
- package/tests/patches/test_fix_skip_rag_files_native_fc.py +120 -0
- package/tests/patches/test_fix_tool_loop_errors.py +128 -0
- package/tests/security/test_path_traversal_app.py +132 -0
- package/tests/security/test_path_traversal_docker.py +36 -0
- package/tests/security/test_path_traversal_settings.py +87 -0
- package/tests/security/test_safe_path_util.py +166 -0
- package/tests/security/test_xss_preview.py +46 -0
- package/tests/test-default-model-resolution.py +136 -0
- package/tests/test-docker-image.sh +358 -0
- package/tests/test-list-subagent-models.sh +421 -0
- package/tests/test-mcp-endpoint-live.sh +92 -0
- package/tests/test-mcp-native-surface.sh +213 -0
- package/tests/test-no-cyrillic.sh +135 -0
- package/tests/test-opencode-error-mapping.py +130 -0
- package/tests/test-pr88-skills.sh +305 -0
- package/tests/test-project-structure.sh +202 -0
- package/tests/test-single-user-mode.sh +269 -0
- package/tests/test-skill-no-hardcoded-models.sh +65 -0
- package/tests/test-subagent-cli-surface.py +137 -0
- package/tests/test-subagent-runtime.sh +109 -0
- package/tests/test_codex_toml_converter.py +204 -0
- package/tests/test_default_resolver_no_legacy_global.py +159 -0
- package/tests/test_filter.py +648 -0
- package/tests/test_init_sh_unchanged.sh +49 -0
- package/tests/test_opencode_alias_map_drop.py +144 -0
- package/tests/test_requirements.py +91 -0
- package/tests/test_subagent_docstring.py +193 -0
- package/tests/test_tools.py +34 -0
- package/vendor/extract-text/README.md +46 -0
- package/vendor/extract-text/extract-text +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Architecture Gap Analysis
|
|
5
|
+
|
|
6
|
+
> **Pre-mortem inventory** of architecture topics that are either absent or only lightly addressed in [`architecture/`](./architecture/), [`adr/`](./adr/), and [`roadmap.md`](./roadmap.md). Captured **before** code meets reality, so each gap can be resolved (or explicitly deferred) on its own merits.
|
|
7
|
+
>
|
|
8
|
+
> This is **not** an ADR and **not** a roadmap edit. Phase pointers below are **suggestions**, not commitments. Tier-1 gaps are expected to graduate into their own ADRs / phase-research docs over time.
|
|
9
|
+
|
|
10
|
+
## How to read this doc
|
|
11
|
+
|
|
12
|
+
- **Status legend**
|
|
13
|
+
- **MISSING** — topic not addressed anywhere in the live spec.
|
|
14
|
+
- **LIGHT** — touched in one or two places but no architectural weight (no contract, no acceptance criteria, no rollback).
|
|
15
|
+
- **PRESENT** — explicitly named with a contract or acceptance hook in `architecture/` or `adr/`.
|
|
16
|
+
- **Lands in phase** — the existing roadmap phase that is the most natural home for the work. Where no phase fits, the entry says so.
|
|
17
|
+
- **Cross-cuts** — items that apply to every phase. They belong in invariants or CI policy, not a single phase row.
|
|
18
|
+
- **External precedents** — projects worth studying before opening an ADR. These should turn into entries in [`references.md`](./references.md) and digests under [`research/`](./research/) when their gap is taken up.
|
|
19
|
+
|
|
20
|
+
For phase context see [`roadmap.md`](./roadmap.md). For locked operational choices see [`antipatterns.md`](./antipatterns.md).
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## A. Multi-tenancy beyond per-session
|
|
25
|
+
|
|
26
|
+
The current isolation boundary is the **sandbox**. A tenant is an organisation that owns N users and M sessions. The tenant boundary is not defined.
|
|
27
|
+
|
|
28
|
+
- **Tenant ≠ session.** Define the tenant model (org → users → sessions) as a first-class L4 entity.
|
|
29
|
+
- **Fairness between tenants** on a shared cluster — noisy-neighbour case where one tenant drains every warm-pool slot.
|
|
30
|
+
- **Per-tenant aggregate quotas** — concurrent sessions, MCP calls/min, storage GB, egress bytes/day. Per-sandbox quotas are insufficient.
|
|
31
|
+
- **Per-tenant config overlay** — tenant A gets MCP tool set X with Chrome egress to `*.github.com`; tenant B gets set Y with egress only to `*.internal.bank`.
|
|
32
|
+
- **Tenant-scoped audit** — auditor of bank A must not see events from bank B.
|
|
33
|
+
|
|
34
|
+
**Status:** LIGHT. `architecture/02-layer4-control-plane.md` names `tenant_id` on the session router, per-tenant S3 buckets, and the k8s "namespace per tenant" idea, but org-level fairness, aggregate quotas, per-tenant tool overlays, and per-tenant audit scoping are not contracted.
|
|
35
|
+
|
|
36
|
+
**Lands in phase:** deeper Phase 5 (`KubernetesProvider` is where tenant = namespace lives) with Phase-6 surface follow-ups (admin API for tenant CRUD, quotas).
|
|
37
|
+
|
|
38
|
+
**External precedents:** Vault namespaces, Confluent Cloud multi-tenant model, Kubernetes Hierarchical Namespaces (HNC), Snowflake account model.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## B. Identity beyond OIDC
|
|
43
|
+
|
|
44
|
+
OIDC is named in Phase 6. Enterprise-IT integration needs strictly more.
|
|
45
|
+
|
|
46
|
+
- **SAML 2.0** — required by large enterprises. Distinct protocol, not free from OIDC.
|
|
47
|
+
- **LDAP / Active Directory** direct — some legacy enterprises support nothing else.
|
|
48
|
+
- **Service accounts** for machine-to-machine (customer CI/CD triggers our platform).
|
|
49
|
+
- **RBAC granularity** — concrete roles (`template-admin`, `session-creator`, `audit-reader`, `secret-rotator`) and their permission matrices.
|
|
50
|
+
- **Federated identity for self-hosted** — the customer's Keycloak / Okta / Ping is the IdP, we are only the consumer.
|
|
51
|
+
- **Token caching & rotation policy** — explicit rotation cadence for access tokens, behaviour on revocation.
|
|
52
|
+
|
|
53
|
+
**Status:** MISSING (SAML, LDAP/AD, service accounts, federated self-hosted, token-rotation policy) / LIGHT (RBAC granularity — listed as an L4 concern but no permission matrix exists; per-sandbox empty-RBAC ServiceAccount is documented in `architecture/07-security.md` but that is sandbox-scoped, not identity-scoped).
|
|
54
|
+
|
|
55
|
+
**Lands in phase:** Phase 6 (Go control plane auth surface). RBAC matrix is a docs-only prerequisite that can land in Phase 0.5 follow-on.
|
|
56
|
+
|
|
57
|
+
**External precedents:** Coder enterprise auth, GitLab self-hosted Omnibus, Authentik, Keycloak federation patterns.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## C. Compliance and audit immutability
|
|
62
|
+
|
|
63
|
+
Audit append-only sink with ≥ 90 d retention is named in `architecture/07-security.md` and `architecture/10-observability.md`. Compliance posture is mentioned. Several pieces are still missing.
|
|
64
|
+
|
|
65
|
+
- **Frameworks promised.** SOC 2 Type II, ISO 27001, HIPAA, PCI DSS — each carries distinct controls. Without an explicit choice this does not sell.
|
|
66
|
+
- **Audit log immutability.** Write-once, no retroactive edit. S3 Object Lock / WORM storage. Phase 8 names the pipeline; immutability needs to be named with the same weight.
|
|
67
|
+
- **Retention policy.** Financial sector ≥ 7 years; HIPAA ≥ 6 years; GDPR "no longer than necessary". The conflict has to be resolved explicitly.
|
|
68
|
+
- **Data residency** as a hard guarantee. Tenant X data lives only in region Y. Architecturally this is **deployment topology**, not a template setting — a single control plane cannot serve tenants with different residency without full physical separation.
|
|
69
|
+
- **Right to be forgotten (GDPR Art. 17)** — selective deletion of a user's data from every system **including the audit log** (conflicts with immutability — needs tombstoning).
|
|
70
|
+
- **Session recording / lawful intercept** — a regulator may demand "show everything the agent did over period X" including screenshots, MCP calls, user input. A computed artefact.
|
|
71
|
+
|
|
72
|
+
**Status:** PRESENT (SOC 2 / HIPAA / PCI named in `architecture/07-security.md`, append-only sink named in `07-security.md` + `10-observability.md`) / LIGHT (GDPR — ephemeral-by-default posture only, no Art. 17 deletion flow; ISO 27001 implied not mapped) / MISSING (data residency, retention-policy conflict resolution, lawful-intercept session recording).
|
|
73
|
+
|
|
74
|
+
**Lands in phase:** first iteration in Phase 4 (secret broker — foundation for tenant-scoped secrets) and Phase 8 (audit immutability + retention). Data residency belongs in the future multi-region milestone (post Phase 10).
|
|
75
|
+
|
|
76
|
+
**External precedents:** AWS GovCloud / FedRAMP boundary doc, Sentry Single Tenant compliance, Atlassian Trust Center as a public-facing template.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## D. Determinism and session replay
|
|
81
|
+
|
|
82
|
+
- Can an agent session be **replayed 100 % accurately** for debugging? If the agent did something strange — full replay, or at least deterministic audit.
|
|
83
|
+
- Persist every MCP call + screenshot in a format that **plays back** → 80 % of replay capability at a low cost.
|
|
84
|
+
- **Time inside the sandbox** — does the agent see real wallclock or a frozen one? Some sandbox runtimes manipulate the clock for consistent caching and reproducibility.
|
|
85
|
+
- **Random-seed control** — for skills that use randomness, fix the seed per session for replay.
|
|
86
|
+
- **Audit-event ID** — UUIDv7 (timestamp-prefixed) is much easier for time-range queries than UUIDv4.
|
|
87
|
+
|
|
88
|
+
**Status:** LIGHT. `architecture/07-security.md` covers CRNG reseed and wall-clock hardening on snapstart restore (anti-divergence), but session-replay debugging, deterministic time inside the sandbox, per-session random-seed control, and UUIDv7 audit IDs are not specified.
|
|
89
|
+
|
|
90
|
+
**Lands in phase:** Phase 7 (Rust agent — capabilities + dual-port API are the natural home for replay primitives) + Phase 8 (audit pipeline — replay reads from this).
|
|
91
|
+
|
|
92
|
+
**External precedents:** Mozilla rr (record/replay debugger), Replay.io, Antithesis (deterministic simulator), DVC for ML experiment determinism.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## E. Cost attribution and metering
|
|
97
|
+
|
|
98
|
+
- **Per-session billing primitives** — CPU-min, RAM-GB-min, storage-GB-day, egress bytes, MCP-call count. Without these no internal showback and no external chargeback.
|
|
99
|
+
- **Per-tenant aggregation** — realtime and period rollups.
|
|
100
|
+
- **Cost annotation on every sandbox event** — for post-hoc analysis ("what burned Q3 budget").
|
|
101
|
+
- **Threshold alerts** — tenant approaching quota → notification.
|
|
102
|
+
|
|
103
|
+
**Status:** MISSING. `architecture/10-observability.md` only carries a RAM capacity-sizing formula. No billing primitives, no metering SDK, no cost tagging.
|
|
104
|
+
|
|
105
|
+
**Lands in phase:** suggestion for a new **Phase 6.5** between Go control plane (Phase 6) and Rust agent (Phase 7). Not edited into `roadmap.md` in this PR.
|
|
106
|
+
|
|
107
|
+
**External precedents:** Kubecost (k8s-native cost), AWS Cost Explorer API model, OpenCost (CNCF), Stripe metered-billing primitives.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## F. Disaster recovery — RTO/RPO explicit
|
|
112
|
+
|
|
113
|
+
Phase 10 ships HA in a single region and multi-region foundations. The DR contract is not explicit.
|
|
114
|
+
|
|
115
|
+
- **RTO (Recovery Time Objective)** — how long to come back up after a catastrophe? 5 minutes? An hour? A day?
|
|
116
|
+
- **RPO (Recovery Point Objective)** — how much data can be lost on failover? Seconds? Minutes?
|
|
117
|
+
- **Backup strategy for control-plane state** — KV snapshots, PostgreSQL backups, S3 versioning.
|
|
118
|
+
- **Restore drills.** When was the last one. Without regular drills DR is fiction.
|
|
119
|
+
- **Chaos engineering** — regular component kill, verify the system degrades rather than collapses.
|
|
120
|
+
|
|
121
|
+
**Status:** LIGHT. Phase 10 snapshot/restore covers pause-resume and cross-AZ recovery; the DR runbook is mentioned but RTO/RPO targets, backup-strategy spec, drill cadence, and chaos engineering are not.
|
|
122
|
+
|
|
123
|
+
**Lands in phase:** suggestion to rename Phase 10 to **"HA + DR"** with explicit RTO/RPO in the acceptance criteria. Not edited into `roadmap.md` in this PR.
|
|
124
|
+
|
|
125
|
+
**External precedents:** Stripe DR game days (public write-ups), Netflix Chaos Monkey, AWS Well-Architected DR Pillar, Velero for k8s backups.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## G. Supply chain security
|
|
130
|
+
|
|
131
|
+
- **SBOM (Software Bill of Materials)** for every image. Without an SBOM, US-government deployments under Executive Order 14028 are unreachable.
|
|
132
|
+
- **Cosign / Sigstore signing** for every artefact — images, Helm charts, binary releases. Verify chain in kubectl admission.
|
|
133
|
+
- **Continuous CVE scanning** — Trivy / Grype in CI per PR + daily against existing images.
|
|
134
|
+
- **Reproducible builds** for the L1 agent — musl static-PIE, fixed timestamps, bit-by-bit identical builds. Rust fits well.
|
|
135
|
+
- **Base-image hardening** — Chainguard / Wolfi distroless instead of Ubuntu. Order-of-magnitude fewer CVEs by default.
|
|
136
|
+
|
|
137
|
+
**Status:** PRESENT (Cosign signing + admission verifier in `architecture/07-security.md`; templates reference by digest) / LIGHT (CVE risks per runtime listed but no automated scanning or IR flow; reproducible-build hints exist in `antipatterns.md` A22 — pinned versions + `SOURCE_DATE_EPOCH`, but not validated end-to-end) / MISSING (SBOM generation/distribution, base-image hardening).
|
|
138
|
+
|
|
139
|
+
**Lands in phase:** cross-cut. Add to a Phase-0.5 follow-on as CI policy (SBOM emit, Trivy scan, reproducibility CI check). Base-image hardening fits Phase 7 (new image is rebuilt anyway).
|
|
140
|
+
|
|
141
|
+
**External precedents:** SLSA framework, in-toto attestations, GUAC, CNCF TAG-Security guide.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## H. Air-gap and corporate networking
|
|
146
|
+
|
|
147
|
+
- **Air-gapped deployment** — offline installer with a tarball of every image and chart. Must install with **no internet at all**.
|
|
148
|
+
- **Corporate egress proxy** — `$HTTP_PROXY`, `$HTTPS_PROXY`, `$NO_PROXY` honoured everywhere. Custom CA bundle injection.
|
|
149
|
+
- **Internal certificate authority** — customer supplies their own CA, our services accept it for mTLS.
|
|
150
|
+
- **DNS via corp resolver** — cannot use `8.8.8.8`; must work with split-horizon DNS.
|
|
151
|
+
- **Update channel in air-gap** — how patches are delivered. USB stick? Internal mirror registry?
|
|
152
|
+
|
|
153
|
+
**Status:** MISSING.
|
|
154
|
+
|
|
155
|
+
**Lands in phase:** suggestion for a dedicated future phase, gated on the first regulated-deployment customer. Not edited into `roadmap.md` in this PR.
|
|
156
|
+
|
|
157
|
+
**External precedents:** Replicated KOTS (purpose-built for self-hosted), Anthos on-prem, GitLab Omnibus offline install, Anchore Enterprise.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## I. Operator UX (Day-2 ops)
|
|
162
|
+
|
|
163
|
+
- **Synthetic transactions** — every deploy auto-runs a canary sandbox session with a known tool and checks the result. Fails the deploy if it does not work.
|
|
164
|
+
- **Diagnostic bundle** — one command collects logs / configs / metrics / topology into a zip for support. Without it every support ticket is 3 hours of artefact gathering.
|
|
165
|
+
- **SLO templates** — Prometheus rules + Grafana dashboards out of the box.
|
|
166
|
+
- **Runbook catalogue** — "control plane unresponsive" → steps. "Sandbox stuck in Creating" → steps. Markdown in the repo.
|
|
167
|
+
- **Upgrade tooling** — `helm upgrade` with pre/post hooks for migrations. One-command rollback.
|
|
168
|
+
|
|
169
|
+
**Status:** PRESENT (SLO targets in `architecture/10-observability.md`; per-phase rollback windows in `roadmap.md`) / LIGHT (health probes named but no synthetic-transaction framework) / MISSING (diagnostic bundle, runbook catalogue, upgrade tooling beyond per-phase rollback).
|
|
170
|
+
|
|
171
|
+
**Lands in phase:** cross-cut. Each phase should grow operator-UX artefacts in parallel rather than wait for a standalone phase.
|
|
172
|
+
|
|
173
|
+
**External precedents:** Replicated Troubleshoot, Bitnami ops playbooks, GitLab "Database Lab" pattern, Sentry self-hosted ops.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## J. Versioning policy
|
|
178
|
+
|
|
179
|
+
- **Backward compatibility** — does L1 v3 control plane work with an L4 v1 control plane? How many versions back are supported. Capabilities negotiation is already in the architecture, which is good.
|
|
180
|
+
- **API deprecation policy** — announce N versions before removal, `Deprecated:` header on responses (Stripe-style).
|
|
181
|
+
- **Database migrations** — forward-only without data loss. Rollback is a separate DR procedure. Atlas / Sqitch / golang-migrate.
|
|
182
|
+
- **Live migration of sessions on upgrade** — if the control plane restarts, do live sandboxes keep running (because L1 is autonomous), or must the client reconnect? The contract must be written down.
|
|
183
|
+
|
|
184
|
+
**Status:** LIGHT (capabilities negotiation in `architecture/05-layer1-guest-agent.md`; Phase 6 has a dual-run strategy section) / MISSING (formal API-deprecation policy, schema-migration tooling spec, session-survives-upgrade contract).
|
|
185
|
+
|
|
186
|
+
**Lands in phase:** suggestion to add a new file `architecture/11-versioning.md` as the canonical versioning contract. Not created in this PR.
|
|
187
|
+
|
|
188
|
+
**External precedents:** Stripe API versioning manifesto, Kubernetes Deprecation Policy, Tailscale upgrade-compatibility blog posts.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## K. Agentic-workload edge cases
|
|
193
|
+
|
|
194
|
+
These are the core, and they tend to surface in production:
|
|
195
|
+
|
|
196
|
+
- **Cancellation latency.** User clicks Stop. How many seconds before a `pip install` in flight is actually stopped? Graceful chain (`SIGTERM` → wait → `SIGKILL`) timeout has to be explicit.
|
|
197
|
+
- **Long-running tools without HTTP timeout** — 30-minute web scrape, model training. WebSocket keepalive, progress events.
|
|
198
|
+
- **Disconnection mid-tool** — tool still running, client dropped. What should L1 do? Wait + save result? Kill?
|
|
199
|
+
- **Concurrent tool calls in one session** — legal or not? Two tools writing into the same directory?
|
|
200
|
+
- **Tool output larger than the MCP message limit** — `dmesg` stdout or a giant JSON. Streaming, pagination, pre-signed URL — which one is chosen.
|
|
201
|
+
- **Large files agent → user** — agent generated a 5 GB Parquet. S3 pre-signed URL or your transport? Cost implications.
|
|
202
|
+
|
|
203
|
+
**Status:** LIGHT (`architecture/05-layer1-guest-agent.md` covers `SIGTERM`→`SIGKILL`, zombie reaping, dual-port API; the agent-in-microVM pattern handles zombies and long-running processes) / MISSING (explicit cancellation-latency SLO, long-running-tool heartbeat protocol, disconnection-mid-tool semantics, concurrent-tool-call contract, output-size flow control, large-artefact transport policy).
|
|
204
|
+
|
|
205
|
+
**Lands in phase:** Phase 7 acceptance should be strengthened to cover the above. No new phase.
|
|
206
|
+
|
|
207
|
+
**External precedents:** JupyterHub kernel restart semantics, gRPC streaming patterns, S3 multipart upload, Anthropic Computer Use public docs (cancellation behaviour is described there).
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## L. MCP ecosystem (zone of uncertainty)
|
|
212
|
+
|
|
213
|
+
- **MCP server discovery** — how the agent finds what is available. Static config vs runtime registry.
|
|
214
|
+
- **Per-tenant MCP server set** — tenant A gets Jira/Confluence, tenant B gets Salesforce. Provisioning flow.
|
|
215
|
+
- **Sandboxing MCP servers** — a third party wrote an MCP server. Do you trust it? Isolate it from agent state?
|
|
216
|
+
- **Capability advertisement** — server X says "I can tool A with args B". Schema validation.
|
|
217
|
+
|
|
218
|
+
**Status:** LIGHT (`architecture/02-layer4-control-plane.md` mentions tenant-scoped system prompt rendering and templates drive the tool set, but per-tenant MCP capability scoping is not contracted) / MISSING (MCP server discovery flow, sandboxing of MCP servers, capability schema validation).
|
|
219
|
+
|
|
220
|
+
**Lands in phase:** parallel watching. The MCP spec itself is moving — do not lock the design under the current MCP API; expect movement.
|
|
221
|
+
|
|
222
|
+
**External precedents:** Anthropic MCP spec (primary source). Few mature precedents — this is an open shape in the industry.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## M. Open-source community ops
|
|
227
|
+
|
|
228
|
+
Before publishing:
|
|
229
|
+
|
|
230
|
+
- **Security disclosure policy** — `SECURITY.md`, `security@your-domain`, GPG key, response SLA. Without it researchers file CVEs in public.
|
|
231
|
+
- **Code of Conduct** — Contributor Covenant template.
|
|
232
|
+
- **Maintainer access policy** — who can merge. Bus factor.
|
|
233
|
+
- **Phone-home telemetry for OSS** — yes / no / opt-in. Default-on is a red flag for customers.
|
|
234
|
+
- **Release cadence and LTS** — each minor supported for how long. Enterprise expectation is "N−2 versions receive security patches".
|
|
235
|
+
- **Third-party builds** — do downstream distributions get to redistribute? Nuances with BUSL / FSL.
|
|
236
|
+
|
|
237
|
+
**Status:** MISSING (no `SECURITY.md`, CoC, telemetry policy, release-cadence/LTS spec, redistribution policy in the architecture).
|
|
238
|
+
|
|
239
|
+
**Lands in phase:** non-blocker. Pre-OSS-publish checklist; resolve before the first public marketing of the OSS edition.
|
|
240
|
+
|
|
241
|
+
**External precedents:** CNCF security policy template, Kubernetes contributor ladder, Linux Foundation OSS Manager.
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Roadmap integration summary
|
|
246
|
+
|
|
247
|
+
| Category | Tier | Suggested phase placement | New doc artefact (future) |
|
|
248
|
+
|---|---|---|---|
|
|
249
|
+
| A. Multi-tenancy beyond per-session | 1 | Deeper Phase 5 (tenant = namespace) + Phase 6 tenant CRUD | ADR on tenant model |
|
|
250
|
+
| B. Identity beyond OIDC | 1 | Phase 6 (control plane auth) | ADR on auth surface; RBAC matrix in `architecture/02-*` |
|
|
251
|
+
| C. Compliance & audit immutability | 1 | Phase 4 + Phase 8 (immutability), residency = post Phase 10 | `architecture/07-security.md` expansion; ADR per framework |
|
|
252
|
+
| D. Determinism & session replay | 2 | Phase 7 + Phase 8 | Section in `architecture/05-*` and `architecture/10-*` |
|
|
253
|
+
| E. Cost attribution & metering | 1 | Proposed **Phase 6.5** | `architecture/10-observability.md` billing-primitives section |
|
|
254
|
+
| F. DR — RTO/RPO/backup/chaos | 1 | Rename Phase 10 → "HA + DR"; explicit RTO/RPO in acceptance | DR-runbook index |
|
|
255
|
+
| G. Supply chain security | 1 | Cross-cut; add CI policy in a Phase-0.5 follow-on; base-image hardening in Phase 7 | SBOM/SLSA section in `architecture/07-security.md` |
|
|
256
|
+
| H. Air-gap & corp networking | 2 | Dedicated future phase (customer-triggered) | Air-gap install guide |
|
|
257
|
+
| I. Operator UX day-2 | 2 | Cross-cut; grows per phase | Runbook catalogue; diagnostic-bundle spec |
|
|
258
|
+
| J. Versioning policy | 1 | New `architecture/11-versioning.md` | The file itself |
|
|
259
|
+
| K. Agentic-workload edge cases | 1 | Strengthen Phase 7 acceptance | Acceptance-criteria update only |
|
|
260
|
+
| L. MCP ecosystem | 2 | Parallel watching; revisit when MCP spec stabilises | None yet |
|
|
261
|
+
| M. Open-source community ops | 3 | Pre-OSS-publish checklist | `SECURITY.md`, `CODE_OF_CONDUCT.md`, release-policy doc |
|
|
262
|
+
|
|
263
|
+
**Tier 1** = critical for compliance / operations or for agentic-workload maturity at production scale.
|
|
264
|
+
**Tier 2** = enterprise-adoption blockers that depend on a specific customer trigger.
|
|
265
|
+
**Tier 3** = pre-public-launch hygiene.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Out of scope (this document)
|
|
270
|
+
|
|
271
|
+
- No phase reordering or scope edit in `roadmap.md`.
|
|
272
|
+
- No new ADRs created — each Tier-1 gap is expected to graduate into its own ADR / phase-research doc when it is taken up.
|
|
273
|
+
- No code, no config, no CI changes.
|
|
274
|
+
|
|
275
|
+
## See also
|
|
276
|
+
|
|
277
|
+
- [`roadmap.md`](./roadmap.md) — 12 phases, invariants, failure-modes menu, rollback runbook
|
|
278
|
+
- [`antipatterns.md`](./antipatterns.md) — locked operational choices indexed by phase
|
|
279
|
+
- [`architecture/`](./architecture/) — layer specs (L4 → L1)
|
|
280
|
+
- [`adr/`](./adr/) — locked decisions
|
|
281
|
+
- [`research/`](./research/) — reference-architecture digests
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Phase-N template
|
|
5
|
+
|
|
6
|
+
> Copy this file twice per phase: once as `phase-N-research.md` (Step 1: Research), once as `phase-N-plan.md` (Step 3: Plan). Leave this template untouched.
|
|
7
|
+
|
|
8
|
+
## `phase-N-research.md` skeleton
|
|
9
|
+
|
|
10
|
+
```markdown
|
|
11
|
+
# Phase N research — <short title>
|
|
12
|
+
|
|
13
|
+
**Status:** draft → in-review → signed-off
|
|
14
|
+
**Owner:** <name>
|
|
15
|
+
**Started:** YYYY-MM-DD
|
|
16
|
+
**Signed-off:** YYYY-MM-DD
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
What this phase delivers per [roadmap.md](./roadmap.md#phase-N) in one paragraph. Why now.
|
|
21
|
+
|
|
22
|
+
## Antipatterns scanned
|
|
23
|
+
|
|
24
|
+
List every entry from [`antipatterns.md`](./antipatterns.md) phase-index row for Phase N. For each: "our choice still holds" OR "this phase needs to amend it because…". Don't skip any.
|
|
25
|
+
|
|
26
|
+
## Options considered
|
|
27
|
+
|
|
28
|
+
For each meaningful decision in this phase:
|
|
29
|
+
|
|
30
|
+
### Decision X — <what>
|
|
31
|
+
|
|
32
|
+
| Option | Pro | Con | Cost |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| A | … | … | … |
|
|
35
|
+
| B | … | … | … |
|
|
36
|
+
|
|
37
|
+
**Recommendation:** A. Because …
|
|
38
|
+
|
|
39
|
+
(One block per meaningful decision. Targets: ≥ 1, typically 2–5.)
|
|
40
|
+
|
|
41
|
+
## Reference repos read
|
|
42
|
+
|
|
43
|
+
- `research/NN-foo.md` — what we took from it.
|
|
44
|
+
- (additional external sources, if any)
|
|
45
|
+
|
|
46
|
+
## Success metrics
|
|
47
|
+
|
|
48
|
+
How will we know the phase shipped correctly? Concrete:
|
|
49
|
+
- Latency: p99 < X ms on workload Y.
|
|
50
|
+
- Test coverage: integration test Z passes against both PoC and target backend.
|
|
51
|
+
- Observability: metric `foo_total` appears in dashboards.
|
|
52
|
+
- No regression: existing tests `…/test_mcp_*.py` continue to pass.
|
|
53
|
+
|
|
54
|
+
## Rollback plan
|
|
55
|
+
|
|
56
|
+
If this phase causes a production incident:
|
|
57
|
+
- Step 1: <flip flag / pin previous digest / re-point reverse-proxy>.
|
|
58
|
+
- Step 2: <verify rollback effect via signal X>.
|
|
59
|
+
- Estimated rollback time: < N minutes.
|
|
60
|
+
|
|
61
|
+
## Open questions
|
|
62
|
+
|
|
63
|
+
Anything that needs sign-off discussion before we proceed to `phase-N-plan.md`.
|
|
64
|
+
|
|
65
|
+
## Sign-off
|
|
66
|
+
|
|
67
|
+
- [ ] Owner reviewed.
|
|
68
|
+
- [ ] Antipattern scan complete.
|
|
69
|
+
- [ ] Rollback plan validated (dry-run if non-trivial).
|
|
70
|
+
- [ ] Success metrics agreed.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## `phase-N-plan.md` skeleton
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
# Phase N plan — <short title>
|
|
77
|
+
|
|
78
|
+
**Based on:** `phase-N-research.md` (signed-off YYYY-MM-DD)
|
|
79
|
+
**Branch:** `dev/future-architecture/phase-N-<topic>`
|
|
80
|
+
|
|
81
|
+
## Day-1 checklist
|
|
82
|
+
|
|
83
|
+
What touches code or config on the first commit. Concrete:
|
|
84
|
+
- File X: refactor function Y into module Z (no behavior change).
|
|
85
|
+
- File X: introduce flag `SANDBOX_PROVIDER` default `<old behavior>`.
|
|
86
|
+
- Tests: add `tests/integration/test_phase-N_*.py`.
|
|
87
|
+
|
|
88
|
+
## Atomic tasks
|
|
89
|
+
|
|
90
|
+
(Output of `gsd-plan-phase`. Each task = one commit on the phase branch.)
|
|
91
|
+
|
|
92
|
+
| # | Task | Files | Test | Reversibility |
|
|
93
|
+
|---|---|---|---|---|
|
|
94
|
+
| 1 | … | … | … | … |
|
|
95
|
+
| 2 | … | … | … | … |
|
|
96
|
+
|
|
97
|
+
## Acceptance gate
|
|
98
|
+
|
|
99
|
+
Acceptance criteria from `roadmap.md` Phase N, repeated here verbatim. Tick each as it lands.
|
|
100
|
+
|
|
101
|
+
- [ ] …
|
|
102
|
+
- [ ] …
|
|
103
|
+
- [ ] Compose PoC still works (run from clean clone, follow `docs/INSTALL.md`).
|
|
104
|
+
- [ ] Antipatterns from Phase-N row of `antipatterns.md` still respected.
|
|
105
|
+
|
|
106
|
+
## Phase retro
|
|
107
|
+
|
|
108
|
+
Once merged, answer in 5 lines:
|
|
109
|
+
- What was harder than expected?
|
|
110
|
+
- What was easier?
|
|
111
|
+
- Did this phase reveal a flaw in an earlier phase? (If yes → file follow-up per [roadmap.md § Failure modes](./roadmap.md#failure-modes--cross-phase-retros).)
|
|
112
|
+
- Antipatterns to add to `antipatterns.md`?
|
|
113
|
+
- One-line lesson for the next phase.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Why a template
|
|
117
|
+
|
|
118
|
+
- Forces the **antipattern scan** to happen before code (Step 1 of cadence is not skippable).
|
|
119
|
+
- Forces explicit **rollback plan** before merge (Phase 6 dual-run lesson).
|
|
120
|
+
- Forces **success metrics** before code (Phase 10 "measure first" invariant).
|
|
121
|
+
- Forces a **retro** so cross-phase mistakes surface fast.
|
|
122
|
+
|
|
123
|
+
The skeleton is intentionally short — fill it in 1–2 hours, not 1–2 days.
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# External References
|
|
5
|
+
|
|
6
|
+
> Catalog of open-source projects we either build on, learn from, or explicitly reject.
|
|
7
|
+
>
|
|
8
|
+
> Each entry carries: **License**, **Language**, **Role in our stack**, optional **To research** tag.
|
|
9
|
+
> Entries tagged `to-research` are unresolved and must be evaluated during the relevant phase's research pass (see [`roadmap.md`](./roadmap.md) — per-phase research-then-sign-off cadence).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Layer 1 — Guest agents (sandbox PID 1)
|
|
14
|
+
|
|
15
|
+
### e2b-dev/infra — `envd`
|
|
16
|
+
- **URL:** https://github.com/e2b-dev/infra/tree/main/packages/envd
|
|
17
|
+
- **License:** Apache 2.0
|
|
18
|
+
- **Language:** Go
|
|
19
|
+
- **Role:** Comparison point for the L1 agent (Phase 7). API surface, gRPC streaming, image-build pipeline. Production at E2B Cloud.
|
|
20
|
+
- **Notes:** Coupled to Firecracker networking and Nomad — port API ideas, not glue. With ADR-0002 now Rust, this is a comparison reference, not a stack reference.
|
|
21
|
+
- **To research:** Phase 7.
|
|
22
|
+
|
|
23
|
+
### kata-containers / src / agent
|
|
24
|
+
- **URL:** https://github.com/kata-containers/kata-containers/tree/main/src/agent
|
|
25
|
+
- **License:** Apache 2.0
|
|
26
|
+
- **Language:** Rust
|
|
27
|
+
- **Role:** Canonical kata-agent. PID 1 patterns, vsock transport, signal handling, `PR_SET_DUMPABLE=0` hardening.
|
|
28
|
+
- **Notes:** OCI-shaped API — we want a product-aware API. Don't bolt Computer Use onto kata-agent itself.
|
|
29
|
+
- **To research:** Phase 7 (compare Rust vs Go alternatives; feeds ADR-0002).
|
|
30
|
+
|
|
31
|
+
### microsandbox / msb-agent
|
|
32
|
+
- **URL:** https://github.com/microsandbox/microsandbox
|
|
33
|
+
- **License:** Apache 2.0
|
|
34
|
+
- **Language:** Rust
|
|
35
|
+
- **Role:** Small, readable libkrun-based agent — good for learning the pattern.
|
|
36
|
+
- **Notes:** Beta as of early 2026. Not production-ready.
|
|
37
|
+
- **To research:** Phase 7 (skim for API ideas).
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Layer 2 — Sandbox runtimes
|
|
42
|
+
|
|
43
|
+
### firecracker-microvm/firecracker
|
|
44
|
+
- **URL:** https://github.com/firecracker-microvm/firecracker
|
|
45
|
+
- **License:** Apache 2.0
|
|
46
|
+
- **Language:** Rust
|
|
47
|
+
- **Role:** Smallest attack surface, fastest cold start. AWS Lambda/Fargate foundation.
|
|
48
|
+
- **Constraints:** Requires KVM + bare-metal (or nested virt). No virtio-fs, no GPU.
|
|
49
|
+
- **To research:** Phase 9 (kata-fc alternative tier).
|
|
50
|
+
|
|
51
|
+
### cloud-hypervisor/cloud-hypervisor
|
|
52
|
+
- **URL:** https://github.com/cloud-hypervisor/cloud-hypervisor
|
|
53
|
+
- **License:** Apache 2.0
|
|
54
|
+
- **Language:** Rust
|
|
55
|
+
- **Role:** Preferred microVM for Computer Use — supports virtio-fs, GPU passthrough, hot-plug. Used by AWS, Microsoft.
|
|
56
|
+
- **Constraints:** Requires KVM + bare-metal. Larger codebase (~80K LOC) than Firecracker (~50K).
|
|
57
|
+
- **To research:** Phase 9 (lead candidate for `kata-ch` tier).
|
|
58
|
+
|
|
59
|
+
### kata-containers/kata-containers
|
|
60
|
+
- **URL:** https://github.com/kata-containers/kata-containers
|
|
61
|
+
- **License:** Apache 2.0
|
|
62
|
+
- **Language:** Go + Rust
|
|
63
|
+
- **Role:** k8s-native microVM runtime. RuntimeClass-driven, installed via `kata-deploy` DaemonSet. Backends: QEMU / Firecracker / Cloud Hypervisor.
|
|
64
|
+
- **Status:** CNCF graduated.
|
|
65
|
+
- **To research:** Phase 9.
|
|
66
|
+
|
|
67
|
+
### google/gvisor
|
|
68
|
+
- **URL:** https://github.com/google/gvisor
|
|
69
|
+
- **License:** Apache 2.0
|
|
70
|
+
- **Language:** Go
|
|
71
|
+
- **Role:** Userspace kernel. Good for short-lived CPU-only scripts.
|
|
72
|
+
- **Caveat:** **Not suitable for Chromium / Computer Use** — `docs/future-architecture/architecture/04-layer2-runtimes.md` explicitly rejects gVisor for our browser workloads (compat envelope too narrow). Use for non-browser tiers only.
|
|
73
|
+
- **To research:** Phase 7 (validate as experimental tier for code-execution sandboxes).
|
|
74
|
+
|
|
75
|
+
### nestybox/sysbox
|
|
76
|
+
- **URL:** https://github.com/nestybox/sysbox
|
|
77
|
+
- **License:** Apache 2.0 (CE) / commercial (EE)
|
|
78
|
+
- **Language:** Go
|
|
79
|
+
- **Role:** User-namespace + procfs/sysfs emulation. Allows root-in-container, Docker-in-Docker without `--privileged`. Default for the current Helm chart.
|
|
80
|
+
- **Caveat:** Shares host kernel — vulnerable to kernel CVEs. Internal/trusted only.
|
|
81
|
+
- **To research:** Phase 5 (already in use — formalize as the default L2 for the k8s provider).
|
|
82
|
+
|
|
83
|
+
### opencontainers/runc
|
|
84
|
+
- **URL:** https://github.com/opencontainers/runc
|
|
85
|
+
- **License:** Apache 2.0
|
|
86
|
+
- **Language:** Go
|
|
87
|
+
- **Role:** Default dev/CI runtime. No isolation guarantees for untrusted code.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Layer 3 — Orchestration
|
|
92
|
+
|
|
93
|
+
### kubernetes-sigs/agent-sandbox
|
|
94
|
+
- **URL:** https://github.com/kubernetes-sigs/agent-sandbox
|
|
95
|
+
- **License:** Apache 2.0
|
|
96
|
+
- **Language:** Go
|
|
97
|
+
- **Role:** Basis for our future `KubernetesProvider` (Phase 5+). Provides `Sandbox`, `SandboxTemplate`, `SandboxClaim`, `SandboxWarmPool` CRDs.
|
|
98
|
+
- **Status:** v0.1.1 (early but active, backed by Google + SIG Apps). Supports gVisor (default) and Kata.
|
|
99
|
+
- **To research:** Phase 5 (mandatory deep-dive before writing K8sProvider; check CRD stability).
|
|
100
|
+
|
|
101
|
+
### e2b-dev/infra
|
|
102
|
+
- **URL:** https://github.com/e2b-dev/infra
|
|
103
|
+
- **License:** Apache 2.0
|
|
104
|
+
- **Language:** Go
|
|
105
|
+
- **Role:** Reference for egress proxy (`packages/proxy`) and template builder (`packages/template-manager`).
|
|
106
|
+
- **Caveat:** Nomad-coupled. Port ideas, don't fork wholesale.
|
|
107
|
+
- **To research:** Phases 2, 9.
|
|
108
|
+
|
|
109
|
+
### firecracker-microvm/firecracker-containerd
|
|
110
|
+
- **URL:** https://github.com/firecracker-microvm/firecracker-containerd
|
|
111
|
+
- **License:** Apache 2.0
|
|
112
|
+
- **Language:** Go
|
|
113
|
+
- **Role:** Firecracker via containerd CLI/API — intermediate option between raw FC and Kata.
|
|
114
|
+
- **To research:** Phase 9 (snapshotter pattern feeds Phase 10).
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Layer 4 — Egress proxies
|
|
119
|
+
|
|
120
|
+
### Michaelliv/agentbox
|
|
121
|
+
- **URL:** https://github.com/Michaelliv/agentbox
|
|
122
|
+
- **License:** MIT
|
|
123
|
+
- **Language:** Python (asyncio aiohttp)
|
|
124
|
+
- **Role:** Reference JWT-allowlist egress proxy (Phase 8). Working implementation — port to Go for production.
|
|
125
|
+
- **Companion blog:** https://michaellivs.com/blog/sandboxed-execution-environment/
|
|
126
|
+
- **To research:** Phase 8.
|
|
127
|
+
|
|
128
|
+
### Tecnativa/docker-socket-proxy
|
|
129
|
+
- **URL:** https://github.com/Tecnativa/docker-socket-proxy
|
|
130
|
+
- **License:** Apache 2.0
|
|
131
|
+
- **Role:** Pattern for filtering API access (HAProxy-based). Not directly useful unless legacy Docker-API consumer needs read-only access.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Local sandboxing (research only)
|
|
136
|
+
|
|
137
|
+
### anthropic-experimental/sandbox-runtime
|
|
138
|
+
- **URL:** https://github.com/anthropic-experimental/sandbox-runtime
|
|
139
|
+
- **License:** Apache 2.0 (research preview)
|
|
140
|
+
- **Language:** Rust + bubblewrap (Linux) / seatbelt (macOS)
|
|
141
|
+
- **Role:** Local-sandboxing reference. Useful patterns: FS allowlist, network restriction via seccomp BPF, macOS seatbelt profiles.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Computer Use specific
|
|
146
|
+
|
|
147
|
+
### e2b-dev/desktop
|
|
148
|
+
- **URL:** https://github.com/e2b-dev/desktop
|
|
149
|
+
- **License:** Apache 2.0
|
|
150
|
+
- **Role:** GUI desktop env (Xfce) inside sandbox, VNC/RDP patterns. Comparable to our current CDP+ttyd setup.
|
|
151
|
+
- **To research:** Phase 7 (compare Xfce/VNC vs our current CDP-only approach).
|
|
152
|
+
|
|
153
|
+
### e2b-dev/surf
|
|
154
|
+
- **URL:** https://github.com/e2b-dev/surf
|
|
155
|
+
- **License:** Apache 2.0
|
|
156
|
+
- **Role:** Computer Use agent reference — action loop, screenshot streaming.
|
|
157
|
+
|
|
158
|
+
### Browser automation
|
|
159
|
+
- **Playwright** (Microsoft, Apache 2.0) — already in our image
|
|
160
|
+
- **Puppeteer** (Google, Apache 2.0)
|
|
161
|
+
- **chromedp** (Go, MIT) — direct CDP; candidate if guest agent goes Go
|
|
162
|
+
- **fantoccini** (Rust, MIT/Apache 2.0)
|
|
163
|
+
|
|
164
|
+
For Computer Use we want direct CDP (not WebDriver) — fine-grained event injection + screencast. **To research (Phase 7):** Rust CDP options (`chromiumoxide`) vs raw CDP WebSocket passthrough in the Rust agent (per [ADR-0002](./adr/0002-guest-agent-language-go.md)).
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Explicitly rejected
|
|
169
|
+
|
|
170
|
+
### Daytona (daytonaio/daytona)
|
|
171
|
+
- **URL:** https://github.com/daytonaio/daytona
|
|
172
|
+
- **License:** AGPL v3
|
|
173
|
+
- **Reason:** AGPL contaminates downstream (incl. SaaS). Toxic for enterprise. See [ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md).
|
|
174
|
+
|
|
175
|
+
### HashiCorp Nomad
|
|
176
|
+
- **License:** BSL — not OSI-open-source as of the HashiCorp re-license.
|
|
177
|
+
- **Reason:** License-incompatible with our intended Apache-2.0 posture. Don't take a Nomad dependency. E2B's Nomad-specific code is reference-only.
|
|
178
|
+
|
|
179
|
+
### Beam.cloud
|
|
180
|
+
- **License:** Mixed (some Apache, control plane closed).
|
|
181
|
+
- **Reason:** No isolation by default (containers, not microVM); control plane closed.
|
|
182
|
+
|
|
183
|
+
### Modal
|
|
184
|
+
- **License:** Closed, managed-only.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Compatibility matrix (target combinations)
|
|
189
|
+
|
|
190
|
+
| Agent | Hypervisor / Runtime | Orchestrator | Tier / Use case |
|
|
191
|
+
|---|---|---|---|
|
|
192
|
+
| current Python entrypoint + MCP server | runc / sysbox | Docker Compose | Today's PoC (Phase 0–5) |
|
|
193
|
+
| current Python entrypoint + MCP server | sysbox | k8s (any) via our Helm chart | Phase 5 target |
|
|
194
|
+
| **future Rust agent** | sysbox | k8s | Internal/trusted tier (Phase 7) |
|
|
195
|
+
| future Rust agent | gVisor | k8s | Code-execution (non-browser) tier (Phase 7) |
|
|
196
|
+
| future Rust agent | Kata + Cloud Hypervisor | k8s | Untrusted tier — Computer Use, public (Phase 9 — requires Phase 8 egress proxy) |
|
|
197
|
+
| future Rust agent | Kata + Firecracker | k8s | Untrusted tier — fastest cold start (Phase 9 — requires Phase 8 egress proxy) |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Lambda framing
|
|
202
|
+
|
|
203
|
+
AWS Lambda recurs in this document and in the research digests (see [`research/05`](./research/05-firecracker.md)) as the design lineage behind Firecracker, behind the two-tier control split, and behind the snapshot-pool cold-start pattern we evaluate at Phase 10.
|
|
204
|
+
|
|
205
|
+
**We are not deploying on Lambda or Fargate.** Open Computer Use targets 100–10K concurrent long-lived sandboxes on Kubernetes + Kata, not 10M serverless invocations. Sessions are multi-hour and stateful; Lambda's 15-minute cap and request-shaped billing fight every assumption.
|
|
206
|
+
|
|
207
|
+
What we adopt from Lambda is **patterns**, bounded and named: (a) Firecracker as the smallest-attack-surface microVM tier, (b) two-tier control split (host router + in-guest supervisor) ported as L4↔L1 over vsock, (c) frozen-snapshot pool with block-device hot-swap as the Phase-10 cold-start optimization, (d) per-session VM isolation with no cross-tenant reuse. Everything else — the deployment substrate, the orchestrator, the billing model, the AWS product names — stays out.
|
|
208
|
+
|
|
209
|
+
This question is closed by [ADR-0010](./adr/0010-lambda-as-inspiration-not-runtime.md). Future "should we go serverless?" debates should land on that ADR and not be re-opened here.
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## License compatibility (our project)
|
|
214
|
+
|
|
215
|
+
Project license: BUSL-1.1 (per `CLAUDE.md`) with MIT for select skills.
|
|
216
|
+
|
|
217
|
+
Direct dependencies must be compatible — **safe:**
|
|
218
|
+
- Apache 2.0, MIT, BSD-2/3, MPL 2.0, LGPL 2.1+ (link only)
|
|
219
|
+
|
|
220
|
+
**Avoid:**
|
|
221
|
+
- GPL v2 / v3 (copyleft)
|
|
222
|
+
- AGPL v3 (Daytona)
|
|
223
|
+
- BSL (Nomad post-HashiCorp)
|
|
224
|
+
|
|
225
|
+
See [ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md).
|