@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,23 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
status: draft
|
|
6
|
+
last-reviewed: 2026-06-06
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Features v1 defers, each with a clean abstraction boundary so a later milestone adds it without redesign. Audience: anyone proposing a feature for v1; the ADR path to reconsider is in [PROCESS.md](../PROCESS.md).
|
|
12
|
+
|
|
13
|
+
## Non-goals
|
|
14
|
+
|
|
15
|
+
**Skill registry.** v1 ships zero default skills. The `SkillProvider` abstraction stays `status: tbd` in the component set; skills load from a registry the customer supplies over a stable contract. v1 does not fix the skill metadata schema, the versioning rules, or the discovery protocol — inventing them now locks customers into a shape we have not proved.
|
|
16
|
+
|
|
17
|
+
**Hosted models and the agent loop.** OCU does not host, proxy, or select an LLM, and does not run the loop (multi-turn reasoning, reflection, tool-use selection); that lives in the calling client — a sibling component such as Open WebUI, n8n, or LiteLLM, or any MCP caller. OCU is an MCP server plus a sandbox executor: it terminates tool-call requests and executes them in isolation. A sandbox tool that needs an LLM reaches it as one allow-listed egress endpoint under the Egress trust-edge, broker, and audit path ([03-non-negotiables.md](03-non-negotiables.md)), never through an OCU model abstraction.
|
|
18
|
+
|
|
19
|
+
**Admin web UI.** v1 ships no operator console. Operator functions — session lifecycle, quota, denylist, audit review — run over the CLI (`occ`) and GitOps config. Every UI is new attack surface (CSRF, XSS, broken auth), accessibility burden, and localization cost. The end-user data-plane surface (file upload/download, preview, artifact render, transcript display) is in scope and serves end-user visibility, not operator control ([NFR-SEC-82](02-nfrs.md)). v2 may add a read-only operator console once the CLI is feature-complete and customers ask.
|
|
20
|
+
|
|
21
|
+
**Durable customer-data store.** OCU is an ephemeral workspace: a session's files live on the broker-mounted scope only while the session runs, and the teardown finalizer scrubs them ([NFR-SEC-65](02-nfrs.md), [NFR-SEC-54](02-nfrs.md)). OCU retains no customer file bytes past the session — long-term retention, residency, and erasure of customer data are the customer's own store, reached over the broker backend leg. The one artifact OCU keeps long-term is the audit record of file activity (who/what/when), on the [NFR-COMP-01](02-nfrs.md) floor — the record, never the bytes. Treating OCU as the system of record for customer data inverts this: the object store is a neighbouring customer-provided capability ([03-non-negotiables.md](03-non-negotiables.md)), not an OCU durable tier.
|
|
22
|
+
|
|
23
|
+
**SaaS offered by us.** FSL-1.1-Apache-2.0 forbids offering OCU (or a modified version) on a hosted or embedded basis that competes with a paid version ([05-licensing-posture.md](05-licensing-posture.md)). We ship self-hostable software only; the limitation lifts per-release on the two-year Apache-2.0 conversion.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
status: draft
|
|
6
|
+
last-reviewed: 2026-06-01
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
States the licence OCU ships under, the conversion to Apache-2.0, and the gate every dependency passes before it enters the project. Audience: anyone adding a dependency or reasoning about what a fork may do.
|
|
12
|
+
|
|
13
|
+
## OCU licence: FSL-1.1-Apache-2.0
|
|
14
|
+
|
|
15
|
+
OCU ships under the [Functional Source License, Version 1.1, Apache 2.0 Future License](../../../LICENSE). The grant lets you use, copy, modify, create derivative works, publish, and redistribute the Software. The one limitation: you may not offer the Software (or a modified version) to third parties on a hosted or embedded basis to compete with a paid version of OCU.
|
|
16
|
+
|
|
17
|
+
Each release carries its own clock. On the **second anniversary** of the date a given version is made available, that version is additionally licensed under Apache-2.0; from that date the FSL limitation no longer binds it. The conversion is per-release and irrevocable: a release published 2026-06-01 is Apache-2.0 on 2028-06-01 regardless of what later releases do.
|
|
18
|
+
|
|
19
|
+
The conversion is automatic — no pricing decision and no manual relicensing step. The FSL template carries a license-key anti-tamper clause; OCU ships no license key, so that clause binds nothing here. The change from BUSL-1.1 was a one-time, whole-repo migration ([CHANGELOG](../../../CHANGELOG.md)); releases tagged before it retain BUSL-1.1 terms per the LICENSE published at that tag.
|
|
20
|
+
|
|
21
|
+
## Dependency licence gate
|
|
22
|
+
|
|
23
|
+
Every dependency — build, runtime, or dev — passes both gates below before it enters the project. The procedure for proposing one is in [`PROCESS.md`](../PROCESS.md); this section is the allow/reject rule that procedure enforces.
|
|
24
|
+
|
|
25
|
+
**Licence gate — accept:** Apache-2.0, MIT, BSD-2-Clause, BSD-3-Clause, MPL-2.0, LGPL-2.1 (as a separately-running service), PostgreSQL.
|
|
26
|
+
|
|
27
|
+
**Licence gate — reject:** AGPL (any version), BSL, BUSL (any version that is not a past version of OCU's own licence), SSPL, CC-NC, and any commercial-only or source-unavailable licence.
|
|
28
|
+
|
|
29
|
+
**Supply-chain gate.** A dependency must have at least one of: a published SBOM, a reproducible build, signed releases, or cosign-attested artifacts. A sole-maintainer npm/PyPI package with no provenance is rejected on this gate alone, regardless of licence.
|
|
30
|
+
|
|
31
|
+
When the choice is between a heavier, vendor- or foundation-backed, audited tool and a lighter sole-maintainer one, take the heavier one. OCU targets regulated enterprises; a lightweight-but-undocumented dependency loses the InfoSec review that gates the sale.
|
|
32
|
+
|
|
33
|
+
## Bundled vs not-bundled
|
|
34
|
+
|
|
35
|
+
Each accepted dependency is recorded as bundled or not-bundled when an ADR or component spec adopts it.
|
|
36
|
+
|
|
37
|
+
- **Bundled** — OCU ships the binary, image, or library as part of a release. OCU owns its CVE response, version pinning, vulnerability scanning, and SBOM entry.
|
|
38
|
+
- **Not bundled** — the customer provides it over a standard API (for example an IdP, a secret store, a SIEM, or a customer KMS). OCU documents the integration contract; the customer owns the lifecycle.
|
|
39
|
+
|
|
40
|
+
The Bill of Materials is the table of accepted dependencies with this flag. It is not pre-populated: a row is added when the ADR or component spec that adopts a dependency lands, so the bundled/not-bundled call is made with the rationale that needs it, not in advance.
|
|
41
|
+
|
|
42
|
+
| Dependency | Licence | Bundled | Adopted by |
|
|
43
|
+
|---|---|---|---|
|
|
44
|
+
| runc | Apache-2.0 | bundled | [ADR-0003](../adr/0003-sandbox-runtime-tier-ladder.md) |
|
|
45
|
+
| gVisor (`runsc`) | Apache-2.0 (per-file MIT/BSD) | bundled | [ADR-0003](../adr/0003-sandbox-runtime-tier-ladder.md) |
|
|
46
|
+
| Envoy | Apache-2.0 | bundled | [ADR-0005](../adr/0005-egress-credential-delivery-envoy-sds.md), [ADR-0006](../adr/0006-egress-forward-proxy-substrate.md) |
|
|
47
|
+
|
|
48
|
+
## Rejected dependencies
|
|
49
|
+
|
|
50
|
+
A rejection is first-class: recorded so it is not re-proposed. Each row names the reject reason and the path OCU takes instead. The adopting ADR re-verifies a row's licence fact against the dependency's own LICENSE before it cites the row.
|
|
51
|
+
|
|
52
|
+
| Dependency | Reason | Instead |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| HashiCorp Vault | BUSL — reject as a bundled dependency | OpenBao (MPL-2.0) bundled; Vault permitted only as a customer-provided drop-in |
|
|
55
|
+
| HashiCorp Boundary | BUSL (Community edition) | Customer-provided PAM/access plane; OCU stays a relying party |
|
|
56
|
+
| Teleport | AGPLv3 source + commercial-only Community binaries | Customer-provided access plane; OCU stays a relying party |
|
|
57
|
+
| Infisical (enterprise) | Core is MIT, but SSO/audit features are under a commercial licence | Treat as integrate-only; the audit/SSO features a regulated enterprise requires are behind the commercial gate |
|
|
58
|
+
| MinIO | AGPL community edition | Customer S3-compatible store; Ceph RGW as the reference object store |
|
|
59
|
+
| Zitadel (as primary IdP) | AGPL-3.0 | Keycloak (Apache-2.0) as the reference IdP relying-party target |
|
|
60
|
+
| Redpanda | BSL | NATS JetStream (Apache-2.0) for the event bus |
|
|
61
|
+
| mitmproxy / Squid ssl-bump (as the bump engine) | BSD / GPL-2.0+ — licence is not the blocker; adopting either as the egress bump engine drops the Envoy data plane (allow-list, OCSF audit, `ext_authz`) ADR-0006 placed there | Envoy data plane + a self-hosted SDS minting service for per-SNI leaves ([ADR-0007](../adr/0007-egress-auth-mechanism.md)); mitmproxy (BSD) recorded only as the fallback engine where the Envoy data plane is not needed |
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
status: draft
|
|
6
|
+
last-reviewed: 2026-06-02
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
When a feature limitation is an acceptable minimal-shelf trade-off versus a silent security gap that must be gated or labelled. Audience: architects reviewing a component spec or feature proposal for the solo / minimal-shelf tier.
|
|
12
|
+
|
|
13
|
+
## Shelf split
|
|
14
|
+
|
|
15
|
+
Both tiers ship the same six containers ([05-c4-container.md](../05-c4-container.md) §5); only the substrate and credential management differ.
|
|
16
|
+
|
|
17
|
+
- **Minimal shelf** — single operator, self-signed per-deployment CA, file-system audit, host-rooted operator credential. The one-click `docker-compose up` path: no external IdP, no cloud credential, no pre-staged key.
|
|
18
|
+
- **Full shelf** — customer IdP-asserted operator identity, customer-PKI-rooted signers, external SIEM sink, dynamic SDS credential minting.
|
|
19
|
+
|
|
20
|
+
The runtime tier (`runc` / gVisor / microVM) is selected orthogonally by `workload_trust_profile`, not by the shelf (§"Tier versus shelf").
|
|
21
|
+
|
|
22
|
+
The feature set is the same on both; every v1 GA feature must be demonstrable on the minimal shelf with defaults in place.
|
|
23
|
+
|
|
24
|
+
## Acceptable limitation
|
|
25
|
+
|
|
26
|
+
A limitation is acceptable only if it meets all three:
|
|
27
|
+
|
|
28
|
+
1. **The minimal-shelf default does not block the primary workflow.** A solo developer or a hardening pilot builds agents, runs sessions, calls tools, and reads results with no configuration beyond `docker-compose up`.
|
|
29
|
+
2. **The limitation is discoverable in config and docs.** Enabling an optional feature (external SIEM, credential rotation, DLP, a higher runtime tier) states what the minimal shelf trades away — a config comment or a startup log line, not silence.
|
|
30
|
+
3. **No threat-model invariant erodes without explicit operator choice.** The solo path keeps the core locked in code: the guest holds no long-lived upstream secret ([NFR-SEC-23](02-nfrs.md)), audit events are hash-linked ([NFR-SEC-03](02-nfrs.md)), the kill-switch stays operative on the single-instance shelf ([NFR-SEC-01](02-nfrs.md), [NFR-SEC-55](02-nfrs.md)), and session limits hold — idle ≤15 min ([NFR-SEC-40](02-nfrs.md)), absolute ≤12 h ([NFR-SEC-41](02-nfrs.md)).
|
|
31
|
+
|
|
32
|
+
## Unacceptable limitation
|
|
33
|
+
|
|
34
|
+
Gate to full shelf, or label it a security gap, if:
|
|
35
|
+
|
|
36
|
+
- **A core invariant degrades silently** — e.g. audit not hash-linked on solo (breaks NFR-SEC-03), or the guest reaching an upstream secret by default (breaks NFR-SEC-23).
|
|
37
|
+
- **The primary workflow is blocked with no working alternative** — e.g. no way to authenticate an operator, or sessions that time out with no adjustable window.
|
|
38
|
+
- **It is "not built yet", not an architectural choice** — unfinished work belongs in a backlog, not behind a starter-mode label.
|
|
39
|
+
|
|
40
|
+
| Verdict | Example |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Acceptable | The Storage broker on the minimal shelf holds a host-rooted backend key instead of per-session scoped credentials ([NFR-SEC-25](02-nfrs.md)); the full shelf brings scoped credentials, the trade is documented, and the sole path to it is the full shelf. |
|
|
43
|
+
| Acceptable | The Egress trust-edge on the minimal shelf auto-generates a per-deployment CA instead of integrating a customer KMS ([ADR-0007](../adr/0007-egress-auth-mechanism.md)); a full-shelf deployer brings their PKI. |
|
|
44
|
+
| Not acceptable | Audit not written on the minimal shelf because no external SIEM is configured. Audit is not optional; with the sink off, events still write to a local hash-chained store (NFR-SEC-03). |
|
|
45
|
+
| Not acceptable | Session idle timeout hard-coded with no adjustable window, breaking the workflow. A knob defaulting conservatively is fine; no knob is not (NFR-SEC-40). |
|
|
46
|
+
|
|
47
|
+
## Tier versus shelf
|
|
48
|
+
|
|
49
|
+
The `workload_trust_profile` selects the sandbox runtime tier ([ADR-0003](../adr/0003-sandbox-runtime-tier-ladder.md), [NFR-SEC-38](02-nfrs.md)); the shelf is orthogonal. Both shelves carry every runtime tier where the host supports it, so a solo deployer can pick a hardened tier without leaving the minimal shelf. The shelf split is about how a credential reaches a component and the operational burden (IdP, SIEM), not about the guest isolation boundary.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
status: draft
|
|
6
|
+
last-reviewed: 2026-06-02
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
How architectural decisions are recorded, approved, and superseded. Audience: reviewers deciding what merits a decision record, and auditors verifying decision lineage.
|
|
12
|
+
|
|
13
|
+
## Decision routing
|
|
14
|
+
|
|
15
|
+
Not every choice is an ADR. The decision tree in [`CLAUDE.md`](../../../CLAUDE.md) §"Architecture content routing" is the canonical router; the threshold for an ADR is step 3 — a load-bearing decision that is hard to reverse, crosses ≥2 components, or closes a debated option. Below that threshold, content lands in its NFR scenario, its component spec, the glossary, or an `## Open questions` entry with a tracking issue. A disagreement about the threshold itself is settled by an ADR that cites the routing rule it changes, not by editing this section.
|
|
16
|
+
|
|
17
|
+
## ADR lifecycle
|
|
18
|
+
|
|
19
|
+
An ADR moves through four states, recorded in its `status` front-matter.
|
|
20
|
+
|
|
21
|
+
| State | Criteria | Next |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| **proposed** | PR open; options and rationale under review; front-matter complete, compliance- and license-impact populated | merge on consensus or owner decision → accepted |
|
|
24
|
+
| **accepted** | PR merged; the decision is locked and every artifact citing it via `adr:` is production-ready | superseded, deprecated, or stays accepted |
|
|
25
|
+
| **superseded** | a later ADR closes a question this one opened; the two cross-link (`superseded-by:` here, `supersedes:` there); the decision still holds for releases made under it | final |
|
|
26
|
+
| **deprecated** | the decision no longer applies and has no direct successor (rare — a constraint changed and nothing replaces it) | final |
|
|
27
|
+
|
|
28
|
+
No other states. There is no pre-PR "draft" for ADRs — the tracking issue (PROCESS.md step 1) is where discussion happens before the file exists. There is no "withdrawn": close the PR (the issue stays open for later), or merge with `status: deprecated` to record that the idea was evaluated and set aside.
|
|
29
|
+
|
|
30
|
+
## Approval
|
|
31
|
+
|
|
32
|
+
An ADR is approved by consensus or by named decision-maker, not by vote.
|
|
33
|
+
|
|
34
|
+
- **Consensus** — the `owner` and all CODEOWNERS reviewers approve the PR; options are fairly evaluated and the consequences are acceptable.
|
|
35
|
+
- **Decision-maker** — if good-faith discussion does not converge, the `owner` field names who decides; that approval is recorded in the PR description and the merge commit for the audit trail.
|
|
36
|
+
|
|
37
|
+
The `owner` front-matter always names the decision-maker. The default for architecture ADRs is `@Wide-Moat/architects`; a specific handle is named when subject-matter authority is required.
|
|
38
|
+
|
|
39
|
+
## Compliance lineage
|
|
40
|
+
|
|
41
|
+
Two front-matter fields carry the regulatory audit trail when a decision touches compliance:
|
|
42
|
+
|
|
43
|
+
- **`compliance-impact`** — the controls the decision touches, in the citation form the canon uses (`DORA-Art.28`, `NYDFS-500.15`, `SOC2-CC6.1`, `EU-AI-Act-Art.15`). Empty when not applicable; an empty field is not a non-compliance mark.
|
|
44
|
+
- **`threat-mitigation-link`** — a pointer to the threat-model section or component spec showing how the decision mitigates a named threat.
|
|
45
|
+
|
|
46
|
+
These let a compliance owner query the decision log by control and verify coverage. The decision audit trail they reconstruct is what DORA Art. 9 and NYDFS §500.15 require of the change-management record.
|
|
47
|
+
|
|
48
|
+
## Re-evaluation
|
|
49
|
+
|
|
50
|
+
An accepted ADR is not edited after merge. It is reconsidered when a constraint changes (a dependency is sunset, a regulatory requirement shifts), or a previously-unavailable alternative emerges, or a stakeholder raises a concern later — in each case a follow-up ADR with `supersedes: NNNN` revisits it and either confirms or overrides. No time-based auto-review; the release-readiness gate ([PROCESS.md](../PROCESS.md)) checks that the decision log is complete and no compliance- or buyer-facing ADR has drifted a major release without a re-evaluation note.
|
|
51
|
+
|
|
52
|
+
## Citation discipline
|
|
53
|
+
|
|
54
|
+
Every artifact that depends on an ADR records the link, and a supersession cascades through those links:
|
|
55
|
+
|
|
56
|
+
- **Component specs** carry an `adr:` front-matter list (e.g. the Egress trust-edge spec cites `[0005, 0006, 0007]`).
|
|
57
|
+
- **NFR rows** in [`02-nfrs.md`](02-nfrs.md) carry a `Source` column pointing to the deciding ADR or MANIFESTO section.
|
|
58
|
+
- **Diagrams** record the driving ADR in the commit that changes them, not in the diagram body.
|
|
59
|
+
|
|
60
|
+
When a new ADR supersedes an old one, the same PR updates every `adr:` field that cited the old number to cite the new — a cleanup commit, not a fresh decision.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
status: draft
|
|
6
|
+
last-reviewed: 2026-05-30
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Architectural primitives surfaced during research that Wide-Moat will need. Each entry drains into a concrete NFR (§02), principle (§03), or component spec — or escalates to a tracked GitHub issue. See [PROCESS.md](./PROCESS.md) "Capturing primitives discovered during research".
|
|
12
|
+
|
|
13
|
+
## Active primitives
|
|
14
|
+
|
|
15
|
+
- **Evidence-as-code bundle** — compliance artifacts (SBOM, SLSA L3 provenance, DORA RoI rows, EU AI Act Annex III conformity checklist, NYDFS contractual-clause completeness, audit-event schema) generated by CI on every release, not assembled under audit pressure — surfaced in `widemoat-thesis-advisor.md`; lands in §02 (NFR) + §03 (principle) + release-pipeline ADR.
|
|
16
|
+
- **DORA Art. 28 RoI field-level traceability in BoM** — every dependency in `manifesto/05-licensing-posture.md` BoM table carries 7 required RoI fields: name, country, sub-contracting depth, function criticality, exit strategy, audit rights, data-residency. Reject-list captures dependencies that cannot supply these fields — surfaced in `reference_2026_regulator_triad`; lands in §05 (BoM rule).
|
|
17
|
+
- **EU AI Act Annex III conformity checklist in release pipeline** — each GA release tags the Annex III risk categories it is configured for and blocks release if controls (logging, human oversight, accuracy metrics, post-market monitoring hooks) are missing — surfaced in `widemoat-thesis-advisor.md`; lands in release-pipeline ADR + §02 (NFR).
|
|
18
|
+
- **Air-gap installer as CI artifact on every release** — tested in build; no phone-home — surfaced in legacy research; lands in deployment component spec + §03 (non-negotiable).
|
|
19
|
+
- **`SkillProvider` abstraction (TBD)** — v1 ships zero default skills bundled; the contract stays TBD until proved; customers mount their own skill packs — surfaced in `project_widemoat_positioning`; lands in §04 (non-goal: skill registry deferred) + skill-host component spec stub.
|
|
20
|
+
- **FSL `LICENSE-ADDITIONAL-PERMISSIONS.md` instrument** — published at repo root, irrevocable, 7 clauses (affiliates via 50% control test, JVs, outsourced operators, single-tenant managed, internal white-label, Competing Use reaffirmed, Apache-2.0 conversion) — surfaced in `advisor-fsl-internal-use.md`; lands in repo root + §05 (licensing-posture).
|
|
21
|
+
|
|
22
|
+
## Promotion rules
|
|
23
|
+
|
|
24
|
+
A primitive leaves this backlog when it appears either as:
|
|
25
|
+
|
|
26
|
+
- A measurable target in `manifesto/02-nfrs.md` (e.g. "kill switch ≤30s wall-clock SLA, measured by …").
|
|
27
|
+
- A principle + anti-example in `manifesto/03-non-negotiables.md`.
|
|
28
|
+
- A component spec section in `components/<NN>-<name>.md`.
|
|
29
|
+
- A BoM row in `manifesto/05-licensing-posture.md`.
|
|
30
|
+
- A tracked GitHub issue when scope exceeds one line.
|
|
31
|
+
|
|
32
|
+
When promoted, delete the entry from this file in the same PR that lands the destination artifact. The backlog shrinks monotonically.
|
|
33
|
+
|
|
34
|
+
## Recently drained (2026-05-24)
|
|
35
|
+
|
|
36
|
+
Removed because the primitive landed in §02 with a measurable target:
|
|
37
|
+
|
|
38
|
+
- Kill switch ≤30s → NFR-SEC-01.
|
|
39
|
+
- Per-session replay bundle → NFR-SEC-06.
|
|
40
|
+
- Tamper-evident audit log → NFR-SEC-03.
|
|
41
|
+
- WORM audit retention 7y/10y → NFR-COMP-01.
|
|
42
|
+
- BYOK / HYOK via PKCS#11 + KMIP → NFR-SEC-04 + NFR-FLEX-04.
|
|
43
|
+
- Identity = SPIFFE workload + OIDC + SCIM → NFR-SEC-09 + NFR-FLEX-03.
|
|
44
|
+
- Single forward-proxy egress; the egress-wide-bump rung attaches the upstream credential on a per-deployment CA (ADR-0007) → NFR-SEC-05.
|
|
45
|
+
- Egress allow-list (deny-by-default; any destination type) → NFR-SEC-08.
|
|
46
|
+
|
|
47
|
+
## Removed as out-of-scope (2026-05-30)
|
|
48
|
+
|
|
49
|
+
Dropped because the primitive is not OCU's concern, not because it landed:
|
|
50
|
+
|
|
51
|
+
- `ModelProvider` abstraction → the agent loop and model choice live in the calling client (a Wide-Moat sibling component), not in OCU; an LLM is reached as one allow-listed egress endpoint. OCU hosts, selects, and proxies no model.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 520" font-family="Inter, -apple-system, system-ui, sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.box { rx: 10; stroke-width: 1.5; }
|
|
5
|
+
.label { font-size: 13px; font-weight: 600; fill: #fff; }
|
|
6
|
+
.sublabel { font-size: 10px; fill: rgba(255,255,255,0.8); }
|
|
7
|
+
.item { font-size: 10.5px; fill: #374151; }
|
|
8
|
+
.arrow { stroke: #94a3b8; stroke-width: 1.5; fill: none; marker-end: url(#arrowhead); }
|
|
9
|
+
.arrow-label { font-size: 9px; fill: #6b7280; }
|
|
10
|
+
.port { font-size: 9px; font-weight: 600; fill: #6b7280; }
|
|
11
|
+
</style>
|
|
12
|
+
<marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
|
|
13
|
+
<path d="M0,0 L8,3 L0,6" fill="#94a3b8"/>
|
|
14
|
+
</marker>
|
|
15
|
+
</defs>
|
|
16
|
+
|
|
17
|
+
<!-- Background -->
|
|
18
|
+
<rect width="900" height="520" rx="12" fill="#fafbfc"/>
|
|
19
|
+
|
|
20
|
+
<!-- Client Layer -->
|
|
21
|
+
<rect x="250" y="15" width="400" height="55" class="box" fill="#f1f5f9" stroke="#cbd5e1"/>
|
|
22
|
+
<text x="450" y="38" text-anchor="middle" font-size="12" font-weight="600" fill="#475569">Any MCP Client</text>
|
|
23
|
+
<text x="450" y="54" text-anchor="middle" font-size="10" fill="#64748b">Open WebUI · Claude Desktop · LiteLLM · n8n · custom</text>
|
|
24
|
+
|
|
25
|
+
<!-- Arrow: Client → Server -->
|
|
26
|
+
<path d="M450,70 L450,105" class="arrow"/>
|
|
27
|
+
<text x="460" y="92" class="arrow-label">MCP over HTTP</text>
|
|
28
|
+
|
|
29
|
+
<!-- Computer Use Server -->
|
|
30
|
+
<rect x="160" y="105" width="580" height="155" class="box" fill="#1e40af" stroke="#1e3a8a"/>
|
|
31
|
+
<text x="450" y="128" text-anchor="middle" class="label">Computer Use Server</text>
|
|
32
|
+
<text x="450" y="142" text-anchor="middle" class="sublabel">MCP Orchestrator · FastAPI · :8081</text>
|
|
33
|
+
|
|
34
|
+
<!-- Server modules -->
|
|
35
|
+
<rect x="180" y="155" width="120" height="40" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
36
|
+
<text x="240" y="172" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">MCP Tools</text>
|
|
37
|
+
<text x="240" y="185" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">bash · view · create</text>
|
|
38
|
+
|
|
39
|
+
<rect x="315" y="155" width="120" height="40" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
40
|
+
<text x="375" y="172" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">File Server</text>
|
|
41
|
+
<text x="375" y="185" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">upload · preview · zip</text>
|
|
42
|
+
|
|
43
|
+
<rect x="450" y="155" width="120" height="40" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
44
|
+
<text x="510" y="172" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">CDP Proxy</text>
|
|
45
|
+
<text x="510" y="185" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">browser streaming</text>
|
|
46
|
+
|
|
47
|
+
<rect x="585" y="155" width="140" height="40" rx="6" fill="rgba(255,255,255,0.15)" stroke="rgba(255,255,255,0.3)"/>
|
|
48
|
+
<text x="655" y="172" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Terminal Proxy</text>
|
|
49
|
+
<text x="655" y="185" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">ttyd · Claude Code</text>
|
|
50
|
+
|
|
51
|
+
<!-- Server bottom row -->
|
|
52
|
+
<rect x="180" y="205" width="170" height="35" rx="6" fill="rgba(255,255,255,0.1)" stroke="rgba(255,255,255,0.2)"/>
|
|
53
|
+
<text x="265" y="222" text-anchor="middle" font-size="10" font-weight="500" fill="rgba(255,255,255,0.9)">Skill Manager</text>
|
|
54
|
+
<text x="265" y="233" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.6)">13 public + user skills</text>
|
|
55
|
+
|
|
56
|
+
<rect x="365" y="205" width="170" height="35" rx="6" fill="rgba(255,255,255,0.1)" stroke="rgba(255,255,255,0.2)"/>
|
|
57
|
+
<text x="450" y="222" text-anchor="middle" font-size="10" font-weight="500" fill="rgba(255,255,255,0.9)">Docker Manager</text>
|
|
58
|
+
<text x="450" y="233" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.6)">create · stop · cleanup</text>
|
|
59
|
+
|
|
60
|
+
<rect x="550" y="205" width="175" height="35" rx="6" fill="rgba(255,255,255,0.1)" stroke="rgba(255,255,255,0.2)"/>
|
|
61
|
+
<text x="637" y="222" text-anchor="middle" font-size="10" font-weight="500" fill="rgba(255,255,255,0.9)">System Prompt Builder</text>
|
|
62
|
+
<text x="637" y="233" text-anchor="middle" font-size="8" fill="rgba(255,255,255,0.6)">dynamic skills XML</text>
|
|
63
|
+
|
|
64
|
+
<!-- Arrow: Server → Container -->
|
|
65
|
+
<path d="M450,260 L450,295" class="arrow"/>
|
|
66
|
+
<text x="460" y="282" class="arrow-label">Docker Socket</text>
|
|
67
|
+
|
|
68
|
+
<!-- Sandbox Container -->
|
|
69
|
+
<rect x="60" y="295" width="780" height="200" class="box" fill="#0f766e" stroke="#0d9488"/>
|
|
70
|
+
<text x="450" y="318" text-anchor="middle" class="label">Sandbox Container (one per chat)</text>
|
|
71
|
+
<text x="450" y="332" text-anchor="middle" class="sublabel">Ubuntu 24.04 · Python 3.12 · Node.js 22 · Java 21</text>
|
|
72
|
+
|
|
73
|
+
<!-- Container features grid -->
|
|
74
|
+
<!-- Row 1 -->
|
|
75
|
+
<rect x="80" y="345" width="145" height="55" rx="6" fill="rgba(255,255,255,0.12)" stroke="rgba(255,255,255,0.25)"/>
|
|
76
|
+
<text x="152" y="365" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Documents</text>
|
|
77
|
+
<text x="152" y="378" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">LibreOffice · Pandoc</text>
|
|
78
|
+
<text x="152" y="390" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">docx · pptx · xlsx · pdf</text>
|
|
79
|
+
|
|
80
|
+
<rect x="240" y="345" width="145" height="55" rx="6" fill="rgba(255,255,255,0.12)" stroke="rgba(255,255,255,0.25)"/>
|
|
81
|
+
<text x="312" y="365" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Browser</text>
|
|
82
|
+
<text x="312" y="378" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">Chromium + Playwright</text>
|
|
83
|
+
<text x="312" y="390" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">CDP :9222 live stream</text>
|
|
84
|
+
|
|
85
|
+
<rect x="400" y="345" width="145" height="55" rx="6" fill="rgba(255,255,255,0.12)" stroke="rgba(255,255,255,0.25)"/>
|
|
86
|
+
<text x="472" y="365" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Claude Code</text>
|
|
87
|
+
<text x="472" y="378" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">Sub-agent · TTY · MCP</text>
|
|
88
|
+
<text x="472" y="390" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">Autonomous execution</text>
|
|
89
|
+
|
|
90
|
+
<rect x="560" y="345" width="135" height="55" rx="6" fill="rgba(255,255,255,0.12)" stroke="rgba(255,255,255,0.25)"/>
|
|
91
|
+
<text x="627" y="365" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Media</text>
|
|
92
|
+
<text x="627" y="378" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">FFmpeg · ImageMagick</text>
|
|
93
|
+
<text x="627" y="390" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">Tesseract OCR</text>
|
|
94
|
+
|
|
95
|
+
<rect x="710" y="345" width="115" height="55" rx="6" fill="rgba(255,255,255,0.12)" stroke="rgba(255,255,255,0.25)"/>
|
|
96
|
+
<text x="767" y="365" text-anchor="middle" font-size="10" font-weight="600" fill="#fff">Dev Tools</text>
|
|
97
|
+
<text x="767" y="378" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">Git · glab · Bun</text>
|
|
98
|
+
<text x="767" y="390" text-anchor="middle" font-size="8.5" fill="rgba(255,255,255,0.7)">TypeScript · Mermaid</text>
|
|
99
|
+
|
|
100
|
+
<!-- Row 2: Mounts -->
|
|
101
|
+
<text x="80" y="425" font-size="9" font-weight="600" fill="rgba(255,255,255,0.9)">Mounts:</text>
|
|
102
|
+
<text x="135" y="425" font-size="9" fill="rgba(255,255,255,0.65)">/mnt/skills (read-only) · /mnt/user-data/uploads (read-only) · /mnt/user-data/outputs (read-write → served via HTTP)</text>
|
|
103
|
+
|
|
104
|
+
<!-- Row 3: Features -->
|
|
105
|
+
<text x="80" y="445" font-size="9" font-weight="600" fill="rgba(255,255,255,0.9)">Limits:</text>
|
|
106
|
+
<text x="125" y="445" font-size="9" fill="rgba(255,255,255,0.65)">2 GB RAM · 1 CPU · idle timeout auto-shutdown · network access enabled</text>
|
|
107
|
+
|
|
108
|
+
<!-- Row 4 -->
|
|
109
|
+
<text x="80" y="465" font-size="9" font-weight="600" fill="rgba(255,255,255,0.9)">Skills:</text>
|
|
110
|
+
<text x="122" y="465" font-size="9" fill="rgba(255,255,255,0.65)">docx · pdf · pptx · xlsx · playwright-cli · sub-agent · gitlab-explorer · describe-image · frontend-design · ...</text>
|
|
111
|
+
|
|
112
|
+
<text x="80" y="485" font-size="9" font-weight="600" fill="rgba(255,255,255,0.9)">Ports:</text>
|
|
113
|
+
<text x="120" y="485" font-size="9" fill="rgba(255,255,255,0.65)">9222 (CDP browser) · 7681 (ttyd terminal) — proxied through server, not exposed directly</text>
|
|
114
|
+
|
|
115
|
+
<!-- Footer -->
|
|
116
|
+
<text x="450" y="512" text-anchor="middle" font-size="10" fill="#9ca3af">open-computer-use · github.com/Yambr/open-computer-use</text>
|
|
117
|
+
</svg>
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Claude Code Gateway Configuration
|
|
5
|
+
|
|
6
|
+
Every sandbox container spawned by Open Computer Use runs the Claude Code CLI
|
|
7
|
+
as a sub-agent (via the `sub_agent` MCP tool). Operators choose where that
|
|
8
|
+
CLI sends its API traffic by setting a handful of host-side environment
|
|
9
|
+
variables before `docker compose up`. Three paths are supported; each is
|
|
10
|
+
additive - set only what your deployment needs.
|
|
11
|
+
|
|
12
|
+
## Supported paths at a glance
|
|
13
|
+
|
|
14
|
+
| Path | Operator sets on host | Claude Code inside sandbox |
|
|
15
|
+
|------|------------------------|----------------------------|
|
|
16
|
+
| **A - Zero-config** | Nothing | Shows the native `/login` OAuth flow in the terminal |
|
|
17
|
+
| **B - Public Anthropic** | `ANTHROPIC_AUTH_TOKEN` | Talks to `https://api.anthropic.com` with the supplied token |
|
|
18
|
+
| **C - Custom gateway** | `ANTHROPIC_AUTH_TOKEN` + `ANTHROPIC_BASE_URL` + optional compatibility flags | Talks to the gateway (LiteLLM / Azure / Bedrock) with the gateway-scoped token |
|
|
19
|
+
|
|
20
|
+
## Path A - Zero-config (stock Claude Code /login)
|
|
21
|
+
|
|
22
|
+
Leave every `ANTHROPIC_*` and `CLAUDE_CODE_*` variable unset on the host.
|
|
23
|
+
`docker compose up` starts the orchestrator with no auth env vars in its
|
|
24
|
+
`Env`. When the user triggers `sub_agent` from Open WebUI, Claude Code
|
|
25
|
+
launches inside the sandbox and prompts for OAuth login in the ttyd
|
|
26
|
+
terminal - the same experience as running `claude` on a fresh laptop.
|
|
27
|
+
|
|
28
|
+
Nothing else to configure. This is the default and will keep working even
|
|
29
|
+
if you never touch this file.
|
|
30
|
+
|
|
31
|
+
## Path B - Public Anthropic with your own key
|
|
32
|
+
|
|
33
|
+
Add one line to `.env`:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
ANTHROPIC_AUTH_TOKEN=sk-EXAMPLE-replace-with-your-anthropic-key
|
|
37
|
+
# ANTHROPIC_BASE_URL defaults to https://api.anthropic.com when unset
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Restart the orchestrator (`docker compose up -d computer-use-server`).
|
|
41
|
+
Every sandbox container created after that will receive the token, and
|
|
42
|
+
Claude Code will talk straight to Anthropic's public API with no login
|
|
43
|
+
prompt.
|
|
44
|
+
|
|
45
|
+
This is the simplest paid path. The token is scoped to your Anthropic
|
|
46
|
+
account; no gateway sits in between. See
|
|
47
|
+
<https://code.claude.com/docs/en/env-vars> for the canonical variable
|
|
48
|
+
reference.
|
|
49
|
+
|
|
50
|
+
## Path C - Custom gateway (LiteLLM, Azure, Bedrock)
|
|
51
|
+
|
|
52
|
+
Point Claude Code at a gateway with a worked LiteLLM recipe:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
ANTHROPIC_AUTH_TOKEN=sk-EXAMPLE-litellm-master-key
|
|
56
|
+
ANTHROPIC_BASE_URL=https://litellm.internal/anthropic
|
|
57
|
+
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
|
|
58
|
+
DISABLE_PROMPT_CACHING=1
|
|
59
|
+
ANTHROPIC_DEFAULT_SONNET_MODEL=anthropic/claude-sonnet-4-6
|
|
60
|
+
ANTHROPIC_DEFAULT_OPUS_MODEL=anthropic/claude-opus-4-6
|
|
61
|
+
ANTHROPIC_DEFAULT_HAIKU_MODEL=anthropic/claude-haiku-4-5
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
What each variable does:
|
|
65
|
+
|
|
66
|
+
| Variable | Purpose |
|
|
67
|
+
|----------|---------|
|
|
68
|
+
| `ANTHROPIC_AUTH_TOKEN` | Gateway master key (LiteLLM `master_key`, Azure API key, etc.) |
|
|
69
|
+
| `ANTHROPIC_BASE_URL` | Gateway endpoint that speaks the Anthropic HTTP API shape |
|
|
70
|
+
| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Set to `1` when the gateway does not forward Anthropic's beta headers |
|
|
71
|
+
| `DISABLE_PROMPT_CACHING` | Set to `1` when the gateway does not support `cache_control` blocks |
|
|
72
|
+
| `ANTHROPIC_DEFAULT_*_MODEL` | Override the model alias for `sub_agent("sonnet"/"opus"/"haiku")` requests |
|
|
73
|
+
|
|
74
|
+
The full LiteLLM recipe, including which settings are mandatory for which
|
|
75
|
+
backend, is at <https://code.claude.com/docs/en/llm-gateway>.
|
|
76
|
+
|
|
77
|
+
### Azure / Bedrock via LiteLLM
|
|
78
|
+
|
|
79
|
+
Claude Code does not speak Azure OpenAI or AWS Bedrock natively, but it
|
|
80
|
+
speaks the Anthropic API shape - and LiteLLM translates. Stand up a LiteLLM
|
|
81
|
+
proxy, register the Azure or Bedrock deployments there, and point Claude
|
|
82
|
+
Code at LiteLLM. Typical model-ID overrides look like
|
|
83
|
+
`azure/my-sonnet-deployment` or
|
|
84
|
+
`bedrock/anthropic.claude-sonnet-4-20250514-v1:0`; put them in the
|
|
85
|
+
`ANTHROPIC_DEFAULT_*_MODEL` vars above so every `sub_agent` call
|
|
86
|
+
automatically routes to the right deployment.
|
|
87
|
+
|
|
88
|
+
## Full variable reference
|
|
89
|
+
|
|
90
|
+
| Variable | Type | Default | Purpose | Example (placeholder) |
|
|
91
|
+
|----------|------|---------|---------|-----------------------|
|
|
92
|
+
| `ANTHROPIC_AUTH_TOKEN` | secret | unset | Bearer token for Anthropic / gateway | `sk-EXAMPLE-gateway-key` |
|
|
93
|
+
| `ANTHROPIC_BASE_URL` | URL | `https://api.anthropic.com` when `ANTHROPIC_AUTH_TOKEN` is set, otherwise unset | Where Claude Code sends requests | `https://litellm.internal/anthropic` |
|
|
94
|
+
| `ANTHROPIC_MODEL` | string | unset | Global default model for Claude Code | `anthropic/claude-sonnet-4-6` |
|
|
95
|
+
| `ANTHROPIC_DEFAULT_SONNET_MODEL` | string | unset | Override for `sub_agent("sonnet")` | `azure/my-sonnet-deployment` |
|
|
96
|
+
| `ANTHROPIC_DEFAULT_OPUS_MODEL` | string | unset | Override for `sub_agent("opus")` | `anthropic/claude-opus-4-6` |
|
|
97
|
+
| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | string | unset | Override for `sub_agent("haiku")` | `anthropic/claude-haiku-4-5` |
|
|
98
|
+
| `CLAUDE_CODE_SUBAGENT_MODEL` | string | unset | Model for Claude Code's internal sub-agents | `anthropic/claude-haiku-4-5` |
|
|
99
|
+
| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | flag | unset | Strip beta headers on outgoing requests | `1` |
|
|
100
|
+
| `DISABLE_PROMPT_CACHING` | flag | unset | Disable `cache_control` globally | `1` |
|
|
101
|
+
| `DISABLE_PROMPT_CACHING_SONNET` | flag | unset | Disable prompt caching for Sonnet only | `1` |
|
|
102
|
+
| `DISABLE_PROMPT_CACHING_OPUS` | flag | unset | Disable prompt caching for Opus only | `1` |
|
|
103
|
+
| `DISABLE_PROMPT_CACHING_HAIKU` | flag | unset | Disable prompt caching for Haiku only | `1` |
|
|
104
|
+
|
|
105
|
+
All of these are official Claude Code environment variables - see
|
|
106
|
+
<https://code.claude.com/docs/en/env-vars> for the upstream reference.
|
|
107
|
+
Open Computer Use passes them through unchanged when (and only when)
|
|
108
|
+
the operator sets them on the host.
|
|
109
|
+
|
|
110
|
+
## Verifying your gateway setup
|
|
111
|
+
|
|
112
|
+
1. Confirm the variables are in your `.env`:
|
|
113
|
+
```bash
|
|
114
|
+
grep -E '^(ANTHROPIC|CLAUDE_CODE|DISABLE_PROMPT_CACHING)' .env
|
|
115
|
+
```
|
|
116
|
+
2. Recreate the orchestrator container so it picks up the new env:
|
|
117
|
+
```bash
|
|
118
|
+
docker compose up -d computer-use-server
|
|
119
|
+
```
|
|
120
|
+
3. Confirm the orchestrator itself received the vars:
|
|
121
|
+
```bash
|
|
122
|
+
docker inspect computer-use-server --format '{{range .Config.Env}}{{println .}}{{end}}' | grep -E '^(ANTHROPIC|CLAUDE_CODE|DISABLE_PROMPT_CACHING)'
|
|
123
|
+
```
|
|
124
|
+
4. Trigger a `sub_agent` call from the Computer Use tool inside Open
|
|
125
|
+
WebUI (any short task - "list files in /tmp" is enough).
|
|
126
|
+
5. Confirm the sandbox container received the expected subset:
|
|
127
|
+
```bash
|
|
128
|
+
docker exec owui-chat-<chatid> env | grep -E '^(ANTHROPIC|CLAUDE_CODE|DISABLE_PROMPT_CACHING)'
|
|
129
|
+
```
|
|
130
|
+
6. On Paths B and C the sub-agent should stream output without showing a
|
|
131
|
+
`/login` prompt. If it still prompts, go to Troubleshooting.
|
|
132
|
+
|
|
133
|
+
## Troubleshooting
|
|
134
|
+
|
|
135
|
+
### "The sub-agent keeps asking me to `/login` even though I set `ANTHROPIC_AUTH_TOKEN`."
|
|
136
|
+
|
|
137
|
+
Two checks, in order:
|
|
138
|
+
|
|
139
|
+
1. Confirm the orchestrator container actually received the env variable
|
|
140
|
+
via step 3 of the verification checklist. If it is missing, make sure
|
|
141
|
+
`ANTHROPIC_AUTH_TOKEN` is declared under
|
|
142
|
+
`services.computer-use-server.environment:` in `docker-compose.yml`
|
|
143
|
+
(it is, on current `main`) and that you recreated the container after
|
|
144
|
+
editing `.env`. `docker compose up -d` does not pick up `.env` changes
|
|
145
|
+
on already-running services without `--force-recreate` or `down`/`up`.
|
|
146
|
+
2. Confirm you are on a version with the Phase 3 `context_vars.py` fix
|
|
147
|
+
(<https://github.com/Wide-Moat/open-computer-use/issues/40>). Earlier
|
|
148
|
+
versions had a ContextVar default of `"https://api.anthropic.com/"`
|
|
149
|
+
that short-circuited the `or os.environ["ANTHROPIC_BASE_URL"]` fallback
|
|
150
|
+
in `docker_manager`. Symptom: the sandbox received
|
|
151
|
+
`ANTHROPIC_BASE_URL=https://api.anthropic.com/` (with a stray trailing
|
|
152
|
+
slash) but `ANTHROPIC_AUTH_TOKEN` was not injected.
|
|
153
|
+
|
|
154
|
+
### "LiteLLM returns 400 about prompt caching."
|
|
155
|
+
|
|
156
|
+
LiteLLM typically does not forward Anthropic's `cache_control` blocks to
|
|
157
|
+
the upstream model; Claude Code sends them by default. Set
|
|
158
|
+
`DISABLE_PROMPT_CACHING=1` on the host. If you route different model
|
|
159
|
+
families through different upstreams, use the per-family flags
|
|
160
|
+
(`DISABLE_PROMPT_CACHING_SONNET`, `_OPUS`, `_HAIKU`) instead of the
|
|
161
|
+
global one.
|
|
162
|
+
|
|
163
|
+
### "LiteLLM returns 400 about beta / experimental headers."
|
|
164
|
+
|
|
165
|
+
Set `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. This strips the
|
|
166
|
+
`anthropic-beta` header Claude Code adds on newer features that gateways
|
|
167
|
+
may not forward yet.
|
|
168
|
+
|
|
169
|
+
## Further reading
|
|
170
|
+
|
|
171
|
+
- Claude Code env var reference - <https://code.claude.com/docs/en/env-vars>
|
|
172
|
+
- LLM gateway / LiteLLM recipe - <https://code.claude.com/docs/en/llm-gateway>
|
|
173
|
+
- Model configuration and aliases - <https://code.claude.com/docs/en/model-config>
|