feat: AI Worker 平台 MVP v1.0.0 - 多租户/项目管理/AI Worker/任务编排/HITL审核/成本治理

This commit is contained in:
2026-08-12 13:31:24 +08:00
parent 3c32d4ce3c
commit 8a4090fe41
+283
View File
@@ -0,0 +1,283 @@
// ============ User & Auth ============
export type UserRole = 'super_admin' | 'tenant_admin' | 'project_manager' | 'reviewer' | 'worker';
export interface User {
id: number;
email: string;
username: string;
role: UserRole;
user_type: string;
tenant_id: number;
is_active: boolean;
avatar?: string;
phone?: string;
worker_id?: number;
created_at: string;
}
export interface AuthResponse {
access_token: string;
token_type?: string;
user: User;
}
export interface LoginPayload {
email: string;
password: string;
}
export interface RegisterPayload {
email: string;
username: string;
password: string;
role: string;
tenant_slug: string;
tenant_name: string;
}
// ============ Tenant ============
export interface Tenant {
id: number;
name: string;
slug: string;
description?: string;
is_active: boolean;
created_at: string;
}
export interface TenantCreate {
name: string;
slug: string;
description?: string;
}
// ============ Project ============
export type ProjectStatus = 'draft' | 'planning' | 'in_progress' | 'review' | 'accepted' | 'archived';
export interface Project {
id: number;
name: string;
description: string;
status: string;
owner_id: number;
tenant_id: number;
start_date?: string;
end_date?: string;
budget_limit_cents?: number;
acceptance_criteria: string;
tags: string;
created_at: string;
updated_at: string;
}
export interface ProjectCreate {
name: string;
description?: string;
start_date?: string;
end_date?: string;
budget_limit_cents?: number;
acceptance_criteria?: string;
tags?: string;
}
export interface ProjectStats {
total_tasks: number;
pending_tasks: number;
in_progress_tasks: number;
review_tasks: number;
done_tasks: number;
total_cost_cents: number;
total_artifacts: number;
pending_reviews: number;
}
// ============ Task ============
export type TaskStatus =
| 'pending'
| 'assigned'
| 'in_progress'
| 'review'
| 'done'
| 'rejected'
| 'cancelled';
export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
export interface Task {
id: number;
project_id: number;
title: string;
description: string;
status: TaskStatus;
priority: TaskPriority;
assignee_id?: number;
worker_id?: number;
task_type: string;
input_data: string;
output_data?: string;
requires_review: boolean;
review_status?: string;
due_date?: string;
started_at?: string;
completed_at?: string;
tenant_id: number;
created_at: string;
updated_at: string;
}
export interface TaskCreate {
title: string;
description?: string;
priority?: TaskPriority;
task_type?: string;
input_data?: string;
requires_review?: boolean;
assignee_id?: number;
worker_id?: number;
due_date?: string;
depends_on?: string;
}
export interface TaskAssignPayload {
assignee_id?: number;
worker_id?: number;
}
export interface TaskExecutePayload {
override_input?: string;
max_retries?: number;
}
export interface ExecutionResult {
task_id: number;
status: string;
output: string;
token_usage: number;
cost_cents: number;
duration_ms: number;
error?: string;
artifact_id?: number;
}
// ============ Worker ============
export interface Worker {
id: number;
name: string;
description: string;
provider: string;
model_name: string;
base_url?: string;
temperature: number;
system_prompt: string;
tools: string;
max_cost_per_task_cents?: number;
max_cost_per_month_cents?: number;
status: string;
is_active: boolean;
current_task_count: number;
max_concurrent_tasks: number;
tenant_id: number;
created_at: string;
updated_at: string;
}
export interface WorkerCreate {
name: string;
description?: string;
provider: string;
model_name: string;
api_key?: string;
base_url?: string;
temperature?: number;
system_prompt?: string;
tools?: string;
max_cost_per_task_cents?: number;
max_cost_per_month_cents?: number;
available_hours?: string;
max_concurrent_tasks?: number;
}
export interface WorkerTestResult {
success: boolean;
response: string;
latency_ms: number;
error?: string;
}
// ============ Review ============
export interface Review {
id: number;
task_id: number;
project_id: number;
review_type: string;
status: string;
reviewer_id?: number;
reviewer_role?: string;
review_content: string;
reviewer_comment: string;
auto_check_result: string;
submitted_at: string;
reviewed_at?: string;
tenant_id: number;
created_at: string;
}
export interface ReviewDecisionPayload {
comment: string;
status: 'approved' | 'rejected';
}
// ============ Artifact ============
export interface Artifact {
id: number;
task_id: number;
project_id: number;
title: string;
content: string;
artifact_type: string;
version: number;
is_latest: string;
created_by_user_id?: number;
created_by_worker_id?: number;
sources: string;
tenant_id: number;
created_at: string;
}
// ============ Dashboard ============
export interface DashboardStats {
projects: number;
tasks: number;
active_workers: number;
pending_reviews: number;
task_status: Record<string, number>;
cost: {
total_cost_cents: number;
total_calls: number;
by_model: Array<{
model: string;
cost_cents: number;
tokens: number;
calls: number;
}>;
};
user: {
id: number;
username: string;
role: string;
};
}
// ============ Generic ============
export interface ApiError {
detail: string;
}