//! WASM extension system.
//!
//! Extensions are distributed as `.cyix` ZIP archives containing:
//! - `extension.yaml` — manifest (name, version, commands, events)
//! - `extension.wasm` — compiled extension module
//! - `config.default.yaml` — default config values (optional)
//!
//! The manager::ExtensionManager owns all loaded extensions and is stored
//! on [`crate::project::Project`]. The IDE event loop calls:
//! - `detect_project()` on startup (for `Unknown`-state extensions)
//! - `dispatch_event()` after lifecycle events (file opened, saved, etc.)
//! - `call_command()` when a command registered by an extension is invoked
pub(crate) mod activation;
pub(crate) mod config;
pub(crate) mod loader;
pub(crate) mod manager;
pub(crate) mod manifest;
pub(crate) mod op_bridge;
pub(crate) mod runtime;
#[cfg(test)]
mod tests;
pub(crate) use config::ExtensionConfig;
pub(crate) use manager::ExtensionManager;