Skip to content

Releases: yogthos/newsroom

newsroom v0.4.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 16:45

Briefings now remember stories across days, rank them by how widely and how
long they've been covered, keep a running note on each storyline, and roll the
stored days up into weekly and monthly digests.

Added

  • Near-duplicate collapsing. Stories from different outlets whose headlines
    and summaries embed within :dupe-threshold (0.62) are folded into one
    source that credits the other outlets. The embeddings come from
    potion-mxbai-128d-v2, bundled in resources/embed and run in-process, with
    no model server.
  • Storylines and ranking. Each day's items are linked by embedding to the
    storylines of the last :trend-days (7), within :story-threshold (0.6).
    An item's weight is the outlets carrying its story today plus those on
    earlier days, an earlier day counting half as much every :half-life-days
    (2). The heaviest stories come first in the prompt with a coverage line, and
    are the last cut by :max-items.
  • Story notes. After each briefing, one more model call keeps a running
    note on every storyline the briefing cited: a stable title, where it stands,
    and up to :story-notes (12) dated facts, each tied to the report it came
    from. The next briefing gets the notes of the stories still running as
    background. A :notes role can give the job a cheaper model.
  • Weekly and monthly digests. Once a week (Monday to Sunday) or a month is
    over, a digest is written from its days: the storylines ranked by coverage
    and labelled emerging, persistent, fading or steady against the four periods
    before, citing the facts in their notes, with each day's standfirst.
    digest.md is their prompt, :digests chooses which run, and
    :digest-stories (15) is how many storylines one is given. A missing digest
    can be written from its page.
  • New pages. /week/YYYY-Www and /month/YYYY-MM for digests (with
    .md versions), /stories for every storyline, and /story/DAY/N for one
    storyline's summary, timeline of facts and coverage by day.
  • Sidebar. Storylines, then Monthly, Weekly and Daily sections, a
    standfirst under each day, and feed health on the desk: each source's last
    success and how many times in a row it has failed.
  • Standfirsts. The briefing opens with a one-sentence > blockquote,
    stored as the day's standfirst and shown in the archive.

Changed

  • A story told in any of the last :seen-days (3) briefings is left out of
    today's, not only one from yesterday's. Collapsed copies count as told too.
  • Outlets are counted by publisher domain, so one publisher's several feeds
    count once, and a story whose dateline names a wire agency, like
    WASHINGTON (AP) —, counts as the agency's however many outlets reprint it.
  • The daily prompt explains the coverage lines, and that a story many outlets
    carry or that keeps coming back deserves more weight.
  • Each source's coverage, the story notes and the standfirsts are kept four
    months longer than :keep-days, so a month's digest can always be compared
    with the four months before it.
  • The stylesheet and diagram script are files under resources/public.
  • dev/make-embed-model.clj packages the embedding model with jolt, replacing
    the Python script.
  • The user agent is newsroom/0.4.

Upgrading

The database gains its new tables and columns on first start. Days stored
before this release get storylines worked out from their stored headlines the
first time a run or a digest reads them, which can take a few minutes once.
Story notes start with the first briefing after the upgrade, and the
Storylines section appears in the sidebar then. config.edn needs no
changes, since every new key has a default; examples/config.edn documents
them. digest.md is written to the config directory on first start.

newsroom v0.3.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:40

Each briefing now picks up where the last one left off. Stories that were already in the previous briefing are left out, matched by their address or by their headline, and the model gets the previous briefing's overview as what's already been established, so it writes about what changed instead of retelling yesterday. If you've edited prompt.md, {{previous}} marks where that overview goes; without it, it goes just before the sources.

The schedule takes :run-every-hours, how far apart runs are after :run-at, a day by default. Something like 6 refreshes the day's briefing through the day, and a wake only re-gathers when the day's briefing is at least that old.

Standalone binaries for macOS (arm64) and Linux (x86_64).

Unpack the archive and run newsroom, then open http://127.0.0.1:3000. The first run writes its config to ~/.config/newsroom, and config.example.edn shows every option. The plugins in plugins/ add sources newsroom doesn't read itself; copy a plugin's folder to ~/.config/newsroom/plugins/ to use it. The default model is DeepSeek, which reads DEEPSEEK_API_KEY.

Runtime libraries: Linux needs sqlite3, libxml2 and OpenSSL 3, which most distributions have. macOS needs OpenSSL 3 (brew install openssl@3).

The macOS binary is unsigned, so clear the quarantine flag before the first run: xattr -d com.apple.quarantine ./newsroom.

newsroom v0.2.1

Choose a tag to compare

@github-actions github-actions released this 01 Oct 01:07

Set NEWSROOM_HOME to keep the config, prompt, plugins, database and briefings somewhere other than ~/.config/newsroom, which is how to run newsroom as a service, for example with NEWSROOM_HOME=/var/newsroom. The README has a systemd unit to start from.

Standalone binaries for macOS (arm64) and Linux (x86_64).

Unpack the archive and run newsroom, then open http://127.0.0.1:3000. The first run writes its config to ~/.config/newsroom, and config.example.edn shows every option. The plugins in plugins/ add sources newsroom doesn't read itself; copy a plugin's folder to ~/.config/newsroom/plugins/ to use it. The default model is DeepSeek, which reads DEEPSEEK_API_KEY.

Runtime libraries: Linux needs sqlite3, libxml2 and OpenSSL 3, which most distributions have. macOS needs OpenSSL 3 (brew install openssl@3).

The macOS binary is unsigned, so clear the quarantine flag before the first run: xattr -d com.apple.quarantine ./newsroom.

newsroom v0.2.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 00:17

Newsroom can now load plugins that add new kinds of sources. A plugin is a folder of Clojure namespaces in ~/.config/newsroom/plugins/<name>/, loaded at startup, with its settings under :plugins {:<name> {...}} in config.edn. Plugins are written against newsroom.plugin; the README has the details.

Two come with this release, in plugins/ in the archive:

  • reddit reads subreddit feeds and follows each post to the article it links to, so the briefing gets the stories rather than reddit threads. Reddit only allows about one feed read a minute without logging in, so put all your subreddits in one source: {:type :reddit :subreddit ["technology" "worldnews"]}.
  • slack reads a Slack channel with a bot token.

This release also fixes the page not showing a finished briefing until reload when it's opened over plain http at a LAN address (with :host "0.0.0.0"). The page's tab id now reaches the server as well (glimmer-datastar v0.1.2).

Standalone binaries for macOS (arm64) and Linux (x86_64).

Unpack the archive and run newsroom, then open http://127.0.0.1:3000. The first run writes its config to ~/.config/newsroom, and config.example.edn shows every option. The plugins in plugins/ add sources newsroom doesn't read itself; copy a plugin's folder to ~/.config/newsroom/plugins/ to use it. The default model is DeepSeek, which reads DEEPSEEK_API_KEY.

Runtime libraries: Linux needs sqlite3, libxml2 and OpenSSL 3, which most distributions have. macOS needs OpenSSL 3 (brew install openssl@3).

The macOS binary is unsigned, so clear the quarantine flag before the first run: xattr -d com.apple.quarantine ./newsroom.

newsroom v0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 19:21

Standalone binaries for macOS (arm64) and Linux (x86_64).

Unpack the archive and run newsroom, then open http://127.0.0.1:3000. The first run writes its config to ~/.config/newsroom, and config.example.edn shows every option. The default model is DeepSeek, which reads DEEPSEEK_API_KEY.

Runtime libraries: Linux needs sqlite3, libxml2 and OpenSSL 3, which most distributions have. macOS needs OpenSSL 3 (brew install openssl@3).

The macOS binary is unsigned, so clear the quarantine flag before the first run: xattr -d com.apple.quarantine ./newsroom.