Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ff9ec2a
feat(permissions): map the sandbox sets to GCP aiplatform grants
ItamarZand88 Aug 22, 2026
e929e34
feat(sandbox-agent): serve an explicit envelope on POST /
ItamarZand88 Aug 22, 2026
0e65bd1
feat(sandbox): add a supervisor-isolation capability bit
ItamarZand88 Aug 22, 2026
515242e
feat(gcp-clients): add Agent Platform sandbox client
ItamarZand88 Aug 22, 2026
e12fb23
feat(sandbox-agent): run long commands as detached, pollable jobs
ItamarZand88 Aug 22, 2026
de8017f
feat(sandbox): add the GCP Agent Platform binding and capability row
ItamarZand88 Aug 22, 2026
28babbe
feat(sandbox): add the GCP Agent Platform provider
ItamarZand88 Aug 22, 2026
9bf5752
feat(sandbox): derive a GCP session generation from the container boo…
ItamarZand88 Aug 22, 2026
5312555
feat(sandbox): reconcile the GCP Agent Platform template with a contr…
ItamarZand88 Aug 23, 2026
59ee5c5
test(sandbox): add live GCP Agent Platform tests and pin two unit gaps
ItamarZand88 Aug 23, 2026
7e93f02
docs(sandbox): state the container-only boundary for a shared-uid bac…
ItamarZand88 Aug 23, 2026
b8a8d93
feat(sandbox-agent): declare the isolation model instead of assuming …
ItamarZand88 Aug 23, 2026
a01aa6f
feat(gcp-clients): list engines so the orphan sweep finds what a log …
ItamarZand88 Aug 23, 2026
403733f
test(sandbox): give the live GCP client a request timeout
ItamarZand88 Aug 23, 2026
ac6e173
fix(sandbox-agent): accept connections with a blocking listen loop
ItamarZand88 Aug 23, 2026
e2214cc
fix(sandbox-agent): set jobs on the linux-only protocol test states
ItamarZand88 Aug 23, 2026
dc20d2b
fix(sandbox-agent): confine paths with a portable openat walk
ItamarZand88 Aug 23, 2026
dd4d580
test(sandbox): keep live file markers inside the session root
ItamarZand88 Aug 23, 2026
75be41e
feat(sandbox): provision an Agent Platform reasoning engine per GCP s…
ItamarZand88 Aug 23, 2026
b98858b
feat(sandbox): make Agent Platform the GCP sandbox backend, remove Cl…
ItamarZand88 Aug 23, 2026
1847cd8
fix(sandbox): retain unread job results and fail a leaked resume roll…
ItamarZand88 Aug 23, 2026
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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions crates/alien-bindings-node/src/sandbox.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ impl SandboxHandle {
process_limit,
session_lifetime,
supervisor_pid_namespace,
supervisor_isolation,
} = self.inner.capabilities();

[
Expand All @@ -234,6 +235,7 @@ impl SandboxHandle {
(process_limit, "processLimit"),
(session_lifetime, "sessionLifetime"),
(supervisor_pid_namespace, "supervisorPidNamespace"),
(supervisor_isolation, "supervisorIsolation"),
]
.into_iter()
.filter(|(supported, _)| *supported)
Expand Down
49 changes: 45 additions & 4 deletions crates/alien-bindings/src/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1848,11 +1848,52 @@ impl BindingsProviderApi for BindingsProvider {
Ok(sandbox)
}
#[cfg(feature = "gcp")]
SandboxBinding::Gcp(gcp_binding) => {
use crate::providers::sandbox::gcp::GcpSandbox;
SandboxBinding::GcpAgentPlatform(gcp_binding) => {
use crate::providers::sandbox::gcp_agent_platform::GcpAgentPlatformSandbox;
use alien_gcp_clients::agent_platform::AgentPlatformClient;

let gcp_config = self.client_config.gcp_config().ok_or_else(|| {
AlienError::new(ErrorData::ClientConfigInvalid {
platform: Platform::Gcp,
message: "GCP config not available".to_string(),
})
})?;

let engine = gcp_binding
.engine
.into_value(binding_name, "engine")
.context(ErrorData::config_invalid(
binding_name,
"Failed to resolve engine from the Agent Platform sandbox binding",
))?;
let template = gcp_binding
.template
.into_value(binding_name, "template")
.context(ErrorData::config_invalid(
binding_name,
"Failed to resolve template from the Agent Platform sandbox binding",
))?;
let region = gcp_binding
.region
.into_value(binding_name, "region")
.context(ErrorData::config_invalid(
binding_name,
"Failed to resolve region from the Agent Platform sandbox binding",
))?;

// The engine is regional with no global alias, so the endpoint is built from the
// binding's region, not the deployment's — signing against the wrong one 404s.
let mut config = gcp_config.clone();
config.region = region;

let client = AgentPlatformClient::new(reqwest::Client::new(), config);
let sandbox: Arc<dyn crate::traits::Sandbox> =
Arc::new(GcpSandbox::new(binding_name, &gcp_binding)?);
Arc::new(GcpAgentPlatformSandbox::new(
Arc::new(client),
engine,
template,
gcp_binding.session_ttl_seconds,
));
Ok(sandbox)
}
#[cfg(feature = "azure")]
Expand Down Expand Up @@ -2021,7 +2062,7 @@ impl BindingsProviderApi for BindingsProvider {
#[cfg(not(feature = "azure"))]
SandboxBinding::Azure(_) => Err(not_built("azure")),
#[cfg(not(feature = "gcp"))]
SandboxBinding::Gcp(_) => Err(not_built("gcp")),
SandboxBinding::GcpAgentPlatform(_) => Err(not_built("gcp")),
#[cfg(not(feature = "kubernetes"))]
SandboxBinding::Kubernetes(_) => Err(not_built("kubernetes")),
#[cfg(not(feature = "local"))]
Expand Down

This file was deleted.

Loading
Loading