核对时间:2026-09-28 首查(只读);2026-09-29 完成处置 —— 用户确认 「独立页面、不再嵌入」+「旧对话已清空」后,清单里除"在用"的 5 条之外全部删除。 方法:全仓库 grep
<标记,逐个反查三件事: ①stream-xml-filter.ts里有没有规则 → ② 谁消费(渲染组件 /customProcessor)→ ③ 现在谁产出(新协议适配层?旧会话历史?开发环境 mock 文本?)。复核命令见 §四。
| 标记 | 过滤器规则 | 消费端 | 现在的产出者 | 结论 |
|---|---|---|---|---|
<scope> |
block | ScopeContent |
适配层(progress / heartbeat → 思考中卡片) | ✅ 在用 |
<!-- POLICY_TABLE … --> |
特殊块 | PolicyMatch |
适配层(item 事件) | ✅ 在用 |
<ref_links> |
block | BusinessRecord 参考资料 |
适配层(source 事件) | ✅ 在用 |
<question-cards> |
block | QuestionCard |
适配层(interrupt 事件) | ✅ 在用 |
<image-scope> |
block | ImageContent |
适配层(result.cipa → 企业微信二维码) | ✅ 在用 |
<policy-list-updated> |
PolicyListUpdatedMatch |
无 | 🗑 2026-09-28 已删(见 §二) | |
<form><link-url><file-docx> |
FormContent / LinkURLContent / OfficeURLContent |
无(只有旧历史能触发) | 🗑 2026-09-29 已删(见 §三) | |
<ui-form> |
customProcessor → setFormOptions |
无(消费端本来就是空函数) | 🗑 2026-09-29 已删 | |
<followup><silence> |
无人注册 | 仅开发环境 mock 文本 | 🗑 2026-09-29 已删 | |
<qingpu_enterprise_notificaion> |
无人注册 | 无 | 🗑 2026-09-29 已删 |
删除后 stream-xml-filter.ts 的规则表只剩 4 条(scope / image-scope / ref_links / question-cards)
+特殊块 <!-- POLICY_TABLE … -->;枚举 RecordRowTypes 只剩 6 个成员。
⚠️ 遗留:开发环境那两个 mock 文本(
test-document-line-stream.ts:20、useBusinessAssistantChat.ts:1466)里仍写着<silence><followup …>—— 点"测试流"按钮时 那串标记会以原始文本显示(dev-only,不影响线上)。要清可以把那两处 mock 一并改掉。🐛 顺带修掉一个更早就存在的解析器 bug(是靠本清单的断言发现的):
isPossibleOpenPrefix()在"标签名比规则名长"那一支里没检查是否真的以规则名开头, 于是任意文本只要在第open.length个字符处是空格或>就会被误判为"可能的前缀"而 永久挂起(既不产出行也不吐文本)。实测:<form id="a">…(偏移 11 处是>→ 撞上image-scope)、</link-url>(偏移 9 处是>→ 撞上ref_links)。已修 + 在harness/tools/verify-stream-filter-rules.mjs加断言钉住。
<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> 会当普通文本显示
(既没有卡片列表,也不再被吞掉)。新会话不受影响。删了什么:
Form / LinkURL / OfficeURL / UIForm / Silence /
FollowUp / EnterpriseNotification)FormContent.vue / LinkURLContent.vue / OfficeURLContent.vueBusinessRecord.vue:三处挂载、三个 import、inject("formOptionsControl") 与
customProcessor(<ui-form> 那项)、因此失去用途的 jsonrepair importprovide("formOptionsControl", …)(本来就是空函数)stream-xml-filter.ts 里随之失去调用方的两个私有方法
(splitSafeContentBeforeCloseTail / getNestedFilter,为 silence 的"透明容器"服务)依据:用户 2026-09-29 明确「这个是单独的前端页面,不会嵌入到其他页面」+「旧对话已清空」 ⇒ 那三个"只服务旧历史"的渲染器失去唯一触发源;另外四条本来就是死链。
验证:verify-stream-filter-rules 32/32(新增断言:7 个标记都不再产出行、按普通文本留在正文、
枚举只剩 6 个成员、三个组件文件与其挂载/import/inject 都没了)·
verify-question-cards 36/36(真实切行器往返)· verify-policy-card-list 24/24 ·
npm run build 通过 · vue-tsc 无新增报错 · dev 冒烟页面 200 且 BusinessRecord.vue 编译 200
另有一批与旧协议无关的历史包袱在
current-api-call-sites.md§二/§三(已停用接口、死代码),不在本文范围。
# ① 规则表只剩 4 条 + 枚举只剩 6 个成员
grep -n "name: RecordRowTypes\." src/utils/stream-xml-filter.ts
grep -c "= \"" src/utils/stream-xml-filter.ts # 期望 6(枚举成员数)
# ② 被删的 7 个标记在 src 里**只在注释里**出现(`[已删]` 说明)
grep -rn "<followup\|<ui-form\|<link-url\|<file-docx\|<form\|<silence\|qingpu_enterprise" src/ \
| grep -v "^\S*:\s*[0-9]*:\s*//"
# ③ 组件与挂载确已消失
ls src/components/Chat/FormContent.vue src/components/Chat/LinkURLContent.vue \
src/components/Chat/OfficeURLContent.vue 2>&1 | grep -c "No such file" # 期望 3
# ④ 断言的权威版本(推荐直接跑这个)
node harness/tools/verify-stream-filter-rules.mjs