diff options
| author | soryu <soryu@soryu.co> | 2026-01-20 12:47:39 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-20 12:56:58 +0000 |
| commit | 36233b7cb834223878aa075bb379846eb6d7bb05 (patch) | |
| tree | d3eec4bc5fd30d41afe2d9df82ac62ca3f405a65 /makima/src/daemon/api | |
| parent | 7d5af3d817cf8aa62c9ee12b7f78a17730182e1d (diff) | |
| download | soryu-36233b7cb834223878aa075bb379846eb6d7bb05.tar.gz soryu-36233b7cb834223878aa075bb379846eb6d7bb05.zip | |
feat: Add contract lifecycle management commands (complete and resume-contract)
Add supervisor commands for properly managing contract lifecycle:
- `makima supervisor complete` - Mark a contract as complete and stop the supervisor
- `makima supervisor resume-contract` - Resume a completed contract (reactivate it)
Also adds `api_key` field to TaskConfig for authenticated API calls.
This consolidates the lifecycle management features from the contract-lifecycle-cleanup branch.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'makima/src/daemon/api')
| -rw-r--r-- | makima/src/daemon/api/supervisor.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/makima/src/daemon/api/supervisor.rs b/makima/src/daemon/api/supervisor.rs index 1dc699e..26d786c 100644 --- a/makima/src/daemon/api/supervisor.rs +++ b/makima/src/daemon/api/supervisor.rs @@ -248,4 +248,39 @@ impl ApiClient { self.get(&format!("/api/v1/mesh/tasks/{}/output", task_id)) .await } + + /// Mark a contract as complete. + /// This will update contract status to 'completed', stop the supervisor, and clean up worktrees. + pub async fn supervisor_complete(&self, contract_id: Uuid) -> Result<JsonValue, ApiError> { + #[derive(Serialize)] + #[serde(rename_all = "camelCase")] + struct CompleteContractRequest { + status: String, + } + let req = CompleteContractRequest { + status: "completed".to_string(), + }; + self.put(&format!("/api/v1/contracts/{}", contract_id), &req) + .await + } + + /// Resume a completed contract (reactivate it). + /// + /// This updates the contract status from 'completed' back to 'active' + /// and optionally respawns the supervisor task. + pub async fn supervisor_resume_contract( + &self, + contract_id: Uuid, + ) -> Result<JsonValue, ApiError> { + #[derive(Serialize)] + #[serde(rename_all = "camelCase")] + struct ResumeContractRequest { + status: String, + } + let req = ResumeContractRequest { + status: "active".to_string(), + }; + self.put(&format!("/api/v1/contracts/{}", contract_id), &req) + .await + } } |
