Skip to main content

ExtensionRegistry

Struct ExtensionRegistry 

Source
pub struct ExtensionRegistry { /* private fields */ }
Expand description

Accumulates registrations from one or more plugins’ rpi_plugin_register calls. Held by HostApi during register; the host then take_registry and builds a snapshot.

Merge semantics mirror pi: first-registration-wins on tool/command name collision (a later registration for an existing name is dropped, not an overwrite). Event handlers accumulate (multiple per tag — fan-out).

Implementations§

Source§

impl ExtensionRegistry

Source

pub fn new() -> Self

Build an empty, active registry.

Source

pub fn register_tool(&mut self, tool: Tool, handle: PluginToolHandle) -> bool

Register a tool. Returns true if a prior tool of the same name was kept (first-wins: the new one is dropped). Returns false on insert.

Source

pub fn register_command( &mut self, name: String, description: String, handler: CommandHandlerFn, user_data: *mut c_void, ) -> bool

Register a slash command (first-wins by name). true if a prior was kept.

Source

pub fn register_flag(&mut self, name: String, description: String) -> bool

Register a CLI flag (first-wins by name). Returns true when an earlier extension already declared the same flag.

Source

pub fn register_shortcut( &mut self, plugin: String, key: String, description: String, ) -> bool

Declare a keyboard shortcut (first-wins by key). Returns true when an earlier extension already claimed the same key.

Recording a shortcut does not bind the key to a callback: the owning plugin receives presses/releases through its Input event handler and decides what to do. The host uses this list only to know which keys are claimed, so it can route them to extensions instead of the editor.

Source

pub fn register_event_handler( &mut self, plugin: String, tag: EventTag, handler: EventHandlerFn, user_data: *mut c_void, ) -> bool

Subscribe a handler to tag. Multiple handlers per tag are kept (fan-out on dispatch). Always inserts; returns false. plugin is the owning extension’s display name (host-side only, for diagnostics).

Source

pub fn apply_declaration( &mut self, priority: Option<i32>, platforms: Option<Vec<String>>, ) -> usize

Apply a plugin’s declaration parsed from the unified C ABI declare JSON ({"priority":60,"platforms":["linux","macos"]}). Unknown keys are ignored; malformed values leave the corresponding field unchanged. Retro-updates any handlers already registered (so declare order doesn’t matter). Returns the number of fields applied.

Source

pub fn apply_declaration_json(&mut self, json: &str) -> bool

Parse a v3 declare JSON payload and apply it (P2). Recognised keys: priority (integer), platforms (array of strings) and ownsStdio (boolean; see ExtensionRegistry::declared_owns_stdio). Returns true if the payload parsed as JSON (even with no recognised keys), false on a parse error.

Source

pub fn register_resources_discover( &mut self, handler: ResourcesDiscoverFn, plugin_free_string: FreeStringFn, user_data: *mut c_void, ) -> bool

Register a resources_discover handler (B5b). Multiple handlers are kept (fan-out on discovery, registration order). Always inserts; returns false.

Source

pub fn register_before_agent_start( &mut self, handler: BeforeAgentStartFn, plugin_free_string: FreeStringFn, user_data: *mut c_void, ) -> bool

Register a before_agent_start system-prompt transformer. Multiple handlers are kept (chained in registration order: each sees the prompt the previous one returned, mirroring pi runner.ts:1329-1347). Always inserts; returns false.

Source

pub fn register_provider(&mut self, provider: RegisteredProvider) -> bool

Register a custom provider (B5c). First-registration-wins on provider_id (a later registration for an existing id is dropped, mirroring tool/command first-wins). Returns true if a prior provider of the same id was kept.

Source

pub fn register_oauth_provider( &mut self, provider: RegisteredOAuthProvider, ) -> bool

Register a provider-owned OAuth implementation. The manifest must be a JSON object with a non-empty string id; malformed manifests are rejected. Returns true when an existing provider won.

Source

pub fn register_renderer(&mut self, renderer: RegisteredRenderer) -> bool

Register a renderer (B5c — message/markdown/entry). First-wins on (kind, name). Returns true if a prior renderer of the same kind+name was kept.

Source

pub fn snapshot(&self) -> RegistrySnapshot

Build a snapshot the host session keeps. The registry’s active flag is shared (Arc) so a later invalidate on the registry also invalidates the snapshot — important for cross-session staleness.

Source

pub fn invalidate(&self)

Mark this registry (and any snapshot sharing its flag) as stale.

Source

pub fn is_active(&self) -> bool

Whether this registry is still active (not invalidated).

Source

pub fn declared_priority(&self) -> i32

P2: the plugin’s declared dispatch priority (default DEFAULT_PRIORITY).

Source

pub fn declared_platforms(&self) -> &[String]

P2: the plugin’s declared platforms (empty = all).

Source

pub fn declared_owns_stdio(&self) -> bool

Whether this plugin claimed ownership of the host process’s stdio (declare {"ownsStdio":true}). Default false.

Trait Implementations§

Source§

impl Default for ExtensionRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more