问题概述
在 pkg/wga-sandbox/internal/runner/opencode/opencode.go 中,connectSSE 方法连接 /global/event SSE 端点时没有传递 directory 参数,导致 SSE 事件被 handleEvent 中的 directory 过滤条件丢弃,前端收不到任何流式响应内容。
问题现象
- 请求成功返回(200 OK)
- PPT/文件生成成功
- 但前端收不到任何 SSE 事件流内容
根因分析
问题代码(opencode.go:589-596)
resp, err := trace_util.NewResty(ctx).
SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}).
SetTimeout(0).
R().
SetContext(ctx).
SetHeader("Accept", "text/event-stream").
SetDoNotParseResponse(true).
Get(r.opt.Sandbox.OpencodeEndpoint() + "/global/event") // ❌ 缺少 directory 参数
对比:其他方法正确传递了 directory 参数
┌─────────────────┬──────┬───────────────────────────────────────────────┐
│ 方法 │ 行号 │ 传递 directory 参数 │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ createSession │ 542 │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ deleteSession │ 563 │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ sendPromptAsync │ 701 │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ connectSSE │ 596 │ ❌ 缺失 │
└─────────────────┴──────┴───────────────────────────────────────────────┘
事件过滤逻辑(opencode.go:803-805)
// 过滤其他沙箱的事件
if event.Directory != r.sb.WorkDir() {
return "", false // 事件被丢弃
}
由于 connectSSE 没有传递 directory 参数,opencode 服务可能返回空或不匹配的 directory 值,导致所有事件被过滤丢弃。
修复建议
在 connectSSE 方法中添加 directory 查询参数:
// 修改前:
Get(r.opt.Sandbox.OpencodeEndpoint() + "/global/event")
// 修改后:
SetQueryParam("directory", r.sb.WorkDir()).
Get(r.opt.Sandbox.OpencodeEndpoint() + "/global/event")
相关信息
- 问题文件:pkg/wga-sandbox/internal/runner/opencode/opencode.go
- 引入提交:611ba07cc (2026-03-03)
- 影响范围:GeneralAgent SSE 流式响应
问题概述
在
pkg/wga-sandbox/internal/runner/opencode/opencode.go中,connectSSE方法连接/global/eventSSE 端点时没有传递directory参数,导致 SSE 事件被handleEvent中的 directory 过滤条件丢弃,前端收不到任何流式响应内容。问题现象
根因分析
问题代码(opencode.go:589-596)