pub mod command_registry;
pub mod keybinding_registry;
pub mod package_manager;
pub mod registry;
#[cfg(test)]
mod tests;
pub mod tool_registry;
pub mod widget_registry;
use crate::error::Result;
pub use command_registry::{CommandDefinition, CommandHandler, CommandRegistry};
pub use keybinding_registry::{KeybindingDefinition, KeybindingHandler, KeybindingRegistry};
pub use package_manager::{ExtensionPackage, PackageManager};
pub use registry::{ExtensionRegistry, SharedExtensionRegistry, shared_registry};
pub use tool_registry::{ToolDefinition, ToolHandler, ToolParameter, ToolRegistry};
pub use widget_registry::{OverlayConfig, WidgetFactory, WidgetRegistry};
pub trait Extension: Send + Sync {
fn name(&self) -> &str;
fn version(&self) -> &str;
fn on_load(&mut self) -> Result<()> {
Ok(())
}
fn on_unload(&mut self) -> Result<()> {
Ok(())
}
fn on_tool_call(&mut self, _tool: &str, _args: &str) -> Result<Option<String>> {
Ok(None)
}
fn on_message(&mut self, _message: &str) -> Result<Option<String>> {
Ok(None)
}
fn on_turn_start(&mut self) -> Result<()> {
Ok(())
}
fn on_turn_end(&mut self) -> Result<()> {
Ok(())
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ExtensionMetadata {
pub name: String,
pub version: String,
pub description: String,
pub author: String,
}
impl ExtensionMetadata {
pub fn new(name: String, version: String, description: String, author: String) -> Self {
Self {
name,
version,
description,
author,
}
}
}