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
66 lines
1.3 KiB
TOML
66 lines
1.3 KiB
TOML
[package]
|
|
name = "owlry-core"
|
|
version = "1.3.4"
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
description = "Core daemon for the Owlry application launcher"
|
|
|
|
[lib]
|
|
name = "owlry_core"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "owlryd"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
owlry-plugin-api = { path = "../owlry-plugin-api" }
|
|
|
|
# Provider system
|
|
fuzzy-matcher = "0.3"
|
|
freedesktop-desktop-entry = "0.8"
|
|
|
|
# Plugin loading
|
|
libloading = "0.8"
|
|
semver = "1"
|
|
|
|
# Data & config
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
toml = "0.8"
|
|
fs2 = "0.4"
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
dirs = "5"
|
|
|
|
# Error handling
|
|
thiserror = "2"
|
|
|
|
# Filesystem watching (plugin hot-reload)
|
|
notify = "7"
|
|
notify-debouncer-mini = "0.5"
|
|
|
|
# Signal handling
|
|
signal-hook = "0.3"
|
|
|
|
# Logging & notifications
|
|
log = "0.4"
|
|
env_logger = "0.11"
|
|
notify-rust = "4"
|
|
|
|
# Built-in providers
|
|
meval = "0.2"
|
|
reqwest = { version = "0.13", default-features = false, features = ["native-tls", "json", "blocking"] }
|
|
|
|
# Optional: embedded Lua runtime
|
|
mlua = { version = "0.11", features = ["lua54", "vendored", "send", "serialize"], optional = true }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|
|
|
|
[features]
|
|
default = []
|
|
lua = ["dep:mlua"]
|
|
dev-logging = []
|