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.
- package/README.md +57 -35
- package/dist/agents/context.d.ts.map +1 -1
- package/dist/agents/context.js +7 -7
- package/dist/agents/context.js.map +1 -1
- package/dist/cli/commands/feedback-stats.d.ts +10 -0
- package/dist/cli/commands/feedback-stats.d.ts.map +1 -0
- package/dist/cli/commands/feedback-stats.js +70 -0
- package/dist/cli/commands/feedback-stats.js.map +1 -0
- package/dist/cli/commands/feedback-sync.d.ts +10 -0
- package/dist/cli/commands/feedback-sync.d.ts.map +1 -0
- package/dist/cli/commands/feedback-sync.js +117 -0
- package/dist/cli/commands/feedback-sync.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +130 -4
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/semantic.d.ts +4 -2
- package/dist/cli/commands/semantic.d.ts.map +1 -1
- package/dist/cli/commands/semantic.js +8 -57
- package/dist/cli/commands/semantic.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +0 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/sync.d.ts +4 -2
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +9 -250
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +106 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/output.d.ts +0 -2
- package/dist/cli/utils/output.d.ts.map +1 -1
- package/dist/cli/utils/output.js +0 -2
- package/dist/cli/utils/output.js.map +1 -1
- package/dist/client.d.ts +121 -22
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +209 -36
- package/dist/client.js.map +1 -1
- package/dist/events.d.ts +30 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/feedback/constants.d.ts +72 -0
- package/dist/feedback/constants.d.ts.map +1 -0
- package/dist/feedback/constants.js +145 -0
- package/dist/feedback/constants.js.map +1 -0
- package/dist/feedback/detector.d.ts +75 -0
- package/dist/feedback/detector.d.ts.map +1 -0
- package/dist/feedback/detector.js +393 -0
- package/dist/feedback/detector.js.map +1 -0
- package/dist/feedback/index.d.ts +85 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +194 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/feedback/offline-queue.d.ts +110 -0
- package/dist/feedback/offline-queue.d.ts.map +1 -0
- package/dist/feedback/offline-queue.js +188 -0
- package/dist/feedback/offline-queue.js.map +1 -0
- package/dist/feedback/scorer.d.ts +81 -0
- package/dist/feedback/scorer.d.ts.map +1 -0
- package/dist/feedback/scorer.js +194 -0
- package/dist/feedback/scorer.js.map +1 -0
- package/dist/feedback/similarity.d.ts +19 -0
- package/dist/feedback/similarity.d.ts.map +1 -0
- package/dist/feedback/similarity.js +49 -0
- package/dist/feedback/similarity.js.map +1 -0
- package/dist/feedback/tracker.d.ts +104 -0
- package/dist/feedback/tracker.d.ts.map +1 -0
- package/dist/feedback/tracker.js +324 -0
- package/dist/feedback/tracker.js.map +1 -0
- package/dist/hooks/process-session.d.ts.map +1 -1
- package/dist/hooks/process-session.js +17 -8
- package/dist/hooks/process-session.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/learn/index.d.ts.map +1 -1
- package/dist/learn/index.js +6 -2
- package/dist/learn/index.js.map +1 -1
- package/dist/mcp/handlers.d.ts +9 -1
- package/dist/mcp/handlers.d.ts.map +1 -1
- package/dist/mcp/handlers.js +66 -0
- package/dist/mcp/handlers.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +42 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +77 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +30 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +16 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mind.d.ts +47 -28
- package/dist/mind.d.ts.map +1 -1
- package/dist/mind.js +351 -104
- package/dist/mind.js.map +1 -1
- package/dist/offline.d.ts +111 -0
- package/dist/offline.d.ts.map +1 -0
- package/dist/offline.js +198 -0
- package/dist/offline.js.map +1 -0
- package/dist/types.d.ts +171 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Scorer
|
|
3
|
+
*
|
|
4
|
+
* Aggregates detection results into final fact scores and prepares
|
|
5
|
+
* feedback for storage/API submission.
|
|
6
|
+
*
|
|
7
|
+
* @module feedback/scorer
|
|
8
|
+
*/
|
|
9
|
+
import { USED_THRESHOLD, IGNORED_THRESHOLD, NEGATIVE_SIGNAL_WEIGHT, } from "./constants.js";
|
|
10
|
+
/**
|
|
11
|
+
* Aggregate all detections into final fact scores
|
|
12
|
+
*/
|
|
13
|
+
export function aggregateDetections(detections) {
|
|
14
|
+
const factScores = new Map();
|
|
15
|
+
// Process positive signals (additive)
|
|
16
|
+
const positiveDetections = [
|
|
17
|
+
...(detections.explicit || []),
|
|
18
|
+
...(detections.semantic || []),
|
|
19
|
+
...(detections.behavioral || []),
|
|
20
|
+
];
|
|
21
|
+
for (const detection of positiveDetections) {
|
|
22
|
+
const current = factScores.get(detection.factId) || {
|
|
23
|
+
factId: detection.factId,
|
|
24
|
+
used: 0,
|
|
25
|
+
ignored: 0,
|
|
26
|
+
detections: [],
|
|
27
|
+
};
|
|
28
|
+
// Add confidence (cap at 1.0)
|
|
29
|
+
current.used = Math.min(current.used + detection.confidence, 1.0);
|
|
30
|
+
current.detections.push(detection);
|
|
31
|
+
factScores.set(detection.factId, current);
|
|
32
|
+
}
|
|
33
|
+
// Process negative signals
|
|
34
|
+
for (const signal of detections.negative || []) {
|
|
35
|
+
const current = factScores.get(signal.factId) || {
|
|
36
|
+
factId: signal.factId,
|
|
37
|
+
used: 0,
|
|
38
|
+
ignored: 0,
|
|
39
|
+
detections: [],
|
|
40
|
+
};
|
|
41
|
+
// Add ignore confidence (cap at 1.0)
|
|
42
|
+
current.ignored = Math.min(current.ignored + signal.ignoreConfidence, 1.0);
|
|
43
|
+
current.detections.push({
|
|
44
|
+
detectionType: "negative_signals",
|
|
45
|
+
confidence: signal.ignoreConfidence,
|
|
46
|
+
evidence: { signals: signal.signals },
|
|
47
|
+
});
|
|
48
|
+
factScores.set(signal.factId, current);
|
|
49
|
+
}
|
|
50
|
+
// Calculate final verdicts
|
|
51
|
+
const results = [];
|
|
52
|
+
for (const scores of factScores.values()) {
|
|
53
|
+
const verdict = calculateVerdict(scores.used, scores.ignored);
|
|
54
|
+
results.push({
|
|
55
|
+
factId: scores.factId,
|
|
56
|
+
verdict: verdict.verdict,
|
|
57
|
+
confidence: verdict.confidence,
|
|
58
|
+
scores: {
|
|
59
|
+
used: scores.used,
|
|
60
|
+
ignored: scores.ignored,
|
|
61
|
+
},
|
|
62
|
+
detections: scores.detections,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Sort by confidence (highest first)
|
|
66
|
+
results.sort((a, b) => b.confidence - a.confidence);
|
|
67
|
+
return results;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Calculate verdict for a fact based on used and ignored scores
|
|
71
|
+
*/
|
|
72
|
+
export function calculateVerdict(usedScore, ignoredScore) {
|
|
73
|
+
// Net score: positive - (negative * weight)
|
|
74
|
+
// Negative signals weighted less than positive
|
|
75
|
+
const netScore = usedScore - (ignoredScore * NEGATIVE_SIGNAL_WEIGHT);
|
|
76
|
+
let verdict;
|
|
77
|
+
if (netScore > USED_THRESHOLD) {
|
|
78
|
+
verdict = "used";
|
|
79
|
+
}
|
|
80
|
+
else if (netScore < IGNORED_THRESHOLD) {
|
|
81
|
+
verdict = "ignored";
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
verdict = "uncertain";
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
verdict,
|
|
88
|
+
confidence: Math.abs(netScore),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// =============================================================================
|
|
92
|
+
// Feedback Preparation
|
|
93
|
+
// =============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Prepare feedback for Hindsight API submission
|
|
96
|
+
* Sanitizes data to ensure no sensitive information is included
|
|
97
|
+
*/
|
|
98
|
+
export function prepareFeedback(factScores, query) {
|
|
99
|
+
return factScores
|
|
100
|
+
.filter((score) => score.verdict !== "uncertain")
|
|
101
|
+
.map((score) => ({
|
|
102
|
+
factId: score.factId,
|
|
103
|
+
signalType: score.verdict,
|
|
104
|
+
confidence: score.confidence,
|
|
105
|
+
query,
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create a summary of feedback results
|
|
110
|
+
*/
|
|
111
|
+
export function summarizeFeedback(factScores) {
|
|
112
|
+
const summary = {
|
|
113
|
+
total: factScores.length,
|
|
114
|
+
used: 0,
|
|
115
|
+
ignored: 0,
|
|
116
|
+
uncertain: 0,
|
|
117
|
+
usageRate: 0,
|
|
118
|
+
avgUsedConfidence: 0,
|
|
119
|
+
avgIgnoredConfidence: 0,
|
|
120
|
+
topUsed: [],
|
|
121
|
+
topIgnored: [],
|
|
122
|
+
};
|
|
123
|
+
let usedConfidenceSum = 0;
|
|
124
|
+
let ignoredConfidenceSum = 0;
|
|
125
|
+
for (const score of factScores) {
|
|
126
|
+
switch (score.verdict) {
|
|
127
|
+
case "used":
|
|
128
|
+
summary.used++;
|
|
129
|
+
usedConfidenceSum += score.confidence;
|
|
130
|
+
break;
|
|
131
|
+
case "ignored":
|
|
132
|
+
summary.ignored++;
|
|
133
|
+
ignoredConfidenceSum += score.confidence;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
summary.uncertain++;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Calculate rates and averages
|
|
140
|
+
if (summary.total > 0) {
|
|
141
|
+
summary.usageRate = summary.used / summary.total;
|
|
142
|
+
}
|
|
143
|
+
if (summary.used > 0) {
|
|
144
|
+
summary.avgUsedConfidence = usedConfidenceSum / summary.used;
|
|
145
|
+
}
|
|
146
|
+
if (summary.ignored > 0) {
|
|
147
|
+
summary.avgIgnoredConfidence = ignoredConfidenceSum / summary.ignored;
|
|
148
|
+
}
|
|
149
|
+
// Get top 5 used and ignored facts
|
|
150
|
+
const used = factScores
|
|
151
|
+
.filter((s) => s.verdict === "used")
|
|
152
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
153
|
+
const ignored = factScores
|
|
154
|
+
.filter((s) => s.verdict === "ignored")
|
|
155
|
+
.sort((a, b) => b.confidence - a.confidence);
|
|
156
|
+
summary.topUsed = used.slice(0, 5).map((s) => ({
|
|
157
|
+
factId: s.factId,
|
|
158
|
+
confidence: s.confidence,
|
|
159
|
+
detectionTypes: [...new Set(s.detections.map((d) => d.detectionType))],
|
|
160
|
+
}));
|
|
161
|
+
summary.topIgnored = ignored.slice(0, 5).map((s) => ({
|
|
162
|
+
factId: s.factId,
|
|
163
|
+
confidence: s.confidence,
|
|
164
|
+
}));
|
|
165
|
+
return summary;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Filter feedback to only high-confidence results
|
|
169
|
+
*/
|
|
170
|
+
export function filterHighConfidence(factScores, minConfidence = 0.5) {
|
|
171
|
+
return factScores.filter((score) => score.verdict !== "uncertain" && score.confidence >= minConfidence);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get detection type breakdown
|
|
175
|
+
*/
|
|
176
|
+
export function getDetectionBreakdown(factScores) {
|
|
177
|
+
const breakdown = {
|
|
178
|
+
explicit_reference: 0,
|
|
179
|
+
semantic_match: 0,
|
|
180
|
+
file_access_correlation: 0,
|
|
181
|
+
task_topic_correlation: 0,
|
|
182
|
+
negative_signals: 0,
|
|
183
|
+
};
|
|
184
|
+
for (const score of factScores) {
|
|
185
|
+
for (const detection of score.detections || []) {
|
|
186
|
+
const detType = detection.detectionType;
|
|
187
|
+
if (detType && detType in breakdown && breakdown[detType] !== undefined) {
|
|
188
|
+
breakdown[detType] = breakdown[detType] + 1;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return breakdown;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../../src/feedback/scorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Similarity Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides Jaccard similarity calculation for semantic matching.
|
|
5
|
+
*
|
|
6
|
+
* @module feedback/similarity
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Calculate Jaccard similarity between two texts
|
|
10
|
+
* @param text1 - First text
|
|
11
|
+
* @param text2 - Second text
|
|
12
|
+
* @returns Similarity score (0-1)
|
|
13
|
+
*/
|
|
14
|
+
export declare function calculateSimilarity(text1: string, text2: string): number;
|
|
15
|
+
/**
|
|
16
|
+
* Calculate Jaccard similarity between two sets
|
|
17
|
+
*/
|
|
18
|
+
export declare function jaccardSimilarity(set1: Set<string>, set2: Set<string>): number;
|
|
19
|
+
//# sourceMappingURL=similarity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../src/feedback/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAQ9E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Similarity Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides Jaccard similarity calculation for semantic matching.
|
|
5
|
+
*
|
|
6
|
+
* @module feedback/similarity
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Normalize text for comparison
|
|
10
|
+
*/
|
|
11
|
+
function normalizeText(text) {
|
|
12
|
+
return text
|
|
13
|
+
.toLowerCase()
|
|
14
|
+
.replace(/[^\w\s]/g, "") // Remove punctuation
|
|
15
|
+
.replace(/\s+/g, " ") // Normalize whitespace
|
|
16
|
+
.trim();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Calculate Jaccard similarity between two texts
|
|
20
|
+
* @param text1 - First text
|
|
21
|
+
* @param text2 - Second text
|
|
22
|
+
* @returns Similarity score (0-1)
|
|
23
|
+
*/
|
|
24
|
+
export function calculateSimilarity(text1, text2) {
|
|
25
|
+
const words1 = new Set(normalizeText(text1).split(/\s+/).filter(Boolean));
|
|
26
|
+
const words2 = new Set(normalizeText(text2).split(/\s+/).filter(Boolean));
|
|
27
|
+
if (words1.size === 0 && words2.size === 0) {
|
|
28
|
+
return 1; // Both empty = identical
|
|
29
|
+
}
|
|
30
|
+
if (words1.size === 0 || words2.size === 0) {
|
|
31
|
+
return 0; // One empty = no similarity
|
|
32
|
+
}
|
|
33
|
+
const intersection = new Set([...words1].filter((w) => words2.has(w)));
|
|
34
|
+
const union = new Set([...words1, ...words2]);
|
|
35
|
+
return intersection.size / union.size;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Calculate Jaccard similarity between two sets
|
|
39
|
+
*/
|
|
40
|
+
export function jaccardSimilarity(set1, set2) {
|
|
41
|
+
if (set1.size === 0 && set2.size === 0)
|
|
42
|
+
return 1;
|
|
43
|
+
if (set1.size === 0 || set2.size === 0)
|
|
44
|
+
return 0;
|
|
45
|
+
const intersectionSize = [...set1].filter((x) => set2.has(x)).length;
|
|
46
|
+
const unionSize = new Set([...set1, ...set2]).size;
|
|
47
|
+
return intersectionSize / unionSize;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=similarity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../src/feedback/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,qBAAqB;SAC7C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;SAC5C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAa;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,yBAAyB;IACrC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,4BAA4B;IACxC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAE9C,OAAO,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,IAAiB;IACpE,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnD,OAAO,gBAAgB,GAAG,SAAS,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recall Session Tracker
|
|
3
|
+
*
|
|
4
|
+
* Tracks recalled facts for a session to enable feedback loop analysis.
|
|
5
|
+
* Writes to .claude/feedback-sessions/.recall-session.json
|
|
6
|
+
*
|
|
7
|
+
* @module feedback/tracker
|
|
8
|
+
*/
|
|
9
|
+
import type { Memory } from "../types.js";
|
|
10
|
+
export interface RecallParams {
|
|
11
|
+
query: string;
|
|
12
|
+
queryType: "fixed" | "adaptive";
|
|
13
|
+
parameters: {
|
|
14
|
+
limit: number;
|
|
15
|
+
budget: string;
|
|
16
|
+
factTypes: string[];
|
|
17
|
+
timeWindow: string | null;
|
|
18
|
+
};
|
|
19
|
+
context: SessionContext;
|
|
20
|
+
}
|
|
21
|
+
export interface SessionContext {
|
|
22
|
+
branch: string | null;
|
|
23
|
+
recentFiles: string[];
|
|
24
|
+
projectType: string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface RecalledFact {
|
|
27
|
+
factId: string;
|
|
28
|
+
text: string;
|
|
29
|
+
factType: string;
|
|
30
|
+
score: number;
|
|
31
|
+
position: number;
|
|
32
|
+
}
|
|
33
|
+
export interface RecallSession {
|
|
34
|
+
sessionId: string;
|
|
35
|
+
startedAt: string;
|
|
36
|
+
project: string;
|
|
37
|
+
recall: RecallParams;
|
|
38
|
+
factsRecalled: RecalledFact[];
|
|
39
|
+
totalFacts: number;
|
|
40
|
+
totalTokens: number;
|
|
41
|
+
}
|
|
42
|
+
export interface SessionStats {
|
|
43
|
+
currentSession: RecallSession | null;
|
|
44
|
+
archivedSessions: number;
|
|
45
|
+
totalFactsTracked: number;
|
|
46
|
+
oldestSession: string | null;
|
|
47
|
+
newestSession: string | null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the path to the feedback sessions directory
|
|
51
|
+
*/
|
|
52
|
+
export declare function getSessionActivityDir(projectDir: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Get the path to the recall session file
|
|
55
|
+
*/
|
|
56
|
+
export declare function getRecallSessionPath(projectDir: string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Create a new recall session record
|
|
59
|
+
*/
|
|
60
|
+
export declare function createRecallSession(sessionId: string, projectDir: string, recallParams?: {
|
|
61
|
+
query?: string;
|
|
62
|
+
queryType?: "fixed" | "adaptive";
|
|
63
|
+
limit?: number;
|
|
64
|
+
budget?: string;
|
|
65
|
+
factTypes?: string[];
|
|
66
|
+
timeWindow?: string | null;
|
|
67
|
+
}): RecallSession;
|
|
68
|
+
/**
|
|
69
|
+
* Add recalled facts to session
|
|
70
|
+
*/
|
|
71
|
+
export declare function addRecalledFacts(session: RecallSession, facts: Memory[]): RecallSession;
|
|
72
|
+
/**
|
|
73
|
+
* Save recall session to disk
|
|
74
|
+
*/
|
|
75
|
+
export declare function saveRecallSession(session: RecallSession, projectDir: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Load recall session from disk
|
|
78
|
+
*/
|
|
79
|
+
export declare function loadRecallSession(sessionId: string | null, projectDir: string): Promise<RecallSession | null>;
|
|
80
|
+
/**
|
|
81
|
+
* Track a recall operation (convenience function combining create, add, save)
|
|
82
|
+
*/
|
|
83
|
+
export declare function trackRecall(options: {
|
|
84
|
+
sessionId: string;
|
|
85
|
+
projectDir: string;
|
|
86
|
+
query: string;
|
|
87
|
+
facts: Memory[];
|
|
88
|
+
params?: {
|
|
89
|
+
queryType?: "fixed" | "adaptive";
|
|
90
|
+
limit?: number;
|
|
91
|
+
budget?: string;
|
|
92
|
+
factTypes?: string[];
|
|
93
|
+
timeWindow?: string | null;
|
|
94
|
+
};
|
|
95
|
+
}): Promise<RecallSession>;
|
|
96
|
+
/**
|
|
97
|
+
* Clean up old session data
|
|
98
|
+
*/
|
|
99
|
+
export declare function cleanupOldSessions(projectDir: string, retentionDays?: number): Promise<number>;
|
|
100
|
+
/**
|
|
101
|
+
* Get statistics about tracked sessions
|
|
102
|
+
*/
|
|
103
|
+
export declare function getSessionStats(projectDir: string): Promise<SessionStats>;
|
|
104
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/feedback/tracker.ts"],"names":[],"mappings":"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"}
|