Skip to content

Commit 0c8f572

Browse files
committed
docs: refresh README and user guide for current features (v0.15.1)
1 parent 9e273b6 commit 0c8f572

7 files changed

Lines changed: 94 additions & 19 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to UnraidMonitor will be documented in this file.
44

5+
## [0.15.1] - 2026-06-08
6+
7+
### Changed
8+
- **Documentation refreshed for current features** — the README's "What's New" was still pinned to v0.12.0; replaced it with a v0.15.0 summary, and updated the feature list and command table to reflect the `/manage` Features panel (server/disks/features sections) and per-feature `/model` overrides (`chat`/`diagnose`/`analyze`).
9+
- **User guide expanded** — added an Optional Features section documenting image-update detection and auto-heal (how to enable from `/manage` → ⚙️ Features and via `config.yaml`), documented per-feature model switching, and added the Features panel to the Manage Dashboard walkthrough.
10+
- **Data Storage docs** — listed the previously-undocumented `announced_version.json` and `announced_updates.json` files.
11+
512
## [0.15.0] - 2026-06-06
613

714
Audit remediation release — all 16 items from the June 6 codebase audit (`audit-reports/audit-2026-06-06-1538.md`).

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ src/utils/version_store.py - read/write data/announced_version.json for startup
9292

9393
## Project Overview
9494

95-
Unraid Server Monitor Bot (v0.15.0) - A Docker-based Telegram bot for monitoring Unraid servers. Monitors Docker containers (events, logs, resources) and Unraid server health (CPU, memory, disks, array, UPS). Uses multi-provider LLM support (Anthropic, OpenAI, Ollama) for AI-powered diagnostics and natural language interaction. Sends alerts via Telegram with quick-action buttons.
95+
Unraid Server Monitor Bot (v0.15.1) - A Docker-based Telegram bot for monitoring Unraid servers. Monitors Docker containers (events, logs, resources) and Unraid server health (CPU, memory, disks, array, UPS). Uses multi-provider LLM support (Anthropic, OpenAI, Ollama) for AI-powered diagnostics and natural language interaction. Sends alerts via Telegram with quick-action buttons.
9696

9797
**Version string lives in TWO places**`pyproject.toml` (`version`) and `src/__init__.py` (`__version__`). Both must be bumped together on release; `tests/test_version.py` guards against drift. `BOT_VERSION` (in `src/bot/health_command.py`) resolves from installed package metadata when available, else falls back to `src.__version__` — the package is not installed in the Docker image, so the `__version__` fallback is what runs in production.
9898

README.md

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ A Telegram bot for monitoring Docker containers and Unraid servers. Get real-tim
1818
- **Memory Pressure Management** - Automatic container priority handling during high memory
1919
- **Mute System** - Temporarily silence alerts per container, server, or array
2020
- **Natural Language Chat** - Ask questions naturally instead of using commands
21-
- **Interactive Dashboard** - `/manage` hub for status, resources, ignores, and mutes
21+
- **Interactive Dashboard** - `/manage` hub for status, resources, server, disks, ignores, mutes, and a Features panel to toggle optional monitors
2222
- **Sectioned Help** - `/help` with navigable category buttons instead of a text wall
2323

24-
## What's New in v0.12.0
24+
## What's New in v0.15.0
2525

26-
- **Image-update detection** - Opt-in daily digest of containers with newer images available, with per-container Pull buttons (`image_updates.enabled: true`)
27-
- **Auto-heal** - Opt-in automatic restart of containers that fail their Docker HEALTHCHECK, with a storm guard that gives up after configurable retries (`auto_heal.containers: [...]`)
28-
- **Richer startup message** - On first boot after an upgrade, shows a "What's new" summary so you always know what changed
29-
- **CI test pipeline** - Tests, lint, and type-check now run automatically on every push and pull request
26+
- **Toggle optional features from Telegram** - `/manage` → ⚙️ Features enables image-update detection and picks auto-heal containers without editing `config.yaml`
27+
- **Alert-context-aware diagnostics** - `/diagnose` now knows which alert fired (crash / errors / restart-loop / high-usage) and gathers full container state, for far more accurate root-cause analysis
28+
- **Properly formatted AI replies** - Bold, italics, headings, and code blocks now render correctly in Telegram instead of showing literal `*` characters
29+
- **Friendlier natural-language chat** - Plays along with creative on-topic requests ("status as a captain's log", "roast my containers") while staying grounded in real stats
30+
- **Reliability & security hardening** - Auto-heal retries persist correctly, image-update alerts no longer repeat after a restart, and API error bodies are redacted in all paths (full June 6 audit remediation)
3031

3132
See the [changelog](CHANGELOG.md) for full details.
3233

@@ -429,9 +430,10 @@ auto_heal:
429430
|---------|-------------|
430431
| `/setup` | Re-run the setup wizard (merges with existing config) |
431432
| `/cancel` | Exit the setup wizard mid-flow |
432-
| `/manage` | Interactive dashboard — status, resources, ignores, mutes |
433+
| `/manage` | Interactive dashboard — status, resources, server, disks, ignores, mutes, features |
433434
| `/health` | Bot version, uptime, and monitor status |
434-
| `/model` | Switch LLM provider and model at runtime |
435+
| `/model` | Switch the global LLM provider and model at runtime |
436+
| `/model <feature> <model>` | Per-feature model override (`chat`, `diagnose`, `analyze`); `default` resets to global |
435437
| `/help` | Browse commands by category with navigation buttons |
436438

437439
### Natural Language Chat
@@ -611,12 +613,14 @@ config/
611613
└── .env # Environment variables (secrets)
612614
613615
data/
614-
├── ignored_errors.json # Ignore patterns
615-
├── mutes.json # Container mutes
616-
├── server_mutes.json # Server mutes
617-
├── array_mutes.json # Array mutes
618-
├── model_selection.json # Active LLM provider/model choice
619-
└── chat_ids.json # Persistent Telegram chat IDs for alert delivery across restarts
616+
├── ignored_errors.json # Ignore patterns
617+
├── mutes.json # Container mutes
618+
├── server_mutes.json # Server mutes
619+
├── array_mutes.json # Array mutes
620+
├── model_selection.json # Active LLM provider/model choice
621+
├── chat_ids.json # Persistent Telegram chat IDs for alert delivery across restarts
622+
├── announced_version.json # Last-announced version (gates the startup "What's new" message)
623+
└── announced_updates.json # Image-update dedup map (stops restarts re-announcing the same update)
620624
```
621625

622626
---

docs/user-guide.md

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ This guide walks you through everything the bot can do, from first-run setup to
1212
- [Unraid Server Monitoring](#unraid-server-monitoring)
1313
- [Alert Control](#alert-control)
1414
- [AI Features](#ai-features)
15+
- [Optional Features](#optional-features)
1516
- [Tips & Best Practices](#tips--best-practices)
1617

1718
---
@@ -293,6 +294,7 @@ You can also manage ignores through the `/manage` dashboard (see below).
293294
- **💾 Disks** — Disk status
294295
- **📝 Manage Ignores** — Browse and delete ignore patterns
295296
- **🔕 Manage Mutes** — Browse and remove active mutes
297+
- **⚙️ Features** — Turn optional monitors on or off (see [Optional Features](#optional-features))
296298

297299
Each sub-view includes per-item **🗑** delete buttons and a **⬅️ Back** button to return to the dashboard.
298300

@@ -330,7 +332,69 @@ Follow-up questions work too. After asking about a container, you can say "resta
330332
2. Choose a model from the list
331333
3. Models without tool support are marked "(no tools)" — NL chat actions may be limited
332334

333-
Your selection is persisted across bot restarts.
335+
You can also type the choice directly:
336+
337+
- **`/model sonnet`** — set the global default model (family names `sonnet`, `haiku`, `opus` resolve to the latest available release)
338+
- **`/model chat sonnet`** — use a different model just for natural-language chat
339+
- **`/model diagnose haiku`** — use a cheaper model for `/diagnose`
340+
- **`/model analyze haiku`** — use a cheaper model for ignore-pattern generation
341+
- **`/model chat default`** — reset a feature back to the global default
342+
343+
Per-feature overrides let you spend on a capable model where it matters (chat) and a cheap one where it doesn't (pattern analysis). Your selection is persisted across bot restarts.
344+
345+
---
346+
347+
## Optional Features
348+
349+
Two monitors are off by default. You can turn them on from Telegram — open **`/manage`** and tap **⚙️ Features** — or by editing `config.yaml`.
350+
351+
### Image-Update Detection
352+
353+
Checks once a day whether a newer image is available for your containers, then sends a single digest listing what's outdated, each with a one-tap **Pull** button.
354+
355+
**Enable it:** `/manage`**⚙️ Features****✅ Enable image updates**. Because the check only runs at startup, the bot restarts itself to apply the change.
356+
357+
What you'll see:
358+
359+
```
360+
🔄 Image updates available (3)
361+
362+
• radarr — linuxserver/radarr:latest
363+
• sonarr — linuxserver/sonarr:latest
364+
• plex — plexinc/pms-docker:latest
365+
366+
[⬇️ Pull radarr] [⬇️ Pull sonarr] [⬇️ Pull plex]
367+
```
368+
369+
Tapping **Pull** runs the same confirm-then-recreate flow as `/pull`, preserving all container settings. The same update isn't re-announced after a restart.
370+
371+
**In `config.yaml`:**
372+
373+
```yaml
374+
image_updates:
375+
enabled: true
376+
poll_interval_hours: 24 # minimum 1
377+
```
378+
379+
### Auto-Heal
380+
381+
Automatically restarts a container when it reports an unhealthy Docker HEALTHCHECK — useful for apps that occasionally wedge but recover on a restart. A **storm guard** stops restart loops: after `max_restarts` attempts within `window_minutes`, it gives up and sends an escalation alert instead of restarting forever. Protected containers are never auto-healed.
382+
383+
**Enable it:** `/manage` → **⚙️ Features** → **🩹 Configure auto-heal**, then tap to select which containers should be healed. Tap **💾 Save** — this applies live, with no restart.
384+
385+
**In `config.yaml`:**
386+
387+
```yaml
388+
auto_heal:
389+
enabled: true
390+
containers:
391+
- radarr
392+
- sonarr
393+
max_restarts: 3 # give up after this many restarts in the window
394+
window_minutes: 60 # rolling window for the restart count
395+
```
396+
397+
When auto-heal gives up on a container, you get an alert so you can investigate manually rather than the bot silently looping.
334398

335399
---
336400

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "unraid-monitor-bot"
3-
version = "0.15.0"
3+
version = "0.15.1"
44
requires-python = ">=3.11"
55
dependencies = [
66
"docker>=7.0.0,<8.0.0",

src/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.15.0"
1+
__version__ = "0.15.1"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)