claude-memory-layer 1.0.23 → 1.0.24
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/.claude/settings.local.json +11 -0
- package/README.md +2 -0
- package/dist/cli/index.js +85 -17
- package/dist/cli/index.js.map +2 -2
- package/dist/core/index.js +28 -5
- package/dist/core/index.js.map +2 -2
- package/dist/hooks/post-tool-use.js +115 -18
- package/dist/hooks/post-tool-use.js.map +2 -2
- package/dist/hooks/semantic-daemon.js +7337 -0
- package/dist/hooks/semantic-daemon.js.map +7 -0
- package/dist/hooks/session-end.js +69 -16
- package/dist/hooks/session-end.js.map +2 -2
- package/dist/hooks/session-start.js +154 -24
- package/dist/hooks/session-start.js.map +4 -4
- package/dist/hooks/stop.js +99 -18
- package/dist/hooks/stop.js.map +2 -2
- package/dist/hooks/user-prompt-submit.js +289 -102
- package/dist/hooks/user-prompt-submit.js.map +4 -4
- package/dist/server/api/index.js +69 -16
- package/dist/server/api/index.js.map +2 -2
- package/dist/server/index.js +69 -16
- package/dist/server/index.js.map +2 -2
- package/dist/services/memory-service.js +69 -16
- package/dist/services/memory-service.js.map +2 -2
- package/dist/ui/app.js +48 -1
- package/dist/ui/index.html +11 -3
- package/memory/_index.md +1 -0
- package/memory/agent_response/uncategorized/2026-03-04.md +1098 -1
- package/memory/session_summary/uncategorized/2026-03-04.md +31 -0
- package/memory/tool_observation/uncategorized/2026-03-04.md +733 -1
- package/memory/user_prompt/uncategorized/2026-03-04.md +371 -1
- package/package.json +1 -1
- package/scripts/build.ts +2 -1
- package/specs/selective-tool-observation/context.md +100 -0
- package/specs/selective-tool-observation/plan.md +158 -0
- package/specs/selective-tool-observation/spec.md +127 -0
- package/src/cli/index.ts +1 -0
- package/src/core/embedder.ts +13 -4
- package/src/core/sqlite-event-store.ts +16 -0
- package/src/core/turn-state.ts +48 -0
- package/src/core/types.ts +1 -0
- package/src/hooks/post-tool-use.ts +47 -2
- package/src/hooks/semantic-daemon-client.ts +208 -0
- package/src/hooks/semantic-daemon.ts +276 -0
- package/src/hooks/session-start.ts +7 -0
- package/src/hooks/stop.ts +19 -4
- package/src/hooks/user-prompt-submit.ts +48 -40
- package/src/services/memory-service.ts +59 -16
- package/src/services/session-history-importer.ts +18 -0
- package/src/ui/app.js +48 -1
- package/src/ui/index.html +11 -3
package/src/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
|
}
|
package/src/ui/index.html
CHANGED
|
@@ -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="
|
|
114
|
-
<div class="stat-value" id="stat-
|
|
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-
|
|
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>
|