fix(gateway): Web 活跃客户端主动推送走 turnreply 规整(先规整再落库,推帧与落库逐字相同)
M19 复审抓到的真缺口:internal/services/gateway/proactive.go 的 SendProactive -> persistProactiveToMain 这条 Web 活跃客户端主动推送路由 完全绕过 turnreply.NormalizeParagraphs —— 同一条主动消息走 IM 是规整过的、 走 Web 实时推还是原样(半包 <p> 在客户端按「存在完整 <p> 就不再按空行回退」 的契约下整条塌成一坨)。 - 接线:SendProactive 在落库之前先 msg.Content = turnreply.NormalizeParagraphs(msg.Content), 落库与 proactive_message 帧取同一个字符串 ⇒ 两端逐字相同;不在 gateway 另写实现。 - 新增 proactive_normalize_test.go:修前红(web 原样 / im 已规整),修后断言 ① 落库是规整后文本 ② 推帧 == 落库行 ③ 两条路由同源同文本 ④ <br>/<action> 语义不动。 - 既有两条断言按新口径更新(纯散文现在也被包成一个 <p>,与其它三处一致)。
This commit is contained in:
1 parent
4ed5925296
commit
1d3965aa80
5 files changed
+173
-7
No files matched your search
@@ -24,7 +24,8 @@ import (
|
||||
// 三条口径:
|
||||
// - **角色恒为 assistant**:这是她单方面开口说的话,不是主人的输入 —— 塞成
|
||||
// user 角色会污染「谁说了什么」,也会在历史里冒充主人发言(红线)。
|
||||
// - **正文用调用方已经净化过的文本**(backthink 的 stripInternalMarkers 出口),
|
||||
// - **正文用调用方已经净化并规整过的文本**(backthink 的 stripInternalMarkers 出口,
|
||||
// 再过 `turnreply.NormalizeParagraphs` —— 见 SendProactive 的「先规整、再落库」),
|
||||
// 系统元数据(决策标记、渠道选择)绝不进正文,也绝不新增任何隐藏字段 ——
|
||||
// 注入面因此与「气泡里看到的那句话」逐字相同。
|
||||
// - **turn_id 留空**:主动推送不属于任何一路回合(她单方面开口,没有对应的
|
||||
|
||||
Reference in new issue
Block a user