LICENSE
README.md
pyproject.toml
src/homeguard/__init__.py
src/homeguard/_vendored.py
src/homeguard/db.py
src/homeguard/security.py
src/penguwatch/__init__.py
src/penguwatch/activity.py
src/penguwatch/cli.py
src/penguwatch/clock.py
src/penguwatch/components.py
src/penguwatch/config.example.yaml
src/penguwatch/config.py
src/penguwatch/doctor.py
src/penguwatch/envfile.py
src/penguwatch/events.py
src/penguwatch/grafana.py
src/penguwatch/insights.py
src/penguwatch/interest.py
src/penguwatch/library.py
src/penguwatch/main.py
src/penguwatch/models.py
src/penguwatch/notify.py
src/penguwatch/notify_component.py
src/penguwatch/observability.py
src/penguwatch/paths.py
src/penguwatch/pwa.py
src/penguwatch/ratings.py
src/penguwatch/security.py
src/penguwatch/service.py
src/penguwatch/servicematch.py
src/penguwatch/telemetry.py
src/penguwatch/telemetry_component.py
src/penguwatch/textsearch.py
src/penguwatch/ui.py
src/penguwatch/webhooks.py
src/penguwatch/webhooks_component.py
src/penguwatch.egg-info/PKG-INFO
src/penguwatch.egg-info/SOURCES.txt
src/penguwatch.egg-info/dependency_links.txt
src/penguwatch.egg-info/entry_points.txt
src/penguwatch.egg-info/requires.txt
src/penguwatch.egg-info/top_level.txt
src/penguwatch/api/__init__.py
src/penguwatch/api/catalog.py
src/penguwatch/api/component.py
src/penguwatch/api/decide.py
src/penguwatch/api/deps.py
src/penguwatch/api/discover.py
src/penguwatch/api/drivers.py
src/penguwatch/api/exports.py
src/penguwatch/api/ical.py
src/penguwatch/api/insights.py
src/penguwatch/api/notifications.py
src/penguwatch/api/planner.py
src/penguwatch/api/ratings.py
src/penguwatch/api/router.py
src/penguwatch/api/schedule.py
src/penguwatch/api/schemas.py
src/penguwatch/api/services.py
src/penguwatch/api/shows.py
src/penguwatch/api/stable.py
src/penguwatch/api/sync_review.py
src/penguwatch/api/system.py
src/penguwatch/api/titles.py
src/penguwatch/api/upnext.py
src/penguwatch/api/webhooks.py
src/penguwatch/db/__init__.py
src/penguwatch/db/_common.py
src/penguwatch/db/episodes.py
src/penguwatch/db/events.py
src/penguwatch/db/outbox.py
src/penguwatch/db/prices.py
src/penguwatch/db/ratings.py
src/penguwatch/db/reports.py
src/penguwatch/db/repository.py
src/penguwatch/db/schema.py
src/penguwatch/db/services.py
src/penguwatch/db/shows.py
src/penguwatch/db/state.py
src/penguwatch/db/storage.py
src/penguwatch/db/titles.py
src/penguwatch/db/views.py
src/penguwatch/db/migrations/0001_initial.py
src/penguwatch/db/migrations/0002_legacy_columns.py
src/penguwatch/db/migrations/0003_episode_watched_index.py
src/penguwatch/db/migrations/0004_service_bundles.py
src/penguwatch/db/migrations/0005_billing_period.py
src/penguwatch/db/migrations/0006_service_price_history.py
src/penguwatch/db/migrations/0007_english_titles.py
src/penguwatch/db/migrations/0008_drop_tmdb_state.py
src/penguwatch/db/migrations/0009_clear_stale_providers.py
src/penguwatch/db/migrations/0010_neutral_household_tags.py
src/penguwatch/db/migrations/0011_drop_rotten_tomatoes.py
src/penguwatch/db/migrations/0012_service_titles.py
src/penguwatch/db/migrations/0013_drop_partner_rating.py
src/penguwatch/db/migrations/0014_rating_sources.py
src/penguwatch/db/migrations/0015_title_ids.py
src/penguwatch/db/migrations/0016_outbox_ops.py
src/penguwatch/db/migrations/0017_driver_state.py
src/penguwatch/db/migrations/0018_staged_cursor.py
src/penguwatch/db/migrations/__init__.py
src/penguwatch/drivers/__init__.py
src/penguwatch/drivers/base.py
src/penguwatch/drivers/ratelimit.py
src/penguwatch/drivers/local/__init__.py
src/penguwatch/drivers/simkl/__init__.py
src/penguwatch/drivers/simkl/auth.py
src/penguwatch/drivers/simkl/client.py
src/penguwatch/drivers/simkl/mapper.py
src/penguwatch/drivers/simkl/options.py
src/penguwatch/drivers/simkl/payloads.py
src/penguwatch/drivers/simkl/service.py
src/penguwatch/drivers/tvmaze/__init__.py
src/penguwatch/drivers/tvmaze/client.py
src/penguwatch/drivers/tvmaze/mapper.py
src/penguwatch/drivers/tvmaze/options.py
src/penguwatch/drivers/tvmaze/service.py
src/penguwatch/optimizer/__init__.py
src/penguwatch/optimizer/bundles.py
src/penguwatch/optimizer/component.py
src/penguwatch/optimizer/engine.py
src/penguwatch/optimizer/plannable.py
src/penguwatch/optimizer/planner.py
src/penguwatch/optimizer/renewal.py
src/penguwatch/optimizer/status.py
src/penguwatch/sync/__init__.py
src/penguwatch/sync/actions.py
src/penguwatch/sync/active.py
src/penguwatch/sync/backoff.py
src/penguwatch/sync/component.py
src/penguwatch/sync/engine.py
src/penguwatch/sync/enrich.py
src/penguwatch/sync/ops.py
src/penguwatch/sync/pull.py
src/penguwatch/sync/push.py
src/penguwatch/sync/titles.py
src/penguwatch/sync/worker.py
src/penguwatch/web/static/components.css
src/penguwatch/web/static/login.css
src/penguwatch/web/static/manifest.webmanifest
src/penguwatch/web/static/offline.css
src/penguwatch/web/static/offline.html
src/penguwatch/web/static/page.css
src/penguwatch/web/static/style.css
src/penguwatch/web/static/sw.js
src/penguwatch/web/static/theme.js
src/penguwatch/web/static/tokens.css
src/penguwatch/web/static/dialogs/add-title/dialog.css
src/penguwatch/web/static/dialogs/add-title/dialog.html
src/penguwatch/web/static/dialogs/add-title/dialog.js
src/penguwatch/web/static/dialogs/details/dialog.css
src/penguwatch/web/static/dialogs/details/dialog.html
src/penguwatch/web/static/dialogs/details/dialog.js
src/penguwatch/web/static/icons/app-180.png
src/penguwatch/web/static/icons/app-192.png
src/penguwatch/web/static/icons/app-512.png
src/penguwatch/web/static/icons/favicon.ico
src/penguwatch/web/static/icons/favicon.svg
src/penguwatch/web/static/js/api.js
src/penguwatch/web/static/js/bus.js
src/penguwatch/web/static/js/chrome.js
src/penguwatch/web/static/js/data.js
src/penguwatch/web/static/js/dispatch.js
src/penguwatch/web/static/js/drivers.js
src/penguwatch/web/static/js/header.js
src/penguwatch/web/static/js/library-status.js
src/penguwatch/web/static/js/main.js
src/penguwatch/web/static/js/mobile.js
src/penguwatch/web/static/js/modal.js
src/penguwatch/web/static/js/showchanges.js
src/penguwatch/web/static/js/state.js
src/penguwatch/web/static/js/tabs.js
src/penguwatch/web/static/js/util.js
src/penguwatch/web/static/panels/calendar/panel.css
src/penguwatch/web/static/panels/calendar/panel.html
src/penguwatch/web/static/panels/calendar/panel.js
src/penguwatch/web/static/panels/calendar/panel.json
src/penguwatch/web/static/panels/decide/panel.css
src/penguwatch/web/static/panels/decide/panel.html
src/penguwatch/web/static/panels/decide/panel.js
src/penguwatch/web/static/panels/decide/panel.json
src/penguwatch/web/static/panels/discover/panel.css
src/penguwatch/web/static/panels/discover/panel.html
src/penguwatch/web/static/panels/discover/panel.js
src/penguwatch/web/static/panels/discover/panel.json
src/penguwatch/web/static/panels/insights/panel.css
src/penguwatch/web/static/panels/insights/panel.html
src/penguwatch/web/static/panels/insights/panel.js
src/penguwatch/web/static/panels/insights/panel.json
src/penguwatch/web/static/panels/optimizer/panel.css
src/penguwatch/web/static/panels/optimizer/panel.html
src/penguwatch/web/static/panels/optimizer/panel.js
src/penguwatch/web/static/panels/optimizer/panel.json
src/penguwatch/web/static/panels/optimizer/planner.js
src/penguwatch/web/static/panels/ratings/csv.js
src/penguwatch/web/static/panels/ratings/panel.css
src/penguwatch/web/static/panels/ratings/panel.html
src/penguwatch/web/static/panels/ratings/panel.js
src/penguwatch/web/static/panels/ratings/panel.json
src/penguwatch/web/static/panels/ratings/source.html
src/penguwatch/web/static/panels/services/addservice.js
src/penguwatch/web/static/panels/services/library.js
src/penguwatch/web/static/panels/services/panel.css
src/penguwatch/web/static/panels/services/panel.html
src/penguwatch/web/static/panels/services/panel.js
src/penguwatch/web/static/panels/services/panel.json
src/penguwatch/web/static/panels/services/pin.html
src/penguwatch/web/static/panels/services/review.html
src/penguwatch/web/static/panels/services/review.js
src/penguwatch/web/static/panels/services/session.js
src/penguwatch/web/static/panels/system/panel.css
src/penguwatch/web/static/panels/system/panel.html
src/penguwatch/web/static/panels/system/panel.js
src/penguwatch/web/static/panels/system/panel.json
src/penguwatch/web/static/panels/upnext/panel.css
src/penguwatch/web/static/panels/upnext/panel.html
src/penguwatch/web/static/panels/upnext/panel.js
src/penguwatch/web/static/panels/upnext/panel.json
src/penguwatch/web/static/panels/watchlist/cards.js
src/penguwatch/web/static/panels/watchlist/panel.css
src/penguwatch/web/static/panels/watchlist/panel.html
src/penguwatch/web/static/panels/watchlist/panel.js
src/penguwatch/web/static/panels/watchlist/panel.json
src/penguwatch/web/static/panels/watchlist/tidy.html
src/penguwatch/web/static/panels/watchlist/tidy.js
src/penguwatch/web/static/panels/watchlist/tidyassign.js
src/penguwatch/web/templates/icons.svg
src/penguwatch/web/templates/index.html