cmp-memory-system 1.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/README.md +541 -0
- package/dist/analytics/index.d.ts +5 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +5 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/tracker.d.ts +107 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +333 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/auto-improve/eslint-generator.d.ts +36 -0
- package/dist/auto-improve/eslint-generator.d.ts.map +1 -0
- package/dist/auto-improve/eslint-generator.js +280 -0
- package/dist/auto-improve/eslint-generator.js.map +1 -0
- package/dist/auto-improve/index.d.ts +6 -0
- package/dist/auto-improve/index.d.ts.map +1 -0
- package/dist/auto-improve/index.js +6 -0
- package/dist/auto-improve/index.js.map +1 -0
- package/dist/auto-improve/pattern-detector.d.ts +92 -0
- package/dist/auto-improve/pattern-detector.d.ts.map +1 -0
- package/dist/auto-improve/pattern-detector.js +231 -0
- package/dist/auto-improve/pattern-detector.js.map +1 -0
- package/dist/cli/index.d.ts +16 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +636 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +15 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +373 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/ui.d.ts +9 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +530 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/db/client.d.ts +66 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +159 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/drizzle-client.d.ts +302 -0
- package/dist/db/drizzle-client.d.ts.map +1 -0
- package/dist/db/drizzle-client.js +404 -0
- package/dist/db/drizzle-client.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/feedback/collector.d.ts +74 -0
- package/dist/feedback/collector.d.ts.map +1 -0
- package/dist/feedback/collector.js +231 -0
- package/dist/feedback/collector.js.map +1 -0
- package/dist/feedback/index.d.ts +5 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +5 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/memory-checkpoint.d.ts +43 -0
- package/dist/hooks/memory-checkpoint.d.ts.map +1 -0
- package/dist/hooks/memory-checkpoint.js +257 -0
- package/dist/hooks/memory-checkpoint.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts +61 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -0
- package/dist/hooks/post-tool-use.js +262 -0
- package/dist/hooks/post-tool-use.js.map +1 -0
- package/dist/hooks/pre-tool-use.d.ts +34 -0
- package/dist/hooks/pre-tool-use.d.ts.map +1 -0
- package/dist/hooks/pre-tool-use.js +358 -0
- package/dist/hooks/pre-tool-use.js.map +1 -0
- package/dist/hooks/session-start.d.ts +38 -0
- package/dist/hooks/session-start.d.ts.map +1 -0
- package/dist/hooks/session-start.js +274 -0
- package/dist/hooks/session-start.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +42 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +599 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/registry/embeddings.d.ts +38 -0
- package/dist/registry/embeddings.d.ts.map +1 -0
- package/dist/registry/embeddings.js +110 -0
- package/dist/registry/embeddings.js.map +1 -0
- package/dist/registry/generator.d.ts +41 -0
- package/dist/registry/generator.d.ts.map +1 -0
- package/dist/registry/generator.js +323 -0
- package/dist/registry/generator.js.map +1 -0
- package/dist/registry/index.d.ts +6 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +6 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/services/IdeaCollector.d.ts +103 -0
- package/dist/services/IdeaCollector.d.ts.map +1 -0
- package/dist/services/IdeaCollector.js +371 -0
- package/dist/services/IdeaCollector.js.map +1 -0
- package/dist/services/TaskTracker.d.ts +89 -0
- package/dist/services/TaskTracker.d.ts.map +1 -0
- package/dist/services/TaskTracker.js +324 -0
- package/dist/services/TaskTracker.js.map +1 -0
- package/dist/services/WorkPlanManager.d.ts +107 -0
- package/dist/services/WorkPlanManager.d.ts.map +1 -0
- package/dist/services/WorkPlanManager.js +440 -0
- package/dist/services/WorkPlanManager.js.map +1 -0
- package/dist/services/auto-inject.d.ts +77 -0
- package/dist/services/auto-inject.d.ts.map +1 -0
- package/dist/services/auto-inject.js +289 -0
- package/dist/services/auto-inject.js.map +1 -0
- package/dist/services/auto-tag.d.ts +61 -0
- package/dist/services/auto-tag.d.ts.map +1 -0
- package/dist/services/auto-tag.js +203 -0
- package/dist/services/auto-tag.js.map +1 -0
- package/dist/services/cross-project-sync.d.ts +76 -0
- package/dist/services/cross-project-sync.d.ts.map +1 -0
- package/dist/services/cross-project-sync.js +235 -0
- package/dist/services/cross-project-sync.js.map +1 -0
- package/dist/services/index.d.ts +15 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +18 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory-consolidation.d.ts +77 -0
- package/dist/services/memory-consolidation.d.ts.map +1 -0
- package/dist/services/memory-consolidation.js +298 -0
- package/dist/services/memory-consolidation.js.map +1 -0
- package/dist/services/semantic-search.d.ts +93 -0
- package/dist/services/semantic-search.d.ts.map +1 -0
- package/dist/services/semantic-search.js +278 -0
- package/dist/services/semantic-search.js.map +1 -0
- package/dist/services/weekly-digest.d.ts +105 -0
- package/dist/services/weekly-digest.d.ts.map +1 -0
- package/dist/services/weekly-digest.js +292 -0
- package/dist/services/weekly-digest.js.map +1 -0
- package/dist/types/index.d.ts +274 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +84 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +89 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +28 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +80 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +89 -0
- package/templates/memory-config.json +82 -0
- package/templates/memory-config.schema.json +212 -0
- package/templates/settings.json +58 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Improvement module exports
|
|
3
|
+
*/
|
|
4
|
+
export { PatternDetector, PatternTracker, BUILTIN_PATTERNS, scanFile, type PatternDefinition } from './pattern-detector.js';
|
|
5
|
+
export { ESLintGenerator, runESLintGenerator } from './eslint-generator.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auto-improve/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auto-improve/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,QAAQ,EAET,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects repeated patterns/violations across sessions.
|
|
5
|
+
* When threshold is reached, triggers auto-improvement.
|
|
6
|
+
*/
|
|
7
|
+
import type { DetectedPattern, PatternDetectionResult, MemoryConfig } from '../types/index.js';
|
|
8
|
+
export interface PatternDefinition {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
detector: (content: string, filePath: string) => boolean;
|
|
13
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
14
|
+
eslintRule?: string;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Built-in pattern definitions
|
|
19
|
+
*/
|
|
20
|
+
export declare const BUILTIN_PATTERNS: PatternDefinition[];
|
|
21
|
+
interface PatternOccurrence {
|
|
22
|
+
file: string;
|
|
23
|
+
line: number;
|
|
24
|
+
code: string;
|
|
25
|
+
timestamp: Date;
|
|
26
|
+
}
|
|
27
|
+
interface TrackedPattern {
|
|
28
|
+
definition: PatternDefinition;
|
|
29
|
+
occurrences: PatternOccurrence[];
|
|
30
|
+
firstSeen: Date;
|
|
31
|
+
lastSeen: Date;
|
|
32
|
+
}
|
|
33
|
+
export declare class PatternTracker {
|
|
34
|
+
private patterns;
|
|
35
|
+
private threshold;
|
|
36
|
+
constructor(threshold?: number);
|
|
37
|
+
/**
|
|
38
|
+
* Track a pattern occurrence
|
|
39
|
+
*/
|
|
40
|
+
track(patternId: string, file: string, line: number, code: string): TrackedPattern | null;
|
|
41
|
+
/**
|
|
42
|
+
* Get all patterns that have reached threshold
|
|
43
|
+
*/
|
|
44
|
+
getTriggeredPatterns(): TrackedPattern[];
|
|
45
|
+
/**
|
|
46
|
+
* Get all tracked patterns
|
|
47
|
+
*/
|
|
48
|
+
getAllPatterns(): TrackedPattern[];
|
|
49
|
+
/**
|
|
50
|
+
* Clear tracking for a pattern (after auto-improvement)
|
|
51
|
+
*/
|
|
52
|
+
clear(patternId: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Get current stats
|
|
55
|
+
*/
|
|
56
|
+
getStats(): {
|
|
57
|
+
total: number;
|
|
58
|
+
triggered: number;
|
|
59
|
+
patterns: string[];
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export declare class PatternDetector {
|
|
63
|
+
private tracker;
|
|
64
|
+
private customPatterns;
|
|
65
|
+
constructor(config?: MemoryConfig);
|
|
66
|
+
/**
|
|
67
|
+
* Add custom pattern definition
|
|
68
|
+
*/
|
|
69
|
+
addPattern(pattern: PatternDefinition): void;
|
|
70
|
+
/**
|
|
71
|
+
* Scan content for all patterns
|
|
72
|
+
*/
|
|
73
|
+
scan(content: string, filePath: string): DetectedPattern[];
|
|
74
|
+
/**
|
|
75
|
+
* Get detection results
|
|
76
|
+
*/
|
|
77
|
+
getResults(): PatternDetectionResult;
|
|
78
|
+
/**
|
|
79
|
+
* Get pattern by ID
|
|
80
|
+
*/
|
|
81
|
+
getPattern(patternId: string): PatternDefinition | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Mark pattern as handled (clear tracking)
|
|
84
|
+
*/
|
|
85
|
+
markHandled(patternId: string): void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Scan a file for patterns (standalone)
|
|
89
|
+
*/
|
|
90
|
+
export declare function scanFile(filePath: string, content: string, threshold?: number): Promise<DetectedPattern[]>;
|
|
91
|
+
export {};
|
|
92
|
+
//# sourceMappingURL=pattern-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.d.ts","sourceRoot":"","sources":["../../src/auto-improve/pattern-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EAGtB,YAAY,EACb,MAAM,mBAAmB,CAAA;AAM1B,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;IACxD,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EAkE/C,CAAA;AAMD,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,IAAI,CAAA;CAChB;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,iBAAiB,CAAA;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,SAAS,EAAE,IAAI,CAAA;IACf,QAAQ,EAAE,IAAI,CAAA;CACf;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,SAAS,CAAQ;gBAEb,SAAS,SAAI;IAIzB;;OAEG;IACH,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,cAAc,GAAG,IAAI;IAgCxB;;OAEG;IACH,oBAAoB,IAAI,cAAc,EAAE;IAKxC;;OAEG;IACH,cAAc,IAAI,cAAc,EAAE;IAIlC;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;CAUrE;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,cAAc,CAA0B;gBAEpC,MAAM,CAAC,EAAE,YAAY;IAKjC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAI5C;;OAEG;IACH,IAAI,CACF,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE;IAsCpB;;OAEG;IACH,UAAU,IAAI,sBAAsB;IAqBpC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAK5D;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGrC;AAMD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,SAAI,GACZ,OAAO,CAAC,eAAe,EAAE,CAAC,CAG5B"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pattern Detector
|
|
3
|
+
*
|
|
4
|
+
* Detects repeated patterns/violations across sessions.
|
|
5
|
+
* When threshold is reached, triggers auto-improvement.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Built-in pattern definitions
|
|
9
|
+
*/
|
|
10
|
+
export const BUILTIN_PATTERNS = [
|
|
11
|
+
{
|
|
12
|
+
id: 'any-type',
|
|
13
|
+
name: 'Any Type Usage',
|
|
14
|
+
description: 'Using any type instead of proper typing',
|
|
15
|
+
detector: (content) => /:\s*any\b/.test(content) || /as\s+any\b/.test(content),
|
|
16
|
+
severity: 'high',
|
|
17
|
+
eslintRule: '@typescript-eslint/no-explicit-any',
|
|
18
|
+
message: 'Avoid using "any" type. Define proper types instead.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'console-log',
|
|
22
|
+
name: 'Console Log in Production',
|
|
23
|
+
description: 'Console.log statements left in code',
|
|
24
|
+
detector: (content, filePath) => !filePath.includes('.test.') && /console\.log\(/.test(content),
|
|
25
|
+
severity: 'medium',
|
|
26
|
+
eslintRule: 'no-console',
|
|
27
|
+
message: 'Remove console.log statements before production.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'eslint-disable',
|
|
31
|
+
name: 'ESLint Disable Comment',
|
|
32
|
+
description: 'ESLint disable comments hiding issues',
|
|
33
|
+
detector: (content) => /eslint-disable/.test(content),
|
|
34
|
+
severity: 'high',
|
|
35
|
+
message: 'Fix the underlying issue instead of disabling ESLint.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'hardcoded-string',
|
|
39
|
+
name: 'Hardcoded UI String',
|
|
40
|
+
description: 'UI strings not using i18n',
|
|
41
|
+
detector: (content, filePath) => filePath.includes('/components/') &&
|
|
42
|
+
/>\s*["'][A-Z][a-z]/.test(content) &&
|
|
43
|
+
!/\{t\(/.test(content),
|
|
44
|
+
severity: 'medium',
|
|
45
|
+
message: 'Use i18n translation function for UI strings.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'direct-db-query',
|
|
49
|
+
name: 'Direct DB in Component',
|
|
50
|
+
description: 'Database queries in React components',
|
|
51
|
+
detector: (content, filePath) => filePath.includes('/components/') &&
|
|
52
|
+
(/db\.select\(/.test(content) || /db\.insert\(/.test(content)),
|
|
53
|
+
severity: 'high',
|
|
54
|
+
message: 'Move database queries to TRPC routers.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'missing-error-handling',
|
|
58
|
+
name: 'Missing Error Handling',
|
|
59
|
+
description: 'Async operations without try/catch',
|
|
60
|
+
detector: (content) => /await\s+\w+\(/.test(content) && !/try\s*\{/.test(content),
|
|
61
|
+
severity: 'medium',
|
|
62
|
+
message: 'Add error handling for async operations.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'inline-style',
|
|
66
|
+
name: 'Inline Style',
|
|
67
|
+
description: 'Inline styles instead of Tailwind classes',
|
|
68
|
+
detector: (content) => /style=\{\{/.test(content),
|
|
69
|
+
severity: 'low',
|
|
70
|
+
message: 'Use Tailwind CSS classes instead of inline styles.',
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
export class PatternTracker {
|
|
74
|
+
patterns = new Map();
|
|
75
|
+
threshold;
|
|
76
|
+
constructor(threshold = 3) {
|
|
77
|
+
this.threshold = threshold;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Track a pattern occurrence
|
|
81
|
+
*/
|
|
82
|
+
track(patternId, file, line, code) {
|
|
83
|
+
const definition = BUILTIN_PATTERNS.find(p => p.id === patternId);
|
|
84
|
+
if (!definition)
|
|
85
|
+
return null;
|
|
86
|
+
const now = new Date();
|
|
87
|
+
const occurrence = { file, line, code, timestamp: now };
|
|
88
|
+
let tracked = this.patterns.get(patternId);
|
|
89
|
+
if (tracked) {
|
|
90
|
+
// Check if this exact occurrence already exists
|
|
91
|
+
const exists = tracked.occurrences.some(o => o.file === file && o.line === line);
|
|
92
|
+
if (!exists) {
|
|
93
|
+
tracked.occurrences.push(occurrence);
|
|
94
|
+
tracked.lastSeen = now;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
tracked = {
|
|
99
|
+
definition,
|
|
100
|
+
occurrences: [occurrence],
|
|
101
|
+
firstSeen: now,
|
|
102
|
+
lastSeen: now,
|
|
103
|
+
};
|
|
104
|
+
this.patterns.set(patternId, tracked);
|
|
105
|
+
}
|
|
106
|
+
return tracked;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get all patterns that have reached threshold
|
|
110
|
+
*/
|
|
111
|
+
getTriggeredPatterns() {
|
|
112
|
+
return Array.from(this.patterns.values())
|
|
113
|
+
.filter(p => p.occurrences.length >= this.threshold);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all tracked patterns
|
|
117
|
+
*/
|
|
118
|
+
getAllPatterns() {
|
|
119
|
+
return Array.from(this.patterns.values());
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Clear tracking for a pattern (after auto-improvement)
|
|
123
|
+
*/
|
|
124
|
+
clear(patternId) {
|
|
125
|
+
this.patterns.delete(patternId);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get current stats
|
|
129
|
+
*/
|
|
130
|
+
getStats() {
|
|
131
|
+
const all = this.getAllPatterns();
|
|
132
|
+
const triggered = this.getTriggeredPatterns();
|
|
133
|
+
return {
|
|
134
|
+
total: all.length,
|
|
135
|
+
triggered: triggered.length,
|
|
136
|
+
patterns: all.map(p => `${p.definition.id} (${p.occurrences.length})`),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// =============================================================================
|
|
141
|
+
// PATTERN DETECTOR CLASS
|
|
142
|
+
// =============================================================================
|
|
143
|
+
export class PatternDetector {
|
|
144
|
+
tracker;
|
|
145
|
+
customPatterns = [];
|
|
146
|
+
constructor(config) {
|
|
147
|
+
const threshold = config?.autoImprovement?.violationThreshold ?? 3;
|
|
148
|
+
this.tracker = new PatternTracker(threshold);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Add custom pattern definition
|
|
152
|
+
*/
|
|
153
|
+
addPattern(pattern) {
|
|
154
|
+
this.customPatterns.push(pattern);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Scan content for all patterns
|
|
158
|
+
*/
|
|
159
|
+
scan(content, filePath) {
|
|
160
|
+
const detected = [];
|
|
161
|
+
const allPatterns = [...BUILTIN_PATTERNS, ...this.customPatterns];
|
|
162
|
+
// Split content into lines for line numbers
|
|
163
|
+
const lines = content.split('\n');
|
|
164
|
+
for (const pattern of allPatterns) {
|
|
165
|
+
// Check each line
|
|
166
|
+
for (let i = 0; i < lines.length; i++) {
|
|
167
|
+
const line = lines[i];
|
|
168
|
+
if (pattern.detector(line, filePath)) {
|
|
169
|
+
// Track the occurrence
|
|
170
|
+
const tracked = this.tracker.track(pattern.id, filePath, i + 1, line.trim().slice(0, 100));
|
|
171
|
+
if (tracked) {
|
|
172
|
+
detected.push({
|
|
173
|
+
patternId: pattern.id,
|
|
174
|
+
description: pattern.description,
|
|
175
|
+
count: tracked.occurrences.length,
|
|
176
|
+
severity: pattern.severity,
|
|
177
|
+
files: [...new Set(tracked.occurrences.map(o => o.file))],
|
|
178
|
+
needsAutoImprove: tracked.occurrences.length >= 3,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return detected;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get detection results
|
|
188
|
+
*/
|
|
189
|
+
getResults() {
|
|
190
|
+
const all = this.tracker.getAllPatterns();
|
|
191
|
+
const triggered = this.tracker.getTriggeredPatterns();
|
|
192
|
+
const patterns = all.map(t => ({
|
|
193
|
+
patternId: t.definition.id,
|
|
194
|
+
description: t.definition.description,
|
|
195
|
+
count: t.occurrences.length,
|
|
196
|
+
severity: t.definition.severity,
|
|
197
|
+
files: [...new Set(t.occurrences.map(o => o.file))],
|
|
198
|
+
needsAutoImprove: t.occurrences.length >= 3,
|
|
199
|
+
}));
|
|
200
|
+
return {
|
|
201
|
+
total: patterns.length,
|
|
202
|
+
patterns: patterns.sort((a, b) => b.count - a.count),
|
|
203
|
+
pending: triggered.length,
|
|
204
|
+
triggered: patterns.filter(p => p.needsAutoImprove),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get pattern by ID
|
|
209
|
+
*/
|
|
210
|
+
getPattern(patternId) {
|
|
211
|
+
return BUILTIN_PATTERNS.find(p => p.id === patternId) ??
|
|
212
|
+
this.customPatterns.find(p => p.id === patternId);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Mark pattern as handled (clear tracking)
|
|
216
|
+
*/
|
|
217
|
+
markHandled(patternId) {
|
|
218
|
+
this.tracker.clear(patternId);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// =============================================================================
|
|
222
|
+
// STANDALONE SCAN FUNCTION
|
|
223
|
+
// =============================================================================
|
|
224
|
+
/**
|
|
225
|
+
* Scan a file for patterns (standalone)
|
|
226
|
+
*/
|
|
227
|
+
export async function scanFile(filePath, content, threshold = 3) {
|
|
228
|
+
const detector = new PatternDetector({ autoImprovement: { violationThreshold: threshold } });
|
|
229
|
+
return detector.scan(content, filePath);
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=pattern-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-detector.js","sourceRoot":"","sources":["../../src/auto-improve/pattern-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CMP Memory System CLI
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* init - Initialize memory system in project
|
|
7
|
+
* generate - Generate embedding registry
|
|
8
|
+
* scan - Scan for patterns
|
|
9
|
+
* improve - Run auto-improvement
|
|
10
|
+
* status - Show memory system status
|
|
11
|
+
* tasks - View and manage tasks
|
|
12
|
+
* ideas - View captured ideas
|
|
13
|
+
* plan - Manage work plans
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
|