feat(plugin): discover external plugin packages from the plugins folder

Phase-2 groundwork: scan <config>/OpenCADStudio/plugins/<id>/plugin.toml,
parse the documented keys (no new TOML dep), check for a platform native
library beside it, and gate on the API version. The Plugin Manager gains
an "External (plugins folder)" section showing each package with a
status pill (Ready to load / API incompatible / No library). Discovery
only — actually loading the cdylib is the next step.

Part of the #100 extensibility epic (phase 2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hakan Seven 2026-06-17 11:43:24 +03:00
commit f6219a9609
6 changed files with 321 additions and 7 deletions

View file

@ -297,6 +297,9 @@ pub(super) struct OpenCADStudio {
/// keep their manifest listed but drop their ribbon tab and command
/// dispatch. Persisted via [`settings::UserSettings::disabled_plugins`].
disabled_plugins: rustc_hash::FxHashSet<String>,
/// External add-on packages found in the plugins folder, refreshed when the
/// Plugin Manager opens. Discovery only — not yet loaded (phase 2).
external_plugins: Vec<crate::plugin::external::ExternalPlugin>,
/// PDSIZE text buffer for the Point Style (DDPTYPE) dialog.
point_size_buf: String,
/// Point Style size mode: `true` = relative to screen, `false` = absolute.
@ -1461,6 +1464,7 @@ impl OpenCADStudio {
modal_drag_last: None,
modal_dragging: false,
disabled_plugins: rustc_hash::FxHashSet::default(),
external_plugins: Vec::new(),
point_size_buf: String::new(),
point_size_relative: true,
default_assoc_prompted: false,