Skip to content

feat(context/runtime): 落地 Compact M1(micro/manual + transcript 持久化)并补齐配置、事件、TUI 与测试#127

Closed
wynxing wants to merge 5 commits into
1024XEngineer:mainfrom
wynxing:new_Feat
Closed

feat(context/runtime): 落地 Compact M1(micro/manual + transcript 持久化)并补齐配置、事件、TUI 与测试#127
wynxing wants to merge 5 commits into
1024XEngineer:mainfrom
wynxing:new_Feat

Conversation

@wynxing

@wynxing wynxing commented Apr 3, 2026

Copy link
Copy Markdown
Collaborator

变更背景

为解决会话上下文持续膨胀、压缩后可追溯性不足,以及手动压缩链路不完整的问题,本 PR 在 up/main 基础上落地 Compact M1 能力,并补齐配置、事件、TUI 入口与测试覆盖。

主要改动

  1. Compact 核心能力(internal/context/compact
  • 新增统一入口 Run(mode, input),覆盖 micromanual 两种模式
  • micro compact:仅替换“超出保留窗口且超阈值”的旧 tool result,占位符为 [Previous tool used: <tool_name>]
  • manual compact:支持 keep_recent / full_replace 策略,按 span 保护 assistant(tool_calls)+tool_result 边界
  • 压缩前强制落盘 transcript(JSONL),并在结果中回传 transcript_id / transcript_path
  • 摘要契约与最小校验:要求至少包含 donein_progress,并遵循 max_summary_chars 限制
  1. Runtime 接入(internal/runtime
  • 在每轮 provider 请求前执行 micro compact
  • 提供手动 Compact(...) 入口并回写 session
  • 新增 compact 事件与 payload 字段,包含压缩指标与 transcript 元数据
  • 增强错误路径:micro 失败非阻塞,manual 失败可显式返回错误
  1. 配置模型扩展(internal/config
  • 新增 context.compact.* 配置项与默认值/校验/加载持久化:
    • micro_enabled
    • tool_result_keep_recent
    • tool_result_placeholder_min_chars
    • manual_strategy
    • manual_keep_recent_spans
    • max_summary_chars
  1. TUI 命令链路(internal/tui
  • 接入 /compact 命令
  • 支持 compact 进行中状态、重入拦截、参数错误提示
  • 渲染 compact done/error 的用户可见反馈
  1. 稳定性修复与补充
  • 修复 compact 字符统计使用 rune 计数的问题
  • 修复规则发现错误处理的边界行为
  • 补充必要注释,统一关键路径语义
  1. 文档同步
  • README 增加 /compact 与 compact 机制说明
  • docs/guides/configuration.md 补充 compact 配置字段与 /compact 说明
  • docs/runtime-provider-event-flow.md 补充 compact 事件、命令链路与指标字段

测试与验证

  • 新增/增强测试覆盖:
    • compact runner 行为与异常路径
    • runtime 手动/自动 compact 事件与持久化回写
    • manual 后继续 tool 回合
    • manual + micro 组合场景
    • TUI /compact 命令与状态分支
    • config compact 配置默认值与校验
  • 本地已通过:
go test ./...

close #120

wynxing added 5 commits April 3, 2026 11:11
- Runtime 层新增 Run/Compact 串行互斥,避免并发写会话冲突\n- TUI 层新增 compact busy 状态,阻止 compact 期间重复触发发送/新会话\n- compact summary 截断改为按 rune 计数,避免中文多字节字符被截断\n- 清理乱码注释并为 internal/context(含 compact)补充中文 UTF-8 注释\n- 补充回归测试:UTF-8 截断、Run/Compact 串行化、TUI busy 状态
- 新增 context.compact 配置结构、默认值、校验与克隆逻辑\n- 支持 compact 配置的 YAML 持久化与兼容加载(含 micro_enabled 缺省回退)\n- 补充 compact 配置相关单元测试与 round-trip 验证\n- 扩展 runtime compact 事件类型与触发模式常量\n- 忽略 compact transcript 目录,避免本地产物入库
- 新增 my-changes.patch 作为迁移与回溯参考\n- 与功能代码提交解耦,便于后续审阅与维护
- compact 阈值与字符统计统一改为 rune 语义,避免中文按字节误判\n- discoverRuleFilesWithFinder 遇到目录读取错误时改为显式返回错误\n- 补充与更新对应测试用例,覆盖 rune 阈值/字符统计及错误传播行为
新增 manual 后继续 tool 回合与 manual+micro 组合集成测试;同步 README、配置指南与事件流文档中的 compact 说明。
@codecov

codecov Bot commented Apr 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.60145% with 85 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/context/compact/runner.go 85.01% 22 Missing and 21 partials ⚠️
internal/runtime/runtime.go 76.54% 13 Missing and 6 partials ⚠️
internal/tui/update.go 83.69% 10 Missing and 5 partials ⚠️
internal/config/model.go 85.71% 4 Missing and 4 partials ⚠️

📢 Thoughts on this report? Let us know!

@wynxing wynxing closed this Apr 3, 2026
minorcell added a commit that referenced this pull request Apr 4, 2026
feat(context/runtime): 落地 manual compact(拆分自 #127)并补齐配置、TUI、事件与测试
@wynxing wynxing deleted the new_Feat branch April 12, 2026 13:05
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.

feat(context/compact): M1 引入 micro_compact + 手动 compact + transcript 持久化

1 participant