Skip to content

Commit 8968bba

Browse files
feat(sparsekernel): tighten runtime scheduling
1 parent b61132b commit 8968bba

21 files changed

Lines changed: 1035 additions & 85 deletions

File tree

crates/sparsekernel-cli/src/lib.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ use clap::{Args, Parser, Subcommand};
44
use serde::Deserialize;
55
use serde_json::{json, Value};
66
use sparsekernel_core::{
7-
probe_browser_endpoint, AppendTranscriptEventInput, ArtifactStore, AuditInput, BrowserBroker,
8-
CapabilityCheck, CompleteToolCallInput, CreateToolCallInput, EnqueueTaskInput,
9-
GrantCapabilityInput, LedgerToolBroker, ListBrowserObservationsInput, ListBrowserTargetsInput,
10-
LocalSandboxBroker, MockBrowserBroker, RecordBrowserObservationInput, RecordBrowserTargetInput,
11-
SandboxBroker, SparseKernelDb, SparseKernelPaths, ToolBroker, UpsertSessionInput,
12-
SPARSEKERNEL_PROTOCOL_VERSION,
7+
probe_browser_endpoint, probe_sandbox_backends, AppendTranscriptEventInput, ArtifactStore,
8+
AuditInput, BrowserBroker, CapabilityCheck, CompleteToolCallInput, CreateToolCallInput,
9+
EnqueueTaskInput, GrantCapabilityInput, LedgerToolBroker, ListBrowserObservationsInput,
10+
ListBrowserTargetsInput, LocalSandboxBroker, MockBrowserBroker, RecordBrowserObservationInput,
11+
RecordBrowserTargetInput, SandboxBroker, SparseKernelDb, SparseKernelPaths, ToolBroker,
12+
UpsertSessionInput, SPARSEKERNEL_PROTOCOL_VERSION,
1313
};
1414
use std::collections::HashMap;
1515
use std::error::Error;
@@ -1312,7 +1312,8 @@ pub fn handle_api_request_with_daemon_state(
13121312
"artifacts.file-transfer.v1",
13131313
"capabilities.v1",
13141314
"browser-broker.v1",
1315-
"sandbox-broker.v1"
1315+
"sandbox-broker.v1",
1316+
"sandbox-backends.probe.v1"
13161317
],
13171318
}),
13181319
},
@@ -1621,6 +1622,10 @@ pub fn handle_api_request_with_daemon_state(
16211622
body: json!({ "released": broker.release_sandbox(&input.allocation_id)? }),
16221623
}
16231624
}
1625+
("GET", "/sandbox/backends/probe") => ApiReply {
1626+
status_code: 200,
1627+
body: serde_json::to_value(probe_sandbox_backends())?,
1628+
},
16241629
("POST", "/leases/release-expired") => {
16251630
let input: ReleaseExpiredLeasesRequest = if body.is_empty() {
16261631
ReleaseExpiredLeasesRequest { now: None }
@@ -2429,6 +2434,17 @@ mod tests {
24292434
assert_eq!(released["released"], true);
24302435
}
24312436

2437+
#[test]
2438+
fn sandbox_probe_api_reports_backend_boundaries() {
2439+
let mut db = SparseKernelDb::open(":memory:").unwrap();
2440+
let probes = handle_api_request(&mut db, "GET", "/sandbox/backends/probe", &[])
2441+
.unwrap()
2442+
.body;
2443+
assert!(probes.as_array().unwrap().iter().any(|probe| {
2444+
probe["backend"] == "local/no_isolation" && probe["hard_boundary"] == false
2445+
}));
2446+
}
2447+
24322448
#[test]
24332449
fn browser_probe_api_checks_loopback_cdp_endpoint() {
24342450
let mut db = SparseKernelDb::open(":memory:").unwrap();

0 commit comments

Comments
 (0)