Skip to content

fix(session): dedup SSE messages, add agent restart with rebootstrap, account merge UI#565

Merged
XDfield merged 14 commits into
devfrom
fix/session-scroll-stick
Jun 17, 2026
Merged

fix(session): dedup SSE messages, add agent restart with rebootstrap, account merge UI#565
XDfield merged 14 commits into
devfrom
fix/session-scroll-stick

Conversation

@XDfield

@XDfield XDfield commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

Three changes on the fix/session-scroll-stick branch:

  1. fix(device-session): Dedup buffered messages that match already-streamed SSE entries by parentID+timestamp proximity, preventing duplicate assistant messages in the session list.

  2. feat(workspace):

    • Add agent.version() API call for decoupled version fetching
    • Replace scheduleStreamRestart with full rebootstrap() for stream reconnects and SSE-driven agent.runtime.restarted events
    • Add agent restart flow with command polling and RestartState signal
    • Restart UI: dropdown menu (dot-grid icon) in both sidebars, full-screen overlay with spinner during restart
  3. feat(console): Account merge conflict dialog — detects bind=conflict URL param, decodes merge_token, and provides confirm/cancel flow with confirmMerge/cancelMerge API functions.

Test plan

  • Verify streamed assistant messages no longer duplicate in session list on reconnect
  • Verify agent restart dropdown is visible in sidebar footer with version present
  • Verify restart overlay appears with phase/message text during restart
  • Verify SSE agent.runtime.restarted triggers rebootstrap for all workspaces
  • Verify account merge dialog appears when redirected with bind=conflict&merge_token=...
  • Verify confirm/cancel calls the correct API endpoints

🤖 Generated with CoStrict CSC

DoSun and others added 14 commits June 16, 2026 15:59
Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…stant parentID

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…anually

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
Always keep autoScroll active so content appearing before status
changes to "busy" is also followed, matching normal session view behavior.

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
Replace hardcoded hasScrollGesture with 250ms time-window gesture
tracking, matching the normal session view pattern. This prevents
programmatic scroll events from incorrectly setting userScrolled=true
during auto-follow.

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
When the session is busy, pressing Enter queues messages instead of
sending. Queued messages display as bubbles above the input with a
"Queued" tag and individual remove button. On session idle transition,
all queued messages are concatenated with \n\n and auto-submitted.

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…rendering

- Remove notification-channel-service and all wecom-bot notification dialogs
- Rewrite notification-channels-section to render available channel types uniformly
- Use /api/channels/available + /api/channels instead of /api/notification-channels
- Update sidebar and menu registry to remove notification channel badge
- Add dedicated wecom-bot card component with consistent layout

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
Add a fixed agent+version footer at the bottom of the workspace sidebar
(sessions/files/diffs tabs). The version field is optional and only shown
when the agent health endpoint returns it.

- store agentInfo (name + optional version) from agent health response
- render fixed footer line with agent name and version in sidebar
- both desktop (workspace-content-layout) and mobile (session-list) views

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…arch bar

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
… mapping

Replace hardcoded TYPE_LABELS/TYPE_META maps with i18n lookups via
channels.type.* keys. Add wecom-bot icon to TYPE_ICON in all store
channel components for consistent rendering.

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…wn dialog

Add a global 401 response interceptor that debounces multiple concurrent 401s
and shows a countdown dialog (30s) asking the user to re-login. Only triggers
on AuthGuard-protected routes, derived from GUARDED_ROUTES in route config.

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…tries by parentID+timestamp

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
… restart UI overlay

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
…flow

Co-Authored-By: DeepSeek-V4-Flash <deepseek-ai@claude-code-best.win>
@XDfield XDfield merged commit 0aaf4ea into dev Jun 17, 2026
5 checks passed
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.

1 participant