Skip to content

优化 tool result 存储与 session 状态恢复#36

Open
GateJustice wants to merge 1 commit into
LiuMengxuan04:mainfrom
GateJustice:codex/tool-results-refactor
Open

优化 tool result 存储与 session 状态恢复#36
GateJustice wants to merge 1 commit into
LiuMengxuan04:mainfrom
GateJustice:codex/tool-results-refactor

Conversation

@GateJustice

Copy link
Copy Markdown
Collaborator

摘要

本 PR 重构了 MiniCode 的 tool-result / session / compact 相关主链路,重点解决两类问题:

  1. 超大 tool_result.content 直接进入模型上下文导致的上下文膨胀;
  2. session resume / compact / cleanup 过程中,同一份 JSONL 被重复扫描、状态恢复逻辑分散的问题。

同时,本 PR 还补齐了结构化 tool result 落盘、shell 类大输出的更大预览、过期 session 清理联动,以及相关测试覆盖。

变更内容

Tool result 落盘与替换

  • 单个 tool_result.content 超过阈值时,完整内容落盘到本地 tool-results 目录。
  • 模型上下文中的内容替换为 <persisted-output> 标记 + 文件路径 + preview。
  • 空输出统一归一为 (<toolName> completed with no output)
  • 支持 batch 级预算控制,避免同批工具结果合计过大。
  • ContentReplacementState 记录 seenIds / replacements,保证 replay 时 replacement 稳定。

结构化内容落盘

  • 识别 typed content-block 数组。
  • 结构化内容按 .json 落盘。
  • 普通字符串继续按 .txt 落盘。
  • preview 仍按文本内容生成。

shell 类大输出策略

  • run_command / bash / local_bash 使用更大的 preview。
  • 保留统一的 tool-result 落盘路径与 replacement 机制。

Session 与 compact

  • 抽出公共事件写入 helper,统一处理 mkdir / readLastEventUuid / appendFile / logicalParentUuid
  • 抽出 last compact_boundary 查找逻辑。
  • loadSession / loadContextCollapseState / loadContentReplacementState 复用同一份活动 JSONL snapshot。
  • 新增 loadSessionRuntimeState(),resume 时一次性恢复 messages、content replacement state 和 context collapse state。

清理联动

  • 清理过期 session 时同步删除 sessionArtifactsDir,包含 tool-results
  • clearSession() 也会删除对应 artifacts。

测试与校验

  • 覆盖 session read/write / resume。
  • 覆盖 cleanup / expiry。
  • 覆盖 tool-result storage 路径安全、shell preview、结构化 JSON 落盘。
  • 增加 loadSessionRuntimeState 的恢复测试。

测试计划

  • npm run check
  • npm test -- --runInBand test/session.test.ts test/tool-result-storage.test.ts test/snip-compact.test.ts

风险与回滚

风险

  • 超大工具输出现在会落盘到本地目录,增加磁盘占用。
  • 模型上下文中看到的是 preview + 路径,不再是完整 inline 输出。
  • session resume 依赖新的 runtime state 恢复入口。

回滚

  • 回滚 src/utils/tool-result-storage.ts 中的 replacement / persistence 逻辑。
  • 回滚 src/session.ts / src/tty-app.ts 中的 runtime state 合并恢复。
  • 回滚 src/session-paths.ts 的路径约束与目录结构。

Notes for Reviewers

  • src/session.ts 中 read / write / resume 逻辑是否仍保持 parent 链正确。
  • src/utils/tool-result-storage.ts 中 structured content / shell preview / batch budget 的边界行为。
  • loadSessionRuntimeState() 是否真正消除了 resume 的重复扫描。
  • cleanup 是否会正确删除 tool-results 产物。
  • 相关测试是否覆盖了真实回归点。

part of #1

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