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
impl ExtensionRegistry
Sourcepub fn register_tool(&mut self, tool: Tool, handle: PluginToolHandle) -> bool
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.
Sourcepub fn register_command(
&mut self,
name: String,
description: String,
handler: CommandHandlerFn,
user_data: *mut c_void,
) -> bool
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.
Sourcepub fn register_flag(&mut self, name: String, description: String) -> bool
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.
Sourcepub fn register_shortcut(
&mut self,
plugin: String,
key: String,
description: String,
) -> bool
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.
Sourcepub fn register_event_handler(
&mut self,
plugin: String,
tag: EventTag,
handler: EventHandlerFn,
user_data: *mut c_void,
) -> bool
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).
Sourcepub fn apply_declaration(
&mut self,
priority: Option<i32>,
platforms: Option<Vec<String>>,
) -> usize
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.
Sourcepub fn apply_declaration_json(&mut self, json: &str) -> bool
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.
Sourcepub fn register_resources_discover(
&mut self,
handler: ResourcesDiscoverFn,
plugin_free_string: FreeStringFn,
user_data: *mut c_void,
) -> bool
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.
Sourcepub fn register_before_agent_start(
&mut self,
handler: BeforeAgentStartFn,
plugin_free_string: FreeStringFn,
user_data: *mut c_void,
) -> bool
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.
Sourcepub fn register_provider(&mut self, provider: RegisteredProvider) -> bool
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.
Sourcepub fn register_oauth_provider(
&mut self,
provider: RegisteredOAuthProvider,
) -> bool
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.
Sourcepub fn register_renderer(&mut self, renderer: RegisteredRenderer) -> bool
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.
Sourcepub fn snapshot(&self) -> RegistrySnapshot
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.
Sourcepub fn invalidate(&self)
pub fn invalidate(&self)
Mark this registry (and any snapshot sharing its flag) as stale.
Sourcepub fn declared_priority(&self) -> i32
pub fn declared_priority(&self) -> i32
P2: the plugin’s declared dispatch priority (default DEFAULT_PRIORITY).
Sourcepub fn declared_platforms(&self) -> &[String]
pub fn declared_platforms(&self) -> &[String]
P2: the plugin’s declared platforms (empty = all).
Sourcepub fn declared_owns_stdio(&self) -> bool
pub fn declared_owns_stdio(&self) -> bool
Whether this plugin claimed ownership of the host process’s stdio
(declare {"ownsStdio":true}). Default false.