claude-memory-layer 1.0.23 → 1.0.25

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 (58) hide show
  1. package/.claude/settings.local.json +25 -0
  2. package/README.md +2 -0
  3. package/dist/cli/index.js +229 -978
  4. package/dist/cli/index.js.map +4 -4
  5. package/dist/core/index.js +59 -71
  6. package/dist/core/index.js.map +3 -3
  7. package/dist/hooks/post-tool-use.js +287 -976
  8. package/dist/hooks/post-tool-use.js.map +4 -4
  9. package/dist/hooks/semantic-daemon.js +6520 -0
  10. package/dist/hooks/semantic-daemon.js.map +7 -0
  11. package/dist/hooks/session-end.js +209 -973
  12. package/dist/hooks/session-end.js.map +4 -4
  13. package/dist/hooks/session-start.js +293 -978
  14. package/dist/hooks/session-start.js.map +4 -4
  15. package/dist/hooks/stop.js +247 -975
  16. package/dist/hooks/stop.js.map +4 -4
  17. package/dist/hooks/user-prompt-submit.js +406 -1036
  18. package/dist/hooks/user-prompt-submit.js.map +4 -4
  19. package/dist/server/api/index.js +209 -973
  20. package/dist/server/api/index.js.map +4 -4
  21. package/dist/server/index.js +209 -973
  22. package/dist/server/index.js.map +4 -4
  23. package/dist/services/memory-service.js +209 -973
  24. package/dist/services/memory-service.js.map +4 -4
  25. package/dist/ui/app.js +48 -1
  26. package/dist/ui/index.html +11 -3
  27. package/memory/_index.md +1 -0
  28. package/memory/agent_response/uncategorized/2026-03-04.md +1314 -1
  29. package/memory/session_summary/uncategorized/2026-03-04.md +50 -0
  30. package/memory/tool_observation/uncategorized/2026-03-04.md +969 -1
  31. package/memory/user_prompt/uncategorized/2026-03-04.md +555 -1
  32. package/package.json +1 -2
  33. package/scripts/build.ts +2 -1
  34. package/specs/memory-utilization-improvements/context.md +145 -0
  35. package/specs/memory-utilization-improvements/plan.md +361 -0
  36. package/specs/memory-utilization-improvements/spec.md +308 -0
  37. package/specs/optional-duckdb/context.md +77 -0
  38. package/specs/optional-duckdb/plan.md +142 -0
  39. package/specs/optional-duckdb/spec.md +35 -0
  40. package/specs/selective-tool-observation/context.md +100 -0
  41. package/specs/selective-tool-observation/plan.md +158 -0
  42. package/specs/selective-tool-observation/spec.md +127 -0
  43. package/src/cli/index.ts +1 -0
  44. package/src/core/db-wrapper.ts +18 -73
  45. package/src/core/embedder.ts +13 -4
  46. package/src/core/sqlite-event-store.ts +40 -0
  47. package/src/core/turn-state.ts +48 -0
  48. package/src/core/types.ts +1 -0
  49. package/src/hooks/post-tool-use.ts +72 -2
  50. package/src/hooks/semantic-daemon-client.ts +208 -0
  51. package/src/hooks/semantic-daemon.ts +276 -0
  52. package/src/hooks/session-start.ts +11 -0
  53. package/src/hooks/stop.ts +33 -4
  54. package/src/hooks/user-prompt-submit.ts +48 -40
  55. package/src/services/memory-service.ts +112 -65
  56. package/src/services/session-history-importer.ts +18 -0
  57. package/src/ui/app.js +48 -1
  58. package/src/ui/index.html +11 -3
package/dist/ui/app.js CHANGED
@@ -388,9 +388,20 @@ function updateStatsUI() {
388
388
  const sharedCount = state.sharedStats ?
389
389
  ((state.sharedStats.troubleshooting || 0) + (state.sharedStats.bestPractices || 0) + (state.sharedStats.commonErrors || 0)) : 0;
390
390
 
391
- document.getElementById('stat-shared').textContent = formatNumber(sharedCount);
392
391
  document.getElementById('stat-vectors').textContent = formatNumber(vectorCount);
393
392
 
393
+ // Retrieval quality stat card
394
+ const rtStats = state.retrievalTraces?.stats;
395
+ const totalQueries = rtStats?.totalQueries || 0;
396
+ const selRate = rtStats ? ((rtStats.selectionRate || 0) * 100).toFixed(0) : null;
397
+ document.getElementById('stat-retrieval-queries').textContent = formatNumber(totalQueries);
398
+ const rateEl = document.getElementById('stat-retrieval-rate');
399
+ if (rateEl) {
400
+ rateEl.textContent = totalQueries > 0 && selRate !== null
401
+ ? `${selRate}% selection rate`
402
+ : totalQueries > 0 ? '' : 'no queries yet';
403
+ }
404
+
394
405
  const levelCounts = {};
395
406
  if (state.stats.levelStats) {
396
407
  state.stats.levelStats.forEach(item => { levelCounts[item.level] = item.count; });
@@ -596,10 +607,46 @@ function updateEventsListUI() {
596
607
 
597
608
  // --- Memory Usage ---
598
609
 
610
+ function updateTopAccessedEventsUI() {
611
+ const container = document.getElementById('top-accessed-events-list');
612
+ if (!container) return;
613
+
614
+ const events = (state.mostAccessed?.events || state.mostAccessed?.memories || []);
615
+ const filtered = events.filter(e => (e.accessCount || 0) > 0).slice(0, 5);
616
+
617
+ if (filtered.length === 0) {
618
+ container.innerHTML = '<div style="padding:12px; text-align:center; color:var(--text-muted); font-size:13px;">No accessed memories yet</div>';
619
+ return;
620
+ }
621
+
622
+ container.innerHTML = filtered.map((m, i) => {
623
+ const type = m.eventType || m.type || 'memory';
624
+ const preview = (m.summary || m.preview || m.content || '').replace(/<[^>]*>/g, '').slice(0, 80);
625
+ const lastAccessed = m.lastAccessedAt ? new Date(m.lastAccessedAt).toLocaleDateString() : (m.lastAccessed ? new Date(m.lastAccessed).toLocaleDateString() : '-');
626
+ const id = m.id || m.memoryId || '';
627
+ return `
628
+ <div class="shared-item" style="cursor:pointer;" ${id ? `onclick="openDetailModal('${id}')"` : ''}>
629
+ <div class="shared-info" style="flex-direction:column; align-items:flex-start; gap:2px;">
630
+ <div style="display:flex; gap:6px; align-items:center;">
631
+ <span class="event-type-badge type-${type.replace('_','-')}">${type}</span>
632
+ <span style="font-size:10px; color:var(--text-muted);">last: ${lastAccessed}</span>
633
+ </div>
634
+ <span style="font-size:12px; color:var(--text-secondary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:200px;" title="${escapeHtml(preview)}">${escapeHtml(preview) || '(no preview)'}</span>
635
+ </div>
636
+ <div style="display:flex; flex-direction:column; align-items:flex-end; gap:2px; min-width:40px;">
637
+ <span style="font-size:15px; font-weight:700; color:var(--accent-primary);">${m.accessCount}</span>
638
+ <span style="font-size:10px; color:var(--text-muted);">hits</span>
639
+ </div>
640
+ </div>
641
+ `;
642
+ }).join('');
643
+ }
644
+
599
645
  function updateMemoryUsageUI() {
600
646
  updateGraduationBars();
601
647
  updateHelpfulnessUI();
602
648
  updateMostHelpfulList();
649
+ updateTopAccessedEventsUI();
603
650
  updateAdherenceSummaryUI();
604
651
  updateRetrievalTraceUI();
605
652
  }
@@ -110,11 +110,12 @@
110
110
  <i class="ri-discuss-line"></i> Active Sessions
111
111
  </div>
112
112
  </div>
113
- <div class="stat-card" data-stat="shared">
114
- <div class="stat-value" id="stat-shared">0</div>
113
+ <div class="stat-card" data-stat="retrieval">
114
+ <div class="stat-value" id="stat-retrieval-queries">0</div>
115
115
  <div class="stat-label">
116
- <i class="ri-share-forward-line"></i> Shared Items
116
+ <i class="ri-search-eye-line"></i> Retrieval Queries
117
117
  </div>
118
+ <div id="stat-retrieval-rate" style="font-size:11px; color:var(--text-muted); margin-top:2px;">-</div>
118
119
  </div>
119
120
  <div class="stat-card" data-stat="vectors">
120
121
  <div class="stat-value" id="stat-vectors">0</div>
@@ -327,6 +328,13 @@
327
328
  <div id="adherence-summary" style="padding:8px 0; font-size:13px; color:var(--text-muted);">Loading...</div>
328
329
  </div>
329
330
 
331
+ <div style="margin-top:20px;">
332
+ <div class="section-label">Top Accessed Events</div>
333
+ <div id="top-accessed-events-list" class="shared-list">
334
+ <div style="padding:12px; text-align:center; color:var(--text-muted); font-size:13px;">Loading...</div>
335
+ </div>
336
+ </div>
337
+
330
338
  <div style="margin-top:20px;">
331
339
  <div class="section-label">Retrieval Trace (1:1)</div>
332
340
  <div id="retrieval-trace-summary" style="padding:8px 0; font-size:13px; color:var(--text-muted);">Loading...</div>
package/memory/_index.md CHANGED
@@ -396,6 +396,7 @@ Generated automatically by MarkdownMirror.
396
396
  - memory/node_modules/zod/2026-02-25.md
397
397
  - memory/session_summary/uncategorized/2026-02-26.md
398
398
  - memory/session_summary/uncategorized/2026-03-03.md
399
+ - memory/session_summary/uncategorized/2026-03-04.md
399
400
  - memory/specs/20260207-dashboard-upgrade/2026-02-25.md
400
401
  - memory/specs/citations-system/2026-02-25.md
401
402
  - memory/specs/endless-mode/2026-02-25.md