@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,122 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
3
+ # Copyright (c) 2025 Open Computer Use Contributors
4
+ #
5
+ # gitignored-ref-detector — fail when a doc references a path that the
6
+ # reader cannot open from a clean git clone.
7
+ #
8
+ # The rule: docs under `docs/architecture/` and `docs/future-architecture/`
9
+ # are reference material that someone who cloned the repo must be able to
10
+ # follow. If a doc cites a path that is gitignored, the reader sees a dead
11
+ # link and the architecture becomes self-referential to a private working
12
+ # directory.
13
+ #
14
+ # The set of local-only directory prefixes to treat as private is supplied
15
+ # out-of-band via the LOCAL_REF_DIRS environment variable (colon-separated).
16
+ # It defaults to empty, in which case only `git check-ignore` drives the
17
+ # finding. No literal local directory name is embedded in this script.
18
+ #
19
+ # This linter walks every markdown file under the doc roots, extracts file
20
+ # paths (anything that looks like `path/to/file.ext`), and fails if any of
21
+ # those paths is gitignored.
22
+ #
23
+ # Allowed exceptions (implemented below):
24
+ # - paths that resolve to URLs (http:// https://)
25
+ # - absolute non-repo paths (starting with `/`)
26
+ # - command-fragment heuristic for /dev/null, /proc/*, /tmp/*, /etc/*,
27
+ # /var/*, /home/*, /usr/* — these are filesystem paths in commands,
28
+ # not repo references
29
+ #
30
+ # Currently not separately filtered (rely on `git check-ignore` instead):
31
+ # - paths under `docs/` (docs-tree paths are checked like any other —
32
+ # if a doc path is gitignored, that is itself a finding)
33
+ # - paths under `.planning/` (gitignored by repo policy; would correctly
34
+ # fire here, but `.planning/` is not in the doc roots scanned, so
35
+ # references to it from inside `docs/` would correctly fail)
36
+ #
37
+ # Run from repo root: scripts/docs-lint/gitignored-ref-detector.sh
38
+
39
+ set -euo pipefail
40
+
41
+ ROOT="$(git rev-parse --show-toplevel)"
42
+ cd "$ROOT"
43
+
44
+ DOC_ROOTS=(
45
+ docs/architecture
46
+ docs/future-architecture
47
+ )
48
+
49
+ # Local-only directory prefixes (colon-separated), supplied out-of-band.
50
+ # Defaults to empty: with no value set, only `git check-ignore` drives the
51
+ # finding and this extra prefix match is a no-op.
52
+ LOCAL_REF_DIRS="${LOCAL_REF_DIRS:-}"
53
+ IFS=':' read -r -a LOCAL_PREFIXES <<< "$LOCAL_REF_DIRS"
54
+
55
+ fail=0
56
+ total_refs=0
57
+
58
+ for root in "${DOC_ROOTS[@]}"; do
59
+ [ -d "$root" ] || continue
60
+
61
+ while IFS= read -r -d '' doc; do
62
+ # Extract candidate filesystem paths:
63
+ # - inside backticks
64
+ # - markdown links [text](path)
65
+ # - bare path/with/slashes.ext occurrences
66
+ # Filter to things that look like a real path (contain `/` and end in
67
+ # a known extension OR look like a directory path).
68
+ candidates=$(grep -ohE '(\[[^]]*\]\(([^)]+)\))|(`[^`]+`)|([A-Za-z0-9_./-]+\.(md|mmd|yaml|yml|json|sh|py|go|rs|ts|tsx|js|jsx|toml|conf|txt|zip|html|svg|png|jpg))' "$doc" \
69
+ | sed -E 's/^\[[^]]*\]\(([^)]+)\)$/\1/' \
70
+ | sed -E 's/^`(.+)`$/\1/' \
71
+ | grep -vE '^https?://' \
72
+ | grep -vE '^#' \
73
+ | grep -E '/' \
74
+ | sort -u || true)
75
+
76
+ while IFS= read -r path; do
77
+ [ -z "$path" ] && continue
78
+ # strip line-number suffix like file.md:42 or file.md#anchor
79
+ clean=$(echo "$path" | sed -E 's/[:#].*$//')
80
+ # strip leading ./ or ../
81
+ clean=$(echo "$clean" | sed -E 's|^\./||; s|^(\.\./)+||')
82
+ # skip URLs and absolute non-repo paths
83
+ case "$clean" in
84
+ http*|/*) continue ;;
85
+ esac
86
+ # skip well-known non-path matches (heuristic: command-like fragments)
87
+ case "$clean" in
88
+ */dev/null|*/proc/*|*/tmp/*|*/etc/*|*/var/*|*/home/*|*/usr/*) continue ;;
89
+ esac
90
+
91
+ total_refs=$((total_refs + 1))
92
+
93
+ # Local-only prefix match (only when LOCAL_REF_DIRS is set).
94
+ for prefix in "${LOCAL_PREFIXES[@]}"; do
95
+ [ -z "$prefix" ] && continue
96
+ case "$clean" in
97
+ "$prefix"|"$prefix"/*)
98
+ echo "FAIL: $doc references local-only path: $clean"
99
+ fail=1
100
+ ;;
101
+ esac
102
+ done
103
+
104
+ # `git check-ignore` exits 0 if path is gitignored
105
+ if git check-ignore -q "$clean" 2>/dev/null; then
106
+ echo "FAIL: $doc references gitignored path: $clean"
107
+ fail=1
108
+ fi
109
+ done <<< "$candidates"
110
+ done < <(find "$root" -type f -name '*.md' -print0)
111
+ done
112
+
113
+ if [ "$fail" -eq 1 ]; then
114
+ echo ""
115
+ echo "gitignored-ref-detector: at least one doc references a path the reader"
116
+ echo "cannot open. Either remove the reference, replace it with a public"
117
+ echo "citation (e.g. a regulator URL, a public Anthropic doc URL, an in-repo"
118
+ echo "file under docs/), or move the cited content into the repo."
119
+ exit 1
120
+ fi
121
+
122
+ echo "gitignored-ref-detector: scanned $total_refs refs, all reachable."
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
3
+ # Copyright (c) 2025 Open Computer Use Contributors
4
+ #
5
+ # Identity-email detector — the project commits and authors under the
6
+ # Wide-Moat org identity, not a personal address.
7
+ #
8
+ # banned: i@yambr.com
9
+ # canonical: developer@widemoat.ai
10
+ #
11
+ # This gate scans tracked file content (docs, code, configs) for the banned
12
+ # address and tells the author to rewrite it. Commit *metadata* (author /
13
+ # committer email) is enforced separately by the pre-push hook; this script
14
+ # only covers the file-content surface so the same rule holds in CI.
15
+ #
16
+ # Exits 1 if the banned address appears in any tracked file.
17
+
18
+ set -uo pipefail
19
+
20
+ ROOT="$(git rev-parse --show-toplevel)"
21
+ cd "$ROOT"
22
+
23
+ BANNED="i@yambr.com"
24
+ CANONICAL="developer@widemoat.ai"
25
+
26
+ # Search tracked files only; never descend into references/ (vendored repos)
27
+ # or .git. -I skips binary files. Fixed-string match so the dot is literal.
28
+ # The two policy scripts (this detector and the pre-push hook) name the banned
29
+ # address on purpose, to define the rule — exclude them so the gate does not
30
+ # flag its own definition.
31
+ hits="$(git grep -InF "$BANNED" -- \
32
+ ':(exclude)references/**' \
33
+ ':(exclude)*.sample' \
34
+ ':(exclude)scripts/docs-lint/identity-email-detector.sh' \
35
+ ':(exclude)scripts/githooks/pre-push' \
36
+ 2>/dev/null || true)"
37
+
38
+ if [ -n "$hits" ]; then
39
+ echo "-----------------------------------------------------------------"
40
+ echo "BLOCKED: the personal address '$BANNED' appears in tracked files."
41
+ echo "Rewrite it to the project identity: $CANONICAL"
42
+ echo ""
43
+ echo "$hits" | sed 's/^/ /'
44
+ echo "-----------------------------------------------------------------"
45
+ exit 1
46
+ fi
47
+
48
+ exit 0
@@ -0,0 +1,354 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
3
+ # Copyright (c) 2025 Open Computer Use Contributors
4
+ #
5
+ # Linter self-test: prove each gate catches the violation it's supposed to.
6
+ #
7
+ # Creates temporary fixtures, runs the matching detection logic against them,
8
+ # and asserts each gate correctly flags / accepts the fixture. Cleans up.
9
+ #
10
+ # Run from repo root: scripts/docs-lint/test-linters.sh
11
+
12
+ set -uo pipefail
13
+
14
+ ROOT="$(git rev-parse --show-toplevel)"
15
+ cd "$ROOT"
16
+
17
+ TMP="$(mktemp -d)"
18
+ trap 'rm -rf "$TMP"' EXIT
19
+
20
+ pass=0
21
+ fail=0
22
+
23
+ ok() { echo " ok: $1"; pass=$((pass + 1)); }
24
+ err() { echo " FAIL: $1"; fail=$((fail + 1)); }
25
+
26
+ # -------- wc-budget --------
27
+ echo "Testing wc-budget.sh:"
28
+
29
+ big_adr="$TMP/big.md"
30
+ {
31
+ echo "---"; echo "status: draft"; echo "---"
32
+ for i in $(seq 1 250); do echo "line $i"; done
33
+ } > "$big_adr"
34
+
35
+ lines=$(wc -l < "$big_adr" | tr -d ' ')
36
+ if (( lines > 200 )); then
37
+ ok "ADR cap (200) would block file with $lines lines"
38
+ else
39
+ err "wc fixture didn't exceed cap"
40
+ fi
41
+
42
+ # -------- ai-slop-detector --------
43
+ echo "Testing ai-slop-detector.sh:"
44
+
45
+ slop_conclusion="$TMP/slop_conclusion.md"
46
+ cat > "$slop_conclusion" <<'EOF'
47
+ ## Conclusion
48
+
49
+ text
50
+ EOF
51
+ if grep -qE '^##+ (Conclusion|Summary|In conclusion|TL;DR)$' "$slop_conclusion"; then
52
+ ok "Conclusion-section regex detects short-doc summary"
53
+ else
54
+ err "Conclusion regex didn't match fixture"
55
+ fi
56
+
57
+ slop_toc="$TMP/slop_toc.md"
58
+ cat > "$slop_toc" <<'EOF'
59
+ ## Table of Contents
60
+
61
+ - a
62
+ EOF
63
+ if grep -qE '^##+ (Table of [Cc]ontents|TOC|Contents)$' "$slop_toc"; then
64
+ ok "TOC regex detects short-doc TOC"
65
+ else
66
+ err "TOC regex didn't match fixture"
67
+ fi
68
+
69
+ slop_stub="$TMP/slop_stub.md"
70
+ cat > "$slop_stub" <<'EOF'
71
+ ## Stub
72
+
73
+ ## Next section
74
+
75
+ content
76
+ EOF
77
+ result=$(awk '
78
+ /^##+ / {
79
+ cur=$0; line=NR
80
+ while ((getline next_line) > 0) {
81
+ if (next_line ~ /^[ \t]*$/) continue
82
+ if (next_line ~ /^##+ /) { print "HIT:" line; exit }
83
+ break
84
+ }
85
+ }
86
+ ' "$slop_stub")
87
+ if [[ "$result" == HIT:* ]]; then
88
+ ok "stub-heading detection works"
89
+ else
90
+ err "stub-heading regex didn't catch fixture"
91
+ fi
92
+
93
+ # bank-as-framing fixture: a framing use must flag, a named example must pass.
94
+ slop_bank="$TMP/slop_bank.md"
95
+ cat > "$slop_bank" <<'EOF'
96
+ The bank already runs an audited store, so the platform targets banks.
97
+ EOF
98
+ bank_re="bank's|\bthe bank\b|\ba bank\b|targets? banks|bank-(required|grade|specific|facing|side)|bank (infosec|ciso|reviewer|procurement|architect|auditor)"
99
+ bank_allow='tier-1 (us or eu )?bank|tier-1 banks|US or EU bank|retail-banking|banking convention|banking-vendor convention'
100
+ if grep -nEi "$bank_re" "$slop_bank" | grep -vEi "$bank_allow" | grep -q .; then
101
+ ok "bank-as-framing detection works"
102
+ else
103
+ err "bank-framing regex didn't catch fixture"
104
+ fi
105
+ slop_bank_ok="$TMP/slop_bank_ok.md"
106
+ cat > "$slop_bank_ok" <<'EOF'
107
+ The capability ceiling targets a tier-1 US or EU bank as the named example.
108
+ EOF
109
+ if grep -nEi "$bank_re" "$slop_bank_ok" | grep -vEi "$bank_allow" | grep -q .; then
110
+ err "bank-framing regex wrongly flagged the tier-1 named example"
111
+ else
112
+ ok "bank named-example (tier-1) correctly accepted"
113
+ fi
114
+
115
+ # SAML-as-surface fixture: asserting SAML must flag, a federation clause must pass.
116
+ slop_saml="$TMP/slop_saml.md"
117
+ cat > "$slop_saml" <<'EOF'
118
+ Human action requires SAML/OIDC on the full shelf.
119
+ EOF
120
+ saml_allow='SAML-only (customer )?(idp|pam)|federates? in through (dex|keycloak)|never an OCU SAML|through Dex or Keycloak'
121
+ if grep -nEi '\bSAML\b' "$slop_saml" | grep -vEi "$saml_allow" | grep -q .; then
122
+ ok "SAML-as-surface detection works"
123
+ else
124
+ err "SAML regex didn't catch fixture"
125
+ fi
126
+ slop_saml_ok="$TMP/slop_saml_ok.md"
127
+ cat > "$slop_saml_ok" <<'EOF'
128
+ A SAML-only customer IdP federates in through Dex or Keycloak, never an OCU SAML surface.
129
+ EOF
130
+ if grep -nEi '\bSAML\b' "$slop_saml_ok" | grep -vEi "$saml_allow" | grep -q .; then
131
+ err "SAML regex wrongly flagged the federation clause"
132
+ else
133
+ ok "SAML federation clause correctly accepted"
134
+ fi
135
+
136
+ # -------- ascii-diagram-detector --------
137
+ echo "Testing ascii-diagram-detector.sh:"
138
+
139
+ ascii_fixture="$TMP/ascii.md"
140
+ cat > "$ascii_fixture" <<'EOF'
141
+ Box-drawing:
142
+
143
+ ┌──────┐
144
+ │ box │
145
+ └──────┘
146
+ EOF
147
+
148
+ if python3 -c "
149
+ import re, sys
150
+ pat = re.compile(r'[─-╿▀-▟]')
151
+ with open('$ascii_fixture') as f:
152
+ sys.exit(0 if any(pat.search(l) for l in f) else 1)
153
+ "; then
154
+ ok "Unicode box-drawing detected in fixture"
155
+ else
156
+ err "ascii fixture not detected"
157
+ fi
158
+
159
+ table_fixture="$TMP/table.md"
160
+ cat > "$table_fixture" <<'EOF'
161
+ | a | b |
162
+ |---|---|
163
+ | 1 | 2 |
164
+ EOF
165
+
166
+ if python3 -c "
167
+ import re, sys
168
+ pat = re.compile(r'[─-╿▀-▟]')
169
+ with open('$table_fixture') as f:
170
+ sys.exit(1 if any(pat.search(l) for l in f) else 0)
171
+ "; then
172
+ ok "Markdown table not flagged as ASCII diagram"
173
+ else
174
+ err "Markdown table false-positive"
175
+ fi
176
+
177
+ # -------- front-matter-validator --------
178
+ echo "Testing front-matter-validator.sh:"
179
+
180
+ nofm="$TMP/nofm.md"
181
+ echo "Just text. No YAML." > "$nofm"
182
+
183
+ if python3 -c "
184
+ import re, sys, pathlib
185
+ text = pathlib.Path('$nofm').read_text()
186
+ stripped = re.sub(r'^(?:<!--.*?-->\s*\n)+', '', text, flags=re.DOTALL)
187
+ sys.exit(1 if stripped.startswith('---') else 0)
188
+ "; then
189
+ ok "missing-front-matter detected"
190
+ else
191
+ err "missing-FM fixture wasn't caught"
192
+ fi
193
+
194
+ partial_fm="$TMP/partial.md"
195
+ cat > "$partial_fm" <<'EOF'
196
+ ---
197
+ status: draft
198
+ owner: "@x"
199
+ ---
200
+ content
201
+ EOF
202
+
203
+ if python3 -c "
204
+ import re, sys, pathlib
205
+ text = pathlib.Path('$partial_fm').read_text()
206
+ stripped = re.sub(r'^(?:<!--.*?-->\s*\n)+', '', text, flags=re.DOTALL)
207
+ m = re.match(r'^---\n(.*?)\n---', stripped, flags=re.DOTALL)
208
+ body = m.group(1)
209
+ fields = {}
210
+ for line in body.splitlines():
211
+ if ':' in line and not line.startswith(' '):
212
+ k, _, v = line.partition(':')
213
+ fields[k.strip()] = v.strip().strip('\"').strip(\"'\")
214
+ required = ['status', 'last-reviewed', 'owner', 'applies-to']
215
+ missing = [k for k in required if k not in fields or not fields[k]]
216
+ sys.exit(0 if missing else 1)
217
+ "; then
218
+ ok "missing-field detection works"
219
+ else
220
+ err "partial FM wasn't caught"
221
+ fi
222
+
223
+ # -------- architecture-tree-whitelist --------
224
+ echo "Testing architecture-tree-whitelist.sh:"
225
+
226
+ # Run against an isolated fixture tree so we don't disturb the real
227
+ # docs/architecture/. Invoke the same segment-aware matcher the linter
228
+ # uses, so a future regression that swaps it back for plain fnmatch
229
+ # (which lets `*` cross `/`) is caught here.
230
+ tree_root="$TMP/atree/docs/architecture"
231
+ mkdir -p "$tree_root/adr" "$tree_root/diagrams" "$tree_root/components" \
232
+ "$tree_root/compliance/sub"
233
+
234
+ # Allowed files.
235
+ touch "$tree_root/README.md"
236
+ touch "$tree_root/adr/0001-foo.md"
237
+ touch "$tree_root/diagrams/c4.mmd"
238
+ touch "$tree_root/components/01-control-plane.md"
239
+ touch "$tree_root/compliance/soc2-mapping.md"
240
+
241
+ # Disallowed files.
242
+ touch "$tree_root/notes.txt" # stray scratch note
243
+ touch "$tree_root/LAYER-0-VERIFICATION.md" # AI snapshot
244
+ touch "$tree_root/diagrams/screenshot.png" # binary in diagrams
245
+ touch "$tree_root/compliance/sub/x-mapping.md" # nested-path edge case:
246
+ # plain fnmatch would
247
+ # accept this under
248
+ # compliance/*-mapping.md
249
+
250
+ allow_list=(
251
+ "README.md"
252
+ "adr/[0-9][0-9][0-9][0-9]-*.md"
253
+ "diagrams/*.mmd"
254
+ "components/[0-9][0-9]-*.md"
255
+ "compliance/*-mapping.md"
256
+ )
257
+ violations=$(
258
+ cd "$TMP/atree" && python3 - "${allow_list[@]}" <<'PY'
259
+ import fnmatch, pathlib, sys
260
+ allow = sys.argv[1:]
261
+ root = pathlib.Path("docs/architecture")
262
+
263
+ def match(rel: str, pat: str) -> bool:
264
+ rp = rel.split("/")
265
+ pp = pat.split("/")
266
+ if len(rp) != len(pp):
267
+ return False
268
+ return all(fnmatch.fnmatchcase(r, p) for r, p in zip(rp, pp))
269
+
270
+ bad = []
271
+ for p in root.rglob("*"):
272
+ if not p.is_file():
273
+ continue
274
+ rel = p.relative_to(root).as_posix()
275
+ if not any(match(rel, g) for g in allow):
276
+ bad.append(rel)
277
+ print("\n".join(sorted(bad)))
278
+ PY
279
+ )
280
+
281
+ want_bad=(
282
+ "LAYER-0-VERIFICATION.md"
283
+ "compliance/sub/x-mapping.md"
284
+ "diagrams/screenshot.png"
285
+ "notes.txt"
286
+ )
287
+ all_caught=1
288
+ for needle in "${want_bad[@]}"; do
289
+ if ! grep -qxF "$needle" <<<"$violations"; then
290
+ all_caught=0
291
+ err "tree-whitelist missed expected violation: $needle"
292
+ fi
293
+ done
294
+ if (( all_caught )); then
295
+ ok "tree-whitelist catches stray notes, AI snapshots, binaries, nested-path edge case"
296
+ fi
297
+
298
+ # Allowed files must NOT appear in violations.
299
+ for needle in \
300
+ "README.md" \
301
+ "adr/0001-foo.md" \
302
+ "diagrams/c4.mmd" \
303
+ "components/01-control-plane.md" \
304
+ "compliance/soc2-mapping.md"
305
+ do
306
+ if grep -qxF "$needle" <<<"$violations"; then
307
+ err "tree-whitelist false-positive on legitimate file: $needle"
308
+ fi
309
+ done
310
+ ok "tree-whitelist accepts files that match allowed patterns"
311
+
312
+ # -------- identity-email-detector --------
313
+ echo "Testing identity-email-detector.sh:"
314
+
315
+ # Run the detector end-to-end against a throwaway git repo, so the test covers
316
+ # the script's real behaviour (tracked-file scan, path excludes, git invocation,
317
+ # exit code) rather than re-implementing its grep. The banned address is
318
+ # assembled from parts so the literal never appears in this tracked file (which
319
+ # would itself trip the detector it tests).
320
+ banned="i@yambr$(printf '%s' .com)"
321
+ canonical="developer@widemoat.ai"
322
+ detector="$ROOT/scripts/docs-lint/identity-email-detector.sh"
323
+
324
+ # Fixture repo with one tracked file carrying the banned address.
325
+ fixture="$TMP/identity-fixture"
326
+ git init -q "$fixture"
327
+ git -C "$fixture" config user.email test@example.com
328
+ git -C "$fixture" config user.name test
329
+ printf 'contact %s for help\n' "$banned" > "$fixture/notes.md"
330
+ git -C "$fixture" add notes.md
331
+ git -C "$fixture" commit -q -m fixture
332
+
333
+ if ( cd "$fixture" && bash "$detector" ) >/dev/null 2>&1; then
334
+ err "identity-email-detector did not flag the banned personal address"
335
+ else
336
+ ok "identity-email-detector flags the banned personal address"
337
+ fi
338
+
339
+ # Replace the tracked content with the canonical address and a product URL;
340
+ # neither must trip the detector.
341
+ printf 'contact %s — see https://chat.yambr.com\n' "$canonical" > "$fixture/notes.md"
342
+ git -C "$fixture" commit -q -am clean
343
+ if ( cd "$fixture" && bash "$detector" ) >/dev/null 2>&1; then
344
+ ok "identity-email-detector accepts the canonical address and yambr.com URLs"
345
+ else
346
+ err "identity-email-detector false-positives on the canonical address or a product URL"
347
+ fi
348
+
349
+ # -------- Summary --------
350
+ echo
351
+ echo "Linter self-test: $pass passed, $fail failed."
352
+ if (( fail > 0 )); then
353
+ exit 1
354
+ fi
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
3
+ # Copyright (c) 2025 Open Computer Use Contributors
4
+ #
5
+ # Line-count budget enforcer for architecture docs.
6
+ #
7
+ # Per CLAUDE.md "Documentation discipline":
8
+ # - ADR ≤ 200 lines (under docs/architecture/adr/, excluding README/template)
9
+ # - Component spec ≤ 600 lines (under docs/architecture/components/, excluding README/template)
10
+ # - MANIFESTO.md ≤ 400 lines
11
+ #
12
+ # Exits 1 if any cap is exceeded.
13
+
14
+ set -euo pipefail
15
+
16
+ ROOT="$(git rev-parse --show-toplevel)"
17
+ cd "$ROOT"
18
+
19
+ fail=0
20
+
21
+ check_cap() {
22
+ local file="$1" cap="$2" kind="$3"
23
+ if [[ ! -f "$file" ]]; then
24
+ return 0
25
+ fi
26
+ local lines
27
+ lines=$(wc -l < "$file" | tr -d ' ')
28
+ if (( lines > cap )); then
29
+ echo "FAIL: $kind cap exceeded: $file = $lines lines (cap $cap)"
30
+ fail=1
31
+ fi
32
+ }
33
+
34
+ # MANIFESTO.md (single file).
35
+ check_cap "docs/architecture/MANIFESTO.md" 400 "MANIFESTO"
36
+
37
+ # All ADRs except the template and the README.
38
+ while IFS= read -r -d '' f; do
39
+ base="$(basename "$f")"
40
+ if [[ "$base" == "README.md" || "$base" == "0000-template.md" ]]; then
41
+ continue
42
+ fi
43
+ check_cap "$f" 200 "ADR"
44
+ done < <(find docs/architecture/adr -name '*.md' -print0 2>/dev/null)
45
+
46
+ # All component specs except the template.
47
+ while IFS= read -r -d '' f; do
48
+ base="$(basename "$f")"
49
+ if [[ "$base" == "0000-template.md" ]]; then
50
+ continue
51
+ fi
52
+ check_cap "$f" 600 "component-spec"
53
+ done < <(find docs/architecture/components -name '*.md' -print0 2>/dev/null)
54
+
55
+ if (( fail )); then
56
+ echo
57
+ echo "Hint: split the doc, move detail into a linked ADR, or trim prose."
58
+ exit 1
59
+ fi
60
+
61
+ echo "wc-budget: OK"
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env bash
2
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
3
+ # Copyright (c) 2025 Open Computer Use Contributors
4
+ #
5
+ # Versioned pre-push policy. Git does not run this copy directly — hooks live
6
+ # in .git/hooks/, which is not tracked. Install it once per clone:
7
+ #
8
+ # ln -sf ../../scripts/githooks/pre-push .git/hooks/pre-push
9
+ #
10
+ # (or copy it). CONTRIBUTING.md documents the one-line install. This file is
11
+ # the source of truth; the installed copy must match it.
12
+ #
13
+ # Two gates, both blocking:
14
+ # 1. .planning/ guard — never push planning/roadmap/phase artefacts to the
15
+ # public GitHub remote.
16
+ # 2. Documentation identity gate — the personal address i@yambr.com must not
17
+ # appear in tracked file content; rewrite it to developer@widemoat.ai.
18
+ # (This checks file CONTENT only, not commit author/committer metadata.)
19
+
20
+ set -euo pipefail
21
+
22
+ remote_name="$1"
23
+ remote_url="$2"
24
+
25
+ z40=$(printf '%040d' 0)
26
+ exit_code=0
27
+
28
+ # Recognise the public remote by URL host.
29
+ case "$remote_url" in
30
+ *github.com*) is_public=true ;;
31
+ *) is_public=false ;;
32
+ esac
33
+
34
+ # ---- Gate 1: .planning/ guard (public remote only) --------------------------
35
+ if [ "$is_public" = "true" ]; then
36
+ while read -r local_ref local_sha remote_ref remote_sha; do
37
+ [ "$local_sha" = "$z40" ] && continue # deletion
38
+
39
+ if [ "$remote_sha" = "$z40" ]; then
40
+ range="$local_sha" # new branch
41
+ bad_files=$(git ls-tree -r "$local_sha" --name-only | grep -E '^\.planning/' || true)
42
+ else
43
+ range="${remote_sha}..${local_sha}"
44
+ bad_files=$(git log "$range" --name-only --pretty=format: | grep -E '^\.planning/' | sort -u || true)
45
+ fi
46
+
47
+ if [ -n "$bad_files" ]; then
48
+ echo "-----------------------------------------------------------------"
49
+ echo "BLOCKED: this push to $remote_url would include .planning/ files."
50
+ echo "The public GitHub remote must not carry planning/roadmap/phase"
51
+ echo "artefacts."
52
+ echo ""
53
+ echo "Offending paths in range $range:"
54
+ echo "$bad_files" | sed 's/^/ /'
55
+ echo "-----------------------------------------------------------------"
56
+ exit_code=1
57
+ fi
58
+ done
59
+ fi
60
+
61
+ # ---- Gate 2: banned address in tracked file content -------------------------
62
+ # Run the detector through bash, not as an executable: a checkout that drops the
63
+ # exec bit (no-exec filesystem, archive export) must not silently skip the gate.
64
+ ROOT="$(git rev-parse --show-toplevel)"
65
+ detector="$ROOT/scripts/docs-lint/identity-email-detector.sh"
66
+ if [ -f "$detector" ]; then
67
+ if ! bash "$detector"; then
68
+ exit_code=1
69
+ fi
70
+ else
71
+ echo "BLOCKED: identity detector missing: $detector"
72
+ exit_code=1
73
+ fi
74
+
75
+ exit $exit_code
package/server.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.Wide-Moat/open-computer-use",
4
+ "title": "Open Computer Use",
5
+ "version": "0.8.12.6",
6
+ "description": "Give any LLM its own computer — Docker sandboxes with bash, browser, docs, and sub-agents",
7
+ "websiteUrl": "https://github.com/Wide-Moat/open-computer-use",
8
+ "repository": {
9
+ "url": "https://github.com/Wide-Moat/open-computer-use",
10
+ "source": "github",
11
+ "id": "Wide-Moat/open-computer-use"
12
+ }
13
+ }
@@ -0,0 +1,9 @@
1
+ # SPDX-License-Identifier: FSL-1.1-Apache-2.0
2
+ # Copyright (c) 2025 Open Computer Use Contributors
3
+ FROM python:3.12-slim
4
+ WORKDIR /app
5
+ COPY requirements.txt .
6
+ RUN pip install --no-cache-dir -r requirements.txt
7
+ COPY . .
8
+ EXPOSE 8082
9
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8082"]