@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,438 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Roadmap — Future Architecture Migration
|
|
5
|
+
|
|
6
|
+
> **12 phases** (Phase 0, 0.5, and 1–10), ordered to strip one blocker at a time.
|
|
7
|
+
> Every phase requires **explicit user sign-off** before code starts (see [README.md](./README.md) — research-then-sign-off cadence).
|
|
8
|
+
> Every phase carries a **research checklist** linking to the public reference repositories and to the matching digest in [`research/`](./research/).
|
|
9
|
+
|
|
10
|
+
## Non-blocking invariants ⭐ (apply to **every** phase)
|
|
11
|
+
|
|
12
|
+
These rules are how we keep the migration evolutionary. Any PR that violates them must justify it explicitly in the description or be split.
|
|
13
|
+
|
|
14
|
+
1. **PoC survival.** Docker Compose PoC keeps working after the phase ships. Acceptance tests run on both Compose AND target backend (k8s where applicable). No exception.
|
|
15
|
+
2. **Default off.** Every new behavior gates behind a feature flag (env var or template setting). Default = previous behavior. Operator opts in.
|
|
16
|
+
3. **No silent rework dependencies.** Phase N may not require a follow-up phase to "finish" a feature shipped in N. If feature X needs phase N+k to be production-ready, ship it as `X-MVP` in phase N and `X-prod` in N+k — both named.
|
|
17
|
+
4. **MCP contract frozen.** `POST /mcp` request/response wire format does not change across any phase. Internal transports may.
|
|
18
|
+
5. **Reversible by switch, not by rewrite.** Rollback = flip the flag back / pin the previous image digest. Never "revert N commits across N+1, N+2".
|
|
19
|
+
6. **Reads first, writes second.** If a phase introduces a new data store / mount / API, ship the read path before the write path. Write path stays gated until the read path is observed clean.
|
|
20
|
+
7. **Latent coupling banned.** If phase N depends on phase M (M < N) for production-readiness — even subtly — the `Depends on` line must say so explicitly. Reviewers reject anything implicit.
|
|
21
|
+
8. **Antipattern review mandatory.** Before any phase starts, scan the matching row in the [`antipatterns.md`](./antipatterns.md) phase index. Each listed antipattern is a PR-review checkpoint with our locked choice. New antipatterns discovered mid-phase are appended to [`antipatterns.md`](./antipatterns.md) — it is both the single definitive document and the index — using the same heading shape (`### A<NN> — <title>` with Status / Phase / Our choice / Rationale).
|
|
22
|
+
|
|
23
|
+
## Phase grid
|
|
24
|
+
|
|
25
|
+
| # | Name | Layer | Blocker removed | Reversibility |
|
|
26
|
+
|---|---|---|---|---|
|
|
27
|
+
| 0 | Document & decide | — | No source of truth for the target | trivially (revert docs) |
|
|
28
|
+
| **0.5** | **Architecture-doc polish (gaps from review)** | docs | Known gaps from the antipatterns doc not yet in architecture/* | trivially |
|
|
29
|
+
| 1 | `SandboxProvider` interface (Python) | L3 | Docker socket as single SoT | flip flag — additive abstraction |
|
|
30
|
+
| 2 | HTTP sandbox pool sidecar | L3 | 1:1 chat:container, no pool | feature-flag (`SANDBOX_PROVIDER`), default `docker_socket` |
|
|
31
|
+
| 3 | S3 user-data + squashfs skills (MVP, static creds) | Storage | Local-fs tenancy | per-tenant flag; static creds → prod-ready only after Phase 4 |
|
|
32
|
+
| 4 | Secret broker + key rotation | L4-precursor | Static env-injected secrets; finishes Phase 3 prod-readiness | broker flag |
|
|
33
|
+
| 5 | Helm hardening + `KubernetesProvider` | L3 | DinD-only k8s deploy | separate chart values; Compose still default |
|
|
34
|
+
| 6 | Go control plane (dual-run) | L4 | FastAPI orchestrator monolith | reverse-proxy split per route; revert by re-pointing |
|
|
35
|
+
| 7 | Rust guest agent + per-template RuntimeClass selection | L1 + L2 | Python in-image MCP server; single global runtime | new image digest; pin prior digest to roll back |
|
|
36
|
+
| **8** | **Egress proxy + audit pipeline (lands BEFORE untrusted tier)** | L4 | No egress control; foundation for untrusted tier | additive; templates without `egress_baseline` keep working |
|
|
37
|
+
| **9** | **Kata + Cloud Hypervisor for untrusted tier** | L2 | No hardware isolation (now safe because Phase 8 egress shipped) | opt-in template; sysbox stays default |
|
|
38
|
+
| 10 | Snapshot/restore + multi-region | L3 + L4 | No HA, no pause-session | additive per-template + per-deployment |
|
|
39
|
+
|
|
40
|
+
> **8 ↔ 9 reordering note.** Originally Kata (now Phase 9) shipped before egress proxy. That would have meant "hardware isolation for untrusted users, but they can still freely contact the internet" — unsafe. Egress proxy (Phase 8) is the prerequisite for any "untrusted" claim.
|
|
41
|
+
|
|
42
|
+
> **Gap inventory.** For architecture topics not yet absorbed into a phase scope (multi-tenancy beyond per-session, identity beyond OIDC, compliance frameworks, metering, DR RTO/RPO, supply chain, air-gap, versioning policy, agentic-workload edge cases, MCP ecosystem, OSS-ops), see [`gaps.md`](./gaps.md). The phase pointers there are **suggestions**, not commitments — each Tier-1 gap is expected to graduate into its own ADR / phase-research doc when it is taken up.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Phase 0 — Document & decide
|
|
47
|
+
|
|
48
|
+
**Goal.** Lock the target architecture and roadmap; produce ADRs.
|
|
49
|
+
|
|
50
|
+
**Deliverables.**
|
|
51
|
+
- This `docs/future-architecture/` tree merged to `main`.
|
|
52
|
+
- 8 ADRs accepted (ADR-0001 through ADR-0008).
|
|
53
|
+
- All public reference repositories reviewed (see README "Further reading").
|
|
54
|
+
|
|
55
|
+
**Research checklist.** N/A (this phase *is* the research synthesis).
|
|
56
|
+
|
|
57
|
+
**Acceptance.** PR merged; references list reviewed by owner.
|
|
58
|
+
|
|
59
|
+
**Sign-off gate.** Already passed — `ExitPlanMode` approval.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Phase 0.5 — Architecture-doc polish (gaps from review)
|
|
64
|
+
|
|
65
|
+
**Goal.** Patch the architecture docs with the runtime-hardening practices flagged as missing during the Phase-0 review (gaps tracked across `antipatterns.md` and `research/*`). Pure docs, no code.
|
|
66
|
+
|
|
67
|
+
**Blocker removed.** Architecture promises something the antipatterns doc says is critical, but `architecture/*` doesn't yet describe how. Phase 1 starts with mismatched contract → rework.
|
|
68
|
+
|
|
69
|
+
**Research checklist.** None — synthesis of existing pattern docs.
|
|
70
|
+
|
|
71
|
+
**Deliverables (file-by-file).** All shipped 2026-05-18.
|
|
72
|
+
- ✅ `architecture/05-layer1-guest-agent.md`: rewrote on the agent-in-microVM pattern. Auto-detected transport (vsock if `/dev/vsock`, TCP otherwise), `PR_SET_DUMPABLE=0`, `SIGCHLD` reaping, `SIGTERM`→`SIGKILL` chain, capabilities negotiation (V1/V2), dual-port API (data-plane WS + control-plane HTTP). Language flipped Go → **Rust** ([ADR-0002](./adr/0002-guest-agent-language-go.md) rewritten in place).
|
|
73
|
+
- ✅ `architecture/07-security.md`: added mandatory deny paths (`.git/hooks/*`, `.bashrc`, `.mcp.json`, `.claude/`, etc.), graceful-shutdown protocol, optional `memfd_create` (Phase 9+ defense-in-depth), and full snapstart-restore hardening (CRNG reseed, `init_on_free=1`, `CAP_SYS_RESOURCE` drop, env-scrub) — Phase 10 mandatory.
|
|
74
|
+
- ✅ `architecture/03-layer3-providers.md`: warm-pool knobs extended with `refillRate` and `maxAge`; SandboxClaim CRD spec added; environment-type dispatch matrix added.
|
|
75
|
+
- ✅ `architecture/02-layer4-control-plane.md`: no-`sessionAffinity:ClientIP` anti-pattern called out; HA upgrade strategy (scale-to-1 + blue-green); prompt-caching pass-through position recorded.
|
|
76
|
+
- ✅ `architecture/06-storage.md`: block-device tooling swap subsection added (snapshot-pool pattern, Phase 10 prereq).
|
|
77
|
+
- ✅ `architecture/08-networking.md`: multi-region workspace-proxy pattern (Coder) added as Phase-10 substrate.
|
|
78
|
+
- ✅ `architecture/10-observability.md`: RAM-based capacity-sizing formula added; SLO targets restated; distributed-tracing subsection added (traceparent across L4 → L3 → L1, audit-event linkage).
|
|
79
|
+
- ✅ `architecture/04-layer2-runtimes.md`: nydus snapshotter mention added; virtio-fs vs 9p CH/FC asymmetry resolved; Firecracker / Lambda lineage paragraph added with cross-link to [ADR-0010](./adr/0010-lambda-as-inspiration-not-runtime.md).
|
|
80
|
+
- ✅ `antipatterns.md`: referenced from the new layer additions; no new entries surfaced — all gaps mapped to existing A/C IDs.
|
|
81
|
+
- ✅ New runtime design notes landed for the L1 agent, snapshot-pool, and session-agent split (kept local).
|
|
82
|
+
- ✅ ADR updates: ADR-0002 rewritten (Go → Rust), ADR-0008 Phase 7 gate tightened, ADR-0001 gained a Phase 6 re-evaluation gate, new ADR-0010 (Lambda framing) landed.
|
|
83
|
+
|
|
84
|
+
**Acceptance.**
|
|
85
|
+
- ✅ Each architecture/* doc cross-references the matching `research/NN-*.md`.
|
|
86
|
+
- ✅ The antipatterns doc remains aligned; no new IDs needed.
|
|
87
|
+
- ✅ ADR-0002 rewritten, ADR-0008 + ADR-0001 amended, ADR-0010 added — recorded in the polish PR.
|
|
88
|
+
|
|
89
|
+
**Reversibility.** Pure docs — flip via `git revert`.
|
|
90
|
+
|
|
91
|
+
**Depends on.** Phase 0.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Phase 1 — `SandboxProvider` interface (Python)
|
|
96
|
+
|
|
97
|
+
**Goal.** Extract `computer-use-server/docker_manager.py` behind a `SandboxProvider` Protocol. `DockerSocketProvider` is the only implementation. Tests unchanged.
|
|
98
|
+
|
|
99
|
+
**Blocker removed.** Direct `docker.client` calls scattered across `app.py` / `docker_manager.py` / cleanup cron. Future providers (HTTP pool, k8s) can't exist without this seam.
|
|
100
|
+
|
|
101
|
+
**Research checklist (mandatory before code).**
|
|
102
|
+
- `github.com/kubernetes-sigs/agent-sandbox, api/` — read CRD shapes to inform `SandboxTemplate`, `SandboxHandle` types.
|
|
103
|
+
- `github.com/e2b-dev/infra, packages/orchestrator/` — E2B's provider-like layer in Go; port API shape to Python.
|
|
104
|
+
- `github.com/kata-containers/kata-containers, src/agent/` — note OCI-shape we explicitly *don't* want to copy.
|
|
105
|
+
- Output: `phase-1-research.md` summarizing the chosen interface + alternatives.
|
|
106
|
+
|
|
107
|
+
**Acceptance.**
|
|
108
|
+
- `tests/integration/test_mcp_*.py` pass unchanged.
|
|
109
|
+
- `grep -r 'docker\.' computer-use-server/app.py` returns 0 matches (all behind the provider).
|
|
110
|
+
- New `computer-use-server/providers/__init__.py` and `providers/docker_socket.py`.
|
|
111
|
+
|
|
112
|
+
**Reversibility.** Pure additive abstraction. Roll back by re-inlining provider methods.
|
|
113
|
+
|
|
114
|
+
**Depends on.** Phase 0.5 (gaps in `architecture/03-layer3-providers.md` patched first).
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Phase 2 — HTTP sandbox pool sidecar
|
|
119
|
+
|
|
120
|
+
**Goal.** Move Docker-socket access out of the orchestrator process into a small `pool-manager` sidecar that speaks HTTP to the orchestrator. Warm-pool skeleton lands (`minSize=0` default = no behavior change).
|
|
121
|
+
|
|
122
|
+
**Blocker removed.** 1:1 chat:container; no warm pool; orchestrator holds the Docker socket privilege.
|
|
123
|
+
|
|
124
|
+
**Research checklist.**
|
|
125
|
+
- `github.com/e2b-dev/infra, packages/orchestrator/` — E2B's pool semantics.
|
|
126
|
+
- `github.com/kubernetes-sigs/agent-sandbox, api/sandbox/v1alpha1/sandboxwarmpool_types.go` — CRD field set.
|
|
127
|
+
- `github.com/microsandbox/microsandbox` — single-node daemon REST API for inspiration.
|
|
128
|
+
- Output: `phase-2-research.md` — HTTP API spec for pool-manager + warm-pool semantics.
|
|
129
|
+
|
|
130
|
+
**Acceptance.**
|
|
131
|
+
- New `pool-manager/` service in `docker-compose.yml`, optional via Compose profile (`COMPOSE_PROFILES=pool` or default-off service).
|
|
132
|
+
- `HTTPPoolProvider` is the second `SandboxProvider` impl; feature-flagged via env (`SANDBOX_PROVIDER=docker_socket|http_pool`). **Default = `docker_socket`** so the Compose PoC keeps working unchanged.
|
|
133
|
+
- Orchestrator container **may continue mounting `/var/run/docker.sock`** under the default provider; socket binding becomes pool-manager-only once an operator flips `SANDBOX_PROVIDER=http_pool`.
|
|
134
|
+
- Integration tests run against **both** providers in CI; PoC test path stays on `docker_socket`.
|
|
135
|
+
|
|
136
|
+
**Reversibility.** Feature flag. Default stays `docker_socket` until parity is proven over at least one minor release.
|
|
137
|
+
|
|
138
|
+
**Depends on.** Phase 1.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Phase 3 — S3 user-data + squashfs skills (MVP with static creds)
|
|
143
|
+
|
|
144
|
+
**Goal.** Replace `/tmp/computer-use-data` filesystem with S3-compatible object storage. Package skills as content-addressed squashfs blobs. **MVP only** — static creds are acceptable here; per-session STS tokens land in Phase 4 and gate production-readiness for the S3 mount.
|
|
145
|
+
|
|
146
|
+
**Blocker removed.** Local-fs tenancy (single-node ceiling), zip-based skill cache, no immutability contract for skills.
|
|
147
|
+
|
|
148
|
+
**Prod-readiness boundary.** Phase 3 ships **`S3-MVP`** (works locally / single-tenant, static creds). The **`S3-prod`** label only attaches after Phase 4 (secret broker) is integrated. Don't call S3 storage "production-ready for multi-tenant" until Phase 4 ships.
|
|
149
|
+
|
|
150
|
+
**Research checklist.**
|
|
151
|
+
- `github.com/e2b-dev/infra, packages/template-manager/` — E2B's image+template build pipeline.
|
|
152
|
+
- `github.com/e2b-dev/desktop` and `github.com/e2b-dev/surf` — see how E2B's Computer Use stack handles user data flow.
|
|
153
|
+
- FUSE mount choice: `rclone mount` vs `mountpoint-s3` vs `geesefs` — fetch each project's `README` + write semantics doc.
|
|
154
|
+
- Output: `phase-3-research.md` — chosen S3 client, FUSE mount, squashfs build recipe.
|
|
155
|
+
|
|
156
|
+
**Acceptance.**
|
|
157
|
+
- MinIO container in `docker-compose.yml`.
|
|
158
|
+
- `S3_*` env vars wired; per-tenant bucket layout documented.
|
|
159
|
+
- FUSE sidecar in compose; sandbox mounts `/mnt/user-data` from S3.
|
|
160
|
+
- Skill build target produces `.squashfs` artifacts, uploaded to bucket on release.
|
|
161
|
+
- Sandbox image no longer carries `/usr/local/share/skills/` baked in.
|
|
162
|
+
|
|
163
|
+
**Reversibility.** Partial. Data migration script provided (`tmp → s3`). Old skills bake-in path keeps working until removed.
|
|
164
|
+
|
|
165
|
+
**Depends on.** Phase 2 (provider passes mount spec).
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Phase 4 — Secret broker + key rotation
|
|
170
|
+
|
|
171
|
+
**Goal.** Introduce L4 secret broker pattern. Anthropic / GitLab / S3 creds become short-lived and rotatable without restart.
|
|
172
|
+
|
|
173
|
+
**Blocker removed.** Static env-injected secrets; restart-on-rotation; full-lifetime credential exposure inside sandbox.
|
|
174
|
+
|
|
175
|
+
**Research checklist.**
|
|
176
|
+
- `github.com/anthropic-experimental/sandbox-runtime` — Anthropic's local sandbox: env injection patterns.
|
|
177
|
+
- `github.com/e2b-dev/infra, packages/proxy/` — E2B's egress-proxy + token signing.
|
|
178
|
+
- AWS STS docs for per-session token scoping (external standard docs).
|
|
179
|
+
- Output: `phase-4-research.md` — broker API, rotation schedule, STS bucket policy template.
|
|
180
|
+
|
|
181
|
+
**Acceptance.**
|
|
182
|
+
- New `secret_broker` module in orchestrator; provider's `configure(handle, ctx)` carries per-session creds (not env at create-time).
|
|
183
|
+
- Rotation: `POST /admin/rotate?kind=anthropic` triggers re-`configure` of all live sandboxes without restart.
|
|
184
|
+
- `tests/integration/test_secret_rotation.py` proves restart-free rotation.
|
|
185
|
+
|
|
186
|
+
**Reversibility.** Static-env path kept as fallback behind a flag for one release.
|
|
187
|
+
|
|
188
|
+
**Depends on.** Phase 2 explicitly — **HTTP provider transport is required for per-session credential injection**. The broker mints creds and delivers them via `configure(handle, ctx)` on each session-spawn. In-process `configure` (pre-Phase-2) works for unit tests but cannot deliver per-session creds across the network boundary that production needs.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Phase 5 — Helm hardening + `KubernetesProvider`
|
|
193
|
+
|
|
194
|
+
**Goal.** Real `KubernetesProvider` (Python `kubernetes-asyncio`). Helm chart switches from DinD-in-pod to per-pod sandboxes orchestrated via the provider. NetworkPolicy default-deny, ResourceQuota, empty-RBAC ServiceAccount.
|
|
195
|
+
|
|
196
|
+
**Blocker removed.** DinD-only k8s deploy; no real k8s tenancy isolation.
|
|
197
|
+
|
|
198
|
+
**Research checklist.**
|
|
199
|
+
- `github.com/kubernetes-sigs/agent-sandbox` — controller patterns, CRD lifecycle, warm-pool implementation.
|
|
200
|
+
- `github.com/kata-containers/kata-containers, tools/packaging/kata-deploy/` — DaemonSet pattern (preview for Phase 8).
|
|
201
|
+
- `github.com/nestybox/sysbox` — RuntimeClass registration (default L2 for this phase).
|
|
202
|
+
- Output: `phase-5-research.md` — whether to vendor `agent-sandbox` CRDs or fork, NetworkPolicy template, RBAC matrix.
|
|
203
|
+
|
|
204
|
+
**Acceptance.**
|
|
205
|
+
- `KubernetesProvider` shipped; passes integration suite against `kind` cluster in CI.
|
|
206
|
+
- Helm chart: NetworkPolicy default-deny per tenant namespace, `ResourceQuota` + `LimitRange`, empty-RBAC `ServiceAccount`.
|
|
207
|
+
- DinD sidecar removed from chart.
|
|
208
|
+
- `tests/integration/test_mcp_*.py` pass on **both** kind/k3d cluster (with `KubernetesProvider`) **and** local Compose (with `DockerSocketProvider`). CI runs both paths and fails the PR if either regresses.
|
|
209
|
+
|
|
210
|
+
**Reversibility.** Old Helm values preserved as `values-legacy-dind.yaml` for one release.
|
|
211
|
+
|
|
212
|
+
**Depends on.** Phases 1, 4. (Phase 4 must ship first because the k8s chart's `Secret` template references the broker; without the broker, secrets stay static and the k8s deployment is not production-multi-tenant — only single-tenant PoC.)
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Phase 6 — Go control plane (greenfield)
|
|
217
|
+
|
|
218
|
+
**Goal.** New L4 service in Go. Replaces Python `computer-use-server`. OIDC, session router, MCP gateway, admin UI scaffold, secret broker, audit log emission.
|
|
219
|
+
|
|
220
|
+
**Blocker removed.** Python FastAPI monolith; weak streaming concurrency; no admin UI.
|
|
221
|
+
|
|
222
|
+
**🛑 Hard sign-off gate.** This is the **first greenfield rewrite**. User must explicitly approve `phase-6-research.md` before code starts. **The dual-run strategy section (see below) is part of the gate** — without it, "partial reversibility" is fiction.
|
|
223
|
+
|
|
224
|
+
**Research checklist.**
|
|
225
|
+
- `github.com/coder/coder` — Go control plane at scale; auth, sessions, audit. Closest production reference. See [`research/03-coder.md`](./research/03-coder.md).
|
|
226
|
+
- `github.com/e2b-dev/infra, packages/api/` — E2B's API shape in Go.
|
|
227
|
+
- `github.com/kubernetes-sigs/agent-sandbox, cmd/` and `github.com/kubernetes-sigs/agent-sandbox, pkg/` — Go controller patterns.
|
|
228
|
+
- `github.com/chromedp/chromedp` — CDP handling on the wire (relevant for L4's CDP proxy duties); see [`research/07-chromedp.md`](./research/07-chromedp.md) §9 — L4 should **not** parse CDP, just shovel WS frames.
|
|
229
|
+
- Go web framework choice: stdlib `net/http` vs `chi` vs `connect-go` vs `gin` — write a comparison. **Note: [ADR-0008](./adr/0008-internal-grpc-external-rest-mcp.md) makes `connect-go` the lead candidate for internal RPCs; this research item is now about external/admin REST + ingress routing, not the internal transport.**
|
|
230
|
+
- MCP-on-Go: roll-our-own JSON-RPC vs SDK (check maturity).
|
|
231
|
+
- KV choice: Redis vs Valkey vs etcd.
|
|
232
|
+
- **Dual-run strategy section** — mandatory in research doc:
|
|
233
|
+
- (a) KV schema — versioned, shared by Python+Go during cutover.
|
|
234
|
+
- (b) Write ownership — Python keeps creating sessions; Go reads first, creates only after parity proven (Read-path-before-write-path invariant).
|
|
235
|
+
- (c) Reverse-proxy route split — which routes go to Go first (start with `/healthz`, then read-only admin, then `/mcp`).
|
|
236
|
+
- (d) Rollback checklist — flip reverse-proxy weights back; drain Go sessions cleanly.
|
|
237
|
+
- (e) Max dual-run window — propose 2 weeks; longer = stale-session risk.
|
|
238
|
+
- **HA-replica upgrade strategy** — at production scale we'll run multiple L4 replicas. Document scale-to-1-for-migration pattern (see [`research/03-coder.md`](./research/03-coder.md) §7-adjacent guidance).
|
|
239
|
+
- **Blue-green deployment runbook** — zero-downtime upgrade for stateful L4.
|
|
240
|
+
- Output: `phase-6-research.md` — web stack, framework, k8s client, KV, MCP impl, streaming transport, admin UI stack, dual-run plan, HA upgrade strategy.
|
|
241
|
+
|
|
242
|
+
**Acceptance.**
|
|
243
|
+
- New Go service runs alongside Python; reverse proxy splits traffic by route.
|
|
244
|
+
- Integration suite (`tests/integration/test_mcp_*.py`) passes against Go endpoint unchanged.
|
|
245
|
+
- Admin UI MVP: list sessions, kill, rotate secret, view audit.
|
|
246
|
+
- Python service marked deprecated; removal scheduled.
|
|
247
|
+
|
|
248
|
+
**Reversibility.** Dual-run during cutover; revert by flipping reverse-proxy weights back to Python. **The dual-run strategy section in `phase-6-research.md` is the contract** — without that doc signed off, "reversibility" is not real.
|
|
249
|
+
|
|
250
|
+
**Depends on.** Phases 1–5 complete (or at least: 1, 4, 5).
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Phase 7 — Rust guest agent + RuntimeClass selection per template
|
|
255
|
+
|
|
256
|
+
**Goal.** Replace today's Python entrypoint + in-image MCP server with a Rust static binary as PID 1 (per [ADR-0002](./adr/0002-guest-agent-language-go.md), rewritten 2026-05-18). Templates gain `runtime_class` selection; gVisor lands as experimental for code-exec sandboxes.
|
|
257
|
+
|
|
258
|
+
**Blocker removed.** Python in-image agent = big attack surface, no vsock readiness, blocks microVM. Single global runtime = no tiering.
|
|
259
|
+
|
|
260
|
+
**🛑 Hard sign-off gate.** **Owner approves research AND confirms either (a) Go is correct OR (b) ADR-0002 is superseded with a Rust ADR.** The 4 questions from [ADR-0002](./adr/0002-guest-agent-language-go.md) §"Decision gate" must each be answered explicitly in `phase-7-research.md`.
|
|
261
|
+
|
|
262
|
+
**Research checklist.**
|
|
263
|
+
- `github.com/kata-containers/kata-containers, src/agent/` — PID 1 patterns, signal handling, `PR_SET_DUMPABLE=0`, vsock listener, zombie reaping. See [`research/01-kata-containers.md`](./research/01-kata-containers.md).
|
|
264
|
+
- `github.com/e2b-dev/infra, packages/envd/` — Go agent API surface and streaming. See [`research/02-e2b-infra.md`](./research/02-e2b-infra.md) §3.
|
|
265
|
+
- `github.com/microsandbox/microsandbox` — minimal libkrun integration patterns.
|
|
266
|
+
- `github.com/anthropic-experimental/sandbox-runtime` — bubblewrap / seccomp BPF (secondary-defense inside VM).
|
|
267
|
+
- `github.com/chromedp/chromedp` — chromedp vs raw CDP WebSocket for the agent. See [`research/07-chromedp.md`](./research/07-chromedp.md).
|
|
268
|
+
- `github.com/kubernetes-sigs/agent-sandbox` — `RuntimeClass` plumbing.
|
|
269
|
+
- **ADR-0002 re-evaluation gate (mandatory section).** Answer:
|
|
270
|
+
1. Concrete RCE attack-surface of Go HTTP/WS server inside sandbox — real exposure or theoretical?
|
|
271
|
+
2. Binary-size delta with optimizers tuned (Go `-s -w -trimpath` vs Rust LTO).
|
|
272
|
+
3. CDP / Chromium driving cost in Rust (no chromedp equivalent — write our own or use less-mature crate?).
|
|
273
|
+
4. Owner's honest assessment of Rust productivity *as of Phase-7 start*.
|
|
274
|
+
Each answer feeds the sign-off. If answers favor Rust → propose ADR-0002 supersession in the same PR; do not start Go code.
|
|
275
|
+
- Output: `phase-7-research.md` — chromedp vs raw CDP decision; vsock-first / TCP-fallback auto-detect algorithm (commit to it, not just "vsock-ready"); dual-port (data+control) API spec; ADR-0002 gate answers; **connect-go-over-vsock feasibility check** ([ADR-0008](./adr/0008-internal-grpc-external-rest-mcp.md)).
|
|
276
|
+
|
|
277
|
+
**Acceptance.**
|
|
278
|
+
- New `agent/` Go module produces a static binary.
|
|
279
|
+
- Image rebuilt; entrypoint = `/usr/local/bin/sandbox-agent`.
|
|
280
|
+
- Provider templates carry `runtime_class`: `runc`, `sysbox`, `gvisor`.
|
|
281
|
+
- All existing MCP tools (bash/python/file/sub_agent) work via the new agent.
|
|
282
|
+
- **`POST /mcp` wire format unchanged** — same `tests/integration/test_mcp_*.py` pass against the new agent without modification (MCP-contract-frozen invariant).
|
|
283
|
+
- Performance: cold-start budget within our targets (sysbox ≤ 100 ms agent-ready).
|
|
284
|
+
- Dual-port API live: data plane (WS) + control plane (HTTP) — config rotation works without dropping streams.
|
|
285
|
+
|
|
286
|
+
**Reversibility.** New image tag; rollback by pinning prior image digest. (No data migration; agent is stateless.)
|
|
287
|
+
|
|
288
|
+
**Depends on.** Phase 6. Independent of Phase 8.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Phase 8 — Egress proxy + audit pipeline ⚠️ (was Phase 9 — moved earlier)
|
|
293
|
+
|
|
294
|
+
**Goal.** JWT-allowlist egress proxy; structured audit pipeline with 90-day retention. **This is the foundation for any "untrusted-tier" claim — Phase 9 (Kata) cannot ship before this.**
|
|
295
|
+
|
|
296
|
+
**Blocker removed.** No L4/L7 egress control; logs scattered; no compliance-grade audit. Also: prerequisite for safely opening sandboxes to untrusted users.
|
|
297
|
+
|
|
298
|
+
**Research checklist.**
|
|
299
|
+
- `github.com/Michaelliv/agentbox` — full working JWT-allowlist proxy in Python. See [`research/09-agentbox.md`](./research/09-agentbox.md). Port to Go for production.
|
|
300
|
+
- `github.com/e2b-dev/infra, packages/proxy/` — E2B's egress in Go; production scale. See [`research/02-e2b-infra.md`](./research/02-e2b-infra.md) §6 — three-port pattern (HTTP / TLS / other) is complementary to JWT auth.
|
|
301
|
+
- `github.com/Tecnativa/docker-socket-proxy` — see [`research/12-docker-socket-proxy.md`](./research/12-docker-socket-proxy.md) for the "filter before privileged API" pattern.
|
|
302
|
+
- DNS strategy: separate kube-dns vs proxy-resolves (decide in research doc).
|
|
303
|
+
- **Audit sink** — S3 + object-lock vs Loki vs both. Schema versioning. 90-day immutable retention.
|
|
304
|
+
- Output: `phase-8-research.md` — proxy implementation choice (port agentbox vs fork E2B vs compose-with-three-port-firewall), audit sink, DNS strategy, JWT refresh-token endpoint for sessions > 4 h.
|
|
305
|
+
|
|
306
|
+
**Acceptance.**
|
|
307
|
+
- Egress proxy deployed in `egress` namespace; sandbox egress goes through it.
|
|
308
|
+
- NetworkPolicy: sandbox can reach only proxy + kube-dns.
|
|
309
|
+
- L4 mints per-session JWTs; proxy validates signature + expiry + allowed_hosts on every request.
|
|
310
|
+
- Audit pipeline: events from L1/L3/L4 + egress proxy land in immutable sink with ≥ 90 d retention.
|
|
311
|
+
- **Templates without `egress_baseline` keep working** — egress allowlist is opt-in per template (matches Phase 5 sysbox internal-tier templates that may not need it).
|
|
312
|
+
|
|
313
|
+
**Reversibility.** Feature-flagged on the template level (template w/o egress allowlist = no egress controls applied, falls back to existing NetworkPolicy default-deny).
|
|
314
|
+
|
|
315
|
+
**Depends on.** Phases 5, 6.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Phase 9 — Kata + Cloud Hypervisor for untrusted tier ⚠️ (was Phase 8 — moved later)
|
|
320
|
+
|
|
321
|
+
**Goal.** Hardware-grade isolation for public/untrusted Computer Use sessions. Multi-tier templates wired end-to-end. **Untrusted-tier templates require Phase 8 egress proxy to be in place** — otherwise an untrusted user inside a hypervisor still has unrestricted internet, which violates the "untrusted" claim.
|
|
322
|
+
|
|
323
|
+
**Blocker removed.** No hardware isolation; can't safely run untrusted users **(safely = Kata isolation + egress control from Phase 8 both present)**.
|
|
324
|
+
|
|
325
|
+
**Research checklist.**
|
|
326
|
+
- `github.com/cloud-hypervisor/cloud-hypervisor` — REST API on unix socket, virtio-fs mount, vsock setup. See [`research/04-cloud-hypervisor.md`](./research/04-cloud-hypervisor.md).
|
|
327
|
+
- `github.com/firecracker-microvm/firecracker` and `github.com/firecracker-microvm/firecracker-containerd` — alternative path; snapshotting for fast cold start. See [`research/05-firecracker.md`](./research/05-firecracker.md) (especially the jailer pattern), [`research/11-firecracker-containerd.md`](./research/11-firecracker-containerd.md) (demux snapshotter).
|
|
328
|
+
- `github.com/kata-containers/kata-containers` — full kata + CH integration; kata-deploy DaemonSet. See [`research/01-kata-containers.md`](./research/01-kata-containers.md).
|
|
329
|
+
- **nydus snapshotter / lazy image loading** — relevant when per-template images differ.
|
|
330
|
+
- Bare-metal node pool sizing (our capacity formula → already pulled into `architecture/10-observability.md` in Phase 0.5).
|
|
331
|
+
- Output: `phase-9-research.md` — `kata-ch` vs `kata-fc` for our workload, bare-metal node sizing, RuntimeClass install steps, snapshotter choice (devmapper / nydus).
|
|
332
|
+
|
|
333
|
+
**Acceptance.**
|
|
334
|
+
- Reference deploy on RKE2 with bare-metal node pool runs `kata-ch` template successfully.
|
|
335
|
+
- Computer Use session on `kata-ch` template — CDP frame rate ≥ 10 fps; cold start p99 < 2 s (warm pool refilling).
|
|
336
|
+
- Helm chart documents bare-metal pool requirement.
|
|
337
|
+
- **Untrusted templates carry `egress_baseline` and are rejected by admission if Phase 8 proxy is not deployed.**
|
|
338
|
+
|
|
339
|
+
**Reversibility.** Templates are opt-in; sysbox tier remains default. Roll back by removing the `kata-*` templates and the bare-metal node pool.
|
|
340
|
+
|
|
341
|
+
**Depends on.** Phases 5, 7, **8**. Phase 8 is a hard prerequisite — without it, no template can be labelled "untrusted".
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Phase 10 — Snapshot/restore + HA (single-region) + multi-region foundations
|
|
346
|
+
|
|
347
|
+
**Goal.** Cloud Hypervisor snapshot/restore for pause-resume sessions. Single-region HA for L4 control plane. **Multi-region** is scoped as foundations only — the multi-region production deployment is a follow-up milestone.
|
|
348
|
+
|
|
349
|
+
**Scope (explicit).**
|
|
350
|
+
- ✅ In scope: pause/resume via snapshot/restore; L4 multi-AZ HA in **one region**; KV replicated across AZs; pod-failure mid-session → resume on a different pod via snapshot (not via in-memory affinity).
|
|
351
|
+
- ❌ Out of scope (deferred to a follow-up milestone): cross-region active-active routing, cross-region failover, latency-routed workspace proxies (see `architecture/08-networking.md` "Multi-region proxy pattern" — substrate is documented in Phase 0.5 but the implementation is Phase 11+).
|
|
352
|
+
|
|
353
|
+
**Blocker removed.** No HA, no pause-session, no cross-AZ pod-failure resilience.
|
|
354
|
+
|
|
355
|
+
**Research checklist.**
|
|
356
|
+
- `github.com/cloud-hypervisor/cloud-hypervisor` — snapshot/restore API.
|
|
357
|
+
- `github.com/firecracker-microvm/firecracker` — Firecracker snapshot for comparison.
|
|
358
|
+
- `github.com/firecracker-microvm/firecracker-containerd` — demux snapshotter for COW rootfs (fast restore) — see [`research/11-firecracker-containerd.md`](./research/11-firecracker-containerd.md) §1.
|
|
359
|
+
- Multi-region: KV replication (Redis cluster / etcd multi-DC) — standard docs.
|
|
360
|
+
- **Post-restore hardening checklist** — kernel CRNG reseed on VM fork, `init_on_free=1`, `CAP_SYS_RESOURCE` drop (standard snapshot-restore hardening; internal design note).
|
|
361
|
+
- Output: `phase-10-research.md` — snapshot frequency policy; pod-failure mid-session → snapshot-then-restore-elsewhere flow; backup/DR.
|
|
362
|
+
|
|
363
|
+
**Acceptance.**
|
|
364
|
+
- Pause-resume Computer Use session demonstrably faster than cold start (target: ≤ 50 % of cold-start time).
|
|
365
|
+
- Multi-AZ L4 deployment; KV replicated across AZs.
|
|
366
|
+
- **Pod failure mid-session in multi-AZ setup → session resumes on a different pod via snapshot**, not via "lucky session affinity". Demonstrated end-to-end.
|
|
367
|
+
- Post-restore hardening checklist implemented (CRNG reseed, init_on_free, CAP_SYS_RESOURCE drop).
|
|
368
|
+
- DR runbook covers single-AZ outage.
|
|
369
|
+
|
|
370
|
+
**Reversibility.** Snapshot feature opt-in via template; multi-AZ topology opt-in via deployment values.
|
|
371
|
+
|
|
372
|
+
**Depends on.** Phases 6, 9.
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## How the loop works (per phase)
|
|
377
|
+
|
|
378
|
+
1. **Research** — investigate the listed public reference repos + external docs. Produce `phase-N-research.md` under this directory.
|
|
379
|
+
2. **Discuss + sign off** — present `phase-N-research.md` to owner; iterate; lock the decisions.
|
|
380
|
+
3. **Plan** — invoke `gsd-plan-phase` to break the phase into atomic tasks.
|
|
381
|
+
4. **Execute** — implement on a `dev/future-architecture/phase-N-*` branch.
|
|
382
|
+
5. **Verify** — acceptance criteria from this doc.
|
|
383
|
+
6. **Merge** — PR into `dev/future-architecture` (default) or `main` (if independently shippable).
|
|
384
|
+
|
|
385
|
+
See [README.md](./README.md) — Branching strategy. See [`phase-template.md`](./phase-template.md) for the exact `phase-N-research.md` / `phase-N-plan.md` skeletons.
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## Failure modes & cross-phase retros
|
|
390
|
+
|
|
391
|
+
What to do when Phase N reveals that Phase M (M < N) was wrong. Tracks the "non-blocking" invariant by making mid-flight corrections cheap.
|
|
392
|
+
|
|
393
|
+
### Detection signals
|
|
394
|
+
|
|
395
|
+
A phase has uncovered an upstream flaw when any of these appear:
|
|
396
|
+
- Phase N's research doc explicitly cannot fit within the existing interface from Phase M (e.g. Phase 5 finds the `SandboxProvider` signature from Phase 1 forces an awkward k8s impl).
|
|
397
|
+
- Phase N's plan needs to modify files outside its declared scope.
|
|
398
|
+
- A previously-merged acceptance test starts failing in Phase N.
|
|
399
|
+
- The same antipattern gets re-introduced — meaning the lock from Phase M wasn't actually load-bearing.
|
|
400
|
+
|
|
401
|
+
### Response menu (pick one, document in `phase-N-research.md`)
|
|
402
|
+
|
|
403
|
+
| Severity | Response | When to pick |
|
|
404
|
+
|---|---|---|
|
|
405
|
+
| **A. Patch in place** | Add a small fix to the deliverables of Phase N. No new phase. | Flaw is local; fix < 1 day; no contract change. |
|
|
406
|
+
| **B. Insert Phase M.5** | New phase ships before Phase N continues. Sized like Phase 0.5: docs + 1–2 small code changes. | Contract change affects ≤ 2 downstream files; you can pause Phase N for a sprint. |
|
|
407
|
+
| **C. Supersede ADR** | New ADR records the reversal; old one marked Superseded. Phase N still ships; new ADR drives future work. | Decision was wrong; code already shipped on the old decision; replacing it now is too expensive. |
|
|
408
|
+
| **D. Accept as known debt** | Document in `architecture/11-known-debt.md` (create if missing); flag phase that will repay. | Cost of fix > value; future phase will rewrite the area anyway. |
|
|
409
|
+
|
|
410
|
+
### Forbidden response
|
|
411
|
+
|
|
412
|
+
- **Silently rework upstream code mid-phase.** If Phase 5 touches Phase-1-shipped files without one of A/B/C/D being chosen → rejected at PR review. The cross-phase decision must be explicit.
|
|
413
|
+
|
|
414
|
+
### Worked example (hypothetical)
|
|
415
|
+
|
|
416
|
+
> Phase 5 (k8s provider) research finds that `SandboxProvider.Exec` returns `stream<bytes>` but k8s `connect_get_namespaced_pod_exec` returns paired `stdout` + `stderr`. Patching in place (A) would break the `.proto`. Inserting Phase 4.5 (B) adds an `Exec` v2 returning `stream<ExecChunk{kind, bytes}>` with old and new served simultaneously. Old marked deprecated; Phase 6 drops the old after Go control plane lands.
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Rollback runbook (per phase)
|
|
421
|
+
|
|
422
|
+
One-paragraph "if this phase causes a prod incident, here is the rollback". Each phase's own `phase-N-research.md` carries the detailed version per [`phase-template.md`](./phase-template.md); this is the index.
|
|
423
|
+
|
|
424
|
+
| Phase | Rollback in ≤ N minutes | Mechanism |
|
|
425
|
+
|---|---|---|
|
|
426
|
+
| 0.5 | < 5 | `git revert` the docs commit |
|
|
427
|
+
| 1 | < 10 | Re-inline provider methods; provider abstraction is additive — old call sites still exist for one release |
|
|
428
|
+
| 2 | < 2 | Flip `SANDBOX_PROVIDER=docker_socket` (default already this) |
|
|
429
|
+
| 3 | < 30 | Disable S3 mount in template; FUSE sidecar removed; orchestrator falls back to local-FS bind |
|
|
430
|
+
| 4 | < 5 | Flip `SECRET_BROKER=static`; fall back to env-at-create-time |
|
|
431
|
+
| 5 | < 30 | Helm `--set runtime.legacy=true` reactivates `values-legacy-dind.yaml` |
|
|
432
|
+
| 6 | < 5 | Reverse-proxy weights → 100 % Python; Go service idle, sessions drain to Python |
|
|
433
|
+
| 7 | < 5 | Pin previous image digest in template `image.ref` |
|
|
434
|
+
| 8 | < 2 | Template's `egress_baseline` deleted → NetworkPolicy default-deny still applies but proxy bypassed |
|
|
435
|
+
| 9 | < 10 | Untrusted templates marked `disabled: true`; sysbox tier still default |
|
|
436
|
+
| 10 | < 30 | Snapshot opt-in flipped off; multi-AZ remains but no snapshot/restore |
|
|
437
|
+
|
|
438
|
+
If a rollback can't fit its target window → the phase shipped wrong; the next phase's first deliverable is to shrink the window.
|