all repos — llm_aggregator @ 262b91134ac16b77d435b706d54680bf6cff5de6

A CLI tool to aggregate RSS feeds and summarise them with LLMs

CHANGELOG.md (view raw)

  1# Changelog
  2
  3All notable changes to this project will be documented in this file.
  4
  5The format is based on [Keep a
  6Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
  7[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
  8
  9## [0.5.0] - 2026-04-22
 10
 11### Added
 12
 13- **Accurate token counting with tiktoken**
 14  - New `internal/tokeniser` package using OpenAI's tiktoken-go library
 15  - BPE tokenisation for accurate token counting vs rough character estimation
 16  - Encoding caching to avoid repeated initialisation overhead
 17  - Model-aware encoding selection (cl100k_base, o200k_base, etc.)
 18  - `CountTokens()` and `CountMessagesTokens()` functions
 19  - Fallback to rough estimation when tiktoken initialisation fails
 20- **Concurrent feed fetching**: Feeds are now fetched concurrently using
 21  `golang.org/x/sync/errgroup`
 22  - Semaphore limits concurrent requests to 10 to avoid server overload
 23  - Mutex-protected shared state for thread-safe article collection
 24  - Partial failures don't stop other feeds from being processed
 25- **Scrollable summary in TUI**
 26  - Bubble Tea viewport component for browsing long summaries
 27  - Keyboard navigation: j/k or arrows (scroll), Space/B (page), g/G
 28  (start/end)
 29  - Mouse wheel scrolling support
 30  - Scroll progress indicator showing position and total lines
 31
 32### Changed
 33
 34- **Streamlined configuration management**: Viper now uses global instance with
 35automatic precedence handling. Simplified configuration flow: Parse → GetViper
 36→ BindCLIArgs → ViperToRuntime
 37- **TUI colour scheme**: All hex colour codes replaced with ANSI 256-colour
 38  palette
 39
 40### Fixed
 41
 42- Viewport now properly handles scroll events via `Update()`. Summary content
 43  pre-wrapped to viewport width before display
 44- Fixed string literal colour names to use actual variables
 45
 46## [0.4.0] - 2026-04-21
 47
 48### Changed 
 49
 50- **TUI is now fully functional and production-ready**: Replaced the
 51work-in-progress TUI implementation with a robust Bubble Tea command pattern:
 52  - Runtime execution now uses native `tea.Cmd` instead of manual goroutine
 53  orchestration.
 54  - Added real-time progress updates via `progress.Progress` interface with
 55  stage, substage, and article count messages.
 56  - TUI displays a spinner, elapsed time, and final summary inline.
 57  - Removed signal handling and channel synchronisation in favour of Bubble
 58  Tea's built-in lifecycle.
 59  - `TUIProgress` now only sends messages to an existing program, simplifying
 60  integration.
 61  - Both verbose mode (`SimpleLogger`) and TUI mode share the same
 62  `progress.Progress` interface.
 63
 64## [0.3.0] - 2026-04-21
 65
 66### Added
 67
 68- **Configuration file support via TOML** (XDG-compliant and cross-platform)
 69  - Load settings from `~/.config/llm_aggregator/config.toml`
 70  - Supports all aggregation, API, and output options
 71  - Example configuration file at `configs/config.example.toml`
 72- **Environment variable support with `LLM_AGGREGATOR_` prefix**
 73  - All configuration options can be set via environment variables
 74  - Precedence order: CLI arguments > environment variables > config file >
 75  built‑in defaults
 76- New `internal/config` package with Viper integration
 77  - `Load()` and `Save()` methods for configuration management
 78  - `GetConfigPath()` for XDG‑compliant config file location
 79  - `ConfigExists()` to check for existing configuration
 80- Comprehensive unit tests for configuration loading, saving, and environment
 81  variable precedence (`internal/config/config_test.go`)
 82
 83### Changed
 84
 85- **Environment variable renamed:** `DEEPSEEK_API_KEY` 86  `LLM_AGGREGATOR_API_KEY`
 87- **CLI help text** now reflects the new API key environment variable and
 88  general configuration options
 89- **Command‑line argument precedence** implemented in `cmd/llm_aggregator.go`
 90via `applyConfiguration()`
 91- Updated all help text, documentation, and code references
 92- `README.md` completely revised with a new "Configuration" section
 93
 94### Removed
 95
 96- Global `QuietMode` and `VerboseMode` variables from
 97`internal/config/config.go`. Replaced by runtime‑specific configuration in
 98`runtime.Runtime` and CLI arguments
 99- Hardcoded system prompt in `runtime.NewRuntime()`. Now left empty, allowing
100configuration or client default to be used
101- CLI flags now correctly override config file and environment variables
102
103## [0.2.0] - 2026-04-21
104
105### Changed
106
107- Moved all progress and status messages behind `-v/--verbose` flag
108- Default CLI mode is now silent except for final output and errors
109- Components (aggregator, processor, LLM client) use logger interface
110controlled by verbose flag
111
112## [0.1.0] - 2026-04-21
113
114### Added
115
116- Complete translation from Python prototype to Go implementation
117- RSS/Atom feed parsing using `gofeed` library
118- DeepSeek API integration via `openai-go` client, configured for `/chat/completions` endpoint
119- Content filtering and processing with keyword‑based include/exclude, date filtering, and sorting
120- Command‑line interface using `go‑arg` with automatic help and version flags
121- Multiple output formats: plain text, GitHub‑flavoured markdown, and JSON
122- Terminal user interface (TUI) built with `bubbletea` featuring:
123  - Animated progress bar with gradient colours (`#FF7CCB` to `#FDFF8C`)
124  - Live article counters (aggregated/processed)
125  - Elapsed time display
126  - Coloured status indicators using `lipgloss` styling
127  - Keyboard controls (q/Ctrl+C to quit)
128- Web content extraction fallback using `goquery` when feed descriptions are minimal
129- Configurable limits: articles per feed, maximum age, total articles
130- Token estimation and API usage logging
131- Environment variable support (`LLM_AGGREGATOR_API_KEY`) for authentication
132- Example feeds file with technology, programming, and free software sources
133
134### Changed
135
136- Program structure organised into standard Go layout: `cmd/`, `internal/`, `pkg/`
137- English spelling conventions maintained throughout (colour, initialise, summarise)
138- Error handling improved with specific messages for common API failures (invalid key, rate limits, etc.)
139- Progress reporting unified through a `ProgressContext` interface for both TUI and CLI modes
140
141### Fixed
142
143- Initial API endpoint mismatch (using `/responses` instead of `/chat/completions`)
144- Nil pointer dereferences when handling optional feed metadata (author, dates)
145- String repetition syntax errors in Go (replaced `"="*80` with `strings.Repeat`)
146- CLI help/version flag handling to show information without requiring other arguments
147- Type compatibility issues with `openai-go` v3 API (message parameters, token usage fields)