feat: add plugin system with sandboxed runtime

Plugin discovery from ~/.config/bterminal/plugins/ with plugin.json
manifest. Sandboxed new Function() execution, permission-gated API
(palette, btmsg:read, bttask:read, events). Plugin store + SettingsTab.
This commit is contained in:
Hibryda 2026-03-12 04:57:29 +01:00
parent 5dd7df03cb
commit b2932273ba
4 changed files with 510 additions and 0 deletions

View file

@ -0,0 +1,20 @@
// Plugin discovery and file access commands
use crate::AppState;
use crate::plugins;
#[tauri::command]
pub fn plugins_discover(state: tauri::State<'_, AppState>) -> Vec<plugins::PluginMeta> {
let plugins_dir = state.app_config.plugins_dir();
plugins::discover_plugins(&plugins_dir)
}
#[tauri::command]
pub fn plugin_read_file(
state: tauri::State<'_, AppState>,
plugin_id: String,
filename: String,
) -> Result<String, String> {
let plugins_dir = state.app_config.plugins_dir();
plugins::read_plugin_file(&plugins_dir, &plugin_id, &filename)
}