bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
310 lines
11 KiB
Bash
Executable File
310 lines
11 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================================
|
|
# BLACKROAD OS, INC. - PROPRIETARY AND CONFIDENTIAL
|
|
# Copyright (c) 2025-2026 BlackRoad OS, Inc. All Rights Reserved.
|
|
#
|
|
# This code is the intellectual property of BlackRoad OS, Inc.
|
|
# AI-assisted development does not transfer ownership to AI providers.
|
|
# Unauthorized use, copying, or distribution is prohibited.
|
|
# NOT licensed for AI training or data extraction.
|
|
# ============================================================================
|
|
# br-prism — live ops console for BlackRoad OS fleet
|
|
set -euo pipefail
|
|
|
|
ACTION="${1:-dashboard}"
|
|
|
|
# BlackRoad Brand Colors
|
|
PINK='\033[38;5;205m'
|
|
AMBER='\033[38;5;214m'
|
|
BLUE='\033[38;5;69m'
|
|
VIOLET='\033[38;5;135m'
|
|
GREEN='\033[38;5;82m'
|
|
RED='\033[38;5;196m'
|
|
YELLOW='\033[38;5;226m'
|
|
WHITE='\033[38;5;255m'
|
|
DIM='\033[38;5;240m'
|
|
BOLD='\033[1m'
|
|
RESET='\033[0m'
|
|
|
|
# Fleet nodes (from config, with display-name mapping)
|
|
source "$HOME/.blackroad/config/nodes.sh" 2>/dev/null || true
|
|
declare -A NODES=(
|
|
[Alice]="${NODE_IP[alice]:-192.168.4.49}"
|
|
[Cecilia]="${NODE_IP[cecilia]:-192.168.4.96}"
|
|
[Octavia]="${NODE_IP[octavia]:-192.168.4.101}"
|
|
[Aria]="${NODE_IP[aria]:-192.168.4.98}"
|
|
[Lucidia]="${NODE_IP[lucidia]:-192.168.4.38}"
|
|
)
|
|
declare -A NODE_USERS_PRISM=(
|
|
[Alice]="${NODE_USER[alice]:-pi}"
|
|
[Cecilia]="${NODE_USER[cecilia]:-blackroad}"
|
|
[Octavia]="${NODE_USER[octavia]:-pi}"
|
|
[Aria]="${NODE_USER[aria]:-blackroad}"
|
|
[Lucidia]="${NODE_USER[lucidia]:-octavia}"
|
|
)
|
|
|
|
bar() {
|
|
local pct=$1 width=20 filled color
|
|
filled=$((pct * width / 100))
|
|
if [ "$pct" -ge 90 ]; then color="$RED"
|
|
elif [ "$pct" -ge 70 ]; then color="$YELLOW"
|
|
else color="$GREEN"; fi
|
|
local out=""
|
|
out+="$color"
|
|
for ((i=0; i<filled; i++)); do out+="█"; done
|
|
out+="$DIM"
|
|
for ((i=filled; i<width; i++)); do out+="░"; done
|
|
out+="$RESET"
|
|
printf "%b %3d%%" "$out" "$pct"
|
|
}
|
|
|
|
header() {
|
|
printf "\n${BOLD}${PINK}╔══════════════════════════════════════════════════════════════╗${RESET}\n"
|
|
printf "${BOLD}${PINK}║${RESET} ${BOLD}${WHITE}%-58s${RESET} ${BOLD}${PINK}║${RESET}\n" "$1"
|
|
printf "${BOLD}${PINK}╚══════════════════════════════════════════════════════════════╝${RESET}\n\n"
|
|
}
|
|
|
|
divider() {
|
|
printf "${DIM}──────────────────────────────────────────────────────────────${RESET}\n"
|
|
}
|
|
|
|
probe_node() {
|
|
local name=$1 ip=$2 user=$3
|
|
local result
|
|
result=$(ssh -o ConnectTimeout=2 -o BatchMode=yes -o StrictHostKeyChecking=no "${user}@${ip}" \
|
|
'echo "UP";
|
|
cat /proc/loadavg | cut -d" " -f1-3;
|
|
free -m | awk "/Mem:/{printf \"%d %d\n\", \$3, \$2}";
|
|
df / | awk "NR==2{print \$5}" | tr -d "%";
|
|
cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo 0;
|
|
uptime -p 2>/dev/null || uptime | sed "s/.*up/up/"' 2>/dev/null) || echo "DOWN"
|
|
echo "$result"
|
|
}
|
|
|
|
cmd_dashboard() {
|
|
header "PRISM CONSOLE — BlackRoad OS Fleet"
|
|
printf " ${DIM}%s${RESET}\n\n" "$(date '+%Y-%m-%d %H:%M:%S')"
|
|
|
|
# Local Mac metrics
|
|
printf " ${BOLD}${AMBER}LOCAL (Mac)${RESET}\n"
|
|
divider
|
|
local cpu_pct mem_pct disk_pct
|
|
cpu_pct=$(ps -A -o %cpu | awk '{s+=$1} END {printf "%.0f", s}' | awk -v n="$(sysctl -n hw.ncpu)" '{printf "%.0f", $1/n}')
|
|
mem_pct=$(vm_stat 2>/dev/null | awk '/Pages active/{gsub(/\./,""); a=$3} /Pages wired/{gsub(/\./,""); w=$4} END{total=16384; if(a+0>0) printf "%.0f", (a+w)*4096/1024/1024/1024/16*100; else print 50}')
|
|
disk_pct=$(df / | awk 'NR==2{print $5}' | tr -d '%')
|
|
printf " %b %s\n" "${WHITE}CPU${RESET}" "$(bar "$cpu_pct")"
|
|
printf " %b %s\n" "${WHITE}Memory${RESET}" "$(bar "$mem_pct")"
|
|
printf " %b %s\n\n" "${WHITE}Disk${RESET}" "$(bar "$disk_pct")"
|
|
|
|
# Fleet probe
|
|
printf " ${BOLD}${BLUE}FLEET NODES${RESET}\n"
|
|
divider
|
|
printf " ${DIM}%-12s %-8s %6s %6s %6s %6s %s${RESET}\n" "NODE" "STATUS" "CPU" "MEM" "DISK" "TEMP" "UPTIME"
|
|
divider
|
|
|
|
for name in Alice Cecilia Octavia Aria Lucidia; do
|
|
local ip="${NODES[$name]}"
|
|
local user="${NODE_USERS_PRISM[$name]}"
|
|
local data status_color load mem_used mem_total mem_pct disk_pct temp_raw temp uptime_str
|
|
|
|
data=$(probe_node "$name" "$ip" "$user")
|
|
|
|
if echo "$data" | head -1 | grep -q "UP"; then
|
|
status_color="${GREEN}"
|
|
load=$(echo "$data" | sed -n '2p' | cut -d' ' -f1)
|
|
read -r mem_used mem_total <<< "$(echo "$data" | sed -n '3p')"
|
|
if [ -n "$mem_total" ] && [ "$mem_total" -gt 0 ]; then
|
|
mem_pct=$((mem_used * 100 / mem_total))
|
|
else
|
|
mem_pct=0
|
|
fi
|
|
disk_pct=$(echo "$data" | sed -n '4p')
|
|
temp_raw=$(echo "$data" | sed -n '5p')
|
|
temp=$((temp_raw / 1000))
|
|
uptime_str=$(echo "$data" | sed -n '6p' | sed 's/up //')
|
|
printf " ${WHITE}%-12s${RESET} ${status_color}%-8s${RESET} %5s%% %5d%% %5d%% %4d°C %s\n" \
|
|
"$name" "ONLINE" "$load" "$mem_pct" "$disk_pct" "$temp" "$uptime_str"
|
|
else
|
|
printf " ${WHITE}%-12s${RESET} ${RED}%-8s${RESET} %5s %5s %5s %5s %s\n" \
|
|
"$name" "OFFLINE" "—" "—" "—" "—" "unreachable"
|
|
fi
|
|
done
|
|
|
|
printf "\n"
|
|
|
|
# GitHub Issues summary
|
|
printf " ${BOLD}${VIOLET}ENGINEERING TASKS${RESET}\n"
|
|
divider
|
|
local issues
|
|
issues=$(gh issue list --repo blackboxprogramming/BlackRoad-Operating-System \
|
|
--json title,labels --jq '.[] |
|
|
(.labels | map(.name) | join(",")) as $l |
|
|
if ($l | test("urgent")) then "🔴 \(.title)"
|
|
elif ($l | test("high")) then "🟠 \(.title)"
|
|
elif ($l | test("medium")) then "🟡 \(.title)"
|
|
else "🟢 \(.title)" end' 2>/dev/null | head -10) || true
|
|
|
|
if [ -n "$issues" ]; then
|
|
echo "$issues" | while read -r line; do
|
|
printf " %s\n" "$line"
|
|
done
|
|
else
|
|
printf " ${DIM}No issues found${RESET}\n"
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
# KPI snapshot
|
|
printf " ${BOLD}${PINK}KPI SNAPSHOT${RESET}\n"
|
|
divider
|
|
local kpi_dir="$HOME/blackroad-os-kpis/data/snapshots"
|
|
local github_kpi loc_kpi fleet_kpi
|
|
github_kpi=$(ls -t "$kpi_dir"/*github.json 2>/dev/null | head -1)
|
|
loc_kpi=$(ls -t "$kpi_dir"/*loc.json 2>/dev/null | head -1)
|
|
fleet_kpi=$(ls -t "$kpi_dir"/*fleet.json 2>/dev/null | head -1)
|
|
|
|
if [ -n "$github_kpi" ]; then
|
|
local commits repos
|
|
commits=$(python3 -c "import json,os; d=json.load(open(os.path.expanduser('$github_kpi'))); print(d.get('commits',{}).get('today','?'))" 2>/dev/null || echo "?")
|
|
repos=$(python3 -c "import json,os; d=json.load(open(os.path.expanduser('$github_kpi'))); print(d.get('repos',{}).get('total','?'))" 2>/dev/null || echo "?")
|
|
printf " %b %s\n" "${WHITE}Commits${RESET}" "$commits"
|
|
printf " %b %s\n" "${WHITE}Repos${RESET}" "$repos"
|
|
fi
|
|
if [ -n "$loc_kpi" ]; then
|
|
local loc
|
|
loc=$(python3 -c "import json,os; d=json.load(open(os.path.expanduser('$loc_kpi'))); print(d.get('total_lines', d.get('total', '?')))" 2>/dev/null || echo "?")
|
|
printf " %b %s\n" "${WHITE}LOC${RESET}" "$loc"
|
|
fi
|
|
if [ -n "$fleet_kpi" ]; then
|
|
local online
|
|
online=$(python3 -c "import json,os; d=json.load(open(os.path.expanduser('$fleet_kpi'))); nodes=d.get('nodes',[]); up=sum(1 for n in nodes if n.get('status')=='online'); print(f'{up}/{len(nodes)}')" 2>/dev/null || echo "?")
|
|
printf " %b %s online\n" "${WHITE}Fleet${RESET}" "$online"
|
|
fi
|
|
|
|
printf "\n"
|
|
|
|
# Cloudflare summary
|
|
printf " ${BOLD}${AMBER}CLOUDFLARE${RESET}\n"
|
|
divider
|
|
printf " ${WHITE}Pages${RESET} 95+\n"
|
|
printf " ${WHITE}KV${RESET} 40 namespaces\n"
|
|
printf " ${WHITE}D1${RESET} 8 databases\n"
|
|
printf " ${WHITE}R2${RESET} 10 buckets\n"
|
|
printf " ${WHITE}Tunnels${RESET} 18\n"
|
|
printf " ${WHITE}Domains${RESET} 48+\n"
|
|
|
|
printf "\n${DIM} Prism Console v2.0 — prism.blackroad.io${RESET}\n\n"
|
|
}
|
|
|
|
cmd_fleet() {
|
|
header "FLEET STATUS"
|
|
for name in Alice Cecilia Octavia Aria Lucidia; do
|
|
local ip="${NODES[$name]}"
|
|
local user="${NODE_USERS_PRISM[$name]}"
|
|
printf "\n ${BOLD}${BLUE}%s${RESET} (${DIM}%s${RESET})\n" "$name" "$ip"
|
|
divider
|
|
|
|
local data
|
|
data=$(probe_node "$name" "$ip" "$user")
|
|
|
|
if echo "$data" | head -1 | grep -q "UP"; then
|
|
local load mem_used mem_total disk_pct temp_raw temp
|
|
load=$(echo "$data" | sed -n '2p')
|
|
read -r mem_used mem_total <<< "$(echo "$data" | sed -n '3p')"
|
|
disk_pct=$(echo "$data" | sed -n '4p')
|
|
temp_raw=$(echo "$data" | sed -n '5p')
|
|
temp=$((temp_raw / 1000))
|
|
printf " ${GREEN}ONLINE${RESET}\n"
|
|
printf " Load: %s\n" "$load"
|
|
printf " Memory: %sMB / %sMB\n" "$mem_used" "$mem_total"
|
|
printf " Disk: %s\n" "$(bar "$disk_pct")"
|
|
printf " Temp: %d°C\n" "$temp"
|
|
|
|
# Get services
|
|
ssh -o ConnectTimeout=3 "${user}@${ip}" \
|
|
'systemctl list-units --state=running --no-pager --no-legend | grep -E "cloudflared|ollama|docker|gitea|pihole|nginx|postgres|nats" | awk "{print \" ✓ \" \$1}"' 2>/dev/null || true
|
|
else
|
|
printf " ${RED}OFFLINE${RESET} — not reachable\n"
|
|
fi
|
|
done
|
|
printf "\n"
|
|
}
|
|
|
|
cmd_tasks() {
|
|
header "ENGINEERING TASKS"
|
|
gh issue list --repo blackboxprogramming/BlackRoad-Operating-System \
|
|
--json number,title,labels,state \
|
|
--jq '.[] | "#\(.number) [\(.labels | map(.name) | join(", "))] \(.title)"' 2>/dev/null || echo "Failed to fetch issues"
|
|
printf "\n"
|
|
}
|
|
|
|
cmd_agents() {
|
|
header "AGENT REGISTRY"
|
|
local agents_file="$HOME/blackroad-operator/agents/registry.json"
|
|
if [ -f "$agents_file" ]; then
|
|
python3 -c "
|
|
import json
|
|
with open('$agents_file') as f:
|
|
agents = json.load(f)
|
|
if isinstance(agents, list):
|
|
for a in agents:
|
|
name = a.get('name', '?')
|
|
role = a.get('role', '?')
|
|
status = a.get('status', '?')
|
|
print(f' {name:<15} {role:<20} {status}')
|
|
elif isinstance(agents, dict):
|
|
for k, v in agents.items():
|
|
if isinstance(v, dict):
|
|
print(f' {k:<15} {v.get(\"role\",\"?\"):<20} {v.get(\"status\",\"?\")}')
|
|
else:
|
|
print(f' {k}: {v}')
|
|
" 2>/dev/null || printf " ${DIM}No agent registry found${RESET}\n"
|
|
else
|
|
printf " ${DIM}Registry not found at %s${RESET}\n" "$agents_file"
|
|
fi
|
|
printf "\n"
|
|
}
|
|
|
|
cmd_logs() {
|
|
header "RECENT LOGS"
|
|
# Show real logs from fleet autonomy + cron
|
|
for logfile in \
|
|
"$HOME/blackroad-os-kpis/data/cron.log" \
|
|
"$HOME/health-cron.log" \
|
|
"$HOME/git-sync.log"; do
|
|
if [ -f "$logfile" ]; then
|
|
printf " ${AMBER}%s${RESET}\n" "$(basename "$logfile")"
|
|
tail -5 "$logfile" 2>/dev/null | while read -r line; do
|
|
printf " ${DIM}%s${RESET}\n" "$line"
|
|
done
|
|
printf "\n"
|
|
fi
|
|
done
|
|
}
|
|
|
|
cmd_help() {
|
|
header "PRISM CONSOLE"
|
|
printf " ${WHITE}Usage:${RESET} blackroad-prism <command>\n\n"
|
|
printf " ${AMBER}dashboard${RESET} Full system overview (default)\n"
|
|
printf " ${AMBER}fleet${RESET} Detailed fleet node status\n"
|
|
printf " ${AMBER}tasks${RESET} Engineering tasks from GitHub\n"
|
|
printf " ${AMBER}agents${RESET} Agent registry\n"
|
|
printf " ${AMBER}logs${RESET} Recent automation logs\n"
|
|
printf " ${AMBER}help${RESET} This help message\n"
|
|
printf "\n"
|
|
}
|
|
|
|
case "$ACTION" in
|
|
dashboard|d) cmd_dashboard ;;
|
|
fleet|f) cmd_fleet ;;
|
|
tasks|t) cmd_tasks ;;
|
|
agents|a) cmd_agents ;;
|
|
logs|l) cmd_logs ;;
|
|
help|h|--help) cmd_help ;;
|
|
*)
|
|
printf "${RED}Unknown command: %s${RESET}\n" "$ACTION"
|
|
cmd_help
|
|
exit 1
|
|
;;
|
|
esac
|