use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskRunStatus {
Running,
Complete,
Failed,
Stopped,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskType {
Task,
Automation,
Scheduled,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRun {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "task_name")]
pub task_name: String,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "prompt")]
pub prompt: Option<String>,
#[serde(alias = "task_type")]
pub task_type: TaskType,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "config_id")]
pub config_id: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "workflow_name"
)]
pub workflow_name: Option<String>,
#[serde(alias = "status")]
pub status: TaskRunStatus,
#[serde(alias = "sessions_count")]
pub sessions_count: u32,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_sessions"
)]
pub max_sessions: Option<u32>,
#[serde(alias = "auto_continue")]
pub auto_continue: bool,
#[serde(alias = "output_log")]
pub output_log: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "error_message"
)]
pub error_message: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "summary")]
pub summary: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "goal_achieved"
)]
pub goal_achieved: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "remaining_work"
)]
pub remaining_work: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "summary_generated_at"
)]
pub summary_generated_at: Option<String>,
#[serde(alias = "created_at")]
pub created_at: String,
#[serde(alias = "updated_at")]
pub updated_at: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "completed_at"
)]
pub completed_at: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunBackend {
#[serde(alias = "id")]
pub id: String,
#[serde(default, alias = "project_id")]
pub project_id: Option<String>,
#[serde(default, alias = "created_by_user_id")]
pub created_by_user_id: Option<String>,
#[serde(default, alias = "runner_id")]
pub runner_id: Option<String>,
#[serde(alias = "task_name")]
pub task_name: String,
#[serde(alias = "prompt")]
pub prompt: String,
#[serde(alias = "status")]
pub status: TaskRunStatus,
#[serde(alias = "sessions_count")]
pub sessions_count: u32,
#[serde(default, alias = "max_sessions")]
pub max_sessions: Option<u32>,
#[serde(alias = "auto_continue")]
pub auto_continue: bool,
#[serde(default, alias = "output_summary")]
pub output_summary: Option<String>,
#[serde(alias = "full_output_stored")]
pub full_output_stored: bool,
#[serde(default, alias = "error_message")]
pub error_message: Option<String>,
#[serde(default, alias = "duration_seconds")]
pub duration_seconds: Option<i64>,
#[serde(alias = "created_at")]
pub created_at: String,
#[serde(alias = "updated_at")]
pub updated_at: String,
#[serde(default, alias = "completed_at")]
pub completed_at: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunSession {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "task_id", alias = "task_run_id")]
pub task_run_id: String,
#[serde(alias = "session_number")]
pub session_number: u32,
#[serde(alias = "started_at")]
pub started_at: String,
#[serde(default, alias = "ended_at")]
pub ended_at: Option<String>,
#[serde(default, alias = "duration_seconds")]
pub duration_seconds: Option<i64>,
#[serde(default, alias = "output_summary")]
pub output_summary: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskRunFindingCategory {
CodeBug,
Security,
Performance,
Todo,
Enhancement,
ConfigIssue,
TestIssue,
Documentation,
RuntimeIssue,
AlreadyFixed,
ExpectedBehavior,
DataMigration,
Warning,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskRunFindingSeverity {
Critical,
High,
Medium,
Low,
Info,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskRunFindingStatus {
Detected,
InProgress,
NeedsInput,
Resolved,
WontFix,
Deferred,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum TaskRunFindingActionType {
AutoFix,
NeedsUserInput,
Manual,
Informational,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFinding {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "task_id", alias = "task_run_id")]
pub task_run_id: String,
#[serde(alias = "category")]
pub category: TaskRunFindingCategory,
#[serde(alias = "severity")]
pub severity: TaskRunFindingSeverity,
#[serde(alias = "status")]
pub status: TaskRunFindingStatus,
#[serde(alias = "action_type")]
pub action_type: TaskRunFindingActionType,
#[serde(default, alias = "signature_hash")]
pub signature_hash: Option<String>,
#[serde(alias = "title")]
pub title: String,
#[serde(alias = "description")]
pub description: String,
#[serde(default, alias = "resolution")]
pub resolution: Option<String>,
#[serde(default, alias = "file_path")]
pub file_path: Option<String>,
#[serde(default, alias = "line_number")]
pub line_number: Option<u32>,
#[serde(default, alias = "column_number")]
pub column_number: Option<u32>,
#[serde(default, alias = "code_snippet")]
pub code_snippet: Option<String>,
#[serde(alias = "detected_in_session")]
pub detected_in_session: u32,
#[serde(default, alias = "resolved_in_session")]
pub resolved_in_session: Option<u32>,
#[serde(alias = "needs_input")]
pub needs_input: bool,
#[serde(default, alias = "question")]
pub question: Option<String>,
#[serde(default, alias = "input_options")]
pub input_options: Option<Vec<String>>,
#[serde(default, alias = "user_response")]
pub user_response: Option<String>,
#[serde(alias = "detected_at")]
pub detected_at: String,
#[serde(default, alias = "resolved_at")]
pub resolved_at: Option<String>,
#[serde(alias = "updated_at")]
pub updated_at: String,
}
pub type TaskRunFindingResponse = TaskRunFinding;
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFindingSummary {
#[serde(alias = "by_category")]
pub by_category: HashMap<String, u32>,
#[serde(alias = "by_severity")]
pub by_severity: HashMap<String, u32>,
#[serde(alias = "by_status")]
pub by_status: HashMap<String, u32>,
#[serde(alias = "total")]
pub total: u32,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct TaskRunBackendDetail {
#[serde(flatten)]
pub base: TaskRunBackend,
#[serde(default, alias = "sessions")]
pub sessions: Vec<TaskRunSession>,
#[serde(default, alias = "findings")]
pub findings: Vec<TaskRunFinding>,
#[serde(alias = "finding_summary")]
pub finding_summary: TaskRunFindingSummary,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunCreate {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "id")]
pub id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "project_id")]
pub project_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "runner_id")]
pub runner_id: Option<String>,
#[serde(alias = "task_name")]
pub task_name: String,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "prompt")]
pub prompt: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_sessions"
)]
pub max_sessions: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "auto_continue"
)]
pub auto_continue: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "task_type")]
pub task_type: Option<TaskType>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "config_id")]
pub config_id: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "workflow_name"
)]
pub workflow_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "execution_steps_json"
)]
pub execution_steps_json: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "log_sources_json"
)]
pub log_sources_json: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunUpdate {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "status")]
pub status: Option<TaskRunStatus>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "sessions_count"
)]
pub sessions_count: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "output_summary"
)]
pub output_summary: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "full_output"
)]
pub full_output: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "full_output_stored"
)]
pub full_output_stored: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "error_message"
)]
pub error_message: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "duration_seconds"
)]
pub duration_seconds: Option<i64>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "completed_at"
)]
pub completed_at: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFindingCreate {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "id")]
pub id: Option<String>,
#[serde(alias = "category")]
pub category: TaskRunFindingCategory,
#[serde(alias = "severity")]
pub severity: TaskRunFindingSeverity,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "status")]
pub status: Option<TaskRunFindingStatus>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "action_type"
)]
pub action_type: Option<TaskRunFindingActionType>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "signature_hash"
)]
pub signature_hash: Option<String>,
#[serde(alias = "title")]
pub title: String,
#[serde(alias = "description")]
pub description: String,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "resolution")]
pub resolution: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "file_path")]
pub file_path: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "line_number"
)]
pub line_number: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "column_number"
)]
pub column_number: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "code_snippet"
)]
pub code_snippet: Option<String>,
#[serde(alias = "detected_in_session")]
pub detected_in_session: u32,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "needs_input"
)]
pub needs_input: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "question")]
pub question: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "input_options"
)]
pub input_options: Option<Vec<String>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFindingUpdate {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "status")]
pub status: Option<TaskRunFindingStatus>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "resolution")]
pub resolution: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "resolved_in_session"
)]
pub resolved_in_session: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "resolved_at"
)]
pub resolved_at: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "user_response"
)]
pub user_response: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct RunPromptResponseData {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "output")]
pub output: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "response")]
pub response: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct RunPromptResponse {
#[serde(alias = "success")]
pub success: bool,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "task_run_id"
)]
pub task_run_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "session_id")]
pub session_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "state_file")]
pub state_file: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "log_file")]
pub log_file: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "pid")]
pub pid: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "error")]
pub error: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "output")]
pub output: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "data")]
pub data: Option<RunPromptResponseData>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct RunPromptRequest {
#[serde(alias = "name")]
pub name: String,
#[serde(alias = "content")]
pub content: String,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_sessions"
)]
pub max_sessions: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "display_prompt"
)]
pub display_prompt: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "timeout_seconds"
)]
pub timeout_seconds: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "context")]
pub context: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "image_paths"
)]
pub image_paths: Option<Vec<String>>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "video_paths"
)]
pub video_paths: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "trace_path")]
pub trace_path: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_video_frames"
)]
pub max_video_frames: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_trace_screenshots"
)]
pub max_trace_screenshots: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct CreateTaskRunRequest {
#[serde(alias = "task_name")]
pub task_name: String,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "prompt")]
pub prompt: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "task_type")]
pub task_type: Option<TaskType>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "config_id")]
pub config_id: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "workflow_name"
)]
pub workflow_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "max_sessions"
)]
pub max_sessions: Option<u32>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "auto_continue"
)]
pub auto_continue: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "execution_steps_json"
)]
pub execution_steps_json: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "log_sources_json"
)]
pub log_sources_json: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFilters {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "project_id")]
pub project_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "status")]
pub status: Option<TaskRunStatus>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "start_date")]
pub start_date: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "end_date")]
pub end_date: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "offset")]
pub offset: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "limit")]
pub limit: Option<u32>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFindingFilters {
#[serde(default, skip_serializing_if = "Option::is_none", alias = "category")]
pub category: Option<TaskRunFindingCategory>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "severity")]
pub severity: Option<TaskRunFindingSeverity>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "status")]
pub status: Option<TaskRunFindingStatus>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct Pagination {
#[serde(alias = "total")]
pub total: u32,
#[serde(alias = "limit")]
pub limit: u32,
#[serde(alias = "offset")]
pub offset: u32,
#[serde(alias = "has_more")]
pub has_more: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunListResponse {
#[serde(alias = "tasks")]
pub tasks: Vec<TaskRunBackend>,
#[serde(alias = "pagination")]
pub pagination: Pagination,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct TaskRunFindingsListResponse {
#[serde(alias = "findings")]
pub findings: Vec<TaskRunFinding>,
#[serde(alias = "summary")]
pub summary: TaskRunFindingSummary,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct FindingsSummary {
#[serde(alias = "total")]
pub total: u32,
#[serde(alias = "by_severity")]
pub by_severity: HashMap<String, u32>,
#[serde(alias = "by_category")]
pub by_category: HashMap<String, u32>,
#[serde(alias = "by_status")]
pub by_status: HashMap<String, u32>,
#[serde(alias = "recent")]
pub recent: Vec<TaskRunFinding>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct CheckIssueDetail {
#[serde(alias = "file")]
pub file: String,
#[serde(default, alias = "line")]
pub line: Option<u32>,
#[serde(default, alias = "column")]
pub column: Option<u32>,
#[serde(default, alias = "code")]
pub code: Option<String>,
#[serde(alias = "message")]
pub message: String,
#[serde(alias = "severity")]
pub severity: String,
#[serde(alias = "fixable")]
pub fixable: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct IndividualCheckResult {
#[serde(alias = "name")]
pub name: String,
#[serde(alias = "status")]
pub status: String,
#[serde(alias = "duration_ms")]
pub duration_ms: u64,
#[serde(alias = "issues_found")]
pub issues_found: u32,
#[serde(alias = "issues_fixed")]
pub issues_fixed: u32,
#[serde(alias = "files_checked")]
pub files_checked: u32,
#[serde(default, alias = "error_message")]
pub error_message: Option<String>,
#[serde(default, alias = "output")]
pub output: Option<String>,
#[serde(default, alias = "issues")]
pub issues: Vec<CheckIssueDetail>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VerificationStepDetails {
#[serde(alias = "step_id")]
pub step_id: String,
#[serde(alias = "phase")]
pub phase: String,
#[serde(default, alias = "stdout")]
pub stdout: Option<String>,
#[serde(default, alias = "stderr")]
pub stderr: Option<String>,
#[serde(default, alias = "assertions_passed")]
pub assertions_passed: Option<u32>,
#[serde(default, alias = "assertions_total")]
pub assertions_total: Option<u32>,
#[serde(default, alias = "console_output")]
pub console_output: Option<String>,
#[serde(default, alias = "page_snapshot")]
pub page_snapshot: Option<String>,
#[serde(default, alias = "exit_code")]
pub exit_code: Option<i32>,
#[serde(default, alias = "check_results")]
pub check_results: Option<Vec<IndividualCheckResult>>,
}
#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct StepExecutionConfig {
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "action_type"
)]
pub action_type: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "target_image_id"
)]
pub target_image_id: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "target_image_name"
)]
pub target_image_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", alias = "check_type")]
pub check_type: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "timeout_seconds"
)]
pub timeout_seconds: Option<u64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VerificationStepResult {
#[serde(alias = "step_index")]
pub step_index: u32,
#[serde(alias = "step_type")]
pub step_type: String,
#[serde(alias = "step_name")]
pub step_name: String,
#[serde(default, alias = "step_id")]
pub step_id: Option<String>,
#[serde(alias = "success")]
pub success: bool,
#[serde(default, alias = "error")]
pub error: Option<String>,
#[serde(default, alias = "screenshot_path")]
pub screenshot_path: Option<String>,
#[serde(default, alias = "started_at")]
pub started_at: Option<String>,
#[serde(default, alias = "ended_at")]
pub ended_at: Option<String>,
#[serde(alias = "duration_ms")]
pub duration_ms: u64,
#[serde(alias = "config")]
pub config: StepExecutionConfig,
#[serde(default, alias = "verification_details")]
pub verification_details: Option<VerificationStepDetails>,
#[serde(default, alias = "output_data")]
pub output_data: Option<HashMap<String, Value>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct GateEvaluationResult {
#[serde(alias = "gate_name")]
pub gate_name: String,
#[serde(default, alias = "required_step_ids")]
pub required_step_ids: Vec<String>,
#[serde(default, alias = "passed_step_ids")]
pub passed_step_ids: Vec<String>,
#[serde(default, alias = "failed_step_ids")]
pub failed_step_ids: Vec<String>,
#[serde(default, alias = "missing_step_ids")]
pub missing_step_ids: Vec<String>,
#[serde(alias = "passed")]
pub passed: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VerificationPhaseResult {
#[serde(alias = "iteration")]
pub iteration: u32,
#[serde(alias = "all_passed")]
pub all_passed: bool,
#[serde(alias = "total_steps")]
pub total_steps: u32,
#[serde(alias = "passed_steps")]
pub passed_steps: u32,
#[serde(alias = "failed_steps")]
pub failed_steps: u32,
#[serde(alias = "skipped_steps")]
pub skipped_steps: u32,
#[serde(alias = "total_duration_ms")]
pub total_duration_ms: u64,
#[serde(default, alias = "step_results")]
pub step_results: Vec<VerificationStepResult>,
#[serde(alias = "critical_failure")]
pub critical_failure: bool,
#[serde(default, alias = "gate_results")]
pub gate_results: Vec<GateEvaluationResult>,
#[serde(alias = "gate_based_evaluation")]
pub gate_based_evaluation: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VerificationResultResponse {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "task_run_id")]
pub task_run_id: String,
#[serde(alias = "iteration")]
pub iteration: u32,
#[serde(alias = "all_passed")]
pub all_passed: bool,
#[serde(alias = "total_steps")]
pub total_steps: u32,
#[serde(alias = "passed_steps")]
pub passed_steps: u32,
#[serde(alias = "failed_steps")]
pub failed_steps: u32,
#[serde(alias = "skipped_steps")]
pub skipped_steps: u32,
#[serde(alias = "total_duration_ms")]
pub total_duration_ms: u64,
#[serde(alias = "critical_failure")]
pub critical_failure: bool,
#[serde(alias = "result_json")]
pub result_json: VerificationPhaseResult,
#[serde(alias = "created_at")]
pub created_at: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct VerificationResultsListResponse {
#[serde(alias = "task_run_id")]
pub task_run_id: String,
#[serde(default, alias = "results")]
pub results: Vec<VerificationResultResponse>,
#[serde(alias = "count")]
pub count: u32,
#[serde(alias = "passed_iterations")]
pub passed_iterations: u32,
#[serde(alias = "failed_iterations")]
pub failed_iterations: u32,
}