feat(runtime): IM 主人私聊补历史转录(与 Web 主会话同源:抽共享 transcript 包 + OwnerEnvFor 单入口)
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

This commit is contained in:
AskaEth committed 2026-10-05 11:36:18 +08:00
1 parent df8fc660c0
commit 9b903a89bc
14 files changed
+676 -181

No files matched your search

+4 -3
View File
@@ -8,6 +8,7 @@ import (
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/history"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/loop"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/model"
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/transcript"
)
// 本文件实现「忙时新消息在回合内边界注入同一回合」的网关侧
@@ -89,7 +90,7 @@ func (s *steerTurn) Steer(ctx context.Context, req loop.SteerRequest) []model.Me
sessionID = s.sessionID
}
o := s.orchestrator
reader, ok := o.history.(transcriptReader)
reader, ok := o.history.(transcript.Reader)
if !ok {
return nil
}
@@ -99,7 +100,7 @@ func (s *steerTurn) Steer(ctx context.Context, req loop.SteerRequest) []model.Me
}
// 每个边界都重读转录:设计要求的「最新性=下一个边界即生效」正是靠这次重读,
// 而不是靠回合开始时的那一次播种(design/15 §2.4)。
recent, err := reader.Recent(ctx, sessionID, transcriptContextCount)
recent, err := reader.Recent(ctx, sessionID, transcript.ContextCount)
if err != nil {
steerLog(o).Debug("steer transcript read", "session", sessionID, "step", req.Step, "err", err)
return nil
@@ -127,7 +128,7 @@ func (s *steerTurn) Steer(ctx context.Context, req loop.SteerRequest) []model.Me
// 帧壳必须带本路的 turnId(忙时并行规范草案 §2.5):真并行下客户端要
// 靠它把这条消息配到**正确那一路**的 `turn.end`,否则灰态收不了口。
o.emitTurnState(sessionID, s.turnID, wsSteerAck, map[string]any{"messageId": c.row.ID, "atStep": req.Step})
out = append(out, transcriptMessage(c.row))
out = append(out, transcript.Message(c.row))
}
steerLog(o).Info("pending steered", "session", sessionID, "step", req.Step, "messages", len(out))
return out