@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,332 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Security gates — the three a bank auditor opens first, per CLAUDE.md
|
|
5
|
+
# "Testing & QA discipline (next/v1)":
|
|
6
|
+
#
|
|
7
|
+
# 1. Secrets scan blocks merge (gitleaks + trufflehog).
|
|
8
|
+
# 2. SAST/SCA CRITICAL blocks merge (Semgrep + Trivy).
|
|
9
|
+
# 3. IaC scan (Checkov) — CRITICAL on Helm blocks merge (HIGH currently
|
|
10
|
+
# soft-fail during bootstrap; tightened once the baseline cleanup PR
|
|
11
|
+
# lands and Dockerfile/Compose/K8s scopes are added back in).
|
|
12
|
+
#
|
|
13
|
+
# Signed SBOM + Cosign attestations for release artifacts live in
|
|
14
|
+
# supply-chain.yml; this file covers the commit-time / PR-time gates.
|
|
15
|
+
#
|
|
16
|
+
# Per-rule "HIGH exception" file: .github/security-exceptions.yml.
|
|
17
|
+
#
|
|
18
|
+
# Pinning policy (mandatory for every `uses:` and container `image:`):
|
|
19
|
+
# - Third-party actions pinned to a 40-char commit SHA, never to a
|
|
20
|
+
# movable tag (zizmor `unpinned-uses` would block merge on its own).
|
|
21
|
+
# - Container images pinned to `name:tag@sha256:<digest>`.
|
|
22
|
+
# - Every actions/checkout call sets `persist-credentials: false`
|
|
23
|
+
# (zizmor `artipacked`).
|
|
24
|
+
|
|
25
|
+
name: security
|
|
26
|
+
|
|
27
|
+
on:
|
|
28
|
+
pull_request:
|
|
29
|
+
push:
|
|
30
|
+
branches:
|
|
31
|
+
- main
|
|
32
|
+
- next/v1
|
|
33
|
+
schedule:
|
|
34
|
+
# Full-repo nightly re-scan (PRs are diff-only — re-confirm baseline).
|
|
35
|
+
- cron: "27 3 * * *"
|
|
36
|
+
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
security-events: write
|
|
40
|
+
pull-requests: read
|
|
41
|
+
|
|
42
|
+
concurrency:
|
|
43
|
+
group: security-${{ github.ref }}
|
|
44
|
+
# Do NOT cancel in-progress runs. On 5 quick commits to a PR, cancellation
|
|
45
|
+
# leaves intermediate commits unscanned by semgrep/trivy/checkov (they
|
|
46
|
+
# only see the working tree). gitleaks with fetch-depth: 0 catches
|
|
47
|
+
# history regardless. Letting runs queue is the safer default for
|
|
48
|
+
# merge-blocking gates.
|
|
49
|
+
cancel-in-progress: false
|
|
50
|
+
|
|
51
|
+
jobs:
|
|
52
|
+
secrets-gitleaks:
|
|
53
|
+
name: secrets — gitleaks
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
steps:
|
|
56
|
+
# Fork-PR-safe two-source pattern. The PR HEAD provides the source
|
|
57
|
+
# files to scan, but the gitleaks CONFIG comes from the BASE ref —
|
|
58
|
+
# never from the PR head. Without this split, a fork PR could ship
|
|
59
|
+
# a permissive allowlist (`paths = ['''.*''']`) and the gate would
|
|
60
|
+
# pass green for any secret introduced in that PR. Canonical CI
|
|
61
|
+
# supply-chain attack against allowlist-based scanners.
|
|
62
|
+
#
|
|
63
|
+
# We fetch the base-ref config directly via `gh api` rather than
|
|
64
|
+
# checking out the base branch. sparse-checkout has long-standing
|
|
65
|
+
# quirks with non-cone single-file patterns in actions/checkout@v4
|
|
66
|
+
# and silently produces an empty working tree, which would re-open
|
|
67
|
+
# the fork-bypass hole.
|
|
68
|
+
- name: Checkout PR head (source)
|
|
69
|
+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
70
|
+
with:
|
|
71
|
+
fetch-depth: 0
|
|
72
|
+
persist-credentials: false
|
|
73
|
+
path: pr-head
|
|
74
|
+
- name: Fetch base-ref .gitleaks.toml via GitHub API
|
|
75
|
+
env:
|
|
76
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
77
|
+
BASE_REF: ${{ github.base_ref || github.ref_name }}
|
|
78
|
+
REPO: ${{ github.repository }}
|
|
79
|
+
# Always produce config/.gitleaks.toml. Two paths:
|
|
80
|
+
#
|
|
81
|
+
# 1. Base ref has a real .gitleaks.toml — fetch and use it.
|
|
82
|
+
# 2. Base ref has no .gitleaks.toml (bootstrap PRs, or any feature
|
|
83
|
+
# branch off a base that hasn't merged the file yet) — write a
|
|
84
|
+
# tiny stub that says "use the upstream default ruleset".
|
|
85
|
+
#
|
|
86
|
+
# Without this stub, the docker step would have to omit `--config`,
|
|
87
|
+
# and gitleaks falls back to autoload `/repo/.gitleaks.toml` per
|
|
88
|
+
# its documented config precedence (step 4 in `gitleaks detect
|
|
89
|
+
# --help`). `/repo` is the PR head, so a fork PR shipping a
|
|
90
|
+
# permissive allowlist (`paths = ['''.*''']`) would silently
|
|
91
|
+
# bypass the gate — the canonical attack the two-source pattern
|
|
92
|
+
# is supposed to close. Writing the stub keeps `--config` always
|
|
93
|
+
# on the command line and pins precedence to step 1.
|
|
94
|
+
#
|
|
95
|
+
# An explicit `gh api` `--jq` type check guards against the case
|
|
96
|
+
# where the URL resolves to a directory listing rather than a
|
|
97
|
+
# file — in that scenario `.content` is null and would produce a
|
|
98
|
+
# zero-byte file that gitleaks would silently accept.
|
|
99
|
+
run: |
|
|
100
|
+
mkdir -p config
|
|
101
|
+
# On a 404 (no config on the base ref) gh prints the error JSON
|
|
102
|
+
# to stdout and exits non-zero; reset content to empty so the
|
|
103
|
+
# stub branch below handles it instead of base64-decoding JSON.
|
|
104
|
+
content="$(gh api "repos/${REPO}/contents/.gitleaks.toml?ref=${BASE_REF}" \
|
|
105
|
+
--jq '.content // empty' 2>/dev/null)" || content=""
|
|
106
|
+
if [ -n "$content" ]; then
|
|
107
|
+
# The contents API base64-encodes with embedded newlines;
|
|
108
|
+
# strip them or `base64 -d` rejects the input on Linux.
|
|
109
|
+
printf '%s' "$content" | tr -d '\n' | base64 -d > config/.gitleaks.toml
|
|
110
|
+
echo "Fetched $(wc -c < config/.gitleaks.toml) bytes of base-ref gitleaks config."
|
|
111
|
+
elif [ -f pr-head/.gitleaks.toml ]; then
|
|
112
|
+
# Bootstrap: the base ref has no config yet (it is being
|
|
113
|
+
# introduced by this very change). The base-ref-wins rule
|
|
114
|
+
# protects an EXISTING config from being weakened by a PR;
|
|
115
|
+
# with none to protect, the tree's own config applies.
|
|
116
|
+
cp pr-head/.gitleaks.toml config/.gitleaks.toml
|
|
117
|
+
echo "No config on base ref ${BASE_REF}; using the tree's own (bootstrap)."
|
|
118
|
+
else
|
|
119
|
+
printf '[extend]\nuseDefault = true\n' > config/.gitleaks.toml
|
|
120
|
+
echo "No .gitleaks.toml on base ref ${BASE_REF} — wrote useDefault stub."
|
|
121
|
+
fi
|
|
122
|
+
- name: Run gitleaks (Docker)
|
|
123
|
+
# The official gitleaks-action requires a paid license for GitHub
|
|
124
|
+
# Organizations. Use the upstream Docker image directly — same
|
|
125
|
+
# detect engine, no license server. Pinned by digest so a future
|
|
126
|
+
# `:latest` push cannot silently change scan behaviour on a
|
|
127
|
+
# merge-blocking gate.
|
|
128
|
+
#
|
|
129
|
+
# Two separate mounts: /repo for source (PR head), /config for
|
|
130
|
+
# the gitleaks config (always populated by the previous step —
|
|
131
|
+
# either the real base-ref file or a useDefault stub). `--config`
|
|
132
|
+
# is always passed so gitleaks cannot autoload
|
|
133
|
+
# `/repo/.gitleaks.toml`.
|
|
134
|
+
#
|
|
135
|
+
# :ro mounts + non-root user + --read-only container fs are
|
|
136
|
+
# defence-in-depth against a compromised gitleaks image (digest
|
|
137
|
+
# pin above is the first layer).
|
|
138
|
+
run: |
|
|
139
|
+
docker run --rm \
|
|
140
|
+
--read-only \
|
|
141
|
+
--user "$(id -u):$(id -g)" \
|
|
142
|
+
-v "${{ github.workspace }}/pr-head:/repo:ro" \
|
|
143
|
+
-v "${{ github.workspace }}/config:/config:ro" \
|
|
144
|
+
zricethezav/gitleaks:v8.30.1@sha256:c00b6bd0aeb3071cbcb79009cb16a60dd9e0a7c60e2be9ab65d25e6bc8abbb7f \
|
|
145
|
+
detect --source=/repo --no-banner --redact --exit-code 1 \
|
|
146
|
+
--config=/config/.gitleaks.toml
|
|
147
|
+
|
|
148
|
+
secrets-trufflehog:
|
|
149
|
+
name: secrets — trufflehog
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
steps:
|
|
152
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
153
|
+
with:
|
|
154
|
+
fetch-depth: 0
|
|
155
|
+
persist-credentials: false
|
|
156
|
+
- name: Run trufflehog
|
|
157
|
+
uses: trufflesecurity/trufflehog@0ec3634f6cf66a61912a923fee9d20cc45633a67 # main as of 2026-05-24
|
|
158
|
+
with:
|
|
159
|
+
path: ./
|
|
160
|
+
# `--fail` is appended by the action's entrypoint — passing it
|
|
161
|
+
# here a second time triggers "flag 'fail' cannot be repeated".
|
|
162
|
+
#
|
|
163
|
+
# `--no-verification` removes the egress data-exfiltration path:
|
|
164
|
+
# default `--results=verified` dials AWS/GitHub/Slack/… from the
|
|
165
|
+
# runner to validate detected patterns. For a bank-targeting CI
|
|
166
|
+
# we accept the higher false-positive rate over outbound calls.
|
|
167
|
+
extra_args: --no-verification
|
|
168
|
+
|
|
169
|
+
sast-semgrep:
|
|
170
|
+
name: SAST — semgrep
|
|
171
|
+
runs-on: ubuntu-latest
|
|
172
|
+
container:
|
|
173
|
+
# Org renamed from `returntocorp/semgrep` to `semgrep/semgrep`. Same
|
|
174
|
+
# image; the old name is mirrored but won't be updated forever.
|
|
175
|
+
image: semgrep/semgrep:1.163.0@sha256:7cad2bc2d1e44f87f0bf4be6d1fa23aa90fb72015bebc89fb91385d813987a03
|
|
176
|
+
steps:
|
|
177
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
178
|
+
with:
|
|
179
|
+
# Diff-aware semgrep needs history back to the merge-base.
|
|
180
|
+
fetch-depth: 0
|
|
181
|
+
persist-credentials: false
|
|
182
|
+
- name: Semgrep CI (community rules)
|
|
183
|
+
env:
|
|
184
|
+
# Required for diff-aware scanning + PR commenting. Without it,
|
|
185
|
+
# `semgrep ci` falls back to a full-repo scan. Token is
|
|
186
|
+
# workflow-scoped and short-lived.
|
|
187
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
188
|
+
# `semgrep ci` exits non-zero on findings by default. The
|
|
189
|
+
# `--suppress-errors` flag has the inverse meaning — DON'T set
|
|
190
|
+
# it. We pin it to false explicitly so a future runner-level
|
|
191
|
+
# env override can't silently downgrade the gate.
|
|
192
|
+
SEMGREP_SUPPRESS_ERRORS: "false"
|
|
193
|
+
run: |
|
|
194
|
+
# Verified registry packs as of 2026-05-24: p/bash and p/yaml
|
|
195
|
+
# do not exist on semgrep.dev (HTTP 404) — do not add them
|
|
196
|
+
# without first probing /c/p/<name>. Bash-in-YAML coverage
|
|
197
|
+
# comes from p/security-audit + p/github-actions; Docker
|
|
198
|
+
# socket misuse from p/dockerfile.
|
|
199
|
+
semgrep ci \
|
|
200
|
+
--config "p/security-audit" \
|
|
201
|
+
--config "p/owasp-top-ten" \
|
|
202
|
+
--config "p/python" \
|
|
203
|
+
--config "p/javascript" \
|
|
204
|
+
--config "p/dockerfile" \
|
|
205
|
+
--config "p/github-actions"
|
|
206
|
+
|
|
207
|
+
sca-trivy-fs:
|
|
208
|
+
name: SCA — trivy (filesystem)
|
|
209
|
+
runs-on: ubuntu-latest
|
|
210
|
+
steps:
|
|
211
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
212
|
+
with:
|
|
213
|
+
persist-credentials: false
|
|
214
|
+
- name: Trivy filesystem scan
|
|
215
|
+
uses: aquasecurity/trivy-action@a9c7b0f06e461e9d4b4d1711f154ee024b8d7ab8 # v0.36.0
|
|
216
|
+
with:
|
|
217
|
+
scan-type: fs
|
|
218
|
+
scan-ref: .
|
|
219
|
+
# Block merge on CRITICAL. HIGH gets a 14-day grace via the
|
|
220
|
+
# exceptions file; everything else is informational.
|
|
221
|
+
severity: CRITICAL
|
|
222
|
+
exit-code: "1"
|
|
223
|
+
# `ignore-unfixed: false` — a CRITICAL CVE without an upstream
|
|
224
|
+
# fix is exactly the class a bank auditor asks about first.
|
|
225
|
+
# Force an explicit dated entry in `security-exceptions.yml`
|
|
226
|
+
# before merge, rather than silently green-lighting it.
|
|
227
|
+
ignore-unfixed: false
|
|
228
|
+
skip-dirs: "node_modules,.venv,.planning,docs/future-architecture"
|
|
229
|
+
format: sarif
|
|
230
|
+
output: trivy-fs.sarif
|
|
231
|
+
# Without this, trivy-action drops `severity: CRITICAL` whenever
|
|
232
|
+
# `format: sarif` is set (entrypoint.sh unsets TRIVY_SEVERITY), so
|
|
233
|
+
# trivy scans for HIGH/MEDIUM/LOW too and exits 1 on the first
|
|
234
|
+
# finding — even though SARIF upload filters back to CRITICAL on
|
|
235
|
+
# the GitHub side. The "Building SARIF report with all severities"
|
|
236
|
+
# log line is the smoking gun. Issue:
|
|
237
|
+
# https://github.com/aquasecurity/trivy-action/issues/309
|
|
238
|
+
limit-severities-for-sarif: true
|
|
239
|
+
- name: Upload SARIF (CRITICAL)
|
|
240
|
+
if: always()
|
|
241
|
+
uses: github/codeql-action/upload-sarif@fee9466b8957867761f2d78f922ab084e3e2dd17 # v3
|
|
242
|
+
with:
|
|
243
|
+
sarif_file: trivy-fs.sarif
|
|
244
|
+
category: trivy-fs
|
|
245
|
+
# Second pass — HIGH severity, NON-blocking (exit-code 0). Without
|
|
246
|
+
# this the security-exceptions.yml schema and the CLAUDE.md
|
|
247
|
+
# "HIGH allowed for 14 days with a tracked exception file" rule
|
|
248
|
+
# both refer to a stream of findings that nothing in this workflow
|
|
249
|
+
# produces. Uploading HIGH as informational SARIF makes the
|
|
250
|
+
# exception ledger meaningful and gives a regulator something to
|
|
251
|
+
# audit against.
|
|
252
|
+
- name: Trivy filesystem scan (HIGH, informational)
|
|
253
|
+
uses: aquasecurity/trivy-action@a9c7b0f06e461e9d4b4d1711f154ee024b8d7ab8 # v0.36.0
|
|
254
|
+
with:
|
|
255
|
+
scan-type: fs
|
|
256
|
+
scan-ref: .
|
|
257
|
+
severity: HIGH
|
|
258
|
+
exit-code: "0"
|
|
259
|
+
ignore-unfixed: true
|
|
260
|
+
skip-dirs: "node_modules,.venv,.planning,docs/future-architecture"
|
|
261
|
+
format: sarif
|
|
262
|
+
output: trivy-fs-high.sarif
|
|
263
|
+
limit-severities-for-sarif: true
|
|
264
|
+
- name: Upload SARIF (HIGH)
|
|
265
|
+
if: always()
|
|
266
|
+
uses: github/codeql-action/upload-sarif@fee9466b8957867761f2d78f922ab084e3e2dd17 # v3
|
|
267
|
+
with:
|
|
268
|
+
sarif_file: trivy-fs-high.sarif
|
|
269
|
+
category: trivy-fs-high
|
|
270
|
+
|
|
271
|
+
iac-checkov:
|
|
272
|
+
name: IaC — checkov
|
|
273
|
+
runs-on: ubuntu-latest
|
|
274
|
+
steps:
|
|
275
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
276
|
+
with:
|
|
277
|
+
persist-credentials: false
|
|
278
|
+
- name: Set up Python
|
|
279
|
+
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
280
|
+
with:
|
|
281
|
+
python-version: "3.12"
|
|
282
|
+
- name: Install checkov
|
|
283
|
+
run: pip install checkov==3.2.314
|
|
284
|
+
- name: Run checkov
|
|
285
|
+
# Scope: only Helm (the next/v1 deployment substrate). The legacy
|
|
286
|
+
# Dockerfile + older workflows have pre-existing findings that
|
|
287
|
+
# belong in a separate cleanup PR — they are not the subject of
|
|
288
|
+
# this gate.
|
|
289
|
+
#
|
|
290
|
+
# `--soft-fail-on LOW,MEDIUM,HIGH` means only CRITICAL Helm findings
|
|
291
|
+
# block merge for the bootstrap phase. We tighten to HIGH+ in a
|
|
292
|
+
# follow-up once the baseline cleanup PR lands, and we extend the
|
|
293
|
+
# framework list to dockerfile/compose/k8s at the same time.
|
|
294
|
+
run: |
|
|
295
|
+
checkov \
|
|
296
|
+
-d helm/ \
|
|
297
|
+
--quiet \
|
|
298
|
+
--compact \
|
|
299
|
+
--framework helm \
|
|
300
|
+
--soft-fail-on LOW,MEDIUM,HIGH
|
|
301
|
+
|
|
302
|
+
conventional-commits:
|
|
303
|
+
name: commits — conventional-commits
|
|
304
|
+
runs-on: ubuntu-latest
|
|
305
|
+
# Accept both events. If we ever switch to `pull_request_target` as
|
|
306
|
+
# mitigation for fork-PR config-injection (see secrets-gitleaks
|
|
307
|
+
# header), this gate keeps firing instead of silently disabling.
|
|
308
|
+
if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
|
|
309
|
+
steps:
|
|
310
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
311
|
+
with:
|
|
312
|
+
fetch-depth: 0
|
|
313
|
+
persist-credentials: false
|
|
314
|
+
- name: Validate PR title
|
|
315
|
+
uses: amannn/action-semantic-pull-request@e32d7e603df1aa1ba07e981f2a23455dee596825 # v5
|
|
316
|
+
env:
|
|
317
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
318
|
+
with:
|
|
319
|
+
# Match the Conventional Commits spec we use everywhere else.
|
|
320
|
+
types: |
|
|
321
|
+
feat
|
|
322
|
+
fix
|
|
323
|
+
chore
|
|
324
|
+
docs
|
|
325
|
+
refactor
|
|
326
|
+
test
|
|
327
|
+
ci
|
|
328
|
+
build
|
|
329
|
+
perf
|
|
330
|
+
style
|
|
331
|
+
revert
|
|
332
|
+
requireScope: false
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Close stale issues and PRs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: '0 0 * * *'
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
issues: write
|
|
9
|
+
pull-requests: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
stale:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/stale@v10
|
|
16
|
+
with:
|
|
17
|
+
stale-issue-message: >
|
|
18
|
+
This issue has been automatically marked as stale because it has not had
|
|
19
|
+
recent activity. It will be closed in 14 days if no further activity occurs.
|
|
20
|
+
close-issue-message: >
|
|
21
|
+
This issue was closed because it has been inactive for 60 days.
|
|
22
|
+
Feel free to reopen if it's still relevant.
|
|
23
|
+
stale-pr-message: >
|
|
24
|
+
This PR has been automatically marked as stale because it has not had
|
|
25
|
+
recent activity. It will be closed in 14 days if no further activity occurs.
|
|
26
|
+
days-before-stale: 45
|
|
27
|
+
days-before-close: 14
|
|
28
|
+
stale-issue-label: stale
|
|
29
|
+
stale-pr-label: stale
|
|
30
|
+
exempt-issue-labels: pinned,security,bug
|
|
31
|
+
exempt-pr-labels: pinned
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# Supply-chain integrity: SBOM + Cosign keyless signature + in-toto SBOM
|
|
5
|
+
# attestation for every container image we publish.
|
|
6
|
+
#
|
|
7
|
+
# Per CLAUDE.md "Testing & QA discipline (next/v1)" top-3 gate #3:
|
|
8
|
+
# "Signed SBOM + SLSA L3 provenance required for every release artifact.
|
|
9
|
+
# Syft → SPDX, Cosign-signed; CI fails if missing."
|
|
10
|
+
#
|
|
11
|
+
# Scope of this file: the SBOM + sign + attest half of that gate.
|
|
12
|
+
#
|
|
13
|
+
# SLSA-3 provenance is deferred to a follow-up release workflow that
|
|
14
|
+
# colocates build/push and provenance generation so the real image digest
|
|
15
|
+
# is available to slsa-github-generator's `digest:` input. Hard-coding
|
|
16
|
+
# `digest: ""` violates the generator's contract and is worse than not
|
|
17
|
+
# running it at all. Tracking: `manifesto/05-licensing-posture.md` BoM
|
|
18
|
+
# row #9 (Sigstore/Cosign+Syft+Trivy+SLSA+in-toto) — keep its `status` as
|
|
19
|
+
# `partial` until the release workflow lands.
|
|
20
|
+
#
|
|
21
|
+
# Pinning policy: every `uses:` and container `image:` is pinned to a
|
|
22
|
+
# 40-char commit SHA / `@sha256:<digest>` — zizmor `unpinned-uses` would
|
|
23
|
+
# block merge otherwise. Every actions/checkout sets
|
|
24
|
+
# `persist-credentials: false` (zizmor `artipacked`).
|
|
25
|
+
|
|
26
|
+
name: supply-chain
|
|
27
|
+
|
|
28
|
+
on:
|
|
29
|
+
push:
|
|
30
|
+
tags: ["v*"]
|
|
31
|
+
workflow_dispatch:
|
|
32
|
+
inputs:
|
|
33
|
+
image_ref:
|
|
34
|
+
description: "Image ref (registry/name:tag) to sign and attest"
|
|
35
|
+
required: true
|
|
36
|
+
|
|
37
|
+
permissions:
|
|
38
|
+
contents: read
|
|
39
|
+
|
|
40
|
+
concurrency:
|
|
41
|
+
group: supply-chain-${{ github.ref }}
|
|
42
|
+
cancel-in-progress: false
|
|
43
|
+
|
|
44
|
+
jobs:
|
|
45
|
+
sbom-attest-sign:
|
|
46
|
+
name: SBOM + sign + attest (${{ matrix.image }})
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
# `environment: production` enforces required-reviewer approval before
|
|
49
|
+
# this job runs. Without it, any maintainer with workflow_dispatch
|
|
50
|
+
# access can sign an arbitrary image as the project's Sigstore
|
|
51
|
+
# identity ("identity laundering"). The Sigstore certificate that
|
|
52
|
+
# cosign emits carries the workflow ref + repo as the identity, and
|
|
53
|
+
# that signature lives in Rekor forever — burning the project's
|
|
54
|
+
# reputation if it was used to attest an attacker-controlled image.
|
|
55
|
+
environment: production
|
|
56
|
+
# Least-privilege: only this job needs id-token / packages /
|
|
57
|
+
# attestations write — keep them off the workflow-level scope.
|
|
58
|
+
permissions:
|
|
59
|
+
contents: read
|
|
60
|
+
id-token: write # Required for Cosign keyless / Sigstore OIDC.
|
|
61
|
+
packages: write # Required to push signatures + SBOM to GHCR.
|
|
62
|
+
attestations: write # Required for GitHub-native attestation API.
|
|
63
|
+
strategy:
|
|
64
|
+
fail-fast: false
|
|
65
|
+
matrix:
|
|
66
|
+
image:
|
|
67
|
+
# The 4 images we publish, mirroring release.yml release-body block.
|
|
68
|
+
- open-computer-use
|
|
69
|
+
- open-computer-use-server
|
|
70
|
+
- open-computer-use-cleanup
|
|
71
|
+
- open-computer-use-webui
|
|
72
|
+
|
|
73
|
+
# All `${{ }}` interpolation of context data happens in env-vars; the
|
|
74
|
+
# `run:` steps only reference `"$VAR"` to defuse shell-injection (CWE-78)
|
|
75
|
+
# — semgrep rule yaml.github-actions.security.run-shell-injection.
|
|
76
|
+
env:
|
|
77
|
+
IMAGE_NAME: ${{ matrix.image }}
|
|
78
|
+
OWNER: ${{ github.repository_owner }}
|
|
79
|
+
REPO: ${{ github.repository }}
|
|
80
|
+
REF_NAME: ${{ github.ref_name }}
|
|
81
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
82
|
+
DISPATCH_REF: ${{ inputs.image_ref }}
|
|
83
|
+
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
|
|
86
|
+
with:
|
|
87
|
+
persist-credentials: false
|
|
88
|
+
|
|
89
|
+
- name: Resolve image ref
|
|
90
|
+
id: ref
|
|
91
|
+
# Two gates on the ref before it flows into syft/cosign:
|
|
92
|
+
# 1. Character whitelist defangs shell metacharacters that could
|
|
93
|
+
# survive workflow_dispatch input.
|
|
94
|
+
# 2. Prefix anchor to `ghcr.io/${OWNER}/` makes it impossible to
|
|
95
|
+
# sign an arbitrary registry/image as the project's Sigstore
|
|
96
|
+
# identity. Any dispatch trying to sign
|
|
97
|
+
# `registry.example.com/attacker/malware:latest` fails here.
|
|
98
|
+
run: |
|
|
99
|
+
owner_lower="$(echo "$OWNER" | tr '[:upper:]' '[:lower:]')"
|
|
100
|
+
# build.yml uses `type=match,pattern=v(.*),group=1` to strip the
|
|
101
|
+
# leading `v` from release tags before pushing to GHCR (so tag
|
|
102
|
+
# v0.9.5.1 lands as image …:0.9.5.1). Mirror that here, otherwise
|
|
103
|
+
# the first real tag push signs an image that does not exist.
|
|
104
|
+
tag="${REF_NAME#v}"
|
|
105
|
+
if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
|
|
106
|
+
ref="$DISPATCH_REF"
|
|
107
|
+
else
|
|
108
|
+
ref="ghcr.io/${owner_lower}/${IMAGE_NAME}:${tag}"
|
|
109
|
+
fi
|
|
110
|
+
# Whitelist-only: allowed chars are exactly what a valid OCI ref
|
|
111
|
+
# needs. Reject anything else outright instead of trying to
|
|
112
|
+
# escape it.
|
|
113
|
+
case "$ref" in
|
|
114
|
+
*[!A-Za-z0-9._/:@-]*)
|
|
115
|
+
echo "::error::image ref contains disallowed characters: $ref" >&2
|
|
116
|
+
exit 1
|
|
117
|
+
;;
|
|
118
|
+
esac
|
|
119
|
+
# Defence-in-depth against `..` segment traversal smuggled past
|
|
120
|
+
# the whitelist (the whitelist permits the literal `..`).
|
|
121
|
+
case "$ref" in
|
|
122
|
+
*..*)
|
|
123
|
+
echo "::error::image ref contains '..': $ref" >&2
|
|
124
|
+
exit 1
|
|
125
|
+
;;
|
|
126
|
+
esac
|
|
127
|
+
# Prefix anchor — see header comment above.
|
|
128
|
+
case "$ref" in
|
|
129
|
+
ghcr.io/${owner_lower}/*) ;;
|
|
130
|
+
*)
|
|
131
|
+
echo "::error::image_ref must start with ghcr.io/${owner_lower}/, got: $ref" >&2
|
|
132
|
+
exit 1
|
|
133
|
+
;;
|
|
134
|
+
esac
|
|
135
|
+
# GITHUB_OUTPUT is the canonical write channel — github docs require
|
|
136
|
+
# using >> "$GITHUB_OUTPUT", not echo into a heredoc.
|
|
137
|
+
echo "ref=$ref" >> "$GITHUB_OUTPUT"
|
|
138
|
+
|
|
139
|
+
- name: Install Cosign
|
|
140
|
+
uses: sigstore/cosign-installer@1aa8e0f2454b781fbf0fbf306a4c9533a0c57409 # v3.7.0
|
|
141
|
+
|
|
142
|
+
- name: Install Syft
|
|
143
|
+
uses: anchore/sbom-action/download-syft@fc46e51fd3cb168ffb36c6d1915723c47db58abb # v0.17.7
|
|
144
|
+
|
|
145
|
+
- name: Generate SBOM (SPDX JSON + CycloneDX JSON)
|
|
146
|
+
env:
|
|
147
|
+
IMAGE_REF: ${{ steps.ref.outputs.ref }}
|
|
148
|
+
run: |
|
|
149
|
+
syft "$IMAGE_REF" \
|
|
150
|
+
-o spdx-json=sbom.spdx.json \
|
|
151
|
+
-o cyclonedx-json=sbom.cdx.json
|
|
152
|
+
|
|
153
|
+
- name: Sign image (keyless via Sigstore)
|
|
154
|
+
env:
|
|
155
|
+
IMAGE_REF: ${{ steps.ref.outputs.ref }}
|
|
156
|
+
# COSIGN_EXPERIMENTAL is no longer needed since cosign v2 — keyless
|
|
157
|
+
# signing via Fulcio is the default. See cosign CHANGELOG.
|
|
158
|
+
run: |
|
|
159
|
+
cosign sign --yes "$IMAGE_REF"
|
|
160
|
+
|
|
161
|
+
- name: Attest SBOM (in-toto, SPDX predicate)
|
|
162
|
+
env:
|
|
163
|
+
IMAGE_REF: ${{ steps.ref.outputs.ref }}
|
|
164
|
+
run: |
|
|
165
|
+
cosign attest --yes \
|
|
166
|
+
--predicate sbom.spdx.json \
|
|
167
|
+
--type spdxjson \
|
|
168
|
+
"$IMAGE_REF"
|
|
169
|
+
|
|
170
|
+
- name: Attest CycloneDX SBOM
|
|
171
|
+
env:
|
|
172
|
+
IMAGE_REF: ${{ steps.ref.outputs.ref }}
|
|
173
|
+
run: |
|
|
174
|
+
cosign attest --yes \
|
|
175
|
+
--predicate sbom.cdx.json \
|
|
176
|
+
--type cyclonedx \
|
|
177
|
+
"$IMAGE_REF"
|
|
178
|
+
|
|
179
|
+
- name: Verify signature + SBOM attestation
|
|
180
|
+
env:
|
|
181
|
+
IMAGE_REF: ${{ steps.ref.outputs.ref }}
|
|
182
|
+
REPO_FOR_VERIFY: ${{ github.repository }}
|
|
183
|
+
REF_NAME: ${{ github.ref_name }}
|
|
184
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
185
|
+
# Anchored regex on certificate-identity. The unanchored variant
|
|
186
|
+
# `https://github.com/${REPO_FOR_VERIFY}` matched typosquats
|
|
187
|
+
# (`-EVIL` suffix) and signatures emitted by any other workflow in
|
|
188
|
+
# the same repo. We anchor on:
|
|
189
|
+
# - protocol + `^`
|
|
190
|
+
# - exact repo
|
|
191
|
+
# - exact workflow path (`/.github/workflows/supply-chain.yml`)
|
|
192
|
+
# - tag-shape ref (`@refs/tags/v…` on tag push; we accept any
|
|
193
|
+
# ref on workflow_dispatch via a separate identity).
|
|
194
|
+
run: |
|
|
195
|
+
# Escape regex metacharacters in REF_NAME — tag `v0.9.5.1`
|
|
196
|
+
# contains `.` which would otherwise match any char and let
|
|
197
|
+
# a same-shape tag (e.g. `v0a9b5c1`) pass verification.
|
|
198
|
+
ref_re="$(printf '%s' "$REF_NAME" | sed -E 's/[][\\.*^$()+?{|]/\\&/g')"
|
|
199
|
+
repo_re="$(printf '%s' "$REPO_FOR_VERIFY" | sed -E 's/[][\\.*^$()+?{|]/\\&/g')"
|
|
200
|
+
if [ "$EVENT_NAME" = "push" ]; then
|
|
201
|
+
cert_id="^https://github\\.com/${repo_re}/\\.github/workflows/supply-chain\\.yml@refs/tags/${ref_re}$"
|
|
202
|
+
else
|
|
203
|
+
# workflow_dispatch — restrict the accepted refs to tags or
|
|
204
|
+
# the long-lived release branches. Without this an approver
|
|
205
|
+
# on the `production` environment could launder a signature
|
|
206
|
+
# for an image against an arbitrary throwaway branch.
|
|
207
|
+
cert_id="^https://github\\.com/${repo_re}/\\.github/workflows/supply-chain\\.yml@(refs/tags/v[0-9.]+|refs/heads/(main|next/v1))$"
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
cosign verify \
|
|
211
|
+
--certificate-identity-regexp "$cert_id" \
|
|
212
|
+
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
|
|
213
|
+
"$IMAGE_REF"
|
|
214
|
+
|
|
215
|
+
cosign verify-attestation \
|
|
216
|
+
--type spdxjson \
|
|
217
|
+
--certificate-identity-regexp "$cert_id" \
|
|
218
|
+
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
|
|
219
|
+
"$IMAGE_REF"
|
|
220
|
+
|
|
221
|
+
# Mirror verification for the CycloneDX attestation. The
|
|
222
|
+
# gate's stated purpose is "fail if any artefact is missing"
|
|
223
|
+
# — verifying only spdxjson would let a corrupted CycloneDX
|
|
224
|
+
# attestation pass CI green.
|
|
225
|
+
cosign verify-attestation \
|
|
226
|
+
--type cyclonedx \
|
|
227
|
+
--certificate-identity-regexp "$cert_id" \
|
|
228
|
+
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
|
|
229
|
+
"$IMAGE_REF"
|
|
230
|
+
|
|
231
|
+
- name: Upload SBOMs as workflow artifacts
|
|
232
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
233
|
+
with:
|
|
234
|
+
name: sbom-${{ matrix.image }}
|
|
235
|
+
path: |
|
|
236
|
+
sbom.spdx.json
|
|
237
|
+
sbom.cdx.json
|
|
238
|
+
# Default retention is 90 days — too long for SBOMs, which leak
|
|
239
|
+
# internal package versions to anyone with repo read access.
|
|
240
|
+
# The canonical signed copies live in Rekor + the registry via
|
|
241
|
+
# `cosign attest` above; the workflow artifact is a debug aid.
|
|
242
|
+
retention-days: 7
|
package/.gitleaks.toml
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SPDX-License-Identifier: FSL-1.1-Apache-2.0
|
|
2
|
+
# Copyright (c) 2025 Open Computer Use Contributors
|
|
3
|
+
#
|
|
4
|
+
# gitleaks configuration — extends the default ruleset with project-specific
|
|
5
|
+
# allowlists for known false-positives.
|
|
6
|
+
#
|
|
7
|
+
# Reference: https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml
|
|
8
|
+
|
|
9
|
+
# Pull in the upstream default rules — we only add allowlists, never weaken
|
|
10
|
+
# detection.
|
|
11
|
+
[extend]
|
|
12
|
+
useDefault = true
|
|
13
|
+
|
|
14
|
+
[allowlist]
|
|
15
|
+
description = "Project allowlists for documented placeholders and minified libs"
|
|
16
|
+
|
|
17
|
+
# Documentation placeholders for `sk-yambr-...` — these are example tokens
|
|
18
|
+
# in README.md and docs/CLOUD.md illustrating the curl/auth syntax. The
|
|
19
|
+
# real shape is `sk-yambr-<actual-base64>`; the docs use the literal three
|
|
20
|
+
# dots to mark them as placeholders.
|
|
21
|
+
regexes = [
|
|
22
|
+
'''sk-yambr-\.\.\.''',
|
|
23
|
+
'''sk-yambr-<.*>''',
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
# Minified JavaScript bundles routinely contain substrings that resemble
|
|
27
|
+
# entropy-based secret patterns (variable assignments like `t.X=void`).
|
|
28
|
+
# We don't audit minified upstream code via gitleaks — that's a supply-chain
|
|
29
|
+
# concern, not a secrets-in-history concern.
|
|
30
|
+
paths = [
|
|
31
|
+
'''.*\.min\.js$''',
|
|
32
|
+
'''computer-use-server/static/xterm.min.js''',
|
|
33
|
+
# No Helm chart `values.example.yaml` allowlist today — the only
|
|
34
|
+
# chart is helm/computer-use-server/ and it has no example values
|
|
35
|
+
# file. If one ever lands, add a tight per-chart entry here so a
|
|
36
|
+
# future renaming or new chart cannot accidentally activate this
|
|
37
|
+
# allowlist.
|
|
38
|
+
# Legacy buffer — addressed in Layer 13 migration, not by this gate.
|
|
39
|
+
'''docs/future-architecture/.*''',
|
|
40
|
+
# Node modules / venv / planning cache.
|
|
41
|
+
'''node_modules/.*''',
|
|
42
|
+
'''\.venv.*''',
|
|
43
|
+
'''\.planning/.*''',
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
# Stop-words for entropy-based rules — DELIBERATELY EMPTY.
|
|
47
|
+
#
|
|
48
|
+
# Stopwords silence the generic-api-key rule for ANY string containing the
|
|
49
|
+
# stopword as a substring, repo-wide. That is too blunt a tool: a real
|
|
50
|
+
# secret like `password-construct-12345` would be hidden by the stopword
|
|
51
|
+
# `construct`. If a specific file produces noise, allowlist that file's
|
|
52
|
+
# path under `paths` above instead of the substring globally.
|
|
53
|
+
stopwords = []
|