mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 18:08:04 +00:00
docs(resident): 补写「子的 io 通道视图 = 对父的实时回退」(N3 落地口径)
输出通道在 io 层就是 Device,由插件登记在父的 IOManager 上;驻留子只共享了 inputch 登记表 ⇒ 子侧 childIO 空壳(现场:子调 output_send__cli 被判「通道不存在或不可用」)。 文档写清:继承方式(SetParentIO)、四个受影响的方法、为什么是实时回退而非快照、 以及回退只解决看得见、授权仍在白名单之后。附线上实测结果(result: ok)。
This commit is contained in:
@ -128,6 +128,29 @@
|
||||
`ResolveOutputTarget`(未登记的通道由传输层 device 自行处理,如 qq/webui)。
|
||||
这是"输出可寻址到具体 agent"的数据面;真正的跨 agent 投递在 N4。
|
||||
|
||||
**已落地(N3):子的 io 通道视图 = 对父的**实时回退**
|
||||
|
||||
输出通道在 io 层就是 `Device`,而它们由插件登记在**父**的 `IOManager` 上。驻留子确实该有
|
||||
自己的输入入口与 `outputCh`(所以子是 `NewIOManager()`),但**必须继承父的设备视图** ——
|
||||
否则上面 §4.4 的授权集合形同虚设:`output_list_channels` 为空、`output_send__X`
|
||||
连工具都不生成、按名字直调也会被判「通道不存在或不可用」。
|
||||
|
||||
落地方式:`IOManager.SetParentIO(父)`(子创建时挂上)。
|
||||
|
||||
| 方法 | 行为 |
|
||||
|---|---|
|
||||
| `GetDevice` / `GetChannelCapabilities` | 自己设备表没有时回退到父 |
|
||||
| `ListChannels` | 自己的登记优先(可覆盖/屏蔽同名通道),其次并入父的可见通道,按**名字**去重 |
|
||||
| `ExecuteTool` | 自己的设备工具没有时回退到父 |
|
||||
|
||||
- **为什么是实时回退、不是创建时复制快照**:设备随资源生灭(远程设备上线/掉线以分钟计,
|
||||
现场日志 60 秒一个来回),快照转瞬即过期;回退永远与父一致(父注销后子立刻看不见)。
|
||||
- **回退只解决"看得见",不解决"能不能用"**:§4.4 的三处过滤点仍然在白名单之后,
|
||||
授权收窄不受影响(判据:白名单外的通道既不出现在工具表里,直调也被拒且不送达)。
|
||||
- 现场缺陷(2026-09-13 用户线上联调实录):**父侧通道装载完整、子侧 `childIO` 空壳**,
|
||||
子调 `output_send__cli` 被判「通道 [cli] 不存在或不可用」。修复后线上实测:子调
|
||||
`output_send__cli` → `result: ok`,并经 `notify_parent` 回报。
|
||||
|
||||
### 4.5.1 通道的一等化(后续要求)
|
||||
|
||||
现在 `Source` / `OutputChannel` 只是字符串标签,`IOManager.inputCh` 是**一条全局 channel**,
|
||||
|
||||
Reference in New Issue
Block a user