Some checks failed
Release & Docker / release (push) Has been cancelled
## Release v0.51.262 — Release ID (stage-r12) Phase-3 light slice (no-screenshot items) — 3 PRs. ### Fixed | Issue/PR | Author | Fix | |----------|--------|-----| | #3432 (#3532) | @franksong2702 | Normalize the recall-prefill terminal `user` turn so WebUI doesn't send adjacent `user` roles to strict chat templates (Mistral/Gemma/Jinja). `_normalize_prefill_messages_before_user_turn()` in both `streaming.py` + `gateway_chat.py`; drops only the terminal user tail, preserves assistant/system/mid-list context. **Rebased onto master** (was CONFLICTING). | | #2558 (#3516) | @rodboev | "Reveal in file manager" now translates container workspace paths (`/workspace`) back to the host mount path for Docker deployments (traversal-safe via `safe_resolve` + sibling-prefix guard). | ### Changed | Issue/PR | Author | Change | |----------|--------|--------| | (#3539) | @Lyr-GW | Completed the Chinese (Simplified) `zh` localization (MCP controls, tool-list pagination) with all interpolations preserved, and the language dropdown now applies the locale **instantly** on change. | ### Review fix absorbed (Codex) #3539 also added an `allowed=['en','zh']` filter to the Settings language dropdown, which dropped the 9 other shipped locales (it/ja/ru/es/de/pt/ko/fr/tr) — and since save falls back to `en` when the select has no matching option, an existing user of those locales would be **silently reset to English** on a Settings save. Removed the filter (dropdown enumerates all `LOCALES` again, matching master); partially-translated locales fall back per-key to English at render. + regression test `test_issue3539_language_dropdown_all_locales.py`. ### Gate - Full pytest suite: **7701 passed, 0 failed** - ESLint: CLEAN · ruff: CLEAN · browser-smoke: CLEAN - Codex (regression): SHIP-ONLY-WITH-FIXES (dropdown drops-locales) → fixed → **SAFE TO SHIP** (verified prefill drops only terminal user tail in both paths, Docker path-translation traversal-safe, zh interpolations preserved) Co-authored-by: franksong2702 <franksong2702@users.noreply.github.com> Co-authored-by: rodboev <rodboev@users.noreply.github.com> Co-authored-by: Lyr-GW <Lyr-GW@users.noreply.github.com>
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""Tests for issue #2558 -- container path translation for Reveal in File Manager.
|
|
|
|
Pins that _handle_file_reveal applies the same container_path_prefix /
|
|
host_path_prefix substitution used by _handle_file_open_vscode.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import pathlib
|
|
import re
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parent.parent
|
|
ROUTES = ROOT / "api" / "routes.py"
|
|
|
|
|
|
class TestRevealPathTranslation:
|
|
def test_handler_supports_path_prefix_mapping(self):
|
|
"""_handle_file_reveal must contain container_path_prefix / host_path_prefix
|
|
so Docker users get the same path translation as _handle_file_open_vscode."""
|
|
src = ROUTES.read_text(encoding="utf-8")
|
|
m = re.search(
|
|
r"def _handle_file_reveal\(handler, body\):.*?(?=\ndef )",
|
|
src,
|
|
re.DOTALL,
|
|
)
|
|
assert m, "_handle_file_reveal not found in api/routes.py"
|
|
body = m.group(0)
|
|
assert "container_path_prefix" in body
|
|
assert "host_path_prefix" in body
|
|
|
|
def test_handler_uses_target_str_in_subprocess(self):
|
|
"""The subprocess dispatch must use the translated string, not str(target)."""
|
|
src = ROUTES.read_text(encoding="utf-8")
|
|
m = re.search(
|
|
r"def _handle_file_reveal\(handler, body\):.*?(?=\ndef )",
|
|
src,
|
|
re.DOTALL,
|
|
)
|
|
assert m
|
|
body = m.group(0)
|
|
# After translation the variable must be named target_str (not str(target))
|
|
assert "target_str" in body
|
|
# Ensure the translation assignment is present
|
|
assert "target_str = host_prefix + target_str[len(container_prefix):]" in body
|