@falai/agent 3.4.2 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/package.json +1 -1
  2. package/dist/cjs/adapters/MemoryAdapter.d.ts +0 -47
  3. package/dist/cjs/adapters/MemoryAdapter.d.ts.map +0 -1
  4. package/dist/cjs/adapters/MemoryAdapter.js +0 -208
  5. package/dist/cjs/adapters/MemoryAdapter.js.map +0 -1
  6. package/dist/cjs/adapters/MongoAdapter.d.ts +0 -97
  7. package/dist/cjs/adapters/MongoAdapter.d.ts.map +0 -1
  8. package/dist/cjs/adapters/MongoAdapter.js +0 -200
  9. package/dist/cjs/adapters/MongoAdapter.js.map +0 -1
  10. package/dist/cjs/adapters/OpenSearchAdapter.d.ts +0 -169
  11. package/dist/cjs/adapters/OpenSearchAdapter.d.ts.map +0 -1
  12. package/dist/cjs/adapters/OpenSearchAdapter.js +0 -475
  13. package/dist/cjs/adapters/OpenSearchAdapter.js.map +0 -1
  14. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts +0 -85
  15. package/dist/cjs/adapters/PostgreSQLAdapter.d.ts.map +0 -1
  16. package/dist/cjs/adapters/PostgreSQLAdapter.js +0 -312
  17. package/dist/cjs/adapters/PostgreSQLAdapter.js.map +0 -1
  18. package/dist/cjs/adapters/PrismaAdapter.d.ts +0 -115
  19. package/dist/cjs/adapters/PrismaAdapter.d.ts.map +0 -1
  20. package/dist/cjs/adapters/PrismaAdapter.js +0 -410
  21. package/dist/cjs/adapters/PrismaAdapter.js.map +0 -1
  22. package/dist/cjs/adapters/RedisAdapter.d.ts +0 -72
  23. package/dist/cjs/adapters/RedisAdapter.d.ts.map +0 -1
  24. package/dist/cjs/adapters/RedisAdapter.js +0 -290
  25. package/dist/cjs/adapters/RedisAdapter.js.map +0 -1
  26. package/dist/cjs/adapters/SQLiteAdapter.d.ts +0 -86
  27. package/dist/cjs/adapters/SQLiteAdapter.d.ts.map +0 -1
  28. package/dist/cjs/adapters/SQLiteAdapter.js +0 -341
  29. package/dist/cjs/adapters/SQLiteAdapter.js.map +0 -1
  30. package/dist/cjs/adapters/index.d.ts +0 -17
  31. package/dist/cjs/adapters/index.d.ts.map +0 -1
  32. package/dist/cjs/adapters/index.js +0 -21
  33. package/dist/cjs/adapters/index.js.map +0 -1
  34. package/dist/cjs/adapters/sessionRow.d.ts +0 -22
  35. package/dist/cjs/adapters/sessionRow.d.ts.map +0 -1
  36. package/dist/cjs/adapters/sessionRow.js +0 -52
  37. package/dist/cjs/adapters/sessionRow.js.map +0 -1
  38. package/dist/cjs/constants/index.d.ts +0 -1
  39. package/dist/cjs/constants/index.d.ts.map +0 -1
  40. package/dist/cjs/constants/index.js +0 -4
  41. package/dist/cjs/constants/index.js.map +0 -1
  42. package/dist/cjs/core/Agent.d.ts +0 -382
  43. package/dist/cjs/core/Agent.d.ts.map +0 -1
  44. package/dist/cjs/core/Agent.js +0 -1198
  45. package/dist/cjs/core/Agent.js.map +0 -1
  46. package/dist/cjs/core/ResponseModal.d.ts +0 -305
  47. package/dist/cjs/core/ResponseModal.d.ts.map +0 -1
  48. package/dist/cjs/core/ResponseModal.js +0 -1414
  49. package/dist/cjs/core/ResponseModal.js.map +0 -1
  50. package/dist/cjs/core/ToolLoopExecutor.d.ts +0 -133
  51. package/dist/cjs/core/ToolLoopExecutor.d.ts.map +0 -1
  52. package/dist/cjs/core/ToolLoopExecutor.js +0 -568
  53. package/dist/cjs/core/ToolLoopExecutor.js.map +0 -1
  54. package/dist/cjs/core/createAgent.d.ts +0 -35
  55. package/dist/cjs/core/createAgent.d.ts.map +0 -1
  56. package/dist/cjs/core/createAgent.js +0 -39
  57. package/dist/cjs/core/createAgent.js.map +0 -1
  58. package/dist/cjs/index.d.ts +0 -61
  59. package/dist/cjs/index.d.ts.map +0 -1
  60. package/dist/cjs/index.js +0 -113
  61. package/dist/cjs/index.js.map +0 -1
  62. package/dist/cjs/package.json +0 -1
  63. package/dist/cjs/providers/AnthropicProvider.d.ts +0 -46
  64. package/dist/cjs/providers/AnthropicProvider.d.ts.map +0 -1
  65. package/dist/cjs/providers/AnthropicProvider.js +0 -50
  66. package/dist/cjs/providers/AnthropicProvider.js.map +0 -1
  67. package/dist/cjs/providers/DeepSeekProvider.d.ts +0 -47
  68. package/dist/cjs/providers/DeepSeekProvider.d.ts.map +0 -1
  69. package/dist/cjs/providers/DeepSeekProvider.js +0 -42
  70. package/dist/cjs/providers/DeepSeekProvider.js.map +0 -1
  71. package/dist/cjs/providers/FallbackAiProvider.d.ts +0 -26
  72. package/dist/cjs/providers/FallbackAiProvider.d.ts.map +0 -1
  73. package/dist/cjs/providers/FallbackAiProvider.js +0 -54
  74. package/dist/cjs/providers/FallbackAiProvider.js.map +0 -1
  75. package/dist/cjs/providers/GeminiProvider.d.ts +0 -51
  76. package/dist/cjs/providers/GeminiProvider.d.ts.map +0 -1
  77. package/dist/cjs/providers/GeminiProvider.js +0 -53
  78. package/dist/cjs/providers/GeminiProvider.js.map +0 -1
  79. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts +0 -80
  80. package/dist/cjs/providers/GenericOpenAICompatibleProvider.d.ts.map +0 -1
  81. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js +0 -89
  82. package/dist/cjs/providers/GenericOpenAICompatibleProvider.js.map +0 -1
  83. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts +0 -61
  84. package/dist/cjs/providers/OpenAICompatibleProvider.d.ts.map +0 -1
  85. package/dist/cjs/providers/OpenAICompatibleProvider.js +0 -58
  86. package/dist/cjs/providers/OpenAICompatibleProvider.js.map +0 -1
  87. package/dist/cjs/providers/OpenAIProvider.d.ts +0 -40
  88. package/dist/cjs/providers/OpenAIProvider.d.ts.map +0 -1
  89. package/dist/cjs/providers/OpenAIProvider.js +0 -42
  90. package/dist/cjs/providers/OpenAIProvider.js.map +0 -1
  91. package/dist/cjs/providers/OpenRouterProvider.d.ts +0 -56
  92. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +0 -1
  93. package/dist/cjs/providers/OpenRouterProvider.js +0 -45
  94. package/dist/cjs/providers/OpenRouterProvider.js.map +0 -1
  95. package/dist/cjs/providers/ProviderAdapter.d.ts +0 -126
  96. package/dist/cjs/providers/ProviderAdapter.d.ts.map +0 -1
  97. package/dist/cjs/providers/ProviderAdapter.js +0 -313
  98. package/dist/cjs/providers/ProviderAdapter.js.map +0 -1
  99. package/dist/cjs/providers/ZaiProvider.d.ts +0 -45
  100. package/dist/cjs/providers/ZaiProvider.d.ts.map +0 -1
  101. package/dist/cjs/providers/ZaiProvider.js +0 -51
  102. package/dist/cjs/providers/ZaiProvider.js.map +0 -1
  103. package/dist/cjs/providers/index.d.ts +0 -26
  104. package/dist/cjs/providers/index.d.ts.map +0 -1
  105. package/dist/cjs/providers/index.js +0 -30
  106. package/dist/cjs/providers/index.js.map +0 -1
  107. package/dist/cjs/utils/streamingMessage.d.ts +0 -48
  108. package/dist/cjs/utils/streamingMessage.d.ts.map +0 -1
  109. package/dist/cjs/utils/streamingMessage.js +0 -210
  110. package/dist/cjs/utils/streamingMessage.js.map +0 -1
@@ -1,290 +0,0 @@
1
- "use strict";
2
- /**
3
- * Redis adapter for persistence
4
- * Uses Redis for fast session/message storage
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.RedisAdapter = void 0;
8
- const errors_js_1 = require("../types/errors.js");
9
- const index_js_1 = require("../utils/index.js");
10
- const sessionRow_js_1 = require("./sessionRow.js");
11
- /**
12
- * Redis Adapter - Provider-style API for Redis persistence
13
- *
14
- * @example
15
- * ```typescript
16
- * import Redis from 'ioredis';
17
- * import { Agent, RedisAdapter } from '@falai/agent';
18
- *
19
- * const redis = new Redis();
20
- *
21
- * const agent = new Agent({
22
- * name: "My Agent",
23
- * provider: provider,
24
- * persistence: {
25
- * adapter: new RedisAdapter({ redis }),
26
- * userId: "user_123",
27
- * },
28
- * });
29
- * ```
30
- */
31
- class RedisAdapter {
32
- constructor(options) {
33
- this.redis = options.redis;
34
- this.keyPrefix = options.keyPrefix || "agent:";
35
- this.sessionTTL = options.sessionTTL || 7 * 24 * 60 * 60; // 7 days
36
- this.messageTTL = options.messageTTL || 30 * 24 * 60 * 60; // 30 days
37
- this.sessionRepository = new RedisSessionRepository(this.redis, this.keyPrefix, this.sessionTTL);
38
- this.messageRepository = new RedisMessageRepository(this.redis, this.keyPrefix, this.messageTTL);
39
- }
40
- async disconnect() {
41
- await this.redis.quit();
42
- }
43
- }
44
- exports.RedisAdapter = RedisAdapter;
45
- /**
46
- * Redis Session Repository
47
- */
48
- class RedisSessionRepository {
49
- constructor(redis, keyPrefix, ttl) {
50
- this.redis = redis;
51
- this.keyPrefix = keyPrefix;
52
- this.ttl = ttl;
53
- }
54
- getKey(id) {
55
- return `${this.keyPrefix}session:${id}`;
56
- }
57
- getUserKey(userId) {
58
- return `${this.keyPrefix}user:${userId}:sessions`;
59
- }
60
- async create(data) {
61
- const id = data.id || (0, index_js_1.createSessionId)();
62
- const now = new Date();
63
- const session = {
64
- ...data,
65
- id,
66
- createdAt: now,
67
- updatedAt: now,
68
- status: data.status || "active",
69
- messageCount: data.messageCount || 0,
70
- version: data.version ?? 1,
71
- };
72
- await this.redis.setex(this.getKey(id), this.ttl, JSON.stringify(session));
73
- // Add to user's session list
74
- if (data.userId) {
75
- await this.redis.hset(this.getUserKey(data.userId), id, now.toISOString());
76
- }
77
- return session;
78
- }
79
- async findById(id) {
80
- const data = await this.redis.get(this.getKey(id));
81
- if (!data)
82
- return null;
83
- try {
84
- const parsed = JSON.parse(data);
85
- // JSON round-trips turn Dates into ISO strings — coerce on read so
86
- // callers always get Date instances (parity with the SQL adapters).
87
- return {
88
- ...parsed,
89
- lastMessageAt: (0, sessionRow_js_1.coerceDate)(parsed.lastMessageAt),
90
- completedAt: (0, sessionRow_js_1.coerceDate)(parsed.completedAt),
91
- createdAt: (0, sessionRow_js_1.coerceDate)(parsed.createdAt) ?? new Date(),
92
- updatedAt: (0, sessionRow_js_1.coerceDate)(parsed.updatedAt) ?? new Date(),
93
- };
94
- }
95
- catch (error) {
96
- index_js_1.logger.error(`Error parsing session data for id ${id}:`, error);
97
- return null;
98
- }
99
- }
100
- async findActiveByUserId(userId) {
101
- const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
102
- // Newest-first: the hash values ARE the sessions' createdAt ISO strings,
103
- // which sort lexicographically. Iterating hash order instead would return
104
- // an arbitrary active session, not the most recent one.
105
- const newestFirst = Object.keys(sessionIds).sort((a, b) => sessionIds[b].localeCompare(sessionIds[a]));
106
- for (const sessionId of newestFirst) {
107
- const session = await this.findById(sessionId);
108
- if (session && session.status === "active") {
109
- return session;
110
- }
111
- }
112
- return null;
113
- }
114
- async findByUserId(userId, limit = 100) {
115
- const sessionIds = await this.redis.hgetall(this.getUserKey(userId));
116
- // Sort BEFORE limiting (hash values are the createdAt ISO strings) —
117
- // limiting first would keep an arbitrary hash-order subset.
118
- const newestFirst = Object.keys(sessionIds)
119
- .sort((a, b) => sessionIds[b].localeCompare(sessionIds[a]))
120
- .slice(0, limit);
121
- const sessions = [];
122
- for (const sessionId of newestFirst) {
123
- const session = await this.findById(sessionId);
124
- if (session) {
125
- sessions.push(session);
126
- }
127
- }
128
- return sessions;
129
- }
130
- async update(id, data, options) {
131
- const existing = await this.findById(id);
132
- if (!existing)
133
- return null;
134
- // Check-then-set on the stored JSON — not fully atomic (no WATCH/MULTI)
135
- if (options?.expectedVersion !== undefined &&
136
- existing.version !== undefined &&
137
- existing.version !== options.expectedVersion) {
138
- throw new errors_js_1.SessionConflictError(id, options.expectedVersion, existing.version);
139
- }
140
- const updated = {
141
- ...existing,
142
- ...data,
143
- version: (existing.version ?? options?.expectedVersion ?? 0) + 1,
144
- updatedAt: new Date(),
145
- };
146
- await this.redis.setex(this.getKey(id), this.ttl, JSON.stringify(updated));
147
- return updated;
148
- }
149
- async updateStatus(id, status, completedAt) {
150
- // An undefined completedAt must be omitted, not spread — update() writes
151
- // whatever keys it receives, and SQL skips undefined columns.
152
- return this.update(id, completedAt ? { status, completedAt } : { status });
153
- }
154
- async updateCollectedData(id, collectedData) {
155
- return this.update(id, { collectedData });
156
- }
157
- async updateFlowStep(id, flow, step) {
158
- // Mirror SQL's conditional column assembly: only defined values are written.
159
- return this.update(id, {
160
- ...(flow !== undefined && { currentFlow: flow }),
161
- ...(step !== undefined && { currentStep: step }),
162
- });
163
- }
164
- async incrementMessageCount(id) {
165
- const session = await this.findById(id);
166
- if (!session)
167
- return null;
168
- // Bookkeeping write, deliberately NOT routed through update(): count bumps
169
- // run alongside saveSessionState's version CAS every turn, so they must
170
- // not move `version` (matches the SQL adapters' dedicated statement).
171
- const updated = {
172
- ...session,
173
- messageCount: (session.messageCount || 0) + 1,
174
- lastMessageAt: new Date(),
175
- updatedAt: new Date(),
176
- };
177
- await this.redis.setex(this.getKey(id), this.ttl, JSON.stringify(updated));
178
- return updated;
179
- }
180
- async delete(id) {
181
- // Look up first so the user index can be cleaned too — otherwise
182
- // findActiveByUserId/findByUserId chase dead ids forever.
183
- const existing = await this.findById(id);
184
- if (!existing)
185
- return false;
186
- const result = await this.redis.del(this.getKey(id));
187
- if (existing.userId) {
188
- await this.redis.hdel(this.getUserKey(existing.userId), id);
189
- }
190
- return result > 0;
191
- }
192
- }
193
- /**
194
- * Redis Message Repository
195
- */
196
- class RedisMessageRepository {
197
- constructor(redis, keyPrefix, ttl) {
198
- this.redis = redis;
199
- this.keyPrefix = keyPrefix;
200
- this.ttl = ttl;
201
- }
202
- getKey(id) {
203
- return `${this.keyPrefix}message:${id}`;
204
- }
205
- getSessionKey(sessionId) {
206
- return `${this.keyPrefix}session:${sessionId}:messages`;
207
- }
208
- async create(data) {
209
- const id = `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`;
210
- const message = {
211
- ...data,
212
- id,
213
- createdAt: new Date(),
214
- };
215
- await this.redis.setex(this.getKey(id), this.ttl, JSON.stringify(message));
216
- await this.redis.hset(this.getSessionKey(data.sessionId), id, message.createdAt.toISOString());
217
- return message;
218
- }
219
- async findById(id) {
220
- const data = await this.redis.get(this.getKey(id));
221
- if (!data)
222
- return null;
223
- try {
224
- const message = JSON.parse(data);
225
- return { ...message, createdAt: (0, sessionRow_js_1.coerceDate)(message.createdAt) ?? new Date() };
226
- }
227
- catch (error) {
228
- index_js_1.logger.error(`Error parsing message data for id ${id}:`, error);
229
- return null;
230
- }
231
- }
232
- async findBySessionId(sessionId, limit = 1000) {
233
- const messageIds = await this.redis.hgetall(this.getSessionKey(sessionId));
234
- // Fetch ALL candidates first — limiting before sorting would keep an
235
- // arbitrary hash-order subset instead of the oldest messages. The fetches
236
- // are independent, so run them concurrently instead of N serialized
237
- // round trips.
238
- const fetched = await Promise.all(Object.keys(messageIds).map((messageId) => this.findById(messageId)));
239
- const messages = fetched.filter((m) => m !== null);
240
- // Chronological order (matches PostgreSQL/Mongo adapters); limit applies
241
- // only after sorting is meaningful.
242
- return messages
243
- .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime())
244
- .slice(0, limit);
245
- }
246
- async findByUserId(userId, limit = 100) {
247
- // Redis doesn't have efficient user-level querying
248
- // This would require additional indexing
249
- const pattern = `${this.keyPrefix}message:*`;
250
- const keys = await this.redis.keys(pattern);
251
- // Filter by userId BEFORE limiting — slicing keys first would drop
252
- // matching messages that happen to sort after unrelated users' keys.
253
- // ponytail: full keyspace scan per user query (pre-existing ceiling of
254
- // this adapter); the upgrade path is a per-user message index.
255
- const fetched = await Promise.all(keys.map((key) => this.redis.get(key)));
256
- const messages = [];
257
- for (const data of fetched) {
258
- if (!data)
259
- continue;
260
- const parsed = JSON.parse(data);
261
- if (parsed.userId === userId) {
262
- messages.push({ ...parsed, createdAt: (0, sessionRow_js_1.coerceDate)(parsed.createdAt) ?? new Date() });
263
- }
264
- }
265
- return messages
266
- .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())
267
- .slice(0, limit);
268
- }
269
- async delete(id) {
270
- const result = await this.redis.del(this.getKey(id));
271
- return result > 0;
272
- }
273
- async deleteBySessionId(sessionId) {
274
- const messageIds = await this.redis.hgetall(this.getSessionKey(sessionId));
275
- const keys = Object.keys(messageIds).map((id) => this.getKey(id));
276
- if (keys.length === 0)
277
- return 0;
278
- const result = await this.redis.del(...keys);
279
- await this.redis.del(this.getSessionKey(sessionId));
280
- return result;
281
- }
282
- async deleteByUserId(userId) {
283
- const messages = await this.findByUserId(userId);
284
- const keys = messages.map((m) => this.getKey(m.id));
285
- if (keys.length === 0)
286
- return 0;
287
- return await this.redis.del(...keys);
288
- }
289
- }
290
- //# sourceMappingURL=RedisAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RedisAdapter.js","sourceRoot":"","sources":["../../../src/adapters/RedisAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- /**
2
- * SQLite adapter for persistence
3
- * Lightweight, file-based database perfect for local development
4
- *
5
- * ## v2 Migration
6
- *
7
- * If upgrading from v1, run the following migration on your sessions table:
8
- *
9
- * ```sql
10
- * -- SQLite 3.35.0+ supports DROP COLUMN:
11
- * ALTER TABLE agent_sessions DROP COLUMN pending_transition;
12
- * -- For older versions, recreate the table without pending_transition.
13
- *
14
- * ALTER TABLE agent_sessions ADD COLUMN pending_directive TEXT;
15
- * ALTER TABLE agent_sessions ADD COLUMN signals TEXT;
16
- * ```
17
- *
18
- * `pending_directive` stores the JSON-serialized `Directive` that the pipeline
19
- * applies at the start of the next turn. `signals` is a reserved TEXT (JSON)
20
- * column for the v2.x Signals feature — pass-through only in v2.0.
21
- */
22
- import type { SessionRepository, MessageRepository, PersistenceAdapter } from "../types/index.js";
23
- /**
24
- * SQLite database interface - matches better-sqlite3
25
- */
26
- export interface SqliteDatabase {
27
- prepare(sql: string): SqliteStatement;
28
- exec(sql: string): void;
29
- close(): void;
30
- }
31
- /**
32
- * SQLite statement interface - matches better-sqlite3 Statement
33
- */
34
- export interface SqliteStatement {
35
- run(...params: unknown[]): {
36
- changes: number;
37
- lastInsertRowid: number;
38
- };
39
- get(...params: unknown[]): Record<string, unknown> | undefined;
40
- all(...params: unknown[]): Array<Record<string, unknown>>;
41
- }
42
- /**
43
- * Options for SQLite adapter
44
- */
45
- export interface SQLiteAdapterOptions {
46
- /**
47
- * SQLite database instance (better-sqlite3)
48
- */
49
- db: SqliteDatabase;
50
- /**
51
- * Table names (default: "agent_sessions" and "agent_messages")
52
- */
53
- tables?: {
54
- sessions?: string;
55
- messages?: string;
56
- };
57
- }
58
- /**
59
- * SQLite Adapter - Provider-style API for SQLite persistence
60
- *
61
- * @example
62
- * ```typescript
63
- * import Database from 'better-sqlite3';
64
- * import { Agent, SQLiteAdapter } from '@falai/agent';
65
- *
66
- * const db = new Database('agent.db');
67
- *
68
- * const agent = new Agent({
69
- * name: "My Agent",
70
- * provider: provider,
71
- * persistence: {
72
- * adapter: new SQLiteAdapter({ db }),
73
- * userId: "user_123",
74
- * },
75
- * });
76
- * ```
77
- */
78
- export declare class SQLiteAdapter<TData = Record<string, unknown>> implements PersistenceAdapter<TData> {
79
- readonly sessionRepository: SessionRepository<TData>;
80
- readonly messageRepository: MessageRepository;
81
- private db;
82
- constructor(options: SQLiteAdapterOptions);
83
- initialize(): Promise<void>;
84
- disconnect(): Promise<void>;
85
- }
86
- //# sourceMappingURL=SQLiteAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SQLiteAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/SQLiteAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAIjB,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAK3B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/D,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,YAAW,kBAAkB,CAAC,KAAK,CAAC;IAC9F,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC5D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,OAAO,CAAC,EAAE,CAAiB;gBAEf,OAAO,EAAE,oBAAoB;IAanC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiE3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}