Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["apps/chuzz", "crates/chuzz-control"]
resolver = "3"

[workspace.package]
version = "0.1.37"
version = "0.1.38"
edition = "2024"
rust-version = "1.91"
license = "MIT OR Apache-2.0"
Expand Down Expand Up @@ -32,21 +32,21 @@ homepage = "https://github.com/pathscale/chuzz"
# the same range gets the same crate rather than a second copy. To build against
# a working checkout, see `scripts/local-engine.sh`; it is opt-in so the default
# exercises what a release actually resolves.
blitz-dom = { package = "ps-blitz-dom", version = "^0.4" }
blitz-html = { package = "ps-blitz-html", version = "^0.4" }
blitz-net = { package = "ps-blitz-net", version = "^0.4" }
blitz-script = { package = "ps-blitz-script", version = "^0.4" }
blitz-traits = { package = "ps-blitz-traits", version = "^0.4" }
blitz-dom = { package = "ps-blitz-dom", version = "^0.4.9" }
blitz-html = { package = "ps-blitz-html", version = "^0.4.9" }
blitz-net = { package = "ps-blitz-net", version = "^0.4.9" }
blitz-script = { package = "ps-blitz-script", version = "^0.4.9" }
blitz-traits = { package = "ps-blitz-traits", version = "^0.4.9" }
# The wasmi host binding over blitz-dom-api, so a WebAssembly guest can build a
# document with no JavaScript and no URL in the path.
blitz-wasm = { package = "ps-blitz-wasm", version = "^0.4" }
blitz-wasm = { package = "ps-blitz-wasm", version = "^0.4.9" }
dioxus-native = { package = "ps-dioxus-native", version = "^0.7.3", default-features = false }
# The MCP framing the control server speaks, same source and feature as
# tauri-runtime-blitz uses for its agent-control surface.
# The one control surface: wire vocabulary, the document core, and both
# transports. It used to be reached through `tauri-runtime-blitz`, which meant a
# headless browser compiled a Tauri runtime with the runtime switched off.
blitz-control-protocol = { version = "^0.5", default-features = false }
blitz-control-protocol = { version = "^0.5.1", default-features = false }
endpoint-libs = { version = "^3", default-features = false, features = ["agent-control"] }
brotli = { version = "8", default-features = false, features = ["std"] }
image = { version = "^0.25.6", default-features = false }
Expand Down Expand Up @@ -80,7 +80,7 @@ anyrender = { package = "ps-anyrender", version = "^0.13.0" }
# revision below closes the stack, snapshots, and reopens it, so glass renders
# in the CPU paths as well as on the GPU.
anyrender_vello_cpu = { package = "ps-anyrender-vello-cpu", version = "^0.17.0", features = ["filters"] }
blitz-paint = { package = "ps-blitz-paint", version = "^0.4" }
blitz-paint = { package = "ps-blitz-paint", version = "^0.4.9" }
png = "=0.18.1"
# Naming `wasmi::Linker` is unavoidable: `blitz_wasm::add_to_linker` takes one,
# and blitz-wasm does not re-export the runtime. This must stay on the same
Expand Down
63 changes: 43 additions & 20 deletions apps/chuzz/tests/serves_inspection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,35 @@ fn serves_a_page_over_the_inspection_socket() {
DebugResponse::Ack
));

// Click and DoubleClick both move the synthetic pointer onto their
// target, just as a physical click does. Move it away before testing
// entry, or hovering the same button again is correctly a no-op and
// there is no repaint to observe.
assert!(matches!(
request(
&mut stream,
&mut next_id,
&AgentControlRequest::Act(AgentAction::Input(InputCommand::Pointer {
phase: PointerPhase::Move,
x: 1.0,
y: 1.0,
button: 0,
modifiers: Modifiers::default(),
})),
)
.await,
DebugResponse::Ack
));
let event = tokio::time::timeout(Duration::from_millis(50), stream.recv())
.await
.expect("leaving a hovered control should repaint")
.expect("the host keeps serving")
.expect("read paint event");
assert!(matches!(
decode_diagnostics_event(event),
Ok(DebugEvent::PaintCommitted { .. })
));

assert!(matches!(
request(
&mut stream,
Expand All @@ -435,26 +464,20 @@ fn serves_a_page_over_the_inspection_socket() {

// These inputs now use the shared document-control implementation.
// A page without a scroll range still accepts a wheel as a no-op.
for supported in [
AgentControlRequest::Act(AgentAction::Input(InputCommand::Pointer {
phase: PointerPhase::Move,
x: 1.0,
y: 1.0,
button: 0,
modifiers: Modifiers::default(),
})),
AgentControlRequest::Act(AgentAction::Input(InputCommand::Wheel {
delta_x: 0.0,
delta_y: 1.0,
phase: WheelPhase::Moved,
modifiers: Modifiers::default(),
})),
] {
assert!(matches!(
request(&mut stream, &mut next_id, &supported).await,
DebugResponse::Ack
));
}
assert!(matches!(
request(
&mut stream,
&mut next_id,
&AgentControlRequest::Act(AgentAction::Input(InputCommand::Wheel {
delta_x: 0.0,
delta_y: 1.0,
phase: WheelPhase::Moved,
modifiers: Modifiers::default(),
})),
)
.await,
DebugResponse::Ack
));
for unsupported in [AgentControlRequest::Relaunch, AgentControlRequest::Quit] {
assert!(matches!(
request(&mut stream, &mut next_id, &unsupported).await,
Expand Down
Loading