# Changelog All notable changes to the **AI Responder** plugin are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this plugin adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The version here always matches `manifest.json`'s `version`. ## [Unreleased] ## [0.1.6] - 2026-11-10 ### Fixed - Skip forwarded messages (`isForwarded`), reject query strings and fragments in `apiBaseUrl`, strip multiple trailing slashes when building the `/chat/completions` URL, and guard against replies that become empty after Markdown conversion. ### Changed - Align plugin metadata with OpenWA v0.30.0. ## [0.1.5] - 2026-11-08 ### Changed - Align plugin metadata with OpenWA v0.29.1. ## [0.1.4] - 2026-11-06 ### Changed - Align plugin metadata with OpenWA v0.29.0. ## [0.1.3] - 2026-10-31 ### Changed - Align plugin metadata with OpenWA v0.27.0. ## [0.1.2] - 2026-10-28 ### Changed - Align plugin metadata with OpenWA v0.26.0. - Document that a per-session override that points `apiBaseUrl` at another origin must also set `apiKey`, which OpenWA 0.26.0 no longer inherits. ## [0.1.1] - 2026-10-15 ### Changed - Align plugin metadata with OpenWA v0.25.0 and complete dashboard translations for all supported locales. ## [0.1.0] - 2026-09-24 ### Added - Answers inbound WhatsApp messages with a reply from any OpenAI-compatible Chat Completions API (`apiBaseUrl`, `apiKey`, `model`, optional `systemPrompt`), sent as a quoted reply. - Single-turn: each message is sent on its own, with no conversation history. - Replies converted from Markdown to WhatsApp formatting. - Runs at hook priority 97, after every other responder, and claims each message it answers. - The provider call runs off the hook, so a slow provider never delays message delivery. - Hourly limits per chat (`maxRepliesPerChatPerHour`) and per session (`maxRepliesPerSessionPerHour`), kept in memory, and at most eight provider calls open at once. - Bounded cost per message: input cut to `maxInputChars`, output capped by `maxOutputTokens`, request timeout `timeoutMs`. - Skips its own messages, contact cards, polls, orders, product cards, locations, channels, broadcasts, messages delivered more than five minutes late, and redeliveries; groups only with `respondInGroups`. - `apiBaseUrl` must be https; http only for a loopback host.