Skip to content

Agentsmd#799

Open
ZhangHanDong wants to merge 95 commits intoproject-robius:mainfrom
Project-Robius-China:agentsmd
Open

Agentsmd#799
ZhangHanDong wants to merge 95 commits intoproject-robius:mainfrom
Project-Robius-China:agentsmd

Conversation

@ZhangHanDong
Copy link
Copy Markdown
Contributor

No description provided.

tyreseluo and others added 30 commits March 24, 2026 15:59
- tick(): always return true when a large-gap jump changes state (changed flag)
- update_target(): clamp display pointers when new text is shorter to prevent panic in fill_display_buffer
- update_target(): fix String::reserve wrong-base bug (compare capacity, reserve len deficit)
- new(): capture Instant::now() once and reuse for last_update_time and animation_start_time
- is_complete(): add doc comment explaining why Msc4357Live always returns false
- Suppress edited indicator for actively-streaming messages to avoid
  misleading UI while text is still being updated
- Re-request NextFrame in restore_state when streaming_messages is
  non-empty so the animation loop resumes after room switch
- Verified streaming_messages.clear() on timeline clear is already present
- Clamp changed_indices to prevent infinite iteration on usize::MAX sentinel
- Preserve visible prefix when entering streaming mode (no replay from start)
- Make typing latch bidirectional so transient drops don't cause early completion
- Only request NextFrame when streams have unrevealed characters
- Cache timeline indices to avoid O(streams*items) per-frame scan
- Use Timer for idle timeout instead of per-frame polling
- Time-based animation (chars_per_second) for frame-rate independence
- Simplify test names and remove duplicate tests
Reset runtime state and return to the login loop when session tokens expire, and remove persisted Matrix stores alongside stale session files.
Make the login form use a narrower centered layout and remove the extra outer login panel background so the desktop presentation matches the mobile-style card better.
Keep the login screen layout intact while replacing the extra outer login panel with a plain view so the screen no longer draws a separate card container.
Fix session restore and in-app signup flow
Replace prefix-match + recency + not-self heuristic with deterministic
MSC4357 `org.matrix.msc4357.live` field detection. This simplifies the
detection path and makes streaming animation reliable for any compliant
server.

Key changes:
- StreamingAnimState: replace sender_user_id/detection/sender_stopped_typing
  with is_live bool; add restore() for timeline reset preservation
- room_screen: add is_msc4357_live() helper, streaming_scan_range() for
  bounded detection, remove heuristic detection and typing-latch logic
- sliding_sync: simplify TypingUsers back to Vec<String>
- Split timeouts: 30s for finished streams, 5min for live streams
…romptly

Bug 1: streaming_scan_range reused clamp_indices which clamped end to
min(old_len, new_len), making PushBack/Append (changed_indices=old_len..new_len)
produce an empty range. New live messages were never detected.
Fix: clamp directly to new_len so appended items are scanned.

Bug 2: when the final live=false update arrived with text already fully
revealed, needs_frame()=false meant no NextFrame was scheduled, so the
completed state lingered with cursor until timeout.
Fix: also schedule a frame when is_complete() becomes true.
Merge related test cases to reduce duplication:
- 2 restore tests → 1 (test_restore_preserves_common_prefix)
- 2 timeout tests → 1 (test_timeout_split_by_live_state)
- 4 scan_range tests → 1 (test_streaming_scan_range)
- Remove test_needs_frame_when_caught_up (covered by test_is_complete_msc4357)

85 → 79 tests, same coverage.
tyreseluo and others added 29 commits April 1, 2026 22:17
- add desktop avatar file picker upload flow in account settings\n- add MatrixRequest::UploadAvatar worker path with PNG/JPEG validation\n- add fallback delete-avatar request for homeservers returning M_UNRECOGNIZED\n- show not-supported notices for avatar actions on mobile platforms
- add English and Simplified Chinese translation resources

- introduce i18n module and wire AppLanguage-driven text updates

- replace hardcoded UI strings in home/login/settings/room/tsp flows
feat(settings): support avatar upload and robust avatar deletion
…ions

Refine room input bar quick actions and emoji picker UX
…ter-fallback

fix(search): support exact MXID people search and fallback to full list on empty local results
Improve app service bot targeting and in-room action feedback
Support multiple Matrix accounts simultaneous Issue 374
# Conflicts:
#	src/app.rs
#	src/home/room_screen.rs
#	src/home/spaces_bar.rs
#	src/login/login_screen.rs
#	src/room/room_input_bar.rs
#	src/settings/account_settings.rs
- Extract duplicated point-of-no-return blocks into enter_point_of_no_return()
- Fix missed sender.send().unwrap() on MessageEdited path
- Reset display_filter, sort_fn, and drawn_previously on logout
- Drain PENDING_ROOM_UPDATES and PENDING_SPACE_UPDATES in ClearAppState handlers
# Conflicts:
#	src/home/room_screen.rs
Resolve import conflict in spaces_bar.rs: keep both LogoutAction
(from this branch) and AppState/i18n imports (from main).
Add room threads pane and thread pagination support
…n-logout

fix: skip app state restore after explicit logout
Dock.load_state() destroys DrawList2d objects by clearing tab_bars during
event handling, but the rendering pipeline still holds stale DrawListId
references from the previous frame. This causes massive "Drawlist id
generation wrong" errors and a completely blank main content area.

Replace dock.load_state() in load_dock_state_from() with programmatic
tab recreation via close_all_tabs() + focus_or_create_tab(), which uses
the Dock's normal widget API and avoids direct DrawList destruction.

Fixes #45

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…drawlist-corruption

Fix blank main page caused by Dock.load_state() DrawList corruption
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 784af95d45

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


SYNC_SERVICE.lock().unwrap().replace(Arc::new(sync_service));

let (login_sender, _login_receiver) = tokio::sync::mpsc::channel(1);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep login receiver alive when rebuilding worker after switch

During account switch restart, this creates login_sender but immediately drops its paired receiver (_login_receiver). That leaves no consumer for forwarded non-add-account login requests and also breaks the outer login loop’s channel assumptions once the switched session ends, so post-switch logout/reauth flows can no longer reliably process new login requests without restarting the app.

Useful? React with 👍 / 👎.

@@ -4062,7 +5469,7 @@ async fn spawn_sso_server(
}) {
Ok(identity_provider_res) => {
if !is_logged_in {
if let Err(e) = login_sender.send(LoginRequest::LoginBySSOSuccess(client, client_session)).await {
if let Err(e) = login_sender.send(LoginRequest::LoginBySSOSuccess(client, client_session, false)).await {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Mark SSO success as add-account during add-account flow

SSO completion is always emitted as LoginBySSOSuccess(..., false), so when the user is in add-account mode the backend treats the SSO result as a primary login instead of an add-account login. Because matrix_worker_task branches on that flag, SSO-based add-account attempts are routed down the wrong path and do not complete as an account-add operation.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants