Skip to content

1.12.0 release#5331

Merged
timothycarambat merged 1 commit into
masterfrom
1.12.0
Apr 2, 2026
Merged

1.12.0 release#5331
timothycarambat merged 1 commit into
masterfrom
1.12.0

Conversation

@timothycarambat

Copy link
Copy Markdown
Member

No description provided.

@timothycarambat timothycarambat merged commit f6f1c80 into master Apr 2, 2026
@timothycarambat timothycarambat deleted the 1.12.0 branch April 2, 2026 20:52
timothycarambat added a commit that referenced this pull request Apr 22, 2026
* fix: typo in contribution guidelines, update project metadata  and pull_request_temp...md (#5010)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump copyright year
resolves #5017

* feat: update light mode UI sidebar (#4996)

* implement light mode sidebar redesign

* Abstract hardcoded hex values into reusable css variables

* reorder ternary and apply bold font on hovered workspaces

* Remove double icon hack and use a state tracking whether workspace item is being hovered over for fill styles

* lint

* convert css variables and custom classes to default tailwind classes

* remove grab icon filling on hover logic

* revert css vars to original values

* remove light mode css vars | change bg of sidebar in light mode to right color | make icons correct color in light mode

* revert dark mode change

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(frontend): fix event listener memory leak in useIsDisabled hook (#5027)

fix: optimize event listener management in useIsDisabled hook

* feat: dedicated dark theme option with system preference support (#5007)

* implement OS level theme switching and dark mode option

* simplify

* fix logo bug in login | place back useTheme comment

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix cleanup pr workflow

* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 4172751.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* 1.12.1 release tags

* tags

* 1.12.1 release tags (#5483)

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Dipanshu Rawat <dv451197@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Brian Pursley <bpursley@cinlogic.com>
Co-authored-by: Morgan <morgan@scifoundry.com>
Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Ryan <RALaBarge@users.noreply.github.com>
Co-authored-by: Maxwell Calkin <101308415+MaxwellCalkin@users.noreply.github.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: Peter Dave Hello <3691490+PeterDaveHello@users.noreply.github.com>
Co-authored-by: Kesku <62210496+kesku@users.noreply.github.com>
Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Ishan Goswami <ishangoswami315@gmail.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Yitong Li <yitongli0814@gmail.com>
Co-authored-by: arvydev <55648027+arvydev@users.noreply.github.com>
Co-authored-by: Mike Lambert <mlambert@gmail.com>
Co-authored-by: Neha Prasad <neh6a683@gmail.com>
Co-authored-by: S. Neuhaus <neuhaus@users.noreply.github.com>
Co-authored-by: suyua9 <1521777066@qq.com>
Co-authored-by: Guilherme Nogueira <guilherme.lopesn@gmail.com>
Co-authored-by: Kurt <bustapipes@users.noreply.github.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Jordi Mas <jmas@softcatala.org>
Co-authored-by: Asish Kumar <87874775+officialasishkumar@users.noreply.github.com>
Co-authored-by: Akhil <133588800+Akhil373@users.noreply.github.com>
timothycarambat added a commit that referenced this pull request Apr 22, 2026
* fix: typo in contribution guidelines, update project metadata  and pull_request_temp...md (#5010)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump copyright year
resolves #5017

* feat: update light mode UI sidebar (#4996)

* implement light mode sidebar redesign

* Abstract hardcoded hex values into reusable css variables

* reorder ternary and apply bold font on hovered workspaces

* Remove double icon hack and use a state tracking whether workspace item is being hovered over for fill styles

* lint

* convert css variables and custom classes to default tailwind classes

* remove grab icon filling on hover logic

* revert css vars to original values

* remove light mode css vars | change bg of sidebar in light mode to right color | make icons correct color in light mode

* revert dark mode change

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(frontend): fix event listener memory leak in useIsDisabled hook (#5027)

fix: optimize event listener management in useIsDisabled hook

* feat: dedicated dark theme option with system preference support (#5007)

* implement OS level theme switching and dark mode option

* simplify

* fix logo bug in login | place back useTheme comment

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix cleanup pr workflow

* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 4172751.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* sync locales

* ensure db schema

* 1.12.1 release tags (#5483)

* bump pg tag

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Dipanshu Rawat <dv451197@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Brian Pursley <bpursley@cinlogic.com>
Co-authored-by: Morgan <morgan@scifoundry.com>
Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Ryan <RALaBarge@users.noreply.github.com>
Co-authored-by: Maxwell Calkin <101308415+MaxwellCalkin@users.noreply.github.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: Peter Dave Hello <3691490+PeterDaveHello@users.noreply.github.com>
Co-authored-by: Kesku <62210496+kesku@users.noreply.github.com>
Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Ishan Goswami <ishangoswami315@gmail.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Yitong Li <yitongli0814@gmail.com>
Co-authored-by: arvydev <55648027+arvydev@users.noreply.github.com>
Co-authored-by: Mike Lambert <mlambert@gmail.com>
Co-authored-by: Neha Prasad <neh6a683@gmail.com>
Co-authored-by: S. Neuhaus <neuhaus@users.noreply.github.com>
Co-authored-by: suyua9 <1521777066@qq.com>
Co-authored-by: Guilherme Nogueira <guilherme.lopesn@gmail.com>
Co-authored-by: Kurt <bustapipes@users.noreply.github.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Jordi Mas <jmas@softcatala.org>
Co-authored-by: Asish Kumar <87874775+officialasishkumar@users.noreply.github.com>
Co-authored-by: Akhil <133588800+Akhil373@users.noreply.github.com>
timothycarambat added a commit that referenced this pull request May 26, 2026
* fix: typo in contribution guidelines, update project metadata  and pull_request_temp...md (#5010)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump copyright year
resolves #5017

* feat: update light mode UI sidebar (#4996)

* implement light mode sidebar redesign

* Abstract hardcoded hex values into reusable css variables

* reorder ternary and apply bold font on hovered workspaces

* Remove double icon hack and use a state tracking whether workspace item is being hovered over for fill styles

* lint

* convert css variables and custom classes to default tailwind classes

* remove grab icon filling on hover logic

* revert css vars to original values

* remove light mode css vars | change bg of sidebar in light mode to right color | make icons correct color in light mode

* revert dark mode change

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(frontend): fix event listener memory leak in useIsDisabled hook (#5027)

fix: optimize event listener management in useIsDisabled hook

* feat: dedicated dark theme option with system preference support (#5007)

* implement OS level theme switching and dark mode option

* simplify

* fix logo bug in login | place back useTheme comment

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix cleanup pr workflow

* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960dcae605eef418602870b8fb102ed1f1c7.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35ab3ea271e36efa7b4a42e6792c7ee4108.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87ef6dcd2076a10c7768b5855213195b86d.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 41727518584491baabf50e10da35f6006be55dfd.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* 1.12.1 release tags (#5483)

* resolve GHSA-jwqg-jfg3-x5vv

* Show agent skills, flows, and MCP tools in chat tools menu (#5444)

* show agent skills, flows, and MCP tools in collapsible sections in chat tools menu

* fix tools menu toggle disabled bypass, add border-none to buttons, and useMemo improvements

* replace mcp server cache with loading state for mcp servers

* enable sub-skill management

* refactor

* Translations for chat tools menu improvements (#5448)

* normalize translations

* update translations

* norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* [FEAT] Add native Baidu Search provider for Agent web browsing (#5388)

* feat: add native baidu search provider for agent web browsing

* chore: address baidu search review feedback

* refactor baiduSearch internal util to be locally scoped

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(embedder): surface Mistral embedding failures (#5513)

* fix(embedder): surface Mistral embedding failures

* fix pr

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update readme
resolves #5519

* fix: invalid docs links in FileSystemSkillPanel (#5518)

* fix invalid documentation link

* fix link and trans i18n

* fix tag

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Remove default models to show empty until real models are retreieved (#5524)

resolves #5505
Fix placeholder
resolves #5503
resolves #5522

* Fix deepseek v4 reasoning inject thoughts (#5527)

* Fix deepseek v4 injectReasoning error
resolves #5509

* comment

* fix priority for workspace sidebar items that are unclear. Resolves #5502

* fix(agent): check auto-approved skills env correctly (#5511)

* fix(agent): check auto-approved skills env correctly

* remove file

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix double /reset in agent mode (#5516)

fix double /reset in agent mode

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: support OpenShift arbitrary UID/GID-0 in Docker image (#5136)

* fix: support OpenShift arbitrary UID/GID-0 in Docker image

Made-with: Cursor

* move to community

---------

Co-authored-by: Petre Ghita <petre.ghita@asset-metrix.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Normalize lemonade embedder error handling (#5547)

closes #5318
resolves #5305

* Update Sponsors README

* feat: Scheduled Jobs (#5322)

* initialize

* expand tool result text limit | add syntax highlighting and json formatting to tool result rendering

* fix onError jsdoc

* lint

* fix unread icon

* route protection

* improve form handling for NewJobModal

* safeJsonParse

* remove unneeded comments

* remove trycatch

* add truncateText helper

* add explicit fallback value tos safeJsonParse

* add shared cron constant and helpers

* reduce frontend indirection

* use isLight to compute syntax highlighting theme

* remove dead code

* remove forJob and make job limit to 50

* create recomputeNextRunAt helper method

* add comment about nextRunAt recomputation

* add job queue and concurrency control to scheduled jobs

* use p-queue

* change default max concurrent value to 1

* add comment explaining internal scheduling system

* add recomputeNextRunAt on boot

* add generated documents to run details

* Modify toolsOverride functionality where no tools selected means no tools are given to the agent

add a select all/deselect all toggle button for easily selecting all
tools in the cerate job form

* create usePolling hook

* add polling to scheduled jobs and scheduled job runs pages

* add cron generation feature in job form

* remove cron generation feature | add cron builder feature | add max active scheduled jobs limit

* set MAX_ACTIVE to null

* replace hour and minute input fields with input with type time

* simplify

* organize components

* move components to bottom of page component

* change Generated Documents to Generated Files

* add i18n to cronstrue

* add i18n

* add type="button" to button elements

* refactor fileSource retrieval logic

* one scheduled job run can have status "running"

* add protection of file retrieveal from scheduled job in multiuser mode

* fix comments

* make job status default to queued

* add queued status

* fix bug with result trace rendering

* store timeout ref and clearTimeout once race settles

* remove unneeded handlerPromise tracking

* move imports to top level

* refactor hardcoded paths to path resolve functions

* implement new job form design

* simplify

* fix button styles

* fix runJob bug

* implement styles for scheduled jobs page

* apply dark mode figma styles

* delete unused translation key

* implement light mode for new new job modal, run history, and run details

* lint

* fix light mode scroll bar in tool call card

* adjust table header contrast

* fix type in subtitle

* kill workers when job is in-flight before deleting job

* add border-none to buttons

* change locale time to iso string

* import BackgroundService module level | instatiate backgroundService singltone once and reuse across handlers

* add p-queue, @breejs/later and cron-validate as core deps

* parse cron expression to a builder state once

* add theme to day buttons in cron builder

* fix stale tools selection caption

* flip popover when popover clips screen height

* make ScheduleJob.trigger() await the run insertion | disable run now button if job is in flight

* regen table

* refactor generated file card

* refactor frontend

* remove logs

* major refactor for tool picking, fix bree/later bug

* combine action endpoints, move contine to method

* fix unoptimized query with include + take + order

* fix dangerous use, refactor job to utils

* add copy content to text response

* improve notification system subscription for browser

* remove unused translations

* prevent gen-file cleanup job from deleting active job file generated references

* rich text copy

* Scheduled Jobs: Translations (#5482)

* add locales for scheduled jobs

* i18n

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add config flag with UI notice

* update README

* telemetry datapoints

* Always use UTC on backend, convert to local in frontend

* fix tz render

* Add job killing

* cleanup thinking text in job notifications and break out reasoning in response text.
Also hide zero metrics since that is useless

* Port generatedFile schema to the normalized workspace chat `outputs` file format so porting to thread is simple and implem between chats <> jobs is 1:1

* what the fuck

* compiled bug

* fixed thinking oddity in complied frontend

* supress multi-toast

* fix duration call

* Revert "fix duration call"

This reverts commit 0491bc71f4223e65ea4046561b15b268fefb8da2.

* revert and reapply fix

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Rename auto mode to agent mode (#5551)

* update auto mode to agent

* auto-translate agent mode title for all locales

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Auto-rename thread in agent mode (#5550)

auto-rename thread in agent mode

Made-with: Cursor

* update scheduled job continue CTA (#5558)

* fix(tts): strip Markdown syntax before sending text to TTS engines (#5560)

* fix(tts): strip Markdown syntax before sending text to TTS engines

Chat responses are rendered as Markdown but the TTS components piped the
raw response into Piper / the browser's `SpeechSynthesis` API. The
synthesizer reads every special character literally — `**bold**` becomes
"asterisk asterisk bold asterisk asterisk", `# Heading` becomes "pound
heading", code fences are read backtick-by-backtick, and bullet lists
become "hyphen item". The result is unintelligible whenever the assistant
includes any formatting, which is most of the time.

This commit adds a small `messageToSpeech` helper that converts a
Markdown chat message into plain text suitable for TTS:

- fenced code blocks and images are dropped (nothing useful to read)
- inline code and link labels keep their text content
- emphasis markers, headings, blockquote markers, list markers, and
  horizontal rules are stripped while preserving the underlying words
- HTML tags are removed but their text content kept
- table pipes become commas so rows read naturally

The helper is regex-based — no new dependency — and is wired into both
the native (`SpeechSynthesis`) and Piper TTS components in
`WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/Actions/TTSButton`.

Closes #5557.
---
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Community Hub import page responsiveness on narrow widths (#5544)

* make community hub import page responsive | fix top border bug

* fix top border bug

* fix layout shift

* remove bg to keep designs in spec

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: SPA nav for thread/workspace switching (#5528)

* fix: white flash when switching between threads

* nest thread route under workspace

* fix: white flash when switching between workspaces

* simplify Link usage in workspace/thread sidebar items

* smooth workspace and thread switching

* fix race condition on send during thread/workspace switch

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: tools popover overflowing screen on small viewports (#5549)

* fix tools popover from expanding beyond screen height limits

* fix max height clamp | remove unneeded useLayoutEffect dependency

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* apply refactor for recursive copy-file with symlinks: GHSA-vjrp-43mm-j7vw

* sync build from embed changes in https://github.com/Mintplex-Labs/anythingllm-embed/pull/18

* fix: scope thread options hover state (#5606)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: allow configurable collector port (#5607)

* feat: allow configuring collector port

* refactor

* persist collector save in prod

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/17

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/16

* stringify uuid for embed

* fix: add font fallback for form controls (#5618)

* fix: add font fallback for form controls

* fix: restore complete index.css with font fallback

* move to end and mark important

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* norm symlink fix from GHSA-vjrp-43mm-j7vw to directories. resolves #5642

* fix: auto-speak not playing in agent mode (#5595)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: adding MiniMax LLM provider (#5450)

* add MiniMax LLM provider support

* add MiniMax LLM provider to the docs

* fix: add trailing newlines for lint compliance

* add env vars to system settings | make max tokens configurable via ui | pass max tokens into minimax llm provider

* change fallback max tokens value to null to use provider default | pass max tokens into handleFucntionCallStream and chat

* add minimax to getModelTag switch

* pass provider into tooledStream and tooledComplete

* remove max tokens param

* update image

---------

Co-authored-by: angelplusultra <macfittondev@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent gemini agent 400s from parallel tool calls (#5630)

fix: disable parallel tool calls for gemini agent provider

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Support reasoning content in v2 stream handler (#5654)

* refactor LMStudio for reasoning_content
closes #5584
resolves #5583

* Lemonade stream/completion reasoning optional via v2 change
resolves #5585

* migrate Deepseek and GiteeAI

* Update DeviceTokens to already-admin user on MUM migration (#5655)

resolve GHSA-h349-hp2v-8rhw

* Support pulling generated documents from API calls (#5658)

* support pulling generated documents from API calls

* revert async wait

* fix strictness of packMessages to handle streaming chunks but keep functionality

* Embed logos in docker prod build (#5660)

* embed logos in docker build

* forgot assets

* feat: Memories/Personalization (#5269)

* add memory storage layer with model, endpoints, schema, and system setting

* add memory extraction background worker

* handle single-user and multi-user mode for memory extraction

* add memory injection and personalization ui

* lint

* personalization UI polish, fix RBAC for all roles, and endpoint guards

* split admin personalization page into subcomponents

* split admin personalization page into subcomponents, use early return instead of ternary for readability

* make error responses consistent in memory endpoints

* consolidate duplicate MemoryItem into shared component

* skip memory reranking when no query context is available

* extract promptWithMemories util to deduplicate memory injection

* add english translations

* refactor memory api routes to eliminate ambiguous path params

* make memory extraction interval and idle threshold configurable via env vars

* add hint to memory form input

* inline personalization content in admin settings page

* consolidate unprocessed chat queries into single fetch

* simplify personalization page with early returns and layout subcomponent

* add memories sidebar with chat settings menu redesign

* remove legacy personalization ui

* split MemoriesSidebar into subcomponent folders

* fix memory card menu spacing to match design

* fix memories visibility for non-admin users

* add english translations for memories sidebar ui

* add workspace access checks to all memory endpoints

* pass user prompt to agent getDefinition for memory reranking

* check idle threshold per user/workspace group instead of globally

* use factory pattern for i18n text sizes and replace Trans with plain t() keys

* add placeholder examples and format guidance for manual memory creation

* remove stale comment

* refactor chat menu

* refactor sidebar to use provider and simplified DOM rendering

* fix memories sidebar overflow from long workspace names, widen memories options menu

* fix edit memory modal cursor landing at start of input

* hide memory add/move actions when at limit

* revert scope of workspace settings route changed for first pass of memories ui

* jsdoc memory model methods, drop redundant error logs

* inline error response returns and move body validation after perms in memory endpoints

* run memory fetches concurrently in list endpoint and prompt injection

* jsdoc server memory model methods

* normalize memory_enabled to true/false and add SystemSettings helper

* extract memory ownership middleware, strip redundant .end() calls

* use validWorkspaceSlug middleware for memory endpoints, switch to slug-based urls

* add description to memories util

* simplify memory ownership middleware to single db query

* use aibitat tool call for memory extraction, add chat safety limits

* truncate per-chat prompt/response before memory extraction

* add input validation to memory model

* validate ids array input in markMemoryProcessed

* inline memory injection in chatPrompt and systemPrompt

* make memory migration additive and drop unused sourceThreadId

* normalize translation files

* reset translations, minor nit

* refactor consts, extract memories with outputs

* set intervla

* sync

* rearch how memory extract works by moving to Observer/Reflector pattern (Mastra aspect)

* remove timeout on load

* Feat/memory i18n (#5661)

translations for #5269

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add memories

* Workspace deletion protection (#5662)

* add WORKSPACE_DELETION_PROTECTION env flag to disable workspace deletion from UI and APIs

* minor nits

* patch test for phrase

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix for GHSA-6hrp-7mw6-8v59

* Model router (#5324)

* add model router backend: schema, models, API, evaluator, provider, and cooldown

* add model router frontend: settings pages, workspace integration, rule builder with DnD, and system LLM support

* add routing indicator, new rule types, and UX improvements for model router

* add provider credential validation to model router and fix icon alignment

* add llm classifcation rules for model router

* lint

* add vision routing, agent support, and configurable cooldown to model router

* add english translations for model router

* move isPathMatch to path utils

* fix model router sticking to first model in agent mode

* make model router notifications ephemeral and add CSV rule support

* improve model route notification ux and fix agent image routing

* split RuleForm into subcomponents

* extract RuleRow subcomponent and move ModalWrapper to NewRouterModal

* remove /admin prefix from model router endpoints

* use single query for model router list endpoint

* clean up model router error handling and http methods

* refactor model router rule update method and fix stale error field names

* add model router env vars to .env.example

* update fallback model description to mention llm rule classification

* fix model router rule row alignment and badge readability

* Model Router: Multi-condition rules, updated designs, and router edit support (#5478)

* Implement draft designs

* add matches comparator for prompt content

* implement multi conditional to a calculated rule

* fix between comparator

* restyle model router modals to match light mode designs

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* replace model route spinner with webm animation

* route llm classifier through aibitat tool call

* fix: rule form state not resetting when making new rules

* rename router form to rules page + fix and/plus button styles

* add telemetry for model router creation

* fix x button alignment on rule condition rows

* simple UI changes

* fix router

* Refactor model routing into singleton with sticky routes and LLM caching

Consolidate router/index.js, router/deterministic.js, and router/cooldown.js
into a single ModelRouterService singleton class that manages all routing state.

Key changes:
- Sticky model routing: once a rule matches, the model stays active for
  follow-up messages that don't match any rule (e.g., "tell me more"),
  preventing unwanted bouncing back to the fallback model.
- LLM classification cache: expensive LLM classifier calls are cached for
  the full sticky window (default 5 min), running at most once per window.
- Calculated rules always re-evaluate (they're instant), so topic shifts
  that match a different rule still route correctly.
- Route notifications only fire when the model actually changes, not on
  every message.
- Router config is cached in-memory and invalidated on CRUD operations.
- Detailed logging for cache hits/misses/expiry and rule evaluation.

* fix model router notification text to be i18n

* prevent history overwrite on regen

* fix in-processing post-routed chat spacing in UI

* reset router on thread reset

* update translation key

* refactor route name label on chat history

* use system LLM on new model router

* frontend modular cleanup

* fix UI/UX on how rules are shown

* rule builder translations

* translations

* endpoint cleanup

* refactor rules

* fix router translation for no rule
remove from default plugins
port support for model router to ephemeral

* simplify stream handler

* do not route notify on first message (non-agent chat)

* fix cache keys

* ttl reset on followups

* Differentiate between short TTL and long TTL when we actually have run an LLM eval route

* port embed support for router option

* frontend fixes

* dynamic key

* 5315 i18n (#5666)

* translations

* norm

* readme entry

* update comments

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Agent Skill: User Survey (#5577)

* initialize feature

* lint

* fix stale comment

* fix number input

* remove needless condition

* add survey persistence

* add clarifying uestions buffer to aibitat instance with helper methods

* move plugin specific config data away from aibitat instance and into plugin itself

* create useTimeoutProgress hook

* ui refactor

* change [skipped] to [user skipped]

* implement designs

* add agent settings clairfying questions translations

* prompting

* refactor UI
fix issue where text input still submits on skip if anything typed
multi-choice selection not persisting
regen overwriting prompt

* simplify components, translations, agent settings menu

* remove timeout config functionality
replace number inputs with real number inputs?

* rename skill…
timothycarambat added a commit that referenced this pull request May 26, 2026
* fix: typo in contribution guidelines, update project metadata  and pull_request_temp...md (#5010)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump copyright year
resolves #5017

* feat: update light mode UI sidebar (#4996)

* implement light mode sidebar redesign

* Abstract hardcoded hex values into reusable css variables

* reorder ternary and apply bold font on hovered workspaces

* Remove double icon hack and use a state tracking whether workspace item is being hovered over for fill styles

* lint

* convert css variables and custom classes to default tailwind classes

* remove grab icon filling on hover logic

* revert css vars to original values

* remove light mode css vars | change bg of sidebar in light mode to right color | make icons correct color in light mode

* revert dark mode change

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(frontend): fix event listener memory leak in useIsDisabled hook (#5027)

fix: optimize event listener management in useIsDisabled hook

* feat: dedicated dark theme option with system preference support (#5007)

* implement OS level theme switching and dark mode option

* simplify

* fix logo bug in login | place back useTheme comment

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix cleanup pr workflow

* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960dcae605eef418602870b8fb102ed1f1c7.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35ab3ea271e36efa7b4a42e6792c7ee4108.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87ef6dcd2076a10c7768b5855213195b86d.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 41727518584491baabf50e10da35f6006be55dfd.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* 1.12.1 release tags (#5483)

* resolve GHSA-jwqg-jfg3-x5vv

* Show agent skills, flows, and MCP tools in chat tools menu (#5444)

* show agent skills, flows, and MCP tools in collapsible sections in chat tools menu

* fix tools menu toggle disabled bypass, add border-none to buttons, and useMemo improvements

* replace mcp server cache with loading state for mcp servers

* enable sub-skill management

* refactor

* Translations for chat tools menu improvements (#5448)

* normalize translations

* update translations

* norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* [FEAT] Add native Baidu Search provider for Agent web browsing (#5388)

* feat: add native baidu search provider for agent web browsing

* chore: address baidu search review feedback

* refactor baiduSearch internal util to be locally scoped

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(embedder): surface Mistral embedding failures (#5513)

* fix(embedder): surface Mistral embedding failures

* fix pr

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update readme
resolves #5519

* fix: invalid docs links in FileSystemSkillPanel (#5518)

* fix invalid documentation link

* fix link and trans i18n

* fix tag

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Remove default models to show empty until real models are retreieved (#5524)

resolves #5505
Fix placeholder
resolves #5503
resolves #5522

* Fix deepseek v4 reasoning inject thoughts (#5527)

* Fix deepseek v4 injectReasoning error
resolves #5509

* comment

* fix priority for workspace sidebar items that are unclear. Resolves #5502

* fix(agent): check auto-approved skills env correctly (#5511)

* fix(agent): check auto-approved skills env correctly

* remove file

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix double /reset in agent mode (#5516)

fix double /reset in agent mode

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: support OpenShift arbitrary UID/GID-0 in Docker image (#5136)

* fix: support OpenShift arbitrary UID/GID-0 in Docker image

Made-with: Cursor

* move to community

---------

Co-authored-by: Petre Ghita <petre.ghita@asset-metrix.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Normalize lemonade embedder error handling (#5547)

closes #5318
resolves #5305

* Update Sponsors README

* feat: Scheduled Jobs (#5322)

* initialize

* expand tool result text limit | add syntax highlighting and json formatting to tool result rendering

* fix onError jsdoc

* lint

* fix unread icon

* route protection

* improve form handling for NewJobModal

* safeJsonParse

* remove unneeded comments

* remove trycatch

* add truncateText helper

* add explicit fallback value tos safeJsonParse

* add shared cron constant and helpers

* reduce frontend indirection

* use isLight to compute syntax highlighting theme

* remove dead code

* remove forJob and make job limit to 50

* create recomputeNextRunAt helper method

* add comment about nextRunAt recomputation

* add job queue and concurrency control to scheduled jobs

* use p-queue

* change default max concurrent value to 1

* add comment explaining internal scheduling system

* add recomputeNextRunAt on boot

* add generated documents to run details

* Modify toolsOverride functionality where no tools selected means no tools are given to the agent

add a select all/deselect all toggle button for easily selecting all
tools in the cerate job form

* create usePolling hook

* add polling to scheduled jobs and scheduled job runs pages

* add cron generation feature in job form

* remove cron generation feature | add cron builder feature | add max active scheduled jobs limit

* set MAX_ACTIVE to null

* replace hour and minute input fields with input with type time

* simplify

* organize components

* move components to bottom of page component

* change Generated Documents to Generated Files

* add i18n to cronstrue

* add i18n

* add type="button" to button elements

* refactor fileSource retrieval logic

* one scheduled job run can have status "running"

* add protection of file retrieveal from scheduled job in multiuser mode

* fix comments

* make job status default to queued

* add queued status

* fix bug with result trace rendering

* store timeout ref and clearTimeout once race settles

* remove unneeded handlerPromise tracking

* move imports to top level

* refactor hardcoded paths to path resolve functions

* implement new job form design

* simplify

* fix button styles

* fix runJob bug

* implement styles for scheduled jobs page

* apply dark mode figma styles

* delete unused translation key

* implement light mode for new new job modal, run history, and run details

* lint

* fix light mode scroll bar in tool call card

* adjust table header contrast

* fix type in subtitle

* kill workers when job is in-flight before deleting job

* add border-none to buttons

* change locale time to iso string

* import BackgroundService module level | instatiate backgroundService singltone once and reuse across handlers

* add p-queue, @breejs/later and cron-validate as core deps

* parse cron expression to a builder state once

* add theme to day buttons in cron builder

* fix stale tools selection caption

* flip popover when popover clips screen height

* make ScheduleJob.trigger() await the run insertion | disable run now button if job is in flight

* regen table

* refactor generated file card

* refactor frontend

* remove logs

* major refactor for tool picking, fix bree/later bug

* combine action endpoints, move contine to method

* fix unoptimized query with include + take + order

* fix dangerous use, refactor job to utils

* add copy content to text response

* improve notification system subscription for browser

* remove unused translations

* prevent gen-file cleanup job from deleting active job file generated references

* rich text copy

* Scheduled Jobs: Translations (#5482)

* add locales for scheduled jobs

* i18n

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add config flag with UI notice

* update README

* telemetry datapoints

* Always use UTC on backend, convert to local in frontend

* fix tz render

* Add job killing

* cleanup thinking text in job notifications and break out reasoning in response text.
Also hide zero metrics since that is useless

* Port generatedFile schema to the normalized workspace chat `outputs` file format so porting to thread is simple and implem between chats <> jobs is 1:1

* what the fuck

* compiled bug

* fixed thinking oddity in complied frontend

* supress multi-toast

* fix duration call

* Revert "fix duration call"

This reverts commit 0491bc71f4223e65ea4046561b15b268fefb8da2.

* revert and reapply fix

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Rename auto mode to agent mode (#5551)

* update auto mode to agent

* auto-translate agent mode title for all locales

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Auto-rename thread in agent mode (#5550)

auto-rename thread in agent mode

Made-with: Cursor

* update scheduled job continue CTA (#5558)

* fix(tts): strip Markdown syntax before sending text to TTS engines (#5560)

* fix(tts): strip Markdown syntax before sending text to TTS engines

Chat responses are rendered as Markdown but the TTS components piped the
raw response into Piper / the browser's `SpeechSynthesis` API. The
synthesizer reads every special character literally — `**bold**` becomes
"asterisk asterisk bold asterisk asterisk", `# Heading` becomes "pound
heading", code fences are read backtick-by-backtick, and bullet lists
become "hyphen item". The result is unintelligible whenever the assistant
includes any formatting, which is most of the time.

This commit adds a small `messageToSpeech` helper that converts a
Markdown chat message into plain text suitable for TTS:

- fenced code blocks and images are dropped (nothing useful to read)
- inline code and link labels keep their text content
- emphasis markers, headings, blockquote markers, list markers, and
  horizontal rules are stripped while preserving the underlying words
- HTML tags are removed but their text content kept
- table pipes become commas so rows read naturally

The helper is regex-based — no new dependency — and is wired into both
the native (`SpeechSynthesis`) and Piper TTS components in
`WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/Actions/TTSButton`.

Closes #5557.
---
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Community Hub import page responsiveness on narrow widths (#5544)

* make community hub import page responsive | fix top border bug

* fix top border bug

* fix layout shift

* remove bg to keep designs in spec

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: SPA nav for thread/workspace switching (#5528)

* fix: white flash when switching between threads

* nest thread route under workspace

* fix: white flash when switching between workspaces

* simplify Link usage in workspace/thread sidebar items

* smooth workspace and thread switching

* fix race condition on send during thread/workspace switch

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: tools popover overflowing screen on small viewports (#5549)

* fix tools popover from expanding beyond screen height limits

* fix max height clamp | remove unneeded useLayoutEffect dependency

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* apply refactor for recursive copy-file with symlinks: GHSA-vjrp-43mm-j7vw

* sync build from embed changes in https://github.com/Mintplex-Labs/anythingllm-embed/pull/18

* fix: scope thread options hover state (#5606)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: allow configurable collector port (#5607)

* feat: allow configuring collector port

* refactor

* persist collector save in prod

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/17

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/16

* stringify uuid for embed

* fix: add font fallback for form controls (#5618)

* fix: add font fallback for form controls

* fix: restore complete index.css with font fallback

* move to end and mark important

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* norm symlink fix from GHSA-vjrp-43mm-j7vw to directories. resolves #5642

* fix: auto-speak not playing in agent mode (#5595)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: adding MiniMax LLM provider (#5450)

* add MiniMax LLM provider support

* add MiniMax LLM provider to the docs

* fix: add trailing newlines for lint compliance

* add env vars to system settings | make max tokens configurable via ui | pass max tokens into minimax llm provider

* change fallback max tokens value to null to use provider default | pass max tokens into handleFucntionCallStream and chat

* add minimax to getModelTag switch

* pass provider into tooledStream and tooledComplete

* remove max tokens param

* update image

---------

Co-authored-by: angelplusultra <macfittondev@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent gemini agent 400s from parallel tool calls (#5630)

fix: disable parallel tool calls for gemini agent provider

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Support reasoning content in v2 stream handler (#5654)

* refactor LMStudio for reasoning_content
closes #5584
resolves #5583

* Lemonade stream/completion reasoning optional via v2 change
resolves #5585

* migrate Deepseek and GiteeAI

* Update DeviceTokens to already-admin user on MUM migration (#5655)

resolve GHSA-h349-hp2v-8rhw

* Support pulling generated documents from API calls (#5658)

* support pulling generated documents from API calls

* revert async wait

* fix strictness of packMessages to handle streaming chunks but keep functionality

* Embed logos in docker prod build (#5660)

* embed logos in docker build

* forgot assets

* feat: Memories/Personalization (#5269)

* add memory storage layer with model, endpoints, schema, and system setting

* add memory extraction background worker

* handle single-user and multi-user mode for memory extraction

* add memory injection and personalization ui

* lint

* personalization UI polish, fix RBAC for all roles, and endpoint guards

* split admin personalization page into subcomponents

* split admin personalization page into subcomponents, use early return instead of ternary for readability

* make error responses consistent in memory endpoints

* consolidate duplicate MemoryItem into shared component

* skip memory reranking when no query context is available

* extract promptWithMemories util to deduplicate memory injection

* add english translations

* refactor memory api routes to eliminate ambiguous path params

* make memory extraction interval and idle threshold configurable via env vars

* add hint to memory form input

* inline personalization content in admin settings page

* consolidate unprocessed chat queries into single fetch

* simplify personalization page with early returns and layout subcomponent

* add memories sidebar with chat settings menu redesign

* remove legacy personalization ui

* split MemoriesSidebar into subcomponent folders

* fix memory card menu spacing to match design

* fix memories visibility for non-admin users

* add english translations for memories sidebar ui

* add workspace access checks to all memory endpoints

* pass user prompt to agent getDefinition for memory reranking

* check idle threshold per user/workspace group instead of globally

* use factory pattern for i18n text sizes and replace Trans with plain t() keys

* add placeholder examples and format guidance for manual memory creation

* remove stale comment

* refactor chat menu

* refactor sidebar to use provider and simplified DOM rendering

* fix memories sidebar overflow from long workspace names, widen memories options menu

* fix edit memory modal cursor landing at start of input

* hide memory add/move actions when at limit

* revert scope of workspace settings route changed for first pass of memories ui

* jsdoc memory model methods, drop redundant error logs

* inline error response returns and move body validation after perms in memory endpoints

* run memory fetches concurrently in list endpoint and prompt injection

* jsdoc server memory model methods

* normalize memory_enabled to true/false and add SystemSettings helper

* extract memory ownership middleware, strip redundant .end() calls

* use validWorkspaceSlug middleware for memory endpoints, switch to slug-based urls

* add description to memories util

* simplify memory ownership middleware to single db query

* use aibitat tool call for memory extraction, add chat safety limits

* truncate per-chat prompt/response before memory extraction

* add input validation to memory model

* validate ids array input in markMemoryProcessed

* inline memory injection in chatPrompt and systemPrompt

* make memory migration additive and drop unused sourceThreadId

* normalize translation files

* reset translations, minor nit

* refactor consts, extract memories with outputs

* set intervla

* sync

* rearch how memory extract works by moving to Observer/Reflector pattern (Mastra aspect)

* remove timeout on load

* Feat/memory i18n (#5661)

translations for #5269

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add memories

* Workspace deletion protection (#5662)

* add WORKSPACE_DELETION_PROTECTION env flag to disable workspace deletion from UI and APIs

* minor nits

* patch test for phrase

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix for GHSA-6hrp-7mw6-8v59

* Model router (#5324)

* add model router backend: schema, models, API, evaluator, provider, and cooldown

* add model router frontend: settings pages, workspace integration, rule builder with DnD, and system LLM support

* add routing indicator, new rule types, and UX improvements for model router

* add provider credential validation to model router and fix icon alignment

* add llm classifcation rules for model router

* lint

* add vision routing, agent support, and configurable cooldown to model router

* add english translations for model router

* move isPathMatch to path utils

* fix model router sticking to first model in agent mode

* make model router notifications ephemeral and add CSV rule support

* improve model route notification ux and fix agent image routing

* split RuleForm into subcomponents

* extract RuleRow subcomponent and move ModalWrapper to NewRouterModal

* remove /admin prefix from model router endpoints

* use single query for model router list endpoint

* clean up model router error handling and http methods

* refactor model router rule update method and fix stale error field names

* add model router env vars to .env.example

* update fallback model description to mention llm rule classification

* fix model router rule row alignment and badge readability

* Model Router: Multi-condition rules, updated designs, and router edit support (#5478)

* Implement draft designs

* add matches comparator for prompt content

* implement multi conditional to a calculated rule

* fix between comparator

* restyle model router modals to match light mode designs

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* replace model route spinner with webm animation

* route llm classifier through aibitat tool call

* fix: rule form state not resetting when making new rules

* rename router form to rules page + fix and/plus button styles

* add telemetry for model router creation

* fix x button alignment on rule condition rows

* simple UI changes

* fix router

* Refactor model routing into singleton with sticky routes and LLM caching

Consolidate router/index.js, router/deterministic.js, and router/cooldown.js
into a single ModelRouterService singleton class that manages all routing state.

Key changes:
- Sticky model routing: once a rule matches, the model stays active for
  follow-up messages that don't match any rule (e.g., "tell me more"),
  preventing unwanted bouncing back to the fallback model.
- LLM classification cache: expensive LLM classifier calls are cached for
  the full sticky window (default 5 min), running at most once per window.
- Calculated rules always re-evaluate (they're instant), so topic shifts
  that match a different rule still route correctly.
- Route notifications only fire when the model actually changes, not on
  every message.
- Router config is cached in-memory and invalidated on CRUD operations.
- Detailed logging for cache hits/misses/expiry and rule evaluation.

* fix model router notification text to be i18n

* prevent history overwrite on regen

* fix in-processing post-routed chat spacing in UI

* reset router on thread reset

* update translation key

* refactor route name label on chat history

* use system LLM on new model router

* frontend modular cleanup

* fix UI/UX on how rules are shown

* rule builder translations

* translations

* endpoint cleanup

* refactor rules

* fix router translation for no rule
remove from default plugins
port support for model router to ephemeral

* simplify stream handler

* do not route notify on first message (non-agent chat)

* fix cache keys

* ttl reset on followups

* Differentiate between short TTL and long TTL when we actually have run an LLM eval route

* port embed support for router option

* frontend fixes

* dynamic key

* 5315 i18n (#5666)

* translations

* norm

* readme entry

* update comments

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Agent Skill: User Survey (#5577)

* initialize feature

* lint

* fix stale comment

* fix number input

* remove needless condition

* add survey persistence

* add clarifying uestions buffer to aibitat instance with helper methods

* move plugin specific config data away from aibitat instance and into plugin itself

* create useTimeoutProgress hook

* ui refactor

* change [skipped] to [user skipped]

* implement designs

* add agent settings clairfying questions translations

* prompting

* refactor UI
fix issue where text input still submits on skip if anything typed
multi-choice selection not persisting
regen overwriting prompt

* simplify components, translations, agent settings menu

* remove timeout config functionality
replace number inputs with real number inputs?

* rename skill/plu…
timothycarambat added a commit that referenced this pull request Jun 9, 2026
* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960dcae605eef418602870b8fb102ed1f1c7.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35ab3ea271e36efa7b4a42e6792c7ee4108.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87ef6dcd2076a10c7768b5855213195b86d.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 41727518584491baabf50e10da35f6006be55dfd.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* 1.12.1 release tags (#5483)

* resolve GHSA-jwqg-jfg3-x5vv

* Show agent skills, flows, and MCP tools in chat tools menu (#5444)

* show agent skills, flows, and MCP tools in collapsible sections in chat tools menu

* fix tools menu toggle disabled bypass, add border-none to buttons, and useMemo improvements

* replace mcp server cache with loading state for mcp servers

* enable sub-skill management

* refactor

* Translations for chat tools menu improvements (#5448)

* normalize translations

* update translations

* norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* [FEAT] Add native Baidu Search provider for Agent web browsing (#5388)

* feat: add native baidu search provider for agent web browsing

* chore: address baidu search review feedback

* refactor baiduSearch internal util to be locally scoped

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(embedder): surface Mistral embedding failures (#5513)

* fix(embedder): surface Mistral embedding failures

* fix pr

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update readme
resolves #5519

* fix: invalid docs links in FileSystemSkillPanel (#5518)

* fix invalid documentation link

* fix link and trans i18n

* fix tag

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Remove default models to show empty until real models are retreieved (#5524)

resolves #5505
Fix placeholder
resolves #5503
resolves #5522

* Fix deepseek v4 reasoning inject thoughts (#5527)

* Fix deepseek v4 injectReasoning error
resolves #5509

* comment

* fix priority for workspace sidebar items that are unclear. Resolves #5502

* fix(agent): check auto-approved skills env correctly (#5511)

* fix(agent): check auto-approved skills env correctly

* remove file

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix double /reset in agent mode (#5516)

fix double /reset in agent mode

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: support OpenShift arbitrary UID/GID-0 in Docker image (#5136)

* fix: support OpenShift arbitrary UID/GID-0 in Docker image

Made-with: Cursor

* move to community

---------

Co-authored-by: Petre Ghita <petre.ghita@asset-metrix.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Normalize lemonade embedder error handling (#5547)

closes #5318
resolves #5305

* Update Sponsors README

* feat: Scheduled Jobs (#5322)

* initialize

* expand tool result text limit | add syntax highlighting and json formatting to tool result rendering

* fix onError jsdoc

* lint

* fix unread icon

* route protection

* improve form handling for NewJobModal

* safeJsonParse

* remove unneeded comments

* remove trycatch

* add truncateText helper

* add explicit fallback value tos safeJsonParse

* add shared cron constant and helpers

* reduce frontend indirection

* use isLight to compute syntax highlighting theme

* remove dead code

* remove forJob and make job limit to 50

* create recomputeNextRunAt helper method

* add comment about nextRunAt recomputation

* add job queue and concurrency control to scheduled jobs

* use p-queue

* change default max concurrent value to 1

* add comment explaining internal scheduling system

* add recomputeNextRunAt on boot

* add generated documents to run details

* Modify toolsOverride functionality where no tools selected means no tools are given to the agent

add a select all/deselect all toggle button for easily selecting all
tools in the cerate job form

* create usePolling hook

* add polling to scheduled jobs and scheduled job runs pages

* add cron generation feature in job form

* remove cron generation feature | add cron builder feature | add max active scheduled jobs limit

* set MAX_ACTIVE to null

* replace hour and minute input fields with input with type time

* simplify

* organize components

* move components to bottom of page component

* change Generated Documents to Generated Files

* add i18n to cronstrue

* add i18n

* add type="button" to button elements

* refactor fileSource retrieval logic

* one scheduled job run can have status "running"

* add protection of file retrieveal from scheduled job in multiuser mode

* fix comments

* make job status default to queued

* add queued status

* fix bug with result trace rendering

* store timeout ref and clearTimeout once race settles

* remove unneeded handlerPromise tracking

* move imports to top level

* refactor hardcoded paths to path resolve functions

* implement new job form design

* simplify

* fix button styles

* fix runJob bug

* implement styles for scheduled jobs page

* apply dark mode figma styles

* delete unused translation key

* implement light mode for new new job modal, run history, and run details

* lint

* fix light mode scroll bar in tool call card

* adjust table header contrast

* fix type in subtitle

* kill workers when job is in-flight before deleting job

* add border-none to buttons

* change locale time to iso string

* import BackgroundService module level | instatiate backgroundService singltone once and reuse across handlers

* add p-queue, @breejs/later and cron-validate as core deps

* parse cron expression to a builder state once

* add theme to day buttons in cron builder

* fix stale tools selection caption

* flip popover when popover clips screen height

* make ScheduleJob.trigger() await the run insertion | disable run now button if job is in flight

* regen table

* refactor generated file card

* refactor frontend

* remove logs

* major refactor for tool picking, fix bree/later bug

* combine action endpoints, move contine to method

* fix unoptimized query with include + take + order

* fix dangerous use, refactor job to utils

* add copy content to text response

* improve notification system subscription for browser

* remove unused translations

* prevent gen-file cleanup job from deleting active job file generated references

* rich text copy

* Scheduled Jobs: Translations (#5482)

* add locales for scheduled jobs

* i18n

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add config flag with UI notice

* update README

* telemetry datapoints

* Always use UTC on backend, convert to local in frontend

* fix tz render

* Add job killing

* cleanup thinking text in job notifications and break out reasoning in response text.
Also hide zero metrics since that is useless

* Port generatedFile schema to the normalized workspace chat `outputs` file format so porting to thread is simple and implem between chats <> jobs is 1:1

* what the fuck

* compiled bug

* fixed thinking oddity in complied frontend

* supress multi-toast

* fix duration call

* Revert "fix duration call"

This reverts commit 0491bc71f4223e65ea4046561b15b268fefb8da2.

* revert and reapply fix

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Rename auto mode to agent mode (#5551)

* update auto mode to agent

* auto-translate agent mode title for all locales

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Auto-rename thread in agent mode (#5550)

auto-rename thread in agent mode

Made-with: Cursor

* update scheduled job continue CTA (#5558)

* fix(tts): strip Markdown syntax before sending text to TTS engines (#5560)

* fix(tts): strip Markdown syntax before sending text to TTS engines

Chat responses are rendered as Markdown but the TTS components piped the
raw response into Piper / the browser's `SpeechSynthesis` API. The
synthesizer reads every special character literally — `**bold**` becomes
"asterisk asterisk bold asterisk asterisk", `# Heading` becomes "pound
heading", code fences are read backtick-by-backtick, and bullet lists
become "hyphen item". The result is unintelligible whenever the assistant
includes any formatting, which is most of the time.

This commit adds a small `messageToSpeech` helper that converts a
Markdown chat message into plain text suitable for TTS:

- fenced code blocks and images are dropped (nothing useful to read)
- inline code and link labels keep their text content
- emphasis markers, headings, blockquote markers, list markers, and
  horizontal rules are stripped while preserving the underlying words
- HTML tags are removed but their text content kept
- table pipes become commas so rows read naturally

The helper is regex-based — no new dependency — and is wired into both
the native (`SpeechSynthesis`) and Piper TTS components in
`WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/Actions/TTSButton`.

Closes #5557.
---
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Community Hub import page responsiveness on narrow widths (#5544)

* make community hub import page responsive | fix top border bug

* fix top border bug

* fix layout shift

* remove bg to keep designs in spec

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: SPA nav for thread/workspace switching (#5528)

* fix: white flash when switching between threads

* nest thread route under workspace

* fix: white flash when switching between workspaces

* simplify Link usage in workspace/thread sidebar items

* smooth workspace and thread switching

* fix race condition on send during thread/workspace switch

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: tools popover overflowing screen on small viewports (#5549)

* fix tools popover from expanding beyond screen height limits

* fix max height clamp | remove unneeded useLayoutEffect dependency

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* apply refactor for recursive copy-file with symlinks: GHSA-vjrp-43mm-j7vw

* sync build from embed changes in https://github.com/Mintplex-Labs/anythingllm-embed/pull/18

* fix: scope thread options hover state (#5606)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: allow configurable collector port (#5607)

* feat: allow configuring collector port

* refactor

* persist collector save in prod

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/17

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/16

* stringify uuid for embed

* fix: add font fallback for form controls (#5618)

* fix: add font fallback for form controls

* fix: restore complete index.css with font fallback

* move to end and mark important

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* norm symlink fix from GHSA-vjrp-43mm-j7vw to directories. resolves #5642

* fix: auto-speak not playing in agent mode (#5595)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: adding MiniMax LLM provider (#5450)

* add MiniMax LLM provider support

* add MiniMax LLM provider to the docs

* fix: add trailing newlines for lint compliance

* add env vars to system settings | make max tokens configurable via ui | pass max tokens into minimax llm provider

* change fallback max tokens value to null to use provider default | pass max tokens into handleFucntionCallStream and chat

* add minimax to getModelTag switch

* pass provider into tooledStream and tooledComplete

* remove max tokens param

* update image

---------

Co-authored-by: angelplusultra <macfittondev@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent gemini agent 400s from parallel tool calls (#5630)

fix: disable parallel tool calls for gemini agent provider

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Support reasoning content in v2 stream handler (#5654)

* refactor LMStudio for reasoning_content
closes #5584
resolves #5583

* Lemonade stream/completion reasoning optional via v2 change
resolves #5585

* migrate Deepseek and GiteeAI

* Update DeviceTokens to already-admin user on MUM migration (#5655)

resolve GHSA-h349-hp2v-8rhw

* Support pulling generated documents from API calls (#5658)

* support pulling generated documents from API calls

* revert async wait

* fix strictness of packMessages to handle streaming chunks but keep functionality

* Embed logos in docker prod build (#5660)

* embed logos in docker build

* forgot assets

* feat: Memories/Personalization (#5269)

* add memory storage layer with model, endpoints, schema, and system setting

* add memory extraction background worker

* handle single-user and multi-user mode for memory extraction

* add memory injection and personalization ui

* lint

* personalization UI polish, fix RBAC for all roles, and endpoint guards

* split admin personalization page into subcomponents

* split admin personalization page into subcomponents, use early return instead of ternary for readability

* make error responses consistent in memory endpoints

* consolidate duplicate MemoryItem into shared component

* skip memory reranking when no query context is available

* extract promptWithMemories util to deduplicate memory injection

* add english translations

* refactor memory api routes to eliminate ambiguous path params

* make memory extraction interval and idle threshold configurable via env vars

* add hint to memory form input

* inline personalization content in admin settings page

* consolidate unprocessed chat queries into single fetch

* simplify personalization page with early returns and layout subcomponent

* add memories sidebar with chat settings menu redesign

* remove legacy personalization ui

* split MemoriesSidebar into subcomponent folders

* fix memory card menu spacing to match design

* fix memories visibility for non-admin users

* add english translations for memories sidebar ui

* add workspace access checks to all memory endpoints

* pass user prompt to agent getDefinition for memory reranking

* check idle threshold per user/workspace group instead of globally

* use factory pattern for i18n text sizes and replace Trans with plain t() keys

* add placeholder examples and format guidance for manual memory creation

* remove stale comment

* refactor chat menu

* refactor sidebar to use provider and simplified DOM rendering

* fix memories sidebar overflow from long workspace names, widen memories options menu

* fix edit memory modal cursor landing at start of input

* hide memory add/move actions when at limit

* revert scope of workspace settings route changed for first pass of memories ui

* jsdoc memory model methods, drop redundant error logs

* inline error response returns and move body validation after perms in memory endpoints

* run memory fetches concurrently in list endpoint and prompt injection

* jsdoc server memory model methods

* normalize memory_enabled to true/false and add SystemSettings helper

* extract memory ownership middleware, strip redundant .end() calls

* use validWorkspaceSlug middleware for memory endpoints, switch to slug-based urls

* add description to memories util

* simplify memory ownership middleware to single db query

* use aibitat tool call for memory extraction, add chat safety limits

* truncate per-chat prompt/response before memory extraction

* add input validation to memory model

* validate ids array input in markMemoryProcessed

* inline memory injection in chatPrompt and systemPrompt

* make memory migration additive and drop unused sourceThreadId

* normalize translation files

* reset translations, minor nit

* refactor consts, extract memories with outputs

* set intervla

* sync

* rearch how memory extract works by moving to Observer/Reflector pattern (Mastra aspect)

* remove timeout on load

* Feat/memory i18n (#5661)

translations for #5269

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add memories

* Workspace deletion protection (#5662)

* add WORKSPACE_DELETION_PROTECTION env flag to disable workspace deletion from UI and APIs

* minor nits

* patch test for phrase

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix for GHSA-6hrp-7mw6-8v59

* Model router (#5324)

* add model router backend: schema, models, API, evaluator, provider, and cooldown

* add model router frontend: settings pages, workspace integration, rule builder with DnD, and system LLM support

* add routing indicator, new rule types, and UX improvements for model router

* add provider credential validation to model router and fix icon alignment

* add llm classifcation rules for model router

* lint

* add vision routing, agent support, and configurable cooldown to model router

* add english translations for model router

* move isPathMatch to path utils

* fix model router sticking to first model in agent mode

* make model router notifications ephemeral and add CSV rule support

* improve model route notification ux and fix agent image routing

* split RuleForm into subcomponents

* extract RuleRow subcomponent and move ModalWrapper to NewRouterModal

* remove /admin prefix from model router endpoints

* use single query for model router list endpoint

* clean up model router error handling and http methods

* refactor model router rule update method and fix stale error field names

* add model router env vars to .env.example

* update fallback model description to mention llm rule classification

* fix model router rule row alignment and badge readability

* Model Router: Multi-condition rules, updated designs, and router edit support (#5478)

* Implement draft designs

* add matches comparator for prompt content

* implement multi conditional to a calculated rule

* fix between comparator

* restyle model router modals to match light mode designs

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* replace model route spinner with webm animation

* route llm classifier through aibitat tool call

* fix: rule form state not resetting when making new rules

* rename router form to rules page + fix and/plus button styles

* add telemetry for model router creation

* fix x button alignment on rule condition rows

* simple UI changes

* fix router

* Refactor model routing into singleton with sticky routes and LLM caching

Consolidate router/index.js, router/deterministic.js, and router/cooldown.js
into a single ModelRouterService singleton class that manages all routing state.

Key changes:
- Sticky model routing: once a rule matches, the model stays active for
  follow-up messages that don't match any rule (e.g., "tell me more"),
  preventing unwanted bouncing back to the fallback model.
- LLM classification cache: expensive LLM classifier calls are cached for
  the full sticky window (default 5 min), running at most once per window.
- Calculated rules always re-evaluate (they're instant), so topic shifts
  that match a different rule still route correctly.
- Route notifications only fire when the model actually changes, not on
  every message.
- Router config is cached in-memory and invalidated on CRUD operations.
- Detailed logging for cache hits/misses/expiry and rule evaluation.

* fix model router notification text to be i18n

* prevent history overwrite on regen

* fix in-processing post-routed chat spacing in UI

* reset router on thread reset

* update translation key

* refactor route name label on chat history

* use system LLM on new model router

* frontend modular cleanup

* fix UI/UX on how rules are shown

* rule builder translations

* translations

* endpoint cleanup

* refactor rules

* fix router translation for no rule
remove from default plugins
port support for model router to ephemeral

* simplify stream handler

* do not route notify on first message (non-agent chat)

* fix cache keys

* ttl reset on followups

* Differentiate between short TTL and long TTL when we actually have run an LLM eval route

* port embed support for router option

* frontend fixes

* dynamic key

* 5315 i18n (#5666)

* translations

* norm

* readme entry

* update comments

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Agent Skill: User Survey (#5577)

* initialize feature

* lint

* fix stale comment

* fix number input

* remove needless condition

* add survey persistence

* add clarifying uestions buffer to aibitat instance with helper methods

* move plugin specific config data away from aibitat instance and into plugin itself

* create useTimeoutProgress hook

* ui refactor

* change [skipped] to [user skipped]

* implement designs

* add agent settings clairfying questions translations

* prompting

* refactor UI
fix issue where text input still submits on skip if anything typed
multi-choice selection not persisting
regen overwriting prompt

* simplify components, translations, agent settings menu

* remove timeout config functionality
replace number inputs with real number inputs?

* rename skill/plugin

* remove i18n

* 5577 i18n (#5669)

connect #5577

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* better Gemini errors

* prevent contextualsavebar from showing on toggle of clarifying questions

* stop AI GHSA spam for the same fucking issue holy shit

* Migrate slash commands to admin user on multi-user-mode (#5684)

migrate slash commands to admin user on multi-user-mode

* bump docker run in HOW_TO_USE_DOCKER

* router-models: accurate token/message counting for model router decisions (#5680)

* fix: accurate token/message counting for model router decisions
Previously the router only counted tokens from the current user message,
ignoring system prompt, chat history, pinned docs, and parsed files.
Introduce ModelRouterService.gatherRoutingContext() to compute the true
conversation token count and reuse the fetched context downstream to
avoid redundant DB/filesystem lookups.
Also adds model router support to the OpenAI-compatible and API chat
handlers, propagates usageMetrics through ephemeral agents, and fixes
the router input to use the attachment-injected message.

* fix /chat API counter

* count current message in message count for router

* add router handler everywhere these is getLLMProvider

* router logic overhaul and refactor

* fix tests

* fix logger

* support generic openAI auto-detection for dropdown in model rules provi…
timothycarambat added a commit that referenced this pull request Jun 9, 2026
* Implement new home page redesign (#4931)

* remove legacy home page components, update home page to new layout

* update PromptInput component styles to match new designs, make quick action buttons functional

* home page chat creates new thread in last used workspace

* fix slash commands and agent popup on home page

* disable llm workspace selector action in home page

* add drag and drop file support to home page

* fix behavior of drag and drop on home page

* handle pasting attachments in home page

* update empty state of workspace chat to use new ui

* update empty workspace ui to match home page design, fix flickering loading states

* convert quick action buttons to component, add to empty state ws chat

* fix hover state light mode in quick actions

* add suggested messages subcomponent to empty ws/thread

* adjust width, rounded edges of prompt input

* only show quick actions for admin/manager role

* fix hover states for quick actions and suggested messages component

* make upload document quick action trigger parsed document upload

* fix mic behavior in homepage, ws chat, ws thread chat

* fix margin between prompt input and quick actions

* Simplify message presets by removing heading input (#4915)

* Remove heading input from message presets, merge legacy headings on edit

* filter out empty messages from state after saving

* mark form as dirty on input change

* styling

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* convert SuggestedMessages to component, render SuggestedMessages in home page to target ws

* fix broken handleMessageChange reference

* add translations for QuickActions

* lint

* fix home page chat submission broken by PromptInput onChange removal

* fix prompt input remount race condition, home page suggested message flicker

* remove unused handleSendSuggestedMessage from ChatHistory

* add greeting text to main-page translations, remove defaults

* fix file deletion in parsed files menu on home page

* add virtual thread sidebar state and workspace indicator on home page

* show workspace llm selector on home page when workspace exists

* show home page for all user roles with rbac quick actions

* fix positioning of agent and slash command popups

* remove workspace indicator from home page, match empty state spacing

* Normalize translations for home page redesign (#4986)

* normalize translations

* update translations with DMR

* accidentally changed es translation

* normalize translations for main-page.greeting

* update translations with DMR

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update translations

* create new workspace in native language
Cleanup workspace page from empty state handling

* update quick action show logic

* fix send button

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: GitLab connector infinite loop and rate limit crash for large repos (#5021)

* Fix infinite loop and rate limit crashes

* simplify logic | add max-retries to fetchNextPage and fetchSingleFileContents

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* lint

* Normalize scraper runtimeargs for bulk-scraper (#5083)

resolves #5078
closes #5079

* resolve Ollama string strict num_ctx
resolves #5081

* Lemonade integration (#5077)

* lemonade integration

* lemonade embedder

* log

* load model

* readme updates

* update embedder privacy entry

* fix max tool call stack abort flow

* v1.11.1 Release tags (#5107)

bump tag

* 5112 or stream metrics and finish reason (#5117)

* update metric tracking for OR + fix finish_reason missing from transitive chunks

* linting + comments
closes #5113
resolves #5112

* Fix bug where `yarn setup:envs` fails if any .env file already exists. (#5116)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: show actionable error when LMStudio model listing fails or returns empty (#5131)

* fix: show actionable error when LMStudio model listing fails or returns empty

When the model listing request completes but returns no models (due to
connection failure, wrong URL, or server unreachable), the dropdown now
shows "No models found — check LMStudio is running and accessible"
instead of "--loading available models--", making it possible to
distinguish a failed request from one still in progress.

Affects both LLM and embedding provider selection components.

Closes recurring UX confusion reported in #3519, #1338, #3656.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* UI warning tooltip

---------

Co-authored-by: Morgan Giddings <morgan@MG-Mac-Studio.home.arpa>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic chat mode with native tool calling support (#5140)

Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* Revert "Add automatic chat mode with native tool calling support (#5140)"
- Need to support documents in agents
- Need to support images in agent mode

This reverts commit 4c69960dcae605eef418602870b8fb102ed1f1c7.

* improve translation script

* patch attempt for GH cleanup tag

* workflow -wip

* fix type

* split cleanup

* vague GH worker error - try to resolve via repo-name

* Test dispatch workflow

* Remove test workflow

* native tool calling detection for novita

* fix sidebar and add translations to sidebar

* add translations

* Sidebar updates (#5154)

* fix sidebar and add translations to sidebar

* add translations

* Debug cleanup workflow

* Debug cleanup workflow

* Debug cleanup workflow

* Use ALLM_RW_PACKAGES for package cleanup

* Remove Google web-search Programmable SERP (#5156)

* refactor: refactor agent skills settings page to use i18n translation keys (#5146)

* refactor agent skills to read from translation keys instead of hardcoded strings

* add missing sql agent description key

* Remove fallbacks

* adjust translation

* swap to factor pattern

* normalize translations (#5147)

* normalize translations

* run translator job

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/collector` (#5128)

* add eslint config to /collector

* prettier formatting

* fix unused

* fix undefined

* disable lines

* lockfile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint to `/server` (#5126)

* add eslint config to server

* add break statements to switch case

* add support for browser globals and turn off empty catch blocks

* disable lines with useless try/catch wrappers

* format

* fix no-undef errors

* disbale lines violating no-unsafe-finally

* ignore syncStaticLists.mjs

* use proper null check for creatorId instead of unreachable nullish coalescing

* remove unneeded typescript eslint comment

* make no-unused-private-class-members a warning

* disable line for no-empty-objects

* add new lint script

* fix no-unused-vars violations

* make no-unsued-vars an error

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix: Azure OpenAI model key collision (#5092)

* fix: Migrate AzureOpenAI model key from OPEN_MODEL_PREF to prevent the naming collision. No effort necessary from current users.

* test: add backwards compat tests for AzureOpenAI model key migration

* patch missing env example file

* linting

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: Add tooltip for paperclip attach button when no files are parsed (#5139)

* fix broken tooltip

* fix tooltip not showing on homepage

* fix tooltip rendering behind input on homepage

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* fix: add missing /wiki to Confluence cloud citation URLs (#5167)

fix: add /wiki to Confluence cloud page URLs in citations

* Strip thinking from copy message outputs (#5179)

* linting & show descriptive error for bad `addtoWorkspace` request body
resolves #5172

* Add custom fetch to embedder for Ollama (#5180)

Refactor ollama timeout to be shared. Add custom fetch to embedder for ollama as well

* chore: add script to detect and prune unused translation keys (#5141)

* add script to prune dead translation keys

* add support for dynamic translation keys

* improve performance of script

* fix dynamic t() detection and add keyboard shortcut keys to allowlist

* rename scripts

* change commands

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* chore: add ESLint CI workflow (#5160)

add lint CI GitHub Action

* patch plural keys

* add ToS for brevity

* Remove `use_mlock` from Ollama to solve `WARN` logs in ollama 0.17
resolves #5182

* Implement v2 chat layout designs (#5074)

* New chat history layout with chat bubbles (#4985)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* fix: add password character validation to onboarding single-user setup (#5037)

* fix single user mode password bug

* share const

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Native Tool calling (#5071)

* checkpoint

* test MCP and flows

* add native tool call detection back to LMStudio

* add native tool call loops for Ollama

* Add ablity detection to DMR (regex parse)

* bedrock and generic openai with ENV flag

* deepseek native tool calling

* localAI native function

* groq support

* linting, add litellm and OR native tool calling via flag

* fix: resolve Gemini agent 400 error on tool call responses (#5054)

* add gtc__ prefix to tool call names in Gemini agent message formatting

* resolve Gemini agent 400 error on tool call responses

* add comments explaining geminis thought signatures

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement (#5053)

prevent CMD/CTRL+Arrow scroll from overriding textarea cursor movement

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* linting, assistant speaker spacing and order, copy/edit order

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Implement new citations UI (#5038)

* new chat history layout, remove message alignment setting

* remove orphaned chat alignment hook and MessageDirection

* remove workspace profile picture setting and fetch

* clean up unnecessary changes

* add light mode colors to chat ui and main page backgrounds

* update chat message and action icon colors for light mode

* update thinking and agent ui, layout, sizing

* update user message uploaded images ui

* update thought, agent containers to use new colors

* add truncatable content with gradient to user chat messages

* fix citations margin

* implement new edit message UI with save and submit actions

* add translations for TruncatableContent subcomponent

* remove unused props

* fix text colors for default mode chats, agent, thoughts container

* Normalize translations for new chat history layout (#5022)

* normalize translations

* update translations with DMR

* lint

* fix mismatched home container colors

* implement new citations ui with sources sidebar

* bottom sheet for mobile citations

* convert mobile citations bottom sheet to new modal design

* add score, border separators for mobile citations modal

* push down sources sidebar in password/multiuser mode

* fix animation gap, simplify sources sidebar by splitting state to persist data on animation

* add english translations

* fix spacing from citations sidebar when user has auth

* Normalize translations for new citation UI (#5087)

* normalize translations

* update translations using DMR

* fix pluralize to use i18n native solution
change reset to immediate clear
fix spacing for TTS when showing or not to not have space

* proper pluralize

* hide metrics on mobile, fix last message padding on mobile

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* New prompt input ui/tools menu (#5070)

* wip new prompt input ui/tools menu

* fix colors for prompt input

* redesign workspace llm selector, extract text size + model picker to components

* refactor ToolsMenu component

* fix colors/refactor WorkspaceModelPicker

* fix spacing in ws model picker, change order of tools menu tabs

* fix slash commands showing /reset instead of /exit during active agent session

* refactor ToolsMenu to be much simpler

* cleanup, fix behavior of setupup provider in WorkspaceModelPicker

* simplify AgentSkillsTab toggle logic

* add english translations for new components

* remove legacy slash command/agent popups, add ToolsMenu keyboard nav

* fix spacing of workspace model picker text

* fix SourcesSidebar and TextSizeMenu positioning after merge

* fix keyboard nav in ToolsMenu when clicking on tools button to open

* typo

* only auto pop up tools menu when prompt input is empty with /

* fix z index for tools menu on citation

* fix behavior of / in prompt input

* move global window agent session state to module level variable

* fix prompt input not clearing on /reset

* missing translations

* revert translating slash command

* fix STT auto-submit not working on home page

* Normalize translations for new prompt input/tools menu UI (#5130)

* normalize translations

* update translations using DMR script

* normalize translations

* update translations using DMR script

* remove slash_exit

* fix skills.js import after merge

* fix tooltip z-index rendering behind citations

* patch translation prune script to not remove special cases

* updates to tools input

* factory translations

* use safeJsonParse in clearPromptInputDraft

* normalize translations

* disable agent skill toggles during active agent sessions + show tooltip on disabled

* normalize translations

* handle enter key behavior when tools menu is open

* fix unfocusable modal for slash command edit/new

* fix sending prompt when editing/creating slash commands

* hide/show agent skills in tools menu based on role

* container borders for dark/light mode compliance to designs

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update how tooltip works for agent menu

* update prompt input to show agent button with CTA in agent panel for user clarify
update agent session start prompt button in input

* translations

* translations + move regex for slash commands to constants

* fix open sidebar ux

* fix tools menu to always open to slash commands, dismiss auto pop up

* fix sidebar open/close button overlapping with ws model picker

---------

Co-authored-by: Sean Hatfield <seanhatfield5@gmail.com>
Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>

* patch slashcommand popup to be usePortal

* Improve zh_TW Traditional Chinese locale

* Improve zh_TW Traditional Chinese locale (#5187)

* lint

* fix schema not persisting in DB connector

* Improve build times for tests and lint (#5193)

* test build skip

* reset file

* Support Agent stream metric reporting (#5197)

* Report citations for Agent call stacks (#5199)

* sanitize promptReply Output

* Add FileRow Indentation on Documents Picker (#5201)

* Fix SQL injection in SQL Agent plugin via parameterized queries

Replace string concatenation with parameterized queries in all database
connectors to prevent SQL injection through LLM-generated table names.

Changes:
- PostgreSQL: Use $1, $2 placeholders with pg client parameterization
- MySQL: Use ? placeholders with mysql2 execute() prepared statements
- MSSQL: Use @p0 placeholders with request.input() parameterization
- Update handlers to support parameterized query objects
- Add formatQueryForDisplay() for logging parameterized queries

Security: Mitigates potential SQL injection when LLM passes unsanitized
user input as table_name parameter to getTableSchemaSql/getTablesSql.
GHSA-jwjx-mw2p-5wc7

* Align Manager API access with frontend access
GHSA-wfq3-65gm-3g2p

* Enforce user suspension check on browser extension API key path

Previously, suspended users could continue using browser extension
endpoints if they had created an API key before suspension. The normal
JWT session path blocked suspended users, but the browser extension
middleware did not.

Changes:
- Add suspension and user existence checks to validBrowserExtensionApiKey
- Delete browser extension API keys when a user is deleted
- Add deleteAllForUser method to BrowserExtensionApiKey model
GHSA-7754-8jcc-2rg3

* Fix potential Zip Slip path traversal in community plugin import

Validate all ZIP entries before extraction in importCommunityItemFromUrl()
to prevent path traversal attacks (CWE-22). Malicious ZIP entries with
paths like "../../" could write files outside the intended plugin folder.

Requires admin privileges and explicit opt-in to unverified hub downloads.
GHSA-rh66-4w74-cf4m

* Remove `WelcomeMessages` from app - no longer used (#5206)

* remove `WelcomeMessages` from app - no longer user

* update erronous alert message

* fix job collision ref

* fix jobs - remove dev job

* Fix potential IDOR vulnerability in workspace parsed files endpoints

Add ownership validation to prevent users from deleting or embedding
parsed files that don't belong to them. Previously, the delete and
embed endpoints only validated authentication but not resource ownership,
allowing users to delete attached files for users within workspaces they are also a member of.

Changes:
- Delete endpoint now filters by userId and workspaceId
- Embed endpoint validates file belongs to user and workspace (redundant)
- delete() returns false when no matching records found (returns 403)
- Added JSDoc comments for clarity
GHSA-p5rf-8p88-979c

* add user id to chat feedback
update JSDOC on middleware for typedef
GHSA-2qmm-82f7-8qj5

* feat: Add document count indicators to workspace document management modal (#5207)

* add document counts to non-embedded and embedded documents

* Update logic to not count search filtered documents

* refactor how count is done and rendered

* translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat(agents): Add Perplexity Search API as web search provider (#5210)

* feat(agents): Add Perplexity Search API as web search provider

Adds Perplexity as a search provider for the agent web-browsing plugin,
using the Perplexity Search API (POST /search) which returns raw ranked
web results — distinct from the existing Perplexity LLM integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: replace docs.perplexity.ai with console.perplexity.ai

* chore: replace docs.perplexity.ai with console.perplexity.ai

---------

Co-authored-by: kesku <kesku@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* bump version tag 1.11.2

* update exa search provider description (#5225)

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

* update exa search provider description

Co-Authored-By: ishan <ishan@exa.ai>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ishan <ishan@exa.ai>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Automatic mode for workspace (Agent mode default) (#5143)

* Add automatic chat mode with native tool calling support

    Introduces a new automatic chat mode (now the default) that automatically invokes tools when the provider supports native tool calling. Conditionally shows/hides the @agent command based on whether native tooling is available.

    - Add supportsNativeToolCalling() to AI providers (OpenAI, Anthropic, Azure always support; others opt-in via ENV)
    - Update all locale translations with new mode descriptions
    - Enhance translator to preserve Trans component tags
    - Remove deprecated ability tags UI

* rebase translations

* WIP on image attachments. Supports initial image attachment + subsequent attachments

* persist images

* Image attachments and updates for providers

* desktop pre-change

* always show command on failure

* add back gemini streaming detection

* move provider native tooling flag to Provider func

* whoops - forgot to delete

* strip "@agent" from prompts to prevent weird replies

* translations for automatic-mode (#5145)

* translations for automatic-mode

* rebase

* translations

* lint

* fix dead translations

* change default for now to chat mode just for rollout

* remove pfp for workspace

* passthrough workspace for showAgentCommand detection and rendering

* Agent API automatic mode support

* ephemeral attachments passthrough

* support reading of pinned documents in agent context

* MCP tool manager (#5230)

* MCP tool manager

* Mcp tool manager i18 (#5231)

i18n translations for MCP manager changes
connect #5230

* fix bad i18n key

* Intelligent Skill Selection (#5236)

* Beta Intelligent Tooling
todo: Agent Skill banner warning when tool # is high or % of content window?

* forgot files

* add UI controls and maxToolCallStack setting

* update docs link

* ISS i18n (#5237)

i18n

* README updates (#5238)

* README updates

* Update README.md

* Update README.md

* remove unused images

* updates

* copy updates

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions (#5252)

* fix(collector): infer file extension from Content-Type for URLs without explicit extensions

When downloading files from URLs like https://arxiv.org/pdf/2307.10265,
the path has no recognizable file extension. The downloaded file gets
saved without an extension (or with a nonsensical one like .10265),
causing processSingleFile to reject it with 'File extension .10265
not supported for parsing'.

Fix: after downloading, check if the filename has a supported file
extension. If not, inspect the response Content-Type header and map
it to the correct extension using the existing ACCEPTED_MIMES table.

For example, a response with Content-Type: application/pdf will cause
the file to be saved with a .pdf extension, allowing it to be processed
correctly.

Fixes #4513

* small refactor

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: add Lithuanian locale and register in resources (#5243)

* feat: add Lithuanian locale and register in resources

* sync

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Telegram bot connector (#5190)

* wip telegram bot connector

* encrypt bot token, reorg telegram bot modules, secure pairing codes

* offload telegram chat to background worker, add @agent support with chart png rendering, reconnect ui

* refactor telegram bot settings page into subcomponents

* response.locals for mum, telemetry for connecting to telegram

* simplify telegram command registration

* improve telegram bot ux: rework switch/history/resume commands

* add voice, photo, and TTS support to telegram bot with long message handling

* lint

* rename external_connectors to external_communication_connectors, add voice response mode, persist chat workspace/thread selection

* lint

* fix telegram bot connect/disconnect bugs, kill telegram bot on multiuser mode enable

* add english translations

* fix qr code in light mode

* repatch migration

* WIP checkpoint

* pipeline overhaul for using response obj

* format functions

* fix comment block

* remove conditional dumpENV + lint

* remove .end() from sendStatus calls

* patch broken streaming where streaming only first chunk

* refactor

* use Ephemeral handler now

* show metrics and citations in real GUI

* bugfixes

* prevent MuM persistence, UI cleanup, styling for status

* add new workspace flow in UI
Add thread chat count
fix 69 byte payload callback limit bug

* handle pagination for workspaces, threads, and models

* modularize commands and navigation

* add /proof support for citation recall

* handle backlog message spam

* support abort of response streams

* code cleanup

* spam prevention

* fix translations, update voice typing indicator, fix token bug

* frontend refactor, update tips on /status and voice response improvements

* collapse agent though blocks

* support images

* Fix mime issues with audio from other devices

* fix config issue post server stop

* persist image on agentic chats

* 5189 i18n (#5245)

* i18n translations
connect #5189

* prune translations

* fix errors

* fix translation gaps

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add User-Agent header for Anthropic API calls (#5174)

* Add User-Agent header for Anthropic API calls

Passes User-Agent: AnythingLLM/{version} to the Anthropic SDK
so Anthropic can identify traffic from AnythingLLM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* remove test, simplify header default

* unset change to spread

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add Dynamic `max_tokens` retreival for Anthropic models (#5255)

* fix Firefox LaTeX rendering (#5258)

* fix pruned translations

* whitelist valid dynamic translation

* add ask to run prompt for tool calls (demo) (#5261)

* add ask to run prompt for tools

* border-none on buttons

* translations

* linting

* i18n (#5263)

* extend approve/deny requests to telegram

* break up handler

* Refactor onboarding welcome screen to v2 design (#5262)

* refactor onboarding home page to v2 design

* fixc typography and buttons

* refactor useTheme to return isLight variable | call useTheme from inside SVG component | apply light mode background gradient | polish styles to match designs

* add welcome i18n

* simplify isLight variable

* add new welcome translation key to locales

* delete unused images

* move OnboardingLogoSVG into module | compute isLight directly in component

* add type button | add border-none | add hover state

* update hook with doc

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Filesystem Agent Skill overhaul (#5260)

* wip

* collector parse fixes

* refactor for class and also operation for reading

* add skill management panel

* management panel + lint

* management panel + lint

* Hide skill in non-docker context

* add ask-prompt for edit tool calls

* fix dep

* fix execa pkg (unused in codebase)

* simplify search with ripgrep only and build deps

* Fs skill i18n (#5264)

i18n

* add copy file support

* fix translations

* fix es translation entry

* feat : auto-select newly uploaded docs/URLs in my documents list (#5222)

* auto-select newly uploaded docs/URLs in My Documents list

* fix: improve auto-select reliability and fix debounce/selection bugs

- Add missing `await` on fetchKeys in handleSendLink so loading state
  and auto-select timing work correctly
- Use functional update for setSelectedItems to merge with existing
  selections instead of replacing them
- Stabilize debounced fetchKeys with useRef so rapid uploads actually
  debounce instead of creating independent timers per render
- Rename shadowed local variables (availableDocs -> filteredAvailableDocs)
  for clarity

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove legacy cost estimate for embedding

* feat: add missing Lemonade LLM provider env vars to .env.example (#5275)

add llm provider lemonade env vars to .env.example

* fix openapi spec

* feat: add optional API key support for Lemonade provider (#5281)

* add API key param to Lemonade LLM Provider and Embedding Provider

* add LEMONADE_LLM_API_KEY to .env.example

* add api key to aibitat provider

* fix api key from being sent to frontend

* fix tooltip id

* add null fallback for `apiKey`

* remove console log

* add missing api keys

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* File creation agent skills (#5280)

* Powerpoint File Creation (#5278)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* persist toggle

* Txt creation (#5279)

* wip

* download card

* UI for downloading

* move to fs system with endpoint to pull files

* refactor UI

* final-pass

* remove save-file-browser skill and refactor

* remove fileDownload event

* reset

* reset file

* reset timeout

* wip

* persist toggle

* add arbitrary text creation file

* Add PDF document generation with markdown formatting (#5283)

add support for branding in bottom right corner
refactor core utils and frontend rendering

* Xlsx document creation (#5284)

add Excel doc & sheet creation

* Basic docx creation (#5285)

* Basic docx creation

* add test theme support + styling and title pages

* simplify skill selection

* handle TG attachments

* send documents over tg

* lazy import

* pin deps

* fix lock

* i18n for file creation (#5286)

i18n for file-creation
connect #5280

* theme overhaul

* Add PPTX subagent for better results

* forgot files

* Add PPTX subagent for better results (#5287)

* Add PPTX subagent for better results

* forgot files

* make sub-agent use proper tool calling if it can and better UI hints

* add batching Intelligent Tool Selector for performance and scoring

* Automatic mode is now default

* show links in /proof on TG

* Redesign Telegram bot settings UI (#5306)

* redesign telegram bot settings ui/refactor ui components

* fix positioning of user row

* move ConnectedBotCard to subcomponent

* fix redirect

* remove redundant guard

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* remove log

* Fix chat UI event listener bloat (#5323)

* 1.12.0 release (#5331)

* German translation fixes (#5319)

* Fix German login welcome message

* More German translation fixes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(lemonade): throw on embedding failures instead of returning empty (#5325)

* fix(lemonade): throw on embedding failures instead of returning empty vectors

* use class logger

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix light mode docgen page (#5347)

Fix light mode docgen

* fix(agent-flows): keep flow menu visible in narrow windows (#5341)

* fix(agent-flows): keep flow menu visible in narrow windows

* fix(agent-flows): prevent gear menu text clipping

Signed-off-by: suyua9 <1521777066@qq.com>

---------

Signed-off-by: suyua9 <1521777066@qq.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Agent Flow toggle state sync (#5348)

* hide cluttered menus on small screens
resolves #5055
closes #5132

* admin only flow-plugin path validation

* Remove illegal chars for Windows on files (#5364)

* add provider/embedder to bug report for clarity
resolves #5363

* add provider/embedder to bug report for clarity
resolves #5363

* Revert "Remove illegal chars for Windows on files (#5364)"

This reverts commit 8ed1d35ab3ea271e36efa7b4a42e6792c7ee4108.

* Reapply "Remove illegal chars for Windows on files (#5364)"

This reverts commit 869be87ef6dcd2076a10c7768b5855213195b86d.

* feat: Document Embedding Status Events | Refactor Document Embedding to Job Queue and Forked Process (#5254)

* implement native embedder job queue

* persist embedding progress across renders

* add development worker timeouts

* change to static method

* native reranker

* remove useless return

* lint

* simplify

* make embedding worker timeout value configurable by admin

* add event emission for missing data

* lint

* remove onProgress callback argument

* make rerank to rerankDirect

* persists progress state across app reloads

* remove chunk level progress reporting

* remove unuse dvariable

* make NATIVE_RERANKING_WORKER_TIMEOUT user configurable

* remove dead code

* scope embedding progress per-user and clear stale state on SSE reconnect

* lint

* revert vector databases and embedding engines to call their original methods

* simplify rerank

* simplify progress fetching by removing updateProgressFromApi

* remove duplicate jsdoc

* replace sessionStorage persistence with server-side history replay for embedding progress

* fix old comment

* fix: ignore premature SSE all_complete when embedding hasn't started yet

The SSE connection opens before the embedding API call fires, so the
server sees no buffered history and immediately sends all_complete.
Firefox dispatches this eagerly enough that it closes the EventSource
before real progress events arrive, causing the progress UI to clear
and fall back to the loading spinner. Chrome's EventSource timing
masks the race.

Track slugs where startEmbedding was called but no real progress event
has arrived yet via awaitingProgressRef. Ignore the first all_complete
for those slugs and keep the connection open for the real events.

* reduce duplication with progress emissions

* remove dead code

* refactor: streamline embedding progress handling

Removed unnecessary tracking of slugs for premature all_complete events in the EmbeddingProgressProvider. Updated the server-side logic to avoid sending all_complete when no embedding is in progress, allowing the connection to remain open for real events. Adjusted the embedding initiation flow to ensure the server processes the job before the SSE connection opens, improving the reliability of progress updates.

* fix stale comment

* remove unused function

* fix event emissions for document creation failure

* refactor: move Reranking Worker Idle Timeout input to LanceDBOptions component

Extracted the Reranking Worker Idle Timeout input from GeneralEmbeddingPreference and integrated it into the LanceDBOptions component. This change enhances modularity and maintains a cleaner structure for the settings interface.

* lint

* remove unused hadHistory vars

* refactor workspace directory by hoisting component and converting into functions

* moved EmbeddingProgressProvider to wrap Document Manager Modal

* refactor embed progress SSE connection to use fetchEventSource instead of native EventSource API.

* refactor message handlng into a function and reduce duplication

* refactor: utilize writeResponseChunk for event emissions in document embedding progress SSE

* refactor: explicit in-proc embedding and rerank methods that are called by workers instead of process.send checks

* Abstract EmbeddingProgressBus and Worker Queue into modules

* remove error and toast messages on embed process result

* use safeJsonParse

* add chunk-level progress events with per-document progress bar in UI

* remove unused parameter

* rename all worker timeout references to use ttl | remove ttl updating from UI

* refactor: pass embedding context through job payload instead of global state

* lint

* add graceful shutdown for workers

* apply figma styles

* refactor embedding worker to use bree

* use existing WorkerQueue class as the management layer for jobs

* lint

* revert all reranking worker changes back to master state

Removes the reranking worker queue, rerankViaWorker/rerankInProcess
renames, and NATIVE_RERANKING_WORKER_TTL config so this branch
only contains the embedding worker job queue feature.

* remove breeManaged flag — WorkerQueue always spawns via Bree

* fix prompt embedding bug

* have embedTextInput call embedChunksInProcess

* add message field to `process.send()`

* remove nullish check and error throw

* remove bespoke graceful shutdown logix

* add spawnWorker method and asbtract redudant flows into helper methods

* remove unneeded comment

* remove recomputation of TTL value

* frontend cleanup and refactor

* wip on backend refactor

* backend overhaul

* small lint

* second pass

* add logging, update endpoint

* simple refactor

* add reporting to all embedder providers

* fix styles

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Update Lemonade Integration to support v10.1.0 changes (#5378)

Update Lemonade Integraion
Fix ApiKey nullification check causing hard throw

* Enable final tool call in MAX_STACK to run (#5381)

* Fix streaming issue for LLM instruction blocks (#5382)

* Fix Telegram thread being null, actually wait for disconnect to prevent conflict at runtime

* Add retry handling to TG for transient failures (#5391)

* Add retry handling to TG for transient failures

* add async to promise

* Migrate to org-maintained mdpdf for lang support (Hangul, Simplified Chinese, Kanji) (#5392)

move to custom mdpdf for lang support (Hangul, Simplified Chinese)

* Update TG Transient error code and unclosed tag handler

* feat: adds name field to api keys (#5366)

* feat: adds name field to api keys

* remove extra toasts

* prune and norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Add automatic agent skill aproval via ENV Flag (#5405)

* add autoapproval env flag

* persist flag

* GMail Agent Skill (#5400)

* wip

* remove label tech

* ask to read attachments

* update skills

* Skill ready and tested

* report dynamic citations and generic get mailbox util

* norm translations

* translations

* remove dead code, remove connector in multiUser

* simple refactor - dont ask for drafts

* refactor filesize helper

* norm translations, remove read_messages skill

* Helm chart updates (#5410)

* move strategy to deployment spec

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

* add optional httproute resource

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>

---------

Signed-off-by: Busta Pipes <busta.pipes@gmail.com>
Co-authored-by: Busta Pipes <busta.pipes@gmail.com>

* feat: add Catalan translation (#5411)

* Add Catalan translation

* lint

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: preserve Confluence context paths (#5415)

* fix: preserve confluence context paths

* lint and minor changes

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Enable chatId reporting during agent sessions (#5407)

* 5427 translations (#5429)

* Outlook agent via Entra Application

* translations

* Revert "5427 translations (#5429)"

This reverts commit 41727518584491baabf50e10da35f6006be55dfd.

* Outlook agent via Entra Application (#5427)

* Outlook agent via Entra Application

* translations (#5437)

* reorder skills for app integrations

* Refactor Gmail Agent (#5439)

* make DDG default web-search in UI (already is in backend!)

* Google calendar skill (#5442)

* Google Calendar Agent

* forgot files

* Translations (#5443)

* Image lightbox for chat attachments (#5441)

* add image lightbox for chat attachments

* wrap lightbox image triggers in button elements

* add images to dependency array

* add jsdoc to ChatAttachments and remove filter

* fix regenerate from system message connect #5407

* dedupe email items based on name

* comment on outlook agent

* Better citations for gmail, gcal, and outlook

* bump TG edit to prevent edit spam for messages since edits count as a send event and too many will result in a 429
resolves #5447

* Merge commit from fork

* better special citation styling

* Add capability detection and streaming usage for Generic OpenAI provider (#5477)

- Add ENV-configurable model capabilities (tools, reasoning, vision,
  imageGeneration) via PROVIDER_SUPPORTS_* environment variables
- Add optional stream usage reporting via GENERIC_OPEN_AI_REPORT_USAGE
- Fix streaming tool calls for providers that send null tool_call.id
  (e.g., mlx-server) by generating fallback UUIDs
- Refactor supportsNativeToolCalling() to use centralized capabilities API

* fix: omit temperature param for Bedrock Claude Opus 4.7 (#5472)

* addconditionally pass temperature based on aws bedrock model id

* move to config

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: long-prompt bubble flicker & See More collapse on streaming/scroll (#5473)

fix ui flickering and truncatable prompt expansion bug

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: surface readable error messages in web-scraping agent and ai-provider (#5476)

* fix: surface readable error messages in web-scraping agent and ai-provider

* simplify

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update tool call response to always include convo ID for emails so they are not hallunicated

* 1.12.1 release tags (#5483)

* resolve GHSA-jwqg-jfg3-x5vv

* Show agent skills, flows, and MCP tools in chat tools menu (#5444)

* show agent skills, flows, and MCP tools in collapsible sections in chat tools menu

* fix tools menu toggle disabled bypass, add border-none to buttons, and useMemo improvements

* replace mcp server cache with loading state for mcp servers

* enable sub-skill management

* refactor

* Translations for chat tools menu improvements (#5448)

* normalize translations

* update translations

* norm translations

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* [FEAT] Add native Baidu Search provider for Agent web browsing (#5388)

* feat: add native baidu search provider for agent web browsing

* chore: address baidu search review feedback

* refactor baiduSearch internal util to be locally scoped

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix(embedder): surface Mistral embedding failures (#5513)

* fix(embedder): surface Mistral embedding failures

* fix pr

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* update readme
resolves #5519

* fix: invalid docs links in FileSystemSkillPanel (#5518)

* fix invalid documentation link

* fix link and trans i18n

* fix tag

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Remove default models to show empty until real models are retreieved (#5524)

resolves #5505
Fix placeholder
resolves #5503
resolves #5522

* Fix deepseek v4 reasoning inject thoughts (#5527)

* Fix deepseek v4 injectReasoning error
resolves #5509

* comment

* fix priority for workspace sidebar items that are unclear. Resolves #5502

* fix(agent): check auto-approved skills env correctly (#5511)

* fix(agent): check auto-approved skills env correctly

* remove file

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix double /reset in agent mode (#5516)

fix double /reset in agent mode

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: support OpenShift arbitrary UID/GID-0 in Docker image (#5136)

* fix: support OpenShift arbitrary UID/GID-0 in Docker image

Made-with: Cursor

* move to community

---------

Co-authored-by: Petre Ghita <petre.ghita@asset-metrix.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Normalize lemonade embedder error handling (#5547)

closes #5318
resolves #5305

* Update Sponsors README

* feat: Scheduled Jobs (#5322)

* initialize

* expand tool result text limit | add syntax highlighting and json formatting to tool result rendering

* fix onError jsdoc

* lint

* fix unread icon

* route protection

* improve form handling for NewJobModal

* safeJsonParse

* remove unneeded comments

* remove trycatch

* add truncateText helper

* add explicit fallback value tos safeJsonParse

* add shared cron constant and helpers

* reduce frontend indirection

* use isLight to compute syntax highlighting theme

* remove dead code

* remove forJob and make job limit to 50

* create recomputeNextRunAt helper method

* add comment about nextRunAt recomputation

* add job queue and concurrency control to scheduled jobs

* use p-queue

* change default max concurrent value to 1

* add comment explaining internal scheduling system

* add recomputeNextRunAt on boot

* add generated documents to run details

* Modify toolsOverride functionality where no tools selected means no tools are given to the agent

add a select all/deselect all toggle button for easily selecting all
tools in the cerate job form

* create usePolling hook

* add polling to scheduled jobs and scheduled job runs pages

* add cron generation feature in job form

* remove cron generation feature | add cron builder feature | add max active scheduled jobs limit

* set MAX_ACTIVE to null

* replace hour and minute input fields with input with type time

* simplify

* organize components

* move components to bottom of page component

* change Generated Documents to Generated Files

* add i18n to cronstrue

* add i18n

* add type="button" to button elements

* refactor fileSource retrieval logic

* one scheduled job run can have status "running"

* add protection of file retrieveal from scheduled job in multiuser mode

* fix comments

* make job status default to queued

* add queued status

* fix bug with result trace rendering

* store timeout ref and clearTimeout once race settles

* remove unneeded handlerPromise tracking

* move imports to top level

* refactor hardcoded paths to path resolve functions

* implement new job form design

* simplify

* fix button styles

* fix runJob bug

* implement styles for scheduled jobs page

* apply dark mode figma styles

* delete unused translation key

* implement light mode for new new job modal, run history, and run details

* lint

* fix light mode scroll bar in tool call card

* adjust table header contrast

* fix type in subtitle

* kill workers when job is in-flight before deleting job

* add border-none to buttons

* change locale time to iso string

* import BackgroundService module level | instatiate backgroundService singltone once and reuse across handlers

* add p-queue, @breejs/later and cron-validate as core deps

* parse cron expression to a builder state once

* add theme to day buttons in cron builder

* fix stale tools selection caption

* flip popover when popover clips screen height

* make ScheduleJob.trigger() await the run insertion | disable run now button if job is in flight

* regen table

* refactor generated file card

* refactor frontend

* remove logs

* major refactor for tool picking, fix bree/later bug

* combine action endpoints, move contine to method

* fix unoptimized query with include + take + order

* fix dangerous use, refactor job to utils

* add copy content to text response

* improve notification system subscription for browser

* remove unused translations

* prevent gen-file cleanup job from deleting active job file generated references

* rich text copy

* Scheduled Jobs: Translations (#5482)

* add locales for scheduled jobs

* i18n

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add config flag with UI notice

* update README

* telemetry datapoints

* Always use UTC on backend, convert to local in frontend

* fix tz render

* Add job killing

* cleanup thinking text in job notifications and break out reasoning in response text.
Also hide zero metrics since that is useless

* Port generatedFile schema to the normalized workspace chat `outputs` file format so porting to thread is simple and implem between chats <> jobs is 1:1

* what the fuck

* compiled bug

* fixed thinking oddity in complied frontend

* supress multi-toast

* fix duration call

* Revert "fix duration call"

This reverts commit 0491bc71f4223e65ea4046561b15b268fefb8da2.

* revert and reapply fix

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Rename auto mode to agent mode (#5551)

* update auto mode to agent

* auto-translate agent mode title for all locales

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Auto-rename thread in agent mode (#5550)

auto-rename thread in agent mode

Made-with: Cursor

* update scheduled job continue CTA (#5558)

* fix(tts): strip Markdown syntax before sending text to TTS engines (#5560)

* fix(tts): strip Markdown syntax before sending text to TTS engines

Chat responses are rendered as Markdown but the TTS components piped the
raw response into Piper / the browser's `SpeechSynthesis` API. The
synthesizer reads every special character literally — `**bold**` becomes
"asterisk asterisk bold asterisk asterisk", `# Heading` becomes "pound
heading", code fences are read backtick-by-backtick, and bullet lists
become "hyphen item". The result is unintelligible whenever the assistant
includes any formatting, which is most of the time.

This commit adds a small `messageToSpeech` helper that converts a
Markdown chat message into plain text suitable for TTS:

- fenced code blocks and images are dropped (nothing useful to read)
- inline code and link labels keep their text content
- emphasis markers, headings, blockquote markers, list markers, and
  horizontal rules are stripped while preserving the underlying words
- HTML tags are removed but their text content kept
- table pipes become commas so rows read naturally

The helper is regex-based — no new dependency — and is wired into both
the native (`SpeechSynthesis`) and Piper TTS components in
`WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/Actions/TTSButton`.

Closes #5557.
---
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Fix Community Hub import page responsiveness on narrow widths (#5544)

* make community hub import page responsive | fix top border bug

* fix top border bug

* fix layout shift

* remove bg to keep designs in spec

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: SPA nav for thread/workspace switching (#5528)

* fix: white flash when switching between threads

* nest thread route under workspace

* fix: white flash when switching between workspaces

* simplify Link usage in workspace/thread sidebar items

* smooth workspace and thread switching

* fix race condition on send during thread/workspace switch

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: tools popover overflowing screen on small viewports (#5549)

* fix tools popover from expanding beyond screen height limits

* fix max height clamp | remove unneeded useLayoutEffect dependency

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* apply refactor for recursive copy-file with symlinks: GHSA-vjrp-43mm-j7vw

* sync build from embed changes in https://github.com/Mintplex-Labs/anythingllm-embed/pull/18

* fix: scope thread options hover state (#5606)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: allow configurable collector port (#5607)

* feat: allow configuring collector port

* refactor

* persist collector save in prod

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/17

* build from https://github.com/Mintplex-Labs/anythingllm-embed/pull/16

* stringify uuid for embed

* fix: add font fallback for form controls (#5618)

* fix: add font fallback for form controls

* fix: restore complete index.css with font fallback

* move to end and mark important

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* norm symlink fix from GHSA-vjrp-43mm-j7vw to directories. resolves #5642

* fix: auto-speak not playing in agent mode (#5595)

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* feat: adding MiniMax LLM provider (#5450)

* add MiniMax LLM provider support

* add MiniMax LLM provider to the docs

* fix: add trailing newlines for lint compliance

* add env vars to system settings | make max tokens configurable via ui | pass max tokens into minimax llm provider

* change fallback max tokens value to null to use provider default | pass max tokens into handleFucntionCallStream and chat

* add minimax to getModelTag switch

* pass provider into tooledStream and tooledComplete

* remove max tokens param

* update image

---------

Co-authored-by: angelplusultra <macfittondev@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix: prevent gemini agent 400s from parallel tool calls (#5630)

fix: disable parallel tool calls for gemini agent provider

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Support reasoning content in v2 stream handler (#5654)

* refactor LMStudio for reasoning_content
closes #5584
resolves #5583

* Lemonade stream/completion reasoning optional via v2 change
resolves #5585

* migrate Deepseek and GiteeAI

* Update DeviceTokens to already-admin user on MUM migration (#5655)

resolve GHSA-h349-hp2v-8rhw

* Support pulling generated documents from API calls (#5658)

* support pulling generated documents from API calls

* revert async wait

* fix strictness of packMessages to handle streaming chunks but keep functionality

* Embed logos in docker prod build (#5660)

* embed logos in docker build

* forgot assets

* feat: Memories/Personalization (#5269)

* add memory storage layer with model, endpoints, schema, and system setting

* add memory extraction background worker

* handle single-user and multi-user mode for memory extraction

* add memory injection and personalization ui

* lint

* personalization UI polish, fix RBAC for all roles, and endpoint guards

* split admin personalization page into subcomponents

* split admin personalization page into subcomponents, use early return instead of ternary for readability

* make error responses consistent in memory endpoints

* consolidate duplicate MemoryItem into shared component

* skip memory reranking when no query context is available

* extract promptWithMemories util to deduplicate memory injection

* add english translations

* refactor memory api routes to eliminate ambiguous path params

* make memory extraction interval and idle threshold configurable via env vars

* add hint to memory form input

* inline personalization content in admin settings page

* consolidate unprocessed chat queries into single fetch

* simplify personalization page with early returns and layout subcomponent

* add memories sidebar with chat settings menu redesign

* remove legacy personalization ui

* split MemoriesSidebar into subcomponent folders

* fix memory card menu spacing to match design

* fix memories visibility for non-admin users

* add english translations for memories sidebar ui

* add workspace access checks to all memory endpoints

* pass user prompt to agent getDefinition for memory reranking

* check idle threshold per user/workspace group instead of globally

* use factory pattern for i18n text sizes and replace Trans with plain t() keys

* add placeholder examples and format guidance for manual memory creation

* remove stale comment

* refactor chat menu

* refactor sidebar to use provider and simplified DOM rendering

* fix memories sidebar overflow from long workspace names, widen memories options menu

* fix edit memory modal cursor landing at start of input

* hide memory add/move actions when at limit

* revert scope of workspace settings route changed for first pass of memories ui

* jsdoc memory model methods, drop redundant error logs

* inline error response returns and move body validation after perms in memory endpoints

* run memory fetches concurrently in list endpoint and prompt injection

* jsdoc server memory model methods

* normalize memory_enabled to true/false and add SystemSettings helper

* extract memory ownership middleware, strip redundant .end() calls

* use validWorkspaceSlug middleware for memory endpoints, switch to slug-based urls

* add description to memories util

* simplify memory ownership middleware to single db query

* use aibitat tool call for memory extraction, add chat safety limits

* truncate per-chat prompt/response before memory extraction

* add input validation to memory model

* validate ids array input in markMemoryProcessed

* inline memory injection in chatPrompt and systemPrompt

* make memory migration additive and drop unused sourceThreadId

* normalize translation files

* reset translations, minor nit

* refactor consts, extract memories with outputs

* set intervla

* sync

* rearch how memory extract works by moving to Observer/Reflector pattern (Mastra aspect)

* remove timeout on load

* Feat/memory i18n (#5661)

translations for #5269

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* add memories

* Workspace deletion protection (#5662)

* add WORKSPACE_DELETION_PROTECTION env flag to disable workspace deletion from UI and APIs

* minor nits

* patch test for phrase

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* fix for GHSA-6hrp-7mw6-8v59

* Model router (#5324)

* add model router backend: schema, models, API, evaluator, provider, and cooldown

* add model router frontend: settings pages, workspace integration, rule builder with DnD, and system LLM support

* add routing indicator, new rule types, and UX improvements for model router

* add provider credential validation to model router and fix icon alignment

* add llm classifcation rules for model router

* lint

* add vision routing, agent support, and configurable cooldown to model router

* add english translations for model router

* move isPathMatch to path utils

* fix model router sticking to first model in agent mode

* make model router notifications ephemeral and add CSV rule support

* improve model route notification ux and fix agent image routing

* split RuleForm into subcomponents

* extract RuleRow subcomponent and move ModalWrapper to NewRouterModal

* remove /admin prefix from model router endpoints

* use single query for model router list endpoint

* clean up model router error handling and http methods

* refactor model router rule update method and fix stale error field names

* add model router env vars to .env.example

* update fallback model description to mention llm rule classification

* fix model router rule row alignment and badge readability

* Model Router: Multi-condition rules, updated designs, and router edit support (#5478)

* Implement draft designs

* add matches comparator for prompt content

* implement multi conditional to a calculated rule

* fix between comparator

* restyle model router modals to match light mode designs

---------

Co-authored-by: shatfield4 <seanhatfield5@gmail.com>

* replace model route spinner with webm animation

* route llm classifier through aibitat tool call

* fix: rule form state not resetting when making new rules

* rename router form to rules page + fix and/plus button styles

* add telemetry for model router creation

* fix x button alignment on rule condition rows

* simple UI changes

* fix router

* Refactor model routing into singleton with sticky routes and LLM caching

Consolidate router/index.js, router/deterministic.js, and router/cooldown.js
into a single ModelRouterService singleton class that manages all routing state.

Key changes:
- Sticky model routing: once a rule matches, the model stays active for
  follow-up messages that don't match any rule (e.g., "tell me more"),
  preventing unwanted bouncing back to the fallback model.
- LLM classification cache: expensive LLM classifier calls are cached for
  the full sticky window (default 5 min), running at most once per window.
- Calculated rules always re-evaluate (they're instant), so topic shifts
  that match a different rule still route correctly.
- Route notifications only fire when the model actually changes, not on
  every message.
- Router config is cached in-memory and invalidated on CRUD operations.
- Detailed logging for cache hits/misses/expiry and rule evaluation.

* fix model router notification text to be i18n

* prevent history overwrite on regen

* fix in-processing post-routed chat spacing in UI

* reset router on thread reset

* update translation key

* refactor route name label on chat history

* use system LLM on new model router

* frontend modular cleanup

* fix UI/UX on how rules are shown

* rule builder translations

* translations

* endpoint cleanup

* refactor rules

* fix router translation for no rule
remove from default plugins
port support for model router to ephemeral

* simplify stream handler

* do not route notify on first message (non-agent chat)

* fix cache keys

* ttl reset on followups

* Differentiate between short TTL and long TTL when we actually have run an LLM eval route

* port embed support for router option

* frontend fixes

* dynamic key

* 5315 i18n (#5666)

* translations

* norm

* readme entry

* update comments

---------

Co-authored-by: Marcello Fitton <106866560+angelplusultra@users.noreply.github.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* Agent Skill: User Survey (#5577)

* initialize feature

* lint

* fix stale comment

* fix number input

* remove needless condition

* add survey persistence

* add clarifying uestions buffer to aibitat instance with helper methods

* move plugin specific config data away from aibitat instance and into plugin itself

* create useTimeoutProgress hook

* ui refactor

* change [skipped] to [user skipped]

* implement designs

* add agent settings clairfying questions translations

* prompting

* refactor UI
fix issue where text input still submits on skip if anything typed
multi-choice selection not persisting
regen overwriting prompt

* simplify components, translations, agent settings menu

* remove timeout config functionality
replace number inputs with real number inputs?

* rename skill/plugin

* remove i18n

* 5577 i18n (#5669)

connect #5577

---------

Co-authored-by: Timothy Carambat <rambat1010@gmail.com>

* better Gemini errors

* prevent contextualsavebar from showing on toggle of clarifying questions

* stop AI GHSA spam for the same fucking issue holy shit

* Migrate slash commands to admin user on multi-user-mode (#5684)

migrate slash commands to admin user on multi-user-mode

* bump docker run in HOW_TO_USE_DOCKER

* router-models: accurate token/message counting for model router decisions (#5680)

* fix: accurate token/message counting for model router decisions
Previously the router only counted tokens from the current user message,
ignoring system prompt, chat history, pinned docs, and parsed files.
Introduce ModelRouterService.gatherRoutingContext() to compute the true
conversation token count and reuse the fetched context downstream to
avoid redundant DB/filesystem lookups.
Also adds model router support to the OpenAI-compatible and API chat
handlers, propagates usageMetrics through ephemeral agents, and fixes
the router input to use the attachment-injected message.

* fix /chat API counter

* count current message in message count for router

* add router handler everywhere these is getLLMProvider

* router logic overhaul and refactor

* fix tests

* fix logger

* support generic openAI auto-detection for dropdown in model rules p…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant