Skip to content

connectSSE 缺失 directory 参数导致 SSE 事件被过滤 #80

Description

@Lost-Liang

问题概述

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 参数              │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ createSession542  │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ deleteSession563  │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ sendPromptAsync701  │ ✅ SetQueryParam("directory", r.sb.WorkDir()) │
├─────────────────┼──────┼───────────────────────────────────────────────┤
│ connectSSE596  │ ❌ 缺失                                       │
└─────────────────┴──────┴───────────────────────────────────────────────┘

事件过滤逻辑(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 流式响应

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions