# ACP stderr 缓冲功能实现记录

## 时间
2026-06-02 16:30

## 完成内容

### 代码修改
- `internal/service/agent/plugins/acp/adapter_base.go`: +78 行, -22 行

### 核心改动

1. **添加 stderr 缓冲常量和字段**
   - `maxStderrSize = 64 * 1024` (64KB 上限)
   - `acpSession.stderrOutput strings.Builder`

2. **修改 stderr 消费逻辑 (ExecuteWithStream)**
   - 调整代码顺序：先创建 session → 再启动 stderr goroutine
   - stderr goroutine 添加：
     - LogInfo 实时日志记录
     - stderr 缓冲写入（带 64KB 截断）
     - scanner.Err() 错误处理

3. **修改 stderr 消费逻辑 (StartSession)**
   - 添加 wg.WaitGroup 防止 goroutine leak
   - stderr goroutine 添加：
     - LogInfo 日志记录
     - stderr 缓冲写入（带 64KB 截断）
     - scanner.Err() 错误处理
   - 错误返回前调用 wg.Wait()

4. **增强错误返回逻辑**
   - ExecuteWithStream: initialize/session_new/session_prompt 失败点附加 stderr
   - StartSession: initialize/session_new 失败点附加 stderr
   - 错误格式：`"ACP: xxx failed: %w\nstderr: %s"`

### 测试覆盖

创建 `adapter_base_test.go`，包含 6 个单元测试：
- TestStderrBufferField
- TestStderrSizeLimit
- TestStderrInErrorMessage
- TestAdapterConfigField
- TestMultipleStderrLines
- TestConcurrentStderrWrite

全部通过。

### 验收标准达成

| 标准 | 状态 |
|------|------|
| stderr 内容实时记录到日志 | ✅ |
| 请求失败时错误信息包含 stderr 内容 | ✅ |
| 不影响正常执行的流程和性能 | ✅ |
| 单元测试覆盖核心逻辑 | ✅ |

### 验证结果

- 编译成功：`go build ./cmd/server` ✅
- 测试通过：`go test ./internal/service/agent/plugins/acp/... -v` ✅ (6/6 PASS)

## 下一步
@CoreDev质量保证工程师 请执行代码审查和QA测试