feat(reddit): add Reddit connector with comment sync and OAuth reply#28
Merged
Conversation
Monitor configured subreddits via Reddit application-only OAuth, filtering posts by keywords and minimum score. Mirrors the Hacker News read-only feed pattern with per-subreddit conversations, setup wizard integration, and wiremock-backed API tests. Co-authored-by: Cursor <cursoragent@cursor.com>
The skill now detects whether it's running with a full local repo clone (local mode) or as a cloud agent with only gh CLI access (remote mode), and provides alternative commands for each step accordingly. Co-authored-by: Cursor <cursoragent@cursor.com>
…score Mirror the Hacker News `void hn` pattern with `void reddit` (alias `rd`): config show, subreddit/keyword list/add/remove/set, and min-score updates. Read-only list/config commands use the local cache in remote mode; writes proxy to the server. Co-authored-by: Cursor <cursoragent@cursor.com>
Upgrade the Reddit connector from read-only feed monitoring to full comment thread sync and CLI replies using OAuth authorization_code flow. - Add optional refresh_token to config; setup opens browser on localhost:8765 with manual code paste fallback for remote/headless environments - Dual auth in RedditClient: client_credentials (read-only) or refresh_token (read/submit/identity scopes for commenting) - Sync matching posts as Thread conversations with nested comments - Implement reply() and send_message() on RedditConnector - Change Reddit build_reply_id to conv:msg format (LinkedIn pattern) - Add wiremock API, sync, config, OAuth, and CLI tests - Update docs and README for commenting workflow Co-authored-by: Cursor <cursoragent@cursor.com>
…eply docs - Add a CHANGELOG [Unreleased] entry for the Reddit connector. - Remove the dead `RedditError` enum; the crate threads `anyhow::Result` end-to-end and never referenced it. - Document that `void reply` targets synced thread messages and that feed posts are commented on via `void send --via reddit --to <post-id>`. Co-authored-by: Cursor <cursoragent@cursor.com>
Merge main after #30: register Reddit via inventory::submit! plugin descriptor, migrate settings to generic TOML tables, and align with ConnectorType string identity and Message.is_saved field. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
void-reddit) that polls configured subreddits and filters posts by keywords and minimum score (Hacker News pattern).client_credentials) withclient_id+client_secret.void setup, stores arefresh_token, syncs post threads with comments, and supportsvoid reply/void send --via reddit.localhost:8765first; falls back to manual code paste when the port is busy, the browser cannot open, or setup runs on a remote machine.void reddit config|subreddits|keywords|min-scorewithout editingconfig.toml.inventory::submit!incrates/void-cli/src/connectors/reddit.rs— no centralConnectorTypeenum orConnectionSettingsmatch arms. Settings are a generic TOML table on[[connections]].Architecture
r/{name}); matching posts appear as messages.refresh_tokenis set): each matching post becomes aThreadconversation with comments as flat messages (metadata.parent_idfor tree reconstruction).conv:msgformat viaReplyIdStyle::ConvMsg(same as LinkedIn/Slack).Config example
Register a web app at https://www.reddit.com/prefs/apps with redirect URI
http://localhost:8765.Usage
Test plan
cargo fmt --all -- --checkcargo clippy --workspace --all-targets -- -D warningscargo test --workspacevoid redditcommands, Redditbuild_reply_idconv:msg formatby_id("reddit"), badgeRD