@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
package/docs/FEATURES.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Architecture & Features
|
|
2
|
+
|
|
3
|
+
How Open Computer Use works under the hood. For comparisons with other tools, see [COMPARISON.md](COMPARISON.md).
|
|
4
|
+
|
|
5
|
+
## Shared Browser
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
One Chromium instance inside the sandbox container, shared between the AI and the user:
|
|
10
|
+
|
|
11
|
+
| Actor | Access | What they do |
|
|
12
|
+
|-------|--------|--------------|
|
|
13
|
+
| **AI Agent** | Playwright CDP | Navigates, clicks, fills forms, scrapes data |
|
|
14
|
+
| **User** | CDP streaming (interactive, side panel) | Watches AI in real-time, clicks, types, scrolls — same browser session |
|
|
15
|
+
|
|
16
|
+
The user can enter sensitive information (passwords, 2FA codes, private data) directly into the browser — the AI never sees the raw credentials, only the resulting page state. Both the AI and the user operate on the same browser — true collaboration, not a screenshot relay.
|
|
17
|
+
|
|
18
|
+
## File Flow & Preview
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
### How files work
|
|
23
|
+
|
|
24
|
+
1. **AI creates files** inside the sandbox container (`/mnt/user-data/outputs/`)
|
|
25
|
+
2. **Computer Use Server** serves files via HTTP (`/files/{chat_id}/filename`)
|
|
26
|
+
3. **Chat shows links** — the AI's response contains clickable HTTP URLs to the files
|
|
27
|
+
4. **Side panel renders preview** — docx, pdf, xlsx, images, code are rendered inline
|
|
28
|
+
5. **User downloads** by clicking the link or using the archive/zip endpoint
|
|
29
|
+
|
|
30
|
+
### Key design: files stay on the server
|
|
31
|
+
|
|
32
|
+
Files live on the server, not in the conversation. The chat only contains links. This means:
|
|
33
|
+
|
|
34
|
+
- **No file size limits** in chat — the server handles arbitrarily large files
|
|
35
|
+
- **Direct access** — open any file URL in a new browser tab
|
|
36
|
+
- **Zip download** — download all outputs as a single archive
|
|
37
|
+
- **No re-upload** — files don't flow back into the client's storage
|
|
38
|
+
|
|
39
|
+
## Claude Code CLI
|
|
40
|
+
|
|
41
|
+
The sandbox container has **Claude Code CLI pre-installed**. Users can access it in two ways:
|
|
42
|
+
|
|
43
|
+
1. **Via sub_agent tool** — the AI delegates complex tasks to Claude Code autonomously
|
|
44
|
+
2. **Via terminal tab** — the user opens the terminal in the side panel and runs Claude Code manually
|
|
45
|
+
|
|
46
|
+
### When to use the terminal
|
|
47
|
+
|
|
48
|
+
- Complex refactoring that requires many file edits
|
|
49
|
+
- Debugging with interactive tools (gdb, pdb, node inspect)
|
|
50
|
+
- Git operations (rebase, merge, cherry-pick)
|
|
51
|
+
- Running Claude Code with specific flags or prompts
|
|
52
|
+
- Working with MCP servers that the chat model doesn't support
|
|
53
|
+
- Simply preferring a CLI workflow
|
|
54
|
+
|
|
55
|
+
### How it works
|
|
56
|
+
|
|
57
|
+

|
|
58
|
+
|
|
59
|
+
- **tmux** keeps the session alive — disconnect and reconnect without losing state
|
|
60
|
+
- **Claude Code** has access to all configured MCP servers (auto-generated `~/.mcp.json`)
|
|
61
|
+
- User can **switch between chat and terminal** freely — both modify the same container filesystem
|
|
62
|
+
|
|
63
|
+
### The escape hatch
|
|
64
|
+
|
|
65
|
+
Users can leave the chat interface entirely:
|
|
66
|
+
- Open the server URL directly in a browser tab
|
|
67
|
+
- Navigate to `/terminal/{chat_id}/` for a full-screen terminal
|
|
68
|
+
- Work with files, run code, use Claude Code CLI — all independent of the chat interface
|
|
69
|
+
|
|
70
|
+
## Preview & Artifacts Panel
|
|
71
|
+
|
|
72
|
+
The side panel in Open WebUI serves three functions:
|
|
73
|
+
|
|
74
|
+
| Tab | Content | Source |
|
|
75
|
+
|-----|---------|--------|
|
|
76
|
+
| **Files** | Preview of created documents (docx, pdf, xlsx, images, code) | Computer Use Server `/api/outputs/{chat_id}/` |
|
|
77
|
+
| **Browser** | Live CDP stream of Chromium in the sandbox | Computer Use Server `/browser/{chat_id}/` |
|
|
78
|
+
| **Sub-Agent** | Terminal (ttyd) + Claude Code process dashboard | Computer Use Server `/terminal/{chat_id}/` |
|
|
79
|
+
|
|
80
|
+
### How preview rendering works
|
|
81
|
+
|
|
82
|
+
1. AI creates a file (e.g. `report.docx`) via `create_file` tool
|
|
83
|
+
2. The filter function detects the file URL in the response
|
|
84
|
+
3. Side panel opens automatically with the preview URL
|
|
85
|
+
4. Server renders preview: LibreOffice converts docx to HTML, pdf is embedded, images are displayed
|
|
86
|
+
5. User sees the result inline without downloading
|
|
87
|
+
|
|
88
|
+
## File Transfer & Sync
|
|
89
|
+
|
|
90
|
+

|
|
91
|
+
|
|
92
|
+
- **Everything is on the server** — Docker volumes, not local filesystem
|
|
93
|
+
- **Container sees volumes as mounts** — `/mnt/user-data/uploads/` (user uploads, read-only) and `/mnt/user-data/outputs/` (AI outputs, read-write)
|
|
94
|
+
- **Server serves files via HTTP** — no direct filesystem access from the browser
|
|
95
|
+
- **Chat only has links** — lightweight, no file data in the conversation
|
|
96
|
+
- **Volume persists** — survives container restarts, available until cleanup
|
|
97
|
+
|
|
98
|
+
## Docker Image Size
|
|
99
|
+
|
|
100
|
+
The sandbox image (`open-computer-use:latest`) is **~11 GB**. It includes a full Ubuntu 24.04 environment with LibreOffice, Playwright + Chromium, Claude Code CLI, Python ML/data science stack, Node.js toolchain, OCR, media processing, and 13 skills. First build takes ~15 minutes.
|
package/docs/INSTALL.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Installation Guide
|
|
2
|
+
|
|
3
|
+
This guide is for **self-hosting**. For the managed version (GitHub/Google sign-in, no Docker), see [CLOUD.md](CLOUD.md) or try [chat.yambr.com](https://chat.yambr.com) directly.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- **Docker Engine** 24+ with Docker Compose v2
|
|
8
|
+
- **8 GB RAM** minimum (16 GB recommended)
|
|
9
|
+
- **20 GB disk** (sandbox image is ~5 GB)
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
git clone https://github.com/Wide-Moat/open-computer-use.git
|
|
15
|
+
cd open-computer-use
|
|
16
|
+
cp .env.example .env
|
|
17
|
+
# Edit .env — see the REQUIRED section at the top of .env.example.
|
|
18
|
+
|
|
19
|
+
# 1. Pre-flight: catch common misconfigurations before docker starts
|
|
20
|
+
./scripts/check-config.sh
|
|
21
|
+
|
|
22
|
+
# 2. Build and start Computer Use Server (~15 min first time)
|
|
23
|
+
docker compose up --build
|
|
24
|
+
|
|
25
|
+
# 3. Start Open WebUI (in another terminal)
|
|
26
|
+
docker compose -f docker-compose.webui.yml up --build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`scripts/check-config.sh` reports `[OK]` / `[WARN]` / `[ERR]` for each setting and exits 1 if anything is likely to break end-to-end (e.g. `PUBLIC_BASE_URL` left at the internal-DNS default, half-configured Vision group). WARNs are fine for local dev.
|
|
30
|
+
|
|
31
|
+
**Re-seeding Valves after editing `.env`.** The `open-webui` container runs an init script that writes Open WebUI Valves from env **on first start only** — a marker file (`/app/backend/data/.computer-use-initialized`) guards re-runs so your admin UI edits are never clobbered. The only env propagated into Valves is `ORCHESTRATOR_URL` (the internal URL, consumed by both the Computer Use tool and filter). To pick up a new value, delete the marker on `open-webui` and restart it:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
docker compose -f docker-compose.webui.yml exec open-webui \
|
|
35
|
+
rm /app/backend/data/.computer-use-initialized
|
|
36
|
+
docker compose -f docker-compose.webui.yml restart open-webui
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`PUBLIC_BASE_URL` lives only on the `computer-use-server` container — it is **not** propagated into Open WebUI Valves. If you change it in `.env`, restart the server container instead: `docker compose up -d --force-recreate computer-use-server`.
|
|
40
|
+
|
|
41
|
+
Open http://localhost:3000 — login with `admin@open-computer-use.dev` / `admin`.
|
|
42
|
+
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
Edit `.env` before starting. Key variables:
|
|
46
|
+
|
|
47
|
+
| Variable | Required | Description |
|
|
48
|
+
|----------|----------|-------------|
|
|
49
|
+
| `OPENAI_API_KEY` | Yes | LLM API key (any OpenAI-compatible provider) |
|
|
50
|
+
| `OPENAI_API_BASE_URL` | No | Custom API URL (OpenRouter, local vLLM, etc.) |
|
|
51
|
+
| `MCP_API_KEY` | Recommended | Bearer token for MCP endpoint security |
|
|
52
|
+
| `ANTHROPIC_AUTH_TOKEN` | No | For Claude Code sub-agent |
|
|
53
|
+
| `VISION_API_KEY` | No | For describe-image skill |
|
|
54
|
+
| `CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES`, `TOOL_RESULT_MAX_CHARS`, `TOOL_RESULT_PREVIEW_CHARS`, `ORCHESTRATOR_URL` | No | Settings on the **`open-webui` container** (not CU-server). Required for multi-step tasks, large tool results, and preview rendering. Full guide: [README.md → Required setup when embedding Open WebUI](../README.md#required-setup-when-embedding-open-webui-into-your-own-stack). |
|
|
55
|
+
|
|
56
|
+
See `.env.example` for the full list with defaults.
|
|
57
|
+
|
|
58
|
+
Routing Claude Code through a custom gateway (LiteLLM / Azure / Bedrock)? See [claude-code-gateway.md](claude-code-gateway.md) for the full recipe.
|
|
59
|
+
|
|
60
|
+
Want sub-agents to run on OpenAI Codex or OpenCode (with OpenRouter / qwen / DeepSeek / 75+ providers) instead of Claude? Flip `SUBAGENT_CLI=claude|codex|opencode` in `.env` — see [multi-cli.md](multi-cli.md) for the full guide and a worked OpenCode + qwen3-coder + OpenRouter recipe.
|
|
61
|
+
|
|
62
|
+
## Model Settings
|
|
63
|
+
|
|
64
|
+
After login, go to your model settings and set:
|
|
65
|
+
|
|
66
|
+
| Setting | Value | Why |
|
|
67
|
+
|---------|-------|-----|
|
|
68
|
+
| **Function Calling** | `Native` | Required for tools to work |
|
|
69
|
+
| **Stream Chat Response** | `On` | Real-time output |
|
|
70
|
+
|
|
71
|
+
The init script auto-creates a workspace model with these settings, but verify if using a different model.
|
|
72
|
+
|
|
73
|
+
## Verification
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Server health
|
|
77
|
+
curl http://localhost:8081/health
|
|
78
|
+
# → {"status":"healthy"}
|
|
79
|
+
|
|
80
|
+
# Open WebUI
|
|
81
|
+
curl -s http://localhost:3000 | head -1
|
|
82
|
+
# → <!DOCTYPE html>
|
|
83
|
+
|
|
84
|
+
# Run project tests
|
|
85
|
+
./tests/test-no-corporate.sh
|
|
86
|
+
./tests/test-project-structure.sh
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Troubleshooting
|
|
90
|
+
|
|
91
|
+
### "Model not found" or tool calls fail
|
|
92
|
+
- Check **Function Calling** is set to `Native` in model settings
|
|
93
|
+
- Verify `OPENAI_API_KEY` is correct: `curl -H "Authorization: Bearer $OPENAI_API_KEY" $OPENAI_API_BASE_URL/models`
|
|
94
|
+
|
|
95
|
+
### Container creation timeout
|
|
96
|
+
- First run downloads the sandbox image (~5 GB). Wait for `docker compose up --build` to finish.
|
|
97
|
+
- Check Docker has enough resources: `docker system info | grep Memory`
|
|
98
|
+
|
|
99
|
+
### Files not appearing in preview
|
|
100
|
+
- Verify `BASE_DATA_DIR` and `USER_DATA_BASE_PATH` match in docker-compose.yml
|
|
101
|
+
- Check: `curl http://localhost:8081/api/outputs/{chat_id}`
|
|
102
|
+
|
|
103
|
+
### Connection refused from Open WebUI
|
|
104
|
+
- Verify the Computer Use Server stack is up: `docker compose ps`
|
|
105
|
+
- Verify Open WebUI's `ORCHESTRATOR_URL` points at the service DNS URL `http://computer-use-server:8081`. The two compose stacks share the default Docker network because they share the project name (the parent directory `open-computer-use`), so `computer-use-server` resolves directly — no `host.docker.internal` / `extra_hosts` needed.
|
|
106
|
+
- If you override the Compose project name (`-p myproj`) or set a custom `container_name:` on the server, point `ORCHESTRATOR_URL` at the new internal hostname. Then re-seed Valves (see Re-seeding section above).
|
|
107
|
+
- Quick check from inside the `open-webui` container: `docker compose -f docker-compose.webui.yml exec open-webui curl -sf http://computer-use-server:8081/health`.
|
|
108
|
+
|
|
109
|
+
## Architecture
|
|
110
|
+
|
|
111
|
+
See [DOCKER.md](DOCKER.md) for detailed Docker architecture and [MCP.md](MCP.md) for the MCP protocol reference.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Known Bugs
|
|
2
|
+
|
|
3
|
+
## 1. MCP Server: TypeError 'NoneType' on SSE notifications
|
|
4
|
+
|
|
5
|
+
**Severity:** Low (doesn't break functionality — tool calls return 200 OK)
|
|
6
|
+
|
|
7
|
+
**Error:**
|
|
8
|
+
```
|
|
9
|
+
starlette/routing.py, line 74, in app
|
|
10
|
+
await response(scope, receive, send)
|
|
11
|
+
TypeError: 'NoneType' object is not callable
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**When:** Every `POST /mcp` that returns 202 Accepted (SSE notification acknowledgment).
|
|
15
|
+
|
|
16
|
+
**Root cause:** MCP Python SDK's Streamable HTTP handler returns `None` for fire-and-forget notification responses. Starlette expects an ASGI callable Response object.
|
|
17
|
+
|
|
18
|
+
**Impact:** Error logged but tool calls work. The 202 response is already sent before the error.
|
|
19
|
+
|
|
20
|
+
**Likely fix:** Check if `mcp` SDK version has a fix, or patch the route handler to return an empty Response for 202.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 2. File preview auto-show depends on model behavior
|
|
25
|
+
|
|
26
|
+
**Severity:** Medium (functional but not always automatic)
|
|
27
|
+
|
|
28
|
+
**How it works:** The `fix_preview_url_detection` patch detects Computer Use Server file URLs in assistant messages and auto-opens an iframe preview in the artifacts panel. The `computer_link_filter` injects the file server URL into the system prompt so the model knows to include file links.
|
|
29
|
+
|
|
30
|
+
**Issue:** Some models (especially smaller ones) don't consistently include file URLs in their responses even when instructed by the system prompt. When the model just says "file created" without the URL, the preview patch has nothing to detect.
|
|
31
|
+
|
|
32
|
+
**Workaround:** The filter's outlet always adds "View your file" link and "Download all as archive" button — these work regardless. For auto-preview, use models that reliably follow system prompt instructions (Claude, GPT-4o, larger Qwen models).
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 3. PPTX generation may timeout with complex prompts
|
|
37
|
+
|
|
38
|
+
**Severity:** Low (model-dependent)
|
|
39
|
+
|
|
40
|
+
**When:** Model makes many sequential tool calls (19+ bash, create_file, view, str_replace) for complex tasks like presentation creation.
|
|
41
|
+
|
|
42
|
+
**Impact:** Response may appear incomplete if model hits max tool call retries.
|
|
43
|
+
|
|
44
|
+
**Workaround:** Use simpler prompts or increase `COMMAND_TIMEOUT` in `.env`.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 4. File/preview endpoints have no per-user auth
|
|
49
|
+
|
|
50
|
+
**Severity:** Medium (known limitation, planned fix)
|
|
51
|
+
|
|
52
|
+
**Issue:** Endpoints like `/files/{chat_id}/`, `/api/outputs/{chat_id}`, `/browser/{chat_id}/`, `/terminal/{chat_id}/` are accessible to anyone who knows the chat ID UUID. There is no per-user authentication — only `MCP_API_KEY` protects the MCP endpoint itself.
|
|
53
|
+
|
|
54
|
+
**Impact:** In a multi-user deployment without network isolation, one user could access another user's files if they know the chat ID.
|
|
55
|
+
|
|
56
|
+
**Current mitigation:** Chat IDs are UUIDs (hard to guess). Tested in production with 1000+ users on Open WebUI — acceptable risk for self-hosted deployments behind a firewall.
|
|
57
|
+
|
|
58
|
+
**Planned fix:** Per-session signed tokens for all file/preview/terminal endpoints. See Security Roadmap in README.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 5. MCP tools cannot return images to the model (Open WebUI limitation)
|
|
63
|
+
|
|
64
|
+
**Severity:** Medium (functional limitation)
|
|
65
|
+
|
|
66
|
+
**Issue:** Open WebUI does not support `image` content type in MCP tool results — only `text` is handled. This means tools cannot return screenshots or images back to the model for analysis.
|
|
67
|
+
|
|
68
|
+
**Impact:** Tools like Playwright (page screenshots) or bash (generated charts) cannot pass visual output directly to the model. The model never sees the image, so it can't reason about what's on screen.
|
|
69
|
+
|
|
70
|
+
**Workaround:** The `describe-image` skill works around this by calling a separate vision model (e.g., GPT-4o, Qwen-VL) to describe the image as text, which is then returned to the main model. Playwright and other skills save images to `/mnt/user-data/outputs/` as HTTP links for the user to view in the file preview panel.
|
|
71
|
+
|
|
72
|
+
**Root cause:** Open WebUI's MCP integration only passes `text` content blocks from tool responses to the model. This is an upstream limitation — see [open-webui/open-webui](https://github.com/open-webui/open-webui) for progress on image tool result support.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 6. Preview breaks after custom `container_name` or non-default compose layouts
|
|
77
|
+
|
|
78
|
+
**Severity:** Medium (configuration-only, no data loss)
|
|
79
|
+
|
|
80
|
+
**Status (v4.0.0):** the class of "two settings must match" bugs was fixed by moving public-URL ownership to the server. The filter now reads the public URL from the server's `X-Public-Base-URL` response header — there is only one place to set it.
|
|
81
|
+
|
|
82
|
+
**How it works:** The Computer Use Server embeds file links into every assistant message using its `PUBLIC_BASE_URL` env var. The Open WebUI filter's `outlet()` uses whatever URL the server returned in the response header — no separate public-URL Valve. The filter's internal `ORCHESTRATOR_URL` Valve is a Docker-only hostname and doesn't leave the container.
|
|
83
|
+
|
|
84
|
+
**What can still go wrong:** the `PUBLIC_BASE_URL` on the `computer-use-server` container must still be a URL the user's browser can reach. Custom compose project names, removed `container_name:` pins, or missing DNS mean the browser sees links pointing at an unreachable hostname — the preview iframe then 404s / shows a blank frame even though the filter decorates it correctly.
|
|
85
|
+
|
|
86
|
+
**Workaround:** Set `PUBLIC_BASE_URL` (server `.env`) to your externally reachable URL (`http://your-host.lan:8081`, `https://cu.example.com`, …). The `fix_preview_url_detection` patch is host-agnostic — no build-arg required. See [docs/openwebui-filter.md](openwebui-filter.md#two-url-roles--public-server-env-and-internal-filtertool-valve).
|
package/docs/MCP.md
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# MCP Server Integration
|
|
2
|
+
|
|
3
|
+
The Computer Use Server exposes a standard [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) endpoint that works with any MCP-compatible client.
|
|
4
|
+
|
|
5
|
+
This server is published in the [MCP Registry](https://github.com/modelcontextprotocol/registry) as `io.github.Wide-Moat/open-computer-use`.
|
|
6
|
+
|
|
7
|
+
## Hosted endpoint (managed)
|
|
8
|
+
|
|
9
|
+
Skip the self-host deployment and point any MCP client at the managed endpoint:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
POST https://api.yambr.com/mcp/computer_use
|
|
13
|
+
Authorization: Bearer <YAMBR_API_KEY>
|
|
14
|
+
X-Chat-Id: <session-id>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Request a key at [app.yambr.com](https://app.yambr.com) (GitHub or Google sign-in). You bring your own model provider — Yambr doesn't resell inference. Per-client configs (Claude Desktop, OpenAI Agents SDK, n8n, LiteLLM) live on [docs.yambr.com](https://docs.yambr.com); repo-side orientation in [CLOUD.md](CLOUD.md).
|
|
18
|
+
|
|
19
|
+
The rest of this document covers **self-hosting** the same MCP server.
|
|
20
|
+
|
|
21
|
+
## Deployment Prerequisite
|
|
22
|
+
|
|
23
|
+
This is a **self-hosted** MCP server. You must deploy it before connecting:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
git clone https://github.com/Wide-Moat/open-computer-use.git
|
|
27
|
+
cd open-computer-use
|
|
28
|
+
docker build --platform linux/amd64 -t open-computer-use:latest .
|
|
29
|
+
docker compose up -d
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The MCP endpoint will be available at `http://localhost:8081/mcp`.
|
|
33
|
+
|
|
34
|
+
### Session isolation modes
|
|
35
|
+
|
|
36
|
+
The server supports three modes controlled by the `SINGLE_USER_MODE` environment variable. This determines how `X-Chat-Id` headers are handled and whether sessions get isolated containers.
|
|
37
|
+
|
|
38
|
+
| `SINGLE_USER_MODE` | `X-Chat-Id` sent | Behavior |
|
|
39
|
+
|---------------------|-------------------|----------|
|
|
40
|
+
| _(not set)_ | Yes | Normal: isolated container per chat ID |
|
|
41
|
+
| _(not set)_ | No | Lenient: uses shared `default` container + appends a warning to every tool response |
|
|
42
|
+
| `true` | _(any)_ | Single-user: always uses one `default` container, no warnings, header ignored |
|
|
43
|
+
| `false` | Yes | Strict multi-user: isolated container per chat ID |
|
|
44
|
+
| `false` | No | **Error** — `X-Chat-Id` is required, tool call rejected |
|
|
45
|
+
|
|
46
|
+
**Default behavior (no env var):** the server accepts requests without `X-Chat-Id` but appends a note to every tool response explaining the options. This makes onboarding easy — things work immediately, and the warning guides users toward the right setup.
|
|
47
|
+
|
|
48
|
+
#### Single-user mode (recommended for Claude Desktop)
|
|
49
|
+
|
|
50
|
+
If you're the only user, set `SINGLE_USER_MODE=true` in `.env`. All sessions share one persistent container — no headers needed:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
echo "SINGLE_USER_MODE=true" >> .env
|
|
54
|
+
docker compose restart
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
#### Strict multi-user mode (recommended for production)
|
|
58
|
+
|
|
59
|
+
For shared deployments, set `SINGLE_USER_MODE=false`. Every request must include `X-Chat-Id` — requests without it are rejected with an error:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
echo "SINGLE_USER_MODE=false" >> .env
|
|
63
|
+
docker compose restart
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
MCP clients (Open WebUI, LiteLLM, n8n) typically pass chat/session IDs automatically via `X-Chat-Id` or `X-OpenWebUI-Chat-Id` headers.
|
|
67
|
+
|
|
68
|
+
## Endpoint
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
POST http://localhost:8081/mcp
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Authentication
|
|
75
|
+
|
|
76
|
+
Set the `MCP_API_KEY` environment variable and pass it as a Bearer token:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Authorization: Bearer <MCP_API_KEY>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Leave `MCP_API_KEY` empty for development (no auth required).
|
|
83
|
+
|
|
84
|
+
## Available Tools
|
|
85
|
+
|
|
86
|
+
| Tool | Description |
|
|
87
|
+
|------|-------------|
|
|
88
|
+
| `bash_tool` | Execute bash commands in isolated Docker container |
|
|
89
|
+
| `view` | View files and directories |
|
|
90
|
+
| `create_file` | Create new files |
|
|
91
|
+
| `str_replace` | Edit files via text replacement |
|
|
92
|
+
| `sub_agent` | Delegate tasks to autonomous Claude Code agent |
|
|
93
|
+
|
|
94
|
+
## Native MCP primitives beyond tools
|
|
95
|
+
|
|
96
|
+
Beyond the five tools, the server exposes three more native primitives of the Streamable-HTTP MCP protocol — all scoped by `X-Chat-Id`:
|
|
97
|
+
|
|
98
|
+
| Primitive | What you get | How |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| `InitializeResult.instructions` | The per-chat system prompt as a string, delivered in the handshake | Dynamic — re-rendered each stateless request from `X-Chat-Id` / `X-User-Email` headers |
|
|
101
|
+
| `resources/list` + `resources/read` | Chat's uploaded files as `file://uploads/{chat_id}/{url-encoded-rel-path}` | Auto-registered on container create + on every `POST /api/uploads` |
|
|
102
|
+
|
|
103
|
+
In addition, `/home/assistant/README.md` inside the sandbox carries the same prompt text, so any model that runs the `view` tool can recover its environment even if the client stripped every MCP handshake field. Full map: `docs/system-prompt.md`.
|
|
104
|
+
|
|
105
|
+
*Note: we intentionally do NOT expose the system prompt via `prompts/get`. The MCP `prompts/*` primitive is user-controlled (slash commands) and `PromptMessage.role` is restricted to `user | assistant` — duplicating `InitializeResult.instructions` there would be off-spec.*
|
|
106
|
+
|
|
107
|
+
## Required Headers
|
|
108
|
+
|
|
109
|
+
> **`X-Chat-Id` is mandatory.** Without it, the server returns an error. Every request must include a unique session identifier.
|
|
110
|
+
|
|
111
|
+
| Header | Description | Required |
|
|
112
|
+
|--------|-------------|----------|
|
|
113
|
+
| `X-Chat-Id` | **Session identifier** — one sandbox container per chat ID | **Yes** |
|
|
114
|
+
| `Authorization` | `Bearer <MCP_API_KEY>` — required if `MCP_API_KEY` is set | Conditional |
|
|
115
|
+
| `X-User-Email` | User email (for per-user skills, token lookup, logging) | No |
|
|
116
|
+
| `X-User-Name` | Display name (URL-encoded) | No |
|
|
117
|
+
| `X-MCP-Servers` | Comma-separated MCP server names for Claude Code sub-agent | No |
|
|
118
|
+
|
|
119
|
+
## Usage Examples
|
|
120
|
+
|
|
121
|
+
### Initialize Session
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
curl -sD - -X POST "http://localhost:8081/mcp" \
|
|
125
|
+
-H "Authorization: Bearer $MCP_API_KEY" \
|
|
126
|
+
-H "Content-Type: application/json" \
|
|
127
|
+
-H "Accept: application/json, text/event-stream" \
|
|
128
|
+
-H "X-Chat-Id: my-session" \
|
|
129
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0"}}}'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Save the `mcp-session-id` header from the response.
|
|
133
|
+
|
|
134
|
+
### Call a Tool
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
curl -s -X POST "http://localhost:8081/mcp" \
|
|
138
|
+
-H "Authorization: Bearer $MCP_API_KEY" \
|
|
139
|
+
-H "Content-Type: application/json" \
|
|
140
|
+
-H "Accept: application/json, text/event-stream" \
|
|
141
|
+
-H "Mcp-Session-Id: <SESSION_ID>" \
|
|
142
|
+
-H "X-Chat-Id: my-session" \
|
|
143
|
+
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"bash_tool","arguments":{"command":"echo Hello from sandbox","description":"test"}}}'
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### List Tools
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
curl -s -X POST "http://localhost:8081/mcp" \
|
|
150
|
+
-H "Authorization: Bearer $MCP_API_KEY" \
|
|
151
|
+
-H "Content-Type: application/json" \
|
|
152
|
+
-H "Accept: application/json, text/event-stream" \
|
|
153
|
+
-H "Mcp-Session-Id: <SESSION_ID>" \
|
|
154
|
+
-H "X-Chat-Id: my-session" \
|
|
155
|
+
-d '{"jsonrpc":"2.0","id":3,"method":"tools/list","params":{}}'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Integration with LLM Frameworks
|
|
159
|
+
|
|
160
|
+
### LiteLLM
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
mcp_servers:
|
|
164
|
+
computer_use:
|
|
165
|
+
url: "http://computer-use-server:8081/mcp"
|
|
166
|
+
transport: "http"
|
|
167
|
+
auth_type: "bearer_token"
|
|
168
|
+
auth_value: "<MCP_API_KEY>"
|
|
169
|
+
extra_headers:
|
|
170
|
+
X-Chat-Id: "{chat_id}"
|
|
171
|
+
X-User-Email: "{user_email}"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Claude Desktop (claude_desktop_config.json)
|
|
175
|
+
|
|
176
|
+
```json
|
|
177
|
+
{
|
|
178
|
+
"mcpServers": {
|
|
179
|
+
"computer-use": {
|
|
180
|
+
"url": "http://localhost:8081/mcp",
|
|
181
|
+
"transport": "streamable-http",
|
|
182
|
+
"headers": {
|
|
183
|
+
"Authorization": "Bearer <MCP_API_KEY>",
|
|
184
|
+
"X-Chat-Id": "desktop-session"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## MCP Servers for Claude Code Sub-Agent
|
|
192
|
+
|
|
193
|
+
When the `sub_agent` tool launches Claude Code inside a sandbox container, it can be configured with MCP servers. This allows Claude Code to access external tools (databases, APIs, other MCP servers) during autonomous task execution.
|
|
194
|
+
|
|
195
|
+
### How it works
|
|
196
|
+
|
|
197
|
+
1. **Client sends MCP server names** via HTTP header when calling the Computer Use Server
|
|
198
|
+
2. **Computer Use Server** writes `~/.mcp.json` inside the sandbox container
|
|
199
|
+
3. **Claude Code** reads the config and connects to the specified MCP servers
|
|
200
|
+
4. **Authorization** uses `ANTHROPIC_AUTH_TOKEN` from the container environment (no secrets in config)
|
|
201
|
+
|
|
202
|
+
### Header format
|
|
203
|
+
|
|
204
|
+
Pass MCP server names as a comma-separated list:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
X-MCP-Servers: server1,server2,server3
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Or the Open WebUI-style header:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
X-OpenWebUI-MCP-Servers: server1,server2,server3
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### URL pattern
|
|
217
|
+
|
|
218
|
+
Server URLs are templated as `{ANTHROPIC_BASE_URL}/mcp/{server_name}` — this follows the LiteLLM MCP proxy pattern where LiteLLM acts as a gateway to multiple MCP servers.
|
|
219
|
+
|
|
220
|
+
### Example: LiteLLM with multiple MCP servers
|
|
221
|
+
|
|
222
|
+
If LiteLLM is configured with MCP servers `github`, `jira`, `slack`:
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
# LiteLLM config
|
|
226
|
+
mcp_servers:
|
|
227
|
+
github:
|
|
228
|
+
url: "http://github-mcp:3000/mcp"
|
|
229
|
+
jira:
|
|
230
|
+
url: "http://jira-mcp:3001/mcp"
|
|
231
|
+
slack:
|
|
232
|
+
url: "http://slack-mcp:3002/mcp"
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Passing `X-MCP-Servers: github,jira` will make these servers available to Claude Code inside the sandbox.
|
|
236
|
+
|
|
237
|
+
### Generated ~/.mcp.json
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"mcpServers": {
|
|
242
|
+
"github": {
|
|
243
|
+
"type": "http",
|
|
244
|
+
"url": "https://llm-api.example.com/mcp/github",
|
|
245
|
+
"headers": {
|
|
246
|
+
"x-openwebui-user-email": "user@example.com",
|
|
247
|
+
"Authorization": "Bearer <ANTHROPIC_AUTH_TOKEN>"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Security notes
|
|
255
|
+
|
|
256
|
+
- The server name `docker_ai` / `docker-ai` is blocked to prevent recursive sub-agent loops
|
|
257
|
+
- Authorization tokens are resolved at runtime from container environment, not stored in the config file
|
|
258
|
+
- MCP servers are auto-approved in Claude Code's `settings.local.json` so it doesn't prompt for permission
|
|
259
|
+
|
|
260
|
+
### Open WebUI integration (planned)
|
|
261
|
+
|
|
262
|
+
Currently, the Open WebUI tool (`computer_use_tools.py`) does not pass MCP server headers. To use this feature, either:
|
|
263
|
+
|
|
264
|
+
1. Use a custom MCP client that sets the `X-MCP-Servers` header
|
|
265
|
+
2. Or add MCP server forwarding to the Open WebUI tool (contributions welcome)
|
|
266
|
+
|
|
267
|
+
## Dynamic Configuration Endpoints
|
|
268
|
+
|
|
269
|
+
The server provides API endpoints that MCP clients should use to get up-to-date configuration instead of hardcoding values.
|
|
270
|
+
|
|
271
|
+
### GET /system-prompt
|
|
272
|
+
|
|
273
|
+
Returns the full system prompt as plain text with current skills and correct file URLs.
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
curl "http://localhost:8081/system-prompt?chat_id=my-session&user_email=user@example.com"
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
| Parameter | Description | Required |
|
|
280
|
+
|-----------|-------------|----------|
|
|
281
|
+
| `chat_id` | Session ID — server constructs file download URLs from this | Recommended |
|
|
282
|
+
| `user_email` | Returns prompt with user-specific skills | No |
|
|
283
|
+
|
|
284
|
+
### GET /skill-list
|
|
285
|
+
|
|
286
|
+
Returns available skills as formatted text for sub-agent delegation.
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
curl "http://localhost:8081/skill-list?user_email=user@example.com"
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### GET /mcp-info
|
|
293
|
+
|
|
294
|
+
Returns MCP endpoint metadata as JSON: available tools, required headers, endpoint URL.
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
curl "http://localhost:8081/mcp-info" -H "Authorization: Bearer $MCP_API_KEY"
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Best practice:** Fetch the system prompt dynamically via `/system-prompt?chat_id={id}` at session start. This ensures the AI model gets correct file URLs and the latest skill set. See [System Prompt Reference](system-prompt.md) for details.
|
|
301
|
+
|
|
302
|
+
## Browser Viewer (CDP)
|
|
303
|
+
|
|
304
|
+
Each sandbox container runs Chromium with CDP exposed. Access the live browser:
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
GET http://localhost:8081/browser/{chat_id}/status
|
|
308
|
+
GET http://localhost:8081/browser/{chat_id}/json
|
|
309
|
+
WebSocket: ws://localhost:8081/browser/{chat_id}/devtools/page/{page_id}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Terminal Access
|
|
313
|
+
|
|
314
|
+
Interactive terminal via WebSocket:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
GET http://localhost:8081/terminal/{chat_id}/status
|
|
318
|
+
GET http://localhost:8081/terminal/{chat_id}/start-ttyd
|
|
319
|
+
WebSocket: ws://localhost:8081/terminal/{chat_id}/ws
|
|
320
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Screenshots
|
|
2
|
+
|
|
3
|
+
Visual guide to Open Computer Use with Open WebUI.
|
|
4
|
+
|
|
5
|
+
## Live Browser Streaming
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
The AI opened openwebui.com via `playwright-cli` — you see the actual browser in real-time through CDP (Chrome DevTools Protocol) streaming. The chat on the left shows tool calls, the browser panel on the right shows the live page. You can watch the AI navigate, click, and fill forms.
|
|
10
|
+
|
|
11
|
+
## Claude Code Terminal
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
Interactive Claude Code session inside the sandbox container. The AI is logged in and responding to prompts. This is a real TTY connection via WebSocket — you can type commands, interrupt execution, and resume sessions. Claude Code has access to all MCP servers and skills configured for the chat.
|
|
16
|
+
|
|
17
|
+
## File Preview
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
The preview panel showing a generated Markdown file with skill descriptions. Files created by the AI appear here automatically — supports Word, Excel, PDF, images, code, and more. Dark theme, tabbed navigation (Files / Browser / Sub-agent).
|
|
22
|
+
|
|
23
|
+
## Sub-Agent Dashboard
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
Claude Code monitoring panel: see running processes, previous sessions with resume capability, dangerous mode toggle. "Currently running: Claude Code" with a Stop button. Previous sessions show task descriptions with dates and Resume buttons.
|
|
28
|
+
|
|
29
|
+
## Document Creation
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
AI creating a Word document via tool calls. The model reads the SKILL.md, creates the file, and the preview panel auto-opens showing the document content inline.
|
|
34
|
+
|
|
35
|
+
## Chat Overview
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
Model listing its available skills and tools: docx, pdf, pptx, xlsx, bash_tool, create_file, str_replace, view, sub_agent, and more. Shows file handling paths and supported formats.
|