@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,197 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://schemas.open-computer-use.dev/storage/mount-config.schema.json",
|
|
4
|
+
"$comment": "SPDX-License-Identifier: FSL-1.1-Apache-2.0 | Copyright (c) 2025 Open Computer Use Contributors | File-operation mount surface (Storage broker -> host -> Session sandbox): broker-side provisioning config (carries lease), guest-facing config (no lease). The per-operation file-op RPC bodies live in file-ops.schema.json. NFR-SEC-25. JSON Schema 2020-12 (json-schema.org).",
|
|
5
|
+
"title": "File-operation mount config",
|
|
6
|
+
"description": "Two mount-config variants: a broker-side provisioning config (carries the lease) and a guest-facing config (no lease). Each mount's RW/RO posture is the `writes` flag plus the structural `mounts` (RW) / `readonly_mounts` (RO) split; its freshness window is the per-mount `cache_duration_s` (short for RO inputs, long for the RW sink). The transport substrate (FUSE/virtio-fs/9p) is a component-spec choice and is deliberately absent from this schema (NFR-SEC-25). No object-store/S3 fields. No backend-encryption fields: isolation is by filesystem_id scope, not per-session crypt keys; crypt is not modelled on. The file-op RPC message set is split out to file-ops.schema.json (status TBD).",
|
|
7
|
+
|
|
8
|
+
"$defs": {
|
|
9
|
+
"SchemaVersion": {
|
|
10
|
+
"description": "Interface version. Breaking change increments major (NFR-IC-04).",
|
|
11
|
+
"type": "string",
|
|
12
|
+
"pattern": "^v[0-9]+(alpha|beta)?[0-9]*$",
|
|
13
|
+
"examples": ["v1alpha"]
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
"FilesystemId": {
|
|
17
|
+
"description": "Per-session logical scope (the isolation unit, not a crypto boundary). Egress binds connection to this id (NFR-SEC-25).",
|
|
18
|
+
"type": "string",
|
|
19
|
+
"minLength": 1,
|
|
20
|
+
"maxLength": 256,
|
|
21
|
+
"examples": ["session_01HXYZ_chat"]
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
"Octal": {
|
|
25
|
+
"description": "Host-set POSIX permission bits as an octal string. Agent (non-root) cannot change.",
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^0[0-7]{3}$",
|
|
28
|
+
"examples": ["0755", "0644"]
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
"CacheDurationSeconds": {
|
|
32
|
+
"description": "Per-mount cache_duration_s: backend cache freshness window in whole seconds. RO inputs use a short window so externally-written user data appears promptly; the RW output mount uses a long window since the agent is the writer and invalidates locally. Directional defaults by mount: uploads 1, tool_results 3, transcripts 10, outputs 3600.",
|
|
33
|
+
"type": "integer",
|
|
34
|
+
"minimum": 0,
|
|
35
|
+
"examples": [1, 3, 10, 3600]
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"BackendCacheTtlSeconds": {
|
|
39
|
+
"description": "Config-level backend (broker-side) cache freshness window in whole seconds, distinct from the per-mount local-VFS window cache_duration_s. Broker-side, so it sits on the provisioning variant only.",
|
|
40
|
+
"type": "integer",
|
|
41
|
+
"minimum": 0,
|
|
42
|
+
"x-ocu-tbd": "Config-level backend cache TTL. Units (seconds) and config-level-vs-per-mount scope are design-derived from the field name; confirm against a source before freezing."
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
"ByteSize": {
|
|
46
|
+
"description": "Local VFS cache cap as a size string. Files over the cap stream rather than cache.",
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^[0-9]+(B|K|M|G|T)?$",
|
|
49
|
+
"examples": ["1G", "512M"]
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
"VfsCacheMode": {
|
|
53
|
+
"description": "Page-cache policy for the mount.",
|
|
54
|
+
"type": "string",
|
|
55
|
+
"enum": ["off", "minimal", "writes", "full"]
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
"MountBase": {
|
|
59
|
+
"description": "Fields common to every mount. `writes` is the single RW/RO control (no inverse `readonly` field). RW vs RO is host-enforced; the agent cannot flip it.",
|
|
60
|
+
"type": "object",
|
|
61
|
+
"additionalProperties": false,
|
|
62
|
+
"required": [
|
|
63
|
+
"destination",
|
|
64
|
+
"writes",
|
|
65
|
+
"vfs_cache_mode",
|
|
66
|
+
"cache_duration_s",
|
|
67
|
+
"vfs_cache_max_size",
|
|
68
|
+
"dir_perms",
|
|
69
|
+
"file_perms"
|
|
70
|
+
],
|
|
71
|
+
"oneOf": [
|
|
72
|
+
{ "required": ["filesystem_id"], "not": { "required": ["memory_store_id"] } },
|
|
73
|
+
{ "required": ["memory_store_id"], "not": { "required": ["filesystem_id"] } }
|
|
74
|
+
],
|
|
75
|
+
"properties": {
|
|
76
|
+
"destination": {
|
|
77
|
+
"description": "Absolute guest mountpoint.",
|
|
78
|
+
"type": "string",
|
|
79
|
+
"pattern": "^/.+",
|
|
80
|
+
"examples": ["/workspace/out"]
|
|
81
|
+
},
|
|
82
|
+
"filesystem_id": { "$ref": "#/$defs/FilesystemId" },
|
|
83
|
+
"memory_store_id": {
|
|
84
|
+
"description": "Parallel scope id for memory-backed mounts; present only when the backing scope is a memory store rather than a filesystem.",
|
|
85
|
+
"type": "string",
|
|
86
|
+
"minLength": 1,
|
|
87
|
+
"maxLength": 256
|
|
88
|
+
},
|
|
89
|
+
"writes": {
|
|
90
|
+
"description": "true => read-write mount, false => read-only. Host-enforced; the agent cannot flip it. RW vs RO is the split between the `mounts` (RW) and `readonly_mounts` (RO) arrays; this boolean is the per-mount projection of that split.",
|
|
91
|
+
"type": "boolean"
|
|
92
|
+
},
|
|
93
|
+
"vfs_cache_mode": { "$ref": "#/$defs/VfsCacheMode" },
|
|
94
|
+
"cache_duration_s": { "$ref": "#/$defs/CacheDurationSeconds" },
|
|
95
|
+
"vfs_cache_max_size": {
|
|
96
|
+
"description": "Local VFS cache cap per mount. Files over the cap stream rather than cache.",
|
|
97
|
+
"$ref": "#/$defs/ByteSize"
|
|
98
|
+
},
|
|
99
|
+
"dir_perms": { "$ref": "#/$defs/Octal" },
|
|
100
|
+
"file_perms": { "$ref": "#/$defs/Octal" }
|
|
101
|
+
},
|
|
102
|
+
"$comment": "RW/RO is carried by `writes` and the structural `mounts` (RW) / `readonly_mounts` (RO) split, host-enforced. cache_duration_s sets the per-mount directional window (short for RO inputs, long for the RW sink; defaults pinned in CacheDurationSeconds, tunable per deployment). The backend source path is broker-derived from filesystem_id + the mount's RW/RO intent and is deliberately off the wire (least-data, NFR-SEC-25) — not a guest- or host-facing mount field. NFR-SEC-25.",
|
|
103
|
+
"$comment-no-role": "No `role` field. RW/RO is structural (the mounts / readonly_mounts split) and the directional cache window is cache_duration_s itself; a role enum (uploads/tool_results/transcripts/outputs) bound to writes/cache would only duplicate values already carried by `writes` and cache_duration_s, with no source. The role names survive solely as the directional-window vocabulary in CacheDurationSeconds."
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
"GuestMountConfig": {
|
|
107
|
+
"description": "Host -> in-guest mount agent. Token-absent by construction: no field can carry an upstream credential (NFR-SEC-25, no-creds-in-guest invariant). The bearer credential is injected at the egress edge, never seen in the guest.",
|
|
108
|
+
"type": "object",
|
|
109
|
+
"additionalProperties": false,
|
|
110
|
+
"required": ["schema_version", "service_url", "mounts"],
|
|
111
|
+
"properties": {
|
|
112
|
+
"schema_version": { "$ref": "#/$defs/SchemaVersion" },
|
|
113
|
+
"service_url": {
|
|
114
|
+
"description": "Single allow-listed broker egress endpoint the mount agent dials.",
|
|
115
|
+
"type": "string",
|
|
116
|
+
"format": "uri",
|
|
117
|
+
"pattern": "^https://",
|
|
118
|
+
"examples": ["https://broker.internal"]
|
|
119
|
+
},
|
|
120
|
+
"mounts": {
|
|
121
|
+
"description": "Read-write mounts provisioned in the guest. `writes` MUST be true; a read-only mount belongs in `readonly_mounts`.",
|
|
122
|
+
"type": "array",
|
|
123
|
+
"items": {
|
|
124
|
+
"allOf": [
|
|
125
|
+
{ "$ref": "#/$defs/MountBase" },
|
|
126
|
+
{ "properties": { "writes": { "const": true } } }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
"readonly_mounts": {
|
|
131
|
+
"description": "Read-only mounts. Same shape; `writes` MUST be false. RO is host-set; the agent cannot make a read-only mount writable.",
|
|
132
|
+
"type": "array",
|
|
133
|
+
"items": {
|
|
134
|
+
"allOf": [
|
|
135
|
+
{ "$ref": "#/$defs/MountBase" },
|
|
136
|
+
{ "properties": { "writes": { "const": false } } }
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"default": []
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
"ProvisionMountConfig": {
|
|
145
|
+
"description": "Storage broker -> host provisioning variant. Carries the broker-signed lease and the inspection-CA trust anchor. Never delivered into the guest as-is; the host strips the lease before handing the GuestMountConfig to the in-guest agent.",
|
|
146
|
+
"type": "object",
|
|
147
|
+
"additionalProperties": false,
|
|
148
|
+
"required": ["schema_version", "service_url", "filesystem_id", "auth_token", "ca_cert_pem", "mounts"],
|
|
149
|
+
"properties": {
|
|
150
|
+
"schema_version": { "$ref": "#/$defs/SchemaVersion" },
|
|
151
|
+
"service_url": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"format": "uri",
|
|
154
|
+
"pattern": "^https://",
|
|
155
|
+
"examples": ["https://broker.internal"]
|
|
156
|
+
},
|
|
157
|
+
"filesystem_id": { "$ref": "#/$defs/FilesystemId" },
|
|
158
|
+
"auth_token": {
|
|
159
|
+
"description": "Broker-signed lease, opaque to the holder. Bound to filesystem_id and a TTL by the broker (lease semantics live in the Lease-pull surface). Present only in this broker-side variant; absent from GuestMountConfig.",
|
|
160
|
+
"type": "string",
|
|
161
|
+
"minLength": 1
|
|
162
|
+
},
|
|
163
|
+
"ca_cert_pem": {
|
|
164
|
+
"description": "Inspection-CA trust anchor (PEM) injected into the guest trust store so the guest trusts the egress edge that injects the bearer credential.",
|
|
165
|
+
"type": "string",
|
|
166
|
+
"contentMediaType": "application/x-pem-file",
|
|
167
|
+
"pattern": "-----BEGIN CERTIFICATE-----"
|
|
168
|
+
},
|
|
169
|
+
"mounts": {
|
|
170
|
+
"type": "array",
|
|
171
|
+
"items": {
|
|
172
|
+
"allOf": [
|
|
173
|
+
{ "$ref": "#/$defs/MountBase" },
|
|
174
|
+
{ "properties": { "writes": { "const": true } } }
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"readonly_mounts": {
|
|
179
|
+
"type": "array",
|
|
180
|
+
"items": {
|
|
181
|
+
"allOf": [
|
|
182
|
+
{ "$ref": "#/$defs/MountBase" },
|
|
183
|
+
{ "properties": { "writes": { "const": false } } }
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
"default": []
|
|
187
|
+
},
|
|
188
|
+
"backend_cache_ttl": { "$ref": "#/$defs/BackendCacheTtlSeconds" }
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
"oneOf": [
|
|
194
|
+
{ "$ref": "#/$defs/GuestMountConfig" },
|
|
195
|
+
{ "$ref": "#/$defs/ProvisionMountConfig" }
|
|
196
|
+
]
|
|
197
|
+
}
|
package/cron/Dockerfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
FROM docker:27-cli
|
|
2
|
+
|
|
3
|
+
RUN apk add --no-cache bash coreutils findutils
|
|
4
|
+
|
|
5
|
+
COPY cleanup.sh /usr/local/bin/cleanup.sh
|
|
6
|
+
COPY cleanup-quick.sh /usr/local/bin/cleanup-quick.sh
|
|
7
|
+
RUN chmod +x /usr/local/bin/cleanup.sh /usr/local/bin/cleanup-quick.sh
|
|
8
|
+
|
|
9
|
+
# Two cron schedules:
|
|
10
|
+
# - Quick: every 2 hours — remove stopped containers + dangling images
|
|
11
|
+
# - Full: daily at 3 AM — stop old containers, clean volumes, prune data
|
|
12
|
+
RUN echo "0 */2 * * * /usr/local/bin/cleanup-quick.sh >> /var/log/cleanup.log 2>&1" > /etc/crontabs/root && \
|
|
13
|
+
echo "0 3 * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1" >> /etc/crontabs/root
|
|
14
|
+
|
|
15
|
+
CMD ["crond", "-f", "-l", "2"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
3
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
4
|
+
# Quick cleanup — runs every 2 hours
|
|
5
|
+
# Removes stopped sandbox containers and dangling images.
|
|
6
|
+
# Fast and safe — doesn't touch running containers or volumes.
|
|
7
|
+
|
|
8
|
+
set -eu
|
|
9
|
+
|
|
10
|
+
log() { echo "[cleanup-quick] $(date -u +%Y-%m-%dT%H:%M:%SZ) $*"; }
|
|
11
|
+
|
|
12
|
+
log "Removing stopped chat containers..."
|
|
13
|
+
REMOVED=$(docker ps -a --filter "label=managed-by=mcp-computer-use-orchestrator" \
|
|
14
|
+
--filter "status=exited" --filter "status=dead" \
|
|
15
|
+
--format '{{.ID}}' | xargs -r docker rm 2>/dev/null | wc -l)
|
|
16
|
+
log "Removed $REMOVED stopped containers"
|
|
17
|
+
|
|
18
|
+
log "Pruning dangling images..."
|
|
19
|
+
docker image prune -f > /dev/null 2>&1
|
|
20
|
+
|
|
21
|
+
log "Quick cleanup done."
|
package/cron/cleanup.sh
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
3
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
4
|
+
# Full cleanup — runs daily at 3:00 AM
|
|
5
|
+
# Stops old containers, removes stopped ones, cleans volumes and stale data.
|
|
6
|
+
#
|
|
7
|
+
# IMPORTANT: Only touches owui-chat-* containers, never infrastructure services.
|
|
8
|
+
# Volumes are kept for N days after LAST USE (checked via .last_active marker).
|
|
9
|
+
#
|
|
10
|
+
# Environment variables:
|
|
11
|
+
# CONTAINER_MAX_AGE_HOURS - Stop running containers older than this (default: 24)
|
|
12
|
+
# VOLUME_MAX_AGE_DAYS - Remove unused volumes older than this (default: 7)
|
|
13
|
+
# DATA_MAX_AGE_DAYS - Remove stale data dirs older than this (default: 7)
|
|
14
|
+
# DATA_DIR - Host path for chat data (default: /tmp/computer-use-data)
|
|
15
|
+
# DRY_RUN - If "true", only log what would be done (default: false)
|
|
16
|
+
|
|
17
|
+
set -eu
|
|
18
|
+
|
|
19
|
+
CONTAINER_MAX_AGE_HOURS="${CONTAINER_MAX_AGE_HOURS:-24}"
|
|
20
|
+
VOLUME_MAX_AGE_DAYS="${VOLUME_MAX_AGE_DAYS:-7}"
|
|
21
|
+
DATA_MAX_AGE_DAYS="${DATA_MAX_AGE_DAYS:-7}"
|
|
22
|
+
DATA_DIR="${DATA_DIR:-/tmp/computer-use-data}"
|
|
23
|
+
DRY_RUN="${DRY_RUN:-false}"
|
|
24
|
+
|
|
25
|
+
log() { echo "[cleanup] $(date -u +%Y-%m-%dT%H:%M:%SZ) $*"; }
|
|
26
|
+
|
|
27
|
+
run_or_dry() {
|
|
28
|
+
if [ "$DRY_RUN" = "true" ]; then
|
|
29
|
+
log "DRY RUN: $*"
|
|
30
|
+
else
|
|
31
|
+
"$@"
|
|
32
|
+
fi
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
echo "=== Full cleanup started at $(date -u) ==="
|
|
36
|
+
|
|
37
|
+
# -------------------------------------------------------------------
|
|
38
|
+
# 1. Stop old running chat containers (>N hours)
|
|
39
|
+
# -------------------------------------------------------------------
|
|
40
|
+
log "Stopping chat containers older than ${CONTAINER_MAX_AGE_HOURS}h..."
|
|
41
|
+
docker ps --filter "label=managed-by=mcp-computer-use-orchestrator" \
|
|
42
|
+
--format '{{.ID}} {{.Names}} {{.Status}}' | while read -r id name status; do
|
|
43
|
+
# Match "Up X days" or "Up N hours" where N > threshold
|
|
44
|
+
if echo "$status" | grep -qE "Up [0-9]+ (day|week|month)"; then
|
|
45
|
+
log " Stopping $name ($status)"
|
|
46
|
+
run_or_dry docker stop "$id"
|
|
47
|
+
elif echo "$status" | grep -qE "Up ([2-9][0-9]|[0-9]{3,}) hours"; then
|
|
48
|
+
HOURS=$(echo "$status" | grep -oE '[0-9]+ hours' | grep -oE '[0-9]+')
|
|
49
|
+
if [ "${HOURS:-0}" -ge "$CONTAINER_MAX_AGE_HOURS" ]; then
|
|
50
|
+
log " Stopping $name (up ${HOURS}h)"
|
|
51
|
+
run_or_dry docker stop "$id"
|
|
52
|
+
fi
|
|
53
|
+
fi
|
|
54
|
+
done
|
|
55
|
+
|
|
56
|
+
# -------------------------------------------------------------------
|
|
57
|
+
# 2. Remove all stopped chat containers
|
|
58
|
+
# -------------------------------------------------------------------
|
|
59
|
+
log "Removing stopped chat containers..."
|
|
60
|
+
docker ps -a --filter "label=managed-by=mcp-computer-use-orchestrator" \
|
|
61
|
+
--filter "status=exited" --filter "status=dead" \
|
|
62
|
+
--format '{{.ID}} {{.Names}}' | while read -r id name; do
|
|
63
|
+
log " Removing $name"
|
|
64
|
+
run_or_dry docker rm -v "$id"
|
|
65
|
+
done
|
|
66
|
+
|
|
67
|
+
# -------------------------------------------------------------------
|
|
68
|
+
# 3. Remove chat volumes unused for N days
|
|
69
|
+
# Uses .last_active marker inside volume (touched by entrypoint on start).
|
|
70
|
+
# Falls back to volume CreatedAt if no marker exists.
|
|
71
|
+
# -------------------------------------------------------------------
|
|
72
|
+
log "Checking chat volumes (max age: ${VOLUME_MAX_AGE_DAYS}d)..."
|
|
73
|
+
CUTOFF=$(date -u -d "-${VOLUME_MAX_AGE_DAYS} days" +%s 2>/dev/null || \
|
|
74
|
+
date -u -v-${VOLUME_MAX_AGE_DAYS}d +%s 2>/dev/null || echo 0)
|
|
75
|
+
REMOVED=0
|
|
76
|
+
|
|
77
|
+
for vol in $(docker volume ls -q 2>/dev/null | grep "chat-.*-workspace" || true); do
|
|
78
|
+
# Skip if volume is used by a running container
|
|
79
|
+
USED=$(docker ps -q --filter "volume=$vol" 2>/dev/null)
|
|
80
|
+
if [ -n "$USED" ]; then
|
|
81
|
+
continue
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# Check .last_active marker inside volume
|
|
85
|
+
LAST_ACTIVE=$(docker run --rm -v "$vol:/vol:ro" alpine stat -c %Y /vol/.last_active 2>/dev/null || echo "")
|
|
86
|
+
|
|
87
|
+
if [ -z "$LAST_ACTIVE" ]; then
|
|
88
|
+
# No marker — fallback to volume CreatedAt
|
|
89
|
+
CREATED=$(docker volume inspect --format "{{.CreatedAt}}" "$vol" 2>/dev/null | cut -d"." -f1 | cut -d"+" -f1)
|
|
90
|
+
if [ -n "$CREATED" ]; then
|
|
91
|
+
LAST_ACTIVE=$(date -u -d "$CREATED" +%s 2>/dev/null || echo "")
|
|
92
|
+
fi
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
if [ -n "$LAST_ACTIVE" ] && [ "$LAST_ACTIVE" -lt "$CUTOFF" ]; then
|
|
96
|
+
log " Removing $vol (last active: $(date -u -d @$LAST_ACTIVE +%Y-%m-%d 2>/dev/null || echo 'unknown'))"
|
|
97
|
+
run_or_dry docker volume rm "$vol" && REMOVED=$((REMOVED + 1))
|
|
98
|
+
fi
|
|
99
|
+
done
|
|
100
|
+
log "Removed $REMOVED old volumes"
|
|
101
|
+
|
|
102
|
+
# -------------------------------------------------------------------
|
|
103
|
+
# 4. Remove stale data directories
|
|
104
|
+
# -------------------------------------------------------------------
|
|
105
|
+
if [ -d "$DATA_DIR" ]; then
|
|
106
|
+
log "Checking stale data dirs in $DATA_DIR (max age: ${DATA_MAX_AGE_DAYS}d)..."
|
|
107
|
+
find "$DATA_DIR" -maxdepth 1 -mindepth 1 -type d -mtime "+${DATA_MAX_AGE_DAYS}" | while read -r dir; do
|
|
108
|
+
CHAT_ID=$(basename "$dir")
|
|
109
|
+
CONTAINER_NAME="owui-chat-${CHAT_ID}"
|
|
110
|
+
if ! docker ps -a --filter "name=^/${CONTAINER_NAME}$" --format '{{.ID}}' | grep -q .; then
|
|
111
|
+
log " Removing stale data: $dir"
|
|
112
|
+
run_or_dry rm -rf "$dir"
|
|
113
|
+
fi
|
|
114
|
+
done
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
# -------------------------------------------------------------------
|
|
118
|
+
# 5. Docker system cleanup
|
|
119
|
+
# -------------------------------------------------------------------
|
|
120
|
+
log "Pruning unused images and build cache..."
|
|
121
|
+
run_or_dry docker image prune -f
|
|
122
|
+
run_or_dry docker builder prune -f --keep-storage=2GB
|
|
123
|
+
|
|
124
|
+
echo "=== Disk usage after cleanup ==="
|
|
125
|
+
df -h / 2>/dev/null || true
|
|
126
|
+
|
|
127
|
+
echo "=== Full cleanup finished at $(date -u) ==="
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Integration test stack. Mirrors docker-compose.yml exactly — same socket
|
|
5
|
+
# bind, same workspace image, same env shape — but on a non-default port and
|
|
6
|
+
# with a fixed MCP_API_KEY so the pytest suite can assert auth behavior.
|
|
7
|
+
#
|
|
8
|
+
# Run:
|
|
9
|
+
# docker compose -f docker-compose.test.yml up -d --build
|
|
10
|
+
# pytest tests/integration/
|
|
11
|
+
# docker compose -f docker-compose.test.yml down -v --remove-orphans
|
|
12
|
+
#
|
|
13
|
+
# Cleanup of orphan workspace containers spawned by the orchestrator during
|
|
14
|
+
# tests is handled by the pytest session finalizer in conftest.py (matches
|
|
15
|
+
# the `owui-chat-itest-*` container-name prefix that the test fixtures use).
|
|
16
|
+
|
|
17
|
+
services:
|
|
18
|
+
computer-use-server-test:
|
|
19
|
+
build: ./computer-use-server
|
|
20
|
+
image: open-computer-use-server:test
|
|
21
|
+
container_name: ocu-test-server
|
|
22
|
+
ports:
|
|
23
|
+
- "18081:8081" # non-default to avoid clashing with a running prod stack
|
|
24
|
+
volumes:
|
|
25
|
+
# Production parity: bind the host Docker socket so the orchestrator
|
|
26
|
+
# spawns sibling containers on the host daemon. This is exactly the
|
|
27
|
+
# configuration the chart targets via Sysbox DinD in k8s and what the
|
|
28
|
+
# default Compose layout uses on a developer workstation.
|
|
29
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
30
|
+
- ./tests/integration/_tmp/user-data:/tmp/computer-use-data:rw
|
|
31
|
+
environment:
|
|
32
|
+
- MCP_API_KEY=test-token-do-not-use-in-prod
|
|
33
|
+
- DOCKER_IMAGE=open-computer-use:test
|
|
34
|
+
# Same path the workspace container will see — bind mount paths must
|
|
35
|
+
# resolve identically inside and outside the orchestrator pod/container.
|
|
36
|
+
- USER_DATA_BASE_PATH=/tmp/computer-use-data
|
|
37
|
+
- BASE_DATA_DIR=/tmp/computer-use-data
|
|
38
|
+
- PUBLIC_BASE_URL=http://ocu-test-server:8081
|
|
39
|
+
- COMMAND_TIMEOUT=60
|
|
40
|
+
- CONTAINER_IDLE_TIMEOUT=120
|
|
41
|
+
healthcheck:
|
|
42
|
+
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8081/health')"]
|
|
43
|
+
interval: 5s
|
|
44
|
+
timeout: 3s
|
|
45
|
+
retries: 10
|
|
46
|
+
start_period: 5s
|
|
47
|
+
restart: "no"
|
|
48
|
+
networks:
|
|
49
|
+
- ocu-test
|
|
50
|
+
|
|
51
|
+
networks:
|
|
52
|
+
ocu-test:
|
|
53
|
+
name: ocu-test-net
|
|
54
|
+
driver: bridge
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
# Open WebUI + PostgreSQL — example client for Computer Use
|
|
4
|
+
#
|
|
5
|
+
# Reaches Computer Use Server via Docker service DNS (computer-use-server:8081).
|
|
6
|
+
# Both stacks share the default network because they share the Compose project
|
|
7
|
+
# name (the parent directory "open-computer-use") — no extra_hosts required.
|
|
8
|
+
#
|
|
9
|
+
# Start: docker compose -f docker-compose.webui.yml up --build
|
|
10
|
+
# Requires: Computer Use Server running (docker compose -f docker-compose.yml up -d)
|
|
11
|
+
|
|
12
|
+
services:
|
|
13
|
+
open-webui:
|
|
14
|
+
build:
|
|
15
|
+
context: ./openwebui
|
|
16
|
+
dockerfile: Dockerfile
|
|
17
|
+
args:
|
|
18
|
+
OPENWEBUI_VERSION: ${OPENWEBUI_VERSION:-0.9.2}
|
|
19
|
+
ports:
|
|
20
|
+
- "${OPENWEBUI_PORT:-3000}:8080"
|
|
21
|
+
depends_on:
|
|
22
|
+
postgres:
|
|
23
|
+
condition: service_healthy
|
|
24
|
+
environment:
|
|
25
|
+
- DATABASE_URL=postgresql://openwebui:${POSTGRES_PASSWORD:-openwebui}@postgres:5432/openwebui
|
|
26
|
+
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
|
27
|
+
- OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL:-}
|
|
28
|
+
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY:-}
|
|
29
|
+
# Disable HuggingFace model downloads — not needed for Computer Use
|
|
30
|
+
- BYPASS_EMBEDDING_AND_RETRIEVAL=true
|
|
31
|
+
- RAG_EMBEDDING_MODEL_AUTO_UPDATE=false
|
|
32
|
+
# Skip SSL verification for self-signed certs (set to false if needed)
|
|
33
|
+
- ENABLE_OPENAI_API_SSL_VERIFY=${ENABLE_OPENAI_API_SSL_VERIFY:-true}
|
|
34
|
+
# Auto-init: install Computer Use tool + filter on first startup
|
|
35
|
+
- ADMIN_EMAIL=${ADMIN_EMAIL:-admin@open-computer-use.dev}
|
|
36
|
+
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
|
|
37
|
+
# Internal URL of computer-use-server, seeded by init.sh into the Tool
|
|
38
|
+
# and Filter Valves. Uses Docker service DNS — both compose stacks share
|
|
39
|
+
# the default network because they share the project name (the parent
|
|
40
|
+
# directory "open-computer-use"), so `computer-use-server` resolves to
|
|
41
|
+
# the container's IP directly. Browsers never see this URL.
|
|
42
|
+
# Internal port is always 8081 — MCP_PORT is a host-side mapping and
|
|
43
|
+
# irrelevant for container-to-container traffic on the Docker network.
|
|
44
|
+
- ORCHESTRATOR_URL=http://computer-use-server:8081
|
|
45
|
+
- MCP_API_KEY=${MCP_API_KEY:-}
|
|
46
|
+
# Allow complex multi-step tasks (browser + doc creation) to complete
|
|
47
|
+
- CHAT_RESPONSE_MAX_TOOL_CALL_RETRIES=200
|
|
48
|
+
# Large tool result truncation (fix_large_tool_results patch)
|
|
49
|
+
# Prevents context window exhaustion from large MCP tool outputs
|
|
50
|
+
- TOOL_RESULT_MAX_CHARS=${TOOL_RESULT_MAX_CHARS:-50000}
|
|
51
|
+
- TOOL_RESULT_PREVIEW_CHARS=${TOOL_RESULT_PREVIEW_CHARS:-2000}
|
|
52
|
+
# fix_large_tool_results patch reads ORCHESTRATOR_URL (same name as the
|
|
53
|
+
# Tool/Filter Valves) to upload truncated tool results back to the server.
|
|
54
|
+
# Already set in the Valves-seed block above — re-exporting here so the
|
|
55
|
+
# patch's `os.environ.get('ORCHESTRATOR_URL')` at Python import time sees it.
|
|
56
|
+
volumes:
|
|
57
|
+
- open-webui-data:/app/backend/data
|
|
58
|
+
restart: unless-stopped
|
|
59
|
+
|
|
60
|
+
postgres:
|
|
61
|
+
image: postgres:17-alpine
|
|
62
|
+
environment:
|
|
63
|
+
POSTGRES_USER: openwebui
|
|
64
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-openwebui}
|
|
65
|
+
POSTGRES_DB: openwebui
|
|
66
|
+
volumes:
|
|
67
|
+
- postgres-data:/var/lib/postgresql/data
|
|
68
|
+
healthcheck:
|
|
69
|
+
test: ["CMD-SHELL", "pg_isready -U openwebui"]
|
|
70
|
+
interval: 5s
|
|
71
|
+
timeout: 5s
|
|
72
|
+
retries: 5
|
|
73
|
+
restart: unless-stopped
|
|
74
|
+
|
|
75
|
+
volumes:
|
|
76
|
+
open-webui-data:
|
|
77
|
+
postgres-data:
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
# Computer Use Server — core MCP server + workspace image
|
|
4
|
+
# Start: docker compose up
|
|
5
|
+
# Build workspace first: docker compose up --build
|
|
6
|
+
|
|
7
|
+
services:
|
|
8
|
+
# Workspace image — builds the AI sandbox container
|
|
9
|
+
# One-shot verification, then exits. Image stays cached.
|
|
10
|
+
workspace:
|
|
11
|
+
build:
|
|
12
|
+
context: .
|
|
13
|
+
dockerfile: Dockerfile
|
|
14
|
+
platforms:
|
|
15
|
+
- linux/amd64
|
|
16
|
+
image: ${DOCKER_IMAGE:-open-computer-use:latest}
|
|
17
|
+
command: >
|
|
18
|
+
bash -c "echo 'Workspace image OK:' && python3 --version && node --version && echo 'Ready.' && exit 0"
|
|
19
|
+
restart: "no"
|
|
20
|
+
|
|
21
|
+
# Computer Use MCP Server (orchestrator)
|
|
22
|
+
# Manages workspace containers, provides MCP tools endpoint at :8081
|
|
23
|
+
computer-use-server:
|
|
24
|
+
build: ./computer-use-server
|
|
25
|
+
container_name: computer-use-server
|
|
26
|
+
ports:
|
|
27
|
+
- "${MCP_PORT:-8081}:8081"
|
|
28
|
+
depends_on:
|
|
29
|
+
workspace:
|
|
30
|
+
condition: service_completed_successfully
|
|
31
|
+
volumes:
|
|
32
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
33
|
+
- /tmp/computer-use-data:/tmp/computer-use-data:rw
|
|
34
|
+
- computer-use-data:/data:rw
|
|
35
|
+
- skills-cache:/data/skills-cache:rw
|
|
36
|
+
environment:
|
|
37
|
+
- MCP_API_KEY=${MCP_API_KEY:-}
|
|
38
|
+
- DOCKER_IMAGE=${DOCKER_IMAGE:-open-computer-use:latest}
|
|
39
|
+
- USER_DATA_BASE_PATH=/tmp/computer-use-data
|
|
40
|
+
- BASE_DATA_DIR=/tmp/computer-use-data
|
|
41
|
+
# Public URL of this orchestrator, as reachable from the end-user's
|
|
42
|
+
# browser. The server bakes it into every /system-prompt response (so the
|
|
43
|
+
# model writes correct links) and returns it to the Open WebUI filter via
|
|
44
|
+
# the X-Public-Base-URL response header (so outlet() decorates with the
|
|
45
|
+
# same URL). This is THE single source of truth for the browser-facing
|
|
46
|
+
# URL — the filter no longer has its own Valve for it.
|
|
47
|
+
- PUBLIC_BASE_URL=${PUBLIC_BASE_URL:-http://computer-use-server:8081}
|
|
48
|
+
- COMMAND_TIMEOUT=${COMMAND_TIMEOUT:-120}
|
|
49
|
+
- SUB_AGENT_TIMEOUT=${SUB_AGENT_TIMEOUT:-3600}
|
|
50
|
+
- SINGLE_USER_MODE=${SINGLE_USER_MODE:-}
|
|
51
|
+
- VISION_API_KEY=${VISION_API_KEY:-}
|
|
52
|
+
- VISION_API_URL=${VISION_API_URL:-}
|
|
53
|
+
- VISION_MODEL=${VISION_MODEL:-}
|
|
54
|
+
- ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN:-}
|
|
55
|
+
- ANTHROPIC_BASE_URL=${ANTHROPIC_BASE_URL:-}
|
|
56
|
+
- ANTHROPIC_MODEL=${ANTHROPIC_MODEL:-}
|
|
57
|
+
- ANTHROPIC_DEFAULT_SONNET_MODEL=${ANTHROPIC_DEFAULT_SONNET_MODEL:-}
|
|
58
|
+
- ANTHROPIC_DEFAULT_OPUS_MODEL=${ANTHROPIC_DEFAULT_OPUS_MODEL:-}
|
|
59
|
+
- ANTHROPIC_DEFAULT_HAIKU_MODEL=${ANTHROPIC_DEFAULT_HAIKU_MODEL:-}
|
|
60
|
+
- CLAUDE_CODE_SUBAGENT_MODEL=${CLAUDE_CODE_SUBAGENT_MODEL:-}
|
|
61
|
+
- CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=${CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS:-}
|
|
62
|
+
- DISABLE_PROMPT_CACHING=${DISABLE_PROMPT_CACHING:-}
|
|
63
|
+
- DISABLE_PROMPT_CACHING_SONNET=${DISABLE_PROMPT_CACHING_SONNET:-}
|
|
64
|
+
- DISABLE_PROMPT_CACHING_OPUS=${DISABLE_PROMPT_CACHING_OPUS:-}
|
|
65
|
+
- DISABLE_PROMPT_CACHING_HAIKU=${DISABLE_PROMPT_CACHING_HAIKU:-}
|
|
66
|
+
restart: unless-stopped
|
|
67
|
+
healthcheck:
|
|
68
|
+
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8081/health')"]
|
|
69
|
+
interval: 30s
|
|
70
|
+
timeout: 10s
|
|
71
|
+
retries: 3
|
|
72
|
+
|
|
73
|
+
# Cleanup cron — removes stopped containers, orphaned volumes, stale data
|
|
74
|
+
cleanup:
|
|
75
|
+
build: ./cron
|
|
76
|
+
volumes:
|
|
77
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
78
|
+
- /tmp/computer-use-data:/tmp/computer-use-data:rw
|
|
79
|
+
environment:
|
|
80
|
+
- CONTAINER_MAX_AGE_HOURS=${CONTAINER_MAX_AGE_HOURS:-24}
|
|
81
|
+
- DATA_MAX_AGE_DAYS=${DATA_MAX_AGE_DAYS:-7}
|
|
82
|
+
restart: unless-stopped
|
|
83
|
+
|
|
84
|
+
# Optional: Skill registry — controls per-user skill access
|
|
85
|
+
# Uncomment to enable. See settings-wrapper/README.md for details.
|
|
86
|
+
# settings-wrapper:
|
|
87
|
+
# build: ./settings-wrapper
|
|
88
|
+
# ports:
|
|
89
|
+
# - "8082:8082"
|
|
90
|
+
# environment:
|
|
91
|
+
# - API_KEY=${MCP_TOKENS_API_KEY:-}
|
|
92
|
+
# restart: unless-stopped
|
|
93
|
+
|
|
94
|
+
volumes:
|
|
95
|
+
computer-use-data:
|
|
96
|
+
skills-cache:
|
package/docs/CLOUD.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Cloud (managed Yambr)
|
|
2
|
+
|
|
3
|
+
This page exists so GitHub visitors know a managed version exists. It is intentionally thin — the canonical cloud reference is **[docs.yambr.com](https://docs.yambr.com)** and the source of truth for keys, budgets and limits is **[app.yambr.com](https://app.yambr.com)**. If you self-host, see [INSTALL.md](INSTALL.md) instead.
|
|
4
|
+
|
|
5
|
+
## The four Yambr services
|
|
6
|
+
|
|
7
|
+
| Service | URL | Role |
|
|
8
|
+
|---------|-----|------|
|
|
9
|
+
| Dashboard | [app.yambr.com](https://app.yambr.com) | Sign in (GitHub / Google), manage keys, spend |
|
|
10
|
+
| MCP endpoint | `https://api.yambr.com/mcp/computer_use` | Public Streamable-HTTP MCP — tools only |
|
|
11
|
+
| Hosted chat | [chat.yambr.com](https://chat.yambr.com) | Open WebUI with Computer Use pre-wired, models included |
|
|
12
|
+
| Artifact host | `https://cu.yambr.com` | Sandbox file/preview URLs |
|
|
13
|
+
|
|
14
|
+
Yambr publishes the MCP tool endpoint; it is **not** an LLM gateway. On `api.yambr.com` you bring your own model provider. On `chat.yambr.com` models are bundled as a free convenience.
|
|
15
|
+
|
|
16
|
+
## Which path?
|
|
17
|
+
|
|
18
|
+
- **Just want to try it?** Open [chat.yambr.com](https://chat.yambr.com), sign in with GitHub or Google.
|
|
19
|
+
- **Want to plug Computer Use into your own agent?** Get a key from [app.yambr.com](https://app.yambr.com), point your MCP client at `https://api.yambr.com/mcp/computer_use` with a `Bearer` header. Per-client configs (Claude Desktop, OpenAI Agents SDK, n8n, LiteLLM, curl) live on [docs.yambr.com](https://docs.yambr.com) under the Integrations section.
|
|
20
|
+
- **Want full control / air-gap / heavy use?** See [INSTALL.md](INSTALL.md).
|
|
21
|
+
|
|
22
|
+
A bare `GET https://api.yambr.com/mcp/computer_use` returns `500` — that's expected, the endpoint requires `POST` with MCP headers. Not a service outage.
|
|
23
|
+
|
|
24
|
+
## See also
|
|
25
|
+
|
|
26
|
+
- [docs.yambr.com/quickstart](https://docs.yambr.com/quickstart) — the three starting paths, with copy-paste snippets
|
|
27
|
+
- [docs.yambr.com/platform/overview](https://docs.yambr.com/platform/overview) — how the four services fit together
|
|
28
|
+
- [docs.yambr.com/platform/api-keys](https://docs.yambr.com/platform/api-keys) — keys, budgets, rotation
|
|
29
|
+
- [MCP.md](MCP.md) — MCP protocol reference (applies to both hosted and self-hosted)
|