Version: 0.9.75.dev.260505

后端:
1.收口阶段 6 agent 结构迁移,将 newAgent 内核与 agentsvc 编排层迁入 services/agent
- 切换 Agent 启动装配与 HTTP handler 直连 agent sv,移除旧 service agent bridge
- 补齐 Agent 对 memory、task、task-class、schedule 的 RPC 适配与契约字段
- 扩展 schedule、task、task-class RPC/contract 支撑 Agent 查询、写入与 provider 切流
- 更新迁移文档、README 与相关注释,明确 agent 当前切流点和剩余 memory 迁移面
This commit is contained in:
Losita
2026-05-05 16:00:57 +08:00
parent e1819c5653
commit d7184b776b
174 changed files with 2189 additions and 1236 deletions

View File

@@ -0,0 +1,37 @@
package agentstream
import "log"
// NewSSEPayloadEmitter 创建将 chunk 事件写入 outChan 的 emitter。
//
// 职责边界:
// 1. 接收 outChanSSE 输出通道),返回 PayloadEmitter 函数;
// 2. 只把原始 JSON payload 写入通道,不添加 "data: " 前缀和 "\n\n" 后缀;
// 3. SSE 格式化("data: " + payload + "\n\n")由 API 层的 writeSSEData 统一处理;
// 4. 通道满时静默丢弃并返回 nil让图继续完成状态持久化避免因客户端超时而丢失快照。
//
// 使用示例:
//
// emitter := NewSSEPayloadEmitter(outChan)
// chunkEmitter := NewChunkEmitter(emitter, requestID, modelName, created)
// chunkEmitter.EmitAssistantText("", "", "hello", true)
func NewSSEPayloadEmitter(outChan chan<- string) PayloadEmitter {
return func(payload string) error {
if outChan == nil {
return nil
}
if payload == "" {
return nil
}
select {
case outChan <- payload:
return nil
default:
// 通道已满:客户端可能已断开或消费过慢。
// 静默丢弃此 chunk让图继续执行并完成状态持久化。
// 客户端重连后可从 Redis 快照恢复,不需要这条消息。
log.Printf("[WARN] SSE outChan full, dropping payload (len=%d)", len(payload))
return nil
}
}
}