@trenchwork/erosolar 1.1.62 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/capabilities/todoCapability.js +2 -2
  2. package/dist/capabilities/todoCapability.js.map +1 -1
  3. package/dist/config.js +1 -1
  4. package/dist/contracts/v1/agent.d.ts +12 -2
  5. package/dist/contracts/v1/agent.d.ts.map +1 -1
  6. package/dist/core/adversarialCorrection.d.ts +22 -0
  7. package/dist/core/adversarialCorrection.d.ts.map +1 -0
  8. package/dist/core/adversarialCorrection.js +25 -0
  9. package/dist/core/adversarialCorrection.js.map +1 -0
  10. package/dist/core/agent.d.ts +2 -0
  11. package/dist/core/agent.d.ts.map +1 -1
  12. package/dist/core/agent.js +11 -45
  13. package/dist/core/agent.js.map +1 -1
  14. package/dist/core/contextManager.d.ts.map +1 -1
  15. package/dist/core/contextManager.js +5 -2
  16. package/dist/core/contextManager.js.map +1 -1
  17. package/dist/core/errorClassification.d.ts +44 -0
  18. package/dist/core/errorClassification.d.ts.map +1 -0
  19. package/dist/core/errorClassification.js +333 -0
  20. package/dist/core/errorClassification.js.map +1 -0
  21. package/dist/core/failureRegistry.d.ts +30 -0
  22. package/dist/core/failureRegistry.d.ts.map +1 -0
  23. package/dist/core/failureRegistry.js +74 -0
  24. package/dist/core/failureRegistry.js.map +1 -0
  25. package/dist/core/hitl.d.ts.map +1 -1
  26. package/dist/core/hitl.js +8 -0
  27. package/dist/core/hitl.js.map +1 -1
  28. package/dist/core/hostedAuth.d.ts +88 -0
  29. package/dist/core/hostedAuth.d.ts.map +1 -0
  30. package/dist/core/hostedAuth.js +219 -0
  31. package/dist/core/hostedAuth.js.map +1 -0
  32. package/dist/core/quota.d.ts +61 -0
  33. package/dist/core/quota.d.ts.map +1 -0
  34. package/dist/core/quota.js +104 -0
  35. package/dist/core/quota.js.map +1 -0
  36. package/dist/core/quotaErrors.d.ts.map +1 -1
  37. package/dist/core/quotaErrors.js +3 -5
  38. package/dist/core/quotaErrors.js.map +1 -1
  39. package/dist/core/resultVerification.d.ts +3 -2
  40. package/dist/core/resultVerification.d.ts.map +1 -1
  41. package/dist/core/resultVerification.js +3 -2
  42. package/dist/core/resultVerification.js.map +1 -1
  43. package/dist/core/secretStore.d.ts +11 -0
  44. package/dist/core/secretStore.d.ts.map +1 -1
  45. package/dist/core/secretStore.js +25 -0
  46. package/dist/core/secretStore.js.map +1 -1
  47. package/dist/core/slashCommands.d.ts.map +1 -1
  48. package/dist/core/slashCommands.js +4 -0
  49. package/dist/core/slashCommands.js.map +1 -1
  50. package/dist/core/thinkingVerbs.d.ts +31 -0
  51. package/dist/core/thinkingVerbs.d.ts.map +1 -0
  52. package/dist/core/thinkingVerbs.js +58 -0
  53. package/dist/core/thinkingVerbs.js.map +1 -0
  54. package/dist/core/turnGovernor.d.ts +63 -0
  55. package/dist/core/turnGovernor.d.ts.map +1 -0
  56. package/dist/core/turnGovernor.js +94 -0
  57. package/dist/core/turnGovernor.js.map +1 -0
  58. package/dist/core/updateChecker.d.ts.map +1 -1
  59. package/dist/core/updateChecker.js +5 -1
  60. package/dist/core/updateChecker.js.map +1 -1
  61. package/dist/core/usage.d.ts +28 -0
  62. package/dist/core/usage.d.ts.map +1 -0
  63. package/dist/core/usage.js +77 -0
  64. package/dist/core/usage.js.map +1 -0
  65. package/dist/headless/interactiveShell.d.ts +6 -0
  66. package/dist/headless/interactiveShell.d.ts.map +1 -1
  67. package/dist/headless/interactiveShell.js +262 -42
  68. package/dist/headless/interactiveShell.js.map +1 -1
  69. package/dist/plugins/providers/deepseek/index.d.ts.map +1 -1
  70. package/dist/plugins/providers/deepseek/index.js +8 -5
  71. package/dist/plugins/providers/deepseek/index.js.map +1 -1
  72. package/dist/providers/baseProvider.d.ts +5 -13
  73. package/dist/providers/baseProvider.d.ts.map +1 -1
  74. package/dist/providers/baseProvider.js +12 -66
  75. package/dist/providers/baseProvider.js.map +1 -1
  76. package/dist/providers/openaiChatCompletionsProvider.d.ts.map +1 -1
  77. package/dist/providers/openaiChatCompletionsProvider.js +27 -76
  78. package/dist/providers/openaiChatCompletionsProvider.js.map +1 -1
  79. package/dist/providers/resilientProvider.d.ts +2 -9
  80. package/dist/providers/resilientProvider.d.ts.map +1 -1
  81. package/dist/providers/resilientProvider.js +13 -199
  82. package/dist/providers/resilientProvider.js.map +1 -1
  83. package/dist/runtime/agentController.d.ts.map +1 -1
  84. package/dist/runtime/agentController.js +7 -0
  85. package/dist/runtime/agentController.js.map +1 -1
  86. package/dist/shell/toolPresentation.d.ts +7 -0
  87. package/dist/shell/toolPresentation.d.ts.map +1 -1
  88. package/dist/shell/toolPresentation.js +78 -4
  89. package/dist/shell/toolPresentation.js.map +1 -1
  90. package/dist/tools/bashTools.d.ts.map +1 -1
  91. package/dist/tools/bashTools.js +9 -3
  92. package/dist/tools/bashTools.js.map +1 -1
  93. package/dist/tools/grepTools.d.ts.map +1 -1
  94. package/dist/tools/grepTools.js +10 -1
  95. package/dist/tools/grepTools.js.map +1 -1
  96. package/dist/tools/memoryTools.d.ts +7 -0
  97. package/dist/tools/memoryTools.d.ts.map +1 -1
  98. package/dist/tools/memoryTools.js +17 -0
  99. package/dist/tools/memoryTools.js.map +1 -1
  100. package/dist/tools/searchTools.d.ts.map +1 -1
  101. package/dist/tools/searchTools.js +5 -4
  102. package/dist/tools/searchTools.js.map +1 -1
  103. package/dist/tools/todoTools.d.ts +3 -4
  104. package/dist/tools/todoTools.d.ts.map +1 -1
  105. package/dist/tools/todoTools.js +23 -4
  106. package/dist/tools/todoTools.js.map +1 -1
  107. package/dist/tools/webTools.d.ts.map +1 -1
  108. package/dist/tools/webTools.js +3 -1
  109. package/dist/tools/webTools.js.map +1 -1
  110. package/dist/ui/ink/ChatStatic.d.ts.map +1 -1
  111. package/dist/ui/ink/ChatStatic.js +21 -5
  112. package/dist/ui/ink/ChatStatic.js.map +1 -1
  113. package/dist/ui/ink/InkPromptController.d.ts +5 -0
  114. package/dist/ui/ink/InkPromptController.d.ts.map +1 -1
  115. package/dist/ui/ink/InkPromptController.js +16 -6
  116. package/dist/ui/ink/InkPromptController.js.map +1 -1
  117. package/dist/ui/ink/Prompt.d.ts +6 -0
  118. package/dist/ui/ink/Prompt.d.ts.map +1 -1
  119. package/dist/ui/ink/Prompt.js +69 -10
  120. package/dist/ui/ink/Prompt.js.map +1 -1
  121. package/dist/ui/ink/StatusLine.d.ts +6 -0
  122. package/dist/ui/ink/StatusLine.d.ts.map +1 -1
  123. package/dist/ui/ink/StatusLine.js +17 -3
  124. package/dist/ui/ink/StatusLine.js.map +1 -1
  125. package/dist/ui/ink/pasteBuffer.d.ts +44 -0
  126. package/dist/ui/ink/pasteBuffer.d.ts.map +1 -0
  127. package/dist/ui/ink/pasteBuffer.js +73 -0
  128. package/dist/ui/ink/pasteBuffer.js.map +1 -0
  129. package/package.json +1 -1
  130. package/dist/core/index.d.ts +0 -7
  131. package/dist/core/index.d.ts.map +0 -1
  132. package/dist/core/index.js +0 -7
  133. package/dist/core/index.js.map +0 -1
  134. package/dist/core/providerKeys.d.ts +0 -20
  135. package/dist/core/providerKeys.d.ts.map +0 -1
  136. package/dist/core/providerKeys.js +0 -40
  137. package/dist/core/providerKeys.js.map +0 -1
  138. package/dist/plugins/index.d.ts +0 -49
  139. package/dist/plugins/index.d.ts.map +0 -1
  140. package/dist/plugins/index.js +0 -104
  141. package/dist/plugins/index.js.map +0 -1
  142. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts +0 -10
  143. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.d.ts.map +0 -1
  144. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -110
  145. package/dist/plugins/tools/agentSpawning/agentSpawningPlugin.js.map +0 -1
  146. package/dist/plugins/tools/bash/localBashPlugin.d.ts +0 -3
  147. package/dist/plugins/tools/bash/localBashPlugin.d.ts.map +0 -1
  148. package/dist/plugins/tools/bash/localBashPlugin.js +0 -14
  149. package/dist/plugins/tools/bash/localBashPlugin.js.map +0 -1
  150. package/dist/plugins/tools/edit/editPlugin.d.ts +0 -9
  151. package/dist/plugins/tools/edit/editPlugin.d.ts.map +0 -1
  152. package/dist/plugins/tools/edit/editPlugin.js +0 -15
  153. package/dist/plugins/tools/edit/editPlugin.js.map +0 -1
  154. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts +0 -3
  155. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.d.ts.map +0 -1
  156. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -9
  157. package/dist/plugins/tools/enhancedGit/enhancedGitPlugin.js.map +0 -1
  158. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts +0 -3
  159. package/dist/plugins/tools/filesystem/localFilesystemPlugin.d.ts.map +0 -1
  160. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js +0 -14
  161. package/dist/plugins/tools/filesystem/localFilesystemPlugin.js.map +0 -1
  162. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts +0 -3
  163. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.d.ts.map +0 -1
  164. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js +0 -9
  165. package/dist/plugins/tools/gitHistory/gitHistoryPlugin.js.map +0 -1
  166. package/dist/plugins/tools/index.d.ts +0 -3
  167. package/dist/plugins/tools/index.d.ts.map +0 -1
  168. package/dist/plugins/tools/index.js +0 -3
  169. package/dist/plugins/tools/index.js.map +0 -1
  170. package/dist/plugins/tools/integrity/integrityPlugin.d.ts +0 -3
  171. package/dist/plugins/tools/integrity/integrityPlugin.d.ts.map +0 -1
  172. package/dist/plugins/tools/integrity/integrityPlugin.js +0 -31
  173. package/dist/plugins/tools/integrity/integrityPlugin.js.map +0 -1
  174. package/dist/plugins/tools/mcp/mcpPlugin.d.ts +0 -3
  175. package/dist/plugins/tools/mcp/mcpPlugin.d.ts.map +0 -1
  176. package/dist/plugins/tools/mcp/mcpPlugin.js +0 -27
  177. package/dist/plugins/tools/mcp/mcpPlugin.js.map +0 -1
  178. package/dist/plugins/tools/nodeDefaults.d.ts +0 -13
  179. package/dist/plugins/tools/nodeDefaults.d.ts.map +0 -1
  180. package/dist/plugins/tools/nodeDefaults.js +0 -33
  181. package/dist/plugins/tools/nodeDefaults.js.map +0 -1
  182. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +0 -3
  183. package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +0 -1
  184. package/dist/plugins/tools/orchestration/orchestrationPlugin.js +0 -340
  185. package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +0 -1
  186. package/dist/plugins/tools/registry.d.ts +0 -22
  187. package/dist/plugins/tools/registry.d.ts.map +0 -1
  188. package/dist/plugins/tools/registry.js +0 -58
  189. package/dist/plugins/tools/registry.js.map +0 -1
  190. package/dist/plugins/tools/search/localSearchPlugin.d.ts +0 -3
  191. package/dist/plugins/tools/search/localSearchPlugin.d.ts.map +0 -1
  192. package/dist/plugins/tools/search/localSearchPlugin.js +0 -14
  193. package/dist/plugins/tools/search/localSearchPlugin.js.map +0 -1
  194. package/dist/plugins/tools/skills/skillPlugin.d.ts +0 -3
  195. package/dist/plugins/tools/skills/skillPlugin.d.ts.map +0 -1
  196. package/dist/plugins/tools/skills/skillPlugin.js +0 -27
  197. package/dist/plugins/tools/skills/skillPlugin.js.map +0 -1
  198. package/dist/plugins/tools/todo/todoPlugin.d.ts +0 -3
  199. package/dist/plugins/tools/todo/todoPlugin.d.ts.map +0 -1
  200. package/dist/plugins/tools/todo/todoPlugin.js +0 -10
  201. package/dist/plugins/tools/todo/todoPlugin.js.map +0 -1
  202. package/dist/runtime/agentWorkerPool.d.ts +0 -167
  203. package/dist/runtime/agentWorkerPool.d.ts.map +0 -1
  204. package/dist/runtime/agentWorkerPool.js +0 -435
  205. package/dist/runtime/agentWorkerPool.js.map +0 -1
  206. package/dist/shell/autoExecutor.d.ts +0 -70
  207. package/dist/shell/autoExecutor.d.ts.map +0 -1
  208. package/dist/shell/autoExecutor.js +0 -320
  209. package/dist/shell/autoExecutor.js.map +0 -1
  210. package/dist/shell/commandRegistry.d.ts +0 -122
  211. package/dist/shell/commandRegistry.d.ts.map +0 -1
  212. package/dist/shell/commandRegistry.js +0 -355
  213. package/dist/shell/commandRegistry.js.map +0 -1
  214. package/dist/shell/composableMessage.d.ts +0 -178
  215. package/dist/shell/composableMessage.d.ts.map +0 -1
  216. package/dist/shell/composableMessage.js +0 -384
  217. package/dist/shell/composableMessage.js.map +0 -1
  218. package/dist/shell/vimMode.d.ts +0 -66
  219. package/dist/shell/vimMode.d.ts.map +0 -1
  220. package/dist/shell/vimMode.js +0 -435
  221. package/dist/shell/vimMode.js.map +0 -1
  222. package/dist/tools/localExplore.d.ts +0 -38
  223. package/dist/tools/localExplore.d.ts.map +0 -1
  224. package/dist/tools/localExplore.js +0 -30
  225. package/dist/tools/localExplore.js.map +0 -1
@@ -1,167 +0,0 @@
1
- /**
2
- * Agent Worker Pool Module
3
- *
4
- * Provides multi-agent parallelism with automatic load balancing,
5
- * work distribution, and result aggregation for AGI workflows.
6
- *
7
- * Principal Investigator: Bo Shang
8
- * Framework: agi-cli
9
- */
10
- import type { AgentController } from './agentController.js';
11
- import type { AgentEventUnion } from '../contracts/v1/agent.js';
12
- export type WorkerStatus = 'idle' | 'busy' | 'error' | 'offline';
13
- export type BalanceStrategy = 'round-robin' | 'least-busy' | 'random' | 'priority';
14
- export interface AgentWorkerConfig {
15
- /** Unique worker identifier */
16
- id: string;
17
- /** Agent controller factory or instance */
18
- createController: () => Promise<AgentController> | AgentController;
19
- /** Maximum concurrent tasks this worker can handle (default: 1) */
20
- maxConcurrency?: number;
21
- /** Priority for task assignment (higher = preferred) */
22
- priority?: number;
23
- /** Tags for routing specific task types */
24
- tags?: string[];
25
- }
26
- export interface AgentTask<T = string> {
27
- /** Unique task identifier */
28
- id: string;
29
- /** The message/prompt to send to the agent */
30
- message: string;
31
- /** Optional transformer for the result */
32
- transform?: (result: string) => T;
33
- /** Required worker tags (task routed to workers with all these tags) */
34
- requiredTags?: string[];
35
- /** Preferred worker ID (soft preference) */
36
- preferredWorker?: string;
37
- /** Task priority (higher = processed first) */
38
- priority?: number;
39
- /** Timeout in milliseconds */
40
- timeout?: number;
41
- /** Whether to stream events */
42
- streaming?: boolean;
43
- /** Callback for streaming events */
44
- onEvent?: (event: AgentEventUnion) => void;
45
- }
46
- export interface TaskResult<T = string> {
47
- taskId: string;
48
- workerId: string;
49
- success: boolean;
50
- result?: T;
51
- error?: Error;
52
- durationMs: number;
53
- startedAt: number;
54
- completedAt: number;
55
- }
56
- export interface AgentWorkerPoolConfig {
57
- /** Worker configurations */
58
- workers: AgentWorkerConfig[];
59
- /** Load balancing strategy (default: 'least-busy') */
60
- balanceStrategy?: BalanceStrategy;
61
- /** Default task timeout in ms (default: 24 hours - 86400000ms) */
62
- defaultTimeout?: number;
63
- /** Maximum queue size before rejecting tasks (default: 100) */
64
- maxQueueSize?: number;
65
- /** Callback for pool events */
66
- onEvent?: (event: PoolEvent) => void;
67
- }
68
- export interface PoolEvent {
69
- type: 'worker.ready' | 'worker.busy' | 'worker.idle' | 'worker.error' | 'task.queued' | 'task.started' | 'task.completed' | 'task.failed' | 'pool.saturated' | 'pool.drained';
70
- timestamp: number;
71
- workerId?: string;
72
- taskId?: string;
73
- data?: Record<string, unknown>;
74
- }
75
- export interface WorkerInfo {
76
- id: string;
77
- status: WorkerStatus;
78
- activeTasks: number;
79
- completedTasks: number;
80
- failedTasks: number;
81
- tags: string[];
82
- priority: number;
83
- }
84
- export interface PoolStats {
85
- totalWorkers: number;
86
- activeWorkers: number;
87
- idleWorkers: number;
88
- queuedTasks: number;
89
- activeTasks: number;
90
- completedTasks: number;
91
- failedTasks: number;
92
- averageTaskDurationMs: number;
93
- }
94
- export declare class AgentWorkerPool {
95
- private readonly workers;
96
- private readonly taskQueue;
97
- private readonly balanceStrategy;
98
- private readonly defaultTimeout;
99
- private readonly maxQueueSize;
100
- private readonly onEvent;
101
- private roundRobinIndex;
102
- private totalTaskDuration;
103
- private completedTaskCount;
104
- private processing;
105
- constructor(config: AgentWorkerPoolConfig);
106
- /**
107
- * Initialize all workers
108
- */
109
- initialize(): Promise<void>;
110
- /**
111
- * Submit a task to the pool
112
- */
113
- submit<T>(task: AgentTask<T>): Promise<TaskResult<T>>;
114
- /**
115
- * Submit multiple tasks and wait for all results
116
- */
117
- submitAll<T>(tasks: AgentTask<T>[]): Promise<TaskResult<T>[]>;
118
- /**
119
- * Submit multiple tasks and process results as they complete
120
- */
121
- submitStream<T>(tasks: AgentTask<T>[]): AsyncGenerator<TaskResult<T>>;
122
- /**
123
- * Process queued tasks
124
- */
125
- private processQueue;
126
- /**
127
- * Execute a task on a worker
128
- */
129
- private executeTask;
130
- /**
131
- * Select a worker based on the balancing strategy
132
- */
133
- private selectWorker;
134
- /**
135
- * Get available workers filtered by task requirements
136
- */
137
- private getAvailableWorkers;
138
- /**
139
- * Get information about all workers
140
- */
141
- getWorkerInfo(): WorkerInfo[];
142
- /**
143
- * Get pool statistics
144
- */
145
- getStats(): PoolStats;
146
- /**
147
- * Cancel all queued tasks
148
- */
149
- cancelAll(): number;
150
- private emit;
151
- private sleep;
152
- }
153
- /**
154
- * Create an agent worker pool with the given configuration
155
- */
156
- export declare function createAgentWorkerPool(config: AgentWorkerPoolConfig): AgentWorkerPool;
157
- /**
158
- * Create a simple agent task
159
- */
160
- export declare function createAgentTask<T = string>(id: string, message: string, options?: Partial<Omit<AgentTask<T>, 'id' | 'message'>>): AgentTask<T>;
161
- declare const _default: {
162
- AgentWorkerPool: typeof AgentWorkerPool;
163
- createAgentWorkerPool: typeof createAgentWorkerPool;
164
- createAgentTask: typeof createAgentTask;
165
- };
166
- export default _default;
167
- //# sourceMappingURL=agentWorkerPool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agentWorkerPool.d.ts","sourceRoot":"","sources":["../../src/runtime/agentWorkerPool.ts"],"names":[],"mappings":"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"}
@@ -1,435 +0,0 @@
1
- /**
2
- * Agent Worker Pool Module
3
- *
4
- * Provides multi-agent parallelism with automatic load balancing,
5
- * work distribution, and result aggregation for AGI workflows.
6
- *
7
- * Principal Investigator: Bo Shang
8
- * Framework: agi-cli
9
- */
10
- // ============================================================================
11
- // Agent Worker
12
- // ============================================================================
13
- class AgentWorker {
14
- id;
15
- maxConcurrency;
16
- priority;
17
- tags;
18
- controller = null;
19
- createController;
20
- activeTasks = 0;
21
- _completedTasks = 0;
22
- _failedTasks = 0;
23
- _status = 'idle';
24
- constructor(config) {
25
- this.id = config.id;
26
- this.createController = config.createController;
27
- this.maxConcurrency = config.maxConcurrency ?? 1;
28
- this.priority = config.priority ?? 0;
29
- this.tags = new Set(config.tags ?? []);
30
- }
31
- get status() {
32
- return this._status;
33
- }
34
- get completedTasks() {
35
- return this._completedTasks;
36
- }
37
- get failedTasks() {
38
- return this._failedTasks;
39
- }
40
- get currentLoad() {
41
- return this.activeTasks;
42
- }
43
- get isAvailable() {
44
- return this._status !== 'offline' && this._status !== 'error' && this.activeTasks < this.maxConcurrency;
45
- }
46
- hasTags(requiredTags) {
47
- return requiredTags.every(tag => this.tags.has(tag));
48
- }
49
- async initialize() {
50
- if (this.controller)
51
- return;
52
- try {
53
- this.controller = await this.createController();
54
- this._status = 'idle';
55
- }
56
- catch (error) {
57
- this._status = 'error';
58
- throw error;
59
- }
60
- }
61
- async execute(task) {
62
- if (!this.controller) {
63
- await this.initialize();
64
- }
65
- if (!this.controller) {
66
- throw new Error(`Worker ${this.id} failed to initialize`);
67
- }
68
- this.activeTasks++;
69
- this._status = this.activeTasks >= this.maxConcurrency ? 'busy' : 'idle';
70
- try {
71
- let result = '';
72
- if (task.streaming && task.onEvent) {
73
- // Streaming mode: collect events and final result
74
- for await (const event of this.controller.send(task.message)) {
75
- task.onEvent(event);
76
- if (event.type === 'message.complete') {
77
- result = event.content;
78
- }
79
- else if (event.type === 'message.delta') {
80
- result += event.content;
81
- }
82
- }
83
- }
84
- else {
85
- // Non-streaming: collect complete response
86
- for await (const event of this.controller.send(task.message)) {
87
- if (event.type === 'message.complete') {
88
- result = event.content;
89
- }
90
- else if (event.type === 'message.delta') {
91
- result += event.content;
92
- }
93
- }
94
- }
95
- this._completedTasks++;
96
- return task.transform ? task.transform(result) : result;
97
- }
98
- catch (error) {
99
- this._failedTasks++;
100
- throw error;
101
- }
102
- finally {
103
- this.activeTasks--;
104
- this._status = this.activeTasks > 0 ? 'busy' : 'idle';
105
- }
106
- }
107
- getInfo() {
108
- return {
109
- id: this.id,
110
- status: this._status,
111
- activeTasks: this.activeTasks,
112
- completedTasks: this._completedTasks,
113
- failedTasks: this._failedTasks,
114
- tags: Array.from(this.tags),
115
- priority: this.priority,
116
- };
117
- }
118
- }
119
- // ============================================================================
120
- // Agent Worker Pool
121
- // ============================================================================
122
- export class AgentWorkerPool {
123
- workers = new Map();
124
- taskQueue = [];
125
- balanceStrategy;
126
- defaultTimeout;
127
- maxQueueSize;
128
- onEvent;
129
- roundRobinIndex = 0;
130
- totalTaskDuration = 0;
131
- completedTaskCount = 0;
132
- processing = false;
133
- constructor(config) {
134
- this.balanceStrategy = config.balanceStrategy ?? 'least-busy';
135
- this.defaultTimeout = config.defaultTimeout ?? 24 * 60 * 60 * 1000; // 24 hours default timeout
136
- this.maxQueueSize = config.maxQueueSize ?? 100;
137
- this.onEvent = config.onEvent ?? (() => { });
138
- for (const workerConfig of config.workers) {
139
- const worker = new AgentWorker(workerConfig);
140
- this.workers.set(worker.id, worker);
141
- }
142
- }
143
- /**
144
- * Initialize all workers
145
- */
146
- async initialize() {
147
- const initPromises = Array.from(this.workers.values()).map(async (worker) => {
148
- try {
149
- await worker.initialize();
150
- this.emit({ type: 'worker.ready', workerId: worker.id, timestamp: Date.now() });
151
- }
152
- catch (error) {
153
- this.emit({
154
- type: 'worker.error',
155
- workerId: worker.id,
156
- timestamp: Date.now(),
157
- data: { error: error instanceof Error ? error.message : String(error) },
158
- });
159
- }
160
- });
161
- await Promise.allSettled(initPromises);
162
- }
163
- /**
164
- * Submit a task to the pool
165
- */
166
- async submit(task) {
167
- if (this.taskQueue.length >= this.maxQueueSize) {
168
- throw new Error('Task queue is full');
169
- }
170
- return new Promise((resolve, reject) => {
171
- this.taskQueue.push({
172
- task: task,
173
- resolve: resolve,
174
- reject,
175
- queuedAt: Date.now(),
176
- });
177
- this.emit({
178
- type: 'task.queued',
179
- taskId: task.id,
180
- timestamp: Date.now(),
181
- data: { queueLength: this.taskQueue.length },
182
- });
183
- if (this.taskQueue.length >= this.maxQueueSize) {
184
- this.emit({ type: 'pool.saturated', timestamp: Date.now() });
185
- }
186
- // Trigger processing
187
- this.processQueue();
188
- });
189
- }
190
- /**
191
- * Submit multiple tasks and wait for all results
192
- */
193
- async submitAll(tasks) {
194
- const promises = tasks.map(task => this.submit(task));
195
- return Promise.all(promises);
196
- }
197
- /**
198
- * Submit multiple tasks and process results as they complete
199
- */
200
- async *submitStream(tasks) {
201
- const pending = tasks.map(task => this.submit(task));
202
- while (pending.length > 0) {
203
- const result = await Promise.race(pending.map((p, i) => p.then(r => ({ result: r, index: i }))));
204
- pending.splice(result.index, 1);
205
- yield result.result;
206
- }
207
- }
208
- /**
209
- * Process queued tasks
210
- */
211
- async processQueue() {
212
- if (this.processing)
213
- return;
214
- this.processing = true;
215
- try {
216
- while (this.taskQueue.length > 0) {
217
- const worker = this.selectWorker(this.taskQueue[0]?.task);
218
- if (!worker) {
219
- // No available workers, wait and retry
220
- await this.sleep(50);
221
- continue;
222
- }
223
- const item = this.taskQueue.shift();
224
- if (!item)
225
- break;
226
- // Execute task asynchronously (don't await)
227
- this.executeTask(worker, item.task, item.resolve, item.reject, item.queuedAt);
228
- }
229
- if (this.taskQueue.length === 0) {
230
- this.emit({ type: 'pool.drained', timestamp: Date.now() });
231
- }
232
- }
233
- finally {
234
- this.processing = false;
235
- }
236
- }
237
- /**
238
- * Execute a task on a worker
239
- */
240
- async executeTask(worker, task, resolve, reject, queuedAt) {
241
- const startedAt = Date.now();
242
- this.emit({
243
- type: 'task.started',
244
- taskId: task.id,
245
- workerId: worker.id,
246
- timestamp: startedAt,
247
- data: { queueWaitMs: startedAt - queuedAt },
248
- });
249
- this.emit({ type: 'worker.busy', workerId: worker.id, timestamp: startedAt });
250
- try {
251
- const timeout = task.timeout ?? this.defaultTimeout;
252
- const result = await Promise.race([
253
- worker.execute(task),
254
- new Promise((_, rej) => setTimeout(() => rej(new Error(`Task ${task.id} timed out after ${timeout}ms`)), timeout)),
255
- ]);
256
- const completedAt = Date.now();
257
- const durationMs = completedAt - startedAt;
258
- this.totalTaskDuration += durationMs;
259
- this.completedTaskCount++;
260
- this.emit({
261
- type: 'task.completed',
262
- taskId: task.id,
263
- workerId: worker.id,
264
- timestamp: completedAt,
265
- data: { durationMs },
266
- });
267
- resolve({
268
- taskId: task.id,
269
- workerId: worker.id,
270
- success: true,
271
- result,
272
- durationMs,
273
- startedAt,
274
- completedAt,
275
- });
276
- }
277
- catch (error) {
278
- const completedAt = Date.now();
279
- const err = error instanceof Error ? error : new Error(String(error));
280
- this.emit({
281
- type: 'task.failed',
282
- taskId: task.id,
283
- workerId: worker.id,
284
- timestamp: completedAt,
285
- data: { error: err.message },
286
- });
287
- resolve({
288
- taskId: task.id,
289
- workerId: worker.id,
290
- success: false,
291
- error: err,
292
- durationMs: completedAt - startedAt,
293
- startedAt,
294
- completedAt,
295
- });
296
- }
297
- finally {
298
- if (worker.isAvailable) {
299
- this.emit({ type: 'worker.idle', workerId: worker.id, timestamp: Date.now() });
300
- }
301
- // Continue processing queue
302
- this.processQueue();
303
- }
304
- }
305
- /**
306
- * Select a worker based on the balancing strategy
307
- */
308
- selectWorker(task) {
309
- const available = this.getAvailableWorkers(task);
310
- if (available.length === 0)
311
- return null;
312
- // Check for preferred worker
313
- if (task?.preferredWorker) {
314
- const preferred = available.find(w => w.id === task.preferredWorker);
315
- if (preferred)
316
- return preferred;
317
- }
318
- switch (this.balanceStrategy) {
319
- case 'round-robin': {
320
- const worker = available[this.roundRobinIndex % available.length];
321
- this.roundRobinIndex++;
322
- return worker;
323
- }
324
- case 'random': {
325
- const idx = Math.floor(Math.random() * available.length);
326
- return available[idx];
327
- }
328
- case 'priority': {
329
- // Sort by priority (descending) then by load (ascending)
330
- available.sort((a, b) => {
331
- if (b.priority !== a.priority)
332
- return b.priority - a.priority;
333
- return a.currentLoad - b.currentLoad;
334
- });
335
- return available[0];
336
- }
337
- case 'least-busy':
338
- default: {
339
- // Sort by current load (ascending)
340
- available.sort((a, b) => a.currentLoad - b.currentLoad);
341
- return available[0];
342
- }
343
- }
344
- }
345
- /**
346
- * Get available workers filtered by task requirements
347
- */
348
- getAvailableWorkers(task) {
349
- const workers = Array.from(this.workers.values()).filter(w => w.isAvailable);
350
- if (task?.requiredTags && task.requiredTags.length > 0) {
351
- return workers.filter(w => w.hasTags(task.requiredTags));
352
- }
353
- return workers;
354
- }
355
- /**
356
- * Get information about all workers
357
- */
358
- getWorkerInfo() {
359
- return Array.from(this.workers.values()).map(w => w.getInfo());
360
- }
361
- /**
362
- * Get pool statistics
363
- */
364
- getStats() {
365
- const workerInfos = this.getWorkerInfo();
366
- const activeWorkers = workerInfos.filter(w => w.status === 'busy').length;
367
- const activeTasks = workerInfos.reduce((sum, w) => sum + w.activeTasks, 0);
368
- const completedTasks = workerInfos.reduce((sum, w) => sum + w.completedTasks, 0);
369
- const failedTasks = workerInfos.reduce((sum, w) => sum + w.failedTasks, 0);
370
- return {
371
- totalWorkers: workerInfos.length,
372
- activeWorkers,
373
- idleWorkers: workerInfos.length - activeWorkers,
374
- queuedTasks: this.taskQueue.length,
375
- activeTasks,
376
- completedTasks,
377
- failedTasks,
378
- averageTaskDurationMs: this.completedTaskCount > 0
379
- ? this.totalTaskDuration / this.completedTaskCount
380
- : 0,
381
- };
382
- }
383
- /**
384
- * Cancel all queued tasks
385
- */
386
- cancelAll() {
387
- const cancelled = this.taskQueue.length;
388
- while (this.taskQueue.length > 0) {
389
- const item = this.taskQueue.shift();
390
- if (item) {
391
- item.reject(new Error('Task cancelled'));
392
- }
393
- }
394
- return cancelled;
395
- }
396
- emit(event) {
397
- try {
398
- this.onEvent(event);
399
- }
400
- catch {
401
- // Ignore callback errors
402
- }
403
- }
404
- sleep(ms) {
405
- return new Promise(resolve => setTimeout(resolve, ms));
406
- }
407
- }
408
- // ============================================================================
409
- // Convenience Functions
410
- // ============================================================================
411
- /**
412
- * Create an agent worker pool with the given configuration
413
- */
414
- export function createAgentWorkerPool(config) {
415
- return new AgentWorkerPool(config);
416
- }
417
- /**
418
- * Create a simple agent task
419
- */
420
- export function createAgentTask(id, message, options) {
421
- return {
422
- id,
423
- message,
424
- ...options,
425
- };
426
- }
427
- // ============================================================================
428
- // Exports
429
- // ============================================================================
430
- export default {
431
- AgentWorkerPool,
432
- createAgentWorkerPool,
433
- createAgentTask,
434
- };
435
- //# sourceMappingURL=agentWorkerPool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agentWorkerPool.js","sourceRoot":"","sources":["../../src/runtime/agentWorkerPool.ts"],"names":[],"mappings":"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"}