Commit Graph

1347 Commits

Author SHA1 Message Date
Ayaan Zaidi
306b51011f fix(telegram): handle legacy rotated offsets 2026-05-13 10:12:31 +05:30
sxxtony
cb93c0f8f5 fix(telegram): factor offset rotation handling into typed surfaces
Builds on the prior commit by introducing the typed surfaces the rest of
the plugin (and `openclaw doctor`-style consumers) can reuse:

- `inspectTelegramUpdateOffset` returns a discriminated union
  (`absent | valid | rotated`) so callers can act on the rotation event
  without re-implementing the bot-id / fingerprint comparison.
  `readTelegramUpdateOffset` is now a thin adapter over it.
- `TelegramOffsetRotationReason` is exported as a named type alias so
  downstream code can switch over it exhaustively.
- New `TelegramOffsetRotationHandler` class encapsulates the
  "log warning + delete stale file" side effect that the monitor needs at
  startup, plus a `createTelegramOffsetRotationHandler` factory and a
  pure `formatTelegramOffsetRotationMessage` helper used to keep the
  wording consistent.
- `monitor.ts` now constructs the handler once per polling startup
  instead of inlining the closure, and the new surfaces are re-exported
  through `monitor-polling.runtime.ts`.

Unit coverage:
  pnpm test extensions/telegram/src/update-offset-store.test.ts \
            extensions/telegram/src/offset-rotation-handler.test.ts \
            extensions/telegram/src/monitor.test.ts
2026-05-13 10:12:31 +05:30
sxxtony
290d3879eb fix(telegram): detect same-bot token rotation via fingerprinted offset state
Closes #80653.

Persist a non-reversible SHA-256 fingerprint of the bot token alongside the
bot id in the long-poll update offset store (version 3). On read, treat the
persisted offset as stale when the fingerprint diverges from the current
token, even when the bot id still matches. This covers the BotFather
`/revoke` case where the bot id is unchanged but the secret rotates -- the
in-process update tracker would otherwise silently skip any new updates
whose `update_id` is `<=` the restored watermark.

The legacy v2 (bot-id-only) layout still parses, and offsets are preserved
when the bot id matches so existing installs don't lose a watermark on
upgrade; the next persistence upgrades the file to v3 and enables rotation
detection going forward.

`readTelegramUpdateOffset` now reports each rotation through a new
`onRotationDetected` callback. `monitor.ts` uses it to log a clear warning
naming the previous/new bot id and the discarded offset, and to delete the
stale file rather than waiting for the first update to overwrite it.

Acceptance suites pass:
  pnpm test extensions/telegram/src/update-offset-store.test.ts \
            extensions/telegram/src/bot-update-tracker.test.ts \
            extensions/telegram/src/monitor.test.ts \
            extensions/telegram/src/bot.create-telegram-bot.test.ts \
            extensions/telegram/src/token.test.ts \
            extensions/telegram/src/polling-lease.test.ts
2026-05-13 10:12:31 +05:30
Peter Steinberger
a4514860e5 test: dedupe telegram command mock reads 2026-05-13 04:06:53 +01:00
Peter Steinberger
a5f5504b0d test: dedupe telegram monitor mock reads 2026-05-13 04:05:30 +01:00
Peter Steinberger
b3260b1d15 test: dedupe telegram media mock reads 2026-05-13 03:55:27 +01:00
Peter Steinberger
b8a27720f2 test: dedupe telegram gateway mock reads 2026-05-13 03:47:20 +01:00
Peter Steinberger
cb613022ff test: dedupe telegram send mock reads 2026-05-13 03:42:22 +01:00
Shakker
6890ef4952 test: reserve telegram fallback assertions 2026-05-12 21:37:25 +01:00
Shakker
178a50e017 test: triage telegram status issues 2026-05-12 21:30:11 +01:00
Shakker
dbf5b213af test: mute telegram account warning scan 2026-05-12 21:24:26 +01:00
Shakker
2b2d696f89 test: vet telegram markdown chunks 2026-05-12 21:21:46 +01:00
Shakker
6e562f5163 test: order telegram updates 2026-05-12 18:56:08 +01:00
Peter Steinberger
0f390fc820 test: dedupe telegram bot mock reads 2026-05-12 18:06:03 +01:00
Peter Steinberger
4f1bee9f8b test: dedupe telegram send mock calls 2026-05-12 16:54:31 +01:00
Peter Steinberger
cb957fe0d2 test: dedupe telegram delivery mock calls 2026-05-12 16:44:58 +01:00
Peter Steinberger
d24254ef5f test: dedupe telegram bot mock call 2026-05-12 16:17:54 +01:00
Peter Steinberger
094f6d83c7 test: dedupe telegram dispatch mock calls 2026-05-12 15:38:59 +01:00
Peter Steinberger
26afc763b3 test: dedupe telegram command menu mock calls 2026-05-12 15:37:11 +01:00
Peter Steinberger
f4ae21cb0a test: dedupe telegram channel post mock calls 2026-05-12 15:33:06 +01:00
Peter Steinberger
2bfbe25239 test: dedupe telegram fetch mock calls 2026-05-12 15:30:17 +01:00
Peter Steinberger
2298889cb9 test: dedupe telegram session metadata mock calls 2026-05-12 15:09:56 +01:00
Peter Steinberger
45a8a25947 test: dedupe telegram media e2e mock calls 2026-05-12 14:07:05 +01:00
Peter Steinberger
fe0e2e6f41 test: dedupe telegram native command mock calls 2026-05-12 13:38:34 +01:00
Ayaan Zaidi
5abb4b18c8 fix(telegram): simplify context boundary plumbing 2026-05-12 16:40:42 +05:30
VACInc
afd7339bd2 fix telegram context session start boundary 2026-05-12 16:40:42 +05:30
VACInc
b31afcbc17 fix telegram context reset boundary 2026-05-12 16:40:42 +05:30
Peter Steinberger
0586da70db test: guard telegram bot core mock calls 2026-05-12 11:50:44 +01:00
Peter Steinberger
aa9799320d test: guard telegram bot mock calls 2026-05-12 11:42:50 +01:00
Peter Steinberger
abd2ba1fe0 test: guard telegram send mock calls 2026-05-12 11:40:13 +01:00
Peter Steinberger
4bc47a3a75 test: guard telegram delivery mock calls 2026-05-12 11:37:03 +01:00
Peter Steinberger
97b9d77196 test: guard extension runtime mock calls 2026-05-12 11:24:21 +01:00
Ayaan Zaidi
f6adc78f06 fix(telegram): keep durable html unsanitized 2026-05-12 15:54:01 +05:30
Ayaan Zaidi
b480b29dc7 fix(telegram): preserve supported html replies 2026-05-12 15:54:01 +05:30
Peter Steinberger
6a230a108a test: guard extension messaging mock calls 2026-05-12 11:15:37 +01:00
Peter Steinberger
17237fc44f test: align release validation expectations 2026-05-12 10:32:29 +01:00
Peter Steinberger
22667fb096 test: guard messaging extension mock calls 2026-05-12 10:16:36 +01:00
Peter Steinberger
f6d787cc5c build: hard-pin dependency specs 2026-05-12 07:10:13 +01:00
Peter Steinberger
c98698aa0e chore: release 2026.5.12-beta.1 2026-05-12 06:33:41 +01:00
Shakker
cb9881423d test: specify telegram file-ref chunks 2026-05-12 00:14:45 +01:00
Shakker
919ba6c70c test: remove redundant telegram command check 2026-05-12 00:10:20 +01:00
Shakker
c0601f955e test: specify telegram model keyboard 2026-05-12 00:08:46 +01:00
Shakker
7cd9e43979 test: specify telegram send action result 2026-05-12 00:06:57 +01:00
Shakker
e847e0f2dd test: specify telegram command menu registrations 2026-05-12 00:02:33 +01:00
Josh Lehman
24ffd4d2f8 Telegram: keep verbose tool results separate from final answers (#80294)
* Telegram: keep tool progress separate from final answers

* Telegram: separate verbose tool results from final answers

* fix: separate Telegram verbose tool drafts
2026-05-11 15:21:19 -07:00
Peter Steinberger
c4abfa6a9e test: reset telegram message cache directly 2026-05-11 21:39:00 +01:00
Peter Steinberger
faa74ac1e8 test: guard extension channel helpers 2026-05-11 21:04:13 +01:00
Peter Steinberger
63af3bcfdb test: guard remaining truthiness assertions 2026-05-11 20:45:49 +01:00
Peter Steinberger
ad1e6c4485 test: guard telegram helper assertions 2026-05-11 19:55:21 +01:00
Peter Steinberger
0793775a66 test: guard channel provider helpers 2026-05-11 19:41:21 +01:00