digital-workers 2.1.1 → 2.3.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.
- package/CHANGELOG.md +23 -0
- package/README.md +136 -180
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +34 -21
- package/dist/actions.js.map +1 -1
- package/dist/agent-comms.d.ts +438 -0
- package/dist/agent-comms.d.ts.map +1 -0
- package/dist/agent-comms.js +677 -0
- package/dist/agent-comms.js.map +1 -0
- package/dist/approve.d.ts +40 -8
- package/dist/approve.d.ts.map +1 -1
- package/dist/approve.js +86 -20
- package/dist/approve.js.map +1 -1
- package/dist/ask.d.ts +38 -7
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +85 -25
- package/dist/ask.js.map +1 -1
- package/dist/browse.d.ts +223 -0
- package/dist/browse.d.ts.map +1 -0
- package/dist/browse.js +392 -0
- package/dist/browse.js.map +1 -0
- package/dist/capability-tiers.d.ts +230 -0
- package/dist/capability-tiers.d.ts.map +1 -0
- package/dist/capability-tiers.js +388 -0
- package/dist/capability-tiers.js.map +1 -0
- package/dist/cascade-context.d.ts +523 -0
- package/dist/cascade-context.d.ts.map +1 -0
- package/dist/cascade-context.js +494 -0
- package/dist/cascade-context.js.map +1 -0
- package/dist/client.d.ts +162 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +64 -0
- package/dist/client.js.map +1 -0
- package/dist/decide.d.ts +42 -6
- package/dist/decide.d.ts.map +1 -1
- package/dist/decide.js +54 -11
- package/dist/decide.js.map +1 -1
- package/dist/do.d.ts +36 -7
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +82 -39
- package/dist/do.js.map +1 -1
- package/dist/error-escalation.d.ts +416 -0
- package/dist/error-escalation.d.ts.map +1 -0
- package/dist/error-escalation.js +656 -0
- package/dist/error-escalation.js.map +1 -0
- package/dist/generate.d.ts +48 -7
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +49 -8
- package/dist/generate.js.map +1 -1
- package/dist/goals.d.ts +10 -9
- package/dist/goals.d.ts.map +1 -1
- package/dist/goals.js +30 -24
- package/dist/goals.js.map +1 -1
- package/dist/image.d.ts +189 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +528 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +59 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -2
- package/dist/index.js.map +1 -1
- package/dist/is.d.ts +45 -10
- package/dist/is.d.ts.map +1 -1
- package/dist/is.js +56 -21
- package/dist/is.js.map +1 -1
- package/dist/kpis.d.ts +24 -15
- package/dist/kpis.d.ts.map +1 -1
- package/dist/kpis.js +16 -14
- package/dist/kpis.js.map +1 -1
- package/dist/load-balancing.d.ts +395 -0
- package/dist/load-balancing.d.ts.map +1 -0
- package/dist/load-balancing.js +991 -0
- package/dist/load-balancing.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +39 -0
- package/dist/logger.js.map +1 -0
- package/dist/notify.d.ts +38 -9
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +72 -17
- package/dist/notify.js.map +1 -1
- package/dist/role.d.ts +5 -4
- package/dist/role.d.ts.map +1 -1
- package/dist/role.js +13 -10
- package/dist/role.js.map +1 -1
- package/dist/runtime.d.ts +310 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +510 -0
- package/dist/runtime.js.map +1 -0
- package/dist/team.d.ts +11 -6
- package/dist/team.d.ts.map +1 -1
- package/dist/team.js +22 -15
- package/dist/team.js.map +1 -1
- package/dist/transports/email.d.ts +318 -0
- package/dist/transports/email.d.ts.map +1 -0
- package/dist/transports/email.js +779 -0
- package/dist/transports/email.js.map +1 -0
- package/dist/transports/slack.d.ts +515 -0
- package/dist/transports/slack.d.ts.map +1 -0
- package/dist/transports/slack.js +844 -0
- package/dist/transports/slack.js.map +1 -0
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +44 -25
- package/dist/transports.js.map +1 -1
- package/dist/types.d.ts +149 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/id.d.ts +19 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +21 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/video.d.ts +203 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +528 -0
- package/dist/video.js.map +1 -0
- package/dist/worker.d.ts +343 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +698 -0
- package/dist/worker.js.map +1 -0
- package/package.json +24 -5
- package/src/actions.ts +48 -38
- package/src/agent-comms.ts +1200 -0
- package/src/approve.ts +91 -20
- package/src/ask.ts +99 -25
- package/src/browse.ts +627 -0
- package/src/capability-tiers.ts +545 -0
- package/src/cascade-context.ts +648 -0
- package/src/client.ts +221 -0
- package/src/decide.ts +81 -35
- package/src/do.ts +98 -52
- package/src/error-escalation.ts +1123 -0
- package/src/generate.ts +52 -18
- package/src/goals.ts +36 -27
- package/src/image.ts +816 -0
- package/src/index.ts +410 -2
- package/src/is.ts +59 -25
- package/src/kpis.ts +41 -36
- package/src/load-balancing.ts +1467 -0
- package/src/logger.ts +93 -0
- package/src/notify.ts +78 -17
- package/src/role.ts +30 -20
- package/src/runtime.ts +796 -0
- package/src/team.ts +24 -19
- package/src/transports/email.ts +1160 -0
- package/src/transports/slack.ts +1320 -0
- package/src/transports.ts +58 -43
- package/src/types.ts +182 -46
- package/src/utils/id.ts +21 -0
- package/src/video.ts +906 -0
- package/src/worker.ts +1007 -0
- package/test/agent-comms.test.ts +1397 -0
- package/test/approve.test.ts +305 -0
- package/test/ask.test.ts +274 -0
- package/test/browse.test.ts +361 -0
- package/test/capability-tiers.test.ts +631 -0
- package/test/cascade-context.test.ts +692 -0
- package/test/decide.test.ts +252 -0
- package/test/do.test.ts +144 -0
- package/test/error-escalation.test.ts +1205 -0
- package/test/error-logging.test.ts +357 -0
- package/test/generate.test.ts +319 -0
- package/test/image.test.ts +398 -0
- package/test/is.test.ts +287 -0
- package/test/load-balancing-safety.test.ts +404 -0
- package/test/load-balancing-thread-safety.test.ts +464 -0
- package/test/load-balancing.test.ts +1145 -0
- package/test/notify.test.ts +434 -0
- package/test/primitives.test.ts +320 -0
- package/test/runtime-integration.test.ts +892 -0
- package/test/transports/crypto.test.ts +230 -0
- package/test/transports/email.test.ts +866 -0
- package/test/transports/id-generation.test.ts +91 -0
- package/test/transports/slack.test.ts +760 -0
- package/test/type-safety.test.ts +834 -0
- package/test/types.test.ts +95 -2
- package/test/video.test.ts +530 -0
- package/test/worker.test.ts +1433 -0
- package/tsconfig.json +4 -1
- package/vitest.config.ts +42 -0
- package/wrangler.jsonc +36 -0
- package/.turbo/turbo-build.log +0 -5
- package/src/actions.js +0 -436
- package/src/approve.js +0 -234
- package/src/ask.js +0 -226
- package/src/decide.js +0 -244
- package/src/do.js +0 -227
- package/src/generate.js +0 -298
- package/src/goals.js +0 -205
- package/src/index.js +0 -68
- package/src/is.js +0 -317
- package/src/kpis.js +0 -270
- package/src/notify.js +0 -219
- package/src/role.js +0 -110
- package/src/team.js +0 -130
- package/src/transports.js +0 -357
- package/src/types.js +0 -71
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load Balancing and Routing for Agent Coordination
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent task distribution and priority-based handling for
|
|
5
|
+
* coordinating work across multiple agents. Includes multiple balancing
|
|
6
|
+
* strategies, capability-based routing, and comprehensive metrics.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import type { WorkerStatus, Contacts } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Balancer strategy identifier
|
|
13
|
+
*/
|
|
14
|
+
export type BalancerStrategy = 'round-robin' | 'least-busy' | 'capability' | 'priority-queue' | 'custom';
|
|
15
|
+
/**
|
|
16
|
+
* Extended agent information for load balancing
|
|
17
|
+
*/
|
|
18
|
+
export interface AgentInfo {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
type: 'agent';
|
|
22
|
+
status: WorkerStatus;
|
|
23
|
+
skills: string[];
|
|
24
|
+
currentLoad: number;
|
|
25
|
+
maxLoad: number;
|
|
26
|
+
contacts: Contacts;
|
|
27
|
+
metadata: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Task request for routing
|
|
31
|
+
*/
|
|
32
|
+
export interface TaskRequest {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
requiredSkills: string[];
|
|
36
|
+
priority: number;
|
|
37
|
+
metadata: Record<string, unknown>;
|
|
38
|
+
enqueuedAt?: Date;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of a routing decision
|
|
42
|
+
*/
|
|
43
|
+
export interface RouteResult {
|
|
44
|
+
agent: AgentInfo | null;
|
|
45
|
+
task: TaskRequest;
|
|
46
|
+
strategy: BalancerStrategy;
|
|
47
|
+
timestamp: Date;
|
|
48
|
+
reason?: string;
|
|
49
|
+
matchScore?: number;
|
|
50
|
+
matchedRule?: string | null;
|
|
51
|
+
usedDefault?: boolean;
|
|
52
|
+
usedFallback?: boolean;
|
|
53
|
+
strategies?: BalancerStrategy[];
|
|
54
|
+
strategyScores?: Record<string, number>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Agent availability information
|
|
58
|
+
*/
|
|
59
|
+
export interface AgentAvailability {
|
|
60
|
+
status: WorkerStatus;
|
|
61
|
+
lastSeen: Date;
|
|
62
|
+
currentLoad?: number;
|
|
63
|
+
maxLoad?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Routing rule definition
|
|
67
|
+
*/
|
|
68
|
+
export interface RoutingRule {
|
|
69
|
+
name: string;
|
|
70
|
+
priority: number;
|
|
71
|
+
condition: RoutingRuleCondition;
|
|
72
|
+
action: (task: TaskRequest, agents: AgentInfo[]) => AgentInfo | null;
|
|
73
|
+
enabled?: boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Routing rule condition - function or declarative
|
|
77
|
+
*/
|
|
78
|
+
export type RoutingRuleCondition = ((task: TaskRequest) => boolean) | {
|
|
79
|
+
requiredSkills?: {
|
|
80
|
+
contains: string;
|
|
81
|
+
};
|
|
82
|
+
priority?: {
|
|
83
|
+
gte?: number;
|
|
84
|
+
lte?: number;
|
|
85
|
+
};
|
|
86
|
+
metadata?: Record<string, unknown>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Routing metrics
|
|
90
|
+
*/
|
|
91
|
+
export interface RoutingMetrics {
|
|
92
|
+
totalRouted: number;
|
|
93
|
+
failedRoutes: number;
|
|
94
|
+
averageLatencyMs: number;
|
|
95
|
+
perAgent: Record<string, {
|
|
96
|
+
routedCount: number;
|
|
97
|
+
lastRouted?: Date;
|
|
98
|
+
}>;
|
|
99
|
+
strategyUsage: Record<string, number>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Composite balancer configuration
|
|
103
|
+
*/
|
|
104
|
+
export interface CompositeBalancerConfig {
|
|
105
|
+
strategies: Array<BalancerStrategy | {
|
|
106
|
+
strategy: BalancerStrategy;
|
|
107
|
+
weight: number;
|
|
108
|
+
}>;
|
|
109
|
+
fallbackBehavior?: 'next-strategy' | 'none';
|
|
110
|
+
customStrategies?: Record<string, (task: TaskRequest, agents: AgentInfo[]) => AgentInfo | null>;
|
|
111
|
+
/**
|
|
112
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
113
|
+
* If not provided, uses the default global collector.
|
|
114
|
+
*/
|
|
115
|
+
metricsCollector?: MetricsCollector;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load balancer interface
|
|
119
|
+
*/
|
|
120
|
+
export interface LoadBalancer {
|
|
121
|
+
route(task: TaskRequest): RouteResult;
|
|
122
|
+
addAgent(agent: AgentInfo): void;
|
|
123
|
+
removeAgent(agentId: string): void;
|
|
124
|
+
getAgents(): AgentInfo[];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Metrics collector interface for thread-safe metrics collection.
|
|
128
|
+
*
|
|
129
|
+
* Each MetricsCollector instance maintains its own isolated state,
|
|
130
|
+
* allowing multiple balancers to either share a collector for
|
|
131
|
+
* aggregated metrics or use separate collectors for isolated tracking.
|
|
132
|
+
*
|
|
133
|
+
* @remarks
|
|
134
|
+
* Thread-safety is achieved through instance isolation. Each collector
|
|
135
|
+
* maintains its own metrics state, eliminating race conditions between
|
|
136
|
+
* different balancer instances. For shared metrics across multiple
|
|
137
|
+
* balancers, pass the same collector instance to each balancer.
|
|
138
|
+
*/
|
|
139
|
+
export interface MetricsCollector {
|
|
140
|
+
/**
|
|
141
|
+
* Record a routing event.
|
|
142
|
+
* @internal This method is called by balancers during routing.
|
|
143
|
+
*/
|
|
144
|
+
record(result: RouteResult, latencyMs: number, strategy: BalancerStrategy): void;
|
|
145
|
+
/**
|
|
146
|
+
* Collect current routing metrics.
|
|
147
|
+
* @returns A copy of the current metrics state
|
|
148
|
+
*/
|
|
149
|
+
collect(): RoutingMetrics;
|
|
150
|
+
/**
|
|
151
|
+
* Reset all metrics to initial state.
|
|
152
|
+
*/
|
|
153
|
+
reset(): void;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a new MetricsCollector instance with isolated state.
|
|
157
|
+
*
|
|
158
|
+
* This factory function creates a thread-safe metrics collector that
|
|
159
|
+
* encapsulates all metrics state within the returned instance. Multiple
|
|
160
|
+
* collectors can be used independently without interference.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* // Create isolated collectors for different environments
|
|
165
|
+
* const prodCollector = createMetricsCollector()
|
|
166
|
+
* const testCollector = createMetricsCollector()
|
|
167
|
+
*
|
|
168
|
+
* // Balancers with separate metrics
|
|
169
|
+
* const prodBalancer = createRoundRobinBalancer(agents, { metricsCollector: prodCollector })
|
|
170
|
+
* const testBalancer = createRoundRobinBalancer(agents, { metricsCollector: testCollector })
|
|
171
|
+
* ```
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* // Shared collector for aggregated metrics
|
|
176
|
+
* const sharedCollector = createMetricsCollector()
|
|
177
|
+
* const balancer1 = createRoundRobinBalancer(agents, { metricsCollector: sharedCollector })
|
|
178
|
+
* const balancer2 = createLeastBusyBalancer(agents, { metricsCollector: sharedCollector })
|
|
179
|
+
*
|
|
180
|
+
* // Get combined metrics
|
|
181
|
+
* const metrics = sharedCollector.collect()
|
|
182
|
+
* ```
|
|
183
|
+
*
|
|
184
|
+
* @returns A new MetricsCollector instance
|
|
185
|
+
*/
|
|
186
|
+
export declare function createMetricsCollector(): MetricsCollector;
|
|
187
|
+
/**
|
|
188
|
+
* Collect current routing metrics from the default global collector.
|
|
189
|
+
*
|
|
190
|
+
* @remarks
|
|
191
|
+
* This function is provided for backward compatibility. For new code,
|
|
192
|
+
* consider using explicit MetricsCollector instances for better isolation.
|
|
193
|
+
*
|
|
194
|
+
* @returns Current routing metrics
|
|
195
|
+
*/
|
|
196
|
+
export declare function collectRoutingMetrics(): RoutingMetrics;
|
|
197
|
+
/**
|
|
198
|
+
* Reset all routing metrics in the default global collector.
|
|
199
|
+
*
|
|
200
|
+
* @remarks
|
|
201
|
+
* This function is provided for backward compatibility. For new code,
|
|
202
|
+
* consider using explicit MetricsCollector instances for better isolation.
|
|
203
|
+
*/
|
|
204
|
+
export declare function resetRoutingMetrics(): void;
|
|
205
|
+
/**
|
|
206
|
+
* Options for round-robin load balancer
|
|
207
|
+
*/
|
|
208
|
+
interface RoundRobinBalancerOptions {
|
|
209
|
+
/**
|
|
210
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
211
|
+
* If not provided, uses the default global collector.
|
|
212
|
+
*/
|
|
213
|
+
metricsCollector?: MetricsCollector;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Create a round-robin load balancer
|
|
217
|
+
*
|
|
218
|
+
* Distributes tasks evenly across all available agents in order.
|
|
219
|
+
*
|
|
220
|
+
* @param initialAgents - Initial set of agents to balance across
|
|
221
|
+
* @param options - Optional configuration including metricsCollector
|
|
222
|
+
* @returns A LoadBalancer instance
|
|
223
|
+
*/
|
|
224
|
+
export declare function createRoundRobinBalancer(initialAgents: AgentInfo[], options?: RoundRobinBalancerOptions): LoadBalancer;
|
|
225
|
+
interface LeastBusyBalancer extends LoadBalancer {
|
|
226
|
+
getLoadMetrics(): Record<string, number>;
|
|
227
|
+
releaseLoad(agentId: string): void;
|
|
228
|
+
setLoad(agentId: string, load: number): void;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Options for least-busy load balancer
|
|
232
|
+
*/
|
|
233
|
+
interface LeastBusyBalancerOptions {
|
|
234
|
+
/**
|
|
235
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
236
|
+
* If not provided, uses the default global collector.
|
|
237
|
+
*/
|
|
238
|
+
metricsCollector?: MetricsCollector;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Create a least-busy load balancer
|
|
242
|
+
*
|
|
243
|
+
* Routes tasks to agents with the lowest current load.
|
|
244
|
+
*
|
|
245
|
+
* @param initialAgents - Initial set of agents to balance across
|
|
246
|
+
* @param options - Optional configuration including metricsCollector
|
|
247
|
+
* @returns A LeastBusyBalancer instance
|
|
248
|
+
*/
|
|
249
|
+
export declare function createLeastBusyBalancer(initialAgents: AgentInfo[], options?: LeastBusyBalancerOptions): LeastBusyBalancer;
|
|
250
|
+
/**
|
|
251
|
+
* Options for capability-based router
|
|
252
|
+
*/
|
|
253
|
+
interface CapabilityRouterOptions {
|
|
254
|
+
/**
|
|
255
|
+
* Prefer agents with exact skill match over agents with additional skills
|
|
256
|
+
*/
|
|
257
|
+
preferExactMatch?: boolean;
|
|
258
|
+
/**
|
|
259
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
260
|
+
* If not provided, uses the default global collector.
|
|
261
|
+
*/
|
|
262
|
+
metricsCollector?: MetricsCollector;
|
|
263
|
+
}
|
|
264
|
+
interface CapabilityRouter extends LoadBalancer {
|
|
265
|
+
findAgentsWithSkills(skills: string[]): AgentInfo[];
|
|
266
|
+
getSkillCoverage(): Record<string, number>;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Create a capability-based router
|
|
270
|
+
*
|
|
271
|
+
* Routes tasks to agents that have the required skills.
|
|
272
|
+
*
|
|
273
|
+
* @param initialAgents - Initial set of agents to route to
|
|
274
|
+
* @param options - Optional configuration including metricsCollector
|
|
275
|
+
* @returns A CapabilityRouter instance
|
|
276
|
+
*/
|
|
277
|
+
export declare function createCapabilityRouter(initialAgents: AgentInfo[], options?: CapabilityRouterOptions): CapabilityRouter;
|
|
278
|
+
/**
|
|
279
|
+
* Options for priority queue balancer
|
|
280
|
+
*/
|
|
281
|
+
interface PriorityQueueOptions {
|
|
282
|
+
/**
|
|
283
|
+
* Enable priority aging to prevent task starvation
|
|
284
|
+
*/
|
|
285
|
+
enableAging?: boolean;
|
|
286
|
+
/**
|
|
287
|
+
* Priority boost per second when aging is enabled
|
|
288
|
+
*/
|
|
289
|
+
agingBoostPerSecond?: number;
|
|
290
|
+
/**
|
|
291
|
+
* Maximum wait time before task is promoted to highest priority
|
|
292
|
+
*/
|
|
293
|
+
maxWaitTime?: number;
|
|
294
|
+
/**
|
|
295
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
296
|
+
* If not provided, uses the default global collector.
|
|
297
|
+
*/
|
|
298
|
+
metricsCollector?: MetricsCollector;
|
|
299
|
+
}
|
|
300
|
+
interface PriorityQueueBalancer extends LoadBalancer {
|
|
301
|
+
enqueue(task: TaskRequest): void;
|
|
302
|
+
routeNext(): Promise<RouteResult | null>;
|
|
303
|
+
queueSize(): number;
|
|
304
|
+
clear(): void;
|
|
305
|
+
peek(): TaskRequest | null;
|
|
306
|
+
getEffectivePriority(taskId: string): number;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Create a priority queue balancer
|
|
310
|
+
*
|
|
311
|
+
* Processes tasks in priority order with optional aging to prevent starvation.
|
|
312
|
+
*
|
|
313
|
+
* @param initialAgents - Initial set of agents to balance across
|
|
314
|
+
* @param options - Optional configuration including metricsCollector
|
|
315
|
+
* @returns A PriorityQueueBalancer instance
|
|
316
|
+
*/
|
|
317
|
+
export declare function createPriorityQueueBalancer(initialAgents: AgentInfo[], options?: PriorityQueueOptions): PriorityQueueBalancer;
|
|
318
|
+
interface AvailabilityTrackerOptions {
|
|
319
|
+
heartbeatTimeout?: number;
|
|
320
|
+
}
|
|
321
|
+
interface StatusChangeEvent {
|
|
322
|
+
agentId: string;
|
|
323
|
+
previousStatus: WorkerStatus;
|
|
324
|
+
currentStatus: WorkerStatus;
|
|
325
|
+
timestamp: Date;
|
|
326
|
+
}
|
|
327
|
+
interface CapacityInfo {
|
|
328
|
+
total: number;
|
|
329
|
+
used: number;
|
|
330
|
+
available: number;
|
|
331
|
+
utilization: number;
|
|
332
|
+
}
|
|
333
|
+
interface AgentAvailabilityTracker {
|
|
334
|
+
getAvailability(agentId: string): AgentAvailability;
|
|
335
|
+
updateStatus(agentId: string, status: WorkerStatus): void;
|
|
336
|
+
getAvailableAgents(): AgentInfo[];
|
|
337
|
+
heartbeat(agentId: string): void;
|
|
338
|
+
checkTimeouts(): void;
|
|
339
|
+
onStatusChange(handler: (event: StatusChangeEvent) => void): void;
|
|
340
|
+
updateLoad(agentId: string, current: number, max: number): void;
|
|
341
|
+
getCapacityUtilization(): Record<string, number>;
|
|
342
|
+
getOverallCapacity(): CapacityInfo;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Create an agent availability tracker
|
|
346
|
+
*
|
|
347
|
+
* Tracks agent status, heartbeats, and capacity.
|
|
348
|
+
*/
|
|
349
|
+
export declare function createAgentAvailabilityTracker(initialAgents: AgentInfo[], options?: AvailabilityTrackerOptions): AgentAvailabilityTracker;
|
|
350
|
+
/**
|
|
351
|
+
* Options for routing rule engine
|
|
352
|
+
*/
|
|
353
|
+
interface RoutingRuleEngineOptions {
|
|
354
|
+
/**
|
|
355
|
+
* Default strategy to use when no rules match
|
|
356
|
+
*/
|
|
357
|
+
defaultStrategy?: 'round-robin' | 'least-busy' | 'capability';
|
|
358
|
+
/**
|
|
359
|
+
* Optional metrics collector for isolated metrics tracking.
|
|
360
|
+
* If not provided, uses the default global collector.
|
|
361
|
+
*/
|
|
362
|
+
metricsCollector?: MetricsCollector;
|
|
363
|
+
}
|
|
364
|
+
interface RoutingRuleEngine extends LoadBalancer {
|
|
365
|
+
addRule(rule: RoutingRule): void;
|
|
366
|
+
removeRule(name: string): void;
|
|
367
|
+
updateRule(name: string, updates: Partial<RoutingRule>): void;
|
|
368
|
+
enableRule(name: string): void;
|
|
369
|
+
disableRule(name: string): void;
|
|
370
|
+
getRules(): RoutingRule[];
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Create a routing rule engine
|
|
374
|
+
*
|
|
375
|
+
* Evaluates routing rules in priority order to determine task routing.
|
|
376
|
+
*
|
|
377
|
+
* @param initialAgents - Initial set of agents to route to
|
|
378
|
+
* @param options - Optional configuration including metricsCollector
|
|
379
|
+
* @returns A RoutingRuleEngine instance
|
|
380
|
+
*/
|
|
381
|
+
export declare function createRoutingRuleEngine(initialAgents: AgentInfo[], options?: RoutingRuleEngineOptions): RoutingRuleEngine;
|
|
382
|
+
interface CompositeBalancer extends LoadBalancer {
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Create a composite load balancer
|
|
386
|
+
*
|
|
387
|
+
* Combines multiple balancing strategies for sophisticated routing decisions.
|
|
388
|
+
*
|
|
389
|
+
* @param initialAgents - Initial set of agents to balance across
|
|
390
|
+
* @param config - Configuration including strategies and optional metricsCollector
|
|
391
|
+
* @returns A CompositeBalancer instance
|
|
392
|
+
*/
|
|
393
|
+
export declare function createCompositeBalancer(initialAgents: AgentInfo[], config: CompositeBalancerConfig): CompositeBalancer;
|
|
394
|
+
export {};
|
|
395
|
+
//# sourceMappingURL=load-balancing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-balancing.d.ts","sourceRoot":"","sources":["../src/load-balancing.ts"],"names":[],"mappings":"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"}
|