@negusdev/dbask 0.0.0-stage → 0.1.8

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 (161) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +15 -0
  3. package/README.md +422 -2
  4. package/dist/ai/factory.d.ts +4 -0
  5. package/dist/ai/factory.d.ts.map +1 -0
  6. package/dist/ai/factory.js +55 -0
  7. package/dist/ai/factory.js.map +1 -0
  8. package/dist/ai/provider.d.ts +13 -0
  9. package/dist/ai/provider.d.ts.map +1 -0
  10. package/dist/ai/provider.js +2 -0
  11. package/dist/ai/provider.js.map +1 -0
  12. package/dist/ai/sdk-provider.d.ts +13 -0
  13. package/dist/ai/sdk-provider.d.ts.map +1 -0
  14. package/dist/ai/sdk-provider.js +36 -0
  15. package/dist/ai/sdk-provider.js.map +1 -0
  16. package/dist/cli-args.d.ts +26 -0
  17. package/dist/cli-args.d.ts.map +1 -0
  18. package/dist/cli-args.js +72 -0
  19. package/dist/cli-args.js.map +1 -0
  20. package/dist/cli-observer.d.ts +23 -0
  21. package/dist/cli-observer.d.ts.map +1 -0
  22. package/dist/cli-observer.js +224 -0
  23. package/dist/cli-observer.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +127 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/commands/init.d.ts +2 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +247 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/validate.d.ts +31 -0
  33. package/dist/commands/validate.d.ts.map +1 -0
  34. package/dist/commands/validate.js +205 -0
  35. package/dist/commands/validate.js.map +1 -0
  36. package/dist/config/config.d.ts +42 -0
  37. package/dist/config/config.d.ts.map +1 -0
  38. package/dist/config/config.js +94 -0
  39. package/dist/config/config.js.map +1 -0
  40. package/dist/context/db-context.d.ts +12 -0
  41. package/dist/context/db-context.d.ts.map +1 -0
  42. package/dist/context/db-context.js +29 -0
  43. package/dist/context/db-context.js.map +1 -0
  44. package/dist/core/agent/agent.d.ts +57 -0
  45. package/dist/core/agent/agent.d.ts.map +1 -0
  46. package/dist/core/agent/agent.js +518 -0
  47. package/dist/core/agent/agent.js.map +1 -0
  48. package/dist/core/agent/index.d.ts +4 -0
  49. package/dist/core/agent/index.d.ts.map +1 -0
  50. package/dist/core/agent/index.js +2 -0
  51. package/dist/core/agent/index.js.map +1 -0
  52. package/dist/core/agent/observability.d.ts +19 -0
  53. package/dist/core/agent/observability.d.ts.map +1 -0
  54. package/dist/core/agent/observability.js +4 -0
  55. package/dist/core/agent/observability.js.map +1 -0
  56. package/dist/core/agent/query-plan.d.ts +68 -0
  57. package/dist/core/agent/query-plan.d.ts.map +1 -0
  58. package/dist/core/agent/query-plan.js +282 -0
  59. package/dist/core/agent/query-plan.js.map +1 -0
  60. package/dist/core/tools/describe-table.d.ts +6 -0
  61. package/dist/core/tools/describe-table.d.ts.map +1 -0
  62. package/dist/core/tools/describe-table.js +25 -0
  63. package/dist/core/tools/describe-table.js.map +1 -0
  64. package/dist/core/tools/describe-tables.d.ts +6 -0
  65. package/dist/core/tools/describe-tables.d.ts.map +1 -0
  66. package/dist/core/tools/describe-tables.js +22 -0
  67. package/dist/core/tools/describe-tables.js.map +1 -0
  68. package/dist/core/tools/execute-query.d.ts +6 -0
  69. package/dist/core/tools/execute-query.d.ts.map +1 -0
  70. package/dist/core/tools/execute-query.js +31 -0
  71. package/dist/core/tools/execute-query.js.map +1 -0
  72. package/dist/core/tools/explain-query.d.ts +10 -0
  73. package/dist/core/tools/explain-query.d.ts.map +1 -0
  74. package/dist/core/tools/explain-query.js +34 -0
  75. package/dist/core/tools/explain-query.js.map +1 -0
  76. package/dist/core/tools/get-relationships.d.ts +6 -0
  77. package/dist/core/tools/get-relationships.d.ts.map +1 -0
  78. package/dist/core/tools/get-relationships.js +23 -0
  79. package/dist/core/tools/get-relationships.js.map +1 -0
  80. package/dist/core/tools/index.d.ts +9 -0
  81. package/dist/core/tools/index.d.ts.map +1 -0
  82. package/dist/core/tools/index.js +8 -0
  83. package/dist/core/tools/index.js.map +1 -0
  84. package/dist/core/tools/list-tables.d.ts +3 -0
  85. package/dist/core/tools/list-tables.d.ts.map +1 -0
  86. package/dist/core/tools/list-tables.js +18 -0
  87. package/dist/core/tools/list-tables.js.map +1 -0
  88. package/dist/core/tools/registry.d.ts +11 -0
  89. package/dist/core/tools/registry.d.ts.map +1 -0
  90. package/dist/core/tools/registry.js +48 -0
  91. package/dist/core/tools/registry.js.map +1 -0
  92. package/dist/core/types/index.d.ts +102 -0
  93. package/dist/core/types/index.d.ts.map +1 -0
  94. package/dist/core/types/index.js +6 -0
  95. package/dist/core/types/index.js.map +1 -0
  96. package/dist/database/adapter.d.ts +3 -0
  97. package/dist/database/adapter.d.ts.map +1 -0
  98. package/dist/database/adapter.js +2 -0
  99. package/dist/database/adapter.js.map +1 -0
  100. package/dist/database/factory.d.ts +16 -0
  101. package/dist/database/factory.d.ts.map +1 -0
  102. package/dist/database/factory.js +27 -0
  103. package/dist/database/factory.js.map +1 -0
  104. package/dist/database/index.d.ts +8 -0
  105. package/dist/database/index.d.ts.map +1 -0
  106. package/dist/database/index.js +4 -0
  107. package/dist/database/index.js.map +1 -0
  108. package/dist/database/mysql/adapter.d.ts +26 -0
  109. package/dist/database/mysql/adapter.d.ts.map +1 -0
  110. package/dist/database/mysql/adapter.js +131 -0
  111. package/dist/database/mysql/adapter.js.map +1 -0
  112. package/dist/database/postgres/adapter.d.ts +60 -0
  113. package/dist/database/postgres/adapter.d.ts.map +1 -0
  114. package/dist/database/postgres/adapter.js +307 -0
  115. package/dist/database/postgres/adapter.js.map +1 -0
  116. package/dist/database/result-limits.d.ts +17 -0
  117. package/dist/database/result-limits.d.ts.map +1 -0
  118. package/dist/database/result-limits.js +26 -0
  119. package/dist/database/result-limits.js.map +1 -0
  120. package/dist/index.d.ts +20 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +13 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/safety/limits.d.ts +7 -0
  125. package/dist/safety/limits.d.ts.map +1 -0
  126. package/dist/safety/limits.js +15 -0
  127. package/dist/safety/limits.js.map +1 -0
  128. package/dist/safety/policy.d.ts +8 -0
  129. package/dist/safety/policy.d.ts.map +1 -0
  130. package/dist/safety/policy.js +11 -0
  131. package/dist/safety/policy.js.map +1 -0
  132. package/dist/safety/sql-tokenizer.d.ts +49 -0
  133. package/dist/safety/sql-tokenizer.d.ts.map +1 -0
  134. package/dist/safety/sql-tokenizer.js +240 -0
  135. package/dist/safety/sql-tokenizer.js.map +1 -0
  136. package/dist/safety/sql-validator.d.ts +34 -0
  137. package/dist/safety/sql-validator.d.ts.map +1 -0
  138. package/dist/safety/sql-validator.js +270 -0
  139. package/dist/safety/sql-validator.js.map +1 -0
  140. package/dist/schema/cache.d.ts +24 -0
  141. package/dist/schema/cache.d.ts.map +1 -0
  142. package/dist/schema/cache.js +57 -0
  143. package/dist/schema/cache.js.map +1 -0
  144. package/dist/ui/markdown.d.ts +8 -0
  145. package/dist/ui/markdown.d.ts.map +1 -0
  146. package/dist/ui/markdown.js +205 -0
  147. package/dist/ui/markdown.js.map +1 -0
  148. package/dist/ui/spinner.d.ts +32 -0
  149. package/dist/ui/spinner.d.ts.map +1 -0
  150. package/dist/ui/spinner.js +74 -0
  151. package/dist/ui/spinner.js.map +1 -0
  152. package/dist/ui/sql-highlight.d.ts +4 -0
  153. package/dist/ui/sql-highlight.d.ts.map +1 -0
  154. package/dist/ui/sql-highlight.js +28 -0
  155. package/dist/ui/sql-highlight.js.map +1 -0
  156. package/dist/ui/style.d.ts +38 -0
  157. package/dist/ui/style.d.ts.map +1 -0
  158. package/dist/ui/style.js +69 -0
  159. package/dist/ui/style.js.map +1 -0
  160. package/package.json +91 -4
  161. package/sql-ai.example.md +32 -0
@@ -0,0 +1,94 @@
1
+ import 'dotenv/config';
2
+ import { z } from 'zod';
3
+ const providerSchema = z.enum([
4
+ 'openrouter',
5
+ 'groq',
6
+ 'google',
7
+ 'cerebras',
8
+ 'ollama',
9
+ 'deepseek',
10
+ ]);
11
+ const envSchema = z.object({
12
+ AI_PROVIDER: providerSchema.default('openrouter'),
13
+ AI_MODEL: z.string().min(1, 'AI_MODEL is required'),
14
+ OPENROUTER_API_KEY: z.string().optional(),
15
+ GROQ_API_KEY: z.string().optional(),
16
+ GOOGLE_GENERATIVE_AI_API_KEY: z.string().optional(),
17
+ CEREBRAS_API_KEY: z.string().optional(),
18
+ DEEPSEEK_API_KEY: z.string().optional(),
19
+ OLLAMA_BASE_URL: z.string().url().default('http://localhost:11434/v1'),
20
+ AI_SITE_URL: z.preprocess((value) => value === '' ? undefined : value, z.string().url().optional()),
21
+ AI_SITE_NAME: z.string().default('dbask'),
22
+ DB_DRIVER: z.enum(['mysql', 'postgres', 'sqlite']).default('mysql'),
23
+ DB_HOST: z.string().default('127.0.0.1'),
24
+ // Empty means "use the driver's default port" (3306 / 5432).
25
+ DB_PORT: z.preprocess((value) => value === '' ? undefined : value, z.coerce.number().int().min(1).max(65535).optional()),
26
+ DB_NAME: z.string().default(''),
27
+ DB_USER: z.string().default(''),
28
+ DB_PASSWORD: z.string().default(''),
29
+ DB_SSL: z.enum(['disable', 'require', 'verify-full']).default('disable'),
30
+ SQL_MAX_ROWS: z.coerce.number().int().positive().default(500),
31
+ SQL_QUERY_TIMEOUT_MS: z.coerce.number().int().positive().default(10_000),
32
+ SQL_MAX_RESULT_BYTES: z.coerce.number().int().positive().default(1_048_576),
33
+ AGENT_MAX_STEPS: z.coerce.number().int().min(1).max(20).default(8),
34
+ // "on" makes the agent submit a schema-checked query plan before running SQL.
35
+ AGENT_QUERY_PLAN: z.enum(['on', 'off']).default('off'),
36
+ SCHEMA_CACHE_TTL_MS: z.coerce.number().int().positive().default(300_000),
37
+ });
38
+ export function loadConfig(env = process.env) {
39
+ const parsed = envSchema.parse(env);
40
+ const apiKeys = {
41
+ openrouter: parsed.OPENROUTER_API_KEY,
42
+ groq: parsed.GROQ_API_KEY,
43
+ google: parsed.GOOGLE_GENERATIVE_AI_API_KEY,
44
+ cerebras: parsed.CEREBRAS_API_KEY,
45
+ ollama: undefined,
46
+ deepseek: parsed.DEEPSEEK_API_KEY,
47
+ };
48
+ const apiKey = apiKeys[parsed.AI_PROVIDER];
49
+ if (parsed.AI_PROVIDER !== 'ollama' && !apiKey?.trim()) {
50
+ const envNames = {
51
+ openrouter: 'OPENROUTER_API_KEY',
52
+ groq: 'GROQ_API_KEY',
53
+ google: 'GOOGLE_GENERATIVE_AI_API_KEY',
54
+ cerebras: 'CEREBRAS_API_KEY',
55
+ deepseek: 'DEEPSEEK_API_KEY',
56
+ };
57
+ throw new Error(`${envNames[parsed.AI_PROVIDER]} is required when AI_PROVIDER=${parsed.AI_PROVIDER}`);
58
+ }
59
+ return {
60
+ ai: {
61
+ provider: parsed.AI_PROVIDER,
62
+ apiKey,
63
+ model: parsed.AI_MODEL,
64
+ baseUrl: parsed.AI_PROVIDER === 'ollama'
65
+ ? parsed.OLLAMA_BASE_URL
66
+ : undefined,
67
+ siteUrl: parsed.AI_SITE_URL,
68
+ siteName: parsed.AI_SITE_NAME,
69
+ },
70
+ database: {
71
+ driver: parsed.DB_DRIVER,
72
+ host: parsed.DB_HOST,
73
+ port: parsed.DB_PORT ?? (parsed.DB_DRIVER === 'postgres' ? 5432 : 3306),
74
+ name: parsed.DB_NAME,
75
+ user: parsed.DB_USER,
76
+ password: parsed.DB_PASSWORD,
77
+ ssl: parsed.DB_SSL,
78
+ },
79
+ agent: {
80
+ maxSteps: parsed.AGENT_MAX_STEPS,
81
+ queryPlan: parsed.AGENT_QUERY_PLAN === 'on',
82
+ },
83
+ schema: {
84
+ cacheTtlMs: parsed.SCHEMA_CACHE_TTL_MS,
85
+ },
86
+ safety: {
87
+ readOnly: true,
88
+ maxRows: parsed.SQL_MAX_ROWS,
89
+ queryTimeoutMs: parsed.SQL_QUERY_TIMEOUT_MS,
90
+ maxResultBytes: parsed.SQL_MAX_RESULT_BYTES,
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DatabaseContext } from '../core/types/index.js';
2
+ export declare const DEFAULT_DATABASE_CONTEXT_FILE = "sql-ai.md";
3
+ export interface DatabaseContextLoaderOptions {
4
+ cwd?: string;
5
+ fileName?: string;
6
+ }
7
+ /**
8
+ * Loads optional, user-authored business/domain context for the connected database.
9
+ * Missing context is normal and never prevents the harness from running.
10
+ */
11
+ export declare function loadDatabaseContext(options?: DatabaseContextLoaderOptions): Promise<DatabaseContext>;
12
+ //# sourceMappingURL=db-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-context.d.ts","sourceRoot":"","sources":["../../src/context/db-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,6BAA6B,cAAc,CAAC;AAEzD,MAAM,WAAW,4BAA4B;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,eAAe,CAAC,CAqB1B"}
@@ -0,0 +1,29 @@
1
+ import { access, readFile } from 'node:fs/promises';
2
+ import { constants } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ export const DEFAULT_DATABASE_CONTEXT_FILE = 'sql-ai.md';
5
+ /**
6
+ * Loads optional, user-authored business/domain context for the connected database.
7
+ * Missing context is normal and never prevents the harness from running.
8
+ */
9
+ export async function loadDatabaseContext(options = {}) {
10
+ const cwd = options.cwd ?? process.cwd();
11
+ const fileName = options.fileName ?? DEFAULT_DATABASE_CONTEXT_FILE;
12
+ const path = resolve(cwd, fileName);
13
+ try {
14
+ await access(path, constants.R_OK);
15
+ const content = (await readFile(path, 'utf8')).trim();
16
+ if (!content)
17
+ return {};
18
+ return { content, source: path };
19
+ }
20
+ catch (error) {
21
+ const code = error && typeof error === 'object' && 'code' in error
22
+ ? error.code
23
+ : undefined;
24
+ if (code === 'ENOENT')
25
+ return {};
26
+ throw error;
27
+ }
28
+ }
29
+ //# sourceMappingURL=db-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-context.js","sourceRoot":"","sources":["../../src/context/db-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,6BAA6B,GAAG,WAAW,CAAC;AAOzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAO,GAAiC,EAAE;IAE1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,6BAA6B,CAAC;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAExB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;YAChE,CAAC,CAAE,KAA2B,CAAC,IAAI;YACnC,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEjC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { AiProvider } from "../../ai/provider.js";
2
+ import type { DatabaseContext, ToolContext } from "../types/index.js";
3
+ import { type AgentObserver } from "./observability.js";
4
+ export type ResponseMode = "natural" | "technical" | "debug";
5
+ export interface AgentOptions {
6
+ maxSteps?: number;
7
+ databaseContext?: DatabaseContext;
8
+ responseMode?: ResponseMode;
9
+ temperature?: number;
10
+ observer?: AgentObserver;
11
+ /**
12
+ * Require a validated query plan before any SQL runs. Defaults to false:
13
+ * on the benchmark the plan added about 0.7 tool calls and ~30% latency per
14
+ * question without improving accuracy.
15
+ */
16
+ requirePlan?: boolean;
17
+ }
18
+ export interface PlanStats {
19
+ submitted: number;
20
+ accepted: number;
21
+ rejected: number;
22
+ /** execute_query calls blocked because the SQL used tables outside the plan. */
23
+ sqlMismatches: number;
24
+ }
25
+ export interface AgentResult {
26
+ text: string;
27
+ steps: number;
28
+ toolCalls: number;
29
+ raw?: unknown;
30
+ /**
31
+ * True when the model produced no final answer (for example it ran out of
32
+ * steps). `text` then holds an explanation instead of an answer.
33
+ */
34
+ incomplete?: boolean;
35
+ /** Plan counters for this question; absent when plans are switched off. */
36
+ plan?: PlanStats;
37
+ }
38
+ /**
39
+ * Application-level agent. Provider-specific model calls stay behind AiProvider;
40
+ * database access stays behind ToolContext and the tool registry.
41
+ */
42
+ export declare class Agent {
43
+ private readonly provider;
44
+ private readonly context;
45
+ private readonly options;
46
+ constructor(provider: AiProvider, context: ToolContext, options?: AgentOptions);
47
+ ask(question: string): Promise<AgentResult>;
48
+ private get planRequired();
49
+ private planStats;
50
+ private planInstructions;
51
+ private dialectInstructions;
52
+ private responseInstructions;
53
+ private buildTools;
54
+ private loadSchemaFacts;
55
+ private discoverRelationships;
56
+ }
57
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/core/agent/agent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EAIf,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA2C3E,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA4ED;;;GAGG;AACH,qBAAa,KAAK;IAEd,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,YACmB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,YAAiB,EACzC;IAEE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkGhD;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,UAAU;YA0PJ,eAAe;YAoBf,qBAAqB;CAmDpC"}