A FastAPI server with two pages and one WebSocket. /mirror captures a window, screen or tab through the OS-native getDisplayMedia picker; /watch shows every live mirror as a wall and takes one fullscreen on click. Any number of sharers and watchers, at the same time. Media never touches the server: each watcher gets its own RTCPeerConnection to the sharer, and the Python process only relays JSON. The roster lives in registry.py, which is transport-free by design -- every operation returns the envelopes to deliver, so admission, fan-out and teardown policy are all unit-testable without a socket. Registry rules worth stating: a signal frame is relayed only along an existing subscription in either direction; viewer-to-peer traffic is refused; and teardown is broadcast to every viewer rather than only the subscribers, because a tile is drawn on stream_added and a viewer that has not yet subscribed still has a stale tile to clear. Frontend is hand-written ES modules with no build step and no external asset. Chromium scales a monitor capture to the capturing window and requires a secure context, so /mirror detects an insecure origin and prints the three ways out rather than failing on a button click. LLM-Generated: true
47 lines
611 B
Plaintext
47 lines
611 B
Plaintext
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
.eggs/
|
|
build/
|
|
dist/
|
|
.venv/
|
|
venv/
|
|
.python-version
|
|
|
|
# Tooling caches
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
.mypy_cache/
|
|
.coverage
|
|
coverage.xml
|
|
htmlcov/
|
|
pyright-output.json
|
|
|
|
# Editors / OS
|
|
.vscode/
|
|
.idea/
|
|
.DS_Store
|
|
*.swp
|
|
|
|
# Local environment — never commit real config values
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# Secrets / TLS material generated for local HTTPS
|
|
*.key
|
|
*.pem
|
|
*.p12
|
|
certs/
|
|
|
|
# Playwright
|
|
test-results/
|
|
playwright-report/
|
|
.artifacts/
|
|
|
|
# Phase pipeline runtime state (the roadmap itself stays tracked)
|
|
.agents/phase-sessions/
|
|
.agents/pipeline.log
|
|
.agents/remediation_plan.md
|