import type { WorkflowCheckpoint } from '../agent/workflow.js'; import type { RunRegistryInterface } from './run-registry-interface.js'; import type { TokenUsage } from '../types.js'; /** 单条事件 */ export interface BufferedEvent { event: string; data: any; } /** 工具调用记录(用于重连时恢复 UI 状态) */ export interface RunToolCallRecord { toolCallId: string; toolName: string; displayName?: string; input?: Record; output?: any; error?: string; duration?: number; status: 'running' | 'success' | 'error'; } /** 事件订阅回调 */ export type EventSubscriber = (evt: BufferedEvent) => void; /** Agent 运行状态 */ export type RunStatus = 'running' | 'done' | 'error'; /** 活跃运行记录 */ export interface ActiveRun { threadId: number | string; sessionId: string; traceId?: string; status: RunStatus; eventBuffer: BufferedEvent[]; fullContent: string; reasoningText: string; toolCalls: RunToolCallRecord[]; widgets: Array<{ widgetId: string; html: string; title: string; height?: number; }>; artifacts: Array<{ artifactId: string; filename: string; mimeType: string; size: number; url: string; description?: string; }>; checkpoints: WorkflowCheckpoint[]; stepCount: number; toolCallCount: number; usage?: TokenUsage; error?: string; messageId?: number | string; /** 会话暂停标志:true 表示用户请求暂停,agent loop 将在 turn 边界挂起 */ paused?: boolean; subscribers: Set; createdAt: number; lastFlushAt: number; lastFailedStage?: string; /** 扩展字段(上层可附加任意数据) */ meta?: Record; } /** 可跨进程读取的运行态快照(不包含实时订阅者) */ export type RunSnapshot = Omit & { updatedAt: number; }; /** 运行态持久化存储接口(上层实现) */ export interface RunStateStore { list(): RunSnapshot[]; upsert(snapshot: RunSnapshot): void; remove(threadId: number | string): void; } /** 内存实现(默认)— 使用 Map 实现 O(1) upsert/remove */ export declare class InMemoryRunStateStore implements RunStateStore { private snapshots; list(): RunSnapshot[]; upsert(snapshot: RunSnapshot): void; remove(threadId: number | string): void; } export declare class RunRegistry implements RunRegistryInterface { private runs; private runStateStore; private cleanupTimer; /** 批量持久化定时器(脏标记模式下定期 flush) */ private persistTimer; /** 脏 run 集合(标记后由 persistTimer 批量写入) */ private dirtyRuns; /** 空闲超时回调(上层注入,用于中止 Engine) */ private onIdleTimeout?; /** 是否启用空闲超时检测 */ private idleTimeoutEnabled; /** 空闲超时阈值(毫秒) */ private idleTimeoutMs; constructor(store?: RunStateStore, options?: { idleTimeoutMs?: number; onIdleTimeout?: (threadId: number | string, sessionId: string) => void; enableIdleTimeout?: boolean; }); /** 设置空闲超时回调 */ setIdleTimeoutHandler(handler: (threadId: number | string, sessionId: string) => void): void; /** 启用/禁用空闲超时检测 */ setIdleTimeoutEnabled(enabled: boolean): void; /** 注册一个新的运行 */ startRun(threadId: number | string, sessionId: string, traceId?: string): ActiveRun; getRun(threadId: number | string): ActiveRun | null; hasActiveRun(threadId: number | string): boolean; /** 标记运行为暂停(agent loop 将在 turn 边界挂起)。返回是否存在该运行。 */ pauseAgent(threadId: number | string): boolean; /** 恢复暂停的运行。返回是否存在该运行。 */ resumeAgent(threadId: number | string): boolean; /** 查询运行是否处于暂停状态 */ isPaused(threadId: number | string): boolean; /** 添加事件到缓冲区并通知所有订阅者 */ addEvent(threadId: number | string, event: string, data: any): void; finishRun(threadId: number | string, status: 'done' | 'error', error?: string): void; setStepCount(threadId: number | string, count: number): void; setMessageId(threadId: number | string, messageId: number | string): void; subscribe(threadId: number | string, callback: EventSubscriber): () => void; getBufferedEvents(threadId: number | string): BufferedEvent[]; getRunSnapshot(threadId: number | string): RunSnapshot | null; listRunSnapshots(): RunSnapshot[]; getFailedCheckpoint(threadId: number | string): WorkflowCheckpoint | null; setLastFailedStage(threadId: number | string, stageId: string): void; removeRun(threadId: number | string): void; getActiveThreadIds(): (number | string)[]; destroy(): void; private upsertCheckpoint; private notifySubscribers; private toSnapshot; /** P0 #1: 标记 run 为脏,由 persistTimer 批量持久化 */ private markDirty; /** 立即持久化单个 run(用于 finishRun 等关键节点) */ private flushRun; /** P0 #1: 批量持久化所有脏 run(由 persistTimer 定期调用) */ private flushDirtyRuns; /** 启动批量持久化定时器 */ private startPersistTimer; private startCleanup; } //# sourceMappingURL=run-registry.d.ts.map