morethanwords/tweb/master • e95fe52 • 1 files, +5/-1
Keep personal account in paid-reaction send-as list
channels.getSendAs(for_paid_reactions=true) omits the personal account;
the client injects it as the default peer. But this.sendAsPeers — the
canonical pool every click handler rebuilds the menu from — was sliced
before that injection, so the personal account was missing from it. The
menu rendered correctly on first open (built from the local list), but
the first selection regenerated it from this.sendAsPeers and dropped the
personal account permanently. Save this.sendAsPeers after folding in the
current/default peer.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 07f7288 • 9 files, +214/-51
Notify when another user posts a story
Add a local notification when a peer you follow posts a new story, mirroring the message-notification pipeline: the worker dispatches a notificationBuild task carrying a story payload (discriminated union) and the main thread builds and shows it. Respects the existing per-peer/global stories_muted setting, skips own/out/already-read stories, and covers the uncached-peer path so a peer's very first story still notifies.
Story notifications play no sound and don't bump the tab-title counter (noIncrement). Clicking opens the peer's stories at the first unread (matching Android and the avatar tap): in-page directly, on the service-worker/background-push path via a custom.story_id marker, and cross-account via a new 'story' hash param.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Keep personal account in paid-reaction send-as list
channels.getSendAs(for_paid_reactions=true) omits the personal account;
the client injects it as the default peer. But this.sendAsPeers — the
canonical pool every click handler rebuilds the menu from — was sliced
before that injection, so the personal account was missing from it. The
menu rendered correctly on first open (built from the local list), but
the first selection regenerated it from this.sendAsPeers and dropped the
personal account permanently. Save this.sendAsPeers after folding in the
current/default peer.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 07f7288 • 9 files, +214/-51
Notify when another user posts a story
Add a local notification when a peer you follow posts a new story, mirroring the message-notification pipeline: the worker dispatches a notificationBuild task carrying a story payload (discriminated union) and the main thread builds and shows it. Respects the existing per-peer/global stories_muted setting, skips own/out/already-read stories, and covers the uncached-peer path so a peer's very first story still notifies.
Story notifications play no sound and don't bump the tab-title counter (noIncrement). Clicking opens the peer's stories at the first unread (matching Android and the avatar tap): in-page directly, on the service-worker/background-push path via a custom.story_id marker, and cross-account via a new 'story' hash param.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡3
telegramdesktop/tdesktop/dev • 4943c41 • 9 files, +16/-38
Get rid of new Q_OS_LINUX
telegramdesktop/tdesktop/dev • 3447020 • 1 files, +3/-2
Make macOS packaged cache key more stable
telegramdesktop/tdesktop/dev • 22143a8 • 1 files, +15/-3
Per-week cache key for ccache on Linux action
telegramdesktop/tdesktop/dev • 734d709 • 3 files, +32/-1
Allow to override ffmpeg thread count for debugging purposes
#tdesktop
Get rid of new Q_OS_LINUX
telegramdesktop/tdesktop/dev • 3447020 • 1 files, +3/-2
Make macOS packaged cache key more stable
telegramdesktop/tdesktop/dev • 22143a8 • 1 files, +15/-3
Per-week cache key for ccache on Linux action
telegramdesktop/tdesktop/dev • 734d709 • 3 files, +32/-1
Allow to override ffmpeg thread count for debugging purposes
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • d6f2e4c • 1 files, +2/-4
Simplify the use of new ffmpeg thread option
#tdesktop
Simplify the use of new ffmpeg thread option
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • 5e1a05f • 1 files, +1/-1
Fix crash when removing pinned chats during folder changes.
#tdesktop
Fix crash when removing pinned chats during folder changes.
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • 24ccd1c • 1 files, +6/-1
Fix crash when finishing the appearing text animation
textAppearCheckLine() runs synchronously from inside the width and
height animation tick callbacks (textAppearWidthCallback /
textAppearHeightCallback). Calling RemoveComponents(TextAppearing::Bit())
there destroys those very animations (and their Ui::Animations::Simple
data) while the animations manager is still iterating them, leading to a
use-after-free / null _data dereference in Simple::value().
Defer the component removal to the next main loop iteration so the
running tick can unwind first.
#tdesktop
Fix crash when finishing the appearing text animation
textAppearCheckLine() runs synchronously from inside the width and
height animation tick callbacks (textAppearWidthCallback /
textAppearHeightCallback). Calling RemoveComponents(TextAppearing::Bit())
there destroys those very animations (and their Ui::Animations::Simple
data) while the animations manager is still iterating them, leading to a
use-after-free / null _data dereference in Simple::value().
Defer the component removal to the next main loop iteration so the
running tick can unwind first.
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • 7f8c690 • 1 files, +0/-1
Remove duplicate QT_NO_PRIVATE_MODULE_WARNING from root CMakeLists.txt
It now lives in cmake/external/qt/package.cmake
#tdesktop
Remove duplicate QT_NO_PRIVATE_MODULE_WARNING from root CMakeLists.txt
It now lives in cmake/external/qt/package.cmake
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • df268f3 • 4 files, +10/-10
Bump actions/cache from 5 to 6
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v6)
---
updated-dependencies:
- dependency-name: actions/cache
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
#tdesktop
Bump actions/cache from 5 to 6
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v5...v6)
---
updated-dependencies:
- dependency-name: actions/cache
dependency-version: '6'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • 12ce38f • 1 files, +25/-4
Fixed editing of selected caption in album to target its own media.
telegramdesktop/tdesktop/dev • a5142b9 • 5 files, +94/-34
Slightly improved filling of swipe-next-channel gesture.
telegramdesktop/tdesktop/dev • 76120b7 • 6 files, +186/-175
Replaced custom scroll processing in profile top bar with regular one.
telegramdesktop/tdesktop/dev • a4ed19f • 1 files, +21/-7
Extended regular scroll processing to stories section.
telegramdesktop/tdesktop/dev • ffa6386 • 5 files, +137/-5
Cached peer list rows into opaque images while scrolling.
telegramdesktop/tdesktop/dev • fe8ca5a • 2 files, +34/-4
Added separate painting of peer badge emoji status to peer list.
telegramdesktop/tdesktop/dev • 1fb28f6 • 2 files, +14/-1
Added separate painting of peer list row emoji status to peer list.
telegramdesktop/tdesktop/dev • 89b4a78 • 2 files, +22/-1
Allowed emoji status animation over cached peer list rows.
telegramdesktop/tdesktop/dev • 3a90101 • 2 files, +45/-0
Added refresh of loaded userpics over cached peer list rows.
telegramdesktop/tdesktop/dev • 55b7484 • 3 files, +382/-113
Added media view video as system media controls source.
telegramdesktop/tdesktop/dev • 43b2110 • 3 files, +153/-1
Added metadata of media view video playback to system media controls.
telegramdesktop/tdesktop/dev • 40b3f62 • 3 files, +80/-7
Added swipe-back gesture to info profile section.
telegramdesktop/tdesktop/dev • f362c16 • 1 files, +2/-1
Fixed instant Cmd+Up/Down reply in sections with compose controls.
#tdesktop
Fixed editing of selected caption in album to target its own media.
telegramdesktop/tdesktop/dev • a5142b9 • 5 files, +94/-34
Slightly improved filling of swipe-next-channel gesture.
telegramdesktop/tdesktop/dev • 76120b7 • 6 files, +186/-175
Replaced custom scroll processing in profile top bar with regular one.
telegramdesktop/tdesktop/dev • a4ed19f • 1 files, +21/-7
Extended regular scroll processing to stories section.
telegramdesktop/tdesktop/dev • ffa6386 • 5 files, +137/-5
Cached peer list rows into opaque images while scrolling.
telegramdesktop/tdesktop/dev • fe8ca5a • 2 files, +34/-4
Added separate painting of peer badge emoji status to peer list.
telegramdesktop/tdesktop/dev • 1fb28f6 • 2 files, +14/-1
Added separate painting of peer list row emoji status to peer list.
telegramdesktop/tdesktop/dev • 89b4a78 • 2 files, +22/-1
Allowed emoji status animation over cached peer list rows.
telegramdesktop/tdesktop/dev • 3a90101 • 2 files, +45/-0
Added refresh of loaded userpics over cached peer list rows.
telegramdesktop/tdesktop/dev • 55b7484 • 3 files, +382/-113
Added media view video as system media controls source.
telegramdesktop/tdesktop/dev • 43b2110 • 3 files, +153/-1
Added metadata of media view video playback to system media controls.
telegramdesktop/tdesktop/dev • 40b3f62 • 3 files, +80/-7
Added swipe-back gesture to info profile section.
telegramdesktop/tdesktop/dev • f362c16 • 1 files, +2/-1
Fixed instant Cmd+Up/Down reply in sections with compose controls.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 14909bc • 2 files, +6/-4
Fixed display of sticker-set and favorite actions for sending stickers.
telegramdesktop/tdesktop/dev • 85c9495 • 7 files, +184/-0
Added keyboard extension of message text selection to history sections.
#tdesktop
Fixed display of sticker-set and favorite actions for sending stickers.
telegramdesktop/tdesktop/dev • 85c9495 • 7 files, +184/-0
Added keyboard extension of message text selection to history sections.
#tdesktop
🫡2
morethanwords/tweb/master • 512d07d • 1 files, +25/-2
Fix stories hold-to-pause not resuming on release
SwipeHandler bound its global mouseup/touchend listeners to
this.element.ownerDocument at construction time. For a Solid JSX
element (cloned from a <template>), ownerDocument is the inert
about:blank template-contents document until the node is inserted
into the live DOM. The stories viewer constructs the SwipeHandler
before its <Portal> mounts the element, so the release listeners
were bound to a document that never receives real events: mousedown
(bound to the element directly) still paused on press, but mouseup
never reached reset()/onReset()/play(), so the story stayed paused.
Bind the gesture-end listener lazily in handleStart instead, when the
element is live and ownerDocument resolves to the real (main or
Document-PiP) document. Keeps the PiP fix from 9d58fe155 intact and
mirrors the lazy pattern already used in attachGrabListeners.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • bbd3782 • 3 files, +87/-79
Render topic profile avatar in the profile-avatars header
Forum and bot-forum topic profiles used a separate inline 'simple avatar'
(.profile-avatar.avatar-120 inside the MainSection, gated by has-simple-avatar).
Route them through the same PeerProfileAvatars header as regular chats with no
photo instead: PeerProfileAvatars.setPeer now takes a threadId, skips the photo
carousel/list-loader, and renders the topic icon as a single centered avatar-120
(no profile-avatars-avatar-fake duplicate, no scaled-down full photo).
- peerProfileAvatars: topic branch in setPeer; processItem renders avatar-120
with a 120px custom-emoji size for topics.
- peerProfile: always use the carousel path, passing the topic id; drop the
needSimpleAvatar concept and the in-section avatar.
- _profile.scss: .is-topic centers the fixed-size icon and keeps it unscaled
when the header collapses; removed the dead .has-simple-avatar rule.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 1296446 • 2 files, +23/-25
Fix sponsored topbar plate not reserving chat padding-top
The sponsored/ad plate is the only floating plate with height: 'auto', so setFloating measures its offsetHeight. The measurement ran inside the count loop, before the wrapper's `hide` (display: none) class was toggled off — and a display:none ancestor zeroes descendants' offsetHeight. So exactly when the ad plate is the one flipping the visible-plate count 0 -> 1, it was measured at 0 and never reserved its padding-top, leaving it overlapping the chat. Compute the visible set and un-hide the wrapper before measuring.
Also clarify in updatePinnedFloatingHeight that a mid-scroll position is left anchored on purpose (matches iOS/Android: the plate slides over the content rather than shoving it down); behavior unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Fix stories hold-to-pause not resuming on release
SwipeHandler bound its global mouseup/touchend listeners to
this.element.ownerDocument at construction time. For a Solid JSX
element (cloned from a <template>), ownerDocument is the inert
about:blank template-contents document until the node is inserted
into the live DOM. The stories viewer constructs the SwipeHandler
before its <Portal> mounts the element, so the release listeners
were bound to a document that never receives real events: mousedown
(bound to the element directly) still paused on press, but mouseup
never reached reset()/onReset()/play(), so the story stayed paused.
Bind the gesture-end listener lazily in handleStart instead, when the
element is live and ownerDocument resolves to the real (main or
Document-PiP) document. Keeps the PiP fix from 9d58fe155 intact and
mirrors the lazy pattern already used in attachGrabListeners.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • bbd3782 • 3 files, +87/-79
Render topic profile avatar in the profile-avatars header
Forum and bot-forum topic profiles used a separate inline 'simple avatar'
(.profile-avatar.avatar-120 inside the MainSection, gated by has-simple-avatar).
Route them through the same PeerProfileAvatars header as regular chats with no
photo instead: PeerProfileAvatars.setPeer now takes a threadId, skips the photo
carousel/list-loader, and renders the topic icon as a single centered avatar-120
(no profile-avatars-avatar-fake duplicate, no scaled-down full photo).
- peerProfileAvatars: topic branch in setPeer; processItem renders avatar-120
with a 120px custom-emoji size for topics.
- peerProfile: always use the carousel path, passing the topic id; drop the
needSimpleAvatar concept and the in-section avatar.
- _profile.scss: .is-topic centers the fixed-size icon and keeps it unscaled
when the header collapses; removed the dead .has-simple-avatar rule.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 1296446 • 2 files, +23/-25
Fix sponsored topbar plate not reserving chat padding-top
The sponsored/ad plate is the only floating plate with height: 'auto', so setFloating measures its offsetHeight. The measurement ran inside the count loop, before the wrapper's `hide` (display: none) class was toggled off — and a display:none ancestor zeroes descendants' offsetHeight. So exactly when the ad plate is the one flipping the visible-plate count 0 -> 1, it was measured at 0 and never reserved its padding-top, leaving it overlapping the chat. Compute the visible set and un-hide the wrapper before measuring.
Also clarify in updatePinnedFloatingHeight that a mid-scroll position is left anchored on purpose (matches iOS/Android: the plate slides over the content rather than shoving it down); behavior unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡3
morethanwords/tweb/master • 96fb8c0 • 4 files, +227/-194
Fix intermittent SRP 2FA password rejection (unpadded A)
The client public value A = g^a mod p was serialized with its minimal
big-endian length instead of being zero-padded to 256 bytes. The server
normalizes A to 256 bytes before hashing u and M1, so whenever g^a mod p
had a leading zero byte (~1/256 of attempts) our M1 mismatched the
server's and a correct password was rejected at random; a retry (fresh
account.getPassword -> new a) usually succeeded. Pad A to 256 bytes
everywhere, exactly like tdlib's A_bn.to_binary(256).
While matching tdlib's PasswordManager::get_input_check_password:
- generate the ephemeral secret a from a fresh local CSPRNG instead of
the server-provided state.secure_random (which leaked the secret
exponent and was constant across the now-removed retry loop);
- add the validations that were commented-out stubs: verifyDhPrimeAndGenerator
(= check_config) for both the check and new-password paths, and the
srp_B range/length check (0 < B < p, 248 <= len <= 256).
Rewrite src/tests/srp.test.ts into a real suite: KDF vs an independent
Node-crypto reference, a client/server SRP round-trip x25, a forced
leading-zero-A regression (mutation-confirmed it fails on the unpadded
code), the isNew verifier path, and validation throws. Drop the stale
A/M1/srp_B fixtures and the dead src/mock/srp_original.ts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • c6fb69c • 2 files, +1/-8
Align reply-quote poll icon inline instead of flexing the subtitle
The poll-option checkmark in the reply/pinned container now carries the
standard inline-icon classes (inline-icon inline-icon-left) so it aligns
with the quote text through the normal inline flow, dropping the bespoke
.with-icon flex wrapper on the subtitle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Fix intermittent SRP 2FA password rejection (unpadded A)
The client public value A = g^a mod p was serialized with its minimal
big-endian length instead of being zero-padded to 256 bytes. The server
normalizes A to 256 bytes before hashing u and M1, so whenever g^a mod p
had a leading zero byte (~1/256 of attempts) our M1 mismatched the
server's and a correct password was rejected at random; a retry (fresh
account.getPassword -> new a) usually succeeded. Pad A to 256 bytes
everywhere, exactly like tdlib's A_bn.to_binary(256).
While matching tdlib's PasswordManager::get_input_check_password:
- generate the ephemeral secret a from a fresh local CSPRNG instead of
the server-provided state.secure_random (which leaked the secret
exponent and was constant across the now-removed retry loop);
- add the validations that were commented-out stubs: verifyDhPrimeAndGenerator
(= check_config) for both the check and new-password paths, and the
srp_B range/length check (0 < B < p, 248 <= len <= 256).
Rewrite src/tests/srp.test.ts into a real suite: KDF vs an independent
Node-crypto reference, a client/server SRP round-trip x25, a forced
leading-zero-A regression (mutation-confirmed it fails on the unpadded
code), the isNew verifier path, and validation throws. Drop the stale
A/M1/srp_B fixtures and the dead src/mock/srp_original.ts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • c6fb69c • 2 files, +1/-8
Align reply-quote poll icon inline instead of flexing the subtitle
The poll-option checkmark in the reply/pinned container now carries the
standard inline-icon classes (inline-icon inline-icon-left) so it aligns
with the quote text through the normal inline flow, dropping the bespoke
.with-icon flex wrapper on the subtitle.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡3
🫡2
morethanwords/tweb/master • a5c7327 • 1 files, +42/-19
Fix video streaming edge cases in service worker
- Fall back to the worker on any cache read error (incl. a bare cache
timeout that rejects with undefined) instead of throwing TypeError on
error.type and killing the range request
- Preload the file's last chunk at start (moov/bounds) instead of chunk 0
- Treat PRELOAD_SIZE as a read-ahead window from the current position
rather than an absolute end offset (read-ahead was dead past 20MB)
- Align the preload window start to the chunk grid so preloaded offsets
stay valid MTProto offsets
- Gate the second range part on overflow > 0 (a byte count was used as a
boolean, so a negative value forced a wasteful extra chunk fetch)
- Clamp limit to a server-valid minimum (4KB) to avoid LIMIT_INVALID on
tiny ranges; make SMALLEST_CHUNK_LIMIT a valid 4KB and use it
- Don't resurrect a destroyed stream from toggleStreamInUse(false); clamp
inUse at 0 to stop zombie streams leaking in the map
- Re-arm the idle debounce instead of destroying a stream still bound to
a live <video>
- Swallow rejections from best-effort cache writes and fire-and-forget
preloads to avoid unhandled rejections
- Use Math.clz32 in alignLimit to drop the Math.log FP rounding; remove
the unused Response-Time header
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 99de4a8 • 2 files, +30/-4
Fix rich-text paste/serialization of newlines around blockquotes
Three related fixes in the contenteditable rich-text path:
- getRichValueWithCaret paste reconciliation: the re-insertion pass used a
drifting offset threshold (`offset > plainTextLength - lineIndex + 1`) that
was only correct for one line index, shifting/losing entities on multi-line
formatted pastes (e.g. a second line in bold). Use the splice index directly
and adjust entity length, not just offset, in both removal and insertion.
- Paste handler: strip messageEntityLinebreak before insertRichTextAsHTML.
wrapDraftText renders line breaks from the text itself; passing explicit
linebreak entities made wrapRichText slice the one before a blockquote,
dropping a \n on e.g. `text\n\nquote`. Stripping them aligns paste with the
edit/draft path (verified: no extra blank line, model preserves both \n).
- getRichElementValue: a multiline blockquote built from block children
(<br>/<div>, what Enter produces) lost its last character outside the quote,
because the entity length is only grown by text nodes while block-generated
\n bypass it. Track the last real-content offset and re-span the blockquote
up to it, excluding trailing block line breaks.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Fix video streaming edge cases in service worker
- Fall back to the worker on any cache read error (incl. a bare cache
timeout that rejects with undefined) instead of throwing TypeError on
error.type and killing the range request
- Preload the file's last chunk at start (moov/bounds) instead of chunk 0
- Treat PRELOAD_SIZE as a read-ahead window from the current position
rather than an absolute end offset (read-ahead was dead past 20MB)
- Align the preload window start to the chunk grid so preloaded offsets
stay valid MTProto offsets
- Gate the second range part on overflow > 0 (a byte count was used as a
boolean, so a negative value forced a wasteful extra chunk fetch)
- Clamp limit to a server-valid minimum (4KB) to avoid LIMIT_INVALID on
tiny ranges; make SMALLEST_CHUNK_LIMIT a valid 4KB and use it
- Don't resurrect a destroyed stream from toggleStreamInUse(false); clamp
inUse at 0 to stop zombie streams leaking in the map
- Re-arm the idle debounce instead of destroying a stream still bound to
a live <video>
- Swallow rejections from best-effort cache writes and fire-and-forget
preloads to avoid unhandled rejections
- Use Math.clz32 in alignLimit to drop the Math.log FP rounding; remove
the unused Response-Time header
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
morethanwords/tweb/master • 99de4a8 • 2 files, +30/-4
Fix rich-text paste/serialization of newlines around blockquotes
Three related fixes in the contenteditable rich-text path:
- getRichValueWithCaret paste reconciliation: the re-insertion pass used a
drifting offset threshold (`offset > plainTextLength - lineIndex + 1`) that
was only correct for one line index, shifting/losing entities on multi-line
formatted pastes (e.g. a second line in bold). Use the splice index directly
and adjust entity length, not just offset, in both removal and insertion.
- Paste handler: strip messageEntityLinebreak before insertRichTextAsHTML.
wrapDraftText renders line breaks from the text itself; passing explicit
linebreak entities made wrapRichText slice the one before a blockquote,
dropping a \n on e.g. `text\n\nquote`. Stripping them aligns paste with the
edit/draft path (verified: no extra blank line, model preserves both \n).
- getRichElementValue: a multiline blockquote built from block children
(<br>/<div>, what Enter produces) lost its last character outside the quote,
because the entity length is only grown by text nodes while block-generated
\n bypass it. Track the last real-content offset and re-span the blockquote
up to it, excluding trailing block line breaks.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡3
telegramdesktop/tdesktop/chrome_149.0.0.0 • 0830bf3 • 1 files, +1/-1
Update User-Agent for DNS to Chrome 149.0.0.0.
#tdesktop
Update User-Agent for DNS to Chrome 149.0.0.0.
#tdesktop
🫡2
telegramdesktop/tdesktop/unused_styles_2026_07 • 1af2be2 • 1 files, +0/-8
Removed 4 unused style entries.
#tdesktop
Removed 4 unused style entries.
#tdesktop
🫡2
🫡3
telegramdesktop/tdesktop/dev • cf661e5 • 1 files, +1/-1
Update User-Agent for DNS to Chrome 149.0.0.0.
#tdesktop
Update User-Agent for DNS to Chrome 149.0.0.0.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 3a528d8 • 2 files, +6/-3
Move -fuse-ld=lld to linker flags
telegramdesktop/tdesktop/dev • 6fcd650 • 1 files, +0/-8
Remove cmake policy linking error workarounds
telegramdesktop/tdesktop/dev • a2d3b37 • 3 files, +3/-5
Restore cmake 3.25 as minimum version
telegramdesktop/tdesktop/dev • fa3948d • 1 files, +3/-5
Use theme change event from qApp
telegramdesktop/tdesktop/dev • 09459d1 • 1 files, +9/-8
CreateOfficialIcon -> CreateSupportIcon
That better fits the current meaning
telegramdesktop/tdesktop/dev • 84b0f73 • 1 files, +4/-0
Preserve window icon name on Wayland
#tdesktop
Move -fuse-ld=lld to linker flags
telegramdesktop/tdesktop/dev • 6fcd650 • 1 files, +0/-8
Remove cmake policy linking error workarounds
telegramdesktop/tdesktop/dev • a2d3b37 • 3 files, +3/-5
Restore cmake 3.25 as minimum version
telegramdesktop/tdesktop/dev • fa3948d • 1 files, +3/-5
Use theme change event from qApp
telegramdesktop/tdesktop/dev • 09459d1 • 1 files, +9/-8
CreateOfficialIcon -> CreateSupportIcon
That better fits the current meaning
telegramdesktop/tdesktop/dev • 84b0f73 • 1 files, +4/-0
Preserve window icon name on Wayland
#tdesktop
🫡3
🫡3
morethanwords/tweb/master • 3acb5a4 • 3 files, +295/-0
Add run-build skill to list and serve past build snapshots
Lists the git "Build" commits (compiled app in public/) as a paginated,
date-sorted table, then serves any chosen snapshot locally by extracting
that commit's public/ tree via git archive — mirroring server.js and
leaving the working tree untouched.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Add run-build skill to list and serve past build snapshots
Lists the git "Build" commits (compiled app in public/) as a paginated,
date-sorted table, then serves any chosen snapshot locally by extracting
that commit's public/ tree via git archive — mirroring server.js and
leaving the working tree untouched.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡2
Ajaxy/telegram-tt/master • f33f22a • 3 files, +4/-4
12.0.32
Ajaxy/telegram-tt/master • 360de48 • 16 files, +188/-37
Support startGroup deep link for bots (#7050)
Ajaxy/telegram-tt/master • 8f8cc05 • 1 files, +12/-3
Modal: Autofocus title by default (#7068)
Ajaxy/telegram-tt/master • 24fab59 • 3 files, +43/-20
Surface Container: Fix background color (#7071)
Ajaxy/telegram-tt/master • 63b505e • 1 files, +4/-1
Profile: Improve closing on Esc logic for profiles (#7070)
Ajaxy/telegram-tt/master • e3318c0 • 2 files, +7/-0
Passcode: Fix button spacing in passcode settings (#7069)
Ajaxy/telegram-tt/master • db6db81 • 5 files, +37/-23
Passcode: Persist shared state to fix theme flicker on unlock (#7066)
Co-authored-by: Dmitry Kabanov <153344039+dmitrykabanovdev@users.noreply.github.com>
Ajaxy/telegram-tt/master • 55557c2 • 6 files, +20/-11
Middle Header Panel: Fix styles (#7072)
Ajaxy/telegram-tt/master • 6a0d49f • 29 files, +587/-240
Middle Column: Redesign composer and chat panels mask (#7059)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • 3b3fde0 • 1 files, +19/-6
Mini Apps: Fix miniAppsCachedSize saving after fullscreen (#7074)
Ajaxy/telegram-tt/master • eb9f746 • 88 files, +246/-246
[Build]
#webz
12.0.32
Ajaxy/telegram-tt/master • 360de48 • 16 files, +188/-37
Support startGroup deep link for bots (#7050)
Ajaxy/telegram-tt/master • 8f8cc05 • 1 files, +12/-3
Modal: Autofocus title by default (#7068)
Ajaxy/telegram-tt/master • 24fab59 • 3 files, +43/-20
Surface Container: Fix background color (#7071)
Ajaxy/telegram-tt/master • 63b505e • 1 files, +4/-1
Profile: Improve closing on Esc logic for profiles (#7070)
Ajaxy/telegram-tt/master • e3318c0 • 2 files, +7/-0
Passcode: Fix button spacing in passcode settings (#7069)
Ajaxy/telegram-tt/master • db6db81 • 5 files, +37/-23
Passcode: Persist shared state to fix theme flicker on unlock (#7066)
Co-authored-by: Dmitry Kabanov <153344039+dmitrykabanovdev@users.noreply.github.com>
Ajaxy/telegram-tt/master • 55557c2 • 6 files, +20/-11
Middle Header Panel: Fix styles (#7072)
Ajaxy/telegram-tt/master • 6a0d49f • 29 files, +587/-240
Middle Column: Redesign composer and chat panels mask (#7059)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • 3b3fde0 • 1 files, +19/-6
Mini Apps: Fix miniAppsCachedSize saving after fullscreen (#7074)
Ajaxy/telegram-tt/master • eb9f746 • 88 files, +246/-246
[Build]
#webz
🫡2