// src/AcDream.Plugin.Abstractions/IPluginHost.cs namespace AcDream.Plugin.Abstractions; /// /// Entry point for a plugin into the acdream runtime. The surface will grow /// across phases as more systems come online. /// public interface IPluginHost { /// /// when registrations can be /// projected by this host. No-window hosts return /// and expose so a plugin may keep /// one code path while deliberately omitting presentation work. /// bool HasUi { get; } IPluginLogger Log { get; } IGameState State { get; } IEvents Events { get; } ISelectionService Selection { get; } IUiRegistry Ui { get; } /// /// Locally handled slash/at commands. Hosts without command routing expose /// an inert registry so an API-v1 plugin can retain one code path. /// IPluginCommandRegistry Commands => NoOpPluginCommandRegistry.Instance; /// /// Durable storage scoped by the host to this plugin's manifest id. /// No-window/test hosts may explicitly expose the inert implementation. /// IPluginStorage Storage => NoOpPluginStorage.Instance; /// Unload-safe external VTank-style loot classifiers. IPluginLootClassifierRegistry LootClassifiers => NoOpPluginLootClassifierRegistry.Instance; /// /// Character reads, spell data and casting. Hosts with no live session /// expose , so a plugin may /// hold one code path and check /// rather than branching on /// host kind. /// IAutomationSurface Automation { get; } }