summaryrefslogtreecommitdiff
path: root/makima/src/daemon/api/contract.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-20 17:23:34 +0000
committersoryu <soryu@soryu.co>2026-01-20 17:23:46 +0000
commit055e2c4a72e3b2331a18fdc9f8132ef990af7e38 (patch)
tree75b92637b9132594b76a5a86f5f854bca1ddee49 /makima/src/daemon/api/contract.rs
parent54c6d409e1d5667f4ab7f63a43e1459e68575c94 (diff)
downloadsoryu-055e2c4a72e3b2331a18fdc9f8132ef990af7e38.tar.gz
soryu-055e2c4a72e3b2331a18fdc9f8132ef990af7e38.zip
Update CLI to show log history as well
Diffstat (limited to 'makima/src/daemon/api/contract.rs')
-rw-r--r--makima/src/daemon/api/contract.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/makima/src/daemon/api/contract.rs b/makima/src/daemon/api/contract.rs
index f7fa696..955fe41 100644
--- a/makima/src/daemon/api/contract.rs
+++ b/makima/src/daemon/api/contract.rs
@@ -51,12 +51,39 @@ pub struct UpdateContractRequest {
pub description: Option<String>,
}
+/// Request to create a new contract.
+#[derive(Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CreateContractRequest {
+ pub name: String,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub contract_type: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub initial_phase: Option<String>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub autonomous_loop: Option<bool>,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub phase_guard: Option<bool>,
+}
+
impl ApiClient {
/// List all contracts for the authenticated user.
pub async fn list_contracts(&self) -> Result<JsonValue, ApiError> {
self.get("/api/v1/contracts").await
}
+ /// Create a new contract.
+ pub async fn create_contract(&self, req: CreateContractRequest) -> Result<JsonValue, ApiError> {
+ self.post("/api/v1/contracts", &req).await
+ }
+
+ /// Get a contract with its tasks, files, and repositories.
+ pub async fn get_contract(&self, contract_id: Uuid) -> Result<JsonValue, ApiError> {
+ self.get(&format!("/api/v1/contracts/{}", contract_id)).await
+ }
+
/// Delete a contract.
pub async fn delete_contract(&self, contract_id: Uuid) -> Result<(), ApiError> {
self.delete(&format!("/api/v1/contracts/{}", contract_id))
@@ -191,4 +218,10 @@ impl ApiClient {
self.post(&format!("/api/v1/contracts/{}/daemon/files", contract_id), &req)
.await
}
+
+ /// Get task output history.
+ pub async fn get_task_output(&self, task_id: Uuid) -> Result<JsonValue, ApiError> {
+ self.get(&format!("/api/v1/mesh/tasks/{}/output", task_id))
+ .await
+ }
}