//! Contract type template definitions. //! //! Defines the available contract types and their workflow phases. use serde::{Deserialize, Serialize}; use utoipa::ToSchema; // ============================================================================= // Contract Type Templates (Workflow Definitions) // ============================================================================= /// A contract type template defining a workflow #[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] #[serde(rename_all = "camelCase")] pub struct ContractTypeTemplate { /// Unique identifier (e.g., 'simple', 'specification', 'feature-development') pub id: String, /// Display name pub name: String, /// What this contract type is for pub description: String, /// Ordered list of phases in the workflow pub phases: Vec, /// Starting phase pub default_phase: String, /// True for built-in types ('simple', 'specification') pub is_builtin: bool, } /// Get all available contract type templates pub fn all_contract_types() -> Vec { vec![ simple_contract_type(), specification_contract_type(), execute_contract_type(), ] } /// Simple contract type with basic plan/execute workflow fn simple_contract_type() -> ContractTypeTemplate { ContractTypeTemplate { id: "simple".to_string(), name: "Simple".to_string(), description: "A basic workflow for straightforward tasks with planning and execution phases." .to_string(), phases: vec!["plan".to_string(), "execute".to_string()], default_phase: "plan".to_string(), is_builtin: true, } } /// Specification contract type with full research-to-review workflow fn specification_contract_type() -> ContractTypeTemplate { ContractTypeTemplate { id: "specification".to_string(), name: "Specification".to_string(), description: "A comprehensive workflow for complex projects requiring research, specification, planning, execution, and review.".to_string(), phases: vec![ "research".to_string(), "specify".to_string(), "plan".to_string(), "execute".to_string(), "review".to_string(), ], default_phase: "research".to_string(), is_builtin: true, } } /// Execute-only contract type for immediate task execution fn execute_contract_type() -> ContractTypeTemplate { ContractTypeTemplate { id: "execute".to_string(), name: "Execute".to_string(), description: "A minimal workflow with only an execute phase for immediate task execution without planning documents.".to_string(), phases: vec!["execute".to_string()], default_phase: "execute".to_string(), is_builtin: true, } }