//! 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;

