Peter Zhou TV Display
Use this subskill for on-demand learning-page display. It is independent from the
transition-only DLNA notice owned by home-control/.
Default Home Hub Flow
Resolve the private runtime config with
scripts/runtime_config.py show --json.For the Dashboard, regenerate it from canonical data before display.
Call
show-home-hubwith exactly one validatedasset_kindand containedasset_ref:python3 scripts/chat_dashboard.py \ --data-dir <data-dir> \ --top-n 5 \ --minecraft-html <data-dir>/dashboard/minecraft/index.html python3 scripts/tv_display.py show-home-hub \ --config <config> \ --asset-kind dashboard \ --asset-ref dashboard/minecraft/index.html \ --hub-url http://<private-hub-ip>:<port> \ --jsonFor a cached wrong-question explanation, use only its script-owned
html_ref:python3 scripts/tv_display.py show-home-hub \ --config <config> \ --asset-kind explanation \ --asset-ref <explanation-html-ref> \ --hub-url http://<private-hub-ip>:<port> \ --jsonFor a deep KnowledgeModule, use only a
courseware.htmlwhose adjacent metadata hasstatus=rendered_and_validatedand a matchinghtml_ref:python3 scripts/tv_display.py show-home-hub \ --config <config> \ --asset-kind knowledge_courseware \ --asset-ref <validated-courseware-html-ref> \ --hub-url http://<private-hub-ip>:<port> \ --jsonOmit
--device-idwhen exactly one Home Display is online. If more than one is online, select only an identity returned by the Home Hubdevicescommand; never accept shell text.Report success only for
status=display_verifiedand a rendered Receipt. Do not expose bundle paths, Hub internals, device identity, session identity, or private endpoint details.
Use scripts/tv_display.py status --config <config> --json for a read-only session
check and scripts/tv_display.py stop --config <config> --json when the user asks to
stop television display. These commands reuse the archived Home Hub Session metadata and
never read Peter learning data.
build-home-hub-page is the deterministic adapter seam. It strips answer submission
controls, localizes selected Peter assets, uses bundle-relative URLs, removes server-only
MathJax dependencies, and emits a portable page directory without a legacy manifest. The
generic Home Hub CLI remains responsible for canonical Bundle compilation and delivery.
Home Hub Setup
An administrator installs Home Hub and the generic com.openkanban.homedisplay TV client,
then records the private Hub URL outside Git. home-hub is resolved from
PETER_ZHOU_HOME_HUB, PATH, or the standard macOS Home Hub installation. The Agent must
not install/upgrade the daemon or APK during a student display request.
Explicit Legacy Rollback
Use the old tv_display.py probe/show native or browser route only when the administrator
explicitly asks to roll back from Home Hub. Do not silently fall back after a Home Hub error.
The legacy administrator setup remains:
An administrator configures the target once:
python3 scripts/runtime_config.py configure-tv-display \
--host <private-tv-ip> \
--adb-port 5555 \
--adapter native \
--session-seconds 1800 \
--json
The administrator installs the old fixed APK from the repository root before switching
to native. The installer rebuilds the current package, verifies the exact installed
version, replaces only the outdated fixed package on affected TCL firmware, and grants
that package's full-screen display app-op:
clients/android-tv/install.sh --serial <private-tv-ip:5555> --json
The tested TCL firmware may require the administrator-only --tcl-vendor option.
The Agent must never infer or add that option, install an arbitrary APK, or accept a
package, activity, installer service, remote path, or ADB argument from conversation.
native_client_outdated or native_display_permission_missing means the administrator
must rerun the fixed installer. missing_adb means Android SDK Platform-Tools must be installed or
PETER_ZHOU_ADB must point to an executable. authorization_required means the
administrator must approve network debugging on the television. The skill does not
auto-install tools or bypass television authorization.
Safety
- Accept only
dashboard/minecraft/index.html, a generatedexplanation-pages/<subject>/explanation-*/index.html, or validatedknowledge-modules/<subject>/topic-*/courseware.htmlinside the configured data directory. - Never accept a raw URL, arbitrary path, browser package, activity, ADB argument, or shell text from the Agent or student.
- Home Hub mode records only its own Session routing metadata under
data/tv-display/. The Hub receives a portable read-only copy, never Peter's mistake bank, mastery data, profile, source path, Prompt, or Agent context. - Native mode publishes one deterministic
tv_content_bundle.v1ZIP to the fixed app-specific inbox. The APK verifies every file hash before display, serves content from its controlled local HTTPS-style origin, keeps at most eight disposable bundles, and blocks arbitrary external navigation. Browser mode retains the bounded tokenized HTTP session as a compatibility path. - Television projections are read-only. They remove answer inputs, submission JSON, and grading scripts. Native mode replaces external MathJax with the APK's pinned local TeX-to-SVG runtime. Answering remains on the MacBook or phone through the normal grading workflow.
- A new display replaces the previous temporary session. Native mode uses a fixed
read-only full-screen service so vendor TV-input activities cannot cover the lesson;
Back,
stop, and configured expiry remove it. Browser mode closes its temporary server. Display failure must never alter learning data. - Use DLNA only for the existing short network-state notice or an explicitly labelled static fallback. Never claim a DLNA image is interactive HTML.