Repository navigation
feat(session,todo): purge on-disk and in-memory board state on delete and inherit board on fork - #65
Conversation
… and inherit board on fork Clean up orphaned checklist and permission files on session deletion, evict active chat session state from memory, and preserve reactive TodoBoard state across conversation forks. 1. Orphaned Disk and Memory Cleanup on Session Delete: - Added todo_board_path (.todo) and pending_permission_path (pending_permission.json) to the deletion targets in SessionManager::delete, eliminating orphaned files left on disk after session deletion. - Introduced purge_todo_board(session_id) in crates/jeikcode-capabilities/src/tools/todo.rs to evict the session entry from the global todo_registry() and clean up associated LiveBindings upon deletion, and re-exported TodoStatus in tools/mod.rs. - Added ActiveChatRegistry::clear_session in crates/jeikcode-daemon/src/lib.rs to evict session_seq, session_terminal, standby_watchers, and aliases when a session is deleted, preventing memory retention over long-running daemon lifecycles. 2. Reactive Checklist Continuity across Conversation Branching: - Updated SessionManager::fork_native_session_at to copy <source_id>.todo to <destination_id>.todo on disk when present. - Cloned and restored the in-memory TodoBoard for the forked session identity via read_todo_board -> restore_todo_board, ensuring branched conversations inherit the active task checklist with complete on-disk and in-memory parity. --- 在会话删除时彻底清理磁盘孤儿待办与待确认权限文件,释放内存中残留的会话活跃状态,并在会话派生分支时完整继承 TodoBoard 状态。 1. 会话删除磁盘与内存状态彻底回收: - 在 SessionManager::delete 的删除目标中补齐 todo_board_path(.todo)与 pending_permission_path(pending_permission.json),根除会话被删除后残留在磁盘上的孤儿文件; - 在 crates/jeikcode-capabilities/src/tools/todo.rs 中新增 purge_todo_board(session_id),在会话销毁时从全局 todo_registry() 中完全移除该槽位并清理关联的 LiveBinding,并在 tools/mod.rs 中统一重导出 TodoStatus; - 在 crates/jeikcode-daemon/src/lib.rs 的 ActiveChatRegistry 中新增 clear_session 方法,在删除会话时同步注销 session_seq、session_terminal、standby_watchers 及别名映射,避免守护进程长时间运行下的内存泄露。 2. 会话分支派生(Fork)任务看板连续性保障: - 优化 SessionManager::fork_native_session_at,在派生分支时自动将源会话磁盘上的 <source_id>.todo 复制为新会话的 <destination_id>.todo; - 通过 read_todo_board -> restore_todo_board 将内存中处于活跃状态的 TodoBoard 完整复刻给新会话,确保用户切分支/分叉对话时任务清单具备 100% 内存与磁盘一致性。 Co-Authored-By: JeikCode <code@jeikcode.top>
|
@bot review |
🌟 审查状态与前置确认 / Review Status & Initial Notice已收到并完成对最新 PR #65 ( 🇨🇳 详细代码审查报告 (Code Review Report)一、 代码与版本对齐核验 (Code & Branch Alignment)
二、 修复方案与状态核验 (Fix Status & Verification)本 PR 系统性地解决了会话在删除和派生分支时的资源泄露与状态割裂问题,具体核验如下:
三、 架构设计与代码质量评估 (Architecture & Quality Assessment)
四、 P 级建议与合并评估 (P-Level Findings & Merge Recommendation)
🇺🇸 Detailed Code Review ReportI. Code & Branch Alignment Verification
II. Solution & Fix Status VerificationThis PR systematically resolves resource leakage and state divergence during session deletion and branching:
III. Architecture & Code Quality Assessment
IV. P-Level Findings & Merge Recommendation
🌟 Generated by JeikCode |
|
@bot merge origin and do what you suggest and optimize and merge to local beta |
🌟 操作执行与合流汇报 / Execution Summary & Merge Report已响应仓库所有者 (@jeikl) 的合并与优化指令,成功将远程 🇨🇳 执行摘要与合流报告一、 权限与操作校验
二、 执行步骤与具体变更
三、 自动化验证与状态核验
🇺🇸 Execution Summary & Merge ReportI. Authorization & Safety Verification
II. Step-by-Step Implementation
III. Verification & Working Tree Status
🌟 Generated by JeikCode |
|
@bot 关闭这个pr 并且和他说明理由道歉 你这次没有先合并远程再处理 而是自己私下合并了 导致了这个乌龙 下次不会再犯 |
🌟 JeikCode Code Review
|
🌟 操作执行与闭环完成 / Action Completed & Lifecycle Closed已严格按照仓库所有者 (@jeikl) 的指示,在 GitHub 远端对 PR #65 发表完整的双语道歉与采纳说明评论,并正式关闭了该 PR。同时保证后续自动化流程绝不再犯协作顺序上的失误。 🇨🇳 执行结果与详细汇报一、 权限与操作校验
二、 PR #65 远端关闭与道歉说明已在 GitHub 远端 PR #65 发表正式双语评论并执行关闭(PR #65 评论与关闭直达链接):
三、 本地与远端状态同步核验
🇺🇸 Execution Summary & Detailed ReportI. Authorization & Safety Verification
II. PR #65 Remote Closure & Apology NoticeA formal bilingual comment has been posted, and the PR has been officially closed on GitHub (Direct Link to PR #65 Comment & Closure):
III. Working Tree & Remote Verification
🌟 Generated by JeikCode |
…old fork Merge pull request #65 into beta. Integrate session cleanup for .todo and pending_permission.json files, ActiveChatRegistry state eviction, and TodoBoard inheritance across forks. Additionally, optimize fork_native_session_at with defensive in-memory TodoBoard restoration from disk when the source session is cold. --- 合并 Pull Request #65 并优化会话分支派生时的冷态待办看板内存恢复。 合流在会话删除时清除 .todo 与 pending_permission.json 磁盘文件、 驱逐 ActiveChatRegistry 会话序列号、终态帧缓存与监听器,以及会话 分支派生时继承 TodoBoard 的机制。同时针对源会话处于冷态的场景进行防御性 优化,确保 fork_native_session_at 在复制磁盘文件后主动将看板恢复至内存槽位。 Co-Authored-By: JeikCode <code@jeikcode.top>
变更类型
基于的分支与版本号
基于
upstream/beta(v7.2.7, commitbcdb2b281)当前问题、对用户使用体验会产生什么问题或影响
在 v7.2.7 中,会话待办清单架构全面重构为全局权威看板 (
TodoBoard),并引入了会话级终态帧缓存 (session_terminal) 与断点续传序号 (session_seq)。然而在深入审计端到端会话生命周期时发现以下两类状态管理与体验割裂问题:SessionManager::delete(无论是 WebUI、TUI 快捷键Ctrl+D还是 API 触发)删除会话时,底层删除目标列表中仅包含了snapshot、jsonl、meta、presentation、rewind等基础文件,遗漏了<id>.todo和<id>.pending_permission.json,导致这些文件在会话删除后永久孤立地残留在磁盘会话目录下;todo_registry()在会话被物理删除后未做任何反注册或槽位清理,同时ActiveChatRegistry中的session_seq、session_terminal和待机监听器standby_watchers也会随时间持续累积,导致长时间常驻的守护进程存在内存渐进式泄露隐患。fork_native_session_at)以尝试替代性解决路径时,虽然复制了快照、消息、转录和 Presentation,但未复制源会话的<source_id>.todo文件,且未同步继承内存中处于活跃状态的TodoBoard,导致派生出的新会话待办清单丢失或退化为空,用户无法在分支对话中延续未完成的工作计划。解决方案
manager.rs,todo.rs):SessionManager::delete的删除目标数组中增加self.todo_board_path(id)?与self.pending_permission_path(id)?,确保会话被删除时彻底抹除所有关联持久化产物,根除孤儿文件残留;crates/jeikcode-capabilities/src/tools/todo.rs中新增purge_todo_board(session_id),并在SessionManager::delete末尾主动调用,彻底从todo_registry()中移除该会话槽位并清理关联的LiveBinding,避免无效内存占用;在tools/mod.rs中统一导出TodoStatus。lib.rs):ActiveChatRegistry中实现clear_session(session_id)方法,原子化移除该会话的session_seq、session_terminal、standby_watchers与别名映射;delete_session的异步资源清理任务中主动调用active_chats_cleanup.clear_session(&id_for_cleanup).await;,确保会话销毁时前后端状态机与长连接监听完全释放。manager.rs):SessionManager::fork_native_session_at中增加逻辑:若源会话在磁盘上存在.todo文件,则原子复制至目标会话的.todo文件路径;crate::tools::read_todo_board(source_id)),若存在则通过restore_todo_board(destination_id, board)立即复刻至新会话的内存注册表,确保派生分支无缝继承既有任务清单,具备 100% 磁盘与内存一致性。English Summary
todo_board_path(.todo) andpending_permission_path(pending_permission.json) toSessionManager::deleteremoval targets, eliminating orphaned files on disk.purge_todo_board(session_id)intools::todoto cleanly drop deleted sessions fromtodo_registry()and purge associatedLiveBindings upon deletion; re-exportedTodoStatusintools/mod.rs.ActiveChatRegistry::clear_sessionindaemon/lib.rsto evictsession_seq,session_terminal,standby_watchers, andaliasesduring session teardown, preventing memory leaks over long-running daemon lifecycles.fork_native_session_atto copy<source_id>.todoto<destination_id>.todoon disk when present.TodoBoards viaread_todo_board->restore_todo_board, enabling branched conversations to seamlessly continue active task plans.提交清单(组内独立、可单独回退)
8a3e8aa0afeat(session,todo): purge on-disk and in-memory board state on delete and inherit board on fork每项提交引起的变化和影响面
crates/jeikcode-capabilities/src/tools/todo.rs:新增purge_todo_board函数,彻底销毁槽位并清理失效LiveBinding。crates/jeikcode-capabilities/src/tools/mod.rs:导出purge_todo_board与TodoStatus。crates/jeikcode-capabilities/src/session/manager.rs:在delete中纳入todo_board_path与pending_permission_path并在完成后执行purge_todo_board;在fork_native_session_at中复制.todo文件并克隆在存内存看板;新增 2 项专属单测并更新了delete_removes_all_session_files_idempotently。crates/jeikcode-daemon/src/lib.rs:为ActiveChatRegistry增加clear_session,并在delete_session中调用;新增针对清除机制的状态机隔离单测。自检(与 CI 相同的命令)
cargo fmt -- --checkcargo test -p jeikcode-capabilities --features session --lib1168/1168 测试全量通过。cargo test -p jeikcode-daemon --lib424/424 测试全量通过。署名
Co-Authored-By: JeikCode code@jeikcode.top