cortex-mcp 2.5.0 → 2.7.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 +58 -279
- package/README.md +224 -393
- package/dist/cli/setup.js +60 -58
- 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 +0 -8
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +2 -34
- package/dist/db/database.js.map +1 -1
- package/dist/db/event-log.d.ts +0 -4
- package/dist/db/event-log.d.ts.map +1 -1
- package/dist/db/event-log.js +10 -14
- package/dist/db/event-log.js.map +1 -1
- package/dist/db/memory-store.d.ts +3 -30
- package/dist/db/memory-store.d.ts.map +1 -1
- package/dist/db/memory-store.js +44 -140
- 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 +2 -5
- package/dist/mcp-stdio.js +3 -34
- package/dist/mcp-stdio.js.map +1 -1
- package/dist/memory/anticipation-engine.d.ts.map +1 -1
- package/dist/memory/anticipation-engine.js +10 -18
- 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 +43 -190
- package/dist/memory/auto-learner.js.map +1 -1
- package/dist/memory/confidence-decay.d.ts.map +1 -1
- package/dist/memory/confidence-decay.js +9 -13
- package/dist/memory/confidence-decay.js.map +1 -1
- package/dist/memory/embedding-manager.d.ts.map +1 -1
- package/dist/memory/embedding-manager.js +4 -6
- package/dist/memory/embedding-manager.js.map +1 -1
- package/dist/memory/export-import.js +2 -2
- package/dist/memory/export-import.js.map +1 -1
- package/dist/memory/git-memory.d.ts.map +1 -1
- package/dist/memory/git-memory.js +26 -20
- package/dist/memory/git-memory.js.map +1 -1
- package/dist/memory/learning-rate.js +7 -8
- package/dist/memory/learning-rate.js.map +1 -1
- package/dist/memory/llm-enhancer.d.ts +14 -2
- package/dist/memory/llm-enhancer.d.ts.map +1 -1
- package/dist/memory/llm-enhancer.js +46 -66
- 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 +0 -10
- 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 +14 -20
- 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 +51 -77
- package/dist/memory/memory-decay.js.map +1 -1
- 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 +6 -9
- 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 +3 -7
- 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/session-tracker.d.ts +0 -2
- package/dist/memory/session-tracker.d.ts.map +1 -1
- package/dist/memory/session-tracker.js +8 -26
- package/dist/memory/session-tracker.js.map +1 -1
- package/dist/memory/temporal-engine.d.ts.map +1 -1
- package/dist/memory/temporal-engine.js +13 -9
- package/dist/memory/temporal-engine.js.map +1 -1
- package/dist/retrieval/hybrid-retriever.d.ts +2 -0
- package/dist/retrieval/hybrid-retriever.d.ts.map +1 -1
- package/dist/retrieval/hybrid-retriever.js +13 -3
- 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 +0 -1
- 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 +45 -33
- 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 +20 -62
- package/dist/security/feature-gate.js.map +1 -1
- package/dist/security/license.js +35 -282
- package/dist/security/license.js.map +1 -1
- package/dist/security/rate-limiter.d.ts +3 -4
- package/dist/security/rate-limiter.d.ts.map +1 -1
- package/dist/security/rate-limiter.js +29 -11
- package/dist/security/rate-limiter.js.map +1 -1
- package/dist/server/dashboard.js +327 -166
- package/dist/server/dashboard.js.map +1 -1
- package/dist/server/mcp-handler.d.ts.map +1 -1
- package/dist/server/mcp-handler.js +771 -891
- package/dist/server/mcp-handler.js.map +1 -1
- package/package.json +8 -18
- package/dist/memory/completion-resolver.d.ts +0 -38
- package/dist/memory/completion-resolver.d.ts.map +0 -1
- package/dist/memory/completion-resolver.js +0 -127
- package/dist/memory/completion-resolver.js.map +0 -1
- package/dist/memory/convention-detector.d.ts +0 -11
- package/dist/memory/convention-detector.d.ts.map +0 -1
- package/dist/memory/convention-detector.js +0 -294
- package/dist/memory/convention-detector.js.map +0 -1
- package/dist/memory/correction-detector.d.ts +0 -33
- package/dist/memory/correction-detector.d.ts.map +0 -1
- package/dist/memory/correction-detector.js +0 -129
- package/dist/memory/correction-detector.js.map +0 -1
- package/dist/memory/error-learner.d.ts +0 -26
- package/dist/memory/error-learner.d.ts.map +0 -1
- package/dist/memory/error-learner.js +0 -145
- package/dist/memory/error-learner.js.map +0 -1
- package/dist/memory/file-relationships.d.ts +0 -47
- package/dist/memory/file-relationships.d.ts.map +0 -1
- package/dist/memory/file-relationships.js +0 -130
- package/dist/memory/file-relationships.js.map +0 -1
- package/dist/memory/impact-analyzer.d.ts +0 -16
- package/dist/memory/impact-analyzer.d.ts.map +0 -1
- package/dist/memory/impact-analyzer.js +0 -189
- package/dist/memory/impact-analyzer.js.map +0 -1
- package/dist/memory/instructions-generator.d.ts +0 -30
- package/dist/memory/instructions-generator.d.ts.map +0 -1
- package/dist/memory/instructions-generator.js +0 -117
- package/dist/memory/instructions-generator.js.map +0 -1
- package/dist/memory/pre-flight.d.ts +0 -24
- package/dist/memory/pre-flight.d.ts.map +0 -1
- package/dist/memory/pre-flight.js +0 -121
- package/dist/memory/pre-flight.js.map +0 -1
- package/dist/memory/preference-learner.d.ts +0 -28
- package/dist/memory/preference-learner.d.ts.map +0 -1
- package/dist/memory/preference-learner.js +0 -144
- package/dist/memory/preference-learner.js.map +0 -1
- package/dist/memory/regression-guard.d.ts +0 -35
- package/dist/memory/regression-guard.d.ts.map +0 -1
- package/dist/memory/regression-guard.js +0 -90
- package/dist/memory/regression-guard.js.map +0 -1
- package/dist/memory/resume-work.d.ts +0 -37
- package/dist/memory/resume-work.d.ts.map +0 -1
- package/dist/memory/resume-work.js +0 -141
- package/dist/memory/resume-work.js.map +0 -1
- package/dist/memory/success-tracker.d.ts +0 -33
- package/dist/memory/success-tracker.d.ts.map +0 -1
- package/dist/memory/success-tracker.js +0 -75
- package/dist/memory/success-tracker.js.map +0 -1
- package/dist/memory/tool-recommender.d.ts +0 -29
- package/dist/memory/tool-recommender.d.ts.map +0 -1
- package/dist/memory/tool-recommender.js +0 -117
- package/dist/memory/tool-recommender.js.map +0 -1
- package/dist/memory/usage-stats.d.ts +0 -98
- package/dist/memory/usage-stats.d.ts.map +0 -1
- package/dist/memory/usage-stats.js +0 -345
- package/dist/memory/usage-stats.js.map +0 -1
- package/dist/utils/extract-tags.d.ts +0 -16
- package/dist/utils/extract-tags.d.ts.map +0 -1
- package/dist/utils/extract-tags.js +0 -40
- package/dist/utils/extract-tags.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-learner.js","sourceRoot":"","sources":["../../src/memory/error-learner.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAmCH,oDAwFC;AAKD,wCAcC;AArID,iFAAiF;AAEjF,MAAM,gBAAgB,GAA2B;IAC7C,QAAQ,EAAE,mFAAmF;IAC7F,QAAQ,EAAE,oEAAoE;IAC9E,QAAQ,EAAE,+EAA+E;IACzF,QAAQ,EAAE,0DAA0D;IACpE,QAAQ,EAAE,uEAAuE;IACjF,QAAQ,EAAE,uDAAuD;IACjE,QAAQ,EAAE,0EAA0E;IACpF,QAAQ,EAAE,sFAAsF;IAChG,QAAQ,EAAE,kEAAkE;IAC5E,QAAQ,EAAE,kEAAkE;IAC5E,SAAS,EAAE,gEAAgE;IAC3E,QAAQ,EAAE,6EAA6E;IACvF,QAAQ,EAAE,sEAAsE;IAChF,QAAQ,EAAE,mEAAmE;IAC7E,QAAQ,EAAE,6EAA6E;IACvF,QAAQ,EAAE,wDAAwD;IAClE,QAAQ,EAAE,gEAAgE;IAC1E,QAAQ,EAAE,mEAAmE;CAChF,CAAC;AAEF;;GAEG;AACH,SAAgB,oBAAoB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,6CAA6C;IAC7C,MAAM,YAAY,GAAG,mDAAmD,CAAC;IACzE,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,sDAAsD,CAAC;QAC3E,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;gBAAE,MAAM;YACrC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC;gBACR,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B;gBAChI,UAAU,EAAE,IAAI;aACnB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,MAAM,WAAW,GAAG,iEAAiE,CAAC;IACtF,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,kBAAkB;YAC7B,OAAO,EAAE,WAAW,GAAG,oFAAoF;YAC3G,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,qDAAqD,CAAC;IACxE,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,kBAAkB;YAC7B,OAAO,EAAE,aAAa,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,sDAAsD;YAC3H,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,sDAAsD,CAAC;IAC7E,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YACxD,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACrB,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAED,iCAAiC;IACjC,MAAM,QAAQ,GAAG,4CAA4C,CAAC;IAC9D,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YAAE,SAAS;QACvC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,oBAAoB;YAC/B,OAAO,EAAE,kCAAkC,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,iCAAiC;YACxG,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAY;IACvC,MAAM,eAAe,GAAG;QACpB,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;QACf,oBAAoB;QACpB,qBAAqB;QACrB,eAAe;QACf,aAAa;QACb,kBAAkB;QAClB,UAAU;QACV,kBAAkB;KACrB,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,130 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-relationships.js","sourceRoot":"","sources":["../../src/memory/file-relationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.analyzeImpact = analyzeImpact;
|
|
37
|
-
exports.formatImpact = formatImpact;
|
|
38
|
-
/**
|
|
39
|
-
* Impact Analyzer — Shows what breaks when you change a file.
|
|
40
|
-
*
|
|
41
|
-
* Before editing file A, this module checks the architecture graph
|
|
42
|
-
* to find all files that import from A (dependents).
|
|
43
|
-
* Prevents breaking changes by making dependencies visible.
|
|
44
|
-
*
|
|
45
|
-
* Like checking "who's using this?" before changing an API.
|
|
46
|
-
*/
|
|
47
|
-
const fs = __importStar(require("fs"));
|
|
48
|
-
const path = __importStar(require("path"));
|
|
49
|
-
/**
|
|
50
|
-
* Analyze the impact of changing a file.
|
|
51
|
-
* Scans for import statements that reference the target file.
|
|
52
|
-
*/
|
|
53
|
-
function analyzeImpact(targetFile, workspaceRoot) {
|
|
54
|
-
const result = {
|
|
55
|
-
targetFile,
|
|
56
|
-
directDependents: [],
|
|
57
|
-
indirectDependents: [],
|
|
58
|
-
totalImpact: 0,
|
|
59
|
-
exports: [],
|
|
60
|
-
riskLevel: 'LOW',
|
|
61
|
-
};
|
|
62
|
-
if (!workspaceRoot || !fs.existsSync(workspaceRoot))
|
|
63
|
-
return result;
|
|
64
|
-
// Normalize target for matching
|
|
65
|
-
const targetBasename = path.basename(targetFile).replace(/\.(ts|tsx|js|jsx)$/, '');
|
|
66
|
-
const targetRelative = path.relative(workspaceRoot, targetFile).replace(/\\/g, '/');
|
|
67
|
-
// Get all source files
|
|
68
|
-
const allFiles = getAllSourceFiles(workspaceRoot);
|
|
69
|
-
// Find what the target exports
|
|
70
|
-
try {
|
|
71
|
-
const targetContent = fs.readFileSync(fs.existsSync(targetFile) ? targetFile : path.join(workspaceRoot, targetFile), 'utf-8');
|
|
72
|
-
const exportMatches = targetContent.match(/export\s+(?:function|class|const|let|type|interface|enum)\s+(\w+)/g);
|
|
73
|
-
if (exportMatches) {
|
|
74
|
-
result.exports = exportMatches.map(m => {
|
|
75
|
-
const name = m.match(/\s(\w+)$/);
|
|
76
|
-
return name ? name[1] : m;
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch { /* file read failure is non-fatal */ }
|
|
81
|
-
// Scan all files for imports from target
|
|
82
|
-
for (const file of allFiles) {
|
|
83
|
-
if (file === targetRelative)
|
|
84
|
-
continue;
|
|
85
|
-
try {
|
|
86
|
-
const content = fs.readFileSync(path.join(workspaceRoot, file), 'utf-8');
|
|
87
|
-
// Check for imports referencing the target file
|
|
88
|
-
const importPattern = new RegExp(`(?:import|require).*(?:${escapeRegex(targetBasename)}|${escapeRegex(targetRelative.replace(/\.(ts|tsx|js|jsx)$/, ''))})`, 'i');
|
|
89
|
-
if (importPattern.test(content)) {
|
|
90
|
-
result.directDependents.push(file);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch { /* ignore read failures */ }
|
|
94
|
-
}
|
|
95
|
-
// Find indirect dependents (files that import from direct dependents)
|
|
96
|
-
const directSet = new Set(result.directDependents);
|
|
97
|
-
for (const depFile of result.directDependents) {
|
|
98
|
-
const depBasename = path.basename(depFile).replace(/\.(ts|tsx|js|jsx)$/, '');
|
|
99
|
-
for (const file of allFiles) {
|
|
100
|
-
if (directSet.has(file) || file === targetRelative)
|
|
101
|
-
continue;
|
|
102
|
-
try {
|
|
103
|
-
const content = fs.readFileSync(path.join(workspaceRoot, file), 'utf-8');
|
|
104
|
-
if (content.includes(depBasename)) {
|
|
105
|
-
result.indirectDependents.push(file);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
catch { /* ignore */ }
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// Deduplicate indirect
|
|
112
|
-
result.indirectDependents = [...new Set(result.indirectDependents)];
|
|
113
|
-
result.totalImpact = result.directDependents.length + result.indirectDependents.length;
|
|
114
|
-
// Risk level
|
|
115
|
-
if (result.totalImpact === 0)
|
|
116
|
-
result.riskLevel = 'LOW';
|
|
117
|
-
else if (result.totalImpact <= 3)
|
|
118
|
-
result.riskLevel = 'MEDIUM';
|
|
119
|
-
else if (result.totalImpact <= 8)
|
|
120
|
-
result.riskLevel = 'HIGH';
|
|
121
|
-
else
|
|
122
|
-
result.riskLevel = 'CRITICAL';
|
|
123
|
-
return result;
|
|
124
|
-
}
|
|
125
|
-
/** Format impact analysis for AI consumption */
|
|
126
|
-
function formatImpact(result) {
|
|
127
|
-
const riskEmoji = {
|
|
128
|
-
LOW: '🟢', MEDIUM: '🟡', HIGH: '🟠', CRITICAL: '🔴',
|
|
129
|
-
};
|
|
130
|
-
const lines = [
|
|
131
|
-
`# 💥 Impact Analysis: ${path.basename(result.targetFile)}`,
|
|
132
|
-
`\n**Risk Level:** ${riskEmoji[result.riskLevel]} ${result.riskLevel} (${result.totalImpact} files affected)`,
|
|
133
|
-
];
|
|
134
|
-
if (result.exports.length > 0) {
|
|
135
|
-
lines.push(`\n**Exports:** \`${result.exports.slice(0, 10).join('`, `')}\``);
|
|
136
|
-
}
|
|
137
|
-
if (result.directDependents.length > 0) {
|
|
138
|
-
lines.push(`\n## Direct Dependents (${result.directDependents.length} files import this)`);
|
|
139
|
-
result.directDependents.forEach(f => lines.push(`- 📁 ${f}`));
|
|
140
|
-
}
|
|
141
|
-
if (result.indirectDependents.length > 0) {
|
|
142
|
-
lines.push(`\n## Indirect Dependents (${result.indirectDependents.length} files)`);
|
|
143
|
-
result.indirectDependents.slice(0, 5).forEach(f => lines.push(`- 📁 ${f}`));
|
|
144
|
-
if (result.indirectDependents.length > 5) {
|
|
145
|
-
lines.push(`_...and ${result.indirectDependents.length - 5} more_`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (result.totalImpact === 0) {
|
|
149
|
-
lines.push('\n✅ **No dependents found.** Safe to modify.');
|
|
150
|
-
}
|
|
151
|
-
else if (result.riskLevel === 'CRITICAL' || result.riskLevel === 'HIGH') {
|
|
152
|
-
lines.push('\n> ⚠️ **Caution:** Many files depend on this. Changing exports or signatures may cause cascading failures.');
|
|
153
|
-
}
|
|
154
|
-
return lines.join('\n');
|
|
155
|
-
}
|
|
156
|
-
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
157
|
-
function getAllSourceFiles(root, maxFiles = 200) {
|
|
158
|
-
const files = [];
|
|
159
|
-
const ignore = new Set(['node_modules', '.git', 'dist', 'coverage', '.next', 'build', 'out']);
|
|
160
|
-
const exts = new Set(['.ts', '.tsx', '.js', '.jsx']);
|
|
161
|
-
function walk(dir, depth) {
|
|
162
|
-
if (depth > 4 || files.length >= maxFiles)
|
|
163
|
-
return;
|
|
164
|
-
try {
|
|
165
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
166
|
-
for (const entry of entries) {
|
|
167
|
-
if (ignore.has(entry.name) || entry.name.startsWith('.'))
|
|
168
|
-
continue;
|
|
169
|
-
const full = path.join(dir, entry.name);
|
|
170
|
-
if (entry.isDirectory()) {
|
|
171
|
-
walk(full, depth + 1);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
const ext = path.extname(entry.name);
|
|
175
|
-
if (exts.has(ext) && !entry.name.endsWith('.d.ts')) {
|
|
176
|
-
files.push(path.relative(root, full).replace(/\\/g, '/'));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
catch { /* ignore */ }
|
|
182
|
-
}
|
|
183
|
-
walk(root, 0);
|
|
184
|
-
return files;
|
|
185
|
-
}
|
|
186
|
-
function escapeRegex(str) {
|
|
187
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
188
|
-
}
|
|
189
|
-
//# sourceMappingURL=impact-analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"impact-analyzer.js","sourceRoot":"","sources":["../../src/memory/impact-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Contextual Instructions Generator — Converts raw memories into direct DO/DON'T rules.
|
|
3
|
-
*
|
|
4
|
-
* THE GAP THIS FILLS:
|
|
5
|
-
* Currently, force_recall dumps memories like:
|
|
6
|
-
* "[CONVENTION] Arrow functions preferred over function declarations"
|
|
7
|
-
* But the AI has to interpret this. What it actually needs is:
|
|
8
|
-
* "DO: Use arrow functions. DON'T: Use function declarations."
|
|
9
|
-
*
|
|
10
|
-
* This module converts conventions, corrections, and preferences into
|
|
11
|
-
* imperative instructions that the AI can follow without thinking.
|
|
12
|
-
*
|
|
13
|
-
* Like a military briefing: clear, direct, no interpretation needed.
|
|
14
|
-
*/
|
|
15
|
-
import { MemoryStore } from '../db/memory-store';
|
|
16
|
-
export interface InstructionSet {
|
|
17
|
-
dos: string[];
|
|
18
|
-
donts: string[];
|
|
19
|
-
watchOuts: string[];
|
|
20
|
-
style: string[];
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Generate contextual instructions from stored memories.
|
|
24
|
-
*/
|
|
25
|
-
export declare function generateInstructions(memoryStore: MemoryStore): InstructionSet;
|
|
26
|
-
/**
|
|
27
|
-
* Format instructions as a clear, imperative briefing.
|
|
28
|
-
*/
|
|
29
|
-
export declare function formatInstructions(instructions: InstructionSet): string;
|
|
30
|
-
//# sourceMappingURL=instructions-generator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instructions-generator.d.ts","sourceRoot":"","sources":["../../src/memory/instructions-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,cAAc,CAiF7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,cAAc,GAAG,MAAM,CAwBvE"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateInstructions = generateInstructions;
|
|
4
|
-
exports.formatInstructions = formatInstructions;
|
|
5
|
-
const types_1 = require("../types");
|
|
6
|
-
/**
|
|
7
|
-
* Generate contextual instructions from stored memories.
|
|
8
|
-
*/
|
|
9
|
-
function generateInstructions(memoryStore) {
|
|
10
|
-
const instructions = {
|
|
11
|
-
dos: [],
|
|
12
|
-
donts: [],
|
|
13
|
-
watchOuts: [],
|
|
14
|
-
style: [],
|
|
15
|
-
};
|
|
16
|
-
const active = memoryStore.getActive(200);
|
|
17
|
-
for (const m of active) {
|
|
18
|
-
const intent = m.intent.toLowerCase();
|
|
19
|
-
const full = `${m.intent} ${m.action || ''} ${m.reason || ''}`;
|
|
20
|
-
// ─── Corrections → DON'Ts ──────────────────────────────────────
|
|
21
|
-
if (m.type === types_1.MemoryType.CORRECTION) {
|
|
22
|
-
// Extract the "don't do X" from corrections
|
|
23
|
-
const noMatch = full.match(/(?:no[,.]?\s+use|don'?t\s+use|never\s+use|avoid|instead\s+of)\s+(\w[\w\s]{3,40})/i);
|
|
24
|
-
const yesMatch = full.match(/(?:use|prefer|always\s+use|should\s+use|switch\s+to)\s+(\w[\w\s]{3,40})/i);
|
|
25
|
-
if (noMatch) {
|
|
26
|
-
instructions.donts.push(`DON'T: ${noMatch[1].trim()}`);
|
|
27
|
-
}
|
|
28
|
-
if (yesMatch) {
|
|
29
|
-
instructions.dos.push(`DO: ${yesMatch[1].trim()}`);
|
|
30
|
-
}
|
|
31
|
-
if (!noMatch && !yesMatch) {
|
|
32
|
-
instructions.watchOuts.push(`⚠️ Past correction: ${m.intent.slice(0, 80)}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// ─── Conventions → DOs ─────────────────────────────────────────
|
|
36
|
-
if (m.type === types_1.MemoryType.CONVENTION) {
|
|
37
|
-
// Check if this is a preference (communication style)
|
|
38
|
-
if (m.tags?.includes('preference')) {
|
|
39
|
-
instructions.style.push(m.intent.slice(0, 80));
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
// Auto-detected conventions → direct rules
|
|
43
|
-
if (m.tags?.includes('auto-detected')) {
|
|
44
|
-
if (intent.includes('arrow function')) {
|
|
45
|
-
instructions.dos.push('DO: Use arrow functions (const fn = () => {})');
|
|
46
|
-
}
|
|
47
|
-
else if (intent.includes('function declaration')) {
|
|
48
|
-
instructions.dos.push('DO: Use function declarations (function fn() {})');
|
|
49
|
-
}
|
|
50
|
-
else if (intent.includes('const over let')) {
|
|
51
|
-
instructions.dos.push('DO: Use const by default, let only when reassignment needed');
|
|
52
|
-
}
|
|
53
|
-
else if (intent.includes('semicolon')) {
|
|
54
|
-
if (intent.includes('always'))
|
|
55
|
-
instructions.dos.push('DO: Always use semicolons');
|
|
56
|
-
else
|
|
57
|
-
instructions.dos.push('DO: Omit semicolons (ASI style)');
|
|
58
|
-
}
|
|
59
|
-
else if (intent.includes('single quote')) {
|
|
60
|
-
instructions.dos.push('DO: Use single quotes for strings');
|
|
61
|
-
}
|
|
62
|
-
else if (intent.includes('double quote')) {
|
|
63
|
-
instructions.dos.push('DO: Use double quotes for strings');
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
instructions.dos.push(`DO: ${m.intent.slice(0, 80)}`);
|
|
67
|
-
}
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
instructions.dos.push(`DO: ${m.intent.slice(0, 80)}`);
|
|
71
|
-
}
|
|
72
|
-
// ─── Bug Fixes → Watch Outs ───────────────────────────────────
|
|
73
|
-
if (m.type === types_1.MemoryType.BUG_FIX) {
|
|
74
|
-
if (m.tags?.includes('error-pattern')) {
|
|
75
|
-
// These are TS error lessons
|
|
76
|
-
instructions.watchOuts.push(`⚠️ ${m.intent.replace('[ERROR PATTERN] ', '').slice(0, 80)}`);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
instructions.watchOuts.push(`⚠️ Known bug: ${m.intent.slice(0, 80)}`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Deduplicate
|
|
84
|
-
instructions.dos = [...new Set(instructions.dos)].slice(0, 15);
|
|
85
|
-
instructions.donts = [...new Set(instructions.donts)].slice(0, 10);
|
|
86
|
-
instructions.watchOuts = [...new Set(instructions.watchOuts)].slice(0, 10);
|
|
87
|
-
instructions.style = [...new Set(instructions.style)].slice(0, 5);
|
|
88
|
-
return instructions;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Format instructions as a clear, imperative briefing.
|
|
92
|
-
*/
|
|
93
|
-
function formatInstructions(instructions) {
|
|
94
|
-
const sections = [];
|
|
95
|
-
if (instructions.dos.length > 0) {
|
|
96
|
-
sections.push('## ✅ Project Rules (DO)');
|
|
97
|
-
for (const d of instructions.dos)
|
|
98
|
-
sections.push(`- ${d}`);
|
|
99
|
-
}
|
|
100
|
-
if (instructions.donts.length > 0) {
|
|
101
|
-
sections.push('\n## ❌ Avoid (DON\'T)');
|
|
102
|
-
for (const d of instructions.donts)
|
|
103
|
-
sections.push(`- ${d}`);
|
|
104
|
-
}
|
|
105
|
-
if (instructions.watchOuts.length > 0) {
|
|
106
|
-
sections.push('\n## ⚠️ Watch Out');
|
|
107
|
-
for (const w of instructions.watchOuts)
|
|
108
|
-
sections.push(`- ${w}`);
|
|
109
|
-
}
|
|
110
|
-
if (instructions.style.length > 0) {
|
|
111
|
-
sections.push('\n## 🎯 Communication Style');
|
|
112
|
-
for (const s of instructions.style)
|
|
113
|
-
sections.push(`- ${s}`);
|
|
114
|
-
}
|
|
115
|
-
return sections.length > 0 ? sections.join('\n') : '';
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=instructions-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instructions-generator.js","sourceRoot":"","sources":["../../src/memory/instructions-generator.ts"],"names":[],"mappings":";;AA2BA,oDAiFC;AAKD,gDAwBC;AA1HD,oCAAsC;AAStC;;GAEG;AACH,SAAgB,oBAAoB,CAAC,WAAwB;IACzD,MAAM,YAAY,GAAmB;QACjC,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;KACZ,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAE/D,kEAAkE;QAClE,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAU,CAAC,UAAU,EAAE,CAAC;YACnC,4CAA4C;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;YAChH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAExG,IAAI,OAAO,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACX,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAU,CAAC,UAAU,EAAE,CAAC;YACnC,sDAAsD;YACtD,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/C,SAAS;YACb,CAAC;YAED,2CAA2C;YAC3C,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACpC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC3E,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBACjD,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAC9E,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC3C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBACzF,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;;wBAC7E,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAClE,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACzC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBACzC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACJ,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBACD,SAAS;YACb,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAU,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,6BAA6B;gBAC7B,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACJ,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC;IACL,CAAC;IAED,cAAc;IACd,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnE,YAAY,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3E,YAAY,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,YAA4B;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pre-Flight Checks — Convention check BEFORE writing code.
|
|
3
|
-
*
|
|
4
|
-
* Instead of reviewing code AFTER it's written (review_code),
|
|
5
|
-
* this tells the AI what conventions and gotchas exist for a file/task
|
|
6
|
-
* BEFORE a single line is written.
|
|
7
|
-
*
|
|
8
|
-
* Like a pilot's pre-flight checklist — don't take off without checking.
|
|
9
|
-
*/
|
|
10
|
-
import { MemoryStore } from '../db/memory-store';
|
|
11
|
-
export interface PreFlightResult {
|
|
12
|
-
conventions: string[];
|
|
13
|
-
gotchas: string[];
|
|
14
|
-
pastBugs: string[];
|
|
15
|
-
fileNotes: string[];
|
|
16
|
-
recentCorrections: string[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Get everything the AI needs to know BEFORE writing/editing code for a file.
|
|
20
|
-
*/
|
|
21
|
-
export declare function preFlightCheck(memoryStore: MemoryStore, filename?: string, task?: string): PreFlightResult;
|
|
22
|
-
/** Format pre-flight results for AI consumption */
|
|
23
|
-
export declare function formatPreFlight(result: PreFlightResult): string;
|
|
24
|
-
//# sourceMappingURL=pre-flight.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pre-flight.d.ts","sourceRoot":"","sources":["../../src/memory/pre-flight.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACd,eAAe,CA4EjB;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA8C/D"}
|