2062 Commits

  • fix: terminal files fail to load on a Tether reconnect instead of being retried (#34396)
    When the computer connected through Tether reconnected while the terminal's files panel was loading its working folder, a folder listing or a file, the load failed with "Tether connection interrupted". Reads like these are meant to be retried once Tether is back. They never were, because each of them went out with an empty upload attached, and an upload cannot be sent a second time. Requests with nothing to upload now go without one, so these reads are retried on the new connection. Uploads work as before.
    
    Fixes #34394
  • fix: Browser tab in Chrome mode keeps reconnecting when its chat is open in two windows (#34133)
    * fix: Browser tab in Chrome mode keeps reconnecting when its chat is open in two windows
    
    With the same chat open in two windows, the terminal hands the Chrome tab to the newer window, but the older window only saw a lost connection. It reconnected and took the tab back, so both windows kept flipping to "Reconnecting…" and the "Browser opened in another viewer." message never showed. The terminal's reason for ending the tab's connection now reaches the page, as it already does for the shell. The window that lost the tab shows that message and stops, and the other window keeps the page.
    
    Fixes #34095
    
    * fix: Browser tab in Chrome mode keeps reconnecting when its chat is open in two windows
    
    Narrows the change to passing the terminal's close reason on to the page. The relay's existing handling of a broken connection stays as it was.
  • feat: permission to limit sub-agents to specific users and groups (#34040)
    Sub-agents could only be switched on or off for the whole instance, so once they were on every user could spawn them and an admin had no way to keep the extra model usage to a pilot group. The user permissions now have a Sub-agents switch under Features, both in the default permissions and in each group, next to Memories and working the same way. Users without the permission no longer get the sub-agent tool in their chats, nor the timer tool that is part of the same feature. Admins are not restricted by it, and with sub-agents off in Admin Settings nobody gets them, admins included. The permission is on by default, so existing instances behave as before until an admin turns it off; the default can also be set with the USER_PERMISSIONS_FEATURES_SUBAGENTS environment variable.
    
    Closes #34038
  • Merge pull request #33929 from Classic298/fix-chat-view-disconnect-log
    fix: error traceback in the log when a chat's layout save is dropped
  • feat: optional size limit for chat history tool results (#33695)
    * feat: optional size limit for chat history tool results
    
    Reading a long earlier chat through the Chat History tools could return far more text than a model's context window holds, so the next request failed. Admins can now set VIEW_CHAT_MAX_CHARS to cap what is returned. The newest messages are kept, older ones are dropped, and the result says it was cut and how many messages came back. Unset keeps the full chat as before.
    
    Fixes #33608
    
    * feat: set the chat read limit from the admin settings
    
    The limit on how much of an earlier chat a model can read could only be set with an environment variable. It is now a Chat Read Limit field in Admin Settings under General, next to the skill limits. The environment variable still works as the starting value, and the setting saved in the panel takes precedence.
    
    * fix: chat read limit failing on chats with empty or non-text messages
    
    With a chat read limit set, reading an imported chat that held empty or non-text message content ended in an error instead of the chat. Such content is now counted and cut as plain text.
  • fix: saving a chat's view answers signed-out and pending accounts with "Invalid chat view" (#33885)
    Saving a chat's view (the per-chat display state the app stores) looked at the request before it checked who was sending it. A signed-out client or a pending account sending broken data got "Invalid chat view" instead of being refused, unlike everywhere else that needs a signed-in user, and the server read up to 1 MB of data for callers it would turn away anyway. The caller is now checked first, so they get the usual 401 Unauthorized. Signed-in users see no change.
    
    Fixes #33883
  • fix: OpenAI image generation with no model set asks GPT image models for base64 output (#33875)
    With the OpenAI image engine and the Model field left empty, requests go out for gpt-image-2 but still ask for base64 output, a parameter OpenAI does not support for GPT image models. Typing gpt-image-2 into the Model field already left it out. Whether that parameter is sent now depends on the model the request actually uses, so the empty default and the named model send the same request, and an image edit request that names its own model is handled the same way.
    
    Fixes #33874
  • fix: terminal connection closed before login no longer logs an error (#33863)
    When the file panel or terminal view closes its live connection right after opening it, the server logged a full error traceback for a client that was already gone. Such a connection is now dropped quietly. Real authentication failures still close with the same error as before.
    
    Fixes #33850
  • refac: limit size of version history diffs (#33865)
    Diffing two versions of a skill, tool, function or prompt now refuses inputs above 5000 lines per version. All four history diff views share the same check.
  • feat: client IP placeholders for connection custom headers (#33833)
    Connection custom headers had no way to tell the upstream provider which client a request came from. Adding {{USER_IP}} and {{X_FORWARDED_FOR}} fills in the client address Open WebUI resolves for the request, for example {"X-Real-IP": "{{USER_IP}}"}. Both are empty when there is no client request, such as automations and background jobs. Headers that don't use them are unaffected.
    
    Fixes #33819
  • refac: skip background work for accounts that were deactivated meanwhile (#33801)
    Follow-up generation after a response and replies to channel mentions are now skipped when the account that triggered them has been deactivated in the meantime.