@stackmemoryai/stackmemory 0.5.23 → 0.5.25

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 (72) hide show
  1. package/bin/opencode-sm +6 -0
  2. package/dist/cli/claude-sm.js +2 -0
  3. package/dist/cli/claude-sm.js.map +2 -2
  4. package/dist/cli/commands/discovery.js +279 -0
  5. package/dist/cli/commands/discovery.js.map +7 -0
  6. package/dist/cli/index.js +2 -0
  7. package/dist/cli/index.js.map +2 -2
  8. package/dist/cli/opencode-sm.js +448 -0
  9. package/dist/cli/opencode-sm.js.map +7 -0
  10. package/dist/core/retrieval/llm-context-retrieval.js +1 -3
  11. package/dist/core/retrieval/llm-context-retrieval.js.map +3 -3
  12. package/dist/integrations/mcp/handlers/discovery-handlers.js +497 -0
  13. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  14. package/dist/integrations/mcp/handlers/index.js +40 -12
  15. package/dist/integrations/mcp/handlers/index.js.map +2 -2
  16. package/dist/integrations/mcp/server.js +270 -0
  17. package/dist/integrations/mcp/server.js.map +2 -2
  18. package/dist/integrations/mcp/tool-definitions.js +141 -5
  19. package/dist/integrations/mcp/tool-definitions.js.map +2 -2
  20. package/package.json +3 -2
  21. package/dist/cli/commands/agent.js +0 -286
  22. package/dist/cli/commands/agent.js.map +0 -7
  23. package/dist/cli/commands/chromadb.js +0 -482
  24. package/dist/cli/commands/chromadb.js.map +0 -7
  25. package/dist/cli/commands/gc.js +0 -251
  26. package/dist/cli/commands/gc.js.map +0 -7
  27. package/dist/cli/commands/infinite-storage.js +0 -292
  28. package/dist/cli/commands/infinite-storage.js.map +0 -7
  29. package/dist/cli/commands/linear-create.js +0 -171
  30. package/dist/cli/commands/linear-create.js.map +0 -7
  31. package/dist/cli/commands/linear-list.js +0 -103
  32. package/dist/cli/commands/linear-list.js.map +0 -7
  33. package/dist/cli/commands/linear-migrate.js +0 -64
  34. package/dist/cli/commands/linear-migrate.js.map +0 -7
  35. package/dist/cli/commands/linear-test.js +0 -134
  36. package/dist/cli/commands/linear-test.js.map +0 -7
  37. package/dist/cli/commands/tui.js +0 -77
  38. package/dist/cli/commands/tui.js.map +0 -7
  39. package/dist/cli/commands/webhook.js +0 -181
  40. package/dist/cli/commands/webhook.js.map +0 -7
  41. package/dist/cli/streamlined-cli.js +0 -144
  42. package/dist/cli/streamlined-cli.js.map +0 -7
  43. package/dist/core/events/event-bus.js +0 -110
  44. package/dist/core/events/event-bus.js.map +0 -7
  45. package/dist/core/frame/workflow-templates-stub.js +0 -42
  46. package/dist/core/frame/workflow-templates-stub.js.map +0 -7
  47. package/dist/core/plugins/plugin-interface.js +0 -87
  48. package/dist/core/plugins/plugin-interface.js.map +0 -7
  49. package/dist/core/session/clear-survival-stub.js +0 -53
  50. package/dist/core/session/clear-survival-stub.js.map +0 -7
  51. package/dist/core/storage/chromadb-simple.js +0 -172
  52. package/dist/core/storage/chromadb-simple.js.map +0 -7
  53. package/dist/core/storage/simplified-storage.js +0 -328
  54. package/dist/core/storage/simplified-storage.js.map +0 -7
  55. package/dist/features/tasks/pebbles-task-store.js +0 -647
  56. package/dist/features/tasks/pebbles-task-store.js.map +0 -7
  57. package/dist/integrations/linear/sync-enhanced.js +0 -202
  58. package/dist/integrations/linear/sync-enhanced.js.map +0 -7
  59. package/dist/plugins/linear/index.js +0 -166
  60. package/dist/plugins/linear/index.js.map +0 -7
  61. package/dist/plugins/loader.js +0 -57
  62. package/dist/plugins/loader.js.map +0 -7
  63. package/dist/plugins/plugin-interface.js +0 -67
  64. package/dist/plugins/plugin-interface.js.map +0 -7
  65. package/dist/plugins/ralph/simple-ralph-plugin.js +0 -305
  66. package/dist/plugins/ralph/simple-ralph-plugin.js.map +0 -7
  67. package/dist/plugins/ralph/use-cases/code-generator.js +0 -151
  68. package/dist/plugins/ralph/use-cases/code-generator.js.map +0 -7
  69. package/dist/plugins/ralph/use-cases/test-generator.js +0 -201
  70. package/dist/plugins/ralph/use-cases/test-generator.js.map +0 -7
  71. package/dist/utils/logger.js +0 -52
  72. 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
- }