根因:CORE_REGISTER_OUTPUT_CH handler 无条件返回 {status:queued}+err=nil, 模型永远收到「已发送」,实际失败(如 meta 缺 user_id)只写日志,模型无法感知不会重试。 现网近 7 天成功 44 次、失败 2 次全部谎报成功。 改动: - loader.go: 新增 awaitOutputResult(+可注入版 awaitOutputResultWith)+ outputSendTimeout=10s goroutine 执行 cgo 发送 + 带超时 channel 等结果 → sent / error / unconfirmed 三态 handler 由 executeOutputSendTool 从 Go 侧调起,非 cgo 栈,不构成 cgo 嵌套 - output.go: executeOutputSendTool 识别 unconfirmed|queued,回报「发送结果未确认」而非「已发送」 - output_test.go: Success/Failure/Timeout 三用例 验证: go build exit 0; go test ./internal/plugin/... ./internal/agent/... 全绿 接口冻结: git diff third_party/homeagent-sdk/sdk/ 为空
7 个 Part,每 Part 一个微循环: - Part 0 脆弱基线先行(11.1/11.3/11.6,现网止血,不依赖迁移) - Part 1 加载分派骨架(entry 双通道共存,可回退前提) - Part 2 子进程通道原型(spawn/JSON-RPC/procPlugin,参考 sidecar.go) - Part 3 plugindev 工具链改造(.bin 产物,SDK 仓) - Part 4 共享内存数据面(StageContext 并发改写,最高风险) - Part 5 通知面(EvtRing + eventfd,post-and-forget) - Part 6 迁移收尾(17 插件 + 删 cabi + 权限显式化) 每 Part 含修改对象/审查要点/验证标准 + 13 项最终验收 + 风险回退表