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
pub async fn spawn( id: &str, command: &str, args: &[String], ) -> Result<ProcessExtension, String>
Sourcepub async fn spawn_with_cwd(
id: &str,
command: &str,
args: &[String],
cwd: Option<PathBuf>,
) -> Result<ProcessExtension, String>
pub async fn spawn_with_cwd( id: &str, command: &str, args: &[String], cwd: Option<PathBuf>, ) -> Result<ProcessExtension, 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) -> ProcessExtension
pub fn with_restart_policy(self, policy: RestartPolicy) -> ProcessExtension
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 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
'life0: 'async_trait,
'life1: 'async_trait,
ProcessExtension: '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
'life0: 'async_trait,
'life1: 'async_trait,
ProcessExtension: 'async_trait,
Call an extension-provided tool.
Source§fn provider_complete<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn provider_complete<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Complete a chat request through an extension-provided model provider.
Source§fn provider_stream<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
sink: UnboundedSender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn provider_stream<'life0, 'async_trait>(
&'life0 self,
params: ProviderCompleteParams,
sink: UnboundedSender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ProviderCompleteResult, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Stream a chat request through an extension-provided model provider. Read more
Source§fn invoke_command<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
args: Vec<String>,
request_id: &'life2 str,
sink: UnboundedSender<InvokeCommandEvent>,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: 'async_trait,
fn invoke_command<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
command: &'life1 str,
args: Vec<String>,
request_id: &'life2 str,
sink: UnboundedSender<InvokeCommandEvent>,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: 'async_trait,
Invoke a plugin-registered interactive slash command. The handler must
forward
command.output notifications matching request_id and any
task.* notifications to sink. Returns the final response value.Source§fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ProcessExtension: 'async_trait,
fn handle<'life0, 'life1, 'async_trait>(
&'life0 self,
event: &'life1 HookEvent,
) -> Pin<Box<dyn Future<Output = HookResult> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
ProcessExtension: 'async_trait,
Handle a hook event. Returns the handler’s decision.
Source§fn get_info<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<PluginInfo, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn get_info<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<PluginInfo, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Fetch optional plugin capability/build/model information.
Source§fn sidecar_spawn_args<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<SidecarSpawnArgs, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn sidecar_spawn_args<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<SidecarSpawnArgs, String>> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Ask the plugin to supply sidecar spawn arguments. Used by the
modality-neutral sidecar bootstrap path (see
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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: '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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: 'async_trait,
Open a plugin-owned custom settings editor and return its initial render payload.
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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
ProcessExtension: '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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
ProcessExtension: 'async_trait,
Forward a keypress to the active plugin-owned custom settings editor.
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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: '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
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
ProcessExtension: 'async_trait,
Ask the plugin to commit a custom editor value selected by the UI.
Source§fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn shutdown<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Gracefully shut down the extension.
Source§fn subscribe_notifications<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = (usize, UnboundedReceiver<NotificationFrame>)> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn subscribe_notifications<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = (usize, UnboundedReceiver<NotificationFrame>)> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Subscribe to raw JSON-RPC notifications from this extension.
Returns a monotonic subscription id (for unsubscribing) and a
receiver that yields every notification frame. The default
implementation returns a channel whose sender is immediately
dropped, so the receiver yields
None right away — effectively
a no-op for handler impls that don’t support notifications.Source§fn restart_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = usize> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn restart_count<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = usize> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Number of transport restarts observed by this handler.
Source§fn health<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ExtensionHealth> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
fn health<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ExtensionHealth> + Send + 'async_trait>>where
'life0: 'async_trait,
ProcessExtension: 'async_trait,
Current health state of this handler.
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
Mutably borrows from an owned value. Read more
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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more