claude-session-memory 0.2.0 → 0.3.1
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 +47 -10
- package/dist/cli.js +0 -0
- package/dist/database.js +15 -0
- package/dist/database.js.map +1 -1
- package/dist/server.js +89 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/get-stats.d.ts +7 -2
- package/dist/tools/get-stats.js +22 -0
- package/dist/tools/get-stats.js.map +1 -1
- package/dist/tools/query-memory.js +2 -0
- package/dist/tools/query-memory.js.map +1 -1
- package/dist/tools/review-session.d.ts +19 -0
- package/dist/tools/review-session.js +54 -0
- package/dist/tools/review-session.js.map +1 -0
- package/dist/utils/session-intelligence.d.ts +36 -0
- package/dist/utils/session-intelligence.js +154 -0
- package/dist/utils/session-intelligence.js.map +1 -0
- package/dist/utils/token-savings.d.ts +10 -0
- package/dist/utils/token-savings.js +27 -0
- package/dist/utils/token-savings.js.map +1 -0
- package/dist/web/routes/analytics.js +6 -0
- package/dist/web/routes/analytics.js.map +1 -1
- package/dist/web/server.js +25 -0
- package/dist/web/server.js.map +1 -1
- package/dist/web-dist/assets/AnalyticsPage-B0ZCSmi7.js +3 -0
- package/dist/web-dist/assets/{DashboardPage-DtQ8bcLR.js → DashboardPage-BmkQ7Pir.js} +1 -1
- package/dist/web-dist/assets/{DecisionDetailPage-CoNQF-FB.js → DecisionDetailPage-DSNQOk0G.js} +1 -1
- package/dist/web-dist/assets/{DecisionsPage-F2KA9sQF.js → DecisionsPage-Druu3aUr.js} +1 -1
- package/dist/web-dist/assets/{ImportExportPage-CqhNTw6I.js → ImportExportPage-yQxs-fBD.js} +1 -1
- package/dist/web-dist/assets/{SessionDetailPage-DtQ1Jsmp.js → SessionDetailPage-D0ruOy8B.js} +1 -1
- package/dist/web-dist/assets/{SessionsPage-BVR-mFw1.js → SessionsPage-5lqQKejq.js} +1 -1
- package/dist/web-dist/assets/{SettingsPage-Dluf2etQ.js → SettingsPage-Dj2KkiKe.js} +1 -1
- package/dist/web-dist/assets/{StatCard.vue_vue_type_script_setup_true_lang-DRCbHjfR.js → StatCard.vue_vue_type_script_setup_true_lang-HwJVk8w_.js} +1 -1
- package/dist/web-dist/assets/{TagPill.vue_vue_type_script_setup_true_lang-D3QpKM6-.js → TagPill.vue_vue_type_script_setup_true_lang-CA2dOM-H.js} +1 -1
- package/dist/web-dist/assets/{decisions-D4RIsPGu.js → decisions-zp0xvZqp.js} +1 -1
- package/dist/web-dist/assets/{index-CB5v6K3L.js → index-Bl3DbLj3.js} +2 -2
- package/dist/web-dist/assets/{index-DnStDInH.css → index-CoMkCnBk.css} +1 -1
- package/dist/web-dist/assets/{installCanvasRenderer-ZjWTVaVA.js → installCanvasRenderer-CuEbBLw0.js} +1 -1
- package/dist/web-dist/assets/{sessions-CbnjP7UX.js → sessions-CtlNQ8lw.js} +1 -1
- package/dist/web-dist/assets/useApi-DkK919W_.js +1 -0
- package/dist/web-dist/index.html +2 -2
- package/package.json +1 -1
- package/schema.sql +12 -0
- package/templates/memory-instructions.md +10 -0
- package/dist/web-dist/assets/AnalyticsPage-CFlZyCBZ.js +0 -3
- package/dist/web-dist/assets/useApi-goimj9yG.js +0 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
[](/)
|
|
11
11
|
[](/)
|
|
12
12
|
|
|
13
|
-
*Save
|
|
13
|
+
*Save decisions. Auto-load context. Prove the ROI. 100% local.*
|
|
14
14
|
|
|
15
15
|
</div>
|
|
16
16
|
|
|
@@ -94,17 +94,17 @@ Every time Claude doesn't know your project context, **you pay for it** — in t
|
|
|
94
94
|
|
|
95
95
|
## 💡 The Solution
|
|
96
96
|
|
|
97
|
-
An MCP server that gives Claude Code a **queryable SQLite database** of your project's architectural decisions
|
|
97
|
+
An MCP server that gives Claude Code a **queryable SQLite database** of your project's architectural decisions — plus **automatic session intelligence** that loads the right context at the right time.
|
|
98
98
|
|
|
99
99
|
## ✨ Why Use It
|
|
100
100
|
|
|
101
101
|
| Benefit | What it means for you |
|
|
102
102
|
|---------|----------------------|
|
|
103
|
-
|
|
|
103
|
+
| 🧠 **Auto session continuity** | Claude knows what you worked on last session — branch, decisions, files changed |
|
|
104
|
+
| 🎯 **Smart context loading** | Relevant decisions are surfaced automatically based on your current branch and files |
|
|
105
|
+
| 💰 **Proven ROI** | Track token savings, time saved, and hit rate — with real numbers |
|
|
104
106
|
| 🔁 **Never re-explain decisions** | Claude remembers what you decided and why, across every session |
|
|
105
|
-
|
|
|
106
|
-
| 📈 **Knowledge that compounds** | Session 1 is normal. Session 50 feels like magic — Claude knows everything |
|
|
107
|
-
| 🚀 **Instant team onboarding** | New team members query past decisions instead of digging through Slack threads |
|
|
107
|
+
| 📋 **Session review** | Get prompted to save decisions before ending a session — nothing slips through |
|
|
108
108
|
| 🔒 **100% local and private** | SQLite on your machine, zero network calls, zero telemetry |
|
|
109
109
|
|
|
110
110
|
## ⚡ Quick Start
|
|
@@ -115,6 +115,27 @@ npx claude-session-memory init
|
|
|
115
115
|
|
|
116
116
|
Restart Claude Code. **That's it.** 🎉
|
|
117
117
|
|
|
118
|
+
## 🧠 Session Intelligence
|
|
119
|
+
|
|
120
|
+
Every session is smarter than the last:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Session Start (get_stats) Session End (review_session)
|
|
124
|
+
───────────────────────── ────────────────────────────
|
|
125
|
+
✅ Last session context ✅ Decisions saved this session
|
|
126
|
+
Branch, decisions, files What you captured
|
|
127
|
+
✅ Relevant decisions ✅ Files changed without decisions
|
|
128
|
+
Matched by branch + files What you might have missed
|
|
129
|
+
✅ Token savings ROI ✅ Suggestions
|
|
130
|
+
Queries, hit rate, time saved "Consider saving for auth.ts"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**How context matching works:**
|
|
134
|
+
|
|
135
|
+
1. **File matching** — decisions linked to files you're currently modifying
|
|
136
|
+
2. **Branch keywords** — `feature/auth` → finds decisions tagged `auth`
|
|
137
|
+
3. **Recent fallback** — always shows latest decisions if no specific match
|
|
138
|
+
|
|
118
139
|
## 🔄 How It Works
|
|
119
140
|
|
|
120
141
|
```
|
|
@@ -156,10 +177,11 @@ Restart Claude Code. **That's it.** 🎉
|
|
|
156
177
|
| Tool | Description |
|
|
157
178
|
|------|-------------|
|
|
158
179
|
| `save_decision` | 💾 Save an architectural decision with title, rationale, alternatives. Auto-detects duplicates via Jaccard similarity |
|
|
159
|
-
| `query_memory` | 🔍 Search decisions using natural language |
|
|
180
|
+
| `query_memory` | 🔍 Search decisions using natural language. Logs every query for ROI tracking |
|
|
160
181
|
| `list_recent` | 📋 List recent decisions across sessions |
|
|
161
182
|
| `update_decision` | ♻️ Deprecate or supersede a decision |
|
|
162
|
-
| `get_stats` |
|
|
183
|
+
| `get_stats` | 🧠 Session intelligence — last session context, relevant decisions for current work, token savings ROI |
|
|
184
|
+
| `review_session` | 📋 Review current session before ending — shows files changed without decisions, suggests what to save |
|
|
163
185
|
| `sync_claude_md` | 📝 Export active decisions into your CLAUDE.md with auto-managed markers |
|
|
164
186
|
|
|
165
187
|
## 💬 Query Examples
|
|
@@ -254,12 +276,27 @@ _Auto-generated from project memory — 5 active decisions_
|
|
|
254
276
|
|
|
255
277
|
Any content **outside** the markers is preserved. If no markers exist, they're appended. If no `CLAUDE.md` exists, one is created.
|
|
256
278
|
|
|
279
|
+
## 📊 Token Savings & ROI
|
|
280
|
+
|
|
281
|
+
Every `query_memory` call is tracked. The dashboard shows real metrics:
|
|
282
|
+
|
|
283
|
+
| Metric | What it measures |
|
|
284
|
+
|--------|-----------------|
|
|
285
|
+
| **Total Queries** | How often Claude queries your memory |
|
|
286
|
+
| **Hit Rate** | % of queries that returned useful results |
|
|
287
|
+
| **Tokens Saved** | Estimated tokens saved vs re-explaining (~300/query) |
|
|
288
|
+
| **Time Saved** | Estimated minutes saved (~2 min/query) |
|
|
289
|
+
|
|
290
|
+
View these in the web dashboard at `/analytics` or via `get_stats` in any session.
|
|
291
|
+
|
|
257
292
|
## 🏗️ Architecture
|
|
258
293
|
|
|
259
294
|
```
|
|
260
295
|
claude-session-memory
|
|
261
296
|
├── Storage: SQLite + FTS5 full-text search, WAL mode
|
|
262
297
|
├── Transport: MCP stdio (spawned by Claude Code)
|
|
298
|
+
├── Intelligence: Session continuity, context matching, ROI tracking
|
|
299
|
+
├── Dashboard: Built-in web UI with analytics and AI coach
|
|
263
300
|
├── Dependencies: better-sqlite3, @modelcontextprotocol/sdk, commander
|
|
264
301
|
└── Privacy: 100% local — zero network calls, zero telemetry
|
|
265
302
|
```
|
|
@@ -285,8 +322,8 @@ MIT — use it however you like.
|
|
|
285
322
|
|
|
286
323
|
**Session 1** — You save your first decision. Nothing special yet.<br>
|
|
287
324
|
**Session 5** — Claude stops asking what database you use. It knows.<br>
|
|
288
|
-
**Session 20** —
|
|
289
|
-
**Session 50** —
|
|
325
|
+
**Session 20** — Claude auto-loads your last session's context and relevant decisions before you say a word.<br>
|
|
326
|
+
**Session 50** — Dashboard shows 500+ tokens saved, 100+ minutes reclaimed. A new teammate asks "how does auth work?" — full history, instantly.<br>
|
|
290
327
|
|
|
291
328
|
**The more you use it, the more valuable it becomes.**
|
|
292
329
|
|
package/dist/cli.js
CHANGED
|
File without changes
|
package/dist/database.js
CHANGED
|
@@ -17,6 +17,7 @@ export function initDatabase(dbPath) {
|
|
|
17
17
|
db.exec(schema);
|
|
18
18
|
migrateSessionsTable(db);
|
|
19
19
|
migrateDecisionsTable(db);
|
|
20
|
+
migrateQueryLogTable(db);
|
|
20
21
|
return db;
|
|
21
22
|
}
|
|
22
23
|
function migrateSessionsTable(db) {
|
|
@@ -41,6 +42,20 @@ function migrateDecisionsTable(db) {
|
|
|
41
42
|
db.exec('ALTER TABLE decisions ADD COLUMN confidence REAL DEFAULT 1.0');
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
function migrateQueryLogTable(db) {
|
|
46
|
+
db.exec(`
|
|
47
|
+
CREATE TABLE IF NOT EXISTS query_log (
|
|
48
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
49
|
+
session_id TEXT,
|
|
50
|
+
query TEXT NOT NULL,
|
|
51
|
+
result_count INTEGER DEFAULT 0,
|
|
52
|
+
estimated_tokens_saved INTEGER DEFAULT 0,
|
|
53
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
54
|
+
)
|
|
55
|
+
`);
|
|
56
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_query_log_session ON query_log(session_id)');
|
|
57
|
+
db.exec('CREATE INDEX IF NOT EXISTS idx_query_log_created ON query_log(created_at)');
|
|
58
|
+
}
|
|
44
59
|
export function findProjectRoot() {
|
|
45
60
|
let dir = process.cwd();
|
|
46
61
|
while (dir !== path.parse(dir).root) {
|
package/dist/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,qBAAqB,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -12,11 +12,23 @@ import { handleGetStats } from './tools/get-stats.js';
|
|
|
12
12
|
import { decayConfidence } from './utils/confidence.js';
|
|
13
13
|
import { syncClaudeMd } from './utils/claudemd-sync.js';
|
|
14
14
|
import { findProjectRoot } from './database.js';
|
|
15
|
+
import { detectCurrentWork } from './utils/session-intelligence.js';
|
|
16
|
+
import { handleReviewSession } from './tools/review-session.js';
|
|
15
17
|
const dbPath = getDbPath();
|
|
16
18
|
const db = initDatabase(dbPath);
|
|
17
19
|
const currentSessionId = generateSessionId();
|
|
18
20
|
// Register session
|
|
19
21
|
db.prepare('INSERT INTO sessions (id) VALUES (?)').run(currentSessionId);
|
|
22
|
+
// Capture git context at session start
|
|
23
|
+
try {
|
|
24
|
+
const projectRoot = process.env.PROJECT_ROOT || findProjectRoot();
|
|
25
|
+
const currentWork = detectCurrentWork(projectRoot);
|
|
26
|
+
if (currentWork.branch || projectRoot) {
|
|
27
|
+
db.prepare('UPDATE sessions SET git_branch = ?, project_path = ? WHERE id = ?')
|
|
28
|
+
.run(currentWork.branch, projectRoot, currentSessionId);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch { /* non-critical */ }
|
|
20
32
|
// Run confidence decay on startup
|
|
21
33
|
const decayResult = decayConfidence(db);
|
|
22
34
|
if (decayResult.updated > 0) {
|
|
@@ -164,6 +176,42 @@ server.tool('get_stats', 'Get project memory statistics (call at session start f
|
|
|
164
176
|
if (stats.topTags.length > 0) {
|
|
165
177
|
text += `Top tags: ${stats.topTags.map(t => `${t.tag} (${t.count})`).join(', ')}\n`;
|
|
166
178
|
}
|
|
179
|
+
if (stats.tokenSavings.totalQueries > 0) {
|
|
180
|
+
text += `Memory ROI (30d): ${stats.tokenSavings.totalQueries} queries, ~${stats.tokenSavings.estimatedTokensSaved.toLocaleString()} tokens saved, ~${stats.tokenSavings.estimatedMinutesSaved} min saved\n`;
|
|
181
|
+
}
|
|
182
|
+
// Last session context
|
|
183
|
+
if (stats.lastSession) {
|
|
184
|
+
const s = stats.lastSession;
|
|
185
|
+
text += `${'─'.repeat(40)}\n`;
|
|
186
|
+
text += `Last session (${s.hoursAgo}h ago`;
|
|
187
|
+
if (s.branch)
|
|
188
|
+
text += `, branch: ${s.branch}`;
|
|
189
|
+
text += `):\n`;
|
|
190
|
+
if (s.decisions.length > 0) {
|
|
191
|
+
text += ` Worked on: ${s.decisions.map(d => d.title).join(', ')}\n`;
|
|
192
|
+
}
|
|
193
|
+
text += ` Saved ${s.decisionCount} decision(s)\n`;
|
|
194
|
+
if (s.affectedFiles.length > 0) {
|
|
195
|
+
text += ` Files: ${s.affectedFiles.join(', ')}\n`;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Relevant decisions for current work
|
|
199
|
+
if (stats.relevantDecisions.length > 0) {
|
|
200
|
+
text += `${'─'.repeat(40)}\n`;
|
|
201
|
+
text += `Relevant to current work`;
|
|
202
|
+
if (stats.currentWork?.branch) {
|
|
203
|
+
text += ` (branch: ${stats.currentWork.branch}`;
|
|
204
|
+
if (stats.currentWork.uncommittedChangeCount > 0) {
|
|
205
|
+
text += `, ${stats.currentWork.uncommittedChangeCount} uncommitted files`;
|
|
206
|
+
}
|
|
207
|
+
text += `)`;
|
|
208
|
+
}
|
|
209
|
+
text += `:\n`;
|
|
210
|
+
for (const d of stats.relevantDecisions) {
|
|
211
|
+
const tags = d.tags.length > 0 ? ` [${d.tags.join(', ')}]` : '';
|
|
212
|
+
text += ` - ${d.title}${tags} (#${d.id}, ${d.matchReason})\n`;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
167
215
|
return { content: [{ type: 'text', text }] };
|
|
168
216
|
}
|
|
169
217
|
catch (error) {
|
|
@@ -190,8 +238,49 @@ server.tool('sync_claude_md', 'Sync active decisions into CLAUDE.md (auto-genera
|
|
|
190
238
|
};
|
|
191
239
|
}
|
|
192
240
|
});
|
|
241
|
+
// --- review_session ---
|
|
242
|
+
server.tool('review_session', 'Review current session for unsaved decisions — call before ending a session', {}, async () => {
|
|
243
|
+
try {
|
|
244
|
+
const projectRoot = process.env.PROJECT_ROOT || findProjectRoot();
|
|
245
|
+
const result = handleReviewSession(db, currentSessionId, projectRoot);
|
|
246
|
+
let text = `Session Review\n${'─'.repeat(40)}\n`;
|
|
247
|
+
text += `Decisions saved: ${result.decisionCount}`;
|
|
248
|
+
if (result.decisionCount > 0) {
|
|
249
|
+
text += ` (${result.decisionsThisSession.map(d => d.title).join(', ')})`;
|
|
250
|
+
}
|
|
251
|
+
text += '\n';
|
|
252
|
+
if (result.filesChangedDuringSession.length > 0) {
|
|
253
|
+
text += `Files changed: ${result.filesChangedDuringSession.length}\n`;
|
|
254
|
+
}
|
|
255
|
+
if (result.suggestions.length > 0) {
|
|
256
|
+
text += `\nSuggestions:\n`;
|
|
257
|
+
for (const s of result.suggestions) {
|
|
258
|
+
text += ` - ${s}\n`;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
text += '\nNo suggestions — session looks well-documented.\n';
|
|
263
|
+
}
|
|
264
|
+
return { content: [{ type: 'text', text }] };
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
return {
|
|
268
|
+
content: [{ type: 'text', text: `Error: ${error.message}` }],
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
});
|
|
193
272
|
// --- Graceful shutdown ---
|
|
194
273
|
process.on('SIGINT', () => {
|
|
274
|
+
// Capture git branch at session end
|
|
275
|
+
try {
|
|
276
|
+
const projectRoot = process.env.PROJECT_ROOT || findProjectRoot();
|
|
277
|
+
const currentWork = detectCurrentWork(projectRoot);
|
|
278
|
+
if (currentWork.branch) {
|
|
279
|
+
db.prepare('UPDATE sessions SET git_branch = ? WHERE id = ?')
|
|
280
|
+
.run(currentWork.branch, currentSessionId);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch { /* non-critical */ }
|
|
195
284
|
const summary = generateSessionSummary(db, currentSessionId);
|
|
196
285
|
db.prepare('UPDATE sessions SET ended_at = CURRENT_TIMESTAMP, summary = ? WHERE id = ?')
|
|
197
286
|
.run(summary, currentSessionId);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
-
|
|
2
|
+
import { type TokenSavingsResult } from '../utils/token-savings.js';
|
|
3
|
+
import { type LastSessionContext, type CurrentWorkContext, type RelevantDecision } from '../utils/session-intelligence.js';
|
|
4
|
+
export interface MemoryStats {
|
|
3
5
|
totalDecisions: number;
|
|
4
6
|
active: number;
|
|
5
7
|
deprecated: number;
|
|
@@ -11,6 +13,9 @@ interface MemoryStats {
|
|
|
11
13
|
count: number;
|
|
12
14
|
}[];
|
|
13
15
|
lastActivity: string | null;
|
|
16
|
+
tokenSavings: TokenSavingsResult;
|
|
17
|
+
lastSession: LastSessionContext | null;
|
|
18
|
+
currentWork: CurrentWorkContext | null;
|
|
19
|
+
relevantDecisions: RelevantDecision[];
|
|
14
20
|
}
|
|
15
21
|
export declare function handleGetStats(db: Database.Database): MemoryStats;
|
|
16
|
-
export {};
|
package/dist/tools/get-stats.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { getTokenSavings } from '../utils/token-savings.js';
|
|
2
|
+
import { getLastSessionContext, detectCurrentWork, getRelevantDecisions } from '../utils/session-intelligence.js';
|
|
3
|
+
import { findProjectRoot } from '../database.js';
|
|
1
4
|
export function handleGetStats(db) {
|
|
2
5
|
const total = db.prepare('SELECT COUNT(*) as count FROM decisions').get();
|
|
3
6
|
const active = db.prepare("SELECT COUNT(*) as count FROM decisions WHERE status = 'active'").get();
|
|
@@ -24,6 +27,21 @@ export function handleGetStats(db) {
|
|
|
24
27
|
.sort((a, b) => b[1] - a[1])
|
|
25
28
|
.slice(0, 5)
|
|
26
29
|
.map(([tag, count]) => ({ tag, count }));
|
|
30
|
+
const tokenSavings = getTokenSavings(db, 30);
|
|
31
|
+
// Session intelligence
|
|
32
|
+
const lastSession = getLastSessionContext(db);
|
|
33
|
+
let currentWork = null;
|
|
34
|
+
let relevantDecisions = [];
|
|
35
|
+
try {
|
|
36
|
+
const projectRoot = process.env.PROJECT_ROOT || findProjectRoot();
|
|
37
|
+
currentWork = detectCurrentWork(projectRoot);
|
|
38
|
+
relevantDecisions = getRelevantDecisions(db, {
|
|
39
|
+
branch: currentWork.branch,
|
|
40
|
+
modifiedFiles: [...currentWork.modifiedFiles, ...currentWork.stagedFiles],
|
|
41
|
+
limit: 5,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch { /* non-critical */ }
|
|
27
45
|
return {
|
|
28
46
|
totalDecisions: total.count,
|
|
29
47
|
active: active.count,
|
|
@@ -33,6 +51,10 @@ export function handleGetStats(db) {
|
|
|
33
51
|
totalSessions: sessions.count,
|
|
34
52
|
topTags,
|
|
35
53
|
lastActivity: lastDecision?.created_at || null,
|
|
54
|
+
tokenSavings,
|
|
55
|
+
lastSession,
|
|
56
|
+
currentWork,
|
|
57
|
+
relevantDecisions,
|
|
36
58
|
};
|
|
37
59
|
}
|
|
38
60
|
//# sourceMappingURL=get-stats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-stats.js","sourceRoot":"","sources":["../../src/tools/get-stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-stats.js","sourceRoot":"","sources":["../../src/tools/get-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { executeQuery } from '../queries.js';
|
|
2
|
+
import { logQuery } from '../utils/token-savings.js';
|
|
2
3
|
export function handleQueryMemory(db, sessionId, args) {
|
|
3
4
|
const { query, limit = 5 } = args;
|
|
4
5
|
if (!query || !query.trim()) {
|
|
5
6
|
return { results: [], query };
|
|
6
7
|
}
|
|
7
8
|
const results = executeQuery(db, query, limit, sessionId);
|
|
9
|
+
logQuery(db, sessionId, query, results.length);
|
|
8
10
|
return { results, query };
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=query-memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-memory.js","sourceRoot":"","sources":["../../src/tools/query-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"query-memory.js","sourceRoot":"","sources":["../../src/tools/query-memory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAOrD,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,SAAiB,EACjB,IAAqB;IAErB,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAElC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1D,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface SessionReviewResult {
|
|
3
|
+
decisionsThisSession: {
|
|
4
|
+
id: number;
|
|
5
|
+
title: string;
|
|
6
|
+
}[];
|
|
7
|
+
decisionCount: number;
|
|
8
|
+
filesChangedDuringSession: string[];
|
|
9
|
+
filesWithoutDecisions: string[];
|
|
10
|
+
filesWithExistingDecisions: {
|
|
11
|
+
filePath: string;
|
|
12
|
+
decisions: {
|
|
13
|
+
id: number;
|
|
14
|
+
title: string;
|
|
15
|
+
}[];
|
|
16
|
+
}[];
|
|
17
|
+
suggestions: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function handleReviewSession(db: Database.Database, sessionId: string, projectRoot: string): SessionReviewResult;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
export function handleReviewSession(db, sessionId, projectRoot) {
|
|
3
|
+
// 1. Decisions this session
|
|
4
|
+
const decisions = db.prepare(`
|
|
5
|
+
SELECT id, title FROM decisions WHERE session_id = ?
|
|
6
|
+
ORDER BY created_at ASC
|
|
7
|
+
`).all(sessionId);
|
|
8
|
+
// 2. Files changed (uncommitted + staged)
|
|
9
|
+
let changedFiles = [];
|
|
10
|
+
try {
|
|
11
|
+
const modified = execSync('git diff --name-only', { cwd: projectRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
12
|
+
const staged = execSync('git diff --cached --name-only', { cwd: projectRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
13
|
+
const all = [...(modified ? modified.split('\n') : []), ...(staged ? staged.split('\n') : [])];
|
|
14
|
+
changedFiles = [...new Set(all)];
|
|
15
|
+
}
|
|
16
|
+
catch { /* not a git repo */ }
|
|
17
|
+
// 3. Classify changed files
|
|
18
|
+
const filesWithoutDecisions = [];
|
|
19
|
+
const filesWithExistingDecisions = [];
|
|
20
|
+
for (const filePath of changedFiles) {
|
|
21
|
+
const existing = db.prepare(`
|
|
22
|
+
SELECT d.id, d.title
|
|
23
|
+
FROM decisions d
|
|
24
|
+
JOIN decision_files df ON d.id = df.decision_id
|
|
25
|
+
WHERE df.file_path LIKE ? AND d.status = 'active'
|
|
26
|
+
`).all(`%${filePath}%`);
|
|
27
|
+
if (existing.length > 0) {
|
|
28
|
+
filesWithExistingDecisions.push({ filePath, decisions: existing });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
filesWithoutDecisions.push(filePath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// 4. Build suggestions
|
|
35
|
+
const suggestions = [];
|
|
36
|
+
if (decisions.length === 0 && changedFiles.length > 0) {
|
|
37
|
+
suggestions.push('No decisions were saved this session despite file changes. Consider documenting key choices.');
|
|
38
|
+
}
|
|
39
|
+
if (filesWithoutDecisions.length > 0) {
|
|
40
|
+
suggestions.push(`Consider saving decisions for: ${filesWithoutDecisions.join(', ')}`);
|
|
41
|
+
}
|
|
42
|
+
for (const f of filesWithExistingDecisions) {
|
|
43
|
+
suggestions.push(`${f.filePath} has existing decision(s): ${f.decisions.map(d => `#${d.id} "${d.title}"`).join(', ')} — consider updating if behavior changed`);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
decisionsThisSession: decisions,
|
|
47
|
+
decisionCount: decisions.length,
|
|
48
|
+
filesChangedDuringSession: changedFiles,
|
|
49
|
+
filesWithoutDecisions,
|
|
50
|
+
filesWithExistingDecisions,
|
|
51
|
+
suggestions,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=review-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-session.js","sourceRoot":"","sources":["../../src/tools/review-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface LastSessionContext {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
startedAt: string;
|
|
5
|
+
endedAt: string;
|
|
6
|
+
branch: string | null;
|
|
7
|
+
summary: string | null;
|
|
8
|
+
decisionCount: number;
|
|
9
|
+
decisions: {
|
|
10
|
+
id: number;
|
|
11
|
+
title: string;
|
|
12
|
+
tags: string[];
|
|
13
|
+
}[];
|
|
14
|
+
affectedFiles: string[];
|
|
15
|
+
hoursAgo: number;
|
|
16
|
+
}
|
|
17
|
+
export interface CurrentWorkContext {
|
|
18
|
+
branch: string | null;
|
|
19
|
+
modifiedFiles: string[];
|
|
20
|
+
stagedFiles: string[];
|
|
21
|
+
uncommittedChangeCount: number;
|
|
22
|
+
}
|
|
23
|
+
export interface RelevantDecision {
|
|
24
|
+
id: number;
|
|
25
|
+
title: string;
|
|
26
|
+
decision: string;
|
|
27
|
+
tags: string[];
|
|
28
|
+
matchReason: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function getLastSessionContext(db: Database.Database): LastSessionContext | null;
|
|
31
|
+
export declare function detectCurrentWork(projectRoot: string): CurrentWorkContext;
|
|
32
|
+
export declare function getRelevantDecisions(db: Database.Database, context: {
|
|
33
|
+
branch?: string | null;
|
|
34
|
+
modifiedFiles?: string[];
|
|
35
|
+
limit?: number;
|
|
36
|
+
}): RelevantDecision[];
|