From b19eeca0cf5a6c4066bd0ece5a656408e2154f4d Mon Sep 17 00:00:00 2001 From: root Date: Sun, 2 Aug 2026 13:43:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8D=B8=E8=BD=BD=E6=B8=85?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=9A=E5=88=A0=E9=99=A4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E5=AE=9A=E4=B9=89=E4=B8=8E=E6=8F=92=E4=BB=B6=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ConfigRegistry.RemovePlugin(name):删除 defs 中 plugin..* 配置项定义 (该插件 RegisterDef 注册的全部配置项)+ DROP 插件配置表 config_ (含用户设置值);ListPlugins 基于 config_% 表枚举,卸载后插件配置区 在 WebUI/Settings API 中完全消失 - Registry.RemovePlugin 在 RemoveDisabledPlugin 基础上追加 RemovePlugin 调用; 语义与 onRemove 回调(清数据文件)互补:删除 = 数据文件 + 配置 + 注册全清, disable/重载不清配置 --- internal/config/registry.go | 18 ++++++++++++++++++ internal/plugin/registry.go | 1 + 2 files changed, 19 insertions(+) diff --git a/internal/config/registry.go b/internal/config/registry.go index 7ef61ef..c519938 100644 --- a/internal/config/registry.go +++ b/internal/config/registry.go @@ -74,6 +74,24 @@ func (r *ConfigRegistry) RemoveDisabledPlugin(name string) error { return err } +// RemovePlugin 卸载插件时清理其全部配置痕迹:删除配置项定义 +// (defs 中 plugin..*,即该插件 RegisterDef 注册的配置项)并删除 +// 插件配置表(config_,含用户设置值)。卸载后该插件配置区完全消失; +// 与插件自身的 onRemove 回调(清理数据文件)配合完成删除清理。 +func (r *ConfigRegistry) RemovePlugin(name string) error { + r.mu.Lock() + defer r.mu.Unlock() + prefix := "plugin." + name + "." + for k := range r.defs { + if strings.HasPrefix(k, prefix) { + delete(r.defs, k) + } + } + table := r.pluginTableName(name) + _, err := r.db.Exec(fmt.Sprintf(`DROP TABLE IF EXISTS %s`, table)) + return err +} + type DisabledPluginInfo struct { Name string `json:"name"` DisabledAt string `json:"disabled_at"` diff --git a/internal/plugin/registry.go b/internal/plugin/registry.go index 8d75fc0..d1021f5 100644 --- a/internal/plugin/registry.go +++ b/internal/plugin/registry.go @@ -615,6 +615,7 @@ func (r *Registry) RemovePlugin(name string) error { } if r.cfgReg != nil { r.cfgReg.RemoveDisabledPlugin(name) + r.cfgReg.RemovePlugin(name) } log.Printf("[plugin] removed: %s", name) return nil