Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

## [Unreleased]

### Changed
- **Settings now treats Worklog details as folded by default.** The Appearance toggle is now worded as an opt-in to open Worklog details automatically, while the default remains folded; changing the control now immediately opens or folds Thinking cards, Tool cards, and multi-tool Worklog groups. The deprecated **Compact tool activity** renderer switch is no longer shown in Preferences, and existing installs stay on the Worklog renderer even if they previously saved the legacy setting as disabled.

## [v0.51.340] — 2026-06-09 — Release LD (background-task agent wakeup in WebUI) — ⛔ HELD pending independent review

### Added
Expand Down Expand Up @@ -38,7 +41,6 @@
### Added
- **Keyboard navigation in the model picker.** With the model dropdown open, ↑/↓ move a highlight through the filtered models (wrapping at the ends) and Enter selects the highlighted one; Escape closes. The highlight reuses the existing hover styling and is invisible until you use the keyboard. (#2952, #2791, @Sanjays2402)
- **A "New chat" button in the mobile titlebar.** On narrow screens the app titlebar now shows a `+` button to start a new conversation without opening the sidebar; it shares the existing reload-button styling and mirrors the new-chat in-flight/disabled state. (#3531, @franksong2702)

## [v0.51.336] — 2026-06-08 — Release KZ (fix inline-thinking streaming perf regression)

### Fixed
Expand Down
32 changes: 27 additions & 5 deletions api/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -5488,7 +5488,7 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock:
"font_size": "default", # small | default | large | xlarge
"session_jump_buttons": False, # show Start/End transcript jump pills
"session_endless_scroll": False, # auto-load older transcript pages while scrolling upward
"activity_feed_expanded_default": False, # expand Activity disclosures by default for new turns
"worklog_details_expanded_default": False, # opt-in: expand Worklog details by default; default remains folded
"pinned_sessions_limit": 3, # maximum active pinned sessions shown in the sidebar
"inflight_state_max_sessions": 8, # max active-stream recovery snapshots kept in browser localStorage
"inflight_state_max_messages": 24, # max recent messages kept per recovery snapshot
Expand All @@ -5505,7 +5505,7 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock:
"rtl": False, # right-to-left chat layout (chat messages + composer only)
"notifications_enabled": False, # browser notification when tab is in background
"show_thinking": True, # show/hide thinking/reasoning blocks in chat view
"simplified_tool_calling": True, # render tools/thinking as compact inline timeline activity
"simplified_tool_calling": True, # legacy compatibility; Worklog renderer remains enabled
"terminal_auto_expand_on_output": False, # auto-expand terminal panel when output arrives while collapsed
"api_redact_enabled": True, # redact sensitive data (API keys, secrets) from API responses
"dashboard_plugins": {}, # plugin_name -> bool, opt-in per plugin (default off per PF-10b)
Expand All @@ -5514,7 +5514,13 @@ def _get_session_agent_lock(session_id: str) -> threading.Lock:
"busy_input_mode": "queue", # behavior when sending while agent is running: queue | interrupt | steer
"password_hash": None, # PBKDF2-HMAC-SHA256 hash; None = auth disabled
}
_SETTINGS_LEGACY_DROP_KEYS = {"assistant_language", "bubble_layout", "default_model"}
_SETTINGS_LEGACY_DROP_KEYS = {
"assistant_language",
"bubble_layout",
"default_model",
"activity_feed_expanded_default",
"simplified_tool_calling",
}
_SETTINGS_THEME_VALUES = {"light", "dark", "system"}
_SETTINGS_SKIN_VALUES = {
"default",
Expand Down Expand Up @@ -5595,6 +5601,13 @@ def load_settings() -> dict:
try:
stored = json.loads(SETTINGS_FILE.read_text(encoding="utf-8"))
if isinstance(stored, dict):
if (
"worklog_details_expanded_default" not in stored
and "activity_feed_expanded_default" in stored
):
settings["worklog_details_expanded_default"] = bool(
stored.get("activity_feed_expanded_default")
)
settings.update(
{
k: v
Expand All @@ -5621,6 +5634,7 @@ def load_settings() -> dict:
_SETTINGS_ALLOWED_KEYS = set(_SETTINGS_DEFAULTS.keys()) - {
"password_hash",
"default_model",
"simplified_tool_calling",
}
_SETTINGS_ENUM_VALUES = {
"send_key": {"enter", "ctrl+enter"},
Expand Down Expand Up @@ -5655,12 +5669,11 @@ def load_settings() -> dict:
"rtl",
"notifications_enabled",
"show_thinking",
"simplified_tool_calling",
"terminal_auto_expand_on_output",
"api_redact_enabled",
"session_jump_buttons",
"session_endless_scroll",
"activity_feed_expanded_default",
"worklog_details_expanded_default",
}
# Language codes are validated as short alphanumeric BCP-47-like tags (e.g. 'en', 'zh', 'fr')
_SETTINGS_LANG_RE = __import__("re").compile(r"^[a-zA-Z]{2,10}(-[a-zA-Z0-9]{2,8})?$")
Expand All @@ -5669,6 +5682,15 @@ def load_settings() -> dict:
def save_settings(settings: dict) -> dict:
"""Save settings to disk. Returns the merged settings. Ignores unknown keys."""
current = load_settings()
if (
"worklog_details_expanded_default" not in settings
and "activity_feed_expanded_default" in settings
):
settings["worklog_details_expanded_default"] = settings.get(
"activity_feed_expanded_default"
)
settings.pop("activity_feed_expanded_default", None)
settings.pop("simplified_tool_calling", None)
pending_theme = current.get("theme")
pending_skin = current.get("skin")
theme_was_explicit = False
Expand Down
8 changes: 6 additions & 2 deletions static/boot.js
Original file line number Diff line number Diff line change
Expand Up @@ -1794,9 +1794,13 @@ function applyBotName(){
if(s.default_workspace) S._profileDefaultWorkspace=s.default_workspace;
window._whatsNewSummaryEnabled=!!s.whats_new_summary_enabled;
window._showThinking=s.show_thinking!==false;
window._simplifiedToolCalling=s.simplified_tool_calling!==false;
window._simplifiedToolCalling=true;
window._terminalAutoExpandOnOutput=!!s.terminal_auto_expand_on_output;
window._activityFeedExpandedDefault=!!s.activity_feed_expanded_default;
window._worklogDetailsExpandedByDefault=!!(
Object.prototype.hasOwnProperty.call(s,'worklog_details_expanded_default')
? s.worklog_details_expanded_default
: s.activity_feed_expanded_default
);
window._sidebarDensity=(s.sidebar_density==='detailed'?'detailed':'compact');
window._pinnedSessionsLimit=parseInt(s.pinned_sessions_limit||3,10)||3;
window._inflightStateLimits={
Expand Down
Loading
Loading