--- snapshot-1793119392+++ snapshot-1794491073@@ -4,7 +4,116 @@ \__|_||_\__,_|_||_\__, \___\__,_\___|\__\___\__|\__|_\___/_||_(_)_\___/ |___/ -HEAD / 2026-10-26 15:55:33 +0100: +HEAD / 2026-11-12 10:23:42 +0100: + - fix: keep jinja2 blocks intact when splitting tags from imported URLs (#1516) (#4259) + - Third-party licences - regenerate docs/THIRD-PARTY-LICENSES.md: the packages in the 0.70.3 release image (#4714) + + - 0.70.3 + - Apprise notifications 2.2.0 - Update requirements.txt + - Plugin hooks for changing the request and per-watch plugin settings (#4712) + - Plugins - one core watch_last_viewed_updated hook for every "watch was viewed" path (#4711) + - Mark a restock watch as viewed when its watch list chart is opened (#4698) + - Update ruff requirement from >=0.17.3 to >=0.17.4 (#4710) + - Update pydantic requirement from <3.0,>=2.14.2 to >=2.14.3,<3.0 (#4704) + - Update authlib requirement from <2.0,>=1.9.4 to >=1.9.5,<2.0 (#4706) + - LLM - Don't log a misleading SSRF "refused" warning when classifying a local LLM endpoint (#4700) (#4708) + - MCP OAuth - ChatGPT can sign in: private_key_jwt client authentication (RFC 7523) (#4707) + - UI - Notifications - String tweak + - UI - Notifications - Add apprise info string back + - Update selenium requirement from ~=4.51.0 to ~=4.52.0 (#4702) + - Update python-socketio requirement from <6,>=5.17.0 to >=5.18.1,<6 (#4701) + - Update jsonpath-ng requirement from ~=1.14.0 to ~=1.16.0 (#4703) + - Update ruff requirement from >=0.17.2 to >=0.17.3 (#4691) + - Update pydantic requirement from <3.0,>=2.14.1 to >=2.14.2,<3.0 (#4690) + - Update flask-socketio requirement from <6,>=5.7.0 to >=5.7.2,<6 (#4689) + - Update python-engineio requirement from <5,>=4.14.0 to >=4.15.1,<5 (#4693) + - Update pytest requirement from ~=9.1 to ~=9.2 (#4692) + + - 0.70.2 + - API - Watch list and search show each watch's paused and notification_muted (#4685) (#4686) + - UI - AI settings - API key field could not be typed in (readonly was never removed) (#4687) + - AI settings - saving no longer switches off checkboxes the page didn't show (#4682) (#4683) + - MCP - "Allow read-only access without sign-in" setting, for public demos (#4680) + - MCP plugins - their own permission rows (register_mcp_permission_rows), a tool 'area', and open_world (#4679) + - MCP - Clearer tool descriptions: when to use list_tags / list_notifications / notification_services / restock_status, and what limit/offset do (#4678) + - CI - Third-party licence list: regenerate weekly and on release, drift is only a warning on PRs (#4684) + - Fix races behind flaky tests: favicon cache, a new monitor queued twice, first checks before the page or config is ready, queue tests and the worker health check (#4681) + - gitignore: local AI configs to avoid credential leaks (#4677) + - MCP - "Public MCP address" setting, separate from the notification Base URL (#4676) + - Clear history - don't fail when a save renames its .tmp file away mid-clear (#4674) + - MCP OAuth - Claude Code can sign in: loopback redirect URIs match on any port (RFC 8252 7.3) (#4673) + - MCP - More monitor settings, test notifications, word diffs, and permission rows for notifications and browser steps (#4669) + - MCP - "MCP Note" settings sub-tab, set what assistants are told when they connect (#4670) + + - 0.70.1 + - Update README.md + - MCP - New tool - List watches history stats (#4667) + - UI - Fixing popular notification services + - UI - Minor dark mode improvements + - UI - Misc style tweaks + - MCP helper texts (#4666) + - MCP oauth consent dialog cleanup (#4665) + - MCP OAuth - the consent form posts back under the sub-path (Allow gave a 404 behind a proxy) (#4664) + - MCP OAuth - authorization server metadata also at {issuer}/.well-known/openid-configuration, so installs under a sub-path are found (#4663) + - MCP - OAuth 2.1 sign-in, so claude.ai and ChatGPT in the browser can connect (#4662) + - LLM - Empty or unparsable intent evaluation passes the change through instead of suppressing it (#4661) + - Notifications - Markdown to HTML conversion applied per notification URL (#4619) (#4641) + - i18n - Restock & Price Detection (and Screenshot Comparison) tab help text is now translatable (#4612) (#4660) + - UI - Fixing notifications sidebar active state + - LLM - Thinking budget "Off" also switches thinking off for Claude Haiku/Sonnet 5.x (#4658) + - Tests - AI/MCP sub-tab links end in #overview, regenerate THIRD-PARTY-LICENSES.md (#4659) + - Tests - minor tweak for random failure due to timeout + - UI - AI/LLM/MCP sub-tabs should always land you on #overview first step. + - API - Support for systeminfo to report what processors are available - good for using with plugins (like the chrome extension) + - Restock - Use 'Filters & Triggers' to pick the price when auto-detection fails (#2707) (#4657) + - Notification UI - Use pretty shortcut icons for popular notification services ( Discord, pushover, ntfy, telegram, home-assistant etc) + - LLM - Claude 5.x thinks by default: give it reasoning headroom and skip temperature (#4656) + - Notifications UI - added "list all" dropdown + - Notifications - Minor tweaks to text and options on notification setup UI + - MCP - history tools , line_timeline, restock_status, find_change etc (#4653) + - Plugins - select_fetch_backend and recheck_seconds_override hooks, with a fallback fetcher example plugin (#4652) + - MCP - history tools round 2: line_timeline, every match in find_change, price history in restock_status (#4650) + - MCP - history tools: list_snapshots, find_change (Watch.find_change) and get_history (snapshots as diffs) (#4649) + - Docs - Use explicit container registry (#4648) + - MCP server at /mcp, plus GET /api/v1/changes, so AI assistants can use changedetection.io (#4636) + - AI - Remove the unused llm_prefilter (AI CSS pre-filter) and its setup call (#4646) + - LLM restock: never strip / as site chrome (a class like Amazon's "mn-nav-stripe-moved" wiped the whole page) (#4644) + - LLM restock - keep the whole page when site-chrome removal would take nearly all of it, log when nothing is left (#4647) + - AI settings - Load models / Test connection work for a keyless server (Ollama) at an address not saved yet (#4645) + - LLM - "Switch thinking off" option for Ollama and OpenAI-compatible servers (llama.cpp, vLLM, LM Studio) (#4638) (#4643) + - Bumping licences + - Restock - Prices in the visitor's language with the currency's own decimal places (ISO 4217), the same on every page (#4615) (#4640) + - Datastore - startup checks run for every datastore again (removepassword.lock, missing RSS/API tokens, app_guid, version_tag) (#4639) + - Settings - AI / LLM settings get their own page at /settings/llm, linked from the left sidebar (#4637) + - API - systeminfo overdue_watches no longer lists paused watches (#4607) (#4635) + - Plugins - register_blueprints hook so plugins can mount their own Flask blueprints (#4632) + - Notifications - setup widget, pick a service and fill in a few fields instead of writing Apprise URLs by hand (#4634) + - Update jsonpath-ng requirement from ~=1.13.0 to ~=1.14.0 (#4628) + - Notifications - post:// get:// etc, a header with capitals (?+X-Key=...) was also sent as a query parameter (#4633) + - Bump apprise from 2.0.1 to 2.1.0 (#4627) + - Test fix - Related to filter failure counter #4620 #4624 #3507 + - Bump docker/login-action from 4.6.0 to 4.7.0 in the all group (#4629) + - API Examples (#4625) + - Bug: Successful checks always reset the filter failure streak, "no text found" records last_check_status (#4620) (#4624) + - Bug: A watch that was fine (200) and then starts getting 403 must not keep reporting the old 200 (#4606) + - Example plugins - API fetcher and check stats, watch list notes hook, update_finalize fix (#4622) + - Example plugins - Each example is a standalone `pip install .` package, README per example + - API - Extend 'processor' API - Current restock price/stock state in watch GET and list (processor_state_{processor_name}) (#4621) + - Watch memory - share one read-only copy of identical time_schedule_limit values (#4602) + - Update README.md + - Bumping NOTICE and ensuring compatibility (#4618) + - Bump the Contributors to a grid of links from contrib.rocks + - Elementpath - Remove custom code and reuse existing function + - README - Updating banner + - Important HTML->text library update (inscriptis) fixes memory use expansion caused by tables, remove phantom whitespaces from selected elements, may cause whitespace changes. + - Scheduler - It may have been possible to import/restore/API update watches without 'use default schedule' set and a null recheck schedule causing excessive page fetching. (#4617) + - README - Link to LLM key setup tutorial + - README - Updating screenshot + - Backups - Ability to select multiple .ZIPs of the watch data to restore (#4616) + - UI - Name the diff minimap so it reads as where, not when (#4613) + - Read the element locking scripts as UTF-8 (#4614) + - i18n: Extract restock strings and add ja translations (#4608) + - Update wtforms requirement from ~=3.2 to ~=3.3 (#4610) - Update jsonpath-ng requirement from ~=1.12.0 to ~=1.13.0 (#4603) - Update ruff requirement from >=0.17.1 to >=0.17.2 (#4604)