Skip to main content

parallax_runtime/
lib.rs

1//! Runtime manager, adapter trait, and worker orchestration.
2
3#![deny(unsafe_code)]
4#![warn(missing_docs)]
5
6mod adapter;
7mod discover;
8mod manager;
9mod worker;
10
11pub use adapter::{AdapterFactory, BoxRuntimeAdapter, RuntimeAdapter};
12pub use discover::{discover_javascript, discover_python, DiscoveredBinary};
13pub use manager::RuntimeManager;
14pub use worker::WorkerProcess;
15
16use parallax_core::{
17    ExecutionRequest, ExecutionResult, ExecutionState, RestoreResult, RuntimeCapabilities,
18    RuntimeKind, RuntimeMetadata, RuntimeStatus,
19};
20use parallax_ir::PirDocument;
21use parallax_security::SandboxPolicy;
22use std::sync::Arc;
23
24/// Handle describing a registered runtime.
25#[derive(Clone, Debug)]
26pub struct RuntimeHandle {
27    /// Kind.
28    pub kind: RuntimeKind,
29    /// Metadata.
30    pub metadata: RuntimeMetadata,
31    /// Capabilities.
32    pub capabilities: RuntimeCapabilities,
33    /// Availability.
34    pub status: RuntimeStatus,
35}
36
37/// Shared manager type.
38pub type SharedManager = Arc<RuntimeManager>;
39
40/// Capture bindings helper result.
41#[derive(Clone, Debug)]
42pub struct CaptureOutcome {
43    /// Execution result.
44    pub execution: ExecutionResult,
45    /// PIR document built from captured bindings.
46    pub pir: PirDocument,
47    /// Execution state shell.
48    pub state: ExecutionState,
49}
50
51/// High-level execute+capture API used by CLI migrate/snapshot.
52pub async fn execute_and_capture(
53    manager: &RuntimeManager,
54    request: ExecutionRequest,
55    capture_names: &[String],
56    policy: &SandboxPolicy,
57) -> parallax_core::Result<CaptureOutcome> {
58    manager
59        .execute_and_capture(request, capture_names, policy)
60        .await
61}
62
63/// Restore PIR bindings into a runtime.
64pub async fn restore_bindings(
65    manager: &RuntimeManager,
66    runtime: RuntimeKind,
67    pir: &PirDocument,
68    policy: &SandboxPolicy,
69) -> parallax_core::Result<RestoreResult> {
70    manager.restore_bindings(runtime, pir, policy).await
71}