feat: align browser callback runtime and export flows

Consolidate the browser task runtime around the callback path, add safer artifact opening for Zhihu exports, and cover the new service/browser flows with focused tests and supporting docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
木炎
2026-04-06 21:44:53 +08:00
parent 0dd655712c
commit bdf8e12246
55 changed files with 14440 additions and 1053 deletions

View File

@@ -21,6 +21,24 @@ fn browser_init_round_trip_uses_frozen_wire_format() {
assert_eq!(serde_json::to_string(&message).unwrap(), raw);
}
#[test]
fn browser_lifecycle_messages_use_frozen_wire_tags() {
let connect_raw = r#"{"type":"connect"}"#;
let start_raw = r#"{"type":"start"}"#;
let stop_raw = r#"{"type":"stop"}"#;
let connect: BrowserMessage = serde_json::from_str(connect_raw).unwrap();
let start: BrowserMessage = serde_json::from_str(start_raw).unwrap();
let stop: BrowserMessage = serde_json::from_str(stop_raw).unwrap();
assert_eq!(connect, BrowserMessage::Connect);
assert_eq!(start, BrowserMessage::Start);
assert_eq!(stop, BrowserMessage::Stop);
assert_eq!(serde_json::to_string(&connect).unwrap(), connect_raw);
assert_eq!(serde_json::to_string(&start).unwrap(), start_raw);
assert_eq!(serde_json::to_string(&stop).unwrap(), stop_raw);
}
#[test]
fn command_serializes_action_and_security_fields() {
let message = AgentMessage::Command {
@@ -40,6 +58,16 @@ fn command_serializes_action_and_security_fields() {
assert!(raw.contains(r#""expected_domain":"oa.example.com""#));
}
#[test]
fn agent_status_changed_serializes_with_expected_tag() {
let raw = serde_json::to_string(&AgentMessage::StatusChanged {
state: "started".to_string(),
})
.unwrap();
assert_eq!(raw, r#"{"type":"status_changed","state":"started"}"#);
}
#[test]
fn response_deserializes_timing_and_payload() {
let raw = r#"{"type":"response","seq":7,"success":true,"data":{"text":"提交成功"},"aom_snapshot":[],"timing":{"queue_ms":2,"exec_ms":38}}"#;