mirror of
https://github.com/cexll/myclaude.git
synced 2026-02-06 02:34:09 +08:00
## 问题 - 执行 rg 等命令时,如果匹配到 minified 文件,单行输出可能超过 10MB - 旧实现使用 bufio.Scanner,遇到超长行会报错并中止整个解析 - 导致后续的 agent_message 无法读取,任务失败 ## 修复 1. **parser.go**: - 移除 bufio.Scanner,改用 bufio.Reader + readLineWithLimit - 超长行(>10MB)会被跳过但继续处理后续事件 - 添加 codexHeader 轻量级解析,只在 agent_message 时完整解析 2. **utils.go**: - 修复 logWriter 内存膨胀问题 - 添加 writeLimited 方法限制缓冲区大小 3. **测试**: - parser_token_too_long_test.go: 验证超长行处理 - log_writer_limit_test.go: 验证日志缓冲限制 ## 测试结果 - ✅ TestParseJSONStream_SkipsOverlongLineAndContinues - ✅ TestLogWriterWriteLimitsBuffer - ✅ 完整测试套件通过 Fixes #64 Generated with swe-agent-bot Co-Authored-By: swe-agent-bot <agent@swe-agent.ai>
40 lines
775 B
Go
40 lines
775 B
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestLogWriterWriteLimitsBuffer(t *testing.T) {
|
|
defer resetTestHooks()
|
|
|
|
logger, err := NewLogger()
|
|
if err != nil {
|
|
t.Fatalf("NewLogger error: %v", err)
|
|
}
|
|
setLogger(logger)
|
|
defer closeLogger()
|
|
|
|
lw := newLogWriter("P:", 10)
|
|
_, _ = lw.Write([]byte(strings.Repeat("a", 100)))
|
|
|
|
if lw.buf.Len() != 10 {
|
|
t.Fatalf("logWriter buffer len=%d, want %d", lw.buf.Len(), 10)
|
|
}
|
|
if !lw.dropped {
|
|
t.Fatalf("expected logWriter to drop overlong line bytes")
|
|
}
|
|
|
|
lw.Flush()
|
|
logger.Flush()
|
|
data, err := os.ReadFile(logger.Path())
|
|
if err != nil {
|
|
t.Fatalf("ReadFile error: %v", err)
|
|
}
|
|
if !strings.Contains(string(data), "P:aaaaaaa...") {
|
|
t.Fatalf("log output missing truncated entry, got %q", string(data))
|
|
}
|
|
}
|
|
|