cortex-mcp 2.8.0 → 3.0.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/CHANGELOG.md +305 -58
- package/README.md +394 -227
- package/dist/cli/setup.js +58 -60
- package/dist/cli/setup.js.map +1 -1
- package/dist/config/config.js +2 -2
- package/dist/config/config.js.map +1 -1
- package/dist/db/database.d.ts +8 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +35 -54
- package/dist/db/database.js.map +1 -1
- package/dist/db/event-log.d.ts +4 -0
- package/dist/db/event-log.d.ts.map +1 -1
- package/dist/db/event-log.js +14 -10
- package/dist/db/event-log.js.map +1 -1
- package/dist/db/memory-store.d.ts +30 -3
- package/dist/db/memory-store.d.ts.map +1 -1
- package/dist/db/memory-store.js +153 -55
- package/dist/db/memory-store.js.map +1 -1
- package/dist/embedding-worker.js +1 -1
- package/dist/embedding-worker.js.map +1 -1
- package/dist/hooks/git-capture.js +3 -3
- package/dist/hooks/git-hooks.js +5 -2
- package/dist/mcp-stdio.js +70 -15
- package/dist/mcp-stdio.js.map +1 -1
- package/dist/memory/access-pattern-tracker.d.ts +51 -0
- package/dist/memory/access-pattern-tracker.d.ts.map +1 -0
- package/dist/memory/access-pattern-tracker.js +92 -0
- package/dist/memory/access-pattern-tracker.js.map +1 -0
- package/dist/memory/anticipation-engine.d.ts.map +1 -1
- package/dist/memory/anticipation-engine.js +18 -10
- package/dist/memory/anticipation-engine.js.map +1 -1
- package/dist/memory/auto-learner.d.ts.map +1 -1
- package/dist/memory/auto-learner.js +192 -45
- package/dist/memory/auto-learner.js.map +1 -1
- package/dist/memory/completion-resolver.d.ts +38 -0
- package/dist/memory/completion-resolver.d.ts.map +1 -0
- package/dist/memory/completion-resolver.js +127 -0
- package/dist/memory/completion-resolver.js.map +1 -0
- package/dist/memory/confidence-decay.d.ts.map +1 -1
- package/dist/memory/confidence-decay.js +13 -9
- package/dist/memory/confidence-decay.js.map +1 -1
- package/dist/memory/convention-detector.d.ts +11 -0
- package/dist/memory/convention-detector.d.ts.map +1 -0
- package/dist/memory/convention-detector.js +294 -0
- package/dist/memory/convention-detector.js.map +1 -0
- package/dist/memory/correction-detector.d.ts +33 -0
- package/dist/memory/correction-detector.d.ts.map +1 -0
- package/dist/memory/correction-detector.js +129 -0
- package/dist/memory/correction-detector.js.map +1 -0
- package/dist/memory/cross-memory-linker.d.ts +18 -0
- package/dist/memory/cross-memory-linker.d.ts.map +1 -0
- package/dist/memory/cross-memory-linker.js +115 -0
- package/dist/memory/cross-memory-linker.js.map +1 -0
- package/dist/memory/daily-diary.d.ts +30 -0
- package/dist/memory/daily-diary.d.ts.map +1 -0
- package/dist/memory/daily-diary.js +159 -0
- package/dist/memory/daily-diary.js.map +1 -0
- package/dist/memory/embedding-cache.d.ts +32 -0
- package/dist/memory/embedding-cache.d.ts.map +1 -0
- package/dist/memory/embedding-cache.js +76 -0
- package/dist/memory/embedding-cache.js.map +1 -0
- package/dist/memory/embedding-manager.d.ts.map +1 -1
- package/dist/memory/embedding-manager.js +6 -4
- package/dist/memory/embedding-manager.js.map +1 -1
- package/dist/memory/error-learner.d.ts +26 -0
- package/dist/memory/error-learner.d.ts.map +1 -0
- package/dist/memory/error-learner.js +145 -0
- package/dist/memory/error-learner.js.map +1 -0
- package/dist/memory/export-import.js +2 -2
- package/dist/memory/export-import.js.map +1 -1
- package/dist/memory/file-relationships.d.ts +47 -0
- package/dist/memory/file-relationships.d.ts.map +1 -0
- package/dist/memory/file-relationships.js +130 -0
- package/dist/memory/file-relationships.js.map +1 -0
- package/dist/memory/git-memory.d.ts.map +1 -1
- package/dist/memory/git-memory.js +20 -26
- package/dist/memory/git-memory.js.map +1 -1
- package/dist/memory/impact-analyzer.d.ts +16 -0
- package/dist/memory/impact-analyzer.d.ts.map +1 -0
- package/dist/memory/impact-analyzer.js +189 -0
- package/dist/memory/impact-analyzer.js.map +1 -0
- package/dist/memory/instructions-generator.d.ts +30 -0
- package/dist/memory/instructions-generator.d.ts.map +1 -0
- package/dist/memory/instructions-generator.js +117 -0
- package/dist/memory/instructions-generator.js.map +1 -0
- package/dist/memory/learning-rate.js +8 -7
- package/dist/memory/learning-rate.js.map +1 -1
- package/dist/memory/llm-enhancer.d.ts +2 -14
- package/dist/memory/llm-enhancer.d.ts.map +1 -1
- package/dist/memory/llm-enhancer.js +66 -46
- package/dist/memory/llm-enhancer.js.map +1 -1
- package/dist/memory/memory-cache.d.ts.map +1 -1
- package/dist/memory/memory-cache.js +10 -0
- package/dist/memory/memory-cache.js.map +1 -1
- package/dist/memory/memory-consolidator.d.ts.map +1 -1
- package/dist/memory/memory-consolidator.js +20 -14
- package/dist/memory/memory-consolidator.js.map +1 -1
- package/dist/memory/memory-decay.d.ts.map +1 -1
- package/dist/memory/memory-decay.js +82 -52
- package/dist/memory/memory-decay.js.map +1 -1
- package/dist/memory/memory-export-md.d.ts +12 -0
- package/dist/memory/memory-export-md.d.ts.map +1 -0
- package/dist/memory/memory-export-md.js +188 -0
- package/dist/memory/memory-export-md.js.map +1 -0
- package/dist/memory/memory-quality.d.ts +1 -1
- package/dist/memory/memory-quality.d.ts.map +1 -1
- package/dist/memory/memory-quality.js +13 -27
- package/dist/memory/memory-quality.js.map +1 -1
- package/dist/memory/memory-ranker.d.ts.map +1 -1
- package/dist/memory/memory-ranker.js +12 -3
- package/dist/memory/memory-ranker.js.map +1 -1
- package/dist/memory/meta-memory.js +3 -3
- package/dist/memory/meta-memory.js.map +1 -1
- package/dist/memory/mmr-reranker.d.ts +39 -0
- package/dist/memory/mmr-reranker.d.ts.map +1 -0
- package/dist/memory/mmr-reranker.js +115 -0
- package/dist/memory/mmr-reranker.js.map +1 -0
- package/dist/memory/pre-flight.d.ts +24 -0
- package/dist/memory/pre-flight.d.ts.map +1 -0
- package/dist/memory/pre-flight.js +121 -0
- package/dist/memory/pre-flight.js.map +1 -0
- package/dist/memory/preference-learner.d.ts +28 -0
- package/dist/memory/preference-learner.d.ts.map +1 -0
- package/dist/memory/preference-learner.js +144 -0
- package/dist/memory/preference-learner.js.map +1 -0
- package/dist/memory/query-expansion.d.ts +28 -0
- package/dist/memory/query-expansion.d.ts.map +1 -0
- package/dist/memory/query-expansion.js +140 -0
- package/dist/memory/query-expansion.js.map +1 -0
- package/dist/memory/regression-guard.d.ts +35 -0
- package/dist/memory/regression-guard.d.ts.map +1 -0
- package/dist/memory/regression-guard.js +90 -0
- package/dist/memory/regression-guard.js.map +1 -0
- package/dist/memory/resume-work.d.ts +37 -0
- package/dist/memory/resume-work.d.ts.map +1 -0
- package/dist/memory/resume-work.js +141 -0
- package/dist/memory/resume-work.js.map +1 -0
- package/dist/memory/session-tracker.d.ts +2 -0
- package/dist/memory/session-tracker.d.ts.map +1 -1
- package/dist/memory/session-tracker.js +26 -8
- package/dist/memory/session-tracker.js.map +1 -1
- package/dist/memory/soul-manager.d.ts +30 -0
- package/dist/memory/soul-manager.d.ts.map +1 -0
- package/dist/memory/soul-manager.js +171 -0
- package/dist/memory/soul-manager.js.map +1 -0
- package/dist/memory/success-tracker.d.ts +33 -0
- package/dist/memory/success-tracker.d.ts.map +1 -0
- package/dist/memory/success-tracker.js +75 -0
- package/dist/memory/success-tracker.js.map +1 -0
- package/dist/memory/temporal-engine.d.ts.map +1 -1
- package/dist/memory/temporal-engine.js +9 -13
- package/dist/memory/temporal-engine.js.map +1 -1
- package/dist/memory/tool-recommender.d.ts +29 -0
- package/dist/memory/tool-recommender.d.ts.map +1 -0
- package/dist/memory/tool-recommender.js +117 -0
- package/dist/memory/tool-recommender.js.map +1 -0
- package/dist/memory/usage-stats.d.ts +98 -0
- package/dist/memory/usage-stats.d.ts.map +1 -0
- package/dist/memory/usage-stats.js +345 -0
- package/dist/memory/usage-stats.js.map +1 -0
- package/dist/retrieval/hybrid-retriever.d.ts +0 -2
- package/dist/retrieval/hybrid-retriever.d.ts.map +1 -1
- package/dist/retrieval/hybrid-retriever.js +3 -13
- package/dist/retrieval/hybrid-retriever.js.map +1 -1
- package/dist/scanners/architecture-graph.js +2 -2
- package/dist/scanners/architecture-graph.js.map +1 -1
- package/dist/scanners/code-verifier.d.ts +1 -0
- package/dist/scanners/code-verifier.d.ts.map +1 -1
- package/dist/scanners/code-verifier.js +14 -14
- package/dist/scanners/code-verifier.js.map +1 -1
- package/dist/scanners/context-builder.d.ts.map +1 -1
- package/dist/scanners/context-builder.js +33 -45
- package/dist/scanners/context-builder.js.map +1 -1
- package/dist/scanners/export-map.js +2 -2
- package/dist/scanners/export-map.js.map +1 -1
- package/dist/scanners/project-scanner.js +2 -2
- package/dist/scanners/project-scanner.js.map +1 -1
- package/dist/security/encryption.js +1 -1
- package/dist/security/encryption.js.map +1 -1
- package/dist/security/feature-gate.d.ts.map +1 -1
- package/dist/security/feature-gate.js +62 -20
- package/dist/security/feature-gate.js.map +1 -1
- package/dist/security/license.js +282 -35
- package/dist/security/license.js.map +1 -1
- package/dist/security/rate-limiter.d.ts +4 -3
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +11 -29
- package/dist/security/rate-limiter.js.map +1 -1
- package/dist/server/dashboard.js +166 -327
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/mcp-handler.d.ts.map +1 -1
- package/dist/server/mcp-handler.js +991 -1019
- package/dist/server/mcp-handler.js.map +1 -1
- package/dist/utils/extract-tags.d.ts +16 -0
- package/dist/utils/extract-tags.d.ts.map +1 -0
- package/dist/utils/extract-tags.js +40 -0
- package/dist/utils/extract-tags.js.map +1 -0
- package/package.json +18 -8
- package/dist/core/event-bus.d.ts +0 -19
- package/dist/core/event-bus.d.ts.map +0 -1
- package/dist/core/event-bus.js +0 -51
- package/dist/core/event-bus.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,
|
|
1
|
+
{"version":3,"file":"embedding-manager.js","sourceRoot":"","sources":["../../src/memory/embedding-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Learner — Auto-captures build/test error patterns.
|
|
3
|
+
*
|
|
4
|
+
* When build output or test output contains errors, this module:
|
|
5
|
+
* 1. Extracts the error pattern (TS error codes, common messages)
|
|
6
|
+
* 2. Maps to a human-readable lesson ("TS2345: argument type mismatch")
|
|
7
|
+
* 3. Stores as BUG_FIX memory so the AI avoids repeating the same mistake
|
|
8
|
+
*
|
|
9
|
+
* This is the #1 gap: the AI keeps making the same TS compile errors
|
|
10
|
+
* because it forgets what went wrong last time.
|
|
11
|
+
*/
|
|
12
|
+
export interface ErrorPattern {
|
|
13
|
+
errorType: string;
|
|
14
|
+
message: string;
|
|
15
|
+
file?: string;
|
|
16
|
+
confidence: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract error patterns from build/test output text.
|
|
20
|
+
*/
|
|
21
|
+
export declare function extractErrorPatterns(text: string): ErrorPattern[];
|
|
22
|
+
/**
|
|
23
|
+
* Check if text contains build/test error indicators.
|
|
24
|
+
*/
|
|
25
|
+
export declare function containsErrors(text: string): boolean;
|
|
26
|
+
//# sourceMappingURL=error-learner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-learner.d.ts","sourceRoot":"","sources":["../../src/memory/error-learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,YAAY;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACtB;AAyBD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAwFjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcpD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error Learner — Auto-captures build/test error patterns.
|
|
4
|
+
*
|
|
5
|
+
* When build output or test output contains errors, this module:
|
|
6
|
+
* 1. Extracts the error pattern (TS error codes, common messages)
|
|
7
|
+
* 2. Maps to a human-readable lesson ("TS2345: argument type mismatch")
|
|
8
|
+
* 3. Stores as BUG_FIX memory so the AI avoids repeating the same mistake
|
|
9
|
+
*
|
|
10
|
+
* This is the #1 gap: the AI keeps making the same TS compile errors
|
|
11
|
+
* because it forgets what went wrong last time.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.extractErrorPatterns = extractErrorPatterns;
|
|
15
|
+
exports.containsErrors = containsErrors;
|
|
16
|
+
// ─── TypeScript Error Patterns ────────────────────────────────────────────────
|
|
17
|
+
const TS_ERROR_LESSONS = {
|
|
18
|
+
'TS2345': 'Argument type mismatch — check function parameter types match expected signatures',
|
|
19
|
+
'TS2322': 'Type assignment error — ensure the value matches the declared type',
|
|
20
|
+
'TS2339': 'Property does not exist — check spelling or add the property to the interface',
|
|
21
|
+
'TS2304': 'Cannot find name — missing import or undeclared variable',
|
|
22
|
+
'TS2305': 'Module has no exported member — check the export name matches exactly',
|
|
23
|
+
'TS2307': 'Cannot find module — check the import path is correct',
|
|
24
|
+
'TS2554': 'Wrong number of arguments — check function signature for required params',
|
|
25
|
+
'TS2769': 'No overload matches this call — check argument types against all overload signatures',
|
|
26
|
+
'TS7006': 'Parameter implicitly has any type — add explicit type annotation',
|
|
27
|
+
'TS2741': 'Missing property in type — add required properties to the object',
|
|
28
|
+
'TS18046': 'Variable is of type unknown — add type assertion or type guard',
|
|
29
|
+
'TS2352': 'Conversion of type may be a mistake — use "as unknown as T" for forced cast',
|
|
30
|
+
'TS1005': 'Expected token — syntax error, check for missing brackets/semicolons',
|
|
31
|
+
'TS2531': 'Object is possibly null — add null check or use optional chaining',
|
|
32
|
+
'TS2532': 'Object is possibly undefined — add undefined check or use optional chaining',
|
|
33
|
+
'TS2349': 'Not callable — value is not a function, check the type',
|
|
34
|
+
'TS2551': 'Property does not exist, did you mean? — typo in property name',
|
|
35
|
+
'TS6133': 'Declared but never used — remove unused variable or prefix with _',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Extract error patterns from build/test output text.
|
|
39
|
+
*/
|
|
40
|
+
function extractErrorPatterns(text) {
|
|
41
|
+
const errors = [];
|
|
42
|
+
const seen = new Set();
|
|
43
|
+
// 1. TypeScript errors: TS2345, TS2322, etc.
|
|
44
|
+
const tsErrorRegex = /(?:error\s+)?(TS\d{4,5})\s*:\s*(.+?)(?:\r?\n|$)/gi;
|
|
45
|
+
let match;
|
|
46
|
+
while ((match = tsErrorRegex.exec(text)) !== null) {
|
|
47
|
+
const code = match[1].toUpperCase();
|
|
48
|
+
const msg = match[2].trim().slice(0, 150);
|
|
49
|
+
if (seen.has(code))
|
|
50
|
+
continue;
|
|
51
|
+
seen.add(code);
|
|
52
|
+
const lesson = TS_ERROR_LESSONS[code] || `${code}: ${msg}`;
|
|
53
|
+
errors.push({
|
|
54
|
+
errorType: code,
|
|
55
|
+
message: lesson,
|
|
56
|
+
confidence: 0.90,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// 2. TypeScript "not assignable" pattern (without error code)
|
|
60
|
+
if (!seen.has('TYPE_MISMATCH')) {
|
|
61
|
+
const assignRegex = /Type '([^']+)' is not assignable to type '([^']+)'/gi;
|
|
62
|
+
while ((match = assignRegex.exec(text)) !== null) {
|
|
63
|
+
if (seen.has('TYPE_MISMATCH'))
|
|
64
|
+
break;
|
|
65
|
+
seen.add('TYPE_MISMATCH');
|
|
66
|
+
errors.push({
|
|
67
|
+
errorType: 'TYPE_MISMATCH',
|
|
68
|
+
message: `Type mismatch: '${match[1].slice(0, 40)}' cannot be assigned to '${match[2].slice(0, 40)}' — check type compatibility`,
|
|
69
|
+
confidence: 0.85,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 3. Module not found
|
|
74
|
+
const moduleRegex = /(?:Cannot find module|Module not found)[:\s]+['"]([^'"]+)['"]/gi;
|
|
75
|
+
while ((match = moduleRegex.exec(text)) !== null) {
|
|
76
|
+
const mod = match[1];
|
|
77
|
+
if (seen.has(`MOD:${mod}`))
|
|
78
|
+
continue;
|
|
79
|
+
seen.add(`MOD:${mod}`);
|
|
80
|
+
errors.push({
|
|
81
|
+
errorType: 'MODULE_NOT_FOUND',
|
|
82
|
+
message: `Module '${mod}' not found — verify it's installed in package.json and the import path is correct`,
|
|
83
|
+
confidence: 0.90,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// 4. Property does not exist on type
|
|
87
|
+
const propRegex = /Property '(\w+)' does not exist on type '([^']+)'/gi;
|
|
88
|
+
while ((match = propRegex.exec(text)) !== null) {
|
|
89
|
+
const key = `PROP:${match[1]}`;
|
|
90
|
+
if (seen.has(key))
|
|
91
|
+
continue;
|
|
92
|
+
seen.add(key);
|
|
93
|
+
errors.push({
|
|
94
|
+
errorType: 'MISSING_PROPERTY',
|
|
95
|
+
message: `Property '${match[1]}' not on type '${match[2].slice(0, 40)}' — check interface definition or use type assertion`,
|
|
96
|
+
confidence: 0.85,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// 5. Test failures
|
|
100
|
+
const testFailRegex = /(?:FAIL|FAILED|Error)[\s:]+(.+?test.+?)(?:\r?\n|$)/gi;
|
|
101
|
+
while ((match = testFailRegex.exec(text)) !== null) {
|
|
102
|
+
const key = `TEST:${match[1].slice(0, 30)}`;
|
|
103
|
+
if (seen.has(key))
|
|
104
|
+
continue;
|
|
105
|
+
seen.add(key);
|
|
106
|
+
errors.push({
|
|
107
|
+
errorType: 'TEST_FAILURE',
|
|
108
|
+
message: `Test failed: ${match[1].trim().slice(0, 100)}`,
|
|
109
|
+
file: match[1].trim(),
|
|
110
|
+
confidence: 0.75,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// 6. Function signature mismatch
|
|
114
|
+
const sigRegex = /Expected (\d+) arguments?, but got (\d+)/gi;
|
|
115
|
+
while ((match = sigRegex.exec(text)) !== null) {
|
|
116
|
+
if (seen.has('SIG_MISMATCH'))
|
|
117
|
+
continue;
|
|
118
|
+
seen.add('SIG_MISMATCH');
|
|
119
|
+
errors.push({
|
|
120
|
+
errorType: 'SIGNATURE_MISMATCH',
|
|
121
|
+
message: `Wrong argument count: expected ${match[1]} but got ${match[2]} — check the function signature`,
|
|
122
|
+
confidence: 0.90,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return errors;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if text contains build/test error indicators.
|
|
129
|
+
*/
|
|
130
|
+
function containsErrors(text) {
|
|
131
|
+
const errorIndicators = [
|
|
132
|
+
/error TS\d{4}/i,
|
|
133
|
+
/\bFAIL\b.*test/i,
|
|
134
|
+
/Build failed/i,
|
|
135
|
+
/compilation error/i,
|
|
136
|
+
/Cannot find module/i,
|
|
137
|
+
/SyntaxError:/i,
|
|
138
|
+
/TypeError:/i,
|
|
139
|
+
/ReferenceError:/i,
|
|
140
|
+
/npm ERR!/,
|
|
141
|
+
/Exit code: [1-9]/,
|
|
142
|
+
];
|
|
143
|
+
return errorIndicators.some(r => r.test(text));
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=error-learner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-learner.js","sourceRoot":"","sources":["../../src/memory/error-learner.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,8 +87,8 @@ function importMemories(memoryStore, bundle) {
|
|
|
87
87
|
let imported = 0;
|
|
88
88
|
let skipped = 0;
|
|
89
89
|
let errors = 0;
|
|
90
|
-
// Load active memories
|
|
91
|
-
const active = memoryStore.getActive(
|
|
90
|
+
// Load active memories for dedup — cap at 1000 (covers most practical cases)
|
|
91
|
+
const active = memoryStore.getActive(1000);
|
|
92
92
|
const existingKeys = new Set(active.map(e => `${e.type}::${e.intent.toLowerCase().trim()}`));
|
|
93
93
|
for (const m of bundle.memories) {
|
|
94
94
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,wCAwBC;AAKD,oCAKC;AAKD,wCAwCC;AAKD,wCAaC;AArID;;;;;GAKG;AACH,uCAAyB;AACzB,2CAA6B;AA0B7B;;GAEG;AACH,SAAgB,cAAc,CAAC,WAAwB;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;QACxB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;QAClB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;QAClC,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;KACjD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACH,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,WAAW,EAAE,QAAQ,CAAC,MAAM;QAC5B,QAAQ;KACX,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,WAAwB,EAAE,QAAgB;IACnE,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC1B,WAAwB,EACxB,MAAoB;IAEpB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,
|
|
1
|
+
{"version":3,"file":"export-import.js","sourceRoot":"","sources":["../../src/memory/export-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Relationship Mapper — Tracks which files are always edited together.
|
|
3
|
+
*
|
|
4
|
+
* When the AI edits file A and file B in the same session, this module:
|
|
5
|
+
* 1. Records the co-edit event
|
|
6
|
+
* 2. Over time, builds a map of "these files always change together"
|
|
7
|
+
* 3. Surfaces warnings when only one of a pair is being edited
|
|
8
|
+
*
|
|
9
|
+
* This prevents partial changes — the #1 cause of cascading failures.
|
|
10
|
+
* "You changed types.ts but didn't update mcp-handler.ts (edited together 5 times)"
|
|
11
|
+
*/
|
|
12
|
+
import { MemoryStore } from '../db/memory-store';
|
|
13
|
+
export interface FileRelationship {
|
|
14
|
+
fileA: string;
|
|
15
|
+
fileB: string;
|
|
16
|
+
coEditCount: number;
|
|
17
|
+
lastCoEdit: number;
|
|
18
|
+
reason?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Record that a file was edited in this session.
|
|
22
|
+
* Automatically tracks co-edit relationships.
|
|
23
|
+
*/
|
|
24
|
+
export declare function recordFileEdit(filePath: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Get files that are frequently co-edited with the given file.
|
|
27
|
+
* Returns files that should also be checked/edited.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getRelatedFiles(filePath: string, memoryStore: MemoryStore): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Get all co-edit relationships from this session (for end-of-session storage).
|
|
32
|
+
*/
|
|
33
|
+
export declare function getSessionRelationships(): FileRelationship[];
|
|
34
|
+
/**
|
|
35
|
+
* Check if any related files are missing from the current edit set.
|
|
36
|
+
* Returns warnings about files that should probably also be edited.
|
|
37
|
+
*/
|
|
38
|
+
export declare function checkMissingRelated(currentFile: string, memoryStore: MemoryStore): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Store accumulated co-edit relationships as persistent memories.
|
|
41
|
+
*/
|
|
42
|
+
export declare function storeRelationships(memoryStore: MemoryStore): number;
|
|
43
|
+
/**
|
|
44
|
+
* Reset session tracking (call at session end).
|
|
45
|
+
*/
|
|
46
|
+
export declare function resetFileTracking(): void;
|
|
47
|
+
//# sourceMappingURL=file-relationships.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-relationships.d.ts","sourceRoot":"","sources":["../../src/memory/file-relationships.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAYrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,CA4BpF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,gBAAgB,EAAE,CAe5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,CAW3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAyBnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordFileEdit = recordFileEdit;
|
|
4
|
+
exports.getRelatedFiles = getRelatedFiles;
|
|
5
|
+
exports.getSessionRelationships = getSessionRelationships;
|
|
6
|
+
exports.checkMissingRelated = checkMissingRelated;
|
|
7
|
+
exports.storeRelationships = storeRelationships;
|
|
8
|
+
exports.resetFileTracking = resetFileTracking;
|
|
9
|
+
// In-memory co-edit tracking (per session)
|
|
10
|
+
const sessionEdits = new Set();
|
|
11
|
+
const coEditMap = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Record that a file was edited in this session.
|
|
14
|
+
* Automatically tracks co-edit relationships.
|
|
15
|
+
*/
|
|
16
|
+
function recordFileEdit(filePath) {
|
|
17
|
+
// Normalize to basename for cross-path matching
|
|
18
|
+
const basename = filePath.replace(/\\/g, '/').split('/').pop() || filePath;
|
|
19
|
+
// Track co-edits with all previously edited files
|
|
20
|
+
for (const existing of sessionEdits) {
|
|
21
|
+
if (existing === basename)
|
|
22
|
+
continue;
|
|
23
|
+
const key = [existing, basename].sort().join('↔');
|
|
24
|
+
coEditMap.set(key, (coEditMap.get(key) || 0) + 1);
|
|
25
|
+
}
|
|
26
|
+
sessionEdits.add(basename);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get files that are frequently co-edited with the given file.
|
|
30
|
+
* Returns files that should also be checked/edited.
|
|
31
|
+
*/
|
|
32
|
+
function getRelatedFiles(filePath, memoryStore) {
|
|
33
|
+
const basename = filePath.replace(/\\/g, '/').split('/').pop() || filePath;
|
|
34
|
+
const related = [];
|
|
35
|
+
// 1. Check session co-edits
|
|
36
|
+
for (const [key, count] of coEditMap.entries()) {
|
|
37
|
+
if (count < 2)
|
|
38
|
+
continue; // Need at least 2 co-edits to be meaningful
|
|
39
|
+
const [a, b] = key.split('↔');
|
|
40
|
+
if (a === basename)
|
|
41
|
+
related.push(b);
|
|
42
|
+
else if (b === basename)
|
|
43
|
+
related.push(a);
|
|
44
|
+
}
|
|
45
|
+
// 2. Check stored relationships from past sessions
|
|
46
|
+
try {
|
|
47
|
+
const results = memoryStore.searchFTS(`file-relationship ${basename}`, 5);
|
|
48
|
+
for (const r of results) {
|
|
49
|
+
if (r.memory.tags?.includes('file-relationship')) {
|
|
50
|
+
// Extract the paired file from the intent
|
|
51
|
+
const match = r.memory.intent.match(/(.+?)↔(.+)/);
|
|
52
|
+
if (match) {
|
|
53
|
+
const other = match[1].trim() === basename ? match[2].trim() : match[1].trim();
|
|
54
|
+
if (!related.includes(other))
|
|
55
|
+
related.push(other);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch { /* non-fatal */ }
|
|
61
|
+
return related;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get all co-edit relationships from this session (for end-of-session storage).
|
|
65
|
+
*/
|
|
66
|
+
function getSessionRelationships() {
|
|
67
|
+
const relationships = [];
|
|
68
|
+
for (const [key, count] of coEditMap.entries()) {
|
|
69
|
+
if (count < 2)
|
|
70
|
+
continue; // Only store meaningful relationships
|
|
71
|
+
const [a, b] = key.split('↔');
|
|
72
|
+
relationships.push({
|
|
73
|
+
fileA: a,
|
|
74
|
+
fileB: b,
|
|
75
|
+
coEditCount: count,
|
|
76
|
+
lastCoEdit: Date.now(),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return relationships;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if any related files are missing from the current edit set.
|
|
83
|
+
* Returns warnings about files that should probably also be edited.
|
|
84
|
+
*/
|
|
85
|
+
function checkMissingRelated(currentFile, memoryStore) {
|
|
86
|
+
const related = getRelatedFiles(currentFile, memoryStore);
|
|
87
|
+
const warnings = [];
|
|
88
|
+
for (const file of related) {
|
|
89
|
+
if (!sessionEdits.has(file)) {
|
|
90
|
+
warnings.push(`⚠️ You're editing ${currentFile} but haven't touched ${file} — they're usually edited together`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return warnings;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Store accumulated co-edit relationships as persistent memories.
|
|
97
|
+
*/
|
|
98
|
+
function storeRelationships(memoryStore) {
|
|
99
|
+
const rels = getSessionRelationships();
|
|
100
|
+
let stored = 0;
|
|
101
|
+
for (const rel of rels) {
|
|
102
|
+
try {
|
|
103
|
+
memoryStore.add({
|
|
104
|
+
type: 'INSIGHT',
|
|
105
|
+
intent: `${rel.fileA}↔${rel.fileB} — edited together ${rel.coEditCount} times`,
|
|
106
|
+
action: `These files are frequently co-edited. When changing one, check the other.`,
|
|
107
|
+
reason: `Auto-detected file relationship from ${rel.coEditCount} co-edits`,
|
|
108
|
+
tags: ['file-relationship', rel.fileA, rel.fileB],
|
|
109
|
+
confidence: Math.min(0.95, 0.5 + rel.coEditCount * 0.1),
|
|
110
|
+
importance: Math.min(0.85, 0.4 + rel.coEditCount * 0.1),
|
|
111
|
+
timestamp: Date.now(),
|
|
112
|
+
isActive: true,
|
|
113
|
+
accessCount: 0,
|
|
114
|
+
createdAt: Date.now(),
|
|
115
|
+
id: '',
|
|
116
|
+
});
|
|
117
|
+
stored++;
|
|
118
|
+
}
|
|
119
|
+
catch { /* skip duplicates */ }
|
|
120
|
+
}
|
|
121
|
+
return stored;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Reset session tracking (call at session end).
|
|
125
|
+
*/
|
|
126
|
+
function resetFileTracking() {
|
|
127
|
+
sessionEdits.clear();
|
|
128
|
+
coEditMap.clear();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=file-relationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-relationships.js","sourceRoot":"","sources":["../../src/memory/file-relationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-memory.d.ts","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-memory.d.ts","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYjD,UAAU,gBAAgB;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACxB;AAKD,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAwDjH;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CAkCzE;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBlE"}
|
|
@@ -3,7 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.captureGitCommits = captureGitCommits;
|
|
4
4
|
exports.detectFileChanges = detectFileChanges;
|
|
5
5
|
exports.formatFileChanges = formatFileChanges;
|
|
6
|
+
/**
|
|
7
|
+
* Git Memory — Auto-captures code changes from git history.
|
|
8
|
+
*
|
|
9
|
+
* On each session start (force_recall), this module:
|
|
10
|
+
* 1. Reads recent git commits and stores them as memories
|
|
11
|
+
* 2. Tracks file changes (new/deleted/modified) since last session
|
|
12
|
+
* 3. Captures commit messages as DECISION/BUG_FIX based on keywords
|
|
13
|
+
*
|
|
14
|
+
* This solves the "what code changed and why?" gap that exists when
|
|
15
|
+
* files change outside the AI conversation.
|
|
16
|
+
*/
|
|
17
|
+
const child_process_1 = require("child_process");
|
|
6
18
|
const types_1 = require("../types");
|
|
19
|
+
const extract_tags_1 = require("../utils/extract-tags");
|
|
7
20
|
// Track the last processed commit hash to avoid duplicates
|
|
8
21
|
let lastProcessedCommit = null;
|
|
9
22
|
/** Capture recent git commits as memories */
|
|
@@ -11,9 +24,9 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
11
24
|
if (!workspaceRoot)
|
|
12
25
|
return 0;
|
|
13
26
|
try {
|
|
14
|
-
|
|
27
|
+
// execSync imported at module level
|
|
15
28
|
// Get recent commits with file changes
|
|
16
|
-
const gitLog = execSync(`git log --oneline --name-only -${maxCommits} --no-merges 2>nul`, { cwd: workspaceRoot, encoding: 'utf-8', timeout: 5000 }).trim();
|
|
29
|
+
const gitLog = (0, child_process_1.execSync)(`git log --oneline --name-only -${maxCommits} --no-merges 2>nul`, { cwd: workspaceRoot, encoding: 'utf-8', timeout: 5000 }).trim();
|
|
17
30
|
if (!gitLog)
|
|
18
31
|
return 0;
|
|
19
32
|
const commits = parseGitLog(gitLog);
|
|
@@ -25,8 +38,8 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
25
38
|
// Classify commit type based on message
|
|
26
39
|
const type = classifyCommit(commit.message);
|
|
27
40
|
// Check for duplicate — skip if already stored
|
|
28
|
-
const existing = memoryStore.
|
|
29
|
-
if (existing)
|
|
41
|
+
const existing = memoryStore.findByTag(`commit:${commit.hash}`, 1);
|
|
42
|
+
if (existing.length > 0)
|
|
30
43
|
continue;
|
|
31
44
|
memoryStore.add({
|
|
32
45
|
type,
|
|
@@ -35,7 +48,7 @@ function captureGitCommits(memoryStore, workspaceRoot, maxCommits = 5) {
|
|
|
35
48
|
? `Changed: ${commit.filesChanged.slice(0, 5).join(', ')}`
|
|
36
49
|
: commit.message,
|
|
37
50
|
reason: 'Auto-captured from git history',
|
|
38
|
-
tags: ['git-commit', `commit:${commit.hash}`, ...
|
|
51
|
+
tags: ['git-commit', `commit:${commit.hash}`, ...(0, extract_tags_1.extractTags)(commit.message)],
|
|
39
52
|
relatedFiles: commit.filesChanged.slice(0, 10),
|
|
40
53
|
confidence: 0.8,
|
|
41
54
|
importance: type === types_1.MemoryType.BUG_FIX ? 0.85 : 0.6,
|
|
@@ -62,9 +75,9 @@ function detectFileChanges(workspaceRoot) {
|
|
|
62
75
|
if (!workspaceRoot)
|
|
63
76
|
return report;
|
|
64
77
|
try {
|
|
65
|
-
|
|
78
|
+
// execSync imported at module level
|
|
66
79
|
// Get uncommitted changes (working tree vs HEAD)
|
|
67
|
-
const status = execSync('git status --porcelain 2>nul', {
|
|
80
|
+
const status = (0, child_process_1.execSync)('git status --porcelain 2>nul', {
|
|
68
81
|
cwd: workspaceRoot,
|
|
69
82
|
encoding: 'utf-8',
|
|
70
83
|
timeout: 5000,
|
|
@@ -156,23 +169,4 @@ function classifyCommit(message) {
|
|
|
156
169
|
return types_1.MemoryType.INSIGHT;
|
|
157
170
|
return types_1.MemoryType.DECISION;
|
|
158
171
|
}
|
|
159
|
-
function extractTopicTags(message) {
|
|
160
|
-
const tags = [];
|
|
161
|
-
const lower = message.toLowerCase();
|
|
162
|
-
const patterns = [
|
|
163
|
-
[/\b(auth|login|session|token|jwt)\b/, 'auth'],
|
|
164
|
-
[/\b(database|sql|query|migration)\b/, 'database'],
|
|
165
|
-
[/\b(api|endpoint|route)\b/, 'api'],
|
|
166
|
-
[/\b(ui|component|style|css)\b/, 'ui'],
|
|
167
|
-
[/\b(test|spec|coverage)\b/, 'testing'],
|
|
168
|
-
[/\b(deploy|ci|docker)\b/, 'devops'],
|
|
169
|
-
[/\b(security|permission)\b/, 'security'],
|
|
170
|
-
[/\b(perf|cache|optimize)\b/, 'performance'],
|
|
171
|
-
];
|
|
172
|
-
for (const [pattern, tag] of patterns) {
|
|
173
|
-
if (pattern.test(lower))
|
|
174
|
-
tags.push(tag);
|
|
175
|
-
}
|
|
176
|
-
return tags;
|
|
177
|
-
}
|
|
178
172
|
//# sourceMappingURL=git-memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":";;AAmCA,
|
|
1
|
+
{"version":3,"file":"git-memory.js","sourceRoot":"","sources":["../../src/memory/git-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ImpactResult {
|
|
2
|
+
targetFile: string;
|
|
3
|
+
directDependents: string[];
|
|
4
|
+
indirectDependents: string[];
|
|
5
|
+
totalImpact: number;
|
|
6
|
+
exports: string[];
|
|
7
|
+
riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Analyze the impact of changing a file.
|
|
11
|
+
* Scans for import statements that reference the target file.
|
|
12
|
+
*/
|
|
13
|
+
export declare function analyzeImpact(targetFile: string, workspaceRoot: string): ImpactResult;
|
|
14
|
+
/** Format impact analysis for AI consumption */
|
|
15
|
+
export declare function formatImpact(result: ImpactResult): string;
|
|
16
|
+
//# sourceMappingURL=impact-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impact-analyzer.d.ts","sourceRoot":"","sources":["../../src/memory/impact-analyzer.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACrD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CACzB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACtB,YAAY,CA4Ed;AAED,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAiCzD"}
|