Repository navigation
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
b1c0c3d to
b0f436f
Compare
134ba1c to
442c70a
Compare
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
Signed-off-by: Drew Newberry <[email protected]>
442c70a to
e87e5c4
Compare
Compatibility review (advisory)New or updated breaking changes; see the full report for all findings. 1. rust-sdk — No explicit risk acceptance found
2. api-behavior — No explicit risk acceptance foundAn omitted readiness check previously caused no gateway requests, but the candidate sends unauthenticated
Review details
Advisory review; publication gates are unchanged. |
|
Heads-up: the Go SDK moves to ai-openshell/sdk-go on 2026-11-03 (#5031). This PR also changes hand-written SDK code under |
Summary
Exposed sandbox HTTP services now report continuously observed health. Services check listener responsiveness by default; configuring a readiness path requires a 2xx response, and the Codex app-server example uses
/readyz.Related Issue
Closes #4229
Changes
Service contract
A service remains an exposed loopback HTTP port identified by workspace, sandbox, and service name (empty name selects the unnamed endpoint). Readiness uses that same target port and relay; it does not require another listener or route.
Configuration and response
ExposeServiceRequestand create-timeSandboxServiceExposureaccept an optionalreadiness_check. The persistedServiceEndpointreturns the effective configuration. Existing expose/get/list RPCs return health alongside the endpoint and URL:GET /readiness_check: { path: "/readyz" }GET /readyzAn empty configured path resolves to
/. Paths must begin with/, be at most 1,024 bytes, and contain no query, fragment, whitespace, or alternate host. Omitting the check when updating an existing service preserves its configuration. Removing the check requires deleting and recreating the endpoint in this version.Continuous observation
last_checked_time,message, and optionalhttp_status_codedescribe the latest attempt. The code is present only when response headers arrived. Clients should branch onstate, because thresholds can leave the state healthy while the latest attempt failed.RELAY_TARGET_FAILEDreason and does not retry it as a transport outage. Older owning gateways keep their previous peer-error behavior.RelayOpen.health_checkmarker. Updated supervisors log routine attempts at debug rather than emitting OCSF open/close events; older supervisors ignore the marker and keep their existing events. Probes still contribute to routed-relay metrics.The CLI adds
service expose --readiness-path PATHandsandbox create --expose-readiness-path PATH(requires--expose). Service output showsReady/Not readyfor configured readiness andResponsive/Unresponsiveotherwise. The Codex example sets--expose-readiness-path /readyz.Testing
claude-opus-5-5) reviewed the service implementation and bridge cancellation warning fix; no remaining actionable findings in that review.mise run pre-commit, TypeScript SDK CI, Go SDK CI, and docs checks pass.mise exec -- e2e/with-docker-gateway.sh cargo test --manifest-path e2e/rust/Cargo.toml --features e2e-docker --test service_bearer_passthrough -- --nocapture. Includes delayed 128 KiB response bodies, quiet sandbox audit and gateway warning logs, health transitions, closed targets, stopped sandboxes, unchanged routing, and authorization passthrough./readyzreturns HTTP 200 without credentials.Checklist