New #rss subcommand family on the channel-2 auto-responder:
#rss help — usage
#rss add <url> <name> — validates URL + feed (15 s fetch, RSS 2.0/Atom parse), AI-generates 2-4 tags from latest titles via LlmService; duplicate names rejected case-insensitively; LLM failure → added without tags
#rss remove <name>, #rss tags, #rss sources
#rss get <name> / #rss get #<tag> — AI-summarized headline list (one source, or all sources carrying the tag)
Decisions: storage in the existing MESH_DB_PATH SQLite file via a second node:sqlite connection (rss_sources table); only new dependency is fast-xml-parser; CommandService gains prefix dispatch so one handler owns the #rss family while exact-match registration stays untouched; all replies ride the respond() path (same channel, threaded quote).
Tests 128 → 154. Build + oxlint clean.
New `#rss` subcommand family on the channel-2 auto-responder:
- `#rss help` — usage
- `#rss add <url> <name>` — validates URL + feed (15 s fetch, RSS 2.0/Atom parse), AI-generates 2-4 tags from latest titles via LlmService; duplicate names rejected case-insensitively; LLM failure → added without tags
- `#rss remove <name>`, `#rss tags`, `#rss sources`
- `#rss get <name>` / `#rss get #<tag>` — AI-summarized headline list (one source, or all sources carrying the tag)
Decisions: storage in the existing MESH_DB_PATH SQLite file via a second node:sqlite connection (`rss_sources` table); only new dependency is fast-xml-parser; CommandService gains prefix dispatch so one handler owns the `#rss ` family while exact-match registration stays untouched; all replies ride the respond() path (same channel, threaded quote).
Tests 128 → 154. Build + oxlint clean.
#rss subcommands on the command channel: help / add <url> <name> /
remove <name> / tags / sources / get <name|#tag>. Sources are stored in
a new rss_sources table in the existing MESH_DB_PATH file (second
node:sqlite connection, case-insensitive names); feeds parsed with
fast-xml-parser (RSS 2.0 + Atom); AI tags and headline summaries via
injected LlmService.chat() with bounded maxTokens (50/200).
CommandService gains prefix registration so one handler owns the whole
#rss family while #ping stays an exact match; wired in CommandModule's
factory — still no constructor-level cycle, no forwardRef. One dead feed
does not sink a tag summary.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
New
#rsssubcommand family on the channel-2 auto-responder:#rss help— usage#rss add <url> <name>— validates URL + feed (15 s fetch, RSS 2.0/Atom parse), AI-generates 2-4 tags from latest titles via LlmService; duplicate names rejected case-insensitively; LLM failure → added without tags#rss remove <name>,#rss tags,#rss sources#rss get <name>/#rss get #<tag>— AI-summarized headline list (one source, or all sources carrying the tag)Decisions: storage in the existing MESH_DB_PATH SQLite file via a second node:sqlite connection (
rss_sourcestable); only new dependency is fast-xml-parser; CommandService gains prefix dispatch so one handler owns the#rssfamily while exact-match registration stays untouched; all replies ride the respond() path (same channel, threaded quote).Tests 128 → 154. Build + oxlint clean.