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.
Files changed (46) hide show
  1. package/README.md +47 -10
  2. package/dist/cli.js +0 -0
  3. package/dist/database.js +15 -0
  4. package/dist/database.js.map +1 -1
  5. package/dist/server.js +89 -0
  6. package/dist/server.js.map +1 -1
  7. package/dist/tools/get-stats.d.ts +7 -2
  8. package/dist/tools/get-stats.js +22 -0
  9. package/dist/tools/get-stats.js.map +1 -1
  10. package/dist/tools/query-memory.js +2 -0
  11. package/dist/tools/query-memory.js.map +1 -1
  12. package/dist/tools/review-session.d.ts +19 -0
  13. package/dist/tools/review-session.js +54 -0
  14. package/dist/tools/review-session.js.map +1 -0
  15. package/dist/utils/session-intelligence.d.ts +36 -0
  16. package/dist/utils/session-intelligence.js +154 -0
  17. package/dist/utils/session-intelligence.js.map +1 -0
  18. package/dist/utils/token-savings.d.ts +10 -0
  19. package/dist/utils/token-savings.js +27 -0
  20. package/dist/utils/token-savings.js.map +1 -0
  21. package/dist/web/routes/analytics.js +6 -0
  22. package/dist/web/routes/analytics.js.map +1 -1
  23. package/dist/web/server.js +25 -0
  24. package/dist/web/server.js.map +1 -1
  25. package/dist/web-dist/assets/AnalyticsPage-B0ZCSmi7.js +3 -0
  26. package/dist/web-dist/assets/{DashboardPage-DtQ8bcLR.js → DashboardPage-BmkQ7Pir.js} +1 -1
  27. package/dist/web-dist/assets/{DecisionDetailPage-CoNQF-FB.js → DecisionDetailPage-DSNQOk0G.js} +1 -1
  28. package/dist/web-dist/assets/{DecisionsPage-F2KA9sQF.js → DecisionsPage-Druu3aUr.js} +1 -1
  29. package/dist/web-dist/assets/{ImportExportPage-CqhNTw6I.js → ImportExportPage-yQxs-fBD.js} +1 -1
  30. package/dist/web-dist/assets/{SessionDetailPage-DtQ1Jsmp.js → SessionDetailPage-D0ruOy8B.js} +1 -1
  31. package/dist/web-dist/assets/{SessionsPage-BVR-mFw1.js → SessionsPage-5lqQKejq.js} +1 -1
  32. package/dist/web-dist/assets/{SettingsPage-Dluf2etQ.js → SettingsPage-Dj2KkiKe.js} +1 -1
  33. 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
  34. 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
  35. package/dist/web-dist/assets/{decisions-D4RIsPGu.js → decisions-zp0xvZqp.js} +1 -1
  36. package/dist/web-dist/assets/{index-CB5v6K3L.js → index-Bl3DbLj3.js} +2 -2
  37. package/dist/web-dist/assets/{index-DnStDInH.css → index-CoMkCnBk.css} +1 -1
  38. package/dist/web-dist/assets/{installCanvasRenderer-ZjWTVaVA.js → installCanvasRenderer-CuEbBLw0.js} +1 -1
  39. package/dist/web-dist/assets/{sessions-CbnjP7UX.js → sessions-CtlNQ8lw.js} +1 -1
  40. package/dist/web-dist/assets/useApi-DkK919W_.js +1 -0
  41. package/dist/web-dist/index.html +2 -2
  42. package/package.json +1 -1
  43. package/schema.sql +12 -0
  44. package/templates/memory-instructions.md +10 -0
  45. package/dist/web-dist/assets/AnalyticsPage-CFlZyCBZ.js +0 -3
  46. package/dist/web-dist/assets/useApi-goimj9yG.js +0 -1
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  [![100% Local](https://img.shields.io/badge/Privacy-100%25_Local-purple)](/)
11
11
  [![Zero Telemetry](https://img.shields.io/badge/Telemetry-Zero-orange)](/)
12
12
 
13
- *Save architectural decisions during conversations. Query them forever. 100% local.*
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. Decisions are saved during conversations and persist across sessions.
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
- | 💰 **Save tokens and money** | Claude gets context from memory instead of you burning tokens re-explaining it |
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
- | 🎯 **Right answers on first try** | Full project context means fewer wrong assumptions and less back-and-forth |
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` | 📊 Get memory statistics (auto-called at session start) |
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** — You say "add caching" and Claude already knows your stack, your patterns, your preferences.<br>
289
- **Session 50** — A new teammate opens Claude Code and asks "how does auth work?" — full history, instantly.<br>
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
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);
@@ -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":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAChC,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;AAE7C,mBAAmB;AACnB,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAEzE,uCAAuC;AACvC,IAAI,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;IAClE,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QACtC,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC;aAC5E,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAE9B,kCAAkC;AAClC,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AACxC,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,2CAA2C,WAAW,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9F,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,4BAA4B,gBAAgB,UAAU,CAAC,CAAC;AACtE,OAAO,CAAC,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;AAEtD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,wBAAwB;AACxB,yEAAyE;AACzE,MAAM,CAAC,IAAI,CACT,eAAe,EACf,yDAAyD,EACzD;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACtE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;CACnF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,IAAI,GAAG,uBAAuB,MAAM,CAAC,EAAE,eAAe,MAAM,CAAC,KAAK,eAAe,IAAI,CAAC,QAAQ,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;QAEnI,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,IAAI,IAAI,4CAA4C,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7G,CAAC;QACD,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,uCAAuC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACxC,IAAI,IAAI,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC;YACrF,CAAC;YACD,IAAI,IAAI,sEAAsE,CAAC;QACjF,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,uBAAuB;AACvB,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6CAA6C,EAC7C;IACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC1E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAEzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iCAAiC,KAAK,GAAG,EAAE,CAAC;aACtF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,GAAG,SAAS,OAAO,CAAC,MAAM,sBAAsB,KAAK,OAAO,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,IAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC;YAC7C,IAAI,IAAI,iBAAiB,CAAC,CAAC,QAAQ,IAAI,CAAC;YACxC,IAAI,IAAI,kBAAkB,CAAC,CAAC,SAAS,IAAI,CAAC;YAC1C,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBACxC,IAAI,IAAI,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnD,CAAC;gBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,CAAC,YAAY;gBAAE,IAAI,IAAI,qBAAqB,CAAC,CAAC,YAAY,IAAI,CAAC;YACpE,IAAI,CAAC,CAAC,cAAc;gBAAE,IAAI,IAAI,cAAc,CAAC,CAAC,cAAc,IAAI,CAAC;YACjE,IAAI,IAAI,gBAAgB,CAAC,CAAC,UAAU,MAAM,CAAC;QAC7C,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,IAAI,CACT,aAAa,EACb,qDAAqD,EACrD;IACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;CACjE,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,EAAE,CAAC;QACrF,CAAC;QAED,IAAI,IAAI,GAAG,qBAAqB,OAAO,CAAC,MAAM,QAAQ,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,OAAgB,EAAE,CAAC;YACjC,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,UAAU,MAAM,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,0BAA0B;AAC1B,kEAAkE;AAClE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,0CAA0C,EAC1C;IACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CACtD,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,YAAY,MAAM,CAAC,EAAE,qBAAqB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;iBAC7G,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,IAAI,CACT,WAAW,EACX,mEAAmE,EACnE,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,6BAA6B,CAAC;QACzC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAC9B,IAAI,IAAI,eAAe,KAAK,CAAC,cAAc,QAAQ,CAAC;QACpD,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,UAAU,gBAAgB,KAAK,CAAC,UAAU,aAAa,CAAC;YACnG,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;gBAAE,IAAI,IAAI,KAAK,KAAK,CAAC,aAAa,SAAS,CAAC;YACvE,IAAI,IAAI,GAAG,CAAC;QACd,CAAC;QACD,IAAI,IAAI,iBAAiB,KAAK,CAAC,aAAa,IAAI,CAAC;QACjD,IAAI,IAAI,kBAAkB,KAAK,CAAC,YAAY,IAAI,MAAM,IAAI,CAAC;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,eAAe,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACxF,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,IAAI,qBAAqB,KAAK,CAAC,YAAY,CAAC,YAAY,cAAc,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC,cAAc,EAAE,mBAAmB,KAAK,CAAC,YAAY,CAAC,qBAAqB,cAAc,CAAC;QAC9M,CAAC;QAED,uBAAuB;QACvB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;YAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,IAAI,IAAI,iBAAiB,CAAC,CAAC,QAAQ,OAAO,CAAC;YAC3C,IAAI,CAAC,CAAC,MAAM;gBAAE,IAAI,IAAI,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,IAAI,MAAM,CAAC;YACf,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,IAAI,gBAAgB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACvE,CAAC;YACD,IAAI,IAAI,WAAW,CAAC,CAAC,aAAa,gBAAgB,CAAC;YACnD,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,IAAI,YAAY,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9B,IAAI,IAAI,0BAA0B,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;gBAC9B,IAAI,IAAI,aAAa,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,WAAW,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC;oBACjD,IAAI,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,sBAAsB,oBAAoB,CAAC;gBAC5E,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC;YACd,CAAC;YACD,IAAI,IAAI,KAAK,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,IAAI,IAAI,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,KAAK,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2EAA2E,EAC3E,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,0BAA0B,MAAM,CAAC,cAAc,0BAA0B,WAAW,YAAY;iBACvG,CAAC;SACH,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,6EAA6E,EAC7E,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAEtE,IAAI,IAAI,GAAG,mBAAmB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,oBAAoB,MAAM,CAAC,aAAa,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,KAAK,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3E,CAAC;QACD,IAAI,IAAI,IAAI,CAAC;QAEb,IAAI,MAAM,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI,kBAAkB,MAAM,CAAC,yBAAyB,CAAC,MAAM,IAAI,CAAC;QACxE,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,IAAI,kBAAkB,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,qDAAqD,CAAC;QAChE,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,KAAe,CAAC,OAAO,EAAE,EAAE,CAAC;SACjF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,4BAA4B;AAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC;iBAC1D,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7D,EAAE,CAAC,OAAO,CAAC,4EAA4E,CAAC;SACrF,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,gBAAgB;AAChB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type Database from 'better-sqlite3';
2
- interface MemoryStats {
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 {};
@@ -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":"AAaA,MAAM,UAAU,cAAc,CAAC,EAAqB;IAClD,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAC/F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iEAAiE,CAAC,CAAC,GAAG,EAAuB,CAAC;IACxH,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC,CAAC,GAAG,EAAuB,CAAC;IAChI,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,qEAAqE,CAAC,CAAC,GAAG,EAAuB,CAAC;IAChI,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,sFAAsF,CAAC,CAAC,GAAG,EAAuB,CAAC;IACpJ,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAuB,CAAC;IACjG,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,mEAAmE,CAAC,CAAC,GAAG,EAAwC,CAAC;IAEjJ,kCAAkC;IAClC,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,EAAwB,CAAC;IACjH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAa,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;SACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3C,OAAO;QACL,cAAc,EAAE,KAAK,CAAC,KAAK;QAC3B,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,aAAa,EAAE,aAAa,CAAC,KAAK;QAClC,aAAa,EAAE,QAAQ,CAAC,KAAK;QAC7B,OAAO;QACP,YAAY,EAAE,YAAY,EAAE,UAAU,IAAI,IAAI;KAC/C,CAAC;AACJ,CAAC"}
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;AAO7C,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,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,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[];