7275fcab35
fix: implement all 24 FIX_PLAN issues across 6 phases
...
Phase 1 — Critical Safety:
- #11 : bounded IPC reads via read_bounded_line (server + client)
- #13 : sound Send+Sync via Arc<Mutex<RuntimeHandle>>; remove unsafe impl Sync
- #10 : ItemSource enum (Core/NativePlugin/ScriptPlugin) on LaunchItem;
script plugin allowlist guard in launch_item()
Phase 2 — Config System Overhaul:
- #6 : remove dead enabled_plugins field
- #1 : replace #[serde(flatten)] with explicit Config::plugin_config
- #4 : Server.config Arc<RwLock<Config>>; ConfigProvider shares same Arc
- #2/#3: atomic config save (temp+rename); TOCTOU fixed — write lock held
across mutation and save() in config_editor
- #23 : fs2 lock_exclusive() on .lock sidecar file in Config::save()
- #16 : SIGHUP handler reloads config; ExecReload in systemd service
Phase 3 — Plugin Architecture:
- #7 : HostAPI v4 with get_config_string/int/bool; PLUGIN_CONFIG OnceLock
in native_loader, set_shared_config() called from Server::bind()
- #5 : PluginEntry + Request::PluginList + Response::PluginList; plugin_registry
in ProviderManager tracks active and suppressed native plugins;
cmd_list_installed shows both script and native plugins
- #9 : suppressed native plugin log level info! → warn!
- #8 : ProviderType doc glossary; plugins/mod.rs terminology table
Phase 4 — Data Integrity:
- #12 : all into_inner() in server.rs + providers/mod.rs → explicit Response::Error;
watcher exits on poisoned lock
- #14 : FrecencyStore::prune() (180-day age + 5000-entry cap) called on load
- #17 : empty command guard in launch_item(); warn in lua_provider
- #24 : 5-min periodic frecency save thread; SIGTERM/SIGINT saves frecency
before exit (replaces ctrlc handler)
Phase 5 — UI & UX:
- #19 : provider_meta.rs ProviderMeta + meta_for(); three match blocks collapsed
- #18 : desktop file dedup via seen_basenames HashSet in ApplicationProvider
- #20 : search_filtered gains tag_filter param; non-frecency path now filters
- #15 : widget refresh 5s→10s; skip when user is typing
Phase 6 — Hardening:
- #22 : catch_unwind removed from reload_runtimes(); direct drop()
- #21 : AtomicUsize + RAII ConnectionGuard; MAX_CONNECTIONS = 16
Deps: add fs2 = "0.4"; remove ctrlc and toml_edit from owlry-core
2026-04-08 16:43:52 +02:00
7273cd3ba7
chore(owlry-plugin-api): bump version to 1.0.1
2026-03-26 18:50:58 +01:00
7ce6de17aa
fix: soundness — OnceLock for HOST_API, IPC size limits, mutex poisoning recovery
2026-03-26 16:29:47 +01:00
f5d83f1372
chore: format, fix clippy warnings, bump all crates to 1.0.0
2026-03-26 13:37:55 +01:00
78895d34b5
chore(plugins): bump all plugins to 0.4.10
2026-01-02 16:59:14 +01:00
551e5d74ae
chore(plugins): bump all plugins to 0.4.9
2026-01-02 16:18:18 +01:00
3ef9398655
chore: bump all crates to 0.4.8
2026-01-01 23:30:45 +01:00
bf8a31af78
chore: bump all crates to 0.4.7
2026-01-01 22:29:00 +01:00
7cccd3b512
chore(plugins): bump all plugins to 0.4.6
2025-12-30 20:23:48 +01:00
c1eb5ae2eb
chore(plugins): bump all plugins to 0.4.5
2025-12-30 08:29:47 +01:00
e6776b803c
chore(plugins): bump all plugins to 0.4.4
2025-12-30 08:01:15 +01:00
8c1cf88474
feat: simplify ProviderType, add plugin priority, fix bookmarks SQLite
...
Core changes:
- Simplified ProviderType enum to 4 core types + Plugin(String)
- Added priority field to plugin API (API_VERSION = 3)
- Removed hardcoded plugin-specific code from core
- Updated filter.rs to use Plugin(type_id) for all plugins
- Updated main_window.rs UI mappings to derive from type_id
- Fixed weather/media SVG icon colors
Plugin changes:
- All plugins now declare their own priority values
- Widget plugins: weather(12000), pomodoro(11500), media(11000)
- Dynamic plugins: calc(10000), websearch(9000), filesearch(8000)
- Static plugins: priority 0 (frecency-based)
Bookmarks plugin:
- Replaced SQLx with rusqlite + bundled SQLite
- Fixes "undefined symbol: sqlite3_db_config" build errors
- No longer depends on system SQLite version
Config:
- Fixed config.example.toml invalid nested TOML sections
- Removed [providers.websearch], [providers.weather], etc.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-30 07:45:49 +01:00
b1f11c076b
chore: unify all package versions to 0.4.3
...
All crates (core, plugins, runtimes, plugin-api) now share the same
version number for simpler release management and clearer compatibility.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-30 06:27:23 +01:00
a1b47b8ba0
chore: bump all plugins and runtimes to 0.2.1
2025-12-30 03:49:36 +01:00
3e8be3a4c5
chore(plugins): bump all plugins to 0.2.0
2025-12-30 03:30:56 +01:00
384dd016a0
feat: convert to workspace with native plugin architecture
...
BREAKING: Restructure from monolithic binary to modular plugin ecosystem
Architecture changes:
- Convert to Cargo workspace with crates/ directory
- Create owlry-plugin-api crate with ABI-stable interface (abi_stable)
- Move core binary to crates/owlry/
- Extract providers to native plugin crates (13 plugins)
- Add owlry-lua crate for Lua plugin runtime
Plugin system:
- Plugins loaded from /usr/lib/owlry/plugins/*.so
- Widget providers refresh automatically (universal, not hardcoded)
- Per-plugin config via [plugins.<name>] sections in config.toml
- Backwards compatible with [providers] config format
New features:
- just install-local: build and install core + all plugins
- Plugin config: weather and pomodoro read from [plugins.*]
- HostAPI for plugins: notifications, logging
Documentation:
- Update README with new package structure
- Add docs/PLUGINS.md with all plugin documentation
- Add docs/PLUGIN_DEVELOPMENT.md
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com >
2025-12-30 03:01:37 +01:00