summaryrefslogtreecommitdiff
path: root/makima/src/daemon/api
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-20 12:47:39 +0000
committersoryu <soryu@soryu.co>2026-01-20 12:56:58 +0000
commit36233b7cb834223878aa075bb379846eb6d7bb05 (patch)
treed3eec4bc5fd30d41afe2d9df82ac62ca3f405a65 /makima/src/daemon/api
parent7d5af3d817cf8aa62c9ee12b7f78a17730182e1d (diff)
downloadsoryu-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.rs35
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
+ }
}