diff options
| author | soryu <soryu@soryu.co> | 2026-01-18 17:19:10 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-18 17:19:10 +0000 |
| commit | ea71a1d55a0036b0452e8b2b4f95022b19274343 (patch) | |
| tree | 38088d2dc905ff789099888d091aa3c48ee2f4af /makima/src/daemon | |
| parent | f84a7f2d820f6f432be2b1d78d6bf833b5b19380 (diff) | |
| download | soryu-ea71a1d55a0036b0452e8b2b4f95022b19274343.tar.gz soryu-ea71a1d55a0036b0452e8b2b4f95022b19274343.zip | |
Add phaseguard flag to supervisor ask command
When phaseguard is enabled (--phaseguard flag), the supervisor's ask
command will block indefinitely waiting for user response instead of
timing out after the default 1 hour. This ensures that phase transitions
requiring user confirmation cannot proceed without explicit approval.
Changes:
- Add phaseguard field to AskQuestionRequest in server handler
- Add phaseguard field to AskQuestionRequest in API client
- Add --phaseguard CLI flag to AskArgs
- Update supervisor_ask() to accept phaseguard parameter
- Modify ask_question handler to skip timeout check when phaseguard=true
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'makima/src/daemon')
| -rw-r--r-- | makima/src/daemon/api/supervisor.rs | 4 | ||||
| -rw-r--r-- | makima/src/daemon/cli/supervisor.rs | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/makima/src/daemon/api/supervisor.rs b/makima/src/daemon/api/supervisor.rs index 8b3d480..adeda22 100644 --- a/makima/src/daemon/api/supervisor.rs +++ b/makima/src/daemon/api/supervisor.rs @@ -71,6 +71,8 @@ pub struct AskQuestionRequest { #[serde(skip_serializing_if = "Option::is_none")] pub context: Option<String>, pub timeout_seconds: i32, + /// When true, the request will block indefinitely until user responds (no timeout) + pub phaseguard: bool, } // Generic response type for JSON output @@ -202,12 +204,14 @@ impl ApiClient { choices: Vec<String>, context: Option<String>, timeout_seconds: i32, + phaseguard: bool, ) -> Result<JsonValue, ApiError> { let req = AskQuestionRequest { question: question.to_string(), choices, context, timeout_seconds, + phaseguard, }; self.post("/api/v1/mesh/supervisor/questions", &req).await } diff --git a/makima/src/daemon/cli/supervisor.rs b/makima/src/daemon/cli/supervisor.rs index db30cf1..0e2da32 100644 --- a/makima/src/daemon/cli/supervisor.rs +++ b/makima/src/daemon/cli/supervisor.rs @@ -180,6 +180,10 @@ pub struct AskArgs { /// Timeout in seconds (default: 3600 = 1 hour) #[arg(long, default_value = "3600")] pub timeout: i32, + + /// Block indefinitely until user responds (no timeout) + #[arg(long, default_value = "false")] + pub phaseguard: bool, } /// Arguments for status command (get contract status including phase). |
