Eugene
45b74fb56c
fix(telegram): move network fallback to resolver-scoped dispatchers ( #40740 )
...
Merged via squash.
Prepared head SHA: a4456d48b4
Co-authored-by: sircrumpet <4436535+sircrumpet@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-03-10 11:28:51 +05:30
Vincent Koc
7b88249c9e
fix(telegram): bridge direct delivery to internal message:sent hooks ( #40185 )
...
* telegram: bridge direct delivery message hooks
* telegram: align sent hooks with command session
2026-03-09 11:21:19 -07:00
Tyson Cung
4d501e4ccf
fix(telegram): add download timeout to prevent polling loop hang ( #40098 )
...
Merged via squash.
Prepared head SHA: abdfa1a35f
Co-authored-by: tysoncung <45380903+tysoncung@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-03-09 08:29:21 +05:30
Peter Steinberger
e7056272bc
refactor(telegram): centralize text parsing helpers
2026-03-08 02:16:03 +00:00
Harold Hunt
d58dafae88
feat(telegram/acp): Topic Binding, Pin Binding Message, Fix Spawn Param Parsing ( #36683 )
...
* fix(acp): normalize unicode flags and Telegram topic binding
* feat(telegram/acp): restore topic-bound ACP and session bindings
* fix(acpx): clarify permission-denied guidance
* feat(telegram/acp): pin spawn bind notice in topics
* docs(telegram): document ACP topic thread binding behavior
* refactor(reply): share Telegram conversation-id resolver
* fix(telegram/acp): preserve bound session routing semantics
* fix(telegram): respect binding persistence and expiry reporting
* refactor(telegram): simplify binding lifecycle persistence
* fix(telegram): bind acp spawns in direct messages
* fix: document telegram ACP topic binding changelog (#36683 ) (thanks @huntharo)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com >
2026-03-06 02:17:50 +01:00
Ayaan Zaidi
1ded5cc9a9
fix: guard malformed Telegram replies and pass hook accountId
2026-03-03 17:01:04 +05:30
Ayaan Zaidi
5b8fc68ea2
fix(telegram): include reply hook metadata
2026-03-03 16:56:20 +05:30
KimGLee
9830b7c298
fix(telegram): mark message_sent success only when delivery occurred
2026-03-03 16:56:20 +05:30
KimGLee
6d118ab815
fix(telegram): run outbound message hooks in reply delivery path
2026-03-03 16:56:20 +05:30
scoootscooob
de09ca149f
fix(telegram): use retry logic for sticker getFile calls ( #32349 )
...
The sticker code path called ctx.getFile() directly without retry,
unlike the non-sticker media path which uses resolveTelegramFileWithRetry
(3 attempts with jitter). This made sticker downloads vulnerable to
transient Telegram API failures, particularly in group topics where
file availability can be delayed.
Refs #32326
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-03 01:00:31 +00:00
Peter Steinberger
d7dda4dd1a
refactor: dedupe channel outbound and monitor tests
2026-03-03 00:15:15 +00:00
Peter Steinberger
ea3b7dfde5
fix(channels): normalize MIME kind parsing and reaction fallbacks
2026-03-02 23:48:11 +00:00
bmendonca3
317075ef3d
telegram: route dm sessions by sender id
2026-03-02 22:08:07 +00:00
Peter Steinberger
3a08e69a05
refactor: unify queueing and normalize telegram slack flows
2026-03-02 20:55:15 +00:00
Kay-051
da05395c2a
fix(telegram): preserve original filename from Telegram document/audio/video uploads
...
The downloadAndSaveTelegramFile inner function only used the server-side
file path (e.g. "documents/file_42.pdf") or the Content-Disposition
header (which Telegram doesn't send) to derive the saved filename.
The original filename provided by Telegram via msg.document.file_name,
msg.audio.file_name, msg.video.file_name, and msg.animation.file_name
was never passed through, causing all inbound files to lose their
user-provided names.
Now downloadAndSaveTelegramFile accepts an optional telegramFileName
parameter that takes priority over the fetched/server-side name.
The resolveMedia call site extracts the original name from the message
and passes it through.
Closes #31768
Made-with: Cursor
2026-03-02 20:36:39 +00:00
Peter Steinberger
e1f3ded033
refactor: split telegram delivery and unify media/frontmatter/i18n pipelines
2026-03-02 04:14:06 +00:00
Peter Steinberger
c0bf42f2a8
refactor: centralize delivery/path/media/version lifecycle
2026-03-02 04:04:36 +00:00
Peter Steinberger
ede944371f
fix(telegram): land #31067 first-chunk voice-fallback reply refs (@xdanger)
...
Landed from contributor PR #31067 by @xdanger.
Co-authored-by: Kros Dai <xdanger@gmail.com >
2026-03-02 03:50:09 +00:00
Ayaan Zaidi
c13b35b83d
feat(telegram): improve DM topics support ( #30579 ) (thanks @kesor)
2026-03-02 09:06:45 +05:30
Peter Steinberger
493ebb915b
refactor: simplify telegram delivery and outbound session resolver flow
2026-03-02 03:09:40 +00:00
Peter Steinberger
e4e5d9c98c
fix(model): land #30932 auth-profile @ parsing for /model (@haosenwang1018)
...
Landed from contributor PR #30932 by @haosenwang1018.
Co-authored-by: haosenwang1018 <haosenwang1018@users.noreply.github.com >
2026-03-02 03:05:03 +00:00
liuxiaopai-ai
e6e3a7b497
fix(telegram): retry DM thread sends without message_thread_id [AI-assisted]
2026-03-02 02:58:15 +00:00
Peter Steinberger
ef9085927b
test: cover voice fallback first-chunk reply behavior ( #31077 )
2026-03-02 02:57:10 +00:00
scoootscooob
2a381e6d7b
fix(telegram): replyToMode 'first' now only applies reply-to to first chunk
...
The `replyToMessageIdForPayload` was computed once outside the chunk
and media loops, so all chunks received the same reply-to ID even when
replyToMode was set to "first". This replaces the static binding with
a lazy `resolveReplyTo()` function that checks `hasReplied` at each
send site, and updates `hasReplied` immediately after the first
successful send.
Fixes #31039
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 02:57:10 +00:00
SidQin-cyber
60f8e832e0
fix(telegram): handle sendVoice caption-too-long by resending without caption
...
When TTS text exceeds Telegram's 1024-char caption limit, sendVoice
throws "message caption is too long" and the entire reply (voice +
text) is lost. Now catch this specific error, resend the voice note
without caption, then deliver the full text as a separate message.
Closes #30980
Made-with: Cursor
2026-03-02 02:07:57 +00:00
Peter Steinberger
bce643a0bd
refactor(security): enforce account-scoped pairing APIs
2026-02-26 21:57:52 +01:00
Ayaan Zaidi
470c606dac
refactor(telegram): remove dmPolicy from group allow context helper
2026-02-26 09:21:54 +05:30
bmendonca3
c7352f6b3f
security(telegram): fail closed group allowlist against DM pairing store
2026-02-26 09:21:54 +05:30
Ayaan Zaidi
f154926cc0
fix: land telegram empty-html fallback hardening ( #25096 ) (thanks @Glucksberg)
2026-02-24 22:34:21 +05:30
Ayaan Zaidi
6e31bca198
fix(telegram): fail loud on empty text fallback
2026-02-24 22:34:21 +05:30
Glucksberg
566a8e7137
chore(telegram): suppress handled empty-text retry logs
2026-02-24 22:34:21 +05:30
Glucksberg
51b3e23680
fix(telegram): fallback to plain text when threaded markdown renders empty
...
Minimal fix path for Telegram empty-text failures in threaded replies.
- fallback to plain text when formatted htmlText is empty
- retry plain text on parse/empty-text API errors
- add focused regression test for threaded mode case
Related: #25091
Supersedes alternative fix path in #17629 if maintainers prefer minimal scope.
2026-02-24 22:34:21 +05:30
Peter Steinberger
803e02d8df
fix: adapt landed fixups to current type and approval constraints
2026-02-24 04:20:30 +00:00
Peter Steinberger
dd14daab15
fix(telegram): allowlist api.telegram.org in media SSRF policy
2026-02-24 04:20:30 +00:00
Peter Steinberger
3af9d1f8e9
fix: scope Telegram RFC2544 SSRF exception to policy opt-in ( #24982 ) (thanks @stakeswky)
2026-02-24 03:28:00 +00:00
Marcus Castro
337eef55d7
fix(telegram): link forwarded messages with comments ( #9720 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 5f81061b5f
Co-authored-by: mcaxtr <7562095+mcaxtr@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-02-22 21:23:56 +05:30
Peter Steinberger
d116bcfb14
refactor(runtime): consolidate followup, gateway, and provider dedupe paths
2026-02-22 14:08:51 +00:00
Peter Steinberger
2d2e1c2403
test(core): use lightweight clear in cron, claude runner, and telegram delivery specs
2026-02-22 08:35:38 +00:00
Peter Steinberger
0511e28a27
test(ui): use lightweight clears in theme and telegram media retry setup
2026-02-22 08:01:16 +00:00
Peter Steinberger
75c1bfbae8
refactor(channels): dedupe message routing and telegram helpers
2026-02-22 07:44:57 +00:00
Peter Steinberger
0bd9f0d4ac
fix: enforce strict allowlist across pairing stores ( #23017 )
2026-02-22 00:00:23 +01:00
Peter Steinberger
73d93dee64
fix: enforce inbound media max-bytes during remote fetch
2026-02-21 23:02:29 +01:00
Peter Steinberger
2c14b0cf4c
refactor(config): unify streaming config across channels
2026-02-21 19:53:42 +01:00
Ayaan Zaidi
8b1fe0d1e2
fix(telegram): split streaming preview per assistant block ( #22613 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 26f35f4411
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-02-21 18:05:23 +05:30
Ayaan Zaidi
677384c519
refactor: simplify Telegram preview streaming to single boolean ( #22012 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: a4017d3b94
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-02-21 15:19:13 +05:30
mudrii
beb2b74b5b
fix(telegram): prevent silent message loss across all streamMode settings ( #19041 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 82898339f0
Co-authored-by: mudrii <220262+mudrii@users.noreply.github.com >
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com >
Reviewed-by: @obviyus
2026-02-20 10:46:55 +05:30
Peter Steinberger
03241498f9
test: table-drive telegram thread param cases
2026-02-18 23:22:26 +00:00
Peter Steinberger
b704bad8f3
test: merge telegram thread id normalization assertions
2026-02-18 22:47:28 +00:00
Peter Steinberger
7ebd213acf
perf(test): dedupe telegram thread cases and tighten PTY timer
2026-02-18 22:29:31 +00:00
Peter Steinberger
dfdeeaf4b9
perf(test): speed up telegram media retry tests
2026-02-18 22:21:05 +00:00