Files
blackroad/bin/br-shape
Alexa Amundson 78fbe80f2a Initial monorepo — everything BlackRoad in one place
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
2026-03-14 17:08:41 -05:00

232 lines
7.3 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
br-shape
Terminal-safe BR Shape Renderer
Converts xterm-256 colors into semantic glyphs based on BR_COLOR_SPEC.md
"""
import sys
RESET = "\x1b[0m"
# Canonical shape mapping per BR_COLOR_SPEC.md zones
ZONE_SHAPES = {
# OS_LAYER (0-15): Solid block - kernel/system operations
range(0, 16): "",
# PERCEPTION (16-51): Medium shade - input/sensors
range(16, 52): "",
# EXECUTION (52-87): Arrow - action/mutation
range(52, 88): "",
# MEMORY (88-123): Circle - state/persistence
range(88, 124): "",
# AUTONOMY (124-159): Diamond - agents/decision
range(124, 160): "",
# TENSION (160-195): Triangle - warnings/drift
range(160, 196): "",
# PARADOX (196-231): X - errors/halt
range(196, 232): "",
# META (232-255): Empty circle - null/void/escape
range(232, 256): "",
}
# Zone metadata for descriptions
ZONES = {
"OS_LAYER": (0, 15, "Core system primitives"),
"PERCEPTION": (16, 51, "Input, sensors, listeners"),
"EXECUTION": (52, 87, "Actions, mutations, writes"),
"MEMORY": (88, 123, "State, cache, persistence"),
"AUTONOMY": (124, 159, "Agents, decision, delegation"),
"TENSION": (160, 195, "Warnings, drift, uncertainty"),
"PARADOX": (196, 231, "Errors, contradiction, halt"),
"META": (232, 255, "Null, silence, void, escape"),
}
# Special operator glyphs (override zone defaults for semantic clarity)
SPECIAL_GLYPHS = {
0: "", # NULL - absolute void
1: "", # ERROR - system error
2: "", # SUCCESS - kernel success
3: "", # WARN - system warning
4: "", # INFO - kernel info
196: "", # ERROR_FATAL - fatal error
202: "", # EXEC_FORCE - forced execution
226: "", # ERROR_CASCADE - cascade failure
232: "", # META_NULL - explicit null
255: "", # META_BRIGHT - full introspection
}
# Semantic tokens for key colors (from BR_COLOR_SPEC.md)
TOKENS = {
0: "NULL", 1: "ERROR", 2: "SUCCESS", 3: "WARN", 4: "INFO", 5: "DEBUG",
6: "SYSCALL", 7: "NEUTRAL",
16: "RAW_SENSOR", 28: "VALID_INPUT", 40: "STREAM_LIVE",
64: "EXEC_HIGH", 76: "EXEC_ATOMIC", 202: "EXEC_FORCE",
88: "MEM_VOLATILE", 100: "MEM_PERSIST", 118: "MEM_ARCHIVE",
130: "AGENT_THINK", 136: "AGENT_EXEC", 154: "AGENT_META",
166: "WARN_MEMORY", 178: "WARN_DRIFT", 190: "WARN_DEGRADE",
196: "ERROR_FATAL", 208: "ERROR_DATA", 226: "ERROR_CASCADE",
232: "META_NULL", 244: "META_ESCAPE", 255: "META_BRIGHT",
}
def get_zone(color):
"""Get zone name for a color index."""
for zone_name, (start, end, _) in ZONES.items():
if start <= color <= end:
return zone_name
return "UNKNOWN"
def get_shape(color):
"""Get semantic shape glyph for a color index."""
# Check special glyphs first
if color in SPECIAL_GLYPHS:
return SPECIAL_GLYPHS[color]
# Find zone-based shape
for color_range, shape in ZONE_SHAPES.items():
if color in color_range:
return shape
return "?" # Unknown color
def render_glyph(color, show_bg=True):
"""Render a single colored glyph with optional background."""
shape = get_shape(color)
if show_bg:
# Use color as background, contrasting foreground
bg = f"\x1b[48;5;{color}m"
# Simple contrast: if color < 128, use white (255), else use black (0)
fg_color = 255 if color < 128 else 0
fg = f"\x1b[38;5;{fg_color}m"
return f"{bg}{fg} {shape} {RESET}"
else:
# Color the glyph itself
fg = f"\x1b[38;5;{color}m"
return f"{fg}{shape}{RESET}"
def render_single(color):
"""Mode 1: Single color render with semantic description."""
zone = get_zone(color)
token = TOKENS.get(color, f"COLOR_{color}")
shape = get_shape(color)
# Visual render
print(f"\n{render_glyph(color, show_bg=True)}\n")
# Semantic description
print(f"Color: {color}")
print(f"Token: {token}")
print(f"Zone: {zone}")
print(f"Shape: {shape}")
# Zone description
for zone_name, (start, end, desc) in ZONES.items():
if zone_name == zone:
print(f"Range: {start}{end}")
print(f"Desc: {desc}")
break
print()
def render_zone(zone_name):
"""Mode 2: Zone render - grid of glyphs for entire zone."""
zone_name = zone_name.upper()
if zone_name not in ZONES:
print(f"Error: Unknown zone '{zone_name}'")
print(f"Available zones: {', '.join(ZONES.keys())}")
return
start, end, desc = ZONES[zone_name]
print(f"\n{zone_name} ({start}{end})")
print(f"{desc}\n")
# Render grid (6 per row for consistency)
for i in range(start, end + 1):
print(render_glyph(i, show_bg=True), end=" ")
if (i - start + 1) % 6 == 0:
print() # New line every 6 glyphs
# Ensure final newline if row incomplete
if (end - start + 1) % 6 != 0:
print()
print()
def render_sequence(colors, show_bg=True):
"""Mode 3: Sequence render - left-to-right semantic flow."""
# Render with visual separation
glyphs = [render_glyph(c, show_bg=show_bg) for c in colors]
print("\n" + "".join(glyphs) + "\n")
# Also show semantic interpretation
tokens = [TOKENS.get(c, f"C{c}") for c in colors]
zones = [get_zone(c) for c in colors]
print("Semantic flow:")
for color, token, zone in zip(colors, tokens, zones):
shape = get_shape(color)
print(f" {color:>3} ({zone:12}) {shape} {token}")
print()
def show_usage():
"""Display usage information."""
print("Usage:")
print(" br-shape <color> # Single color render")
print(" br-shape --zone <zone> # Zone grid render")
print(" br-shape <c1> <c2> <c3>... # Sequence render")
print()
print("Zones: OS_LAYER, PERCEPTION, EXECUTION, MEMORY,")
print(" AUTONOMY, TENSION, PARADOX, META")
print()
print("Examples:")
print(" br-shape 202 # Show EXEC_FORCE")
print(" br-shape --zone AUTONOMY # Show all agent colors")
print(" br-shape 16 28 64 100 2 # Show input pipeline")
def main():
if len(sys.argv) < 2:
show_usage()
sys.exit(1)
# Mode detection
if sys.argv[1] == "--zone":
if len(sys.argv) < 3:
print("Error: --zone requires zone name")
show_usage()
sys.exit(1)
# Mode 2: Zone render
render_zone(sys.argv[2])
elif len(sys.argv) == 2 and sys.argv[1].isdigit():
# Mode 1: Single color render
color = int(sys.argv[1])
if 0 <= color <= 255:
render_single(color)
else:
print(f"Error: Color must be 0-255, got {color}")
sys.exit(1)
else:
# Mode 3: Sequence render
try:
colors = [int(arg) for arg in sys.argv[1:]]
if all(0 <= c <= 255 for c in colors):
render_sequence(colors)
else:
print("Error: All colors must be 0-255")
sys.exit(1)
except ValueError:
print(f"Error: Invalid color value")
show_usage()
sys.exit(1)
if __name__ == "__main__":
main()