- name
- peter-zhou-tv-display
- description
- Display a validated Peter Zhou Dashboard, wrong-question ExplanationPage, or KnowledgeModule through Home Hub, with the old Peter APK/browser path retained only for explicit rollback. Use for 投到电视, 电视打开首页, 电视显示讲解, 电视显示课程, 投屏状态, or 停止投屏.
# 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
1. Resolve the private runtime config with `scripts/runtime_config.py show --json`.
2. For the Dashboard, regenerate it from canonical data before display.
3. Call `show-home-hub` with exactly one validated `asset_kind` and contained `asset_ref`:
```bash
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> \
--json
```
4. For a cached wrong-question explanation, use only its script-owned `html_ref`:
```bash
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> \
--json
```
5. For a deep KnowledgeModule, use only a `courseware.html` whose adjacent metadata
has `status=rendered_and_validated` and a matching `html_ref`:
```bash
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> \
--json
```
6. Omit `--device-id` when exactly one Home Display is online. If more than one is online,
select only an identity returned by the Home Hub `devices` command; never accept shell text.
7. Report success only for `status=display_verified` and 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:
```bash
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:
```bash
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 generated
`explanation-pages/<subject>/explanation-*/index.html`, or validated
`knowledge-modules/<subject>/topic-*/courseware.html` inside 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.v1` ZIP 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.
GitHub에서 보기