@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,110 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ ---
5
+ status: draft
6
+ last-reviewed: 2026-06-06
7
+ owner: "@Wide-Moat/architects"
8
+ applies-to: next/v1
9
+ compliance: []
10
+ threat-model: 06-threat-model.md
11
+ contract: contracts/audit/audit-fanin.asyncapi.yaml
12
+ adr: [0009]
13
+ ---
14
+
15
+ Internal design of the Audit pipeline container: how host-attested source events fan into one hash-linked durable store and reach a customer-owned sink. Audience: engineers and security reviewers on the audit path.
16
+
17
+ ## Purpose
18
+
19
+ The Compliance Evidence container that turns each source's OCSF event into a durable, ordered, tamper-evident record and forwards it to a customer sink ([`05-c4-container.md`](../05-c4-container.md) §3). Ingest is the trust boundary: the OCSF `source` field is the host-attested identity of the connecting channel ([NFR-SEC-09](../manifesto/02-nfrs.md)), never a value read from the payload, so a compromised source can author events only as itself.
20
+
21
+ ## Boundaries
22
+
23
+ The inter-container fan-in edge (F10, defined in [`05-c4-container.md`](../05-c4-container.md) §4) carries events from the producer containers into this box. This section names the components inside the box and the calls between them.
24
+
25
+ ### Internal components
26
+
27
+ ```mermaid
28
+ flowchart LR
29
+ EXT[5 external sources<br/>F10 fan-in, per-source mTLS] -->|OCSF + envelope| ING[Ingest face<br/>verify peer, fairness]
30
+ SELF[self-emit<br/>metering · saturation] --> ING
31
+ ING -->|admitted event| BUS[Durable bus<br/>ordered, append-only]
32
+ BUS --> CHAIN[Chain writer<br/>per-source hash-link + seq]
33
+ CHAIN --> STORE[(Audit store D2<br/>hot → cold WORM)]
34
+ CHAIN --> ANCHOR[Merkle-head accumulator]
35
+ STORE --> FANOUT[Sink fan-out<br/>FS sink · SIEM bridge]
36
+ ANCHOR -->|daily envelope| TLOG[transparency log]
37
+ FANOUT --> SINK[customer SIEM / FS]
38
+ ```
39
+
40
+ The pipeline receives over five channels: four external host-attested producer channels — control-plane (carrying both MCP-gateway and Control/operator-API events), storage-broker, session-sandbox, egress-edge — each an mTLS-terminated peer, plus the pipeline's own self-emit channel for compute-metering and saturation events.
41
+
42
+ - **Ingest face** terminates the five external channels (one address per source), verifies the per-source mTLS peer identity, binds the OCSF `source` to that verified identity, and discards any payload-supplied source claim. The self-emit metering/saturation channel is internally originated, not an mTLS-terminated wire peer. Per-source ingest fairness is applied before admission.
43
+ - **Durable bus** holds admitted events ordered and append-only; an event is committed here before the source's publish is acknowledged.
44
+ - **Chain writer** assigns per-source hash linkage over the bus-committed stream, deriving chain order from the source's monotonic `sequence` envelope field, and writes to the store.
45
+ - **Merkle-head accumulator** batches the chain and produces the daily head submitted to the transparency log; it signs only the submission envelope.
46
+ - **Sink fan-out** drives the always-present file-system sink and the opt-in SIEM bridge, replaying from the store on recovery.
47
+
48
+ ### Owned state
49
+
50
+ The container is sole custodian of the **audit store** (threat-model element D2) — the hash-linked append-only log and its hot/cold tiers — and of the **Merkle-head accumulator** and the **envelope signing key**. The store is write-once from the chain writer's view: no internal path rewrites or deletes a committed record.
51
+
52
+ It holds **no upstream credential, no kill-switch route, and no session-mutation path**. The fan-in contract models every source operation as `receive` and the SIEM fan-out as a separate `send` surface, so no event admitted here can issue a control-plane or egress action (Invariant 1). The hash-chain linkage (`prev_hash`/`chain_hash`) is authored at ingest, not part of any source's publish payload, so a source cannot pre-compute or forge chain position.
53
+
54
+ ### Wire surface
55
+
56
+ The fan-in contract is [`contracts/audit/audit-fanin.asyncapi.yaml`](../../../contracts/audit/audit-fanin.asyncapi.yaml); field types, the shared `MessageEnvelope`, and the OCSF class `$ref`s are fixed there and not restated. The schema does not encode where work happens: the ingest face terminates the per-source mTLS channel and binds source identity; the chain writer (not the source) authors `prev_hash`/`chain_hash`; the durable-bus substrate is named by role only (the protocol token in the contract is a default binding, the product is an ADR — Open questions). The two self-emitted payloads (compute metering, saturation) carry a stable channel and envelope but an open payload schema — no OCSF v1.x class fits (Open questions).
57
+
58
+ Source-to-pipeline calls authenticate with the **Generic internal token** class from [`02-trust-boundaries.md`](../02-trust-boundaries.md) §8; TTLs are owned there, not repeated here.
59
+
60
+ ## Invariants
61
+
62
+ 1. **Source identity is host-attested at ingest, never payload-derived.** No admitted event carries an OCSF `source` value read from its payload; the value is the verified mTLS channel identity, and the contract surface is `receive`-only with no source-issued `send`. *(property-test on the ingest decoder asserting a payload `source` claim is discarded + AsyncAPI lint asserting zero source-side `send` operations; [NFR-SEC-09](../manifesto/02-nfrs.md), [NFR-SEC-47](../manifesto/02-nfrs.md))*
63
+ 2. **A source may publish only to its own channel.** An event addressed to another source's channel from a given peer identity is rejected. *(integration test driving one source's credential against every other channel; [NFR-SEC-09](../manifesto/02-nfrs.md))*
64
+ 3. **Chain linkage is pipeline-authored and append-only.** `prev_hash`/`chain_hash` are never accepted from a publish payload; no internal path rewrites or deletes a committed record; the chain has zero breaks. *(schema-validation rejecting payload-supplied chain fields + chain-continuity check; [NFR-SEC-03](../manifesto/02-nfrs.md))*
65
+ 4. **Every event commits to the durable bus before its publish is acknowledged.** No source receives an ack for an event not yet committed; no synchronous database write sits on the critical path. *(chaos test asserting bus-on-path for every event; [NFR-REL-12](../manifesto/02-nfrs.md))*
66
+ 5. **Chain order derives from the per-source monotonic sequence and the host-side trusted-time floor, not wall-clock.** Ordering uses the source's monotonic `sequence`; the wall-clock value is a recorded field, not the ordering key. *(red-team clock-rollback harness; [NFR-SEC-48](../manifesto/02-nfrs.md))*
67
+ 6. **No single source starves co-tenant sources at the fan-in.** A source exceeding its provisioned ingest share is rate-shaped (not dropped), counted, and emits a saturation event; co-tenant sources keep headroom and the chain stays unbroken. *(chaos test flooding one source against its share; [NFR-SEC-56](../manifesto/02-nfrs.md), [NFR-PERF-10](../manifesto/02-nfrs.md))*
68
+ 7. **The daily Merkle head is submitted to a transparency log; the pipeline signs only the submission envelope.** The chain produces a head each day; the log operator signs the head, the pipeline signs the submission envelope. *(daily transparency-log probe; [NFR-SEC-03](../manifesto/02-nfrs.md))*
69
+ 8. **Every event carries the mandatory envelope out-of-band of its OCSF payload.** The `MessageEnvelope` required fields are present and validated independent of the OCSF class, so the record survives transform to CEF/ECS/UDM. *(schema-conformance gate against the `MessageEnvelope` in [`contracts/audit/audit-fanin.asyncapi.yaml`](../../../contracts/audit/audit-fanin.asyncapi.yaml); [NFR-MAINT-AUDIT-SCHEMA](../manifesto/02-nfrs.md))*
70
+
71
+ ## Failure modes
72
+
73
+ Each row traces to one Layer 7 STRIDE row ([`06-threat-model.md`](../06-threat-model.md) §3) by element-ID and repeats that row's controlling NFR. The primary reaching actor is A1, the in-sandbox guest, acting through the session-sandbox source channel; A2/A3 rows are marked.
74
+
75
+ | Pn-Xn | Trigger | Container-internal behaviour | Controlling NFR |
76
+ |---|---|---|---|
77
+ | **P7-S1** (A1) | A compromised source forges an OCSF `source` claiming another, trusted source. | Fail-closed at the ingest face: the event is admitted only under the verified channel identity; a payload `source` mismatching the channel is rejected, not re-tagged. Residual: guest-self-audit / out-of-band capture, [#181](https://github.com/Wide-Moat/open-computer-use/issues/181). | [NFR-SEC-47](../manifesto/02-nfrs.md) |
78
+ | **P7-R2** (A1) | The guest, its own source for purely in-sandbox actions, omits or falsifies events before fan-in. | The pipeline records faithfully what it receives and cannot detect origin-side suppression; corroboration is against the host-authored sources (egress, broker file-op, control-plane RPC, runtime-monitor) arriving on their own channels. Residual: purely in-sandbox actions with no host-side side-effect, [#181](https://github.com/Wide-Moat/open-computer-use/issues/181). | [NFR-SEC-47](../manifesto/02-nfrs.md) |
79
+ | **P7-D1** (A1) | The downstream sink slows or is unreachable; backpressure fills the durable bus. | Fail-closed against loss, not against availability: events commit to the durable bus and the always-present file-system sink before ack; the SIEM bridge is decoupled and replays from the store on recovery rather than dropping or blocking sources. Residual: no measurable end-to-end backpressure / saturation-spill target, [#150](https://github.com/Wide-Moat/open-computer-use/issues/150), [#188](https://github.com/Wide-Moat/open-computer-use/issues/188). | [NFR-REL-12](../manifesto/02-nfrs.md) |
80
+ | **P7-D2** (A1) | A compromised guest floods well-formed OCSF to exhaust collector ingest or dilute true events. | Per-source ingest fairness keyed to the host-attested source ([NFR-SEC-56](../manifesto/02-nfrs.md)) rate-shapes the over-share (not dropped), counts it, and emits a saturation event; co-tenant sources keep headroom and the chain stays unbroken under the aggregate no-drop budget. Residual: per-source retention-budget cap and forensic-dilution-within-budget, [#188](https://github.com/Wide-Moat/open-computer-use/issues/188). | [NFR-PERF-10](../manifesto/02-nfrs.md) |
81
+ | **P7-T2** (A3) | Clock rollback backdates events or stalls/forges the daily Merkle cadence so a tampered batch lands in a legitimate signing window. | Chain order and the Merkle cadence key off the per-source monotonic sequence and the host-side trusted-time floor, not the wall clock; on resume the wall clock is corrected before any time-bound check runs ([NFR-SEC-63](../manifesto/02-nfrs.md)). Residual: trusted-time anchor for the cadence, [#185](https://github.com/Wide-Moat/open-computer-use/issues/185). | [NFR-SEC-48](../manifesto/02-nfrs.md) + [SEC-63](../manifesto/02-nfrs.md) |
82
+ | **P7-R3** (A3+A2) | A privileged operator/SOAR action beyond tier-downgrade reaches the pipeline without a mandatory record. | The pipeline is the fail-closed sink for the enumerated privileged-action set: a privileged action is denied at its source if its chain-linked OCSF event cannot be written here. The pipeline enforces the write-before-ack contract; it does not originate the action. Residual: mandatory audit of the full enumerated set, [#186](https://github.com/Wide-Moat/open-computer-use/issues/186). | [NFR-SEC-45](../manifesto/02-nfrs.md) |
83
+ | **P7-T3** (A3) | A snapshot/hibernation image of the audit/forensic state captures a live session token at rest. | A live token is cleaned before stop and excluded from image scope ([NFR-SEC-44](../manifesto/02-nfrs.md)); snapshot artifacts are encrypted and integrity-authenticated at rest, and restore rejects an unauthenticated image ([NFR-SEC-61](../manifesto/02-nfrs.md)). Residual: snapshot live-secret at rest, [#184](https://github.com/Wide-Moat/open-computer-use/issues/184). | [NFR-SEC-44](../manifesto/02-nfrs.md) + [SEC-61](../manifesto/02-nfrs.md) |
84
+
85
+ Element rows already MITIGATED in [`06-threat-model.md`](../06-threat-model.md) §4 are not relisted as live.
86
+
87
+ ## Operational concerns
88
+
89
+ This container is the F10 fan-in consumer ([`05-c4-container.md`](../05-c4-container.md) §4): it receives OCSF from the source containers and is the enforcement point for the write-before-ack property of [NFR-SEC-03](../manifesto/02-nfrs.md), [NFR-SEC-45](../manifesto/02-nfrs.md), and [NFR-SEC-72](../manifesto/02-nfrs.md) (system-initiated lifecycle transitions).
90
+
91
+ | Concern | Detail | Target / anchor |
92
+ |---|---|---|
93
+ | Config surface | five external source-channel addresses + per-source mTLS trust; self-emit channel; per-source ingest share; retention tier; sink bindings (FS always-on, SIEM opt-in); transparency-log endpoint | [NFR-COMP-01](../manifesto/02-nfrs.md), [NFR-MAINT-AUDIT-SCHEMA](../manifesto/02-nfrs.md) |
94
+ | Observability | per-source ingest rate vs share, saturation events, bus depth / backpressure, chain-continuity, sink replay lag; self-emitted on its own channel | [NFR-PERF-10](../manifesto/02-nfrs.md), [NFR-COST-05](../manifesto/02-nfrs.md) |
95
+ | Scaling axis | per-deployment (single durable bus + store); sources scale `[1..N]` independently; whether the store partitions per tenant is a deployment concern | [NFR-REL-12](../manifesto/02-nfrs.md) |
96
+ | Capacity model | ingest headroom with no silent drop and zero chain breaks; hot tier then cold tier to the retention floor | [NFR-PERF-10](../manifesto/02-nfrs.md), [NFR-COMP-01](../manifesto/02-nfrs.md) |
97
+ | Recovery | no event loss; the SIEM bridge replays from the durable store on recovery | [NFR-REL-03](../manifesto/02-nfrs.md) |
98
+ | Upgrade / rotation | OCSF schema upgrade with N-1 backward-compat; envelope-signing-key rotation per the key-custody floor | [NFR-MAINT-AUDIT-SCHEMA](../manifesto/02-nfrs.md) |
99
+
100
+ Backpressure behaviour is spill, not block: events commit to the durable bus and the file-system sink before ack, so a stalled SIEM sink fills the bus toward its bound and replays on recovery; sources are never blocked and events are never silently dropped. The measurable end-to-end saturation / spill target is open ([#150](https://github.com/Wide-Moat/open-computer-use/issues/150)).
101
+
102
+ **Shelf delta** (from [`05-c4-container.md`](../05-c4-container.md) §5 and [`02-trust-boundaries.md`](../02-trust-boundaries.md) §10). Minimal shelf: file-system sink only; the Merkle-head submission envelope is signed with a host-local key. Full shelf: an opt-in OCSF bridge to a customer SIEM as a fan-out; the same envelope signed with an HSM-rooted key when customer KMS is wired. The boundary properties — host-attested source identity, hash-linked append-only chain, write-before-ack, per-source fairness — hold on both shelves; only the sink substrate and the envelope signer change. The durable-bus product and the WORM cold-tier substrate are pluggable seams behind the OCU-owned local commit, not decided in this component: [ADR-0009](../adr/0009-audit-pipeline-pluggable-by-contract.md) sets the build/buy boundary (each seam a contract with a solo-reference default), and the per-seam transport detail stays open ([#150](https://github.com/Wide-Moat/open-computer-use/issues/150), [#151](https://github.com/Wide-Moat/open-computer-use/issues/151)).
103
+
104
+ ## Open questions
105
+
106
+ 1. SIEM-bridge transport and end-to-end backpressure: the pluggable-sink contract needs a measurable transport and saturation-spill target — [#150](https://github.com/Wide-Moat/open-computer-use/issues/150).
107
+ 2. Transparency-log publishing path (auth, retry, RPO if the log is unreachable) and whether the minimal shelf publishes at all — [#151](https://github.com/Wide-Moat/open-computer-use/issues/151).
108
+ 3. Out-of-band evidence for in-sandbox actions and host-attested binding of the OCSF source at ingestion (the P7-S1 / P7-R2 residual) — [#181](https://github.com/Wide-Moat/open-computer-use/issues/181).
109
+ 4. Per-source retention-budget cap and forensic-dilution-within-budget at the audit fan-in — [#188](https://github.com/Wide-Moat/open-computer-use/issues/188).
110
+ 5. ComputeMetering / SaturationEvent payload schema: OCSF v1.x ships no metering or saturation class, so the channel surface is stable but the payload `$ref` is held TBD, split off [#150](https://github.com/Wide-Moat/open-computer-use/issues/150) so the Published-Language gap is tracked separately from SIEM-bridge transport ([#241](https://github.com/Wide-Moat/open-computer-use/issues/241)).
File without changes
@@ -0,0 +1,111 @@
1
+ %% SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ %% Copyright (c) 2025 Open Computer Use Contributors
3
+ %% Canonical Layer 3 trust-zone diagram. Referenced from docs/architecture/02-trust-boundaries.md §5.
4
+ %% Convention: solid subgraph border = always present; dashed border = optional configuration.
5
+ %% Palette (project convention): red untrusted / amber semi-trusted / green trusted / blue isolated.
6
+
7
+ %%{init: {"theme": "neutral"} }%%
8
+ flowchart LR
9
+
10
+ %% ─── external actors (untrusted; rendered as plain nodes, not subgraphs) ───
11
+ MCPC[MCP client<br/>external actor]:::ext
12
+ IDP[Customer IdP<br/>OIDC]:::extOpt
13
+ LLM[LLM upstream]:::endpoint
14
+ OBJ[Customer object store]:::endpoint
15
+ CPROXY[Customer outbound proxy]:::extOpt
16
+ ICAP[Customer DLP-ICAP service]:::extOpt
17
+ SIEM[Customer SIEM]:::extOpt
18
+ KMS[Customer KMS / HSM]:::extOpt
19
+ SDS[SDS source<br/>static file solo · customer store enterprise]:::extOpt
20
+ SOAR[SOAR<br/>signed webhook + admin API]:::extOpt
21
+ OPER[Admin / Operator<br/>PAM-JIT human]:::ext
22
+ TLOG[Transparency log]:::extOpt
23
+
24
+ %% ─── our zones ───
25
+ %% Control plane is one trust-zone exposing two interfaces: an agent-facing
26
+ %% MCP surface (tool calls) and an operator/lifecycle surface (session
27
+ %% lifecycle, quota, kill-switch). The kill-switch is reachable only on the
28
+ %% operator surface — never over MCP. The two-container split is a Layer 6
29
+ %% concern; here they are one zone.
30
+ subgraph CP[Control plane]
31
+ ORCH[orchestrator + session lifecycle<br/>MCP interface · agent-facing<br/>operator interface · lifecycle + kill-switch<br/>kill-switch not reachable over MCP]
32
+ end
33
+
34
+ subgraph STORE[Storage broker]
35
+ SB[host-side storage broker<br/>guest speaks file ops, not the object-store protocol<br/>broker is the object-store client · signs its own requests<br/>holds the backend credential · guest holds no backend key<br/>content inspection here on plaintext, before signing]
36
+ end
37
+
38
+ subgraph COMPUTE[Compute plane]
39
+ VM[session sandbox<br/>guest agent PID 1<br/>runc minimal · gVisor full · microVM post-v1<br/>one per session · ephemeral<br/>rootfs + tooling = read-only, host-attached at boot/restore]
40
+ end
41
+
42
+ %% Posture is the §7 ladder, not two modes; injection at the egress-wide-bump rung. See ADR-0007.
43
+ subgraph EDGE[Egress trust-edge]
44
+ PROXY[egress proxy<br/>posture ladder: deny-all · transparent · egress-wide bump · external SDS<br/>bump default when an upstream credential is configured<br/>per-SNI leaf from per-deployment CA · Envoy data plane + SDS minter<br/>DLP-ICAP is a bump-rung config · egress allow-list · deny-by-default]
45
+ end
46
+
47
+ subgraph AUDIT[Audit pipeline]
48
+ BUS[durable bus + hash-chained store<br/>OCSF v1.x events<br/>host-local signing on minimal shelf<br/>HSM-rooted on full shelf<br/>compute-time metering]
49
+ end
50
+
51
+ %% ─── inbound edges ───
52
+ %% MCP arrives on the agent-facing interface; operator + SOAR arrive on the
53
+ %% operator/lifecycle interface. Distinct auth; the kill-switch lives only
54
+ %% on the latter.
55
+ MCPC -->|"MCP authz spec · agent-facing<br/>audience-validated"| ORCH
56
+ IDP -->|OIDC| ORCH
57
+ OPER -->|"PAM-JIT credential · operator interface<br/>NFR-COMP-29"| ORCH
58
+ SOAR <-->|"signed webhook + admin API · operator interface"| ORCH
59
+
60
+ %% ─── internal edges (encrypted in transit; NFR-SEC-37) ───
61
+ ORCH -->|"Session JWT on WS<br/>bound to container_name<br/>TTL ≤60min · rotated"| VM
62
+ ORCH -->|"session resource handle<br/>scopes the mount · NFR-SEC-25"| SB
63
+ SDS -->|"upstream credential over SDS<br/>source owns mint · rotate · revoke<br/>NFR-SEC-23 · ADR-0005 · ADR-0007"| PROXY
64
+
65
+ %% ─── storage-mount path (second guest-data boundary: in vs out) ───
66
+ %% Distinct from egress. The guest reads/writes mutable user-data through a
67
+ %% mount the broker serves; the guest holds only a session-scoped resource
68
+ %% handle (e.g. filesystem_id), never the storage backend credential. The
69
+ %% broker's own backend traffic leaves on a storage-dedicated lane at the
70
+ %% Egress trust-edge, distinct from the guest egress lane (NFR-SEC-85).
71
+ %% Mount substrate (FUSE / virtio-fs / 9p) is component-spec.
72
+ SB -->|"mount · session resource handle only<br/>no backend credential in guest<br/>NFR-SEC-25"| VM
73
+ SB -->|"backend traffic · broker-signed · storage lane (NFR-SEC-85)<br/>allow-list-only, no TLS termination<br/>signature stays intact"| PROXY
74
+
75
+ %% ─── revoke channel (denylist; independent of IdP reachability) ───
76
+ %% Compute plane gets a direct denylist check (Session JWT TTL ≤60min needs it);
77
+ %% Egress trust-edge revoke = the edge stops injecting upstream auth for a
78
+ %% revoked session; the SDS source owns the credential's own TTL, so no
79
+ %% direct ORCH→PROXY edge.
80
+ ORCH -.->|"revoke (denylist check)<br/>NFR-SEC-04 ≤5 min"| VM
81
+
82
+ %% ─── egress edges ───
83
+ VM -->|"single outbound path<br/>no long-lived upstream secret in request<br/>credential attached at edge on a presented scoped credential<br/>NFR-SEC-27 · ADR-0007"| PROXY
84
+ PROXY -->|"strict TLS validation<br/>upstream auth injected (SDS-delivered)<br/>fail-closed"| LLM
85
+ PROXY -->|"object-store leg is the broker's, not the guest's<br/>broker-signed · allow-list-only, no TLS termination<br/>signature intact · fail-closed"| OBJ
86
+ PROXY -.->|"chained-proxy contract<br/>optional"| CPROXY
87
+ PROXY -.->|"ICAP req-mod / resp-mod<br/>optional"| ICAP
88
+
89
+ %% ─── audit edges (every named zone emits OCSF events) ───
90
+ ORCH -->|OCSF events| BUS
91
+ SB -->|OCSF events| BUS
92
+ VM -->|OCSF events| BUS
93
+ PROXY -->|OCSF events| BUS
94
+
95
+ %% ─── audit egress ───
96
+ BUS -.->|"OCSF bridge<br/>optional"| SIEM
97
+ BUS -.->|"daily Merkle head<br/>submission envelope"| TLOG
98
+
99
+ %% ─── KMS path (optional, full-capability shelf only) ───
100
+ SB -.->|"PKCS#11 / KMIP"| KMS
101
+ BUS -.->|"PKCS#11 / KMIP<br/>signing on full shelf"| KMS
102
+
103
+ %% ─── styling (project palette: red untrusted / amber semi-trusted / green trusted / blue isolated) ───
104
+ classDef ext fill:#fdecea,stroke:#c0392b,stroke-width:1px;
105
+ classDef extOpt fill:#fdecea,stroke:#c0392b,stroke-dasharray: 5 5;
106
+ classDef endpoint fill:#fafafa,stroke:#9e9e9e,stroke-dasharray: 2 2;
107
+ style CP fill:#e8f5e9,stroke:#1e7e34,stroke-width:1px;
108
+ style STORE fill:#e8f5e9,stroke:#1e7e34,stroke-width:1px;
109
+ style COMPUTE fill:#e3f2fd,stroke:#0d47a1,stroke-width:3px;
110
+ style EDGE fill:#fff4e5,stroke:#b8860b,stroke-width:1px;
111
+ style AUDIT fill:#e8f5e9,stroke:#1e7e34,stroke-width:1px;
@@ -0,0 +1,41 @@
1
+ %% SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ %% Copyright (c) 2025 Open Computer Use Contributors
3
+ %% Layer 7 STRIDE overlay on the Layer 6 container DFD. Referenced from docs/architecture/06-threat-model.md.
4
+ %% Residual (PARTIAL) threats annotated per element; the DFD itself is canonical in c4-container.mmd (not redrawn).
5
+ %%{init: {"theme": "neutral"} }%%
6
+ flowchart LR
7
+ PEER["MCP caller"]:::ext
8
+ OPER["Operator"]:::ext
9
+ DPC["Data-plane client<br/>(SPA / headless)"]:::ext
10
+ SDS["SDS source<br/>(static file / customer store)"]:::ext
11
+ subgraph OCU["Open Computer Use — STRIDE overlay"]
12
+ MCPG["MCP gateway"]
13
+ CTRL["Control / operator API"]
14
+ STORE["Storage broker"]
15
+ VM["Session sandbox [1..N]"]
16
+ EDGE["Egress trust-edge proxy"]
17
+ AUD["Audit pipeline"]
18
+ end
19
+ PEER --> MCPG
20
+ OPER --> CTRL
21
+ MCPG --> CTRL
22
+ CTRL --> VM
23
+ STORE --> VM
24
+ DPC -->|"north face (F11)"| STORE
25
+ VM --> EDGE
26
+ SDS -->|"credential over SDS"| EDGE
27
+ STORE --> EDGE
28
+ VM -.OCSF.-> AUD
29
+ EDGE -.OCSF.-> AUD
30
+
31
+ PEND["NFR specified, impl tracked<br/>#148 #149 #150 #176 #181 #182<br/>#183 #184 #185 #186 #187 #188<br/>#197 #217 #218"]:::pend
32
+ MCPG -. P1-I1 P1-E2 .-> PEND
33
+ CTRL -. P2-R1 .-> PEND
34
+ STORE -. "P4-D1 (south) · P4-S3 P4-T3 P4-I3 P4-D3 P4-R2 P4-E3 (north)" .-> PEND
35
+ VM -. P5-T1 P5-I1 P5-I2 P5-I3 P5-R1 .-> PEND
36
+ EDGE -. P6-I1 P6-I2 P6-D1 P6-D3 P6-E2 P6-E3 .-> PEND
37
+ AUD -. P7-S1 P7-R2 P7-T2 P7-R3 P7-T3 .-> PEND
38
+
39
+ classDef ext fill:#fdecea,stroke:#c0392b,stroke-width:1px;
40
+ classDef pend fill:#fff8e1,stroke:#f39c12,stroke-width:2px,color:#7a5c00;
41
+ style OCU fill:#e8f5e9,stroke:#1e7e34,stroke-width:3px;
@@ -0,0 +1,47 @@
1
+ %% SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ %% Copyright (c) 2025 Open Computer Use Contributors
3
+ %% Layer 8 (Contracts) overlay. Referenced from docs/architecture/08-contracts.md.
4
+ %% Same six containers as diagrams/c4-container.mmd; edge labels carry the CONTRACT FORMAT
5
+ %% on each crossing, not the token/protocol. Zone shading is not redrawn — see Layer 3/6.
6
+ %% Solid = OCU-defined or conform-inbound; dashed = external party owns the wire format.
7
+
8
+ %%{init: {"theme": "neutral"} }%%
9
+ flowchart LR
10
+
11
+ PEER["MCP-speaking caller"]:::ext
12
+ OPER["Operator (PAM-JIT)"]:::ext
13
+ UPSTREAM["Outbound endpoints"]:::ext
14
+ SDS["SDS source<br/>(static file / customer store)"]:::extOpt
15
+ SINK["Customer SIEM / SOAR /<br/>transparency log"]:::extOpt
16
+ DPC["Data-plane client<br/>(SPA / headless)"]:::ext
17
+
18
+ subgraph OCU["Open Computer Use"]
19
+ MCPG["MCP gateway"]
20
+ CTRL["Control / operator API"]
21
+ STORE["Storage broker"]
22
+ VM["Session sandbox [1..N]"]
23
+ EDGE["Egress trust-edge"]
24
+ AUD["Audit pipeline"]
25
+ end
26
+
27
+ PEER -->|"MCP JSON-Schema"| MCPG
28
+ OPER -->|"OpenAPI 3.1"| CTRL
29
+ MCPG -->|"Protobuf / gRPC"| CTRL
30
+ CTRL -->|"WebSocket (PTY+CDP)"| VM
31
+ STORE -->|"file-op mount (HTTP+JSON)"| VM
32
+ DPC -->|"OpenAPI 3.1 (file/artifact API)"| STORE
33
+ VM -->|"network policy"| EDGE
34
+ SDS -.->|"Envoy SDS (gRPC xDS)"| EDGE
35
+ STORE -->|"network policy"| EDGE
36
+ EDGE -.->|"external backend protocol"| UPSTREAM
37
+
38
+ MCPG -->|"AsyncAPI 3.0 / OCSF"| AUD
39
+ CTRL -->|"AsyncAPI 3.0 / OCSF"| AUD
40
+ STORE -->|"AsyncAPI 3.0 / OCSF"| AUD
41
+ VM -->|"AsyncAPI 3.0 / OCSF"| AUD
42
+ EDGE -->|"AsyncAPI 3.0 / OCSF"| AUD
43
+ AUD -.->|"AsyncAPI 3.0 / OCSF"| SINK
44
+
45
+ classDef ext fill:#fdecea,stroke:#c0392b,stroke-width:1px;
46
+ classDef extOpt fill:#fdecea,stroke:#c0392b,stroke-dasharray: 5 5;
47
+ style OCU fill:#e8f5e9,stroke:#1e7e34,stroke-width:3px;
@@ -0,0 +1,59 @@
1
+ %% SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ %% Copyright (c) 2025 Open Computer Use Contributors
3
+ %% Canonical Layer 6 (C4 Container) diagram. Referenced from docs/architecture/05-c4-container.md.
4
+ %% Role names only — no technology names (per CLAUDE.md Diagrams). Tech choice lands in component specs under components/.
5
+ %% Six containers across five Layer-3 trust zones: the Control plane splits into an agent-facing
6
+ %% MCP gateway and an operator/lifecycle API (the kill-switch lives only on the latter); the other
7
+ %% four zones map 1:1. Substrate differs by shelf (see 05-c4-container.md §5); the count does not.
8
+ %% Palette (project convention): red untrusted / green trusted. Amber/blue trust-zone shading is Layer 3 only.
9
+
10
+ %%{init: {"theme": "neutral"} }%%
11
+ flowchart LR
12
+
13
+ %% ─── external (drawn for orientation; contracts in 03-c4-context.md §4) ───
14
+ PEER["MCP-speaking caller<br/>(runs the loop)"]:::ext
15
+ OPER["Operator<br/>(PAM-JIT human)"]:::ext
16
+ FILE["Data-plane client<br/>(OCU SPA · file/artifact API)"]:::extOpt
17
+ UPSTREAM["Outbound endpoints<br/>(LLM · object store · internal API)"]:::ext
18
+ SINK["Customer SIEM / SOAR /<br/>transparency log"]:::extOpt
19
+ SDS["SDS source<br/>(static file solo · customer store enterprise)"]:::extOpt
20
+
21
+ %% ─── containers inside the system under design ───
22
+ subgraph OCU["Open Computer Use"]
23
+ MCPG["MCP gateway<br/>agent-facing tool-calls · metadata-only"]
24
+ CTRL["Control / operator API<br/>lifecycle · quota · kill-switch"]
25
+ STORE["Storage broker<br/>object-store client · signs own requests<br/>guest mount (south) + SPA · file/artifact API · preview (north)"]
26
+ VM["Session sandbox [1..N]<br/>guest agent = PID 1 · one per session"]
27
+ EDGE["Egress trust-edge proxy<br/>single outbound path · allow-list<br/>edge-inject via Envoy SDS (Envoy data plane + SDS minter)"]
28
+ AUD["Audit pipeline<br/>durable bus · hash-chained store"]
29
+ end
30
+
31
+ %% ─── inbound (two distinct surfaces of the Control plane) ───
32
+ PEER -->|"MCP authz spec"| MCPG
33
+ OPER -->|"PAM-JIT credential · operator-only ingress"| CTRL
34
+ MCPG -->|"session create / status<br/>service identity"| CTRL
35
+
36
+ %% ─── control + storage reach the guest host-side (host dials, guest listens; NFR-SEC-43) ───
37
+ CTRL -->|"Session JWT bound to container_name<br/>rotated · host dials guest"| VM
38
+ STORE -->|"mount · resource handle (filesystem_id)"| VM
39
+ FILE -.->|"SPA · file/artifact API (north)<br/>embed token → first-party session · bytes direct"| STORE
40
+
41
+ %% ─── egress: guest carries no long-lived upstream secret; on injection-needing legs the edge
42
+ %% receives the credential over SDS and injects at the egress-wide-bump rung (see 05 §3, §6; ADR-0007) ───
43
+ VM -->|"single outbound · no long-lived upstream secret"| EDGE
44
+ SDS -->|"upstream credential over SDS<br/>source owns mint/rotate/revoke (bump rung)"| EDGE
45
+ STORE -->|"backend request · broker-signed · storage lane (NFR-SEC-85)<br/>allow-list-only · signature intact"| EDGE
46
+ EDGE -->|"injection-needing leg: upstream auth injected (bump rung)"| UPSTREAM
47
+
48
+ %% ─── audit fan-in (every source container emits OCSF; the pipeline is the sink) ───
49
+ MCPG -->|OCSF| AUD
50
+ CTRL -->|OCSF| AUD
51
+ STORE -->|OCSF| AUD
52
+ VM -->|OCSF| AUD
53
+ EDGE -->|OCSF| AUD
54
+ AUD -.->|"OCSF bridge<br/>full shelf"| SINK
55
+
56
+ %% ─── styling (project palette) ───
57
+ classDef ext fill:#fdecea,stroke:#c0392b,stroke-width:1px;
58
+ classDef extOpt fill:#fdecea,stroke:#c0392b,stroke-dasharray: 5 5;
59
+ style OCU fill:#e8f5e9,stroke:#1e7e34,stroke-width:3px;
@@ -0,0 +1,46 @@
1
+ %% SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ %% Copyright (c) 2025 Open Computer Use Contributors
3
+ %% Canonical Layer 4 (C4 Context) diagram. Referenced from docs/architecture/03-c4-context.md.
4
+ %% Convention: solid border = present on the minimal-capability shelf; dashed border = not on the minimal shelf by default (per-actor optionality in 03-c4-context.md §4).
5
+ %% Palette (project convention): red untrusted / green trusted (amber + blue zones apply at Layer 3 only).
6
+
7
+ %%{init: {"theme": "neutral"} }%%
8
+ flowchart LR
9
+
10
+ %% ─── inbound peers (any MCP-speaking caller; REST is a fallback) ───
11
+ PEER[MCP-speaking peer<br/>n8n · Open WebUI · custom MCP client]:::ext
12
+ OPER[Admin / Operator<br/>PAM-JIT human]:::ext
13
+ FILE[Data-plane client<br/>OCU SPA · file/artifact API]:::extOpt
14
+
15
+ %% ─── the system under design ───
16
+ subgraph OCU[Open Computer Use]
17
+ BOX[Open Computer Use<br/>in-perimeter tool-execution platform]
18
+ end
19
+
20
+ %% ─── customer infrastructure (full-capability shelf; IdP required there, the rest optional) ───
21
+ IDP[Customer IdP<br/>SAML / OIDC]:::extOpt
22
+ KMS[Customer KMS / HSM<br/>PKCS#11 / KMIP]:::extOpt
23
+ SIEM[Customer SIEM]:::extOpt
24
+ CPROXY[Customer outbound proxy]:::extOpt
25
+ ICAP[Customer DLP-ICAP service]:::extOpt
26
+
27
+ %% ─── operations and assurance ───
28
+ SOAR[SOAR<br/>signed webhook + admin API]:::extOpt
29
+ TLOG[Transparency log]:::extOpt
30
+
31
+ %% ─── edges ───
32
+ PEER -->|"MCP authz spec<br/>audience-validated"| OCU
33
+ OPER -->|"PAM-JIT credential<br/>NFR-COMP-29"| OCU
34
+ FILE -.->|"embed UI · file/artifact API<br/>identity-bound · bytes direct"| OCU
35
+ SOAR <-.->|signed webhook + admin API| OCU
36
+ IDP -.->|SAML / OIDC| OCU
37
+ OCU -.->|"OCSF v1.x bridge<br/>optional"| SIEM
38
+ OCU -.->|"PKCS#11 / KMIP<br/>full-capability shelf"| KMS
39
+ OCU -.->|"chained-proxy contract<br/>optional"| CPROXY
40
+ OCU -.->|"ICAP req-mod / resp-mod<br/>optional"| ICAP
41
+ OCU -.->|"daily Merkle head<br/>submission envelope"| TLOG
42
+
43
+ %% ─── styling (project palette) ───
44
+ classDef ext fill:#fdecea,stroke:#c0392b,stroke-width:1px;
45
+ classDef extOpt fill:#fdecea,stroke:#c0392b,stroke-dasharray: 5 5;
46
+ style OCU fill:#e8f5e9,stroke:#1e7e34,stroke-width:3px;
@@ -0,0 +1,172 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ ---
5
+ status: draft
6
+ last-reviewed: 2026-05-30
7
+ owner: "@Wide-Moat/architects"
8
+ applies-to: next/v1
9
+ ---
10
+
11
+ Canonical definitions for terms used across this architecture. Define a term here once; link to it from anywhere else. A term lands here when it appears in ≥ 2 documents.
12
+
13
+ ## Control plane
14
+
15
+ Orchestrator and session lifecycle, exposing two interfaces of one zone: an agent-facing MCP interface (tool calls) and an operator/lifecycle interface (lifecycle, quota, kill-switch). The kill-switch is reachable only on the operator interface, never over MCP. Single instance per deployment. Holds no customer payload; metadata-only by design. Outbound to LLM and other upstream goes through the Egress trust-edge — the Control plane is not a model proxy. The agent-facing / operator split becomes two containers at Layer 6.
16
+
17
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md).
18
+
19
+ ## Compute plane
20
+
21
+ The session sandbox zone — one sandbox per session, lifecycle bound to the session, guest agent as PID 1. Substrate is set by the [Sandbox tier](#sandbox-tier) — `runc`, gVisor, or microVM — selected by `workload_trust_profile`, orthogonal to the [shelf](#capability-shelf): both shelves carry every tier the host supports. Cross-session network reachability disabled.
22
+
23
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md).
24
+
25
+ ## Storage broker
26
+
27
+ Host-side broker for the guest's mutable user-data mount. The guest speaks a file-operation interface (open / read / write / list) to the broker, not the object-store protocol; the broker is the object-store client and signs its own backend requests, so no middlebox rewrites a request signature. Holds the backend credential; the guest holds only a session-scoped resource handle (a `filesystem_id`), never the backend key. The broker's backend traffic traverses a storage-dedicated lane on the Egress trust-edge, distinct from the guest egress lane (NFR-SEC-85), in allow-list-only mode (no TLS termination) so the signature stays intact; content inspection, when required, runs at the broker on plaintext, before signing. It has a guest-facing interface (the mount) and governs an inbound data path, where the Egress trust-edge governs only outbound. Mount substrate (FUSE / virtio-fs / 9p) is a component-spec choice. The broker has two faces on one object-store client: a [south face](#south-face--north-face) (the guest mount) and a [north face](#south-face--north-face) (the file-artifact data plane for a [Data-plane client](#data-plane-client)).
28
+
29
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2 / §7.1, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-25.
30
+
31
+ ## Data-plane client
32
+
33
+ An external caller that reaches OCU's file-artifact data plane — the [Storage broker](#storage-broker) [north face](#south-face--north-face) — to upload, list, download, or preview-render files. It is either OCU's own authenticated SPA (embeddable cross-origin) or a headless caller of the file-artifact API; bytes flow client↔OCU directly, never through a calling peer and never to the object store. Distinct from the MCP caller (which drives the control plane) and the Operator (CLI / PAM-JIT). Absent in headless deployments.
34
+
35
+ Used in: [`03-c4-context.md`](./03-c4-context.md) §4, [`05-c4-container.md`](./05-c4-container.md) §3-§4, [`06-threat-model.md`](./06-threat-model.md) §2, [`08-contracts.md`](./08-contracts.md) §1.
36
+
37
+ ## South face / north face
38
+
39
+ The two faces of the one [Storage broker](#storage-broker) object-store client. The **south face** is the guest mount — a file-operation interface (open / read / write / list) the sandbox speaks, scoped by `filesystem_id`. The **north face** is the file-artifact data plane — OCU's HTTP file/artifact API and embeddable SPA, served on a dedicated file/UI ingress for a [Data-plane client](#data-plane-client), not the MCP listener. Both faces share the one backend credential and the one storage-lane backend leg (NFR-SEC-85); neither the guest nor the data-plane client holds a backend credential.
40
+
41
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`04-bounded-contexts.md`](./04-bounded-contexts.md) §3, [`05-c4-container.md`](./05-c4-container.md) §3-§4, [`08-contracts.md`](./08-contracts.md) §1.
42
+
43
+ ## Downloadable
44
+
45
+ The third storage-authorization axis (beyond scope and intent): a per-object disposition the broker resolves at read, separating "may read" from "may remove from the sandbox." A non-downloadable object is readable or previewable in-session but yields no egress-eligible artifact; the disposition reaches the Egress trust-edge as a deny signal. The preview-not-download exfiltration control.
46
+
47
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`06-threat-model.md`](./06-threat-model.md) §3, [`08-contracts.md`](./08-contracts.md) §3, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-73.
48
+
49
+ ## Embed token
50
+
51
+ A signed short-TTL token (OIDC-asserted, `exp ≤ 120 s`) the calling peer's backend mints so its already-authenticated user opens OCU's embeddable SPA cross-origin without re-entering credentials. The [north face](#south-face--north-face) verifies the token signature and expiry, then sets a first-party session; OCU mints nothing and no OCU upstream secret enters the browser.
52
+
53
+ Used in: [`05-c4-container.md`](./05-c4-container.md) §3, [`06-threat-model.md`](./06-threat-model.md) §3, [`08-contracts.md`](./08-contracts.md) §3, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-82.
54
+
55
+ ## Egress trust-edge
56
+
57
+ The single outbound zone. Every outbound request from the Compute plane goes through here. The guest holds no long-lived upstream secret (it may hold a short-lived session-scoped handle to a host-side mediator); the edge attaches the upstream authorization, received over Envoy SDS from a static file (solo) or a customer store (enterprise), on the re-originated leg at the egress-wide-bump rung (see [Egress posture](#egress-posture)). Injection is gated on a presented scoped credential carried by the request, never on network origin — a request presenting none receives none ([ADR-0007](./adr/0007-egress-auth-mechanism.md), the P6-E2 anti-pattern). Fail-closed: proxy unreachable → outbound traffic dropped.
58
+
59
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md). Spelled `egress proxy` when referring to the component implementation; `Egress trust-edge` when referring to the zone.
60
+
61
+ ## Audit pipeline
62
+
63
+ Durable bus + hash-chained store + bridges to customer sinks. Mandatory in code; sinks are pluggable. Distinct retention floor, RPO, and tamper-evidence properties from the Control plane, which is why it is drawn as its own zone.
64
+
65
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md).
66
+
67
+ ## Capability shelf
68
+
69
+ A configuration profile of one product. Two shelves:
70
+
71
+ - **Minimal-capability shelf** — single-tenant, host-local Ed25519 signing keys, auto-generated self-signed CA, file-system audit sink, host-rooted local operator credential. The one-click solo install path. Spelled **solo / dev tier** in some Layer 3 prose and NFR rows; the two names denote the same shelf.
72
+ - **Full-capability shelf** — customer HSM rooted, per-tenant SPIFFE trust domain, customer-CA-rooted egress, OCSF bridges to customer SIEM, customer-IdP-asserted operator identity. Spelled **hardened tier and above** in some Layer 3 prose and NFR rows; same shelf.
73
+
74
+ Both shelves run the same binary; the difference is configuration plus presence of customer-supplied facilities (HSM, CA, SIEM bridge, IdP). Not a SKU split. The shelf is one axis; the [Sandbox tier](#sandbox-tier) (runtime) and the [Isolation tier](#isolation-tier-t0t3) (tenancy shape) are orthogonal axes — selecting a shelf does not pick the runtime.
75
+
76
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2 / §8 / §10, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md).
77
+
78
+ ## Isolation tier (T0…T3)
79
+
80
+ Per-tenant deployment shape menu. Picks the substrate, not the invariants — boundary properties hold for every tier.
81
+
82
+ - T0 logical — row-level filter, shared kernel.
83
+ - T1 namespace — Kubernetes namespace + NetworkPolicy + RBAC + ResourceQuota.
84
+ - T2 VPC / VNet — per-tenant VPC, no peering.
85
+ - T3 dedicated cluster — dedicated control plane per tenant.
86
+
87
+ Higher isolation tiers (dedicated hardware, customer-owned cage) are tracked as candidates in open question `arch/cross-tenant-isolation-grading`; promote when a named workload requires them.
88
+
89
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §4.
90
+
91
+ ## Sandbox tier
92
+
93
+ The sandbox runtime ladder, picked by the workload's `workload_trust_profile`, never by data classification (AP-13). Distinct from the [Isolation tier](#isolation-tier-t0t3) (tenancy shape) and the [Capability shelf](#capability-shelf) (key custody / CA / sink).
94
+
95
+ - `runc` — shared-kernel container; v1 default for the `trusted_operator` profile (one-click solo install).
96
+ - `gVisor` (`runsc`) — user-space-kernel isolation; v1 hardened default for the `internal_workforce` profile.
97
+ - microVM (hardware-virt; named example Firecracker) — post-v1, for the `untrusted` profile; tracked at [#161](https://github.com/Wide-Moat/open-computer-use/issues/161).
98
+
99
+ Used in: [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) §"Sandbox tier — workload-driven selection", [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2.
100
+
101
+ ## Egress posture
102
+
103
+ A ladder of rungs the Egress trust-edge runs at, chosen by what the deployment needs ([ADR-0007](./adr/0007-egress-auth-mechanism.md)):
104
+
105
+ - **deny-all** — no outbound need; egress off.
106
+ - **transparent pass-through** — proxy in path, does not terminate TLS, no CA; reaches unauthenticated endpoints only.
107
+ - **egress-wide bump** — proxy terminates TLS at a per-deployment CA (auto-generated, public cert auto-injected into the sandbox trust store at start) and attaches the upstream credential on the re-originated leg; enables in-path content inspection (DLP-ICAP). The default rung once an upstream credential is configured.
108
+ - **external SDS source** — enterprise: the credential lifecycle is owned by a customer store off-box.
109
+
110
+ Bump is the default only when an upstream credential is configured, never imposed on a deployment that needs none, so the one-click solo path holds at every rung. DLP-ICAP is a configuration of the bump rung, not a separate rung.
111
+
112
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §7, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-FLEX-15.
113
+
114
+ ## Session JWT
115
+
116
+ Per-session session-identity token issued by the Control plane to the guest agent, bound to `container_name`, TTL ≤ 60 min and rotated while the session is active. It proves session identity to the Control plane; it is not an upstream credential and never leaves toward an upstream. The only token the guest holds. The TTL is an anti-replay window, not a session length — session idle (≤15 min, NFR-SEC-40) and absolute (≤12 h, NFR-SEC-41) limits are separate. Distinct from the SDS-delivered upstream credential (attached by the Egress trust-edge, never the guest) and the generic internal RPC token (TTL ≤ 60 min, inter-component, host-side).
117
+
118
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §5 / §8 / §8.1, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-10/23/29.
119
+
120
+ ## Generic internal token
121
+
122
+ Host-side service-to-service RPC token authenticating one internal component to another (Control plane ↔ Audit pipeline), TTL ≤ 60 min. It never reaches the guest and carries no operator scope or upstream credential. Distinct from the [Session JWT](#session-jwt) (guest-held, per session) and the SDS-delivered upstream credential (attached by the Egress trust-edge).
123
+
124
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §8, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-23.
125
+
126
+ ## OCSF
127
+
128
+ Open Cybersecurity Schema Framework, v1.x JSON. The canonical audit-event schema we emit on the Audit pipeline. Bridges to SIEM transforms emit CEF / Elastic ECS / Chronicle UDM downstream.
129
+
130
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §5 / §10, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-MAINT-AUDIT-SCHEMA.
131
+
132
+ ## Transparency log
133
+
134
+ External append-only log that the customer chooses (public, customer-private, or a Certificate-Transparency-style instance). The Audit pipeline submits the daily Merkle head of the hash-chained audit store; the log operator signs the Merkle head, we sign only the submission envelope. Provides tamper-evidence the customer can verify against an operator they trust.
135
+
136
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §3 / §8.1 / §10 / §12, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-SEC-03.
137
+
138
+ ## Bounded context
139
+
140
+ A slice of the domain with its own consistent model and language. Distinct from a trust zone ([`02-trust-boundaries.md`](./02-trust-boundaries.md) §2 — a deploy / protection slice): a bounded context answers "which domain model is consistent here," a trust zone answers "where does it run and under what protection." The two do not map one-to-one. Classified core (built in-house, carries competitive value), supporting (built, not differentiating), or generic (integrated, not built).
141
+
142
+ Used in: [`04-bounded-contexts.md`](./04-bounded-contexts.md).
143
+
144
+ ## Anti-corruption layer
145
+
146
+ A translation boundary that keeps an external model from leaking into a context's own model. Lets a generic integration (customer IdP, secrets store, policy engine) be swapped without changing the core domain model. Spelled out in full; not abbreviated to "ACL" in diagrams, which collides with Access Control List.
147
+
148
+ Used in: [`04-bounded-contexts.md`](./04-bounded-contexts.md).
149
+
150
+ ## Published Language
151
+
152
+ A shared, documented schema two contexts agree on at their boundary; the emitter conforms to the schema, not to the consumer's internals. The OCSF event between Agent Execution and Compliance Evidence is the canonical instance ([OCSF](#ocsf)). Distinct from Conformist, where one context accepts an upstream's model without negotiation (the MCP authorization spec).
153
+
154
+ Used in: [`04-bounded-contexts.md`](./04-bounded-contexts.md).
155
+
156
+ ## Customer/Supplier
157
+
158
+ An upstream/downstream relationship where the downstream's needs shape the upstream's contract through negotiation — distinct from Conformist (no negotiation) and Anti-corruption layer (defensive translation). The Operator → Agent Execution PAM-JIT path is the instance: the operator's access needs are met by a negotiated contract, not by adopting an external model wholesale.
159
+
160
+ Used in: [`04-bounded-contexts.md`](./04-bounded-contexts.md).
161
+
162
+ ## Open Host Service
163
+
164
+ A context that publishes a protocol or endpoint through which many producers and consumers integrate, typically carrying a [Published Language](#published-language). Compliance Evidence is the canonical instance — fan-in of OCSF events from five trust zones, fan-out to multiple customer SIEMs. The Open Host Service is the door; the Published Language is the vocabulary.
165
+
166
+ Used in: [`04-bounded-contexts.md`](./04-bounded-contexts.md).
167
+
168
+ ## Compute-time metering
169
+
170
+ Per-session billing primitives emitted as audit events: CPU-min, RAM-GB-min, storage-GB-day, egress bytes, MCP-call count. Live on the Audit pipeline because they are part of the same hash-chained record stream.
171
+
172
+ Used in: [`02-trust-boundaries.md`](./02-trust-boundaries.md) §2, [`manifesto/02-nfrs.md`](./manifesto/02-nfrs.md) NFR-COST-05.
File without changes