Skip to content

chore(deps): apply security dependency rollup - #2000

Merged
0xjohnnydev merged 12 commits into
mainfrom
security/dependabot-rollup-20260623
Jun 24, 2026
Merged

chore(deps): apply security dependency rollup#2000
0xjohnnydev merged 12 commits into
mainfrom
security/dependabot-rollup-20260623

Conversation

@0xjohnnydev

@0xjohnnydev 0xjohnnydev commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Applies the dependency-security rollup prepared on security/dependabot-rollup-20260623.

This includes:

  • dependency updates across Python, TypeScript, docs, Rust, Swift-related locks, examples, and Cuabot
  • cleanup of vulnerable unused crawler paths while preserving the documented HUD extra
  • scoped test/build fixes needed after the dependency rollup
  • local gate fixes for Cua Driver Rust/Swift, TypeScript reconnect behavior, and package build compatibility

Definition of Done

  • Open default-branch Dependabot alerts are no longer vulnerable when compared against this branch's manifests/locks.
  • Local Python tests pass.
  • Local Cua Bench tests pass.
  • Local Rust driver tests pass.
  • Local demo Rust tests pass.
  • Local TypeScript test/typecheck/build passes.
  • Local docs build and link check pass.
  • Local Swift driver test and release build pass.
  • Local JS package audits report zero vulnerabilities for checked workspaces.
  • GitHub PR checks pass.
  • Dependabot alerts clear after the fixes land on the default branch.

Validation

Ran locally:

uv run pytest libs/python/core/tests libs/python/computer/tests libs/python/computer-server/tests libs/python/agent/tests libs/python/som/tests libs/python/mcp-server/tests libs/python/cua-auto/tests
# 177 passed, 23 skipped

cd libs/cua-bench && uv run --extra dev pytest -q
# 135 passed

cd libs/cua-driver/rust && cargo test
# passed

cd demo/jukebox && cargo test
# passed

cd demo/multi-cursor && cargo test
# passed

cd libs/typescript && npx --yes pnpm@10.12.3 test && npx --yes pnpm@10.12.3 typecheck && npx --yes pnpm@10.12.3 build
# passed

cd docs && npx --yes pnpm@10.12.3 run build && npx --yes pnpm@10.12.3 run docs:check-links
# passed

cd libs/cua-driver/swift && swift test && swift build --configuration release
# passed

uv run isort --check-only libs/python tests && uv run black --check libs/python tests && uv run ruff check libs/python tests
# passed

Security comparison:

uv run python /tmp/compare_dependabot_ranges.py
# manifest-or-package-missing: 118
# not-vulnerable-on-branch: 514
# still vulnerable grouped: empty

Package audits checked zero vulnerabilities for root, docs, libs/typescript, libs/cuabot, and examples/computer-example-ts after the HUD extra was restored.

GitHub PR checks:

gh pr checks 2000 --repo trycua/cua
# 87/87 checks passing on 1558a990

Additional blocker follow-up validation:

uv run --with pytest --with pytest-asyncio pytest libs/python/agent/tests libs/python/computer-server/tests -q
# 83 passed

uv run --package cua-agent --extra hud python -c "from cua_agent.integrations.hud import run_single_task, run_full_dataset, MCPComputerAgent; print(\"hud import ok\")"
# hud import ok

uv run python -c "import cua_agent, computer_server.main as main; print(\"imports ok\", main._mcp_http_app is not None)"
# imports ok True

Computer-server CI-equivalent follow-up:

cd libs/python/computer-server && uv run --with pytest --with pytest-asyncio --with pytest-cov python -m pytest tests/ -v --tb=short --cov --cov-report=term --cov-report=xml
# 53 passed

Post-HUD-restore security re-check:

uv run python /tmp/compare_dependabot_ranges.py
# manifest-or-package-missing: 118
# not-vulnerable-on-branch: 514
# still vulnerable grouped: empty

for dir in . docs libs/typescript libs/cuabot examples/computer-example-ts; do
  (cd "$dir" && npx --yes pnpm@10.12.3 audit --audit-level low --prod)
done
# No known vulnerabilities found in each checked JS workspace

Summary by CodeRabbit

  • New Features

    • Documentation crawling now uses a more reliable browser-based approach and better captures page content and metadata.
    • Linux and Windows app builds are now more selectively enabled through feature flags.
  • Bug Fixes

    • Improved Wayland input handling for more consistent click behavior.
    • Fixed file read/write behavior in the computer interface to use byte-based operations more reliably.
  • Chores

    • Updated several dependencies across docs, apps, and SDKs for compatibility and maintenance.

@vercel

vercel Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Jun 23, 2026 8:54pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Playwright replaces crawl4ai in the docs crawler scripts and modal app, with new HTML-to-Markdown and metadata helpers. Rust demo binaries gain feature-gated manifests, Linux Wayland input routing changes, cua-bench preprocessing moves local, TypeScript computer WebSocket/file-command updates land, and Python package/test manifests are updated.

Changes

Docs crawler migration

Layer / File(s) Summary
HTML parsing helpers
docs/scripts/crawl_docs.py, docs/scripts/modal_app.py
HTML-to-Markdown helpers and metadata extraction are added to both docs crawler scripts.
Playwright crawl flow
docs/scripts/crawl_docs.py, docs/scripts/modal_app.py
Playwright page navigation replaces crawl4ai in the crawler flow, and page cleanup is handled explicitly.
Docs tooling config
docs/package.json, docs/scripts/README.md, docs/scripts/modal_app.py, pyproject.toml
Docs package versions, Playwright install instructions, and root/Modal app dependency settings are updated for the crawler.
SQLite formatting
docs/scripts/modal_app.py
SQLite schema, trigger, and sync-log statements in the modal app are reformatted.

Demo binary gating and runtime bumps

Layer / File(s) Summary
Windows-app binary gates
demo/jukebox/app/Cargo.toml, demo/jukebox/orchestrator/Cargo.toml, demo/multi-cursor/legacy-app/Cargo.toml, demo/multi-cursor/orchestrator/Cargo.toml
The Rust demo binaries now require the windows-app feature and declare it in their manifests.
Demo runtime bumps
demo/multi-cursor/electron/package.json, examples/computer-example-ts/package.json
Electron and the computer example package update dependency versions.

Linux Wayland input and macOS protocol updates

Layer / File(s) Summary
Linux EIS click path
libs/cua-driver/rust/crates/platform-linux/src/wayland/mod.rs, libs/cua-driver/rust/crates/platform-linux/src/tools/impl_.rs, nix/cua-driver/tests/wayland/cursor-click-gif.nix
The Linux Wayland click path now routes through inject_click, and the nested Wayland test session enables EIS-backed injection.
Linux capability guards
libs/cua-driver/rust/crates/platform-linux/src/health_report.rs, libs/cua-driver/rust/crates/platform-linux/src/overlay.rs
Screen-capture probing now goes through probe_portal_screenshot(), the non-Linux Wayland stub adds capture fields, and overlay forwarding is Linux-only.
Linux example gate
libs/cua-driver/rust/crates/platform-linux/Cargo.toml
The Linux manifest adds a gated screenshot_cascade example behind linux-example.
macOS build and protocol expectations
libs/cua-driver/rust/crates/platform-macos/build.rs, libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs
The macOS build adds Swift runtime rpaths, and the MCP protocol tests update server name, tool list, and response text expectations.
Recording and screenshot assertions
libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs
The macOS recording-session and screenshot tests now expect set_agent_cursor_enabled, hide the deprecated type_text_chars alias from tools/list, and skip resize assertions when screenshot errors.

cua-bench preprocessing and constraints

Layer / File(s) Summary
Local preprocessing helpers
libs/cua-bench/cua_bench/workers/dataloader.py, libs/cua-bench/pyproject.toml
The dataloader adds local tokenization and position-id helpers, guards optional multimodal imports, and updates the RL dependency constraints.

TypeScript computer interface and package updates

Layer / File(s) Summary
Workspace dependency refresh
libs/typescript/package.json, libs/typescript/agent/package.json, libs/typescript/core/package.json, libs/typescript/computer/package.json, libs/typescript/playground/package.json, libs/cuabot/package.json
Workspace package manifests bump runtime and test dependencies across the TypeScript packages and cuabot.
WebSocket lifecycle and file I/O protocol
libs/typescript/computer/src/interface/base.ts, libs/typescript/computer/tests/interface/macos.test.ts
BaseComputerInterface now creates WebSockets through a helper, resets closed state on reconnect, and the macOS interface tests expect byte-based file commands.

Python server and sandbox alignment

Layer / File(s) Summary
Server and sandbox alignment
libs/python/computer-server/..., libs/python/cua-sandbox/..., libs/python/cua-sandbox-apps/pyproject.toml
The computer-server and sandbox packages align on protobuf/runtime versions, generated emulator stubs are reformatted, and the server test suite adds a direct module-load smoke test.

Python agent package refresh

Layer / File(s) Summary
Agent package refresh
libs/python/agent/...
The agent package updates optional dependencies, and its proxy/UI examples are reformatted.

Python CLI and train cleanup

Layer / File(s) Summary
CLI and train cleanup
libs/python/cua-cli/..., libs/python/cua-train/src/cua_train/client.py
The CLI credential-store SQL, test fixture content, and TrainClient calls are reformatted.

Sequence Diagram(s)

Docs crawl flow

sequenceDiagram
  participant CuaDocsCrawler
  participant Browser
  participant page
  participant html_to_markdown
  participant extract_metadata
  CuaDocsCrawler->>Browser: new_page()
  Browser-->>CuaDocsCrawler: page
  CuaDocsCrawler->>page: goto(url, wait_until="networkidle")
  page-->>CuaDocsCrawler: content() and title()
  CuaDocsCrawler->>html_to_markdown: page_html
  CuaDocsCrawler->>extract_metadata: page_html, title
  html_to_markdown-->>CuaDocsCrawler: markdown
  extract_metadata-->>CuaDocsCrawler: description
Loading

Wayland inject_click flow

sequenceDiagram
  participant send_command_for
  participant inject_click
  participant inject_send
  send_command_for->>inject_click: route Wayland click in inject mode
  inject_click->>inject_send: send move/press/release batch
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

Possibly related PRs

  • trycua/cua#1846: Both PRs touch docs/scripts/modal_app.py, specifically the sync_to_s3 completion log/print statements after uploading LanceDB directories.

Suggested reviewers

  • ddupont808
  • r33drichards
  • f-trycua

Poem

A bunny hopped through bytes at dawn,
While Playwright chewed the old bits gone.
Wayland twitched and Markdown sparkled bright,
Then WebSockets bounced clean through the night. 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 59.68% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: a security-focused dependency rollup across the repo.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch security/dependabot-rollup-20260623

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@sentry

sentry Bot commented Jun 23, 2026

Copy link
Copy Markdown

Codecov Report

Caution

This repository is currently using the Sentry GitHub App to receive Codecov PR comments. This integration will be deprecated on July 8, 2026. Please install the Codecov GitHub App to continue receiving coverage reports on your pull requests.
✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Linux visual regression artifacts

Matrix jobs now run independently. Download visual artifacts from this workflow run.
Each background-GUI job uploads a .gif of the interaction plus two annotated PNGs (<app>.png raw, <app>-atspi.png with AT-SPI element boxes); the cua-driver-linux-som-overlays artifact adds <app>-som.png cua Set-of-Marks overlays:

  • cua-driver-linux-cursor-click-gif
  • cua-driver-linux-background-terminal-gif
  • cua-driver-linux-parallel-drag-xserver
  • cua-driver-linux-background-gui-chromium
  • cua-driver-linux-background-gui-tk
  • cua-driver-linux-background-gui-gtk3-gedit
  • cua-driver-linux-background-gui-gtk3-mousepad
  • cua-driver-linux-background-gui-gtk3-scite
  • cua-driver-linux-background-gui-gtk4-characters
  • cua-driver-linux-background-gui-qt5-manuskript
  • cua-driver-linux-background-gui-qt5-klog
  • cua-driver-linux-background-gui-qt5-openambit
  • cua-driver-linux-background-gui-qt6-kate
  • cua-driver-linux-background-gui-qt6-kcalc
  • cua-driver-linux-background-gui-qt6-okular
  • cua-driver-linux-background-gui-qt6-qownnotes
  • cua-driver-linux-background-gui-electron-zettlr
  • cua-driver-linux-background-gui-electron-joplin
  • cua-driver-linux-background-gui-electron-logseq
  • cua-driver-linux-som-overlays

Open workflow run and download artifacts

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

from urllib.parse import urljoin, urlparse

from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
from playwright.async_api import Browser, async_playwright

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as long as this is tested i'm okay with this https://github.com/trycua/cua/pull/2000/changes#diff-27409390ac3c10d48b2974fa32fc3e45efb665c72a93154ae7884b77384dabc1L12

but its stable and working so i'd prefer not to change and use the same lib; could we possiblt fix security issues by upgrading the library ?

iirc this is running in modal as well and afaik we don't have secrets in that environment so it might be safe to ignore

this script powers our docs ingest for ask ai on docs and our vibe coding mcp server so those both break if this breaks

// owner thread isn't started yet (which is the normal X11-only case).
if crate::wayland::is_wayland() {
let _ = crate::wayland::overlay::forward(&msg);
#[cfg(target_os = "linux")]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

The Playwright crawler walked the whole page body, so every crawled page
began with the sidebar/nav tree — identical boilerplate that polluted the
docs search / Ask-AI corpus. Scope extraction to the <article> (fallback
<main>) container and drop nav/aside/footer chrome; code blocks and prose
are unaffected. Also document the one-time 'playwright install chromium'
step for local runs (the Modal image already installs it).
@github-actions

Copy link
Copy Markdown
Contributor

📦 Publishable packages changed

  • npm/computer
  • npm/core
  • npm/cuabot
  • npm/playground
  • pypi/agent
  • pypi/bench
  • pypi/cli
  • pypi/computer-server

Add release:<service> labels to auto-release on merge (+ optional bump:minor or bump:major, default is patch).
Or add no-release to skip.

@0xjohnnydev
0xjohnnydev marked this pull request as ready for review June 24, 2026 20:24

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs (1)

319-329: 🎯 Functional Correctness | 🟡 Minor

Restore screenshot in the expected tool list
ScreenshotTool.handler is included in ToolRegistry.default, so this assertion should still cover it; removing it leaves the default registry under-tested.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs` around
lines 319 - 329, The expected tool list in the MCP protocol test is missing the
screenshot tool, so the default registry is no longer fully asserted. Update the
`expected` array in `mcp_protocol_test.rs` to include `screenshot` alongside the
other default tools, using the `ToolRegistry.default`/`ScreenshotTool.handler`
coverage as the reference point, so the test continues to validate the full
default tool set.
🧹 Nitpick comments (2)
libs/python/computer-server/tests/test_server.py (1)

116-143: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Brittle exact-substring assertions on serialized JSON.

'"id":1' in response.text depends on compact, space-free JSON serialization. If the underlying serializer ever emits "id": 1, this passes today but is fragile. Consider parsing the response (handling the SSE data: framing from the text/event-stream accept) and asserting on the decoded id/server name instead of raw substrings.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@libs/python/computer-server/tests/test_server.py` around lines 116 - 143, The
initialize HTTP test in test_mcp_http_app_accepts_initialize_post is asserting
against raw serialized JSON text, which is brittle. Update the test to parse the
response payload (including handling any text/event-stream data framing) and
assert on the decoded response fields such as id and the server name from
create_mcp_server/http_app instead of checking exact substrings in
response.text.
libs/python/computer-server/computer_server/handlers/_grpc_emulator/emulator_controller_pb2.py (1)

7-7: 📐 Maintainability & Code Quality | 🔵 Trivial

Regenerate the emulator stubs
The generated header still says Protobuf Python Version: 6.31.1 while the pin is protobuf==6.33.6. It’s compatible, but the stub is out of sync with the dependency.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@libs/python/computer-server/computer_server/handlers/_grpc_emulator/emulator_controller_pb2.py`
at line 7, Regenerate the protobuf emulator stubs so the generated Python stub
metadata matches the pinned protobuf dependency version. Update the generated
output for the emulator controller protobuf artifacts, especially the emulation
stub module identified by emulator_controller_pb2, using the project’s protobuf
generation workflow so the header/version comment reflects protobuf==6.33.6
instead of 6.31.1.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/scripts/modal_app.py`:
- Around line 390-400: The crawl in the page navigation flow is using page.goto
with wait_until set to networkidle, which can incorrectly time out on pages with
long-lived background requests. Update the navigation in the modal_app.py crawl
logic to use a less strict load condition in the page.goto call, and keep the
existing response handling that checks response.ok and marks failed_urls for
real HTTP failures.

In `@libs/python/agent/pyproject.toml`:
- Line 55: The glm45v-hf extra currently pins a prerelease Transformers floor
without an apparent code dependency, so either remove that requirement or add a
clear justification tied to a Hugging Face-backed GLM-4.5V path. Check the
`glm45v-hf` extra in the agent pyproject and confirm whether
`cua_agent/loops/glm45v.py` or any related HF integration actually imports or
needs `transformers`; if not, drop the pin and keep the extra minimal.

---

Outside diff comments:
In `@libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs`:
- Around line 319-329: The expected tool list in the MCP protocol test is
missing the screenshot tool, so the default registry is no longer fully
asserted. Update the `expected` array in `mcp_protocol_test.rs` to include
`screenshot` alongside the other default tools, using the
`ToolRegistry.default`/`ScreenshotTool.handler` coverage as the reference point,
so the test continues to validate the full default tool set.

---

Nitpick comments:
In
`@libs/python/computer-server/computer_server/handlers/_grpc_emulator/emulator_controller_pb2.py`:
- Line 7: Regenerate the protobuf emulator stubs so the generated Python stub
metadata matches the pinned protobuf dependency version. Update the generated
output for the emulator controller protobuf artifacts, especially the emulation
stub module identified by emulator_controller_pb2, using the project’s protobuf
generation workflow so the header/version comment reflects protobuf==6.33.6
instead of 6.31.1.

In `@libs/python/computer-server/tests/test_server.py`:
- Around line 116-143: The initialize HTTP test in
test_mcp_http_app_accepts_initialize_post is asserting against raw serialized
JSON text, which is brittle. Update the test to parse the response payload
(including handling any text/event-stream data framing) and assert on the
decoded response fields such as id and the server name from
create_mcp_server/http_app instead of checking exact substrings in
response.text.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2ff8d936-c1f1-4a91-8b6e-ee0f63e9171a

📥 Commits

Reviewing files that changed from the base of the PR and between c898d7b and 8f26d22.

⛔ Files ignored due to path filters (12)
  • docs/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • examples/computer-example-ts/package-lock.json is excluded by !**/package-lock.json
  • examples/computer-example-ts/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • libs/cua-bench/uv.lock is excluded by !**/*.lock
  • libs/cua-driver/rust/Cargo.lock is excluded by !**/*.lock
  • libs/cuabot/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • libs/python/cua-cli/uv.lock is excluded by !**/*.lock
  • libs/python/cua-sandbox-apps/uv.lock is excluded by !**/*.lock
  • libs/python/cua-sandbox/uv.lock is excluded by !**/*.lock
  • libs/typescript/computer/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • libs/typescript/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (41)
  • demo/jukebox/app/Cargo.toml
  • demo/jukebox/orchestrator/Cargo.toml
  • demo/multi-cursor/electron/package.json
  • demo/multi-cursor/legacy-app/Cargo.toml
  • demo/multi-cursor/orchestrator/Cargo.toml
  • docs/package.json
  • docs/scripts/README.md
  • docs/scripts/crawl_docs.py
  • docs/scripts/modal_app.py
  • examples/computer-example-ts/package.json
  • libs/cua-bench/cua_bench/workers/dataloader.py
  • libs/cua-bench/pyproject.toml
  • libs/cua-driver/rust/crates/cua-driver/tests/mcp_protocol_test.rs
  • libs/cua-driver/rust/crates/platform-linux/Cargo.toml
  • libs/cua-driver/rust/crates/platform-linux/src/health_report.rs
  • libs/cua-driver/rust/crates/platform-linux/src/overlay.rs
  • libs/cua-driver/rust/crates/platform-linux/src/tools/impl_.rs
  • libs/cua-driver/rust/crates/platform-linux/src/wayland/mod.rs
  • libs/cua-driver/rust/crates/platform-macos/build.rs
  • libs/cuabot/package.json
  • libs/python/agent/cua_agent/proxy/examples.py
  • libs/python/agent/cua_agent/ui/gradio/ui_components.py
  • libs/python/agent/pyproject.toml
  • libs/python/computer-server/computer_server/handlers/_grpc_emulator/emulator_controller_pb2.py
  • libs/python/computer-server/pyproject.toml
  • libs/python/computer-server/tests/test_server.py
  • libs/python/cua-cli/cua_cli/auth/store.py
  • libs/python/cua-cli/tests/conftest.py
  • libs/python/cua-sandbox-apps/pyproject.toml
  • libs/python/cua-sandbox/cua_sandbox/transport/_grpc_emulator/emulator_controller_pb2.py
  • libs/python/cua-sandbox/pyproject.toml
  • libs/python/cua-train/src/cua_train/client.py
  • libs/typescript/agent/package.json
  • libs/typescript/computer/package.json
  • libs/typescript/computer/src/interface/base.ts
  • libs/typescript/computer/tests/interface/macos.test.ts
  • libs/typescript/core/package.json
  • libs/typescript/package.json
  • libs/typescript/playground/package.json
  • nix/cua-driver/tests/wayland/cursor-click-gif.nix
  • pyproject.toml

Comment thread docs/scripts/modal_app.py
Comment on lines +390 to +400
response = await page.goto(
url,
wait_until="networkidle",
timeout=30_000,
)

if response is None or not response.ok:
status = response.status if response else "no response"
print(f"Failed to crawl {url}: HTTP {status}")
failed_urls.add(url)
continue

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Confirm all Modal/local Playwright navigation wait states before release.
rg -n -C 3 'page\.goto\([^)]*wait_until=["'\'']networkidle["'\'']' docs/scripts

Repository: trycua/cua

Length of output: 745


🏁 Script executed:

#!/bin/bash
set -euo pipefail

git ls-files docs/scripts | sed -n '1,20p'
printf '\n--- modal_app.py outline ---\n'
ast-grep outline docs/scripts/modal_app.py --view expanded
printf '\n--- crawl_docs.py outline ---\n'
ast-grep outline docs/scripts/crawl_docs.py --view expanded
printf '\n--- modal_app.py around relevant lines ---\n'
sed -n '360,420p' docs/scripts/modal_app.py
printf '\n--- crawl_docs.py around relevant lines ---\n'
sed -n '230,270p' docs/scripts/crawl_docs.py

Repository: trycua/cua

Length of output: 8126


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate every Playwright navigation call and its wait state in docs/scripts.
rg -n -C 2 'page\.goto\(' docs/scripts

Repository: trycua/cua

Length of output: 923


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the crawl loop's timeout/error handling to gauge impact.
sed -n '380,460p' docs/scripts/modal_app.py
printf '\n---\n'
sed -n '242,330p' docs/scripts/crawl_docs.py

Repository: trycua/cua

Length of output: 6564


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Check whether there are any alternative wait states or retries elsewhere in docs/scripts.
rg -n 'wait_until=|networkidle|domcontentloaded|load|commit|timeout=30_000|retry' docs/scripts

Repository: trycua/cua

Length of output: 6416


Avoid networkidle here Long-lived background requests will hit the 30s timeout, mark the URL as failed, and skip indexing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/scripts/modal_app.py` around lines 390 - 400, The crawl in the page
navigation flow is using page.goto with wait_until set to networkidle, which can
incorrectly time out on pages with long-lived background requests. Update the
navigation in the modal_app.py crawl logic to use a less strict load condition
in the page.goto call, and keep the existing response handling that checks
response.ok and marks failed_urls for real HTTP failures.

"accelerate",
"torch",
"transformers-v4.55.0-GLM-4.5V-preview"
"transformers>=5.0.0rc3"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg -n '\b(from|import) transformers\b|\btransformers\.' libs/python/agent/cua_agent
rg -n 'glm45v-hf|transformers>=5\.0\.0rc3|transformers-v4\.55\.0-GLM-4\.5V-preview' libs/python/agent/pyproject.toml libs/python/agent

Repository: trycua/cua

Length of output: 1767


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the dependency section around the changed extra.
sed -n '40,70p' libs/python/agent/pyproject.toml

# Inspect the moondream3 and related transformer-using modules to see whether
# the transformers dependency is already required by the codepaths.
sed -n '1,120p' libs/python/agent/cua_agent/loops/moondream3.py
printf '\n---\n'
sed -n '1,120p' libs/python/agent/cua_agent/loops/holo.py
printf '\n---\n'
sed -n '1,120p' libs/python/agent/cua_agent/adapters/huggingfacelocal_adapter.py

Repository: trycua/cua

Length of output: 13616


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Map the surrounding dependency groups and any other references to glm45v-hf.
rg -n -C 2 'glm45v-hf|transformers>=5\.0\.0rc3|transformers-v4\.55\.0-GLM-4\.5V-preview' libs/python/agent/pyproject.toml libs/python/agent

# Inspect the package metadata for extras and optional dependency grouping.
python3 - <<'PY'
from pathlib import Path
text = Path('libs/python/agent/pyproject.toml').read_text()
for needle in ['[project.optional-dependencies]', 'glm45v-hf', 'moondream3', 'holo', 'huggingfacelocal']:
    print(f"\n## {needle}")
    for i, line in enumerate(text.splitlines(), 1):
        if needle in line:
            start = max(1, i-3)
            end = min(len(text.splitlines()), i+3)
            for j in range(start, end+1):
                print(f"{j}: {text.splitlines()[j-1]}")
PY

Repository: trycua/cua

Length of output: 1479


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show the specific dependency stanza with line numbers for accurate context.
nl -ba libs/python/agent/pyproject.toml | sed -n '48,60p'

# Show the transformer-dependent modules to assess whether the dependency is already justified elsewhere.
nl -ba libs/python/agent/cua_agent/loops/moondream3.py | sed -n '1,90p'
printf '\n---\n'
nl -ba libs/python/agent/cua_agent/loops/holo.py | sed -n '1,90p'
printf '\n---\n'
nl -ba libs/python/agent/cua_agent/adapters/huggingfacelocal_adapter.py | sed -n '1,80p'

Repository: trycua/cua

Length of output: 188


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Find all glm45v-related codepaths and see whether the new extra maps to a real module.
rg -n -C 3 'glm45v' libs/python/agent

# Show the GLM-4.5V loop implementation if present.
fd -a 'glm45v.py|*glm45v*' libs/python/agent

Repository: trycua/cua

Length of output: 2975


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the GLM-4.5V loop imports and any direct transformers usage.
sed -n '1,120p' libs/python/agent/cua_agent/loops/glm45v.py
printf '\n---\n'
rg -n '\btransformers\b|AutoModel|AutoProcessor|from_pretrained|smart_resize' libs/python/agent/cua_agent/loops/glm45v.py

Repository: trycua/cua

Length of output: 3856


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show the top of the GLM-4.5V implementation to determine whether it relies on transformers directly.
sed -n '1,140p' libs/python/agent/cua_agent/loops/glm45v.py

# Search for any direct transformer-related symbols in that file.
rg -n '\btransformers\b|AutoModel|AutoProcessor|from_pretrained|smart_resize' libs/python/agent/cua_agent/loops/glm45v.py

Repository: trycua/cua

Length of output: 4617


Remove or justify the transformers>=5.0.0rc3 pin in glm45v-hf. libs/python/agent/cua_agent/loops/glm45v.py is litellm-based and doesn’t import transformers, so this extra shouldn’t carry a Transformers prerelease floor unless there’s a separate HF-backed GLM-4.5V path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@libs/python/agent/pyproject.toml` at line 55, The glm45v-hf extra currently
pins a prerelease Transformers floor without an apparent code dependency, so
either remove that requirement or add a clear justification tied to a Hugging
Face-backed GLM-4.5V path. Check the `glm45v-hf` extra in the agent pyproject
and confirm whether `cua_agent/loops/glm45v.py` or any related HF integration
actually imports or needs `transformers`; if not, drop the pin and keep the
extra minimal.

@0xjohnnydev
0xjohnnydev merged commit 6be1de8 into main Jun 24, 2026
87 checks passed
r33drichards pushed a commit that referenced this pull request Jun 25, 2026
…acked fix

The cursor-click-gif tests (kde, xfce-labwc, gnome, xfce-sway) all pass
since the EIS-backed cua-compositor injection path landed in #2000.
Remove the stale 'TDD RED suite' / 'X11-only today' / 'EXPECTED TO FAIL'
language that no longer reflects reality.

Closes CUA-656.
r33drichards added a commit that referenced this pull request Jun 25, 2026
…acked fix (#2028)

The cursor-click-gif tests (kde, xfce-labwc, gnome, xfce-sway) all pass
since the EIS-backed cua-compositor injection path landed in #2000.
Remove the stale 'TDD RED suite' / 'X11-only today' / 'EXPECTED TO FAIL'
language that no longer reflects reality.

Closes CUA-656.

Co-authored-by: OpenClaw <openclaw@trycua.com>
This was referenced Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants