@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,102 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 520" font-family="Inter, -apple-system, system-ui, sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.box { rx: 10; stroke-width: 1.5; }
|
|
5
|
+
.label { font-size: 13px; font-weight: 600; fill: #fff; }
|
|
6
|
+
.sublabel { font-size: 10px; fill: rgba(255,255,255,0.8); }
|
|
7
|
+
.arrow { stroke-width: 1.8; fill: none; marker-end: url(#ah2); }
|
|
8
|
+
.arrow-label { font-size: 9px; fill: #6b7280; }
|
|
9
|
+
.note { font-size: 9.5px; fill: #64748b; }
|
|
10
|
+
.highlight { font-size: 10px; font-weight: 600; }
|
|
11
|
+
</style>
|
|
12
|
+
<marker id="ah2" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
13
|
+
<path d="M0,0 L8,3 L0,6" fill="#94a3b8"/>
|
|
14
|
+
</marker>
|
|
15
|
+
<marker id="ah2-green" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
16
|
+
<path d="M0,0 L8,3 L0,6" fill="#22c55e"/>
|
|
17
|
+
</marker>
|
|
18
|
+
<marker id="ah2-blue" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
19
|
+
<path d="M0,0 L8,3 L0,6" fill="#3b82f6"/>
|
|
20
|
+
</marker>
|
|
21
|
+
<marker id="ah2-red" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
22
|
+
<path d="M0,0 L8,3 L0,6" fill="#ef4444"/>
|
|
23
|
+
</marker>
|
|
24
|
+
</defs>
|
|
25
|
+
|
|
26
|
+
<rect width="920" height="520" rx="12" fill="#fafbfc"/>
|
|
27
|
+
<text x="460" y="28" text-anchor="middle" font-size="15" font-weight="700" fill="#1e293b">Shared Browser & Interactive Access</text>
|
|
28
|
+
|
|
29
|
+
<!-- Sandbox Container (big box) -->
|
|
30
|
+
<rect x="350" y="50" width="530" height="200" class="box" fill="#0f766e" stroke="#0d9488"/>
|
|
31
|
+
<text x="615" y="73" text-anchor="middle" class="label">Sandbox Container</text>
|
|
32
|
+
|
|
33
|
+
<!-- Chromium inside sandbox -->
|
|
34
|
+
<rect x="380" y="90" width="180" height="70" rx="8" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
35
|
+
<text x="470" y="113" text-anchor="middle" font-size="11" font-weight="600" fill="#fff">Chromium Browser</text>
|
|
36
|
+
<text x="470" y="128" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">CDP :9222</text>
|
|
37
|
+
<text x="470" y="142" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">Single instance, shared state</text>
|
|
38
|
+
|
|
39
|
+
<!-- ttyd inside sandbox -->
|
|
40
|
+
<rect x="580" y="90" width="140" height="70" rx="8" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
41
|
+
<text x="650" y="113" text-anchor="middle" font-size="11" font-weight="600" fill="#fff">Terminal (ttyd)</text>
|
|
42
|
+
<text x="650" y="128" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">:7681 + tmux</text>
|
|
43
|
+
<text x="650" y="142" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">Claude Code CLI</text>
|
|
44
|
+
|
|
45
|
+
<!-- Claude Code in sandbox -->
|
|
46
|
+
<rect x="740" y="90" width="120" height="70" rx="8" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
47
|
+
<text x="800" y="113" text-anchor="middle" font-size="11" font-weight="600" fill="#fff">Claude Code</text>
|
|
48
|
+
<text x="800" y="128" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">Autonomous agent</text>
|
|
49
|
+
<text x="800" y="142" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.7)">Full sandbox access</text>
|
|
50
|
+
|
|
51
|
+
<!-- Filesystem -->
|
|
52
|
+
<rect x="380" y="175" width="480" height="55" rx="6" fill="rgba(255,255,255,0.1)" stroke="rgba(255,255,255,0.2)"/>
|
|
53
|
+
<text x="620" y="195" text-anchor="middle" font-size="10" font-weight="500" fill="rgba(255,255,255,0.9)">Shared Filesystem: /home/assistant/</text>
|
|
54
|
+
<text x="620" y="210" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.65)">AI, User (via terminal), and Claude Code all see the same files</text>
|
|
55
|
+
|
|
56
|
+
<!-- Three actors -->
|
|
57
|
+
<!-- AI Agent -->
|
|
58
|
+
<rect x="40" y="60" width="170" height="80" class="box" fill="#1e40af" stroke="#1e3a8a"/>
|
|
59
|
+
<text x="125" y="83" text-anchor="middle" class="label">AI Agent (LLM)</text>
|
|
60
|
+
<text x="125" y="100" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">Playwright automation</text>
|
|
61
|
+
<text x="125" y="114" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">bash_tool, create_file</text>
|
|
62
|
+
|
|
63
|
+
<!-- User via Chat -->
|
|
64
|
+
<rect x="40" y="170" width="170" height="80" class="box" fill="#6366f1" stroke="#4f46e5"/>
|
|
65
|
+
<text x="125" y="193" text-anchor="middle" class="label">User (Chat)</text>
|
|
66
|
+
<text x="125" y="210" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">Watches browser live</text>
|
|
67
|
+
<text x="125" y="224" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">Sees AI actions in real-time</text>
|
|
68
|
+
|
|
69
|
+
<!-- User via Terminal -->
|
|
70
|
+
<rect x="40" y="280" width="170" height="80" class="box" fill="#b45309" stroke="#a16207"/>
|
|
71
|
+
<text x="125" y="303" text-anchor="middle" class="label">User (Terminal)</text>
|
|
72
|
+
<text x="125" y="320" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">Direct CLI access</text>
|
|
73
|
+
<text x="125" y="334" text-anchor="middle" font-size="9" fill="rgba(255,255,255,0.85)">Claude Code, manual work</text>
|
|
74
|
+
|
|
75
|
+
<!-- Arrows from actors to sandbox -->
|
|
76
|
+
<path d="M210,100 L375,115" class="arrow" stroke="#3b82f6" marker-end="url(#ah2-blue)"/>
|
|
77
|
+
<text x="290" y="97" class="arrow-label">Playwright CDP</text>
|
|
78
|
+
|
|
79
|
+
<path d="M210,210 L375,130" class="arrow" stroke="#22c55e" marker-end="url(#ah2-green)"/>
|
|
80
|
+
<text x="270" y="178" class="arrow-label">CDP viewer (interactive)</text>
|
|
81
|
+
|
|
82
|
+
<path d="M210,310 L575,125" class="arrow" stroke="#ef4444" marker-end="url(#ah2-red)"/>
|
|
83
|
+
<text x="370" y="280" class="arrow-label">WebSocket TTY (read-write)</text>
|
|
84
|
+
|
|
85
|
+
<!-- Key insight boxes -->
|
|
86
|
+
<rect x="40" y="390" width="410" height="115" rx="8" fill="#fef3c7" stroke="#f59e0b"/>
|
|
87
|
+
<text x="60" y="413" class="highlight" fill="#92400e">Shared Browser = One Chromium, Three Users</text>
|
|
88
|
+
<text x="60" y="432" class="note" fill="#78350f">1. AI navigates via Playwright (automated)</text>
|
|
89
|
+
<text x="60" y="449" class="note" fill="#78350f">2. User watches live via CDP stream in side panel</text>
|
|
90
|
+
<text x="60" y="466" class="note" fill="#78350f">3. User can type in the browser directly (e.g. login credentials)</text>
|
|
91
|
+
<text x="60" y="483" class="note" fill="#78350f">4. AI sees user's input — true collaboration on one browser</text>
|
|
92
|
+
|
|
93
|
+
<rect x="470" y="390" width="410" height="115" rx="8" fill="#dbeafe" stroke="#3b82f6"/>
|
|
94
|
+
<text x="490" y="413" class="highlight" fill="#1e3a8a">Claude Code CLI = Power User Escape Hatch</text>
|
|
95
|
+
<text x="490" y="432" class="note" fill="#1e40af">1. When chat capabilities are not enough — open terminal</text>
|
|
96
|
+
<text x="490" y="449" class="note" fill="#1e40af">2. Full Claude Code CLI with all MCP servers</text>
|
|
97
|
+
<text x="490" y="466" class="note" fill="#1e40af">3. User can also work manually: git, vim, code</text>
|
|
98
|
+
<text x="490" y="483" class="note" fill="#1e40af">4. Leave OpenWebUI entirely — work in container directly</text>
|
|
99
|
+
|
|
100
|
+
<!-- Title annotations -->
|
|
101
|
+
<text x="460" y="375" text-anchor="middle" font-size="11" font-weight="600" fill="#475569">vs. Open Terminal: native file browser | vs. Claude.ai: screenshot-based browser</text>
|
|
102
|
+
</svg>
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# System Prompt Delivery — Six MCP-Native Tiers
|
|
2
|
+
|
|
3
|
+
The Computer Use Server delivers the same per-session system prompt through **six different channels**, so clients with varying MCP support all get it. Every tier renders from the same source (`computer-use-server/system_prompt.py::render_system_prompt`) with a shared 60-second in-process cache, so fan-out cost is one render per `(chat_id, user_email)` per minute.
|
|
4
|
+
|
|
5
|
+
**Redundancy is by design.** A client might strip `InitializeResult.instructions` and never call `resources/list` — but it will always call `tools/list`, and the tool descriptions nudge the model toward `/home/assistant/README.md` inside the sandbox. That file is always present.
|
|
6
|
+
|
|
7
|
+
**Why not `@mcp.prompt("system")`?** MCP `prompts/*` is user-controlled (slash-commands the user explicitly picks) and `PromptMessage.role` is restricted to `{user, assistant}` — naming a prompt `"system"` both clashes with the spec's role model and duplicates `InitializeResult.instructions`, which is the canonical field for "how the server wants itself used." We chose the canonical path.
|
|
8
|
+
|
|
9
|
+
## The Tiers
|
|
10
|
+
|
|
11
|
+
| # | Surface | Where it lives | Who uses it |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| 1 | Tool descriptions | `tools/list` — `bash_tool` + `view` docstrings mention README.md | Every MCP client (tools are mandatory) |
|
|
14
|
+
| 2 | `/home/assistant/README.md` | Rendered into the sandbox on container creation via `put_archive` | Any model that runs the `view` tool |
|
|
15
|
+
| 3 | Static `instructions=` hint | FastMCP constructor, one-line pointer to README + `resources/list` | Claude Desktop, MCP Inspector; Agents SDK exposes via `server.server_initialize_result` |
|
|
16
|
+
| 4 | Dynamic `InitializeResult.instructions` | Per-request ContextVar, swapped onto `mcp._mcp_server` as a `@property` | Same clients as #3, with chat-specific content |
|
|
17
|
+
| 5 | `resources/list` + `resources/read` | Uploaded files surfaced as `FunctionResource` per chat, URI `file://uploads/{chat_id}/{rel_path}` | Agents SDK, Inspector, Claude Desktop |
|
|
18
|
+
| 6 | `GET /system-prompt` HTTP | Backward-compat endpoint with header > query priority | Open WebUI filter; external integrations (n8n) |
|
|
19
|
+
|
|
20
|
+
## Tier 1 — Tool description nudges
|
|
21
|
+
|
|
22
|
+
Docstrings of `bash_tool` and `view` tools (in `computer-use-server/mcp_tools.py`) end with:
|
|
23
|
+
|
|
24
|
+
> If you've lost track of your environment (chat_id, file URLs, available skills), re-read /home/assistant/README.md.
|
|
25
|
+
|
|
26
|
+
Deliberately **not** "read this first" — the system prompt itself (Tiers 3/4) already identifies as "contents of /home/assistant/README.md", so if the client surfaced it the model already has the content. This line is a **recovery hint**, not a forcing function.
|
|
27
|
+
|
|
28
|
+
## Tier 2 — README.md in the sandbox
|
|
29
|
+
|
|
30
|
+
When `docker_manager._create_container` spins up a chat's workspace container, it calls `render_system_prompt_sync(chat_id, user_email)` and writes the result to `/home/assistant/README.md` (or `/root/README.md` for the test image) via `container.put_archive`. The file survives across container removals because it lives in the chat's persistent workspace volume (`chat-{chat_id}-workspace`).
|
|
31
|
+
|
|
32
|
+
Does **not** enumerate uploaded files — those are Tier 5's responsibility and are refreshed on every upload. README is static-per-container and changes only when `user_email` changes (which doesn't happen mid-chat).
|
|
33
|
+
|
|
34
|
+
## Tier 3 — Static `instructions=`
|
|
35
|
+
|
|
36
|
+
FastMCP's constructor kwarg. A one-liner pointing at Tiers 2 and 5 (README + uploaded-file resources) so a client that renders only `InitializeResult.instructions` still learns where the per-session content lives.
|
|
37
|
+
|
|
38
|
+
## Tier 4 — Dynamic `InitializeResult.instructions`
|
|
39
|
+
|
|
40
|
+
The same `instructions` field, but **per-request**. Relies on three facts pinned in the SDK source (`.venv/lib/python3.13/site-packages/mcp/server/...`):
|
|
41
|
+
|
|
42
|
+
1. `streamable_http_manager._handle_stateless_request:196` calls `self.app.create_initialization_options()` inside a per-request task spun up for each HTTP hit — and we run `stateless_http=True` (`mcp_tools.py:276`).
|
|
43
|
+
2. `lowlevel/server.py:188` reads `self.instructions` at that moment to populate `InitializationOptions`.
|
|
44
|
+
3. `session.py:183` echoes it into `InitializeResult.instructions`.
|
|
45
|
+
|
|
46
|
+
Mechanism:
|
|
47
|
+
- `MCPContextMiddleware` (runs before every MCP request) pre-renders the prompt via `render_system_prompt(...)` and stores it in `current_instructions: ContextVar[str]`.
|
|
48
|
+
- `_DynamicInstructionsServer` subclasses `mcp.server.lowlevel.Server` with `@property def instructions` returning the ContextVar value (falling back to the static `_STATIC_INSTRUCTIONS` string when unset).
|
|
49
|
+
- After `FastMCP(...)` constructs the lowlevel server, we **swap the class** on the existing instance: `mcp._mcp_server.__class__ = _DynamicInstructionsServer`. No reconstruction needed.
|
|
50
|
+
|
|
51
|
+
**Stateful mode would break this** (a long-lived session caches `init_options` at construction). Do NOT flip `stateless_http=False` without re-reading the SDK source above.
|
|
52
|
+
|
|
53
|
+
**Private-API caveat.** We touch `mcp._mcp_server` and `_resource_manager._resources`. Pin `mcp` narrowly in `computer-use-server/requirements.txt` — an SDK minor bump requires re-verifying these attribute shapes.
|
|
54
|
+
|
|
55
|
+
## Tier 5 — Uploaded files as MCP resources
|
|
56
|
+
|
|
57
|
+
`resources/list` returns a `FunctionResource` per uploaded file with URI `file://uploads/{chat_id}/{url-encoded rel_path}`. `resources/read` fetches the content — text for `text/*` and a short MIME allowlist, base64 blob otherwise.
|
|
58
|
+
|
|
59
|
+
Why `chat_id` embedded in the URI: Agents SDK and Inspector don't re-send `X-Chat-Id` on per-resource calls, so URIs must be self-contained.
|
|
60
|
+
|
|
61
|
+
Why URL-encoding: FastMCP's `ResourceTemplate.matches` (verified at `.venv/.../templates.py:88`) uses `[^/]+` per template param — it blocks nested paths. Flattening via `urllib.parse.quote` sidesteps the limitation cleanly without forking the SDK.
|
|
62
|
+
|
|
63
|
+
Dynamic registration: `sync_chat_resources(chat_id)` clears previously-registered entries for that chat, re-adds from the current filesystem state, under an `asyncio.Lock` to avoid "dict changed size during iteration" when a concurrent `resources/list` runs during an upload. Called from:
|
|
64
|
+
- `docker_manager._create_container` — initial sync when the container spins up.
|
|
65
|
+
- `app.py:upload_file` — after `POST /api/uploads/{chat_id}/{filename}` saves a new file.
|
|
66
|
+
|
|
67
|
+
Upload itself stays on HTTP — **MCP has no upload primitive.** Community consensus is out-of-band HTTP alongside the MCP server.
|
|
68
|
+
|
|
69
|
+
## Tier 6 — HTTP `/system-prompt`
|
|
70
|
+
|
|
71
|
+
Kept for the Open WebUI filter (`openwebui/functions/computer_link_filter.py:224–363`) which fetches the prompt server-side and injects it into the LLM's system message. The endpoint reads:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
X-Chat-Id | X-OpenWebUI-Chat-Id > ?chat_id= > "default"
|
|
75
|
+
X-User-Email | X-OpenWebUI-User-Email > ?user_email= > None
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Header-priority rule consistent with the rest of the server (MCP middleware reads the same headers and aliases). Response header `X-Public-Base-URL` is still emitted so the filter's `outlet()` can build browser-facing archive/preview URLs from the server-owned `PUBLIC_BASE_URL`.
|
|
79
|
+
|
|
80
|
+
## Render cache
|
|
81
|
+
|
|
82
|
+
`render_system_prompt(chat_id, user_email)` is cache-backed with a 60-second TTL (`_RENDER_TTL_SECONDS` in `system_prompt.py`). Matches `skill_manager`'s own memory-cache TTL. Middleware runs the render on **every** MCP request to pre-fill the ContextVar for Tier 4, so the cache is load-bearing — without it, every `tools/call` would re-hit the skills provider. The second request for the same `(chat_id, user_email)` is a dict lookup.
|
|
83
|
+
|
|
84
|
+
Invalidation: `invalidate_render_cache()` (no arg → clear all; `chat_id` arg → clear that chat). Used in tests; also callable when skills change upstream.
|
|
85
|
+
|
|
86
|
+
## Duplication analysis (honest per-scenario breakdown)
|
|
87
|
+
|
|
88
|
+
**Open WebUI via LiteLLM (main scenario):**
|
|
89
|
+
- Filter `inlet()` fetches Tier 6 and puts the prompt into `body["messages"]` as a system message → model sees it **once**.
|
|
90
|
+
- Tier 4 `InitializeResult.instructions` is returned on MCP `initialize` — but LiteLLM is a tool-call proxy, it does NOT ingest `instructions` and forward it to the LLM. Tier 4 simply doesn't reach the model here.
|
|
91
|
+
- Tier 2 README.md sits in the container but the model only reads it if it actively calls `view`.
|
|
92
|
+
- The **only** real duplication source in this scenario is the recovery-nudge in `bash_tool`/`view` docstrings (Tier 1): "If you've lost track of your environment, re-read /home/assistant/README.md." A model following that hint adds a **second copy** of the same ~3–5K tokens.
|
|
93
|
+
- **Total: up to 2 copies** (filter inject + optional nudged `view`).
|
|
94
|
+
|
|
95
|
+
**Agents SDK / MCP Inspector / Claude Desktop (MCP-native scenario):**
|
|
96
|
+
- No Open WebUI filter.
|
|
97
|
+
- Integrator surfaces Tier 4 via `server.server_initialize_result.instructions` (Agents SDK), or Claude Desktop auto-applies it → model sees prompt **once**.
|
|
98
|
+
- Same story: if the Tier 1 nudge is honored, `view /home/assistant/README.md` adds a **second copy**.
|
|
99
|
+
- **Total: up to 2 copies**.
|
|
100
|
+
|
|
101
|
+
**Why keep the nudge.** Without it, a client that strips the system prompt leaves the model in a sandbox with zero context. The Tier 1 recovery hint is the only fallback that works in that pathological case — its token cost is paid only when the model actually needs it (context thins out, hint gets re-attended).
|
|
102
|
+
|
|
103
|
+
Follow-up options if duplication proves costly in practice:
|
|
104
|
+
- Weaken the nudge to "If your system prompt does not already describe this sandbox, read /home/assistant/README.md" — model self-selects.
|
|
105
|
+
- Drop the nudge entirely and rely on Tier 4 + filter inject; README stays as a file-only fallback.
|
|
106
|
+
- Teach the Open WebUI filter to skip its inject when the MCP tool is attached — only makes sense after Tier 4 reliably reaches the model through LiteLLM (today it does not).
|
|
107
|
+
|
|
108
|
+
## See also
|
|
109
|
+
|
|
110
|
+
- `docs/MCP.md` — protocol-level MCP server documentation.
|
|
111
|
+
- `docs/openwebui-filter.md` — how the filter consumes Tier 6.
|
|
112
|
+
- `computer-use-server/system_prompt.py` — the render function + cache.
|
|
113
|
+
- `tests/orchestrator/test_{render_cache,dynamic_instructions,mcp_resources,tool_descriptions,readme_in_container,system_prompt_endpoint}.py` — pinning tests for every tier.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 200" font-family="Inter, -apple-system, system-ui, sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.box { rx: 10; stroke-width: 1.5; }
|
|
5
|
+
.label { font-size: 12px; font-weight: 600; fill: #fff; }
|
|
6
|
+
.sublabel { font-size: 9px; fill: rgba(255,255,255,0.75); }
|
|
7
|
+
.arrow { stroke: #94a3b8; stroke-width: 1.8; fill: none; marker-end: url(#ah3); }
|
|
8
|
+
.arrow-label { font-size: 9px; fill: #6b7280; font-weight: 500; }
|
|
9
|
+
</style>
|
|
10
|
+
<marker id="ah3" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
11
|
+
<path d="M0,0 L8,3 L0,6" fill="#94a3b8"/>
|
|
12
|
+
</marker>
|
|
13
|
+
</defs>
|
|
14
|
+
|
|
15
|
+
<rect width="820" height="200" rx="12" fill="#fafbfc"/>
|
|
16
|
+
<text x="410" y="24" text-anchor="middle" font-size="13" font-weight="700" fill="#1e293b">Terminal Connection Flow</text>
|
|
17
|
+
|
|
18
|
+
<!-- User Browser -->
|
|
19
|
+
<rect x="20" y="55" width="150" height="90" class="box" fill="#6366f1" stroke="#4f46e5"/>
|
|
20
|
+
<text x="95" y="82" text-anchor="middle" class="label">User's Browser</text>
|
|
21
|
+
<text x="95" y="100" text-anchor="middle" class="sublabel">xterm.js terminal</text>
|
|
22
|
+
<text x="95" y="114" text-anchor="middle" class="sublabel">in side panel</text>
|
|
23
|
+
|
|
24
|
+
<!-- Arrow 1 -->
|
|
25
|
+
<path d="M170,100 L245,100" class="arrow"/>
|
|
26
|
+
<text x="207" y="92" text-anchor="middle" class="arrow-label">WebSocket</text>
|
|
27
|
+
|
|
28
|
+
<!-- Computer Use Server -->
|
|
29
|
+
<rect x="245" y="55" width="180" height="90" class="box" fill="#1e40af" stroke="#1e3a8a"/>
|
|
30
|
+
<text x="335" y="78" text-anchor="middle" class="label">Computer Use Server</text>
|
|
31
|
+
<text x="335" y="96" text-anchor="middle" class="sublabel">:8081</text>
|
|
32
|
+
<text x="335" y="110" text-anchor="middle" class="sublabel">WebSocket proxy</text>
|
|
33
|
+
<text x="335" y="124" text-anchor="middle" class="sublabel">/terminal/{chat_id}/ws</text>
|
|
34
|
+
|
|
35
|
+
<!-- Arrow 2 -->
|
|
36
|
+
<path d="M425,100 L500,100" class="arrow"/>
|
|
37
|
+
<text x="462" y="92" text-anchor="middle" class="arrow-label">WebSocket</text>
|
|
38
|
+
|
|
39
|
+
<!-- Container -->
|
|
40
|
+
<rect x="500" y="40" width="300" height="120" class="box" fill="#0f766e" stroke="#0d9488"/>
|
|
41
|
+
<text x="650" y="63" text-anchor="middle" class="label">Sandbox Container</text>
|
|
42
|
+
|
|
43
|
+
<!-- ttyd -->
|
|
44
|
+
<rect x="520" y="78" width="80" height="55" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
45
|
+
<text x="560" y="98" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">ttyd</text>
|
|
46
|
+
<text x="560" y="113" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">:7681</text>
|
|
47
|
+
<text x="560" y="125" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">WS server</text>
|
|
48
|
+
|
|
49
|
+
<!-- Arrow ttyd → tmux -->
|
|
50
|
+
<path d="M600,105 L625,105" class="arrow"/>
|
|
51
|
+
|
|
52
|
+
<!-- tmux -->
|
|
53
|
+
<rect x="625" y="78" width="75" height="55" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
54
|
+
<text x="662" y="98" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">tmux</text>
|
|
55
|
+
<text x="662" y="113" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">persistent</text>
|
|
56
|
+
<text x="662" y="125" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">session</text>
|
|
57
|
+
|
|
58
|
+
<!-- Arrow tmux → bash/claude -->
|
|
59
|
+
<path d="M700,105 L725,105" class="arrow"/>
|
|
60
|
+
|
|
61
|
+
<!-- bash / claude -->
|
|
62
|
+
<rect x="725" y="78" width="60" height="55" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
63
|
+
<text x="755" y="98" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">bash</text>
|
|
64
|
+
<text x="755" y="113" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">Claude</text>
|
|
65
|
+
<text x="755" y="125" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.7)">Code CLI</text>
|
|
66
|
+
|
|
67
|
+
<!-- Footer notes -->
|
|
68
|
+
<text x="20" y="185" font-size="9" fill="#64748b">Persistent session: disconnect and reconnect without losing state. Claude Code auto-starts on first login.</text>
|
|
69
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Helm examples
|
|
2
|
+
|
|
3
|
+
Two ready-to-tweak deployment recipes for [`helm/computer-use-server/`](../../helm/computer-use-server/).
|
|
4
|
+
|
|
5
|
+
| Recipe | Equivalent Compose stack | When to use |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| [`standalone/`](standalone/) | `docker-compose.yml` | You already run Open WebUI (or some other MCP client) and just want the orchestrator. |
|
|
8
|
+
| [`with-open-webui/`](with-open-webui/) | `docker-compose.yml` + `docker-compose.webui.yml` | You want the whole stack — orchestrator, Open WebUI, Postgres — in one cluster. |
|
|
9
|
+
|
|
10
|
+
Open WebUI itself is **not** packaged by our chart. Use the upstream chart at <https://github.com/open-webui/helm-charts> instead — `with-open-webui/` shows how to wire the two together.
|
|
11
|
+
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Kubernetes ≥ 1.27
|
|
15
|
+
- [Kata Containers](https://katacontainers.io/) installed on candidate nodes (the chart runs the inner Docker daemon under Kata) — see [`docs/kata-runtime.md`](../../docs/kata-runtime.md)
|
|
16
|
+
- A StorageClass that supports `ReadWriteOnce`, and one that provisions Block volumes for `/var/lib/docker`
|
|
17
|
+
- An Ingress controller (nginx-ingress, Traefik, etc.)
|
|
18
|
+
- DNS + TLS for the public hostnames
|
|
19
|
+
|
|
20
|
+
See [`docs/kubernetes.md`](../../docs/kubernetes.md) for the full architecture overview.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Minimum-viable values for computer-use-server.
|
|
5
|
+
#
|
|
6
|
+
# The chart runs the inner Docker daemon under Kata Containers. Before installing:
|
|
7
|
+
# 1. Install kata-deploy and confirm the RuntimeClass exists:
|
|
8
|
+
# kubectl get runtimeclass kata-qemu
|
|
9
|
+
# 2. Allow privileged pods in the target namespace:
|
|
10
|
+
# kubectl label ns open-computer-use \
|
|
11
|
+
# pod-security.kubernetes.io/enforce=privileged --overwrite
|
|
12
|
+
# 3. The cluster default StorageClass must provision Block volumes (the chart
|
|
13
|
+
# uses a Block-mode PVC for /var/lib/docker). Override
|
|
14
|
+
# persistence.varLibDocker.persistentVolume.storageClass if it does not.
|
|
15
|
+
# Full runbook: docs/kata-runtime.md.
|
|
16
|
+
#
|
|
17
|
+
# Run:
|
|
18
|
+
# helm install ocu helm/computer-use-server \
|
|
19
|
+
# -n open-computer-use --create-namespace \
|
|
20
|
+
# -f examples/helm/standalone/values.yaml
|
|
21
|
+
#
|
|
22
|
+
# Replace the placeholders (change-me-*, *.example.com) before applying.
|
|
23
|
+
|
|
24
|
+
secrets:
|
|
25
|
+
create: true
|
|
26
|
+
# `openssl rand -hex 32` is a fine source
|
|
27
|
+
mcpApiKey: "change-me-32-hex-chars"
|
|
28
|
+
|
|
29
|
+
orchestrator:
|
|
30
|
+
env:
|
|
31
|
+
# MUST be the browser-reachable URL of the Ingress below (no trailing slash).
|
|
32
|
+
# The orchestrator bakes this into preview links it returns to chats.
|
|
33
|
+
PUBLIC_BASE_URL: "https://orchestrator.example.com"
|
|
34
|
+
|
|
35
|
+
ingress:
|
|
36
|
+
enabled: true
|
|
37
|
+
className: nginx
|
|
38
|
+
annotations:
|
|
39
|
+
# uncomment if using cert-manager
|
|
40
|
+
# cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
41
|
+
hosts:
|
|
42
|
+
- host: orchestrator.example.com
|
|
43
|
+
paths:
|
|
44
|
+
- path: /
|
|
45
|
+
pathType: Prefix
|
|
46
|
+
tls:
|
|
47
|
+
- hosts:
|
|
48
|
+
- orchestrator.example.com
|
|
49
|
+
secretName: orchestrator-tls
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Open WebUI + computer-use-server on Kubernetes
|
|
2
|
+
|
|
3
|
+
This is the Kubernetes analog of running `docker-compose.yml` + `docker-compose.webui.yml` together. You install two Helm charts side-by-side in the same namespace and wire them through a shared Secret.
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
┌──────────────────────── namespace: open-computer-use ──────────────────────────┐
|
|
7
|
+
│ │
|
|
8
|
+
│ Users ── Ingress ──► Service: open-webui :3000 │
|
|
9
|
+
│ │ │
|
|
10
|
+
│ │ HTTP (ORCHESTRATOR_URL, MCP_API_KEY) │
|
|
11
|
+
│ ▼ │
|
|
12
|
+
│ Service: ocu-computer-use-server :8081 │
|
|
13
|
+
│ (Kata DinD pod, see helm/computer-use-server/README.md) │
|
|
14
|
+
│ │ │
|
|
15
|
+
│ ▼ │
|
|
16
|
+
│ StatefulSet: postgres (Bitnami subchart, or BYO) │
|
|
17
|
+
└─────────────────────────────────────────────────────────────────────────────────┘
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
The same prereqs as `standalone/`: Kata Containers on nodes (see [`docs/kata-runtime.md`](../../../docs/kata-runtime.md)), RWO + Block StorageClass, Ingress controller, DNS + TLS. Plus:
|
|
23
|
+
|
|
24
|
+
- The upstream Open WebUI Helm repo configured:
|
|
25
|
+
```bash
|
|
26
|
+
helm repo add open-webui https://helm.openwebui.com/
|
|
27
|
+
helm repo update
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Install steps
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 0. Create namespace
|
|
34
|
+
kubectl create namespace open-computer-use
|
|
35
|
+
|
|
36
|
+
# 1. Shared Secret used by both charts. MCP_API_KEY must match in both places.
|
|
37
|
+
kubectl -n open-computer-use create secret generic ocu-shared \
|
|
38
|
+
--from-literal=MCP_API_KEY=$(openssl rand -hex 32) \
|
|
39
|
+
--from-literal=POSTGRES_PASSWORD=$(openssl rand -hex 24) \
|
|
40
|
+
--from-literal=WEBUI_SECRET_KEY=$(openssl rand -hex 32) \
|
|
41
|
+
--from-literal=ANTHROPIC_AUTH_TOKEN=sk-ant-... # if using Anthropic
|
|
42
|
+
|
|
43
|
+
# 2. Install Postgres as a separate release (this chart does NOT bundle it).
|
|
44
|
+
helm repo add bitnami https://charts.bitnami.com/bitnami
|
|
45
|
+
helm repo update
|
|
46
|
+
helm install pg bitnami/postgresql \
|
|
47
|
+
-n open-computer-use \
|
|
48
|
+
--set auth.username=openwebui \
|
|
49
|
+
--set auth.database=openwebui \
|
|
50
|
+
--set auth.existingSecret=ocu-shared \
|
|
51
|
+
--set auth.secretKeys.userPasswordKey=POSTGRES_PASSWORD
|
|
52
|
+
|
|
53
|
+
# 3. Install computer-use-server. Edit values-computer-use.yaml first.
|
|
54
|
+
helm install ocu ../../../helm/computer-use-server \
|
|
55
|
+
-n open-computer-use \
|
|
56
|
+
-f values-computer-use.yaml
|
|
57
|
+
|
|
58
|
+
# 4. Install Open WebUI. Edit values-open-webui.yaml first.
|
|
59
|
+
helm install webui open-webui/open-webui \
|
|
60
|
+
-n open-computer-use \
|
|
61
|
+
-f values-open-webui.yaml
|
|
62
|
+
|
|
63
|
+
# 5. Smoke-test
|
|
64
|
+
helm test ocu -n open-computer-use
|
|
65
|
+
kubectl -n open-computer-use get pods
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## How the wiring works
|
|
69
|
+
|
|
70
|
+
- **`MCP_API_KEY`** lives in the shared `ocu-shared` Secret.
|
|
71
|
+
- `computer-use-server` reads it via `secrets.existingSecret=ocu-shared` (mounted via `envFrom` onto the orchestrator container).
|
|
72
|
+
- Open WebUI reads it the same way, then `openwebui/init.sh` (or your manual setup) seeds it into the Tool and Filter Valves on first boot. **The values must match** — that's the whole reason for sharing one Secret.
|
|
73
|
+
|
|
74
|
+
- **`ORCHESTRATOR_URL`** is the **in-cluster** URL Open WebUI uses to call the MCP endpoint:
|
|
75
|
+
```text
|
|
76
|
+
http://ocu-computer-use-server.open-computer-use.svc.cluster.local:8081
|
|
77
|
+
```
|
|
78
|
+
Set as a plain env var on the Open WebUI container — `values-open-webui.yaml` shows the line. Browsers never see this URL.
|
|
79
|
+
|
|
80
|
+
- **`PUBLIC_BASE_URL`** is the **browser-facing** URL of the orchestrator. The orchestrator returns it in the `X-Public-Base-URL` header, and the Open WebUI filter uses it to rewrite preview links in chat. It must match the public hostname users actually hit. Set in `values-computer-use.yaml`.
|
|
81
|
+
|
|
82
|
+
> Note: the `openwebui/init.sh` script from this repo expects to run as the Open WebUI container's entrypoint wrapper. The upstream Open WebUI chart does **not** invoke it. Either build your own image (using `openwebui/Dockerfile` from this repo) and point the upstream chart at it via `image.repository`, or seed the Valves manually through the Admin UI on first boot. Both paths work — the init.sh path is more reproducible.
|
|
83
|
+
|
|
84
|
+
## Files in this directory
|
|
85
|
+
|
|
86
|
+
| File | Purpose |
|
|
87
|
+
|---|---|
|
|
88
|
+
| `values-computer-use.yaml` | values for our chart (orchestrator + DinD + cleanup) |
|
|
89
|
+
| `values-open-webui.yaml` | values for upstream Open WebUI chart, pointed at our Service |
|
|
90
|
+
|
|
91
|
+
## Uninstall
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
helm uninstall webui -n open-computer-use
|
|
95
|
+
helm uninstall ocu -n open-computer-use
|
|
96
|
+
kubectl -n open-computer-use delete pvc -l app.kubernetes.io/instance=ocu
|
|
97
|
+
kubectl -n open-computer-use delete pvc -l app.kubernetes.io/instance=webui
|
|
98
|
+
kubectl -n open-computer-use delete secret ocu-shared
|
|
99
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Values for helm/computer-use-server when deployed alongside Open WebUI.
|
|
5
|
+
# See examples/helm/with-open-webui/README.md for install order and Secret setup.
|
|
6
|
+
|
|
7
|
+
secrets:
|
|
8
|
+
# GitOps-friendly: chart reads MCP_API_KEY + tokens from the existing Secret.
|
|
9
|
+
create: false
|
|
10
|
+
existingSecret: ocu-shared
|
|
11
|
+
|
|
12
|
+
orchestrator:
|
|
13
|
+
env:
|
|
14
|
+
# Must match the host users hit in their browser — same as the Ingress below.
|
|
15
|
+
PUBLIC_BASE_URL: "https://orchestrator.example.com"
|
|
16
|
+
|
|
17
|
+
ingress:
|
|
18
|
+
enabled: true
|
|
19
|
+
className: nginx
|
|
20
|
+
annotations:
|
|
21
|
+
# cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
22
|
+
hosts:
|
|
23
|
+
- host: orchestrator.example.com
|
|
24
|
+
paths:
|
|
25
|
+
- path: /
|
|
26
|
+
pathType: Prefix
|
|
27
|
+
tls:
|
|
28
|
+
- hosts:
|
|
29
|
+
- orchestrator.example.com
|
|
30
|
+
secretName: orchestrator-tls
|
|
31
|
+
|
|
32
|
+
# Postgres lives in a separate release — see README.md, "Install steps", step 2.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Values for the upstream open-webui/open-webui chart, configured to talk to
|
|
5
|
+
# our computer-use-server. Reference: https://github.com/open-webui/helm-charts
|
|
6
|
+
#
|
|
7
|
+
# Adjust to match the upstream chart's actual value paths — this file targets
|
|
8
|
+
# the typical layout (image.repository, extraEnvVars, envFrom, persistence,
|
|
9
|
+
# ingress). Re-check after major chart upgrades.
|
|
10
|
+
|
|
11
|
+
# Use a custom Open WebUI image built from openwebui/Dockerfile in this repo
|
|
12
|
+
# (it patches Open WebUI and bundles init.sh which seeds the Computer Use
|
|
13
|
+
# Tool + Filter Valves on first boot). Skip this and use stock Open WebUI if
|
|
14
|
+
# you'll configure Valves through the Admin UI by hand.
|
|
15
|
+
image:
|
|
16
|
+
# Built from openwebui/Dockerfile by .github/workflows/build.yml as "<repo>-webui".
|
|
17
|
+
repository: ghcr.io/wide-moat/open-computer-use-webui
|
|
18
|
+
tag: "0.9.2.4"
|
|
19
|
+
pullPolicy: IfNotPresent
|
|
20
|
+
|
|
21
|
+
ingress:
|
|
22
|
+
enabled: true
|
|
23
|
+
class: nginx
|
|
24
|
+
host: webui.example.com
|
|
25
|
+
tls: true
|
|
26
|
+
existingSecret: webui-tls
|
|
27
|
+
|
|
28
|
+
persistence:
|
|
29
|
+
enabled: true
|
|
30
|
+
size: 10Gi
|
|
31
|
+
|
|
32
|
+
# Use the bundled Postgres from our chart (ocu-postgresql.*.svc.cluster.local).
|
|
33
|
+
# DATABASE_URL is built from the shared Secret.
|
|
34
|
+
databaseUrl: "postgresql://openwebui:$(POSTGRES_PASSWORD)@pg-postgresql.open-computer-use.svc.cluster.local:5432/openwebui"
|
|
35
|
+
|
|
36
|
+
# Disable the chart's bundled DBs since we use the one from computer-use-server.
|
|
37
|
+
postgresql:
|
|
38
|
+
enabled: false
|
|
39
|
+
ollama:
|
|
40
|
+
enabled: false
|
|
41
|
+
pipelines:
|
|
42
|
+
enabled: false
|
|
43
|
+
|
|
44
|
+
# Plain env vars that the openwebui/init.sh script and the patched code read.
|
|
45
|
+
extraEnvVars:
|
|
46
|
+
- name: ORCHESTRATOR_URL
|
|
47
|
+
value: "http://ocu-computer-use-server.open-computer-use.svc.cluster.local:8081"
|
|
48
|
+
- name: BYPASS_EMBEDDING_AND_RETRIEVAL
|
|
49
|
+
value: "true"
|
|
50
|
+
- name: RAG_EMBEDDING_MODEL_AUTO_UPDATE
|
|
51
|
+
value: "false"
|
|
52
|
+
- name: CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES
|
|
53
|
+
value: "200"
|
|
54
|
+
- name: TOOL_RESULT_MAX_CHARS
|
|
55
|
+
value: "50000"
|
|
56
|
+
- name: TOOL_RESULT_PREVIEW_CHARS
|
|
57
|
+
value: "2000"
|
|
58
|
+
- name: ENABLE_OPENAI_API_SSL_VERIFY
|
|
59
|
+
value: "true"
|
|
60
|
+
- name: ADMIN_EMAIL
|
|
61
|
+
value: "admin@example.com"
|
|
62
|
+
|
|
63
|
+
# MCP_API_KEY, POSTGRES_PASSWORD, WEBUI_SECRET_KEY, ANTHROPIC_AUTH_TOKEN come
|
|
64
|
+
# from the shared Secret created out-of-band (see README).
|
|
65
|
+
extraEnvFrom:
|
|
66
|
+
- secretRef:
|
|
67
|
+
name: ocu-shared
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BUSL-1.1
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
# Patterns to ignore when packaging the chart.
|
|
4
|
+
.DS_Store
|
|
5
|
+
.git/
|
|
6
|
+
.gitignore
|
|
7
|
+
.bzr/
|
|
8
|
+
.hg/
|
|
9
|
+
.hgignore
|
|
10
|
+
.svn/
|
|
11
|
+
*.swp
|
|
12
|
+
*.tmp
|
|
13
|
+
*.orig
|
|
14
|
+
*.bak
|
|
15
|
+
.idea/
|
|
16
|
+
.vscode/
|
|
17
|
+
*.tgz
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
apiVersion: v2
|
|
4
|
+
name: computer-use-server
|
|
5
|
+
description: |
|
|
6
|
+
Orchestrator for open-computer-use. Spawns disposable workspace
|
|
7
|
+
containers via an inner Docker daemon (DinD on Kata Containers).
|
|
8
|
+
Includes an optional cleanup sidecar. Postgres is installed as a separate
|
|
9
|
+
release when needed; see examples/helm/with-open-webui/.
|
|
10
|
+
type: application
|
|
11
|
+
version: 0.3.0
|
|
12
|
+
appVersion: "0.9.2.4"
|
|
13
|
+
kubeVersion: ">=1.27.0-0"
|
|
14
|
+
home: https://github.com/Wide-Moat/open-computer-use
|
|
15
|
+
sources:
|
|
16
|
+
- https://github.com/Wide-Moat/open-computer-use
|
|
17
|
+
keywords:
|
|
18
|
+
- computer-use
|
|
19
|
+
- mcp
|
|
20
|
+
- open-webui
|
|
21
|
+
- sandbox
|
|
22
|
+
- dind
|
|
23
|
+
- kata-containers
|
|
24
|
+
maintainers:
|
|
25
|
+
- name: Open Computer Use Contributors
|
|
26
|
+
url: https://github.com/Wide-Moat/open-computer-use
|
|
27
|
+
annotations:
|
|
28
|
+
category: AI
|
|
29
|
+
# Note: PostgreSQL is intentionally NOT a chart dependency. The orchestrator
|
|
30
|
+
# itself does not need a database; only Open WebUI does. Install Postgres
|
|
31
|
+
# separately (managed RDS, CloudNativePG, or `helm install pg bitnami/postgresql`)
|
|
32
|
+
# and point Open WebUI at it via DATABASE_URL. See examples/helm/with-open-webui/.
|