* Refactor loader.js to use action-loader system and move overlay management into action-loader module
- Deprecate showLoader() and hideLoader() in favor of action-loader API
- Implement legacy functions as thin wrappers around ActionLoaderHandle
- Move overlay management (showOverlay, hideOverlay, isOverlayDisplayed) into action-loader.js
- Move Popup-based loader implementation and preloader cleanup to action-loader
- Add loader.isBlocking() method to check for active blocking overlays
* Migrate from legacy loader functions to action-loader API throughout codebase
- Replace showLoader()/hideLoader() imports with loader from action-loader.js
- Update firstLoadInit() to use loader.show() with title, message, and ToastMode.STATIC
- Pass initLoaderHandle to getSettings() for early hide during onboarding flow
- Refactor renameGroupOrCharacterChat() to use loader.show() instead of boolean flag
- Wrap handleDeleteChat() with loader.show() and proper error handling
- Update BulkEditOver...
* Update loader titles and remove redundant reload notification
- Change bookmark loader title from "Bookmark" to "Chat History" for clarity
- Remove loader notification before extensions reload (redundant with browser reload)
* lint fix
* Add splash screen support to action loader with custom overlay content
- Add `overlayContent` option to ActionLoaderOptions for custom HTML in overlay
- Implement splash screen styles with centered logo, spinner, and message
- Update firstLoadInit() to use custom splash screen instead of static toast
- Pass custom content through showOverlay() to replace default spinner
- Adjust non-blocking loader warning to account for custom overlay content
* Refactor loader overlay to use DOM elements instead of HTML strings
- Add createDefaultLoaderOverlay() function to generate fresh loader overlay elements
- Export createOverlay() method on loader utility API for external use
- Change overlayContent parameter type from string-only to string|HTMLElement|null
- Add getOverlayContent() helper to normalize custom content for Popup
- Update firstLoadInit() to build splash screen using DOM manipulation instead of template literals
- Add splash-logo class and
* Use a true ellipsis
* Adjust sizing for desktop
* Even truer ellipsis
* Add transition to splash screen and fix blur animation on hideOverlay (#5338)
* Initial plan
* Blur entire splash screen on hideOverlay, not just spinner
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
Agent-Logs-Url: https://github.com/SillyTavern/SillyTavern/sessions/eee6c06d-7c9d-4363-bc8f-2647ed390368
* Add transition to splash-screen and fix transition detection
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
Agent-Logs-Url: https://github.com/SillyTavern/SillyTavern/sessions/9368bc36-31a0-4a58-aebd-7b569696ff2e
---------
Co-authored-by: anthropic-code-agent[bot] <242468646+Claude@users.noreply.github.com>
Co-authored-by: Cohee1207 <18619528+Cohee1207@users.noreply.github.com>
* Add translations to supported locales
* Localize logo alt on welcome screen
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
Co-authored-by: Claude <242468646+Claude@users.noreply.github.com>
* Unify chat lorebook button click behavior with character lorebook button
* Update locale strings for chat lorebook button
* Unify chat lorebook button click behavior with character lorebook button
* Update locale strings for chat lorebook button
* Also unify character lorebook button to support Alt modifier
* Update locale strings for character lorebook button
* Update public/locales/fr-fr.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add long-press support for lorebook buttons on mobile
* Update locale strings for lorebook button long-press
* Fix long-press to use event delegation for dynamic elements
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix(openrouter): forward reasoning across active tool-call chains
* feat(reasoning): add tool-chain forwarding toggle and honor edited reasoning
* feat(reasoning): add OpenRouter interleaved forwarding modes
* moved the reasoning forwarding dropdown into a separate line
* feat(reasoning): default tool reasoning forwarding to disabled
* refactor(openrouter): move tool reasoning mode to CC settings
Move OpenRouter tool reasoning forwarding control to response configuration and scope it to OpenRouter.
Store mode in chat completion settings (presettable), remove legacy power_user boolean/fallback, and use constants for mode values.
Preserve OpenRouter Gemini signature forwarding independently from plaintext tool reasoning mode.
* fix(openrouter): tighten active-chain reasoning forwarding
Use trailing contiguous tool-chain boundary for active-chain eligibility.
Also rename the UI control to Interleaved Thinking Forwarding and place selector on its own line.
* fix(openrouter): use adjacent assistant reasoning for tool calls
For interleaved thinking forwarding, source reasoning only from the immediately preceding assistant non-tool message.
Keep mode gating behavior unchanged and avoid history-window reasoning carryover.
* fix(openrouter): skip tool messages for reasoning source
When forwarding interleaved reasoning, ignore intervening tool result messages when resolving the preceding assistant reasoning source.
This keeps only the first tool call in a chain tied to a prior assistant reasoning block unless a later invocation carries its own reasoning.
* fix(openrouter): keep plaintext reasoning with signatures
Do not suppress forwarded tool-call reasoning when thought signatures are present.
* fix(openrouter): split interleaved thinking mode behavior
Restore distinct mode semantics: active_chain uses nearest assistant-text boundary after skipping tool/tool-call messages, while since_last_user scans for latest assistant reasoning since user.
Update UI label to Interleaved Thinking with right-aligned dropdown and explanatory tooltip.
* style(openrouter): align interleaved thinking dropdown row
Match OpenRouter interleaved thinking control layout with existing oneline-dropdown patterns.
Also update reasoning-forwarding inline comment wording for current mode behavior.
* docs(ui): clarify interleaved thinking tooltip
Use explicit API-request wording for OpenRouter interleaved thinking tooltip text.
* i18n(openrouter): localize interleaved thinking UI
Add locale keys for OpenRouter interleaved thinking label, mode options, and inline helper description.
Wire dropdown option text to data-i18n in index.html.
* fixed helper text wrapping
* fix(ui): make interleaved thinking helper text wrap
* i18n(openrouter): translate interleaved thinking labels
Replace placeholder English values for interleaved thinking keys in non-English locale files.
* fix(ui): restore interleaved thinking dropdown alignment
* Remove changes from en.json
* Type fixes
* Reworked the interleaved reasoning provider logic
* Renamed the variables in preparation for potential implementation for other providers
* Gate interleaved tool reasoning on reasoning request setting
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Added an option to hide message avatars in `User Settings > UI Theme`.
* Deprecated the `Hide Chat Avatars` toggle.
Moved the option to hide message avatars to `User Settings > UI Theme > Avatars`.
* Revert "Deprecated the `Hide Chat Avatars` toggle."
This reverts commit 6f616767cce4aa2c27a3a53543687d6eaf379758.
* Moved `Hide Chat Avatars` next to `Avatar Style`, added title text.
* Reverted changes.
---------
Co-authored-by: user <user@exmaple.com>
* Chat Completion: Reduce number of toggles in AI Response Configuration
* Consolidate migration logic
* Don't enable media inlining if image inlining was disabled
* Fix icons showing on media toggle off
* Update i18n
* Add audio-player component
* Enhance audio player functionality and styles
- Adjust audio player layout and styles in CSS for better spacing and alignment.
- Add audio element to message template in HTML.
- Implement audio attachment handling in JavaScript, including a new AudioPlayer class.
- Update media attachment structure to include titles for audio files.
- Extend supported media file types in constants.
* Add audio inlining control
* Fix file formats list
* Simplify hints
* Add to prompt
* Add progress title hint
* Add to scrollOnMediaLoad
* Add audio size hint
* Add gallery controls
* Delete removed media attachments from server
* Adjust min width
* No-op when swiping a singular media
* Fix clean-up
* Fix silent deletion logic
* More accurate media prompt estimations
* Round durations with ceiling function
* Adjust rounding logic
* you don't have to say it twice
* Export deleteFileFromServer
* Don't reference module from HTML
* Clean-up styles
* Move formatTime to utils
* Add fa-fw to delete
* feat: preset regex
* refactor: unify `saveScriptsByType`
* fix: default branch for `saveScriptsByType`
* refactor: resolve some reviews
* fix: lint
* refactor: getPresetName -> getCurrentPresetName
* refactor: unify regex allow operation
* feat: notify whether to reload current chat when preset is changed
* refacotr: set timeout for reload current chat notification
* fix: _ -> lodash
* i18n
* Refactor API ID access
* refactor: replace UNKNOWN type with a separate constant
* refactor: consolidate CSS rules for scoped and preset script blocks
* Extend toast timeout
* Fix bug with moving, refactor
* Refactor bulk toggle operations
* Use for..of for preset application
* refactor: enhance parameter documentation for scriptType in regex functions
* fix: await loadRegexScripts in event handlers
* fix: correct script type in saveScriptsByType for preset handling
* fix: add null checks for preset manager and API ID in regex functions
* feat: implement expandable regex script options in UI
* Always show edit/delete buttons
* Add title attribute to regex script name
* fix: correct class name for regex script display
* Remove extra paddings from script blocks
* fix: ensure preset scripts are only disallowed if currently allowed during rename
* fix: reload on bulk script toggle
* feat: add PRESET_RENAMED_BEFORE event type and emit it during preset renaming
* fix: always preserve preset extensions on rename
* Handle horde in getPresetManager
---------
Co-authored-by: ZoinkCN <zoinkcn@outlook.com>
Co-authored-by: StageDog <aksanajw845@gmail.com>
* Add Thai Translation
* Remove yarn.lock and add to .gitignore
* Update Thai translation
* Update Thai translation for World Info entry status descriptions
* fixed thai translation
* fixed merge conflicts
* Supported max tokens + fixed wrong image model mapping
* fixed merge conflicts
* fixed merge conflicts
* updated the logic
* updated the logic
* replaced hard coded reasoning_effort mode list with a dynamic function
* replaced hard coded reasoning_effort model list with a dynamic function
* Fix eslint
* Adjust reasoning effort logic
* Code clean-up
* Add logo
* Add inline image quality
* Fix multimodal models list
* Fix seed not passed
* Add "detail" error parser
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* feature: ignore budget switch
The budget cap default at 25% is a big gotcha at the start of chats, as a person may assume that a constant lore book entry will always be present, no matter what. This pull request adds a budget ignore switch which ignores the budget cap and includes the lore book entry even if it would exceed the budget cap.
* Move the toggle to entry details
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Adding ZLib and Jimp imports.
* Adding checks to see if UUID or URL are from Perchance.
* Adding conversion for Perchance cards and avatar.
* Adding label and example for Perchance character import.
* Adding localization of Perchance import option.
* Lint dangling comma fix.
* Simplifying one liner arrow function.
* Checking .gz at the end of Perchance url.
* Refactoring.
* Handling Base64 avatars.
* Fixing issue with UUID and refactoring.
* Adding char name to Perchance UUID example.
* Undoing unwanted variable name change of avatarBuffer to defaultAvatarBuffer
* Adding null check.
* Minor adjustments: renaming variable and organizing imports.
* Simple refactoring and reducing level of console messages.
* Add character source for perchance
* Add null check
* Use slug for source
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
- Added missing Traditional Chinese translations for the latest version
- Improved existing Traditional Chinese translations for clarity, professionalism, and neutrality
- Also fixed an obvious error in the Simplified Chinese translation
* Add tagOptions parameter to printTagList for character-specific filtering
* Add toggle functionality to hide tags in tag management popup
* Add translations for "Hide on character card" in multiple locale files
* Add is_hidden_on_character_card property to newTag function
* applied linter
* revert back `DEFAULT_TAGS_LIMIT`
* Remove debug logs
* Adjust HTML
* Render list and save settings on toggle change
* Make tag manager wide
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
* Implement a priority for prompt injections in CC
Adds a numeric order for injected prompts, 0 being default and placed at the top, and higher numbers placing further down. If two messages have the same priority, then order is determined by role as was before.
* Update data-i18n for new setting field
* Rename priority to order, sort higher first/lower last
* Hide order when position is relative, adjust hint text
* Fix type error
* Fix capitalization
* Cut UI texts
* Reposition text labels
---------
Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>