@n8n/ai-workflow-builder 0.23.0 → 0.24.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/dist/ai-workflow-builder-agent.service.d.ts +12 -13
- package/dist/ai-workflow-builder-agent.service.js +94 -57
- package/dist/ai-workflow-builder-agent.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/session-manager.service.d.ts +15 -0
- package/dist/session-manager.service.js +74 -0
- package/dist/session-manager.service.js.map +1 -0
- package/dist/tools/add-node.tool.d.ts +3 -38
- package/dist/tools/add-node.tool.js +12 -5
- package/dist/tools/add-node.tool.js.map +1 -1
- package/dist/tools/builder-tools.d.ts +13 -0
- package/dist/tools/builder-tools.js +34 -0
- package/dist/tools/builder-tools.js.map +1 -0
- package/dist/tools/connect-nodes.tool.d.ts +3 -29
- package/dist/tools/connect-nodes.tool.js +8 -5
- package/dist/tools/connect-nodes.tool.js.map +1 -1
- package/dist/tools/get-node-parameter.tool.d.ts +3 -17
- package/dist/tools/get-node-parameter.tool.js +10 -5
- package/dist/tools/get-node-parameter.tool.js.map +1 -1
- package/dist/tools/node-details.tool.d.ts +5 -1
- package/dist/tools/node-details.tool.js +9 -5
- package/dist/tools/node-details.tool.js.map +1 -1
- package/dist/tools/node-search.tool.d.ts +5 -1
- package/dist/tools/node-search.tool.js +9 -5
- package/dist/tools/node-search.tool.js.map +1 -1
- package/dist/tools/prompts/main-agent.prompt.js +31 -13
- package/dist/tools/prompts/main-agent.prompt.js.map +1 -1
- package/dist/tools/remove-node.tool.d.ts +3 -15
- package/dist/tools/remove-node.tool.js +9 -5
- package/dist/tools/remove-node.tool.js.map +1 -1
- package/dist/tools/update-node-parameters.tool.d.ts +3 -20
- package/dist/tools/update-node-parameters.tool.js +11 -7
- package/dist/tools/update-node-parameters.tool.js.map +1 -1
- package/dist/types/sessions.d.ts +8 -0
- package/dist/types/sessions.js +34 -0
- package/dist/types/sessions.js.map +1 -0
- package/dist/utils/stream-processor.d.ts +6 -3
- package/dist/utils/stream-processor.js +1 -1
- package/dist/utils/stream-processor.js.map +1 -1
- package/dist/workflow-builder-agent.d.ts +5 -10
- package/dist/workflow-builder-agent.js +17 -49
- package/dist/workflow-builder-agent.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
|
-
import { AiAssistantClient } from '@n8n_io/ai-assistant-sdk';
|
|
2
|
+
import { AiAssistantClient, AiAssistantSDK } from '@n8n_io/ai-assistant-sdk';
|
|
3
3
|
import { INodeTypes } from 'n8n-workflow';
|
|
4
4
|
import type { IUser } from 'n8n-workflow';
|
|
5
5
|
import { type ChatPayload } from './workflow-builder-agent';
|
|
6
|
+
type OnCreditsUpdated = (userId: string, creditsQuota: number, creditsClaimed: number) => void;
|
|
6
7
|
export declare class AiWorkflowBuilderService {
|
|
7
8
|
private readonly nodeTypes;
|
|
8
9
|
private readonly client?;
|
|
9
10
|
private readonly logger?;
|
|
10
11
|
private readonly instanceUrl?;
|
|
12
|
+
private readonly onCreditsUpdated?;
|
|
11
13
|
private parsedNodeTypes;
|
|
12
|
-
private
|
|
13
|
-
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private agent;
|
|
17
|
-
constructor(nodeTypes: INodeTypes, client?: AiAssistantClient | undefined, logger?: Logger | undefined, instanceUrl?: string | undefined);
|
|
14
|
+
private sessionManager;
|
|
15
|
+
constructor(nodeTypes: INodeTypes, client?: AiAssistantClient | undefined, logger?: Logger | undefined, instanceUrl?: string | undefined, onCreditsUpdated?: OnCreditsUpdated | undefined);
|
|
16
|
+
private static getAnthropicClaudeModel;
|
|
17
|
+
private getApiProxyAuthHeaders;
|
|
18
18
|
private setupModels;
|
|
19
19
|
private getNodeTypes;
|
|
20
20
|
private getAgent;
|
|
21
|
-
|
|
21
|
+
private onGenerationSuccess;
|
|
22
|
+
chat(payload: ChatPayload, user: IUser, abortSignal?: AbortSignal): AsyncGenerator<import("./types").StreamOutput, void, unknown>;
|
|
22
23
|
getSessions(workflowId: string | undefined, user?: IUser): Promise<{
|
|
23
|
-
sessions:
|
|
24
|
-
sessionId: string;
|
|
25
|
-
messages: Record<string, unknown>[];
|
|
26
|
-
lastUpdated: string;
|
|
27
|
-
}[];
|
|
24
|
+
sessions: import("./types/sessions").Session[];
|
|
28
25
|
}>;
|
|
26
|
+
getBuilderInstanceCredits(user: IUser): Promise<AiAssistantSDK.BuilderInstanceCreditsResponse>;
|
|
29
27
|
}
|
|
28
|
+
export {};
|
|
@@ -8,83 +8,94 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
var AiWorkflowBuilderService_1;
|
|
11
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
16
|
exports.AiWorkflowBuilderService = void 0;
|
|
13
17
|
const tracer_langchain_1 = require("@langchain/core/tracers/tracer_langchain");
|
|
14
|
-
const langgraph_1 = require("@langchain/langgraph");
|
|
15
18
|
const backend_common_1 = require("@n8n/backend-common");
|
|
16
19
|
const di_1 = require("@n8n/di");
|
|
17
20
|
const ai_assistant_sdk_1 = require("@n8n_io/ai-assistant-sdk");
|
|
21
|
+
const assert_1 = __importDefault(require("assert"));
|
|
18
22
|
const langsmith_1 = require("langsmith");
|
|
19
23
|
const errors_1 = require("./errors");
|
|
20
24
|
const llm_config_1 = require("./llm-config");
|
|
25
|
+
const session_manager_service_1 = require("./session-manager.service");
|
|
21
26
|
const workflow_builder_agent_1 = require("./workflow-builder-agent");
|
|
22
|
-
let AiWorkflowBuilderService = class AiWorkflowBuilderService {
|
|
27
|
+
let AiWorkflowBuilderService = AiWorkflowBuilderService_1 = class AiWorkflowBuilderService {
|
|
23
28
|
nodeTypes;
|
|
24
29
|
client;
|
|
25
30
|
logger;
|
|
26
31
|
instanceUrl;
|
|
32
|
+
onCreditsUpdated;
|
|
27
33
|
parsedNodeTypes = [];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
tracingClient;
|
|
31
|
-
checkpointer = new langgraph_1.MemorySaver();
|
|
32
|
-
agent;
|
|
33
|
-
constructor(nodeTypes, client, logger, instanceUrl) {
|
|
34
|
+
sessionManager;
|
|
35
|
+
constructor(nodeTypes, client, logger, instanceUrl, onCreditsUpdated) {
|
|
34
36
|
this.nodeTypes = nodeTypes;
|
|
35
37
|
this.client = client;
|
|
36
38
|
this.logger = logger;
|
|
37
39
|
this.instanceUrl = instanceUrl;
|
|
40
|
+
this.onCreditsUpdated = onCreditsUpdated;
|
|
38
41
|
this.parsedNodeTypes = this.getNodeTypes();
|
|
42
|
+
this.sessionManager = new session_manager_service_1.SessionManagerService(this.parsedNodeTypes, logger);
|
|
43
|
+
}
|
|
44
|
+
static async getAnthropicClaudeModel({ baseUrl, authHeaders = {}, apiKey = '-', } = {}) {
|
|
45
|
+
return await (0, llm_config_1.anthropicClaudeSonnet4)({
|
|
46
|
+
baseUrl,
|
|
47
|
+
apiKey,
|
|
48
|
+
headers: {
|
|
49
|
+
...authHeaders,
|
|
50
|
+
'anthropic-beta': 'prompt-caching-2024-07-31',
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async getApiProxyAuthHeaders(user, useDeprecatedCredentials = false) {
|
|
55
|
+
(0, assert_1.default)(this.client);
|
|
56
|
+
let authHeaders;
|
|
57
|
+
if (useDeprecatedCredentials) {
|
|
58
|
+
const authResponse = await this.client.generateApiProxyCredentials(user);
|
|
59
|
+
authHeaders = { Authorization: authResponse.apiKey };
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const authResponse = await this.client.getBuilderApiProxyToken(user);
|
|
63
|
+
authHeaders = {
|
|
64
|
+
Authorization: `${authResponse.tokenType} ${authResponse.accessToken}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return authHeaders;
|
|
39
68
|
}
|
|
40
|
-
async setupModels(user) {
|
|
69
|
+
async setupModels(user, useDeprecatedCredentials = false) {
|
|
41
70
|
try {
|
|
42
|
-
if (this.
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
if (this.client && user) {
|
|
46
|
-
const authHeaders = await this.client.generateApiProxyCredentials(user);
|
|
71
|
+
if (this.client) {
|
|
72
|
+
const authHeaders = await this.getApiProxyAuthHeaders(user, useDeprecatedCredentials);
|
|
47
73
|
const baseUrl = this.client.getApiProxyBaseUrl();
|
|
48
|
-
|
|
49
|
-
baseUrl: baseUrl + '/openai',
|
|
50
|
-
apiKey: '-',
|
|
51
|
-
headers: {
|
|
52
|
-
Authorization: authHeaders.apiKey,
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
this.llmComplexTask = await (0, llm_config_1.anthropicClaudeSonnet4)({
|
|
74
|
+
const anthropicClaude = await AiWorkflowBuilderService_1.getAnthropicClaudeModel({
|
|
56
75
|
baseUrl: baseUrl + '/anthropic',
|
|
57
|
-
|
|
58
|
-
headers: {
|
|
59
|
-
Authorization: authHeaders.apiKey,
|
|
60
|
-
'anthropic-beta': 'prompt-caching-2024-07-31',
|
|
61
|
-
},
|
|
76
|
+
authHeaders,
|
|
62
77
|
});
|
|
63
|
-
|
|
78
|
+
const tracingClient = new langsmith_1.Client({
|
|
64
79
|
apiKey: '-',
|
|
65
80
|
apiUrl: baseUrl + '/langsmith',
|
|
66
81
|
autoBatchTracing: false,
|
|
67
82
|
traceBatchConcurrency: 1,
|
|
68
83
|
fetchOptions: {
|
|
69
84
|
headers: {
|
|
70
|
-
|
|
85
|
+
...authHeaders,
|
|
71
86
|
},
|
|
72
87
|
},
|
|
73
88
|
});
|
|
74
|
-
return;
|
|
89
|
+
return { tracingClient, anthropicClaude, authHeaders };
|
|
75
90
|
}
|
|
76
|
-
|
|
77
|
-
apiKey: process.env.N8N_AI_OPENAI_API_KEY ?? '',
|
|
78
|
-
});
|
|
79
|
-
this.llmComplexTask = await (0, llm_config_1.anthropicClaudeSonnet4)({
|
|
91
|
+
const anthropicClaude = await AiWorkflowBuilderService_1.getAnthropicClaudeModel({
|
|
80
92
|
apiKey: process.env.N8N_AI_ANTHROPIC_KEY ?? '',
|
|
81
|
-
headers: {
|
|
82
|
-
'anthropic-beta': 'prompt-caching-2024-07-31',
|
|
83
|
-
},
|
|
84
93
|
});
|
|
94
|
+
return { anthropicClaude };
|
|
85
95
|
}
|
|
86
96
|
catch (error) {
|
|
87
|
-
const
|
|
97
|
+
const errorMessage = error instanceof Error ? `: ${error.message}` : '';
|
|
98
|
+
const llmError = new errors_1.LLMServiceError(`Failed to connect to LLM Provider${errorMessage}`, {
|
|
88
99
|
cause: error,
|
|
89
100
|
tags: {
|
|
90
101
|
hasClient: !!this.client,
|
|
@@ -130,41 +141,67 @@ let AiWorkflowBuilderService = class AiWorkflowBuilderService {
|
|
|
130
141
|
});
|
|
131
142
|
return nodeTypes;
|
|
132
143
|
}
|
|
133
|
-
async getAgent(user) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
if (!this.llmComplexTask || !this.llmSimpleTask) {
|
|
138
|
-
throw new errors_1.LLMServiceError('Failed to initialize LLM models');
|
|
139
|
-
}
|
|
140
|
-
this.agent ??= new workflow_builder_agent_1.WorkflowBuilderAgent({
|
|
144
|
+
async getAgent(user, useDeprecatedCredentials = false) {
|
|
145
|
+
const { anthropicClaude, tracingClient, authHeaders } = await this.setupModels(user, useDeprecatedCredentials);
|
|
146
|
+
const agent = new workflow_builder_agent_1.WorkflowBuilderAgent({
|
|
141
147
|
parsedNodeTypes: this.parsedNodeTypes,
|
|
142
|
-
llmSimpleTask:
|
|
143
|
-
llmComplexTask:
|
|
148
|
+
llmSimpleTask: anthropicClaude,
|
|
149
|
+
llmComplexTask: anthropicClaude,
|
|
144
150
|
logger: this.logger,
|
|
145
|
-
checkpointer: this.
|
|
146
|
-
tracer:
|
|
147
|
-
? new tracer_langchain_1.LangChainTracer({ client:
|
|
151
|
+
checkpointer: this.sessionManager.getCheckpointer(),
|
|
152
|
+
tracer: tracingClient
|
|
153
|
+
? new tracer_langchain_1.LangChainTracer({ client: tracingClient, projectName: 'n8n-workflow-builder' })
|
|
148
154
|
: undefined,
|
|
149
155
|
instanceUrl: this.instanceUrl,
|
|
156
|
+
onGenerationSuccess: async () => {
|
|
157
|
+
if (!useDeprecatedCredentials) {
|
|
158
|
+
await this.onGenerationSuccess(user, authHeaders);
|
|
159
|
+
}
|
|
160
|
+
},
|
|
150
161
|
});
|
|
151
|
-
return
|
|
162
|
+
return agent;
|
|
163
|
+
}
|
|
164
|
+
async onGenerationSuccess(user, authHeaders) {
|
|
165
|
+
try {
|
|
166
|
+
if (this.client) {
|
|
167
|
+
(0, assert_1.default)(authHeaders, 'Auth headers must be set when AI Assistant Service client is used');
|
|
168
|
+
(0, assert_1.default)(user);
|
|
169
|
+
const creditsInfo = await this.client.markBuilderSuccess(user, authHeaders);
|
|
170
|
+
if (this.onCreditsUpdated && user.id && creditsInfo) {
|
|
171
|
+
this.onCreditsUpdated(user.id, creditsInfo.creditsQuota, creditsInfo.creditsClaimed);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (error instanceof Error) {
|
|
177
|
+
this.logger?.error(`Unable to mark generation success ${error.message}`, { error });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
152
180
|
}
|
|
153
181
|
async *chat(payload, user, abortSignal) {
|
|
154
|
-
const agent = await this.getAgent(user);
|
|
182
|
+
const agent = await this.getAgent(user, payload.useDeprecatedCredentials);
|
|
155
183
|
for await (const output of agent.chat(payload, user?.id?.toString(), abortSignal)) {
|
|
156
184
|
yield output;
|
|
157
185
|
}
|
|
158
186
|
}
|
|
159
187
|
async getSessions(workflowId, user) {
|
|
160
|
-
const
|
|
161
|
-
return await
|
|
188
|
+
const userId = user?.id?.toString();
|
|
189
|
+
return await this.sessionManager.getSessions(workflowId, userId);
|
|
190
|
+
}
|
|
191
|
+
async getBuilderInstanceCredits(user) {
|
|
192
|
+
if (this.client) {
|
|
193
|
+
return await this.client.getBuilderInstanceCredits(user);
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
creditsQuota: -1,
|
|
197
|
+
creditsClaimed: 0,
|
|
198
|
+
};
|
|
162
199
|
}
|
|
163
200
|
};
|
|
164
201
|
exports.AiWorkflowBuilderService = AiWorkflowBuilderService;
|
|
165
|
-
exports.AiWorkflowBuilderService = AiWorkflowBuilderService = __decorate([
|
|
202
|
+
exports.AiWorkflowBuilderService = AiWorkflowBuilderService = AiWorkflowBuilderService_1 = __decorate([
|
|
166
203
|
(0, di_1.Service)(),
|
|
167
204
|
__metadata("design:paramtypes", [Object, ai_assistant_sdk_1.AiAssistantClient,
|
|
168
|
-
backend_common_1.Logger, String])
|
|
205
|
+
backend_common_1.Logger, String, Function])
|
|
169
206
|
], AiWorkflowBuilderService);
|
|
170
207
|
//# sourceMappingURL=ai-workflow-builder-agent.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-workflow-builder-agent.service.js","sourceRoot":"","sources":["../src/ai-workflow-builder-agent.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai-workflow-builder-agent.service.js","sourceRoot":"","sources":["../src/ai-workflow-builder-agent.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,+EAA2E;AAC3E,wDAA6C;AAC7C,gCAAkC;AAClC,+DAA6E;AAC7E,oDAA4B;AAC5B,yCAAoD;AAIpD,qCAA2C;AAC3C,6CAAsD;AACtD,uEAAkE;AAClE,qEAAkF;AAK3E,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAMlB;IACA;IACA;IACA;IACA;IATV,eAAe,GAA2B,EAAE,CAAC;IAE7C,cAAc,CAAwB;IAE9C,YACkB,SAAqB,EACrB,MAA0B,EAC1B,MAAe,EACf,WAAoB,EACpB,gBAAmC;QAJnC,cAAS,GAAT,SAAS,CAAY;QACrB,WAAM,GAAN,MAAM,CAAoB;QAC1B,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAS;QACpB,qBAAgB,GAAhB,gBAAgB,CAAmB;QAEpD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,+CAAqB,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAC5C,OAAO,EACP,WAAW,GAAG,EAAE,EAChB,MAAM,GAAG,GAAG,MAKT,EAAE;QACL,OAAO,MAAM,IAAA,mCAAsB,EAAC;YACnC,OAAO;YACP,MAAM;YACN,OAAO,EAAE;gBACR,GAAG,WAAW;gBACd,gBAAgB,EAAE,2BAA2B;aAC7C;SACD,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,IAAW,EAAE,wBAAwB,GAAG,KAAK;QACjF,IAAA,gBAAM,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpB,IAAI,WAAsC,CAAC;QAE3C,IAAI,wBAAwB,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YACzE,WAAW,GAAG,EAAE,aAAa,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;QACtD,CAAC;aAAM,CAAC;YACP,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YACrE,WAAW,GAAG;gBACb,aAAa,EAAE,GAAG,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,WAAW,EAAE;aACtE,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACpB,CAAC;IAEO,KAAK,CAAC,WAAW,CACxB,IAAW,EACX,wBAAwB,GAAG,KAAK;QAMhC,IAAI,CAAC;YAEJ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;gBAGtF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAEjD,MAAM,eAAe,GAAG,MAAM,0BAAwB,CAAC,uBAAuB,CAAC;oBAC9E,OAAO,EAAE,OAAO,GAAG,YAAY;oBAC/B,WAAW;iBACX,CAAC,CAAC;gBAEH,MAAM,aAAa,GAAG,IAAI,kBAAa,CAAC;oBACvC,MAAM,EAAE,GAAG;oBACX,MAAM,EAAE,OAAO,GAAG,YAAY;oBAC9B,gBAAgB,EAAE,KAAK;oBACvB,qBAAqB,EAAE,CAAC;oBACxB,YAAY,EAAE;wBACb,OAAO,EAAE;4BACR,GAAG,WAAW;yBACd;qBACD;iBACD,CAAC,CAAC;gBAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;YACxD,CAAC;YAGD,MAAM,eAAe,GAAG,MAAM,0BAAwB,CAAC,uBAAuB,CAAC;gBAC9E,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;aAC9C,CAAC,CAAC;YAEH,OAAO,EAAE,eAAe,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,wBAAe,CAAC,oCAAoC,YAAY,EAAE,EAAE;gBACxF,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE;oBACL,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;oBACxB,OAAO,EAAE,CAAC,CAAC,IAAI;iBACf;aACD,CAAC,CAAC;YACH,MAAM,QAAQ,CAAC;QAChB,CAAC;IACF,CAAC;IAEO,YAAY;QAEnB,MAAM,YAAY,GAAG;YACpB,0CAA0C;YAC1C,+CAA+C;YAC/C,+BAA+B;SAC/B,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QAElE,MAAM,SAAS,GAAG,aAAa;aAC7B,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjB,IAAI,CAAC;gBACJ,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,yBAAyB,EAAE;oBAC7C,QAAQ;oBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAC/D,CAAC,CAAC;gBACH,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC,CAAC;aACD,MAAM,CACN,CAAC,QAAQ,EAAoC,EAAE,CAC9C,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CACnD;aACA,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAiC,EAAE,EAAE;YAG5D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM;gBAAE,OAAO,QAAQ,CAAC;YAE7B,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,WAAW;gBAAE,OAAO,QAAQ,CAAC;YAElC,OAAO;gBACN,GAAG,WAAW;gBACd,GAAG,QAAQ;aACX,CAAC;QACH,CAAC,CAAC,CAAC;QAEJ,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAW,EAAE,wBAAwB,GAAG,KAAK;QACnE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAC7E,IAAI,EACJ,wBAAwB,CACxB,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,6CAAoB,CAAC;YACtC,eAAe,EAAE,IAAI,CAAC,eAAe;YAErC,aAAa,EAAE,eAAe;YAC9B,cAAc,EAAE,eAAe;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;YACnD,MAAM,EAAE,aAAa;gBACpB,CAAC,CAAC,IAAI,kCAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;gBACrF,CAAC,CAAC,SAAS;YACZ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,mBAAmB,EAAE,KAAK,IAAI,EAAE;gBAC/B,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBAC/B,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACnD,CAAC;YACF,CAAC;SACD,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAChC,IAAY,EACZ,WAAuC;QAEvC,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAA,gBAAM,EAAC,WAAW,EAAE,mEAAmE,CAAC,CAAC;gBACzF,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC;gBACb,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAG5E,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;oBACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;gBACtF,CAAC;YACF,CAAC;QACF,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,qCAAqC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACrF,CAAC;QACF,CAAC;IACF,CAAC;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,OAAoB,EAAE,IAAW,EAAE,WAAyB;QACvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE1E,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;YACnF,MAAM,MAAM,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAA8B,EAAE,IAAY;QAC7D,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,yBAAyB,CAC9B,IAAW;QAEX,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;QAGD,OAAO;YACN,YAAY,EAAE,CAAC,CAAC;YAChB,cAAc,EAAE,CAAC;SACjB,CAAC;IACH,CAAC;CACD,CAAA;AAnOY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,YAAO,GAAE;6CAQkB,oCAAiB;QACjB,uBAAM;GARrB,wBAAwB,CAmOpC"}
|