feat(shm): Cleaner 迁移到 SharedRef(§13.4)

- CleanerInvokeParams/Result 的 Text 改为 TextRef SharedRef
- cleanerProxy: 写 text 到 arena,传 SharedRef,读结果 SharedRef
- 插件侧 cleaner.invoke: 从 SharedRef 读 input,清洗后写回 arena 返回 TextRef
- NewHost(): 分配空间含 arena(256KB)
This commit is contained in:
JianFeeeee
2026-09-10 15:30:00 +08:00
parent cf098a1d4f
commit 5608abdf5a
4 changed files with 47 additions and 19 deletions

View File

@ -222,23 +222,23 @@ func (p *Plugin) invokeTool(name string, args map[string]interface{}) (interface
}
// invokeCleaner 在插件进程内执行工具或通道注册时提供的 Cleaner 函数。
func (p *Plugin) invokeCleaner(scope, name, text string) (string, error) {
func (p *Plugin) invokeCleaner(scope, name string, textRef SharedRef) (SharedRef, error) {
if p.proc == nil {
return "", ErrProcessExited
return SharedRef{}, ErrProcessExited
}
raw, err := p.proc.Call(MethodCleanerInvoke, CleanerInvokeParams{
Scope: scope,
Name: name,
Text: text,
Scope: scope,
Name: name,
TextRef: textRef,
})
if err != nil {
return "", err
return SharedRef{}, err
}
var res CleanerInvokeResult
if err := json.Unmarshal(raw, &res); err != nil {
return "", fmt.Errorf("proc: %s %s Cleaner %s 应答解析失败: %w", p.name, scope, name, err)
return SharedRef{}, fmt.Errorf("proc: %s %s Cleaner %s 应答解析失败: %w", p.name, scope, name, err)
}
return res.Text, nil
return res.TextRef, nil
}
func (p *Plugin) invokeStage(ctx context.Context, stage string, seq uint64) error {