pub struct ProcessExtension { /* private fields */ }Expand description
A running extension process communicating via JSON-RPC 2.0 over stdio.
Implementations§
Source§impl ProcessExtension
impl ProcessExtension
Sourcepub async fn force_shutdown(&self)
pub async fn force_shutdown(&self)
Abort the child transport immediately. Cancellation uses this rather than waiting for the per-call permit; draining pending responders releases every blocked call/producer.
pub async fn spawn( id: &str, command: &str, args: &[String], ) -> Result<Self, String>
Sourcepub async fn spawn_with_cwd(
id: &str,
command: &str,
args: &[String],
cwd: Option<PathBuf>,
) -> Result<Self, String>
pub async fn spawn_with_cwd( id: &str, command: &str, args: &[String], cwd: Option<PathBuf>, ) -> Result<Self, String>
Spawn command with args and optional working directory.
Child stderr is captured and forwarded to debug tracing with the extension id so extension authors can inspect diagnostics without corrupting stdout.
Sourcepub fn with_restart_policy(self, policy: RestartPolicy) -> Self
pub fn with_restart_policy(self, policy: RestartPolicy) -> Self
Override the restart policy. Intended for tests.
pub fn restart_count(&self) -> usize
Sourcepub async fn set_permissions(&self, perms: PermissionSet)
pub async fn set_permissions(&self, perms: PermissionSet)
Public for tests: set the permission set used by inbound RPC handlers (e.g. memory.append). Called by the manager after manifest validation.
pub async fn initialize( &self, plugin_root: Option<PathBuf>, config: Value, ) -> Result<InitializeCapabilitiesResult, String>
Trait Implementations§
Source§impl ExtensionHandler for ProcessExtension
impl ExtensionHandler for ProcessExtension
Source§fn handle_no_spawn<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle_no_spawn<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
The worker path: one hook.handle on the running child only. No
spawn, no restart (call_no_spawn): a missing child or a dead
transport is a failed call, so Continue.
Source§fn lifecycle_snapshot(&self) -> Option<ExtensionLifecycle>
fn lifecycle_snapshot(&self) -> Option<ExtensionLifecycle>
Source§fn call_tool<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
input: Value,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn call_tool<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
input: Value,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn call_tool_for<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
input: Value,
session_id: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn call_tool_for<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
input: Value,
session_id: Option<&'life2 str>,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn provider_complete<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn provider_complete<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn provider_stream<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
sink: Sender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn provider_stream<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
sink: Sender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn invoke_command<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
args: Vec<String>,
request_id: &'life2 str,
sink: InvokeEventSink,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn invoke_command<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
args: Vec<String>,
request_id: &'life2 str,
sink: InvokeEventSink,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
command.output notifications matching request_id and any
task.* notifications to sink. Returns the final response value. Read moreSource§fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn get_info<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<PluginInfo, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_info<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<PluginInfo, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn sidecar_spawn_args<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<SidecarSpawnArgs, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn sidecar_spawn_args<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<SidecarSpawnArgs, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
crate::sidecar::spawn); plugins that don’t host a sidecar
should leave the default Err in place. Core treats the
returned [SidecarSpawnArgs::args] as opaque.Source§fn settings_editor_open<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn settings_editor_open<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn settings_editor_key<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
key: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn settings_editor_key<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
key: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn settings_editor_commit<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn settings_editor_commit<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
category: &'life1 str,
field: &'life2 str,
value: Value,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn subscribe_notifications<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = (usize, Receiver<NotificationFrame>)> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn subscribe_notifications<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = (usize, Receiver<NotificationFrame>)> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
None right away — effectively
a no-op for handler impls that don’t support notifications.Auto Trait Implementations§
impl !Freeze for ProcessExtension
impl !RefUnwindSafe for ProcessExtension
impl !UnwindSafe for ProcessExtension
impl Send for ProcessExtension
impl Sync for ProcessExtension
impl Unpin for ProcessExtension
impl UnsafeUnpin for ProcessExtension
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.