fix(gateway,channelbridge,turnreply): p 标签半包写入侧规整(修「整条塌成一段」)
裁定(已发安卓):**能修**,走**写入侧规整** —— 不指望模型输出、不动客户端。 - 新增 internal/runtime/turnreply/paragraph.go 的 NormalizeParagraphs: 把未被 <p> 包裹的段落补上 <p>(按空行分段;<action>/<narration> 段也包进 <p>, 与正确形态 <p><action>…</action>…</p> 一致) - **幂等**守门断言:已完全包裹的文本逐字不变(防二次加工) - 落点覆盖 Web 与 IM 两条落库路径(gateway/session_turn_reply.go、channelbridge/turnreply.go、 proactive.go)⇒ 两边共用同一份规整文本 ⇒ **历史一次性变好、两个客户端零改动**、渲染口径不分叉 (测试与变异详见切片报告)
This commit is contained in:
1 parent
d532eb3fcd
commit
5de708a560
17 files changed
+721
-46
No files matched your search
@@ -177,8 +177,8 @@ func TestInterruptTurnOverWSStopsOnlyTargetLeg(t *testing.T) {
|
||||
close(f.run.release)
|
||||
waitUntil(t, "会话排空", func() bool { return !f.o.Busy("web") && f.o.QueueDepth("web") == 0 })
|
||||
rows := assistantContents(f.hist.records())
|
||||
if !slices.Equal(rows, []string{"reply-A"}) {
|
||||
t.Fatalf("助手回复 = %v, want [reply-A](另一路继续作答;被取消路不补说明)", rows)
|
||||
if !slices.Equal(rows, []string{storedParagraph("reply-A")}) {
|
||||
t.Fatalf("助手回复 = %v, want [<p>reply-A</p>](另一路继续作答;被取消路不补说明)", rows)
|
||||
}
|
||||
|
||||
types := a2DrainTypes(t, f.conn, a2Settle)
|
||||
@@ -221,7 +221,7 @@ func TestInterruptUnknownTurnIDIsDirectedErrorAndSparesAllLegs(t *testing.T) {
|
||||
waitUntil(t, "会话排空", func() bool { return !f.o.Busy("web") && f.o.QueueDepth("web") == 0 })
|
||||
rows := assistantContents(f.hist.records())
|
||||
slices.Sort(rows)
|
||||
if want := []string{"reply-A", "reply-B"}; !slices.Equal(rows, want) {
|
||||
if want := []string{storedParagraph("reply-A"), storedParagraph("reply-B")}; !slices.Equal(rows, want) {
|
||||
t.Fatalf("助手回复 = %v, want %v(两路都必须照常作答)", rows, want)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user