mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-10-31 14:27:30 +00:00
## 缺陷(2026-10-18 本机实例日志实测) 异步投递上线后,台账里的记录全是 accepted、result 永远为空: 07:39:09 accepted result=None 07:40:09 accepted result=None 07:41:18 accepted result=None ← 13 条全是 而回投本身**是正常的**([plugin] 日志有 5 次 `回投任务结果…event=prompt_done`)。 缺的是:完成通知到达后没人把它写回台账。 实测后果(同一天日志,agent 自己起的轮询): [timer] firing: 【轮询轮次 2/6】…检查是否有新 result 回填… agent 为此安排了 6 轮 timer 去等一个**永远不会出现**的回填,白等 30 分钟。 更根本的是:看板与任何查询方都拿不到任务结果。 ## 修法 `completeDelivery`:把完成/失败结果回填到该 branch 下**最新一条** 未回填的 accepted。`recordDelivery` 改为返回 key(追溯用)。 匹配用"最新未完成"而不是按 key:完成通知里没有 key(sidecar 不知道它), 而同一 branch 的投递是串行投给同一个 pi 会话的,最新未完成那条就是它。 ## 判据(6 条) 回填最新 / 不串 branch / 不覆盖已回填 / 无匹配不 panic / 返回 key / **完成通知真的调用了回填**(接线判据) ## ★ 写判据时踩的两个坑(都记在注释里) 1. **判据没覆盖接线 → 变异不咬**:前 5 条测的是 completeDelivery 自身行为。 把 sidecar.go 里**那一行调用删掉**,它们依然全绿 —— 而"函数写得对但 没人调"正是原始缺陷的形态。补了第 6 条读源码验接线。 2. **偏移错位导致假绿**:分段用 `seg := block[k:]` 后找 "case ",会命中 k 自己(n=0)⇒ seg 不截断、含整个函数剩余部分 ⇒ done 分支删掉回填也照样 "找到" error 分支那一行。改成跳过 `case "x":` 本身的长度再找。
commondev
commondev plugin
Build
hmapdev build
Channels
入站与出站是分开登记的两件事:
| 方向 | API | 用途 |
|---|---|---|
| 入站 inputch | RegisterInputChannel(name, def) | 声明「谁会往这个通道注入输入」。凡是用 InjectText/InjectInput/InjectInterrupt*(source, "", ...) 注入的通道名都要登记** |
| 出站 output | RegisterOutputChannel(name, caps, desc, def, handler) | 声明 output_send__ 的回复发给谁;handler 收到 {payload,type,meta} |
def(ChannelDef)描述该通道在记忆计算层的行为:NoMemory: true = 该通道输入不进记忆; Cleaner = 计算层清洗后再向量化/提关键词(原文不改)。
只登记出站通道、却用同名通道注入输入时,内核会兜底登记同名 inputch 并在日志里告警。 兜底只为兼容老插件 —— 请显式登记,让「这是入站通道」成为插件的明确意图。
Install
Upload the .hmap file through the Plugin Manager API.