Mondrian Komari + FRP module 1.1 — source and build recipe

Test target: Redmi K60 (mondrian), LineageOS 24 / Android 17, Magisk 30.7.
Not a general-purpose module for every rooted Android device.
This source archive contains no binary executables, tokens or saved Wi-Fi credentials.

Build on a computer with Python 3 and HTTPS internet access:
  python3 build_module.py
The builder downloads the two exact official release assets, checks pinned SHA256,
then writes mondrian-komari-frp-magisk-1.1.zip. Inspect all scripts before installation.
Official binaries remain under their respective upstream licenses:
  https://github.com/komari-monitor/komari-agent/tree/1.5.11 (MIT)
  https://github.com/VaalaCat/frp-panel/tree/v0.1.37 (GPL-3.0)
This archive does not redistribute those binaries. All local launcher source is included.

Install the built ZIP from Magisk Modules, provision only your own device-specific
configurations under /data/adb/bismih-mondrian (directory700/files600), then reboot.
Either or both services may be configured. Missing configuration skips that service.
The JSON/env examples are placeholders and must be replaced. Never use panel admin credentials.

Control as root:
  sh /data/adb/modules/bismih_mondrian/control.sh status
  sh /data/adb/modules/bismih_mondrian/control.sh stop
  sh /data/adb/modules/bismih_mondrian/control.sh start
Magisk Action toggles BOTH configured services. Stopped state persists across boot.
Magisk Disable stops the services. Uninstall stops and deletes the fixed private data
folder, including the configurations. Back up your own configuration privately first.
No root ADB/SSH listener or tunnel is configured by this module.

The private mount namespace provides Linux-style DNS/CA/filesystem compatibility;
it is not an isolation boundary. It does not change Android global resolver files.
SELinux and TLS verification remain enabled. GPU and remote shell are disabled.
Temperature/GPU values of zero can indicate unavailable telemetry, not actual zero.
Short lock-screen tests on USB charging do not establish battery-life or deep-idle guarantees.
