mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
webui 删除彻底化:清理残留 config/defs/provider 悬空
审计发现 webui 多处删除只清一处、留下鬼影: - RemovePlugin: 仅 DROP config_<name> 与 defs,config 表 plugin.<name>.* 键永不删 → 补 DELETE config LIKE 'plugin.<name>.%' - ConfigRegistry.Delete: 删 core.llm.sources.<name>.* 后遗留 ConfigDef、且删 core.llm.* 不更新 guard 快照(重启/failback 会把已删源复活)→ 同步清 source defs + 写 llm 快照 - llm_impl.ReloadFromConfig: 删除默认源后 core.llm.provider 悬空,SetDefault 指向不存在源 → 仅当源仍注册时才 SetDefault - clawhubadapter 测试 mockSettings 补 RemoveCore/RemovePlugin - mcp 服务器删除仍为进程内需 reload 生效(符合既有 removeServerHandler 语义) 验证: go test ./... 26 包 0 失败;本机部署 sources=3、27 插件加载、对话正常
This commit is contained in:
@ -91,6 +91,9 @@ func (r *ConfigRegistry) RemovePlugin(name string) error {
|
||||
delete(r.defs, k)
|
||||
}
|
||||
}
|
||||
if _, err := r.db.Exec(`DELETE FROM config WHERE key LIKE ?`, prefix+"%"); err != nil {
|
||||
return err
|
||||
}
|
||||
table := r.pluginTableName(name)
|
||||
_, err := r.db.Exec(fmt.Sprintf(`DROP TABLE IF EXISTS %s`, table))
|
||||
return err
|
||||
@ -307,6 +310,23 @@ func (r *ConfigRegistry) Delete(key string) error {
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
_, err := r.db.Exec(`DELETE FROM config WHERE key = ?`, key)
|
||||
if err == nil {
|
||||
if strings.HasPrefix(key, "core.llm.sources.") {
|
||||
rest := strings.TrimPrefix(key, "core.llm.sources.")
|
||||
parts := strings.SplitN(rest, ".", 2)
|
||||
if len(parts) == 2 {
|
||||
prefix := "core.llm.sources." + parts[0] + "."
|
||||
for k := range r.defs {
|
||||
if strings.HasPrefix(k, prefix) {
|
||||
delete(r.defs, k)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(key, "core.llm.") {
|
||||
r.writeLLMSnapshotLocked()
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user