summaryrefslogtreecommitdiff
path: root/makima/src/server
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-03-04 16:47:12 +0000
committerGitHub <noreply@github.com>2026-03-04 16:47:12 +0000
commitec9738a069e61529be040eff065318972b8a11e2 (patch)
treed1b15d3b22d4980acff4fba8a12b99920035025c /makima/src/server
parent78cb861412850889424ae7d5ae5cd952a2b90295 (diff)
downloadsoryu-ec9738a069e61529be040eff065318972b8a11e2.tar.gz
soryu-ec9738a069e61529be040eff065318972b8a11e2.zip
feat: task slide-out panel, 3-way reconcile toggle, daemon reauth fix (#85)
* WIP: heartbeat checkpoint * WIP: heartbeat checkpoint * feat: soryu-co/soryu - makima: Fix daemon reauth flow for new claude setup-token output format * feat: soryu-co/soryu - makima: Update frontend reconcile toggle to three-way switch * feat: soryu-co/soryu - makima: Add task slide-out panel to directive page
Diffstat (limited to 'makima/src/server')
-rw-r--r--makima/src/server/handlers/mesh_daemon.rs8
-rw-r--r--makima/src/server/handlers/mesh_supervisor.rs16
2 files changed, 14 insertions, 10 deletions
diff --git a/makima/src/server/handlers/mesh_daemon.rs b/makima/src/server/handlers/mesh_daemon.rs
index 30439a4..d5ef1f9 100644
--- a/makima/src/server/handlers/mesh_daemon.rs
+++ b/makima/src/server/handlers/mesh_daemon.rs
@@ -354,13 +354,16 @@ pub enum DaemonMessage {
ReauthStatus {
#[serde(rename = "requestId")]
request_id: Uuid,
- /// Status: "url_ready", "completed", "failed"
+ /// Status: "pending", "url_ready", "completed", "failed"
status: String,
/// OAuth login URL (present when status is "url_ready")
#[serde(rename = "loginUrl")]
login_url: Option<String>,
/// Error message (present when status is "failed")
error: Option<String>,
+ /// Whether the OAuth token has been saved to disk
+ #[serde(rename = "tokenSaved", default)]
+ token_saved: bool,
},
/// Response to RetryCompletionAction command
CompletionActionResult {
@@ -1634,13 +1637,14 @@ async fn handle_daemon_connection(socket: WebSocket, state: SharedState, auth_re
"OAuth login URL available - user should open this in browser"
);
}
- Ok(DaemonMessage::ReauthStatus { request_id, status, login_url, error }) => {
+ Ok(DaemonMessage::ReauthStatus { request_id, status, login_url, error, token_saved }) => {
tracing::info!(
daemon_id = %daemon_uuid,
request_id = %request_id,
status = %status,
login_url = ?login_url,
error = ?error,
+ token_saved = token_saved,
"Daemon reauth status update"
);
diff --git a/makima/src/server/handlers/mesh_supervisor.rs b/makima/src/server/handlers/mesh_supervisor.rs
index 8c36500..9d2dce7 100644
--- a/makima/src/server/handlers/mesh_supervisor.rs
+++ b/makima/src/server/handlers/mesh_supervisor.rs
@@ -1715,21 +1715,21 @@ pub async fn ask_question(
let is_directive_context = directive_id.is_some() && contract_id.is_none();
// For directive context, check reconcile_mode to determine behavior
- let directive_reconcile_mode = if let Some(did) = directive_id {
+ let directive_reconcile_mode: String = if let Some(did) = directive_id {
if is_directive_context {
match repository::get_directive_for_owner(pool, owner_id, did).await {
- Ok(Some(d)) => d.reconcile_mode,
- Ok(None) => false,
+ Ok(Some(d)) => d.reconcile_mode.clone(),
+ Ok(None) => "auto".to_string(),
Err(e) => {
tracing::warn!(error = %e, "Failed to get directive for reconcile_mode check");
- false
+ "auto".to_string()
}
}
} else {
- false
+ "auto".to_string()
}
} else {
- false
+ "auto".to_string()
};
// Add the question (use Uuid::nil() for contract_id in directive-only context)
@@ -1813,7 +1813,7 @@ pub async fn ask_question(
}
// Determine if we should block indefinitely (phaseguard or directive reconcile mode)
- let use_phaseguard = request.phaseguard || (is_directive_context && directive_reconcile_mode);
+ let use_phaseguard = request.phaseguard || (is_directive_context && (directive_reconcile_mode == "semi-auto" || directive_reconcile_mode == "manual"));
// Poll for response with timeout
// - Phaseguard: block indefinitely until user responds
@@ -1823,7 +1823,7 @@ pub async fn ask_question(
// Cap at 5 minutes per HTTP request (well under Claude Code's 10-min limit).
// The CLI will automatically reconnect via the poll endpoint.
300
- } else if is_directive_context && !directive_reconcile_mode {
+ } else if is_directive_context && directive_reconcile_mode == "auto" {
30
} else {
request.timeout_seconds.max(1) as u64