Skip to content

refactor(session): 从 runtime 完全拆分会话模块并统一收口到 internal/session#187

Merged
minorcell merged 10 commits into
1024XEngineer:mainfrom
wynxing:new_Feat-manual
Apr 7, 2026
Merged

refactor(session): 从 runtime 完全拆分会话模块并统一收口到 internal/session#187
minorcell merged 10 commits into
1024XEngineer:mainfrom
wynxing:new_Feat-manual

Conversation

@wynxing

@wynxing wynxing commented Apr 7, 2026

Copy link
Copy Markdown
Collaborator

背景

为明确模块边界并降低 runtime 层职责复杂度,本次将会话相关能力从 runtime 彻底拆分,统一收口到独立的 internal/session 模块。
目标是让主链路保持稳定的前提下,实现:

  • runtime 聚焦 ReAct 主循环与事件编排
  • session 统一承载会话模型与持久化实现
  • 上层调用方不再依赖 runtime 导出的会话模型类型

主要改动

1. 新增独立会话模块 internal/session

新增并落地会话相关核心能力:

  • 会话模型:Session
  • 侧栏摘要模型:Summary
  • 存储抽象:Store
  • JSON 存储实现:JSONStore
  • 构造函数:New / NewWithWorkdir
  • 存储工厂:NewStore / NewJSONStore
  • ID 生成:NewID
  • 对应测试:internal/session/store_test.go

2. runtime 侧彻底去除会话实现与兼容层
  • 删除 internal/runtime/session.go
  • 删除 internal/runtime/id.go
  • 删除 internal/runtime/session_test.go(测试已迁移到 internal/session

并将 runtime 内会话相关引用统一切换为 internal/session

  • Runtime 接口返回值改为 agentsession.Session / []agentsession.Summary
  • Service.sessionStore 改为 agentsession.Store
  • compact 路径中的会话类型改为 agentsession.Session

3. 应用装配层直接依赖 session 模块

internal/app/bootstrap.go 中:

  • 由原先 runtime 入口创建会话存储
  • 调整为直接调用 agentsession.NewStore(loader.BaseDir())

4. TUI 与测试类型统一收口

同步更新 tui 与 runtime/tui 测试中的会话类型引用:

  • agentruntime.Session / agentruntime.SessionSummary
  • 统一替换为 agentsession.Session / agentsession.Summary

5. 文档同步
  • README.md
    • 明确 internal/runtime 不再导出会话模型与存储类型
    • 明确 internal/session 为会话统一归属层
  • docs/session-persistence-design.md
    • 增补“模块职责与收口边界”
    • 统一 Summary 命名说明
    • 对齐默认会话标题为 New Session
    • 补充演进约束,避免跨层实现

职责边界说明(结果)

  • runtime:会话保存时机、循环编排、事件派发
  • session:会话模型、存储抽象、持久化实现
  • tui:仅消费 runtime 暴露数据,不直接做持久化

验证情况

已执行并通过以下关键测试:

  • go test ./internal/session ./internal/runtime ./internal/app ./internal/tui/state
  • go test ./internal/tui -run TestRunSessionWorkdirCommandBranches -count=1

影响面与兼容性

  • 影响面runtimeapptui、文档与相关测试
  • 兼容性结论:会话模型与存储能力已完成从 runtimesession 的彻底迁移;后续新增会话存储能力应仅在 internal/session 内扩展并通过接口注入 runtime

@minorcell

Copy link
Copy Markdown
Member

@Yumiue 解决下代码冲突的问题

@phantom5099

phantom5099 commented Apr 7, 2026

Copy link
Copy Markdown
Collaborator

internal/session/store.go:31 这里把 Workdir 继续排除在持久化之外,而 internal/runtime/runtime.go:395 到 internal/runtime/runtime.go:453 仍然用进程内 map 维护它。这样这次“session 完全收口到 internal/session”在行为上还没有完成,重启后 session cwd 还是会丢。

@minorcell minorcell merged commit d765467 into 1024XEngineer:main Apr 7, 2026
2 checks passed
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.

3 participants