## 问题: 1. `Parts -> 文本` 渲染逻辑重复实现 相同规则散落在 `context / context/compact / memo / tools / tui`,同一语义在多个位置维护,后续任何规则调整都可能出现行为不一致。 2. 过渡路径语义污染风险 图片附件在历史路径中曾被折叠为文本块(包含附件说明/路径),会把结构化图片语义退化为文本语义,偏离多模态主链路设计。 3. provider 兼容预期不收敛 测试中存在对临时兼容策略的依赖(如 schema sanitizer、400 后去 tools 重试),与当前稳定策略不一致,容易导致实现与测试相互拉扯。 ## 解决思路 1. 建立共享渲染层 将 `Parts` 渲染规则集中到一个共享包,提供按场景区分的显式入口(`compact / transcript / display`),禁止万能 `PlainText` 入口。 2. 统一调用路径 各模块保留本地语义函数名,但内部统一委托到共享渲染层,避免复制粘贴实现。 3. 清理过渡行为与测试预期 删除图片拼接文本发送路径,保留结构化语义;同步调整 provider 侧测试预期,使其与当前行为一致。 ## 执行范围 - `internal/context*` - `internal/memo` - `internal/tools` - `internal/tui` - `internal/provider/openaicompat/chatcompletions` ## 验收标准 1. 跨模块渲染行为由单一实现驱动,不再存在重复实现。 2. 图片消息不再通过拼接文本块表达附件语义。 3. provider 兼容相关测试预期与当前策略一致。 4. `go test ./...` 通过。
问题:
Parts -> 文本渲染逻辑重复实现相同规则散落在
context / context/compact / memo / tools / tui,同一语义在多个位置维护,后续任何规则调整都可能出现行为不一致。过渡路径语义污染风险
图片附件在历史路径中曾被折叠为文本块(包含附件说明/路径),会把结构化图片语义退化为文本语义,偏离多模态主链路设计。
provider 兼容预期不收敛
测试中存在对临时兼容策略的依赖(如 schema sanitizer、400 后去 tools 重试),与当前稳定策略不一致,容易导致实现与测试相互拉扯。
解决思路
建立共享渲染层
将
Parts渲染规则集中到一个共享包,提供按场景区分的显式入口(compact / transcript / display),禁止万能PlainText入口。统一调用路径
各模块保留本地语义函数名,但内部统一委托到共享渲染层,避免复制粘贴实现。
清理过渡行为与测试预期
删除图片拼接文本发送路径,保留结构化语义;同步调整 provider 侧测试预期,使其与当前行为一致。
执行范围
internal/context*internal/memointernal/toolsinternal/tuiinternal/provider/openaicompat/chatcompletions验收标准
go test ./...通过。