//! 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<String>,
/// 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<ContractTypeTemplate> {
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,
}
}