Skip to content

fix(memory): apply raw text output budget across live and snapshot paths - #1132

Open
kogekiplay wants to merge 1 commit into
spacering-net:mainfrom
kogekiplay:fix/memory-live-output-latest
Open

kogekiplay wants to merge 1 commit into
spacering-net:mainfrom
kogekiplay:fix/memory-live-output-latest

Conversation

@kogekiplay

Copy link
Copy Markdown
Contributor

实时工具输出原有的 200,000 字符保留预算只在多 chunk 追加时生效:首次 tool_call、重复 opening、替换式更新、未先宣布的 update 以及重连快照都能把超长字符串完整留在渲染端;单个 oversized append 也会越过预算。此 PR 将这些入口统一到一套纯文本尾部保留策略。

  • 沿用上游的 200,000 UTF-16 code units 预算,保留最新输出,截断时避开 surrogate pair,并复制有界尾部,避免依赖大字符串的 substring 存储。
  • 对首次帧、替换帧、追加帧、out-of-turn opening 和 snapshot hydration 使用相同策略。空输出与缺失输出的优先级保持原有含义。
  • 空 append 不再累积数组项;超过 128 个 chunk 时合并,避免很小的帧把 chunk 数组不断拉长。
  • { / [ 开头的结构化结果候选保持完整,包括跨多帧到达、尚未闭合的 JSON,避免破坏任务、委托等工具卡片的解析。

基于官方 main 1bc86a3(0.42.3)。只修改前端输出保留逻辑,没有实验版本号或回放解析器的 500 字符截断。

验证:

  • 新增入口回归测试在未修复 main 上 7 项失败,应用修复后通过。
  • 全量 Vitest:769 个文件、11,425 项通过。
  • 完整 TypeScript、全仓 ESLint、production build 通过。
  • 覆盖超长首次/替换/追加/未宣布更新/out-of-turn 帧、重连、JSON 完整性、跨帧 JSON、emoji 边界、空输出优先级及大量小 chunk。

范围:这是每个工具调用的 raw plain-text output 保留修复;结构化候选、content、输入、图片及会话整体预算不由本 PR 限制。不能据此声称 Codeg 的所有长期 Web Content 内存增长已解决。原始结果仍由代理自己的 transcript 持久化。

Refs #1097

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant