diff options
| author | soryu <soryu@soryu.co> | 2026-03-09 17:20:52 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-09 17:20:52 +0000 |
| commit | f49aaa39a32661b54c109ba002d24cbdf73f4ea3 (patch) | |
| tree | 457f763ebf0eb5f8d0c66b147f8de5acf8e378fe /makima/src/server/state.rs | |
| parent | afaae8aba719bf74404a64b57426ecc6a7e70775 (diff) | |
| download | soryu-f49aaa39a32661b54c109ba002d24cbdf73f4ea3.tar.gz soryu-f49aaa39a32661b54c109ba002d24cbdf73f4ea3.zip | |
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
Diffstat (limited to 'makima/src/server/state.rs')
| -rw-r--r-- | makima/src/server/state.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/makima/src/server/state.rs b/makima/src/server/state.rs index 5c5e24f..83ac2e8 100644 --- a/makima/src/server/state.rs +++ b/makima/src/server/state.rs @@ -194,6 +194,16 @@ pub struct SupervisorQuestionResponse { pub responded_at: chrono::DateTime<chrono::Utc>, } +/// Worktree diff response from daemon +#[derive(Debug, Clone, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct WorktreeDiffResponse { + pub task_id: Uuid, + pub success: bool, + pub diff: String, + pub error: Option<String>, +} + /// Worktree info response from daemon #[derive(Debug, Clone, serde::Serialize)] #[serde(rename_all = "camelCase")] @@ -211,6 +221,26 @@ pub struct WorktreeInfoResponse { pub error: Option<String>, } +/// Task diff result from daemon +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TaskDiffResult { + pub task_id: Uuid, + pub success: bool, + pub diff: Option<String>, + pub error: Option<String>, +} + +/// Worktree commit response from daemon +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct WorktreeCommitResponse { + pub task_id: Uuid, + pub success: bool, + pub commit_sha: Option<String>, + pub error: Option<String>, +} + /// Command sent from server to daemon. #[derive(Debug, Clone, serde::Serialize)] #[serde(tag = "type", rename_all = "camelCase")] @@ -491,6 +521,13 @@ pub enum DaemonCommand { task_id: Uuid, }, + /// Commit changes in a task worktree + CommitWorktree { + #[serde(rename = "taskId")] + task_id: Uuid, + message: Option<String>, + }, + /// Create a git checkpoint (stage changes, commit, record stats) CreateCheckpoint { #[serde(rename = "taskId")] @@ -636,6 +673,10 @@ pub struct AppState { pub jwt_verifier: Option<JwtVerifier>, /// Pending worktree info requests awaiting daemon response (keyed by task_id) pub pending_worktree_info: DashMap<Uuid, oneshot::Sender<WorktreeInfoResponse>>, + /// Pending task diff requests awaiting daemon response (keyed by task_id) + pub pending_task_diff: DashMap<Uuid, oneshot::Sender<TaskDiffResult>>, + /// Pending worktree commit requests awaiting daemon response (keyed by task_id) + pub pending_worktree_commit: DashMap<Uuid, oneshot::Sender<WorktreeCommitResponse>>, /// Lazily-loaded TTS engine (initialized on first Speak connection) pub tts_engine: OnceCell<Box<dyn TtsEngine>>, /// Daemon reauth status storage (keyed by (daemon_id, request_id)) @@ -717,6 +758,8 @@ impl AppState { tool_keys: DashMap::new(), jwt_verifier, pending_worktree_info: DashMap::new(), + pending_task_diff: DashMap::new(), + pending_worktree_commit: DashMap::new(), tts_engine: OnceCell::new(), daemon_reauth_status: DashMap::new(), } |
