feat(bluesky): add Bluesky adapter with 9 commands#215
feat(bluesky): add Bluesky adapter with 9 commands#2150xsline wants to merge 1 commit intojackwener:mainfrom
Conversation
Bluesky (9 commands, public AT Protocol API, no auth needed): - profile: user profile info (followers, following, posts) - user: recent posts from a user with engagement stats - trending: trending topics on Bluesky - search: search users - feeds: popular feed generators - followers: list user's followers - following: list accounts a user follows - thread: post thread with replies - starter-packs: user's starter packs All commands use the public Bluesky API, no browser or login required.
Astro-Han
left a comment
There was a problem hiding this comment.
Nice coverage of the AT Protocol — 9 commands is solid. A few issues, some blocking:
thread.yaml — only shows root post, all replies are lost
getPostThread returns { thread: { post: {...}, replies: [...] } }. After select: thread, the pipeline wraps this single object as [obj] and maps item.post.author.handle — which only yields the root post. The replies array is never traversed, and the --limit parameter has no effect. This needs a pipeline redesign to flatten the reply tree.
thread.yaml — docs say "or bsky.app URL" but API requires AT URI
The uri parameter description says it accepts bsky.app URLs, but the API endpoint only accepts at:// URIs. Passing a web URL will fail. Either remove the claim or add URL-to-AT-URI conversion.
URL encoding missing
${{ args.query }} in search.yaml is interpolated directly into the query string — spaces in search terms will break the URL. Consider using params: (which auto-encodes via URLSearchParams) or the urlencode filter. Same applies to handle/uri in the other 7 files.
search.yaml — followersCount may not exist
searchActors returns profileView objects, which per the AT Protocol lexicon don't include followersCount (only profileViewDetailed does). This column will likely be empty.
Documentation examples use --handle but args are positional
The YAML defines handle as positional: true, so opencli bluesky profile bsky.app is the correct usage. The --handle form in docs will cause a commander "unknown option" error.
Missing deliverables
No README, docs/adapters/index.md, config.mts sidebar, or E2E tests.
Summary
Add Bluesky adapter with 9 public API commands using the AT Protocol. All commands are completely public — no browser, no login, no API key needed.
New Commands
profileopencli bluesky profile --handle bsky.appuseropencli bluesky user --handle bsky.app --limit 10trendingopencli bluesky trending --limit 10searchopencli bluesky search --query "AI"feedsopencli bluesky feeds --limit 10followersopencli bluesky followers --handle bsky.appfollowingopencli bluesky following --handle bsky.appthreadopencli bluesky thread --uri "at://..."starter-packsopencli bluesky starter-packs --handle bsky.appTechnical Notes
public.api.bsky.apppublic endpoint (AT Protocol / XRPC)strategy: public, browser: false— pure fetch pipelinesTest plan
profile --handle bsky.app— 32.4M followers, 729 postsuser --handle bsky.app— posts with likes (932), reposts (111), replies (33)trending— Robert Mueller, Iran Relations, Caturday, Liverpoolsearch --query AI— returns user handles and descriptionsfeeds— Discover (38807 likes), Popular With Friends (40947)followers --handle bsky.app— follower listfollowing --handle bsky.app— Punchbowl News, WNBA, Bluesky Safetythread— 933 likes, 111 reposts, 33 repliesstarter-packs --handle bsky.app— Illinois Primaries, Oscars, NBA Playoffs