dino-spec 17.4.2 → 17.5.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 (195) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +10 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  8. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  12. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  16. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  20. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  21. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  22. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  26. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  30. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  34. package/dist/core/agents/blackboard.d.ts +22 -3
  35. package/dist/core/agents/blackboard.d.ts.map +1 -1
  36. package/dist/core/agents/blackboard.js +52 -2
  37. package/dist/core/agents/blackboard.js.map +1 -1
  38. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  39. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  40. package/dist/core/agents/circuit-breaker.js +175 -1
  41. package/dist/core/agents/circuit-breaker.js.map +1 -1
  42. package/dist/core/agents/clarification-phase.d.ts +128 -0
  43. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  44. package/dist/core/agents/clarification-phase.js +375 -0
  45. package/dist/core/agents/clarification-phase.js.map +1 -0
  46. package/dist/core/agents/confidence-gate.d.ts +116 -3
  47. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  48. package/dist/core/agents/confidence-gate.js +363 -3
  49. package/dist/core/agents/confidence-gate.js.map +1 -1
  50. package/dist/core/agents/correction-tracker.d.ts +197 -0
  51. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  52. package/dist/core/agents/correction-tracker.js +366 -0
  53. package/dist/core/agents/correction-tracker.js.map +1 -0
  54. package/dist/core/agents/dependency-graph.d.ts +193 -0
  55. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  56. package/dist/core/agents/dependency-graph.js +462 -0
  57. package/dist/core/agents/dependency-graph.js.map +1 -0
  58. package/dist/core/agents/gap-detector.d.ts +277 -0
  59. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  60. package/dist/core/agents/gap-detector.js +540 -0
  61. package/dist/core/agents/gap-detector.js.map +1 -0
  62. package/dist/core/agents/index.d.ts +14 -1
  63. package/dist/core/agents/index.d.ts.map +1 -1
  64. package/dist/core/agents/index.js +26 -1
  65. package/dist/core/agents/index.js.map +1 -1
  66. package/dist/core/agents/message-protocol.d.ts +13 -2
  67. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  68. package/dist/core/agents/message-protocol.js +20 -1
  69. package/dist/core/agents/message-protocol.js.map +1 -1
  70. package/dist/core/agents/parallel-executor.d.ts +182 -0
  71. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  72. package/dist/core/agents/parallel-executor.js +474 -0
  73. package/dist/core/agents/parallel-executor.js.map +1 -0
  74. package/dist/core/agents/pattern-detector.d.ts +157 -0
  75. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  76. package/dist/core/agents/pattern-detector.js +370 -0
  77. package/dist/core/agents/pattern-detector.js.map +1 -0
  78. package/dist/core/agents/registry-client.d.ts +6 -0
  79. package/dist/core/agents/registry-client.d.ts.map +1 -1
  80. package/dist/core/agents/registry-client.js +3 -0
  81. package/dist/core/agents/registry-client.js.map +1 -1
  82. package/dist/core/agents/research-phase.d.ts +114 -0
  83. package/dist/core/agents/research-phase.d.ts.map +1 -0
  84. package/dist/core/agents/research-phase.js +355 -0
  85. package/dist/core/agents/research-phase.js.map +1 -0
  86. package/dist/core/agents/research-validator.d.ts +13 -2
  87. package/dist/core/agents/research-validator.d.ts.map +1 -1
  88. package/dist/core/agents/research-validator.js +63 -31
  89. package/dist/core/agents/research-validator.js.map +1 -1
  90. package/dist/core/agents/skill-creator.d.ts +174 -0
  91. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  92. package/dist/core/agents/skill-creator.js +570 -0
  93. package/dist/core/agents/skill-creator.js.map +1 -0
  94. package/dist/core/agents/state-persistence.d.ts +184 -0
  95. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  96. package/dist/core/agents/state-persistence.js +394 -0
  97. package/dist/core/agents/state-persistence.js.map +1 -0
  98. package/dist/core/agents/validation-cache.d.ts +122 -0
  99. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  100. package/dist/core/agents/validation-cache.js +280 -0
  101. package/dist/core/agents/validation-cache.js.map +1 -0
  102. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  103. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  104. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  105. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  106. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  107. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  108. package/dist/core/agents/validators/base-validator.js +192 -0
  109. package/dist/core/agents/validators/base-validator.js.map +1 -0
  110. package/dist/core/agents/validators/index.d.ts +7 -0
  111. package/dist/core/agents/validators/index.d.ts.map +1 -0
  112. package/dist/core/agents/validators/index.js +7 -0
  113. package/dist/core/agents/validators/index.js.map +1 -0
  114. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  115. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  116. package/dist/core/agents/validators/npm-validator.js +211 -0
  117. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  118. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  119. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  120. package/dist/core/agents/validators/pip-validator.js +191 -0
  121. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  122. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  123. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  124. package/dist/core/agents/validators/validator-registry.js +321 -0
  125. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  126. package/dist/core/context-repl/types.d.ts +4 -4
  127. package/dist/core/memory/index.d.ts +1 -0
  128. package/dist/core/memory/index.d.ts.map +1 -1
  129. package/dist/core/memory/index.js +2 -0
  130. package/dist/core/memory/index.js.map +1 -1
  131. package/dist/core/memory/learning-store.d.ts +222 -0
  132. package/dist/core/memory/learning-store.d.ts.map +1 -0
  133. package/dist/core/memory/learning-store.js +477 -0
  134. package/dist/core/memory/learning-store.js.map +1 -0
  135. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  136. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  137. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  138. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  139. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  140. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  141. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  142. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  143. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  144. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  145. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  146. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  147. package/dist/core/spec-analyzer/index.d.ts +10 -1
  148. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  149. package/dist/core/spec-analyzer/index.js +13 -1
  150. package/dist/core/spec-analyzer/index.js.map +1 -1
  151. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  152. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  153. package/dist/core/spec-analyzer/patterns.js +412 -0
  154. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  155. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  156. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  157. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  158. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  159. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  160. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  161. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  162. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  163. package/dist/hooks/dynamic-generator.d.ts +158 -0
  164. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  165. package/dist/hooks/dynamic-generator.js +448 -0
  166. package/dist/hooks/dynamic-generator.js.map +1 -0
  167. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  168. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  169. package/dist/hooks/hook-agent-bridge.js +489 -0
  170. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  171. package/dist/hooks/index.d.ts +3 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +5 -1
  174. package/dist/hooks/index.js.map +1 -1
  175. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  176. package/dist/mcp/tool-catalog.js +47 -0
  177. package/dist/mcp/tool-catalog.js.map +1 -1
  178. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  179. package/dist/mcp/tool-tiers.js +4 -0
  180. package/dist/mcp/tool-tiers.js.map +1 -1
  181. package/dist/mcp/tools/index.d.ts +2 -1
  182. package/dist/mcp/tools/index.d.ts.map +1 -1
  183. package/dist/mcp/tools/index.js +15 -1
  184. package/dist/mcp/tools/index.js.map +1 -1
  185. package/dist/mcp/tools/learning-store.d.ts +30 -0
  186. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  187. package/dist/mcp/tools/learning-store.js +286 -0
  188. package/dist/mcp/tools/learning-store.js.map +1 -0
  189. package/dist/rules/index.d.ts.map +1 -1
  190. package/dist/rules/index.js +2 -47
  191. package/dist/rules/index.js.map +1 -1
  192. package/dist/skills/index.d.ts.map +1 -1
  193. package/dist/skills/index.js +159 -38
  194. package/dist/skills/index.js.map +1 -1
  195. package/package.json +1 -1
@@ -0,0 +1,366 @@
1
+ /**
2
+ * Correction Tracker - v17.5.0
3
+ *
4
+ * Tracks user corrections to Claude's outputs with full context.
5
+ * Used to learn patterns for future automation.
6
+ *
7
+ * Correction sources:
8
+ * - "no, use X instead" → explicit correction
9
+ * - "actually, it should be Y" → explicit correction
10
+ * - User edits Claude's output → implicit correction
11
+ * - Repeated similar requests → pattern emergence
12
+ *
13
+ * @module correction-tracker
14
+ */
15
+ import { jaccardSimilarity } from '../memory/similarity-utils.js';
16
+ // =============================================================================
17
+ // Constants
18
+ // =============================================================================
19
+ export const DEFAULT_TRACKER_CONFIG = {
20
+ automationThreshold: 3,
21
+ clusteringSimilarity: 0.7,
22
+ maxCorrections: 500,
23
+ retentionDays: 90,
24
+ };
25
+ /**
26
+ * Patterns that indicate explicit corrections
27
+ */
28
+ const CORRECTION_PATTERNS = [
29
+ /^(?:no|nope|wrong)[,.]?\s*(.+)/i,
30
+ /^actually[,.]?\s*(.+)/i,
31
+ /^(?:use|prefer)\s+(.+?)\s+instead/i,
32
+ /^(?:change|replace)\s+(.+?)\s+(?:to|with)\s+(.+)/i,
33
+ /^(?:it should be|should be)\s+(.+)/i,
34
+ /^(?:not|don't)\s+(.+?)[,.]?\s*(?:use|prefer)\s+(.+)/i,
35
+ ];
36
+ // =============================================================================
37
+ // CorrectionTracker Class
38
+ // =============================================================================
39
+ /**
40
+ * Tracks and clusters user corrections for pattern learning
41
+ */
42
+ export class CorrectionTracker {
43
+ corrections = new Map();
44
+ clusters = new Map();
45
+ config;
46
+ constructor(config = {}) {
47
+ this.config = { ...DEFAULT_TRACKER_CONFIG, ...config };
48
+ }
49
+ /**
50
+ * Track a new correction
51
+ */
52
+ track(context, type = 'explicit') {
53
+ const id = this.generateId();
54
+ const correction = {
55
+ id,
56
+ type,
57
+ context,
58
+ timestamp: new Date(),
59
+ keywords: this.extractKeywords(context),
60
+ normalizedPattern: this.normalizePattern(context),
61
+ promoted: false,
62
+ };
63
+ this.corrections.set(id, correction);
64
+ this.updateClusters(correction);
65
+ this.enforceRetention();
66
+ return correction;
67
+ }
68
+ /**
69
+ * Parse user text for explicit corrections
70
+ */
71
+ parseCorrection(userText) {
72
+ for (const pattern of CORRECTION_PATTERNS) {
73
+ const match = userText.match(pattern);
74
+ if (match) {
75
+ return {
76
+ detected: true,
77
+ pattern: match[1]?.trim(),
78
+ replacement: match[2]?.trim(),
79
+ };
80
+ }
81
+ }
82
+ return { detected: false };
83
+ }
84
+ /**
85
+ * Get all corrections
86
+ */
87
+ getCorrections() {
88
+ return Array.from(this.corrections.values());
89
+ }
90
+ /**
91
+ * Get correction by ID
92
+ */
93
+ getCorrection(id) {
94
+ return this.corrections.get(id);
95
+ }
96
+ /**
97
+ * Get clusters that meet automation threshold
98
+ */
99
+ getPromotableClusters() {
100
+ return Array.from(this.clusters.values()).filter((c) => c.meetsThreshold && !c.representative.promoted);
101
+ }
102
+ /**
103
+ * Get all clusters
104
+ */
105
+ getClusters() {
106
+ return Array.from(this.clusters.values());
107
+ }
108
+ /**
109
+ * Get cluster by ID
110
+ */
111
+ getCluster(id) {
112
+ return this.clusters.get(id);
113
+ }
114
+ /**
115
+ * Find similar corrections to a new one
116
+ */
117
+ findSimilar(context, minSimilarity = 0.5) {
118
+ const normalized = this.normalizePattern(context);
119
+ const similar = [];
120
+ for (const correction of this.corrections.values()) {
121
+ const score = jaccardSimilarity(normalized, correction.normalizedPattern);
122
+ if (score >= minSimilarity) {
123
+ similar.push({ correction, score });
124
+ }
125
+ }
126
+ return similar.sort((a, b) => b.score - a.score).map((s) => s.correction);
127
+ }
128
+ /**
129
+ * Mark a cluster as promoted (pattern learned)
130
+ */
131
+ markPromoted(clusterId) {
132
+ const cluster = this.clusters.get(clusterId);
133
+ if (!cluster)
134
+ return false;
135
+ for (const correction of cluster.corrections) {
136
+ correction.promoted = true;
137
+ }
138
+ return true;
139
+ }
140
+ /**
141
+ * Get statistics
142
+ */
143
+ getStats() {
144
+ const corrections = Array.from(this.corrections.values());
145
+ const byType = {
146
+ explicit: 0,
147
+ implicit: 0,
148
+ preference: 0,
149
+ style: 0,
150
+ };
151
+ for (const c of corrections) {
152
+ byType[c.type]++;
153
+ }
154
+ const sorted = corrections.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
155
+ return {
156
+ totalCorrections: corrections.length,
157
+ totalClusters: this.clusters.size,
158
+ promotableClusters: this.getPromotableClusters().length,
159
+ byType,
160
+ oldestCorrection: sorted[0]?.timestamp ?? null,
161
+ newestCorrection: sorted[sorted.length - 1]?.timestamp ?? null,
162
+ };
163
+ }
164
+ /**
165
+ * Clear all corrections
166
+ */
167
+ clear() {
168
+ this.corrections.clear();
169
+ this.clusters.clear();
170
+ }
171
+ /**
172
+ * Export state for persistence
173
+ */
174
+ export() {
175
+ return {
176
+ corrections: Array.from(this.corrections.values()),
177
+ clusters: Array.from(this.clusters.values()),
178
+ };
179
+ }
180
+ /**
181
+ * Import state from persistence
182
+ */
183
+ import(state) {
184
+ this.corrections.clear();
185
+ this.clusters.clear();
186
+ for (const correction of state.corrections) {
187
+ // Restore Date objects
188
+ correction.timestamp = new Date(correction.timestamp);
189
+ this.corrections.set(correction.id, correction);
190
+ }
191
+ for (const cluster of state.clusters) {
192
+ cluster.firstSeen = new Date(cluster.firstSeen);
193
+ cluster.lastSeen = new Date(cluster.lastSeen);
194
+ this.clusters.set(cluster.id, cluster);
195
+ }
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // Private Methods
199
+ // ---------------------------------------------------------------------------
200
+ generateId() {
201
+ return `corr-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
202
+ }
203
+ extractKeywords(context) {
204
+ const text = `${context.original} ${context.corrected}`.toLowerCase();
205
+ const words = text.split(/\W+/).filter((w) => w.length > 2);
206
+ // Remove common words
207
+ const stopWords = new Set([
208
+ 'the',
209
+ 'and',
210
+ 'for',
211
+ 'are',
212
+ 'but',
213
+ 'not',
214
+ 'you',
215
+ 'all',
216
+ 'can',
217
+ 'had',
218
+ 'her',
219
+ 'was',
220
+ 'one',
221
+ 'our',
222
+ 'out',
223
+ 'use',
224
+ 'with',
225
+ 'this',
226
+ 'that',
227
+ 'from',
228
+ 'have',
229
+ 'been',
230
+ ]);
231
+ return [...new Set(words.filter((w) => !stopWords.has(w)))];
232
+ }
233
+ normalizePattern(context) {
234
+ // Create a normalized representation for comparison
235
+ return `${context.original}→${context.corrected}`.toLowerCase().replace(/\s+/g, ' ').trim();
236
+ }
237
+ updateClusters(correction) {
238
+ // Find the best matching cluster
239
+ let bestCluster = null;
240
+ let bestSimilarity = 0;
241
+ for (const cluster of this.clusters.values()) {
242
+ const sim = jaccardSimilarity(correction.normalizedPattern, cluster.representative.normalizedPattern);
243
+ if (sim >= this.config.clusteringSimilarity && sim > bestSimilarity) {
244
+ bestCluster = cluster;
245
+ bestSimilarity = sim;
246
+ }
247
+ }
248
+ if (bestCluster) {
249
+ // Add to existing cluster
250
+ bestCluster.corrections.push(correction);
251
+ bestCluster.count = bestCluster.corrections.length;
252
+ bestCluster.lastSeen = correction.timestamp;
253
+ bestCluster.similarity = this.calculateClusterSimilarity(bestCluster);
254
+ bestCluster.meetsThreshold = bestCluster.count >= this.config.automationThreshold;
255
+ }
256
+ else {
257
+ // Create new cluster
258
+ const clusterId = `cluster-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
259
+ this.clusters.set(clusterId, {
260
+ id: clusterId,
261
+ representative: correction,
262
+ corrections: [correction],
263
+ count: 1,
264
+ similarity: 1.0,
265
+ firstSeen: correction.timestamp,
266
+ lastSeen: correction.timestamp,
267
+ meetsThreshold: 1 >= this.config.automationThreshold,
268
+ });
269
+ }
270
+ }
271
+ calculateClusterSimilarity(cluster) {
272
+ if (cluster.corrections.length <= 1)
273
+ return 1.0;
274
+ const rep = cluster.representative.normalizedPattern;
275
+ let total = 0;
276
+ for (const c of cluster.corrections) {
277
+ if (c.id !== cluster.representative.id) {
278
+ total += jaccardSimilarity(rep, c.normalizedPattern);
279
+ }
280
+ }
281
+ return total / (cluster.corrections.length - 1);
282
+ }
283
+ enforceRetention() {
284
+ // Enforce max corrections limit
285
+ if (this.corrections.size > this.config.maxCorrections) {
286
+ const sorted = Array.from(this.corrections.entries()).sort((a, b) => a[1].timestamp.getTime() - b[1].timestamp.getTime());
287
+ const toRemove = sorted.slice(0, sorted.length - this.config.maxCorrections);
288
+ for (const [id] of toRemove) {
289
+ this.corrections.delete(id);
290
+ }
291
+ }
292
+ // Enforce retention days
293
+ const cutoff = new Date();
294
+ cutoff.setDate(cutoff.getDate() - this.config.retentionDays);
295
+ for (const [id, correction] of this.corrections) {
296
+ if (correction.timestamp < cutoff) {
297
+ this.corrections.delete(id);
298
+ }
299
+ }
300
+ // Clean up empty clusters
301
+ for (const [id, cluster] of this.clusters) {
302
+ cluster.corrections = cluster.corrections.filter((c) => this.corrections.has(c.id));
303
+ if (cluster.corrections.length === 0) {
304
+ this.clusters.delete(id);
305
+ }
306
+ else {
307
+ cluster.count = cluster.corrections.length;
308
+ cluster.meetsThreshold = cluster.count >= this.config.automationThreshold;
309
+ }
310
+ }
311
+ }
312
+ }
313
+ // =============================================================================
314
+ // Singleton Instance
315
+ // =============================================================================
316
+ /** Global correction tracker */
317
+ export const correctionTracker = new CorrectionTracker();
318
+ // =============================================================================
319
+ // Helper Functions
320
+ // =============================================================================
321
+ /**
322
+ * Track a correction using the global tracker
323
+ */
324
+ export function trackCorrection(context, type) {
325
+ return correctionTracker.track(context, type);
326
+ }
327
+ /**
328
+ * Get promotable clusters from global tracker
329
+ */
330
+ export function getPromotableClusters() {
331
+ return correctionTracker.getPromotableClusters();
332
+ }
333
+ /**
334
+ * Check if user text contains a correction
335
+ */
336
+ export function detectCorrection(userText) {
337
+ return correctionTracker.parseCorrection(userText);
338
+ }
339
+ /**
340
+ * Format correction for display
341
+ */
342
+ export function formatCorrection(correction) {
343
+ const lines = [];
344
+ lines.push(`**Correction** (${correction.type})`);
345
+ lines.push(`- Original: ${correction.context.original}`);
346
+ lines.push(`- Corrected: ${correction.context.corrected}`);
347
+ if (correction.context.filePath) {
348
+ lines.push(`- File: ${correction.context.filePath}`);
349
+ }
350
+ lines.push(`- Keywords: ${correction.keywords.join(', ')}`);
351
+ return lines.join('\n');
352
+ }
353
+ /**
354
+ * Format cluster for display
355
+ */
356
+ export function formatCluster(cluster) {
357
+ const lines = [];
358
+ const threshold = cluster.meetsThreshold ? '✅' : '⏳';
359
+ lines.push(`${threshold} **Cluster** (${cluster.count} occurrences)`);
360
+ lines.push(`- Pattern: "${cluster.representative.context.original}" → "${cluster.representative.context.corrected}"`);
361
+ lines.push(`- First seen: ${cluster.firstSeen.toISOString()}`);
362
+ lines.push(`- Last seen: ${cluster.lastSeen.toISOString()}`);
363
+ lines.push(`- Similarity: ${(cluster.similarity * 100).toFixed(1)}%`);
364
+ return lines.join('\n');
365
+ }
366
+ //# sourceMappingURL=correction-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correction-tracker.js","sourceRoot":"","sources":["../../../src/core/agents/correction-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Dependency Graph - v17.5.0
3
+ *
4
+ * Tracks dependencies between tasks and agents for gap detection.
5
+ * Enables identification of:
6
+ * - Prerequisites that must complete before a task starts
7
+ * - Orphaned dependencies (missing or failed prerequisites)
8
+ * - Circular dependencies
9
+ * - Dependency chains and critical paths
10
+ *
11
+ * @module dependency-graph
12
+ */
13
+ /**
14
+ * A node in the dependency graph
15
+ */
16
+ export interface DependencyNode {
17
+ /** Unique identifier for the node */
18
+ id: string;
19
+ /** Display name */
20
+ name: string;
21
+ /** Node type */
22
+ type: 'task' | 'agent' | 'resource' | 'output';
23
+ /** Current status */
24
+ status: 'pending' | 'in_progress' | 'completed' | 'failed' | 'blocked';
25
+ /** IDs of nodes this node depends on */
26
+ dependencies: string[];
27
+ /** IDs of nodes that depend on this node */
28
+ dependents: string[];
29
+ /** Metadata about the node */
30
+ metadata: Record<string, unknown>;
31
+ /** Timestamp when status last changed */
32
+ lastUpdated: Date;
33
+ }
34
+ /**
35
+ * An edge in the dependency graph
36
+ */
37
+ export interface DependencyEdge {
38
+ /** Source node ID (the dependency) */
39
+ from: string;
40
+ /** Target node ID (the dependent) */
41
+ to: string;
42
+ /** Type of dependency */
43
+ type: 'requires' | 'produces' | 'blocks' | 'optional';
44
+ /** Whether this edge represents a satisfied dependency */
45
+ satisfied: boolean;
46
+ }
47
+ /**
48
+ * Result of dependency analysis
49
+ */
50
+ export interface DependencyAnalysis {
51
+ /** All nodes in the graph */
52
+ nodes: DependencyNode[];
53
+ /** All edges in the graph */
54
+ edges: DependencyEdge[];
55
+ /** Nodes with missing dependencies */
56
+ orphanedNodes: string[];
57
+ /** Detected circular dependency chains */
58
+ circularDependencies: string[][];
59
+ /** Nodes that are blocking progress */
60
+ blockingNodes: string[];
61
+ /** Nodes ready to execute (all deps satisfied) */
62
+ readyNodes: string[];
63
+ /** Critical path (longest dependency chain) */
64
+ criticalPath: string[];
65
+ /** Overall completion percentage */
66
+ completionPercent: number;
67
+ }
68
+ /**
69
+ * Gap between expected and actual outputs
70
+ */
71
+ export interface DependencyGap {
72
+ /** Node with the gap */
73
+ nodeId: string;
74
+ /** Type of gap */
75
+ type: 'missing_dependency' | 'failed_dependency' | 'orphaned' | 'circular' | 'stalled';
76
+ /** Description of the gap */
77
+ description: string;
78
+ /** Suggested resolution */
79
+ resolution: string;
80
+ /** Severity */
81
+ severity: 'critical' | 'high' | 'medium' | 'low';
82
+ }
83
+ /**
84
+ * Dependency graph for tracking task relationships
85
+ */
86
+ export declare class DependencyGraph {
87
+ private nodes;
88
+ private edges;
89
+ /**
90
+ * Add a node to the graph
91
+ */
92
+ addNode(node: Omit<DependencyNode, 'dependents' | 'lastUpdated'>): void;
93
+ /**
94
+ * Add an edge to the graph
95
+ */
96
+ addEdge(from: string, to: string, type?: DependencyEdge['type']): void;
97
+ /**
98
+ * Update node status
99
+ */
100
+ updateStatus(nodeId: string, status: DependencyNode['status']): void;
101
+ /**
102
+ * Get a node by ID
103
+ */
104
+ getNode(nodeId: string): DependencyNode | undefined;
105
+ /**
106
+ * Get all nodes
107
+ */
108
+ getAllNodes(): DependencyNode[];
109
+ /**
110
+ * Get all edges
111
+ */
112
+ getAllEdges(): DependencyEdge[];
113
+ /**
114
+ * Get dependencies of a node
115
+ */
116
+ getDependencies(nodeId: string): DependencyNode[];
117
+ /**
118
+ * Get dependents of a node
119
+ */
120
+ getDependents(nodeId: string): DependencyNode[];
121
+ /**
122
+ * Check if all dependencies of a node are satisfied
123
+ */
124
+ areDependenciesSatisfied(nodeId: string): boolean;
125
+ /**
126
+ * Get nodes ready for execution
127
+ */
128
+ getReadyNodes(): DependencyNode[];
129
+ /**
130
+ * Get nodes that are blocked
131
+ */
132
+ getBlockedNodes(): DependencyNode[];
133
+ /**
134
+ * Detect circular dependencies using DFS
135
+ */
136
+ detectCircularDependencies(): string[][];
137
+ /**
138
+ * Find orphaned nodes (nodes with missing dependencies)
139
+ */
140
+ findOrphanedNodes(): string[];
141
+ /**
142
+ * Find the critical path (longest dependency chain)
143
+ */
144
+ findCriticalPath(): string[];
145
+ /**
146
+ * Calculate completion percentage
147
+ */
148
+ calculateCompletionPercent(): number;
149
+ /**
150
+ * Analyze the dependency graph
151
+ */
152
+ analyze(): DependencyAnalysis;
153
+ /**
154
+ * Identify gaps in the dependency graph
155
+ */
156
+ identifyGaps(): DependencyGap[];
157
+ /**
158
+ * Clear the graph
159
+ */
160
+ clear(): void;
161
+ /**
162
+ * Serialize to JSON
163
+ */
164
+ toJSON(): {
165
+ nodes: DependencyNode[];
166
+ edges: DependencyEdge[];
167
+ };
168
+ /**
169
+ * Load from JSON
170
+ */
171
+ static fromJSON(data: {
172
+ nodes: DependencyNode[];
173
+ edges: DependencyEdge[];
174
+ }): DependencyGraph;
175
+ }
176
+ /**
177
+ * Create a dependency graph from tasks
178
+ */
179
+ export declare function createGraphFromTasks(tasks: Array<{
180
+ id: string;
181
+ title: string;
182
+ status: string;
183
+ dependencies: string[];
184
+ }>): DependencyGraph;
185
+ /**
186
+ * Format dependency analysis for display
187
+ */
188
+ export declare function formatDependencyAnalysis(analysis: DependencyAnalysis): string;
189
+ /**
190
+ * Format gaps for display
191
+ */
192
+ export declare function formatDependencyGaps(gaps: DependencyGap[]): string;
193
+ //# sourceMappingURL=dependency-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../src/core/agents/dependency-graph.ts"],"names":[],"mappings":"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"}