//! Rhai Plugin Runtime for GoingsOn. //! //! This crate provides a sandboxed plugin execution environment using the Rhai //! scripting language. Plugins can extend GoingsOn with: //! //! - **Import Adapters**: Transform external data formats (CSV, JSON, etc.) into GoingsOn entities //! - **Export Adapters**: Export GoingsOn data to external formats //! - **Custom Commands**: Add new functionality to the app //! - **Lifecycle Hooks**: React to app events (on_task_created, etc.) //! //! # Safety //! //! Plugins run in a sandboxed Rhai engine with configurable limits: //! - Maximum operations (computation time) //! - Maximum call stack depth (recursion) //! - Maximum string/array sizes (memory) //! - Disabled dangerous operations (eval, system access) //! //! # Example //! //! ```rust,ignore //! use goingson_plugin_runtime::{PluginLoader, PluginEngine}; //! //! let loader = PluginLoader::new("~/.config/goingson/plugins")?; //! let plugins = loader.discover_plugins()?; //! //! for plugin in plugins { //! println!("Found plugin: {} v{}", plugin.name, plugin.version); //! } //! ``` mod api; mod engine; mod error; mod loader; mod manifest; mod registry; pub use api::PluginApi; pub use engine::{PluginEngine, SafetyLimits}; pub use error::{PluginError, Result}; pub use loader::PluginLoader; pub use manifest::PluginManifest; pub use registry::PluginRegistry; // Re-export core types for convenience pub use goingson_core::{ ImportEntityType, ImportExecuteResult, ImportItem, ImportItemData, ImportOptions, ImportParseResult, PluginCapabilities, PluginMeta, PluginType, };