@aman_asmuei/amem 0.9.1 → 0.9.2
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/dist/dashboard.js +217 -4
- package/dist/dashboard.js.map +1 -1
- package/package.json +1 -1
package/dist/dashboard.js
CHANGED
|
@@ -74,7 +74,26 @@ a{color:var(--decision);text-decoration:none}
|
|
|
74
74
|
.mem-card .mem-meta .tag{background:var(--card);border:1px solid var(--border);border-radius:4px;padding:1px 6px}
|
|
75
75
|
|
|
76
76
|
/* knowledge graph */
|
|
77
|
-
#graph-svg{width:100%;height:
|
|
77
|
+
#graph-svg{width:100%;height:460px;border-radius:6px;background:var(--bg);cursor:grab}
|
|
78
|
+
#graph-svg:active{cursor:grabbing}
|
|
79
|
+
#graph-svg circle{cursor:pointer;transition:r 0.15s}
|
|
80
|
+
#graph-svg circle:hover{r:12}
|
|
81
|
+
.graph-tooltip{position:absolute;background:var(--card);border:1px solid var(--border);border-radius:6px;padding:10px 14px;font-size:0.8rem;max-width:300px;pointer-events:none;z-index:10;box-shadow:0 4px 12px rgba(0,0,0,0.4)}
|
|
82
|
+
|
|
83
|
+
/* memory actions */
|
|
84
|
+
.mem-actions{display:flex;gap:6px;margin-top:6px}
|
|
85
|
+
.mem-actions button{background:var(--card);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:3px 10px;font-size:0.7rem;cursor:pointer;transition:all 0.15s}
|
|
86
|
+
.mem-actions button:hover{background:var(--border);color:#fff}
|
|
87
|
+
.mem-actions .btn-core{border-color:var(--correction)}
|
|
88
|
+
.mem-actions .btn-expire{border-color:var(--muted)}
|
|
89
|
+
|
|
90
|
+
/* export bar */
|
|
91
|
+
.export-bar{display:flex;gap:10px;justify-content:flex-end;margin-bottom:10px}
|
|
92
|
+
.export-bar button{background:var(--decision);color:#fff;border:none;border-radius:6px;padding:6px 16px;font-size:0.8rem;cursor:pointer;font-weight:600;transition:opacity 0.15s}
|
|
93
|
+
.export-bar button:hover{opacity:0.85}
|
|
94
|
+
|
|
95
|
+
/* highlight */
|
|
96
|
+
.highlight{background:rgba(88,166,255,0.2);border-radius:2px;padding:0 2px}
|
|
78
97
|
|
|
79
98
|
/* reminders */
|
|
80
99
|
.reminder-list{max-height:360px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}
|
|
@@ -122,6 +141,10 @@ a{color:var(--decision);text-decoration:none}
|
|
|
122
141
|
<!-- Memory list -->
|
|
123
142
|
<div class="card full" id="mem-section">
|
|
124
143
|
<h2>Memories</h2>
|
|
144
|
+
<div class="export-bar">
|
|
145
|
+
<button onclick="exportMemories('json')">Export JSON</button>
|
|
146
|
+
<button onclick="exportMemories('markdown')">Export Markdown</button>
|
|
147
|
+
</div>
|
|
125
148
|
<div class="mem-controls">
|
|
126
149
|
<input type="text" id="mem-search" placeholder="Search memories..."/>
|
|
127
150
|
<select id="mem-type">
|
|
@@ -146,6 +169,7 @@ a{color:var(--decision);text-decoration:none}
|
|
|
146
169
|
<!-- Knowledge graph -->
|
|
147
170
|
<div class="card" id="graph-card">
|
|
148
171
|
<h2>Knowledge Graph</h2>
|
|
172
|
+
<div id="graph-tooltip" class="graph-tooltip" style="display:none"></div>
|
|
149
173
|
<svg id="graph-svg"></svg>
|
|
150
174
|
</div>
|
|
151
175
|
|
|
@@ -226,6 +250,17 @@ a{color:var(--decision);text-decoration:none}
|
|
|
226
250
|
setHTML($('conf-bars'), bar('High',conf.high,'conf-high')+bar('Medium',conf.medium,'conf-med')+bar('Low',conf.low,'conf-low'));
|
|
227
251
|
}
|
|
228
252
|
|
|
253
|
+
var currentSearchQuery='';
|
|
254
|
+
|
|
255
|
+
function highlightText(text,query){
|
|
256
|
+
if(!query) return esc(text);
|
|
257
|
+
var escaped=esc(text);
|
|
258
|
+
try{
|
|
259
|
+
var q=query.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,'\\\\$&');
|
|
260
|
+
return escaped.replace(new RegExp('('+q+')','gi'),'<span class="highlight">$1</span>');
|
|
261
|
+
}catch(e){return escaped}
|
|
262
|
+
}
|
|
263
|
+
|
|
229
264
|
function renderMemories(memories){
|
|
230
265
|
var el=$('mem-list');
|
|
231
266
|
if(!memories.length){setHTML(el,'<div class="empty">No memories found</div>');return}
|
|
@@ -235,13 +270,16 @@ a{color:var(--decision);text-decoration:none}
|
|
|
235
270
|
var tierBadge = m.tier && m.tier !== 'archival' ? '<span class="type-badge" style="background:'+(m.tier==='core'?'#f0883e':'#58a6ff')+'">'+esc(m.tier)+'</span>' : '';
|
|
236
271
|
var expiredBadge = m.validUntil ? '<span class="type-badge" style="background:#f85149;opacity:0.7">expired</span>' : '';
|
|
237
272
|
var validInfo = m.validFrom ? '<span>Valid: '+new Date(m.validFrom).toISOString().slice(0,10)+(m.validUntil?' → '+new Date(m.validUntil).toISOString().slice(0,10):' → now')+'</span>' : '';
|
|
273
|
+
var contentHtml = highlightText(m.content, currentSearchQuery);
|
|
274
|
+
var sid=esc(m.id.slice(0,8));
|
|
275
|
+
var tierLabel=m.tier||'archival';
|
|
238
276
|
return '<div class="mem-card"'+(m.validUntil?' style="opacity:0.6"':'')+'>'+
|
|
239
277
|
'<div class="mem-head">'+
|
|
240
278
|
'<span class="type-badge" style="background:'+color+'">'+esc(m.type)+'</span>'+
|
|
241
279
|
tierBadge+expiredBadge+
|
|
242
|
-
'<code class="mono" style="color:var(--muted);font-size:0.7rem">'+
|
|
280
|
+
'<code class="mono" style="color:var(--muted);font-size:0.7rem">'+sid+'</code>'+
|
|
243
281
|
'</div>'+
|
|
244
|
-
'<div class="mem-content">'+
|
|
282
|
+
'<div class="mem-content">'+contentHtml+'</div>'+
|
|
245
283
|
'<div class="mem-meta">'+
|
|
246
284
|
'<span>Confidence: '+Math.round(m.confidence*100)+'%</span>'+
|
|
247
285
|
'<span>'+timeAgo(m.createdAt)+'</span>'+
|
|
@@ -249,6 +287,11 @@ a{color:var(--decision);text-decoration:none}
|
|
|
249
287
|
(m.scope?'<span>Scope: '+esc(m.scope)+'</span>':'')+
|
|
250
288
|
validInfo+
|
|
251
289
|
(tags?' '+tags:'')+
|
|
290
|
+
'</div>'+
|
|
291
|
+
'<div class="mem-actions">'+
|
|
292
|
+
(tierLabel!=='core'?'<button class="btn-core" data-action="tier:core:'+sid+'">Promote to Core</button>':
|
|
293
|
+
'<button data-action="tier:archival:'+sid+'">Demote</button>')+
|
|
294
|
+
(!m.validUntil?'<button class="btn-expire" data-action="expire::'+sid+'">Expire</button>':'')+
|
|
252
295
|
'</div></div>';
|
|
253
296
|
}).join(''));
|
|
254
297
|
}
|
|
@@ -257,6 +300,7 @@ a{color:var(--decision);text-decoration:none}
|
|
|
257
300
|
var q=($('mem-search').value||'').toLowerCase();
|
|
258
301
|
var t=$('mem-type').value;
|
|
259
302
|
var tier=$('mem-tier')?$('mem-tier').value:'';
|
|
303
|
+
currentSearchQuery=q;
|
|
260
304
|
var list=allMemories;
|
|
261
305
|
if(q) list=list.filter(function(m){return m.content.toLowerCase().indexOf(q)!==-1});
|
|
262
306
|
if(t) list=list.filter(function(m){return m.type===t});
|
|
@@ -318,6 +362,11 @@ a{color:var(--decision);text-decoration:none}
|
|
|
318
362
|
}
|
|
319
363
|
}
|
|
320
364
|
|
|
365
|
+
// Store for interactive use
|
|
366
|
+
graphNodes=nodes;
|
|
367
|
+
graphEdges=edges;
|
|
368
|
+
graphNodeMap=nodeMap;
|
|
369
|
+
|
|
321
370
|
// render SVG elements (all text escaped via esc())
|
|
322
371
|
var html='';
|
|
323
372
|
for(i=0;i<edges.length;i++){
|
|
@@ -329,7 +378,7 @@ a{color:var(--decision);text-decoration:none}
|
|
|
329
378
|
}
|
|
330
379
|
for(i=0;i<nodes.length;i++){
|
|
331
380
|
var color=TYPE_COLORS[nodes[i].type]||'#8b949e';
|
|
332
|
-
html+='<circle cx="'+nodes[i].x+'" cy="'+nodes[i].y+'" r="8" fill="'+color+'" stroke="#0d1117" stroke-width="2"/>';
|
|
381
|
+
html+='<circle data-nid="'+esc(nodes[i].id)+'" cx="'+nodes[i].x+'" cy="'+nodes[i].y+'" r="8" fill="'+color+'" stroke="#0d1117" stroke-width="2"/>';
|
|
333
382
|
html+='<text x="'+nodes[i].x+'" y="'+(nodes[i].y+20)+'" fill="'+color+'" font-size="10" text-anchor="middle" font-family="-apple-system,sans-serif">'+esc(nodes[i].label.slice(0,24))+'</text>';
|
|
334
383
|
}
|
|
335
384
|
setHTML(svg, html);
|
|
@@ -418,7 +467,134 @@ a{color:var(--decision);text-decoration:none}
|
|
|
418
467
|
$('mem-type').addEventListener('change',filterMemories);
|
|
419
468
|
if($('mem-tier')) $('mem-tier').addEventListener('change',filterMemories);
|
|
420
469
|
|
|
470
|
+
// -- Memory actions (delegated) --
|
|
471
|
+
document.addEventListener('click',function(e){
|
|
472
|
+
var btn=e.target;
|
|
473
|
+
if(!btn||!btn.dataset||!btn.dataset.action) return;
|
|
474
|
+
var parts=btn.dataset.action.split(':');
|
|
475
|
+
var action=parts[0],val=parts[1],id=parts[2];
|
|
476
|
+
if(!id) return;
|
|
477
|
+
|
|
478
|
+
var url='';
|
|
479
|
+
if(action==='tier') url='/api/action/tier?id='+encodeURIComponent(id)+'&tier='+encodeURIComponent(val);
|
|
480
|
+
else if(action==='expire') url='/api/action/expire?id='+encodeURIComponent(id);
|
|
481
|
+
else return;
|
|
482
|
+
|
|
483
|
+
fetch(url,{method:'POST'}).then(function(r){
|
|
484
|
+
if(r.ok) loadAll();
|
|
485
|
+
else r.text().then(function(t){alert('Error: '+t)});
|
|
486
|
+
}).catch(function(err){alert('Error: '+err.message)});
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
// -- Export --
|
|
490
|
+
window.exportMemories=function(format){
|
|
491
|
+
fetch('/api/memories?limit=10000').then(function(r){return r.json()}).then(function(data){
|
|
492
|
+
var content,filename,mime;
|
|
493
|
+
if(format==='json'){
|
|
494
|
+
content=JSON.stringify(data,null,2);
|
|
495
|
+
filename='amem-export.json';
|
|
496
|
+
mime='application/json';
|
|
497
|
+
} else {
|
|
498
|
+
var lines=['# amem Memory Export\\n','*Exported: '+new Date().toISOString()+'*','*Total: '+data.length+' memories*\\n'];
|
|
499
|
+
var types=['correction','decision','pattern','preference','topology','fact'];
|
|
500
|
+
for(var ti=0;ti<types.length;ti++){
|
|
501
|
+
var type=types[ti];
|
|
502
|
+
var mems=data.filter(function(m){return m.type===type});
|
|
503
|
+
if(!mems.length) continue;
|
|
504
|
+
lines.push('## '+type.charAt(0).toUpperCase()+type.slice(1)+'s\\n');
|
|
505
|
+
for(var mi=0;mi<mems.length;mi++){
|
|
506
|
+
lines.push('- **'+mems[mi].content+'** ('+Math.round(mems[mi].confidence*100)+'% confidence)');
|
|
507
|
+
if(mems[mi].tags&&mems[mi].tags.length) lines.push(' Tags: '+mems[mi].tags.join(', '));
|
|
508
|
+
lines.push('');
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
content=lines.join('\\n');
|
|
512
|
+
filename='amem-export.md';
|
|
513
|
+
mime='text/markdown';
|
|
514
|
+
}
|
|
515
|
+
var blob=new Blob([content],{type:mime});
|
|
516
|
+
var a=document.createElement('a');
|
|
517
|
+
a.href=URL.createObjectURL(blob);
|
|
518
|
+
a.download=filename;
|
|
519
|
+
a.click();
|
|
520
|
+
URL.revokeObjectURL(a.href);
|
|
521
|
+
});
|
|
522
|
+
};
|
|
523
|
+
|
|
524
|
+
// -- Interactive Graph (drag, click-to-inspect) --
|
|
525
|
+
var dragNode=null, dragOffset={x:0,y:0}, graphNodes=[], graphNodeMap={}, graphEdges=[];
|
|
526
|
+
|
|
527
|
+
function makeGraphInteractive(){
|
|
528
|
+
var svg=$('graph-svg');
|
|
529
|
+
var tooltip=$('graph-tooltip');
|
|
530
|
+
if(!svg||!tooltip) return;
|
|
531
|
+
|
|
532
|
+
svg.addEventListener('mousedown',function(e){
|
|
533
|
+
var circle=e.target;
|
|
534
|
+
if(circle.tagName!=='circle') return;
|
|
535
|
+
var nid=circle.dataset.nid;
|
|
536
|
+
if(!nid) return;
|
|
537
|
+
dragNode=graphNodeMap[nid];
|
|
538
|
+
if(!dragNode) return;
|
|
539
|
+
var rect=svg.getBoundingClientRect();
|
|
540
|
+
dragOffset.x=e.clientX-rect.left-dragNode.x;
|
|
541
|
+
dragOffset.y=e.clientY-rect.top-dragNode.y;
|
|
542
|
+
e.preventDefault();
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
svg.addEventListener('mousemove',function(e){
|
|
546
|
+
if(!dragNode) return;
|
|
547
|
+
var rect=svg.getBoundingClientRect();
|
|
548
|
+
dragNode.x=e.clientX-rect.left-dragOffset.x;
|
|
549
|
+
dragNode.y=e.clientY-rect.top-dragOffset.y;
|
|
550
|
+
redrawGraph();
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
document.addEventListener('mouseup',function(){dragNode=null});
|
|
554
|
+
|
|
555
|
+
svg.addEventListener('click',function(e){
|
|
556
|
+
var circle=e.target;
|
|
557
|
+
if(circle.tagName!=='circle') return;
|
|
558
|
+
var nid=circle.dataset.nid;
|
|
559
|
+
if(!nid) return;
|
|
560
|
+
var n=graphNodeMap[nid];
|
|
561
|
+
if(!n) return;
|
|
562
|
+
var rect=svg.getBoundingClientRect();
|
|
563
|
+
tooltip.style.display='block';
|
|
564
|
+
tooltip.style.left=(e.clientX-rect.left+15)+'px';
|
|
565
|
+
tooltip.style.top=(e.clientY-rect.top-10)+'px';
|
|
566
|
+
setHTML(tooltip,
|
|
567
|
+
'<div style="margin-bottom:4px"><span class="type-badge" style="background:'+(TYPE_COLORS[n.type]||'#8b949e')+'">'+esc(n.type)+'</span> <code class="mono">'+esc(n.id.slice(0,8))+'</code></div>'+
|
|
568
|
+
'<div style="font-size:0.85rem;margin-bottom:6px">'+esc(n.fullContent||n.label)+'</div>'+
|
|
569
|
+
'<div style="font-size:0.75rem;color:var(--muted)">Tier: '+(n.tier||'archival')+'</div>'
|
|
570
|
+
);
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
document.addEventListener('click',function(e){
|
|
574
|
+
if(e.target.tagName!=='circle'&&!tooltip.contains(e.target)) tooltip.style.display='none';
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
function redrawGraph(){
|
|
579
|
+
var svg=$('graph-svg');
|
|
580
|
+
var html='';
|
|
581
|
+
for(var i=0;i<graphEdges.length;i++){
|
|
582
|
+
var ea=graphNodeMap[graphEdges[i].from],eb=graphNodeMap[graphEdges[i].to];
|
|
583
|
+
if(!ea||!eb) continue;
|
|
584
|
+
var mx=(ea.x+eb.x)/2,my=(ea.y+eb.y)/2;
|
|
585
|
+
html+='<line x1="'+ea.x+'" y1="'+ea.y+'" x2="'+eb.x+'" y2="'+eb.y+'" stroke="#30363d" stroke-width="'+(1+graphEdges[i].strength*2)+'"/>';
|
|
586
|
+
if(graphEdges[i].type) html+='<text x="'+mx+'" y="'+(my-4)+'" fill="#8b949e" font-size="9" text-anchor="middle">'+esc(graphEdges[i].type)+'</text>';
|
|
587
|
+
}
|
|
588
|
+
for(var i=0;i<graphNodes.length;i++){
|
|
589
|
+
var color=TYPE_COLORS[graphNodes[i].type]||'#8b949e';
|
|
590
|
+
html+='<circle data-nid="'+esc(graphNodes[i].id)+'" cx="'+graphNodes[i].x+'" cy="'+graphNodes[i].y+'" r="8" fill="'+color+'" stroke="#0d1117" stroke-width="2"/>';
|
|
591
|
+
html+='<text x="'+graphNodes[i].x+'" y="'+(graphNodes[i].y+20)+'" fill="'+color+'" font-size="10" text-anchor="middle" font-family="-apple-system,sans-serif">'+esc(graphNodes[i].label.slice(0,24))+'</text>';
|
|
592
|
+
}
|
|
593
|
+
setHTML(svg,html);
|
|
594
|
+
}
|
|
595
|
+
|
|
421
596
|
// -- Init --
|
|
597
|
+
makeGraphInteractive();
|
|
422
598
|
loadAll();
|
|
423
599
|
setInterval(loadAll,30000);
|
|
424
600
|
})();
|
|
@@ -513,7 +689,9 @@ function handleGraph(db, res) {
|
|
|
513
689
|
const nodes = memories.map((m) => ({
|
|
514
690
|
id: m.id,
|
|
515
691
|
label: m.content.length > 40 ? m.content.slice(0, 40) + "..." : m.content,
|
|
692
|
+
fullContent: m.content,
|
|
516
693
|
type: m.type,
|
|
694
|
+
tier: m.tier,
|
|
517
695
|
}));
|
|
518
696
|
const memoryIds = new Set(memories.map((m) => m.id));
|
|
519
697
|
const edges = relations
|
|
@@ -553,6 +731,35 @@ function handleLog(db, res, query) {
|
|
|
553
731
|
sessionId: e.sessionId,
|
|
554
732
|
})));
|
|
555
733
|
}
|
|
734
|
+
function handleActionTier(db, res, query) {
|
|
735
|
+
const id = query.id;
|
|
736
|
+
const tier = query.tier;
|
|
737
|
+
if (!id || !tier) {
|
|
738
|
+
errorResponse(res, "Missing id or tier parameter", 400);
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
const fullId = db.resolveId(id);
|
|
742
|
+
if (!fullId) {
|
|
743
|
+
errorResponse(res, `Memory "${id}" not found`, 404);
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
746
|
+
db.updateTier(fullId, tier);
|
|
747
|
+
jsonResponse(res, { ok: true, id: fullId, tier });
|
|
748
|
+
}
|
|
749
|
+
function handleActionExpire(db, res, query) {
|
|
750
|
+
const id = query.id;
|
|
751
|
+
if (!id) {
|
|
752
|
+
errorResponse(res, "Missing id parameter", 400);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
const fullId = db.resolveId(id);
|
|
756
|
+
if (!fullId) {
|
|
757
|
+
errorResponse(res, `Memory "${id}" not found`, 404);
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
db.expireMemory(fullId);
|
|
761
|
+
jsonResponse(res, { ok: true, id: fullId, expired: true });
|
|
762
|
+
}
|
|
556
763
|
function handleSummaries(db, res, query) {
|
|
557
764
|
const limit = Math.min(50, Math.max(1, parseInt(query.limit || "10", 10) || 10));
|
|
558
765
|
const project = query.project || "global";
|
|
@@ -598,6 +805,12 @@ export function startDashboard(db, port) {
|
|
|
598
805
|
case "/api/summaries":
|
|
599
806
|
handleSummaries(db, res, query);
|
|
600
807
|
break;
|
|
808
|
+
case "/api/action/tier":
|
|
809
|
+
handleActionTier(db, res, query);
|
|
810
|
+
break;
|
|
811
|
+
case "/api/action/expire":
|
|
812
|
+
handleActionExpire(db, res, query);
|
|
813
|
+
break;
|
|
601
814
|
default:
|
|
602
815
|
errorResponse(res, "Not found", 404);
|
|
603
816
|
}
|
package/dist/dashboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,8EAA8E;AAC9E,0DAA0D;AAC1D,sEAAsE;AACtE,sEAAsE;AACtE,8EAA8E;AAE9E,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"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"}
|