codehere 0.1.0
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.
- package/ARCHITECTURE.md +240 -0
- package/CHANGELOG.md +44 -0
- package/CONTRIBUTING.md +171 -0
- package/LICENSE +22 -0
- package/README.md +203 -0
- package/dist/ast-parser.d.ts +55 -0
- package/dist/ast-parser.d.ts.map +1 -0
- package/dist/ast-parser.js +331 -0
- package/dist/ast-parser.js.map +1 -0
- package/dist/benchmark.d.ts +39 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +195 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cache.d.ts +45 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +182 -0
- package/dist/cache.js.map +1 -0
- package/dist/chat.d.ts +4 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +132 -0
- package/dist/chat.js.map +1 -0
- package/dist/code-analysis.d.ts +50 -0
- package/dist/code-analysis.d.ts.map +1 -0
- package/dist/code-analysis.js +327 -0
- package/dist/code-analysis.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +187 -0
- package/dist/context.js.map +1 -0
- package/dist/docs.d.ts +21 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +147 -0
- package/dist/docs.js.map +1 -0
- package/dist/edit.d.ts +38 -0
- package/dist/edit.d.ts.map +1 -0
- package/dist/edit.js +594 -0
- package/dist/edit.js.map +1 -0
- package/dist/embed.d.ts +18 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +479 -0
- package/dist/embed.js.map +1 -0
- package/dist/error-handler.d.ts +76 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +213 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/formatter.d.ts +25 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +148 -0
- package/dist/formatter.js.map +1 -0
- package/dist/git.d.ts +55 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +198 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +964 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligent-retrieval.d.ts +41 -0
- package/dist/intelligent-retrieval.d.ts.map +1 -0
- package/dist/intelligent-retrieval.js +265 -0
- package/dist/intelligent-retrieval.js.map +1 -0
- package/dist/iterative-refinement.d.ts +31 -0
- package/dist/iterative-refinement.d.ts.map +1 -0
- package/dist/iterative-refinement.js +172 -0
- package/dist/iterative-refinement.js.map +1 -0
- package/dist/learning.d.ts +69 -0
- package/dist/learning.d.ts.map +1 -0
- package/dist/learning.js +233 -0
- package/dist/learning.js.map +1 -0
- package/dist/log.d.ts +4 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +31 -0
- package/dist/log.js.map +1 -0
- package/dist/migrate.d.ts +33 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +133 -0
- package/dist/migrate.js.map +1 -0
- package/dist/monitoring.d.ts +75 -0
- package/dist/monitoring.d.ts.map +1 -0
- package/dist/monitoring.js +248 -0
- package/dist/monitoring.js.map +1 -0
- package/dist/parallel-processor.d.ts +43 -0
- package/dist/parallel-processor.d.ts.map +1 -0
- package/dist/parallel-processor.js +308 -0
- package/dist/parallel-processor.js.map +1 -0
- package/dist/planner.d.ts +47 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +198 -0
- package/dist/planner.js.map +1 -0
- package/dist/policy.d.ts +3 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +26 -0
- package/dist/policy.js.map +1 -0
- package/dist/query-optimizer.d.ts +32 -0
- package/dist/query-optimizer.d.ts.map +1 -0
- package/dist/query-optimizer.js +205 -0
- package/dist/query-optimizer.js.map +1 -0
- package/dist/refactor.d.ts +27 -0
- package/dist/refactor.d.ts.map +1 -0
- package/dist/refactor.js +118 -0
- package/dist/refactor.js.map +1 -0
- package/dist/review.d.ts +31 -0
- package/dist/review.d.ts.map +1 -0
- package/dist/review.js +206 -0
- package/dist/review.js.map +1 -0
- package/dist/scaffold.d.ts +14 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +85 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/search.d.ts +19 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +198 -0
- package/dist/search.js.map +1 -0
- package/dist/session.d.ts +17 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +301 -0
- package/dist/session.js.map +1 -0
- package/dist/task-verification.d.ts +39 -0
- package/dist/task-verification.d.ts.map +1 -0
- package/dist/task-verification.js +336 -0
- package/dist/task-verification.js.map +1 -0
- package/dist/test_cohere.d.ts +2 -0
- package/dist/test_cohere.d.ts.map +1 -0
- package/dist/test_cohere.js +68 -0
- package/dist/test_cohere.js.map +1 -0
- package/dist/test_env.d.ts +2 -0
- package/dist/test_env.d.ts.map +1 -0
- package/dist/test_env.js +24 -0
- package/dist/test_env.js.map +1 -0
- package/dist/test_retrieval.d.ts +2 -0
- package/dist/test_retrieval.d.ts.map +1 -0
- package/dist/test_retrieval.js +84 -0
- package/dist/test_retrieval.js.map +1 -0
- package/dist/testgen.d.ts +24 -0
- package/dist/testgen.d.ts.map +1 -0
- package/dist/testgen.js +167 -0
- package/dist/testgen.js.map +1 -0
- package/dist/token-optimizer.d.ts +20 -0
- package/dist/token-optimizer.d.ts.map +1 -0
- package/dist/token-optimizer.js +277 -0
- package/dist/token-optimizer.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +54 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +295 -0
- package/dist/ui.js.map +1 -0
- package/dist/verify_db.d.ts +2 -0
- package/dist/verify_db.d.ts.map +1 -0
- package/dist/verify_db.js +52 -0
- package/dist/verify_db.js.map +1 -0
- package/package.json +71 -0
- package/templates/next-page/app/layout.tsx +19 -0
- package/templates/next-page/app/page.tsx +10 -0
- package/templates/next-page/package.json +22 -0
- package/templates/node-api/index.js +57 -0
- package/templates/node-api/package.json +13 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-Correction & Learning System
|
|
3
|
+
* Learn from errors and improve over time
|
|
4
|
+
*/
|
|
5
|
+
import type { ErrorContext } from './error-handler.js';
|
|
6
|
+
export interface ErrorPattern {
|
|
7
|
+
pattern: string;
|
|
8
|
+
category: string;
|
|
9
|
+
count: number;
|
|
10
|
+
lastSeen: string;
|
|
11
|
+
solutions: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface LearningData {
|
|
14
|
+
errorPatterns: ErrorPattern[];
|
|
15
|
+
successfulOperations: string[];
|
|
16
|
+
performanceMetrics: {
|
|
17
|
+
operation: string;
|
|
18
|
+
avgTime: number;
|
|
19
|
+
successRate: number;
|
|
20
|
+
lastOptimized: string;
|
|
21
|
+
}[];
|
|
22
|
+
corrections: Array<{
|
|
23
|
+
error: string;
|
|
24
|
+
correction: string;
|
|
25
|
+
timestamp: string;
|
|
26
|
+
success: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load learning data
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadLearningData(): LearningData;
|
|
33
|
+
/**
|
|
34
|
+
* Save learning data
|
|
35
|
+
*/
|
|
36
|
+
export declare function saveLearningData(data: LearningData): void;
|
|
37
|
+
/**
|
|
38
|
+
* Record an error for learning
|
|
39
|
+
*/
|
|
40
|
+
export declare function recordError(error: ErrorContext): void;
|
|
41
|
+
/**
|
|
42
|
+
* Record successful operation
|
|
43
|
+
*/
|
|
44
|
+
export declare function recordSuccess(operation: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get correction strategy for an error
|
|
47
|
+
*/
|
|
48
|
+
export declare function getCorrectionStrategy(error: ErrorContext): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Record a correction attempt
|
|
51
|
+
*/
|
|
52
|
+
export declare function recordCorrection(error: string, correction: string, success: boolean): void;
|
|
53
|
+
/**
|
|
54
|
+
* Update performance metrics
|
|
55
|
+
*/
|
|
56
|
+
export declare function updatePerformanceMetrics(operation: string, time: number, success: boolean): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get performance insights
|
|
59
|
+
*/
|
|
60
|
+
export declare function getPerformanceInsights(): {
|
|
61
|
+
slowOperations: string[];
|
|
62
|
+
unreliableOperations: string[];
|
|
63
|
+
recommendations: string[];
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Format learning insights for display
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatLearningInsights(): string;
|
|
69
|
+
//# sourceMappingURL=learning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../src/learning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,WAAW,EAAE,KAAK,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC,CAAC;CACJ;AAUD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAuB/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAWzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA6BrD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAYrD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAyBxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAiC1F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBhG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAmCA;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAmC/C"}
|
package/dist/learning.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-Correction & Learning System
|
|
3
|
+
* Learn from errors and improve over time
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
// Learning data file path
|
|
9
|
+
function getLearningDataPath() {
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
const agentDir = join(__dirname, '..');
|
|
13
|
+
return join(agentDir, 'data', 'learning.json');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Load learning data
|
|
17
|
+
*/
|
|
18
|
+
export function loadLearningData() {
|
|
19
|
+
const dataPath = getLearningDataPath();
|
|
20
|
+
if (!existsSync(dataPath)) {
|
|
21
|
+
return {
|
|
22
|
+
errorPatterns: [],
|
|
23
|
+
successfulOperations: [],
|
|
24
|
+
performanceMetrics: [],
|
|
25
|
+
corrections: [],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const content = readFileSync(dataPath, 'utf-8');
|
|
30
|
+
return JSON.parse(content);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return {
|
|
34
|
+
errorPatterns: [],
|
|
35
|
+
successfulOperations: [],
|
|
36
|
+
performanceMetrics: [],
|
|
37
|
+
corrections: [],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save learning data
|
|
43
|
+
*/
|
|
44
|
+
export function saveLearningData(data) {
|
|
45
|
+
const dataPath = getLearningDataPath();
|
|
46
|
+
const dataDir = dirname(dataPath);
|
|
47
|
+
// Ensure directory exists
|
|
48
|
+
if (!existsSync(dataDir)) {
|
|
49
|
+
const { mkdirSync } = require('fs');
|
|
50
|
+
mkdirSync(dataDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
writeFileSync(dataPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Record an error for learning
|
|
56
|
+
*/
|
|
57
|
+
export function recordError(error) {
|
|
58
|
+
const data = loadLearningData();
|
|
59
|
+
const errorMessage = error.originalError.message.toLowerCase();
|
|
60
|
+
// Find or create error pattern
|
|
61
|
+
let pattern = data.errorPatterns.find(p => errorMessage.includes(p.pattern.toLowerCase()) ||
|
|
62
|
+
p.pattern.toLowerCase().includes(errorMessage));
|
|
63
|
+
if (!pattern) {
|
|
64
|
+
// Extract key words from error
|
|
65
|
+
const words = errorMessage.split(/\s+/).filter(w => w.length > 4);
|
|
66
|
+
const keyPattern = words.slice(0, 3).join(' ');
|
|
67
|
+
pattern = {
|
|
68
|
+
pattern: keyPattern,
|
|
69
|
+
category: error.errorType,
|
|
70
|
+
count: 0,
|
|
71
|
+
lastSeen: new Date().toISOString(),
|
|
72
|
+
solutions: [],
|
|
73
|
+
};
|
|
74
|
+
data.errorPatterns.push(pattern);
|
|
75
|
+
}
|
|
76
|
+
pattern.count++;
|
|
77
|
+
pattern.lastSeen = new Date().toISOString();
|
|
78
|
+
saveLearningData(data);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Record successful operation
|
|
82
|
+
*/
|
|
83
|
+
export function recordSuccess(operation) {
|
|
84
|
+
const data = loadLearningData();
|
|
85
|
+
if (!data.successfulOperations.includes(operation)) {
|
|
86
|
+
data.successfulOperations.push(operation);
|
|
87
|
+
// Keep only last 100
|
|
88
|
+
if (data.successfulOperations.length > 100) {
|
|
89
|
+
data.successfulOperations.shift();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
saveLearningData(data);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get correction strategy for an error
|
|
96
|
+
*/
|
|
97
|
+
export function getCorrectionStrategy(error) {
|
|
98
|
+
const data = loadLearningData();
|
|
99
|
+
const errorMessage = error.originalError.message.toLowerCase();
|
|
100
|
+
// Find matching pattern
|
|
101
|
+
const pattern = data.errorPatterns.find(p => errorMessage.includes(p.pattern.toLowerCase()) ||
|
|
102
|
+
p.pattern.toLowerCase().includes(errorMessage));
|
|
103
|
+
if (pattern && pattern.solutions.length > 0) {
|
|
104
|
+
// Return most recent successful solution
|
|
105
|
+
return pattern.solutions[pattern.solutions.length - 1];
|
|
106
|
+
}
|
|
107
|
+
// Check corrections history
|
|
108
|
+
const similarCorrection = data.corrections
|
|
109
|
+
.filter(c => c.success)
|
|
110
|
+
.find(c => errorMessage.includes(c.error.toLowerCase()) || c.error.toLowerCase().includes(errorMessage));
|
|
111
|
+
if (similarCorrection) {
|
|
112
|
+
return similarCorrection.correction;
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Record a correction attempt
|
|
118
|
+
*/
|
|
119
|
+
export function recordCorrection(error, correction, success) {
|
|
120
|
+
const data = loadLearningData();
|
|
121
|
+
data.corrections.push({
|
|
122
|
+
error,
|
|
123
|
+
correction,
|
|
124
|
+
timestamp: new Date().toISOString(),
|
|
125
|
+
success,
|
|
126
|
+
});
|
|
127
|
+
// Keep only last 50 corrections
|
|
128
|
+
if (data.corrections.length > 50) {
|
|
129
|
+
data.corrections.shift();
|
|
130
|
+
}
|
|
131
|
+
// If successful, add to pattern solutions
|
|
132
|
+
if (success) {
|
|
133
|
+
const errorLower = error.toLowerCase();
|
|
134
|
+
const pattern = data.errorPatterns.find(p => errorLower.includes(p.pattern.toLowerCase()) ||
|
|
135
|
+
p.pattern.toLowerCase().includes(errorLower));
|
|
136
|
+
if (pattern && !pattern.solutions.includes(correction)) {
|
|
137
|
+
pattern.solutions.push(correction);
|
|
138
|
+
// Keep only last 5 solutions per pattern
|
|
139
|
+
if (pattern.solutions.length > 5) {
|
|
140
|
+
pattern.solutions.shift();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
saveLearningData(data);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Update performance metrics
|
|
148
|
+
*/
|
|
149
|
+
export function updatePerformanceMetrics(operation, time, success) {
|
|
150
|
+
const data = loadLearningData();
|
|
151
|
+
let metric = data.performanceMetrics.find(m => m.operation === operation);
|
|
152
|
+
if (!metric) {
|
|
153
|
+
metric = {
|
|
154
|
+
operation,
|
|
155
|
+
avgTime: time,
|
|
156
|
+
successRate: success ? 1.0 : 0.0,
|
|
157
|
+
lastOptimized: new Date().toISOString(),
|
|
158
|
+
};
|
|
159
|
+
data.performanceMetrics.push(metric);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Update running average
|
|
163
|
+
metric.avgTime = (metric.avgTime * 0.9) + (time * 0.1);
|
|
164
|
+
metric.successRate = (metric.successRate * 0.9) + (success ? 1.0 : 0.0);
|
|
165
|
+
metric.lastOptimized = new Date().toISOString();
|
|
166
|
+
}
|
|
167
|
+
saveLearningData(data);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get performance insights
|
|
171
|
+
*/
|
|
172
|
+
export function getPerformanceInsights() {
|
|
173
|
+
const data = loadLearningData();
|
|
174
|
+
const slowOperations = data.performanceMetrics
|
|
175
|
+
.filter(m => m.avgTime > 5000) // > 5 seconds
|
|
176
|
+
.map(m => m.operation);
|
|
177
|
+
const unreliableOperations = data.performanceMetrics
|
|
178
|
+
.filter(m => m.successRate < 0.8) // < 80% success rate
|
|
179
|
+
.map(m => m.operation);
|
|
180
|
+
const recommendations = [];
|
|
181
|
+
if (slowOperations.length > 0) {
|
|
182
|
+
recommendations.push(`Consider optimizing: ${slowOperations.join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
if (unreliableOperations.length > 0) {
|
|
185
|
+
recommendations.push(`Improve reliability: ${unreliableOperations.join(', ')}`);
|
|
186
|
+
}
|
|
187
|
+
const frequentErrors = data.errorPatterns
|
|
188
|
+
.filter(p => p.count > 5)
|
|
189
|
+
.sort((a, b) => b.count - a.count)
|
|
190
|
+
.slice(0, 3);
|
|
191
|
+
if (frequentErrors.length > 0) {
|
|
192
|
+
recommendations.push(`Address frequent errors: ${frequentErrors.map(e => e.pattern).join(', ')}`);
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
slowOperations,
|
|
196
|
+
unreliableOperations,
|
|
197
|
+
recommendations,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Format learning insights for display
|
|
202
|
+
*/
|
|
203
|
+
export function formatLearningInsights() {
|
|
204
|
+
const data = loadLearningData();
|
|
205
|
+
const insights = getPerformanceInsights();
|
|
206
|
+
let output = 'Learning Insights\n';
|
|
207
|
+
output += '────────────────────────────────────────────────────\n\n';
|
|
208
|
+
if (data.errorPatterns.length > 0) {
|
|
209
|
+
output += 'Error Patterns:\n';
|
|
210
|
+
const topErrors = data.errorPatterns
|
|
211
|
+
.sort((a, b) => b.count - a.count)
|
|
212
|
+
.slice(0, 5);
|
|
213
|
+
for (const pattern of topErrors) {
|
|
214
|
+
output += ` • ${pattern.pattern} (${pattern.count} times)\n`;
|
|
215
|
+
if (pattern.solutions.length > 0) {
|
|
216
|
+
output += ` Solutions: ${pattern.solutions.length} known\n`;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
output += '\n';
|
|
220
|
+
}
|
|
221
|
+
if (insights.recommendations.length > 0) {
|
|
222
|
+
output += 'Recommendations:\n';
|
|
223
|
+
for (const rec of insights.recommendations) {
|
|
224
|
+
output += ` • ${rec}\n`;
|
|
225
|
+
}
|
|
226
|
+
output += '\n';
|
|
227
|
+
}
|
|
228
|
+
if (data.successfulOperations.length > 0) {
|
|
229
|
+
output += `Successful Operations: ${data.successfulOperations.length}\n`;
|
|
230
|
+
}
|
|
231
|
+
return output;
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=learning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning.js","sourceRoot":"","sources":["../src/learning.ts"],"names":[],"mappings":"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"}
|
package/dist/log.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,WAAW,IAAI,IAAI,CASlC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAG9C"}
|
package/dist/log.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { writeFileSync, appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
// Log file path: use agent/data if in agent directory, otherwise use current directory
|
|
5
|
+
function getLogPath() {
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
const agentDir = join(__dirname, '..');
|
|
9
|
+
// Check if we're in the agent directory structure
|
|
10
|
+
if (existsSync(join(agentDir, 'package.json'))) {
|
|
11
|
+
return join(agentDir, 'data', 'logs.jsonl');
|
|
12
|
+
}
|
|
13
|
+
// Otherwise use current directory
|
|
14
|
+
return join(process.cwd(), 'agent', 'data', 'logs.jsonl');
|
|
15
|
+
}
|
|
16
|
+
const LOG_FILE = getLogPath();
|
|
17
|
+
export function initLogFile() {
|
|
18
|
+
const logDir = join(process.cwd(), 'agent', 'data');
|
|
19
|
+
if (!existsSync(logDir)) {
|
|
20
|
+
mkdirSync(logDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
// Create empty log file if it doesn't exist
|
|
23
|
+
if (!existsSync(LOG_FILE)) {
|
|
24
|
+
writeFileSync(LOG_FILE, '');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function logEntry(entry) {
|
|
28
|
+
const jsonLine = JSON.stringify(entry) + '\n';
|
|
29
|
+
appendFileSync(LOG_FILE, jsonLine, 'utf-8');
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=log.js.map
|
package/dist/log.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,uFAAuF;AACvF,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,kDAAkD;IAClD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,kCAAkC;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;AAE9B,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,4CAA4C;IAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAe;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Assistant
|
|
3
|
+
* Help with framework upgrades and API migrations
|
|
4
|
+
*/
|
|
5
|
+
export interface MigrationPlan {
|
|
6
|
+
from: string;
|
|
7
|
+
to: string;
|
|
8
|
+
files: string[];
|
|
9
|
+
steps: Array<{
|
|
10
|
+
step: number;
|
|
11
|
+
description: string;
|
|
12
|
+
files: string[];
|
|
13
|
+
risk: 'low' | 'medium' | 'high';
|
|
14
|
+
}>;
|
|
15
|
+
estimatedTime: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Plan a framework migration
|
|
19
|
+
*/
|
|
20
|
+
export declare function planMigration(from: string, to: string, files?: string[]): Promise<MigrationPlan>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate migration code for a file
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateMigration(filepath: string, from: string, to: string): Promise<{
|
|
25
|
+
original: string;
|
|
26
|
+
migrated: string;
|
|
27
|
+
changes: string[];
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Format migration plan for display
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatMigrationPlan(plan: MigrationPlan): string;
|
|
33
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;KACjC,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,aAAa,CAAC,CA+DxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAuDD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAoB/D"}
|
package/dist/migrate.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Assistant
|
|
3
|
+
* Help with framework upgrades and API migrations
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, existsSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { chatWithContext } from './chat.js';
|
|
8
|
+
import { getEnhancedContext } from './context.js';
|
|
9
|
+
/**
|
|
10
|
+
* Plan a framework migration
|
|
11
|
+
*/
|
|
12
|
+
export async function planMigration(from, to, files) {
|
|
13
|
+
// Get context about the codebase
|
|
14
|
+
const context = await getEnhancedContext(`Migrate from ${from} to ${to}`, {
|
|
15
|
+
primaryChunks: 20,
|
|
16
|
+
includeRelationships: true,
|
|
17
|
+
});
|
|
18
|
+
// Identify files that need migration
|
|
19
|
+
const filesToMigrate = files || context.primaryChunks.map(c => c.filepath);
|
|
20
|
+
// Create migration steps
|
|
21
|
+
const steps = [
|
|
22
|
+
{
|
|
23
|
+
step: 1,
|
|
24
|
+
description: `Update dependencies from ${from} to ${to}`,
|
|
25
|
+
files: ['package.json', 'requirements.txt', 'pom.xml'].filter(f => filesToMigrate.some(ft => ft.includes(f))),
|
|
26
|
+
risk: 'low',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
step: 2,
|
|
30
|
+
description: `Update import statements from ${from} to ${to}`,
|
|
31
|
+
files: filesToMigrate.filter(f => f.endsWith('.ts') || f.endsWith('.js') || f.endsWith('.py')),
|
|
32
|
+
risk: 'medium',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
step: 3,
|
|
36
|
+
description: `Update API calls and method signatures`,
|
|
37
|
+
files: filesToMigrate,
|
|
38
|
+
risk: 'high',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
step: 4,
|
|
42
|
+
description: `Update configuration files`,
|
|
43
|
+
files: filesToMigrate.filter(f => f.includes('config') || f.includes('settings') || f.includes('.env')),
|
|
44
|
+
risk: 'medium',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
step: 5,
|
|
48
|
+
description: `Run tests and fix breaking changes`,
|
|
49
|
+
files: [],
|
|
50
|
+
risk: 'high',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
// Estimate time based on file count
|
|
54
|
+
const fileCount = filesToMigrate.length;
|
|
55
|
+
const estimatedHours = Math.ceil(fileCount / 10) * 2; // 2 hours per 10 files
|
|
56
|
+
const estimatedTime = `${estimatedHours} hour(s)`;
|
|
57
|
+
return {
|
|
58
|
+
from,
|
|
59
|
+
to,
|
|
60
|
+
files: filesToMigrate,
|
|
61
|
+
steps,
|
|
62
|
+
estimatedTime,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate migration code for a file
|
|
67
|
+
*/
|
|
68
|
+
export async function generateMigration(filepath, from, to) {
|
|
69
|
+
const fullPath = join(process.cwd(), filepath);
|
|
70
|
+
if (!existsSync(fullPath)) {
|
|
71
|
+
throw new Error(`File not found: ${filepath}`);
|
|
72
|
+
}
|
|
73
|
+
const original = readFileSync(fullPath, 'utf-8');
|
|
74
|
+
// Get context
|
|
75
|
+
const context = await getEnhancedContext(`Migrate ${filepath} from ${from} to ${to}`, {
|
|
76
|
+
primaryChunks: 15,
|
|
77
|
+
includeRelationships: true,
|
|
78
|
+
});
|
|
79
|
+
// Create migration prompt
|
|
80
|
+
const migrationPrompt = `Migrate this code from ${from} to ${from}:
|
|
81
|
+
|
|
82
|
+
File: ${filepath}
|
|
83
|
+
Original code:
|
|
84
|
+
\`\`\`
|
|
85
|
+
${original}
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
Provide the migrated code with ${to} syntax and explain the key changes.`;
|
|
89
|
+
const contextResults = [{
|
|
90
|
+
filepath,
|
|
91
|
+
content: original,
|
|
92
|
+
score: 1.0,
|
|
93
|
+
}, ...context.primaryChunks];
|
|
94
|
+
const migratedResponse = await chatWithContext(migrationPrompt, contextResults);
|
|
95
|
+
// Extract code from response
|
|
96
|
+
const codeMatch = migratedResponse.match(/```[\s\S]*?```/);
|
|
97
|
+
const migrated = codeMatch
|
|
98
|
+
? codeMatch[0].replace(/```\w*\n?/g, '').replace(/```/g, '').trim()
|
|
99
|
+
: migratedResponse;
|
|
100
|
+
// Extract changes
|
|
101
|
+
const changes = [];
|
|
102
|
+
const changeMatches = migratedResponse.match(/(?:change|update|replace)[^\.]+\./gi);
|
|
103
|
+
if (changeMatches) {
|
|
104
|
+
changes.push(...changeMatches.slice(0, 5));
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
original,
|
|
108
|
+
migrated,
|
|
109
|
+
changes,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format migration plan for display
|
|
114
|
+
*/
|
|
115
|
+
export function formatMigrationPlan(plan) {
|
|
116
|
+
let output = `Migration Plan: ${plan.from} → ${plan.to}\n`;
|
|
117
|
+
output += `Files to migrate: ${plan.files.length}\n`;
|
|
118
|
+
output += `Estimated time: ${plan.estimatedTime}\n\n`;
|
|
119
|
+
output += 'Steps:\n';
|
|
120
|
+
for (const step of plan.steps) {
|
|
121
|
+
const riskIcon = {
|
|
122
|
+
low: '✓',
|
|
123
|
+
medium: '⚠',
|
|
124
|
+
high: '✗',
|
|
125
|
+
}[step.risk];
|
|
126
|
+
output += ` ${riskIcon} Step ${step.step}: ${step.description}\n`;
|
|
127
|
+
if (step.files.length > 0) {
|
|
128
|
+
output += ` Files: ${step.files.length}\n`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return output;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enterprise Monitoring & Health Check System
|
|
3
|
+
* Ensures 24/7 operation visibility
|
|
4
|
+
*/
|
|
5
|
+
export interface HealthStatus {
|
|
6
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
7
|
+
timestamp: string;
|
|
8
|
+
checks: {
|
|
9
|
+
database: {
|
|
10
|
+
status: 'ok' | 'error';
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
api: {
|
|
14
|
+
status: 'ok' | 'error' | 'circuit_open';
|
|
15
|
+
message: string;
|
|
16
|
+
};
|
|
17
|
+
filesystem: {
|
|
18
|
+
status: 'ok' | 'error';
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
memory: {
|
|
22
|
+
status: 'ok' | 'warning';
|
|
23
|
+
message: string;
|
|
24
|
+
usage?: number;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface Metrics {
|
|
29
|
+
operations: {
|
|
30
|
+
total: number;
|
|
31
|
+
successful: number;
|
|
32
|
+
failed: number;
|
|
33
|
+
retries: number;
|
|
34
|
+
};
|
|
35
|
+
performance: {
|
|
36
|
+
avgResponseTime: number;
|
|
37
|
+
avgRetryTime: number;
|
|
38
|
+
apiCalls: number;
|
|
39
|
+
cacheHits: number;
|
|
40
|
+
};
|
|
41
|
+
errors: {
|
|
42
|
+
byType: Record<string, number>;
|
|
43
|
+
recent: Array<{
|
|
44
|
+
timestamp: string;
|
|
45
|
+
type: string;
|
|
46
|
+
message: string;
|
|
47
|
+
}>;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
declare class MetricsCollector {
|
|
51
|
+
private operations;
|
|
52
|
+
private performance;
|
|
53
|
+
private errors;
|
|
54
|
+
recordOperation(success: boolean, responseTime?: number, retries?: number): void;
|
|
55
|
+
recordApiCall(): void;
|
|
56
|
+
recordCacheHit(): void;
|
|
57
|
+
recordError(type: string, message: string): void;
|
|
58
|
+
getMetrics(): Metrics;
|
|
59
|
+
reset(): void;
|
|
60
|
+
}
|
|
61
|
+
export declare const metricsCollector: MetricsCollector;
|
|
62
|
+
/**
|
|
63
|
+
* Perform health check
|
|
64
|
+
*/
|
|
65
|
+
export declare function performHealthCheck(): HealthStatus;
|
|
66
|
+
/**
|
|
67
|
+
* Get current metrics
|
|
68
|
+
*/
|
|
69
|
+
export declare function getMetrics(): Metrics;
|
|
70
|
+
/**
|
|
71
|
+
* Format health status for display
|
|
72
|
+
*/
|
|
73
|
+
export declare function formatHealthStatus(health: HealthStatus): string;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=monitoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.d.ts","sourceRoot":"","sources":["../src/monitoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,QAAQ,EAAE;YAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,GAAG,EAAE;YAAE,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,cAAc,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAClE,UAAU,EAAE;YAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QACxD,MAAM,EAAE;YAAE,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACvE,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrE,CAAC;CACH;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,WAAW,CAKjB;IAEF,OAAO,CAAC,MAAM,CAGZ;IAEF,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAmBhF,aAAa,IAAI,IAAI;IAIrB,cAAc,IAAI,IAAI;IAItB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAahD,UAAU,IAAI,OAAO;IAwBrB,KAAK,IAAI,IAAI;CAKd;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAkHvD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CA2BjD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAsB/D"}
|