@stackmemoryai/stackmemory 0.5.22 → 0.5.24

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 (77) hide show
  1. package/dist/cli/claude-sm.js +2 -0
  2. package/dist/cli/claude-sm.js.map +2 -2
  3. package/dist/cli/commands/discovery.js +279 -0
  4. package/dist/cli/commands/discovery.js.map +7 -0
  5. package/dist/cli/commands/retrieval.js +248 -0
  6. package/dist/cli/commands/retrieval.js.map +7 -0
  7. package/dist/cli/index.js +4 -0
  8. package/dist/cli/index.js.map +2 -2
  9. package/dist/core/retrieval/llm-context-retrieval.js +33 -1
  10. package/dist/core/retrieval/llm-context-retrieval.js.map +2 -2
  11. package/dist/core/retrieval/llm-provider.js +128 -0
  12. package/dist/core/retrieval/llm-provider.js.map +7 -0
  13. package/dist/core/retrieval/retrieval-audit.js +236 -0
  14. package/dist/core/retrieval/retrieval-audit.js.map +7 -0
  15. package/dist/integrations/linear/client.js +125 -0
  16. package/dist/integrations/linear/client.js.map +2 -2
  17. package/dist/integrations/mcp/handlers/discovery-handlers.js +497 -0
  18. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  19. package/dist/integrations/mcp/handlers/index.js +40 -12
  20. package/dist/integrations/mcp/handlers/index.js.map +2 -2
  21. package/dist/integrations/mcp/server.js +270 -0
  22. package/dist/integrations/mcp/server.js.map +2 -2
  23. package/dist/integrations/mcp/tool-definitions.js +141 -5
  24. package/dist/integrations/mcp/tool-definitions.js.map +2 -2
  25. package/package.json +1 -1
  26. package/dist/cli/commands/agent.js +0 -286
  27. package/dist/cli/commands/agent.js.map +0 -7
  28. package/dist/cli/commands/chromadb.js +0 -482
  29. package/dist/cli/commands/chromadb.js.map +0 -7
  30. package/dist/cli/commands/gc.js +0 -251
  31. package/dist/cli/commands/gc.js.map +0 -7
  32. package/dist/cli/commands/infinite-storage.js +0 -292
  33. package/dist/cli/commands/infinite-storage.js.map +0 -7
  34. package/dist/cli/commands/linear-create.js +0 -171
  35. package/dist/cli/commands/linear-create.js.map +0 -7
  36. package/dist/cli/commands/linear-list.js +0 -103
  37. package/dist/cli/commands/linear-list.js.map +0 -7
  38. package/dist/cli/commands/linear-migrate.js +0 -64
  39. package/dist/cli/commands/linear-migrate.js.map +0 -7
  40. package/dist/cli/commands/linear-test.js +0 -134
  41. package/dist/cli/commands/linear-test.js.map +0 -7
  42. package/dist/cli/commands/tui.js +0 -77
  43. package/dist/cli/commands/tui.js.map +0 -7
  44. package/dist/cli/commands/webhook.js +0 -181
  45. package/dist/cli/commands/webhook.js.map +0 -7
  46. package/dist/cli/streamlined-cli.js +0 -144
  47. package/dist/cli/streamlined-cli.js.map +0 -7
  48. package/dist/core/events/event-bus.js +0 -110
  49. package/dist/core/events/event-bus.js.map +0 -7
  50. package/dist/core/frame/workflow-templates-stub.js +0 -42
  51. package/dist/core/frame/workflow-templates-stub.js.map +0 -7
  52. package/dist/core/plugins/plugin-interface.js +0 -87
  53. package/dist/core/plugins/plugin-interface.js.map +0 -7
  54. package/dist/core/session/clear-survival-stub.js +0 -53
  55. package/dist/core/session/clear-survival-stub.js.map +0 -7
  56. package/dist/core/storage/chromadb-simple.js +0 -172
  57. package/dist/core/storage/chromadb-simple.js.map +0 -7
  58. package/dist/core/storage/simplified-storage.js +0 -328
  59. package/dist/core/storage/simplified-storage.js.map +0 -7
  60. package/dist/features/tasks/pebbles-task-store.js +0 -647
  61. package/dist/features/tasks/pebbles-task-store.js.map +0 -7
  62. package/dist/integrations/linear/sync-enhanced.js +0 -202
  63. package/dist/integrations/linear/sync-enhanced.js.map +0 -7
  64. package/dist/plugins/linear/index.js +0 -166
  65. package/dist/plugins/linear/index.js.map +0 -7
  66. package/dist/plugins/loader.js +0 -57
  67. package/dist/plugins/loader.js.map +0 -7
  68. package/dist/plugins/plugin-interface.js +0 -67
  69. package/dist/plugins/plugin-interface.js.map +0 -7
  70. package/dist/plugins/ralph/simple-ralph-plugin.js +0 -305
  71. package/dist/plugins/ralph/simple-ralph-plugin.js.map +0 -7
  72. package/dist/plugins/ralph/use-cases/code-generator.js +0 -151
  73. package/dist/plugins/ralph/use-cases/code-generator.js.map +0 -7
  74. package/dist/plugins/ralph/use-cases/test-generator.js +0 -201
  75. package/dist/plugins/ralph/use-cases/test-generator.js.map +0 -7
  76. package/dist/utils/logger.js +0 -52
  77. package/dist/utils/logger.js.map +0 -7
@@ -1,201 +0,0 @@
1
- import { SimpleRalphPlugin } from "../simple-ralph-plugin.js";
2
- import * as fs from "fs/promises";
3
- import * as path from "path";
4
- import { execSync } from "child_process";
5
- class TestGenerator {
6
- ralphPlugin;
7
- constructor(ralphPlugin) {
8
- this.ralphPlugin = ralphPlugin;
9
- }
10
- /**
11
- * Generate tests iteratively until coverage target is met
12
- */
13
- async generateTests(request) {
14
- const coverageTarget = request.coverageTarget || 80;
15
- const task = {
16
- id: `testgen-${Date.now()}`,
17
- description: `Generate ${request.framework} tests for ${request.targetFile}`,
18
- acceptanceCriteria: [
19
- "All tests pass",
20
- `Test coverage >= ${coverageTarget}%`,
21
- "No test duplication",
22
- "Tests are maintainable and clear"
23
- ],
24
- maxIterations: 7
25
- };
26
- if (request.includeEdgeCases) {
27
- task.acceptanceCriteria.push("Edge cases covered");
28
- task.acceptanceCriteria.push("Error conditions tested");
29
- }
30
- if (request.includeIntegrationTests) {
31
- task.acceptanceCriteria.push("Integration tests included");
32
- }
33
- const result = await this.ralphPlugin.runTask(task);
34
- const analysis = await this.analyzeGeneratedTests(request.targetFile, request.framework);
35
- return {
36
- testFiles: analysis.files,
37
- coverage: analysis.coverage,
38
- testCount: analysis.testCount,
39
- passRate: analysis.passRate,
40
- iterations: result.iterations
41
- };
42
- }
43
- /**
44
- * Analyze generated tests
45
- */
46
- async analyzeGeneratedTests(targetFile, framework) {
47
- const analysis = {
48
- files: [],
49
- coverage: 0,
50
- testCount: 0,
51
- passRate: 0
52
- };
53
- try {
54
- const testDir = path.dirname(targetFile);
55
- const baseName = path.basename(targetFile, path.extname(targetFile));
56
- const testPatterns = [
57
- `${baseName}.test.*`,
58
- `${baseName}.spec.*`,
59
- `test_${baseName}.*`,
60
- `${baseName}_test.*`
61
- ];
62
- for (const pattern of testPatterns) {
63
- const files = await this.findFiles(testDir, pattern);
64
- analysis.files.push(...files);
65
- }
66
- analysis.coverage = await this.runCoverageAnalysis(framework);
67
- const testResults = await this.runTests(framework);
68
- analysis.testCount = testResults.total;
69
- analysis.passRate = testResults.passed / testResults.total * 100;
70
- } catch (error) {
71
- console.error("Error analyzing tests:", error);
72
- }
73
- return analysis;
74
- }
75
- /**
76
- * Find files matching pattern
77
- */
78
- async findFiles(dir, pattern) {
79
- const files = [];
80
- try {
81
- const entries = await fs.readdir(dir);
82
- for (const entry of entries) {
83
- if (this.matchesPattern(entry, pattern)) {
84
- files.push(path.join(dir, entry));
85
- }
86
- }
87
- } catch (error) {
88
- console.error("Error finding files:", error);
89
- }
90
- return files;
91
- }
92
- /**
93
- * Simple pattern matching
94
- */
95
- matchesPattern(filename, pattern) {
96
- const regex = new RegExp(pattern.replace(/\*/g, ".*"));
97
- return regex.test(filename);
98
- }
99
- /**
100
- * Run coverage analysis
101
- */
102
- async runCoverageAnalysis(framework) {
103
- try {
104
- let command = "";
105
- switch (framework) {
106
- case "jest":
107
- command = "npx jest --coverage --silent";
108
- break;
109
- case "vitest":
110
- command = "npx vitest run --coverage --silent";
111
- break;
112
- case "mocha":
113
- command = "npx nyc mocha";
114
- break;
115
- case "pytest":
116
- command = "pytest --cov --cov-report=json";
117
- break;
118
- }
119
- if (command) {
120
- const output = execSync(command, { encoding: "utf-8", stdio: "pipe" });
121
- const match = output.match(/(\d+(?:\.\d+)?)\s*%/);
122
- if (match) {
123
- return parseFloat(match[1]);
124
- }
125
- }
126
- } catch (error) {
127
- console.error("Coverage analysis failed:", error);
128
- }
129
- return 0;
130
- }
131
- /**
132
- * Run tests and get results
133
- */
134
- async runTests(framework) {
135
- try {
136
- let command = "";
137
- switch (framework) {
138
- case "jest":
139
- command = "npx jest --json";
140
- break;
141
- case "vitest":
142
- command = "npx vitest run --reporter=json";
143
- break;
144
- case "mocha":
145
- command = "npx mocha --reporter json";
146
- break;
147
- case "pytest":
148
- command = "pytest --json-report";
149
- break;
150
- }
151
- if (command) {
152
- const output = execSync(command, { encoding: "utf-8", stdio: "pipe" });
153
- try {
154
- const json = JSON.parse(output);
155
- return {
156
- total: json.numTotalTests || json.tests || 0,
157
- passed: json.numPassedTests || json.passes || 0
158
- };
159
- } catch {
160
- const totalMatch = output.match(/(\d+)\s+tests?/i);
161
- const passedMatch = output.match(/(\d+)\s+pass/i);
162
- return {
163
- total: totalMatch ? parseInt(totalMatch[1]) : 0,
164
- passed: passedMatch ? parseInt(passedMatch[1]) : 0
165
- };
166
- }
167
- }
168
- } catch (error) {
169
- console.error("Test execution failed:", error);
170
- }
171
- return { total: 0, passed: 0 };
172
- }
173
- }
174
- async function generateTestsForModule() {
175
- const ralphPlugin = new SimpleRalphPlugin();
176
- await ralphPlugin.initialize({
177
- eventBus: {},
178
- config: { name: "simple-ralph", version: "2.0.0", enabled: true },
179
- dataDir: ".ralph",
180
- getRepository: () => null,
181
- registerRepository: () => {
182
- }
183
- });
184
- const generator = new TestGenerator(ralphPlugin);
185
- const result = await generator.generateTests({
186
- targetFile: "./src/utils/validator.ts",
187
- framework: "jest",
188
- coverageTarget: 90,
189
- includeEdgeCases: true,
190
- includeIntegrationTests: false,
191
- mockStrategy: "partial"
192
- });
193
- console.log(`Generated ${result.testCount} tests with ${result.coverage}% coverage`);
194
- console.log(`Pass rate: ${result.passRate}%`);
195
- console.log(`Completed in ${result.iterations} iterations`);
196
- }
197
- export {
198
- TestGenerator,
199
- generateTestsForModule
200
- };
201
- //# sourceMappingURL=test-generator.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/plugins/ralph/use-cases/test-generator.ts"],
4
- "sourcesContent": ["/**\n * Test Generator - Iteratively generate comprehensive test suites\n * Focuses on achieving high coverage and catching edge cases\n */\n\nimport { SimpleRalphPlugin, SimpleTask } from '../simple-ralph-plugin.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\nexport interface TestGenRequest {\n targetFile: string;\n framework: 'jest' | 'mocha' | 'vitest' | 'pytest';\n coverageTarget?: number;\n includeEdgeCases?: boolean;\n includeIntegrationTests?: boolean;\n mockStrategy?: 'full' | 'partial' | 'none';\n}\n\nexport interface GeneratedTests {\n testFiles: string[];\n coverage: number;\n testCount: number;\n passRate: number;\n iterations: number;\n}\n\nexport class TestGenerator {\n private ralphPlugin: SimpleRalphPlugin;\n\n constructor(ralphPlugin: SimpleRalphPlugin) {\n this.ralphPlugin = ralphPlugin;\n }\n\n /**\n * Generate tests iteratively until coverage target is met\n */\n async generateTests(request: TestGenRequest): Promise<GeneratedTests> {\n const coverageTarget = request.coverageTarget || 80;\n\n const task: SimpleTask = {\n id: `testgen-${Date.now()}`,\n description: `Generate ${request.framework} tests for ${request.targetFile}`,\n acceptanceCriteria: [\n 'All tests pass',\n `Test coverage >= ${coverageTarget}%`,\n 'No test duplication',\n 'Tests are maintainable and clear'\n ],\n maxIterations: 7\n };\n\n // Add edge case criteria if requested\n if (request.includeEdgeCases) {\n task.acceptanceCriteria.push('Edge cases covered');\n task.acceptanceCriteria.push('Error conditions tested');\n }\n\n if (request.includeIntegrationTests) {\n task.acceptanceCriteria.push('Integration tests included');\n }\n\n // Run iterative test generation\n const result = await this.ralphPlugin.runTask(task);\n\n // Analyze generated tests\n const analysis = await this.analyzeGeneratedTests(request.targetFile, request.framework);\n\n return {\n testFiles: analysis.files,\n coverage: analysis.coverage,\n testCount: analysis.testCount,\n passRate: analysis.passRate,\n iterations: result.iterations\n };\n }\n\n /**\n * Analyze generated tests\n */\n private async analyzeGeneratedTests(\n targetFile: string, \n framework: string\n ): Promise<{\n files: string[];\n coverage: number;\n testCount: number;\n passRate: number;\n }> {\n const analysis = {\n files: [] as string[],\n coverage: 0,\n testCount: 0,\n passRate: 0\n };\n\n try {\n // Find test files\n const testDir = path.dirname(targetFile);\n const baseName = path.basename(targetFile, path.extname(targetFile));\n \n const testPatterns = [\n `${baseName}.test.*`,\n `${baseName}.spec.*`,\n `test_${baseName}.*`,\n `${baseName}_test.*`\n ];\n\n for (const pattern of testPatterns) {\n const files = await this.findFiles(testDir, pattern);\n analysis.files.push(...files);\n }\n\n // Run coverage analysis\n analysis.coverage = await this.runCoverageAnalysis(framework);\n \n // Count tests and check pass rate\n const testResults = await this.runTests(framework);\n analysis.testCount = testResults.total;\n analysis.passRate = testResults.passed / testResults.total * 100;\n\n } catch (error) {\n console.error('Error analyzing tests:', error);\n }\n\n return analysis;\n }\n\n /**\n * Find files matching pattern\n */\n private async findFiles(dir: string, pattern: string): Promise<string[]> {\n const files: string[] = [];\n try {\n const entries = await fs.readdir(dir);\n for (const entry of entries) {\n if (this.matchesPattern(entry, pattern)) {\n files.push(path.join(dir, entry));\n }\n }\n } catch (error) {\n console.error('Error finding files:', error);\n }\n return files;\n }\n\n /**\n * Simple pattern matching\n */\n private matchesPattern(filename: string, pattern: string): boolean {\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'));\n return regex.test(filename);\n }\n\n /**\n * Run coverage analysis\n */\n private async runCoverageAnalysis(framework: string): Promise<number> {\n try {\n let command = '';\n switch (framework) {\n case 'jest':\n command = 'npx jest --coverage --silent';\n break;\n case 'vitest':\n command = 'npx vitest run --coverage --silent';\n break;\n case 'mocha':\n command = 'npx nyc mocha';\n break;\n case 'pytest':\n command = 'pytest --cov --cov-report=json';\n break;\n }\n\n if (command) {\n const output = execSync(command, { encoding: 'utf-8', stdio: 'pipe' });\n \n // Parse coverage from output (simplified)\n const match = output.match(/(\\d+(?:\\.\\d+)?)\\s*%/);\n if (match) {\n return parseFloat(match[1]);\n }\n }\n } catch (error) {\n console.error('Coverage analysis failed:', error);\n }\n \n return 0;\n }\n\n /**\n * Run tests and get results\n */\n private async runTests(framework: string): Promise<{ total: number; passed: number }> {\n try {\n let command = '';\n switch (framework) {\n case 'jest':\n command = 'npx jest --json';\n break;\n case 'vitest':\n command = 'npx vitest run --reporter=json';\n break;\n case 'mocha':\n command = 'npx mocha --reporter json';\n break;\n case 'pytest':\n command = 'pytest --json-report';\n break;\n }\n\n if (command) {\n const output = execSync(command, { encoding: 'utf-8', stdio: 'pipe' });\n \n try {\n const json = JSON.parse(output);\n // Parse based on framework (simplified)\n return {\n total: json.numTotalTests || json.tests || 0,\n passed: json.numPassedTests || json.passes || 0\n };\n } catch {\n // Fallback to regex parsing\n const totalMatch = output.match(/(\\d+)\\s+tests?/i);\n const passedMatch = output.match(/(\\d+)\\s+pass/i);\n \n return {\n total: totalMatch ? parseInt(totalMatch[1]) : 0,\n passed: passedMatch ? parseInt(passedMatch[1]) : 0\n };\n }\n }\n } catch (error) {\n console.error('Test execution failed:', error);\n }\n \n return { total: 0, passed: 0 };\n }\n}\n\n// Example: Generate tests for a TypeScript module\nexport async function generateTestsForModule(): Promise<void> {\n const ralphPlugin = new SimpleRalphPlugin();\n await ralphPlugin.initialize({\n eventBus: {} as any,\n config: { name: 'simple-ralph', version: '2.0.0', enabled: true },\n dataDir: '.ralph',\n getRepository: () => null as any,\n registerRepository: () => {}\n });\n\n const generator = new TestGenerator(ralphPlugin);\n \n const result = await generator.generateTests({\n targetFile: './src/utils/validator.ts',\n framework: 'jest',\n coverageTarget: 90,\n includeEdgeCases: true,\n includeIntegrationTests: false,\n mockStrategy: 'partial'\n });\n\n console.log(`Generated ${result.testCount} tests with ${result.coverage}% coverage`);\n console.log(`Pass rate: ${result.passRate}%`);\n console.log(`Completed in ${result.iterations} iterations`);\n}"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,52 +0,0 @@
1
- import chalk from "chalk";
2
- class Logger {
3
- name;
4
- logLevel;
5
- constructor(name, logLevel = "info") {
6
- this.name = name;
7
- this.logLevel = process.env["LOG_LEVEL"] || logLevel;
8
- }
9
- shouldLog(level) {
10
- const levels = ["debug", "info", "warn", "error"];
11
- const currentIndex = levels.indexOf(this.logLevel);
12
- const targetIndex = levels.indexOf(level);
13
- return targetIndex >= currentIndex;
14
- }
15
- formatMessage(level, message, ...args) {
16
- const timestamp = (/* @__PURE__ */ new Date()).toISOString();
17
- const prefix = `[${timestamp}] [${this.name}] [${level.toUpperCase()}]`;
18
- const formattedArgs = args.length > 0 ? " " + args.map(
19
- (arg) => typeof arg === "object" ? JSON.stringify(arg, null, 2) : arg
20
- ).join(" ") : "";
21
- return `${prefix} ${message}${formattedArgs}`;
22
- }
23
- debug(message, ...args) {
24
- if (this.shouldLog("debug")) {
25
- console.log(chalk.gray(this.formatMessage("debug", message, ...args)));
26
- }
27
- }
28
- info(message, ...args) {
29
- if (this.shouldLog("info")) {
30
- console.log(chalk.blue(this.formatMessage("info", message, ...args)));
31
- }
32
- }
33
- warn(message, ...args) {
34
- if (this.shouldLog("warn")) {
35
- console.warn(chalk.yellow(this.formatMessage("warn", message, ...args)));
36
- }
37
- }
38
- error(message, error) {
39
- if (this.shouldLog("error")) {
40
- const errorDetails = error ? error instanceof Error ? `
41
- ${error.stack || error.message}` : `
42
- ${JSON.stringify(error, null, 2)}` : "";
43
- console.error(
44
- chalk.red(this.formatMessage("error", message) + errorDetails)
45
- );
46
- }
47
- }
48
- }
49
- export {
50
- Logger
51
- };
52
- //# sourceMappingURL=logger.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/logger.ts"],
4
- "sourcesContent": ["import chalk from 'chalk';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport class Logger {\n private name: string;\n private logLevel: LogLevel;\n\n constructor(name: string, logLevel: LogLevel = 'info') {\n this.name = name;\n this.logLevel = (process.env['LOG_LEVEL'] as LogLevel) || logLevel;\n }\n\n private shouldLog(level: LogLevel): boolean {\n const levels: LogLevel[] = ['debug', 'info', 'warn', 'error'];\n const currentIndex = levels.indexOf(this.logLevel);\n const targetIndex = levels.indexOf(level);\n return targetIndex >= currentIndex;\n }\n\n private formatMessage(\n level: LogLevel,\n message: string,\n ...args: unknown[]\n ): string {\n const timestamp = new Date().toISOString();\n const prefix = `[${timestamp}] [${this.name}] [${level.toUpperCase()}]`;\n\n const formattedArgs =\n args.length > 0\n ? ' ' +\n args\n .map((arg) =>\n typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg\n )\n .join(' ')\n : '';\n\n return `${prefix} ${message}${formattedArgs}`;\n }\n\n public debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog('debug')) {\n console.log(chalk.gray(this.formatMessage('debug', message, ...args)));\n }\n }\n\n public info(message: string, ...args: unknown[]): void {\n if (this.shouldLog('info')) {\n console.log(chalk.blue(this.formatMessage('info', message, ...args)));\n }\n }\n\n public warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog('warn')) {\n console.warn(chalk.yellow(this.formatMessage('warn', message, ...args)));\n }\n }\n\n public error(message: string, error?: unknown): void {\n if (this.shouldLog('error')) {\n const errorDetails = error\n ? error instanceof Error\n ? `\\n${error.stack || error.message}`\n : `\\n${JSON.stringify(error, null, 2)}`\n : '';\n console.error(\n chalk.red(this.formatMessage('error', message) + errorDetails)\n );\n }\n }\n}\n"],
5
- "mappings": "AAAA,OAAO,WAAW;AAIX,MAAM,OAAO;AAAA,EACV;AAAA,EACA;AAAA,EAER,YAAY,MAAc,WAAqB,QAAQ;AACrD,SAAK,OAAO;AACZ,SAAK,WAAY,QAAQ,IAAI,WAAW,KAAkB;AAAA,EAC5D;AAAA,EAEQ,UAAU,OAA0B;AAC1C,UAAM,SAAqB,CAAC,SAAS,QAAQ,QAAQ,OAAO;AAC5D,UAAM,eAAe,OAAO,QAAQ,KAAK,QAAQ;AACjD,UAAM,cAAc,OAAO,QAAQ,KAAK;AACxC,WAAO,eAAe;AAAA,EACxB;AAAA,EAEQ,cACN,OACA,YACG,MACK;AACR,UAAM,aAAY,oBAAI,KAAK,GAAE,YAAY;AACzC,UAAM,SAAS,IAAI,SAAS,MAAM,KAAK,IAAI,MAAM,MAAM,YAAY,CAAC;AAEpE,UAAM,gBACJ,KAAK,SAAS,IACV,MACA,KACG;AAAA,MAAI,CAAC,QACJ,OAAO,QAAQ,WAAW,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI;AAAA,IAC3D,EACC,KAAK,GAAG,IACX;AAEN,WAAO,GAAG,MAAM,IAAI,OAAO,GAAG,aAAa;AAAA,EAC7C;AAAA,EAEO,MAAM,YAAoB,MAAuB;AACtD,QAAI,KAAK,UAAU,OAAO,GAAG;AAC3B,cAAQ,IAAI,MAAM,KAAK,KAAK,cAAc,SAAS,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,IACvE;AAAA,EACF;AAAA,EAEO,KAAK,YAAoB,MAAuB;AACrD,QAAI,KAAK,UAAU,MAAM,GAAG;AAC1B,cAAQ,IAAI,MAAM,KAAK,KAAK,cAAc,QAAQ,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,IACtE;AAAA,EACF;AAAA,EAEO,KAAK,YAAoB,MAAuB;AACrD,QAAI,KAAK,UAAU,MAAM,GAAG;AAC1B,cAAQ,KAAK,MAAM,OAAO,KAAK,cAAc,QAAQ,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAEO,MAAM,SAAiB,OAAuB;AACnD,QAAI,KAAK,UAAU,OAAO,GAAG;AAC3B,YAAM,eAAe,QACjB,iBAAiB,QACf;AAAA,EAAK,MAAM,SAAS,MAAM,OAAO,KACjC;AAAA,EAAK,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC,KACrC;AACJ,cAAQ;AAAA,QACN,MAAM,IAAI,KAAK,cAAc,SAAS,OAAO,IAAI,YAAY;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AACF;",
6
- "names": []
7
- }