@ggakila/agentx-framework 0.1.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 +107 -0
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/agent/Agent.d.ts +110 -0
- package/dist/agent/Agent.d.ts.map +1 -0
- package/dist/agent/Agent.js +291 -0
- package/dist/agent/Agent.js.map +1 -0
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +11 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/cli/CLI.d.ts +74 -0
- package/dist/cli/CLI.d.ts.map +1 -0
- package/dist/cli/CLI.js +255 -0
- package/dist/cli/CLI.js.map +1 -0
- package/dist/cli/InteractiveSetup.d.ts +104 -0
- package/dist/cli/InteractiveSetup.d.ts.map +1 -0
- package/dist/cli/InteractiveSetup.js +2225 -0
- package/dist/cli/InteractiveSetup.js.map +1 -0
- package/dist/cli/bin.d.ts +7 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +35 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/ProjectCommands.d.ts +23 -0
- package/dist/cli/commands/ProjectCommands.d.ts.map +1 -0
- package/dist/cli/commands/ProjectCommands.js +504 -0
- package/dist/cli/commands/ProjectCommands.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/credential/CredentialManager.d.ts +112 -0
- package/dist/credential/CredentialManager.d.ts.map +1 -0
- package/dist/credential/CredentialManager.js +343 -0
- package/dist/credential/CredentialManager.js.map +1 -0
- package/dist/credential/OAuth2Manager.d.ts +206 -0
- package/dist/credential/OAuth2Manager.d.ts.map +1 -0
- package/dist/credential/OAuth2Manager.js +463 -0
- package/dist/credential/OAuth2Manager.js.map +1 -0
- package/dist/credential/index.d.ts +6 -0
- package/dist/credential/index.d.ts.map +1 -0
- package/dist/credential/index.js +16 -0
- package/dist/credential/index.js.map +1 -0
- package/dist/error/ErrorHandler.d.ts +74 -0
- package/dist/error/ErrorHandler.d.ts.map +1 -0
- package/dist/error/ErrorHandler.js +279 -0
- package/dist/error/ErrorHandler.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/DatabaseTool.d.ts +149 -0
- package/dist/integrations/DatabaseTool.d.ts.map +1 -0
- package/dist/integrations/DatabaseTool.js +900 -0
- package/dist/integrations/DatabaseTool.js.map +1 -0
- package/dist/integrations/EmailTool.d.ts +142 -0
- package/dist/integrations/EmailTool.d.ts.map +1 -0
- package/dist/integrations/EmailTool.js +259 -0
- package/dist/integrations/EmailTool.js.map +1 -0
- package/dist/integrations/FileSystemTool.d.ts +153 -0
- package/dist/integrations/FileSystemTool.d.ts.map +1 -0
- package/dist/integrations/FileSystemTool.js +835 -0
- package/dist/integrations/FileSystemTool.js.map +1 -0
- package/dist/integrations/GoogleWorkspaceTool.d.ts +125 -0
- package/dist/integrations/GoogleWorkspaceTool.d.ts.map +1 -0
- package/dist/integrations/GoogleWorkspaceTool.js +765 -0
- package/dist/integrations/GoogleWorkspaceTool.js.map +1 -0
- package/dist/integrations/HttpTool.d.ts +55 -0
- package/dist/integrations/HttpTool.d.ts.map +1 -0
- package/dist/integrations/HttpTool.js +209 -0
- package/dist/integrations/HttpTool.js.map +1 -0
- package/dist/integrations/MessagingTool.d.ts +136 -0
- package/dist/integrations/MessagingTool.d.ts.map +1 -0
- package/dist/integrations/MessagingTool.js +503 -0
- package/dist/integrations/MessagingTool.js.map +1 -0
- package/dist/integrations/SchedulerTool.d.ts +147 -0
- package/dist/integrations/SchedulerTool.d.ts.map +1 -0
- package/dist/integrations/SchedulerTool.js +471 -0
- package/dist/integrations/SchedulerTool.js.map +1 -0
- package/dist/integrations/WebhookTool.d.ts +97 -0
- package/dist/integrations/WebhookTool.d.ts.map +1 -0
- package/dist/integrations/WebhookTool.js +351 -0
- package/dist/integrations/WebhookTool.js.map +1 -0
- package/dist/integrations/index.d.ts +13 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +60 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/llm/LLMProvider.d.ts +83 -0
- package/dist/llm/LLMProvider.d.ts.map +1 -0
- package/dist/llm/LLMProvider.js +370 -0
- package/dist/llm/LLMProvider.js.map +1 -0
- package/dist/llm/index.d.ts +5 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +14 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/payment/PaymentProvider.d.ts +157 -0
- package/dist/payment/PaymentProvider.d.ts.map +1 -0
- package/dist/payment/PaymentProvider.js +525 -0
- package/dist/payment/PaymentProvider.js.map +1 -0
- package/dist/payment/index.d.ts +5 -0
- package/dist/payment/index.d.ts.map +1 -0
- package/dist/payment/index.js +16 -0
- package/dist/payment/index.js.map +1 -0
- package/dist/plugin/PluginManager.d.ts +156 -0
- package/dist/plugin/PluginManager.d.ts.map +1 -0
- package/dist/plugin/PluginManager.js +288 -0
- package/dist/plugin/PluginManager.js.map +1 -0
- package/dist/plugin/index.d.ts +5 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +10 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/runtime/AgentXRuntime.d.ts +90 -0
- package/dist/runtime/AgentXRuntime.d.ts.map +1 -0
- package/dist/runtime/AgentXRuntime.js +469 -0
- package/dist/runtime/AgentXRuntime.js.map +1 -0
- package/dist/security/SecurityManager.d.ts +245 -0
- package/dist/security/SecurityManager.d.ts.map +1 -0
- package/dist/security/SecurityManager.js +512 -0
- package/dist/security/SecurityManager.js.map +1 -0
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +14 -0
- package/dist/security/index.js.map +1 -0
- package/dist/tool/ToolRegistry.d.ts +58 -0
- package/dist/tool/ToolRegistry.d.ts.map +1 -0
- package/dist/tool/ToolRegistry.js +173 -0
- package/dist/tool/ToolRegistry.js.map +1 -0
- package/dist/tool/ToolValidator.d.ts +41 -0
- package/dist/tool/ToolValidator.d.ts.map +1 -0
- package/dist/tool/ToolValidator.js +158 -0
- package/dist/tool/ToolValidator.js.map +1 -0
- package/dist/tool/index.d.ts +6 -0
- package/dist/tool/index.d.ts.map +1 -0
- package/dist/tool/index.js +11 -0
- package/dist/tool/index.js.map +1 -0
- package/dist/transport/BaseTransport.d.ts +66 -0
- package/dist/transport/BaseTransport.d.ts.map +1 -0
- package/dist/transport/BaseTransport.js +103 -0
- package/dist/transport/BaseTransport.js.map +1 -0
- package/dist/transport/HttpTransport.d.ts +41 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -0
- package/dist/transport/HttpTransport.js +160 -0
- package/dist/transport/HttpTransport.js.map +1 -0
- package/dist/transport/LocalTransport.d.ts +40 -0
- package/dist/transport/LocalTransport.d.ts.map +1 -0
- package/dist/transport/LocalTransport.js +157 -0
- package/dist/transport/LocalTransport.js.map +1 -0
- package/dist/transport/QueueTransport.d.ts +63 -0
- package/dist/transport/QueueTransport.d.ts.map +1 -0
- package/dist/transport/QueueTransport.js +194 -0
- package/dist/transport/QueueTransport.js.map +1 -0
- package/dist/transport/StdioTransport.d.ts +51 -0
- package/dist/transport/StdioTransport.d.ts.map +1 -0
- package/dist/transport/StdioTransport.js +216 -0
- package/dist/transport/StdioTransport.js.map +1 -0
- package/dist/transport/TransportFactory.d.ts +35 -0
- package/dist/transport/TransportFactory.d.ts.map +1 -0
- package/dist/transport/TransportFactory.js +100 -0
- package/dist/transport/TransportFactory.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +19 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/types/agent.d.ts +66 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +3 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/config.d.ts +60 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/credential.d.ts +38 -0
- package/dist/types/credential.d.ts.map +1 -0
- package/dist/types/credential.js +3 -0
- package/dist/types/credential.js.map +1 -0
- package/dist/types/error.d.ts +136 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +223 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/llm.d.ts +43 -0
- package/dist/types/llm.d.ts.map +1 -0
- package/dist/types/llm.js +3 -0
- package/dist/types/llm.js.map +1 -0
- package/dist/types/payment.d.ts +129 -0
- package/dist/types/payment.d.ts.map +1 -0
- package/dist/types/payment.js +6 -0
- package/dist/types/payment.js.map +1 -0
- package/dist/types/runtime.d.ts +31 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/runtime.js +3 -0
- package/dist/types/runtime.js.map +1 -0
- package/dist/types/tool.d.ts +72 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/types/tool.js +3 -0
- package/dist/types/tool.js.map +1 -0
- package/dist/types/transport.d.ts +53 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +3 -0
- package/dist/types/transport.js.map +1 -0
- package/dist/types/workflow.d.ts +72 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +6 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/factory.d.ts +14 -0
- package/dist/utils/factory.d.ts.map +1 -0
- package/dist/utils/factory.js +146 -0
- package/dist/utils/factory.js.map +1 -0
- package/dist/workflow/StateManager.d.ts +93 -0
- package/dist/workflow/StateManager.d.ts.map +1 -0
- package/dist/workflow/StateManager.js +223 -0
- package/dist/workflow/StateManager.js.map +1 -0
- package/dist/workflow/WorkflowDefinition.d.ts +49 -0
- package/dist/workflow/WorkflowDefinition.d.ts.map +1 -0
- package/dist/workflow/WorkflowDefinition.js +264 -0
- package/dist/workflow/WorkflowDefinition.js.map +1 -0
- package/dist/workflow/WorkflowExecutor.d.ts +42 -0
- package/dist/workflow/WorkflowExecutor.d.ts.map +1 -0
- package/dist/workflow/WorkflowExecutor.js +372 -0
- package/dist/workflow/WorkflowExecutor.js.map +1 -0
- package/dist/workflow/index.d.ts +7 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +17 -0
- package/dist/workflow/index.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Workflow State Manager for persistence and recovery
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IdempotencyManager = exports.StateManager = exports.InMemoryStateStore = void 0;
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
class InMemoryStateStore {
|
|
9
|
+
store = new Map();
|
|
10
|
+
async save(key, data) {
|
|
11
|
+
this.store.set(key, JSON.parse(JSON.stringify(data)));
|
|
12
|
+
}
|
|
13
|
+
async load(key) {
|
|
14
|
+
const data = this.store.get(key);
|
|
15
|
+
return data ? JSON.parse(JSON.stringify(data)) : null;
|
|
16
|
+
}
|
|
17
|
+
async delete(key) {
|
|
18
|
+
this.store.delete(key);
|
|
19
|
+
}
|
|
20
|
+
async list(prefix) {
|
|
21
|
+
return Array.from(this.store.keys()).filter(k => k.startsWith(prefix));
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.store.clear();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.InMemoryStateStore = InMemoryStateStore;
|
|
28
|
+
class StateManager {
|
|
29
|
+
store;
|
|
30
|
+
logger;
|
|
31
|
+
checkpointInterval;
|
|
32
|
+
constructor(store, logger, checkpointInterval = 5000) {
|
|
33
|
+
this.store = store;
|
|
34
|
+
this.logger = logger;
|
|
35
|
+
this.checkpointInterval = checkpointInterval;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a checkpoint for an execution
|
|
39
|
+
*/
|
|
40
|
+
async checkpoint(execution) {
|
|
41
|
+
const checkpointData = {
|
|
42
|
+
executionId: execution.id,
|
|
43
|
+
workflowId: execution.workflowId,
|
|
44
|
+
status: execution.status,
|
|
45
|
+
input: execution.input,
|
|
46
|
+
context: execution.context,
|
|
47
|
+
completedSteps: execution.steps
|
|
48
|
+
.filter(s => s.status === 'completed')
|
|
49
|
+
.map(s => s.stepId),
|
|
50
|
+
stepResults: this.extractStepResults(execution),
|
|
51
|
+
checkpointedAt: new Date(),
|
|
52
|
+
version: 1,
|
|
53
|
+
};
|
|
54
|
+
const key = this.getCheckpointKey(execution.id);
|
|
55
|
+
await this.store.save(key, checkpointData);
|
|
56
|
+
this.logger.debug(`Checkpoint saved for execution: ${execution.id}`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Load a checkpoint for recovery
|
|
60
|
+
*/
|
|
61
|
+
async loadCheckpoint(executionId) {
|
|
62
|
+
const key = this.getCheckpointKey(executionId);
|
|
63
|
+
const data = await this.store.load(key);
|
|
64
|
+
if (!data) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return data;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Restore execution from checkpoint
|
|
71
|
+
*/
|
|
72
|
+
async restoreExecution(checkpoint) {
|
|
73
|
+
const execution = {
|
|
74
|
+
id: checkpoint.executionId,
|
|
75
|
+
workflowId: checkpoint.workflowId,
|
|
76
|
+
status: 'running', // Resume as running
|
|
77
|
+
input: checkpoint.input,
|
|
78
|
+
startedAt: new Date(),
|
|
79
|
+
steps: [],
|
|
80
|
+
context: checkpoint.context,
|
|
81
|
+
};
|
|
82
|
+
// Restore step results to context
|
|
83
|
+
for (const [stepId, result] of Object.entries(checkpoint.stepResults)) {
|
|
84
|
+
execution.context.variables[`$steps.${stepId}`] = result;
|
|
85
|
+
}
|
|
86
|
+
// Create step execution records for completed steps
|
|
87
|
+
for (const stepId of checkpoint.completedSteps) {
|
|
88
|
+
execution.steps.push({
|
|
89
|
+
id: (0, uuid_1.v4)(),
|
|
90
|
+
stepId,
|
|
91
|
+
status: 'completed',
|
|
92
|
+
output: checkpoint.stepResults[stepId],
|
|
93
|
+
startedAt: new Date(),
|
|
94
|
+
completedAt: new Date(),
|
|
95
|
+
retryCount: 0,
|
|
96
|
+
duration: 0,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
this.logger.info(`Restored execution from checkpoint: ${checkpoint.executionId}`);
|
|
100
|
+
return execution;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Delete checkpoint after successful completion
|
|
104
|
+
*/
|
|
105
|
+
async deleteCheckpoint(executionId) {
|
|
106
|
+
const key = this.getCheckpointKey(executionId);
|
|
107
|
+
await this.store.delete(key);
|
|
108
|
+
this.logger.debug(`Checkpoint deleted for execution: ${executionId}`);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* List all pending checkpoints (for recovery on startup)
|
|
112
|
+
*/
|
|
113
|
+
async listPendingCheckpoints() {
|
|
114
|
+
const keys = await this.store.list('checkpoint:');
|
|
115
|
+
const checkpoints = [];
|
|
116
|
+
for (const key of keys) {
|
|
117
|
+
const data = await this.store.load(key);
|
|
118
|
+
if (data) {
|
|
119
|
+
const checkpoint = data;
|
|
120
|
+
if (checkpoint.status === 'running' || checkpoint.status === 'pending') {
|
|
121
|
+
checkpoints.push(checkpoint);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return checkpoints;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get steps that need to be executed (not yet completed)
|
|
129
|
+
*/
|
|
130
|
+
getStepsToExecute(checkpoint, allStepIds) {
|
|
131
|
+
const completedSet = new Set(checkpoint.completedSteps);
|
|
132
|
+
return allStepIds.filter(id => !completedSet.has(id));
|
|
133
|
+
}
|
|
134
|
+
getCheckpointKey(executionId) {
|
|
135
|
+
return `checkpoint:${executionId}`;
|
|
136
|
+
}
|
|
137
|
+
extractStepResults(execution) {
|
|
138
|
+
const results = {};
|
|
139
|
+
for (const step of execution.steps) {
|
|
140
|
+
if (step.status === 'completed' && step.output !== undefined) {
|
|
141
|
+
results[step.stepId] = step.output;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return results;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.StateManager = StateManager;
|
|
148
|
+
/**
|
|
149
|
+
* Idempotency key manager for ensuring workflow idempotency
|
|
150
|
+
*/
|
|
151
|
+
class IdempotencyManager {
|
|
152
|
+
store;
|
|
153
|
+
logger;
|
|
154
|
+
ttlMs;
|
|
155
|
+
constructor(store, logger, ttlMs = 24 * 60 * 60 * 1000) {
|
|
156
|
+
this.store = store;
|
|
157
|
+
this.logger = logger;
|
|
158
|
+
this.ttlMs = ttlMs;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Generate idempotency key from workflow ID and input
|
|
162
|
+
*/
|
|
163
|
+
generateKey(workflowId, input) {
|
|
164
|
+
const inputHash = this.hashInput(input);
|
|
165
|
+
return `idempotency:${workflowId}:${inputHash}`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if a workflow execution with this key already exists
|
|
169
|
+
*/
|
|
170
|
+
async checkIdempotency(key) {
|
|
171
|
+
const data = await this.store.load(key);
|
|
172
|
+
if (!data) {
|
|
173
|
+
return { exists: false };
|
|
174
|
+
}
|
|
175
|
+
const record = data;
|
|
176
|
+
// Check if expired
|
|
177
|
+
if (Date.now() - new Date(record.createdAt).getTime() > this.ttlMs) {
|
|
178
|
+
await this.store.delete(key);
|
|
179
|
+
return { exists: false };
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
exists: true,
|
|
183
|
+
executionId: record.executionId,
|
|
184
|
+
result: record.result,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Record an execution for idempotency
|
|
189
|
+
*/
|
|
190
|
+
async recordExecution(key, executionId, result) {
|
|
191
|
+
const record = {
|
|
192
|
+
executionId,
|
|
193
|
+
result,
|
|
194
|
+
createdAt: new Date().toISOString(),
|
|
195
|
+
};
|
|
196
|
+
await this.store.save(key, record);
|
|
197
|
+
this.logger.debug(`Idempotency key recorded: ${key}`);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Update result for an existing idempotency record
|
|
201
|
+
*/
|
|
202
|
+
async updateResult(key, result) {
|
|
203
|
+
const data = await this.store.load(key);
|
|
204
|
+
if (data) {
|
|
205
|
+
const record = data;
|
|
206
|
+
record.result = result;
|
|
207
|
+
await this.store.save(key, record);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
hashInput(input) {
|
|
211
|
+
// Simple hash for idempotency - in production use crypto
|
|
212
|
+
const str = JSON.stringify(input);
|
|
213
|
+
let hash = 0;
|
|
214
|
+
for (let i = 0; i < str.length; i++) {
|
|
215
|
+
const char = str.charCodeAt(i);
|
|
216
|
+
hash = ((hash << 5) - hash) + char;
|
|
217
|
+
hash = hash & hash;
|
|
218
|
+
}
|
|
219
|
+
return Math.abs(hash).toString(36);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.IdempotencyManager = IdempotencyManager;
|
|
223
|
+
//# sourceMappingURL=StateManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateManager.js","sourceRoot":"","sources":["../../src/workflow/StateManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Definition and Validation
|
|
3
|
+
*/
|
|
4
|
+
import { WorkflowDefinition, WorkflowStep, TriggerConfig, ErrorHandlingConfig, RetryPolicy } from '../types/workflow';
|
|
5
|
+
export declare class WorkflowDefinitionBuilder {
|
|
6
|
+
private definition;
|
|
7
|
+
constructor(id: string, name: string, version: string);
|
|
8
|
+
trigger(config: TriggerConfig): this;
|
|
9
|
+
step(step: WorkflowStep): this;
|
|
10
|
+
steps(steps: WorkflowStep[]): this;
|
|
11
|
+
errorHandling(config: ErrorHandlingConfig): this;
|
|
12
|
+
retryPolicy(policy: RetryPolicy): this;
|
|
13
|
+
build(): WorkflowDefinition;
|
|
14
|
+
}
|
|
15
|
+
export declare class WorkflowValidator {
|
|
16
|
+
/**
|
|
17
|
+
* Validate a complete workflow definition
|
|
18
|
+
*/
|
|
19
|
+
static validate(definition: WorkflowDefinition): void;
|
|
20
|
+
private static validateRequiredFields;
|
|
21
|
+
private static validateTrigger;
|
|
22
|
+
private static validateSteps;
|
|
23
|
+
/**
|
|
24
|
+
* Validate that steps form a valid DAG (no cycles)
|
|
25
|
+
*/
|
|
26
|
+
static validateDAG(steps: WorkflowStep[]): void;
|
|
27
|
+
private static validateRetryPolicy;
|
|
28
|
+
/**
|
|
29
|
+
* Get topological order of steps
|
|
30
|
+
*/
|
|
31
|
+
static getTopologicalOrder(steps: WorkflowStep[]): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Get steps that can run in parallel (same level in DAG)
|
|
34
|
+
*/
|
|
35
|
+
static getParallelGroups(steps: WorkflowStep[]): string[][];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Helper function to create workflow definitions
|
|
39
|
+
*/
|
|
40
|
+
export declare function workflow(config: {
|
|
41
|
+
id: string;
|
|
42
|
+
name: string;
|
|
43
|
+
version: string;
|
|
44
|
+
trigger: TriggerConfig;
|
|
45
|
+
steps: WorkflowStep[];
|
|
46
|
+
errorHandling?: ErrorHandlingConfig;
|
|
47
|
+
retryPolicy?: RetryPolicy;
|
|
48
|
+
}): WorkflowDefinition;
|
|
49
|
+
//# sourceMappingURL=WorkflowDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowDefinition.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowDefinition.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAG3B,qBAAa,yBAAyB;IACpC,OAAO,CAAC,UAAU,CAAmC;gBAEzC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAOrD,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAKpC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAK9B,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAKlC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKhD,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKtC,KAAK,IAAI,kBAAkB;CAI5B;AAED,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAWrD,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAkBrC,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,MAAM,CAAC,aAAa;IAiC5B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI;IAoD/C,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA4BlC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE;IAgD3D;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,EAAE;CA+C5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,kBAAkB,CAarB"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Workflow Definition and Validation
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WorkflowValidator = exports.WorkflowDefinitionBuilder = void 0;
|
|
7
|
+
exports.workflow = workflow;
|
|
8
|
+
const error_1 = require("../types/error");
|
|
9
|
+
class WorkflowDefinitionBuilder {
|
|
10
|
+
definition = {};
|
|
11
|
+
constructor(id, name, version) {
|
|
12
|
+
this.definition.id = id;
|
|
13
|
+
this.definition.name = name;
|
|
14
|
+
this.definition.version = version;
|
|
15
|
+
this.definition.steps = [];
|
|
16
|
+
}
|
|
17
|
+
trigger(config) {
|
|
18
|
+
this.definition.trigger = config;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
step(step) {
|
|
22
|
+
this.definition.steps.push(step);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
steps(steps) {
|
|
26
|
+
this.definition.steps = steps;
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
errorHandling(config) {
|
|
30
|
+
this.definition.errorHandling = config;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
retryPolicy(policy) {
|
|
34
|
+
this.definition.retryPolicy = policy;
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
build() {
|
|
38
|
+
WorkflowValidator.validate(this.definition);
|
|
39
|
+
return this.definition;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.WorkflowDefinitionBuilder = WorkflowDefinitionBuilder;
|
|
43
|
+
class WorkflowValidator {
|
|
44
|
+
/**
|
|
45
|
+
* Validate a complete workflow definition
|
|
46
|
+
*/
|
|
47
|
+
static validate(definition) {
|
|
48
|
+
this.validateRequiredFields(definition);
|
|
49
|
+
this.validateTrigger(definition.trigger);
|
|
50
|
+
this.validateSteps(definition.steps);
|
|
51
|
+
this.validateDAG(definition.steps);
|
|
52
|
+
if (definition.retryPolicy) {
|
|
53
|
+
this.validateRetryPolicy(definition.retryPolicy);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static validateRequiredFields(definition) {
|
|
57
|
+
if (!definition.id) {
|
|
58
|
+
throw new error_1.ValidationError('Workflow id is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
|
|
59
|
+
}
|
|
60
|
+
if (!definition.name) {
|
|
61
|
+
throw new error_1.ValidationError('Workflow name is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
|
|
62
|
+
}
|
|
63
|
+
if (!definition.version) {
|
|
64
|
+
throw new error_1.ValidationError('Workflow version is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
|
|
65
|
+
}
|
|
66
|
+
if (!definition.trigger) {
|
|
67
|
+
throw new error_1.ValidationError('Workflow trigger is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
|
|
68
|
+
}
|
|
69
|
+
if (!definition.steps || definition.steps.length === 0) {
|
|
70
|
+
throw new error_1.ValidationError('Workflow must have at least one step', error_1.ErrorCodes.INVALID_INPUT);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
static validateTrigger(trigger) {
|
|
74
|
+
const validTypes = ['webhook', 'cron', 'polling', 'manual'];
|
|
75
|
+
if (!validTypes.includes(trigger.type)) {
|
|
76
|
+
throw new error_1.ValidationError(`Invalid trigger type: ${trigger.type}. Must be one of: ${validTypes.join(', ')}`, error_1.ErrorCodes.INVALID_FORMAT);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
static validateSteps(steps) {
|
|
80
|
+
const stepIds = new Set();
|
|
81
|
+
for (const step of steps) {
|
|
82
|
+
// Check for duplicate step IDs
|
|
83
|
+
if (stepIds.has(step.id)) {
|
|
84
|
+
throw new error_1.ValidationError(`Duplicate step id: ${step.id}`, error_1.ErrorCodes.INVALID_INPUT);
|
|
85
|
+
}
|
|
86
|
+
stepIds.add(step.id);
|
|
87
|
+
// Validate step type
|
|
88
|
+
const validTypes = ['tool', 'agent', 'condition', 'loop', 'parallel', 'payment'];
|
|
89
|
+
if (!validTypes.includes(step.type)) {
|
|
90
|
+
throw new error_1.ValidationError(`Invalid step type: ${step.type}. Must be one of: ${validTypes.join(', ')}`, error_1.ErrorCodes.INVALID_FORMAT);
|
|
91
|
+
}
|
|
92
|
+
// Validate dependencies reference existing steps
|
|
93
|
+
if (step.dependencies) {
|
|
94
|
+
for (const dep of step.dependencies) {
|
|
95
|
+
if (!stepIds.has(dep)) {
|
|
96
|
+
// Dependency might be defined later, we'll check in DAG validation
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate that steps form a valid DAG (no cycles)
|
|
104
|
+
*/
|
|
105
|
+
static validateDAG(steps) {
|
|
106
|
+
const stepMap = new Map();
|
|
107
|
+
for (const step of steps) {
|
|
108
|
+
stepMap.set(step.id, step);
|
|
109
|
+
}
|
|
110
|
+
// Check all dependencies exist
|
|
111
|
+
for (const step of steps) {
|
|
112
|
+
if (step.dependencies) {
|
|
113
|
+
for (const dep of step.dependencies) {
|
|
114
|
+
if (!stepMap.has(dep)) {
|
|
115
|
+
throw new error_1.ValidationError(`Step ${step.id} depends on non-existent step: ${dep}`, error_1.ErrorCodes.INVALID_INPUT);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Detect cycles using DFS
|
|
121
|
+
const visited = new Set();
|
|
122
|
+
const recursionStack = new Set();
|
|
123
|
+
const hasCycle = (stepId) => {
|
|
124
|
+
if (recursionStack.has(stepId))
|
|
125
|
+
return true;
|
|
126
|
+
if (visited.has(stepId))
|
|
127
|
+
return false;
|
|
128
|
+
visited.add(stepId);
|
|
129
|
+
recursionStack.add(stepId);
|
|
130
|
+
const step = stepMap.get(stepId);
|
|
131
|
+
if (step?.dependencies) {
|
|
132
|
+
for (const dep of step.dependencies) {
|
|
133
|
+
if (hasCycle(dep))
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
recursionStack.delete(stepId);
|
|
138
|
+
return false;
|
|
139
|
+
};
|
|
140
|
+
for (const step of steps) {
|
|
141
|
+
if (hasCycle(step.id)) {
|
|
142
|
+
throw new error_1.ValidationError('Workflow contains circular dependencies', error_1.ErrorCodes.CIRCULAR_DEPENDENCY);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
static validateRetryPolicy(policy) {
|
|
147
|
+
if (policy.maxAttempts < 1) {
|
|
148
|
+
throw new error_1.ValidationError('Retry policy maxAttempts must be at least 1', error_1.ErrorCodes.INVALID_INPUT);
|
|
149
|
+
}
|
|
150
|
+
if (policy.baseDelay < 0) {
|
|
151
|
+
throw new error_1.ValidationError('Retry policy baseDelay must be non-negative', error_1.ErrorCodes.INVALID_INPUT);
|
|
152
|
+
}
|
|
153
|
+
if (policy.maxDelay < policy.baseDelay) {
|
|
154
|
+
throw new error_1.ValidationError('Retry policy maxDelay must be >= baseDelay', error_1.ErrorCodes.INVALID_INPUT);
|
|
155
|
+
}
|
|
156
|
+
const validStrategies = ['linear', 'exponential', 'fixed'];
|
|
157
|
+
if (!validStrategies.includes(policy.backoffStrategy)) {
|
|
158
|
+
throw new error_1.ValidationError(`Invalid backoff strategy: ${policy.backoffStrategy}`, error_1.ErrorCodes.INVALID_FORMAT);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Get topological order of steps
|
|
163
|
+
*/
|
|
164
|
+
static getTopologicalOrder(steps) {
|
|
165
|
+
const stepMap = new Map();
|
|
166
|
+
const inDegree = new Map();
|
|
167
|
+
const adjacency = new Map();
|
|
168
|
+
// Initialize
|
|
169
|
+
for (const step of steps) {
|
|
170
|
+
stepMap.set(step.id, step);
|
|
171
|
+
inDegree.set(step.id, 0);
|
|
172
|
+
adjacency.set(step.id, []);
|
|
173
|
+
}
|
|
174
|
+
// Build adjacency list and calculate in-degrees
|
|
175
|
+
for (const step of steps) {
|
|
176
|
+
if (step.dependencies) {
|
|
177
|
+
for (const dep of step.dependencies) {
|
|
178
|
+
adjacency.get(dep).push(step.id);
|
|
179
|
+
inDegree.set(step.id, inDegree.get(step.id) + 1);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Kahn's algorithm
|
|
184
|
+
const queue = [];
|
|
185
|
+
const result = [];
|
|
186
|
+
// Start with nodes that have no dependencies
|
|
187
|
+
for (const [stepId, degree] of inDegree) {
|
|
188
|
+
if (degree === 0) {
|
|
189
|
+
queue.push(stepId);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
while (queue.length > 0) {
|
|
193
|
+
const current = queue.shift();
|
|
194
|
+
result.push(current);
|
|
195
|
+
for (const neighbor of adjacency.get(current)) {
|
|
196
|
+
inDegree.set(neighbor, inDegree.get(neighbor) - 1);
|
|
197
|
+
if (inDegree.get(neighbor) === 0) {
|
|
198
|
+
queue.push(neighbor);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get steps that can run in parallel (same level in DAG)
|
|
206
|
+
*/
|
|
207
|
+
static getParallelGroups(steps) {
|
|
208
|
+
const stepMap = new Map();
|
|
209
|
+
const levels = new Map();
|
|
210
|
+
for (const step of steps) {
|
|
211
|
+
stepMap.set(step.id, step);
|
|
212
|
+
}
|
|
213
|
+
// Calculate level for each step
|
|
214
|
+
const getLevel = (stepId, visited = new Set()) => {
|
|
215
|
+
if (levels.has(stepId))
|
|
216
|
+
return levels.get(stepId);
|
|
217
|
+
if (visited.has(stepId))
|
|
218
|
+
return 0; // Cycle detected, handled elsewhere
|
|
219
|
+
visited.add(stepId);
|
|
220
|
+
const step = stepMap.get(stepId);
|
|
221
|
+
if (!step.dependencies || step.dependencies.length === 0) {
|
|
222
|
+
levels.set(stepId, 0);
|
|
223
|
+
return 0;
|
|
224
|
+
}
|
|
225
|
+
const maxDepLevel = Math.max(...step.dependencies.map(dep => getLevel(dep, visited)));
|
|
226
|
+
const level = maxDepLevel + 1;
|
|
227
|
+
levels.set(stepId, level);
|
|
228
|
+
return level;
|
|
229
|
+
};
|
|
230
|
+
for (const step of steps) {
|
|
231
|
+
getLevel(step.id);
|
|
232
|
+
}
|
|
233
|
+
// Group by level
|
|
234
|
+
const groups = new Map();
|
|
235
|
+
for (const [stepId, level] of levels) {
|
|
236
|
+
if (!groups.has(level)) {
|
|
237
|
+
groups.set(level, []);
|
|
238
|
+
}
|
|
239
|
+
groups.get(level).push(stepId);
|
|
240
|
+
}
|
|
241
|
+
// Return sorted by level
|
|
242
|
+
return Array.from(groups.entries())
|
|
243
|
+
.sort((a, b) => a[0] - b[0])
|
|
244
|
+
.map(([_, stepIds]) => stepIds);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
exports.WorkflowValidator = WorkflowValidator;
|
|
248
|
+
/**
|
|
249
|
+
* Helper function to create workflow definitions
|
|
250
|
+
*/
|
|
251
|
+
function workflow(config) {
|
|
252
|
+
const definition = {
|
|
253
|
+
id: config.id,
|
|
254
|
+
name: config.name,
|
|
255
|
+
version: config.version,
|
|
256
|
+
trigger: config.trigger,
|
|
257
|
+
steps: config.steps,
|
|
258
|
+
errorHandling: config.errorHandling,
|
|
259
|
+
retryPolicy: config.retryPolicy,
|
|
260
|
+
};
|
|
261
|
+
WorkflowValidator.validate(definition);
|
|
262
|
+
return definition;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=WorkflowDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowDefinition.js","sourceRoot":"","sources":["../../src/workflow/WorkflowDefinition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Executor with DAG-based execution
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
5
|
+
import { WorkflowDefinition, WorkflowExecution, ExecutionContext } from '../types/workflow';
|
|
6
|
+
import { ToolContext, ToolResult, Logger, MetricsCollector } from '../types/tool';
|
|
7
|
+
export interface ExecutorDependencies {
|
|
8
|
+
logger: Logger;
|
|
9
|
+
metrics: MetricsCollector;
|
|
10
|
+
toolExecutor: (toolName: string, input: unknown, context: ToolContext) => Promise<ToolResult>;
|
|
11
|
+
agentExecutor?: (agentConfig: any, goal: string, context: any) => Promise<any>;
|
|
12
|
+
credentialResolver?: (scope: string) => Promise<Record<string, unknown>>;
|
|
13
|
+
}
|
|
14
|
+
export declare class WorkflowExecutor extends EventEmitter {
|
|
15
|
+
private logger;
|
|
16
|
+
private metrics;
|
|
17
|
+
private toolExecutor;
|
|
18
|
+
private agentExecutor?;
|
|
19
|
+
private credentialResolver?;
|
|
20
|
+
private activeExecutions;
|
|
21
|
+
constructor(deps: ExecutorDependencies);
|
|
22
|
+
execute(workflow: WorkflowDefinition, input?: unknown, parentContext?: Partial<ExecutionContext>): Promise<WorkflowExecution>;
|
|
23
|
+
private executeStep;
|
|
24
|
+
private executeStepByType;
|
|
25
|
+
private executeToolStep;
|
|
26
|
+
private executeAgentStep;
|
|
27
|
+
private executeConditionStep;
|
|
28
|
+
private executeLoopStep;
|
|
29
|
+
private executeParallelStep;
|
|
30
|
+
private executeWithRetry;
|
|
31
|
+
private calculateDelay;
|
|
32
|
+
private resolveStepInput;
|
|
33
|
+
private resolveValue;
|
|
34
|
+
private getNestedValue;
|
|
35
|
+
private evaluateCondition;
|
|
36
|
+
private safeEvaluate;
|
|
37
|
+
private parseValue;
|
|
38
|
+
private sleep;
|
|
39
|
+
cancel(executionId: string): Promise<void>;
|
|
40
|
+
getActiveExecutions(): WorkflowExecution[];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=WorkflowExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowExecutor.d.ts","sourceRoot":"","sources":["../../src/workflow/WorkflowExecutor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAEjB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIlF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,gBAAgB,CAAC;IAC1B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9F,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/E,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1E;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,aAAa,CAAC,CAAwC;IAC9D,OAAO,CAAC,kBAAkB,CAAC,CAA6C;IACxE,OAAO,CAAC,gBAAgB,CAA6C;gBAEzD,IAAI,EAAE,oBAAoB;IAShC,OAAO,CACX,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,CAAC,EAAE,OAAO,EACf,aAAa,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACxC,OAAO,CAAC,iBAAiB,CAAC;YA6Ef,WAAW;YAkEX,iBAAiB;YAkCjB,eAAe;YAmBf,gBAAgB;YAyBhB,oBAAoB;YAmBpB,eAAe;YAgCf,mBAAmB;YAcnB,gBAAgB;IAyB9B,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK;IAIP,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,mBAAmB,IAAI,iBAAiB,EAAE;CAG3C"}
|