| 1 | /** |
| 2 | * Agent Store - 全局 AI Agent 任务状态管理 |
| 3 | * |
| 4 | * 目录结构: |
| 5 | * ├── index.ts - 主入口(本文件) |
| 6 | * ├── agent.types.ts - 类型定义 |
| 7 | * ├── agent.constants.ts - 常量定义 |
| 8 | * ├── agent.state.ts - 初始状态 |
| 9 | * ├── agent.methods.ts - 核心方法 |
| 10 | * ├── handlers/ - 处理器目录 |
| 11 | * │ └── action.handlers.ts - Action 处理器 |
| 12 | * ├── utils/ - 工具函数目录 |
| 13 | * │ ├── refs.ts - Refs 管理 |
| 14 | * │ ├── message.ts - 消息工具 |
| 15 | * │ └── progress.ts - 进度工具 |
| 16 | * └── task-instance/ - 任务实例目录 |
| 17 | * ├── index.ts - 模块入口 |
| 18 | * ├── task-instance.types.ts - 类型定义 |
| 19 | * ├── TaskInstance.ts - 核心类 |
| 20 | * ├── message.handler.ts - 消息处理 |
| 21 | * ├── workflow.handler.ts - 工作流处理 |
| 22 | * └── sse.handler.ts - SSE 消息处理 |
| 23 | */ |
| 24 | |
| 25 | import { create } from 'zustand' |
| 26 | import { combine } from 'zustand/middleware' |
| 27 | import { createStoreMethods } from './agent.methods' |
| 28 | import { getInitialState } from './agent.state' |
| 29 | import { TaskInstance } from './task-instance' |
| 30 | import { createMessageUtils } from './utils/message' |
| 31 | import { createAgentRefs, resetAgentRefs } from './utils/refs' |
| 32 | |
| 33 | // ============ TaskInstance 管理(不需要持久化,放在 store 外部) ============ |
| 34 | |
| 35 | /** 任务实例映射表 */ |
| 36 | const taskInstances = new Map<string, TaskInstance>() |
| 37 | |
| 38 | /** |
| 39 | * 获取任务实例 |
| 40 | */ |
| 41 | export function getTaskInstance(instanceId: string): TaskInstance | undefined { |
| 42 | return taskInstances.get(instanceId) |
| 43 | } |
| 44 | |
| 45 | /** |
| 46 | * 创建或获取任务实例 |
| 47 | */ |
| 48 | export function getOrCreateTaskInstance( |
| 49 | taskId: string, |
| 50 | ctx: import('./task-instance').ITaskInstanceContext, |
| 51 | ): TaskInstance { |
| 52 | const existing = taskInstances.get(taskId) |
| 53 | if (existing) { |
| 54 | return existing |
| 55 | } |
| 56 | const instance = new TaskInstance(taskId, ctx) |
| 57 | taskInstances.set(taskId, instance) |
| 58 | return instance |
| 59 | } |
| 60 | |
| 61 | /** |
| 62 | * 删除任务实例 |
| 63 | */ |
| 64 | export function removeTaskInstance(instanceId: string): boolean { |
| 65 | const instance = taskInstances.get(instanceId) |
| 66 | if (instance) { |
| 67 | instance.abort() // 确保 SSE 连接被中止 |
| 68 | taskInstances.delete(instanceId) |
| 69 | return true |
| 70 | } |
| 71 | return false |
| 72 | } |
| 73 | |
| 74 | /** |
| 75 | * 迁移任务实例(从临时ID到真实ID) |
| 76 | */ |
| 77 | export function migrateTaskInstance(fromId: string, toId: string): void { |
| 78 | const instance = taskInstances.get(fromId) |
| 79 | if (instance && fromId !== toId) { |
| 80 | taskInstances.delete(fromId) |
| 81 | taskInstances.set(toId, instance) |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | /** |
| 86 | * 获取所有任务实例(用于调试) |
| 87 | */ |
| 88 | export function getAllTaskInstances(): Map<string, TaskInstance> { |
| 89 | return new Map(taskInstances) |
| 90 | } |
| 91 | |
| 92 | /** |
| 93 | * 清理所有任务实例 |
| 94 | */ |
| 95 | export function clearAllTaskInstances(): void { |
| 96 | taskInstances.forEach((instance) => { |
| 97 | instance.abort() |
| 98 | }) |
| 99 | taskInstances.clear() |
| 100 | } |
| 101 | |
| 102 | // ============ Store 定义 ============ |
| 103 | |
| 104 | export const useAgentStore = create( |
| 105 | combine(getInitialState(), (set, get) => { |
| 106 | // 创建 Refs |
| 107 | const refs = createAgentRefs() |
| 108 | |
| 109 | // 创建工具 |
| 110 | const messageUtils = createMessageUtils({ refs, set: set as any, get }) |
| 111 | |
| 112 | // 重置 Refs 的函数 |
| 113 | const resetRefs = () => resetAgentRefs(refs) |
| 114 | |
| 115 | // 创建并返回所有方法 |
| 116 | return createStoreMethods({ |
| 117 | refs, |
| 118 | set: set as any, |
| 119 | get, |
| 120 | messageUtils, |
| 121 | resetRefs, |
| 122 | }) |
| 123 | }), |
| 124 | ) |
| 125 | |
| 126 | // ============ 导出 ============ |
| 127 | |
| 128 | export * from './agent.constants' |
| 129 | // 导出状态相关 |
| 130 | export { getDefaultTaskData, getInitialState } from './agent.state' |
| 131 | |
| 132 | // 导出类型 |
| 133 | export * from './agent.types' |
| 134 | |
| 135 | // 导出处理器 |
| 136 | export { ActionRegistry } from './handlers' |
| 137 | export type { IActionHandler } from './handlers' |
| 138 | |
| 139 | // 导出 TaskInstance 相关 |
| 140 | export { createTaskInstance, TaskInstance } from './task-instance' |
| 141 | export type { ITaskInstanceContext, ISSECallbacks as ITaskSSECallbacks } from './task-instance' |
| 142 | |
| 143 | // 导出工具(用于扩展) |
| 144 | export { createAgentRefs, createMessageUtils } from './utils' |
| 145 | export type { IAgentRefs, MessageUtils } from './utils' |
| 146 |