feat(vscodex): add remote Codex collaboration module

This commit is contained in:
fawney
2026-09-01 20:25:35 +08:00
parent 5a69cfe40d
commit 30a75832f8
102 changed files with 38569 additions and 11 deletions
@@ -440,6 +440,26 @@ fn classifies_users_me_routes_as_public_support_route() {
"/api/users/me/available-models",
"available_models",
),
(
http::Method::GET,
"/api/users/me/vscodex/devices",
"vscodex_devices_list",
),
(
http::Method::POST,
"/api/users/me/vscodex/pairings",
"vscodex_pairing_create",
),
(
http::Method::DELETE,
"/api/users/me/vscodex/devices/device-1",
"vscodex_device_delete",
),
(
http::Method::POST,
"/api/users/me/vscodex/ws-tickets",
"vscodex_ws_ticket_create",
),
(
http::Method::PUT,
"/api/users/me/model-capabilities",
@@ -496,6 +516,49 @@ fn classifies_users_me_routes_as_public_support_route() {
}
}
#[test]
fn vscodex_post_routes_buffer_request_body() {
let headers = headers(&[]);
for path in [
"/api/vscodex/pair",
"/api/users/me/vscodex/pairings",
"/api/users/me/vscodex/ws-tickets",
] {
let uri: Uri = path.parse().expect("uri should parse");
let decision = classify_control_route(&http::Method::POST, &uri, &headers)
.expect("route should classify");
let context = GatewayPublicRequestContext::from_request_parts(
"trace-vscodex",
&http::Method::POST,
&uri,
&headers,
Some(decision),
);
assert!(
local_proxy_route_requires_buffered_body(&context),
"{path} should buffer its JSON body"
);
}
}
#[test]
fn classifies_public_vscodex_pairing_exchange() {
let headers = headers(&[]);
let uri: Uri = "/api/vscodex/pair".parse().expect("uri should parse");
let decision =
classify_control_route(&http::Method::POST, &uri, &headers).expect("route should classify");
assert_eq!(decision.route_class.as_deref(), Some("public_support"));
assert_eq!(decision.route_family.as_deref(), Some("vscodex"));
assert_eq!(decision.route_kind.as_deref(), Some("pairing_exchange"));
assert_eq!(
decision.auth_endpoint_signature.as_deref(),
Some("public:vscodex")
);
assert!(!decision.is_execution_runtime_candidate());
}
#[test]
fn classifies_ccswitch_usage_as_api_key_public_support_route() {
let headers = headers(&[]);