network-ai 4.13.0 → 4.14.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/INTEGRATION_GUIDE.md +2 -2
- package/QUICKSTART.md +9 -0
- package/README.md +14 -3
- package/SKILL.md +2 -0
- package/bin/console.ts +769 -0
- package/dist/bin/console.d.ts +18 -0
- package/dist/bin/console.d.ts.map +1 -0
- package/dist/bin/console.js +799 -0
- package/dist/bin/console.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-runtime.d.ts +310 -0
- package/dist/lib/agent-runtime.d.ts.map +1 -0
- package/dist/lib/agent-runtime.js +630 -0
- package/dist/lib/agent-runtime.js.map +1 -0
- package/dist/lib/console-ui.d.ts +134 -0
- package/dist/lib/console-ui.d.ts.map +1 -0
- package/dist/lib/console-ui.js +276 -0
- package/dist/lib/console-ui.js.map +1 -0
- package/dist/lib/phase-pipeline.js +1 -1
- package/dist/lib/phase-pipeline.js.map +1 -1
- package/dist/lib/strategy-agent.d.ts +320 -0
- package/dist/lib/strategy-agent.d.ts.map +1 -0
- package/dist/lib/strategy-agent.js +601 -0
- package/dist/lib/strategy-agent.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy Agent — AI Meta-Orchestrator for Network-AI
|
|
3
|
+
*
|
|
4
|
+
* The StrategyAgent sits above SwarmOrchestrator and makes high-level decisions
|
|
5
|
+
* about agent allocation, workload distribution, budget partitioning, and
|
|
6
|
+
* adaptive scaling. It is designed for scenarios where a single AI controls
|
|
7
|
+
* thousands to millions of agents.
|
|
8
|
+
*
|
|
9
|
+
* Architecture:
|
|
10
|
+
* - **AgentPool**: Elastic pool of agents from a template — spawn/recycle on demand
|
|
11
|
+
* - **WorkloadPartitioner**: Splits large tasks into chunks and routes to pools
|
|
12
|
+
* - **StrategyPlanner**: Evaluates current state and produces a StrategyPlan
|
|
13
|
+
* - **StrategyAgent**: Facade that composes all of the above
|
|
14
|
+
*
|
|
15
|
+
* Design principles:
|
|
16
|
+
* - Zero external dependencies (Node.js builtins only)
|
|
17
|
+
* - Pluggable strategy functions (bring your own AI decision-making)
|
|
18
|
+
* - Non-destructive: all actions go through existing orchestrator APIs
|
|
19
|
+
* - Observable: every decision is logged and emittable
|
|
20
|
+
*
|
|
21
|
+
* @module StrategyAgent
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
import { EventEmitter } from 'events';
|
|
25
|
+
/** Template for spawning agents in a pool */
|
|
26
|
+
export interface AgentTemplate {
|
|
27
|
+
/** Unique template identifier */
|
|
28
|
+
id: string;
|
|
29
|
+
/** Adapter name to route through */
|
|
30
|
+
adapter: string;
|
|
31
|
+
/** Default action/payload for spawned agents */
|
|
32
|
+
defaultAction: string;
|
|
33
|
+
/** Default params merged into every spawn */
|
|
34
|
+
defaultParams: Record<string, unknown>;
|
|
35
|
+
/** Max concurrent agents from this template */
|
|
36
|
+
maxConcurrent: number;
|
|
37
|
+
/** Budget allocation per agent (tokens) */
|
|
38
|
+
budgetPerAgent: number;
|
|
39
|
+
/** Tags for routing and filtering */
|
|
40
|
+
tags: string[];
|
|
41
|
+
}
|
|
42
|
+
/** Current status of a managed agent */
|
|
43
|
+
export interface ManagedAgent {
|
|
44
|
+
id: string;
|
|
45
|
+
templateId: string;
|
|
46
|
+
status: 'spawning' | 'running' | 'completed' | 'failed' | 'recycled';
|
|
47
|
+
spawnedAt: number;
|
|
48
|
+
completedAt?: number;
|
|
49
|
+
taskId?: string;
|
|
50
|
+
tokensUsed: number;
|
|
51
|
+
}
|
|
52
|
+
/** A chunk of work to be distributed */
|
|
53
|
+
export interface WorkChunk {
|
|
54
|
+
id: string;
|
|
55
|
+
input: unknown;
|
|
56
|
+
priority: number;
|
|
57
|
+
assignedPool?: string;
|
|
58
|
+
assignedAgent?: string;
|
|
59
|
+
status: 'pending' | 'assigned' | 'running' | 'completed' | 'failed';
|
|
60
|
+
result?: unknown;
|
|
61
|
+
error?: string;
|
|
62
|
+
createdAt: number;
|
|
63
|
+
completedAt?: number;
|
|
64
|
+
}
|
|
65
|
+
/** Strategy plan produced by the planner */
|
|
66
|
+
export interface StrategyPlan {
|
|
67
|
+
/** Human-readable description of the plan */
|
|
68
|
+
description: string;
|
|
69
|
+
/** Pools to scale up (templateId → target count) */
|
|
70
|
+
scaleUp: Map<string, number>;
|
|
71
|
+
/** Pools to scale down (templateId → target count) */
|
|
72
|
+
scaleDown: Map<string, number>;
|
|
73
|
+
/** Budget reallocation (templateId → new per-agent budget) */
|
|
74
|
+
budgetReallocation: Map<string, number>;
|
|
75
|
+
/** FSM transition to trigger (if any) */
|
|
76
|
+
fsmTransition?: string;
|
|
77
|
+
/** Work chunks to create */
|
|
78
|
+
newChunks: Array<{
|
|
79
|
+
input: unknown;
|
|
80
|
+
priority: number;
|
|
81
|
+
targetPool: string;
|
|
82
|
+
}>;
|
|
83
|
+
/** Confidence score 0-1 */
|
|
84
|
+
confidence: number;
|
|
85
|
+
/** Timestamp */
|
|
86
|
+
createdAt: number;
|
|
87
|
+
}
|
|
88
|
+
/** Snapshot of the current system state for the planner */
|
|
89
|
+
export interface SystemSnapshot {
|
|
90
|
+
pools: Map<string, PoolStatus>;
|
|
91
|
+
totalBudgetSpent: number;
|
|
92
|
+
totalBudgetCeiling: number;
|
|
93
|
+
fsmState: string;
|
|
94
|
+
pendingChunks: number;
|
|
95
|
+
runningAgents: number;
|
|
96
|
+
completedTasks: number;
|
|
97
|
+
failedTasks: number;
|
|
98
|
+
averageTaskDuration: number;
|
|
99
|
+
timestamp: number;
|
|
100
|
+
}
|
|
101
|
+
/** Status of a single agent pool */
|
|
102
|
+
export interface PoolStatus {
|
|
103
|
+
templateId: string;
|
|
104
|
+
active: number;
|
|
105
|
+
maxConcurrent: number;
|
|
106
|
+
completed: number;
|
|
107
|
+
failed: number;
|
|
108
|
+
totalTokensUsed: number;
|
|
109
|
+
budgetPerAgent: number;
|
|
110
|
+
pendingChunks: number;
|
|
111
|
+
}
|
|
112
|
+
/** Pluggable strategy function — given state, produce a plan */
|
|
113
|
+
export type StrategyFunction = (snapshot: SystemSnapshot) => StrategyPlan | Promise<StrategyPlan>;
|
|
114
|
+
/** Events emitted by the StrategyAgent */
|
|
115
|
+
export interface StrategyEvents {
|
|
116
|
+
'plan:created': (plan: StrategyPlan) => void;
|
|
117
|
+
'plan:executed': (plan: StrategyPlan) => void;
|
|
118
|
+
'pool:created': (templateId: string) => void;
|
|
119
|
+
'pool:scaled': (templateId: string, from: number, to: number) => void;
|
|
120
|
+
'agent:spawned': (agent: ManagedAgent) => void;
|
|
121
|
+
'agent:completed': (agent: ManagedAgent) => void;
|
|
122
|
+
'agent:failed': (agent: ManagedAgent, error: string) => void;
|
|
123
|
+
'chunk:created': (chunk: WorkChunk) => void;
|
|
124
|
+
'chunk:assigned': (chunk: WorkChunk) => void;
|
|
125
|
+
'chunk:completed': (chunk: WorkChunk) => void;
|
|
126
|
+
'chunk:failed': (chunk: WorkChunk) => void;
|
|
127
|
+
'cycle:start': (cycleNumber: number) => void;
|
|
128
|
+
'cycle:end': (cycleNumber: number, plan: StrategyPlan) => void;
|
|
129
|
+
}
|
|
130
|
+
/** Options for creating a StrategyAgent */
|
|
131
|
+
export interface StrategyAgentOptions {
|
|
132
|
+
/** Custom strategy function (default: built-in adaptive strategy) */
|
|
133
|
+
strategy?: StrategyFunction;
|
|
134
|
+
/** How often to re-evaluate strategy (ms, default: 5000) */
|
|
135
|
+
evaluationInterval?: number;
|
|
136
|
+
/** Maximum total agents across all pools (default: 10000) */
|
|
137
|
+
globalAgentLimit?: number;
|
|
138
|
+
/** Maximum total budget across all pools (default: Infinity) */
|
|
139
|
+
globalBudgetLimit?: number;
|
|
140
|
+
/** Auto-start evaluation loop (default: false) */
|
|
141
|
+
autoStart?: boolean;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Elastic pool of agents from a template. Manages spawn/complete/recycle
|
|
145
|
+
* lifecycle without knowing about specific adapter implementations.
|
|
146
|
+
*/
|
|
147
|
+
export declare class AgentPool {
|
|
148
|
+
readonly template: AgentTemplate;
|
|
149
|
+
private agents;
|
|
150
|
+
private _completedCount;
|
|
151
|
+
private _failedCount;
|
|
152
|
+
private _totalTokens;
|
|
153
|
+
private _events;
|
|
154
|
+
constructor(template: AgentTemplate, events: EventEmitter);
|
|
155
|
+
/** Number of currently active (spawning or running) agents */
|
|
156
|
+
get active(): number;
|
|
157
|
+
/** Total completed agents */
|
|
158
|
+
get completed(): number;
|
|
159
|
+
/** Total failed agents */
|
|
160
|
+
get failed(): number;
|
|
161
|
+
/** Total tokens consumed by this pool */
|
|
162
|
+
get totalTokensUsed(): number;
|
|
163
|
+
/** Whether the pool can accept more agents */
|
|
164
|
+
get canSpawn(): boolean;
|
|
165
|
+
/** How many more agents can be spawned */
|
|
166
|
+
get availableSlots(): number;
|
|
167
|
+
/**
|
|
168
|
+
* Reserve a slot and create a ManagedAgent record.
|
|
169
|
+
* Returns null if pool is at capacity.
|
|
170
|
+
*/
|
|
171
|
+
spawn(taskId?: string): ManagedAgent | null;
|
|
172
|
+
/** Mark an agent as running */
|
|
173
|
+
markRunning(agentId: string): void;
|
|
174
|
+
/** Mark an agent as completed and record token usage */
|
|
175
|
+
markCompleted(agentId: string, tokensUsed?: number): void;
|
|
176
|
+
/** Mark an agent as failed */
|
|
177
|
+
markFailed(agentId: string, error: string): void;
|
|
178
|
+
/** Recycle completed/failed agents to free slots */
|
|
179
|
+
recycle(): number;
|
|
180
|
+
/** Get a snapshot of pool status */
|
|
181
|
+
getStatus(pendingChunks?: number): PoolStatus;
|
|
182
|
+
/** Get all agents (for inspection) */
|
|
183
|
+
getAgents(): ReadonlyArray<ManagedAgent>;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Splits large tasks into work chunks and manages the chunk lifecycle.
|
|
187
|
+
*/
|
|
188
|
+
export declare class WorkloadPartitioner {
|
|
189
|
+
private chunks;
|
|
190
|
+
private _chunkCounter;
|
|
191
|
+
private _events;
|
|
192
|
+
constructor(events: EventEmitter);
|
|
193
|
+
/**
|
|
194
|
+
* Create work chunks from an array of inputs.
|
|
195
|
+
* @param inputs - Array of task inputs
|
|
196
|
+
* @param targetPool - Pool template ID to route chunks to
|
|
197
|
+
* @param priority - Priority level (higher = more urgent)
|
|
198
|
+
*/
|
|
199
|
+
partition(inputs: unknown[], targetPool: string, priority?: number): WorkChunk[];
|
|
200
|
+
/** Get all pending chunks for a pool, sorted by priority (descending) */
|
|
201
|
+
getPendingForPool(poolId: string): WorkChunk[];
|
|
202
|
+
/** Assign a chunk to an agent */
|
|
203
|
+
assign(chunkId: string, agentId: string): boolean;
|
|
204
|
+
/** Mark a chunk as running */
|
|
205
|
+
markRunning(chunkId: string): void;
|
|
206
|
+
/** Mark a chunk as completed */
|
|
207
|
+
markCompleted(chunkId: string, result?: unknown): void;
|
|
208
|
+
/** Mark a chunk as failed */
|
|
209
|
+
markFailed(chunkId: string, error: string): void;
|
|
210
|
+
/** Get counts by status */
|
|
211
|
+
getCounts(): {
|
|
212
|
+
pending: number;
|
|
213
|
+
assigned: number;
|
|
214
|
+
running: number;
|
|
215
|
+
completed: number;
|
|
216
|
+
failed: number;
|
|
217
|
+
total: number;
|
|
218
|
+
};
|
|
219
|
+
/** Get all chunks for a pool */
|
|
220
|
+
getChunksForPool(poolId: string): WorkChunk[];
|
|
221
|
+
/** Get a chunk by ID */
|
|
222
|
+
getChunk(chunkId: string): WorkChunk | undefined;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Default adaptive strategy that:
|
|
226
|
+
* - Scales up pools with pending work
|
|
227
|
+
* - Scales down idle pools
|
|
228
|
+
* - Reallocates budget from idle to busy pools
|
|
229
|
+
*/
|
|
230
|
+
export declare function adaptiveStrategy(snapshot: SystemSnapshot): StrategyPlan;
|
|
231
|
+
/**
|
|
232
|
+
* AI Meta-Orchestrator that manages agent pools, work distribution, and
|
|
233
|
+
* adaptive strategy. Designed for controlling thousands to millions of agents.
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const strategy = new StrategyAgent({
|
|
238
|
+
* globalAgentLimit: 10000,
|
|
239
|
+
* globalBudgetLimit: 1_000_000,
|
|
240
|
+
* evaluationInterval: 5000,
|
|
241
|
+
* });
|
|
242
|
+
*
|
|
243
|
+
* // Define agent templates
|
|
244
|
+
* strategy.createPool({
|
|
245
|
+
* id: 'researchers',
|
|
246
|
+
* adapter: 'langchain',
|
|
247
|
+
* defaultAction: 'research',
|
|
248
|
+
* defaultParams: { depth: 'thorough' },
|
|
249
|
+
* maxConcurrent: 500,
|
|
250
|
+
* budgetPerAgent: 1000,
|
|
251
|
+
* tags: ['research', 'data'],
|
|
252
|
+
* });
|
|
253
|
+
*
|
|
254
|
+
* // Distribute work
|
|
255
|
+
* const urls = [...thousandUrls];
|
|
256
|
+
* strategy.distributeWork(urls, 'researchers', 2);
|
|
257
|
+
*
|
|
258
|
+
* // Start auto-evaluation loop
|
|
259
|
+
* strategy.start();
|
|
260
|
+
*
|
|
261
|
+
* // Or manually evaluate + execute
|
|
262
|
+
* const plan = await strategy.evaluate();
|
|
263
|
+
* await strategy.executePlan(plan);
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
export declare class StrategyAgent extends EventEmitter {
|
|
267
|
+
private pools;
|
|
268
|
+
private partitioner;
|
|
269
|
+
private strategyFn;
|
|
270
|
+
private evaluationInterval;
|
|
271
|
+
private globalAgentLimit;
|
|
272
|
+
private globalBudgetLimit;
|
|
273
|
+
private intervalHandle;
|
|
274
|
+
private _cycleCount;
|
|
275
|
+
private _plans;
|
|
276
|
+
constructor(options?: StrategyAgentOptions);
|
|
277
|
+
/** Create an agent pool from a template */
|
|
278
|
+
createPool(template: AgentTemplate): AgentPool;
|
|
279
|
+
/** Get a pool by template ID */
|
|
280
|
+
getPool(templateId: string): AgentPool | undefined;
|
|
281
|
+
/** List all pools */
|
|
282
|
+
listPools(): Array<PoolStatus>;
|
|
283
|
+
/** Remove a pool (recycles all agents first) */
|
|
284
|
+
removePool(templateId: string): boolean;
|
|
285
|
+
/** Total active agents across all pools */
|
|
286
|
+
get totalActiveAgents(): number;
|
|
287
|
+
/** Whether the global agent limit has been reached */
|
|
288
|
+
get atCapacity(): boolean;
|
|
289
|
+
/**
|
|
290
|
+
* Distribute work items across a pool.
|
|
291
|
+
* Each input becomes a work chunk assigned to the pool.
|
|
292
|
+
*/
|
|
293
|
+
distributeWork(inputs: unknown[], targetPool: string, priority?: number): WorkChunk[];
|
|
294
|
+
/** Get work distribution status */
|
|
295
|
+
getWorkStatus(): ReturnType<WorkloadPartitioner['getCounts']>;
|
|
296
|
+
/** Access the partitioner directly */
|
|
297
|
+
get workload(): WorkloadPartitioner;
|
|
298
|
+
/** Take a snapshot of the current system state */
|
|
299
|
+
snapshot(budgetSpent?: number, budgetCeiling?: number, fsmState?: string): SystemSnapshot;
|
|
300
|
+
/** Evaluate the current state and produce a strategy plan */
|
|
301
|
+
evaluate(budgetSpent?: number, budgetCeiling?: number, fsmState?: string): Promise<StrategyPlan>;
|
|
302
|
+
/**
|
|
303
|
+
* Execute a strategy plan: scale pools, reallocate budgets, create chunks.
|
|
304
|
+
* Returns the number of actions taken.
|
|
305
|
+
*/
|
|
306
|
+
executePlan(plan: StrategyPlan): number;
|
|
307
|
+
/** Start the automatic evaluation loop */
|
|
308
|
+
start(): void;
|
|
309
|
+
/** Stop the evaluation loop */
|
|
310
|
+
stop(): void;
|
|
311
|
+
/** Whether the evaluation loop is running */
|
|
312
|
+
get isRunning(): boolean;
|
|
313
|
+
/** Number of evaluation cycles completed */
|
|
314
|
+
get cycleCount(): number;
|
|
315
|
+
/** All plans produced so far */
|
|
316
|
+
get planHistory(): ReadonlyArray<StrategyPlan>;
|
|
317
|
+
/** Get a summary string of the current state */
|
|
318
|
+
summary(): string;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=strategy-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-agent.d.ts","sourceRoot":"","sources":["../../lib/strategy-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAMtC,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sDAAsD;IACtD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,8DAA8D;IAC9D,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAElG,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,gBAAgB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAChE;AAED,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAMD;;;GAGG;AACH,qBAAa,SAAS;IACpB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAAe;gBAElB,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY;IAKzD,8DAA8D;IAC9D,IAAI,MAAM,IAAI,MAAM,CAMnB;IAED,6BAA6B;IAC7B,IAAI,SAAS,IAAI,MAAM,CAAiC;IAExD,0BAA0B;IAC1B,IAAI,MAAM,IAAI,MAAM,CAA8B;IAElD,yCAAyC;IACzC,IAAI,eAAe,IAAI,MAAM,CAA8B;IAE3D,8CAA8C;IAC9C,IAAI,QAAQ,IAAI,OAAO,CAAsD;IAE7E,0CAA0C;IAC1C,IAAI,cAAc,IAAI,MAAM,CAAmE;IAE/F;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAiB3C,+BAA+B;IAC/B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,wDAAwD;IACxD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,IAAI;IAWpD,8BAA8B;IAC9B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAShD,oDAAoD;IACpD,OAAO,IAAI,MAAM;IAYjB,oCAAoC;IACpC,SAAS,CAAC,aAAa,SAAI,GAAG,UAAU;IAaxC,sCAAsC;IACtC,SAAS,IAAI,aAAa,CAAC,YAAY,CAAC;CAGzC;AAMD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAe;gBAElB,MAAM,EAAE,YAAY;IAIhC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,SAAS,EAAE;IAkB3E,yEAAyE;IACzE,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAU9C,iCAAiC;IACjC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IASjD,8BAA8B;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,gCAAgC;IAChC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAStD,6BAA6B;IAC7B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAShD,2BAA2B;IAC3B,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAcrH,gCAAgC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAQ7C,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;CAGjD;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY,CA4DvE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAsB;gBAExB,OAAO,GAAE,oBAAyB;IAc9C,2CAA2C;IAC3C,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS;IAU9C,gCAAgC;IAChC,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIlD,qBAAqB;IACrB,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;IAS9B,gDAAgD;IAChD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAQvC,2CAA2C;IAC3C,IAAI,iBAAiB,IAAI,MAAM,CAI9B;IAED,sDAAsD;IACtD,IAAI,UAAU,IAAI,OAAO,CAExB;IAMD;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,SAAS,EAAE;IAOhF,mCAAmC;IACnC,aAAa,IAAI,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAI7D,sCAAsC;IACtC,IAAI,QAAQ,IAAI,mBAAmB,CAElC;IAMD,kDAAkD;IAClD,QAAQ,CAAC,WAAW,SAAI,EAAE,aAAa,SAAI,EAAE,QAAQ,SAAY,GAAG,cAAc;IAwClF,6DAA6D;IACvD,QAAQ,CAAC,WAAW,SAAI,EAAE,aAAa,SAAI,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ/F;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM;IAyDvC,0CAA0C;IAC1C,KAAK,IAAI,IAAI;IAWb,+BAA+B;IAC/B,IAAI,IAAI,IAAI;IAOZ,6CAA6C;IAC7C,IAAI,SAAS,IAAI,OAAO,CAAyC;IAEjE,4CAA4C;IAC5C,IAAI,UAAU,IAAI,MAAM,CAA6B;IAErD,gCAAgC;IAChC,IAAI,WAAW,IAAI,aAAa,CAAC,YAAY,CAAC,CAAwB;IAMtE,gDAAgD;IAChD,OAAO,IAAI,MAAM;CAalB"}
|