Releases: open-webui/open-terminal
Releases · open-webui/open-terminal
v0.11.34
v0.11.33
Fixed
grep_searchnow defaults to regex mode, matching actual grep behaviour. Patterns likefoo|baranderr.*timeoutwork as expected without needing to setregex=trueexplicitly.
v0.11.32
Changed
- 🗂️ Session-aware relative path resolution — all LLM-exposed file endpoints (
list_files,read_file,write_file,display_file,replace_file_content,grep_search,glob_search) now read theX-Session-Idheader and resolve relative paths (e.g..) against the session's working directory instead of always defaulting tofs.home. Added an optionalcwdparameter toUserFS.resolve_path()to support this. Absolute paths are unaffected.
v0.11.31
Changed
- 🗂️ Per-session working directory — replaced the process-global
os.chdir()with an in-memory, session-aware dictionary keyed byX-Session-Idheader. Multiple concurrent chat sessions now maintain independent working directories.GET/POST /files/cwd,POST /execute, andPOST /api/terminalsall read the header to resolve the correct cwd. Sessions without a header fall back tofs.home. Entries expire after 7 days of inactivity (sliding TTL), configurable viaOPEN_TERMINAL_SESSION_CWD_TTL(orsession_cwd_ttlin config.toml).
v0.11.30
Changed
- 🔑 Stronger auto-generated API keys — increased from 192-bit (32 chars) to 384-bit (64 chars) entropy, making brute-force attacks computationally infeasible.
- 🔒 API key required to start — the server now refuses to start without an API key configured. The CLI auto-generates one as before, but running via
uvicorndirectly without settingOPEN_TERMINAL_API_KEYis no longer allowed. - 🛡️ Constant-time API key comparison — both HTTP and WebSocket authentication now use
hmac.compare_digest()instead of!=, preventing timing-based key extraction. ⚠️ CORS default warning — a prominent yellow box is printed at startup when--cors-allowed-originsis left at the default*, warning operators to restrict it for production.
v0.11.29
Fixed
- 🔒 File save fails in multi-user mode —
_chown()transferred file ownership to the provisioned user but didn't set group-write permission, leaving files at644. The server process (a group member) could create new files but couldn't overwrite them on subsequent saves, returningPermissionError. Now setschmod g+wafterchown, matching the2770treatment already applied to directories. (#93)
v0.11.28
Added
- 📦 Compressed directory download (
POST /files/archive) — bundle one or more files and directories into a ZIP archive for download. Cross-platform compatible (Windows, macOS, Linux). Multi-user access control enforced.
v0.11.27
Added
- 🧠 System prompt endpoint (
GET /system) — returns a structured system prompt for LLM integration, grounding the model in the environment (OS, hostname, user, shell, Python version) with directives for tool usage. Gated byOPEN_TERMINAL_ENABLE_SYSTEM_PROMPT(defaulttrue); advertised viafeatures.systeminGET /api/configso consumers can check support before fetching. - ⚙️
OPEN_TERMINAL_ENABLE_SYSTEM_PROMPT— environment variable (orenable_system_promptin config.toml) to enable/disable the/systemendpoint and feature flag. Defaults totrue. - ⚙️
OPEN_TERMINAL_SYSTEM_PROMPT— environment variable (orsystem_promptin config.toml) to fully override the generated system prompt with custom content.
v0.11.26
Changed
- ♻️
utils/documents.py— extracted all document text extraction logic fromread_fileinto a dedicated module with anEXTRACTORSregistry. Adding a new format now requires only a single function and a one-line registry entry. No behaviour changes.
v0.11.24
Added
- 📄 Office document text extraction in
read_file—.docx,.xlsx, and.pptxfiles are now automatically converted to text and returned in the standard JSON format, making them readable by LLMs. Word documents extract paragraphs and table contents, Excel spreadsheets render all sheets as tab-separated values, and PowerPoint presentations extract text from all slides. Supportsstart_line/end_linerange selection.