@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,267 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Kata Containers runtime (containerd 2.x)
|
|
5
|
+
|
|
6
|
+
This guide is the runbook for deploying `computer-use-server` on Kubernetes with
|
|
7
|
+
**[Kata Containers](https://katacontainers.io/)** as the inner Docker-in-Docker
|
|
8
|
+
(DinD) runtime. It covers why Kata, how to install it, how to configure the Helm
|
|
9
|
+
chart, and how to verify and troubleshoot the result.
|
|
10
|
+
|
|
11
|
+
For the chart reference in general, see [`kubernetes.md`](kubernetes.md) and the
|
|
12
|
+
[chart README](../helm/computer-use-server/README.md).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Why Kata
|
|
17
|
+
|
|
18
|
+
Kata Containers is the supported DinD runtime for the Helm chart. It runs each
|
|
19
|
+
pod inside a lightweight VM (a *microVM*) with its own guest kernel, works on
|
|
20
|
+
**containerd 2.x** — the runtime that ships with current Kubernetes
|
|
21
|
+
distributions (RKE2 / k3s / kubeadm ≥ 1.34) — and gives **hypervisor-grade
|
|
22
|
+
isolation**. The cost is a slower cold start and a fixed per-pod memory overhead
|
|
23
|
+
(see [Tradeoffs](#tradeoffs)).
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Prerequisites
|
|
28
|
+
|
|
29
|
+
- A Kubernetes cluster on **containerd 2.x**.
|
|
30
|
+
- Nodes that can run a hypervisor: **nested virtualization or bare metal** with
|
|
31
|
+
`/dev/kvm` available. Check with `ls -l /dev/kvm` on a node.
|
|
32
|
+
- `helm` ≥ 3.14.
|
|
33
|
+
- The target namespace must allow privileged pods (Kata DinD runs privileged —
|
|
34
|
+
see [why](#step-2--configure-the-helm-chart)). Pod Security Admission `enforce`
|
|
35
|
+
baseline must be `privileged` for that namespace.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Step 1 — Install kata-deploy
|
|
40
|
+
|
|
41
|
+
[`kata-deploy`](https://github.com/kata-containers/kata-containers/tree/main/tools/packaging/kata-deploy)
|
|
42
|
+
is the official installer. It runs a DaemonSet that drops the Kata binaries and
|
|
43
|
+
containerd shim onto each node and registers the `RuntimeClass` objects.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
helm install kata-deploy \
|
|
47
|
+
oci://ghcr.io/kata-containers/kata-deploy-charts/kata-deploy \
|
|
48
|
+
--version 3.30.0 \
|
|
49
|
+
--namespace kube-system \
|
|
50
|
+
--set env.shims=qemu \
|
|
51
|
+
--set env.defaultShim=qemu \
|
|
52
|
+
--set env.createDefaultRuntimeClass=false
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `env.shims=qemu` installs only the QEMU shim — the one this guide uses. Add
|
|
56
|
+
others (`fc`, `clh`) only if you need them.
|
|
57
|
+
- `createDefaultRuntimeClass=false` keeps `runc` as the cluster default — Kata
|
|
58
|
+
is opt-in per workload, not cluster-wide.
|
|
59
|
+
|
|
60
|
+
Verify the RuntimeClass landed:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
kubectl get runtimeclass kata-qemu
|
|
64
|
+
# NAME HANDLER
|
|
65
|
+
# kata-qemu kata-qemu
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Optional — a "heavy" RuntimeClass for large guests
|
|
69
|
+
|
|
70
|
+
The Computer Use workspace can need a multi-GiB guest. RuntimeClass `overhead`
|
|
71
|
+
is fixed per class, so for large guests create a dedicated class:
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
apiVersion: node.k8s.io/v1
|
|
75
|
+
kind: RuntimeClass
|
|
76
|
+
metadata:
|
|
77
|
+
name: kata-qemu-heavy
|
|
78
|
+
handler: kata-qemu
|
|
79
|
+
overhead:
|
|
80
|
+
podFixed:
|
|
81
|
+
memory: "350Mi"
|
|
82
|
+
cpu: "250m"
|
|
83
|
+
scheduling:
|
|
84
|
+
nodeSelector:
|
|
85
|
+
katacontainers.io/kata-runtime: "true"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The **guest memory** itself is set per-pod via annotations, not the RuntimeClass.
|
|
89
|
+
Add them under `orchestrator.podAnnotations` (or `podAnnotations`) in the chart:
|
|
90
|
+
|
|
91
|
+
```yaml
|
|
92
|
+
podAnnotations:
|
|
93
|
+
io.katacontainers.config.hypervisor.default_memory: "8192" # MiB
|
|
94
|
+
io.katacontainers.config.hypervisor.default_maxmemory: "16384"
|
|
95
|
+
io.katacontainers.config.hypervisor.default_vcpus: "4"
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
For these annotations to be honored, kata-deploy must allow them — pass
|
|
99
|
+
`--set 'env.allowedHypervisorAnnotations=default_memory default_maxmemory default_vcpus'`
|
|
100
|
+
at install time.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step 2 — Configure the Helm chart
|
|
105
|
+
|
|
106
|
+
The chart defaults already target Kata — the keys below are the chart defaults,
|
|
107
|
+
shown here so you understand what each one does. A ready-to-edit values file is
|
|
108
|
+
at [`examples/helm/standalone/values.yaml`](../examples/helm/standalone/values.yaml).
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
orchestrator:
|
|
112
|
+
runtimeClassName: kata-qemu # or kata-qemu-heavy
|
|
113
|
+
|
|
114
|
+
dind:
|
|
115
|
+
privileged: true # REQUIRED — see below
|
|
116
|
+
storageDriver: fuse-overlayfs # overlay2 fails on the Kata guest root
|
|
117
|
+
kataInit:
|
|
118
|
+
enabled: true # runs the chart-managed guest init wrapper
|
|
119
|
+
|
|
120
|
+
persistence:
|
|
121
|
+
varLibDocker:
|
|
122
|
+
persistentVolume:
|
|
123
|
+
enabled: true # Block PVC — preserves xattrs
|
|
124
|
+
size: 50Gi
|
|
125
|
+
storageClass: longhorn # must provision Block volumes
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Why each setting:
|
|
129
|
+
|
|
130
|
+
- **`dind.privileged: true`** — `dockerd` needs `CAP_NET_ADMIN`/`CAP_NET_RAW` to
|
|
131
|
+
build its iptables NAT chain. Without it dockerd fails with
|
|
132
|
+
`iptables: Could not fetch rule set generation id: Permission denied`.
|
|
133
|
+
**This is safe under Kata** — the capabilities are confined to the microVM and
|
|
134
|
+
cannot reach the host kernel.
|
|
135
|
+
- **`dind.storageDriver: fuse-overlayfs`** — `overlay2` cannot mount on the Kata
|
|
136
|
+
virtio-fs guest root
|
|
137
|
+
([kata-containers#1888](https://github.com/kata-containers/kata-containers/issues/1888)).
|
|
138
|
+
`fuse-overlayfs` is a userspace overlay filesystem with full xattr support.
|
|
139
|
+
- **`dind.kataInit.enabled: true`** — runs the chart-managed entrypoint wrapper
|
|
140
|
+
([see below](#what-the-katainit-wrapper-does)).
|
|
141
|
+
- **Block PVC for `/var/lib/docker`** — the Kata virtio-fs root drops
|
|
142
|
+
`security.capability` xattrs (CVE-2021-20263), which breaks binaries that rely
|
|
143
|
+
on file capabilities (e.g. GStreamer in the workspace image). A **Block-mode**
|
|
144
|
+
PVC arrives in the guest as a raw `virtio-blk` device; the init wrapper formats
|
|
145
|
+
it `ext4` and mounts it, and ext4 preserves xattrs.
|
|
146
|
+
|
|
147
|
+
Install:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
kubectl create namespace open-computer-use
|
|
151
|
+
kubectl label namespace open-computer-use \
|
|
152
|
+
pod-security.kubernetes.io/enforce=privileged --overwrite
|
|
153
|
+
|
|
154
|
+
helm install ocu helm/computer-use-server \
|
|
155
|
+
-n open-computer-use \
|
|
156
|
+
-f examples/helm/standalone/values.yaml
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## What the `kataInit` wrapper does
|
|
162
|
+
|
|
163
|
+
When `dind.kataInit.enabled: true`, the dind container's entrypoint is a
|
|
164
|
+
chart-managed script (rendered into a ConfigMap, see
|
|
165
|
+
`templates/configmap-dind-init.yaml`). Before `exec`-ing `dockerd` it runs four
|
|
166
|
+
idempotent, self-detecting steps:
|
|
167
|
+
|
|
168
|
+
1. **Install `fuse-overlayfs`** — `apk add --no-cache fuse-overlayfs` if it is
|
|
169
|
+
not already present. Add more packages via `dind.kataInit.extraPackages`.
|
|
170
|
+
2. **Create `/dev/fuse`** — the Kata guest kernel has `fuse` compiled in but no
|
|
171
|
+
device node; `mknod /dev/fuse c 10 229`.
|
|
172
|
+
3. **Format + mount the Block PVC** — if `persistence.varLibDocker.persistentVolume`
|
|
173
|
+
is enabled, `mkfs.ext4` the raw device once (skipped if already formatted),
|
|
174
|
+
then mount it at `/var/lib/docker`.
|
|
175
|
+
4. **cgroup-v2 PID-1 evacuation** — the Kata guest's systemd leaves PID 1 in a
|
|
176
|
+
domain-threaded root cgroup, which blocks nested `runc`
|
|
177
|
+
(`cannot enter cgroupv2 ... with domain controllers`). The wrapper moves
|
|
178
|
+
processes into a child cgroup and republishes controllers at the root
|
|
179
|
+
([docker-library/docker#308](https://github.com/docker-library/docker/issues/308)).
|
|
180
|
+
|
|
181
|
+
Every step no-ops cleanly on an environment that does not need it.
|
|
182
|
+
|
|
183
|
+
### Alternative — a pre-baked custom image
|
|
184
|
+
|
|
185
|
+
If you prefer not to `apk add` at container start (faster cold start, air-gapped
|
|
186
|
+
clusters), build a custom dind image and point `dind.image` at it:
|
|
187
|
+
|
|
188
|
+
```dockerfile
|
|
189
|
+
FROM docker:27-dind
|
|
190
|
+
RUN apk add --no-cache fuse-overlayfs
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
You can still keep `dind.kataInit.enabled: true` — step 1 becomes a no-op while
|
|
194
|
+
steps 2–4 still run. Or disable `kataInit` entirely and bake the init logic into
|
|
195
|
+
your image's own entrypoint.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Step 3 — Verify
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# RuntimeClass is registered
|
|
203
|
+
kubectl get runtimeclass kata-qemu
|
|
204
|
+
|
|
205
|
+
# The pod is scheduled with the Kata RuntimeClass
|
|
206
|
+
kubectl -n open-computer-use get pod -l app.kubernetes.io/name=computer-use-server \
|
|
207
|
+
-o jsonpath='{.items[0].spec.runtimeClassName}' # => kata-qemu
|
|
208
|
+
|
|
209
|
+
# dockerd is healthy and using fuse-overlayfs
|
|
210
|
+
POD=$(kubectl -n open-computer-use get pod -l app.kubernetes.io/name=computer-use-server -o name)
|
|
211
|
+
kubectl -n open-computer-use exec "$POD" -c dind -- docker info | grep "Storage Driver"
|
|
212
|
+
# Storage Driver: fuse-overlayfs
|
|
213
|
+
|
|
214
|
+
# /dev/fuse exists and /var/lib/docker is the ext4 Block volume
|
|
215
|
+
kubectl -n open-computer-use exec "$POD" -c dind -- sh -c 'ls -l /dev/fuse; mount | grep /var/lib/docker'
|
|
216
|
+
|
|
217
|
+
# Orchestrator health
|
|
218
|
+
helm test ocu -n open-computer-use
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Finally, open a chat and confirm a workspace container spawns and tool calls
|
|
222
|
+
succeed end to end.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Troubleshooting
|
|
227
|
+
|
|
228
|
+
| Symptom | Cause | Fix |
|
|
229
|
+
|---|---|---|
|
|
230
|
+
| `dockerd: iptables: Could not fetch rule set generation id: Permission denied` | dind not privileged | set `dind.privileged: true` |
|
|
231
|
+
| `failed to mount overlay: operation not permitted` | `overlay2` on the Kata virtio-fs root ([kata#1888](https://github.com/kata-containers/kata-containers/issues/1888)) | set `dind.storageDriver: fuse-overlayfs` + `dind.kataInit.enabled: true` |
|
|
232
|
+
| `runc ... cannot enter cgroupv2 ... with domain controllers` | Kata guest PID-1 domain-threaded cgroup | `dind.kataInit.enabled: true` runs the cgroup shim |
|
|
233
|
+
| Workspace binaries fail / missing file capabilities (e.g. GStreamer) | virtio-fs drops `security.capability` xattrs (CVE-2021-20263) | enable `persistence.varLibDocker.persistentVolume` (Block PVC) |
|
|
234
|
+
| Pod stuck `Pending`, `runtimeclass not found` | kata-deploy not installed / DaemonSet not ready on the node | check `kubectl -n kube-system get ds kata-deploy` and `kubectl get runtimeclass` |
|
|
235
|
+
| Pod rejected by Pod Security Admission | namespace `enforce` is not `privileged` | `kubectl label ns <ns> pod-security.kubernetes.io/enforce=privileged --overwrite` |
|
|
236
|
+
| `mknod`/`mkfs` errors in dind logs | wrapper running but device absent | confirm the PVC is `volumeMode: Block` and bound; check `kubectl get pvc` |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Tradeoffs
|
|
241
|
+
|
|
242
|
+
Kata is the runtime the chart uses. The table puts it next to the
|
|
243
|
+
`runc + privileged` fallback for context — that fallback is functional but
|
|
244
|
+
insecure, fit for local testing only.
|
|
245
|
+
|
|
246
|
+
| Dimension | Kata-qemu (chart default) | runc + privileged (testing only) |
|
|
247
|
+
|---|---|---|
|
|
248
|
+
| Isolation | hardware VM, **separate** guest kernel | none — host kernel, escape is trivial |
|
|
249
|
+
| containerd 2.x | ✅ works | ✅ works |
|
|
250
|
+
| Cold start | slower (microVM boot, ~1–3 s) | fast |
|
|
251
|
+
| Storage driver | `fuse-overlayfs` (`overlay2` fails) | `overlay2` / `vfs` |
|
|
252
|
+
| Memory overhead | ~150–350 MiB/pod (guest kernel + hypervisor) | none |
|
|
253
|
+
| `privileged` needed | yes — but caps confined to the VM | yes — caps on the **host** |
|
|
254
|
+
| Setup complexity | medium (kata-deploy, init wrapper, Block PVC) | low |
|
|
255
|
+
| Production-safe | yes | **no** |
|
|
256
|
+
|
|
257
|
+
**Bottom line:** Kata is the recommended runtime — strong isolation and it works
|
|
258
|
+
on modern containerd 2.x. `runc + privileged` works too, but the inner daemon
|
|
259
|
+
shares the host kernel, so it is a local-testing escape hatch only, never
|
|
260
|
+
production.
|
|
261
|
+
|
|
262
|
+
## See also
|
|
263
|
+
|
|
264
|
+
- [`kubernetes.md`](kubernetes.md) — Kubernetes deployment overview
|
|
265
|
+
- [chart README](../helm/computer-use-server/README.md) — full values reference
|
|
266
|
+
- [ADR-0011](future-architecture/adr/0011-kata-as-first-class-dind-runtime.md) — the decision record
|
|
267
|
+
- [`examples/helm/standalone/values.yaml`](../examples/helm/standalone/values.yaml) — copy-paste config
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Kubernetes deployment
|
|
2
|
+
|
|
3
|
+
The Docker Compose stack in `docker-compose.yml` / `docker-compose.webui.yml` ships as a Helm chart in [`helm/computer-use-server/`](../helm/computer-use-server/). This is the recommended way to run open-computer-use on Kubernetes.
|
|
4
|
+
|
|
5
|
+
## Runtime
|
|
6
|
+
|
|
7
|
+
The orchestrator runs an inner Docker daemon, which needs a DinD-capable runtime
|
|
8
|
+
on the node. The chart uses **[Kata Containers](https://katacontainers.io/)** —
|
|
9
|
+
it works on modern containerd 2.x clusters (RKE2 / k3s / kubeadm ≥ 1.34) and
|
|
10
|
+
isolates the pod in a microVM. Install `kata-deploy` and follow the
|
|
11
|
+
[Kata runtime guide](kata-runtime.md) before installing the chart.
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# 1. Install Kata Containers (kata-deploy) on the nodes once — see
|
|
17
|
+
# docs/kata-runtime.md. Confirm the RuntimeClass exists:
|
|
18
|
+
kubectl get runtimeclass kata-qemu
|
|
19
|
+
|
|
20
|
+
# 2. Add the chart repo (published from the gh-pages branch on every release tag):
|
|
21
|
+
helm repo add open-computer-use https://wide-moat.github.io/open-computer-use
|
|
22
|
+
helm repo update
|
|
23
|
+
|
|
24
|
+
# 3. Install:
|
|
25
|
+
helm install ocu open-computer-use/computer-use-server \
|
|
26
|
+
--namespace open-computer-use --create-namespace \
|
|
27
|
+
--values examples/helm/standalone/values.yaml
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or, against a git checkout for unreleased changes:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
helm install ocu helm/computer-use-server \
|
|
34
|
+
--namespace open-computer-use --create-namespace \
|
|
35
|
+
--values examples/helm/standalone/values.yaml
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The chart README at [`helm/computer-use-server/README.md`](../helm/computer-use-server/README.md) is the authoritative reference. This page is the navigation.
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
- **[`examples/helm/standalone/`](../examples/helm/standalone/)** — minimum-viable config (just the orchestrator). Closest to `docker-compose.yml`.
|
|
43
|
+
- **[`examples/helm/with-open-webui/`](../examples/helm/with-open-webui/)** — orchestrator + Open WebUI via the upstream Open WebUI Helm chart. Closest to `docker-compose.yml` + `docker-compose.webui.yml` together.
|
|
44
|
+
|
|
45
|
+
## Architecture
|
|
46
|
+
|
|
47
|
+
The orchestrator pod has three containers:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
┌──────────────────────────── Pod (runtimeClassName: kata-qemu) ──────────────────┐
|
|
51
|
+
│ │
|
|
52
|
+
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────────────────────┐ │
|
|
53
|
+
│ │ orchestrator │──►│ inner dockerd │◄──│ cleanup sidecar (cron) │ │
|
|
54
|
+
│ │ FastAPI :8081 │ │ spawns chat-* │ │ reaps stale chat-* + data │ │
|
|
55
|
+
│ └─────────────────┘ └─────────────────┘ └──────────────────────────────┘ │
|
|
56
|
+
│ │ /var/run/docker.sock ▲ ▲ ▲ │
|
|
57
|
+
│ └──────── shared emptyDir (dind-socket) ───────────┘ │
|
|
58
|
+
│ │
|
|
59
|
+
│ Volumes: │
|
|
60
|
+
│ - emptyDir dind-socket → /var/run on all three containers │
|
|
61
|
+
│ - Block PVC var-lib-docker → /var/lib/docker on dind ONLY (xattr-safe) │
|
|
62
|
+
│ - PVC user-data → /tmp/computer-use-data (RWO) │
|
|
63
|
+
│ - PVC data → /data (RWO) │
|
|
64
|
+
│ - PVC skills-cache → /data/skills-cache (RWO) │
|
|
65
|
+
└─────────────────────────────────────────────────────────────────────────────────┘
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Why DinD instead of native k8s Pods?**
|
|
69
|
+
The existing orchestrator code talks to a Docker socket. Lifting it onto Kubernetes via Kata Containers keeps the app code unchanged. A future `K8sBackend` rewrite (drafted in [`docs/future-architecture/`](future-architecture/)) will spawn native Pods, at which point the inner dockerd disappears — but that's a separate workstream.
|
|
70
|
+
|
|
71
|
+
**Why is the orchestrator single-replica?**
|
|
72
|
+
It owns the inner Docker daemon and three RWO PVCs. There is no shared state between replicas and no leader-election. The chart hard-pins `replicas: 1` in `values.schema.json`.
|
|
73
|
+
|
|
74
|
+
## Prerequisites checklist
|
|
75
|
+
|
|
76
|
+
- Kubernetes ≥ 1.27
|
|
77
|
+
- StorageClass that supports `ReadWriteOnce` and is the cluster default (or pass `persistence.*.storageClass` explicitly), plus one that provisions Block volumes for `/var/lib/docker`
|
|
78
|
+
- Kata Containers installed on candidate nodes + the `kata-qemu` `RuntimeClass` — see [`kata-runtime.md`](kata-runtime.md)
|
|
79
|
+
- Ingress controller (nginx-ingress, Traefik, etc.) if you set `ingress.enabled=true`
|
|
80
|
+
- DNS + TLS cert for the public hostname referenced by `PUBLIC_BASE_URL`
|
|
81
|
+
|
|
82
|
+
## See also
|
|
83
|
+
|
|
84
|
+
- [`helm/computer-use-server/README.md`](../helm/computer-use-server/README.md) — chart reference and troubleshooting
|
|
85
|
+
- [`docs/kata-runtime.md`](kata-runtime.md) — Kata Containers runtime guide (install, configure, verify, troubleshoot)
|
|
86
|
+
- [`docs/future-architecture/`](future-architecture/) — draft of the future native-Pod backend (not implemented)
|
package/docs/logo.png
ADDED
|
Binary file
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Multi-CLI Sub-Agent Runtime
|
|
5
|
+
|
|
6
|
+
> The orchestrator dispatches sub-agent calls to one of three CLIs based on the `SUBAGENT_CLI` environment variable. Default unset = `claude` (byte-identical backwards-compat with v0.9.2.0).
|
|
7
|
+
|
|
8
|
+
## When to flip the switch
|
|
9
|
+
|
|
10
|
+
| Goal | `SUBAGENT_CLI` | Why |
|
|
11
|
+
|------|----------------|-----|
|
|
12
|
+
| Default — Anthropic / LiteLLM gateway | `claude` (or unset) | Native Claude Code; cost reporting; max-turns enforced |
|
|
13
|
+
| OpenAI Codex (gpt-5-codex etc.) | `codex` | First-party OpenAI tooling; `--ephemeral` runs; no built-in cost reporting |
|
|
14
|
+
| OpenRouter / qwen / DeepSeek / OSS / Bedrock-via-LiteLLM | `opencode` | 75+ provider router; per-step cost when provider reports it |
|
|
15
|
+
|
|
16
|
+
## Setup — common steps (apply to all three)
|
|
17
|
+
|
|
18
|
+
1. Pull the latest `open-computer-use` image (codex + opencode are pre-installed alongside claude).
|
|
19
|
+
2. Set `SUBAGENT_CLI=<value>` in your `.env`.
|
|
20
|
+
3. Set the per-CLI auth env vars (see the per-CLI sections below).
|
|
21
|
+
4. Restart the orchestrator: `docker compose up -d --force-recreate computer-use-server`.
|
|
22
|
+
5. Verify the runtime took effect:
|
|
23
|
+
```bash
|
|
24
|
+
docker compose logs computer-use-server | grep "Sub-agent runtime"
|
|
25
|
+
# Expected: [MCP] Sub-agent runtime: <value>
|
|
26
|
+
```
|
|
27
|
+
6. Spawn a sandbox (any chat or `/health` poke) and verify the CLI is on PATH:
|
|
28
|
+
```bash
|
|
29
|
+
docker exec <sandbox-container> <cli> --version
|
|
30
|
+
# Expected: a non-zero version string
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Switch to Claude (default — no setup needed)
|
|
34
|
+
|
|
35
|
+
This is the default path. If you previously set `SUBAGENT_CLI=codex` or `=opencode` and want to revert, either delete the line from `.env` or set `SUBAGENT_CLI=claude` explicitly — both resolve identically.
|
|
36
|
+
|
|
37
|
+
For Anthropic / LiteLLM gateway configuration, see [`docs/claude-code-gateway.md`](./claude-code-gateway.md).
|
|
38
|
+
|
|
39
|
+
## Switch to Codex
|
|
40
|
+
|
|
41
|
+
Add to `.env`:
|
|
42
|
+
```bash
|
|
43
|
+
SUBAGENT_CLI=codex
|
|
44
|
+
OPENAI_API_KEY=sk-...
|
|
45
|
+
# Optional gateway (Azure OpenAI, LiteLLM proxy, etc.):
|
|
46
|
+
OPENAI_BASE_URL=https://your-litellm-proxy/v1
|
|
47
|
+
# Optional per-CLI default model:
|
|
48
|
+
CODEX_SUB_AGENT_DEFAULT_MODEL=gpt-5-codex
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Restart per common steps. The container's `~/.codex/config.toml` is rendered conditionally:
|
|
52
|
+
- with `OPENAI_BASE_URL` set → contains a `[model_providers.custom]` block pointing at your gateway;
|
|
53
|
+
- without it → empty file (Codex uses defaults).
|
|
54
|
+
|
|
55
|
+
Verify:
|
|
56
|
+
```bash
|
|
57
|
+
docker exec <sandbox> codex --version # Expect: codex-cli 0.125.0
|
|
58
|
+
docker exec <sandbox> cat ~/.codex/config.toml
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Switch to OpenCode + qwen3-coder via OpenRouter (worked recipe)
|
|
62
|
+
|
|
63
|
+
This is the headline recipe — runs sub-agents against a frontier OSS coding model with no Anthropic dependency.
|
|
64
|
+
|
|
65
|
+
Add to `.env`:
|
|
66
|
+
```bash
|
|
67
|
+
SUBAGENT_CLI=opencode
|
|
68
|
+
OPENROUTER_API_KEY=sk-or-v1-...
|
|
69
|
+
OPENCODE_SUB_AGENT_DEFAULT_MODEL=openrouter/qwen/qwen-3-coder
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Restart:
|
|
73
|
+
```bash
|
|
74
|
+
docker compose up -d --force-recreate computer-use-server
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Verify the orchestrator picked up the runtime:
|
|
78
|
+
```bash
|
|
79
|
+
docker compose logs computer-use-server | grep "Sub-agent runtime"
|
|
80
|
+
# Expected: [MCP] Sub-agent runtime: opencode
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Spawn any sandbox and verify the OpenCode config is rendered without leaking the key:
|
|
84
|
+
```bash
|
|
85
|
+
docker exec <sandbox> cat /tmp/opencode.json
|
|
86
|
+
# Expected: provider.openrouter.options.apiKey is "{env:OPENROUTER_API_KEY}" — NOT a literal sk-or-v1-... value
|
|
87
|
+
# OpenCode 1.14.x schema: top-level key is "provider" (singular), apiKey nested under "options".
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The `{env:VAR}` syntax means OpenCode resolves the key at runtime from the container env. The file on disk contains zero plaintext secrets — the sandbox volume can be mounted, copied, or shared without leaking your OpenRouter key.
|
|
91
|
+
|
|
92
|
+
Trigger a sub-agent call from the chat (or via the MCP `sub_agent` tool). Expected response shape:
|
|
93
|
+
```text
|
|
94
|
+
**Sub-Agent Completed** (success)
|
|
95
|
+
<the qwen3-coder reply>
|
|
96
|
+
**Cost:** unavailable | **Duration:** 12.3s | **Turns:** unavailable
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`Cost: unavailable` is **expected** for opencode runs — see the next section.
|
|
100
|
+
|
|
101
|
+
## What changes when you flip the switch
|
|
102
|
+
|
|
103
|
+
| Aspect | claude | codex | opencode |
|
|
104
|
+
|--------|--------|-------|----------|
|
|
105
|
+
| Cost reporting | reported as USD | unavailable | depends on provider (some report per-step cost) |
|
|
106
|
+
| `max_turns` enforcement | enforced (CLI flag) | not enforced — `SUB_AGENT_TIMEOUT` is the backstop | not enforced — `SUB_AGENT_TIMEOUT` is the backstop |
|
|
107
|
+
| `resume_session_id` | supported | ignored with stderr warning (`--ephemeral` is stateless) | ignored with stderr warning |
|
|
108
|
+
| Model alias `sonnet` / `opus` / `haiku` | resolves to Claude IDs | hard-fail with actionable error message | resolves to `anthropic/claude-X-X` provider/model |
|
|
109
|
+
| Direct provider/model strings (e.g. `openrouter/qwen/qwen-3-coder`) | pass-through | pass-through | pass-through |
|
|
110
|
+
| `~/.claude/projects/*.jsonl` live log streaming | yes | no | no |
|
|
111
|
+
| Image install | always (pre-installed) | always (pre-installed) | always (pre-installed) |
|
|
112
|
+
|
|
113
|
+
If you set a Claude alias (`sonnet`/`opus`/`haiku`) while `SUBAGENT_CLI=codex`, the orchestrator hard-fails with a clear error rather than silently 400-ing against OpenAI:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
Model alias 'sonnet' is Claude-only; SUBAGENT_CLI=codex requires a GPT model id
|
|
117
|
+
(e.g. 'gpt-5-codex') or set CODEX_SUB_AGENT_DEFAULT_MODEL.
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Escape hatch — plain bash terminal
|
|
121
|
+
|
|
122
|
+
`SUBAGENT_CLI` makes the in-browser ttyd terminal auto-launch the chosen CLI. To get a plain bash prompt instead:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Per-session (in a new terminal tab):
|
|
126
|
+
NO_AUTOSTART=1 bash
|
|
127
|
+
|
|
128
|
+
# OR persistently for this container (next ttyd session):
|
|
129
|
+
touch /tmp/.no_autostart
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The hint also appears in the entrypoint banner when you start the container.
|
|
133
|
+
|
|
134
|
+
## Auth isolation guarantee
|
|
135
|
+
|
|
136
|
+
The orchestrator injects only the active CLI's auth env vars into the sandbox container. Concretely:
|
|
137
|
+
|
|
138
|
+
- `SUBAGENT_CLI=claude` → only `ANTHROPIC_AUTH_TOKEN` and `ANTHROPIC_BASE_URL` reach the sandbox; `OPENAI_API_KEY` and `OPENROUTER_API_KEY` are stripped even if set on the host.
|
|
139
|
+
- `SUBAGENT_CLI=codex` → only `OPENAI_*` and `AZURE_OPENAI_*` keys reach the sandbox; `ANTHROPIC_AUTH_TOKEN` and `OPENROUTER_API_KEY` are stripped.
|
|
140
|
+
- `SUBAGENT_CLI=opencode` → only `OPENROUTER_API_KEY`, `OPENAI_API_KEY`, `ANTHROPIC_API_KEY` reach the sandbox; `ANTHROPIC_AUTH_TOKEN` (the legacy Claude key) is stripped.
|
|
141
|
+
|
|
142
|
+
This prevents an operator's leftover `OPENAI_API_KEY` (from a previous Codex experiment) from silently routing OpenCode traffic through OpenAI when they meant OpenRouter.
|
|
143
|
+
|
|
144
|
+
## Advanced configs
|
|
145
|
+
|
|
146
|
+
The image entrypoint renders **minimal viable** configs only — what works for the common case. For Azure routing, approval modes, MCP federation, custom OpenAI-compat gateways behind nginx, opencode personas, and operator-supplied overrides via `OPENCODE_CONFIG_EXTRA` / `CODEX_CONFIG_EXTRA` env hooks, see [`docs/cli-config-templates.md`](cli-config-templates.md).
|
|
147
|
+
|
|
148
|
+
## Troubleshooting
|
|
149
|
+
|
|
150
|
+
- **Banner shows the wrong CLI** — `SUBAGENT_CLI` is read once at orchestrator boot, not per-request. Restart: `docker compose restart computer-use-server`.
|
|
151
|
+
- **`SUBAGENT_CLI=cline` (typo) → orchestrator refuses to start** — this is intentional. Fix the typo; check `docker compose logs computer-use-server` for the FATAL line listing the three accepted values.
|
|
152
|
+
- **OpenCode falls back to a default provider** — verify `/tmp/opencode.json` exists in the sandbox; if not, the container needs `--force-recreate` to re-render it via the entrypoint heredoc.
|
|
153
|
+
- **Cost reads `$0.0000` for codex/opencode** — this is a bug; the expected display is `cost: unavailable`. File an issue with the result blob attached.
|
|
154
|
+
- **Sub-agent for codex/opencode runs forever** — `max_turns` is Claude-only; the backstop for the other two is `SUB_AGENT_TIMEOUT` (default 3600s). Lower it in `.env` if you need a tighter cap: `SUB_AGENT_TIMEOUT=1800`.
|
|
155
|
+
|
|
156
|
+
## Prior art
|
|
157
|
+
|
|
158
|
+
- [OpenAI Codex CLI documentation](https://developers.openai.com/codex/cli/reference) — `codex exec` flags, JSONL event schema
|
|
159
|
+
- [sst/opencode documentation](https://opencode.ai/docs/) — `opencode run`, `{env:VAR}` config substitution, providers list
|
|
160
|
+
- [OpenRouter qwen3-coder model page](https://openrouter.ai/qwen/qwen3-coder)
|
|
161
|
+
- Issue #40 / PR #41 — community discussion that informed Phase 3 (Claude Code gateway compatibility), the foundation this milestone builds on.
|