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:
root
2026-08-10 09:51:30 +08:00
parent cd2a27a8cc
commit 8dcce5a3a9
3 changed files with 25 additions and 1 deletions

View File

@ -29,6 +29,8 @@ func (m *mockSettings) Plugins() []string { return nil }
func (m *mockSettings) DefsCore(prefix string) []*sdk.ConfigDef { return nil }
func (m *mockSettings) DefsPlugin(plugin, prefix string) []*sdk.ConfigDef { return nil }
func (m *mockSettings) Remove(key string) error { return nil }
func (m *mockSettings) RemoveCore(key string) error { return nil }
func (m *mockSettings) RemovePlugin(plugin, key string) error { return nil }
func TestLaunchSidecarNoMainJS(t *testing.T) {
tmpDir := t.TempDir()