Skip to main content

claw10_domain/
task.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use uuid::Uuid;
4
5use crate::agent::AgentId;
6use crate::budget::Budget;
7use crate::evidence::Evidence;
8use crate::mission::MissionId;
9use crate::model::RiskLevel;
10
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12pub struct TaskId(pub Uuid);
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct Task {
16    pub id: TaskId,
17    pub mission_id: MissionId,
18    pub parent_task_id: Option<TaskId>,
19    pub owner_id: AgentId,
20    pub objective: String,
21    pub dependencies: Vec<TaskId>,
22    pub risk: RiskLevel,
23    pub budget: Budget,
24    pub deadline: Option<DateTime<Utc>>,
25    pub input: serde_json::Value,
26    pub output_contract: serde_json::Value,
27    pub evidence_contract: Vec<String>,
28    pub retry_policy: RetryPolicy,
29    pub idempotency_key: Option<String>,
30    pub lifecycle_mode: String,
31    pub state: TaskState,
32    pub evidence: Vec<Evidence>,
33    pub created_at: DateTime<Utc>,
34    pub updated_at: DateTime<Utc>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
38pub enum TaskState {
39    Created,
40    Ready,
41    Claimed,
42    PolicyCheck,
43    Denied,
44    AwaitingApproval,
45    Running,
46    Waiting,
47    EvidenceSubmitted,
48    Verifying,
49    RevisionRequired,
50    Accepted,
51    Closed,
52    Failed,
53    Retrying,
54    Escalated,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct RetryPolicy {
59    pub max_retries: u32,
60    pub backoff_seconds: u64,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
64pub struct TaskDependency {
65    pub task_id: TaskId,
66    pub depends_on: TaskId,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct TaskLease {
71    pub task_id: TaskId,
72    pub agent_id: AgentId,
73    pub acquired_at: DateTime<Utc>,
74    pub expires_at: DateTime<Utc>,
75}