插件删除回调:onRemove 生命周期(仅卸载触发,重载不触发)

- 公共 SDK(third_party/homeagent-sdk):RegisterOnRemoveHandler/RunOnRemoveHandlers
  (后注册先执行、幂等);内部 SDK PluginManager 接口新增 RemovePlugin
- registry.RemovePlugin:runStopHandlers → Stop → 清理 plugins/sdkRefs/instances
  → runOnRemoveHandlers → toolCleaner.UnregisterPluginTools → cfgReg.RemoveDisabledPlugin
- pluginmgr.removePlugin 先调 Registry.RemovePlugin 再删目录
- 配置清理:PluginSettings.Remove(key)(内部 SettingsAPI + settingsImpl)
- 演示:timer 插件 onRemove 删 max_duration 键;plugindev 模板同步 onRemove 示例;
  SDK example/calendar cleanupData 删 events.json;manager plugins/uninstall 先停通道
This commit is contained in:
root
2026-08-02 13:32:44 +08:00
parent 3cc8d84def
commit 09faa2874a
8 changed files with 98 additions and 0 deletions

View File

@ -456,6 +456,13 @@ func (p *Plugin) removePlugin(name string) (interface{}, error) {
return map[string]interface{}{"error": "plugin not found", "name": name}, nil
}
// 先经内核卸载停止插件stop handlers + Stop并执行插件注册的 onRemove 回调
if p.sdk != nil && p.sdk.PluginMgr() != nil {
if err := p.sdk.PluginMgr().RemovePlugin(name); err != nil {
log.Printf("[pluginmgr] RemovePlugin %s: %v", name, err)
}
}
if err := os.RemoveAll(dir); err != nil {
return map[string]interface{}{"error": err.Error()}, nil
}