@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,390 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.open-computer-use.dev/storage/file-artifact-api.schema.json",
4
+ "$comment": "SPDX-License-Identifier: FSL-1.1-Apache-2.0 | Copyright (c) 2025 Open Computer Use Contributors | File-artifact data plane, north face (Data-plane client -> Storage broker). HTTP+JSON REST plus the embeddable SPA, served on a dedicated file/UI ingress, NOT the MCP-tool-call listener. Distinct from the south face (file-ops.schema.json, sandbox->broker RPC). STATUS: TBD. Operation NAMES, the route shape, the three-axis authorization, the embed-token verify contract, the cookie/CSRF/CSP response envelope, and the body/archive/classification ceilings are sourced (PoC route shape) or NFR-derived (x-ocu-design / x-ocu-default); per-operation request/response BODIES are not pinned by any field-level source and are left unspecified. JSON Schema 2020-12 (json-schema.org). NFR-SEC-49, NFR-SEC-73, NFR-SEC-78, NFR-SEC-79, NFR-SEC-80, NFR-SEC-81, NFR-SEC-82, NFR-SEC-83, NFR-SEC-84.",
5
+ "title": "File-artifact data plane (north face, TBD)",
6
+ "description": "The data-plane client HTTP API and embeddable SPA fronted by the Storage broker. Operation set and the auth/response envelope are fixed; per-operation message bodies are TBD until a field-level source pins them. Do not invent bodies, opaque object ids, list pagination, resumable upload, or share-by-link capability URLs — none are sourced for this surface. Fill each operation only when sourced.",
7
+
8
+ "$defs": {
9
+ "SchemaVersion": {
10
+ "description": "Interface version. Breaking change increments major (NFR-IC-04). Matches the v1alpha-style namespace of the sibling storage schemas.",
11
+ "type": "string",
12
+ "pattern": "^v[0-9]+(alpha|beta)?[0-9]*$",
13
+ "examples": ["v1alpha"]
14
+ },
15
+
16
+ "FilesystemId": {
17
+ "description": "Per-session logical scope (the isolation unit, not a crypto boundary), canonical across file-ops.schema.json and mount-config.schema.json. The PoC path parameter chat_id maps to this canonical scope id; the broker resolves access against it at accept (NFR-SEC-49).",
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "maxLength": 256,
21
+ "examples": ["session_01HXYZ_chat"]
22
+ },
23
+
24
+ "RelativePath": {
25
+ "description": "Object path relative to the filesystem scope; may include subdirectories. The broker rejects a resolved destination outside the named scope (traversal; NFR-SEC-80). Sourced from the PoC upload/list/download route shape.",
26
+ "type": "string",
27
+ "minLength": 1,
28
+ "examples": ["report.pdf", "out/figure-1.png"]
29
+ },
30
+
31
+ "Intent": {
32
+ "description": "Storage intent axis (NFR-SEC-49). On intent=preview the broker enforces read-only and treats the object as non-downloadable regardless of stored tag.",
33
+ "type": "string",
34
+ "enum": ["read", "write", "preview"]
35
+ },
36
+
37
+ "AuthorizationMetadata": {
38
+ "description": "Three-axis authorization resolved broker-side on every north-face operation: scope (filesystem_id) + intent + downloadable. Same axes as the south face; downloadable is resolved at READ on both faces (NFR-SEC-73). No backend credential and no upstream secret crosses to the caller or the browser (NFR-SEC-25, NFR-SEC-82).",
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["filesystem_id", "intent", "downloadable"],
42
+ "properties": {
43
+ "filesystem_id": { "$ref": "#/$defs/FilesystemId" },
44
+ "intent": { "$ref": "#/$defs/Intent" },
45
+ "downloadable": {
46
+ "description": "Whether the object's bytes may leave the perimeter, resolved broker-side at read (NFR-SEC-73). A downloadable=false object is previewable in-session but no egress-eligible artifact is minted; the byte path to the browser is refused.",
47
+ "type": "boolean"
48
+ }
49
+ }
50
+ },
51
+
52
+ "OperationName": {
53
+ "description": "The north-face operation set, by name. Each maps to a PoC route shape, except `delete`, which exists by NFR (NFR-SEC-79 names upload/list/download/delete in the north-face activity set) but has no PoC route and no sourced wire body. Names/route-shapes are sourced; per-operation request/response bodies are TBD (see x-ocu-tbd-bodies).",
54
+ "type": "string",
55
+ "enum": [
56
+ "upload",
57
+ "listFiles",
58
+ "getManifest",
59
+ "download",
60
+ "downloadArchive",
61
+ "previewRender",
62
+ "delete"
63
+ ]
64
+ },
65
+
66
+ "FileEntry": {
67
+ "description": "List/metadata entry. Field names are sourced from the PoC list/outputs route shape; the union of the upload-list and output-list shapes. Object handle is the {filesystem_id, path} pair (the PoC addresses by chat-scope + relative path; it carries NO opaque object id, so none is modelled — inventing one is a P4-E3 traversal risk).",
68
+ "type": "object",
69
+ "additionalProperties": false,
70
+ "required": ["name", "path", "size", "modified"],
71
+ "properties": {
72
+ "name": {
73
+ "description": "Leaf filename. SOURCED (PoC list/outputs).",
74
+ "type": "string",
75
+ "minLength": 1
76
+ },
77
+ "path": { "$ref": "#/$defs/RelativePath" },
78
+ "size": {
79
+ "description": "Object size in bytes. SOURCED (PoC stat.st_size).",
80
+ "type": "integer",
81
+ "minimum": 0
82
+ },
83
+ "modified": {
84
+ "description": "Modification time. SOURCED (PoC st_mtime, a POSIX epoch-seconds number). The wire encoding (epoch vs RFC3339) is not re-pinned here; the PoC carries epoch seconds.",
85
+ "type": "number"
86
+ },
87
+ "type": {
88
+ "description": "File category. SOURCED (PoC outputs classify_file). Present on the outputs face; optional in the unified list.",
89
+ "type": "string"
90
+ },
91
+ "mime": {
92
+ "description": "Content type. SOURCED (PoC outputs classify_file / download mimetypes.guess_type). On ingest the broker-resolved type (magic-byte + declared) is authoritative (NFR-SEC-81); a declared/sniffed mismatch is recorded.",
93
+ "type": "string"
94
+ },
95
+ "checksum_md5": {
96
+ "description": "Per-object checksum. SOURCED (PoC manifest MD5 map). Whether checksums fold into listFiles or stay a separate getManifest operation is a design call not yet made (TBD).",
97
+ "type": "string"
98
+ }
99
+ }
100
+ },
101
+
102
+ "EmbedTokenVerify": {
103
+ "description": "Embed-token verify contract (NFR-SEC-82). The peer backend MINTS the token; the north face VERIFIES signature + expiry before setting any session state. No OCU upstream secret enters the browser. The exp ceiling is sourced to the NFR; the JWT/OIDC claim carriers are conventional (SEC-82 does not enumerate them); the binding claim is the open replay-binding question (#217).",
104
+ "type": "object",
105
+ "additionalProperties": true,
106
+ "required": ["exp"],
107
+ "properties": {
108
+ "exp": {
109
+ "description": "Token expiry, epoch seconds. The verifier rejects exp in the past and rejects a lifetime over the ceiling.",
110
+ "type": "integer",
111
+ "x-ocu-design": "exp - (iat or now) <= 120s ceiling, sourced to NFR-SEC-82; not frozen as a const."
112
+ },
113
+ "iat": {
114
+ "description": "Issued-at. OCU-DESIGN-conventional JWT carrier; SEC-82 does not enumerate it.",
115
+ "type": "integer",
116
+ "x-ocu-design": "JWT/OIDC convention; SEC-82 pins the property (signed, OIDC-asserted, exp<=120s), not this field name."
117
+ },
118
+ "iss": {
119
+ "description": "Issuer (the minting peer backend). OCU-DESIGN-conventional.",
120
+ "type": "string",
121
+ "x-ocu-design": "JWT/OIDC convention; not enumerated by SEC-82."
122
+ },
123
+ "aud": {
124
+ "description": "Audience naming this north-face surface. The verifier rejects a token whose audience does not name this surface (NFR-SEC-09 audience-validation, applied here). OCU-DESIGN-conventional carrier.",
125
+ "type": "string",
126
+ "x-ocu-design": "audience-validation property is NFR-SEC-09; the aud claim name is JWT/OIDC convention."
127
+ },
128
+ "sub": {
129
+ "description": "Subject (the asserted caller). OCU-DESIGN-conventional.",
130
+ "type": "string",
131
+ "x-ocu-design": "JWT/OIDC convention; not enumerated by SEC-82."
132
+ }
133
+ },
134
+ "x-ocu-tbd-binding-claim": {
135
+ "status": "tbd",
136
+ "issue": "https://github.com/Wide-Moat/open-computer-use/issues/217",
137
+ "reason": "What the embed token is bound to against replay/forgery (filesystem_id? caller? single-use nonce?) is the open replay-binding decision. Do not freeze a filesystem_id (or any) binding claim until #217 resolves."
138
+ }
139
+ },
140
+
141
+ "SessionResponseEnvelope": {
142
+ "description": "First-party session + framing controls the north face sets/requires on UI and data responses. Cookie attributes and CSP header values are SOURCED verbatim to NFR-SEC-83/84; the CSRF token wire name/transport is TBD (the NFR pins the property, not the name).",
143
+ "type": "object",
144
+ "additionalProperties": false,
145
+ "properties": {
146
+ "set_cookie": {
147
+ "description": "First-party session cookie set after embed-token verification. Attributes SOURCED verbatim to NFR-SEC-84.",
148
+ "type": "object",
149
+ "additionalProperties": false,
150
+ "required": ["same_site", "secure", "http_only"],
151
+ "properties": {
152
+ "same_site": { "type": "string", "const": "None" },
153
+ "secure": { "type": "boolean", "const": true },
154
+ "http_only": { "type": "boolean", "const": true }
155
+ }
156
+ },
157
+ "csrf_required": {
158
+ "description": "Every state-mutating request carries a server-validated CSRF token; a missing/invalid session returns 401 with no anonymous fallback. SOURCED (property) to NFR-SEC-84.",
159
+ "type": "boolean",
160
+ "const": true
161
+ },
162
+ "csrf_token": {
163
+ "description": "CSRF token. The presence + server-validation is sourced (NFR-SEC-84); the wire NAME and transport (request header vs body field) are TBD — the NFR pins the property, not the carrier.",
164
+ "type": "string",
165
+ "x-ocu-tbd": "CSRF token wire name/transport not pinned by NFR-SEC-84; do not freeze."
166
+ },
167
+ "csp_frame_ancestors": {
168
+ "description": "Content-Security-Policy: frame-ancestors set from a per-deployment allowlist on every UI/data response; header only, never <meta>; default 'none' until configured. SOURCED verbatim to NFR-SEC-83.",
169
+ "type": "array",
170
+ "items": { "type": "string" },
171
+ "default": ["'none'"],
172
+ "x-ocu-default": "frame-ancestors 'none' until a per-deployment allowlist entry exists (NFR-SEC-83); minimal shelf 'self'."
173
+ },
174
+ "x_frame_options": {
175
+ "description": "Legacy fallback for CSP-unaware browsers. SOURCED verbatim to NFR-SEC-83.",
176
+ "type": "string",
177
+ "const": "SAMEORIGIN"
178
+ },
179
+ "cross_origin_resource_policy": {
180
+ "description": "Set on served artifacts. SOURCED verbatim to NFR-SEC-83.",
181
+ "type": "string",
182
+ "const": "cross-origin"
183
+ },
184
+ "cross_origin_opener_policy_set": {
185
+ "description": "COOP is NOT set on UI responses, to preserve postMessage to the embedding page. SOURCED to NFR-SEC-83.",
186
+ "type": "boolean",
187
+ "const": false
188
+ }
189
+ }
190
+ },
191
+
192
+ "ContentDisposition": {
193
+ "description": "Download disposition. SOURCED (PoC download_file): ?download=1 forces attachment (octet-stream); the default serves inline by the real MIME. This IS the downloadable-disposition wire mechanism, coupled to the broker-resolved downloadable axis (NFR-SEC-73): the broker refuses the byte path for a non-downloadable object regardless of this flag.",
194
+ "type": "string",
195
+ "enum": ["attachment", "inline"]
196
+ },
197
+
198
+ "InboundBound": {
199
+ "description": "North-face inbound byte-path bound (NFR-SEC-78). The gateway rejects an over-ceiling body before staging, never partially buffered; per-validated-caller rate limits apply distinctly from the per-sandbox quota (NFR-SEC-46) and the per-caller connection ceiling (NFR-SEC-53). Values are NFR-derived defaults, not frozen.",
200
+ "type": "object",
201
+ "additionalProperties": false,
202
+ "properties": {
203
+ "max_request_bytes": {
204
+ "description": "Inbound request body ceiling; over-ceiling rejected pre-buffer with a structured deny.",
205
+ "type": "integer",
206
+ "minimum": 1,
207
+ "default": 52428800,
208
+ "x-ocu-default": "<=50 MiB/request default, configurable per workload tier (NFR-SEC-78)."
209
+ },
210
+ "pre_buffer_reject": {
211
+ "description": "An over-ceiling body (including one exceeding the ceiling mid-stream without Content-Length) is rejected before staging, never partially buffered.",
212
+ "type": "boolean",
213
+ "const": true,
214
+ "x-ocu-design": "pre-buffer reject (NFR-SEC-78)."
215
+ }
216
+ }
217
+ },
218
+
219
+ "ArchiveValidation": {
220
+ "description": "Pre-extraction archive validation (NFR-SEC-80). Every rejection is pre-extraction with a structured deny + an OCSF event. Ceilings are NFR-derived defaults, not frozen.",
221
+ "type": "object",
222
+ "additionalProperties": false,
223
+ "properties": {
224
+ "max_uncompressed_bytes": {
225
+ "type": "integer",
226
+ "minimum": 1,
227
+ "default": 1073741824,
228
+ "x-ocu-default": "<=1 GiB uncompressed total default; streaming formats halted at the ceiling mid-extract (NFR-SEC-80)."
229
+ },
230
+ "max_entry_count": {
231
+ "type": "integer",
232
+ "minimum": 1,
233
+ "default": 100000,
234
+ "x-ocu-default": "<=100000 entries default (NFR-SEC-80)."
235
+ },
236
+ "reject_traversal": {
237
+ "type": "boolean",
238
+ "const": true,
239
+ "x-ocu-design": "entry resolving outside the named mount path is rejected (NFR-SEC-80)."
240
+ },
241
+ "reject_symlink_escape": {
242
+ "type": "boolean",
243
+ "const": true,
244
+ "x-ocu-design": "symlink resolving outside the destination is rejected (NFR-SEC-80)."
245
+ }
246
+ }
247
+ },
248
+
249
+ "ContentClassification": {
250
+ "description": "Ingest content classification (NFR-SEC-81): magic-byte sniff + declared media type, resolved type recorded on object metadata before mount-visibility; a declared/sniffed mismatch is recorded and surfaced into the OCSF event. A type the scope policy denies is rejected pre-stage. Default posture classify-and-record; policy-deny is opt-in.",
251
+ "type": "object",
252
+ "additionalProperties": false,
253
+ "required": ["resolved_type", "declared_mismatch"],
254
+ "properties": {
255
+ "resolved_type": {
256
+ "description": "Broker-resolved content type (magic-byte + declared). Authoritative on metadata before any mount visibility.",
257
+ "type": "string"
258
+ },
259
+ "declared_mismatch": {
260
+ "description": "Whether the declared media type disagreed with the sniffed type; recorded and surfaced.",
261
+ "type": "boolean"
262
+ }
263
+ },
264
+ "x-ocu-design": "classify-and-record default; policy-deny opt-in per filesystem scope (NFR-SEC-81)."
265
+ },
266
+
267
+ "FileActivityEvent": {
268
+ "description": "North-face file-activity audit event (NFR-SEC-79), gateway-authored, hash-chained into the NFR-SEC-03 pipeline, fail-closed (operation denied if the audit write fails), under host-attested identity (NFR-SEC-09). OCSF File System Activity (class_uid 1001, category_uid 1). Mandatory fields enumerated verbatim by NFR-SEC-79. The activity_id assignment is OCU-DESIGN (OCSF has no native upload/download id; Create/Read/Delete/Open are the mapped ids). This is direct-fetch via embed-token + cookie, NOT share-by-link; no capability_id / two-event chain belongs here.",
269
+ "type": "object",
270
+ "additionalProperties": false,
271
+ "required": [
272
+ "class_uid",
273
+ "category_uid",
274
+ "activity_id",
275
+ "actor",
276
+ "filesystem_id",
277
+ "object_handle",
278
+ "byte_count",
279
+ "intent",
280
+ "downloadable",
281
+ "outcome"
282
+ ],
283
+ "properties": {
284
+ "class_uid": {
285
+ "description": "OCSF File System Activity class.",
286
+ "type": "integer",
287
+ "const": 1001
288
+ },
289
+ "category_uid": {
290
+ "description": "OCSF System Activity category.",
291
+ "type": "integer",
292
+ "const": 1
293
+ },
294
+ "activity_id": {
295
+ "description": "OCSF activity. Create(1)=upload, Read(2)=download/downloadArchive/list (listFiles and getManifest are Read-class), Delete(4)=delete, Open(14)=previewRender. OCU-DESIGN: OCSF carries no native upload/download id, so these are the mapped ids.",
296
+ "type": "integer",
297
+ "enum": [1, 2, 4, 14],
298
+ "x-ocu-design": "activity_id mapping for upload(1)/list(2)/download(2)/delete(4)/preview(14) (NFR-SEC-79); OCSF has no native upload/download id, list maps to Read(2)."
299
+ },
300
+ "actor": {
301
+ "description": "Authenticated caller resolved gateway-side (host-attested, NFR-SEC-09). The data-plane client is never the authoritative author of its own audit event (NFR-SEC-47 sibling for the north face).",
302
+ "type": "object",
303
+ "additionalProperties": false,
304
+ "properties": {
305
+ "user_uid": { "type": "string" },
306
+ "session_uid": { "type": "string" }
307
+ }
308
+ },
309
+ "filesystem_id": { "$ref": "#/$defs/FilesystemId" },
310
+ "object_handle": {
311
+ "description": "The {filesystem_id, path} handle (NOT an opaque object id — none exists in this surface).",
312
+ "$ref": "#/$defs/RelativePath"
313
+ },
314
+ "byte_count": {
315
+ "description": "Bytes transferred for the operation.",
316
+ "type": "integer",
317
+ "minimum": 0
318
+ },
319
+ "intent": { "$ref": "#/$defs/Intent" },
320
+ "downloadable": {
321
+ "description": "Downloadable disposition resolved broker-side at read (NFR-SEC-73).",
322
+ "type": "boolean"
323
+ },
324
+ "outcome": {
325
+ "description": "allow/deny outcome; a deny carries the structured deny-reason.",
326
+ "type": "object",
327
+ "additionalProperties": false,
328
+ "required": ["disposition_id"],
329
+ "properties": {
330
+ "disposition_id": {
331
+ "description": "OCSF outcome; allow vs deny.",
332
+ "type": "string",
333
+ "enum": ["allow", "deny"]
334
+ },
335
+ "x_deny_reason": { "$ref": "#/$defs/DenyReason" }
336
+ },
337
+ "if": { "properties": { "disposition_id": { "const": "deny" } }, "required": ["disposition_id"] },
338
+ "then": { "required": ["x_deny_reason"] }
339
+ }
340
+ }
341
+ },
342
+
343
+ "DenyReason": {
344
+ "description": "Structured deny vocabulary for the north face, carrying no internal topology (NFR-SEC-51, NFR-SEC-17). The south face (file-ops.schema.json) carries its own; the north-face-specific codes derive from NFR-SEC-78/80/81/82/84 and the three-axis authz. The PoC is open-no-auth and pins NO deny vocabulary, so this set is an OCU default pending NFR-SEC-51 sign-off, not frozen.",
345
+ "type": "string",
346
+ "x-ocu-default": "default-deny vocabulary, pending NFR-SEC-51 sign-off; not a frozen const set.",
347
+ "enum": [
348
+ "scope_mismatch",
349
+ "intent_denied",
350
+ "not_downloadable",
351
+ "embed_token_invalid",
352
+ "embed_token_expired",
353
+ "csrf_failed",
354
+ "no_session",
355
+ "body_too_large",
356
+ "rate_limited",
357
+ "archive_rejected",
358
+ "type_denied",
359
+ "not_found"
360
+ ]
361
+ }
362
+ },
363
+
364
+ "x-ocu-tbd-bodies": {
365
+ "status": "tbd",
366
+ "reason": "No field-level source pins the per-operation request/response message bodies. The operation set, the route shape (chat-scope + relative path; ?download=1 -> attachment vs inline-by-MIME), the sourced list/metadata fields (FileEntry), the embed-token verify contract, the cookie/CSRF/CSP response envelope, and the body/archive/classification ceilings are known; full request/response bodies are not. Fill each entry below only when a field-level source exists; do not invent bodies, an opaque object id, list pagination, resumable/chunked upload, or share-by-link capability URLs — none are sourced for this surface.",
367
+ "operations": {
368
+ "upload": "POST to a {filesystem_id, path} target; multipart form field `file` (SOURCED). Response carries status + filename + size + md5 (SOURCED PoC shape). Bound by InboundBound (NFR-SEC-78); archive bodies validated pre-extraction (NFR-SEC-80); body classified on ingest (NFR-SEC-81). Full envelope TBD.",
369
+ "listFiles": "GET list under a filesystem scope; returns FileEntry[] + total (SOURCED union of PoC uploads-list and outputs-list shapes). The unification of the two PoC route families into one operation is OCU-DESIGN. NO pagination cursor (PoC returns the full list; do not adopt one without a source). Full envelope TBD.",
370
+ "getManifest": "GET checksum map under a filesystem scope; returns {relative-path: md5} (SOURCED PoC manifest). Whether this folds into listFiles metadata is a design call not yet made (TBD).",
371
+ "download": "GET a {filesystem_id, path} object; ?download=1 -> Content-Disposition: attachment (octet-stream), else inline by real MIME (SOURCED). Broker resolves downloadable at read (NFR-SEC-73); a non-downloadable object's byte path to the browser is refused. Full envelope TBD.",
372
+ "downloadArchive": "GET the outputs of a filesystem scope as a zip; Content-Disposition: attachment (SOURCED PoC). Full envelope TBD.",
373
+ "previewRender": "GET the embeddable SPA for a filesystem scope (SOURCED PoC SPA route). Render/parser isolation model is OCU-DESIGN with mechanism TBD (#218). Carries the SessionResponseEnvelope framing headers (NFR-SEC-83). Full envelope TBD.",
374
+ "delete": "NO PoC route. The operation exists by NFR (NFR-SEC-79 names delete in the north-face activity set), but its request/response wire body is TBD — no field-level source pins it. Needs its own tracking issue before the body is filled. Do not invent it."
375
+ },
376
+ "tbd-issues": {
377
+ "embed-token-replay-binding": "https://github.com/Wide-Moat/open-computer-use/issues/217",
378
+ "preview-render-parser-isolation": "https://github.com/Wide-Moat/open-computer-use/issues/218"
379
+ }
380
+ },
381
+
382
+ "type": "object",
383
+ "additionalProperties": false,
384
+ "required": ["schema_version", "op", "authorization_metadata"],
385
+ "properties": {
386
+ "schema_version": { "$ref": "#/$defs/SchemaVersion" },
387
+ "op": { "$ref": "#/$defs/OperationName" },
388
+ "authorization_metadata": { "$ref": "#/$defs/AuthorizationMetadata" }
389
+ }
390
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.open-computer-use.dev/storage/file-ops.schema.json",
4
+ "$comment": "SPDX-License-Identifier: FSL-1.1-Apache-2.0 | Copyright (c) 2025 Open Computer Use Contributors | File-operation RPC surface (Session sandbox -> Storage broker, via the inspecting egress edge). STATUS: TBD. Operation NAMES and the authorization axes are sourced; per-operation request/response BODIES are not yet pinned by any field-level source and are intentionally left unspecified. JSON Schema 2020-12 (json-schema.org). NFR-SEC-25, NFR-SEC-46, NFR-SEC-51.",
5
+ "title": "File-operation RPC surface (TBD)",
6
+ "description": "Stub. The broker file-op RPC set. The substrate is Connect-RPC over HTTP/2 (component-spec choice, not modelled here). Operation names and the three-axis authorization (filesystem_id + intent + downloadable) are fixed; message bodies are TBD until a field-level source pins them. Do not invent bodies — fill each operation's request/response only when sourced.",
7
+
8
+ "$defs": {
9
+ "SchemaVersion": {
10
+ "description": "Interface version. Breaking change increments major (NFR-IC-04). Matches the v1alpha-style proto namespace of the file-op service.",
11
+ "type": "string",
12
+ "pattern": "^v[0-9]+(alpha|beta)?[0-9]*$",
13
+ "examples": ["v1alpha"]
14
+ },
15
+
16
+ "FilesystemId": {
17
+ "description": "Per-session logical scope (the isolation unit, not a crypto boundary). The egress edge binds the connection to this id (NFR-SEC-25).",
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "maxLength": 256,
21
+ "examples": ["session_01HXYZ_chat"]
22
+ },
23
+
24
+ "Intent": {
25
+ "description": "Operation class. The egress edge can deny by intent.",
26
+ "type": "string",
27
+ "enum": ["read", "write", "preview"]
28
+ },
29
+
30
+ "AuthorizationMetadata": {
31
+ "description": "Three-axis authorization attached to every file-op request as its own sub-message (carried at request field 4/5): scope (filesystem_id) + intent + downloadable. Richer than a static credential. The bearer header is added at the egress edge and is NOT part of this object (no-creds-in-guest, NFR-SEC-25).",
32
+ "type": "object",
33
+ "additionalProperties": false,
34
+ "required": ["filesystem_id", "intent", "downloadable"],
35
+ "properties": {
36
+ "filesystem_id": { "$ref": "#/$defs/FilesystemId" },
37
+ "intent": { "$ref": "#/$defs/Intent" },
38
+ "downloadable": {
39
+ "description": "Whether data may leave the perimeter (distinct from may-read). The preview-not-download exfiltration control.",
40
+ "type": "boolean"
41
+ }
42
+ }
43
+ },
44
+
45
+ "OperationName": {
46
+ "description": "The file-op RPC set, by name. Two groups: file operations and directory operations, plus chunked transfer and whole-filesystem control-plane primitives. Names are sourced; request/response bodies are TBD (see x-ocu-tbd-bodies).",
47
+ "type": "string",
48
+ "enum": [
49
+ "listDirectory",
50
+ "makeDirectory",
51
+ "moveDirectory",
52
+ "removeDirectory",
53
+ "createFile",
54
+ "readFile",
55
+ "readMetadata",
56
+ "getFileMetadata",
57
+ "listFiles",
58
+ "copyFile",
59
+ "moveFile",
60
+ "removeFile",
61
+ "fileUpload",
62
+ "fileDownload",
63
+ "importFiles",
64
+ "importZip",
65
+ "migrateFilesystem",
66
+ "removeFilesystem"
67
+ ]
68
+ },
69
+
70
+ "DenyReason": {
71
+ "description": "Structured deny returned by the egress edge on authorization failure. Carries no internal topology (NFR-SEC-51, NFR-SEC-17). Transported as the x-deny-reason response header. The header NAME is sourced; the reason-code vocabulary below is an OCU default pending NFR-SEC-51 sign-off, not a frozen const set.",
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": ["x_deny_reason"],
75
+ "properties": {
76
+ "x_deny_reason": {
77
+ "type": "string",
78
+ "x-ocu-default-deny-vocab": "default, pending NFR-SEC-51 sign-off",
79
+ "enum": [
80
+ "scope_mismatch",
81
+ "intent_denied",
82
+ "not_downloadable",
83
+ "lease_expired",
84
+ "size_exceeded",
85
+ "not_found"
86
+ ]
87
+ }
88
+ }
89
+ },
90
+
91
+ "ReadFileRequest_Range": {
92
+ "description": "Optional ranged-read sub-message on a readFile request. Half-open byte range [offset, offset+length). The sub-message and its offset/length fields are sourced; absence of the sub-message means a whole-object read.",
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": ["offset", "length"],
96
+ "properties": {
97
+ "offset": {
98
+ "description": "Start byte, inclusive. Zero-based.",
99
+ "type": "integer",
100
+ "minimum": 0
101
+ },
102
+ "length": {
103
+ "description": "Byte count from offset; the range is [offset, offset+length). A single ranged read is bounded by the RPC message ceiling (see SizeLimits.rpc_message_ceiling_bytes); larger reads stream in the default read-chunk size.",
104
+ "type": "integer",
105
+ "minimum": 1
106
+ }
107
+ }
108
+ },
109
+
110
+ "ListDirectoryRecursiveCursor": {
111
+ "description": "Opaque pagination cursor carried across pages of a recursive listDirectory. Sourced as an opaque token; the broker mints and validates it, the holder echoes it unmodified. Absent on the first page; the broker omits it on the last page.",
112
+ "type": "string",
113
+ "minLength": 1,
114
+ "x-ocu-tbd": "Cursor wire ENCODING (what the opaque token packs) is not pinned; the opaque-string contract is sourced, the internal structure stays TBD. Do not model decoded subfields."
115
+ },
116
+
117
+ "FileUploadRequest_Params": {
118
+ "description": "Chunked-upload params sub-message on a fileUpload request. The broker reassembles the streamed chunks; this is NOT a single inline body. Chunking is mandatory because a single RPC message is capped (see SizeLimits.rpc_message_ceiling_bytes), independent of the broker max-file-size and the per-mount VFS cache ceiling.",
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": ["chunk", "numChunks"],
122
+ "properties": {
123
+ "chunk": {
124
+ "description": "One chunk of the upload byte stream. The broker reassembles chunks in order into the target object. A chunk's encoded size stays under the RPC message ceiling.",
125
+ "type": "string",
126
+ "contentEncoding": "base64"
127
+ },
128
+ "numChunks": {
129
+ "description": "Total chunk count the broker expects before reassembly completes.",
130
+ "type": "integer",
131
+ "minimum": 1
132
+ }
133
+ }
134
+ },
135
+
136
+ "SizeLimits": {
137
+ "description": "Layered transfer size limits. Each layer is independent. The RPC ceiling forces chunking; the broker max-file-size is a deployment policy; the VFS cache ceiling is per-mount; the read-chunk default sizes streamed reads. NFR-SEC-46.",
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "properties": {
141
+ "rpc_message_ceiling_bytes": {
142
+ "description": "Per-RPC-message ceiling. A transfer above it MUST be chunked (fileUpload via FileUploadRequest_Params; ranged readFile via ReadFileRequest_Range). NFR-SEC-46.",
143
+ "type": "integer",
144
+ "minimum": 1,
145
+ "default": 4194304,
146
+ "x-ocu-default": "~4 MiB, the conventional Connect/gRPC message-size default; configurable, not a frozen protocol constant."
147
+ },
148
+ "read_chunk_default_bytes": {
149
+ "description": "Default read-chunk size for streamed reads.",
150
+ "type": "integer",
151
+ "minimum": 1,
152
+ "default": 134217728,
153
+ "x-ocu-default": "128 MiB default read-chunk size; configurable per workload tier."
154
+ },
155
+ "broker_max_file_size_bytes": {
156
+ "description": "Broker-enforced maximum object size. A deployment/broker policy figure, not fixed in this contract.",
157
+ "type": "integer",
158
+ "minimum": 1,
159
+ "x-ocu-tbd": "Server-side figure, not fixed in the contract. No const."
160
+ },
161
+ "vfs_cache_max_size_bytes": {
162
+ "description": "Per-mount local VFS cache ceiling. Authoritative field is mount-config.schema.json vfs_cache_max_size; mirrored here as the read-path reference. Objects above it stream rather than cache.",
163
+ "type": "integer",
164
+ "minimum": 1,
165
+ "default": 1073741824,
166
+ "x-ocu-default": "1 GiB per-mount cache ceiling; canonical owner is mount-config vfs_cache_max_size."
167
+ }
168
+ }
169
+ }
170
+ },
171
+
172
+ "x-ocu-tbd-bodies": {
173
+ "status": "partial",
174
+ "reason": "The sourced message shapes (ReadFileRequest_Range, ListDirectoryRecursiveCursor, FileUploadRequest_Params) and the layered SizeLimits are now real $defs, reachable from the request envelope. What stays TBD is the wire field set inside the remaining request bodies (createFile, readMetadata) and every response body. Fill each only when a field-level source pins it.",
175
+ "known-shape-hints": {
176
+ "createFile": "request body field set TBD",
177
+ "readMetadata": "request body field set TBD",
178
+ "getFileMetadata": "single-object metadata read; response field set TBD (distinct from listFiles, the directory-enumeration op)",
179
+ "listFiles": "object enumeration under a scope; response entry shape TBD (distinct from getFileMetadata)",
180
+ "fileDownload": "south-face read-path counterpart to the chunked fileUpload; streams the object back, the broker chunks it under the RPC message ceiling; request/response field set TBD",
181
+ "importFiles": "session-pseudobucket import; request/response field set TBD",
182
+ "importZip": "one-op zip import (the whole archive imported in a single op); request/response field set TBD",
183
+ "migrateFilesystem": "in-session pseudobucket control primitive (rebind the session scope, not a durable-store data migration); request/response field set TBD",
184
+ "removeFilesystem": "session-pseudobucket control primitive; request/response field set TBD"
185
+ },
186
+ "operations": {}
187
+ },
188
+
189
+ "type": "object",
190
+ "additionalProperties": false,
191
+ "required": ["schema_version", "op", "authorization_metadata"],
192
+ "properties": {
193
+ "schema_version": { "$ref": "#/$defs/SchemaVersion" },
194
+ "op": { "$ref": "#/$defs/OperationName" },
195
+ "authorization_metadata": { "$ref": "#/$defs/AuthorizationMetadata" },
196
+ "read_range": {
197
+ "description": "Present only on op=readFile; optional ranged read, absent => whole-object read. The carrier name is design-level; the ReadFileRequest_Range shape it references is sourced.",
198
+ "x-ocu-design": "envelope carrier name is design-level; the referenced sub-message shape is sourced.",
199
+ "$ref": "#/$defs/ReadFileRequest_Range"
200
+ },
201
+ "recursive_cursor": {
202
+ "description": "Present only on a recursive op=listDirectory continuation; the opaque page cursor. The carrier name is design-level; the ListDirectoryRecursiveCursor shape it references is sourced.",
203
+ "x-ocu-design": "envelope carrier name is design-level; the referenced sub-message shape is sourced.",
204
+ "$ref": "#/$defs/ListDirectoryRecursiveCursor"
205
+ },
206
+ "upload_params": {
207
+ "description": "Present only on op=fileUpload; the chunked-upload params (mandatory for fileUpload — there is no single-inline-body form). The carrier name is design-level; the FileUploadRequest_Params shape it references is sourced.",
208
+ "x-ocu-design": "envelope carrier name is design-level; the referenced sub-message shape is sourced.",
209
+ "$ref": "#/$defs/FileUploadRequest_Params"
210
+ },
211
+ "size_limits": {
212
+ "description": "Read-only reference to the layered transfer ceilings that bound this request (RPC message ceiling, read-chunk default, broker max-file-size, per-mount cache ceiling). Carrier name is design-level; the SizeLimits shape it references is sourced. Op-gated carriers (read_range / recursive_cursor / upload_params) apply only to their named op.",
213
+ "x-ocu-design": "envelope carrier name is design-level; the referenced shape is sourced.",
214
+ "$ref": "#/$defs/SizeLimits"
215
+ }
216
+ }
217
+ }