Add provider-neutral verified zara-media service #501

Open
nsaspy wants to merge 4 commits from rage/14-media into main
Owner

Implements #14.

TDD begins at 98597bf922854da20b16b5d0e7fd1f216e0e6430, defining normalized player/playback/media-item, explicit-player mutations, bounded queues/search, context projection, and post-change verification before implementation. The branch was reconciled onto canonical main after #62 so this candidate validates the full current catalog.

zara-media keeps player/service specifics behind a backend-neutral adapter. Normal output contains bounded portable media/player fields only; provider tokens, cookies, credentials, and raw provider responses are outside the schema. Multiple players/devices are representable, media.context exposes normalized active playback for consumers such as zara-context, and catalog/search adapters do not leak into the public model.

Playback controls are allowlisted (play, pause, stop, seek, skip next/previous, volume, mute) and require an explicit player ID. Player selection, playback, queue append, and queue reorder preserve backend acceptance and fresh observed state; backend acceptance alone is never treated as success. Queues/results/metadata are bounded. No production player is fabricated: without a backend the plugin reports media-backend-not-configured.

Tests use an in-memory fake backend only and require no media device, GUI, network, streaming account, or credentials. Zara Core remains authoritative for normal tool authorization/approval.

Candidate head: 9f09e999d380ba264b6b49e839436f91a39e6535. Merge only after exact-head registry/unit/pinned-Zara compatibility/Nix/package/runtime-layout gates and review/thread state are green.

Implements #14. TDD begins at `98597bf922854da20b16b5d0e7fd1f216e0e6430`, defining normalized player/playback/media-item, explicit-player mutations, bounded queues/search, context projection, and post-change verification before implementation. The branch was reconciled onto canonical main after #62 so this candidate validates the full current catalog. `zara-media` keeps player/service specifics behind a backend-neutral adapter. Normal output contains bounded portable media/player fields only; provider tokens, cookies, credentials, and raw provider responses are outside the schema. Multiple players/devices are representable, `media.context` exposes normalized active playback for consumers such as `zara-context`, and catalog/search adapters do not leak into the public model. Playback controls are allowlisted (`play`, `pause`, `stop`, `seek`, skip next/previous, volume, mute) and require an explicit player ID. Player selection, playback, queue append, and queue reorder preserve backend acceptance and fresh observed state; backend acceptance alone is never treated as success. Queues/results/metadata are bounded. No production player is fabricated: without a backend the plugin reports `media-backend-not-configured`. Tests use an in-memory fake backend only and require no media device, GUI, network, streaming account, or credentials. Zara Core remains authoritative for normal tool authorization/approval. Candidate head: `9f09e999d380ba264b6b49e839436f91a39e6535`. Merge only after exact-head registry/unit/pinned-Zara compatibility/Nix/package/runtime-layout gates and review/thread state are green.
Some checks failed
CI / test (pull_request) Failing after 19s
This pull request has changes conflicting with the target branch.
  • plugins.json
  • plugins/zara-media/lib/zara_media/domain.py
  • plugins/zara-media/lib/zara_media/plugin.py
  • plugins/zara-media/test/test_media.py
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin rage/14-media:rage/14-media
git switch rage/14-media

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff rage/14-media
git switch rage/14-media
git rebase main
git switch main
git merge --ff-only rage/14-media
git switch rage/14-media
git rebase main
git switch main
git merge --no-ff rage/14-media
git switch main
git merge --squash rage/14-media
git switch main
git merge --ff-only rage/14-media
git switch main
git merge rage/14-media
git push origin main
Sign in to join this conversation.
No description provided.