Add #rss command family with LLM tags and summaries (v0.20.0) #41

Merged
kamilkrzywda merged 1 commits from feat/rss-command into main 2026-09-25 20:46:56 +02:00
Owner

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.
kamilkrzywda added 1 commit 2026-09-25 20:46:50 +02:00
Add #rss command family with LLM tags and summaries (v0.20.0)
CI / build + unit (pull_request) Successful in 1m15s
eda1cbd125
#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.
kamilkrzywda merged commit a8ce04d3f8 into main 2026-09-25 20:46:56 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OpenCode/MeshBot#41