@arvoretech/pi-kiro-provider 0.8.1

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 (74) hide show
  1. package/README.md +121 -0
  2. package/dist/bracket-tool-parser.d.ts +12 -0
  3. package/dist/bracket-tool-parser.d.ts.map +1 -0
  4. package/dist/bracket-tool-parser.js +78 -0
  5. package/dist/bracket-tool-parser.js.map +1 -0
  6. package/dist/debug.d.ts +3 -0
  7. package/dist/debug.d.ts.map +1 -0
  8. package/dist/debug.js +49 -0
  9. package/dist/debug.js.map +1 -0
  10. package/dist/event-parser.d.ts +44 -0
  11. package/dist/event-parser.d.ts.map +1 -0
  12. package/dist/event-parser.js +66 -0
  13. package/dist/event-parser.js.map +1 -0
  14. package/dist/history.d.ts +13 -0
  15. package/dist/history.d.ts.map +1 -0
  16. package/dist/history.js +121 -0
  17. package/dist/history.js.map +1 -0
  18. package/dist/index.d.ts +6 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +44 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/kiro-cli.d.ts +32 -0
  23. package/dist/kiro-cli.d.ts.map +1 -0
  24. package/dist/kiro-cli.js +271 -0
  25. package/dist/kiro-cli.js.map +1 -0
  26. package/dist/kiro-ide.d.ts +13 -0
  27. package/dist/kiro-ide.d.ts.map +1 -0
  28. package/dist/kiro-ide.js +74 -0
  29. package/dist/kiro-ide.js.map +1 -0
  30. package/dist/login-ui.d.ts +18 -0
  31. package/dist/login-ui.d.ts.map +1 -0
  32. package/dist/login-ui.js +124 -0
  33. package/dist/login-ui.js.map +1 -0
  34. package/dist/login.d.ts +16 -0
  35. package/dist/login.d.ts.map +1 -0
  36. package/dist/login.js +217 -0
  37. package/dist/login.js.map +1 -0
  38. package/dist/models.d.ts +72 -0
  39. package/dist/models.d.ts.map +1 -0
  40. package/dist/models.js +461 -0
  41. package/dist/models.js.map +1 -0
  42. package/dist/oauth.d.ts +30 -0
  43. package/dist/oauth.d.ts.map +1 -0
  44. package/dist/oauth.js +226 -0
  45. package/dist/oauth.js.map +1 -0
  46. package/dist/retry.d.ts +21 -0
  47. package/dist/retry.d.ts.map +1 -0
  48. package/dist/retry.js +51 -0
  49. package/dist/retry.js.map +1 -0
  50. package/dist/stream.d.ts +5 -0
  51. package/dist/stream.d.ts.map +1 -0
  52. package/dist/stream.js +858 -0
  53. package/dist/stream.js.map +1 -0
  54. package/dist/thinking-parser.d.ts +24 -0
  55. package/dist/thinking-parser.d.ts.map +1 -0
  56. package/dist/thinking-parser.js +205 -0
  57. package/dist/thinking-parser.js.map +1 -0
  58. package/dist/tokenizer.d.ts +2 -0
  59. package/dist/tokenizer.d.ts.map +1 -0
  60. package/dist/tokenizer.js +16 -0
  61. package/dist/tokenizer.js.map +1 -0
  62. package/dist/transform.d.ts +63 -0
  63. package/dist/transform.d.ts.map +1 -0
  64. package/dist/transform.js +200 -0
  65. package/dist/transform.js.map +1 -0
  66. package/dist/truncation.d.ts +4 -0
  67. package/dist/truncation.d.ts.map +1 -0
  68. package/dist/truncation.js +13 -0
  69. package/dist/truncation.js.map +1 -0
  70. package/dist/usage.d.ts +90 -0
  71. package/dist/usage.d.ts.map +1 -0
  72. package/dist/usage.js +169 -0
  73. package/dist/usage.js.map +1 -0
  74. package/package.json +61 -0
package/dist/models.js ADDED
@@ -0,0 +1,461 @@
1
+ // Feature 2: Model Definitions
2
+ import { existsSync, readFileSync, statSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ const CACHE_PATH = join(homedir(), ".kiro-models-cache.json");
6
+ // Valid Kiro model IDs - API accepts friendly names directly
7
+ export const KIRO_MODEL_IDS = new Set([
8
+ "claude-opus-4.8",
9
+ "claude-opus-4.7",
10
+ "claude-opus-4.6",
11
+ "claude-sonnet-5",
12
+ "claude-sonnet-4.6",
13
+ "claude-sonnet-4.5",
14
+ "claude-sonnet-4",
15
+ "claude-haiku-4.5",
16
+ "claude-fable-5",
17
+ "deepseek-3.2",
18
+ "minimax-m2.1",
19
+ "minimax-m2.5",
20
+ "glm-5",
21
+ "qwen3-coder-next",
22
+ "auto",
23
+ ]);
24
+ let cachedIdsLoaded = false;
25
+ export function loadCachedModelIds() {
26
+ if (cachedIdsLoaded)
27
+ return;
28
+ if (!existsSync(CACHE_PATH))
29
+ return;
30
+ try {
31
+ const raw = readFileSync(CACHE_PATH, "utf-8");
32
+ const data = JSON.parse(raw);
33
+ for (const regionModels of Object.values(data)) {
34
+ if (Array.isArray(regionModels)) {
35
+ for (const m of regionModels) {
36
+ if (m?.id) {
37
+ const kiroId = m.id.replace(/(\d)-(\d)/g, "$1.$2");
38
+ KIRO_MODEL_IDS.add(kiroId);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ cachedIdsLoaded = true;
44
+ }
45
+ catch {
46
+ // Ignore cache errors
47
+ }
48
+ }
49
+ export function getCachedModels(region) {
50
+ if (existsSync(CACHE_PATH)) {
51
+ try {
52
+ const raw = readFileSync(CACHE_PATH, "utf-8");
53
+ const data = JSON.parse(raw);
54
+ if (data && Array.isArray(data[region])) {
55
+ return data[region];
56
+ }
57
+ }
58
+ catch {
59
+ // Ignore cache errors
60
+ }
61
+ }
62
+ return filterModelsByRegion(kiroModels, region);
63
+ }
64
+ export function isCacheStale(region) {
65
+ if (!existsSync(CACHE_PATH))
66
+ return true;
67
+ try {
68
+ const raw = readFileSync(CACHE_PATH, "utf-8");
69
+ const data = JSON.parse(raw);
70
+ if (!data || !Array.isArray(data[region]))
71
+ return true;
72
+ const stat = statSync(CACHE_PATH);
73
+ // Stale if older than 1 hour
74
+ return Date.now() - stat.mtimeMs > 3600_000;
75
+ }
76
+ catch {
77
+ return true;
78
+ }
79
+ }
80
+ export async function updateKiroModelsCache(accessToken, region, profileArn) {
81
+ try {
82
+ const qHost = `https://q.${region}.amazonaws.com`;
83
+ const url = new URL(`${qHost}/ListAvailableModels`);
84
+ url.searchParams.set("origin", "AI_EDITOR");
85
+ if (profileArn) {
86
+ url.searchParams.set("profileArn", profileArn);
87
+ }
88
+ const response = await fetch(url.toString(), {
89
+ method: "GET",
90
+ headers: {
91
+ Authorization: `Bearer ${accessToken}`,
92
+ },
93
+ });
94
+ if (!response.ok) {
95
+ return;
96
+ }
97
+ const data = (await response.json());
98
+ const fetchedModels = data.models || [];
99
+ if (fetchedModels.length === 0)
100
+ return;
101
+ const newModels = fetchedModels.map((fm) => {
102
+ const kiroId = fm.modelId;
103
+ const piId = kiroId.replace(/(\d)\.(\d)/g, "$1-$2");
104
+ const existing = kiroModels.find((m) => m.id === piId);
105
+ if (existing) {
106
+ return existing;
107
+ }
108
+ const isClaude = piId.startsWith("claude");
109
+ const isReasoning = piId.includes("opus") ||
110
+ piId.includes("sonnet") ||
111
+ piId.includes("coder") ||
112
+ piId.includes("deepseek");
113
+ const name = piId
114
+ .split("-")
115
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
116
+ .join(" ");
117
+ return {
118
+ id: piId,
119
+ name: name,
120
+ api: "kiro-api",
121
+ provider: "kiro",
122
+ baseUrl: `${qHost}/generateAssistantResponse`,
123
+ reasoning: isReasoning,
124
+ input: isClaude
125
+ ? ["text", "image"]
126
+ : ["text"],
127
+ cost: ZERO_COST,
128
+ contextWindow: isClaude ? 1000000 : 200000,
129
+ maxTokens: isClaude ? 65536 : 8192,
130
+ };
131
+ });
132
+ if (!newModels.some((m) => m.id === "auto")) {
133
+ newModels.push({
134
+ id: "auto",
135
+ name: "Auto",
136
+ api: "kiro-api",
137
+ provider: "kiro",
138
+ baseUrl: `${qHost}/generateAssistantResponse`,
139
+ reasoning: true,
140
+ input: ["text", "image"],
141
+ cost: ZERO_COST,
142
+ contextWindow: 1000000,
143
+ maxTokens: 65536,
144
+ });
145
+ }
146
+ let cache = {};
147
+ if (existsSync(CACHE_PATH)) {
148
+ try {
149
+ cache = JSON.parse(readFileSync(CACHE_PATH, "utf-8"));
150
+ }
151
+ catch {
152
+ // Ignore parsing errors
153
+ }
154
+ }
155
+ cache[region] = newModels;
156
+ writeFileSync(CACHE_PATH, JSON.stringify(cache, null, 2), "utf-8");
157
+ cachedIdsLoaded = false;
158
+ loadCachedModelIds();
159
+ }
160
+ catch (_error) {
161
+ // Ignore fetch/cache errors
162
+ }
163
+ }
164
+ export function resolveKiroModel(modelId) {
165
+ // Convert pi format (dashes) to kiro format (dots): claude-opus-4-6 -> claude-opus-4.6
166
+ // Only convert digit-dash-digit patterns (version numbers like 4-6 -> 4.6)
167
+ const kiroId = modelId.replace(/(\d)-(\d)/g, "$1.$2");
168
+ loadCachedModelIds();
169
+ if (!KIRO_MODEL_IDS.has(kiroId)) {
170
+ throw new Error(`Unknown Kiro model ID: ${modelId}`);
171
+ }
172
+ return kiroId;
173
+ }
174
+ /**
175
+ * Map an SSO/OIDC region to the Kiro API region.
176
+ *
177
+ * The Kiro Q API is only deployed in a subset of regions. Tokens issued by
178
+ * an SSO instance in e.g. eu-west-1 must be sent to the eu-central-1 API
179
+ * endpoint. This mirrors the endpoint resolution that kiro-cli performs
180
+ * internally via the AWS SDK partition resolver.
181
+ */
182
+ const API_REGION_MAP = {
183
+ "us-west-1": "us-east-1",
184
+ "us-west-2": "us-east-1",
185
+ "us-east-2": "us-east-1",
186
+ "ap-southeast-1": "us-east-1",
187
+ "ap-southeast-2": "us-east-1",
188
+ "ap-northeast-1": "us-east-1",
189
+ "ap-south-1": "us-east-1",
190
+ "eu-west-1": "eu-central-1",
191
+ "eu-west-2": "eu-central-1",
192
+ "eu-west-3": "eu-central-1",
193
+ "eu-north-1": "eu-central-1",
194
+ "eu-south-1": "eu-central-1",
195
+ "eu-south-2": "eu-central-1",
196
+ "eu-central-2": "eu-central-1",
197
+ };
198
+ export function resolveApiRegion(ssoRegion) {
199
+ if (!ssoRegion)
200
+ return "us-east-1";
201
+ return API_REGION_MAP[ssoRegion] ?? ssoRegion;
202
+ }
203
+ /**
204
+ * Model availability per API region (allowlist).
205
+ * Source: https://kiro.dev/docs/cli/models/
206
+ *
207
+ * When a new region is added, it must be explicitly listed here with its
208
+ * supported models — unknown regions get no models, forcing a conscious
209
+ * update rather than silently exposing unsupported models.
210
+ */
211
+ const MODELS_BY_REGION = {
212
+ "us-east-1": new Set([
213
+ "claude-opus-4-8",
214
+ "claude-opus-4-7",
215
+ "claude-opus-4-6",
216
+ "claude-sonnet-5",
217
+ "claude-sonnet-4-6",
218
+ "claude-sonnet-4-5",
219
+ "claude-sonnet-4",
220
+ "claude-haiku-4-5",
221
+ "claude-fable-5",
222
+ "deepseek-3-2",
223
+ "minimax-m2-1",
224
+ "minimax-m2-5",
225
+ "glm-5",
226
+ "qwen3-coder-next",
227
+ "auto",
228
+ ]),
229
+ // API-verified 2026-04-14 (eu-west-1 IdC token), glm-5 removed 2026-05-05 (us-east-1 only)
230
+ "eu-central-1": new Set([
231
+ "claude-opus-4-8",
232
+ "claude-opus-4-7",
233
+ "claude-opus-4-6",
234
+ "claude-sonnet-4-6",
235
+ "claude-sonnet-4-5",
236
+ "claude-sonnet-4",
237
+ "claude-haiku-4-5",
238
+ "claude-fable-5",
239
+ "minimax-m2-1",
240
+ "minimax-m2-5",
241
+ "qwen3-coder-next",
242
+ "auto",
243
+ ]),
244
+ };
245
+ /** Filter a model list to only those available in the given API region.
246
+ * Unknown regions return an empty list — add the region to MODELS_BY_REGION. */
247
+ export function filterModelsByRegion(models, apiRegion) {
248
+ const allowed = MODELS_BY_REGION[apiRegion];
249
+ if (!allowed) {
250
+ console.warn(`[pi-provider-kiro] Unknown API region "${apiRegion}" — no models available. Update MODELS_BY_REGION in models.ts.`);
251
+ return [];
252
+ }
253
+ return models.filter((m) => allowed.has(m.id));
254
+ }
255
+ const BASE_URL = "https://q.us-east-1.amazonaws.com/generateAssistantResponse";
256
+ const ZERO_COST = Object.freeze({
257
+ input: 0,
258
+ output: 0,
259
+ cacheRead: 0,
260
+ cacheWrite: 0,
261
+ });
262
+ export const kiroModels = [
263
+ {
264
+ id: "claude-opus-4-8",
265
+ name: "Claude Opus 4.8",
266
+ api: "kiro-api",
267
+ provider: "kiro",
268
+ baseUrl: BASE_URL,
269
+ reasoning: true,
270
+ thinkingLevelMap: { xhigh: "xhigh" },
271
+ input: ["text", "image"],
272
+ cost: ZERO_COST,
273
+ contextWindow: 1000000,
274
+ maxTokens: 128000,
275
+ firstTokenTimeout: 180_000,
276
+ },
277
+ {
278
+ id: "claude-opus-4-7",
279
+ name: "Claude Opus 4.7",
280
+ api: "kiro-api",
281
+ provider: "kiro",
282
+ baseUrl: BASE_URL,
283
+ reasoning: true,
284
+ thinkingLevelMap: { xhigh: "xhigh" },
285
+ input: ["text", "image"],
286
+ cost: ZERO_COST,
287
+ contextWindow: 1000000,
288
+ maxTokens: 128000,
289
+ firstTokenTimeout: 180_000,
290
+ },
291
+ // Claude Opus 4.6
292
+ {
293
+ id: "claude-opus-4-6",
294
+ name: "Claude Opus 4.6",
295
+ api: "kiro-api",
296
+ provider: "kiro",
297
+ baseUrl: BASE_URL,
298
+ reasoning: true,
299
+ thinkingLevelMap: { xhigh: "xhigh" },
300
+ input: ["text", "image"],
301
+ cost: ZERO_COST,
302
+ contextWindow: 1000000,
303
+ maxTokens: 32768,
304
+ },
305
+ // Claude Sonnet 5
306
+ {
307
+ id: "claude-sonnet-5",
308
+ name: "Claude Sonnet 5",
309
+ api: "kiro-api",
310
+ provider: "kiro",
311
+ baseUrl: BASE_URL,
312
+ reasoning: true,
313
+ input: ["text", "image"],
314
+ cost: ZERO_COST,
315
+ contextWindow: 1000000,
316
+ maxTokens: 65536,
317
+ },
318
+ // Claude Sonnet 4.6
319
+ {
320
+ id: "claude-sonnet-4-6",
321
+ name: "Claude Sonnet 4.6",
322
+ api: "kiro-api",
323
+ provider: "kiro",
324
+ baseUrl: BASE_URL,
325
+ reasoning: true,
326
+ input: ["text", "image"],
327
+ cost: ZERO_COST,
328
+ contextWindow: 1000000,
329
+ maxTokens: 65536,
330
+ },
331
+ // Claude Sonnet 4.5
332
+ {
333
+ id: "claude-sonnet-4-5",
334
+ name: "Claude Sonnet 4.5",
335
+ api: "kiro-api",
336
+ provider: "kiro",
337
+ baseUrl: BASE_URL,
338
+ reasoning: true,
339
+ input: ["text", "image"],
340
+ cost: ZERO_COST,
341
+ contextWindow: 200000,
342
+ maxTokens: 65536,
343
+ },
344
+ // Claude Sonnet 4
345
+ {
346
+ id: "claude-sonnet-4",
347
+ name: "Claude Sonnet 4",
348
+ api: "kiro-api",
349
+ provider: "kiro",
350
+ baseUrl: BASE_URL,
351
+ reasoning: true,
352
+ input: ["text", "image"],
353
+ cost: ZERO_COST,
354
+ contextWindow: 200000,
355
+ maxTokens: 65536,
356
+ },
357
+ // Claude Haiku 4.5
358
+ {
359
+ id: "claude-haiku-4-5",
360
+ name: "Claude Haiku 4.5",
361
+ api: "kiro-api",
362
+ provider: "kiro",
363
+ baseUrl: BASE_URL,
364
+ reasoning: false,
365
+ input: ["text", "image"],
366
+ cost: ZERO_COST,
367
+ contextWindow: 200000,
368
+ maxTokens: 65536,
369
+ },
370
+ // Claude Fable 5
371
+ {
372
+ id: "claude-fable-5",
373
+ name: "Claude Fable 5",
374
+ api: "kiro-api",
375
+ provider: "kiro",
376
+ baseUrl: BASE_URL,
377
+ reasoning: true,
378
+ input: ["text", "image"],
379
+ cost: ZERO_COST,
380
+ contextWindow: 1000000,
381
+ maxTokens: 65536,
382
+ },
383
+ // DeepSeek
384
+ {
385
+ id: "deepseek-3-2",
386
+ name: "DeepSeek 3.2",
387
+ api: "kiro-api",
388
+ provider: "kiro",
389
+ baseUrl: BASE_URL,
390
+ reasoning: true,
391
+ input: ["text"],
392
+ cost: ZERO_COST,
393
+ contextWindow: 164000,
394
+ maxTokens: 8192,
395
+ },
396
+ // MiniMax
397
+ {
398
+ id: "minimax-m2-5",
399
+ name: "MiniMax M2.5",
400
+ api: "kiro-api",
401
+ provider: "kiro",
402
+ baseUrl: BASE_URL,
403
+ reasoning: false,
404
+ input: ["text"],
405
+ cost: ZERO_COST,
406
+ contextWindow: 196000,
407
+ maxTokens: 8192,
408
+ },
409
+ {
410
+ id: "minimax-m2-1",
411
+ name: "MiniMax M2.1",
412
+ api: "kiro-api",
413
+ provider: "kiro",
414
+ baseUrl: BASE_URL,
415
+ reasoning: false,
416
+ input: ["text"],
417
+ cost: ZERO_COST,
418
+ contextWindow: 196000,
419
+ maxTokens: 8192,
420
+ },
421
+ // GLM (Zhipu AI)
422
+ {
423
+ id: "glm-5",
424
+ name: "GLM 5",
425
+ api: "kiro-api",
426
+ provider: "kiro",
427
+ baseUrl: BASE_URL,
428
+ reasoning: true,
429
+ input: ["text"],
430
+ cost: ZERO_COST,
431
+ contextWindow: 200000,
432
+ maxTokens: 8192,
433
+ },
434
+ // Qwen (Alibaba)
435
+ {
436
+ id: "qwen3-coder-next",
437
+ name: "Qwen3 Coder Next",
438
+ api: "kiro-api",
439
+ provider: "kiro",
440
+ baseUrl: BASE_URL,
441
+ reasoning: true,
442
+ input: ["text"],
443
+ cost: ZERO_COST,
444
+ contextWindow: 256000,
445
+ maxTokens: 8192,
446
+ },
447
+ // Auto — routes to optimal model per task
448
+ {
449
+ id: "auto",
450
+ name: "Auto",
451
+ api: "kiro-api",
452
+ provider: "kiro",
453
+ baseUrl: BASE_URL,
454
+ reasoning: true,
455
+ input: ["text", "image"],
456
+ cost: ZERO_COST,
457
+ contextWindow: 1000000,
458
+ maxTokens: 65536,
459
+ },
460
+ ];
461
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { OAuthCredentials, OAuthLoginCallbacks } from "@earendil-works/pi-ai";
2
+ export declare const SSO_OIDC_ENDPOINT = "https://oidc.us-east-1.amazonaws.com";
3
+ export declare const BUILDER_ID_START_URL = "https://view.awsapps.com/start";
4
+ export declare const KIRO_DESKTOP_REFRESH_URL = "https://prod.{region}.auth.desktop.kiro.dev/refreshToken";
5
+ export declare const SSO_SCOPES: string[];
6
+ export type KiroAuthMethod = "idc" | "desktop";
7
+ export type KiroLoginMethod = "auto" | "builder-id" | "google" | "github";
8
+ export interface KiroCredentials extends OAuthCredentials {
9
+ clientId: string;
10
+ clientSecret: string;
11
+ region: string;
12
+ authMethod: KiroAuthMethod;
13
+ /** Required for Google/GitHub social profiles; ListAvailableProfiles may return empty for these tokens. */
14
+ profileArn?: string;
15
+ }
16
+ /**
17
+ * Login to Kiro using the specified method.
18
+ *
19
+ * - "auto": Use existing kiro-cli credentials if available (any method)
20
+ * - "builder-id": AWS Builder ID via device code flow
21
+ * - "google" | "github": Social login via kiro-cli (requires kiro-cli installed)
22
+ */
23
+ export declare function loginKiro(callbacks: OAuthLoginCallbacks, preferredMethod?: KiroLoginMethod): Promise<OAuthCredentials>;
24
+ /**
25
+ * Backward-compatible alias for loginKiro with Builder ID.
26
+ * @deprecated Use loginKiro instead.
27
+ */
28
+ export declare function loginKiroBuilderID(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
29
+ export declare function refreshKiroToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;
30
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACX,gBAAgB,EAChB,mBAAmB,EACnB,MAAM,uBAAuB,CAAC;AAO/B,eAAO,MAAM,iBAAiB,yCAAyC,CAAC;AACxE,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,wBAAwB,6DACsB,CAAC;AAC5D,eAAO,MAAM,UAAU,UAMtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,2GAA2G;IAC3G,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC9B,SAAS,EAAE,mBAAmB,EAC9B,eAAe,GAAE,eAAwB,GACvC,OAAO,CAAC,gBAAgB,CAAC,CAkB3B;AAoFD;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,mBAAmB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAMD,wBAAsB,gBAAgB,CACrC,WAAW,EAAE,gBAAgB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAkB3B"}