diff --git a/internal/config/registry.go b/internal/config/registry.go index 49dea27..1ba35a4 100644 --- a/internal/config/registry.go +++ b/internal/config/registry.go @@ -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 } diff --git a/internal/plugins/clawhubadapter/sidecar_test.go b/internal/plugins/clawhubadapter/sidecar_test.go index 3d5a61f..c8b4467 100644 --- a/internal/plugins/clawhubadapter/sidecar_test.go +++ b/internal/plugins/clawhubadapter/sidecar_test.go @@ -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() diff --git a/internal/sdk/llm_impl.go b/internal/sdk/llm_impl.go index 5262802..7d8c443 100644 --- a/internal/sdk/llm_impl.go +++ b/internal/sdk/llm_impl.go @@ -128,7 +128,9 @@ func (l *llmImpl) ReloadFromConfig() error { l.mgr.Register(src.Name, provider) } if cfg.LLM.Provider != "" { - _ = l.mgr.SetDefault(cfg.LLM.Provider) + if l.mgr.Get(cfg.LLM.Provider) != nil { + _ = l.mgr.SetDefault(cfg.LLM.Provider) + } } return nil }