mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-20 08:58:03 +00:00
feat(plugindev): output.invoke 模板从共享帧读参数(§13.6)
内核侧 OutputInvokeParams 新增 Frame/ArgsLen,payload 不再内联在 RPC 报文里。 模板必须跟着读帧,否则 frameInput 拿不到参数、输出通道收到的 payload 为空—— 生产插件(如 qq)走的正是模板,模板不改这个改动就等于没做。 无帧时回退内联 args,保持对直连 RPC 调用方的兼容。
This commit is contained in:
@ -1242,8 +1242,23 @@ func handleKernelRequest(req *rpcRequest) {
|
||||
var p struct {
|
||||
Channel string `json:"channel"`
|
||||
Args map[string]interface{} `json:"args"`
|
||||
Frame SharedRef `json:"frame"`
|
||||
ArgsLen uint32 `json:"args_len"`
|
||||
}
|
||||
json.Unmarshal(req.Params, &p)
|
||||
// 参数:内核标定帧的前段(§13.6)。只有直连 RPC 的调用方(无帧)
|
||||
// 才走内联 Args——生产路径永远走帧,大 payload 不再爆管道。
|
||||
args := p.Args
|
||||
if !p.Frame.IsZero() {
|
||||
if blob := frameInput(p.Frame, p.ArgsLen); len(blob) > 0 {
|
||||
var decoded map[string]interface{}
|
||||
if err := json.Unmarshal(blob, &decoded); err != nil {
|
||||
respondErr(req.ID, fmt.Errorf("解析共享输出参数: %w", err))
|
||||
return
|
||||
}
|
||||
args = decoded
|
||||
}
|
||||
}
|
||||
handlerMu.RLock()
|
||||
h, ok := outputHandlers[p.Channel]
|
||||
handlerMu.RUnlock()
|
||||
@ -1252,7 +1267,7 @@ func handleKernelRequest(req *rpcRequest) {
|
||||
return
|
||||
}
|
||||
// 同步返回真实结果——内核据此告知模型成功/失败,不再假成功(§9.4)
|
||||
res, err := h(p.Args)
|
||||
res, err := h(args)
|
||||
if err != nil {
|
||||
respondErr(req.ID, err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user