@ -7,7 +7,7 @@
@@ -7,7 +7,7 @@
connected : false ,
loopsLeft : 0 , loopsMax : 0 ,
dailyCount : 0 , dailyMax : 0 ,
resetCbs : [ ] , stopCbs : [ ] , saveCbs : [ ] , startCbs : [ ] , dotMode : null , transport : 'msg' , accLimit : 900000 , lastMetrics : null , lastMetrics : null , accLimit : 900000 , transport : 'msg'
resetCbs : [ ] , stopCbs : [ ] , saveCbs : [ ] , startCbs : [ ] , dotMode : null , transport : 'msg' , accLimit : 900000 , lastMetrics : null
} ;
var el = { } ;
function byId ( id ) { return document . getElementById ( id ) ; }
@ -64,7 +64,7 @@
@@ -64,7 +64,7 @@
} ) ;
el . settingsToggle . addEventListener ( 'click' , function ( ) { var s = el . settings ; if ( s ) { s . style . display = s . style . display === 'none' ? '' : 'none' } } ) ; el . transportToggle . addEventListener ( 'click' , function ( ) { state . transport = state . transport === 'msg' ? 'xhr' : 'msg' ; el . transportToggle . textContent = state . transport === 'msg' ? 'DSH MSG' : 'DSH XHR' ; try { chrome . storage . local . set ( { 'dshmem-transport' : state . transport } ) } catch ( e ) { } } ) ; el . reset . addEventListener ( 'click' , function ( ) { el . start . disabled = false ; state . resetCbs . forEach ( function ( cb ) { try { cb ( ) ; } catch ( e ) { } } ) ; } ) ;
el . stop . addEventListener ( 'click' , function ( ) { el . start . disabled = false ; state . stopCbs . forEach ( function ( cb ) { try { cb ( ) ; } catch ( e ) { } } ) ; } ) ; el . start . addEventListener ( 'click' , function ( ) { el . start . disabled = true ; state . startCbs . forEach ( function ( cb ) { try { cb ( ) ; } catch ( e ) { } } ) ; } ) ;
el . accLimit . addEventListener ( 'change' , function ( ) { var n = parseInt ( el . accLimit . value , 10 ) ; if ( ! n || n < 1000 ) n = 900000 ; state . accLimit = n ; try { chrome . storage . local . set ( { 'dshmem-acc-limit' : n } ) } catch ( e ) { } API . setMetrics ( state . lastMetrics ) ; } ) ; el . accLimit . addEventListener ( 'change' , function ( ) { var n = parseInt ( el . accLimit . value , 10 ) ; if ( ! n || n < 1000 ) n = 900000 ; state . accLimit = n ; try { chrome . storage . local . set ( { 'dshmem-acc-limit' : n } ) } catch ( e ) { } API . setMetrics ( state . lastMetrics ) ; } ) ; el . save . addEventListener ( 'click' , function ( ) { var v = el . token . value || '' ; if ( ! v ) { API . log ( 'token not changed (empty)' ) ; return ; } state . saveCbs . forEach ( function ( cb ) { try { cb ( v ) ; } catch ( e ) { } } ) ; } ) ;
el . accLimit . addEventListener ( 'change' , function ( ) { var n = parseInt ( el . accLimit . value , 10 ) ; if ( ! n || n < 1000 ) n = 900000 ; state . accLimit = n ; try { chrome . storage . local . set ( { 'dshmem-acc-limit' : n } ) } catch ( e ) { } API . setMetrics ( state . lastMetrics ) ; } ) ; el . save . addEventListener ( 'click' , function ( ) { var v = el . token . value || '' ; if ( ! v ) { API . log ( 'token not changed (empty)' ) ; return ; } state . saveCbs . forEach ( function ( cb ) { try { cb ( v ) ; } catch ( e ) { } } ) ; } ) ;
el . health . addEventListener ( 'click' , function ( ) {
try { globalThis . DSH _BRIDGE . health ( ) . then ( function ( r ) {
if ( r && r . ok ) { API . setConnected ( true ) ; API . log ( 'health ok, bridge up' ) ; }
@ -75,7 +75,7 @@
@@ -75,7 +75,7 @@
var API = {
setPhase : function ( p ) { state . phase = p ; if ( el . phase ) el . phase . textContent = p ; } ,
setConnected : function ( b ) { state . connected = ! ! b ; API . _applyDot ( ) ; } , setDot : function ( m ) { state . dotMode = ( m === 'ok' ) ? null : m ; API . _applyDot ( ) ; } , _applyDot : function ( ) { if ( ! el . dot ) return ; var md = state . dotMode || ( state . connected ? 'ok' : 'err' ) ; var cls = 'dshmem-dot' ; if ( md === 'ok' || md === 'err' || md === 'busy' || md === 'ok-busy' ) cls += ' ' + md ; el . dot . className = cls ; } ,
setStartEnabled : function ( b ) { if ( el . start ) el . start . disabled = ! b ; } , setStats : function ( ws , memN , skillN ) { if ( ! el . stats ) return ; el . stats . textContent = 'WS: ' + ( ws || '?' ) + ' mem: ' + ( memN || 0 ) + ' skills: ' + ( skillN || 0 ) ; } , setMetrics : function ( m ) { if ( ! el . metrics ) return ; if ( ! m ) { el . metrics . textContent = 'metrics: —' ; return ; } el . metrics . textContent = 'acc: ' + m . accum + ' · turn: ' + m . delta + ' · msg: ' + m . chars + 'ch (~' + m . est _tok + 't) ctx ' + ( m . ctx _tok || 0 ) + 't ' + ( m . ctx _pct || 0 ) + 'pct' ; } ,
setStartEnabled : function ( b ) { if ( el . start ) el . start . disabled = ! b ; } , setStats : function ( ws , memN , skillN ) { if ( ! el . stats ) return ; el . stats . textContent = 'WS: ' + ( ws || '?' ) + ' mem: ' + ( memN || 0 ) + ' skills: ' + ( skillN || 0 ) ; } , setMetrics : function ( m ) { if ( ! el . metrics ) return ; if ( ! m ) { el . metrics . textContent = 'metrics: —' ; return ; } state . lastMetrics = m ; var _ _pct = 0 ; if ( state . accLimit > 0 ) _ _pct = Math . round ( ( m . accum || 0 ) * 100 / state . accLimit ) ; var _ _cls = 'dshmem-acc-ok' ; if ( _ _pct > 100 ) _ _cls = 'dshmem-acc-crit' ; else if ( _ _pct >= 80 ) _ _cls = 'dshmem-acc-err' ; else if ( _ _pct >= 40 ) _ _cls = 'dshmem-acc-warn' ; el . metrics . className = 'dshmem-stats ' + _ _cls ; el . metrics . textContent = 'acc: ' + m . accum + ' · turn: ' + m . delta + ' · msg: ' + m . chars + 'ch (~' + m . est _tok + 't) ctx ' + ( m . ctx _tok || 0 ) + 't ' + ( m . ctx _pct || 0 ) + 'pct' ; } ,
log : function ( m ) {
if ( ! el . log ) return ;
var t = new Date ( ) . toLocaleTimeString ( ) ;