@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.
Files changed (769) hide show
  1. package/.coderabbit.yaml +25 -0
  2. package/.dockerignore +95 -0
  3. package/.env.example +137 -0
  4. package/.githooks/pre-commit +68 -0
  5. package/.github/CODEOWNERS +125 -0
  6. package/.github/ISSUE_TEMPLATE/adr-proposal.md +41 -0
  7. package/.github/ISSUE_TEMPLATE/bug-report.md +49 -0
  8. package/.github/ISSUE_TEMPLATE/component-proposal.md +38 -0
  9. package/.github/ISSUE_TEMPLATE/config.yml +15 -0
  10. package/.github/ISSUE_TEMPLATE/dependency-proposal.md +59 -0
  11. package/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
  12. package/.github/ISSUE_TEMPLATE/nfr-proposal.md +44 -0
  13. package/.github/PULL_REQUEST_TEMPLATE.md +15 -0
  14. package/.github/codeql/codeql-config.yml +11 -0
  15. package/.github/codeql/extensions/security-models/python-sanitizers.model.yml +17 -0
  16. package/.github/codeql/extensions/security-models/qlpack.yml +7 -0
  17. package/.github/dependabot.yml +23 -0
  18. package/.github/security-exceptions.yml +23 -0
  19. package/.github/workflows/build.yml +420 -0
  20. package/.github/workflows/codeql.yml +33 -0
  21. package/.github/workflows/contracts-lint.yml +90 -0
  22. package/.github/workflows/docs-lint.yml +151 -0
  23. package/.github/workflows/helm.yml +131 -0
  24. package/.github/workflows/identity-lint.yml +30 -0
  25. package/.github/workflows/release-chart.yml +177 -0
  26. package/.github/workflows/release.yml +95 -0
  27. package/.github/workflows/security.yml +332 -0
  28. package/.github/workflows/stale.yml +31 -0
  29. package/.github/workflows/supply-chain.yml +242 -0
  30. package/.gitleaks.toml +53 -0
  31. package/.markdownlint.yaml +51 -0
  32. package/.semgrepignore +85 -0
  33. package/.vale/styles/Architecture/ap13-data-class-substrate.yml +12 -0
  34. package/.vale/styles/Architecture/banned-phrases.yml +23 -0
  35. package/.vale/styles/Architecture/banned-vocab.yml +23 -0
  36. package/.vale/styles/Architecture/marketing-tone.yml +19 -0
  37. package/.vale.ini +18 -0
  38. package/CHANGELOG.md +411 -0
  39. package/CLAUDE.md +218 -0
  40. package/CONTRIBUTING.md +82 -0
  41. package/Dockerfile +676 -0
  42. package/LICENSE +98 -0
  43. package/LICENSE-APACHE +202 -0
  44. package/LICENSE-MIT +21 -0
  45. package/NOTICE +36 -0
  46. package/README.md +516 -0
  47. package/SECURITY.md +45 -0
  48. package/THIRD-PARTY-LICENSES.md +14 -0
  49. package/apt-packages.txt +108 -0
  50. package/computer-use-server/.dockerignore +13 -0
  51. package/computer-use-server/Dockerfile +44 -0
  52. package/computer-use-server/README.md +84 -0
  53. package/computer-use-server/app.py +1544 -0
  54. package/computer-use-server/bin/list-subagent-models +449 -0
  55. package/computer-use-server/cli-defaults/README.md +31 -0
  56. package/computer-use-server/cli-defaults/codex.json +7 -0
  57. package/computer-use-server/cli-defaults/opencode.json +18 -0
  58. package/computer-use-server/cli_adapters/__init__.py +46 -0
  59. package/computer-use-server/cli_adapters/claude.py +163 -0
  60. package/computer-use-server/cli_adapters/codex.py +163 -0
  61. package/computer-use-server/cli_adapters/opencode.py +169 -0
  62. package/computer-use-server/cli_adapters/result.py +34 -0
  63. package/computer-use-server/cli_runtime.py +316 -0
  64. package/computer-use-server/context_vars.py +24 -0
  65. package/computer-use-server/docker_manager.py +1100 -0
  66. package/computer-use-server/docs_html.py +12 -0
  67. package/computer-use-server/mcp_resources.py +170 -0
  68. package/computer-use-server/mcp_tools.py +1430 -0
  69. package/computer-use-server/requirements.txt +17 -0
  70. package/computer-use-server/security.py +50 -0
  71. package/computer-use-server/skill_manager.py +664 -0
  72. package/computer-use-server/static/browser-viewer.js +445 -0
  73. package/computer-use-server/static/chart.umd.js +14 -0
  74. package/computer-use-server/static/docs.html +203 -0
  75. package/computer-use-server/static/github-dark.min.css +10 -0
  76. package/computer-use-server/static/github.min.css +10 -0
  77. package/computer-use-server/static/highlight.min.js +1213 -0
  78. package/computer-use-server/static/highlightjs-line-numbers.min.js +1 -0
  79. package/computer-use-server/static/icons.js +74 -0
  80. package/computer-use-server/static/jszip.min.js +13 -0
  81. package/computer-use-server/static/katex/auto-render.min.js +1 -0
  82. package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  83. package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  84. package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  85. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  86. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  87. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  88. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  89. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  90. package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  91. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  92. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  93. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  94. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  95. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  96. package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  97. package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  98. package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  99. package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  100. package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  101. package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  102. package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  103. package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  104. package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  105. package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  106. package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  107. package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  108. package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  109. package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  110. package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  111. package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  112. package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  113. package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  114. package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  115. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  116. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  117. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  118. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  119. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  120. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  121. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  122. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  123. package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  124. package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  125. package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  126. package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  127. package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  128. package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  129. package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  130. package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  131. package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  132. package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  133. package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  134. package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  135. package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  136. package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  137. package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  138. package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  139. package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  140. package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  141. package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  142. package/computer-use-server/static/katex/katex.min.css +1 -0
  143. package/computer-use-server/static/katex/katex.min.js +1 -0
  144. package/computer-use-server/static/locale.js +242 -0
  145. package/computer-use-server/static/mammoth.browser.min.js +21 -0
  146. package/computer-use-server/static/marked.min.js +6 -0
  147. package/computer-use-server/static/mermaid.min.js +2811 -0
  148. package/computer-use-server/static/pdf.min.js +22 -0
  149. package/computer-use-server/static/pdf.worker.min.js +22 -0
  150. package/computer-use-server/static/pptxviewjs.min.js +1 -0
  151. package/computer-use-server/static/preact-htm.min.js +1 -0
  152. package/computer-use-server/static/preview.css +1030 -0
  153. package/computer-use-server/static/preview.js +1522 -0
  154. package/computer-use-server/static/xlsx.full.min.js +22 -0
  155. package/computer-use-server/static/xterm-addon-fit.min.js +2 -0
  156. package/computer-use-server/static/xterm-addon-web-links.min.js +2 -0
  157. package/computer-use-server/static/xterm.css +218 -0
  158. package/computer-use-server/static/xterm.min.js +2 -0
  159. package/computer-use-server/system_prompt.py +761 -0
  160. package/computer-use-server/uploads.py +82 -0
  161. package/contracts/README.md +53 -0
  162. package/contracts/audit/audit-fanin.asyncapi.yaml +407 -0
  163. package/contracts/exec/exec-channel.schema.json +240 -0
  164. package/contracts/mcp/2025-06-18/ocu-constraints.schema.json +178 -0
  165. package/contracts/storage/file-artifact-api.schema.json +390 -0
  166. package/contracts/storage/file-ops.schema.json +217 -0
  167. package/contracts/storage/mount-config.schema.json +197 -0
  168. package/cron/Dockerfile +15 -0
  169. package/cron/cleanup-quick.sh +21 -0
  170. package/cron/cleanup.sh +127 -0
  171. package/data/outputs/.gitkeep +0 -0
  172. package/data/uploads/.gitkeep +0 -0
  173. package/docker-compose.test.yml +54 -0
  174. package/docker-compose.webui.yml +77 -0
  175. package/docker-compose.yml +96 -0
  176. package/docs/CLOUD.md +29 -0
  177. package/docs/COMPARISON.md +128 -0
  178. package/docs/DOCKER.md +469 -0
  179. package/docs/DYNAMIC-SKILLS.md +77 -0
  180. package/docs/FEATURES.md +100 -0
  181. package/docs/INSTALL.md +111 -0
  182. package/docs/KNOWN-BUGS.md +86 -0
  183. package/docs/MCP.md +320 -0
  184. package/docs/SCREENSHOTS.md +39 -0
  185. package/docs/SKILLS-USER-GUIDE.md +86 -0
  186. package/docs/SKILLS.md +483 -0
  187. package/docs/TERMINAL-TAB.md +56 -0
  188. package/docs/architecture/02-trust-boundaries.md +224 -0
  189. package/docs/architecture/03-c4-context.md +61 -0
  190. package/docs/architecture/04-bounded-contexts.md +119 -0
  191. package/docs/architecture/05-c4-container.md +88 -0
  192. package/docs/architecture/06-threat-model.md +172 -0
  193. package/docs/architecture/08-contracts.md +105 -0
  194. package/docs/architecture/MANIFESTO.md +38 -0
  195. package/docs/architecture/PROCESS.md +64 -0
  196. package/docs/architecture/README.md +37 -0
  197. package/docs/architecture/adr/0000-template.md +65 -0
  198. package/docs/architecture/adr/0001-layer-0-gate-legacy-exclusion.md +75 -0
  199. package/docs/architecture/adr/0002-session-view-descriptor.md +57 -0
  200. package/docs/architecture/adr/0003-sandbox-runtime-tier-ladder.md +63 -0
  201. package/docs/architecture/adr/0004-operator-authentication-substrate.md +63 -0
  202. package/docs/architecture/adr/0005-egress-credential-delivery-envoy-sds.md +62 -0
  203. package/docs/architecture/adr/0006-egress-forward-proxy-substrate.md +65 -0
  204. package/docs/architecture/adr/0007-egress-auth-mechanism.md +72 -0
  205. package/docs/architecture/adr/0008-session-egress-attribution.md +59 -0
  206. package/docs/architecture/adr/0009-audit-pipeline-pluggable-by-contract.md +76 -0
  207. package/docs/architecture/adr/0010-storage-backend-pluggable-adapter.md +60 -0
  208. package/docs/architecture/adr/0011-storage-egress-lane.md +67 -0
  209. package/docs/architecture/adr/0012-implementation-language.md +67 -0
  210. package/docs/architecture/adr/0020-sandbox-image-provisioning.md +82 -0
  211. package/docs/architecture/adr/README.md +53 -0
  212. package/docs/architecture/compliance/.gitkeep +0 -0
  213. package/docs/architecture/components/00-overview.md +42 -0
  214. package/docs/architecture/components/0000-template.md +50 -0
  215. package/docs/architecture/components/01-mcp-gateway.md +80 -0
  216. package/docs/architecture/components/02-control-operator-api.md +80 -0
  217. package/docs/architecture/components/04-storage-broker.md +104 -0
  218. package/docs/architecture/components/05-session-sandbox.md +93 -0
  219. package/docs/architecture/components/06-egress-trust-edge.md +95 -0
  220. package/docs/architecture/components/07-audit-pipeline.md +110 -0
  221. package/docs/architecture/diagrams/.gitkeep +0 -0
  222. package/docs/architecture/diagrams/02-trust-boundaries.mmd +111 -0
  223. package/docs/architecture/diagrams/06-threat-model.mmd +41 -0
  224. package/docs/architecture/diagrams/08-contracts.mmd +47 -0
  225. package/docs/architecture/diagrams/c4-container.mmd +59 -0
  226. package/docs/architecture/diagrams/c4-context.mmd +46 -0
  227. package/docs/architecture/glossary.md +172 -0
  228. package/docs/architecture/manifesto/.gitkeep +0 -0
  229. package/docs/architecture/manifesto/01-audience-and-buyer.md +57 -0
  230. package/docs/architecture/manifesto/02-nfrs.md +325 -0
  231. package/docs/architecture/manifesto/03-non-negotiables.md +35 -0
  232. package/docs/architecture/manifesto/04-non-goals.md +23 -0
  233. package/docs/architecture/manifesto/05-licensing-posture.md +61 -0
  234. package/docs/architecture/manifesto/06-starter-mode-policy.md +49 -0
  235. package/docs/architecture/manifesto/07-governance.md +60 -0
  236. package/docs/architecture/primitives-backlog.md +51 -0
  237. package/docs/architecture.svg +117 -0
  238. package/docs/claude-code-gateway.md +173 -0
  239. package/docs/cli-config-templates.md +240 -0
  240. package/docs/data-flow.svg +72 -0
  241. package/docs/demo-landing-page.gif +0 -0
  242. package/docs/demo-qwen-trending.gif +0 -0
  243. package/docs/dynamic-skills.svg +77 -0
  244. package/docs/file-flow.svg +126 -0
  245. package/docs/future-architecture/README.md +152 -0
  246. package/docs/future-architecture/adr/0001-control-plane-language-go.md +80 -0
  247. package/docs/future-architecture/adr/0002-guest-agent-language-go.md +84 -0
  248. package/docs/future-architecture/adr/0003-docker-poc-first-then-k8s.md +37 -0
  249. package/docs/future-architecture/adr/0004-pluggable-runtime-via-runtimeclass.md +34 -0
  250. package/docs/future-architecture/adr/0005-mcp-as-control-plane-gateway.md +34 -0
  251. package/docs/future-architecture/adr/0006-no-agpl-no-bsl-dependencies.md +41 -0
  252. package/docs/future-architecture/adr/0007-superseded-by-future-architecture.md +37 -0
  253. package/docs/future-architecture/adr/0008-internal-grpc-external-rest-mcp.md +106 -0
  254. package/docs/future-architecture/adr/0009-external-protocol-dialects.md +94 -0
  255. package/docs/future-architecture/adr/0010-lambda-as-inspiration-not-runtime.md +86 -0
  256. package/docs/future-architecture/adr/0011-kata-as-first-class-dind-runtime.md +84 -0
  257. package/docs/future-architecture/antipatterns.md +552 -0
  258. package/docs/future-architecture/architecture/01-layers.md +109 -0
  259. package/docs/future-architecture/architecture/02-layer4-control-plane.md +122 -0
  260. package/docs/future-architecture/architecture/03-layer3-providers.md +174 -0
  261. package/docs/future-architecture/architecture/04-layer2-runtimes.md +114 -0
  262. package/docs/future-architecture/architecture/04b-credential-broker.md +153 -0
  263. package/docs/future-architecture/architecture/05-layer1-guest-agent.md +138 -0
  264. package/docs/future-architecture/architecture/06-storage.md +134 -0
  265. package/docs/future-architecture/architecture/07-security.md +194 -0
  266. package/docs/future-architecture/architecture/08-networking.md +149 -0
  267. package/docs/future-architecture/architecture/09-templates.md +122 -0
  268. package/docs/future-architecture/architecture/10-observability.md +121 -0
  269. package/docs/future-architecture/design-notes.md +72 -0
  270. package/docs/future-architecture/gaps.md +281 -0
  271. package/docs/future-architecture/phase-template.md +123 -0
  272. package/docs/future-architecture/references.md +225 -0
  273. package/docs/future-architecture/research/01-kata-containers.md +100 -0
  274. package/docs/future-architecture/research/02-e2b-infra.md +133 -0
  275. package/docs/future-architecture/research/03-coder.md +115 -0
  276. package/docs/future-architecture/research/04-cloud-hypervisor.md +99 -0
  277. package/docs/future-architecture/research/05-firecracker.md +114 -0
  278. package/docs/future-architecture/research/06-agent-sandbox.md +142 -0
  279. package/docs/future-architecture/research/07-chromedp.md +78 -0
  280. package/docs/future-architecture/research/08-microsandbox.md +78 -0
  281. package/docs/future-architecture/research/09-agentbox.md +135 -0
  282. package/docs/future-architecture/research/10-sysbox.md +100 -0
  283. package/docs/future-architecture/research/11-firecracker-containerd.md +93 -0
  284. package/docs/future-architecture/research/12-docker-socket-proxy.md +59 -0
  285. package/docs/future-architecture/research/14-e2b-desktop-and-surf.md +107 -0
  286. package/docs/future-architecture/research/18-open-webui-terminals-observed.md +135 -0
  287. package/docs/future-architecture/research/bank-buyer.md +96 -0
  288. package/docs/future-architecture/research/enthusiast-audience.md +106 -0
  289. package/docs/future-architecture/research/proof-uipath-anthropic-2026-05.md +76 -0
  290. package/docs/future-architecture/research/widemoat-thesis-advisor.md +124 -0
  291. package/docs/future-architecture/roadmap.md +438 -0
  292. package/docs/kata-runtime.md +267 -0
  293. package/docs/kubernetes.md +86 -0
  294. package/docs/logo.png +0 -0
  295. package/docs/multi-cli.md +161 -0
  296. package/docs/openwebui-filter.md +134 -0
  297. package/docs/roadmap/implementation-roadmap.md +104 -0
  298. package/docs/sandbox-contents.svg +229 -0
  299. package/docs/screenshots/01-create-document.png +0 -0
  300. package/docs/screenshots/02-file-preview.png +0 -0
  301. package/docs/screenshots/03-browser-viewer.png +0 -0
  302. package/docs/screenshots/04-sub-agent-terminal.png +0 -0
  303. package/docs/screenshots/05-chat-overview.png +0 -0
  304. package/docs/screenshots/06-sub-agent-dashboard.png +0 -0
  305. package/docs/screenshots/07-frontend-design-skill.png +0 -0
  306. package/docs/screenshots/08-pptx-skill.png +0 -0
  307. package/docs/screenshots/09-skill-creator.png +0 -0
  308. package/docs/screenshots/10-data-chart.png +0 -0
  309. package/docs/shared-browser.svg +102 -0
  310. package/docs/system-prompt.md +113 -0
  311. package/docs/terminal-flow.svg +69 -0
  312. package/examples/helm/README.md +20 -0
  313. package/examples/helm/standalone/values.yaml +49 -0
  314. package/examples/helm/with-open-webui/README.md +99 -0
  315. package/examples/helm/with-open-webui/values-computer-use.yaml +32 -0
  316. package/examples/helm/with-open-webui/values-open-webui.yaml +67 -0
  317. package/fonts/NotoEmoji-Regular.ttf +0 -0
  318. package/helm/computer-use-server/.helmignore +17 -0
  319. package/helm/computer-use-server/Chart.yaml +32 -0
  320. package/helm/computer-use-server/README.md +211 -0
  321. package/helm/computer-use-server/templates/NOTES.txt +66 -0
  322. package/helm/computer-use-server/templates/_helpers.tpl +115 -0
  323. package/helm/computer-use-server/templates/configmap-dind-init.yaml +82 -0
  324. package/helm/computer-use-server/templates/configmap.yaml +18 -0
  325. package/helm/computer-use-server/templates/deployment.yaml +248 -0
  326. package/helm/computer-use-server/templates/ingress.yaml +38 -0
  327. package/helm/computer-use-server/templates/networkpolicy.yaml +50 -0
  328. package/helm/computer-use-server/templates/pdb.yaml +16 -0
  329. package/helm/computer-use-server/templates/pvc-data.yaml +20 -0
  330. package/helm/computer-use-server/templates/pvc-skills-cache.yaml +20 -0
  331. package/helm/computer-use-server/templates/pvc-user-data.yaml +20 -0
  332. package/helm/computer-use-server/templates/pvc-var-lib-docker.yaml +27 -0
  333. package/helm/computer-use-server/templates/secret.yaml +23 -0
  334. package/helm/computer-use-server/templates/service.yaml +22 -0
  335. package/helm/computer-use-server/templates/serviceaccount.yaml +15 -0
  336. package/helm/computer-use-server/templates/tests/test-health.yaml +23 -0
  337. package/helm/computer-use-server/values.schema.json +183 -0
  338. package/helm/computer-use-server/values.yaml +297 -0
  339. package/lychee.toml +36 -0
  340. package/openwebui/Dockerfile +52 -0
  341. package/openwebui/README.md +38 -0
  342. package/openwebui/functions/README.md +48 -0
  343. package/openwebui/functions/computer_link_filter.py +487 -0
  344. package/openwebui/init.sh +305 -0
  345. package/openwebui/patches/README.md +44 -0
  346. package/openwebui/patches/fix_artifacts_auto_show.py +441 -0
  347. package/openwebui/patches/fix_attached_files_position.py +87 -0
  348. package/openwebui/patches/fix_large_tool_args.py +156 -0
  349. package/openwebui/patches/fix_large_tool_results.py +289 -0
  350. package/openwebui/patches/fix_preview_url_detection.py +230 -0
  351. package/openwebui/patches/fix_skip_embedding_chat_files.py +229 -0
  352. package/openwebui/patches/fix_skip_rag_files_native_fc.py +100 -0
  353. package/openwebui/patches/fix_tool_loop_errors.py +510 -0
  354. package/package.json +39 -0
  355. package/requirements.txt +112 -0
  356. package/scripts/check-config.sh +141 -0
  357. package/scripts/docs-lint/ai-slop-detector.sh +202 -0
  358. package/scripts/docs-lint/architecture-tree-whitelist.sh +131 -0
  359. package/scripts/docs-lint/ascii-diagram-detector.sh +58 -0
  360. package/scripts/docs-lint/front-matter-validator.sh +97 -0
  361. package/scripts/docs-lint/gitignored-ref-detector.sh +122 -0
  362. package/scripts/docs-lint/identity-email-detector.sh +48 -0
  363. package/scripts/docs-lint/test-linters.sh +354 -0
  364. package/scripts/docs-lint/wc-budget.sh +61 -0
  365. package/scripts/githooks/pre-push +75 -0
  366. package/server.json +13 -0
  367. package/settings-wrapper/Dockerfile +9 -0
  368. package/settings-wrapper/README.md +119 -0
  369. package/settings-wrapper/app.py +113 -0
  370. package/settings-wrapper/requirements.txt +2 -0
  371. package/settings-wrapper/skills.json +25 -0
  372. package/skills/README.md +46 -0
  373. package/skills/examples/algorithmic-art/SKILL.md +405 -0
  374. package/skills/examples/algorithmic-art/templates/generator_template.js +223 -0
  375. package/skills/examples/algorithmic-art/templates/viewer.html +601 -0
  376. package/skills/examples/artifacts-builder/SKILL.md +74 -0
  377. package/skills/examples/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  378. package/skills/examples/artifacts-builder/scripts/init-artifact.sh +322 -0
  379. package/skills/examples/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  380. package/skills/examples/canvas-design/LICENSE.txt +202 -0
  381. package/skills/examples/canvas-design/SKILL.md +130 -0
  382. package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  383. package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  384. package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  385. package/skills/examples/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  386. package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  387. package/skills/examples/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  388. package/skills/examples/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  389. package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  390. package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  391. package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  392. package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  393. package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  394. package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  395. package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  396. package/skills/examples/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  397. package/skills/examples/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  398. package/skills/examples/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  399. package/skills/examples/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  400. package/skills/examples/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  401. package/skills/examples/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  402. package/skills/examples/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  403. package/skills/examples/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  404. package/skills/examples/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  405. package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  406. package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  407. package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  408. package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  409. package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  410. package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  411. package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  412. package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  413. package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  414. package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  415. package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  416. package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  417. package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  418. package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  419. package/skills/examples/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  420. package/skills/examples/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  421. package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  422. package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  423. package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  424. package/skills/examples/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  425. package/skills/examples/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  426. package/skills/examples/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  427. package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  428. package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  429. package/skills/examples/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  430. package/skills/examples/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  431. package/skills/examples/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  432. package/skills/examples/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  433. package/skills/examples/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  434. package/skills/examples/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  435. package/skills/examples/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  436. package/skills/examples/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  437. package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  438. package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  439. package/skills/examples/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  440. package/skills/examples/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  441. package/skills/examples/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  442. package/skills/examples/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  443. package/skills/examples/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  444. package/skills/examples/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  445. package/skills/examples/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  446. package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  447. package/skills/examples/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  448. package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  449. package/skills/examples/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  450. package/skills/examples/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  451. package/skills/examples/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  452. package/skills/examples/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  453. package/skills/examples/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  454. package/skills/examples/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  455. package/skills/examples/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  456. package/skills/examples/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  457. package/skills/examples/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  458. package/skills/examples/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  459. package/skills/examples/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  460. package/skills/examples/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  461. package/skills/examples/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  462. package/skills/examples/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  463. package/skills/examples/copy-editing/SKILL.md +447 -0
  464. package/skills/examples/copy-editing/evals/evals.json +89 -0
  465. package/skills/examples/copy-editing/references/plain-english-alternatives.md +394 -0
  466. package/skills/examples/internal-comms/LICENSE.txt +202 -0
  467. package/skills/examples/internal-comms/SKILL.md +32 -0
  468. package/skills/examples/internal-comms/examples/3p-updates.md +47 -0
  469. package/skills/examples/internal-comms/examples/company-newsletter.md +65 -0
  470. package/skills/examples/internal-comms/examples/faq-answers.md +30 -0
  471. package/skills/examples/internal-comms/examples/general-comms.md +16 -0
  472. package/skills/examples/mcp-builder/SKILL.md +328 -0
  473. package/skills/examples/mcp-builder/reference/evaluation.md +602 -0
  474. package/skills/examples/mcp-builder/reference/mcp_best_practices.md +915 -0
  475. package/skills/examples/mcp-builder/reference/node_mcp_server.md +916 -0
  476. package/skills/examples/mcp-builder/reference/python_mcp_server.md +752 -0
  477. package/skills/examples/mcp-builder/scripts/connections.py +151 -0
  478. package/skills/examples/mcp-builder/scripts/evaluation.py +373 -0
  479. package/skills/examples/mcp-builder/scripts/example_evaluation.xml +22 -0
  480. package/skills/examples/mcp-builder/scripts/requirements.txt +2 -0
  481. package/skills/examples/product-marketing-context/SKILL.md +241 -0
  482. package/skills/examples/product-marketing-context/evals/evals.json +85 -0
  483. package/skills/examples/single-cell-rna-qc/SKILL.md +175 -0
  484. package/skills/examples/single-cell-rna-qc/references/scverse_qc_guidelines.md +186 -0
  485. package/skills/examples/single-cell-rna-qc/scripts/qc_analysis.py +232 -0
  486. package/skills/examples/single-cell-rna-qc/scripts/qc_core.py +233 -0
  487. package/skills/examples/single-cell-rna-qc/scripts/qc_plotting.py +235 -0
  488. package/skills/examples/skill-creator/SKILL.md +355 -0
  489. package/skills/examples/skill-creator/references/output-patterns.md +82 -0
  490. package/skills/examples/skill-creator/references/workflows.md +28 -0
  491. package/skills/examples/skill-creator/scripts/init_skill.py +303 -0
  492. package/skills/examples/skill-creator/scripts/package_skill.py +110 -0
  493. package/skills/examples/skill-creator/scripts/quick_validate.py +95 -0
  494. package/skills/examples/slack-gif-creator/SKILL.md +254 -0
  495. package/skills/examples/slack-gif-creator/core/easing.py +234 -0
  496. package/skills/examples/slack-gif-creator/core/frame_composer.py +176 -0
  497. package/skills/examples/slack-gif-creator/core/gif_builder.py +269 -0
  498. package/skills/examples/slack-gif-creator/core/validators.py +136 -0
  499. package/skills/examples/slack-gif-creator/requirements.txt +4 -0
  500. package/skills/examples/social-content/SKILL.md +278 -0
  501. package/skills/examples/social-content/evals/evals.json +92 -0
  502. package/skills/examples/social-content/references/platforms.md +170 -0
  503. package/skills/examples/social-content/references/post-templates.md +177 -0
  504. package/skills/examples/social-content/references/reverse-engineering.md +195 -0
  505. package/skills/examples/theme-factory/SKILL.md +59 -0
  506. package/skills/examples/theme-factory/theme-showcase.pdf +0 -0
  507. package/skills/examples/theme-factory/themes/arctic-frost.md +19 -0
  508. package/skills/examples/theme-factory/themes/botanical-garden.md +19 -0
  509. package/skills/examples/theme-factory/themes/desert-rose.md +19 -0
  510. package/skills/examples/theme-factory/themes/forest-canopy.md +19 -0
  511. package/skills/examples/theme-factory/themes/golden-hour.md +19 -0
  512. package/skills/examples/theme-factory/themes/midnight-galaxy.md +19 -0
  513. package/skills/examples/theme-factory/themes/modern-minimalist.md +19 -0
  514. package/skills/examples/theme-factory/themes/ocean-depths.md +19 -0
  515. package/skills/examples/theme-factory/themes/sunset-boulevard.md +19 -0
  516. package/skills/examples/theme-factory/themes/tech-innovation.md +19 -0
  517. package/skills/examples/web-artifacts-builder/LICENSE.txt +202 -0
  518. package/skills/examples/web-artifacts-builder/SKILL.md +74 -0
  519. package/skills/examples/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  520. package/skills/examples/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  521. package/skills/examples/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  522. package/skills/examples/writing-skills/SKILL.md +655 -0
  523. package/skills/examples/writing-skills/anthropic-best-practices.md +1150 -0
  524. package/skills/examples/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  525. package/skills/examples/writing-skills/graphviz-conventions.dot +172 -0
  526. package/skills/examples/writing-skills/persuasion-principles.md +187 -0
  527. package/skills/examples/writing-skills/render-graphs.js +168 -0
  528. package/skills/examples/writing-skills/testing-skills-with-subagents.md +384 -0
  529. package/skills/public/describe-image/SKILL.md +105 -0
  530. package/skills/public/describe-image/scripts/describe.py +389 -0
  531. package/skills/public/doc-coauthoring/SKILL.md +375 -0
  532. package/skills/public/docx/LICENSE.txt +30 -0
  533. package/skills/public/docx/SKILL.md +199 -0
  534. package/skills/public/docx/docx-js.md +350 -0
  535. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  536. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  537. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  538. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  539. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  540. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  541. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  542. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  543. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  544. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  545. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  546. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  547. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  548. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  549. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  550. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  551. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  552. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  553. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  554. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  555. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  556. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  557. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  558. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  559. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  560. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  561. package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  562. package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  563. package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  564. package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  565. package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  566. package/skills/public/docx/ooxml/schemas/mce/mc.xsd +75 -0
  567. package/skills/public/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  568. package/skills/public/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  569. package/skills/public/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  570. package/skills/public/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  571. package/skills/public/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  572. package/skills/public/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  573. package/skills/public/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  574. package/skills/public/docx/ooxml/scripts/pack.py +159 -0
  575. package/skills/public/docx/ooxml/scripts/unpack.py +29 -0
  576. package/skills/public/docx/ooxml/scripts/validate.py +69 -0
  577. package/skills/public/docx/ooxml/scripts/validation/__init__.py +15 -0
  578. package/skills/public/docx/ooxml/scripts/validation/base.py +951 -0
  579. package/skills/public/docx/ooxml/scripts/validation/docx.py +274 -0
  580. package/skills/public/docx/ooxml/scripts/validation/pptx.py +315 -0
  581. package/skills/public/docx/ooxml/scripts/validation/redlining.py +279 -0
  582. package/skills/public/docx/ooxml.md +632 -0
  583. package/skills/public/docx/scripts/__init__.py +1 -0
  584. package/skills/public/docx/scripts/document.py +1292 -0
  585. package/skills/public/docx/scripts/templates/comments.xml +3 -0
  586. package/skills/public/docx/scripts/templates/commentsExtended.xml +3 -0
  587. package/skills/public/docx/scripts/templates/commentsExtensible.xml +3 -0
  588. package/skills/public/docx/scripts/templates/commentsIds.xml +3 -0
  589. package/skills/public/docx/scripts/templates/people.xml +3 -0
  590. package/skills/public/docx/scripts/utilities.py +374 -0
  591. package/skills/public/file-reading/LICENSE.txt +30 -0
  592. package/skills/public/file-reading/SKILL.md +350 -0
  593. package/skills/public/frontend-design/LICENSE.txt +177 -0
  594. package/skills/public/frontend-design/SKILL.md +42 -0
  595. package/skills/public/gitlab-explorer/SKILL.md +174 -0
  596. package/skills/public/gitlab-explorer/references/git-commands.md +323 -0
  597. package/skills/public/gitlab-explorer/references/glab-commands.md +282 -0
  598. package/skills/public/gitlab-explorer/scripts/check_gitlab_auth.sh +109 -0
  599. package/skills/public/pdf/FORMS.md +205 -0
  600. package/skills/public/pdf/REFERENCE.md +612 -0
  601. package/skills/public/pdf/SKILL.md +364 -0
  602. package/skills/public/pdf/scripts/check_bounding_boxes.py +70 -0
  603. package/skills/public/pdf/scripts/check_bounding_boxes_test.py +226 -0
  604. package/skills/public/pdf/scripts/check_fillable_fields.py +12 -0
  605. package/skills/public/pdf/scripts/convert_pdf_to_images.py +35 -0
  606. package/skills/public/pdf/scripts/create_validation_image.py +41 -0
  607. package/skills/public/pdf/scripts/extract_form_field_info.py +152 -0
  608. package/skills/public/pdf/scripts/fill_fillable_fields.py +114 -0
  609. package/skills/public/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  610. package/skills/public/pdf-reading/LICENSE.txt +30 -0
  611. package/skills/public/pdf-reading/REFERENCE.md +196 -0
  612. package/skills/public/pdf-reading/SKILL.md +305 -0
  613. package/skills/public/playwright-cli/SKILL.md +278 -0
  614. package/skills/public/playwright-cli/references/request-mocking.md +87 -0
  615. package/skills/public/playwright-cli/references/running-code.md +232 -0
  616. package/skills/public/playwright-cli/references/session-management.md +169 -0
  617. package/skills/public/playwright-cli/references/storage-state.md +275 -0
  618. package/skills/public/playwright-cli/references/test-generation.md +88 -0
  619. package/skills/public/playwright-cli/references/tracing.md +139 -0
  620. package/skills/public/playwright-cli/references/video-recording.md +43 -0
  621. package/skills/public/pptx/LICENSE.txt +30 -0
  622. package/skills/public/pptx/SKILL.md +484 -0
  623. package/skills/public/pptx/css.md +335 -0
  624. package/skills/public/pptx/html2pptx.md +893 -0
  625. package/skills/public/pptx/html2pptx.tgz +0 -0
  626. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  627. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  628. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  629. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  630. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  631. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  632. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  633. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  634. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  635. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  636. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  637. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  638. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  639. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  640. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  641. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  642. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  643. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  644. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  645. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  646. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  647. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  648. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  649. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  650. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  651. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  652. package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  653. package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  654. package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  655. package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  656. package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  657. package/skills/public/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  658. package/skills/public/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  659. package/skills/public/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  660. package/skills/public/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  661. package/skills/public/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  662. package/skills/public/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  663. package/skills/public/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  664. package/skills/public/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  665. package/skills/public/pptx/ooxml/scripts/pack.py +159 -0
  666. package/skills/public/pptx/ooxml/scripts/unpack.py +29 -0
  667. package/skills/public/pptx/ooxml/scripts/validate.py +69 -0
  668. package/skills/public/pptx/ooxml/scripts/validation/__init__.py +15 -0
  669. package/skills/public/pptx/ooxml/scripts/validation/base.py +951 -0
  670. package/skills/public/pptx/ooxml/scripts/validation/docx.py +274 -0
  671. package/skills/public/pptx/ooxml/scripts/validation/pptx.py +315 -0
  672. package/skills/public/pptx/ooxml/scripts/validation/redlining.py +279 -0
  673. package/skills/public/pptx/ooxml.md +427 -0
  674. package/skills/public/pptx/scripts/inventory.py +1020 -0
  675. package/skills/public/pptx/scripts/rearrange.py +231 -0
  676. package/skills/public/pptx/scripts/replace.py +385 -0
  677. package/skills/public/pptx/scripts/thumbnail.py +450 -0
  678. package/skills/public/skill-creator/SKILL.md +356 -0
  679. package/skills/public/skill-creator/references/output-patterns.md +82 -0
  680. package/skills/public/skill-creator/references/workflows.md +28 -0
  681. package/skills/public/skill-creator/scripts/init_skill.py +303 -0
  682. package/skills/public/skill-creator/scripts/package_skill.py +110 -0
  683. package/skills/public/skill-creator/scripts/quick_validate.py +95 -0
  684. package/skills/public/sub-agent/SKILL.md +186 -0
  685. package/skills/public/sub-agent/references/security-review.md +153 -0
  686. package/skills/public/sub-agent/references/usage.md +207 -0
  687. package/skills/public/sub-agent/scripts/list_subagent_models.sh +22 -0
  688. package/skills/public/test-driven-development/SKILL.md +371 -0
  689. package/skills/public/test-driven-development/testing-anti-patterns.md +299 -0
  690. package/skills/public/webapp-testing/LICENSE.txt +202 -0
  691. package/skills/public/webapp-testing/SKILL.md +96 -0
  692. package/skills/public/webapp-testing/examples/console_logging.py +35 -0
  693. package/skills/public/webapp-testing/examples/element_discovery.py +40 -0
  694. package/skills/public/webapp-testing/examples/static_html_automation.py +33 -0
  695. package/skills/public/webapp-testing/scripts/with_server.py +106 -0
  696. package/skills/public/xlsx/LICENSE.txt +30 -0
  697. package/skills/public/xlsx/SKILL.md +316 -0
  698. package/skills/public/xlsx/preview_data.py +93 -0
  699. package/skills/public/xlsx/recalc.py +178 -0
  700. package/tests/README.md +42 -0
  701. package/tests/fixtures/cli/claude_v0.9.2.0_argv.json +46 -0
  702. package/tests/fixtures/cli/claude_v0.9.2.0_stdout.json +32 -0
  703. package/tests/fixtures/cli/codex_run.jsonl +4 -0
  704. package/tests/fixtures/cli/opencode_run.jsonl +6 -0
  705. package/tests/integration/README.md +56 -0
  706. package/tests/integration/conftest.py +280 -0
  707. package/tests/integration/pytest.ini +13 -0
  708. package/tests/integration/test_mcp_auth.py +85 -0
  709. package/tests/integration/test_mcp_tools.py +101 -0
  710. package/tests/integration/test_workspace_lifecycle.py +125 -0
  711. package/tests/orchestrator/mock_llm_server.py +343 -0
  712. package/tests/orchestrator/test_cli_adapters.py +566 -0
  713. package/tests/orchestrator/test_cli_adapters_live.py +527 -0
  714. package/tests/orchestrator/test_cli_runtime.py +451 -0
  715. package/tests/orchestrator/test_docker_manager.py +302 -0
  716. package/tests/orchestrator/test_dynamic_instructions.py +69 -0
  717. package/tests/orchestrator/test_mcp_resources.py +140 -0
  718. package/tests/orchestrator/test_mcp_tools.py +224 -0
  719. package/tests/orchestrator/test_passthrough_isolation.py +201 -0
  720. package/tests/orchestrator/test_readme_in_container.py +76 -0
  721. package/tests/orchestrator/test_render_cache.py +84 -0
  722. package/tests/orchestrator/test_runtime_cli_endpoint.py +108 -0
  723. package/tests/orchestrator/test_single_user_mode.py +212 -0
  724. package/tests/orchestrator/test_startup_warnings.py +123 -0
  725. package/tests/orchestrator/test_sub_agent_dispatch.py +327 -0
  726. package/tests/orchestrator/test_subagent_claude_compat.py +367 -0
  727. package/tests/orchestrator/test_system_prompt_endpoint.py +191 -0
  728. package/tests/orchestrator/test_tool_descriptions.py +52 -0
  729. package/tests/orchestrator/test_view_image.py +201 -0
  730. package/tests/patches/conftest.py +30 -0
  731. package/tests/patches/fixtures/__init__.py +10 -0
  732. package/tests/patches/fixtures/middleware_v0.9.1.py +5057 -0
  733. package/tests/patches/fixtures/middleware_v0.9.2.py +5120 -0
  734. package/tests/patches/fixtures/retrieval_v0.9.1.py +2684 -0
  735. package/tests/patches/fixtures/retrieval_v0.9.2.py +2700 -0
  736. package/tests/patches/test_fix_attached_files_position.py +118 -0
  737. package/tests/patches/test_fix_large_tool_args.py +130 -0
  738. package/tests/patches/test_fix_large_tool_results.py +531 -0
  739. package/tests/patches/test_fix_skip_embedding_chat_files.py +160 -0
  740. package/tests/patches/test_fix_skip_rag_files_native_fc.py +120 -0
  741. package/tests/patches/test_fix_tool_loop_errors.py +128 -0
  742. package/tests/security/test_path_traversal_app.py +132 -0
  743. package/tests/security/test_path_traversal_docker.py +36 -0
  744. package/tests/security/test_path_traversal_settings.py +87 -0
  745. package/tests/security/test_safe_path_util.py +166 -0
  746. package/tests/security/test_xss_preview.py +46 -0
  747. package/tests/test-default-model-resolution.py +136 -0
  748. package/tests/test-docker-image.sh +358 -0
  749. package/tests/test-list-subagent-models.sh +421 -0
  750. package/tests/test-mcp-endpoint-live.sh +92 -0
  751. package/tests/test-mcp-native-surface.sh +213 -0
  752. package/tests/test-no-cyrillic.sh +135 -0
  753. package/tests/test-opencode-error-mapping.py +130 -0
  754. package/tests/test-pr88-skills.sh +305 -0
  755. package/tests/test-project-structure.sh +202 -0
  756. package/tests/test-single-user-mode.sh +269 -0
  757. package/tests/test-skill-no-hardcoded-models.sh +65 -0
  758. package/tests/test-subagent-cli-surface.py +137 -0
  759. package/tests/test-subagent-runtime.sh +109 -0
  760. package/tests/test_codex_toml_converter.py +204 -0
  761. package/tests/test_default_resolver_no_legacy_global.py +159 -0
  762. package/tests/test_filter.py +648 -0
  763. package/tests/test_init_sh_unchanged.sh +49 -0
  764. package/tests/test_opencode_alias_map_drop.py +144 -0
  765. package/tests/test_requirements.py +91 -0
  766. package/tests/test_subagent_docstring.py +193 -0
  767. package/tests/test_tools.py +34 -0
  768. package/vendor/extract-text/README.md +46 -0
  769. 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 = []