Releases
v1.3.0
Compare
Sorry, something went wrong.
No results found
1.3.0 (2026-09-08)
Features
bridge: bound and cancel automatic media downloads (#348 ) (4c5ed3b ), closes #320
bridge: cache group rosters in a group_members table (#327 ) (3f51ce6 )
bridge: mark a whole chat read without listing message IDs (#304 ) (ff2745f ), closes #291
bridge: store mentions and expose the owner identity (#326 ) (952afc8 )
mcp: a per-tool latency histogram on /metrics (#359 ) (0bbb1eb ), closes #322
mcp: bridge_status reports the published endpoint certificate expiry (#300 ) (a2e54d7 ), closes #277
mcp: bridge_status reports whether whisper is available (#295 ) (1a99299 ), closes #284
mcp: chat_jid takes a list, exclude_chat_jid mirrors it, message_stats counts a query (#303 ) (40320d4 ), closes #289
mcp: coverage reports the voice-note transcription backlog (#363 ) (42141f4 ), closes #334
mcp: coverage takes a window and lists which chats to backfill (#311 ) (56c900c )
mcp: get_contact_chats includes the groups a contact belongs to (#340 ) (8aad048 ), closes #288
mcp: mark a chat handled or snoozed so list_unanswered stops repeating it (#328 ) (52d1213 ), closes #287
mcp: mentions_me filter and group mentions in triage (#330 ) (d763f48 )
mcp: notes for chats, contacts and messages (#306 ) (58319eb )
mcp: notes inline in listings, compact for append keys (#308 ) (b473bf5 ), closes #286
mcp: rank audio hits with an FTS5 index over transcripts (#299 ) (85b5a73 ), closes #275
mcp: read_media returns the file's bytes, not a server path (#325 ) (217365f )
mcp: read_media(as_text=True) reads PDF, DOCX and XLSX as text (#329 ) (6f6863c )
mcp: return the name a contact gave themselves beside the one you saved (#310 ) (9ac3ffa ), closes #280
mcp: sanitise name fields instead of wrapping them (#302 ) (4cf4c12 ), closes #273
mcp: TRANSCRIBE_ON_INGEST can fetch uncached voice notes (#296 ) (3f52ae0 ), closes #276
mcp: triage filters on list_unread, min_messages on list_unanswered (#358 ) (4fb46cc )
Bug fixes
bridge: one canonical UTC spelling for every stored timestamp (#297 ) (2e525da )
bridge: one media transfer per destination file (#345 ) (b9a1a35 ), closes #319
bridge: repair timestamps an older bridge wrote after the migration (#352 ) (9a651ab ), closes #335
bridge: the StreamReplaced delay is a Bridge field, and CI runs -race (#365 ) (a2669e4 )
mcp: a page size below 1 is refused instead of paging forever (#356 ) (da8d2e6 ), closes #309
mcp: denying download_media stops the implicit fetches too (#362 ) (97a9e7e ), closes #350
mcp: every matching transcript is a candidate, so a scoped count is exact (#343 ) (ba90a03 ), closes #316
mcp: keep LIDs out of the phone-number fields (#305 ) (34401ab ), closes #281
mcp: note searches walk their matches in bounded batches (#353 ) (5887c24 ), closes #315
mcp: one listing row for a contact known under both spellings (#364 ) (f056003 )
mcp: page messages on the full store key so forwarded copies are not skipped (#342 ) (c0d5c7a ), closes #313
mcp: sanitise and wrap the group topic and the poll question (#360 ) (a1540f6 ), closes #332
mcp: shape list_chats, and refuse arguments no tool declares (#307 ) (15acb59 ), closes #282
mcp: the ingest walk advances past audio it cannot read (#347 ) (1194e74 ), closes #314
mcp: the ingest worker obeys the tool policy (#349 ) (d14b249 ), closes #331
Performance
mcp: context windows seek the neighbours instead of ranking the chat (#344 ) (a5731e7 ), closes #312
mcp: count a media page's copies instead of the whole archive (#354 ) (81f0379 ), closes #317
mcp: find a transcript's index entry by rowid instead of reading the index (#346 ) (145bb5b ), closes #321
mcp: look a cached file up by name instead of scanning the chat (#357 ) (4dbfd3d ), closes #318
You can’t perform that action at this time.