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<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 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,
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
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,
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
Self: 'async_trait,
'life0: '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
Self: 'async_trait,
'life0: '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
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: UnboundedSender<InvokeCommandEvent>,
) -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: '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
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,
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
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,
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
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,
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
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,
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
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,
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
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,
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
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,
Gracefully shut down the extension.
Auto Trait Implementations§
impl !Freeze for ProcessExtension
impl !RefUnwindSafe for ProcessExtension
impl Send for ProcessExtension
impl Sync for ProcessExtension
impl Unpin for ProcessExtension
impl UnsafeUnpin for ProcessExtension
impl !UnwindSafe 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.