diff options
Diffstat (limited to 'makima/src/server/state.rs')
| -rw-r--r-- | makima/src/server/state.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/makima/src/server/state.rs b/makima/src/server/state.rs index c579f0f..02a2328 100644 --- a/makima/src/server/state.rs +++ b/makima/src/server/state.rs @@ -118,6 +118,21 @@ pub struct MergeResultNotification { pub conflicts: Option<Vec<String>>, } +/// Notification for PR creation results. +#[derive(Debug, Clone)] +pub struct PrResultNotification { + /// ID of the task for which PR was created + pub task_id: Uuid, + /// Whether the PR creation succeeded + pub success: bool, + /// Message describing the result + pub message: String, + /// PR URL if creation succeeded + pub pr_url: Option<String>, + /// PR number if creation succeeded + pub pr_number: Option<i32>, +} + /// Notification for supervisor questions requiring user feedback. #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] #[serde(rename_all = "camelCase")] @@ -527,6 +542,8 @@ pub struct AppState { pub supervisor_questions: broadcast::Sender<SupervisorQuestionNotification>, /// Broadcast channel for merge result notifications pub merge_results: broadcast::Sender<MergeResultNotification>, + /// Broadcast channel for PR creation result notifications + pub pr_results: broadcast::Sender<PrResultNotification>, /// Pending supervisor questions awaiting user response (keyed by question_id) pub pending_questions: DashMap<Uuid, PendingSupervisorQuestion>, /// Responses to supervisor questions (keyed by question_id) @@ -560,6 +577,7 @@ impl AppState { let (task_completions, _) = broadcast::channel(256); // For supervisor task monitoring let (supervisor_questions, _) = broadcast::channel(256); // For supervisor questions to users let (merge_results, _) = broadcast::channel(256); // For merge operation results + let (pr_results, _) = broadcast::channel(256); // For PR creation results // Initialize JWT verifier from environment (optional) // Requires SUPABASE_URL and either SUPABASE_JWT_PUBLIC_KEY (RS256) or SUPABASE_JWT_SECRET (HS256) @@ -603,6 +621,7 @@ impl AppState { task_completions, supervisor_questions, merge_results, + pr_results, pending_questions: DashMap::new(), question_responses: DashMap::new(), daemon_connections: DashMap::new(), @@ -699,6 +718,13 @@ impl AppState { let _ = self.merge_results.send(notification); } + /// Broadcast a PR creation result notification to all subscribers. + /// + /// Used to notify waiting handlers when a PR creation operation completes. + pub fn broadcast_pr_result(&self, notification: PrResultNotification) { + let _ = self.pr_results.send(notification); + } + /// Add a pending supervisor question and broadcast it. pub fn add_supervisor_question( &self, |
