pub trait FrontendRuntime: Send + Sync {
Show 15 methods
// Required methods
fn describe<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FrontendRuntimeDescriptor, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
fn attach<'life0, 'async_trait>(
&'life0 self,
history_limit: usize,
) -> Pin<Box<dyn Future<Output = Result<FrontendAttachment, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
fn send_input<'async_trait>(
self: Arc<Self>,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>
where Self: 'async_trait;
fn submit<'life0, 'async_trait>(
&'life0 self,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
fn interrupt<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
fn steer<'life0, 'async_trait>(
&'life0 self,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
fn respond<'life0, 'async_trait>(
&'life0 self,
response: FrontendResponse,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait;
// Provided methods
fn send_input_with_images<'async_trait>(
self: Arc<Self>,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>
where Self: 'async_trait { ... }
fn submit_with_images<'life0, 'async_trait>(
&'life0 self,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn invoke<'life0, 'async_trait>(
&'life0 self,
operation: FrontendOperationInvocation,
) -> Pin<Box<dyn Future<Output = Result<FrontendOperationResult, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn lease_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn take_control<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn heartbeat<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn detach<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
fn close<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>
where 'life0: 'async_trait,
Self: 'async_trait { ... }
}Expand description
Canonical live-runtime contract owned by the SDK.
Frontend modules are projections of this trait. They may render events or add transport envelopes, but they do not own a second model loop.
Required Methods§
Sourcefn describe<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FrontendRuntimeDescriptor, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn describe<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<FrontendRuntimeDescriptor, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Describe runtime identity, modules, commands, actions, and state.
Sourcefn attach<'life0, 'async_trait>(
&'life0 self,
history_limit: usize,
) -> Pin<Box<dyn Future<Output = Result<FrontendAttachment, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn attach<'life0, 'async_trait>(
&'life0 self,
history_limit: usize,
) -> Pin<Box<dyn Future<Output = Result<FrontendAttachment, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Atomically attach at the canonical history/live-event boundary.
Sourcefn send_input<'async_trait>(
self: Arc<Self>,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
Self: 'async_trait,
fn send_input<'async_trait>(
self: Arc<Self>,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
Self: 'async_trait,
Atomically accept a new user turn and return once ownership is claimed.
Exactly one simultaneous caller succeeds. The accepted turn continues
on the SDK-owned runtime and publishes its result through the canonical
event stream; a competing caller receives SdkErrorCode::Busy
synchronously from this operation.
Sourcefn submit<'life0, 'async_trait>(
&'life0 self,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn submit<'life0, 'async_trait>(
&'life0 self,
prompt: String,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Submit a new user turn.
Sourcefn interrupt<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn interrupt<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Interrupt an active turn.
Provided Methods§
Sourcefn send_input_with_images<'async_trait>(
self: Arc<Self>,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
Self: 'async_trait,
fn send_input_with_images<'async_trait>(
self: Arc<Self>,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
Self: 'async_trait,
Atomically accept a multimodal user turn and return once ownership is claimed. Implementations must preserve images natively or reject the action; silently folding them into text is never allowed.
Sourcefn submit_with_images<'life0, 'async_trait>(
&'life0 self,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn submit_with_images<'life0, 'async_trait>(
&'life0 self,
prompt: String,
image_urls: Vec<String>,
) -> Pin<Box<dyn Future<Output = Result<String, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Submit a new user turn with canonical multimodal image inputs.
Frontends must pass only runtime-resolved URLs or data URIs here; the SDK runtime, not a remote display client, owns input interpretation.
Sourcefn invoke<'life0, 'async_trait>(
&'life0 self,
operation: FrontendOperationInvocation,
) -> Pin<Box<dyn Future<Output = Result<FrontendOperationResult, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn invoke<'life0, 'async_trait>(
&'life0 self,
operation: FrontendOperationInvocation,
) -> Pin<Box<dyn Future<Output = Result<FrontendOperationResult, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Invoke one operation from the descriptor’s explicit catalog.
Sourcefn lease_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn lease_snapshot<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Read the one-controller/many-observer ownership state.
Sourcefn take_control<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn take_control<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Explicitly acquire the controller lease from another interactive client. Ordinary mutations never perform an implicit takeover.
Sourcefn heartbeat<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn heartbeat<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Refresh observer activity and a controller lease owned by this client.
Sourcefn detach<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn detach<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<RuntimeLeaseSnapshot, SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Release this client’s observer/controller state without stopping the runtime.
Sourcefn close<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
fn close<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), SdkError>> + Send + 'async_trait>>where
'life0: 'async_trait,
Self: 'async_trait,
Explicitly close the SDK-owned runtime when the negotiated descriptor grants that owner-level action. Dropping an attachment is always a detach and never calls this operation implicitly.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".