返回 AiToEarn
index.ts
根目录 / project / aitoearn-web / src / store / agent / index.ts
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
146 lines TYPESCRIPT