Conversation
📝 WalkthroughWalkthroughAdds 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
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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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.
| "searchPreview": "Search Preview", | ||
| "autoScrollEnabled": "Auto-scroll while generating", | ||
| "searchAssistantModel": "Assistant Model", |
There was a problem hiding this comment.
🧩 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 ✓")
PYRepository: 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.
* feat: settings auto scroll toggle * feat: i18n support
* feat(agent): add question tool flow * feat(mcp): implement real Apple Maps search using URL scheme (#1289) * feat: support voice.ai (#1291) * feat: remove custome tiptap (#1295) * feat: settings auto scroll toggle (#1293) * feat: settings auto scroll toggle * feat: i18n support * fix(renderer): remove specific event listeners instead of all * feat: add tooltip for filling default API URL in settings (#1296) * refactor(question): simplify question request UI to single-choice interface * fix(chat): restore pending question state * fix: review issues --------- Co-authored-by: Qi Jin <jin.qi1@northeastern.edu> Co-authored-by: xiaomo <wegi866@gmail.com>
* chore: typecheck with tsgo (#1278) * feat: image left align * feat: app settings skills (#1283) * docs: add spec for app-settings * feat: implement chat-driven settings control with skill gating Add a safe, validated API for modifying DeepChat application settings via natural language. Settings changes are controlled by a dedicated 'deepchat-settings' skill to ensure tools are only available when contextually relevant. Key features: - Skill-gated tool injection: settings tools only appear when deepchat-settings skill is active - Safe settings apply API with Zod validation and strict allowlist - Support for toggles (sound, copy COT, chat mode) and enums (language, theme, font size) - Defense-in-depth: runtime skill verification before applying changes - Deep-linked settings navigation for unsupported/complex settings - Comprehensive test coverage for validation, mapping, and skill gating Changes: - Add ChatSettingsToolHandler with validated apply/open methods - Integrate with AgentToolManager for tool definition gating - Create deepchat-settings built-in skill with clear activation rules - Add shared types for requests/responses (chatSettings.ts) - Implement settings window navigation with SECTION_ALIASES - Add unit tests for handler and integration tests for tool gating - Translate spec documents (plan.md, spec.md, tasks.md) to Chinese - Fix type errors in getCurrentValue and OPEN_SECTION_VALUES * refactor: remove chatMode from settings control and add permission service Remove chatMode setting from the allowlist as it requires conversation-scoped updates that are better handled separately. Add permission checking for settings window opening to provide user control over settings navigation. Key changes: - Remove setChatMode tool and related schemas from ChatSettingsToolHandler - Add SettingsPermissionService for managing tool approvals (one-time and session) - Add permission check for deepchat_settings_open tool - Update PermissionHandler to handle settings permission grants - Add rememberable flag to permission request structure - Update AgentToolManager to consume approvals before opening settings - Add settingsPermissionService to main presenter index - Clear settings approvals when conversation ends - Update spec documents to reflect removed chatMode feature - Remove chatMode-related tests and types This ensures settings window opening requires explicit user approval and provides a cleaner separation of concerns for chat mode management. * docs: translate to en * chore: yo browser less context (#1284) * docs: add specs for yo browesr context manager * feat(yo-browser): improve skill description and add yo_browser_cdp_send to offload whitelist * refactor(yobrowser): remove skill gating and make CDP tools always available in agent mode * refactor(yobrowser): add CDP method schema validation with strict enums - Add enum-based validation for cdp_send method (11 common CDP methods) - Add detailed union schemas for each method's parameters with examples - Add normalizeCdpParams method to handle both object and JSON string inputs - Prevent method typos and provide better type safety for CDP interactions * fix(yobrowser): add strict tab ID validation in CDP send handler * chore: update deps * refactor: agent provider simplification (#1286) * docs: add spec for agent provider * refactor(agent): remove BaseAgentProvider layer and simplify provider hierarchy * feat(mcp): implement real Apple Maps search using URL scheme (#1289) * feat: support voice.ai (#1291) * feat: remove custome tiptap (#1295) * feat: settings auto scroll toggle (#1293) * feat: settings auto scroll toggle * feat: i18n support * fix(renderer): remove specific event listeners instead of all * feat: add tooltip for filling default API URL in settings (#1296) * fix: fix model list refresh failed (#1297) * feat: add question tools (#1298) * feat(agent): add question tool flow * feat(mcp): implement real Apple Maps search using URL scheme (#1289) * feat: support voice.ai (#1291) * feat: remove custome tiptap (#1295) * feat: settings auto scroll toggle (#1293) * feat: settings auto scroll toggle * feat: i18n support * fix(renderer): remove specific event listeners instead of all * feat: add tooltip for filling default API URL in settings (#1296) * refactor(question): simplify question request UI to single-choice interface * fix(chat): restore pending question state * fix: review issues --------- Co-authored-by: Qi Jin <jin.qi1@northeastern.edu> Co-authored-by: xiaomo <wegi866@gmail.com> * chore: integrated vue-tsgo (#1299) * chore: integrated vue-tsgo * chore: update recommendation exteion * chore: update * feat: add prompt for ask tool * chore: version to 0.5.7 --------- Co-authored-by: xiaomo <wegi866@gmail.com> Co-authored-by: wanna <wanna.w@binarywalk.com> Co-authored-by: Qi Jin <jin.qi1@northeastern.edu>
close #1292
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