@stackmemoryai/stackmemory 0.1.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 +317 -0
- package/dist/attention-scoring/src/attention-tracker.d.ts +79 -0
- package/dist/attention-scoring/src/attention-tracker.d.ts.map +1 -0
- package/dist/attention-scoring/src/attention-tracker.js +488 -0
- package/dist/attention-scoring/src/attention-tracker.js.map +1 -0
- package/dist/attention-scoring/src/mcp-integration.d.ts +56 -0
- package/dist/attention-scoring/src/mcp-integration.d.ts.map +1 -0
- package/dist/attention-scoring/src/mcp-integration.js +369 -0
- package/dist/attention-scoring/src/mcp-integration.js.map +1 -0
- package/dist/p2p-sync/src/p2p-sync.d.ts +81 -0
- package/dist/p2p-sync/src/p2p-sync.d.ts.map +1 -0
- package/dist/p2p-sync/src/p2p-sync.js +457 -0
- package/dist/p2p-sync/src/p2p-sync.js.map +1 -0
- package/dist/p2p-sync/src/team-context-sync.d.ts +99 -0
- package/dist/p2p-sync/src/team-context-sync.d.ts.map +1 -0
- package/dist/p2p-sync/src/team-context-sync.js +491 -0
- package/dist/p2p-sync/src/team-context-sync.js.map +1 -0
- package/dist/scripts/initialize.d.ts +6 -0
- package/dist/scripts/initialize.d.ts.map +1 -0
- package/dist/scripts/initialize.js +93 -0
- package/dist/scripts/initialize.js.map +1 -0
- package/dist/scripts/status.d.ts +6 -0
- package/dist/scripts/status.d.ts.map +1 -0
- package/dist/scripts/status.js +87 -0
- package/dist/scripts/status.js.map +1 -0
- package/dist/src/cli.d.ts +7 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +73 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/error-handler.d.ts +42 -0
- package/dist/src/error-handler.d.ts.map +1 -0
- package/dist/src/error-handler.js +155 -0
- package/dist/src/error-handler.js.map +1 -0
- package/dist/src/frame-manager.d.ts +106 -0
- package/dist/src/frame-manager.d.ts.map +1 -0
- package/dist/src/frame-manager.js +361 -0
- package/dist/src/frame-manager.js.map +1 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger.d.ts +24 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +120 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/mcp-server.d.ts +32 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +441 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attention-Based Importance Scoring System
|
|
3
|
+
*
|
|
4
|
+
* Tracks which context pieces actually influence AI decisions
|
|
5
|
+
* and adjusts their importance scores based on real usage
|
|
6
|
+
*/
|
|
7
|
+
import Database from 'better-sqlite3';
|
|
8
|
+
import { createHash } from 'crypto';
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
// ============================================
|
|
11
|
+
// Core Attention Tracker
|
|
12
|
+
// ============================================
|
|
13
|
+
export class AttentionTracker extends EventEmitter {
|
|
14
|
+
db;
|
|
15
|
+
currentSession;
|
|
16
|
+
attentionBuffer = [];
|
|
17
|
+
constructor(dbPath = '.stackmemory/attention.db') {
|
|
18
|
+
super();
|
|
19
|
+
this.db = new Database(dbPath);
|
|
20
|
+
this.initDB();
|
|
21
|
+
this.currentSession = this.createSession();
|
|
22
|
+
}
|
|
23
|
+
// ============================================
|
|
24
|
+
// Database Schema
|
|
25
|
+
// ============================================
|
|
26
|
+
initDB() {
|
|
27
|
+
this.db.exec(`
|
|
28
|
+
-- Track which context items were provided
|
|
29
|
+
CREATE TABLE IF NOT EXISTS context_provisions (
|
|
30
|
+
provision_id TEXT PRIMARY KEY,
|
|
31
|
+
session_id TEXT NOT NULL,
|
|
32
|
+
context_id TEXT NOT NULL,
|
|
33
|
+
context_type TEXT NOT NULL,
|
|
34
|
+
content_hash TEXT NOT NULL,
|
|
35
|
+
position INTEGER NOT NULL, -- Order in context
|
|
36
|
+
token_count INTEGER NOT NULL,
|
|
37
|
+
timestamp INTEGER DEFAULT (unixepoch())
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- Track AI responses and actions
|
|
41
|
+
CREATE TABLE IF NOT EXISTS ai_responses (
|
|
42
|
+
response_id TEXT PRIMARY KEY,
|
|
43
|
+
session_id TEXT NOT NULL,
|
|
44
|
+
provision_id TEXT NOT NULL,
|
|
45
|
+
query TEXT NOT NULL,
|
|
46
|
+
response TEXT NOT NULL,
|
|
47
|
+
actions_taken TEXT, -- JSON array of actions
|
|
48
|
+
tokens_used INTEGER,
|
|
49
|
+
latency_ms INTEGER,
|
|
50
|
+
timestamp INTEGER DEFAULT (unixepoch()),
|
|
51
|
+
FOREIGN KEY (provision_id) REFERENCES context_provisions(provision_id)
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
-- Track which context influenced which outputs
|
|
55
|
+
CREATE TABLE IF NOT EXISTS attention_signals (
|
|
56
|
+
signal_id TEXT PRIMARY KEY,
|
|
57
|
+
context_id TEXT NOT NULL,
|
|
58
|
+
response_id TEXT NOT NULL,
|
|
59
|
+
influence_score REAL NOT NULL, -- 0.0 to 1.0
|
|
60
|
+
signal_type TEXT NOT NULL, -- 'mention', 'reference', 'action', 'implicit'
|
|
61
|
+
evidence TEXT, -- What shows the influence
|
|
62
|
+
confidence REAL DEFAULT 0.5,
|
|
63
|
+
timestamp INTEGER DEFAULT (unixepoch())
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
-- Aggregated importance scores (learned over time)
|
|
67
|
+
CREATE TABLE IF NOT EXISTS learned_importance (
|
|
68
|
+
context_id TEXT PRIMARY KEY,
|
|
69
|
+
context_type TEXT NOT NULL,
|
|
70
|
+
base_importance REAL DEFAULT 0.5,
|
|
71
|
+
learned_importance REAL DEFAULT 0.5,
|
|
72
|
+
influence_count INTEGER DEFAULT 0,
|
|
73
|
+
total_provisions INTEGER DEFAULT 0,
|
|
74
|
+
avg_influence_score REAL DEFAULT 0.0,
|
|
75
|
+
last_influenced INTEGER,
|
|
76
|
+
last_updated INTEGER DEFAULT (unixepoch())
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
-- Pattern recognition for context combinations
|
|
80
|
+
CREATE TABLE IF NOT EXISTS context_patterns (
|
|
81
|
+
pattern_id TEXT PRIMARY KEY,
|
|
82
|
+
context_ids TEXT NOT NULL, -- JSON array
|
|
83
|
+
pattern_hash TEXT NOT NULL UNIQUE,
|
|
84
|
+
occurrence_count INTEGER DEFAULT 1,
|
|
85
|
+
success_rate REAL DEFAULT 0.0,
|
|
86
|
+
avg_influence REAL DEFAULT 0.0,
|
|
87
|
+
last_seen INTEGER DEFAULT (unixepoch())
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
-- Indexes for performance
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_provisions_session ON context_provisions(session_id);
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_signals_context ON attention_signals(context_id);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_importance_type ON learned_importance(context_type);
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_patterns_hash ON context_patterns(pattern_hash);
|
|
95
|
+
`);
|
|
96
|
+
}
|
|
97
|
+
// ============================================
|
|
98
|
+
// Session Management
|
|
99
|
+
// ============================================
|
|
100
|
+
createSession() {
|
|
101
|
+
return {
|
|
102
|
+
sessionId: this.generateId(),
|
|
103
|
+
startTime: Date.now(),
|
|
104
|
+
provisions: [],
|
|
105
|
+
responses: []
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
startProvision(query) {
|
|
109
|
+
const provisionId = this.generateId();
|
|
110
|
+
return new ProvisionBuilder(this, provisionId, query);
|
|
111
|
+
}
|
|
112
|
+
// ============================================
|
|
113
|
+
// Attention Tracking
|
|
114
|
+
// ============================================
|
|
115
|
+
trackProvision(contextItems, provisionId) {
|
|
116
|
+
const tx = this.db.transaction(() => {
|
|
117
|
+
contextItems.forEach((item, index) => {
|
|
118
|
+
const contentHash = this.hashContent(item.content);
|
|
119
|
+
// Record the provision
|
|
120
|
+
this.db.prepare(`
|
|
121
|
+
INSERT INTO context_provisions
|
|
122
|
+
(provision_id, session_id, context_id, context_type, content_hash, position, token_count)
|
|
123
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
124
|
+
`).run(provisionId, this.currentSession.sessionId, item.id, item.type, contentHash, index, item.tokenCount);
|
|
125
|
+
// Initialize or update learned importance
|
|
126
|
+
this.db.prepare(`
|
|
127
|
+
INSERT INTO learned_importance (context_id, context_type, total_provisions)
|
|
128
|
+
VALUES (?, ?, 1)
|
|
129
|
+
ON CONFLICT(context_id) DO UPDATE SET
|
|
130
|
+
total_provisions = total_provisions + 1,
|
|
131
|
+
last_updated = unixepoch()
|
|
132
|
+
`).run(item.id, item.type);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
tx();
|
|
136
|
+
this.currentSession.provisions.push({ provisionId, items: contextItems });
|
|
137
|
+
}
|
|
138
|
+
trackResponse(provisionId, query, response, actionsTaken) {
|
|
139
|
+
const responseId = this.generateId();
|
|
140
|
+
this.db.prepare(`
|
|
141
|
+
INSERT INTO ai_responses
|
|
142
|
+
(response_id, session_id, provision_id, query, response, actions_taken, tokens_used)
|
|
143
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
144
|
+
`).run(responseId, this.currentSession.sessionId, provisionId, query, response, JSON.stringify(actionsTaken || []), this.estimateTokens(response));
|
|
145
|
+
// Analyze attention signals
|
|
146
|
+
this.analyzeAttention(provisionId, responseId, response, actionsTaken);
|
|
147
|
+
return responseId;
|
|
148
|
+
}
|
|
149
|
+
// ============================================
|
|
150
|
+
// Attention Analysis (The Magic)
|
|
151
|
+
// ============================================
|
|
152
|
+
analyzeAttention(provisionId, responseId, response, actions) {
|
|
153
|
+
// Get all context items from this provision
|
|
154
|
+
const contextItems = this.db.prepare(`
|
|
155
|
+
SELECT context_id, context_type, position, token_count
|
|
156
|
+
FROM context_provisions
|
|
157
|
+
WHERE provision_id = ?
|
|
158
|
+
`).all(provisionId);
|
|
159
|
+
// Analyze each context item's influence
|
|
160
|
+
contextItems.forEach(item => {
|
|
161
|
+
const influence = this.calculateInfluence(item, response, actions);
|
|
162
|
+
if (influence.score > 0) {
|
|
163
|
+
// Record the attention signal
|
|
164
|
+
this.db.prepare(`
|
|
165
|
+
INSERT INTO attention_signals
|
|
166
|
+
(signal_id, context_id, response_id, influence_score, signal_type, evidence, confidence)
|
|
167
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
168
|
+
`).run(this.generateId(), item.context_id, responseId, influence.score, influence.type, influence.evidence, influence.confidence);
|
|
169
|
+
// Update learned importance
|
|
170
|
+
this.updateLearnedImportance(item.context_id, influence.score);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
// Detect and record patterns
|
|
174
|
+
this.detectPatterns(contextItems, response);
|
|
175
|
+
}
|
|
176
|
+
calculateInfluence(contextItem, response, actions) {
|
|
177
|
+
let score = 0;
|
|
178
|
+
let type = 'none';
|
|
179
|
+
let evidence = '';
|
|
180
|
+
let confidence = 0;
|
|
181
|
+
// 1. Direct mention detection
|
|
182
|
+
const contextContent = this.getContextContent(contextItem.context_id);
|
|
183
|
+
if (contextContent) {
|
|
184
|
+
const keywords = this.extractKeywords(contextContent);
|
|
185
|
+
const mentionCount = this.countMentions(keywords, response);
|
|
186
|
+
if (mentionCount > 0) {
|
|
187
|
+
score = Math.min(1.0, mentionCount * 0.3);
|
|
188
|
+
type = 'mention';
|
|
189
|
+
evidence = `Mentioned ${mentionCount} times`;
|
|
190
|
+
confidence = 0.9;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// 2. Action correlation
|
|
194
|
+
if (actions && actions.length > 0) {
|
|
195
|
+
const actionCorrelation = this.correlateWithActions(contextItem, actions);
|
|
196
|
+
if (actionCorrelation > score) {
|
|
197
|
+
score = actionCorrelation;
|
|
198
|
+
type = 'action';
|
|
199
|
+
evidence = `Triggered ${actions.join(', ')}`;
|
|
200
|
+
confidence = 0.8;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// 3. Semantic similarity (using simple overlap for now)
|
|
204
|
+
const similarity = this.calculateSimilarity(contextContent, response);
|
|
205
|
+
if (similarity > 0.3 && similarity > score) {
|
|
206
|
+
score = similarity;
|
|
207
|
+
type = 'implicit';
|
|
208
|
+
evidence = `Semantic similarity: ${(similarity * 100).toFixed(1)}%`;
|
|
209
|
+
confidence = 0.6;
|
|
210
|
+
}
|
|
211
|
+
// 4. Position-based influence (earlier context often more influential)
|
|
212
|
+
const positionBoost = Math.max(0, (10 - contextItem.position) / 20);
|
|
213
|
+
score = Math.min(1.0, score + positionBoost);
|
|
214
|
+
return { score, type, evidence, confidence };
|
|
215
|
+
}
|
|
216
|
+
// ============================================
|
|
217
|
+
// Learning & Adaptation
|
|
218
|
+
// ============================================
|
|
219
|
+
updateLearnedImportance(contextId, influenceScore) {
|
|
220
|
+
const current = this.db.prepare(`
|
|
221
|
+
SELECT learned_importance, influence_count, avg_influence_score
|
|
222
|
+
FROM learned_importance
|
|
223
|
+
WHERE context_id = ?
|
|
224
|
+
`).get(contextId);
|
|
225
|
+
if (current) {
|
|
226
|
+
// Exponential moving average
|
|
227
|
+
const alpha = 0.1; // Learning rate
|
|
228
|
+
const newImportance = (1 - alpha) * current.learned_importance + alpha * influenceScore;
|
|
229
|
+
// Update running average
|
|
230
|
+
const newCount = current.influence_count + 1;
|
|
231
|
+
const newAvg = (current.avg_influence_score * current.influence_count + influenceScore) / newCount;
|
|
232
|
+
this.db.prepare(`
|
|
233
|
+
UPDATE learned_importance
|
|
234
|
+
SET learned_importance = ?,
|
|
235
|
+
influence_count = ?,
|
|
236
|
+
avg_influence_score = ?,
|
|
237
|
+
last_influenced = unixepoch(),
|
|
238
|
+
last_updated = unixepoch()
|
|
239
|
+
WHERE context_id = ?
|
|
240
|
+
`).run(newImportance, newCount, newAvg, contextId);
|
|
241
|
+
// Emit event for real-time updates
|
|
242
|
+
this.emit('importance-updated', { contextId, importance: newImportance });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
detectPatterns(contextItems, response) {
|
|
246
|
+
if (contextItems.length < 2)
|
|
247
|
+
return;
|
|
248
|
+
// Create pattern hash from context combination
|
|
249
|
+
const contextIds = contextItems.map(c => c.context_id).sort();
|
|
250
|
+
const patternHash = this.hashContent(JSON.stringify(contextIds));
|
|
251
|
+
const existing = this.db.prepare(`
|
|
252
|
+
SELECT pattern_id, occurrence_count, success_rate
|
|
253
|
+
FROM context_patterns
|
|
254
|
+
WHERE pattern_hash = ?
|
|
255
|
+
`).get(patternHash);
|
|
256
|
+
const success = this.evaluateSuccess(response);
|
|
257
|
+
if (existing) {
|
|
258
|
+
// Update existing pattern
|
|
259
|
+
const newCount = existing.occurrence_count + 1;
|
|
260
|
+
const newSuccessRate = (existing.success_rate * existing.occurrence_count + (success ? 1 : 0)) / newCount;
|
|
261
|
+
this.db.prepare(`
|
|
262
|
+
UPDATE context_patterns
|
|
263
|
+
SET occurrence_count = ?,
|
|
264
|
+
success_rate = ?,
|
|
265
|
+
last_seen = unixepoch()
|
|
266
|
+
WHERE pattern_id = ?
|
|
267
|
+
`).run(newCount, newSuccessRate, existing.pattern_id);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
// Record new pattern
|
|
271
|
+
this.db.prepare(`
|
|
272
|
+
INSERT INTO context_patterns
|
|
273
|
+
(pattern_id, context_ids, pattern_hash, success_rate)
|
|
274
|
+
VALUES (?, ?, ?, ?)
|
|
275
|
+
`).run(this.generateId(), JSON.stringify(contextIds), patternHash, success ? 1.0 : 0.0);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// ============================================
|
|
279
|
+
// Reinforcement Learning Loop
|
|
280
|
+
// ============================================
|
|
281
|
+
async reinforcementUpdate(feedback) {
|
|
282
|
+
// Adjust importance based on user feedback
|
|
283
|
+
const signals = this.db.prepare(`
|
|
284
|
+
SELECT context_id, influence_score
|
|
285
|
+
FROM attention_signals
|
|
286
|
+
WHERE response_id = ?
|
|
287
|
+
`).all(feedback.responseId);
|
|
288
|
+
const tx = this.db.transaction(() => {
|
|
289
|
+
signals.forEach(signal => {
|
|
290
|
+
const adjustment = feedback.helpful ? 0.05 : -0.05;
|
|
291
|
+
const scaledAdjustment = adjustment * signal.influence_score;
|
|
292
|
+
this.db.prepare(`
|
|
293
|
+
UPDATE learned_importance
|
|
294
|
+
SET learned_importance = MAX(0.1, MIN(1.0, learned_importance + ?)),
|
|
295
|
+
last_updated = unixepoch()
|
|
296
|
+
WHERE context_id = ?
|
|
297
|
+
`).run(scaledAdjustment, signal.context_id);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
tx();
|
|
301
|
+
}
|
|
302
|
+
// ============================================
|
|
303
|
+
// Importance Scoring API
|
|
304
|
+
// ============================================
|
|
305
|
+
getImportanceScore(contextId) {
|
|
306
|
+
const row = this.db.prepare(`
|
|
307
|
+
SELECT learned_importance, base_importance
|
|
308
|
+
FROM learned_importance
|
|
309
|
+
WHERE context_id = ?
|
|
310
|
+
`).get(contextId);
|
|
311
|
+
if (!row)
|
|
312
|
+
return 0.5; // Default importance
|
|
313
|
+
// Weighted combination of base and learned
|
|
314
|
+
return row.learned_importance * 0.7 + row.base_importance * 0.3;
|
|
315
|
+
}
|
|
316
|
+
getContextRanking(contextType) {
|
|
317
|
+
const query = contextType
|
|
318
|
+
? `SELECT * FROM learned_importance WHERE context_type = ? ORDER BY learned_importance DESC`
|
|
319
|
+
: `SELECT * FROM learned_importance ORDER BY learned_importance DESC`;
|
|
320
|
+
const rows = contextType
|
|
321
|
+
? this.db.prepare(query).all(contextType)
|
|
322
|
+
: this.db.prepare(query).all();
|
|
323
|
+
return rows.map(row => ({
|
|
324
|
+
contextId: row.context_id,
|
|
325
|
+
type: row.context_type,
|
|
326
|
+
importance: row.learned_importance,
|
|
327
|
+
influenceRate: row.influence_count / Math.max(1, row.total_provisions),
|
|
328
|
+
avgInfluence: row.avg_influence_score,
|
|
329
|
+
lastUsed: row.last_influenced
|
|
330
|
+
}));
|
|
331
|
+
}
|
|
332
|
+
// ============================================
|
|
333
|
+
// Pattern Recommendations
|
|
334
|
+
// ============================================
|
|
335
|
+
getRecommendedContext(query, currentContext) {
|
|
336
|
+
// Find successful patterns that include some of current context
|
|
337
|
+
const patterns = this.db.prepare(`
|
|
338
|
+
SELECT context_ids, success_rate, occurrence_count
|
|
339
|
+
FROM context_patterns
|
|
340
|
+
WHERE success_rate > 0.7
|
|
341
|
+
AND occurrence_count > 5
|
|
342
|
+
ORDER BY success_rate DESC, occurrence_count DESC
|
|
343
|
+
LIMIT 10
|
|
344
|
+
`).all();
|
|
345
|
+
const recommendations = new Set();
|
|
346
|
+
patterns.forEach(pattern => {
|
|
347
|
+
const patternContexts = JSON.parse(pattern.context_ids);
|
|
348
|
+
const overlap = patternContexts.filter((c) => currentContext.includes(c));
|
|
349
|
+
if (overlap.length > 0) {
|
|
350
|
+
// Recommend missing pieces from successful patterns
|
|
351
|
+
patternContexts.forEach((c) => {
|
|
352
|
+
if (!currentContext.includes(c)) {
|
|
353
|
+
recommendations.add(c);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
return Array.from(recommendations);
|
|
359
|
+
}
|
|
360
|
+
// ============================================
|
|
361
|
+
// Visualization & Analytics
|
|
362
|
+
// ============================================
|
|
363
|
+
getAttentionHeatmap(sessionId) {
|
|
364
|
+
const query = sessionId
|
|
365
|
+
? `SELECT c.context_id, c.position, AVG(a.influence_score) as avg_influence
|
|
366
|
+
FROM context_provisions c
|
|
367
|
+
LEFT JOIN attention_signals a ON c.context_id = a.context_id
|
|
368
|
+
WHERE c.session_id = ?
|
|
369
|
+
GROUP BY c.context_id, c.position`
|
|
370
|
+
: `SELECT c.context_id, c.position, AVG(a.influence_score) as avg_influence
|
|
371
|
+
FROM context_provisions c
|
|
372
|
+
LEFT JOIN attention_signals a ON c.context_id = a.context_id
|
|
373
|
+
GROUP BY c.context_id, c.position`;
|
|
374
|
+
const rows = sessionId
|
|
375
|
+
? this.db.prepare(query).all(sessionId)
|
|
376
|
+
: this.db.prepare(query).all();
|
|
377
|
+
return {
|
|
378
|
+
positions: rows.map(r => r.position),
|
|
379
|
+
influences: rows.map(r => r.avg_influence || 0),
|
|
380
|
+
contextIds: rows.map(r => r.context_id)
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
// ============================================
|
|
384
|
+
// Utilities
|
|
385
|
+
// ============================================
|
|
386
|
+
generateId() {
|
|
387
|
+
return createHash('sha256')
|
|
388
|
+
.update(`${Date.now()}-${Math.random()}`)
|
|
389
|
+
.digest('hex')
|
|
390
|
+
.substring(0, 16);
|
|
391
|
+
}
|
|
392
|
+
hashContent(content) {
|
|
393
|
+
return createHash('sha256')
|
|
394
|
+
.update(content)
|
|
395
|
+
.digest('hex')
|
|
396
|
+
.substring(0, 32);
|
|
397
|
+
}
|
|
398
|
+
estimateTokens(text) {
|
|
399
|
+
return Math.ceil(text.length / 4);
|
|
400
|
+
}
|
|
401
|
+
extractKeywords(text) {
|
|
402
|
+
// Simple keyword extraction - in production use NLP
|
|
403
|
+
return text
|
|
404
|
+
.toLowerCase()
|
|
405
|
+
.split(/\W+/)
|
|
406
|
+
.filter(word => word.length > 3)
|
|
407
|
+
.slice(0, 10);
|
|
408
|
+
}
|
|
409
|
+
countMentions(keywords, text) {
|
|
410
|
+
const lowerText = text.toLowerCase();
|
|
411
|
+
return keywords.reduce((count, keyword) => {
|
|
412
|
+
const regex = new RegExp(`\\b${keyword}\\b`, 'gi');
|
|
413
|
+
const matches = lowerText.match(regex);
|
|
414
|
+
return count + (matches ? matches.length : 0);
|
|
415
|
+
}, 0);
|
|
416
|
+
}
|
|
417
|
+
getContextContent(contextId) {
|
|
418
|
+
// Retrieve from main context store
|
|
419
|
+
// This would connect to your main SQLite/JSONL store
|
|
420
|
+
return null; // Placeholder
|
|
421
|
+
}
|
|
422
|
+
correlateWithActions(contextItem, actions) {
|
|
423
|
+
// Simple correlation - in production use more sophisticated analysis
|
|
424
|
+
const actionKeywords = actions.join(' ').toLowerCase();
|
|
425
|
+
const contextKeywords = this.extractKeywords(this.getContextContent(contextItem.context_id) || '');
|
|
426
|
+
const overlap = contextKeywords.filter(k => actionKeywords.includes(k)).length;
|
|
427
|
+
return Math.min(1.0, overlap / Math.max(1, contextKeywords.length));
|
|
428
|
+
}
|
|
429
|
+
calculateSimilarity(text1, text2) {
|
|
430
|
+
if (!text1)
|
|
431
|
+
return 0;
|
|
432
|
+
// Simple Jaccard similarity - in production use embeddings
|
|
433
|
+
const words1 = new Set(text1.toLowerCase().split(/\W+/));
|
|
434
|
+
const words2 = new Set(text2.toLowerCase().split(/\W+/));
|
|
435
|
+
const intersection = new Set([...words1].filter(w => words2.has(w)));
|
|
436
|
+
const union = new Set([...words1, ...words2]);
|
|
437
|
+
return intersection.size / union.size;
|
|
438
|
+
}
|
|
439
|
+
evaluateSuccess(response) {
|
|
440
|
+
// Simple heuristic - in production track actual outcomes
|
|
441
|
+
const successIndicators = ['fixed', 'solved', 'completed', 'done', 'working'];
|
|
442
|
+
const failureIndicators = ['error', 'failed', 'cannot', 'unable', 'problem'];
|
|
443
|
+
const lowerResponse = response.toLowerCase();
|
|
444
|
+
const successCount = successIndicators.filter(s => lowerResponse.includes(s)).length;
|
|
445
|
+
const failureCount = failureIndicators.filter(f => lowerResponse.includes(f)).length;
|
|
446
|
+
return successCount > failureCount;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// ============================================
|
|
450
|
+
// Provision Builder (Fluent API)
|
|
451
|
+
// ============================================
|
|
452
|
+
export class ProvisionBuilder {
|
|
453
|
+
tracker;
|
|
454
|
+
provisionId;
|
|
455
|
+
query;
|
|
456
|
+
contexts = [];
|
|
457
|
+
constructor(tracker, provisionId, query) {
|
|
458
|
+
this.tracker = tracker;
|
|
459
|
+
this.provisionId = provisionId;
|
|
460
|
+
this.query = query;
|
|
461
|
+
}
|
|
462
|
+
add(context) {
|
|
463
|
+
this.contexts.push(context);
|
|
464
|
+
return this;
|
|
465
|
+
}
|
|
466
|
+
addMany(contexts) {
|
|
467
|
+
this.contexts.push(...contexts);
|
|
468
|
+
return this;
|
|
469
|
+
}
|
|
470
|
+
async execute(handler) {
|
|
471
|
+
// Track provision
|
|
472
|
+
this.tracker.trackProvision(this.contexts, this.provisionId);
|
|
473
|
+
// Execute with tracking
|
|
474
|
+
const startTime = Date.now();
|
|
475
|
+
const response = await handler(this.contexts);
|
|
476
|
+
const latency = Date.now() - startTime;
|
|
477
|
+
// Track response
|
|
478
|
+
const responseId = this.tracker.trackResponse(this.provisionId, this.query, response);
|
|
479
|
+
return {
|
|
480
|
+
responseId,
|
|
481
|
+
response,
|
|
482
|
+
latency,
|
|
483
|
+
contextsUsed: this.contexts.length
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
export default AttentionTracker;
|
|
488
|
+
//# sourceMappingURL=attention-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attention-tracker.js","sourceRoot":"","sources":["../../../attention-scoring/src/attention-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,+CAA+C;AAC/C,yBAAyB;AACzB,+CAA+C;AAE/C,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACxC,EAAE,CAAoB;IACtB,cAAc,CAAiB;IAC/B,eAAe,GAAqB,EAAE,CAAC;IAE/C,YAAY,SAAiB,2BAA2B;QACtD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAC7C,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAEvC,MAAM;QACZ,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoEZ,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,qBAAqB;IACrB,+CAA+C;IAEvC,aAAa;QACnB,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE;YAC5B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAEM,cAAc,CAAC,KAAa;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,+CAA+C;IAC/C,qBAAqB;IACrB,+CAA+C;IAExC,cAAc,CACnB,YAA2B,EAC3B,WAAmB;QAEnB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnD,uBAAuB;gBACvB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;SAIf,CAAC,CAAC,GAAG,CACJ,WAAW,EACX,IAAI,CAAC,cAAc,CAAC,SAAS,EAC7B,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,WAAW,EACX,KAAK,EACL,IAAI,CAAC,UAAU,CAChB,CAAC;gBAEF,0CAA0C;gBAC1C,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;SAMf,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,EAAE,CAAC;QACL,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC;IAEM,aAAa,CAClB,WAAmB,EACnB,KAAa,EACb,QAAgB,EAChB,YAAuB;QAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAErC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIf,CAAC,CAAC,GAAG,CACJ,UAAU,EACV,IAAI,CAAC,cAAc,CAAC,SAAS,EAC7B,WAAW,EACX,KAAK,EACL,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,EAClC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAC9B,CAAC;QAEF,4BAA4B;QAC5B,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEvE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,+CAA+C;IAC/C,iCAAiC;IACjC,+CAA+C;IAEvC,gBAAgB,CACtB,WAAmB,EACnB,UAAkB,EAClB,QAAgB,EAChB,OAAkB;QAElB,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIpC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAU,CAAC;QAE7B,wCAAwC;QACxC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEnE,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACxB,8BAA8B;gBAC9B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;SAIf,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,UAAU,EACf,UAAU,EACV,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,UAAU,CACrB,CAAC;gBAEF,4BAA4B;gBAC5B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEO,kBAAkB,CACxB,WAAgB,EAChB,QAAgB,EAChB,OAAkB;QAElB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,GAAG,MAAM,CAAC;QAClB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,8BAA8B;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG,CAAC,CAAC;gBAC1C,IAAI,GAAG,SAAS,CAAC;gBACjB,QAAQ,GAAG,aAAa,YAAY,QAAQ,CAAC;gBAC7C,UAAU,GAAG,GAAG,CAAC;YACnB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1E,IAAI,iBAAiB,GAAG,KAAK,EAAE,CAAC;gBAC9B,KAAK,GAAG,iBAAiB,CAAC;gBAC1B,IAAI,GAAG,QAAQ,CAAC;gBAChB,QAAQ,GAAG,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,UAAU,GAAG,GAAG,CAAC;YACnB,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACtE,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;YAC3C,KAAK,GAAG,UAAU,CAAC;YACnB,IAAI,GAAG,UAAU,CAAC;YAClB,QAAQ,GAAG,wBAAwB,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YACpE,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;QAED,uEAAuE;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAAC,CAAC;QAE7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,wBAAwB;IACxB,+CAA+C;IAEvC,uBAAuB,CAAC,SAAiB,EAAE,cAAsB;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI/B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAC;QAEzB,IAAI,OAAO,EAAE,CAAC;YACZ,6BAA6B;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAE,gBAAgB;YACpC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,kBAAkB,GAAG,KAAK,GAAG,cAAc,CAAC;YAExF,yBAAyB;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,GAAG,QAAQ,CAAC;YAEnG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;OAQf,CAAC,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAEnD,mCAAmC;YACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,YAAmB,EAAE,QAAgB;QAC1D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAEpC,+CAA+C;QAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIhC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAQ,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,QAAQ,EAAE,CAAC;YACb,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;YAE1G,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;OAMf,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAIf,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,8BAA8B;IAC9B,+CAA+C;IAExC,KAAK,CAAC,mBAAmB,CAAC,QAAsB;QACrD,2CAA2C;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI/B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAU,CAAC;QAErC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnD,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;gBAE7D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;SAKf,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,EAAE,CAAC;IACP,CAAC;IAED,+CAA+C;IAC/C,yBAAyB;IACzB,+CAA+C;IAExC,kBAAkB,CAAC,SAAiB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI3B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAQ,CAAC;QAEzB,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAC,CAAE,qBAAqB;QAE5C,2CAA2C;QAC3C,OAAO,GAAG,CAAC,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC;IAClE,CAAC;IAEM,iBAAiB,CAAC,WAAoB;QAC3C,MAAM,KAAK,GAAG,WAAW;YACvB,CAAC,CAAC,0FAA0F;YAC5F,CAAC,CAAC,mEAAmE,CAAC;QAExE,MAAM,IAAI,GAAG,WAAW;YACtB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QAEjC,OAAQ,IAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,IAAI,EAAE,GAAG,CAAC,YAAY;YACtB,UAAU,EAAE,GAAG,CAAC,kBAAkB;YAClC,aAAa,EAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC;YACtE,YAAY,EAAE,GAAG,CAAC,mBAAmB;YACrC,QAAQ,EAAE,GAAG,CAAC,eAAe;SAC9B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,+CAA+C;IAC/C,0BAA0B;IAC1B,+CAA+C;IAExC,qBAAqB,CAAC,KAAa,EAAE,cAAwB;QAClE,gEAAgE;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;KAOhC,CAAC,CAAC,GAAG,EAAW,CAAC;QAElB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAElF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,oDAAoD;gBACpD,eAAe,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;oBACpC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAChC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC;IAED,+CAA+C;IAC/C,4BAA4B;IAC5B,+CAA+C;IAExC,mBAAmB,CAAC,SAAkB;QAC3C,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC;;;;2CAImC;YACrC,CAAC,CAAC;;;2CAGmC,CAAC;QAExC,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QAEjC,OAAO;YACL,SAAS,EAAG,IAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/C,UAAU,EAAG,IAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;YAC1D,UAAU,EAAG,IAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,YAAY;IACZ,+CAA+C;IAEvC,UAAU;QAChB,OAAO,UAAU,CAAC,QAAQ,CAAC;aACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aACxC,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,OAAO,UAAU,CAAC,QAAQ,CAAC;aACxB,MAAM,CAAC,OAAO,CAAC;aACf,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,oDAAoD;QACpD,OAAO,IAAI;aACR,WAAW,EAAE;aACb,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aAC/B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAEO,aAAa,CAAC,QAAkB,EAAE,IAAY;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,iBAAiB,CAAC,SAAiB;QACzC,mCAAmC;QACnC,qDAAqD;QACrD,OAAO,IAAI,CAAC,CAAE,cAAc;IAC9B,CAAC;IAEO,oBAAoB,CAAC,WAAgB,EAAE,OAAiB;QAC9D,qEAAqE;QACrE,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnG,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/E,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,CAAC;IAEO,mBAAmB,CAAC,KAAoB,EAAE,KAAa;QAC7D,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QAErB,2DAA2D;QAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QAE9C,OAAO,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxC,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,yDAAyD;QACzD,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE7E,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAErF,OAAO,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;CACF;AAED,+CAA+C;AAC/C,iCAAiC;AACjC,+CAA+C;AAE/C,MAAM,OAAO,gBAAgB;IAIjB;IACA;IACA;IALF,QAAQ,GAAkB,EAAE,CAAC;IAErC,YACU,OAAyB,EACzB,WAAmB,EACnB,KAAa;QAFb,YAAO,GAAP,OAAO,CAAkB;QACzB,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAQ;IACpB,CAAC;IAEJ,GAAG,CAAC,OAAoB;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,QAAuB;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAqD;QACjE,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7D,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,KAAK,EACV,QAAQ,CACT,CAAC;QAEF,OAAO;YACL,UAAU;YACV,QAAQ;YACR,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;SACnC,CAAC;IACJ,CAAC;CACF;AA+DD,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Integration with Attention-Based Importance Scoring
|
|
3
|
+
*
|
|
4
|
+
* Automatically tracks what context Claude actually uses
|
|
5
|
+
* and learns importance over time
|
|
6
|
+
*/
|
|
7
|
+
import AttentionTracker from './attention-tracker';
|
|
8
|
+
export declare class SmartStackMemoryMCP {
|
|
9
|
+
private server;
|
|
10
|
+
private attentionTracker;
|
|
11
|
+
private teamContext;
|
|
12
|
+
private activeProvisions;
|
|
13
|
+
constructor(config: MCPConfig);
|
|
14
|
+
private setupHandlers;
|
|
15
|
+
private getSmartContext;
|
|
16
|
+
private enhanceWithAttention;
|
|
17
|
+
private setupLearningLoop;
|
|
18
|
+
private analyzePatterns;
|
|
19
|
+
private visualizeHeatmap;
|
|
20
|
+
private updateActiveContext;
|
|
21
|
+
private formatForClaude;
|
|
22
|
+
private getImportanceBar;
|
|
23
|
+
private groupByType;
|
|
24
|
+
private formatType;
|
|
25
|
+
private hashContext;
|
|
26
|
+
private estimateTokens;
|
|
27
|
+
private getInfluenceHistory;
|
|
28
|
+
private loadContext;
|
|
29
|
+
start(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare class AttentionDashboard {
|
|
32
|
+
private tracker;
|
|
33
|
+
constructor(tracker: AttentionTracker);
|
|
34
|
+
generateReport(): Promise<AttentionReport>;
|
|
35
|
+
private generateRecommendations;
|
|
36
|
+
}
|
|
37
|
+
interface MCPConfig {
|
|
38
|
+
projectId: string;
|
|
39
|
+
teamId: string;
|
|
40
|
+
userId: string;
|
|
41
|
+
}
|
|
42
|
+
interface AttentionReport {
|
|
43
|
+
summary: {
|
|
44
|
+
totalContexts: number;
|
|
45
|
+
avgImportance: number;
|
|
46
|
+
highInfluenceCount: number;
|
|
47
|
+
lastUpdated: number;
|
|
48
|
+
};
|
|
49
|
+
topContexts: any[];
|
|
50
|
+
alwaysUseful: any[];
|
|
51
|
+
neverUseful: any[];
|
|
52
|
+
heatmap: any;
|
|
53
|
+
recommendations: string[];
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=mcp-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-integration.d.ts","sourceRoot":"","sources":["../../../attention-scoring/src/mcp-integration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,gBAAiC,MAAM,qBAAqB,CAAC;AAOpE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,gBAAgB,CAAkC;gBAE9C,MAAM,EAAE,SAAS;IAgC7B,OAAO,CAAC,aAAa;YAsCP,eAAe;YAsCf,oBAAoB;IAqElC,OAAO,CAAC,iBAAiB;YAeX,eAAe;IA+B7B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;YAIR,mBAAmB;YAMnB,WAAW;IAUnB,KAAK;CAQZ;AAMD,qBAAa,kBAAkB;IACjB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,gBAAgB;IAEvC,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IA4BhD,OAAO,CAAC,uBAAuB;CAqBhC;AAMD,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,UAAU,eAAe;IACvB,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,WAAW,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,EAAE,GAAG,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B"}
|