legacy-content-markers.md 6.2 KB

旧协议内容标记存活清单(只读)

核对时间:2026-09-28(用户「老对话仅测试,后续会全部清空」→ 要求顺带把 其他只服务旧协议的块查一遍) 性质:只读排查 —— 除 <policy-list-updated>(本次已删,见 §一)外,本清单 没有据此改任何代码;结论供用户决定下一步删什么。 方法:全仓库 grep <标记,逐个反查三件事: ① stream-xml-filter.ts 里有没有规则 → ② 谁消费(渲染组件 / customProcessor)→ ③ 现在谁产出(新协议适配层?旧会话历史?开发环境 mock 文本?)。复核命令见 §四。

一、结论表

标记 过滤器规则 消费端 现在的产出者 结论
<scope> block(stream-xml-filter.ts:53) ScopeContent 适配层(progress / heartbeat → 思考中卡片) ✅ 在用
<!-- POLICY_TABLE … --> 特殊块 PolicyMatch 适配层(item 事件) ✅ 在用
<ref_links> block(:58) BusinessRecord 参考资料 适配层(source 事件) ✅ 在用
<question-cards> block(:77) QuestionCard 适配层(interrupt 事件) ✅ 在用
<image-scope> block(:55) ImageContent 适配层(result.cipa → 企业微信二维码) ✅ 在用
<policy-list-updated> block PolicyListUpdatedMatch 无 🗑 2026-09-28 已整条删掉(见下节)
<form> block(:52) FormContent(BusinessRecord:116) 无 —— src 里没有产出代码 ⚠️ 只有旧会话历史能触发
<link-url> block(:54) LinkURLContent(:117) 无 ⚠️ 同上
<file-docx> block(:59-64) OfficeURLContent(:125) 无 —— 附件走请求体 pictures/files,不走正文标记 ⚠️ 同上
<ui-form> skip(:65-70) customProcessor → setFormOptions(BusinessRecord:561-574) 无 💀 整条链是死的:两个壳组件 provide 的 setFormOptions 都是空函数(BusinessAssistantMobile.vue:424 / BusinessAssistantPC.vue:366),即便有内容也不产生任何界面变化
<followup> skip(:71-76) 无人注册 —— customProcessor 里只有 UIForm 一项 只有开发环境测试按钮的 mock 文本(test-document-line-stream.ts:20、useBusinessAssistantChat.ts:1466) 💀 全链死:followupSuggestions 全仓库没有任何写入点(旧协调器删除后就没接回),块被静默丢弃
<silence> skip(:51,透明容器) 无(只是壳) 同上,仅那两处 mock 文本 💀 只剩 mock;interrupted-message.ts:19 还会剥它,属无害残留
<qingpu_enterprise_notificaion> skip(:78-83) 无人注册 customProcessor 无 💀 死规则(AccountInfo.vue 里的 ENTERPRISE_BUBBLE_EVENT 是另一个 DOM 事件,与此无关)

行号是 2026-09-28 改动后的(删掉 policy-list-updated 规则会让后面的行号前移一位)。

二、本次已删:<policy-list-updated>

  • 原用途:旧协议里后端在正文下发 <policy-list-updated>{link, payload}</policy-list-updated>, 给出一个地址,前端(PolicyListUpdatedMatch.vue)照着去取 json 渲染卡片列表, 并把结果写回 globalThis.policiesPublic。这是接口清单 #11(见 current-api-call-sites.md)。
  • 为什么能删:新协议适配层从不产出这个块(它只产 scope / POLICY_TABLE / ref_links / question-cards / image-scope,见 api-chat-coordinator.ts:10-21)。 它唯一的触发源是旧会话的历史内容——用户 2026-09-28 确认「老对话仅测试,后续会全部清空」, 这条保留理由随之消失。
  • 删除范围:src/components/Chat/PolicyListUpdatedMatch.vue 整文件 · BusinessRecord.vue 的挂载点 / import / hasPolicyTableRow 里的分支 · StreamXMLFilter 的枚举成员与标签规则 · PolicyMatch.vue 的说明注释 · 接口清单 #11 与本文档。
  • ⚠️ 已知副作用(用户已确认接受):规则删掉后,清空之前若有人打开旧测试会话, 正文里那串 <policy-list-updated>{"link":…}</policy-list-updated> 会当普通文本显示 (既没有卡片列表,也不再被吞掉)。新会话不受影响。

三、剩下的怎么处理(建议,未动手)

按「删了会不会有人看出来」分两档:

  1. <ui-form> / <followup> / <silence> / <qingpu_enterprise_notificaion> —— 已经没有任何效果(消费端空实现或无人注册),删规则不会有任何可见变化。 要动的话删规则即可,枚举成员与 FormContent / LinkURLContent / OfficeURLContent 不要跟着删(理由见下)。
  2. <form> / <link-url> / <file-docx> —— 渲染组件是活的(旧历史里仍能画出来)。 删规则 = 旧会话那几处变成原始文本,与 policy-list-updated 同一个副作用。 既然旧对话要清空,这批也可以走同一条路;但建议等清空动作真的做完再删, 免得清空前有人翻旧会话时看到一片标记。

另有一批与旧协议无关的历史包袱在 current-api-call-sites.md §二/§三(已停用接口、死代码),不在本文范围。

四、复核方法(可重跑)

# ① 每个标记的产出者:排除过滤器与消费组件后应当为空(或只剩开发环境 mock)
grep -rn "<followup\|<ui-form\|<link-url\|<file-docx\|<form" src/ \
  | grep -v "stream-xml-filter\|Content.vue\|test-document-line-stream"

# ② 谁注册了 customProcessor
grep -n "RecordRowTypes\.[A-Za-z]*," src/components/Chat/BusinessRecord.vue

# ③ 两个壳组件的 setFormOptions 是不是空函数
grep -n -A1 "formOptionsControl" src/components/BusinessAssistantMobile.vue src/components/BusinessAssistantPC.vue

# ④ followupSuggestions 有没有写入点(应当没有)
grep -rn "followupSuggestions\s*=" src/