cmp-standards 2.7.0 → 2.8.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.
Files changed (162) hide show
  1. package/README.md +633 -633
  2. package/dist/cache/EmbeddingCache.d.ts +110 -0
  3. package/dist/cache/EmbeddingCache.d.ts.map +1 -0
  4. package/dist/cache/EmbeddingCache.js +239 -0
  5. package/dist/cache/EmbeddingCache.js.map +1 -0
  6. package/dist/cache/index.d.ts +6 -0
  7. package/dist/cache/index.d.ts.map +1 -0
  8. package/dist/cache/index.js +6 -0
  9. package/dist/cache/index.js.map +1 -0
  10. package/dist/cli/index.js +0 -0
  11. package/dist/db/cloud.d.ts +1 -0
  12. package/dist/db/cloud.d.ts.map +1 -1
  13. package/dist/db/drizzle-client.d.ts +10 -1
  14. package/dist/db/drizzle-client.d.ts.map +1 -1
  15. package/dist/db/drizzle-client.js +57 -3
  16. package/dist/db/drizzle-client.js.map +1 -1
  17. package/dist/db/errors.d.ts +13 -1
  18. package/dist/db/errors.d.ts.map +1 -1
  19. package/dist/db/errors.js +49 -5
  20. package/dist/db/errors.js.map +1 -1
  21. package/dist/db/migrations.d.ts +42 -0
  22. package/dist/db/migrations.d.ts.map +1 -0
  23. package/dist/db/migrations.js +173 -0
  24. package/dist/db/migrations.js.map +1 -0
  25. package/dist/db/turso-client.d.ts +15 -3
  26. package/dist/db/turso-client.d.ts.map +1 -1
  27. package/dist/db/turso-client.js +50 -39
  28. package/dist/db/turso-client.js.map +1 -1
  29. package/dist/eslint/rules/no-async-useeffect.js +6 -6
  30. package/dist/events/EventBus.d.ts +97 -0
  31. package/dist/events/EventBus.d.ts.map +1 -0
  32. package/dist/events/EventBus.js +256 -0
  33. package/dist/events/EventBus.js.map +1 -0
  34. package/dist/events/index.d.ts +7 -0
  35. package/dist/events/index.d.ts.map +1 -0
  36. package/dist/events/index.js +9 -0
  37. package/dist/events/index.js.map +1 -0
  38. package/dist/events/types.d.ts +989 -0
  39. package/dist/events/types.d.ts.map +1 -0
  40. package/dist/events/types.js +136 -0
  41. package/dist/events/types.js.map +1 -0
  42. package/dist/experts/ConsensusEngine.d.ts +57 -0
  43. package/dist/experts/ConsensusEngine.d.ts.map +1 -0
  44. package/dist/experts/ConsensusEngine.js +146 -0
  45. package/dist/experts/ConsensusEngine.js.map +1 -0
  46. package/dist/experts/ExpertPanelService.d.ts +84 -0
  47. package/dist/experts/ExpertPanelService.d.ts.map +1 -0
  48. package/dist/experts/ExpertPanelService.js +204 -0
  49. package/dist/experts/ExpertPanelService.js.map +1 -0
  50. package/dist/experts/ExpertRouter.d.ts +68 -0
  51. package/dist/experts/ExpertRouter.d.ts.map +1 -0
  52. package/dist/experts/ExpertRouter.js +374 -0
  53. package/dist/experts/ExpertRouter.js.map +1 -0
  54. package/dist/experts/VoteCollector.d.ts +58 -0
  55. package/dist/experts/VoteCollector.d.ts.map +1 -0
  56. package/dist/experts/VoteCollector.js +146 -0
  57. package/dist/experts/VoteCollector.js.map +1 -0
  58. package/dist/experts/index.d.ts +9 -0
  59. package/dist/experts/index.d.ts.map +1 -0
  60. package/dist/experts/index.js +13 -0
  61. package/dist/experts/index.js.map +1 -0
  62. package/dist/hooks/cloud-pre-tool-use.js +20 -20
  63. package/dist/hooks/expert-review.d.ts +74 -0
  64. package/dist/hooks/expert-review.d.ts.map +1 -0
  65. package/dist/hooks/expert-review.js +220 -0
  66. package/dist/hooks/expert-review.js.map +1 -0
  67. package/dist/hooks/index.d.ts +1 -0
  68. package/dist/hooks/index.d.ts.map +1 -1
  69. package/dist/hooks/index.js +2 -0
  70. package/dist/hooks/index.js.map +1 -1
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +22 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/interfaces/index.d.ts +450 -0
  76. package/dist/interfaces/index.d.ts.map +1 -0
  77. package/dist/interfaces/index.js +50 -0
  78. package/dist/interfaces/index.js.map +1 -0
  79. package/dist/mcp/schemas.d.ts +278 -0
  80. package/dist/mcp/schemas.d.ts.map +1 -0
  81. package/dist/mcp/schemas.js +166 -0
  82. package/dist/mcp/schemas.js.map +1 -0
  83. package/dist/mcp/server.d.ts.map +1 -1
  84. package/dist/mcp/server.js +14 -3
  85. package/dist/mcp/server.js.map +1 -1
  86. package/dist/patterns/feedback-loop.d.ts +264 -0
  87. package/dist/patterns/feedback-loop.d.ts.map +1 -0
  88. package/dist/patterns/feedback-loop.js +329 -0
  89. package/dist/patterns/feedback-loop.js.map +1 -0
  90. package/dist/patterns/index.d.ts +9 -0
  91. package/dist/patterns/index.d.ts.map +1 -0
  92. package/dist/patterns/index.js +9 -0
  93. package/dist/patterns/index.js.map +1 -0
  94. package/dist/patterns/lifecycle.d.ts +88 -0
  95. package/dist/patterns/lifecycle.d.ts.map +1 -0
  96. package/dist/patterns/lifecycle.js +284 -0
  97. package/dist/patterns/lifecycle.js.map +1 -0
  98. package/dist/patterns/registry.d.ts +142 -0
  99. package/dist/patterns/registry.d.ts.map +1 -0
  100. package/dist/patterns/registry.js +442 -0
  101. package/dist/patterns/registry.js.map +1 -0
  102. package/dist/performance/Debouncer.d.ts +91 -0
  103. package/dist/performance/Debouncer.d.ts.map +1 -0
  104. package/dist/performance/Debouncer.js +198 -0
  105. package/dist/performance/Debouncer.js.map +1 -0
  106. package/dist/performance/MemoryDecay.d.ts +82 -0
  107. package/dist/performance/MemoryDecay.d.ts.map +1 -0
  108. package/dist/performance/MemoryDecay.js +153 -0
  109. package/dist/performance/MemoryDecay.js.map +1 -0
  110. package/dist/performance/index.d.ts +7 -0
  111. package/dist/performance/index.d.ts.map +1 -0
  112. package/dist/performance/index.js +9 -0
  113. package/dist/performance/index.js.map +1 -0
  114. package/dist/schema/expert-types.d.ts +395 -0
  115. package/dist/schema/expert-types.d.ts.map +1 -0
  116. package/dist/schema/expert-types.js +250 -0
  117. package/dist/schema/expert-types.js.map +1 -0
  118. package/dist/services/ContextGenerator.js +7 -7
  119. package/dist/services/PlanManager.d.ts +1 -1
  120. package/dist/services/PlanManager.d.ts.map +1 -1
  121. package/dist/services/PlanManager.js +26 -6
  122. package/dist/services/PlanManager.js.map +1 -1
  123. package/dist/services/ProjectScaffold.js +76 -76
  124. package/dist/services/memory-router.js +35 -35
  125. package/dist/services/pattern-tracker.js +90 -90
  126. package/dist/services/semantic-search.js +2 -2
  127. package/package.json +105 -104
  128. package/standards/README.md +50 -50
  129. package/standards/experts/expert-routing.md +215 -215
  130. package/standards/general/code-quality.md +86 -86
  131. package/standards/general/memory-usage.md +205 -205
  132. package/standards/general/sync-workflow.md +235 -235
  133. package/standards/general/workflow.md +82 -82
  134. package/standards/hooks/mandatory-tracking.md +446 -446
  135. package/standards/infrastructure/cloud-database.md +287 -287
  136. package/standards/mcp/server-design.md +243 -243
  137. package/standards/mcp/tool-patterns.md +354 -354
  138. package/standards/skills/skill-structure.md +286 -286
  139. package/standards/skills/workflow-design.md +323 -323
  140. package/standards/tools/tool-design.md +297 -297
  141. package/templates/agents/architecture-expert.md +61 -61
  142. package/templates/agents/database-expert.md +62 -62
  143. package/templates/agents/documentation-expert.md +57 -57
  144. package/templates/agents/memory-expert.md +88 -88
  145. package/templates/agents/performance-expert.md +61 -61
  146. package/templates/agents/security-expert.md +59 -59
  147. package/templates/agents/ux-expert.md +63 -63
  148. package/templates/agents/worker.md +75 -75
  149. package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
  150. package/templates/claude-settings.json +72 -72
  151. package/templates/commands/experts.md +138 -138
  152. package/templates/hooks/README.md +158 -158
  153. package/templates/hooks/project.config.json.template +77 -77
  154. package/templates/hooks/settings.local.json.template +57 -57
  155. package/templates/memory-config.json +56 -56
  156. package/templates/memory-config.schema.json +212 -212
  157. package/templates/settings.json +58 -58
  158. package/templates/skills/continue.md +205 -205
  159. package/templates/workflows/business-improvement.md +264 -264
  160. package/templates/workflows/expert-review.md +153 -153
  161. package/templates/workflows/internal-app.md +245 -245
  162. package/templates/workflows/sync-docs.md +187 -187
@@ -0,0 +1,264 @@
1
+ /**
2
+ * @file Learning Feedback Loop
3
+ * @description Connects expert panel votes to pattern detection for continuous improvement
4
+ *
5
+ * The feedback loop works as follows:
6
+ * 1. Expert panel reviews code
7
+ * 2. Each expert vote (APPROVE/REJECT/WARN) provides signal
8
+ * 3. Rejected findings increase pattern confidence
9
+ * 4. Approved findings with no issues may mark false positives
10
+ * 5. Patterns automatically adjust sensitivity based on feedback
11
+ *
12
+ * Usage:
13
+ * ```typescript
14
+ * const loop = getLearningFeedbackLoop('PANEL')
15
+ * await loop.processExpertReview(review)
16
+ * await loop.processPanelConsensus(consensus)
17
+ * ```
18
+ *
19
+ * @version 1.0.0
20
+ */
21
+ import { z } from 'zod';
22
+ import { type PatternStatus } from './registry.js';
23
+ import type { DevSystem } from '../types/index.js';
24
+ export declare const ExpertVoteSchema: z.ZodEnum<["APPROVE", "REJECT", "WARN", "ABSTAIN"]>;
25
+ export type ExpertVote = z.infer<typeof ExpertVoteSchema>;
26
+ export declare const ExpertTypeSchema: z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>;
27
+ export type ExpertType = z.infer<typeof ExpertTypeSchema>;
28
+ export declare const ExpertFindingSchema: z.ZodObject<{
29
+ patternId: z.ZodString;
30
+ filePath: z.ZodString;
31
+ line: z.ZodDefault<z.ZodNumber>;
32
+ code: z.ZodDefault<z.ZodString>;
33
+ severity: z.ZodDefault<z.ZodEnum<["critical", "high", "medium", "low"]>>;
34
+ description: z.ZodString;
35
+ expertType: z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>;
36
+ }, "strip", z.ZodTypeAny, {
37
+ code: string;
38
+ patternId: string;
39
+ description: string;
40
+ line: number;
41
+ severity: "critical" | "high" | "medium" | "low";
42
+ filePath: string;
43
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
44
+ }, {
45
+ patternId: string;
46
+ description: string;
47
+ filePath: string;
48
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
49
+ code?: string | undefined;
50
+ line?: number | undefined;
51
+ severity?: "critical" | "high" | "medium" | "low" | undefined;
52
+ }>;
53
+ export type ExpertFinding = z.infer<typeof ExpertFindingSchema>;
54
+ export declare const ExpertReviewResultSchema: z.ZodObject<{
55
+ expertType: z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>;
56
+ vote: z.ZodEnum<["APPROVE", "REJECT", "WARN", "ABSTAIN"]>;
57
+ findings: z.ZodArray<z.ZodObject<{
58
+ patternId: z.ZodString;
59
+ filePath: z.ZodString;
60
+ line: z.ZodDefault<z.ZodNumber>;
61
+ code: z.ZodDefault<z.ZodString>;
62
+ severity: z.ZodDefault<z.ZodEnum<["critical", "high", "medium", "low"]>>;
63
+ description: z.ZodString;
64
+ expertType: z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ code: string;
67
+ patternId: string;
68
+ description: string;
69
+ line: number;
70
+ severity: "critical" | "high" | "medium" | "low";
71
+ filePath: string;
72
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
73
+ }, {
74
+ patternId: string;
75
+ description: string;
76
+ filePath: string;
77
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
78
+ code?: string | undefined;
79
+ line?: number | undefined;
80
+ severity?: "critical" | "high" | "medium" | "low" | undefined;
81
+ }>, "many">;
82
+ reasoning: z.ZodOptional<z.ZodString>;
83
+ timestamp: z.ZodString;
84
+ }, "strip", z.ZodTypeAny, {
85
+ timestamp: string;
86
+ vote: "APPROVE" | "REJECT" | "WARN" | "ABSTAIN";
87
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
88
+ findings: {
89
+ code: string;
90
+ patternId: string;
91
+ description: string;
92
+ line: number;
93
+ severity: "critical" | "high" | "medium" | "low";
94
+ filePath: string;
95
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
96
+ }[];
97
+ reasoning?: string | undefined;
98
+ }, {
99
+ timestamp: string;
100
+ vote: "APPROVE" | "REJECT" | "WARN" | "ABSTAIN";
101
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
102
+ findings: {
103
+ patternId: string;
104
+ description: string;
105
+ filePath: string;
106
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
107
+ code?: string | undefined;
108
+ line?: number | undefined;
109
+ severity?: "critical" | "high" | "medium" | "low" | undefined;
110
+ }[];
111
+ reasoning?: string | undefined;
112
+ }>;
113
+ export type ExpertReviewResult = z.infer<typeof ExpertReviewResultSchema>;
114
+ export declare const PanelConsensusSchema: z.ZodObject<{
115
+ approved: z.ZodBoolean;
116
+ votes: z.ZodRecord<z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>, z.ZodEnum<["APPROVE", "REJECT", "WARN", "ABSTAIN"]>>;
117
+ allFindings: z.ZodArray<z.ZodObject<{
118
+ patternId: z.ZodString;
119
+ filePath: z.ZodString;
120
+ line: z.ZodDefault<z.ZodNumber>;
121
+ code: z.ZodDefault<z.ZodString>;
122
+ severity: z.ZodDefault<z.ZodEnum<["critical", "high", "medium", "low"]>>;
123
+ description: z.ZodString;
124
+ expertType: z.ZodEnum<["security", "performance", "architecture", "ux", "database", "documentation", "memory"]>;
125
+ }, "strip", z.ZodTypeAny, {
126
+ code: string;
127
+ patternId: string;
128
+ description: string;
129
+ line: number;
130
+ severity: "critical" | "high" | "medium" | "low";
131
+ filePath: string;
132
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
133
+ }, {
134
+ patternId: string;
135
+ description: string;
136
+ filePath: string;
137
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
138
+ code?: string | undefined;
139
+ line?: number | undefined;
140
+ severity?: "critical" | "high" | "medium" | "low" | undefined;
141
+ }>, "many">;
142
+ correlationId: z.ZodString;
143
+ filesReviewed: z.ZodArray<z.ZodString, "many">;
144
+ isCritical: z.ZodBoolean;
145
+ }, "strip", z.ZodTypeAny, {
146
+ correlationId: string;
147
+ votes: Partial<Record<"memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database", "APPROVE" | "REJECT" | "WARN" | "ABSTAIN">>;
148
+ filesReviewed: string[];
149
+ approved: boolean;
150
+ allFindings: {
151
+ code: string;
152
+ patternId: string;
153
+ description: string;
154
+ line: number;
155
+ severity: "critical" | "high" | "medium" | "low";
156
+ filePath: string;
157
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
158
+ }[];
159
+ isCritical: boolean;
160
+ }, {
161
+ correlationId: string;
162
+ votes: Partial<Record<"memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database", "APPROVE" | "REJECT" | "WARN" | "ABSTAIN">>;
163
+ filesReviewed: string[];
164
+ approved: boolean;
165
+ allFindings: {
166
+ patternId: string;
167
+ description: string;
168
+ filePath: string;
169
+ expertType: "memory" | "documentation" | "performance" | "security" | "ux" | "architecture" | "database";
170
+ code?: string | undefined;
171
+ line?: number | undefined;
172
+ severity?: "critical" | "high" | "medium" | "low" | undefined;
173
+ }[];
174
+ isCritical: boolean;
175
+ }>;
176
+ export type PanelConsensus = z.infer<typeof PanelConsensusSchema>;
177
+ export interface FeedbackLoopConfig {
178
+ /** Minimum findings to trigger pattern confirmation */
179
+ confirmationThreshold: number;
180
+ /** Minimum consecutive approvals to reduce pattern sensitivity */
181
+ falsePositiveThreshold: number;
182
+ /** Enable auto-adjustment of pattern sensitivity */
183
+ autoAdjust: boolean;
184
+ /** Debug logging */
185
+ debug: boolean;
186
+ }
187
+ export declare class LearningFeedbackLoop {
188
+ private config;
189
+ private lifecycle;
190
+ private registry;
191
+ private system;
192
+ private patternFeedback;
193
+ constructor(system: DevSystem, config?: Partial<FeedbackLoopConfig>);
194
+ /**
195
+ * Process an individual expert review
196
+ */
197
+ processExpertReview(review: ExpertReviewResult): Promise<void>;
198
+ /**
199
+ * Process panel consensus result
200
+ */
201
+ processPanelConsensus(consensus: PanelConsensus): Promise<void>;
202
+ /**
203
+ * Record a finding and update pattern feedback
204
+ */
205
+ private recordFinding;
206
+ /**
207
+ * Evaluate if findings might be false positives
208
+ */
209
+ private evaluatePotentialFalsePositives;
210
+ /**
211
+ * Confirm pattern findings when code is rejected
212
+ */
213
+ private confirmPatternFindings;
214
+ /**
215
+ * Check for regressions - patterns that were fixed but reappear
216
+ */
217
+ private checkForRegressions;
218
+ /**
219
+ * Get feedback statistics for a pattern
220
+ */
221
+ getPatternStats(patternId: string): {
222
+ confirmations: number;
223
+ falsePositives: number;
224
+ accuracy: number;
225
+ expertVotes: Array<{
226
+ expert: ExpertType;
227
+ vote: ExpertVote;
228
+ }>;
229
+ } | null;
230
+ /**
231
+ * Get overall learning statistics
232
+ */
233
+ getStats(): {
234
+ totalPatterns: number;
235
+ totalConfirmations: number;
236
+ totalFalsePositives: number;
237
+ overallAccuracy: number;
238
+ patternsByStatus: Record<PatternStatus, number>;
239
+ };
240
+ /**
241
+ * Submit manual feedback for a pattern
242
+ */
243
+ submitFeedback(patternId: string, feedback: 'confirmed' | 'false_positive', context?: {
244
+ file?: string;
245
+ reason?: string;
246
+ }): Promise<void>;
247
+ /**
248
+ * Reset feedback for a pattern
249
+ */
250
+ resetPattern(patternId: string): void;
251
+ /**
252
+ * Clear all feedback data
253
+ */
254
+ clear(): void;
255
+ }
256
+ /**
257
+ * Get or create the global LearningFeedbackLoop instance
258
+ */
259
+ export declare function getLearningFeedbackLoop(system: DevSystem, config?: Partial<FeedbackLoopConfig>): LearningFeedbackLoop;
260
+ /**
261
+ * Reset the global feedback loop (useful for testing)
262
+ */
263
+ export declare function resetLearningFeedbackLoop(): void;
264
+ //# sourceMappingURL=feedback-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-loop.d.ts","sourceRoot":"","sources":["../../src/patterns/feedback-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,329 @@
1
+ /**
2
+ * @file Learning Feedback Loop
3
+ * @description Connects expert panel votes to pattern detection for continuous improvement
4
+ *
5
+ * The feedback loop works as follows:
6
+ * 1. Expert panel reviews code
7
+ * 2. Each expert vote (APPROVE/REJECT/WARN) provides signal
8
+ * 3. Rejected findings increase pattern confidence
9
+ * 4. Approved findings with no issues may mark false positives
10
+ * 5. Patterns automatically adjust sensitivity based on feedback
11
+ *
12
+ * Usage:
13
+ * ```typescript
14
+ * const loop = getLearningFeedbackLoop('PANEL')
15
+ * await loop.processExpertReview(review)
16
+ * await loop.processPanelConsensus(consensus)
17
+ * ```
18
+ *
19
+ * @version 1.0.0
20
+ */
21
+ import { z } from 'zod';
22
+ import { getPatternRegistry } from './registry.js';
23
+ import { getPatternLifecycleService } from './lifecycle.js';
24
+ // =============================================================================
25
+ // Types
26
+ // =============================================================================
27
+ export const ExpertVoteSchema = z.enum(['APPROVE', 'REJECT', 'WARN', 'ABSTAIN']);
28
+ export const ExpertTypeSchema = z.enum([
29
+ 'security',
30
+ 'performance',
31
+ 'architecture',
32
+ 'ux',
33
+ 'database',
34
+ 'documentation',
35
+ 'memory',
36
+ ]);
37
+ export const ExpertFindingSchema = z.object({
38
+ patternId: z.string(),
39
+ filePath: z.string(),
40
+ line: z.number().default(0),
41
+ code: z.string().default(''),
42
+ severity: z.enum(['critical', 'high', 'medium', 'low']).default('medium'),
43
+ description: z.string(),
44
+ expertType: ExpertTypeSchema,
45
+ });
46
+ export const ExpertReviewResultSchema = z.object({
47
+ expertType: ExpertTypeSchema,
48
+ vote: ExpertVoteSchema,
49
+ findings: z.array(ExpertFindingSchema),
50
+ reasoning: z.string().optional(),
51
+ timestamp: z.string(),
52
+ });
53
+ export const PanelConsensusSchema = z.object({
54
+ approved: z.boolean(),
55
+ votes: z.record(ExpertTypeSchema, ExpertVoteSchema),
56
+ allFindings: z.array(ExpertFindingSchema),
57
+ correlationId: z.string(),
58
+ filesReviewed: z.array(z.string()),
59
+ isCritical: z.boolean(),
60
+ });
61
+ const DEFAULT_CONFIG = {
62
+ confirmationThreshold: 3,
63
+ falsePositiveThreshold: 5,
64
+ autoAdjust: true,
65
+ debug: false,
66
+ };
67
+ // =============================================================================
68
+ // Learning Feedback Loop Service
69
+ // =============================================================================
70
+ export class LearningFeedbackLoop {
71
+ config;
72
+ lifecycle;
73
+ registry = getPatternRegistry();
74
+ system;
75
+ // Track pattern feedback over sessions
76
+ patternFeedback = new Map();
77
+ constructor(system, config = {}) {
78
+ this.system = system;
79
+ this.config = { ...DEFAULT_CONFIG, ...config };
80
+ this.lifecycle = getPatternLifecycleService(system);
81
+ }
82
+ /**
83
+ * Process an individual expert review
84
+ */
85
+ async processExpertReview(review) {
86
+ if (this.config.debug) {
87
+ console.log(`[FeedbackLoop] Processing ${review.expertType} review: ${review.vote}`);
88
+ }
89
+ for (const finding of review.findings) {
90
+ await this.recordFinding(finding, review.vote);
91
+ }
92
+ }
93
+ /**
94
+ * Process panel consensus result
95
+ */
96
+ async processPanelConsensus(consensus) {
97
+ if (this.config.debug) {
98
+ console.log(`[FeedbackLoop] Processing consensus: ${consensus.approved ? 'APPROVED' : 'REJECTED'} ` +
99
+ `(${consensus.allFindings.length} findings)`);
100
+ }
101
+ // Group findings by pattern
102
+ const findingsByPattern = new Map();
103
+ for (const finding of consensus.allFindings) {
104
+ const existing = findingsByPattern.get(finding.patternId) || [];
105
+ existing.push(finding);
106
+ findingsByPattern.set(finding.patternId, existing);
107
+ }
108
+ // Process each pattern's findings
109
+ for (const [patternId, findings] of findingsByPattern) {
110
+ if (consensus.approved) {
111
+ // If approved despite findings, might be false positives
112
+ await this.evaluatePotentialFalsePositives(patternId, findings, consensus);
113
+ }
114
+ else {
115
+ // If rejected, these findings are confirmed issues
116
+ await this.confirmPatternFindings(patternId, findings);
117
+ }
118
+ }
119
+ // Check for patterns that were expected but not found (potential regression)
120
+ await this.checkForRegressions(consensus.filesReviewed);
121
+ if (this.config.debug) {
122
+ console.log(`[FeedbackLoop] Learning complete: ${findingsByPattern.size} patterns processed, ` +
123
+ `consensus=${consensus.approved ? 'APPROVED' : 'REJECTED'}`);
124
+ }
125
+ }
126
+ /**
127
+ * Record a finding and update pattern feedback
128
+ */
129
+ async recordFinding(finding, vote) {
130
+ const { patternId, expertType } = finding;
131
+ // Get or create feedback entry
132
+ let feedback = this.patternFeedback.get(patternId);
133
+ if (!feedback) {
134
+ feedback = {
135
+ confirmations: 0,
136
+ falsePositives: 0,
137
+ lastSeen: new Date().toISOString(),
138
+ expertVotes: [],
139
+ };
140
+ this.patternFeedback.set(patternId, feedback);
141
+ }
142
+ // Record vote
143
+ feedback.expertVotes.push({
144
+ expert: expertType,
145
+ vote,
146
+ timestamp: new Date().toISOString(),
147
+ });
148
+ feedback.lastSeen = new Date().toISOString();
149
+ // Track occurrence in lifecycle
150
+ await this.lifecycle.track({
151
+ patternId,
152
+ file: finding.filePath,
153
+ line: finding.line ?? 0,
154
+ code: finding.code ?? '',
155
+ timestamp: new Date().toISOString(),
156
+ });
157
+ // If REJECT, this is a confirmed issue
158
+ if (vote === 'REJECT') {
159
+ feedback.confirmations++;
160
+ await this.registry.recordFeedback(patternId, 'confirmed');
161
+ if (this.config.debug) {
162
+ console.log(`[FeedbackLoop] Pattern ${patternId} confirmed (${feedback.confirmations}x)`);
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Evaluate if findings might be false positives
168
+ */
169
+ async evaluatePotentialFalsePositives(patternId, findings, consensus) {
170
+ // Count how many experts approved despite this pattern being found
171
+ const approvalCount = Object.values(consensus.votes).filter(v => v === 'APPROVE').length;
172
+ const totalVotes = Object.keys(consensus.votes).length;
173
+ // If strong consensus to approve, these might be false positives
174
+ if (approvalCount >= totalVotes * 0.8) {
175
+ const feedback = this.patternFeedback.get(patternId);
176
+ if (feedback) {
177
+ feedback.falsePositives++;
178
+ // Check if we should reduce sensitivity
179
+ if (this.config.autoAdjust && feedback.falsePositives >= this.config.falsePositiveThreshold) {
180
+ await this.lifecycle.adjustSensitivity(patternId, 'too_sensitive');
181
+ if (this.config.debug) {
182
+ console.log(`[FeedbackLoop] Pattern ${patternId} marked as too sensitive`);
183
+ }
184
+ // Reset counter
185
+ feedback.falsePositives = 0;
186
+ }
187
+ }
188
+ await this.registry.recordFeedback(patternId, 'false_positive');
189
+ }
190
+ }
191
+ /**
192
+ * Confirm pattern findings when code is rejected
193
+ */
194
+ async confirmPatternFindings(patternId, findings) {
195
+ const feedback = this.patternFeedback.get(patternId);
196
+ if (feedback) {
197
+ feedback.confirmations += findings.length;
198
+ // Check if pattern should be promoted
199
+ if (feedback.confirmations >= this.config.confirmationThreshold) {
200
+ await this.lifecycle.confirmPattern(patternId);
201
+ // Check if we should generate ESLint rule
202
+ const rule = this.registry.generateEslintRule(patternId);
203
+ if (rule && this.config.debug) {
204
+ console.log(`[FeedbackLoop] Generated ESLint rule for ${patternId}`);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * Check for regressions - patterns that were fixed but reappear
211
+ */
212
+ async checkForRegressions(filesReviewed) {
213
+ for (const file of filesReviewed) {
214
+ // Get active patterns that should be checked
215
+ const activePatterns = this.registry.getActive();
216
+ for (const pattern of activePatterns) {
217
+ if (pattern.status === 'implemented') {
218
+ const regression = await this.lifecycle.detectRegression(pattern.id);
219
+ if (regression && this.config.debug) {
220
+ console.log(`[FeedbackLoop] Regression detected: ${pattern.id} in ${file} - ` +
221
+ `${regression.message} (severity: ${regression.severity})`);
222
+ }
223
+ }
224
+ }
225
+ }
226
+ }
227
+ /**
228
+ * Get feedback statistics for a pattern
229
+ */
230
+ getPatternStats(patternId) {
231
+ const feedback = this.patternFeedback.get(patternId);
232
+ if (!feedback)
233
+ return null;
234
+ const total = feedback.confirmations + feedback.falsePositives;
235
+ const accuracy = total > 0 ? feedback.confirmations / total : 0;
236
+ return {
237
+ confirmations: feedback.confirmations,
238
+ falsePositives: feedback.falsePositives,
239
+ accuracy: Math.round(accuracy * 100) / 100,
240
+ expertVotes: feedback.expertVotes.map(v => ({
241
+ expert: v.expert,
242
+ vote: v.vote,
243
+ })),
244
+ };
245
+ }
246
+ /**
247
+ * Get overall learning statistics
248
+ */
249
+ getStats() {
250
+ let totalConfirmations = 0;
251
+ let totalFalsePositives = 0;
252
+ for (const feedback of this.patternFeedback.values()) {
253
+ totalConfirmations += feedback.confirmations;
254
+ totalFalsePositives += feedback.falsePositives;
255
+ }
256
+ const total = totalConfirmations + totalFalsePositives;
257
+ const accuracy = total > 0 ? totalConfirmations / total : 0;
258
+ // Count patterns by status
259
+ const patternsByStatus = {
260
+ active: 0,
261
+ triggered: 0,
262
+ implemented: 0,
263
+ retired: 0,
264
+ };
265
+ for (const pattern of this.registry.getAll()) {
266
+ patternsByStatus[pattern.status]++;
267
+ }
268
+ return {
269
+ totalPatterns: this.patternFeedback.size,
270
+ totalConfirmations,
271
+ totalFalsePositives,
272
+ overallAccuracy: Math.round(accuracy * 100) / 100,
273
+ patternsByStatus,
274
+ };
275
+ }
276
+ /**
277
+ * Submit manual feedback for a pattern
278
+ */
279
+ async submitFeedback(patternId, feedback, context) {
280
+ this.registry.recordFeedback(patternId, feedback);
281
+ const entry = this.patternFeedback.get(patternId);
282
+ if (entry) {
283
+ if (feedback === 'confirmed') {
284
+ entry.confirmations++;
285
+ }
286
+ else {
287
+ entry.falsePositives++;
288
+ }
289
+ }
290
+ if (this.config.debug) {
291
+ console.log(`[FeedbackLoop] Manual feedback: ${patternId} = ${feedback}`);
292
+ }
293
+ }
294
+ /**
295
+ * Reset feedback for a pattern
296
+ */
297
+ resetPattern(patternId) {
298
+ this.patternFeedback.delete(patternId);
299
+ }
300
+ /**
301
+ * Clear all feedback data
302
+ */
303
+ clear() {
304
+ this.patternFeedback.clear();
305
+ }
306
+ }
307
+ // =============================================================================
308
+ // Singleton Instance
309
+ // =============================================================================
310
+ let feedbackLoopInstance = null;
311
+ /**
312
+ * Get or create the global LearningFeedbackLoop instance
313
+ */
314
+ export function getLearningFeedbackLoop(system, config) {
315
+ if (!feedbackLoopInstance) {
316
+ feedbackLoopInstance = new LearningFeedbackLoop(system, config);
317
+ }
318
+ return feedbackLoopInstance;
319
+ }
320
+ /**
321
+ * Reset the global feedback loop (useful for testing)
322
+ */
323
+ export function resetLearningFeedbackLoop() {
324
+ if (feedbackLoopInstance) {
325
+ feedbackLoopInstance.clear();
326
+ }
327
+ feedbackLoopInstance = null;
328
+ }
329
+ //# sourceMappingURL=feedback-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-loop.js","sourceRoot":"","sources":["../../src/patterns/feedback-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file Patterns Module Index
3
+ * @description Unified pattern detection and lifecycle management
4
+ * @version 2.8.0
5
+ */
6
+ export * from './registry.js';
7
+ export * from './lifecycle.js';
8
+ export * from './feedback-loop.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file Patterns Module Index
3
+ * @description Unified pattern detection and lifecycle management
4
+ * @version 2.8.0
5
+ */
6
+ export * from './registry.js';
7
+ export * from './lifecycle.js';
8
+ export * from './feedback-loop.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA"}