@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,281 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # Architecture Gap Analysis
5
+
6
+ > **Pre-mortem inventory** of architecture topics that are either absent or only lightly addressed in [`architecture/`](./architecture/), [`adr/`](./adr/), and [`roadmap.md`](./roadmap.md). Captured **before** code meets reality, so each gap can be resolved (or explicitly deferred) on its own merits.
7
+ >
8
+ > This is **not** an ADR and **not** a roadmap edit. Phase pointers below are **suggestions**, not commitments. Tier-1 gaps are expected to graduate into their own ADRs / phase-research docs over time.
9
+
10
+ ## How to read this doc
11
+
12
+ - **Status legend**
13
+ - **MISSING** — topic not addressed anywhere in the live spec.
14
+ - **LIGHT** — touched in one or two places but no architectural weight (no contract, no acceptance criteria, no rollback).
15
+ - **PRESENT** — explicitly named with a contract or acceptance hook in `architecture/` or `adr/`.
16
+ - **Lands in phase** — the existing roadmap phase that is the most natural home for the work. Where no phase fits, the entry says so.
17
+ - **Cross-cuts** — items that apply to every phase. They belong in invariants or CI policy, not a single phase row.
18
+ - **External precedents** — projects worth studying before opening an ADR. These should turn into entries in [`references.md`](./references.md) and digests under [`research/`](./research/) when their gap is taken up.
19
+
20
+ For phase context see [`roadmap.md`](./roadmap.md). For locked operational choices see [`antipatterns.md`](./antipatterns.md).
21
+
22
+ ---
23
+
24
+ ## A. Multi-tenancy beyond per-session
25
+
26
+ The current isolation boundary is the **sandbox**. A tenant is an organisation that owns N users and M sessions. The tenant boundary is not defined.
27
+
28
+ - **Tenant ≠ session.** Define the tenant model (org → users → sessions) as a first-class L4 entity.
29
+ - **Fairness between tenants** on a shared cluster — noisy-neighbour case where one tenant drains every warm-pool slot.
30
+ - **Per-tenant aggregate quotas** — concurrent sessions, MCP calls/min, storage GB, egress bytes/day. Per-sandbox quotas are insufficient.
31
+ - **Per-tenant config overlay** — tenant A gets MCP tool set X with Chrome egress to `*.github.com`; tenant B gets set Y with egress only to `*.internal.bank`.
32
+ - **Tenant-scoped audit** — auditor of bank A must not see events from bank B.
33
+
34
+ **Status:** LIGHT. `architecture/02-layer4-control-plane.md` names `tenant_id` on the session router, per-tenant S3 buckets, and the k8s "namespace per tenant" idea, but org-level fairness, aggregate quotas, per-tenant tool overlays, and per-tenant audit scoping are not contracted.
35
+
36
+ **Lands in phase:** deeper Phase 5 (`KubernetesProvider` is where tenant = namespace lives) with Phase-6 surface follow-ups (admin API for tenant CRUD, quotas).
37
+
38
+ **External precedents:** Vault namespaces, Confluent Cloud multi-tenant model, Kubernetes Hierarchical Namespaces (HNC), Snowflake account model.
39
+
40
+ ---
41
+
42
+ ## B. Identity beyond OIDC
43
+
44
+ OIDC is named in Phase 6. Enterprise-IT integration needs strictly more.
45
+
46
+ - **SAML 2.0** — required by large enterprises. Distinct protocol, not free from OIDC.
47
+ - **LDAP / Active Directory** direct — some legacy enterprises support nothing else.
48
+ - **Service accounts** for machine-to-machine (customer CI/CD triggers our platform).
49
+ - **RBAC granularity** — concrete roles (`template-admin`, `session-creator`, `audit-reader`, `secret-rotator`) and their permission matrices.
50
+ - **Federated identity for self-hosted** — the customer's Keycloak / Okta / Ping is the IdP, we are only the consumer.
51
+ - **Token caching & rotation policy** — explicit rotation cadence for access tokens, behaviour on revocation.
52
+
53
+ **Status:** MISSING (SAML, LDAP/AD, service accounts, federated self-hosted, token-rotation policy) / LIGHT (RBAC granularity — listed as an L4 concern but no permission matrix exists; per-sandbox empty-RBAC ServiceAccount is documented in `architecture/07-security.md` but that is sandbox-scoped, not identity-scoped).
54
+
55
+ **Lands in phase:** Phase 6 (Go control plane auth surface). RBAC matrix is a docs-only prerequisite that can land in Phase 0.5 follow-on.
56
+
57
+ **External precedents:** Coder enterprise auth, GitLab self-hosted Omnibus, Authentik, Keycloak federation patterns.
58
+
59
+ ---
60
+
61
+ ## C. Compliance and audit immutability
62
+
63
+ Audit append-only sink with ≥ 90 d retention is named in `architecture/07-security.md` and `architecture/10-observability.md`. Compliance posture is mentioned. Several pieces are still missing.
64
+
65
+ - **Frameworks promised.** SOC 2 Type II, ISO 27001, HIPAA, PCI DSS — each carries distinct controls. Without an explicit choice this does not sell.
66
+ - **Audit log immutability.** Write-once, no retroactive edit. S3 Object Lock / WORM storage. Phase 8 names the pipeline; immutability needs to be named with the same weight.
67
+ - **Retention policy.** Financial sector ≥ 7 years; HIPAA ≥ 6 years; GDPR "no longer than necessary". The conflict has to be resolved explicitly.
68
+ - **Data residency** as a hard guarantee. Tenant X data lives only in region Y. Architecturally this is **deployment topology**, not a template setting — a single control plane cannot serve tenants with different residency without full physical separation.
69
+ - **Right to be forgotten (GDPR Art. 17)** — selective deletion of a user's data from every system **including the audit log** (conflicts with immutability — needs tombstoning).
70
+ - **Session recording / lawful intercept** — a regulator may demand "show everything the agent did over period X" including screenshots, MCP calls, user input. A computed artefact.
71
+
72
+ **Status:** PRESENT (SOC 2 / HIPAA / PCI named in `architecture/07-security.md`, append-only sink named in `07-security.md` + `10-observability.md`) / LIGHT (GDPR — ephemeral-by-default posture only, no Art. 17 deletion flow; ISO 27001 implied not mapped) / MISSING (data residency, retention-policy conflict resolution, lawful-intercept session recording).
73
+
74
+ **Lands in phase:** first iteration in Phase 4 (secret broker — foundation for tenant-scoped secrets) and Phase 8 (audit immutability + retention). Data residency belongs in the future multi-region milestone (post Phase 10).
75
+
76
+ **External precedents:** AWS GovCloud / FedRAMP boundary doc, Sentry Single Tenant compliance, Atlassian Trust Center as a public-facing template.
77
+
78
+ ---
79
+
80
+ ## D. Determinism and session replay
81
+
82
+ - Can an agent session be **replayed 100 % accurately** for debugging? If the agent did something strange — full replay, or at least deterministic audit.
83
+ - Persist every MCP call + screenshot in a format that **plays back** → 80 % of replay capability at a low cost.
84
+ - **Time inside the sandbox** — does the agent see real wallclock or a frozen one? Some sandbox runtimes manipulate the clock for consistent caching and reproducibility.
85
+ - **Random-seed control** — for skills that use randomness, fix the seed per session for replay.
86
+ - **Audit-event ID** — UUIDv7 (timestamp-prefixed) is much easier for time-range queries than UUIDv4.
87
+
88
+ **Status:** LIGHT. `architecture/07-security.md` covers CRNG reseed and wall-clock hardening on snapstart restore (anti-divergence), but session-replay debugging, deterministic time inside the sandbox, per-session random-seed control, and UUIDv7 audit IDs are not specified.
89
+
90
+ **Lands in phase:** Phase 7 (Rust agent — capabilities + dual-port API are the natural home for replay primitives) + Phase 8 (audit pipeline — replay reads from this).
91
+
92
+ **External precedents:** Mozilla rr (record/replay debugger), Replay.io, Antithesis (deterministic simulator), DVC for ML experiment determinism.
93
+
94
+ ---
95
+
96
+ ## E. Cost attribution and metering
97
+
98
+ - **Per-session billing primitives** — CPU-min, RAM-GB-min, storage-GB-day, egress bytes, MCP-call count. Without these no internal showback and no external chargeback.
99
+ - **Per-tenant aggregation** — realtime and period rollups.
100
+ - **Cost annotation on every sandbox event** — for post-hoc analysis ("what burned Q3 budget").
101
+ - **Threshold alerts** — tenant approaching quota → notification.
102
+
103
+ **Status:** MISSING. `architecture/10-observability.md` only carries a RAM capacity-sizing formula. No billing primitives, no metering SDK, no cost tagging.
104
+
105
+ **Lands in phase:** suggestion for a new **Phase 6.5** between Go control plane (Phase 6) and Rust agent (Phase 7). Not edited into `roadmap.md` in this PR.
106
+
107
+ **External precedents:** Kubecost (k8s-native cost), AWS Cost Explorer API model, OpenCost (CNCF), Stripe metered-billing primitives.
108
+
109
+ ---
110
+
111
+ ## F. Disaster recovery — RTO/RPO explicit
112
+
113
+ Phase 10 ships HA in a single region and multi-region foundations. The DR contract is not explicit.
114
+
115
+ - **RTO (Recovery Time Objective)** — how long to come back up after a catastrophe? 5 minutes? An hour? A day?
116
+ - **RPO (Recovery Point Objective)** — how much data can be lost on failover? Seconds? Minutes?
117
+ - **Backup strategy for control-plane state** — KV snapshots, PostgreSQL backups, S3 versioning.
118
+ - **Restore drills.** When was the last one. Without regular drills DR is fiction.
119
+ - **Chaos engineering** — regular component kill, verify the system degrades rather than collapses.
120
+
121
+ **Status:** LIGHT. Phase 10 snapshot/restore covers pause-resume and cross-AZ recovery; the DR runbook is mentioned but RTO/RPO targets, backup-strategy spec, drill cadence, and chaos engineering are not.
122
+
123
+ **Lands in phase:** suggestion to rename Phase 10 to **"HA + DR"** with explicit RTO/RPO in the acceptance criteria. Not edited into `roadmap.md` in this PR.
124
+
125
+ **External precedents:** Stripe DR game days (public write-ups), Netflix Chaos Monkey, AWS Well-Architected DR Pillar, Velero for k8s backups.
126
+
127
+ ---
128
+
129
+ ## G. Supply chain security
130
+
131
+ - **SBOM (Software Bill of Materials)** for every image. Without an SBOM, US-government deployments under Executive Order 14028 are unreachable.
132
+ - **Cosign / Sigstore signing** for every artefact — images, Helm charts, binary releases. Verify chain in kubectl admission.
133
+ - **Continuous CVE scanning** — Trivy / Grype in CI per PR + daily against existing images.
134
+ - **Reproducible builds** for the L1 agent — musl static-PIE, fixed timestamps, bit-by-bit identical builds. Rust fits well.
135
+ - **Base-image hardening** — Chainguard / Wolfi distroless instead of Ubuntu. Order-of-magnitude fewer CVEs by default.
136
+
137
+ **Status:** PRESENT (Cosign signing + admission verifier in `architecture/07-security.md`; templates reference by digest) / LIGHT (CVE risks per runtime listed but no automated scanning or IR flow; reproducible-build hints exist in `antipatterns.md` A22 — pinned versions + `SOURCE_DATE_EPOCH`, but not validated end-to-end) / MISSING (SBOM generation/distribution, base-image hardening).
138
+
139
+ **Lands in phase:** cross-cut. Add to a Phase-0.5 follow-on as CI policy (SBOM emit, Trivy scan, reproducibility CI check). Base-image hardening fits Phase 7 (new image is rebuilt anyway).
140
+
141
+ **External precedents:** SLSA framework, in-toto attestations, GUAC, CNCF TAG-Security guide.
142
+
143
+ ---
144
+
145
+ ## H. Air-gap and corporate networking
146
+
147
+ - **Air-gapped deployment** — offline installer with a tarball of every image and chart. Must install with **no internet at all**.
148
+ - **Corporate egress proxy** — `$HTTP_PROXY`, `$HTTPS_PROXY`, `$NO_PROXY` honoured everywhere. Custom CA bundle injection.
149
+ - **Internal certificate authority** — customer supplies their own CA, our services accept it for mTLS.
150
+ - **DNS via corp resolver** — cannot use `8.8.8.8`; must work with split-horizon DNS.
151
+ - **Update channel in air-gap** — how patches are delivered. USB stick? Internal mirror registry?
152
+
153
+ **Status:** MISSING.
154
+
155
+ **Lands in phase:** suggestion for a dedicated future phase, gated on the first regulated-deployment customer. Not edited into `roadmap.md` in this PR.
156
+
157
+ **External precedents:** Replicated KOTS (purpose-built for self-hosted), Anthos on-prem, GitLab Omnibus offline install, Anchore Enterprise.
158
+
159
+ ---
160
+
161
+ ## I. Operator UX (Day-2 ops)
162
+
163
+ - **Synthetic transactions** — every deploy auto-runs a canary sandbox session with a known tool and checks the result. Fails the deploy if it does not work.
164
+ - **Diagnostic bundle** — one command collects logs / configs / metrics / topology into a zip for support. Without it every support ticket is 3 hours of artefact gathering.
165
+ - **SLO templates** — Prometheus rules + Grafana dashboards out of the box.
166
+ - **Runbook catalogue** — "control plane unresponsive" → steps. "Sandbox stuck in Creating" → steps. Markdown in the repo.
167
+ - **Upgrade tooling** — `helm upgrade` with pre/post hooks for migrations. One-command rollback.
168
+
169
+ **Status:** PRESENT (SLO targets in `architecture/10-observability.md`; per-phase rollback windows in `roadmap.md`) / LIGHT (health probes named but no synthetic-transaction framework) / MISSING (diagnostic bundle, runbook catalogue, upgrade tooling beyond per-phase rollback).
170
+
171
+ **Lands in phase:** cross-cut. Each phase should grow operator-UX artefacts in parallel rather than wait for a standalone phase.
172
+
173
+ **External precedents:** Replicated Troubleshoot, Bitnami ops playbooks, GitLab "Database Lab" pattern, Sentry self-hosted ops.
174
+
175
+ ---
176
+
177
+ ## J. Versioning policy
178
+
179
+ - **Backward compatibility** — does L1 v3 control plane work with an L4 v1 control plane? How many versions back are supported. Capabilities negotiation is already in the architecture, which is good.
180
+ - **API deprecation policy** — announce N versions before removal, `Deprecated:` header on responses (Stripe-style).
181
+ - **Database migrations** — forward-only without data loss. Rollback is a separate DR procedure. Atlas / Sqitch / golang-migrate.
182
+ - **Live migration of sessions on upgrade** — if the control plane restarts, do live sandboxes keep running (because L1 is autonomous), or must the client reconnect? The contract must be written down.
183
+
184
+ **Status:** LIGHT (capabilities negotiation in `architecture/05-layer1-guest-agent.md`; Phase 6 has a dual-run strategy section) / MISSING (formal API-deprecation policy, schema-migration tooling spec, session-survives-upgrade contract).
185
+
186
+ **Lands in phase:** suggestion to add a new file `architecture/11-versioning.md` as the canonical versioning contract. Not created in this PR.
187
+
188
+ **External precedents:** Stripe API versioning manifesto, Kubernetes Deprecation Policy, Tailscale upgrade-compatibility blog posts.
189
+
190
+ ---
191
+
192
+ ## K. Agentic-workload edge cases
193
+
194
+ These are the core, and they tend to surface in production:
195
+
196
+ - **Cancellation latency.** User clicks Stop. How many seconds before a `pip install` in flight is actually stopped? Graceful chain (`SIGTERM` → wait → `SIGKILL`) timeout has to be explicit.
197
+ - **Long-running tools without HTTP timeout** — 30-minute web scrape, model training. WebSocket keepalive, progress events.
198
+ - **Disconnection mid-tool** — tool still running, client dropped. What should L1 do? Wait + save result? Kill?
199
+ - **Concurrent tool calls in one session** — legal or not? Two tools writing into the same directory?
200
+ - **Tool output larger than the MCP message limit** — `dmesg` stdout or a giant JSON. Streaming, pagination, pre-signed URL — which one is chosen.
201
+ - **Large files agent → user** — agent generated a 5 GB Parquet. S3 pre-signed URL or your transport? Cost implications.
202
+
203
+ **Status:** LIGHT (`architecture/05-layer1-guest-agent.md` covers `SIGTERM`→`SIGKILL`, zombie reaping, dual-port API; the agent-in-microVM pattern handles zombies and long-running processes) / MISSING (explicit cancellation-latency SLO, long-running-tool heartbeat protocol, disconnection-mid-tool semantics, concurrent-tool-call contract, output-size flow control, large-artefact transport policy).
204
+
205
+ **Lands in phase:** Phase 7 acceptance should be strengthened to cover the above. No new phase.
206
+
207
+ **External precedents:** JupyterHub kernel restart semantics, gRPC streaming patterns, S3 multipart upload, Anthropic Computer Use public docs (cancellation behaviour is described there).
208
+
209
+ ---
210
+
211
+ ## L. MCP ecosystem (zone of uncertainty)
212
+
213
+ - **MCP server discovery** — how the agent finds what is available. Static config vs runtime registry.
214
+ - **Per-tenant MCP server set** — tenant A gets Jira/Confluence, tenant B gets Salesforce. Provisioning flow.
215
+ - **Sandboxing MCP servers** — a third party wrote an MCP server. Do you trust it? Isolate it from agent state?
216
+ - **Capability advertisement** — server X says "I can tool A with args B". Schema validation.
217
+
218
+ **Status:** LIGHT (`architecture/02-layer4-control-plane.md` mentions tenant-scoped system prompt rendering and templates drive the tool set, but per-tenant MCP capability scoping is not contracted) / MISSING (MCP server discovery flow, sandboxing of MCP servers, capability schema validation).
219
+
220
+ **Lands in phase:** parallel watching. The MCP spec itself is moving — do not lock the design under the current MCP API; expect movement.
221
+
222
+ **External precedents:** Anthropic MCP spec (primary source). Few mature precedents — this is an open shape in the industry.
223
+
224
+ ---
225
+
226
+ ## M. Open-source community ops
227
+
228
+ Before publishing:
229
+
230
+ - **Security disclosure policy** — `SECURITY.md`, `security@your-domain`, GPG key, response SLA. Without it researchers file CVEs in public.
231
+ - **Code of Conduct** — Contributor Covenant template.
232
+ - **Maintainer access policy** — who can merge. Bus factor.
233
+ - **Phone-home telemetry for OSS** — yes / no / opt-in. Default-on is a red flag for customers.
234
+ - **Release cadence and LTS** — each minor supported for how long. Enterprise expectation is "N−2 versions receive security patches".
235
+ - **Third-party builds** — do downstream distributions get to redistribute? Nuances with BUSL / FSL.
236
+
237
+ **Status:** MISSING (no `SECURITY.md`, CoC, telemetry policy, release-cadence/LTS spec, redistribution policy in the architecture).
238
+
239
+ **Lands in phase:** non-blocker. Pre-OSS-publish checklist; resolve before the first public marketing of the OSS edition.
240
+
241
+ **External precedents:** CNCF security policy template, Kubernetes contributor ladder, Linux Foundation OSS Manager.
242
+
243
+ ---
244
+
245
+ ## Roadmap integration summary
246
+
247
+ | Category | Tier | Suggested phase placement | New doc artefact (future) |
248
+ |---|---|---|---|
249
+ | A. Multi-tenancy beyond per-session | 1 | Deeper Phase 5 (tenant = namespace) + Phase 6 tenant CRUD | ADR on tenant model |
250
+ | B. Identity beyond OIDC | 1 | Phase 6 (control plane auth) | ADR on auth surface; RBAC matrix in `architecture/02-*` |
251
+ | C. Compliance & audit immutability | 1 | Phase 4 + Phase 8 (immutability), residency = post Phase 10 | `architecture/07-security.md` expansion; ADR per framework |
252
+ | D. Determinism & session replay | 2 | Phase 7 + Phase 8 | Section in `architecture/05-*` and `architecture/10-*` |
253
+ | E. Cost attribution & metering | 1 | Proposed **Phase 6.5** | `architecture/10-observability.md` billing-primitives section |
254
+ | F. DR — RTO/RPO/backup/chaos | 1 | Rename Phase 10 → "HA + DR"; explicit RTO/RPO in acceptance | DR-runbook index |
255
+ | G. Supply chain security | 1 | Cross-cut; add CI policy in a Phase-0.5 follow-on; base-image hardening in Phase 7 | SBOM/SLSA section in `architecture/07-security.md` |
256
+ | H. Air-gap & corp networking | 2 | Dedicated future phase (customer-triggered) | Air-gap install guide |
257
+ | I. Operator UX day-2 | 2 | Cross-cut; grows per phase | Runbook catalogue; diagnostic-bundle spec |
258
+ | J. Versioning policy | 1 | New `architecture/11-versioning.md` | The file itself |
259
+ | K. Agentic-workload edge cases | 1 | Strengthen Phase 7 acceptance | Acceptance-criteria update only |
260
+ | L. MCP ecosystem | 2 | Parallel watching; revisit when MCP spec stabilises | None yet |
261
+ | M. Open-source community ops | 3 | Pre-OSS-publish checklist | `SECURITY.md`, `CODE_OF_CONDUCT.md`, release-policy doc |
262
+
263
+ **Tier 1** = critical for compliance / operations or for agentic-workload maturity at production scale.
264
+ **Tier 2** = enterprise-adoption blockers that depend on a specific customer trigger.
265
+ **Tier 3** = pre-public-launch hygiene.
266
+
267
+ ---
268
+
269
+ ## Out of scope (this document)
270
+
271
+ - No phase reordering or scope edit in `roadmap.md`.
272
+ - No new ADRs created — each Tier-1 gap is expected to graduate into its own ADR / phase-research doc when it is taken up.
273
+ - No code, no config, no CI changes.
274
+
275
+ ## See also
276
+
277
+ - [`roadmap.md`](./roadmap.md) — 12 phases, invariants, failure-modes menu, rollback runbook
278
+ - [`antipatterns.md`](./antipatterns.md) — locked operational choices indexed by phase
279
+ - [`architecture/`](./architecture/) — layer specs (L4 → L1)
280
+ - [`adr/`](./adr/) — locked decisions
281
+ - [`research/`](./research/) — reference-architecture digests
@@ -0,0 +1,123 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # Phase-N template
5
+
6
+ > Copy this file twice per phase: once as `phase-N-research.md` (Step 1: Research), once as `phase-N-plan.md` (Step 3: Plan). Leave this template untouched.
7
+
8
+ ## `phase-N-research.md` skeleton
9
+
10
+ ```markdown
11
+ # Phase N research — <short title>
12
+
13
+ **Status:** draft → in-review → signed-off
14
+ **Owner:** <name>
15
+ **Started:** YYYY-MM-DD
16
+ **Signed-off:** YYYY-MM-DD
17
+
18
+ ## Context
19
+
20
+ What this phase delivers per [roadmap.md](./roadmap.md#phase-N) in one paragraph. Why now.
21
+
22
+ ## Antipatterns scanned
23
+
24
+ List every entry from [`antipatterns.md`](./antipatterns.md) phase-index row for Phase N. For each: "our choice still holds" OR "this phase needs to amend it because…". Don't skip any.
25
+
26
+ ## Options considered
27
+
28
+ For each meaningful decision in this phase:
29
+
30
+ ### Decision X — <what>
31
+
32
+ | Option | Pro | Con | Cost |
33
+ |---|---|---|---|
34
+ | A | … | … | … |
35
+ | B | … | … | … |
36
+
37
+ **Recommendation:** A. Because …
38
+
39
+ (One block per meaningful decision. Targets: ≥ 1, typically 2–5.)
40
+
41
+ ## Reference repos read
42
+
43
+ - `research/NN-foo.md` — what we took from it.
44
+ - (additional external sources, if any)
45
+
46
+ ## Success metrics
47
+
48
+ How will we know the phase shipped correctly? Concrete:
49
+ - Latency: p99 < X ms on workload Y.
50
+ - Test coverage: integration test Z passes against both PoC and target backend.
51
+ - Observability: metric `foo_total` appears in dashboards.
52
+ - No regression: existing tests `…/test_mcp_*.py` continue to pass.
53
+
54
+ ## Rollback plan
55
+
56
+ If this phase causes a production incident:
57
+ - Step 1: <flip flag / pin previous digest / re-point reverse-proxy>.
58
+ - Step 2: <verify rollback effect via signal X>.
59
+ - Estimated rollback time: < N minutes.
60
+
61
+ ## Open questions
62
+
63
+ Anything that needs sign-off discussion before we proceed to `phase-N-plan.md`.
64
+
65
+ ## Sign-off
66
+
67
+ - [ ] Owner reviewed.
68
+ - [ ] Antipattern scan complete.
69
+ - [ ] Rollback plan validated (dry-run if non-trivial).
70
+ - [ ] Success metrics agreed.
71
+ ```
72
+
73
+ ## `phase-N-plan.md` skeleton
74
+
75
+ ```markdown
76
+ # Phase N plan — <short title>
77
+
78
+ **Based on:** `phase-N-research.md` (signed-off YYYY-MM-DD)
79
+ **Branch:** `dev/future-architecture/phase-N-<topic>`
80
+
81
+ ## Day-1 checklist
82
+
83
+ What touches code or config on the first commit. Concrete:
84
+ - File X: refactor function Y into module Z (no behavior change).
85
+ - File X: introduce flag `SANDBOX_PROVIDER` default `<old behavior>`.
86
+ - Tests: add `tests/integration/test_phase-N_*.py`.
87
+
88
+ ## Atomic tasks
89
+
90
+ (Output of `gsd-plan-phase`. Each task = one commit on the phase branch.)
91
+
92
+ | # | Task | Files | Test | Reversibility |
93
+ |---|---|---|---|---|
94
+ | 1 | … | … | … | … |
95
+ | 2 | … | … | … | … |
96
+
97
+ ## Acceptance gate
98
+
99
+ Acceptance criteria from `roadmap.md` Phase N, repeated here verbatim. Tick each as it lands.
100
+
101
+ - [ ] …
102
+ - [ ] …
103
+ - [ ] Compose PoC still works (run from clean clone, follow `docs/INSTALL.md`).
104
+ - [ ] Antipatterns from Phase-N row of `antipatterns.md` still respected.
105
+
106
+ ## Phase retro
107
+
108
+ Once merged, answer in 5 lines:
109
+ - What was harder than expected?
110
+ - What was easier?
111
+ - Did this phase reveal a flaw in an earlier phase? (If yes → file follow-up per [roadmap.md § Failure modes](./roadmap.md#failure-modes--cross-phase-retros).)
112
+ - Antipatterns to add to `antipatterns.md`?
113
+ - One-line lesson for the next phase.
114
+ ```
115
+
116
+ ## Why a template
117
+
118
+ - Forces the **antipattern scan** to happen before code (Step 1 of cadence is not skippable).
119
+ - Forces explicit **rollback plan** before merge (Phase 6 dual-run lesson).
120
+ - Forces **success metrics** before code (Phase 10 "measure first" invariant).
121
+ - Forces a **retro** so cross-phase mistakes surface fast.
122
+
123
+ The skeleton is intentionally short — fill it in 1–2 hours, not 1–2 days.
@@ -0,0 +1,225 @@
1
+ <!-- SPDX-License-Identifier: FSL-1.1-Apache-2.0 -->
2
+ <!-- Copyright (c) 2025 Open Computer Use Contributors -->
3
+
4
+ # External References
5
+
6
+ > Catalog of open-source projects we either build on, learn from, or explicitly reject.
7
+ >
8
+ > Each entry carries: **License**, **Language**, **Role in our stack**, optional **To research** tag.
9
+ > Entries tagged `to-research` are unresolved and must be evaluated during the relevant phase's research pass (see [`roadmap.md`](./roadmap.md) — per-phase research-then-sign-off cadence).
10
+
11
+ ---
12
+
13
+ ## Layer 1 — Guest agents (sandbox PID 1)
14
+
15
+ ### e2b-dev/infra — `envd`
16
+ - **URL:** https://github.com/e2b-dev/infra/tree/main/packages/envd
17
+ - **License:** Apache 2.0
18
+ - **Language:** Go
19
+ - **Role:** Comparison point for the L1 agent (Phase 7). API surface, gRPC streaming, image-build pipeline. Production at E2B Cloud.
20
+ - **Notes:** Coupled to Firecracker networking and Nomad — port API ideas, not glue. With ADR-0002 now Rust, this is a comparison reference, not a stack reference.
21
+ - **To research:** Phase 7.
22
+
23
+ ### kata-containers / src / agent
24
+ - **URL:** https://github.com/kata-containers/kata-containers/tree/main/src/agent
25
+ - **License:** Apache 2.0
26
+ - **Language:** Rust
27
+ - **Role:** Canonical kata-agent. PID 1 patterns, vsock transport, signal handling, `PR_SET_DUMPABLE=0` hardening.
28
+ - **Notes:** OCI-shaped API — we want a product-aware API. Don't bolt Computer Use onto kata-agent itself.
29
+ - **To research:** Phase 7 (compare Rust vs Go alternatives; feeds ADR-0002).
30
+
31
+ ### microsandbox / msb-agent
32
+ - **URL:** https://github.com/microsandbox/microsandbox
33
+ - **License:** Apache 2.0
34
+ - **Language:** Rust
35
+ - **Role:** Small, readable libkrun-based agent — good for learning the pattern.
36
+ - **Notes:** Beta as of early 2026. Not production-ready.
37
+ - **To research:** Phase 7 (skim for API ideas).
38
+
39
+ ---
40
+
41
+ ## Layer 2 — Sandbox runtimes
42
+
43
+ ### firecracker-microvm/firecracker
44
+ - **URL:** https://github.com/firecracker-microvm/firecracker
45
+ - **License:** Apache 2.0
46
+ - **Language:** Rust
47
+ - **Role:** Smallest attack surface, fastest cold start. AWS Lambda/Fargate foundation.
48
+ - **Constraints:** Requires KVM + bare-metal (or nested virt). No virtio-fs, no GPU.
49
+ - **To research:** Phase 9 (kata-fc alternative tier).
50
+
51
+ ### cloud-hypervisor/cloud-hypervisor
52
+ - **URL:** https://github.com/cloud-hypervisor/cloud-hypervisor
53
+ - **License:** Apache 2.0
54
+ - **Language:** Rust
55
+ - **Role:** Preferred microVM for Computer Use — supports virtio-fs, GPU passthrough, hot-plug. Used by AWS, Microsoft.
56
+ - **Constraints:** Requires KVM + bare-metal. Larger codebase (~80K LOC) than Firecracker (~50K).
57
+ - **To research:** Phase 9 (lead candidate for `kata-ch` tier).
58
+
59
+ ### kata-containers/kata-containers
60
+ - **URL:** https://github.com/kata-containers/kata-containers
61
+ - **License:** Apache 2.0
62
+ - **Language:** Go + Rust
63
+ - **Role:** k8s-native microVM runtime. RuntimeClass-driven, installed via `kata-deploy` DaemonSet. Backends: QEMU / Firecracker / Cloud Hypervisor.
64
+ - **Status:** CNCF graduated.
65
+ - **To research:** Phase 9.
66
+
67
+ ### google/gvisor
68
+ - **URL:** https://github.com/google/gvisor
69
+ - **License:** Apache 2.0
70
+ - **Language:** Go
71
+ - **Role:** Userspace kernel. Good for short-lived CPU-only scripts.
72
+ - **Caveat:** **Not suitable for Chromium / Computer Use** — `docs/future-architecture/architecture/04-layer2-runtimes.md` explicitly rejects gVisor for our browser workloads (compat envelope too narrow). Use for non-browser tiers only.
73
+ - **To research:** Phase 7 (validate as experimental tier for code-execution sandboxes).
74
+
75
+ ### nestybox/sysbox
76
+ - **URL:** https://github.com/nestybox/sysbox
77
+ - **License:** Apache 2.0 (CE) / commercial (EE)
78
+ - **Language:** Go
79
+ - **Role:** User-namespace + procfs/sysfs emulation. Allows root-in-container, Docker-in-Docker without `--privileged`. Default for the current Helm chart.
80
+ - **Caveat:** Shares host kernel — vulnerable to kernel CVEs. Internal/trusted only.
81
+ - **To research:** Phase 5 (already in use — formalize as the default L2 for the k8s provider).
82
+
83
+ ### opencontainers/runc
84
+ - **URL:** https://github.com/opencontainers/runc
85
+ - **License:** Apache 2.0
86
+ - **Language:** Go
87
+ - **Role:** Default dev/CI runtime. No isolation guarantees for untrusted code.
88
+
89
+ ---
90
+
91
+ ## Layer 3 — Orchestration
92
+
93
+ ### kubernetes-sigs/agent-sandbox
94
+ - **URL:** https://github.com/kubernetes-sigs/agent-sandbox
95
+ - **License:** Apache 2.0
96
+ - **Language:** Go
97
+ - **Role:** Basis for our future `KubernetesProvider` (Phase 5+). Provides `Sandbox`, `SandboxTemplate`, `SandboxClaim`, `SandboxWarmPool` CRDs.
98
+ - **Status:** v0.1.1 (early but active, backed by Google + SIG Apps). Supports gVisor (default) and Kata.
99
+ - **To research:** Phase 5 (mandatory deep-dive before writing K8sProvider; check CRD stability).
100
+
101
+ ### e2b-dev/infra
102
+ - **URL:** https://github.com/e2b-dev/infra
103
+ - **License:** Apache 2.0
104
+ - **Language:** Go
105
+ - **Role:** Reference for egress proxy (`packages/proxy`) and template builder (`packages/template-manager`).
106
+ - **Caveat:** Nomad-coupled. Port ideas, don't fork wholesale.
107
+ - **To research:** Phases 2, 9.
108
+
109
+ ### firecracker-microvm/firecracker-containerd
110
+ - **URL:** https://github.com/firecracker-microvm/firecracker-containerd
111
+ - **License:** Apache 2.0
112
+ - **Language:** Go
113
+ - **Role:** Firecracker via containerd CLI/API — intermediate option between raw FC and Kata.
114
+ - **To research:** Phase 9 (snapshotter pattern feeds Phase 10).
115
+
116
+ ---
117
+
118
+ ## Layer 4 — Egress proxies
119
+
120
+ ### Michaelliv/agentbox
121
+ - **URL:** https://github.com/Michaelliv/agentbox
122
+ - **License:** MIT
123
+ - **Language:** Python (asyncio aiohttp)
124
+ - **Role:** Reference JWT-allowlist egress proxy (Phase 8). Working implementation — port to Go for production.
125
+ - **Companion blog:** https://michaellivs.com/blog/sandboxed-execution-environment/
126
+ - **To research:** Phase 8.
127
+
128
+ ### Tecnativa/docker-socket-proxy
129
+ - **URL:** https://github.com/Tecnativa/docker-socket-proxy
130
+ - **License:** Apache 2.0
131
+ - **Role:** Pattern for filtering API access (HAProxy-based). Not directly useful unless legacy Docker-API consumer needs read-only access.
132
+
133
+ ---
134
+
135
+ ## Local sandboxing (research only)
136
+
137
+ ### anthropic-experimental/sandbox-runtime
138
+ - **URL:** https://github.com/anthropic-experimental/sandbox-runtime
139
+ - **License:** Apache 2.0 (research preview)
140
+ - **Language:** Rust + bubblewrap (Linux) / seatbelt (macOS)
141
+ - **Role:** Local-sandboxing reference. Useful patterns: FS allowlist, network restriction via seccomp BPF, macOS seatbelt profiles.
142
+
143
+ ---
144
+
145
+ ## Computer Use specific
146
+
147
+ ### e2b-dev/desktop
148
+ - **URL:** https://github.com/e2b-dev/desktop
149
+ - **License:** Apache 2.0
150
+ - **Role:** GUI desktop env (Xfce) inside sandbox, VNC/RDP patterns. Comparable to our current CDP+ttyd setup.
151
+ - **To research:** Phase 7 (compare Xfce/VNC vs our current CDP-only approach).
152
+
153
+ ### e2b-dev/surf
154
+ - **URL:** https://github.com/e2b-dev/surf
155
+ - **License:** Apache 2.0
156
+ - **Role:** Computer Use agent reference — action loop, screenshot streaming.
157
+
158
+ ### Browser automation
159
+ - **Playwright** (Microsoft, Apache 2.0) — already in our image
160
+ - **Puppeteer** (Google, Apache 2.0)
161
+ - **chromedp** (Go, MIT) — direct CDP; candidate if guest agent goes Go
162
+ - **fantoccini** (Rust, MIT/Apache 2.0)
163
+
164
+ For Computer Use we want direct CDP (not WebDriver) — fine-grained event injection + screencast. **To research (Phase 7):** Rust CDP options (`chromiumoxide`) vs raw CDP WebSocket passthrough in the Rust agent (per [ADR-0002](./adr/0002-guest-agent-language-go.md)).
165
+
166
+ ---
167
+
168
+ ## Explicitly rejected
169
+
170
+ ### Daytona (daytonaio/daytona)
171
+ - **URL:** https://github.com/daytonaio/daytona
172
+ - **License:** AGPL v3
173
+ - **Reason:** AGPL contaminates downstream (incl. SaaS). Toxic for enterprise. See [ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md).
174
+
175
+ ### HashiCorp Nomad
176
+ - **License:** BSL — not OSI-open-source as of the HashiCorp re-license.
177
+ - **Reason:** License-incompatible with our intended Apache-2.0 posture. Don't take a Nomad dependency. E2B's Nomad-specific code is reference-only.
178
+
179
+ ### Beam.cloud
180
+ - **License:** Mixed (some Apache, control plane closed).
181
+ - **Reason:** No isolation by default (containers, not microVM); control plane closed.
182
+
183
+ ### Modal
184
+ - **License:** Closed, managed-only.
185
+
186
+ ---
187
+
188
+ ## Compatibility matrix (target combinations)
189
+
190
+ | Agent | Hypervisor / Runtime | Orchestrator | Tier / Use case |
191
+ |---|---|---|---|
192
+ | current Python entrypoint + MCP server | runc / sysbox | Docker Compose | Today's PoC (Phase 0–5) |
193
+ | current Python entrypoint + MCP server | sysbox | k8s (any) via our Helm chart | Phase 5 target |
194
+ | **future Rust agent** | sysbox | k8s | Internal/trusted tier (Phase 7) |
195
+ | future Rust agent | gVisor | k8s | Code-execution (non-browser) tier (Phase 7) |
196
+ | future Rust agent | Kata + Cloud Hypervisor | k8s | Untrusted tier — Computer Use, public (Phase 9 — requires Phase 8 egress proxy) |
197
+ | future Rust agent | Kata + Firecracker | k8s | Untrusted tier — fastest cold start (Phase 9 — requires Phase 8 egress proxy) |
198
+
199
+ ---
200
+
201
+ ## Lambda framing
202
+
203
+ AWS Lambda recurs in this document and in the research digests (see [`research/05`](./research/05-firecracker.md)) as the design lineage behind Firecracker, behind the two-tier control split, and behind the snapshot-pool cold-start pattern we evaluate at Phase 10.
204
+
205
+ **We are not deploying on Lambda or Fargate.** Open Computer Use targets 100–10K concurrent long-lived sandboxes on Kubernetes + Kata, not 10M serverless invocations. Sessions are multi-hour and stateful; Lambda's 15-minute cap and request-shaped billing fight every assumption.
206
+
207
+ What we adopt from Lambda is **patterns**, bounded and named: (a) Firecracker as the smallest-attack-surface microVM tier, (b) two-tier control split (host router + in-guest supervisor) ported as L4↔L1 over vsock, (c) frozen-snapshot pool with block-device hot-swap as the Phase-10 cold-start optimization, (d) per-session VM isolation with no cross-tenant reuse. Everything else — the deployment substrate, the orchestrator, the billing model, the AWS product names — stays out.
208
+
209
+ This question is closed by [ADR-0010](./adr/0010-lambda-as-inspiration-not-runtime.md). Future "should we go serverless?" debates should land on that ADR and not be re-opened here.
210
+
211
+ ---
212
+
213
+ ## License compatibility (our project)
214
+
215
+ Project license: BUSL-1.1 (per `CLAUDE.md`) with MIT for select skills.
216
+
217
+ Direct dependencies must be compatible — **safe:**
218
+ - Apache 2.0, MIT, BSD-2/3, MPL 2.0, LGPL 2.1+ (link only)
219
+
220
+ **Avoid:**
221
+ - GPL v2 / v3 (copyleft)
222
+ - AGPL v3 (Daytona)
223
+ - BSL (Nomad post-HashiCorp)
224
+
225
+ See [ADR-0006](./adr/0006-no-agpl-no-bsl-dependencies.md).