From f49aaa39a32661b54c109ba002d24cbdf73f4ea3 Mon Sep 17 00:00:00 2001 From: soryu Date: Mon, 9 Mar 2026 17:20:52 +0000 Subject: feat: worktree diff/commit endpoints and frontend diff viewing (#88) * feat: soryu-co/soryu - makima: Fix worktree info failing when origin ref is missing * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Add worktree commit endpoint and diff endpoint for regular users * feat: soryu-co/soryu - makima: Add frontend diff viewing with clickable worktree files --- makima/src/server/handlers/mesh_daemon.rs | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'makima/src/server/handlers/mesh_daemon.rs') diff --git a/makima/src/server/handlers/mesh_daemon.rs b/makima/src/server/handlers/mesh_daemon.rs index d5ef1f9..139db70 100644 --- a/makima/src/server/handlers/mesh_daemon.rs +++ b/makima/src/server/handlers/mesh_daemon.rs @@ -530,6 +530,14 @@ pub enum DaemonMessage { #[serde(rename = "prNumber")] pr_number: Option, }, + /// Response to GetWorktreeDiff command + WorktreeDiffResult { + #[serde(rename = "taskId")] + task_id: Uuid, + success: bool, + diff: Option, + error: Option, + }, /// Response to GetWorktreeInfo command WorktreeInfoResult { #[serde(rename = "taskId")] @@ -557,6 +565,23 @@ pub enum DaemonMessage { /// Error message if failed error: Option, }, + /// Response to GetTaskDiff command + TaskDiff { + #[serde(rename = "taskId")] + task_id: Uuid, + success: bool, + diff: Option, + error: Option, + }, + /// Response to CommitWorktree command + WorktreeCommitResult { + #[serde(rename = "taskId")] + task_id: Uuid, + success: bool, + #[serde(rename = "commitSha")] + commit_sha: Option, + error: Option, + }, /// Request to merge a task's patch to supervisor's worktree (cross-daemon case). /// Sent when a task completes on a different daemon than its supervisor. MergePatchToSupervisor { @@ -2358,6 +2383,41 @@ async fn handle_daemon_connection(socket: WebSocket, state: SharedState, auth_re let _ = tx.send(response); } } + Ok(DaemonMessage::TaskDiff { task_id, success, diff, error }) => { + tracing::debug!( + task_id = %task_id, + success = success, + "Task diff result received" + ); + + // Fulfill pending task diff request if any + if let Some((_, tx)) = state.pending_task_diff.remove(&task_id) { + let _ = tx.send(crate::server::state::TaskDiffResult { + task_id, + success, + diff, + error, + }); + } + } + Ok(DaemonMessage::WorktreeCommitResult { task_id, success, commit_sha, error }) => { + tracing::debug!( + task_id = %task_id, + success = success, + commit_sha = ?commit_sha, + "Worktree commit result received" + ); + + // Fulfill pending worktree commit request if any + if let Some((_, tx)) = state.pending_worktree_commit.remove(&task_id) { + let _ = tx.send(crate::server::state::WorktreeCommitResponse { + task_id, + success, + commit_sha, + error, + }); + } + } Ok(DaemonMessage::MergePatchToSupervisor { task_id, supervisor_task_id, -- cgit v1.2.3