summaryrefslogtreecommitdiff
path: root/makima/src/server/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/server/state.rs')
-rw-r--r--makima/src/server/state.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/makima/src/server/state.rs b/makima/src/server/state.rs
index 15fec6b..5c5e24f 100644
--- a/makima/src/server/state.rs
+++ b/makima/src/server/state.rs
@@ -521,6 +521,19 @@ pub enum DaemonCommand {
/// Restart the daemon process
RestartDaemon,
+ /// Trigger OAuth re-authentication on this daemon
+ TriggerReauth {
+ #[serde(rename = "requestId")]
+ request_id: Uuid,
+ },
+
+ /// Submit auth code for pending reauth
+ SubmitAuthCode {
+ #[serde(rename = "requestId")]
+ request_id: Uuid,
+ code: String,
+ },
+
/// Apply a patch to a task's worktree (for cross-daemon merge).
/// Sent by server when routing MergePatchToSupervisor to the supervisor's daemon.
ApplyPatchToWorktree {
@@ -562,6 +575,15 @@ pub struct DaemonConnectionInfo {
pub worktrees_directory: Option<String>,
}
+/// Status of a daemon reauth request (stored in state for polling).
+#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
+pub struct DaemonReauthStatus {
+ pub request_id: Uuid,
+ pub status: String,
+ pub login_url: Option<String>,
+ pub error: Option<String>,
+}
+
/// Configuration paths for ML models (used for lazy loading).
#[derive(Clone)]
pub struct ModelConfig {
@@ -616,6 +638,8 @@ pub struct AppState {
pub pending_worktree_info: DashMap<Uuid, oneshot::Sender<WorktreeInfoResponse>>,
/// 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))
+ pub daemon_reauth_status: DashMap<(Uuid, Uuid), DaemonReauthStatus>,
}
impl AppState {
@@ -694,6 +718,7 @@ impl AppState {
jwt_verifier,
pending_worktree_info: DashMap::new(),
tts_engine: OnceCell::new(),
+ daemon_reauth_status: DashMap::new(),
}
}
@@ -1201,6 +1226,41 @@ impl AppState {
}
// =========================================================================
+ // Daemon Reauth Status
+ // =========================================================================
+
+ /// Store a daemon reauth status update (from daemon's ReauthStatus message).
+ pub fn set_daemon_reauth_status(
+ &self,
+ daemon_id: Uuid,
+ request_id: Uuid,
+ status: String,
+ login_url: Option<String>,
+ error: Option<String>,
+ ) {
+ self.daemon_reauth_status.insert(
+ (daemon_id, request_id),
+ DaemonReauthStatus {
+ request_id,
+ status,
+ login_url,
+ error,
+ },
+ );
+ }
+
+ /// Get a daemon reauth status (for frontend polling).
+ pub fn get_daemon_reauth_status(
+ &self,
+ daemon_id: Uuid,
+ request_id: Uuid,
+ ) -> Option<DaemonReauthStatus> {
+ self.daemon_reauth_status
+ .get(&(daemon_id, request_id))
+ .map(|entry| entry.value().clone())
+ }
+
+ // =========================================================================
// Supervisor Notifications
// =========================================================================