@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,152 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # Future Architecture
5
+
6
+ This directory is the **single source of truth for the target architecture and migration roadmap** of Open Computer Use. It supersedes the previous `docs/requirements/` (renamed to here on 2026-05-17; see [ADR-0007](./adr/0007-superseded-by-future-architecture.md)).
7
+
8
+ The model is an internal runtime-agnostic, 4-layer design, adapted to our concrete codebase, constraints, and team preferences.
9
+
10
+ ## TL;DR
11
+
12
+ - **4 layers:** Control Plane (L4) → Orchestrator/Provider (L3) → Sandbox Runtime (L2) → Guest Agent (L1).
13
+ - **11-phase roadmap** (0, 0.5, 1–10). Each phase strips one specific blocker. **No phase breaks the Docker Compose PoC** — that's an [explicit non-blocking invariant](./roadmap.md#non-blocking-invariants).
14
+ - **Order reshuffle** (post-review): egress proxy (now Phase 8) ships **before** Kata untrusted tier (now Phase 9) — otherwise "untrusted" is a lie.
15
+ - **Locked decisions (ADRs):**
16
+ - **Languages:** Go control plane ([ADR-0001](./adr/0001-control-plane-language-go.md)); **Rust guest agent** ([ADR-0002](./adr/0002-guest-agent-language-go.md), rewritten 2026-05-18; matches the microVM-agent runtime stack).
17
+ - **Internal transport:** connect-go on L4↔L3; L3↔L1 re-evaluated at Phase 7 (connect-rust vs a WS-frame protocol) per [ADR-0008](./adr/0008-internal-grpc-external-rest-mcp.md).
18
+ - **External protocols:** MCP user-facing ([ADR-0005](./adr/0005-mcp-as-control-plane-gateway.md)); REST for admin; CDP/ttyd is WebSocket passthrough; optional dialect adapters per [ADR-0009](./adr/0009-external-protocol-dialects.md).
19
+ - **Deployment:** Docker-first then k8s ([ADR-0003](./adr/0003-docker-poc-first-then-k8s.md)); pluggable runtime via `RuntimeClass` ([ADR-0004](./adr/0004-pluggable-runtime-via-runtimeclass.md)).
20
+ - **Dependencies:** no AGPL/BSL ([ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md)).
21
+ - **AWS Lambda:** inspiration, not runtime ([ADR-0010](./adr/0010-lambda-as-inspiration-not-runtime.md)).
22
+
23
+ ## Reference architectures we draw from
24
+
25
+ - **AWS Lambda** ([`references.md`](./references.md) Lambda framing, [ADR-0010](./adr/0010-lambda-as-inspiration-not-runtime.md)) — pattern source for Firecracker tiering and snapshot-pool cold-start economics. Inspiration only.
26
+ - **Snapstart-style hot-swap** (internal design note) — Phase 10 cold-start design.
27
+ - **E2B `envd`** ([`research/02`](./research/02-e2b-infra.md)) — production-shape L1 comparison.
28
+ - **Coder** ([`research/03`](./research/03-coder.md)) — multi-region workspace-proxy pattern.
29
+ - **Per-phase research-then-sign-off cadence.** Every phase begins with a research pass against the public reference repositories listed under "Further reading" **and** the matching digest in [`research/`](./research/), produces `phase-N-research.md`, and requires owner approval before code starts. **Mandatory pre-read:** the matching phase row in [`antipatterns.md`](./antipatterns.md) — 36 antipatterns mapped to phases, each with our locked decision.
30
+
31
+ ## Document map
32
+
33
+ **Live spec (read every phase):**
34
+
35
+ ```text
36
+ docs/future-architecture/
37
+ ├── README.md ← you are here
38
+ ├── roadmap.md 11 phases (0, 0.5, 1–10), invariants, failure modes, rollback
39
+ ├── antipatterns.md ⭐ operational decision log, per-phase index
40
+ ├── gaps.md Pre-mortem gap inventory (A–M); suggestions, not commitments
41
+ ├── design-notes.md Candidate solutions, not yet locked; sibling of gaps.md
42
+ ├── phase-template.md Skeleton for phase-N-research.md and phase-N-plan.md
43
+ ├── references.md External repos + projects, annotated
44
+ ├── architecture/ Target design — 4-layer spec
45
+ │ ├── 01-layers.md 4-layer overview + ASCII diagram + mapping to today's code
46
+ │ ├── 02-layer4-control-plane.md Go service: MCP gateway, OIDC, admin UI, secret broker
47
+ │ ├── 03-layer3-providers.md SandboxProvider interface + Docker/K8s/Direct impls
48
+ │ ├── 04-layer2-runtimes.md runc / sysbox / gVisor / kata-fc / kata-ch matrix
49
+ │ ├── 05-layer1-guest-agent.md Rust agent contract, PID-1 duties, MCP tool exec
50
+ │ ├── 06-storage.md 4-tier: image / squashfs skills / workspace / S3 user-data
51
+ │ ├── 07-security.md Threat model, secret rotation, egress, image signing, audit
52
+ │ ├── 08-networking.md NetworkPolicy default-deny, egress proxy, CDP routing
53
+ │ ├── 09-templates.md SandboxTemplate spec, tenant→template resolver
54
+ │ └── 10-observability.md Metrics, traces, audit log, SLOs
55
+ └── adr/ Locked decisions
56
+ ├── 0001-control-plane-language-go.md (Phase 6 re-eval gate added 2026-05-18)
57
+ ├── 0002-guest-agent-language-go.md (rewritten 2026-05-18: Rust, not Go)
58
+ ├── 0003-docker-poc-first-then-k8s.md
59
+ ├── 0004-pluggable-runtime-via-runtimeclass.md
60
+ ├── 0005-mcp-as-control-plane-gateway.md
61
+ ├── 0006-no-agpl-no-bsl-dependencies.md
62
+ ├── 0007-superseded-by-future-architecture.md
63
+ ├── 0008-internal-grpc-external-rest-mcp.md (Phase 7 gate tightened 2026-05-18)
64
+ ├── 0009-external-protocol-dialects.md
65
+ └── 0010-lambda-as-inspiration-not-runtime.md (added 2026-05-18)
66
+ ```
67
+
68
+ **Research archive (read at start of relevant phase only):**
69
+
70
+ ```text
71
+ └── research/ Per-repo digests; reference-only, decay OK
72
+ ├── 01-kata-containers.md (Phase 7, 9)
73
+ ├── 02-e2b-infra.md (Phase 2, 3, 6, 7, 8)
74
+ ├── 03-coder.md (Phase 6)
75
+ ├── 04-cloud-hypervisor.md (Phase 9, 10)
76
+ ├── 05-firecracker.md (Phase 9, 10)
77
+ ├── 06-agent-sandbox.md (Phase 5)
78
+ ├── 07-chromedp.md (Phase 7)
79
+ ├── 08-microsandbox.md (Phase 2, 9)
80
+ ├── 09-agentbox.md (Phase 8)
81
+ ├── 10-sysbox.md (Phase 5)
82
+ ├── 11-firecracker-containerd.md (Phase 9, 10)
83
+ ├── 12-docker-socket-proxy.md (Phase 2, 8)
84
+ ├── 14-e2b-desktop-and-surf.md (Phase 7)
85
+ └── 18-open-webui-terminals-observed.md (Phase 6, 8)
86
+ ```
87
+
88
+ ## Further reading
89
+
90
+ Public open-source projects studied for the patterns the phases reuse:
91
+
92
+ ```text
93
+ kubernetes-sigs/agent-sandbox github.com/kubernetes-sigs/agent-sandbox
94
+ Michaelliv/agentbox github.com/Michaelliv/agentbox
95
+ chromedp/chromedp github.com/chromedp/chromedp
96
+ cloud-hypervisor/cloud-hypervisor github.com/cloud-hypervisor/cloud-hypervisor
97
+ coder/coder github.com/coder/coder
98
+ e2b-dev/desktop github.com/e2b-dev/desktop
99
+ e2b-dev/surf github.com/e2b-dev/surf
100
+ e2b-dev/infra github.com/e2b-dev/infra
101
+ Tecnativa/docker-socket-proxy github.com/Tecnativa/docker-socket-proxy
102
+ firecracker-microvm/firecracker github.com/firecracker-microvm/firecracker
103
+ firecracker-microvm/firecracker-containerd github.com/firecracker-microvm/firecracker-containerd
104
+ kata-containers/kata-containers github.com/kata-containers/kata-containers
105
+ microsandbox/microsandbox github.com/microsandbox/microsandbox
106
+ nestybox/sysbox github.com/nestybox/sysbox
107
+ anthropic-experimental/sandbox-runtime github.com/anthropic-experimental/sandbox-runtime
108
+ ```
109
+
110
+ Each phase in [roadmap.md](./roadmap.md) carries a checklist of which of these to study before that phase's research doc is written. Don't read the repos cold — start from [`research/`](./research/) which has per-repo "what to take" digests with file:line citations.
111
+
112
+ ## Per-phase research-then-sign-off cadence
113
+
114
+ Mandatory for **every** phase (not just the greenfield ones):
115
+
116
+ 1. **Pre-read.** Open [`antipatterns.md`](./antipatterns.md) — find your phase row — read every linked entry. These are PR-review checkpoints with our locked choice already filled in. Don't reintroduce them.
117
+ 2. **Research.** Investigate the listed public reference repos via their `research/` digest. External docs as needed.
118
+ 3. **Write `phase-N-research.md`** from [`phase-template.md`](./phase-template.md). Options, recommendation, trade-offs, success metrics.
119
+ 4. **Discuss + sign off with owner.** No code begins until approval.
120
+ 5. **Plan.** Invoke `gsd-plan-phase` to break the phase into atomic tasks. Result: `phase-N-plan.md`.
121
+ 6. **Execute** on a `dev/future-architecture/phase-N-*` branch.
122
+ 7. **Verify** against acceptance criteria.
123
+ 8. **Merge** into `dev/future-architecture` (default) or `main` (if independently shippable).
124
+ 9. **Retro.** If the phase revealed that an earlier phase was wrong, follow [roadmap.md § Failure modes](./roadmap.md#failure-modes--cross-phase-retros).
125
+
126
+ ## Branching strategy
127
+
128
+ 1. **This directory** (the docs + ADRs) lands on a docs branch and is **merged to `main`** as the locked source of truth. Pure docs, no code risk.
129
+ 2. **After merge**, all roadmap execution moves to a long-lived branch — proposed name `dev/future-architecture` — cut from `main`. `main` stays shippable.
130
+ 3. Each phase ships as a PR from `dev/future-architecture/phase-N-*` → `dev/future-architecture` (default), or → `main` directly if the phase is independently shippable and reversible (Phase 1 is the example: pure additive abstraction).
131
+ 4. `dev/future-architecture` is rebased on `main` regularly so production hotfixes never diverge.
132
+
133
+ ## What this document tree does NOT do
134
+
135
+ - It is not user-facing docs — see `docs/INSTALL.md`, `docs/FEATURES.md`, `docs/CLOUD.md` for runtime-relevant content.
136
+ - It is not a backlog — GitHub Issues for that.
137
+ - It does not authorize any code change. Each phase has its own sign-off gate.
138
+ - If a doc here conflicts with the running system, **the running system wins until that phase ships**.
139
+
140
+ ## Constraints inherited from the project
141
+
142
+ - All text **English only** (project-wide rule).
143
+ - License hygiene: no AGPL, no BSL in direct deps ([ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md)).
144
+ - Docker Compose PoC must keep working through every phase ([ADR-0003](./adr/0003-docker-poc-first-then-k8s.md)).
145
+ - The MCP user-facing contract is frozen ([ADR-0005](./adr/0005-mcp-as-control-plane-gateway.md)).
146
+
147
+ ## Next steps
148
+
149
+ 1. Owner reviews + merges this directory.
150
+ 2. Cut `dev/future-architecture` from `main`.
151
+ 3. Invoke `gsd-new-milestone` for "future-architecture migration v1" anchored to [roadmap.md](./roadmap.md).
152
+ 4. Begin Phase 1: read antipatterns row → write `phase-1-research.md` from `phase-template.md`.
@@ -0,0 +1,80 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0001 — Control plane language: Go
5
+
6
+ > Superseded by [`docs/architecture/adr/0012-implementation-language.md`](../../architecture/adr/0012-implementation-language.md), which carries the Go host-side decision forward on bank-readiness terms.
7
+
8
+ - **Status:** Superseded
9
+ - **Date:** 2026-05-17
10
+ - **Deciders:** project owner
11
+ - **Supersedes:** —
12
+ - **Superseded by:** —
13
+
14
+ ## Context
15
+
16
+ The current control plane (`computer-use-server/`) is Python FastAPI. The roadmap (`../roadmap.md`) cuts over to a greenfield control plane in Phase 6. We must commit to a language for that rewrite now, because every prior phase (Phases 1–5 inside Python) must avoid Python-only design choices that don't translate.
17
+
18
+ Constraints:
19
+ - Target deployment includes AWS and GCP managed k8s, on-prem RKE2, and Docker Compose for PoC.
20
+ - Heavy k8s API interaction (`KubernetesProvider`, `agent-sandbox` CRDs).
21
+ - MCP gateway must support long-lived streaming connections (CDP, ttyd, MCP responses).
22
+ - Operator skill set on the project (owner explicitly stated preference and unfamiliarity with Rust).
23
+
24
+ ## Decision
25
+
26
+ **The new control plane (Phase 6+) will be written in Go.**
27
+
28
+ ## Rationale
29
+
30
+ - **k8s ecosystem fit.** `client-go` is the canonical k8s API client; every CRD controller, every k8s tool, every operator pattern is Go-first. `kubernetes-sigs/agent-sandbox` (our L3 CRD basis) is Go.
31
+ - **Single SDK story across clouds.** AWS SDK v2 and GCP SDK are both mature in Go.
32
+ - **Operator preference.** Project owner is comfortable with Go, not Rust. Code we can't maintain confidently is a liability.
33
+ - **Static binary.** Trivial container packaging, easy ops.
34
+ - **Streaming concurrency model.** Goroutines + channels map well to long-lived MCP/CDP WebSocket gateways.
35
+ - **Boring choice.** Operations community knows Go-on-k8s; hiring is easier.
36
+
37
+ ## Alternatives considered
38
+
39
+ ### Stay with Python (FastAPI)
40
+ - **Pro:** zero migration cost, current team velocity, MCP SDK ecosystem strong.
41
+ - **Con:** k8s controller story is weak; long-running connections under GIL get hairy at scale; no static binary; type safety weaker for a long-lived production service.
42
+ - **Verdict:** continue using Python through Phases 1–5 (refactor in place); rewrite in Go at Phase 6.
43
+
44
+ ### Rust
45
+ - **Pro:** memory safety, smallest binary, fastest runtime, aligns with kata-agent's Layer-1 language preference. Would also let us share code between L1 (agent) and L4 (control plane).
46
+ - **Con:** project owner is not productive in Rust; k8s ecosystem in Rust is immature (`kube-rs` exists but is a fraction of `client-go`'s coverage); slower iteration on a control-plane-heavy codebase.
47
+ - **Verdict:** rejected for L4. L1 may revisit ([ADR-0002](./0002-guest-agent-language-go.md)).
48
+
49
+ ### TypeScript / Node
50
+ - **Pro:** good for admin UI sharing types.
51
+ - **Con:** worse k8s story than Go, weaker for long-lived streams, worse SDK story for AWS/GCP at the same depth as Go.
52
+ - **Verdict:** rejected. Admin UI is a separate concern and can ship in TS independently.
53
+
54
+ ## Consequences
55
+
56
+ **Positive:**
57
+ - Phase 6 produces a long-lived, easy-to-operate binary.
58
+ - Future hires and contributors have a familiar stack.
59
+ - Direct path to writing a custom k8s controller if `agent-sandbox` CRDs need extension.
60
+
61
+ **Negative:**
62
+ - Phase 6 is a non-trivial rewrite (not just a port — design improves at the same time).
63
+ - Bilingual maintenance period: Phase 6 runs Python and Go side-by-side until parity is reached.
64
+ - L1 (Go) and L4 (Go) share a language; we lose the option to share *code* with a Rust L1 if that direction is later reconsidered.
65
+
66
+ **Neutral:**
67
+ - Interfaces (L4 ↔ L3, L3 ↔ L1) stay language-agnostic (HTTP/gRPC), so the L1 language decision ([ADR-0002](./0002-guest-agent-language-go.md)) is independent.
68
+
69
+ ## Verification
70
+
71
+ - Phase 6 research doc (`phase-6-research.md`) must confirm web framework + k8s client + MCP-on-Go strategy before code starts.
72
+ - Parity acceptance: integration tests (`tests/integration/test_mcp_*.py`) pass against the new Go endpoint unchanged.
73
+
74
+ ## Phase 6 re-evaluation gate (added 2026-05-18)
75
+
76
+ [ADR-0002](./0002-guest-agent-language-go.md) flipped L1 to Rust after this ADR was accepted. That changes the two-language calculus referenced under "Negative consequences" above — we no longer have a single-language stack. Phase 6 research must therefore answer one extra question before Go code starts:
77
+
78
+ > Given that L1 is Rust, does L4 still want to be Go? The default answer remains **yes** (k8s ecosystem fit, owner familiarity, streaming concurrency, hiring) and this ADR is **not pre-superseded**. The gate exists so the Phase 6 author cannot ship Go code without having considered the alternative explicitly.
79
+
80
+ If Phase 6 research instead concludes that L4 should also be Rust, supersede this ADR rather than amending it.
@@ -0,0 +1,84 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0002 — Guest agent language: Rust
5
+
6
+ > Superseded by [`docs/architecture/adr/0012-implementation-language.md`](../../architecture/adr/0012-implementation-language.md), which carries the Rust guest-agent decision forward (this file keeps its `-go` filename for git-history continuity though the decision is Rust).
7
+
8
+ - **Status:** Superseded (rewritten 2026-05-18; supersedes the prior Go decision recorded under the same number)
9
+ - **Date:** 2026-05-18 (original 2026-05-17 version was Go-with-Rust-as-option; rewritten in place after the L1 protocol surface was prototyped and Rust proved the better starting point)
10
+ - **Related:** [ADR-0001](./0001-control-plane-language-go.md), [ADR-0008](./0008-internal-grpc-external-rest-mcp.md)
11
+ - **Filename note:** kept as `0002-guest-agent-language-go.md` for git-history continuity; the title and content are now Rust.
12
+
13
+ ## Context
14
+
15
+ Phase 7 of the roadmap replaces today's Python entrypoint + in-image MCP server with a small static binary as PID 1. The candidate languages are **Rust** (kata-agent, msb-agent, Firecracker, Cloud Hypervisor) and **Go** (consistent with ADR-0001's L4 choice, E2B's `envd`).
16
+
17
+ This decision matters more for L1 than for L4 because the in-sandbox agent is the **inner attack target**: untrusted code, prompt-injected agents, or compromised dependencies inside the sandbox all interact with L1 first. RCE in L1's HTTP / WS handling buys the attacker the agent's full powers (which are deliberately small, but still).
18
+
19
+ The earlier (2026-05-17) version of this ADR picked Go for operator-preference reasons. That was written before we prototyped the concrete L1 protocol surface. With that material now in hand, Rust is the better starting point — it matches the precedent at every microVM-runtime project we depend on, and the L1 contract turns out to be a near-1:1 match for the established agent-in-microVM pattern.
20
+
21
+ ## Decision
22
+
23
+ **Rust.** Phase 7 ships a Rust binary as the L1 guest agent. The crate footprint is the standard microVM-agent set: `tokio`, `hyper`, `tokio-tungstenite`, `tokio-vsock`, `ring`, `jsonwebtoken`, `clap`, `nix`, `serde_json`.
24
+
25
+ Go stays on the table only as a **fallback** if the Phase 7 research gate (below) surfaces a concrete blocker we cannot route around.
26
+
27
+ ## Rationale (for Rust)
28
+
29
+ - **Precedent at the runtime layer.** Every adjacent agent-in-microVM project is Rust: kata-agent, msb-agent, Firecracker, Cloud Hypervisor. We are not the first ones doing this; the language choice has been litigated.
30
+ - **Memory safety on the RCE target.** L1's WS handler is a direct RCE target. Rust's safety class eliminates a category of bugs Go does not, and the small static-PIE binary surface is easier to audit.
31
+ - **Smaller binary.** A comparable Rust agent is ~4 MB static-PIE; a Go equivalent would be 10–15 MB. For a binary that ships inside every sandbox image, the delta matters at scale.
32
+ - **Async runtime fit.** `tokio` is excellent for L1's workload (long-lived WS, multiple streams, vsock).
33
+ - **vsock crates are mature in Rust** (`tokio-vsock`). Go's vsock support exists but is less common.
34
+ - **Protocol-shaped surface.** First-byte JSON-vs-JWT dispatch, Ed25519 verification with `ring`, capabilities negotiation — small, well-bounded primitives where Rust's ergonomics fit cleanly.
35
+ - **Owner reconsideration.** The original ADR rejected Rust on owner-productivity grounds. After prototyping the protocol surface, the owner has flipped that call: the L1 surface is small and protocol-shaped, which is where Rust's friction is lowest.
36
+
37
+ ## What Go would have bought us (kept for the record)
38
+
39
+ - **Single language across L4 + L1** with ADR-0001. Lost — but L4 ↔ L1 talks over a wire protocol, not shared code, so the loss is shallow.
40
+ - **`chromedp` exists.** Mature direct-CDP client. Mitigation: Phase 7 research evaluates a Rust CDP client (`chromiumoxide`) or treats CDP as a pure WebSocket passthrough (see ADR-0008) and does not parse it on the L1 side.
41
+ - **Operator familiarity.** Owner accepts the productivity hit on the L1 side; L4 stays Go ([ADR-0001](./0001-control-plane-language-go.md)) so the day-to-day operator surface is unchanged.
42
+
43
+ ## Decision gate (Phase 7 research)
44
+
45
+ `phase-7-research.md` must confirm before code starts:
46
+
47
+ 1. **CDP driving from Rust.** `chromiumoxide` vs raw WebSocket passthrough — pick one and justify. No chromedp parity required if the L1 doesn't drive CDP itself.
48
+ 2. **Build & toolchain.** musl static-PIE target, cross-compile for `linux/amd64` and `linux/arm64`, reproducible builds.
49
+ 3. **vsock transport feasibility.** `tokio-vsock` on the runtimes we target (runc, sysbox, kata-fc, kata-ch). This also feeds the ADR-0008 Phase 7 gate.
50
+ 4. **MCP server hosting.** Rust MCP server libraries are younger than Go's; if the only mature one is unfit, decide whether to (a) hand-roll JSON-RPC dispatch, (b) accept the youngest mature crate, or (c) keep MCP termination in L4 and have L1 expose only the typed RPC.
51
+ 5. **Owner productivity check.** Honest assessment after spiking the agent skeleton.
52
+
53
+ If answers favor Go, supersede this ADR with a new one (not by editing this file again). The interface ([05-layer1-guest-agent.md](../architecture/05-layer1-guest-agent.md)) is language-agnostic — L4 doesn't care.
54
+
55
+ ## Alternatives considered
56
+
57
+ ### Go (the prior decision under this number)
58
+ - **Pro:** single language with L4, `chromedp`, E2B precedent, owner-familiar.
59
+ - **Con:** Larger binary; weaker memory-safety story on the RCE target; out of line with every adjacent microVM-agent project.
60
+ - **Verdict:** rejected as the *target* with a Phase 7 escape hatch. The original Go-leaning ADR text is preserved in git history (`git log` on this file).
61
+
62
+ ### Keep Python (status quo)
63
+ - **Pro:** zero migration cost.
64
+ - **Con:** big attack surface, no static binary, no vsock readiness, no realistic path to microVM Layer-1.
65
+ - **Verdict:** rejected as the *target*. Python entrypoint stays as the transitional L1 through Phases 1–6.
66
+
67
+ ### C / C++
68
+ - **Verdict:** rejected. Memory-safety properties worse than both Go and Rust; offers nothing they don't.
69
+
70
+ ## Consequences
71
+
72
+ **Positive:**
73
+ - L1 binary is smaller (target ~4–6 MB) and audit-able.
74
+ - L1 lines up with kata-agent, msb-agent — known idioms, known crates.
75
+ - Capabilities negotiation, Ed25519 JWT, first-byte dispatch are well-trodden patterns rather than novel work.
76
+
77
+ **Negative:**
78
+ - Two-language stack (Rust L1 + Go L4). On-call needs to read both. The wire boundary between them is the firewall: contracts in `.proto` / JSON, no shared code.
79
+ - Slower L1 iteration vs. Go in the early Phase 7 weeks. Mitigated by the small surface area of the agent.
80
+ - We give up `chromedp` — Phase 7 research must close that gap.
81
+
82
+ **Neutral:**
83
+ - ADR-0008's "connect-go on L3↔L1" line now reads "connect-rust" in effect. ADR-0008 has a Phase 7 gate ([its §"Negative"](./0008-internal-grpc-external-rest-mcp.md)) that already calls this out; the gate is tightened in the 2026-05-18 edit of that ADR.
84
+ - ADR-0001 (L4=Go) stays unchanged. Its Phase 6 gate now also re-confirms Go-vs-Rust on the L4 side given that L1 went Rust.
@@ -0,0 +1,37 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0003 — Deployment ordering: Docker PoC first, then any k8s
5
+
6
+ - **Status:** Accepted
7
+ - **Date:** 2026-05-17
8
+
9
+ ## Context
10
+
11
+ The roadmap targets multiple deployment shapes: Docker Compose (PoC), RKE2 on-prem, AWS EKS, and other k8s flavors. We need to commit to an order so each phase has a clear target.
12
+
13
+ User direction: *Docker PoC first, any k8s flavor second.*
14
+
15
+ ## Decision
16
+
17
+ 1. **Docker Compose is the PoC target.** Every phase must leave Compose runnable.
18
+ 2. **k8s is treated as flavor-agnostic.** Helm chart is the single artifact. RKE2 and AWS EKS are the two reference test targets; nothing in the code privileges one.
19
+ 3. **No flavor-specific shortcuts.** No EKS-only IAM dance baked into the chart, no RKE2-only manifest, no GKE-only autopilot tricks. Cloud-specific glue lives in Helm values overrides, never in templates.
20
+
21
+ ## Rationale
22
+
23
+ - Compose is the fastest dev loop and the most reproducible PoC for community contributors. Breaking it imposes setup tax on everyone.
24
+ - k8s flavor diversity is real: target deployments span on-prem (RKE2) and cloud-managed (EKS, GKE, AKS). One chart that works on any conformant k8s ≥ 1.28 maximizes reach.
25
+ - The user explicitly does not want to prioritize one k8s flavor over another.
26
+
27
+ ## Consequences
28
+
29
+ - Every PR must include "Compose still works" as part of acceptance.
30
+ - Phase 5 (Helm hardening + KubernetesProvider) tests on **both** kind/k3d (local k8s) and a real RKE2 or EKS cluster before merge.
31
+ - bare-metal-only L2 runtimes (kata-fc, kata-ch — Phase 9) require explicit bare-metal node pool — documented as a precondition, not assumed.
32
+
33
+ ## Alternatives considered
34
+
35
+ - **k8s first, Compose deprecated** — rejected. Loses local dev story, community contributors hate it.
36
+ - **Pick one k8s flavor** — rejected. User said "any k8s".
37
+ - **Docker Compose forever** — rejected. Production tenancy / isolation / scale requires k8s.
@@ -0,0 +1,34 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0004 — Pluggable runtime via Kubernetes RuntimeClass (and per-template selection)
5
+
6
+ - **Status:** Accepted
7
+ - **Date:** 2026-05-17
8
+
9
+ ## Context
10
+
11
+ We need to swap L2 runtimes (runc / sysbox / gVisor / kata-fc / kata-ch) per template, not per cluster. Internal sandboxes go to sysbox; public Computer Use goes to kata-ch; dev goes to runc. All in the same cluster.
12
+
13
+ ## Decision
14
+
15
+ - **In k8s:** runtime selection is `Pod.spec.runtimeClassName`, carried from `SandboxTemplate.runtime_class`.
16
+ - **Outside k8s:** the provider (`DirectCHProvider`, `DockerComposeProvider`) honors the same field, mapping it to its native mechanism.
17
+ - **No runtime detection.** Templates declare; cluster operators install the matching RuntimeClasses.
18
+
19
+ ## Rationale
20
+
21
+ - `runtimeClassName` is the standard k8s primitive. No reinvention.
22
+ - Per-template choice is what tenant tiering requires.
23
+ - Separation of concerns: operators install runtimes (kata-deploy DaemonSet etc.); template authors choose them.
24
+
25
+ ## Consequences
26
+
27
+ - Helm chart documents required RuntimeClasses per template.
28
+ - Bare-metal node pool with taints required when any template uses `kata-*`.
29
+ - Phase 5 ships with `sysbox` only; Phase 7 adds `gVisor`; Phase 9 adds `kata-fc` / `kata-ch`.
30
+
31
+ ## Alternatives
32
+
33
+ - **Single cluster-wide runtime** — rejected, no tenant tiering possible.
34
+ - **Custom CRD with runtime-detection** — rejected, reinvents RuntimeClass.
@@ -0,0 +1,34 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0005 — MCP stays the user-facing protocol; admin UI uses a separate API
5
+
6
+ - **Status:** Accepted
7
+ - **Date:** 2026-05-17
8
+
9
+ ## Context
10
+
11
+ Today users (Open WebUI and direct clients) talk to us via MCP at `/mcp`. We're adding an admin UI for operators. We need to decide whether to unify on MCP or separate the surfaces.
12
+
13
+ ## Decision
14
+
15
+ - **MCP** is the **only** user-facing protocol. Frozen contract — every phase preserves it.
16
+ - **Admin UI** consumes a separate **REST/GraphQL** API on the same control-plane process, behind separate OIDC scope.
17
+ - **No MCP-for-admin.** Admin operations don't fit JSON-RPC tool-call semantics well, and conflating roles raises auth blast-radius.
18
+
19
+ ## Rationale
20
+
21
+ - MCP is the AI-tool protocol; designed for "agent calls tool". Admin operations ("list sessions", "rotate keys") are CRUD, not tool calls.
22
+ - Separate APIs let auth scopes be distinct and minimal.
23
+ - We don't fork MCP; we don't extend it with non-standard methods.
24
+
25
+ ## Consequences
26
+
27
+ - L4 exposes two distinct HTTP routes: `/mcp` (MCP gateway) and `/admin/*` (admin API).
28
+ - Admin UI is its own deployment / SPA; backend stays in Go control plane.
29
+ - Open WebUI integration is unaffected.
30
+
31
+ ## Alternatives
32
+
33
+ - **MCP-only (admin via custom MCP tools)** — rejected, abuses the protocol, mixes auth scopes.
34
+ - **Two separate processes** — rejected for now; can split later if admin scale demands it.
@@ -0,0 +1,41 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0006 — No AGPL, no BSL in direct dependencies
5
+
6
+ - **Status:** Accepted
7
+ - **Date:** 2026-05-17
8
+
9
+ ## Context
10
+
11
+ Our project is BUSL-1.1 (with MIT for select skills, per `CLAUDE.md`). Several adjacent projects in this space carry licenses that would either contaminate our codebase or restrict our ability to ship.
12
+
13
+ ## Decision
14
+
15
+ **Disallowed in direct dependencies:**
16
+ - **GPL v2 / v3** — copyleft, contaminates linked code.
17
+ - **AGPL v3** — strongest copyleft, contaminates even SaaS use.
18
+ - **BSL (Business Source License)** — not OSI-open-source; HashiCorp Nomad post-acquisition.
19
+
20
+ **Allowed:** Apache 2.0, MIT, BSD-2/3, MPL 2.0, LGPL 2.1+ (link only).
21
+
22
+ **Implications:**
23
+ - **Daytona** (AGPL v3) — never adopted, even for reference patterns we'd copy code from.
24
+ - **Nomad** (BSL) — no Nomad provider, no Nomad client in our stack. E2B's Nomad-specific code is *reference-only*.
25
+
26
+ ## Rationale
27
+
28
+ - BUSL-1.1 + AGPL = legal headache for downstream users.
29
+ - BSL isn't OSI-open-source; building on it limits our distribution flexibility.
30
+ - Strict license hygiene now is cheaper than disentangling later.
31
+
32
+ ## Consequences
33
+
34
+ - Every new direct dependency PR must include a license check.
35
+ - CI should enforce a license-allowlist scan (Phase 5+ deliverable).
36
+ - Some convenience tools are off the table; alternatives must be found (e.g., for Nomad-style scheduling we'd build on k8s instead).
37
+
38
+ ## Alternatives
39
+
40
+ - **Allow AGPL via "mere aggregation" loophole** — rejected. Legal risk too high; the loophole is contested.
41
+ - **Switch project license to AGPL** — rejected. Out of scope of this ADR.
@@ -0,0 +1,37 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0007 — Old `docs/requirements/` superseded by `docs/future-architecture/`
5
+
6
+ - **Status:** Accepted (historical note)
7
+ - **Date:** 2026-05-17
8
+
9
+ ## Context
10
+
11
+ The directory `docs/requirements/` previously held our k8s architecture and 6-phase roadmap (committed 2026-05-16). On 2026-05-17 we:
12
+
13
+ 1. Renamed the directory to `docs/future-architecture/` via `git mv` (history preserved).
14
+ 2. Rewrote the contents around the internal 4-layer model.
15
+ 3. Re-folded the old 6 phases into the new 10-phase roadmap.
16
+
17
+ ## Decision
18
+
19
+ - `docs/requirements/` no longer exists. All references to it should point at `docs/future-architecture/`.
20
+ - The old `roadmap.md` content is **not lost** — its phases live on as new phases 1, 3, 5, 8 (see [`../roadmap.md`](../roadmap.md)).
21
+ - The old `k8s-architecture.md` 4-tier storage model lives on as [`../architecture/06-storage.md`](../architecture/06-storage.md).
22
+ - The `RuntimeBackend` protocol sketch lives on as [`../architecture/03-layer3-providers.md`](../architecture/03-layer3-providers.md)'s `SandboxProvider`.
23
+
24
+ ## Why we didn't keep the old files as ADRs
25
+
26
+ - They were *plans*, not decisions. The new docs supersede them entirely.
27
+ - `git log --follow` preserves history; nothing is lost.
28
+ - Keeping zombie files invites stale advice.
29
+
30
+ ## Verification
31
+
32
+ ```bash
33
+ git log --follow docs/future-architecture/roadmap.md
34
+ git log --follow docs/future-architecture/architecture/06-storage.md
35
+ ```
36
+
37
+ Both should show pre-rename commits on `docs/requirements/roadmap.md` and `docs/requirements/k8s-architecture.md`.
@@ -0,0 +1,106 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # ADR-0008 — Internal transport: connect-go on L4↔L3 (Phase 7 picks L3↔L1). External: MCP + REST. CDP/ttyd: WebSocket passthrough.
5
+
6
+ - **Status:** Accepted (Phase 7 gate tightened 2026-05-18 after [ADR-0002](./0002-guest-agent-language-go.md) flipped L1 to Rust)
7
+ - **Date:** 2026-05-17 (original) · 2026-05-18 (Phase 7 gate edit)
8
+ - **Related:** [ADR-0001](./0001-control-plane-language-go.md), [ADR-0002](./0002-guest-agent-language-go.md), [ADR-0005](./0005-mcp-as-control-plane-gateway.md)
9
+
10
+ ## Context
11
+
12
+ The architecture has three transport boundaries that are too easy to conflate:
13
+
14
+ 1. **External, user-facing** — user agents and Open WebUI call us.
15
+ 2. **External, operator-facing** — admin UI calls us.
16
+ 3. **Internal** — L4 ↔ L3 ↔ L1.
17
+ 4. **External, opaque passthrough** — CDP frames and ttyd between user UI and the sandbox's Chromium.
18
+
19
+ Until now docs said "HTTP/gRPC" everywhere — ambiguous. An industry-observed "HTTP+WS API" pattern describes a *user-facing* agent transport; for us L1 is internal, not user-facing. Different decomposition → different transport choice.
20
+
21
+ ## Decision
22
+
23
+ | Boundary | Protocol | Rationale |
24
+ |---|---|---|
25
+ | User → L4 (agents, Open WebUI) | **MCP** (JSON-RPC over HTTP/WebSocket) | Frozen contract per [ADR-0005](./0005-mcp-as-control-plane-gateway.md) |
26
+ | Admin UI → L4 | **REST** (OpenAPI-described) | Standard for SPAs, generates browser clients trivially, debuggable via curl/Postman |
27
+ | L4 ↔ L3 (provider) | **connect-go** (mTLS) | Schema-first; gRPC streaming + Connect/HTTP-JSON from one `.proto`. L4 is Go ([ADR-0001](./0001-control-plane-language-go.md)). |
28
+ | L3 ↔ L1 (agent) | **Open — Phase 7 picks** between connect-rust (typed `.proto` over vsock/TCP) and a WS-frame protocol over `tokio-vsock` | L1 is Rust ([ADR-0002](./0002-guest-agent-language-go.md), rewritten 2026-05-18); the language flip changes the trade-off vs. the original Go-era pick. Gate language below. |
29
+ | User UI ↔ sandbox CDP/ttyd | **WebSocket passthrough** via L4 | L4 does **not** parse; shovels frames opaquely |
30
+
31
+ **connect-go** specifically (not pure grpc-go):
32
+ - Single server speaks **gRPC**, **Connect** (HTTP/2 framed), and **gRPC-Web** from one `.proto`.
33
+ - HTTP/JSON variant lets us `curl` any internal RPC for debug, no `grpcurl` required.
34
+ - Bidi streaming preserved.
35
+ - Used by E2B's `envd` and by Connect's own production users.
36
+
37
+ ## What MCP looks like inside
38
+
39
+ MCP wire format stays **opaque to L1**. L4 receives MCP JSON-RPC → translates to typed `connect-go` calls on L3 → L3 calls L1's `Exec(cmd, env, stdin) → stream<Output>` etc.
40
+
41
+ Consequence: MCP semantics live **only** in L4 gateway. We can:
42
+ - Change internal RPCs without touching the MCP contract.
43
+ - Add a second user-facing protocol (e.g., direct gRPC API for power users) without rewriting internals.
44
+ - Swap L1 implementations without MCP-side test changes.
45
+
46
+ ## CDP and ttyd are the exception
47
+
48
+ Long-lived WebSocket from user UI → L4 → sandbox Chromium. L4 must **not** decode CDP messages — it consistently hashes the session ID to a sandbox pod and shovels frames in both directions. Reasons:
49
+
50
+ - CDP messages are large (screencast binary frames) — parsing adds latency and zero value.
51
+ - Schema is upstream-owned (Chrome team) — keeping us out of it = no version-lock.
52
+ - Same shape applies to ttyd.
53
+
54
+ ## Alternatives considered
55
+
56
+ ### Pure grpc-go (no Connect)
57
+ - **Pro:** Most "standard" gRPC stack.
58
+ - **Con:** No HTTP/JSON debug path; needs `grpcurl`. Browser clients require gRPC-Web sidecar (Envoy/Connect anyway).
59
+ - **Verdict:** Rejected. connect-go is a superset.
60
+
61
+ ### HTTP+WS everywhere (status quo, agent-transport style for L1)
62
+ - **Pro:** Simpler tooling; works with stdlib.
63
+ - **Con:** No schema enforcement; breaking changes hit at runtime. Bidi streaming via WebSocket is hand-rolled framing. Type safety lost across L4↔L3↔L1.
64
+ - **Verdict:** Rejected for internal boundaries.
65
+
66
+ ### REST everywhere
67
+ - **Pro:** Maximum debuggability.
68
+ - **Con:** Streaming exec / events / metrics over REST is awkward (SSE works but is one-direction). Schemas via OpenAPI possible but weaker than `.proto` in our experience.
69
+ - **Verdict:** Rejected for L4↔L3↔L1. Kept for admin UI.
70
+
71
+ ### gRPC + gRPC-Web (no Connect)
72
+ - **Pro:** Standard.
73
+ - **Con:** Needs Envoy or grpc-web translator. connect-go does this in-process.
74
+ - **Verdict:** Rejected.
75
+
76
+ ## Consequences
77
+
78
+ **Positive:**
79
+ - One `.proto` per boundary; CI compiles it for both sides; breaking changes caught at build time.
80
+ - Same Go server serves gRPC, Connect, and `curl` calls — no separate debug stack.
81
+ - L1's agent contract becomes typed → cross-tier consistency (sysbox / gVisor / kata all serve same `.proto`).
82
+ - MCP contract isolation → internal refactors don't risk the user-facing wire.
83
+
84
+ **Negative:**
85
+ - One more tool in the toolbox (`buf` for `.proto` linting, `connect-go` codegen). Worth it.
86
+ - L1 agent must include connect-go runtime → slightly larger binary than raw HTTP server (~1–2 MB). Acceptable per [ADR-0002](./0002-guest-agent-language-go.md) targets (~5–10 MB total).
87
+ - Phase 7 research must include "vsock + connect-go" feasibility — vsock transport for connect/gRPC is well-trodden but not zero-config. **Update (2026-05-18):** with L1 now in Rust ([ADR-0002](./0002-guest-agent-language-go.md)), the L3↔L1 leg is effectively **connect-rust** (not connect-go) **or** a WS-frame protocol over `tokio-vsock`. Phase 7 research must explicitly compare these two and pick one. The L4↔L3 leg stays connect-go (L4 is Go per [ADR-0001](./0001-control-plane-language-go.md)).
88
+
89
+ **Neutral:**
90
+ - Phase 6 research now picks connect-go as primary candidate; the framework choice section in `roadmap.md` narrows.
91
+ - Existing Python `computer-use-server` keeps speaking HTTP/MCP unchanged — transition is at Phase 6 cutover.
92
+
93
+ ## Migration notes
94
+
95
+ - **Phases 1–5 (Python orchestrator):** stay on Python HTTP; provider interface is in-process Protocol; HTTP transport between orchestrator and pool-manager sidecar.
96
+ - **Phase 6 (Go control plane):** introduces `.proto` files for L4↔L3 boundary. Python orchestrator keeps working in parallel; new Go service serves both MCP gateway (external) and connect RPCs (internal).
97
+ - **Phase 7 (Rust agent per [ADR-0002](./0002-guest-agent-language-go.md)):** L1 serves either connect-rust or a WS-frame protocol on vsock/TCP, decided by the Phase 7 research gate. L3 client compiled from the same `.proto` (connect path) or a hand-rolled WS client (WS-frame path).
98
+ - **Phase 8 (egress proxy):** connect for L4↔proxy stats/control; egress traffic itself stays HTTP CONNECT (proxy is a TCP proxy, not RPC).
99
+ - **Phase 9 (Kata):** vsock + connect-go validated.
100
+ - **Phase 10 (HA / multi-region):** mTLS on all internal RPCs; cert rotation via cert-manager or equivalent.
101
+
102
+ ## Verification
103
+
104
+ - Each phase's PR must include the `.proto` schema diff if any internal RPC changed.
105
+ - `tests/integration/test_mcp_*.py` continue to call MCP and **do not** speak connect — proving the user-facing surface is unchanged.
106
+ - Phase 6 acceptance: `curl -H "Content-Type: application/json" -X POST http://l4/api.v1.SandboxProvider/Spawn -d '{...}'` returns the same result as the typed gRPC call.