============================================================ SHiRE Brain Node 01 — Kiosk Shell Inspection ============================================================ UTC timestamp: 2026-08-05T12:43:45+00:00 Host: armoros User: shire3d main.py SHA-256: d2deff5f4bfe2e2e45bee530e8c3785ea827714f688327362464c453d96c1439 laptop_dashboard.py SHA-256: 4d9fffdda36b06bbf49a3f3887b7b446889ca36d86303d6a35a5249b48667310 === ARMOR display-profile logic === 7:def armor_display_profile(): 9: "ARMOR_DISPLAY_PROFILE", 32:ARMOR_DISPLAY_PROFILE = armor_display_profile() 34:if ARMOR_DISPLAY_PROFILE == "laptop": 50: QStackedWidget, 58:from modules.laptop_dashboard import LaptopDashboard 70:from modules.global_prompt_bar import GlobalPromptBar 73:class ArmorStationStack(QStackedWidget): 82: def keyPressEvent(self, event): 90: self.setCurrentIndex(0) 93: super().keyPressEvent(event) 95: def mousePressEvent(self, event): 99: super().mousePressEvent(event) 101: def mouseReleaseEvent(self, event): 125: super().mouseReleaseEvent(event) 133: self.setCurrentIndex(next_index) 141: self.setCurrentIndex(previous_index) 154: if ARMOR_DISPLAY_PROFILE == "laptop": 166: if ARMOR_DISPLAY_PROFILE == "laptop": 167: home_page = LaptopDashboard( 195: self.stack.addWidget(page) 203: if ARMOR_DISPLAY_PROFILE == "laptop": 204: self.prompt_bar = GlobalPromptBar( 210: layout.addWidget( 214: layout.addWidget( 224: QMainWindow, QWidget, QStackedWidget { 231: window.showFullScreen() === Complete ArmorOS constructor === ===== armor_display_profile — lines 7-29 ===== 7 def armor_display_profile(): 8 forced = os.environ.get( 9 "ARMOR_DISPLAY_PROFILE", 10 "", 11 ).strip().lower() 12 13 if forced in ["pi", "laptop"]: 14 return forced 15 16 host = socket.gethostname() 17 arch = ( 18 os.uname().machine 19 if hasattr(os, "uname") 20 else "" 21 ) 22 23 if host == "armor-core": 24 return "pi" 25 26 if arch == "x86_64": 27 return "laptop" 28 29 return "pi" ===== __init__ — lines 147-217 ===== 147 def __init__(self): 148 super().__init__() 149 150 self.setWindowTitle( 151 get_window_title() 152 ) 153 154 if ARMOR_DISPLAY_PROFILE == "laptop": 155 self.setWindowTitle( 156 "ARMOR OS - Laptop Command Station" 157 ) 158 159 self.setWindowFlag( 160 Qt.FramelessWindowHint, 161 True, 162 ) 163 164 self.stack = ArmorStationStack(self) 165 166 if ARMOR_DISPLAY_PROFILE == "laptop": 167 home_page = LaptopDashboard( 168 self.stack 169 ) 170 else: 171 home_page = Dashboard( 172 self.stack 173 ) 174 175 self.shire_page = ShirePage( 176 self.stack 177 ) 178 179 pages = [ 180 home_page, 181 self.shire_page, 182 ForgePage(self.stack), 183 ArchivePage(self.stack), 184 AtlasPage(self.stack), 185 MediaPage(self.stack), 186 SystemPage(self.stack), 187 AgentsPage(self.stack), 188 TasksPage(self.stack), 189 SettingsPage(self.stack), 190 SentinelPage(self.stack), 191 EducationPage(self.stack), 192 ] 193 194 for page in pages: 195 self.stack.addWidget(page) 196 197 layout = QVBoxLayout(self) 198 layout.setContentsMargins(0, 0, 0, 0) 199 layout.setSpacing(0) 200 201 self.prompt_bar = None 202 203 if ARMOR_DISPLAY_PROFILE == "laptop": 204 self.prompt_bar = GlobalPromptBar( 205 self.stack, 206 self.shire_page, 207 self, 208 ) 209 210 layout.addWidget( 211 self.prompt_bar 212 ) 213 214 layout.addWidget( 215 self.stack, 216 1, 217 ) ===== main — lines 220-233 ===== 220 def main(): 221 app = QApplication(sys.argv) 222 223 app.setStyleSheet(""" 224 QMainWindow, QWidget, QStackedWidget { 225 background-color: #000000; 226 color: #e8fff2; 227 } 228 """) 229 230 window = ArmorOS() 231 window.showFullScreen() 232 233 return app.exec_() === Current LaptopDashboard.build_ui === 2325 def build_ui(self): 2326 self.setObjectName("presenceConsole") 2327 2328 self.setStyleSheet(""" 2329 QWidget#presenceConsole { 2330 background: #020208; 2331 color: #f4efff; 2332 font-family: "DejaVu Sans Mono", monospace; 2333 } 2334 QLabel { 2335 background: transparent; 2336 } 2337 """) 2338 2339 root = QVBoxLayout(self) 2340 root.setContentsMargins(26, 20, 26, 16) 2341 root.setSpacing(12) 2342 2343 header = QHBoxLayout() 2344 header.setSpacing(18) 2345 2346 brand_column = QVBoxLayout() 2347 brand_column.setSpacing(0) 2348 2349 brand = QLabel("SHIRE BRAIN NODE 01") 2350 brand.setStyleSheet( 2351 f"color:{PURPLE}; " 2352 "font-size:27px; " 2353 "font-weight:900; " 2354 "letter-spacing:2px;" 2355 ) 2356 2357 core_state = QLabel("DISTRIBUTED WORKER • SHIRE MINI COMMAND CORE") 2358 core_state.setStyleSheet( 2359 f"color:{GREEN}; " 2360 "font-size:10px; " 2361 "font-weight:900;" 2362 ) 2363 2364 brand_column.addWidget(brand) 2365 brand_column.addWidget(core_state) 2366 2367 header.addLayout(brand_column) 2368 header.addStretch(1) 2369 header.addWidget(VoicePrivacyBanner()) 2370 2371 root.addLayout(header) 2372 2373 stage = QHBoxLayout() 2374 stage.setSpacing(14) 2375 2376 left_column = QVBoxLayout() 2377 left_column.setSpacing(12) 2378 left_column.addWidget(self._build_greeting_card(), 3) 2379 left_column.addWidget(self._build_status_card(), 2) 2380 2381 center_column = QVBoxLayout() 2382 center_column.setSpacing(2) 2383 2384 center_title = QLabel("BRAIN NODE 01 • ELECTRICAL CORE") 2385 center_title.setAlignment(Qt.AlignCenter) 2386 center_title.setStyleSheet( 2387 f"color:{PURPLE_LIGHT}; " 2388 "font-size:12px; " 2389 "font-weight:900; " 2390 "letter-spacing:2px;" 2391 ) 2392 2393 center_column.addWidget(center_title) 2394 center_column.addWidget(BrainNodeVisual(hero=True), 1) 2395 center_column.addWidget(VoiceOrb()) 2396 2397 right_column = QVBoxLayout() 2398 right_column.setSpacing(12) 2399 right_column.addWidget(self._build_thought_card(), 3) 2400 right_column.addWidget(self._build_next_card(), 2) 2401 2402 stage.addLayout(left_column, 5) 2403 stage.addLayout(center_column, 8) 2404 stage.addLayout(right_column, 5) 2405 2406 root.addLayout(stage, 1) 2407 2408 dock = QHBoxLayout() 2409 dock.setSpacing(10) 2410 2411 dock.addWidget( 2412 self._make_nav_button("●", "SHIRE", 1) 2413 ) 2414 2415 dock.addWidget( 2416 self._make_nav_button("⚒", "FORGE", 2) 2417 ) 2418 2419 dock.addWidget( 2420 self._make_nav_button("♜", "SENTINEL", 10) 2421 ) 2422 2423 stations_button = QPushButton("☰ STATIONS") 2424 stations_button.setCursor(Qt.PointingHandCursor) 2425 stations_button.setMinimumHeight(48) 2426 2427 stations_button.setStyleSheet(""" 2428 QPushButton { 2429 background: rgba(8, 5, 25, 225); 2430 color: #00f58a; 2431 border: 1px solid rgba(0, 245, 138, 185); 2432 border-radius: 13px; 2433 font-family: "DejaVu Sans Mono", monospace; 2434 font-size: 13px; 2435 font-weight: 900; 2436 padding: 8px 12px; 2437 } 2438 QPushButton:hover { 2439 background: rgba(0, 55, 39, 230); 2440 color: #ffffff; 2441 border: 1px solid #00f58a; 2442 } 2443 QPushButton:pressed { 2444 background: rgba(155, 77, 255, 75); 2445 } 2446 """) 2447 2448 stations_button.clicked.connect( 2449 self._toggle_stations 2450 ) 2451 2452 dock.addWidget(stations_button) 2453 2454 root.addLayout(dock) 2455 2456 self.station_drawer = self._build_station_drawer() 2457 root.addWidget(self.station_drawer) 2458 2459 hint = QLabel( 2460 "VOICE PREVIEW READY • " 2461 "Use MIC in the top prompt bar • " 2462 "Audio is processed locally and discarded" 2463 ) 2464 2465 hint.setAlignment(Qt.AlignCenter) 2466 hint.setStyleSheet( 2467 "color:#8f82a8; " 2468 "font-size:9px; " 2469 "font-weight:800; " 2470 "padding:1px;" 2471 ) 2472 2473 root.addWidget(hint) === Selectable-widget inventory === /home/shire3d/ARMOR/main.py: line 204: GlobalPromptBar( self.stack, self.shire_page, self, ) /home/shire3d/ARMOR/modules/laptop_dashboard.py: line 2117: LaptopRuneButton( icon, label, "", target_index, self.stack, compact=compact, ) line 2423: QPushButton("☰ STATIONS") === Current live process and window === 355042 351353 Wed Aug 5 20:41:18 2026 02:26 ./venv/bin/python main.py 0x3800013 "ARMOR OS - Laptop Command Station": ("main.py" "main.py") 1230x1145+0+0 +0+0 === Brain worker remains healthy === MainPID=7463 ActiveState=active SubState=running { "ok": true, "schema": "shire.worker.heartbeat.v1", "worker_manager_version": "0.1.0-capability-registry", "node_id": "brain-node-01", "host": "armoros", "tailnet_ip": "100.74.51.32", "role": "distributed_compute_worker", "state": "online", "sequence": 9105, "boot_id": "b4bcdfd2-167c-463c-8a7d-bf04b41c5095", "started_at": "2026-08-05T02:41:33.934691+00:00", "timestamp": "2026-08-05T12:43:45.919421+00:00", "uptime_seconds": 36131.985, "capability_summary": { "registered": 8, "available": 8, "unavailable": 0 }, "ownership": { "owns_projects": false, "owns_approvals": false, "owns_memory": false, "owns_shirevault": false, "makes_safety_decisions": false, "accepts_jobs_from_command_core": true, "returns_results_for_command_core_validation": true } } RESULT: ALL REMAINING SELECTABLE LAPTOP CONTROLS CAPTURED