@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,100 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 01 — Kata Containers (Rust agent + kata-deploy)
|
|
5
|
+
|
|
6
|
+
> Source: [kata-containers/kata-containers](https://github.com/kata-containers/kata-containers) (Rust PID 1 agent + k8s DaemonSet for installing Kata on nodes).
|
|
7
|
+
> Relevant to Phase 7 (Go guest agent — port these patterns) and Phase 9 (Kata + Cloud Hypervisor for untrusted tier).
|
|
8
|
+
|
|
9
|
+
## 1. PID 1 — Subreaper + async `SIGCHLD` loop
|
|
10
|
+
|
|
11
|
+
- **What it does.** Register as subreaper via `prctl(PR_SET_SUBREAPER, 1)`, then await `SIGCHLD` in a tokio loop; on each signal call `waitpid(-1, WNOHANG | __WALL)` under a lock to reap orphans while keeping a sandbox-owned process map consistent.
|
|
12
|
+
- **Where.** `src/agent/src/signal.rs:9-122` (full file). `set_subreaper(true)` at line 95; `handle_sigchild()` loop at lines 21–86; signal setup at 88–122.
|
|
13
|
+
- **Port to Go.**
|
|
14
|
+
1. `unix.Prctl(unix.PR_SET_SUBREAPER, 1, 0, 0, 0)` at startup.
|
|
15
|
+
2. `signal.Notify(ch, syscall.SIGCHLD)`.
|
|
16
|
+
3. Loop with `syscall.Wait4(-1, &wstatus, syscall.WNOHANG|syscall.WALL, nil)`.
|
|
17
|
+
4. Track exits in the agent's process map.
|
|
18
|
+
- **Skip.** Kata's `WAIT_PID_LOCKER` is container-runtime specific; our product lifecycle differs.
|
|
19
|
+
|
|
20
|
+
## 2. vsock listener — `AddressFamily::Vsock` + stream binding
|
|
21
|
+
|
|
22
|
+
- **What it does.** Bind `AF_VSOCK` on port N, listen, accept. Used for debug console and log streaming without unix sockets.
|
|
23
|
+
- **Where.** `src/agent/src/main.rs:161-183` (`create_logger_task`). Socket at line 165; bind+listen at 171–173; `VsockAddr::new(VMADDR_CID_ANY, vsock_port)` at 171.
|
|
24
|
+
- **Port to Go.**
|
|
25
|
+
1. `github.com/mdlayher/vsock`: `vsock.Listen(":2048")`.
|
|
26
|
+
2. Accept and demultiplex by service (health, API, logging) on connection.
|
|
27
|
+
3. Graceful fallback if vsock unavailable (matches our cross-cutting pattern 3).
|
|
28
|
+
- **Skip.** Kata's ttrpc protocol is OCI-shaped.
|
|
29
|
+
|
|
30
|
+
## 3. gRPC service definitions — structure to learn, NOT copy
|
|
31
|
+
|
|
32
|
+
- **Where.** `src/libs/protocols/protos/agent.proto:20-82`. 40+ RPCs: container lifecycle (`CreateContainer`/`StartContainer`/`RemoveContainer`, 22–32), process control (`ExecProcess`/`SignalProcess`/`WaitProcess`, 33–35), stdio multiplexing (`WriteStdin`/`ReadStdout`/`ReadStderr`, 44–49), networking (51–58), `GetMetrics` (61).
|
|
33
|
+
- **Take.** Lifecycle-phase separation; stdio model (request/response for stdin, server-push events for stdout/err); device-hotplug semantics post-VM-start.
|
|
34
|
+
- **Skip.** The OCI shape itself — our agent API is **product-aware**, not generic OCI ([`architecture/05-layer1-guest-agent.md`](../architecture/05-layer1-guest-agent.md)).
|
|
35
|
+
|
|
36
|
+
## 4. Hardening at startup — init-as-PID-1 setup
|
|
37
|
+
|
|
38
|
+
- **What it does.** When PID 1: mount cgroups v1/v2, set hostname, `setsid()`, set controlling terminal via `ioctl`, configure `PATH`.
|
|
39
|
+
- **Where.** `src/agent/src/main.rs:648-680` (`init_agent_as_init`). Cgroup mount: 651. `/dev/ptmx` symlink: 659–660. `setsid()`: 662. Controlling-tty ioctl: 665. Hostname: 670–677.
|
|
40
|
+
- **Port to Go.** Detect `getpid() == 1`; conditionally run init routine; mount cgroups only if absent; symlink `/dev/ptmx` if missing.
|
|
41
|
+
- **Skip.** Full OCI init (hooks, env setup) — ours is microVM-specific, much smaller.
|
|
42
|
+
- **Note.** `PR_SET_DUMPABLE=0` and capability drops live in the **runtime config**, not the agent (agent runs as root inside the guest). We pair this with our cross-cutting pattern 5.
|
|
43
|
+
|
|
44
|
+
## 5. kata-deploy DaemonSet — install/cleanup, probes, node affinity
|
|
45
|
+
|
|
46
|
+
- **What it does.** Per-node DaemonSet copies Kata binaries, configures CRI (containerd/CRI-O), creates `RuntimeClass` resources, cleans up on terminate. Node affinity filters on CPU virt features (VMX/SVM).
|
|
47
|
+
- **Where.** `tools/packaging/kata-deploy/helm-chart/kata-deploy/templates/kata-deploy.yaml:1-384`.
|
|
48
|
+
- DaemonSet: 21–38.
|
|
49
|
+
- Virt-affinity (x86 VMX/SVM): 77–130.
|
|
50
|
+
- Install action: 140.
|
|
51
|
+
- Probes (startup/liveness/readiness): 317–344.
|
|
52
|
+
- hostPath mounts: 349–379.
|
|
53
|
+
- `terminationGracePeriodSeconds: 600`: line 135.
|
|
54
|
+
- **Take for Phase 9 Helm work.**
|
|
55
|
+
- `hostPID: true` for in-container runtime restart visibility.
|
|
56
|
+
- Generous `terminationGracePeriodSeconds` for cleanup.
|
|
57
|
+
- Startup probe with many short retries (60×10 s = 600 s budget).
|
|
58
|
+
- Affinity on hardware capability (KVM-capable nodes only).
|
|
59
|
+
- Env-driven per-node config (shim selection, etc.).
|
|
60
|
+
- **RuntimeClass setup.** `tools/packaging/kata-deploy/binary/src/k8s/runtimeclasses.rs:11-87` — list existing `kata-*` classes, patch `overhead.podFixed` from NFD labels (e.g. `tdx.intel.com/keys`, `sev-snp.amd.com/esids`).
|
|
61
|
+
- **Skip.** Multi-install suffix (parallel Kata versions), NFD complexity, multi-arch shim selection.
|
|
62
|
+
|
|
63
|
+
## 6. Configuration — TOML structure per hypervisor backend
|
|
64
|
+
|
|
65
|
+
- **What it does.** Runtime config split per backend: `[hypervisor.qemu]`, `[hypervisor.firecracker]`, `[hypervisor.clh]`. Host selects active backend by hardware/policy.
|
|
66
|
+
- **Where.** `src/runtime/config/configuration-clh.toml.in:14-28`, `configuration-fc.toml.in:14-40`, `configuration-qemu.toml.in:14-80`.
|
|
67
|
+
- **Common knobs per backend.** `path` (hypervisor binary), `kernel`, `image` (guest rootfs), `rootfs_type` (ext4/xfs/erofs), `default_vcpus`, `kernel_params`, annotation allowlists.
|
|
68
|
+
- **Take for Phase 9 host shim.**
|
|
69
|
+
1. One section per backend in host config.
|
|
70
|
+
2. Defaults per backend (vCPUs, memory overhead, kernel params differ).
|
|
71
|
+
3. Annotation allowlists for which fields pod-author can override.
|
|
72
|
+
- **For the Go agent.** Agent doesn't parse this — host passes choices via `/proc/cmdline`. Agent extracts backend identity to decide feature set (e.g., TEE only on CH).
|
|
73
|
+
|
|
74
|
+
## 7. Backend switching — Cloud Hypervisor vs Firecracker vs QEMU
|
|
75
|
+
|
|
76
|
+
- **Where.** `src/runtime/config/` (13 backend configs total). FC has `jailer_path`; CH has `firmware` for TEEs.
|
|
77
|
+
- **For the agent.** Detect backend at startup via kernel cmdline (`kata.hypervisor=clh`) or DMI/CPUID markers; toggle feature flags (TEE attestation enabled only under CH).
|
|
78
|
+
|
|
79
|
+
## 8. Small-binary Rust patterns — applicable to Go too
|
|
80
|
+
|
|
81
|
+
- **Where.** `src/agent/Cargo.toml:1-109`. Workspace deps (105–109), `profile.release` LTO (102–103).
|
|
82
|
+
- **Result.** ~3–5 MB unstripped, ~1.5 MB stripped.
|
|
83
|
+
- **Port to Go.**
|
|
84
|
+
- Build tags for optional services (policy, confidential data hub).
|
|
85
|
+
- `CGO_ENABLED=0 go build -ldflags="-s -w -X main.version=$VERSION"`.
|
|
86
|
+
- Expected: ~5–10 MB for a production Go agent — acceptable.
|
|
87
|
+
- UPX worth testing but Kata doesn't use it.
|
|
88
|
+
|
|
89
|
+
## Adoption matrix
|
|
90
|
+
|
|
91
|
+
| Pattern | Adopt? | Why |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| PID 1 subreaper + `SIGCHLD` loop | YES | Mandatory for PID 1 |
|
|
94
|
+
| vsock listener on fixed port | YES | Standard microVM transport |
|
|
95
|
+
| OCI ttrpc service structure | NO (study) | Our API is product-shaped |
|
|
96
|
+
| init-as-PID-1 setup | PARTIAL | Adapt to minimal microVM init |
|
|
97
|
+
| DaemonSet + probes + node affinity | YES | Phase-8 Helm pattern |
|
|
98
|
+
| TOML config per backend | YES | Host shim, not agent |
|
|
99
|
+
| Runtime-backend detection | YES | Feature toggling |
|
|
100
|
+
| Feature flags + LTO / `-s -w` | YES | Small Go binary |
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 02 — E2B Infrastructure (e2b-dev/infra)
|
|
5
|
+
|
|
6
|
+
> Source: [e2b-dev/infra](https://github.com/e2b-dev/infra). Production E2B infra in Go.
|
|
7
|
+
> Most relevant for Phase 2 (HTTP pool sidecar), Phase 3 (storage), Phase 6 (control plane), Phase 7 (guest agent), Phase 8 (egress proxy).
|
|
8
|
+
|
|
9
|
+
## 1. Network slot pool — dual-channel recycle with drain delay
|
|
10
|
+
|
|
11
|
+
- **What.** Pool of network-namespace slots with **two** channels — "new" (pre-allocated at startup) and "reused" (returned post-drain). `Get()` tries reused first, falls back to new. `Return()` waits `ReturnDelay` (3 s) before pushing back to allow inflight requests to drain.
|
|
12
|
+
- **Where.** `packages/orchestrator/pkg/sandbox/network/pool.go` (357 lines).
|
|
13
|
+
- `NewPool()` builds dual channels.
|
|
14
|
+
- `Get()` tries reused, falls back to new.
|
|
15
|
+
- `Return()` schedules recycle with `ReturnDelay`.
|
|
16
|
+
- Metrics: `newSlotsAvailableCounter`, `reusableSlotsAvailableCounter`.
|
|
17
|
+
- **Why for us.** Phase 2 pool semantics. The drain delay prevents dropped connections when sandboxes cycle fast.
|
|
18
|
+
- **Skip.** Linux iptables/netlink specifics; keep the slot/return semantics as an abstraction.
|
|
19
|
+
|
|
20
|
+
## 2. Adjustable semaphore — separates fresh-create vs snapshot-resume
|
|
21
|
+
|
|
22
|
+
- **What.** Feature-flag-driven semaphore limits concurrent **sandbox starts**. Snapshot resumes use `waitForAcquire` (15 s timeout — higher parallelism). Fresh creates use `TryAcquire` (immediate or reject).
|
|
23
|
+
- **Where.** `packages/orchestrator/pkg/server/main.go:87-91, 162-182` (`NewAdjustableSemaphore`, `refreshStartingSandboxesLimit` every 30 s). Usage: `packages/orchestrator/pkg/server/sandboxes.go:116-130`.
|
|
24
|
+
- **Why for us.** Phases 2 + 6. Prevents thundering herd on template loads / NBD allocation / memory.
|
|
25
|
+
- **Skip.** LaunchDarkly — use simple env / config.
|
|
26
|
+
|
|
27
|
+
## 3. envd — PID 1 Go agent with Connect-RPC streaming exec
|
|
28
|
+
|
|
29
|
+
- **What.** PID 1 in each sandbox; `os/exec` + signal forwarding; Connect-RPC over HTTP/2 in a single binary; `Process.Start()` streams stdout/stderr/pty as a oneof event; supports `SendSignal` (SIGTERM/SIGKILL), stdin/pty write, KeepAlive events for idle-TCP survival.
|
|
30
|
+
- **Where.**
|
|
31
|
+
- Main: `packages/envd/main.go:132-221` (HTTP/2 server, chi router, Connect auth).
|
|
32
|
+
- Service: `packages/envd/internal/services/process/service.go:19-84`.
|
|
33
|
+
- Handler: `packages/envd/internal/services/process/handler/handler.go:44-487`.
|
|
34
|
+
- Proto: `packages/envd/spec/process/process.proto:1-172`.
|
|
35
|
+
- **Why for us.** **Direct template for Phase 7 Go agent.** Pattern set:
|
|
36
|
+
- Signal forwarding via SDK call.
|
|
37
|
+
- Streaming output via oneof event (stdout / stderr / pty / keepalive / exit).
|
|
38
|
+
- Multiplex multiple concurrent execs per VM.
|
|
39
|
+
- KeepAlive frames against TCP idle timeout.
|
|
40
|
+
- **Skip.** Firecracker MMDS polling, vsock specifics, cgroup v2 (port the *shape*, not Linux glue).
|
|
41
|
+
|
|
42
|
+
## 4. Sandbox creation flow — multi-resource assembly with rollback
|
|
43
|
+
|
|
44
|
+
- **What.** `SandboxCreateRequest` acquires in sequence: network slot, template, NBD block device, memory+rootfs snapshots. Feature flags gate Firecracker version, max sandboxes/node, internet access, disk size. Returns `client_id` for session routing.
|
|
45
|
+
- **Where.** `packages/orchestrator/pkg/server/sandboxes.go:60-235`.
|
|
46
|
+
- 107–129: semaphore + node capacity.
|
|
47
|
+
- 132–141: template fetch.
|
|
48
|
+
- 143–161: network/egress config.
|
|
49
|
+
- 163–214: assemble + `ResumeSandbox()`.
|
|
50
|
+
- 215–235: rollback on failure.
|
|
51
|
+
- 237–249: lifecycle hooks + event publish.
|
|
52
|
+
- **Why for us.** Phase 6 orchestration. The **rollback pattern** (release acquired resources on partial failure) is the key takeaway.
|
|
53
|
+
- **Skip.** Nomad job scheduling, GCS template bucket. Keep the multi-resource orchestration shape.
|
|
54
|
+
|
|
55
|
+
## 5. Cgroup v2 isolation — weighted process classes via `clone3(CLONE_INTO_CGROUP)`
|
|
56
|
+
|
|
57
|
+
- **What.** Three cgroup hierarchies per sandbox:
|
|
58
|
+
- **PTYs (interactive):** `cpu.weight=200`, `memory.high=80%`.
|
|
59
|
+
- **Socats (proxies):** `cpu.weight=150`, `memory.min/low=8MB`.
|
|
60
|
+
- **User processes:** `cpu.weight=50`, `memory.high=80%`.
|
|
61
|
+
Uses `clone3(CLONE_INTO_CGROUP)` with a passed file descriptor for **race-free** classification at process birth.
|
|
62
|
+
- **Where.** Manager `packages/orchestrator/pkg/sandbox/nbd/cgroup/cgroup2.go:1-120`. envd integration: `packages/envd/main.go:223-272`.
|
|
63
|
+
- **Why for us.** Phase 7 — prevents user processes from starving orchestrator infrastructure inside the sandbox. The Firecracker memory limit is whole-VM; this gives per-process guarantees.
|
|
64
|
+
|
|
65
|
+
## 6. Egress proxy — protocol-specific inspection ports
|
|
66
|
+
|
|
67
|
+
- **What.** Single `tcpproxy.Proxy` listening on three ports:
|
|
68
|
+
- **HTTP (5016):** inspects `Host` header against allowlist.
|
|
69
|
+
- **TLS (5017):** inspects SNI against allowlist.
|
|
70
|
+
- **Other (5018):** CIDR-only check (no protocol sniffing — prevents blocking SSH).
|
|
71
|
+
Host iptables redirects by original dst port.
|
|
72
|
+
- **Where.** `packages/orchestrator/pkg/tcpfirewall/proxy.go:1-100+`.
|
|
73
|
+
- **Why for us.** Phase 8 — domain blocklist without false positives from protocol mis-detection.
|
|
74
|
+
- **Skip.** iptables/netlink Linux specifics; abstract as "traffic shaper with protocol inspection". Compare with our planned [agentbox-style](./09-agentbox.md) JWT pattern — these are complementary (this filters; JWT authorizes).
|
|
75
|
+
|
|
76
|
+
## 7. Template streaming cache — lazy block-device loading
|
|
77
|
+
|
|
78
|
+
- **What.** Snapshots (memfile, rootfs, metadata) keyed by `buildID`. First access streams from GCS/S3 into local tmpfs; cached for 1 h. Supports layered builds.
|
|
79
|
+
- **Where.** Interface `packages/orchestrator/pkg/sandbox/template/template.go:16-24`. Proto `packages/orchestrator/template-manager.proto:1-179` (layer upload at 9–18, config at 61–89, metadata at 127–135).
|
|
80
|
+
- **Why for us.** Phase 3 — templates as **streaming block devices**, not OCI images. Layer-reuse via `cacheScope`.
|
|
81
|
+
|
|
82
|
+
## 8. Slot recycling — graceful return with locking discipline
|
|
83
|
+
|
|
84
|
+
- **What.** On sandbox end, slot recycle waits `ReturnDelay` for drain → resets internet config (iptables) → returns to pool. RWMutex on the reused-slots channel; lock released **before** slow `RemoveNetwork` syscalls (lines 254–286 of `pool.go`).
|
|
85
|
+
- **Where.** `packages/orchestrator/pkg/sandbox/network/pool.go:204-298`. Metrics: `returnedSlotCounter`, `releasedSlotCounter`.
|
|
86
|
+
- **Why for us.** Phase 2. Same drain + lock discipline ensures fast recycle without dropping inflight requests or stalling new acquisitions.
|
|
87
|
+
|
|
88
|
+
## 9. Per-sandbox metrics — delta-temporality observable gauges
|
|
89
|
+
|
|
90
|
+
- **What.** Callback-driven observable gauges (CPU %, mem bytes, disk bytes) measured in parallel (5× concurrency cap). Uses OTel **delta temporality** so gauges don't repeat indefinitely after sandbox death. Tagged by `sandbox_id`, `team_id`, `build_id`. Warns at >80 % mem or CPU.
|
|
91
|
+
- **Where.** `packages/orchestrator/pkg/metrics/sandboxes.go:46-319`. Export every 5 s (line 41).
|
|
92
|
+
- **Why for us.** Phase 6 / 10. Especially the **delta temporality** detail — common foot-gun with OTel gauges in ephemeral-pod environments.
|
|
93
|
+
|
|
94
|
+
## 10. API gateway auth — multi-tenant team-context extraction
|
|
95
|
+
|
|
96
|
+
- **What.** Request validated by either API token (Bearer → team lookup) or Supabase JWT (user → teams → default team). All downstream calls receive `teamID` context.
|
|
97
|
+
- **Where.** `packages/api/internal/handlers/auth.go:1-80`.
|
|
98
|
+
- **Why for us.** Phase 6. Foundational multi-tenant pattern; same shape regardless of identity backend.
|
|
99
|
+
- **Skip.** Supabase specifics; substitute our OIDC provider.
|
|
100
|
+
|
|
101
|
+
## 11. Snapshot/pause/resume lifecycle
|
|
102
|
+
|
|
103
|
+
- **What.** On pause: save VM memory + disk to GCS/S3. On resume: reconstruct from snapshot files; `Server.Create()` branches on `req.Sandbox.Snapshot` (line 69, 117) — resume uses `resumeVM()` with `waitForAcquire(15s)` vs. fresh `TryAcquire`.
|
|
104
|
+
- **Where.** Create flow: `packages/orchestrator/pkg/server/sandboxes.go:69, 117-129`. FC client: `packages/orchestrator/pkg/sandbox/fc/client.go` (`resumeVM`, `pauseVM`).
|
|
105
|
+
- **Why for us.** Phase 10. Stateful handoff, cost optimization, multi-session continuity.
|
|
106
|
+
|
|
107
|
+
## 12. Version-gated metric collection
|
|
108
|
+
|
|
109
|
+
- **What.** Observe metrics only if `envd.Version >= minEnvdVersionForMetrics` (line 165). Feature-specific minima: memory precision ≥ 0.2.4, disk ≥ 0.2.4, cache ≥ 0.5.9. Prevents crashes on older sandboxes.
|
|
110
|
+
- **Where.** `packages/orchestrator/pkg/metrics/sandboxes.go:165-173, 225-257`.
|
|
111
|
+
- **Why for us.** Phase 6 — safe gradual rollout of new metrics without coordinating sandbox upgrades. General Go pattern, adopt broadly.
|
|
112
|
+
|
|
113
|
+
## 13. Zombie reaping via Go stdlib `os/exec.Wait()`
|
|
114
|
+
|
|
115
|
+
- **What.** Per spawned process: goroutines stream stdout/stderr/pty; `Process.Wait()` blocks on `cmd.Wait()`; SIGTERM/SIGKILL cancels output context (`p.outCancel()` line 360).
|
|
116
|
+
- **Where.** `packages/envd/internal/services/process/handler/handler.go:335-486`. Start: 429–447. Wait: 449–486 (cmd.Wait at 453, exit at 464–469). Signal: 354–364.
|
|
117
|
+
- **Why for us.** Phase 7. Go stdlib handles `SIGCHLD` automatically for *its own* children — but for PID 1 reaping of inherited orphans we still need [pattern 1 from kata](./01-kata-containers.md#1-pid-1--subreaper--async-sigchld-loop). Use both.
|
|
118
|
+
|
|
119
|
+
## Summary
|
|
120
|
+
|
|
121
|
+
| Pattern | File | Phase | Take? |
|
|
122
|
+
|---|---|---|---|
|
|
123
|
+
| Dual-channel network pool + drain delay | `orchestrator/pkg/sandbox/network/pool.go` | 2 | YES |
|
|
124
|
+
| Adjustable semaphore (fresh vs resume) | `orchestrator/pkg/server/main.go` | 2,6 | YES |
|
|
125
|
+
| envd Connect-RPC streaming agent | `envd/main.go`, `envd/internal/services/process/` | 7 | YES — template |
|
|
126
|
+
| Multi-resource create with rollback | `orchestrator/pkg/server/sandboxes.go` | 6 | YES |
|
|
127
|
+
| Cgroup v2 weighted classes | `orchestrator/pkg/sandbox/nbd/cgroup/cgroup2.go` | 7 | YES |
|
|
128
|
+
| Three-port egress firewall | `orchestrator/pkg/tcpfirewall/proxy.go` | 9 | YES |
|
|
129
|
+
| Streaming template cache | `orchestrator/pkg/sandbox/template/` | 3 | YES |
|
|
130
|
+
| Delta-temporality observable gauges | `orchestrator/pkg/metrics/sandboxes.go` | 6,10 | YES |
|
|
131
|
+
| Multi-tenant team-context auth | `api/internal/handlers/auth.go` | 6 | YES |
|
|
132
|
+
| Snapshot pause/resume | `orchestrator/pkg/server/sandboxes.go` | 10 | YES |
|
|
133
|
+
| Version-gated metric features | `orchestrator/pkg/metrics/sandboxes.go` | 6 | YES |
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 03 — Coder (production Go control plane)
|
|
5
|
+
|
|
6
|
+
> Source: [coder/coder](https://github.com/coder/coder). Self-hosted workspace platform — auth, sessions, lifecycle, templates, audit, RBAC, telemetry. Closest production analog for our Phase 6 L4 rewrite.
|
|
7
|
+
> Analysis covers AGPL OSS edition (May 2026).
|
|
8
|
+
|
|
9
|
+
## 1. HTTP bootstrap — Chi router with layered middleware
|
|
10
|
+
|
|
11
|
+
- **Where.** `coderd/coderd.go:511-1050`.
|
|
12
|
+
- **What.** `go-chi/chi/v5` router with deliberate middleware ordering: recovery → request ID (`httpmw.AttachRequestID`) → real-IP → Prometheus → route match → rate limit → CORS → API key extraction.
|
|
13
|
+
- **Why for us.** Phase 6. We'll hit 150+ endpoints; Chi's `.Route()` groups + middleware composition scale. Ordering matters — observability before route match so metrics include unmatched paths; auth populates context for later handlers.
|
|
14
|
+
- **Skip.** Their swaggo integration and cookie-CSRF (specific to their cookie-auth scheme).
|
|
15
|
+
|
|
16
|
+
## 2. Auth — dual-mode API key, JWT signing keys rotated in DB
|
|
17
|
+
|
|
18
|
+
- **Where.** `coderd/httpmw/apikey.go:42-100` (validation config) and `:100-500+` (extraction + role loading). OAuth state JWT: `coderd/userauth.go:50-200`.
|
|
19
|
+
- **What.** `PrecheckAPIKey` middleware validates early; `ExtractAPIKey` loads session lazily. Tokens in cookie (browser) or `Authorization` header. **No Redis** — sessions are DB rows. Signing keys for OAuth state JWTs are managed in DB by `cryptokeys.StartRotator` (`coderd/coderd.go:588`) — rotation is centralized and zero-touch.
|
|
20
|
+
- **Why for us.** Avoids the session-store sync problem in HA L4 deployments. Key rotation pattern directly applicable to our secret broker ([architecture/07-security.md](../architecture/07-security.md)).
|
|
21
|
+
- **Skip.** OAuth-provider mode (they act as both consumer and provider), multi-IDP sync. Phase-6 MVP needs only consumer-mode OIDC.
|
|
22
|
+
|
|
23
|
+
## 3. RBAC — Rego policy + DB role reconciliation + `dbauthz` wrapper
|
|
24
|
+
|
|
25
|
+
- **Where.**
|
|
26
|
+
- Policy: `coderd/rbac/policy.rego`.
|
|
27
|
+
- Auth check: `coderd/rbac/authz.go:1-100`.
|
|
28
|
+
- Authorizer creation: `coderd/coderd.go:361-365`.
|
|
29
|
+
- Reconciler: `coderd/rbac/rolestore/reconcile.go` (startup-time DB ↔ code sync).
|
|
30
|
+
- DB enforcement: `coderd/database/dbauthz/` wraps every query.
|
|
31
|
+
- **Why for us.** Phase 6. Three takeaways:
|
|
32
|
+
1. Policy-as-code in Rego — auditable, testable in isolation.
|
|
33
|
+
2. **Reconcile system roles at startup** — guarantees code/DB consistency.
|
|
34
|
+
3. **`dbauthz` wrapper** — single enforcement point; "you cannot query the DB without auth context". Strong default against accidental data leaks.
|
|
35
|
+
- **Skip.** Workspace-sharing ACLs (enterprise), full Rego policy initially (start simple, grow into it). OAuth2 scopes (only if we become a provider).
|
|
36
|
+
|
|
37
|
+
## 4. Audit log — DB-backed with field-level sensitivity catalog
|
|
38
|
+
|
|
39
|
+
- **Where.** `coderd/audit.go:1-100`. Field catalog: `enterprise/audit/table.go`. Queries: `coderd/database/queries/auditlogs.sql`.
|
|
40
|
+
- **What.** `audit_logs` rows carry structured JSON diffs (before/after) per field. Each field declared `ActionTrack` | `ActionIgnore` | `ActionSecret` — secrets never serialized.
|
|
41
|
+
- **Why for us.** Phase 6 + 9. Same DB as system → no sync issues. Field-level sensitivity = mechanical enforcement of our cross-cutting pattern 10 (never log verbatim).
|
|
42
|
+
- **Skip.** Real-time export to Splunk/DataDog (Phase 8 may add via separate sink), enterprise retention policies. Start DB-only.
|
|
43
|
+
|
|
44
|
+
## 5. Workspace lifecycle — provisioner job abstraction
|
|
45
|
+
|
|
46
|
+
- **Where.** `coderd/workspacebuilds.go:1-100`, `coderd/workspaces.go:897-984`, queries `coderd/database/queries/workspacebuilds.sql`, status: `coderd/provisionerjobs.go`.
|
|
47
|
+
- **What.** Workspace create/update/delete = a **provisioner job** row (status: pending/running/succeeded/failed). Watchable over WebSocket; logs + result captured. Actual work delegated to separate provisioner daemons via gRPC.
|
|
48
|
+
- **Why for us.** Phase 6. Same shape works for our sandbox spawn/destroy: observable, retryable, decoupled from the L3 provider implementation. Logs persisted = "why did spawn fail?" stays answerable.
|
|
49
|
+
- **Skip.** Pre-build caching, Terraform variable interpolation, port-forwarding/SSH (workspace-specific).
|
|
50
|
+
|
|
51
|
+
## 6. Templates — `Template` + `TemplateVersion` + `ParameterSchema`
|
|
52
|
+
|
|
53
|
+
- **Where.** `coderd/templateversions.go:1-150`, `coderd/templates.go:1-100`, schemas in `coderd/database/queries/`.
|
|
54
|
+
- **What.** `Template` = immutable metadata. `TemplateVersion` = versioned artifact (source + params + timestamp). `ParameterSchema` = validated HCL inputs at creation time.
|
|
55
|
+
- **Why for us.** Phase 6, validates our [`09-templates.md`](../architecture/09-templates.md) `SandboxTemplate` versioning approach. Their immutability-per-version pattern is exactly what we propose.
|
|
56
|
+
- **Skip.** Dynamic Parameters (runtime-eval), template sharing/RBAC (enterprise), publish workflow.
|
|
57
|
+
|
|
58
|
+
## 7. Database access — sqlc + `dbauthz` + paired migrations
|
|
59
|
+
|
|
60
|
+
- **Where.** Queries: `coderd/database/queries/*.sql`. Wrapper: `coderd/database/dbauthz/dbauthz.go`. Wiring: `coderd/coderd.go:374-380`. Migrations: `coderd/database/migrations/` (paired up/down).
|
|
61
|
+
- **What.** `.sql` files → `make gen` runs sqlc → typed Go. All access through `Store` interface, wrapped by `dbauthz.New()` enforcing authorization per query. Unauthorized = "not authorized" (no reason leak). Migrations paired = clean rollback.
|
|
62
|
+
- **Why for us.** Phase 6. sqlc eliminates a class of runtime SQL bugs. The wrapper pattern is the cleanest implementation of "no DB query without auth context" we've seen.
|
|
63
|
+
- **Skip.** `regosql` per-query auth (complex). Start with handler-side authz, then wrap.
|
|
64
|
+
|
|
65
|
+
## 8. Streaming endpoints — `coder/websocket` lib + custom JSON encoder
|
|
66
|
+
|
|
67
|
+
- **Where.** `coderd/workspaceagents.go:481-510, 855-870, 1227-1240`.
|
|
68
|
+
- **What.** `github.com/coder/websocket` (not gorilla — newer/lighter); accept + wrap with JSON encoder; auto compression + ping/pong negotiation.
|
|
69
|
+
- **Why for us.** Phase 6. Direct fit for our CDP / ttyd / MCP-streaming proxying.
|
|
70
|
+
- **Skip.** Their DERP mesh (Tailscale-specific), workspace-agent multiplexing.
|
|
71
|
+
|
|
72
|
+
## 9. CLI ↔ server — REST over HTTP with bearer tokens
|
|
73
|
+
|
|
74
|
+
- **Where.** `cli/root.go`, `cli/login.go`, SDK: `codersdk/`, server auth: `coderd/httpmw/apikey.go`.
|
|
75
|
+
- **What.** CLI is a standalone Go binary calling the **same** REST API as the frontend. Bearer token in `Authorization` header. No custom CLI protocol. SDK in `codersdk/` is importable by third parties.
|
|
76
|
+
- **Why for us.** Phase 6. Sane default for future admin CLI — no separate gRPC just for the CLI. Public SDK is a real adoption multiplier.
|
|
77
|
+
- **Skip.** `config-ssh` helper, agent connection pooling (workspace-SSH-specific).
|
|
78
|
+
|
|
79
|
+
## 10. Project layout — flat `cli/`, `coderd/`, `codersdk/`
|
|
80
|
+
|
|
81
|
+
- **Where.** Repo root.
|
|
82
|
+
- **What.**
|
|
83
|
+
- `cli/` — commands.
|
|
84
|
+
- `coderd/` — control plane logic.
|
|
85
|
+
- `codersdk/` — shared request/response types + Go client (importable).
|
|
86
|
+
- Nested under `coderd/` by domain: `rbac/`, `audit/`, `database/`, `httpmw/`, `provisionerjobs/` etc.
|
|
87
|
+
- **Why for us.** Phase 6. Directly adoptable layout. Public SDK at `codersdk/` matches our intent to keep the MCP contract first-class.
|
|
88
|
+
- **Skip.** `enterprise/` directory (defer the commercial split).
|
|
89
|
+
|
|
90
|
+
## 11. Testing — `coderdtest.New(t, nil)` harness with real Postgres
|
|
91
|
+
|
|
92
|
+
- **Where.** `coderd/coderdtest/coderdtest.go:1-150` + helpers.
|
|
93
|
+
- **What.** Spawns real Postgres + coderd instance + bootstraps templates/users → returns test client. Table-driven, `t.Parallel()`. Test patterns: create user → workspace → wait for build → assert.
|
|
94
|
+
- **Why for us.** Phase 6. Real-DB integration tests catch race/lock/constraint bugs that mocks miss. Matches our existing integration-test posture (commit `7a55968`).
|
|
95
|
+
- **Skip.** OIDC mocking, load harness, enterprise-only utilities.
|
|
96
|
+
|
|
97
|
+
## 12. Secrets — encrypted in DB with key rotation
|
|
98
|
+
|
|
99
|
+
- **Where.** `coderd/usersecrets.go:1-100`, `coderd/cryptokeys/`, rotator start at `coderd/coderd.go:588`, schema `coderd/database/queries/crypto_keys.sql`.
|
|
100
|
+
- **What.** User secrets (API keys, OAuth tokens, env vars) stored encrypted with rotation-aware key. Old keys readable for decryption; new encryptions use latest key. Never logged/exported.
|
|
101
|
+
- **Why for us.** Phase 4 (secret broker) + Phase 6. Pattern is directly applicable — single-DB storage, in-process key management, rotation as a background task.
|
|
102
|
+
- **Skip.** Azure Key Vault (substitute our chosen secret backend), enterprise export.
|
|
103
|
+
|
|
104
|
+
## Adoption priority for Phase 6 MVP
|
|
105
|
+
|
|
106
|
+
1. Chi router + layered middleware (`coderd/coderd.go:500-1050`)
|
|
107
|
+
2. API-key middleware with context population (`coderd/httpmw/apikey.go`)
|
|
108
|
+
3. sqlc + `dbauthz` wrapper (`coderd/database/dbauthz/`)
|
|
109
|
+
4. Simple RBAC (`coderd/rbac/authz.go`) — Rego later
|
|
110
|
+
5. DB-backed audit log (`coderd/audit.go`)
|
|
111
|
+
6. Provisioner-job abstraction for sandbox lifecycle
|
|
112
|
+
7. `coderdtest`-style real-DB integration harness
|
|
113
|
+
8. WebSocket streaming via `coder/websocket` (`coderd/workspaceagents.go`)
|
|
114
|
+
|
|
115
|
+
**Defer to Phase 6.5+.** Multi-IDP sync, OAuth-provider mode, full Rego policies, template-version Dynamic Parameters, multi-key rotation.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 04 — Cloud Hypervisor (lead untrusted-tier microVM)
|
|
5
|
+
|
|
6
|
+
> Source: [cloud-hypervisor/cloud-hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor). Rust microVM hypervisor, Intel-led.
|
|
7
|
+
> Primary backend for [Phase 9](../roadmap.md) (`kata-ch`); snapshot/restore feeds Phase 10.
|
|
8
|
+
|
|
9
|
+
## 1. REST API on Unix socket — VM lifecycle
|
|
10
|
+
|
|
11
|
+
- **Where.** `docs/api.md:51-59, 61-102` (OpenAPI 3.0). `--api-socket path=/tmp/ch.sock`.
|
|
12
|
+
- **What.** Endpoints: `/vmm.ping`, `/vmm.shutdown`, `/vm.create`, `/vm.boot`, `/vm.pause`, `/vm.resume`, `/vm.snapshot`, `/vm.restore`, `/vm.shutdown`. Plus `/vm.resize` (CPU/memory hotplug) and `/vm.add-*` (disk/fs/net/vsock hotplug).
|
|
13
|
+
- **Why for us.** Phase 9 control plane → hypervisor. No HTTP/2 / no streaming — keep it synchronous.
|
|
14
|
+
- **Skip.** No authn in CH — rely on socket filesystem permissions; orchestrator wraps the socket.
|
|
15
|
+
|
|
16
|
+
## 2. vsock — CID model + bidirectional setup
|
|
17
|
+
|
|
18
|
+
- **Where.** `docs/vsock.md:1-19, 51-75`. Kernel: `CONFIG_VHOST_VSOCK` (host), `CONFIG_VIRTIO_VSOCKETS` (guest).
|
|
19
|
+
- **What.** CIDs: Hypervisor=0, Loopback=1, Host=2, Guest=3+. Stream only. `--vsock cid=3,socket=/tmp/ch.vsock`.
|
|
20
|
+
- Host→Guest: guest listens on port, host connects via Unix socket with `CONNECT <port>` prefix (socat ≥1.7.4).
|
|
21
|
+
- Guest→Host: host listens on `<socket_path>_<port>`, guest connects to CID=2.
|
|
22
|
+
- **Why for us.** Phase 7 vsock listener (`05-layer1-guest-agent.md`). The `CONNECT <port>` protocol detail is non-obvious; document in our agent spec.
|
|
23
|
+
- **Skip.** Loopback CID=1 only needed for debug.
|
|
24
|
+
|
|
25
|
+
## 3. virtio-fs — fast shared mounts (the reason we pick CH)
|
|
26
|
+
|
|
27
|
+
- **Where.** `docs/fs.md:13-90`. Daemon: `virtiofsd` (separate Rust binary). VM needs `--memory shared=on` (mandatory).
|
|
28
|
+
- **What.**
|
|
29
|
+
- Build virtiofsd separately; `setcap cap_sys_admin+epi`.
|
|
30
|
+
- `--fs tag=myfs,socket=/tmp/virtiofs,num_queues=1,queue_size=512`.
|
|
31
|
+
- Guest: `mount -t virtiofs myfs /mnt/shared` (kernel ≥5.10).
|
|
32
|
+
- Cache modes: `cache=never` (default; low RAM, dense) vs `cache=always` (faster, RAM-multiplier — **footgun** at high density).
|
|
33
|
+
- **Why for us.** Phase 9 — replaces FUSE for skill / user-data mounts inside the microVM. Updates [`architecture/06-storage.md`](../architecture/06-storage.md) "What changes per phase" row for the kata tier (virtio-fs over FUSE).
|
|
34
|
+
- **Skip.** DAX feature not stable; avoid.
|
|
35
|
+
|
|
36
|
+
## 4. Snapshot / restore — files + ondemand restore
|
|
37
|
+
|
|
38
|
+
- **Where.** `docs/snapshot_restore.md:11-144`.
|
|
39
|
+
- **What.**
|
|
40
|
+
- Snapshot: pause VM → `POST /vm.snapshot {source_url: file:///path}` → produces `config.json`, `memory-ranges`, `state.json`.
|
|
41
|
+
- Restore: `cloud-hypervisor --restore source_url=file:///path,resume=true` OR `POST /vm.restore`. Restored VM is **paused** — must explicitly `/vm.resume`.
|
|
42
|
+
- `memory_restore_mode=ondemand` — userfaultfd-based; skips full-memory copy (faster boot). Fails strict if userfaultfd unavailable.
|
|
43
|
+
- **Why for us.** Phase 10. Note: snapshot file size ≈ VM RAM size → 100 VMs × 1 GB = 100 GB fast storage.
|
|
44
|
+
- **Skip.** VFIO devices **break** snapshot/restore. If we ever offer GPU passthrough, those templates have no snapshot capability.
|
|
45
|
+
|
|
46
|
+
## 5. Memory — balloon, free-page reporting, ACPI hotplug
|
|
47
|
+
|
|
48
|
+
- **Where.** `docs/balloon.md:8-76`, `docs/memory.md:64-86`, `docs/hotplug.md:64-75`.
|
|
49
|
+
- **What.**
|
|
50
|
+
- **Balloon** (`--balloon size=...,deflate_on_oom=on,free_page_reporting=on`) — host reclaims guest pages.
|
|
51
|
+
- **Free Page Reporting** alone (even with balloon size 0) cuts host footprint without shrinking guest visible RAM. Best for high-density untrusted tier.
|
|
52
|
+
- **ACPI hotplug**: `/vm.resize` to grow; **shrink takes effect only on guest reboot** (footgun).
|
|
53
|
+
- Reserve headroom: `--memory size=1G,hotplug_size=2G`.
|
|
54
|
+
- **Why for us.** Phase 5+ capacity policy. Free Page Reporting is the easy density win.
|
|
55
|
+
- **Skip.** Hugepages — only if a workload is latency-critical; otherwise hurts packing.
|
|
56
|
+
|
|
57
|
+
## 6. GPU passthrough — VFIO (future)
|
|
58
|
+
|
|
59
|
+
- **Where.** `docs/vfio.md:1-150`.
|
|
60
|
+
- **What.** Unbind from native driver → bind to `vfio-pci` → pass `--device path=/sys/bus/pci/devices/...`. NVIDIA P2P: `x_nv_gpudirect_clique=0`.
|
|
61
|
+
- IOMMU group: all devices in same group must be passed (or none).
|
|
62
|
+
- Snapshot incompatible with VFIO.
|
|
63
|
+
- **Why for us.** Out of scope until Phase 10+, but documented now so we don't promise it for templates that need snapshotting.
|
|
64
|
+
|
|
65
|
+
## 7. Privilege model — capability-based, no jailer
|
|
66
|
+
|
|
67
|
+
- **Where.** `docs/seccomp.md:1-68`, `docs/landlock.md:1-106`.
|
|
68
|
+
- **What.** **No** Firecracker-style jailer. Single process; only `cap_net_admin+ep` for TAP networking. Hardening = seccomp (per-thread allowlists, on by default, kill-on-violation) + **Landlock** sandboxing (Linux ≥5.13) for FS access. Hotplug paths must be pre-declared in `--landlock-rules`.
|
|
69
|
+
- **Why for us.** Phase 9 — orchestrator wraps CH in a container/cgroup boundary; CH itself relies on seccomp + Landlock. Compare with [Firecracker's jailer](./05-firecracker.md) — different security model.
|
|
70
|
+
- **Footguns.** Never `--seccomp false` in production; never run as root; Landlock + hotplug requires upfront path declaration.
|
|
71
|
+
|
|
72
|
+
## 8. TDX / SEV-SNP attestation (compliance tier)
|
|
73
|
+
|
|
74
|
+
- **Where.** `docs/intel_tdx.md:26-97`, `docs/amd_sev_snp.md:16-40`.
|
|
75
|
+
- **What.** Build with `--features tdx` (Intel) or `--features sev_snp` (AMD, MSHV-only). Encrypted guest, hypervisor-blind. No balloon, no VFIO under TDX. 10–30 % perf penalty.
|
|
76
|
+
- **Why for us.** Phase 10+ if a compliance tier (HIPAA/Confidential Computing) is added. ADR-worthy when it lands.
|
|
77
|
+
|
|
78
|
+
## 9. Footguns — explicit
|
|
79
|
+
|
|
80
|
+
| What NOT to do | Why | Fix |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| Snapshot + VFIO | Snapshot fails on VFIO devices | No GPU passthrough on snapshottable templates |
|
|
83
|
+
| `cache=always` at density | Host page cache multiplies | Always `cache=never` for untrusted tier |
|
|
84
|
+
| Landlock hotplug without pre-declaration | Add-disk denied | Pre-declare all possible hotplug paths |
|
|
85
|
+
| `deflate_on_oom=on` w/o testing guest | Older Linux/Windows may not handle | Default off; test per-image |
|
|
86
|
+
| Trust TDX report w/o attestation chain | Rogue hypervisor fakes it | Validate against Intel/AMD roots |
|
|
87
|
+
| Run as root | Larger attack surface | `setcap cap_net_admin+ep` + seccomp |
|
|
88
|
+
| `--seccomp false` in prod | Removes syscall allowlist | Keep on; use `--seccomp log` for debug |
|
|
89
|
+
|
|
90
|
+
## Summary for Phase 9 (`kata-ch`)
|
|
91
|
+
|
|
92
|
+
1. REST on unix socket — orchestrator control.
|
|
93
|
+
2. vsock CID=3 for agent comms.
|
|
94
|
+
3. virtio-fs with `cache=never` for skill / user-data mounts.
|
|
95
|
+
4. Landlock + seccomp enabled by default.
|
|
96
|
+
5. Headroom: `--memory size=1G,hotplug_size=2G` per template.
|
|
97
|
+
6. Free Page Reporting on by default for density.
|
|
98
|
+
7. **No** VFIO on snapshottable templates.
|
|
99
|
+
8. Snapshot files sized = guest RAM — provision fast block storage.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 05 — Firecracker (kata-fc backend, fastest-cold-start tier)
|
|
5
|
+
|
|
6
|
+
> Source: [firecracker-microvm/firecracker](https://github.com/firecracker-microvm/firecracker). AWS Lambda/Fargate microVM.
|
|
7
|
+
> Backend for [Phase 9](../roadmap.md) `kata-fc` (free-trial / fastest-cold-start tier). Cloud Hypervisor remains primary; FC fills the "smallest attack surface" niche.
|
|
8
|
+
|
|
9
|
+
## 1. REST API on unix socket — synchronous-only
|
|
10
|
+
|
|
11
|
+
- **Where.** `src/vmm/src/rpc_interface.rs:50-150` (`VmmAction` enum), `src/firecracker/swagger/firecracker.yaml`.
|
|
12
|
+
- **What.** HTTP/1.1 only (no HTTP/2). All actions are `VmmAction` variants. States: `NotStarted` → `Running` → `Paused` → snapshot/resume. Pause is mandatory before snapshot.
|
|
13
|
+
- **Why for us.** Phase 9 alternative backend. No streaming → cleaner than CH for "give me a sandbox now" path.
|
|
14
|
+
- **Skip.** No WebSocket / no async jobs.
|
|
15
|
+
|
|
16
|
+
## 2. Jailer — privilege-drop wrapper
|
|
17
|
+
|
|
18
|
+
- **Where.** `src/jailer/src/main.rs:1-250`, `src/jailer/src/chroot.rs:19-100`, `src/jailer/src/cgroup.rs`, `src/jailer/src/env.rs`.
|
|
19
|
+
- **What.** Stateless wrapper binary that, before exec'ing firecracker, does:
|
|
20
|
+
- **Mount namespace isolation:** `unshare(CLONE_NEWNS)` → `pivot_root()` → umount old_root.
|
|
21
|
+
- **Chroot via bind-mount + pivot_root** (not naive `chroot()`).
|
|
22
|
+
- **uid/gid drop** (`--uid`, `--gid`).
|
|
23
|
+
- **Cgroup placement** (v1 & v2 — moves FC pid into a child cgroup).
|
|
24
|
+
- **Optional `--netns`** (network-ns inheritance).
|
|
25
|
+
- **Seccomp filters** loaded by firecracker itself after jailer execs it.
|
|
26
|
+
- **Why for us.** This is the standard hypervisor-hardening pattern. Our Phase 9 Helm/CRD work for `kata-fc` templates should use jailer-equivalent containment, even if the orchestrator wraps CH instead.
|
|
27
|
+
- **Skip.** Assumes host enforces file perms; no AppArmor/SELinux integration. `resource_limits` moved to cgroups in the 2024 release.
|
|
28
|
+
|
|
29
|
+
## 3. MMDS — guest metadata service (EC2-compatible)
|
|
30
|
+
|
|
31
|
+
- **Where.** `src/vmm/src/mmds/data_store.rs:1-230` (JSON store, 51.2 KB default limit), `src/vmm/src/mmds/ns.rs` (TCP), `src/vmm/src/mmds/token.rs` (V2 session tokens), `docs/device-api.md:26`.
|
|
32
|
+
- **What.**
|
|
33
|
+
- In-process metadata server at `169.254.169.254` (EC2-compatible).
|
|
34
|
+
- **V1**: no auth, deprecated.
|
|
35
|
+
- **V2**: session token (HMAC), required for cross-tenant safety on shared hosts.
|
|
36
|
+
- JSON tree set via `PUT /mmds`, patched via `PATCH`.
|
|
37
|
+
- **Requires** a virtio-net device to enable.
|
|
38
|
+
- **Not persisted across snapshots** — config saved, data store cleared. Reconfigure on restore.
|
|
39
|
+
- **Why for us.** Phase 9 — cheap, no-network bootstrap of guest config (env vars, JWT for L4 callback). Replaces a chunk of what we'd otherwise do through `/v1/configure` for VM-class templates.
|
|
40
|
+
- **Skip.** No nested auth; V2 tokens are simple HMAC.
|
|
41
|
+
|
|
42
|
+
## 4. Snapshot / restore — files + memory mmap + versioning
|
|
43
|
+
|
|
44
|
+
- **Where.** `src/vmm/src/persist.rs:1-100` (`MicrovmState`), `docs/snapshotting/snapshot-support.md:32-172`, `src/vmm/src/rpc_interface.rs:67, 98`.
|
|
45
|
+
- **What.**
|
|
46
|
+
- Files: (1) memory file (guest RAM), (2) vmstate (JSON + bincode + 64-bit CRC32), (3) disk files (user-managed).
|
|
47
|
+
- Restored via `MAP_PRIVATE` mmap → on-demand paging + COW.
|
|
48
|
+
- Versioning `MAJOR.MINOR.PATCH` — incompat versions rejected.
|
|
49
|
+
- Boot from snapshot < 125 ms.
|
|
50
|
+
- **vsock connections closed on snapshot** (listening sockets survive).
|
|
51
|
+
- **Network connection state not guaranteed.**
|
|
52
|
+
- No built-in encryption — user-managed at the storage layer.
|
|
53
|
+
- **Why for us.** Phase 10. Snapshot file lifetime ≥ resumed VM lifetime.
|
|
54
|
+
- **Caveat.** GIC version (aarch64) must match between snapshot and restore hosts.
|
|
55
|
+
|
|
56
|
+
## 5. Memory & resource limits
|
|
57
|
+
|
|
58
|
+
- **Where.** `src/vmm/src/vstate/memory.rs`, `src/vmm/src/resources.rs:1-100`, jailer cgroup integration.
|
|
59
|
+
- **What.**
|
|
60
|
+
- Guest RAM as anonymous mmap (or hugepages if configured). 1 MiB → 32 TiB theoretical.
|
|
61
|
+
- **Oversubscription enabled by default** — host OOM killer can evict.
|
|
62
|
+
- 1–32 vCPUs per microVM.
|
|
63
|
+
- virtio-mem hotplug **advertised but not optimized** — don't rely on dynamic memory in practice.
|
|
64
|
+
- **Why for us.** Phase 9 — predictable per-VM cost (~5 MiB VMM overhead). Densely pack idle microVMs.
|
|
65
|
+
|
|
66
|
+
## 6. Seccomp filters
|
|
67
|
+
|
|
68
|
+
- **Where.** `src/vmm/src/seccomp.rs:1-137`, `docs/seccomp.md:1-87`, `resources/seccomp/` (JSON rules).
|
|
69
|
+
- **What.**
|
|
70
|
+
- **Compiled at build time** (`seccompiler-bin` → bitcode embedded in binary).
|
|
71
|
+
- Per-thread filters: vmm, api, vcpu (separate allowlists).
|
|
72
|
+
- Max 4096 BPF instructions/filter.
|
|
73
|
+
- Override at runtime: `--seccomp-filter <path>`.
|
|
74
|
+
- **Never disable in prod** (`--no-seccomp`).
|
|
75
|
+
- **Why for us.** Phase 9 — direct lesson: per-thread allowlists. Don't write one big filter; segment by thread role.
|
|
76
|
+
|
|
77
|
+
## 7. Logging & metrics — named-pipe drain, best-effort
|
|
78
|
+
|
|
79
|
+
- **Where.** `src/vmm/src/logger/`, `docs/metrics.md`, `src/vmm/src/rpc_interface.rs:60-62`.
|
|
80
|
+
- **What.** Plain-text logs to named pipe. Metrics every 60 s + on events (start, panic). Counters for per-device I/O, vCPU halts, `lost-logs`, `lost-metrics` (when pipe full).
|
|
81
|
+
- **Why for us.** Phase 9 — must drain the pipe in real time or signals are lost. Our metrics shipper must keep up.
|
|
82
|
+
- **Skip.** No structured logging (no syslog/JSON). Customer owns aggregation.
|
|
83
|
+
|
|
84
|
+
## 8. What Firecracker explicitly does NOT support
|
|
85
|
+
|
|
86
|
+
This list is the reason **Cloud Hypervisor is our primary** and FC is the secondary backend:
|
|
87
|
+
|
|
88
|
+
- **✗ virtio-fs** — block devices + vsock only. → Use CH for skill / user-data mounts.
|
|
89
|
+
- **✗ GPU / VFIO** — no IOMMU, no GPU paravirt. → CH or kata-qemu for GPU.
|
|
90
|
+
- **✗ Arbitrary PCI hotplug** — only virtio-block/net/pmem hotplug as developer-preview.
|
|
91
|
+
- **✗ Guest graceful reboot (x86_64)** — only ARM64 via PSCI.
|
|
92
|
+
- **✗ Nested virt.**
|
|
93
|
+
- **✗ 32-bit guest.**
|
|
94
|
+
- **✗ ACPI PM / thermal throttling (x86).**
|
|
95
|
+
- **Devices total**: virtio-net, virtio-block, virtio-balloon, virtio-vsock, serial, minimal i8042.
|
|
96
|
+
|
|
97
|
+
## 9. Multi-arch (x86_64 ↔ aarch64)
|
|
98
|
+
|
|
99
|
+
- **Where.** `src/arch/x86_64/`, `src/arch/aarch64/`.
|
|
100
|
+
- **What.** Both first-class. Tested on AWS Intel/AMD/Graviton metals. GICv2/GICv3 supported on aarch64 but **snapshot/restore requires same GIC version** on both hosts.
|
|
101
|
+
|
|
102
|
+
## Summary table
|
|
103
|
+
|
|
104
|
+
| Pattern | File | Phase | Constraint |
|
|
105
|
+
|---|---|---|---|
|
|
106
|
+
| REST on unix socket | `rpc_interface.rs` | 8 | Synchronous only |
|
|
107
|
+
| **Jailer** (chroot + ns + cgroup + uid) | `jailer/src/main.rs` + `chroot.rs` | 8 | Standard hardening pattern — adopt principle |
|
|
108
|
+
| MMDS V2 (token-auth) | `mmds/data_store.rs` | 8 | Cleared on snapshot restore |
|
|
109
|
+
| Snapshot files + CRC + ondemand | `persist.rs` | 10 | Memory file must persist |
|
|
110
|
+
| Memory oversubscription | `vstate/memory.rs` | 8 | OOM killer can evict |
|
|
111
|
+
| Per-thread seccomp BPF | `seccomp.rs` | 8 | Compiled in; segmented by role |
|
|
112
|
+
| Named-pipe logs/metrics | `logger/` | 8,10 | Must drain in real-time |
|
|
113
|
+
| Constraint: no virtio-fs/GPU | `docs/design.md` | 8 | Use CH for those workloads |
|
|
114
|
+
| Multi-arch | `arch/` | 8,10 | Snapshot needs matching GIC on aarch64 |
|