From 9618ef413bb35c572b8f89e61968453f67aff4bc Mon Sep 17 00:00:00 2001 From: asepharyana Date: Thu, 16 Jul 2026 16:40:23 +0700 Subject: [PATCH] refactor(backend): alihkan EditLog ke zesdex-cms JsonlEditLogRepository Co-Authored-By: Claude Sonnet 5 --- crates/zesdex-backend/src/app/mode/rewind.rs | 31 +++++++++++-------- .../src/app/runtime/actions/mod.rs | 18 ++++++++--- crates/zesdex-backend/src/app/state/rest.rs | 9 ++++-- .../zesdex-backend/src/app/subagent/engine.rs | 9 ++++-- crates/zesdex-backend/src/model/mod.rs | 3 -- 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/crates/zesdex-backend/src/app/mode/rewind.rs b/crates/zesdex-backend/src/app/mode/rewind.rs index d9686da..15e0907 100644 --- a/crates/zesdex-backend/src/app/mode/rewind.rs +++ b/crates/zesdex-backend/src/app/mode/rewind.rs @@ -8,6 +8,7 @@ //! session's `SQLite` blob store. use crate::app::state::rest::AppStateRest; use sha2::Digest; +use zesdex_cms::domain::repository::EditLogRepository; /// Returns the number of stored pre-edit blobs (snapshots) for this session. pub fn rewind_count(state: &AppStateRest) -> usize { @@ -100,18 +101,20 @@ pub fn rewind_to(state: &mut AppStateRest, index: usize) { } // Log the rewind itself as an edit entry - let mut el = crate::model::editlog::EditLog::new(&state.session_dir); - let entry = crate::model::editlog::EditLogEntry { - ts: chrono::Utc::now().timestamp_millis(), - tool: "rewind".to_string(), - path: restore_path.to_string_lossy().to_string(), - reason: format!("rewind_to({index})"), - content_sha256: hex::encode(sha2::Sha256::digest(&bytes)), - bytes_delta: bytes.len() as i64, - origin: crate::app::state::types::Origin::Main.tag(), - session_id: state.session_id.clone(), - }; - let _ = el.append(entry); + let repo = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new(); + if let Ok(mut el) = repo.open(&state.session_dir) { + let entry = zesdex_cms::domain::edit_log::EditLogEntry { + ts: chrono::Utc::now().timestamp_millis(), + tool: "rewind".to_string(), + path: restore_path.to_string_lossy().to_string(), + reason: format!("rewind_to({index})"), + content_sha256: hex::encode(sha2::Sha256::digest(&bytes)), + bytes_delta: bytes.len() as i64, + origin: crate::app::state::types::Origin::Main.tag(), + session_id: state.session_id.clone(), + }; + let _ = repo.append(&state.session_dir, &mut el, entry); + } // Clear the transcript to force a refresh state.transcript_cache.dirty = true; @@ -125,7 +128,9 @@ fn open_session_db(session_dir: &std::path::Path) -> anyhow::Result Option { - let el = crate::model::editlog::EditLog::new(&state.session_dir); + let el = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new() + .open(&state.session_dir) + .unwrap_or_else(|_| zesdex_cms::domain::edit_log::EditLog::new()); let entry = el .entries .iter() diff --git a/crates/zesdex-backend/src/app/runtime/actions/mod.rs b/crates/zesdex-backend/src/app/runtime/actions/mod.rs index 757c87d..6766267 100644 --- a/crates/zesdex-backend/src/app/runtime/actions/mod.rs +++ b/crates/zesdex-backend/src/app/runtime/actions/mod.rs @@ -23,6 +23,7 @@ use std::fmt::Write; use crate::app::harness::Verdict; use sha2::Digest; +use zesdex_cms::domain::repository::EditLogRepository; use crate::app::review::{should_trigger_review, trigger_review}; use zesdex_iam::domain::repository::SessionRepository; use crate::app::state::rest::{AppStateRest, ChatMessageDisplay}; @@ -921,7 +922,10 @@ fn run_agent_turn( const MAX_TODO_RETRIES: usize = 5; let mut msgs = messages.to_vec(); let mut edited_paths: Vec = Vec::new(); - let initial_edits = crate::model::editlog::EditLog::new(&tc.edit_log_session_dir).len(); + let initial_edits = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new() + .open(&tc.edit_log_session_dir) + .map(|el| el.len()) + .unwrap_or(0); let mut inline_reviews_count: usize = 0; let mut prev_shaped = false; @@ -1473,7 +1477,9 @@ fn run_agent_turn( } } - let el = crate::model::editlog::EditLog::new(&tc.edit_log_session_dir); + let el = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new() + .open(&tc.edit_log_session_dir) + .unwrap_or_else(|_| zesdex_cms::domain::edit_log::EditLog::new()); let final_edits = el.len(); let total_edits_this_turn = final_edits.saturating_sub(initial_edits); @@ -1586,7 +1592,7 @@ fn execute_one_tool( let new = args.get("new").and_then(|v| v.as_str()).unwrap_or(""); (new.len() as i64 - old.len() as i64).abs() }; - let entry = crate::model::editlog::EditLogEntry { + let entry = zesdex_cms::domain::edit_log::EditLogEntry { ts: chrono::Utc::now().timestamp_millis(), tool: name.to_string(), path: path.to_string(), @@ -1596,8 +1602,10 @@ fn execute_one_tool( origin: ctx.origin.tag(), session_id: session_id.to_string(), }; - let mut el = crate::model::editlog::EditLog::new(session_dir); - el.append(entry).ok(); + let repo = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new(); + if let Ok(mut el) = repo.open(session_dir) { + let _ = repo.append(session_dir, &mut el, entry); + } } return Ok(result); } diff --git a/crates/zesdex-backend/src/app/state/rest.rs b/crates/zesdex-backend/src/app/state/rest.rs index 0763b27..15b0e2b 100644 --- a/crates/zesdex-backend/src/app/state/rest.rs +++ b/crates/zesdex-backend/src/app/state/rest.rs @@ -15,8 +15,10 @@ use super::types::{Origin, Toast, TranscriptCache}; use crate::app::lsp::LspManager; use crate::app::mcp::manager::McpManager; use crate::app::workflow::engine::WorkflowEngine; -use crate::model::editlog::EditLog; use zesdex_cms::domain::app_config::AppConfig; +use zesdex_cms::domain::edit_log::EditLog; +use zesdex_cms::domain::repository::EditLogRepository; +use zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository; use zesdex_cms::domain::repository::AppConfigRepository; use zesdex_cms::domain::repository::SettingsRepository; use zesdex_cms::domain::settings::Settings; @@ -121,7 +123,10 @@ impl AppStateRest { abort_flag: Arc::new(std::sync::atomic::AtomicBool::new(false)), dir_cache: Arc::new(RwLock::new(dir_cache)), mention_index: MentionIndex::new(), - edit_log: EditLog::new(session_dir), + edit_log: JsonlEditLogRepository::new().open(session_dir).unwrap_or_else(|e| { + tracing::warn!("[state] failed to open edit log at '{}': {e}", session_dir.display()); + EditLog::new() + }), session_runtime: Some(SessionRuntime::new(session_dir.to_path_buf())), workflow_engine: WorkflowEngine::new(), mcp_manager: McpManager::new(), diff --git a/crates/zesdex-backend/src/app/subagent/engine.rs b/crates/zesdex-backend/src/app/subagent/engine.rs index 5d84ad2..ba40975 100644 --- a/crates/zesdex-backend/src/app/subagent/engine.rs +++ b/crates/zesdex-backend/src/app/subagent/engine.rs @@ -16,6 +16,7 @@ use crate::tool::{all_tools, tool_defs, tool_is_risky}; use super::context::SubagentContext; use super::event::SubagentEvent; use zesdex_cms::domain::repository::AppConfigRepository; +use zesdex_cms::domain::repository::EditLogRepository; use zesdex_cms::domain::repository::SettingsRepository; /// Maps a subagent's allowed tool names to concrete Tool trait objects and @@ -575,7 +576,7 @@ pub fn run_subagent(ctx: &SubagentContext, tx: &mpsc::Sender) -> .and_then(|n| n.to_str()) .unwrap_or("unknown") .to_string(); - let entry = crate::model::editlog::EditLogEntry { + let entry = zesdex_cms::domain::edit_log::EditLogEntry { ts: chrono::Utc::now().timestamp_millis(), tool: tool_name.clone(), path: path.to_string(), @@ -585,8 +586,10 @@ pub fn run_subagent(ctx: &SubagentContext, tx: &mpsc::Sender) -> origin: tool_ctx_ref.origin.tag(), session_id, }; - let mut el = crate::model::editlog::EditLog::new(&ctx.session_dir); - el.append(entry).ok(); + let repo = zesdex_cms::infrastructure::persistence::edit_log_repo::JsonlEditLogRepository::new(); + if let Ok(mut el) = repo.open(&ctx.session_dir) { + let _ = repo.append(&ctx.session_dir, &mut el, entry); + } } run_res } diff --git a/crates/zesdex-backend/src/model/mod.rs b/crates/zesdex-backend/src/model/mod.rs index dacbf0e..6cbe64d 100644 --- a/crates/zesdex-backend/src/model/mod.rs +++ b/crates/zesdex-backend/src/model/mod.rs @@ -5,9 +5,6 @@ pub mod store { pub use zesdex_entities::seaorm::common::store::*; } -pub mod editlog { - pub use zesdex_entities::seaorm::common::edit_log::*; -} /// Local modules not extracted to workspace crates pub mod msglog; pub mod agent_def;