/** * 蚁群类型系统 — 映射真实蚁群生态 */ // ═══ 蚂蚁角色 ═══ export type AntCaste = "scout" | "worker" | "soldier" | "drone"; export interface AntConfig { caste: AntCaste; model: string; tools: string[]; systemPrompt: string; maxTurns: number; } export const DEFAULT_ANT_CONFIGS: Record> = { scout: { caste: "scout", model: "", tools: ["read", "bash", "grep", "find", "ls"], maxTurns: 8 }, worker: { caste: "worker", model: "", tools: ["read", "bash", "edit", "write", "grep", "find", "ls"], maxTurns: 15 }, soldier: { caste: "soldier", model: "", tools: ["read", "bash", "grep", "find", "ls"], maxTurns: 8 }, drone: { caste: "drone", model: "", tools: ["bash"], maxTurns: 1 }, }; /** Per-caste model overrides from user config */ export type ModelOverrides = Partial>; // ═══ 任务 (Food Source) ═══ export type TaskStatus = "pending" | "claimed" | "active" | "done" | "failed" | "blocked"; export type TaskPriority = 1 | 2 | 3 | 4 | 5; // 1=highest export interface Task { id: string; parentId: string | null; title: string; description: string; caste: AntCaste; // 哪种蚂蚁该做 status: TaskStatus; priority: TaskPriority; files: string[]; // 锁定的文件 context?: string; // Scout 预加载的代码片段 claimedBy: string | null; // ant id result: string | null; error: string | null; spawnedTasks: string[]; // 子任务 id createdAt: number; startedAt: number | null; finishedAt: number | null; } // ═══ 信息素 ═══ export type PheromoneType = | "discovery" // 侦察蚁发现的信息 | "progress" // 工蚁进度 | "warning" // 危险标记(失败、冲突) | "completion" // 完成标记 | "dependency" // 依赖关系 | "repellent"; // 负信息素(任务失败时释放,降低相关任务优先级) export interface Pheromone { id: string; type: PheromoneType; antId: string; antCaste: AntCaste; taskId: string; content: string; files: string[]; strength: number; // 0-1, 随时间挥发 createdAt: number; } // ═══ 蚂蚁实例 ═══ export type AntStatus = "idle" | "working" | "done" | "failed"; export interface Ant { id: string; caste: AntCaste; status: AntStatus; taskId: string | null; pid: number | null; model: string; usage: { input: number; output: number; cost: number; turns: number }; startedAt: number; finishedAt: number | null; } // ═══ 流式回调 ═══ export interface AntStreamEvent { antId: string; caste: AntCaste; taskId: string; delta: string; // text token delta totalText: string; // accumulated text so far } // ═══ 蚁巢状态 ═══ export interface ColonyState { id: string; goal: string; status: "scouting" | "planning_recovery" | "working" | "reviewing" | "done" | "failed" | "budget_exceeded"; tasks: Task[]; ants: Ant[]; pheromones: Pheromone[]; concurrency: ConcurrencyConfig; metrics: ColonyMetrics; maxCost: number | null; // cost budget in USD, null = unlimited modelOverrides: ModelOverrides; createdAt: number; finishedAt: number | null; } export interface ConcurrencyConfig { current: number; min: number; max: number; optimal: number; // 自适应计算的最优值 history: ConcurrencySample[]; lastRateLimitAt?: number; // 最近一次 429 的时间戳 } export interface ConcurrencySample { timestamp: number; concurrency: number; cpuLoad: number; memFree: number; throughput: number; // tasks completed per minute } export interface ColonyMetrics { tasksTotal: number; tasksDone: number; tasksFailed: number; antsSpawned: number; totalCost: number; totalTokens: number; startTime: number; throughputHistory: number[]; // tasks/min 滑动窗口 } /** 蚁群抽象信号 — 观察者只需关注这一个 */ export interface ColonySignal { phase: ColonyState["status"]; progress: number; // 0-1 active: number; // 当前工作中的蚂蚁数 cost: number; message: string; // 一句话描述 }