news memory + get_news tool (news-07..12): feed summaries, deduped rolling store (schema v6), on-demand filtered retrieval
This commit is contained in:
@@ -52,3 +52,49 @@ whose channel has no configured webhook, and a webhook POST that
|
||||
raises are each logged and skipped — one failure never sinks the
|
||||
run, and the seen-set still advances for successfully-processed
|
||||
items.
|
||||
|
||||
### NEWS-07 — Item summaries are extracted (coverage: test)
|
||||
|
||||
`parse_feed` also captures each item's short description — RSS
|
||||
`<description>`, Atom `<summary>` or `<content>` — with HTML stripped,
|
||||
entities unescaped, and whitespace collapsed, so an item carries what
|
||||
it is about, not only a headline. Missing descriptions yield an empty
|
||||
summary, never an error.
|
||||
|
||||
### NEWS-08 — The digest carries summaries (coverage: test)
|
||||
|
||||
`render_digest` appends the sanitized, length-capped
|
||||
(`news-summary-chars`, default 200) summary after each headline, so
|
||||
the bot's ambient `{news}` context knows the gist of each story, not
|
||||
just its title. A zero cap restores the title-only digest.
|
||||
|
||||
### NEWS-09 — Fetched news is stored, deduped, and rolled over (coverage: test)
|
||||
|
||||
Both the digest run (kroa) and the posting run (ggg) upsert every
|
||||
fetched item into a `news` table keyed by link (or title), so the same
|
||||
story is stored once. After each run the store is pruned to the newest
|
||||
`news-keep` rows (default 400), a rolling window that bounds growth
|
||||
while keeping recent history searchable.
|
||||
|
||||
### NEWS-10 — get_news is offered as a tool (coverage: test)
|
||||
|
||||
When `enable-news-tool` is true and a store is configured, the chat
|
||||
call's `tools` list includes a `get_news` function (optional `topic`,
|
||||
`source`, `limit`) next to the other tools. Without a store or the
|
||||
flag it is absent.
|
||||
|
||||
### NEWS-11 — get_news retrieves filtered, sanitized items (coverage: test)
|
||||
|
||||
`get_news` returns recent stored items, newest first, optionally
|
||||
narrowed by `topic` (every keyword must appear in the title, summary,
|
||||
or source label — so `topic: "Nordland"` finds items from that source)
|
||||
and/or an exact `source`; `limit` is clamped to 1..30. Each result's title and
|
||||
summary are passed through `sanitize_external_text`. The bot can then
|
||||
`fetch_url` a returned link for the full article.
|
||||
|
||||
### NEWS-12 — get_news is metered per user (coverage: test)
|
||||
|
||||
Each `get_news` call increments a per-user daily counter; over
|
||||
`news-daily-per-user` (default 30) the tool refuses with an error
|
||||
result without touching the store. The budget gate (SAF-04) still
|
||||
applies to the surrounding model calls.
|
||||
|
||||
Reference in New Issue
Block a user