Add an authenticated Windows sandbox provisioning client (#42337)

## What changed

- Add a client for the packaged Windows sandbox provisioning service that verifies the named-pipe server belongs to the running `CodexSandboxService` process before exchanging a versioned provisioning request.
- Treat an absent, busy, timed-out, or disconnected service as unavailable while surfacing provisioning and authentication failures.
- Send the complete `WindowsSandboxProvisioningSettings` and classify inherited HTTP and SOCKS proxy listeners separately for managed-policy validation.
- Share bounded frame-readiness handling between runner and provisioning IPC.

## Testing

- Extend proxy environment tests to cover network-enabled profiles, mixed HTTP and SOCKS listeners, explicit proxy-port overrides, case-insensitive schemes, and unclassified protocols.

GitOrigin-RevId: 6ff6741fc3ecd76314a7a045523a8d7a7e7af686
This commit is contained in:
johnl-oai authored and copyberry committed 2026-09-02 19:33:34 +00:00
1 parent 301a7c5e01
commit dcfcb570b2
7 files changed
+491 -58

No files matched your search

@@ -1,5 +1,6 @@
//! Dedicated protocol exchanged with the Windows sandbox provisioning service.
use crate::WindowsSandboxProvisioningSettings;
use anyhow::Result;
use serde::Deserialize;
use serde::Serialize;
@@ -37,9 +38,16 @@ pub enum ProvisioningMessage {
#[serde(deny_unknown_fields)]
pub struct SandboxProvisioningRequest {
pub codex_home: String,
pub http_port: Option<u16>,
pub socks_port: Option<u16>,
pub allow_local_binding: bool,
pub settings: WindowsSandboxProvisioningSettings,
pub listeners: WindowsSandboxProxyListeners,
}
/// Known proxy protocols used for managed-policy validation, separate from firewall settings.
#[derive(Clone, Debug, Default, Deserialize, Serialize, Eq, PartialEq)]
#[serde(deny_unknown_fields)]
pub struct WindowsSandboxProxyListeners {
pub http_ports: Vec<u16>,
pub socks_ports: Vec<u16>,
}
/// Result returned by the sandbox provisioning service.