Files
HomeAgent/internal/kernelmod/pluginhost/migrate_adapter.go
JianFeeeee 4e70b8d5d8 refactor(module): 核心仓 Go module 路径改为 github.com/JianFeeeee/HologramAgent
批 1,不含 SDK 仓与目录改名。

- go.mod 第 1 行 module 路径
- 366 个 .go 文件的完整前缀 github.com/JianFeeeee/HomeAgent 机械替换
  (857 处,仅完整前缀;展示名/注释里的 HomeAgent 字样留给批 5)
- 未改:third_party 目录名、SDK 自身 go.mod module、go.mod replace 目标、
  homed/waiter 可执行名、.hmap 后缀
2026-10-21 12:17:19 +08:00

61 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package pluginhost
// 把**真实的** plugin.Registry 接到 kernelboot.PluginQuiescer(伪关机用)。
//
// ## 为什么需要适配器而不是让 kernelboot 直接依赖 plugin
//
// kernelboot 是装配内核,plugin 是插件系统 —— 后者依赖前者(模块声明依赖),
// 反向 import 就成环。⇒ 用一个小接口 + 适配器隔开。
//
// ## ★ 为什么是 StopPlugin/StartPlugin,不是 StopAll
//
// 三态生命周期早已存在(自动启动 / 启用但不自动启动 / 禁用),而
// `StopPlugin`/`StartPlugin` 是**运行态**操作:
//
// · 不写 disabled_plugins ⇒ 不改用户决定
// · 不置 shuttingDown ⇒ 之后还能重新加载(**可逆**)
// · 会摘掉注册面 ⇒ 停完模型看不到也调不到(彻底)
//
// `StopAll` 完全相反:置 shuttingDown 后插件**永久无法再加载**,
// 那是进程退出用的。用它做伪关机 = 关了就起不来。
//
// ## 为什么跳过自身与 UI
//
// `refuseSelfLock` 已经拒绝了 pluginmgr(自锁,停了就没法再启)与 webui
// (停了 UI 就失联,迁移进度看不见)。这里**主动跳过**而不是去撞错误:
// 迁移期间我们需要 UI 报告进度,撞错只会让日志充满噪声。
import "github.com/JianFeeeee/HologramAgent/internal/plugin"
// RegistryQuiescer 适配 *plugin.Registry → kernelboot.PluginQuiescer。
type RegistryQuiescer struct{ Reg *plugin.Registry }
// StopPluginRuntime 运行态停掉一个插件(不改持久状态)。
func (r RegistryQuiescer) StopPluginRuntime(name string) error {
return r.Reg.StopPlugin(name)
}
// StartPluginRuntime 运行态拉起一个插件。
func (r RegistryQuiescer) StartPluginRuntime(name string) error {
return r.Reg.StartPlugin(name)
}
// RunningPlugins 返回当前在运行的插件名。
//
// ★ 排除 pluginmgr 与 webui:前者停了无法再启(自锁),后者是迁移进度的
// 唯一可视通道。这与 refuseSelfLock 的口径一致,但在这里**提前排除**
// 而不是靠报错兜底(报错会进入 BeginMigration 的回滚路径,把正常迁移搞挂)。
func (r RegistryQuiescer) RunningPlugins() []string {
// Registry.List() 返回 r.plugins 的键集 = **当前已加载并运行**的插件
// (StopPlugin 会从该 map 删除 ⇒ 停掉的自然不在其中)。
all := r.Reg.List()
out := make([]string, 0, len(all))
for _, n := range all {
if n == "pluginmgr" || n == "webui" {
continue
}
out = append(out, n)
}
return out
}