JianFeeeee
e2672c56d6
feat(shm): 输出通道 payload 走共享内存调用帧(§13.6)
§13.3 给 ToolInvokeParams 加了调用帧,但 OutputInvokeParams 没跟上——
payload 仍内联在 RPC JSON 里。核实后确认这个 lane 只做了半边:注入侧
(injectParams.TextRef + resolveText)可用,输出侧从内核到插件仍是内联。
改法照搬工具调用的 funccall 帧模型:
- OutputInvokeParams 加 Frame/ArgsLen(Args 仅留给直连 RPC 的测试)
- invokeOutput 序列化参数 → Alloc 帧 → 写帧 → 只传偏移描述符 → defer Free
- 帧尾不预留结果区:output 应答很小("ok"/status map),走 RPC 应答字段即可。
但 OutputInvokeResult 支持插件把大结果写回帧(ResultRef),并识别
sharedRefFlagExpand 单独归还扩容块——与 invokeTool 一致。
- 模板 output.invoke 用 frameInput 从帧读参数,无帧才回退内联 Args
为什么要做:output payload 在真机上可能含图片/文件描述等大字段,内联会
撑爆 stdin/stdout 管道。
验证:
- TestPlugin_OutputPayloadViaArena:9000 字节 payload 经帧完整送达(插件回报
实收长度,不是只看返回值)+ 调用后 arena 归零
- TestE2E_RealTemplateOutputPayloadViaFrame:同上,但用真实 SDK 模板编译的
插件——生产插件走的就是模板,模板不读帧则此改动等于没做
- TestPlugin_OutputChannelReportsRealFailure 仍绿:同步等真实结果、失败必须
上报(§9.4)的语义未被破坏
- go test -race ./internal/plugin/... 全绿
plan.md §13.5 也如实标注:注入 side 内核→插件方向仍未接线(procCore.InjectText
直接传字符串,从不 Alloc/Put 构造 TextRef),不是仅打勾的项。
2026-09-10 21:28:56 +08:00
..
2026-09-10 21:28:56 +08:00
2026-09-10 18:54:36 +08:00
2026-09-10 18:54:36 +08:00
2026-09-10 21:18:16 +08:00
2026-09-10 10:21:50 +08:00
2026-09-10 17:56:50 +08:00
2026-09-10 18:54:36 +08:00
2026-09-10 21:28:56 +08:00
2026-09-02 19:07:14 +08:00
2026-09-02 19:07:14 +08:00
2026-09-02 19:07:14 +08:00
2026-09-02 19:07:14 +08:00
2026-09-10 17:56:54 +08:00
2026-09-10 17:56:54 +08:00
2026-09-10 21:18:16 +08:00
2026-09-04 18:43:05 +08:00
2026-09-10 18:54:36 +08:00
2026-09-02 10:41:18 +08:00
2026-09-02 10:41:18 +08:00
2026-09-10 21:28:56 +08:00
2026-09-10 21:28:56 +08:00
2026-09-03 12:37:58 +08:00
2026-09-03 12:37:58 +08:00
2026-09-10 18:54:36 +08:00
2026-09-03 12:37:58 +08:00
2026-09-10 21:28:56 +08:00
2026-09-10 10:21:50 +08:00
2026-09-10 10:21:50 +08:00
2026-09-10 10:21:50 +08:00
2026-09-10 10:21:50 +08:00
2026-09-02 10:41:18 +08:00
2026-09-02 10:41:18 +08:00
2026-09-02 13:03:57 +08:00
2026-09-02 13:03:57 +08:00
2026-09-02 19:07:14 +08:00
2026-09-10 10:21:50 +08:00
2026-09-02 10:41:18 +08:00
2026-09-10 11:42:22 +08:00
2026-09-02 19:07:14 +08:00
2026-09-02 11:34:33 +08:00
2026-09-10 11:42:22 +08:00
2026-09-03 12:37:58 +08:00
2026-09-10 17:56:50 +08:00
2026-09-02 10:41:18 +08:00