Commit 9597380
feat(cua): CUA Gateway — guards, rulesets, research, ecosystem integrations (#88)
* feat(cua): CUA Gateway passes #7-#14 — guards, rulesets, research, ecosystem integrations
Complete CUA (Computer-Use Agent) Gateway implementation across 14 research
and execution passes. This adds runtime security enforcement for AI agents
operating in remote desktop, browser automation, and input injection contexts.
Rust:
- 3 CUA guards: computer_use (observe/guardrail/fail_closed modes),
remote_desktop_side_channel (per-channel enable/disable + transfer size),
input_injection_capability (input type allowlist + postcondition probes)
- 7 CUA event types in PolicyEventType including remote.session_share
- CuaEventData struct with serde support and snake_case aliases
- 3 built-in rulesets: remote-desktop, remote-desktop-strict, remote-desktop-permissive
- Fail-closed fixes: deny missing input_type (C2), deny unknown side channels (C3)
TypeScript:
- CuaEventData interface + 7 EventType variants in adapter-core
- 7 factory methods in PolicyEventFactory (including createCuaSessionShareEvent)
- OpenClaw CUA bridge handler (283 lines) with 43 tests
- 3 stable error codes (OCLAW_CUA_UNKNOWN_ACTION, MISSING_METADATA, SESSION_MISSING)
Research & fixtures:
- 9 deep-dive topic files, execution backlog, review log (14 passes)
- 17 Python validation harnesses (130+ fixture checks)
- 21 fixture groups across policy-events, receipts, and benchmarks
- trycua/cua connector evaluation with compatibility matrix
- Pass #14 code review report with 3 critical issues resolved
CI: 17 roadmap harnesses run on every PR/push.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cua): address PR #88 review — camelCase field acceptance + input_type forwarding
- InputInjectionCapabilityGuard now accepts both snake_case and camelCase
for input_type/inputType and postcondition_probe_hash/postconditionProbeHash
since the CUA pipeline serializes as camelCase via serde rename_all
- OpenClaw CUA bridge buildCuaEvent now forwards input_type from tool params
so the fail-closed guard receives it through canonical event data
- Update pyo3 0.28.1 → 0.28.2 to resolve RUSTSEC-2026-0013 license check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore(vendor): re-vendor pyo3 0.28.1 → 0.28.2
Fixes offline build/test CI job after Cargo.lock update for RUSTSEC-2026-0013.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat(cua): close runtime enforcement gaps and add fixture-backed bridge tests
* fix(cua): enforce connect egress and plain computer_use bridge mapping
* feat(cua): harden runtime parity, reason codes, and drift checks
* docs(cua): reconcile roadmap status and TODO consistency
* fix(cua): resolve side-channel review gaps and dedupe reason taxonomy
* fix(agent): align OpenClaw gateway device auth handshake
* test(hush-cli): harden abuse harness stability in CI
* chore(cua): add pass18 notarization and soak execution playbook
* docs(cua): add notarization credential discovery checklist
* fix(cua): harden soak and rdp matrix harness stability
* docs(cua): align roadmap status with pass18 release gates
* fix(cua): add hush-cli CUA parity and sync remote desktop rulesets
* docs(cua): refresh pass18 roadmap and readiness status
* fix(cua): close remaining policy parity review gaps
* docs(cua): track post-pass policy_event dedupe follow-up
* fix(cua): align computer_use default allowlist with 10-action surface
* style(rust): format cua_rulesets test for ci
* fix(cua): resolve identity fallback and guardrail warn semantics
* docs(readme): refresh computer-use gateway positioning
* fix(taxonomy): preserve deny/warn reason-code precedence
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent f0b843d commit 9597380
File tree
251 files changed
+42340
-427
lines changed- .github/workflows
- apps
- agent/src-tauri
- src/openclaw
- desktop/src-tauri
- crates
- libs
- clawdstrike
- rulesets
- src
- guards
- tests
- hush-core/src
- services
- hush-cli
- src
- tests
- hushd
- src
- api
- tests
- docs/roadmaps/cua
- research
- schemas/cua-metadata
- v1.0.0
- fixtures
- benchmarks/remote-latency/v1
- policy-events
- adapter-contract/v1
- browser-actions/v1
- input-injection/v1
- openclaw-bridge/v1
- orchestration/v1
- policy-evaluation/v1
- policy-mapping/v1
- postcondition-probes/v1
- provider-conformance/v1
- remote-desktop-ruleset-alignment/v1
- remote-desktop/v1
- session-continuity/v1
- session-recording/v1
- trycua-connector/v1
- v1/expected
- receipts
- cua-migration
- envelope-equivalence/v1
- verification-bundle/v1
- infra/vendor
- pyo3-build-config
- pyo3-ffi
- src
- pyo3-macros-backend
- src
- pyo3-macros
- pyo3
- newsfragments
- src/pycell
- tests
- packages
- adapters
- clawdstrike-adapter-core/src
- clawdstrike-claude/src
- clawdstrike-hush-cli-engine
- src
- clawdstrike-hushd-engine
- clawdstrike-langchain
- clawdstrike-openai/src
- clawdstrike-openclaw/src
- hooks/cua-bridge
- policy
- tools
- clawdstrike-opencode
- clawdstrike-vercel-ai
- policy/clawdstrike-policy
- src
- sdk/hush-ts
- rulesets
- scripts
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
251 files changed
+42340
-427
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
880 | 880 | | |
881 | 881 | | |
882 | 882 | | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
883 | 906 | | |
884 | 907 | | |
885 | 908 | | |
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | | - | |
| 65 | + | |
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
75 | 96 | | |
76 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
77 | 111 | | |
78 | 112 | | |
79 | 113 | | |
| |||
120 | 154 | | |
121 | 155 | | |
122 | 156 | | |
123 | | - | |
| 157 | + | |
| 158 | + | |
124 | 159 | | |
125 | 160 | | |
126 | 161 | | |
127 | | - | |
128 | | - | |
129 | | - | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
130 | 167 | | |
131 | | - | |
132 | | - | |
133 | | - | |
134 | | - | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
135 | 173 | | |
136 | 174 | | |
137 | 175 | | |
| |||
147 | 185 | | |
148 | 186 | | |
149 | 187 | | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
157 | 202 | | |
158 | 203 | | |
159 | 204 | | |
| |||
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
| 60 | + | |
| 61 | + | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
| |||
0 commit comments