@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,82 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
"""
|
|
4
|
+
Shared helpers for listing + reading files under a chat's uploads directory.
|
|
5
|
+
|
|
6
|
+
Used by:
|
|
7
|
+
- GET /api/uploads/{chat_id}/list (existing HTTP endpoint).
|
|
8
|
+
- sync_chat_resources / the @mcp.resource handler in mcp_resources.py
|
|
9
|
+
(Tier 6 native MCP surface).
|
|
10
|
+
|
|
11
|
+
Traversal protection reuses security.safe_path / security.sanitize_chat_id —
|
|
12
|
+
no new security logic.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import mimetypes
|
|
16
|
+
import os
|
|
17
|
+
from dataclasses import dataclass
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
from security import safe_path, sanitize_chat_id
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Module-level so tests can patch / so app.py re-uses the same value.
|
|
25
|
+
BASE_DATA_DIR = Path(os.getenv("BASE_DATA_DIR", "/data"))
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class UploadEntry:
|
|
30
|
+
name: str # basename — display label
|
|
31
|
+
rel_path: str # relative to the uploads dir; may contain "/"
|
|
32
|
+
size: int
|
|
33
|
+
modified: float # st_mtime
|
|
34
|
+
mime_type: str
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _guess_mime(path: Path) -> str:
|
|
38
|
+
mime, _ = mimetypes.guess_type(path.name)
|
|
39
|
+
return mime or "application/octet-stream"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def list_chat_uploads(chat_id: str) -> list[UploadEntry]:
|
|
43
|
+
"""List files under BASE_DATA_DIR/{chat_id}/uploads/ recursively.
|
|
44
|
+
|
|
45
|
+
Returns [] if the directory doesn't exist (newly-created chat).
|
|
46
|
+
Sorted by modification time, newest first — matches the HTTP endpoint's
|
|
47
|
+
existing behavior (app.py:404).
|
|
48
|
+
"""
|
|
49
|
+
chat_id = sanitize_chat_id(chat_id)
|
|
50
|
+
uploads_dir = safe_path(BASE_DATA_DIR, chat_id, "uploads")
|
|
51
|
+
if not uploads_dir.exists():
|
|
52
|
+
return []
|
|
53
|
+
entries: list[UploadEntry] = []
|
|
54
|
+
for fp in uploads_dir.rglob("*"):
|
|
55
|
+
if not fp.is_file():
|
|
56
|
+
continue
|
|
57
|
+
rel = fp.relative_to(uploads_dir)
|
|
58
|
+
st = fp.stat()
|
|
59
|
+
entries.append(UploadEntry(
|
|
60
|
+
name=fp.name,
|
|
61
|
+
rel_path=str(rel),
|
|
62
|
+
size=st.st_size,
|
|
63
|
+
modified=st.st_mtime,
|
|
64
|
+
mime_type=_guess_mime(fp),
|
|
65
|
+
))
|
|
66
|
+
entries.sort(key=lambda e: e.modified, reverse=True)
|
|
67
|
+
return entries
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def read_chat_upload(chat_id: str, rel_path: str) -> tuple[bytes, str]:
|
|
71
|
+
"""Read a single uploaded file. Returns (bytes, mime_type).
|
|
72
|
+
|
|
73
|
+
rel_path is whatever list_chat_uploads reported (may contain "/").
|
|
74
|
+
safe_path enforces traversal protection — no `..`, no absolute paths.
|
|
75
|
+
"""
|
|
76
|
+
chat_id = sanitize_chat_id(chat_id)
|
|
77
|
+
uploads_dir = safe_path(BASE_DATA_DIR, chat_id, "uploads")
|
|
78
|
+
# safe_path handles multi-segment join with traversal protection.
|
|
79
|
+
file_path = safe_path(uploads_dir, rel_path)
|
|
80
|
+
if not file_path.is_file():
|
|
81
|
+
raise FileNotFoundError(f"No such upload: {chat_id}/{rel_path}")
|
|
82
|
+
return file_path.read_bytes(), _guess_mime(file_path)
|
|
@@ -0,0 +1,53 @@
|
|
|
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-31
|
|
7
|
+
owner: "@Wide-Moat/architects"
|
|
8
|
+
applies-to: next/v1
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
The wire contracts OCU defines or conforms to, one file per boundary. Read [`docs/architecture/08-contracts.md`](../docs/architecture/08-contracts.md) first — it is the surface map and the format/versioning policy; this README is the navigator for the files here.
|
|
12
|
+
|
|
13
|
+
## Layout
|
|
14
|
+
|
|
15
|
+
| File | Surface | Format | Validated by |
|
|
16
|
+
|---|---|---|---|
|
|
17
|
+
| `mcp/2025-06-18/ocu-constraints.schema.json` | Agent tool-call ingress (caller → MCP gateway) | JSON Schema 2020-12 (MCP conform profile) | `json-schema` CI job |
|
|
18
|
+
| `exec/exec-channel.schema.json` | Exec / PTY+CDP (control API → sandbox, machine-to-machine) | JSON Schema 2020-12 | `json-schema` CI job |
|
|
19
|
+
| `storage/mount-config.schema.json` | South-face mount config (broker → sandbox) | JSON Schema 2020-12 | `json-schema` CI job |
|
|
20
|
+
| `storage/file-ops.schema.json` | South-face file-op RPC (sandbox → broker) | JSON Schema 2020-12 | `json-schema` CI job |
|
|
21
|
+
| `storage/file-artifact-api.schema.json` | North-face file/artifact data plane (data-plane client → broker) | JSON Schema 2020-12 | `json-schema` CI job |
|
|
22
|
+
| `audit/audit-fanin.asyncapi.yaml` | Audit event fan-in (six containers → audit → SIEM) | AsyncAPI 3.0 / OCSF | `asyncapi` CI job |
|
|
23
|
+
|
|
24
|
+
The storage surface is three files: the guest mount config, the south-face broker RPC, and the north-face HTTP API. South (`file-ops`) and north (`file-artifact-api`) stay distinct — the south is the sandbox-to-broker RPC, the north is the data-plane client's HTTP surface. Not-yet-built surfaces (operator REST, session-setup gRPC, transparency-log envelope, mock servers) are tracked in `08-contracts.md` §5.
|
|
25
|
+
|
|
26
|
+
## How to read a schema file
|
|
27
|
+
|
|
28
|
+
1. `$comment` carries the SPDX header, a one-line scope, and the NFR anchors the file satisfies.
|
|
29
|
+
2. `$defs` holds the reusable shapes; the root `type`/`properties` is the message envelope.
|
|
30
|
+
3. A `STATUS` of `partial` in `$comment` means the named shapes are fixed but some bodies stay unspecified — see the `x-ocu-tbd-bodies` block for which.
|
|
31
|
+
4. Run the same check CI runs:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npx ajv-cli@5 compile -s contracts/storage/file-ops.schema.json --spec=draft2020 --strict=false
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Annotation conventions
|
|
38
|
+
|
|
39
|
+
A field lands in a schema only when it is sourced, NFR-derived, or explicitly deferred. The annotation says which:
|
|
40
|
+
|
|
41
|
+
| Annotation | Meaning |
|
|
42
|
+
|---|---|
|
|
43
|
+
| (none) | Sourced — a real field/message shape; the contract fixes it. |
|
|
44
|
+
| `x-ocu-design` | A design-level decision (e.g. an envelope carrier name) referencing a sourced shape; named here, not externally fixed. |
|
|
45
|
+
| `x-ocu-default` | An NFR-derived default value (a ceiling, a TTL). Configurable, not frozen — the number tracks the NFR, deployments tune it. |
|
|
46
|
+
| `x-ocu-tbd` / `x-ocu-tbd-bodies` | Deliberately unspecified — no field-level source pins it yet. Carries the tracking issue. Do not invent a body to fill it. |
|
|
47
|
+
| `x-ocu-open-questions` | A list of unresolved shape decisions for this file. |
|
|
48
|
+
|
|
49
|
+
The rule the files hold to: never invent a wire field. If a body is not sourced and not NFR-derived, it stays `x-ocu-tbd` with an issue, not a guess.
|
|
50
|
+
|
|
51
|
+
## Changing a contract
|
|
52
|
+
|
|
53
|
+
Additive (a new optional field, a new event type, a new proto field number) ships without a version bump. Removing, renaming, or tightening is breaking and needs a new major version — see `08-contracts.md` §4 for the policy and the CI breaking-change gates.
|
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
# Audit fan-in contract: six host-attested source containers publish OCSF events
|
|
4
|
+
# to the Audit pipeline. AsyncAPI 3.0.0 names the channel/operation; the OCSF
|
|
5
|
+
# event class is the payload (Published Language), referenced by $ref to the
|
|
6
|
+
# public OCSF schema, never inlined.
|
|
7
|
+
|
|
8
|
+
asyncapi: 3.0.0
|
|
9
|
+
|
|
10
|
+
info:
|
|
11
|
+
title: OCU Audit Fan-in
|
|
12
|
+
version: 1.0.0
|
|
13
|
+
description: >-
|
|
14
|
+
One-directional fan-in from six host-attested source containers into the
|
|
15
|
+
Audit pipeline. Payload is an OCSF v1.x event class (Published Language).
|
|
16
|
+
Delivery is durable and ordered into a per-source hash-chained append-only
|
|
17
|
+
log (NFR-SEC-03). The SIEM fan-out and the SOAR webhook are separate
|
|
18
|
+
surfaces, not modelled here.
|
|
19
|
+
license:
|
|
20
|
+
name: FSL-1.1-Apache-2.0
|
|
21
|
+
url: https://fsl.software/
|
|
22
|
+
|
|
23
|
+
defaultContentType: application/json
|
|
24
|
+
|
|
25
|
+
# Transport substrate (durable bus per NFR-REL-12) is a component-spec choice
|
|
26
|
+
# (#150). The binding is intentionally left protocol-agnostic here.
|
|
27
|
+
servers:
|
|
28
|
+
audit-bus:
|
|
29
|
+
host: audit-bus.internal
|
|
30
|
+
protocol: nats
|
|
31
|
+
description: >-
|
|
32
|
+
Durable, ordered, append-only audit bus. The protocol token names the
|
|
33
|
+
default binding; the concrete bus (NATS/Kafka/AMQP) is a component-spec
|
|
34
|
+
decision (#150) and the channels carry no protocol-specific binding here.
|
|
35
|
+
|
|
36
|
+
channels:
|
|
37
|
+
controlPlaneAudit:
|
|
38
|
+
address: audit.ingest.control-plane
|
|
39
|
+
description: ORCH — API Activity, Authentication, Account/Entity management.
|
|
40
|
+
messages:
|
|
41
|
+
apiActivity:
|
|
42
|
+
$ref: '#/components/messages/ApiActivity'
|
|
43
|
+
authentication:
|
|
44
|
+
$ref: '#/components/messages/Authentication'
|
|
45
|
+
entityManagement:
|
|
46
|
+
$ref: '#/components/messages/EntityManagement'
|
|
47
|
+
|
|
48
|
+
credentialCustodyAudit:
|
|
49
|
+
address: audit.ingest.credential-custody
|
|
50
|
+
description: BR — Authorize Session (lease mint/rotate/scope/revoke).
|
|
51
|
+
messages:
|
|
52
|
+
authorizeSession:
|
|
53
|
+
$ref: '#/components/messages/AuthorizeSession'
|
|
54
|
+
|
|
55
|
+
storageBrokerAudit:
|
|
56
|
+
address: audit.ingest.storage-broker
|
|
57
|
+
description: SB — File System Activity on both broker faces — south-face mount (list/read/write/create/stat) and north-face data plane (upload/list/download/delete, gateway-authored), per NFR-SEC-79.
|
|
58
|
+
messages:
|
|
59
|
+
fileSystemActivity:
|
|
60
|
+
$ref: '#/components/messages/FileSystemActivity'
|
|
61
|
+
|
|
62
|
+
sessionSandboxAudit:
|
|
63
|
+
address: audit.ingest.session-sandbox
|
|
64
|
+
description: VM — Process Activity, File System Activity (host-authored).
|
|
65
|
+
messages:
|
|
66
|
+
processActivity:
|
|
67
|
+
$ref: '#/components/messages/ProcessActivity'
|
|
68
|
+
fileSystemActivity:
|
|
69
|
+
$ref: '#/components/messages/FileSystemActivity'
|
|
70
|
+
|
|
71
|
+
egressEdgeAudit:
|
|
72
|
+
address: audit.ingest.egress-edge
|
|
73
|
+
description: PROXY — Network/HTTP Activity, DNS Activity (allow/deny).
|
|
74
|
+
messages:
|
|
75
|
+
networkActivity:
|
|
76
|
+
$ref: '#/components/messages/NetworkActivity'
|
|
77
|
+
httpActivity:
|
|
78
|
+
$ref: '#/components/messages/HttpActivity'
|
|
79
|
+
dnsActivity:
|
|
80
|
+
$ref: '#/components/messages/DnsActivity'
|
|
81
|
+
|
|
82
|
+
auditPipelineAudit:
|
|
83
|
+
address: audit.ingest.audit-pipeline
|
|
84
|
+
description: BUS — self-emitted metering and per-source saturation events.
|
|
85
|
+
messages:
|
|
86
|
+
computeMetering:
|
|
87
|
+
$ref: '#/components/messages/ComputeMetering'
|
|
88
|
+
saturationEvent:
|
|
89
|
+
$ref: '#/components/messages/SaturationEvent'
|
|
90
|
+
|
|
91
|
+
# Every operation is receive: the pipeline receives from a fixed source.
|
|
92
|
+
# The source identity is the channel itself (one address per container) and is
|
|
93
|
+
# host-attested at the fan-in boundary, never read from the payload
|
|
94
|
+
# (NFR-SEC-47, NFR-SEC-56). The SIEM fan-out (send) is a separate surface.
|
|
95
|
+
operations:
|
|
96
|
+
receiveControlPlane:
|
|
97
|
+
action: receive
|
|
98
|
+
channel:
|
|
99
|
+
$ref: '#/channels/controlPlaneAudit'
|
|
100
|
+
security:
|
|
101
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
102
|
+
messages:
|
|
103
|
+
- $ref: '#/channels/controlPlaneAudit/messages/apiActivity'
|
|
104
|
+
- $ref: '#/channels/controlPlaneAudit/messages/authentication'
|
|
105
|
+
- $ref: '#/channels/controlPlaneAudit/messages/entityManagement'
|
|
106
|
+
|
|
107
|
+
receiveCredentialCustody:
|
|
108
|
+
action: receive
|
|
109
|
+
channel:
|
|
110
|
+
$ref: '#/channels/credentialCustodyAudit'
|
|
111
|
+
security:
|
|
112
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
113
|
+
messages:
|
|
114
|
+
- $ref: '#/channels/credentialCustodyAudit/messages/authorizeSession'
|
|
115
|
+
|
|
116
|
+
receiveStorageBroker:
|
|
117
|
+
action: receive
|
|
118
|
+
channel:
|
|
119
|
+
$ref: '#/channels/storageBrokerAudit'
|
|
120
|
+
security:
|
|
121
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
122
|
+
messages:
|
|
123
|
+
- $ref: '#/channels/storageBrokerAudit/messages/fileSystemActivity'
|
|
124
|
+
|
|
125
|
+
receiveSessionSandbox:
|
|
126
|
+
action: receive
|
|
127
|
+
channel:
|
|
128
|
+
$ref: '#/channels/sessionSandboxAudit'
|
|
129
|
+
security:
|
|
130
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
131
|
+
messages:
|
|
132
|
+
- $ref: '#/channels/sessionSandboxAudit/messages/processActivity'
|
|
133
|
+
- $ref: '#/channels/sessionSandboxAudit/messages/fileSystemActivity'
|
|
134
|
+
|
|
135
|
+
receiveEgressEdge:
|
|
136
|
+
action: receive
|
|
137
|
+
channel:
|
|
138
|
+
$ref: '#/channels/egressEdgeAudit'
|
|
139
|
+
security:
|
|
140
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
141
|
+
messages:
|
|
142
|
+
- $ref: '#/channels/egressEdgeAudit/messages/networkActivity'
|
|
143
|
+
- $ref: '#/channels/egressEdgeAudit/messages/httpActivity'
|
|
144
|
+
- $ref: '#/channels/egressEdgeAudit/messages/dnsActivity'
|
|
145
|
+
|
|
146
|
+
receiveAuditPipeline:
|
|
147
|
+
action: receive
|
|
148
|
+
channel:
|
|
149
|
+
$ref: '#/channels/auditPipelineAudit'
|
|
150
|
+
security:
|
|
151
|
+
- $ref: '#/components/securitySchemes/sourceMtls'
|
|
152
|
+
messages:
|
|
153
|
+
- $ref: '#/channels/auditPipelineAudit/messages/computeMetering'
|
|
154
|
+
- $ref: '#/channels/auditPipelineAudit/messages/saturationEvent'
|
|
155
|
+
|
|
156
|
+
components:
|
|
157
|
+
securitySchemes:
|
|
158
|
+
# Source authentication is audience-validated (NFR-SEC-09): a source may
|
|
159
|
+
# only publish to its own channel. The host-attested identity, not a
|
|
160
|
+
# payload field, is authoritative.
|
|
161
|
+
sourceMtls:
|
|
162
|
+
type: X509
|
|
163
|
+
description: >-
|
|
164
|
+
Mutual-TLS source identity, audience-validated per source (NFR-SEC-09).
|
|
165
|
+
The verified peer identity binds the channel; payload `source`-like
|
|
166
|
+
fields are never trusted.
|
|
167
|
+
|
|
168
|
+
# Shared envelope applied to every message. Carries the OCU mandatory fields
|
|
169
|
+
# (NFR-MAINT-AUDIT-SCHEMA) out-of-band from the OCSF payload so they survive
|
|
170
|
+
# transform to CEF/ECS/UDM, and correlates each event by trace_id.
|
|
171
|
+
messageTraits:
|
|
172
|
+
auditEnvelope:
|
|
173
|
+
headers:
|
|
174
|
+
$ref: '#/components/schemas/AuditEnvelope'
|
|
175
|
+
correlationId:
|
|
176
|
+
location: $message.header#/trace_id
|
|
177
|
+
description: Cross-surface correlation key (NFR-MAINT-AUDIT-SCHEMA).
|
|
178
|
+
|
|
179
|
+
schemas:
|
|
180
|
+
AuditEnvelope:
|
|
181
|
+
type: object
|
|
182
|
+
description: >-
|
|
183
|
+
OCU mandatory audit fields (NFR-MAINT-AUDIT-SCHEMA). actor_id is
|
|
184
|
+
host-attested (NFR-SEC-09); all string values are bounded (NFR-SEC-51).
|
|
185
|
+
Hash-chain linkage (prev_hash/chain_hash) is authored by the pipeline at
|
|
186
|
+
ingest (NFR-SEC-03) and is NOT part of the publish payload; the
|
|
187
|
+
source-supplied ordering input is the per-source monotonic sequence
|
|
188
|
+
below (NFR-SEC-48).
|
|
189
|
+
required: [trace_id, session_id, actor_id, resource, action, outcome, sequence]
|
|
190
|
+
additionalProperties: false
|
|
191
|
+
properties:
|
|
192
|
+
trace_id:
|
|
193
|
+
type: string
|
|
194
|
+
maxLength: 128
|
|
195
|
+
description: UUID/hex correlation id; carried as correlationId.
|
|
196
|
+
x-ocu-design: "<=128 chars; bound is an NFR-SEC-51-derived default, not frozen."
|
|
197
|
+
session_id:
|
|
198
|
+
type: string
|
|
199
|
+
maxLength: 128
|
|
200
|
+
description: Container binding (Surface D).
|
|
201
|
+
x-ocu-design: "<=128 chars; bound is an NFR-SEC-51-derived default, not frozen."
|
|
202
|
+
actor_id:
|
|
203
|
+
type: string
|
|
204
|
+
maxLength: 256
|
|
205
|
+
description: Host-attested operator/service identity (NFR-SEC-09).
|
|
206
|
+
x-ocu-design: "<=256 chars; bound is an NFR-SEC-51-derived default, not frozen."
|
|
207
|
+
resource:
|
|
208
|
+
type: string
|
|
209
|
+
maxLength: 1024
|
|
210
|
+
description: Target object.
|
|
211
|
+
x-ocu-design: "<=1024 chars; bound is an NFR-SEC-51-derived default, not frozen."
|
|
212
|
+
action:
|
|
213
|
+
type: string
|
|
214
|
+
maxLength: 128
|
|
215
|
+
description: Privileged/lifecycle action.
|
|
216
|
+
x-ocu-design: "<=128 chars; bound is an NFR-SEC-51-derived default, not frozen."
|
|
217
|
+
outcome:
|
|
218
|
+
type: string
|
|
219
|
+
enum: [success, failure, unknown]
|
|
220
|
+
description: Aligns OCSF status_id.
|
|
221
|
+
sequence:
|
|
222
|
+
type: integer
|
|
223
|
+
minimum: 0
|
|
224
|
+
description: >-
|
|
225
|
+
Per-source monotonic sequence (NFR-SEC-48). Mirrors OCSF
|
|
226
|
+
metadata.sequence; the pipeline derives chain order from it.
|
|
227
|
+
|
|
228
|
+
# Each message payload is the public OCSF event class, referenced by URL and
|
|
229
|
+
# never inlined. The OCSF version is pinned per the metadata.version field of
|
|
230
|
+
# the payload (e.g. "1.5.0"); upgrade window and N-1 compat per
|
|
231
|
+
# NFR-MAINT-AUDIT-SCHEMA. activity_id enums are defined by the OCSF class.
|
|
232
|
+
messages:
|
|
233
|
+
ApiActivity:
|
|
234
|
+
name: ApiActivity
|
|
235
|
+
title: API Activity (OCSF 6003)
|
|
236
|
+
summary: MCP tool-call ingress at the control plane.
|
|
237
|
+
contentType: application/json
|
|
238
|
+
traits:
|
|
239
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
240
|
+
payload:
|
|
241
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
242
|
+
schema:
|
|
243
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/api_activity"
|
|
244
|
+
|
|
245
|
+
Authentication:
|
|
246
|
+
name: Authentication
|
|
247
|
+
title: Authentication (OCSF 3002)
|
|
248
|
+
summary: Session JWT issue and operator authentication.
|
|
249
|
+
contentType: application/json
|
|
250
|
+
traits:
|
|
251
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
252
|
+
payload:
|
|
253
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
254
|
+
schema:
|
|
255
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/authentication"
|
|
256
|
+
|
|
257
|
+
EntityManagement:
|
|
258
|
+
name: EntityManagement
|
|
259
|
+
title: Entity Management (OCSF 3004)
|
|
260
|
+
summary: >-
|
|
261
|
+
Enumerated privileged control-plane actions (NFR-SEC-45) — retention,
|
|
262
|
+
denylist, quota, tier-downgrade, custody access.
|
|
263
|
+
contentType: application/json
|
|
264
|
+
traits:
|
|
265
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
266
|
+
payload:
|
|
267
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
268
|
+
schema:
|
|
269
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/entity_management"
|
|
270
|
+
|
|
271
|
+
AuthorizeSession:
|
|
272
|
+
name: AuthorizeSession
|
|
273
|
+
title: Authorize Session (OCSF 3003)
|
|
274
|
+
summary: Custody lease mint/rotate/scope/revoke (NFR-SEC-29).
|
|
275
|
+
contentType: application/json
|
|
276
|
+
traits:
|
|
277
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
278
|
+
payload:
|
|
279
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
280
|
+
schema:
|
|
281
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/authorize_session"
|
|
282
|
+
|
|
283
|
+
FileSystemActivity:
|
|
284
|
+
name: FileSystemActivity
|
|
285
|
+
title: File System Activity (OCSF 1001)
|
|
286
|
+
summary: >-
|
|
287
|
+
File activity on both broker faces — south-face mount
|
|
288
|
+
(list/read/write/create/stat) and north-face data plane
|
|
289
|
+
(upload/list/download/delete, gateway-authored), per NFR-SEC-79.
|
|
290
|
+
contentType: application/json
|
|
291
|
+
traits:
|
|
292
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
293
|
+
payload:
|
|
294
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
295
|
+
schema:
|
|
296
|
+
allOf:
|
|
297
|
+
- $ref: "https://schema.ocsf.io/api/1.5.0/classes/file_activity"
|
|
298
|
+
- description: >-
|
|
299
|
+
NFR-SEC-79 required-field overlay on the OCSF base class:
|
|
300
|
+
every file-activity event on either face carries the OCU
|
|
301
|
+
mandatory set so intent and downloadable disposition are
|
|
302
|
+
non-optional. Field names mirror file-artifact-api.schema.json
|
|
303
|
+
FileActivityEvent.
|
|
304
|
+
type: object
|
|
305
|
+
required: [filesystem_id, intent, downloadable]
|
|
306
|
+
properties:
|
|
307
|
+
filesystem_id:
|
|
308
|
+
type: string
|
|
309
|
+
description: Session scope the activity targets.
|
|
310
|
+
intent:
|
|
311
|
+
type: string
|
|
312
|
+
enum: [read, write, preview]
|
|
313
|
+
description: Operation intent axis (NFR-SEC-49).
|
|
314
|
+
downloadable:
|
|
315
|
+
type: boolean
|
|
316
|
+
description: Downloadable disposition resolved broker-side at read (NFR-SEC-73).
|
|
317
|
+
|
|
318
|
+
ProcessActivity:
|
|
319
|
+
name: ProcessActivity
|
|
320
|
+
title: Process Activity (OCSF 1007)
|
|
321
|
+
summary: >-
|
|
322
|
+
Sandbox process create/exit/signal/oom/timeout (Surface A);
|
|
323
|
+
host-authored, never guest-emitted (NFR-SEC-47).
|
|
324
|
+
contentType: application/json
|
|
325
|
+
traits:
|
|
326
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
327
|
+
payload:
|
|
328
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
329
|
+
schema:
|
|
330
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/process_activity"
|
|
331
|
+
|
|
332
|
+
NetworkActivity:
|
|
333
|
+
name: NetworkActivity
|
|
334
|
+
title: Network Activity (OCSF 4001)
|
|
335
|
+
summary: Outbound egress allow/deny; deny reason maps to status_detail.
|
|
336
|
+
contentType: application/json
|
|
337
|
+
traits:
|
|
338
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
339
|
+
payload:
|
|
340
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
341
|
+
schema:
|
|
342
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/network_activity"
|
|
343
|
+
|
|
344
|
+
HttpActivity:
|
|
345
|
+
name: HttpActivity
|
|
346
|
+
title: HTTP Activity (OCSF 4002)
|
|
347
|
+
summary: Outbound HTTP egress allow/deny at the edge.
|
|
348
|
+
contentType: application/json
|
|
349
|
+
traits:
|
|
350
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
351
|
+
payload:
|
|
352
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
353
|
+
schema:
|
|
354
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/http_activity"
|
|
355
|
+
|
|
356
|
+
DnsActivity:
|
|
357
|
+
name: DnsActivity
|
|
358
|
+
title: DNS Activity (OCSF 4003)
|
|
359
|
+
summary: DNS resolution at the egress edge.
|
|
360
|
+
contentType: application/json
|
|
361
|
+
traits:
|
|
362
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
363
|
+
payload:
|
|
364
|
+
schemaFormat: application/schema+json;version=draft-07
|
|
365
|
+
schema:
|
|
366
|
+
$ref: "https://schema.ocsf.io/api/1.5.0/classes/dns_activity"
|
|
367
|
+
|
|
368
|
+
# ComputeMetering and SaturationEvent payloads are NOT mapped to an OCSF
|
|
369
|
+
# class. OCSF v1.x (Application Activity category 6xxx) has no class for
|
|
370
|
+
# compute/usage metering or for resource saturation/throttling/quota: 6002
|
|
371
|
+
# Application Lifecycle is install/start/stop only (no usage fields) and
|
|
372
|
+
# 6008 Application Error is generic fault reporting (no saturation/quota
|
|
373
|
+
# fields). Forcing either would misclassify the event for a SIEM consumer,
|
|
374
|
+
# so the payload schema is held TBD until OCSF ships a metering class or an
|
|
375
|
+
# OCU OCSF extension is authored. The AsyncAPI surface (channel, operation,
|
|
376
|
+
# host-attested source, envelope) is stable; only the payload $ref is open.
|
|
377
|
+
ComputeMetering:
|
|
378
|
+
name: ComputeMetering
|
|
379
|
+
title: Compute metering (OCSF class TBD)
|
|
380
|
+
summary: >-
|
|
381
|
+
Compute-time metering (CPU-min, RAM-GB-min, storage-GB-day,
|
|
382
|
+
egress-bytes, MCP-count). No fitting OCSF class exists; payload schema
|
|
383
|
+
is held TBD (see header comment), not force-fit to 6002/6008.
|
|
384
|
+
contentType: application/json
|
|
385
|
+
traits:
|
|
386
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
387
|
+
x-ocu-payload-status: tbd
|
|
388
|
+
x-ocu-payload-reason: >-
|
|
389
|
+
OCSF v1.x has no compute/usage-metering class. Candidate resolution:
|
|
390
|
+
an OCU OCSF extension class or a future upstream metering class.
|
|
391
|
+
Tracked at #150.
|
|
392
|
+
|
|
393
|
+
SaturationEvent:
|
|
394
|
+
name: SaturationEvent
|
|
395
|
+
title: Source-ingest saturation (OCSF class TBD)
|
|
396
|
+
summary: >-
|
|
397
|
+
Self-emitted when a source exceeds N x its provisioned ingest share
|
|
398
|
+
(NFR-SEC-56). Over-share is rate-shaped, not dropped. No fitting OCSF
|
|
399
|
+
class exists; payload schema is held TBD (see header comment).
|
|
400
|
+
contentType: application/json
|
|
401
|
+
traits:
|
|
402
|
+
- $ref: '#/components/messageTraits/auditEnvelope'
|
|
403
|
+
x-ocu-payload-status: tbd
|
|
404
|
+
x-ocu-payload-reason: >-
|
|
405
|
+
OCSF v1.x has no saturation/throttling/quota class. 6008 Application
|
|
406
|
+
Error has no saturation fields and would misclassify for SIEM.
|
|
407
|
+
Candidate resolution: an OCU OCSF extension class. Tracked at #188.
|