Files
homeagent-sdk/docs/api/bridge.md
JianFeeeee bd73a9b241 feat(sdk): 通用反代声明项(DeclareProxy)+ ToolDef.Serial 串行标记 + 场面策略文档
本次一并提交工作区此前累积的改动(均已验证),并接入工具并发调度所需的
声明项。

把「谁来反代谁」从内核硬编码变成插件可声明。设备网关(remotedevice)
这类**编译进内核、没有独立插件目录与 plugin.json** 的服务,静态扫描扫不到,
此前只能靠约定。新增 DeclareProxy 让它们能自己声明反代路由。

ParallelSafe 的**反向**声明项。判据优先级:Serial 胜出,显式声明不允许被
ParallelSafe 或任何默认值覆盖。

为什么需要它:ParallelSafe 零值 false 已表达「安全/串行」,插件无法区分
「我没想过」和「我确认过必须串行」。没有这个区分,工具作者只能靠命名约定
传递意图,那不是契约。

ParallelSafe 本身也补齐了注释,明确其零值语义(默认串行、保守)与理由
(新语义下并发会改变工具的行为前提,让存量插件意外并发比慢一点危险得多)。

配套 ScenePolicy 声明项的使用说明。

remotedevice/ 整目录(C 实现的设备网关,已由 Go 侧 DeclareProxy 路径取代)。

- sdk/knowledge.go:随场面策略配套调整
- docs/api/*、docs/assets/api-index.json、docs/llms.txt、mkdocs.yml:
  由 tools/apidoc/build.sh 从源码重新生成(行号随 plugin.go 变动漂移)
2026-09-27 16:17:04 +08:00

5.3 KiB
Raw Blame History

桥接装配点(Bridge)

以下方法不是给插件业务代码调的——它们由 hmapdev 生成的运行时在启动时调用,用来把内核能力注入到 SDK 实例。列在这里是为了让「公开 API 面」完整,并说明每个注入点对应什么能力。

APIRegistrar

type APIRegistrar func(name string) error

APIRegistrar registers a plugin API for external access.

plugin.go:410

InputChannelRegistrar

type InputChannelRegistrar func(name string, def ChannelDef) error

InputChannelRegistrar registers an input channel with its memory behavior.

plugin.go:413

OutputChannelRegistrar

type OutputChannelRegistrar func(name string, caps int, desc string, def ChannelDef, handler ToolHandler) error

OutputChannelRegistrar registers an output channel that the output_send tool can use.

plugin.go:416

OutputChannelUnregistrar

type OutputChannelUnregistrar func(name string) error

OutputChannelUnregistrar 注销一个输出通道。

为什么需要它:输出通道不止有"启动时注册一次"的静态通道,还有随外部资源生灭的 动态通道 —— 典型是远程设备:device/<id> 只在设备在线期间存在,设备掉线后 必须注销,否则 output_list_channels 会一直列着它、模型会往一个死通道发消息。

plugin.go:423

PluginSDK.SetDocMemoryAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetDocMemoryAPI(dm DocMemoryAPI)

plugin.go:718

PluginSDK.SetEventSubscriber

!!! warning "仅内核内置插件可用" 同上:无调用点。标 builtin 而非 bridge,因为连桥接运行时都不注入它——外部插件无法用它获得事件订阅能力。

func (s *PluginSDK) SetEventSubscriber(es EventSubscriber)

plugin.go:742

PluginSDK.SetIOInjector

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetIOInjector(io IOInjector)

SetIOInjector sets the IO injector (called by the core at startup).

plugin.go:699

PluginSDK.SetInputChannelRegistrar

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetInputChannelRegistrar(r InputChannelRegistrar)

SetInputChannelRegistrar sets the input channel registrar (called by the core at startup).

plugin.go:692

PluginSDK.SetKnowledgeAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetKnowledgeAPI(kn KnowledgeAPI)

plugin.go:724

PluginSDK.SetLLMAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetLLMAPI(llm LLMAPI)

plugin.go:730

PluginSDK.SetMemoryAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetMemoryAPI(mem MemoryAPI)

SetMemoryAPI sets the memory API (called by the core at startup).

plugin.go:706

PluginSDK.SetOutputChannelRegistrar

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetOutputChannelRegistrar(r OutputChannelRegistrar)

SetOutputChannelRegistrar sets the output channel registrar (called by the core at startup).

plugin.go:678

PluginSDK.SetOutputChannelUnregistrar

!!! warning "仅内核内置插件可用" 同上,桥接模板不注入。

func (s *PluginSDK) SetOutputChannelUnregistrar(r OutputChannelUnregistrar)

SetOutputChannelUnregistrar sets the output channel unregistrar (called by the core at startup).

plugin.go:685

PluginSDK.SetPluginMgrAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetPluginMgrAPI(pm PluginMgrAPI)

SetPluginMgrAPI sets the plugin manager API (called by the bridge at startup).

plugin.go:749

PluginSDK.SetSocialAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetSocialAPI(social SocialAPI)

plugin.go:736

PluginSDK.SetTextMemoryAPI

!!! info "桥接装配点" 桥接运行时注入点(由 hmapdev 生成的 proc_main 调用,插件业务代码不调用)

func (s *PluginSDK) SetTextMemoryAPI(tm TextMemoryAPI)

plugin.go:712

ToolRegistrar

type ToolRegistrar func(name string, def ToolDef, handler ToolHandler) error

ToolRegistrar registers a tool dynamically.

plugin.go:404