import { EventEmitter } from "events"; import type { AgentResult } from "./main-agent"; import type { AgentEvent } from "./agent-events"; export type BackgroundTaskStatus = "PENDING" | "RUNNING" | "STUCK" | "COMPLETED" | "CRASHED" | "CANCELLED"; export interface BackgroundTaskSnapshot { taskId: string; sessionId: string; title: string; taskPreview: string; status: BackgroundTaskStatus; createdAt: number; startedAt: number | null; endedAt: number | null; lastActivityAt: number | null; currentStep: number | null; maxSteps: number | null; /** 距最近活动毫秒数(仅 RUNNING / STUCK 有意义) */ idleMs: number | null; result?: AgentResult; error?: string; } export interface BackgroundOptions { /** 无活动多久判定卡死,默认 5 分钟 */ stuckThresholdMs?: number; /** 无活动多久预警,默认 90 秒 */ warnThresholdMs?: number; /** 单个工具默认超时毫秒,默认 2 分钟 */ toolTimeoutMs?: number; /** 后台任务专用事件回调(携带 taskId);避免与 Session.RunOptions.onEvent 同名冲突。 */ onBackgroundEvent?: (taskId: string, event: AgentEvent) => void; } export declare class BackgroundManager extends EventEmitter { private static _instance; private tasks; private constructor(); static getInstance(): BackgroundManager; /** 仅用于测试:重置单例。生产环境不调用。 */ static _resetForTest(): void; /** * 创建一个后台任务(但不启动),返回 taskId。 * 调用方需要自己把 promise 跑起来(通过 executeFn)。 * 这么设计是为了避免 BackgroundManager 依赖 Session(避免循环 import)。 */ createTask(init: { sessionId: string; title: string; task: string; options?: BackgroundOptions; }): { taskId: string; signal: AbortSignal; heartbeat: () => void; onEvent: (event: AgentEvent) => void; toolTimeoutMs: number; bindPromise: (p: Promise) => void; markStart: () => void; markStep: (step: number, maxSteps?: number) => void; markComplete: (result: AgentResult) => void; markCrash: (err: Error) => void; }; /** 取消任务(传播 AbortSignal)。成功取消返回 true;已结束的返回 false。 */ cancel(taskId: string): boolean; /** 获取单个任务快照。 */ getStatus(taskId: string): BackgroundTaskSnapshot | null; /** 列出所有任务快照(按创建时间倒序)。 */ list(): BackgroundTaskSnapshot[]; /** * 健康检查:遍历 RUNNING 任务,按 idleMs 将 STUCK 的任务自动标记(仅当从未标记过)。 * 返回:每个任务的健康报告。 */ healthCheck(): Array; /** 清理已结束超过 retentionMs 的任务(默认 24h)。返回清理数量。 */ cleanup(retentionMs?: number): number; private _get; private _snapshot; } /** 方便的公共函数:获取 BackgroundManager 单例。 */ export declare function getBackgroundManager(): BackgroundManager; //# sourceMappingURL=background-manager.d.ts.map