- popup.js: Real fleet data from prism.blackroad.io/api/fleet + /api/kpis - popup.html: Added fleet stats panel, node list, updated 12 service links - manifest.json: v2.0.0, added Prism API host permission - Removed fake random stats, replaced with live node data - Added keyboard shortcuts: Cmd+P (Prism), Cmd+S (Search), Cmd+F (Fleet) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> RoadChain-SHA2048: 853aabb0119527b3 RoadChain-Identity: alexa@sovereign RoadChain-Full: 853aabb0119527b3f58326ab9415c42d50574abfa52db1fc598a3d0ca5f28247933d4dd177a22974d3dac12c5d3900c285e1162f27b87d4ff7d1c6ffda8dfcaddb9430e0a82bbda82388058e73d5675662decbd0f122c6160a3992be71694922dd4722beb063d5e0644f32573667e406d88f57f9e577c2f1c92e3d73040b1788c8e0d2c4b7cd583194f5a3aaf0e9dbbcc265a9e2e8f0b1f3eda645539293e83d908b928c7f52df7b37fd898dccc2c709caaca35a407236fad46525252c19fbde68c768033abafa7456966474b19616612e36f8cf508a5d3a2cb42c068f6f7d9368c96a7f11508c2192e426d5ff901672f839aac5a273afe78053d2e6c059f407
84 lines
3.0 KiB
JavaScript
84 lines
3.0 KiB
JavaScript
// BlackRoad Command Center v2.0 — Live Fleet Data
|
|
|
|
const PRISM = 'https://prism.blackroad.io/api';
|
|
|
|
// Open URL in new tab
|
|
function openUrl(url) {
|
|
chrome.tabs.create({ url });
|
|
}
|
|
|
|
// Search
|
|
document.getElementById('search').addEventListener('input', function(e) {
|
|
const q = e.target.value.toLowerCase();
|
|
document.querySelectorAll('.service, .link-card, .org').forEach(el => {
|
|
const text = el.textContent.toLowerCase();
|
|
el.style.opacity = (!q || text.includes(q)) ? '1' : '0.3';
|
|
});
|
|
});
|
|
|
|
// Keyboard shortcuts
|
|
document.addEventListener('keydown', function(e) {
|
|
if (e.key === '/' || (e.key.length === 1 && !e.ctrlKey && !e.metaKey)) {
|
|
document.getElementById('search').focus();
|
|
}
|
|
if (e.metaKey || e.ctrlKey) {
|
|
switch(e.key) {
|
|
case 'g': e.preventDefault(); openUrl('https://github.com/BlackRoad-OS-Inc'); break;
|
|
case 'p': e.preventDefault(); openUrl('https://prism.blackroad.io'); break;
|
|
case 's': e.preventDefault(); openUrl('https://search.blackroad.io'); break;
|
|
case 'f': e.preventDefault(); openUrl('https://prism.blackroad.io/api/fleet'); break;
|
|
}
|
|
}
|
|
});
|
|
|
|
// Live fleet data from Prism
|
|
async function loadFleet() {
|
|
try {
|
|
const [fleetRes, kpiRes] = await Promise.all([
|
|
fetch(PRISM + '/fleet'),
|
|
fetch(PRISM + '/kpis'),
|
|
]);
|
|
const fleet = await fleetRes.json();
|
|
const kpis = await kpiRes.json();
|
|
const nodes = fleet.nodes || [];
|
|
const online = nodes.filter(n => n.status === 'online').length;
|
|
|
|
// Update stats
|
|
const statsEl = document.getElementById('fleet-stats');
|
|
if (statsEl) {
|
|
statsEl.innerHTML = `
|
|
<div class="stat"><span class="stat-value green">${online}/${nodes.length}</span><span class="stat-label">Nodes</span></div>
|
|
<div class="stat"><span class="stat-value">${kpis.models || 0}</span><span class="stat-label">Models</span></div>
|
|
<div class="stat"><span class="stat-value">${kpis.repos || 0}</span><span class="stat-label">Repos</span></div>
|
|
<div class="stat"><span class="stat-value">${kpis.containers || 0}</span><span class="stat-label">Docker</span></div>
|
|
`;
|
|
}
|
|
|
|
// Update node list
|
|
const nodesEl = document.getElementById('node-list');
|
|
if (nodesEl) {
|
|
nodesEl.innerHTML = nodes.map(n => `
|
|
<div class="node ${n.status}">
|
|
<span class="node-dot ${n.status === 'online' ? 'green' : 'red'}"></span>
|
|
<span class="node-name">${n.name}</span>
|
|
<span class="node-info">${n.cpu_temp || '?'}°C · ${n.ollama_models || 0} models · ${n.disk_pct || '?'}%</span>
|
|
</div>
|
|
`).join('');
|
|
}
|
|
|
|
// Update status indicator
|
|
const statusEl = document.getElementById('status-dot');
|
|
if (statusEl) {
|
|
statusEl.className = online >= 3 ? 'status-dot green' : online >= 1 ? 'status-dot yellow' : 'status-dot red';
|
|
}
|
|
} catch (e) {
|
|
console.warn('Fleet data unavailable:', e.message);
|
|
}
|
|
}
|
|
|
|
// Load immediately and refresh every 30s
|
|
loadFleet();
|
|
setInterval(loadFleet, 30000);
|
|
|
|
console.log('BlackRoad Command Center v2.0 loaded');
|