Skip to content

Conversation

@zhangmo8
Copy link
Collaborator

@zhangmo8 zhangmo8 commented Feb 2, 2026

close #1292

image

This is our current solution for now. Once the agent refactor is completed, we’ll have it take effect directly in the chat list for a more natural experience.

Summary by CodeRabbit

  • New Features
    • Added an Auto-scroll toggle in Settings (default: on) to control automatic scrolling during content generation.
    • Setting is actionable from the UI and synchronized at runtime across windows.
    • Message list behavior now respects the Auto-scroll setting (automatic follow disabled when turned off).
    • Added translations for the new setting across multiple locales (en, ja, zh-CN, da, fa, fr, he, ko, pt-BR, ru, zh-HK, zh-TW).

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 2, 2026

📝 Walkthrough

Walkthrough

Adds an opt-out auto-scroll feature: new CONFIG_EVENTS key, presenter/getter+setter, renderer UI toggle, store persistence and IPC sync, message-list and scroll composable guards to respect the setting, plus localization entries.

Changes

Cohort / File(s) Summary
Event Constants
src/main/events.ts, src/renderer/src/events.ts
Added AUTO_SCROLL_CHANGED to CONFIG_EVENTS.
Presenter / Main logic
src/main/presenter/configPresenter/index.ts, src/main/presenter/configPresenter/uiSettingsHelper.ts
Added getAutoScrollEnabled() and setAutoScrollEnabled(); setter emits AUTO_SCROLL_CHANGED to windows.
Type Definitions
src/shared/types/presenters/legacy.presenters.d.ts
Added synchronous getAutoScrollEnabled() and setAutoScrollEnabled(enabled: boolean) signatures to IConfigPresenter.
Renderer store & IPC
src/renderer/src/stores/uiSettingsStore.ts
Added autoScrollEnabled state (default true), load/save via presenter, setAutoScrollEnabled() setter, and IPC listener registration for CONFIG_EVENTS.AUTO_SCROLL_CHANGED.
Settings UI
src/renderer/settings/components/CommonSettings.vue
Added toggle row, computed autoScrollEnabled, and handler to update store on change.
Message list integration
src/renderer/src/components/message/MessageList.vue
Injected uiSettingsStore; passed autoScrollEnabled into scroll composable and updated watcher to respect the setting.
Scroll composable
src/renderer/src/composables/message/useMessageScroll.ts
Added optional autoScrollEnabled?: Ref<boolean> option and guard to skip auto-follow when disabled.
Localization
src/renderer/src/i18n/*/settings.json
src/renderer/src/i18n/en-US/settings.json, .../ja-JP/..., .../zh-CN/..., .../da-DK/..., .../fa-IR/..., .../fr-FR/..., .../he-IL/..., .../ko-KR/..., .../pt-BR/..., .../ru-RU/..., .../zh-HK/..., .../zh-TW/...
Added autoScrollEnabled translation key across many locales.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant SettingsUI as Settings UI
    participant Store as uiSettingsStore
    participant Presenter as ConfigPresenter (main)
    participant IPC
    participant MessageList
    participant Scroll as useMessageScroll

    User->>SettingsUI: toggle auto-scroll
    SettingsUI->>Store: setAutoScrollEnabled(value)
    Store->>Presenter: setAutoScrollEnabled(value)
    Presenter->>IPC: emit CONFIG_EVENTS.AUTO_SCROLL_CHANGED
    IPC-->>Store: broadcast AUTO_SCROLL_CHANGED
    Store->>MessageList: reactive update autoScrollEnabled
    MessageList->>Scroll: pass autoScrollEnabled
    Scroll->>Scroll: guard: skip auto-follow if disabled
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested labels

codex

Suggested reviewers

  • zerob13

Poem

🐰 I twitch my nose, a toggle made bright,
No more wild scrolls in the middle of night.
Read as it grows, keep the view snug and still,
A little hop of joy — calm pages, my thrill!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding a toggle in settings to control auto-scrolling behavior.
Linked Issues check ✅ Passed The PR implements the feature requested in #1292: a user-accessible way to disable auto-scrolling during text generation, allowing users to read from the top.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing the auto-scroll toggle feature across the UI, settings storage, and event handling with no extraneous modifications.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat-disable-auto-scroll

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/renderer/src/i18n/en-US/settings.json`:
- Around line 10-12: The new i18n key "autoScrollEnabled" was added to en-US
settings.json but is missing from several locale settings.json files; add
"autoScrollEnabled": "<translated string>" to each of the following locale
settings.json files (da-DK, fa-IR, fr-FR, he-IL, ko-KR, pt-BR, ru-RU, zh-HK,
zh-TW) with an appropriate translation, maintain the same JSON key ordering
style as existing entries (place it near "searchPreview" and
"searchAssistantModel"), ensure valid JSON (commas/quotes) and run the i18n/lint
check to confirm all locales now contain the key.

Comment on lines 10 to 12
"searchPreview": "Search Preview",
"autoScrollEnabled": "Auto-scroll while generating",
"searchAssistantModel": "Assistant Model",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, find all locale settings.json files and check for the autoScrollEnabled key
python3 <<'PY'
import json
import glob
import os

key = "autoScrollEnabled"
base = "src/renderer/src/i18n"

# All expected locales based on learnings
expected_locales = ["da-DK", "en-US", "fa-IR", "fr-FR", "he-IL", "ja-JP", "ko-KR", "pt-BR", "ru-RU", "zh-CN", "zh-HK", "zh-TW"]

print("=== Checking for 'autoScrollEnabled' key in all locale files ===\n")

# Find all settings.json files
found_locales = {}
for locale in expected_locales:
    path = os.path.join(base, locale, "settings.json")
    if os.path.exists(path):
        with open(path, encoding="utf-8") as f:
            try:
                data = json.load(f)
                has_key = key in data.get("common", {})
                found_locales[locale] = {"exists": True, "has_key": has_key}
                status = "✓ HAS KEY" if has_key else "✗ MISSING KEY"
                print(f"{locale:8} - {status}")
            except Exception as e:
                print(f"{locale:8} - ERROR: {e}")
                found_locales[locale] = {"exists": True, "has_key": False}
    else:
        print(f"{locale:8} - FILE NOT FOUND")
        found_locales[locale] = {"exists": False, "has_key": False}

print("\n=== Summary ===")
missing_files = [l for l, v in found_locales.items() if not v["exists"]]
missing_key = [l for l, v in found_locales.items() if v["exists"] and not v["has_key"]]

if missing_files:
    print(f"Missing locale files: {', '.join(missing_files)}")
if missing_key:
    print(f"Locales missing the key: {', '.join(missing_key)}")
if not missing_files and not missing_key:
    print("All locales have the 'autoScrollEnabled' key ✓")
PY

Repository: ThinkInAIXYZ/deepchat

Length of output: 522


Add the new key to all missing locale files.

Line 11 adds the en-US entry, but the i18n rules require this key to exist in every locale. Currently missing from: da-DK, fa-IR, fr-FR, he-IL, ko-KR, pt-BR, ru-RU, zh-HK, and zh-TW. Please add "autoScrollEnabled" to the settings.json files in these locales with appropriate translations.

🤖 Prompt for AI Agents
In `@src/renderer/src/i18n/en-US/settings.json` around lines 10 - 12, The new i18n
key "autoScrollEnabled" was added to en-US settings.json but is missing from
several locale settings.json files; add "autoScrollEnabled": "<translated
string>" to each of the following locale settings.json files (da-DK, fa-IR,
fr-FR, he-IL, ko-KR, pt-BR, ru-RU, zh-HK, zh-TW) with an appropriate
translation, maintain the same JSON key ordering style as existing entries
(place it near "searchPreview" and "searchAssistantModel"), ensure valid JSON
(commas/quotes) and run the i18n/lint check to confirm all locales now contain
the key.

@zerob13 zerob13 merged commit 5aa6abf into dev Feb 3, 2026
2 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.

[Feature] Is it possible to add a way to ignore the scrolling text on generation and read from the top as it goes?

3 participants