feat: plugin discovery, capability/contribution/permission registries, Plugin Manager UI
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
// Package api provides Wails-bound methods for the frontend.
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/verstak/verstak-desktop/internal/core/capability"
|
||||
"github.com/verstak/verstak-desktop/internal/core/contribution"
|
||||
"github.com/verstak/verstak-desktop/internal/core/events"
|
||||
"github.com/verstak/verstak-desktop/internal/core/permissions"
|
||||
"github.com/verstak/verstak-desktop/internal/core/plugin"
|
||||
)
|
||||
|
||||
// App is the main application struct exposed to the Wails frontend.
|
||||
type App struct {
|
||||
capRegistry *capability.Registry
|
||||
contribRegistry *contribution.Registry
|
||||
permRegistry *permissions.Registry
|
||||
eventBus *events.Bus
|
||||
plugins []plugin.Plugin
|
||||
}
|
||||
|
||||
// NewApp creates a new App instance.
|
||||
func NewApp(
|
||||
capReg *capability.Registry,
|
||||
contribReg *contribution.Registry,
|
||||
permReg *permissions.Registry,
|
||||
bus *events.Bus,
|
||||
plugins []plugin.Plugin,
|
||||
) *App {
|
||||
return &App{
|
||||
capRegistry: capReg,
|
||||
contribRegistry: contribReg,
|
||||
permRegistry: permReg,
|
||||
eventBus: bus,
|
||||
plugins: plugins,
|
||||
}
|
||||
}
|
||||
|
||||
// Startup is called when the app starts.
|
||||
func (a *App) Startup() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ─── Plugin Manager API ─────────────────────────────────────
|
||||
|
||||
// GetPlugins returns all discovered plugins.
|
||||
func (a *App) GetPlugins() []plugin.Plugin {
|
||||
return a.plugins
|
||||
}
|
||||
|
||||
// GetCapabilities returns all registered capabilities.
|
||||
func (a *App) GetCapabilities() []capability.Entry {
|
||||
return a.capRegistry.List()
|
||||
}
|
||||
|
||||
// GetPermissions returns all known permissions.
|
||||
func (a *App) GetPermissions() []permissions.Entry {
|
||||
return a.permRegistry.List()
|
||||
}
|
||||
|
||||
// GetContributions returns all registered contributions.
|
||||
func (a *App) GetContributions() ContributionSummary {
|
||||
return ContributionSummary{
|
||||
Views: a.contribRegistry.Views(),
|
||||
Commands: a.contribRegistry.Commands(),
|
||||
SettingsPanels: a.contribRegistry.SettingsPanels(),
|
||||
SidebarItems: a.contribRegistry.SidebarItems(),
|
||||
FileActions: a.contribRegistry.FileActions(),
|
||||
NoteActions: a.contribRegistry.NoteActions(),
|
||||
SearchProviders: a.contribRegistry.SearchProviders(),
|
||||
}
|
||||
}
|
||||
|
||||
// ReloadPlugins re-discovers plugins from disk.
|
||||
func (a *App) ReloadPlugins() {
|
||||
discoveryDirs := []string{
|
||||
"~/.config/verstak/plugins",
|
||||
"./plugins",
|
||||
}
|
||||
plugins, _ := plugin.DiscoverPlugins(discoveryDirs)
|
||||
a.plugins = plugins
|
||||
}
|
||||
|
||||
// ContributionSummary aggregates all contribution types for the frontend.
|
||||
type ContributionSummary struct {
|
||||
Views []contribution.ContributionView `json:"views"`
|
||||
Commands []contribution.ContributionCommand `json:"commands"`
|
||||
SettingsPanels []contribution.ContributionSettingsPanel `json:"settingsPanels"`
|
||||
SidebarItems []contribution.ContributionSidebarItem `json:"sidebarItems"`
|
||||
FileActions []contribution.ContributionAction `json:"fileActions"`
|
||||
NoteActions []contribution.ContributionAction `json:"noteActions"`
|
||||
SearchProviders []contribution.ContributionSearchProvider `json:"searchProviders"`
|
||||
}
|
||||
Reference in New Issue
Block a user