feat(youtube): read liked videos and playlist contents#787
Conversation
Add two read-only YouTube commands that were previously missing: - `youtube playlists items list`: enumerate the videos inside a playlist via playlistItems.list. Public playlists work with an API key; private playlists and the special `LL` liked-videos playlist use account OAuth. Supports `--all` pagination and JSON/plain/table output. - `youtube videos list --my-rating like|dislike`: read the authenticated user's rated videos. This is a per-user read, so it always uses OAuth. Both reuse the default `youtube.readonly` scope (no force-ssl needed), the existing service/auth/pagination/output helpers, and follow the established command patterns. Adds a playlist-item table column helper, unit tests for both commands (API key + OAuth paths and validation), regenerated command reference pages, and docs/README/CHANGELOG updates. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Codex review: needs real behavior proof before merge. Reviewed June 14, 2026, 12:39 AM ET / 04:39 UTC. Summary Reproducibility: not applicable. This is a feature PR, and current-main source inspection shows the requested command modes are not present yet. Review metrics: 2 noteworthy metrics.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Land the focused YouTube read commands after redacted live API proof is added and release-note ownership is handled by the landing flow. Do we have a high-confidence way to reproduce the issue? Not applicable. This is a feature PR, and current-main source inspection shows the requested command modes are not present yet. Is this the best way to solve the issue? Mostly yes. The implementation follows existing YouTube read-service, account-routing, output, and pagination patterns, but merge readiness still needs real API proof and release-owned changelog cleanup. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 91532648b7ae. Label changesLabel justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
# Conflicts: # docs/commands/README.md
|
Landed as
Redacted live YouTube proof:
Verification:
Thanks @coeur-de-loup. |
Summary
Adds two read-only YouTube commands that were missing — there was previously no way to read the videos inside a playlist or to read your liked videos. Both reuse the default
youtube.readonlyscope (noforce-ssl), the existing service/auth/pagination/output helpers, and follow the established command patterns from #767.New behaviour
gog yt playlists items list --playlist-id <ID>— enumerate the videos inside a playlist viaplaylistItems.list. Public playlists work with an API key; private playlists and the specialLLliked-videos playlist use account OAuth. Supports--allpagination and JSON/plain/table output.gog yt videos list --my-rating like|dislike— read the authenticated user's rated videos. This is a per-user read, so it always uses account OAuth (it is mutually exclusive with--id/--chart).Why
playlists listonly returns playlist metadata, andvideos listonly accepted--id/--chart, so neither liked videos nor playlist contents were reachable from the CLI even though the underlyingyoutube.Servicealready exposesPlaylistItems.ListandVideos.List(...).MyRating(...).Implementation notes
videos listnow accepts exactly one of--id,--chart, or--my-rating;--my-ratingrequires an account and validateslike|dislike.playlists items listis a newitemssubcommand group underplaylists, modelled onsubscriptions list(usesloadPagedItemsfor--all).youtubePlaylistItemColumns()table helper (VIDEO_ID, TITLE, CHANNEL, POSITION, ITEM_ID, PUBLISHED_AT).Testing
myRating=likequery, theplaylistIdquery, and validation errors.make cipasses locally (fmt-check, lint, deadcode, tests, docs-check — 645 command pages).make docs-commands) and updateddocs/youtube.md,README.md, andCHANGELOG.md.🤖 Generated with Claude Code