@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,149 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 08 — Networking
|
|
5
|
+
|
|
6
|
+
> Network policy, egress proxy, CDP/ttyd routing, ingress.
|
|
7
|
+
> Cross-cuts L3 + L4.
|
|
8
|
+
|
|
9
|
+
## Principles
|
|
10
|
+
|
|
11
|
+
1. **Default-deny everywhere.** Every namespace, every sandbox, every direction.
|
|
12
|
+
2. **Single mediated egress path** — the JWT-allowlist proxy (see [07-security.md](./07-security.md)).
|
|
13
|
+
3. **Sandbox is not publicly addressable.** Ever.
|
|
14
|
+
4. **L4 ↔ L3 is mTLS.** L3 ↔ L1 is network-policy-isolated, no app-level auth.
|
|
15
|
+
|
|
16
|
+
## Topology (k8s target, Phase 5+)
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
Internet
|
|
20
|
+
│
|
|
21
|
+
┌────────▼────────┐
|
|
22
|
+
│ Ingress + WAF │ (public; serves L4 only)
|
|
23
|
+
└────────┬────────┘
|
|
24
|
+
│
|
|
25
|
+
┌────────▼────────┐
|
|
26
|
+
│ L4 Control Plane│
|
|
27
|
+
└────┬───────┬────┘
|
|
28
|
+
│ │
|
|
29
|
+
mTLS gRPC│ │ HTTPS to S3 / Secrets / KV
|
|
30
|
+
│ │
|
|
31
|
+
┌────▼────┐ │
|
|
32
|
+
│ L3 │ │
|
|
33
|
+
│ Provider│ │
|
|
34
|
+
└────┬────┘ │
|
|
35
|
+
│ k8s API
|
|
36
|
+
┌────▼─────────────────────────────────────┐
|
|
37
|
+
│ Tenant namespace (per tenant_id) │
|
|
38
|
+
│ NetworkPolicy: deny all, allow: │
|
|
39
|
+
│ - L3 → sandbox pod port (exec API) │
|
|
40
|
+
│ - sandbox → egress-proxy svc │
|
|
41
|
+
│ No pod-to-pod within namespace either. │
|
|
42
|
+
│ │
|
|
43
|
+
│ ┌─────────────┐ ┌─────────────────┐ │
|
|
44
|
+
│ │ Sandbox A │ │ Egress proxy │────┼──► Internet
|
|
45
|
+
│ │ (L1 agent) │──►│ (JWT validate) │ │ (allowlisted)
|
|
46
|
+
│ └─────────────┘ └─────────────────┘ │
|
|
47
|
+
└────────────────────────────────────────────┘
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## NetworkPolicy (default per tenant namespace)
|
|
51
|
+
|
|
52
|
+
- `default-deny-ingress` and `default-deny-egress` on every pod.
|
|
53
|
+
- Allow ingress: from `namespace=control-plane` pods (label-selected) on the sandbox port only.
|
|
54
|
+
- Allow egress: to `namespace=egress` egress-proxy svc on its port only; plus DNS to kube-dns.
|
|
55
|
+
- **No pod-to-pod within the tenant namespace** — workspaces never see each other.
|
|
56
|
+
|
|
57
|
+
## Egress proxy
|
|
58
|
+
|
|
59
|
+
- One deployment per cluster (HA-replicated). Service in a dedicated `egress` namespace.
|
|
60
|
+
- Validates per-session JWT issued by L4's secret broker.
|
|
61
|
+
- JWT carries: `session_id`, `allowed_hosts` (or regex), `expiry`.
|
|
62
|
+
- Logs: destination host, decision, JWT id, latency. Sent to audit sink.
|
|
63
|
+
- Reference: [`Michaelliv/agentbox`](https://github.com/Michaelliv/agentbox). Port to Go in Phase 8.
|
|
64
|
+
|
|
65
|
+
DNS:
|
|
66
|
+
- Allowlist DNS too (egress to kube-dns; kube-dns has its own egress allowlist for resolution).
|
|
67
|
+
- Or: proxy resolves DNS itself, sandbox uses HTTP proxy directly.
|
|
68
|
+
- Decision deferred to Phase 8 research.
|
|
69
|
+
|
|
70
|
+
## CDP / ttyd routing
|
|
71
|
+
|
|
72
|
+
Today:
|
|
73
|
+
- Open WebUI / user UI calls L4 (`computer-use-server`) on a public route.
|
|
74
|
+
- L4 proxies CDP WebSocket frames to/from the sandbox's exposed Chromium.
|
|
75
|
+
- Same path for ttyd.
|
|
76
|
+
|
|
77
|
+
Target (Phase 6+):
|
|
78
|
+
- Same shape: L4 is the only public surface for CDP/ttyd too.
|
|
79
|
+
- L4 ↔ sandbox: mTLS internal. Sandbox's CDP endpoint reachable only from L4 pods (NetworkPolicy).
|
|
80
|
+
- Long-lived WebSocket — L4 must be HA-friendly (sticky sessions via consistent hashing, or session-router lookup on each new connection).
|
|
81
|
+
|
|
82
|
+
## Ingress (public)
|
|
83
|
+
|
|
84
|
+
- TLS terminated at ingress (cert-manager + Let's Encrypt for self-hosted; ACM for AWS).
|
|
85
|
+
- WAF in front for public deployments (mod_security, AWS WAF, Cloudflare).
|
|
86
|
+
- Only L4 routes exposed publicly. L3 / L1 / sandbox pods have no public ingress.
|
|
87
|
+
|
|
88
|
+
## Docker Compose (PoC)
|
|
89
|
+
|
|
90
|
+
- Phases 0–4: existing compose network; no NetworkPolicy equivalent.
|
|
91
|
+
- Phase 8: optional egress proxy container can be enabled in Compose for local testing of the allowlist pattern.
|
|
92
|
+
|
|
93
|
+
## What ships, when
|
|
94
|
+
|
|
95
|
+
| Phase | Network change |
|
|
96
|
+
|---|---|
|
|
97
|
+
| 1–4 | No network topology change (Compose stays as today) |
|
|
98
|
+
| 5 | Helm chart adds NetworkPolicy default-deny + tenant namespace template |
|
|
99
|
+
| 6 | mTLS L4 ↔ L3; ingress/WAF guidance documented |
|
|
100
|
+
| 8 | Egress proxy + JWT signing in L4 + audit sink (prereq for untrusted tier in Phase 9) |
|
|
101
|
+
| 10 | Multi-AZ session routing — snapshot-based recovery on pod failure (not in-memory affinity); multi-region foundations only |
|
|
102
|
+
|
|
103
|
+
## Multi-region workspace proxies (Phase 10 substrate)
|
|
104
|
+
|
|
105
|
+
Long-lived CDP / ttyd WebSockets penalize latency hard — a 200 ms RTT makes a Chromium screencast feel underwater. Once the deployment spans more than one region, L4 cannot terminate every user's WebSocket centrally without paying the cross-region tax on every keystroke.
|
|
106
|
+
|
|
107
|
+
The pattern, lifted from Coder ([`research/03`](../research/03-coder.md)):
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
User UI
|
|
111
|
+
│
|
|
112
|
+
▼
|
|
113
|
+
┌──────────────────────┐
|
|
114
|
+
│ Region-local │
|
|
115
|
+
│ Workspace Proxy │ one per region; terminates user-side TLS
|
|
116
|
+
│ (CDP/ttyd terminator)│ consistent-hashes by session_id
|
|
117
|
+
└──────────┬───────────┘
|
|
118
|
+
│ mTLS, region-local
|
|
119
|
+
▼
|
|
120
|
+
┌──────────────────────┐
|
|
121
|
+
│ L4 (global, multi-AZ)│
|
|
122
|
+
│ + KV session router │
|
|
123
|
+
└──────────┬───────────┘
|
|
124
|
+
│
|
|
125
|
+
▼
|
|
126
|
+
┌──────────────────────┐
|
|
127
|
+
│ L3 + sandboxes │
|
|
128
|
+
│ in the user's region │
|
|
129
|
+
└──────────────────────┘
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Properties:
|
|
133
|
+
- **User-perceived latency is region-local.** RTT to the sandbox stays under the regional ceiling.
|
|
134
|
+
- **L4 stays single-pane-of-glass.** Auth, session router, secret broker remain global; the proxies are dumb shovels.
|
|
135
|
+
- **Failure isolation.** A region's proxy can lose its L4 link without dropping in-flight CDP frames (proxy buffers; reconnects when L4 returns).
|
|
136
|
+
- **Consistent-hash by `session_id`.** Within a region, the same session always lands on the same proxy replica. Avoids the `sessionAffinity: ClientIP` anti-pattern called out in [`02-layer4-control-plane.md`](./02-layer4-control-plane.md).
|
|
137
|
+
|
|
138
|
+
What this implies for earlier phases:
|
|
139
|
+
- The CDP/ttyd transport must already be transparent passthrough (L4 does not parse frames — [ADR-0008](../adr/0008-internal-grpc-external-rest-mcp.md)). Anything that requires L4 to understand the wire breaks here.
|
|
140
|
+
- Session router state must be **externally addressable** (KV, not in-process) so a region-local proxy can resolve `session_id → region`.
|
|
141
|
+
- mTLS between proxy and L4 must be operational — Phase 6 deliverable.
|
|
142
|
+
|
|
143
|
+
Phase 10 ships one proxy per region; before that, the proxy is just L4 itself (one region). The architecture is forward-compatible: a Phase 6 deployment with no proxies looks like the Phase 10 deployment minus the geographic shard.
|
|
144
|
+
|
|
145
|
+
## Source
|
|
146
|
+
|
|
147
|
+
- Internal security notes
|
|
148
|
+
- [07-security.md](./07-security.md)
|
|
149
|
+
- [`docs/future-architecture/references.md`](../references.md) (`agentbox`)
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 09 — Sandbox Templates
|
|
5
|
+
|
|
6
|
+
> The configurable, version-pinned recipe that produces a sandbox.
|
|
7
|
+
> Tenant tier → template → image + runtime + resources + mounts + network + egress allowlist.
|
|
8
|
+
|
|
9
|
+
## Why templates are first-class
|
|
10
|
+
|
|
11
|
+
User requirement: *the container itself must be configurable via templates.* The template object decouples *what tenants get* from *how providers implement it*.
|
|
12
|
+
|
|
13
|
+
## Schema (target)
|
|
14
|
+
|
|
15
|
+
Conceptually CRD-shaped (k8s) but the same object lives in Compose (YAML file) and DirectCH (TOML). Provider materializes it.
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
apiVersion: sandbox.openchatcomputeruse.io/v1
|
|
19
|
+
kind: SandboxTemplate
|
|
20
|
+
metadata:
|
|
21
|
+
name: computer-use-untrusted-v3
|
|
22
|
+
labels:
|
|
23
|
+
tier: untrusted
|
|
24
|
+
purpose: computer-use
|
|
25
|
+
spec:
|
|
26
|
+
image:
|
|
27
|
+
ref: ghcr.io/wide-moat/open-computer-use@sha256:abcdef…
|
|
28
|
+
signature: required # cosign verified by admission
|
|
29
|
+
|
|
30
|
+
runtime_class: kata-ch # see 04-layer2-runtimes.md
|
|
31
|
+
envtype: customer-cu # L3 dispatch key — see 03-layer3-providers.md
|
|
32
|
+
snapstart_compatible: false # Phase 10 only; set true when template ships paired squashfs blobs (see 06-storage.md)
|
|
33
|
+
|
|
34
|
+
resources:
|
|
35
|
+
cpu: "2"
|
|
36
|
+
mem: "2Gi"
|
|
37
|
+
disk: "10Gi"
|
|
38
|
+
|
|
39
|
+
pool:
|
|
40
|
+
minSize: 2
|
|
41
|
+
targetSize: 5
|
|
42
|
+
maxSize: 20
|
|
43
|
+
idleTimeoutSeconds: 600
|
|
44
|
+
|
|
45
|
+
mounts: # see 06-storage.md
|
|
46
|
+
- type: skill
|
|
47
|
+
refs:
|
|
48
|
+
- { name: pptx, sha256: … }
|
|
49
|
+
- { name: docx, sha256: … }
|
|
50
|
+
- type: workspace
|
|
51
|
+
persistence: ephemeral
|
|
52
|
+
- type: user-data
|
|
53
|
+
backend: s3
|
|
54
|
+
bucket: tenant-{tenant_id}-data
|
|
55
|
+
|
|
56
|
+
env_template: # rendered at /v1/configure with session ctx
|
|
57
|
+
PUBLIC_BASE_URL: "{public_base_url}"
|
|
58
|
+
SUBAGENT_CLI: "claude"
|
|
59
|
+
# NO SECRETS HERE — secret broker injects them
|
|
60
|
+
|
|
61
|
+
egress_baseline: # added to per-session JWT allowlist
|
|
62
|
+
- "*.anthropic.com"
|
|
63
|
+
- "pypi.org"
|
|
64
|
+
- "files.pythonhosted.org"
|
|
65
|
+
- "registry.npmjs.org"
|
|
66
|
+
- "github.com"
|
|
67
|
+
- "objects.githubusercontent.com"
|
|
68
|
+
|
|
69
|
+
security:
|
|
70
|
+
runAsNonRoot: false # sysbox/kata allow safe root
|
|
71
|
+
seccompProfile: RuntimeDefault
|
|
72
|
+
dropCapabilities: ["ALL"]
|
|
73
|
+
addCapabilities: [] # template can request specific caps with justification
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Tenant → template mapping
|
|
77
|
+
|
|
78
|
+
L4 resolves at session creation:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
template = TemplateResolver.resolve(
|
|
82
|
+
tenant_tier, # e.g. "internal-employee", "paid-customer", "trial"
|
|
83
|
+
workload_kind, # e.g. "computer-use", "code-exec"
|
|
84
|
+
region,
|
|
85
|
+
)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Examples:
|
|
89
|
+
- Internal employee + code-exec → `internal-code-sysbox-v2`
|
|
90
|
+
- Paid customer + Computer Use → `customer-cu-kata-ch-v3`
|
|
91
|
+
- Free trial + Computer Use → `trial-cu-kata-fc-v1`
|
|
92
|
+
|
|
93
|
+
The mapping is policy held in L4 config (DB-backed in Phase 6+). Admin UI edits it.
|
|
94
|
+
|
|
95
|
+
## Template lifecycle
|
|
96
|
+
|
|
97
|
+
- **Created** by ops via admin API (Phase 6+) or YAML in Helm values pre-Phase-6.
|
|
98
|
+
- **Validated** at admission: image signature, mount sanity, resource within cluster quotas.
|
|
99
|
+
- **Versioned**: name carries `vN`. Old version stays until its referenced sessions drain. No mutation in place.
|
|
100
|
+
- **Deprecated** via label; new sessions get the latest non-deprecated.
|
|
101
|
+
|
|
102
|
+
## Two new fields, briefly
|
|
103
|
+
|
|
104
|
+
- **`envtype`** — the L3 dispatch key. Picks the backend mechanism (Docker Compose vs k8s vs DirectCH, plus the egress-proxy enforcement mode). Values: `dev`, `internal`, `customer-shared`, `customer-cu`, `anthropic-hosted`, `byoc`. Full matrix in [`03-layer3-providers.md`](./03-layer3-providers.md) "Environment-type dispatch (Baku pattern)". Distinct from `runtime_class` — `envtype` says *where it runs*, `runtime_class` says *what isolates it*.
|
|
105
|
+
- **`snapstart_compatible`** — Phase-10-only flag. When `true`, the template's release pipeline produced paired Tier-2 squashfs blobs (`vdb`, `vdc`) alongside the OCI image, and the template is wired for block-device hot-swap on resume ([`06-storage.md`](./06-storage.md) block-device tooling swap). Phase 9 templates are always `false`. Templates without paired blobs are rejected by admission when this flag is `true`.
|
|
106
|
+
|
|
107
|
+
## Per-phase progression
|
|
108
|
+
|
|
109
|
+
| Phase | Templates state |
|
|
110
|
+
|---|---|
|
|
111
|
+
| 1 | None — single hardcoded config inherited from today's compose |
|
|
112
|
+
| 2 | One template per provider, declared in code |
|
|
113
|
+
| 3 | Mounts spec real (skills + S3) |
|
|
114
|
+
| 4 | Egress baseline + env_template separated from secrets |
|
|
115
|
+
| 5 | Templates become CRD-shaped in k8s (via `agent-sandbox` `SandboxTemplate`) |
|
|
116
|
+
| 6 | Admin UI CRUD + tenant→template resolver in L4 |
|
|
117
|
+
| 8 | Multi-tier templates (sysbox / gVisor / kata-* fully wired) |
|
|
118
|
+
|
|
119
|
+
## Source
|
|
120
|
+
|
|
121
|
+
- Internal design notes (template patterns)
|
|
122
|
+
- [`kubernetes-sigs/agent-sandbox`](https://github.com/kubernetes-sigs/agent-sandbox) — `SandboxTemplate` CRD basis
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# 10 — Observability
|
|
5
|
+
|
|
6
|
+
> Metrics, traces, audit log, SLOs.
|
|
7
|
+
> Boring on purpose — use the standard stack.
|
|
8
|
+
|
|
9
|
+
## Signals
|
|
10
|
+
|
|
11
|
+
| Signal | Tool | Notes |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Metrics | Prometheus | Scrape L3 + L4 + egress proxy + (optionally) L1 |
|
|
14
|
+
| Traces | OpenTelemetry → any OTLP backend | Sample at L4 ingress, propagate through L3 → L1 |
|
|
15
|
+
| Structured logs | stdout/stderr → fluent-bit → object store / Loki | JSON lines |
|
|
16
|
+
| Audit log | dedicated append-only sink | Separate from regular logs; retention ≥ 90d |
|
|
17
|
+
|
|
18
|
+
## Required metrics
|
|
19
|
+
|
|
20
|
+
L4:
|
|
21
|
+
- `mcp_requests_total{tool,tenant,status}`
|
|
22
|
+
- `mcp_request_duration_seconds{tool}`
|
|
23
|
+
- `session_create_duration_seconds`
|
|
24
|
+
- `session_active{tenant,template}` (gauge)
|
|
25
|
+
- `secret_rotation_total{kind,status}`
|
|
26
|
+
|
|
27
|
+
L3:
|
|
28
|
+
- `sandbox_pool_size{template,state}` (state ∈ idle / leased / draining)
|
|
29
|
+
- `sandbox_spawn_duration_seconds{template}`
|
|
30
|
+
- `sandbox_exec_duration_seconds{template}`
|
|
31
|
+
- `sandbox_terminate_total{template,reason}`
|
|
32
|
+
|
|
33
|
+
L1 (in-sandbox):
|
|
34
|
+
- `agent_exec_total{kind}` where kind ∈ bash/python/file/sub_agent
|
|
35
|
+
- `agent_exec_duration_seconds{kind}`
|
|
36
|
+
|
|
37
|
+
Egress proxy:
|
|
38
|
+
- `egress_requests_total{decision,destination_class}`
|
|
39
|
+
- `egress_request_duration_seconds`
|
|
40
|
+
|
|
41
|
+
## SLOs (target)
|
|
42
|
+
|
|
43
|
+
| SLO | Target |
|
|
44
|
+
|---|---|
|
|
45
|
+
| MCP request success rate | ≥ 99.9% (excluding user-side errors) |
|
|
46
|
+
| Session create latency p99 | < 500 ms (warm pool hit) |
|
|
47
|
+
| Session create latency p99 cold | < 2 s (cold start, kata-ch) |
|
|
48
|
+
| Exec latency p99 | < 50 ms (orchestration overhead, not workload) |
|
|
49
|
+
| CDP frame rate | ≥ 10 fps |
|
|
50
|
+
| Egress proxy latency p99 | < 100 ms |
|
|
51
|
+
|
|
52
|
+
These match our targets and are validated in Phase 5 (k8s prod) + Phase 9 (kata).
|
|
53
|
+
|
|
54
|
+
## RAM-based capacity-sizing formula
|
|
55
|
+
|
|
56
|
+
The first question operators ask is "how many sandboxes does a node hold?" The answer is bounded by **RAM**, not CPU — sandboxes idle most of the time but always reserve their memory request. For `kata-ch` / `kata-fc` specifically, the VMM itself owns a slab of memory that the workload never sees.
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
concurrent_sandboxes_per_node = floor(
|
|
60
|
+
(node_ram_bytes - system_reserve_bytes - kubelet_reserve_bytes)
|
|
61
|
+
/ (template.mem_request_bytes × overcommit_factor + vmm_overhead_bytes)
|
|
62
|
+
)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
| Term | Typical value | Notes |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `node_ram_bytes` | Per node, e.g. `64 GiB` | The bare-metal node spec |
|
|
68
|
+
| `system_reserve_bytes` | `1–2 GiB` | Kernel, daemons, monitoring agents |
|
|
69
|
+
| `kubelet_reserve_bytes` | `~512 MiB` | k8s overhead per `kube-reserved` + `system-reserved` |
|
|
70
|
+
| `template.mem_request_bytes` | `2 GiB` (default `customer-cu-kata-ch-v3`) | What the template guarantees the workload |
|
|
71
|
+
| `overcommit_factor` | `1.0` for `customer-cu`, up to `1.5` for `internal` | Operators choose; lower = stricter |
|
|
72
|
+
| `vmm_overhead_bytes` | `0` for runc/sysbox, `~20 MiB` for `kata-fc`, `~40 MiB` for `kata-ch` | Per-VM Firecracker / CH process |
|
|
73
|
+
|
|
74
|
+
Operators size node pools by **solving for `node_ram_bytes`** given a target `concurrent_sandboxes_per_node` and the dominant template. Phase 9 validates the formula on real bare-metal hardware; the dashboard ships node-level "sandbox-density" gauge so the formula can be tuned with field data.
|
|
75
|
+
|
|
76
|
+
The formula intentionally does **not** include CPU. CPU oversubscription is a separate axis governed by `cpu_request` and HPA; conflating it with RAM here would mislead capacity-planners.
|
|
77
|
+
|
|
78
|
+
For the Phase 10 frozen-snapshot pool, the analog formula replaces `mem_request × concurrent` with `snapshot_blob_size × pool_size` — RAM cost goes to zero for cold pool entries (they live on disk), only resumed-but-idle sandboxes consume RAM. The formula is updated in the Phase 10 deliverable.
|
|
79
|
+
|
|
80
|
+
## Distributed tracing
|
|
81
|
+
|
|
82
|
+
The W3C `traceparent` header crosses every layer boundary; without that, "why was this exec slow?" is unanswerable. Concrete wire requirements:
|
|
83
|
+
|
|
84
|
+
- **L4 ingress.** Generate a root span per MCP request; attach `traceparent` to every downstream call.
|
|
85
|
+
- **L4 → L3.** Carried on the connect-go metadata (`traceparent` is a first-class metadata key); L3 starts a child span on receive.
|
|
86
|
+
- **L3 → L1.** Carried as a JSON field in the `Configure` / `ToolCall` / `Exec` data-plane frame (the WS protocol doesn't have HTTP headers; the trace context rides inside the message envelope). L1 starts a child span on receive.
|
|
87
|
+
- **Audit-log linkage.** Every audit event carries the `trace_id` of the request that triggered it. This is what lets the "why was this destination egress-blocked?" question reduce to a single trace lookup.
|
|
88
|
+
|
|
89
|
+
Sampling: ingress samples at a configurable rate (default `1.0` in dev, `0.01` in prod); the rest of the stack honors the upstream sample decision (no resampling). Forced-sample on errors regardless of rate.
|
|
90
|
+
|
|
91
|
+
OpenTelemetry SDK lands in L4 at Phase 6; L3 at Phase 6+; L1 at Phase 7 (the Rust agent uses `tracing` + `opentelemetry-otlp`). Phase 8 wires the audit-log linkage.
|
|
92
|
+
|
|
93
|
+
## Audit log
|
|
94
|
+
|
|
95
|
+
See [07-security.md](./07-security.md) for the mandatory event list and forbidden-content rules.
|
|
96
|
+
|
|
97
|
+
- Sink: separate from regular logs (e.g., S3 bucket, immutability lock).
|
|
98
|
+
- Retention: ≥ 90 days. SOC-2-aligned.
|
|
99
|
+
- Schema: stable, versioned. Each event carries `event_id`, `ts`, `tenant_id`, `session_id`, `type`, `payload`.
|
|
100
|
+
|
|
101
|
+
## Health probes
|
|
102
|
+
|
|
103
|
+
- `/healthz` (liveness) and `/readyz` (readiness) on L4 (already exists) and L3 (Phase 5).
|
|
104
|
+
- L1 agent: `GET /v1/health` is the readiness signal for the warm pool.
|
|
105
|
+
|
|
106
|
+
## Phase progression
|
|
107
|
+
|
|
108
|
+
| Phase | Observability change |
|
|
109
|
+
|---|---|
|
|
110
|
+
| 1–3 | Keep current stdout logging |
|
|
111
|
+
| 4 | Audit-event emission added for secret rotation |
|
|
112
|
+
| 5 | Prometheus scrape annotations in Helm + dashboards starter pack |
|
|
113
|
+
| 6 | OpenTelemetry SDK in Go L4 + audit sink wired |
|
|
114
|
+
| 8 | Egress proxy metrics + audit pipeline finalized; 90 d retention enforced |
|
|
115
|
+
| 9 | Kata-tier metrics added; capacity-formula validation on bare-metal pool |
|
|
116
|
+
| 10 | Multi-AZ traces, error-budget burn alerting; multi-region foundations |
|
|
117
|
+
|
|
118
|
+
## Source
|
|
119
|
+
|
|
120
|
+
- Internal operations notes
|
|
121
|
+
- [07-security.md](./07-security.md)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<!-- SPDX-License-Identifier: BUSL-1.1 -->
|
|
2
|
+
<!-- Copyright (c) 2025 Open Computer Use Contributors -->
|
|
3
|
+
|
|
4
|
+
# Design Notes
|
|
5
|
+
|
|
6
|
+
Solution-shaped proposals that are **not yet locked**. This file is the sibling of [`gaps.md`](./gaps.md): `gaps.md` records *problems and risks*, this file records *candidate solutions* to them.
|
|
7
|
+
|
|
8
|
+
Rules:
|
|
9
|
+
|
|
10
|
+
- A design note is a **candidate**, not spec. Each one names its owning roadmap phase and must clear that phase's research pass and owner sign-off before any of it lands in `architecture/` or an ADR.
|
|
11
|
+
- If a note conflicts with a file under `architecture/`, **`architecture/` wins** until the owning phase ships (same rule as the [README](./README.md#what-this-document-tree-does-not-do)).
|
|
12
|
+
- Any third-party component named in a note must pass [ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md) license vetting (no AGPL, no BSL in direct deps) at phase-research time, not here.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## DN-1 — Substrate-independent egress, identity & secret-broker design
|
|
17
|
+
|
|
18
|
+
> Owning phases: Phase 4 (secret broker), Phase 6 (control plane), Phase 8 (egress proxy).
|
|
19
|
+
> Derived from internal microVM design notes.
|
|
20
|
+
> Status: **candidate.** Pending Phase 4/6/8 research + owner sign-off.
|
|
21
|
+
|
|
22
|
+
**Goal.** One design for egress control, connectivity/identity, and secret handling that holds across all three deployment substrates — Docker Compose PoC, Kubernetes, microVM — as *one invariant with thin per-substrate enforcement*, not three separate designs.
|
|
23
|
+
|
|
24
|
+
### 1. One egress invariant, three thin wrappers
|
|
25
|
+
|
|
26
|
+
Invariant: **default-deny + allowlist-on-connect** — enforce against the resolved IP + TLS SNI, never the DNS name.
|
|
27
|
+
|
|
28
|
+
| Substrate | Enforcement binding |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Docker Compose | `DOCKER-USER` iptables chain |
|
|
31
|
+
| Kubernetes | `NetworkPolicy` (egress) |
|
|
32
|
+
| microVM | `nftables` |
|
|
33
|
+
|
|
34
|
+
SNI-based allowlisting implementations to evaluate at Phase 8: HAProxy `req.ssl_sni`, smokescreen, Cilium `toFQDNs`, Envoy `tls_inspector`.
|
|
35
|
+
|
|
36
|
+
### 2. "Internet, not intranet"
|
|
37
|
+
|
|
38
|
+
The egress filter must deny RFC1918 + link-local + cloud metadata (`169.254.169.254`), and **must not forget IPv6** (`fc00::/7`, `fe80::/10`). A sandbox that can reach the internet must still not reach the deployment's internal network or the host's metadata endpoint.
|
|
39
|
+
|
|
40
|
+
### 3. Connectivity + identity
|
|
41
|
+
|
|
42
|
+
For the cases where a sandbox legitimately needs an *internal* service, do not widen the egress allowlist to the intranet. Instead use a mesh: **Tailscale / Headscale (self-hosted)** — connectivity over a single outbound connection, identity by mesh membership, least-privilege via mesh ACLs. The sandbox reaches exactly the internal services its ACL grants and nothing else.
|
|
43
|
+
|
|
44
|
+
### 4. Don't expose keys — a broker-gateway
|
|
45
|
+
|
|
46
|
+
A **broker-gateway lives outside the sandbox.** The workload receives a per-session token; the real `ANTHROPIC_API_KEY` exists only on the gateway. Claude Code (and any model client) is pointed at the gateway via `ANTHROPIC_BASE_URL`. **LiteLLM** sits *behind* the gateway as a token-accounting / usage-metering layer — **not** as the auth or RBAC layer.
|
|
47
|
+
|
|
48
|
+
It aligns with the [`07-security.md`](./architecture/07-security.md) secret broker (Phase 4) and with an FD-passing hardening philosophy: a compromised sandbox can leak at most a scoped, short-lived session token, never the long-lived provider key.
|
|
49
|
+
|
|
50
|
+
### 5. Real RBAC
|
|
51
|
+
|
|
52
|
+
Authorization is a pipeline, and **LiteLLM is not it**:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
IdP (Keycloak)
|
|
56
|
+
→ policy engine (OPA / Casbin)
|
|
57
|
+
→ enforcement points (broker-gateway, egress filter, mesh ACLs)
|
|
58
|
+
→ LiteLLM (narrow role: token accounting only)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Explicitly: **LiteLLM ≠ RBAC.** It meters; it does not decide who may do what.
|
|
62
|
+
|
|
63
|
+
### Mapping to the roadmap
|
|
64
|
+
|
|
65
|
+
| Section | Owning phase | Refines |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| §1–§2 egress invariant + SSRF deny-set | [Phase 8](./roadmap.md#phase-8) | [`08-networking.md`](./architecture/08-networking.md) |
|
|
68
|
+
| §3 mesh connectivity / identity | none yet — flag for Phase 6/8 scoping | new surface |
|
|
69
|
+
| §4 broker-gateway | [Phase 4](./roadmap.md#phase-4) | [`07-security.md`](./architecture/07-security.md) |
|
|
70
|
+
| §5 RBAC pipeline | [Phase 6](./roadmap.md#phase-6) + Phase 4 | [`02-layer4-control-plane.md`](./architecture/02-layer4-control-plane.md) |
|
|
71
|
+
|
|
72
|
+
**License note (ADR-0006).** First-pass read: Headscale (BSD-3), Keycloak / OPA / Casbin / Cilium / Envoy (Apache-2), smokescreen (MIT), LiteLLM (MIT) are clear of AGPL/BSL. HAProxy is GPLv2 — acceptable as a standalone deployed service (not linked into our binaries). Confirm every dependency at the owning phase's research pass; this note does not authorize adoption.
|