@openduo/duoduo 0.4.0 → 0.4.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/bootstrap/dashboard.html +32 -6
- package/dist/release/cli.js +461 -461
- package/dist/release/daemon.js +258 -258
- package/package.json +2 -2
package/bootstrap/dashboard.html
CHANGED
|
@@ -371,6 +371,8 @@ body{
|
|
|
371
371
|
var lastEventId = null, autoFollow = true, blinkTimers = new Map();
|
|
372
372
|
// Track last event timestamp per session from the actual event stream
|
|
373
373
|
var lastSeenBySession = new Map(); // session_key -> timestamp (ms)
|
|
374
|
+
// session_key -> display_name lookup (populated from system.status)
|
|
375
|
+
var sessionDisplayNames = new Map();
|
|
374
376
|
var streamEl = document.getElementById("stream");
|
|
375
377
|
var signalEl = document.getElementById("signal-bar");
|
|
376
378
|
var followEl = document.getElementById("follow-ind");
|
|
@@ -397,13 +399,32 @@ body{
|
|
|
397
399
|
function fmtTools(n){if(n==null)return"-- tools";if(n>=1e3)return(n/1e3).toFixed(1)+"k tools";return n+" tools"}
|
|
398
400
|
function timeAgo(s){if(!s)return"never";var ms=Date.now()-new Date(s).getTime();if(ms<60000)return Math.floor(ms/1000)+"s ago";if(ms<3600000)return Math.floor(ms/60000)+"m ago";if(ms<86400000)return Math.floor(ms/3600000)+"h ago";return Math.floor(ms/86400000)+"d ago"}
|
|
399
401
|
|
|
400
|
-
function shortActor(k) {
|
|
402
|
+
function shortActor(k, evt) {
|
|
401
403
|
if(!k)return"system";
|
|
402
404
|
if(k.startsWith("job:")){var n=k.slice(4),d=n.lastIndexOf(".");return d>0?n.slice(0,d):n}
|
|
403
|
-
if(k.startsWith("meta:subconscious:"))
|
|
405
|
+
if(k === "meta:subconscious" || k.startsWith("meta:subconscious:")) {
|
|
406
|
+
// Use source.name or payload.partition to identify which partition
|
|
407
|
+
var pName = (evt && evt.payload && evt.payload.partition)
|
|
408
|
+
|| (evt && evt.source && evt.source.name && evt.source.name.startsWith("subconscious:")
|
|
409
|
+
? evt.source.name.slice(13) : null);
|
|
410
|
+
return pName ? "sub:" + pName : "subconscious";
|
|
411
|
+
}
|
|
404
412
|
if(k.startsWith("meta:"))return k.slice(5);
|
|
413
|
+
// Use display_name from status API if available
|
|
414
|
+
var dn = sessionDisplayNames.get(k);
|
|
415
|
+
if(dn && dn !== k) {
|
|
416
|
+
var p0 = k.split(":")[0];
|
|
417
|
+
// Truncate display_name to keep label short
|
|
418
|
+
var label = dn.length > 16 ? dn.slice(0,15) + "\u2026" : dn;
|
|
419
|
+
return p0 + ":" + label;
|
|
420
|
+
}
|
|
421
|
+
// Fallback: parse session_key segments
|
|
405
422
|
var p=k.split(":");
|
|
406
|
-
if(p.length>=
|
|
423
|
+
if(p.length>=3) {
|
|
424
|
+
// Show kind + middle segments (readable identity), drop the trailing hash
|
|
425
|
+
return p[0]+":"+p.slice(1,-1).join(":").slice(0,12);
|
|
426
|
+
}
|
|
427
|
+
if(p.length===2)return p[0]+":"+p[1].slice(-8);
|
|
407
428
|
return k.slice(-12);
|
|
408
429
|
}
|
|
409
430
|
|
|
@@ -557,7 +578,7 @@ body{
|
|
|
557
578
|
row.dataset.id = evt.id;
|
|
558
579
|
|
|
559
580
|
var time = evt.ts ? new Date(evt.ts).toISOString().slice(11, 19) : "??:??:??";
|
|
560
|
-
var actor = shortActor(evt.session_key);
|
|
581
|
+
var actor = shortActor(evt.session_key, evt);
|
|
561
582
|
|
|
562
583
|
row.innerHTML =
|
|
563
584
|
'<div class="evt-meta">' +
|
|
@@ -659,7 +680,8 @@ body{
|
|
|
659
680
|
var h = '<span class="sig-label">cortex</span>';
|
|
660
681
|
cortex.forEach(function(s){
|
|
661
682
|
var color = s.last_error?"alert":s.status==="active"?"running":s.status==="error"?"alert":s.status==="ended"?"off":"standby";
|
|
662
|
-
var
|
|
683
|
+
var dn = s.display_name || s.session_key;
|
|
684
|
+
var tip = dn+(dn!==s.session_key?"\n"+s.session_key:"")+"\n"+s.status+" \u2022 "+(s.health||"ok")+"\nlast: "+timeAgo(s.last_event_at)+"\ncreated: "+timeAgo(s.created_at)+(s.cwd?"\ncwd: "+s.cwd:"")+(s.last_error?"\n\u26A0 error: "+s.last_error.message+" ("+timeAgo(s.last_error.at)+")":"");
|
|
663
685
|
h+='<div class="ind circle '+color+'" data-key="'+esc(s.session_key)+'" data-tip="'+esc(tip)+'"></div>';
|
|
664
686
|
});
|
|
665
687
|
groups.push(h);
|
|
@@ -759,7 +781,11 @@ body{
|
|
|
759
781
|
var us=r[1].status==="fulfilled"?r[1].value:null;
|
|
760
782
|
var jr=r[2].status==="fulfilled"?r[2].value:null;
|
|
761
783
|
if(us&&us.sessions){var cost=0,tokens=0,tools=0;Object.values(us.sessions).forEach(function(s){var m=s.summary;if(m){cost+=m.total_cost_usd||0;tokens+=(m.total_input_tokens||0)+(m.total_output_tokens||0)+(m.total_cache_read_tokens||0);tools+=m.total_tool_calls||0}});costEl.textContent=fmtCost(cost);tokensEl.textContent=fmtTokens(tokens);toolsEl.textContent=fmtTools(tools)}
|
|
762
|
-
if(st){
|
|
784
|
+
if(st){
|
|
785
|
+
// Update session display_name lookup
|
|
786
|
+
(st.sessions||[]).forEach(function(s){if(s.display_name)sessionDisplayNames.set(s.session_key,s.display_name)});
|
|
787
|
+
var gw=st.health.gateway,ms=st.health.meta_session;healthDot.className=gw==="ok"&&(ms==="ok"||ms==="starting")?"health-dot":gw==="down"||ms==="down"?"health-dot err":"health-dot warn";renderSignalBar(st,jr?jr.jobs:[])
|
|
788
|
+
}else{healthDot.className="health-dot err"}
|
|
763
789
|
});
|
|
764
790
|
}
|
|
765
791
|
function pollEvents(){
|