#pragma once #include #include #include namespace faset::editor { class PluginManager { public: using Logger = std::function; explicit PluginManager(Commands&, Logger); ~PluginManager(); PluginManager(const PluginManager&) = delete; PluginManager& operator=(const PluginManager&) = delete; // Discover and validate the complete dependency graph before loading code. // Individual failures are reported; dependents are never loaded after one. void load(const std::filesystem::path& directory); Json status() const; Json panels() const; static std::string fingerprint(); private: struct Impl; std::unique_ptr impl_; }; } // namespace faset::editor