diff --git a/dashboard/public/jarvis.html b/dashboard/public/jarvis.html index 444d067..07f0261 100644 --- a/dashboard/public/jarvis.html +++ b/dashboard/public/jarvis.html @@ -157,7 +157,7 @@ html,body{height:100%;background:var(--bg);color:var(--text);font-family:var(--s .lower{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;align-items:flex-start} .lower .g-panel{min-width:0;box-sizing:border-box} .lower .lp-ticker{flex:1.2 1 240px;max-width:380px} -.lower .lp-delta{flex:1 1 200px;max-width:300px} +.right-delta .delta-list{max-height:200px} .lower .lp-macro{flex:2.5 1 360px} .lower .lp-ideas{flex:1.5 1 300px} .lower-wide{width:100%} @@ -287,7 +287,7 @@ body.low-perf .ticker-wrap::-webkit-scrollbar-thumb{background:rgba(100,240,200, .map-hint{font-size:8px;right:8px} .map-legend{left:8px;right:8px;bottom:8px;gap:4px} .leg-item{font-size:8px} - .lower .lp-ticker,.lower .lp-osint,.lower .lp-delta,.lower .lp-macro,.lower .lp-ideas{flex:1 1 100%;max-width:none} + .lower .lp-ticker,.lower .lp-osint,.lower .lp-macro,.lower .lp-ideas{flex:1 1 100%;max-width:none} .metrics-row{grid-template-columns:repeat(2,1fr)} .src-grid{grid-template-columns:repeat(2,1fr)} .glossary-panel{top:auto;right:0;left:0;bottom:0;width:100%;max-height:min(72vh,720px);border-left:none;border-right:none;border-bottom:none} @@ -1437,29 +1437,6 @@ function renderLower(){
Set LLM_PROVIDER + credentials in .env to enable AI-powered trade ideas
`; - // DELTA PANEL — what changed since last sweep - const delta = D.delta || {}; - const ds = delta.summary || {}; - const hasDelta = ds.totalChanges > 0; - const dirEmoji = {'risk-off':'▲','risk-on':'▼','mixed':'◆'}[ds.direction]||'◆'; - const dirClass = {'risk-off':'up','risk-on':'down','mixed':''}[ds.direction]||''; - const escalated = (delta.signals?.escalated || []).slice(0,6); - const deescalated = (delta.signals?.deescalated || []).slice(0,4); - const newSigs = (delta.signals?.new || []).slice(0,4); - const deltaRows = []; - for(const s of newSigs){ - deltaRows.push(`
NEW${s.reason||s.label||s.key}
`); - } - for(const s of escalated){ - const sev = s.severity==='critical'?'style="color:var(--warn);font-weight:600"':s.severity==='high'?'style="color:#ffab40"':''; - const val = s.pctChange!==undefined?`${s.pctChange>0?'+':''}${s.pctChange}%`:`${s.change>0?'+':''}${s.change}`; - deltaRows.push(`
${s.label}${s.from}→${s.to} (${val})
`); - } - for(const s of deescalated){ - const val = s.pctChange!==undefined?`${s.pctChange}%`:`${s.change}`; - deltaRows.push(`
${s.label||s.key}${s.from}→${s.to} (${val})
`); - } - const deltaHtml = hasDelta ? deltaRows.join('') : '
No changes since last sweep
'; const tickerPanel = `

${t('panels.newsTicker','Live News Ticker')}

${feed.length} ${t('badges.items','ITEMS')}
@@ -1495,17 +1472,7 @@ function renderLower(){ ${ideasHtml}
FOR INFORMATIONAL PURPOSES ONLY. This is not financial advice, a recommendation to buy or sell any security, or a solicitation of any kind. All signal-based observations are derived from publicly available OSINT data and should not be relied upon for investment decisions. Consult a licensed financial advisor before making any investment. Past performance does not guarantee future results.
`; - const deltaPanel = `
-

${t('panels.sweepDelta','Sweep Delta')}

${dirEmoji} ${ds.direction?t('delta.'+ds.direction,ds.direction.toUpperCase()):t('delta.baseline','BASELINE')}
- ${hasDelta?`
- ${t('delta.changes','Changes')}: ${ds.totalChanges} - ${t('delta.critical','Critical')}: ${ds.criticalChanges||0} - ${ds.signalBreakdown?`${t('delta.new','New')}: ${ds.signalBreakdown.new} ↑${ds.signalBreakdown.escalated} ↓${ds.signalBreakdown.deescalated}`:''} -
`:''} -
${deltaHtml}
-
`; - - document.getElementById('lowerGrid').innerHTML=`${tickerPanel}${osintPanel}${macroPanel}${ideasPanel}${deltaPanel}`; + document.getElementById('lowerGrid').innerHTML=`${tickerPanel}${osintPanel}${macroPanel}${ideasPanel}`; } // === RIGHT RAIL === @@ -1524,6 +1491,30 @@ function renderRight(){ {l:'WHO Alerts',v:D.who.length,p:40} ]; + // DELTA PANEL — what changed since last sweep + const delta = D.delta || {}; + const ds = delta.summary || {}; + const hasDelta = ds.totalChanges > 0; + const dirEmoji = {'risk-off':'▲','risk-on':'▼','mixed':'◆'}[ds.direction]||'◆'; + const dirClass = {'risk-off':'up','risk-on':'down','mixed':''}[ds.direction]||''; + const escalated = (delta.signals?.escalated || []).slice(0,6); + const deescalated = (delta.signals?.deescalated || []).slice(0,4); + const newSigs = (delta.signals?.new || []).slice(0,4); + const deltaRows = []; + for(const s of newSigs){ + deltaRows.push(`
NEW${s.reason||s.label||s.key}
`); + } + for(const s of escalated){ + const sev = s.severity==='critical'?'style="color:var(--warn);font-weight:600"':s.severity==='high'?'style="color:#ffab40"':''; + const val = s.pctChange!==undefined?`${s.pctChange>0?'+':''}${s.pctChange}%`:`${s.change>0?'+':''}${s.change}`; + deltaRows.push(`
${s.label}${s.from}→${s.to} (${val})
`); + } + for(const s of deescalated){ + const val = s.pctChange!==undefined?`${s.pctChange}%`:`${s.change}`; + deltaRows.push(`
${s.label||s.key}${s.from}→${s.to} (${val})
`); + } + const deltaHtml = hasDelta ? deltaRows.join('') : `
${t('delta.noChanges','No changes since last sweep')}
`; + document.getElementById('rightRail').innerHTML=`

${t('panels.crossSourceSignals','Cross-Source Signals')}

${t('badges.worldview','WORLDVIEW')}
@@ -1533,6 +1524,15 @@ function renderRight(){

${t('panels.signalCore','Signal Core')}

${t('badges.hotMetrics','HOT METRICS')}
${signalMetrics.map(s=>`
${s.l}
${s.v}
`).join('')} +
+
+

${t('panels.sweepDelta','Sweep Delta')}

${dirEmoji} ${ds.direction?t('delta.'+ds.direction,ds.direction.toUpperCase()):t('delta.baseline','BASELINE')}
+ ${hasDelta?`
+ ${t('delta.changes','Changes')}: ${ds.totalChanges} + ${t('delta.critical','Critical')}: ${ds.criticalChanges||0} + ${ds.signalBreakdown?`${t('delta.new','New')}: ${ds.signalBreakdown.new} ↑${ds.signalBreakdown.escalated} ↓${ds.signalBreakdown.deescalated}`:''} +
`:''} +
${deltaHtml}
`; }