/home/shire3d/ARMOR/main.py:16: host = socket.gethostname() /home/shire3d/ARMOR/main.py:49: QApplication, /home/shire3d/ARMOR/main.py:50: QStackedWidget, /home/shire3d/ARMOR/main.py:57:from modules.dashboard import Dashboard /home/shire3d/ARMOR/main.py:58:from modules.laptop_dashboard import LaptopDashboard /home/shire3d/ARMOR/main.py:73:class ArmorStationStack(QStackedWidget): /home/shire3d/ARMOR/main.py:156: "ARMOR OS - Laptop Command Station" /home/shire3d/ARMOR/main.py:167: home_page = LaptopDashboard( /home/shire3d/ARMOR/main.py:171: home_page = Dashboard( /home/shire3d/ARMOR/main.py:221: app = QApplication(sys.argv) /home/shire3d/ARMOR/main.py:224: QMainWindow, QWidget, QStackedWidget { /home/shire3d/ARMOR/main.py:231: window.showFullScreen() /home/shire3d/ARMOR/modules/shire.py:235: dialog.show() /home/shire3d/ARMOR/modules/shire.py:560: self.done.emit(False, "Laptop brain request failed.\nError: " + str(exc)) /home/shire3d/ARMOR/modules/shire.py:709: self.input.show() /home/shire3d/ARMOR/modules/shire.py:742: self.send_button.show() /home/shire3d/ARMOR/modules/shire.py:1944: """ENG-LAPTOP-0006A / ENG-UTIL-0004A: Laptop-only command node check.""" /home/shire3d/ARMOR/modules/shire.py:1946: expected = self.get_appliance("laptop").get("host", "armoros") /home/shire3d/ARMOR/modules/shire.py:1947: return socket.gethostname().strip().lower() == str(expected).strip().lower() /home/shire3d/ARMOR/modules/shire.py:1950: return socket.gethostname().strip().lower() == "armoros" /home/shire3d/ARMOR/modules/shire.py:1960: "name": "ARMOR Laptop Brain", /home/shire3d/ARMOR/modules/shire.py:1961: "host": "armoros", /home/shire3d/ARMOR/modules/shire.py:2073: self.shire_append(f"Use ARMOR Laptop / {self.get_appliance('laptop').get('host', 'armoros')} over Tailscale.") /home/shire3d/ARMOR/modules/shire.py:2171: """ENG-UTIL-0003B: Laptop-only safe GUI power button flow.""" /home/shire3d/ARMOR/modules/shire.py:2175: self.shire_append(f"This button only works from ARMOR Laptop / {self.get_appliance('laptop').get('host', 'armoros')}.") /home/shire3d/ARMOR/modules/shire.py:2181: self.shire_append("Laptop will stay on.") /home/shire3d/ARMOR/modules/shire.py:2187: warn.setInformativeText("Node powers down first. Pi powers down second. Laptop stays on.") /home/shire3d/ARMOR/modules/shire.py:2228: laptop.get("name", "ARMOR Laptop Brain"), /home/shire3d/ARMOR/modules/shire.py:2229: laptop.get("host", "armoros"), /home/shire3d/ARMOR/modules/shire.py:2263: self.shire_append(f"✅ {laptop.get('name', 'ARMOR Laptop Brain')}: ONLINE") /home/shire3d/ARMOR/modules/shire.py:2265: self.shire_append(f"⚠ {laptop.get('name', 'ARMOR Laptop Brain')}: WARNING") /home/shire3d/ARMOR/modules/shire.py:2267: self.shire_append(f"❌ {laptop.get('name', 'ARMOR Laptop Brain')}: ERROR - {exc}") /home/shire3d/ARMOR/modules/shire.py:2272: current_host = socket.gethostname().strip().lower() /home/shire3d/ARMOR/modules/shire.py:2295: f"hostname; cd {pi_repo} && git rev-parse --short HEAD", /home/shire3d/ARMOR/modules/shire.py:2311: current_host = socket.gethostname().strip().lower() /home/shire3d/ARMOR/modules/shire.py:2312: laptop_host = str(laptop.get("host", "armoros")).strip().lower() /home/shire3d/ARMOR/modules/shire.py:2358: "echo NODE=$(hostname); " /home/shire3d/ARMOR/modules/shire.py:2487: """ENG-UTIL-0001A / ENG-UTIL-0004A: Laptop-side SHIRE Utility Node / Laser status.""" /home/shire3d/ARMOR/modules/shire.py:2550: "echo NODE_HOST=$(hostname); " /home/shire3d/ARMOR/modules/shire.py:2666: self.shire_append("Link: Pi → Laptop Brain over Tailscale.") /home/shire3d/ARMOR/modules/shire.py:2754: self.input.show() /home/shire3d/ARMOR/modules/shire.py:2755: self.send_button.show() /home/shire3d/ARMOR/modules/shire.py:3192: self.shire_append("🧠 Redirecting ASK to Laptop SHIRE Brain...") /home/shire3d/ARMOR/modules/shire.py:3659: f"LAPTOP: {self.get_appliance('laptop').get('host', 'armoros')} / {self.redact_network_detail(self.get_appliance('laptop').get('ip', '100.74.51.32'))}\n" /home/shire3d/ARMOR/modules/shire.py:3780: self.shire_append("🧠 Redirecting ASK to Laptop SHIRE Brain...") /home/shire3d/ARMOR/modules/shire.py:3866: QApplication.processEvents() /home/shire3d/ARMOR/modules/dashboard.py:144:class Dashboard(WardenBackground):