claude-cognitive 0.3.2 → 0.4.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 (108) hide show
  1. package/README.md +57 -35
  2. package/dist/agents/context.d.ts.map +1 -1
  3. package/dist/agents/context.js +7 -7
  4. package/dist/agents/context.js.map +1 -1
  5. package/dist/cli/commands/feedback-stats.d.ts +10 -0
  6. package/dist/cli/commands/feedback-stats.d.ts.map +1 -0
  7. package/dist/cli/commands/feedback-stats.js +70 -0
  8. package/dist/cli/commands/feedback-stats.js.map +1 -0
  9. package/dist/cli/commands/feedback-sync.d.ts +10 -0
  10. package/dist/cli/commands/feedback-sync.d.ts.map +1 -0
  11. package/dist/cli/commands/feedback-sync.js +117 -0
  12. package/dist/cli/commands/feedback-sync.js.map +1 -0
  13. package/dist/cli/commands/index.d.ts +2 -0
  14. package/dist/cli/commands/index.d.ts.map +1 -1
  15. package/dist/cli/commands/index.js +2 -0
  16. package/dist/cli/commands/index.js.map +1 -1
  17. package/dist/cli/commands/install.d.ts.map +1 -1
  18. package/dist/cli/commands/install.js +130 -4
  19. package/dist/cli/commands/install.js.map +1 -1
  20. package/dist/cli/commands/semantic.d.ts +4 -2
  21. package/dist/cli/commands/semantic.d.ts.map +1 -1
  22. package/dist/cli/commands/semantic.js +8 -57
  23. package/dist/cli/commands/semantic.js.map +1 -1
  24. package/dist/cli/commands/status.d.ts.map +1 -1
  25. package/dist/cli/commands/status.js +0 -2
  26. package/dist/cli/commands/status.js.map +1 -1
  27. package/dist/cli/commands/sync.d.ts +4 -2
  28. package/dist/cli/commands/sync.d.ts.map +1 -1
  29. package/dist/cli/commands/sync.js +9 -250
  30. package/dist/cli/commands/sync.js.map +1 -1
  31. package/dist/cli/commands/update.d.ts.map +1 -1
  32. package/dist/cli/commands/update.js +106 -1
  33. package/dist/cli/commands/update.js.map +1 -1
  34. package/dist/cli/index.js +3 -1
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/utils/output.d.ts +0 -2
  37. package/dist/cli/utils/output.d.ts.map +1 -1
  38. package/dist/cli/utils/output.js +0 -2
  39. package/dist/cli/utils/output.js.map +1 -1
  40. package/dist/client.d.ts +121 -22
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +209 -36
  43. package/dist/client.js.map +1 -1
  44. package/dist/events.d.ts +30 -1
  45. package/dist/events.d.ts.map +1 -1
  46. package/dist/events.js.map +1 -1
  47. package/dist/feedback/constants.d.ts +72 -0
  48. package/dist/feedback/constants.d.ts.map +1 -0
  49. package/dist/feedback/constants.js +145 -0
  50. package/dist/feedback/constants.js.map +1 -0
  51. package/dist/feedback/detector.d.ts +75 -0
  52. package/dist/feedback/detector.d.ts.map +1 -0
  53. package/dist/feedback/detector.js +393 -0
  54. package/dist/feedback/detector.js.map +1 -0
  55. package/dist/feedback/index.d.ts +85 -0
  56. package/dist/feedback/index.d.ts.map +1 -0
  57. package/dist/feedback/index.js +194 -0
  58. package/dist/feedback/index.js.map +1 -0
  59. package/dist/feedback/offline-queue.d.ts +110 -0
  60. package/dist/feedback/offline-queue.d.ts.map +1 -0
  61. package/dist/feedback/offline-queue.js +188 -0
  62. package/dist/feedback/offline-queue.js.map +1 -0
  63. package/dist/feedback/scorer.d.ts +81 -0
  64. package/dist/feedback/scorer.d.ts.map +1 -0
  65. package/dist/feedback/scorer.js +194 -0
  66. package/dist/feedback/scorer.js.map +1 -0
  67. package/dist/feedback/similarity.d.ts +19 -0
  68. package/dist/feedback/similarity.d.ts.map +1 -0
  69. package/dist/feedback/similarity.js +49 -0
  70. package/dist/feedback/similarity.js.map +1 -0
  71. package/dist/feedback/tracker.d.ts +104 -0
  72. package/dist/feedback/tracker.d.ts.map +1 -0
  73. package/dist/feedback/tracker.js +324 -0
  74. package/dist/feedback/tracker.js.map +1 -0
  75. package/dist/hooks/process-session.d.ts.map +1 -1
  76. package/dist/hooks/process-session.js +17 -8
  77. package/dist/hooks/process-session.js.map +1 -1
  78. package/dist/index.d.ts +9 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +15 -0
  81. package/dist/index.js.map +1 -1
  82. package/dist/learn/index.d.ts.map +1 -1
  83. package/dist/learn/index.js +6 -2
  84. package/dist/learn/index.js.map +1 -1
  85. package/dist/mcp/handlers.d.ts +9 -1
  86. package/dist/mcp/handlers.d.ts.map +1 -1
  87. package/dist/mcp/handlers.js +66 -0
  88. package/dist/mcp/handlers.js.map +1 -1
  89. package/dist/mcp/server.d.ts.map +1 -1
  90. package/dist/mcp/server.js +42 -2
  91. package/dist/mcp/server.js.map +1 -1
  92. package/dist/mcp/tools.d.ts +77 -0
  93. package/dist/mcp/tools.d.ts.map +1 -1
  94. package/dist/mcp/tools.js +30 -0
  95. package/dist/mcp/tools.js.map +1 -1
  96. package/dist/mcp/types.d.ts +16 -0
  97. package/dist/mcp/types.d.ts.map +1 -1
  98. package/dist/mind.d.ts +47 -28
  99. package/dist/mind.d.ts.map +1 -1
  100. package/dist/mind.js +351 -104
  101. package/dist/mind.js.map +1 -1
  102. package/dist/offline.d.ts +111 -0
  103. package/dist/offline.d.ts.map +1 -0
  104. package/dist/offline.js +198 -0
  105. package/dist/offline.js.map +1 -0
  106. package/dist/types.d.ts +171 -1
  107. package/dist/types.d.ts.map +1 -1
  108. package/package.json +1 -1
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Usage Detection Strategies
3
+ *
4
+ * Implements 4 detection strategies to identify which recalled facts
5
+ * Claude actually used during a session:
6
+ *
7
+ * 1. Explicit Reference Detection (High Confidence)
8
+ * 2. Semantic Similarity Detection (Medium Confidence)
9
+ * 3. Behavioral Signal Detection (Low Confidence)
10
+ * 4. Negative Signal Detection
11
+ *
12
+ * @module feedback/detector
13
+ */
14
+ import { EXPLICIT_TRIGGERS, EXPLICIT_CONFIDENCE, SEMANTIC_THRESHOLD, SEMANTIC_MAX_CONFIDENCE, FILE_ACCESS_CONFIDENCE, TASK_TOPIC_CONFIDENCE, createFileReferencePatterns, LOW_POSITION_WEIGHT, LOW_POSITION_THRESHOLD, TOPIC_MISMATCH_WEIGHT, TOPIC_MISMATCH_THRESHOLD, FILES_NOT_ACCESSED_WEIGHT, MAX_IGNORE_CONFIDENCE, CHUNK_MAX_WORDS, CHUNK_OVERLAP_WORDS, } from "./constants.js";
15
+ import { calculateSimilarity, jaccardSimilarity } from "./similarity.js";
16
+ // =============================================================================
17
+ // Strategy 1: Explicit Reference Detection (High Confidence)
18
+ // =============================================================================
19
+ /**
20
+ * Detect explicit references to context in Claude's response
21
+ */
22
+ export function detectExplicitReferences(response, recalledFacts) {
23
+ if (!response || !recalledFacts?.length) {
24
+ return [];
25
+ }
26
+ const detections = [];
27
+ const detectedFactIds = new Set();
28
+ // Check each trigger pattern
29
+ for (const pattern of EXPLICIT_TRIGGERS) {
30
+ const matches = response.match(pattern);
31
+ if (!matches)
32
+ continue;
33
+ // Found explicit reference - try to match to specific fact
34
+ for (const match of [matches[0]]) {
35
+ // Get surrounding context - use sentence boundary or limited window
36
+ const matchIndex = response.indexOf(match);
37
+ // Find sentence boundaries (period, newline, or window limit)
38
+ let contextStart = matchIndex;
39
+ let contextEnd = matchIndex + match.length;
40
+ // Look backwards for sentence start (max 50 chars)
41
+ for (let i = matchIndex - 1; i >= Math.max(0, matchIndex - 50); i--) {
42
+ if (response[i] === "." || response[i] === "\n") {
43
+ contextStart = i + 1;
44
+ break;
45
+ }
46
+ contextStart = i;
47
+ }
48
+ // Look forwards for sentence end (max 100 chars)
49
+ for (let i = matchIndex + match.length; i < Math.min(response.length, matchIndex + match.length + 100); i++) {
50
+ contextEnd = i + 1;
51
+ if (response[i] === "." || response[i] === "\n") {
52
+ break;
53
+ }
54
+ }
55
+ const surroundingContext = response.slice(contextStart, contextEnd).trim();
56
+ // Find best matching fact based on context
57
+ const matchedFact = findBestMatchingFact(surroundingContext, recalledFacts);
58
+ if (matchedFact && !detectedFactIds.has(matchedFact.factId)) {
59
+ detectedFactIds.add(matchedFact.factId);
60
+ detections.push({
61
+ factId: matchedFact.factId,
62
+ detectionType: "explicit_reference",
63
+ confidence: EXPLICIT_CONFIDENCE,
64
+ evidence: {
65
+ trigger: pattern.source,
66
+ match,
67
+ context: surroundingContext.slice(0, 200),
68
+ },
69
+ });
70
+ }
71
+ }
72
+ }
73
+ return detections;
74
+ }
75
+ /**
76
+ * Find the best matching fact for a given context
77
+ */
78
+ function findBestMatchingFact(context, facts, minThreshold = 0.1) {
79
+ if (!context || !facts?.length) {
80
+ return null;
81
+ }
82
+ let bestMatch = null;
83
+ let bestScore = 0;
84
+ for (const fact of facts) {
85
+ const factText = fact.text || "";
86
+ const similarity = calculateSimilarity(context, factText);
87
+ // Lower threshold (0.1) since explicit triggers already indicate high confidence
88
+ if (similarity > bestScore && similarity > minThreshold) {
89
+ bestScore = similarity;
90
+ bestMatch = fact;
91
+ }
92
+ }
93
+ return bestMatch;
94
+ }
95
+ // =============================================================================
96
+ // Strategy 2: Semantic Similarity Detection (Medium Confidence)
97
+ // =============================================================================
98
+ /**
99
+ * Detect semantic matches between response and facts
100
+ * Uses Jaccard similarity (word overlap) for comparison
101
+ */
102
+ export function detectSemanticMatches(response, recalledFacts, threshold = SEMANTIC_THRESHOLD) {
103
+ if (!response || !recalledFacts?.length) {
104
+ return [];
105
+ }
106
+ const detections = [];
107
+ const factDetections = new Map();
108
+ // Split response into chunks for comparison
109
+ const chunks = splitIntoChunks(response, CHUNK_MAX_WORDS, CHUNK_OVERLAP_WORDS);
110
+ // Compare each chunk to each fact
111
+ for (const chunk of chunks) {
112
+ for (const fact of recalledFacts) {
113
+ const factText = fact.text || "";
114
+ const similarity = calculateSimilarity(chunk, factText);
115
+ if (similarity >= threshold) {
116
+ const confidence = Math.min(similarity * SEMANTIC_MAX_CONFIDENCE, SEMANTIC_MAX_CONFIDENCE);
117
+ // Keep best detection per fact
118
+ const existing = factDetections.get(fact.factId);
119
+ if (!existing || confidence > existing.confidence) {
120
+ factDetections.set(fact.factId, {
121
+ factId: fact.factId,
122
+ detectionType: "semantic_match",
123
+ confidence,
124
+ evidence: {
125
+ chunk: chunk.slice(0, 200),
126
+ factText: factText.slice(0, 200),
127
+ similarity,
128
+ },
129
+ });
130
+ }
131
+ }
132
+ }
133
+ }
134
+ // Convert map to array
135
+ for (const detection of factDetections.values()) {
136
+ detections.push(detection);
137
+ }
138
+ return detections;
139
+ }
140
+ /**
141
+ * Split text into overlapping chunks
142
+ */
143
+ function splitIntoChunks(text, maxWords = CHUNK_MAX_WORDS, overlap = CHUNK_OVERLAP_WORDS) {
144
+ const words = text.split(/\s+/).filter(Boolean);
145
+ const chunks = [];
146
+ if (words.length <= maxWords) {
147
+ return [text];
148
+ }
149
+ const step = maxWords - overlap;
150
+ for (let i = 0; i < words.length; i += step) {
151
+ const chunkWords = words.slice(i, i + maxWords);
152
+ if (chunkWords.length >= overlap) {
153
+ chunks.push(chunkWords.join(" "));
154
+ }
155
+ }
156
+ return chunks;
157
+ }
158
+ // =============================================================================
159
+ // Strategy 3: Behavioral Signal Detection (Low Confidence)
160
+ // =============================================================================
161
+ /**
162
+ * Detect behavioral signals that indicate fact usage
163
+ */
164
+ export function detectBehavioralSignals(sessionActivity, recalledFacts) {
165
+ if (!sessionActivity || !recalledFacts?.length) {
166
+ return [];
167
+ }
168
+ const detections = [];
169
+ const detectedFactIds = new Set();
170
+ // 1. File access correlation
171
+ const accessedFiles = sessionActivity.filesAccessed || [];
172
+ if (accessedFiles.length > 0) {
173
+ for (const fact of recalledFacts) {
174
+ const factText = fact.text || "";
175
+ const mentionedFiles = extractFileReferences(factText);
176
+ if (mentionedFiles.length > 0) {
177
+ const overlap = intersection(accessedFiles, mentionedFiles);
178
+ if (overlap.length > 0 && !detectedFactIds.has(fact.factId)) {
179
+ detectedFactIds.add(fact.factId);
180
+ detections.push({
181
+ factId: fact.factId,
182
+ detectionType: "file_access_correlation",
183
+ confidence: FILE_ACCESS_CONFIDENCE,
184
+ evidence: {
185
+ filesInFact: mentionedFiles,
186
+ filesAccessed: overlap,
187
+ },
188
+ });
189
+ }
190
+ }
191
+ }
192
+ }
193
+ // 2. Task topic correlation
194
+ const tasksCompleted = sessionActivity.tasksCompleted || [];
195
+ if (tasksCompleted.length > 0) {
196
+ for (const fact of recalledFacts) {
197
+ if (detectedFactIds.has(fact.factId))
198
+ continue;
199
+ const factText = fact.text || "";
200
+ const factTopics = extractTopics(factText);
201
+ for (const task of tasksCompleted) {
202
+ const taskDesc = task.description || task.title || String(task);
203
+ const taskTopics = extractTopics(taskDesc);
204
+ const topicOverlap = jaccardSimilarity(factTopics, taskTopics);
205
+ if (topicOverlap > 0.3 && !detectedFactIds.has(fact.factId)) {
206
+ detectedFactIds.add(fact.factId);
207
+ detections.push({
208
+ factId: fact.factId,
209
+ detectionType: "task_topic_correlation",
210
+ confidence: TASK_TOPIC_CONFIDENCE * topicOverlap,
211
+ evidence: {
212
+ task: taskDesc.slice(0, 100),
213
+ factTopics: [...factTopics].slice(0, 5),
214
+ taskTopics: [...taskTopics].slice(0, 5),
215
+ overlap: topicOverlap,
216
+ },
217
+ });
218
+ break;
219
+ }
220
+ }
221
+ }
222
+ }
223
+ return detections;
224
+ }
225
+ /**
226
+ * Extract file references from text
227
+ */
228
+ export function extractFileReferences(text) {
229
+ if (!text)
230
+ return [];
231
+ const files = new Set();
232
+ // Create fresh regex patterns for each call to avoid shared state issues
233
+ const patterns = createFileReferencePatterns();
234
+ for (const pattern of patterns) {
235
+ let match;
236
+ while ((match = pattern.exec(text)) !== null) {
237
+ const file = match[1] || match[0];
238
+ if (file && file.length > 2) {
239
+ const normalized = normalizeFileName(file);
240
+ if (normalized) {
241
+ files.add(normalized);
242
+ }
243
+ }
244
+ }
245
+ }
246
+ return [...files];
247
+ }
248
+ /**
249
+ * Normalize a file name for comparison
250
+ * @returns Normalized file name or empty string if input is invalid
251
+ */
252
+ function normalizeFileName(fileName) {
253
+ if (!fileName)
254
+ return "";
255
+ const normalized = fileName
256
+ .toLowerCase()
257
+ .replace(/^['"]|['"]$/g, "") // Remove quotes
258
+ .trim();
259
+ if (!normalized)
260
+ return "";
261
+ const parts = normalized.split("/").filter(Boolean);
262
+ const baseName = parts.length > 0 ? parts[parts.length - 1] : "";
263
+ return baseName ?? "";
264
+ }
265
+ /**
266
+ * Extract topic keywords from text
267
+ */
268
+ export function extractTopics(text) {
269
+ if (!text)
270
+ return new Set();
271
+ // Common stop words to filter out
272
+ const stopWords = new Set([
273
+ "the", "a", "an", "and", "or", "but", "in", "on", "at", "to", "for",
274
+ "of", "with", "by", "from", "as", "is", "was", "are", "were", "be",
275
+ "been", "being", "have", "has", "had", "do", "does", "did", "will",
276
+ "would", "could", "should", "may", "might", "must", "shall", "can",
277
+ "this", "that", "these", "those", "it", "its", "they", "them", "their",
278
+ "we", "us", "our", "you", "your", "i", "me", "my", "he", "she", "him", "her", "his",
279
+ ]);
280
+ const words = text
281
+ .toLowerCase()
282
+ .replace(/[^\w\s]/g, " ")
283
+ .split(/\s+/)
284
+ .filter((w) => w.length > 2 && !stopWords.has(w));
285
+ return new Set(words);
286
+ }
287
+ /**
288
+ * Calculate intersection of two arrays
289
+ */
290
+ function intersection(arr1, arr2) {
291
+ const set2 = new Set(arr2.map((s) => s.toLowerCase()));
292
+ return arr1.filter((item) => set2.has(item.toLowerCase()));
293
+ }
294
+ // =============================================================================
295
+ // Strategy 4: Negative Signal Detection
296
+ // =============================================================================
297
+ /**
298
+ * Detect negative signals for facts that were likely NOT used
299
+ */
300
+ export function detectNegativeSignals(sessionActivity, recalledFacts, usedFactIds) {
301
+ if (!recalledFacts?.length) {
302
+ return [];
303
+ }
304
+ const negativeSignals = [];
305
+ const sessionTopics = sessionActivity?.summary ? extractTopics(sessionActivity.summary) : new Set();
306
+ const accessedFiles = new Set((sessionActivity?.filesAccessed || []).map((f) => f.toLowerCase()));
307
+ for (const fact of recalledFacts) {
308
+ // Skip facts already detected as used
309
+ if (usedFactIds.has(fact.factId))
310
+ continue;
311
+ const signals = [];
312
+ const factText = fact.text || "";
313
+ // 1. Position-based signal (facts at end less likely useful)
314
+ if (fact.position > LOW_POSITION_THRESHOLD) {
315
+ signals.push({
316
+ type: "low_position",
317
+ weight: LOW_POSITION_WEIGHT,
318
+ detail: `Position ${fact.position} > ${LOW_POSITION_THRESHOLD}`,
319
+ });
320
+ }
321
+ // 2. Topic mismatch signal
322
+ if (sessionTopics.size > 0) {
323
+ const factTopics = extractTopics(factText);
324
+ const topicOverlap = jaccardSimilarity(sessionTopics, factTopics);
325
+ if (topicOverlap < TOPIC_MISMATCH_THRESHOLD) {
326
+ signals.push({
327
+ type: "topic_mismatch",
328
+ weight: TOPIC_MISMATCH_WEIGHT,
329
+ detail: `Topic overlap ${(topicOverlap * 100).toFixed(1)}% < ${TOPIC_MISMATCH_THRESHOLD * 100}%`,
330
+ });
331
+ }
332
+ }
333
+ // 3. Files not accessed signal
334
+ const factFiles = extractFileReferences(factText);
335
+ if (factFiles.length > 0) {
336
+ const filesAccessed = factFiles.filter((f) => accessedFiles.has(f.toLowerCase()));
337
+ if (filesAccessed.length === 0) {
338
+ signals.push({
339
+ type: "files_not_accessed",
340
+ weight: FILES_NOT_ACCESSED_WEIGHT,
341
+ detail: `Fact mentions ${factFiles.length} files, none accessed`,
342
+ });
343
+ }
344
+ }
345
+ // Only add negative signal if we found at least one indicator
346
+ if (signals.length > 0) {
347
+ const totalWeight = signals.reduce((sum, s) => sum + s.weight, 0);
348
+ negativeSignals.push({
349
+ factId: fact.factId,
350
+ signals,
351
+ ignoreConfidence: Math.min(totalWeight, MAX_IGNORE_CONFIDENCE),
352
+ });
353
+ }
354
+ }
355
+ return negativeSignals;
356
+ }
357
+ // =============================================================================
358
+ // Detection Pipeline
359
+ // =============================================================================
360
+ /**
361
+ * Run the full detection pipeline
362
+ */
363
+ export function runDetectionPipeline(conversationText, sessionActivity, recalledFacts, config = {}) {
364
+ const results = {
365
+ explicit: [],
366
+ semantic: [],
367
+ behavioral: [],
368
+ negative: [],
369
+ };
370
+ // Run enabled detection strategies
371
+ if (conversationText) {
372
+ if (config.explicit !== false) {
373
+ results.explicit = detectExplicitReferences(conversationText, recalledFacts);
374
+ }
375
+ if (config.semantic !== false) {
376
+ const threshold = config.semanticThreshold || SEMANTIC_THRESHOLD;
377
+ results.semantic = detectSemanticMatches(conversationText, recalledFacts, threshold);
378
+ }
379
+ }
380
+ if (sessionActivity && config.behavioral !== false) {
381
+ results.behavioral = detectBehavioralSignals(sessionActivity, recalledFacts);
382
+ }
383
+ // Collect all used fact IDs for negative signal detection
384
+ const usedFactIds = new Set([
385
+ ...results.explicit.map((d) => d.factId),
386
+ ...results.semantic.map((d) => d.factId),
387
+ ...results.behavioral.map((d) => d.factId),
388
+ ]);
389
+ // Run negative signal detection
390
+ results.negative = detectNegativeSignals(sessionActivity, recalledFacts, usedFactIds);
391
+ return results;
392
+ }
393
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/feedback/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Memory Feedback Loop Module
3
+ *
4
+ * Provides a closed-loop feedback system that:
5
+ * 1. Tracks which recalled facts Claude actually uses
6
+ * 2. Scores facts based on usefulness signals
7
+ * 3. Prepares feedback for Hindsight API
8
+ *
9
+ * @module feedback
10
+ */
11
+ import { type RecallSession } from "./tracker.js";
12
+ import { type SessionActivity } from "./detector.js";
13
+ import { type FeedbackResult } from "./scorer.js";
14
+ import type { FeedbackConfig, Memory } from "../types.js";
15
+ export { EXPLICIT_CONFIDENCE, SEMANTIC_THRESHOLD, SEMANTIC_MAX_CONFIDENCE, BEHAVIORAL_CONFIDENCE_BASE, USED_THRESHOLD, IGNORED_THRESHOLD, EXPLICIT_TRIGGERS, FILE_REFERENCE_PATTERNS, DEFAULT_FEEDBACK_CONFIG, SESSION_DATA_RETENTION_DAYS, } from "./constants.js";
16
+ export { createRecallSession, addRecalledFacts, saveRecallSession, loadRecallSession, trackRecall, cleanupOldSessions, getSessionStats, getRecallSessionPath, getSessionActivityDir, type RecallSession, type RecalledFact, type SessionStats, } from "./tracker.js";
17
+ export { detectExplicitReferences, detectSemanticMatches, detectBehavioralSignals, detectNegativeSignals, runDetectionPipeline, extractFileReferences, extractTopics, type Detection, type NegativeSignal, type DetectionResults, type SessionActivity, } from "./detector.js";
18
+ export { aggregateDetections, calculateVerdict, prepareFeedback, summarizeFeedback, filterHighConfidence, getDetectionBreakdown, type FactScore, type FeedbackSummary, type FeedbackResult, type Verdict, } from "./scorer.js";
19
+ export { calculateSimilarity, jaccardSimilarity } from "./similarity.js";
20
+ export interface ProcessFeedbackOptions {
21
+ conversationText?: string;
22
+ sessionActivity?: SessionActivity;
23
+ }
24
+ export interface TrackRecallResult {
25
+ success: boolean;
26
+ sessionId?: string;
27
+ factsTracked?: number;
28
+ reason?: string;
29
+ error?: string;
30
+ }
31
+ export interface StatsResult {
32
+ success: boolean;
33
+ enabled: boolean;
34
+ currentSession?: RecallSession | null;
35
+ archivedSessions?: number;
36
+ totalFactsTracked?: number;
37
+ oldestSession?: string | null;
38
+ newestSession?: string | null;
39
+ error?: string;
40
+ }
41
+ /**
42
+ * FeedbackService - Main facade class for the feedback loop
43
+ *
44
+ * Provides a high-level interface for:
45
+ * - Tracking recall sessions
46
+ * - Processing feedback at session end
47
+ * - Viewing statistics and patterns
48
+ */
49
+ export declare class FeedbackService {
50
+ private projectDir;
51
+ private config;
52
+ /**
53
+ * Create a new FeedbackService
54
+ */
55
+ constructor(config: FeedbackConfig, projectDir: string);
56
+ /**
57
+ * Check if feedback loop is enabled
58
+ */
59
+ isEnabled(): boolean;
60
+ /**
61
+ * Track a recall operation
62
+ */
63
+ trackRecall(sessionId: string, query: string, facts: Memory[]): Promise<TrackRecallResult>;
64
+ /**
65
+ * Process feedback for a session
66
+ */
67
+ processFeedback(sessionId: string, options?: ProcessFeedbackOptions): Promise<FeedbackResult>;
68
+ /**
69
+ * Get feedback statistics for the project
70
+ */
71
+ getStats(): Promise<StatsResult>;
72
+ /**
73
+ * Update configuration
74
+ */
75
+ updateConfig(config: Partial<FeedbackConfig>): void;
76
+ /**
77
+ * Get current configuration
78
+ */
79
+ getConfig(): FeedbackConfig;
80
+ }
81
+ /**
82
+ * Create a new FeedbackService instance
83
+ */
84
+ export declare function createFeedbackService(config: FeedbackConfig, projectDir: string): FeedbackService;
85
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feedback/index.ts"],"names":[],"mappings":"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"}