Repository Analysis

SillyTavern/SillyTavern

LLM Frontend for Power Users.

1.9 Likely human-written View on GitHub
1.9
Adjusted Score
1.9
Raw Score
100%
Time Factor
2026-05-20
Last Push
28,588
Stars
JavaScript
Language
277,495
Lines of Code
748
Files
445
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 3HIGH 1MEDIUM 23LOW 418

Pattern Findings

445 matches across 11 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers372 hits · 379 pts
SeverityFileLineSnippet
LOWtests/util.test.js8function createMockExpressResponse() {
LOWtests/frontend/MacroLexer.e2e.js1320async function runLexerGetTokensAndErrors(page, input) {
LOWtests/frontend/MacroEngine.e2e.js3339async function evaluateWithEngineAndCaptureMacroLogs(page, input) {
LOWtests/frontend/MacroEngine.e2e.js3375async function evaluateWithEngineAndVariables(page, input, variables) {
LOWtests/frontend/MacroRegistry.e2e.js623async function registerMacroAndCaptureErrors(page, { macroName, options }) {
LOWtests/frontend/MacroRegistry.e2e.js679async function registerAliasAndCaptureErrors(page, { targetMacroName, aliasName, options = {} }) {
LOWpublic/script.js1084function verifyCharactersSearchSortRule() {
LOWpublic/script.js1362export async function deleteCharacterChatByName(characterId, fileName) {
LOWpublic/script.js1991export function ensureMessageMediaIsArray(mes) {
LOWpublic/script.js2447function updateMessageItemizedPromptButton(message, { messageId = chat.indexOf(message), messageElement = chatElement.fi
LOWpublic/script.js3144function addPersonaDescriptionExtensionPrompt() {
LOWpublic/script.js3222export function getExtensionPromptMaxDepth() {
LOWpublic/script.js3343export function getCharacterCardFieldsLazy({ chid = undefined } = {}) {
LOWpublic/script.js7055export function setExternalAbortController(controller) {
LOWpublic/script.js8062export function setGenerationParamsFromPreset(preset) {
LOWpublic/script.js8572export function selectRightMenuWithAnimation(selectedMenuId) {
LOWpublic/script.js8882export function getExtensionPromptRoleByName(roleName) {
LOWpublic/script.js8936export async function setCharacterSettingsOverrides() {
LOWpublic/script.js9421export function getFirstDisplayedMessageId() {
LOWpublic/script.js9487function updateAlternateGreetingsHintVisibility(root) {
LOWpublic/script.js9654 function handleMoveAlternateGreeting(event, direction) {
LOWpublic/script.js10598export async function renameGroupOrCharacterChat({ characterId, groupId, oldFileName, newFileName, loader: showLoader })
LOWpublic/global.d.ts232 function convertVideoToAnimatedWebp(args: ConvertVideoArgs): Promise<Uint8Array>;
LOWpublic/scripts/swipe-picker.js17export function canOpenSwipePickerForMessage(messageId) {
LOWpublic/scripts/welcome-screen.js204export function getPermanentAssistantAvatar() {
LOWpublic/scripts/welcome-screen.js255async function unshallowPermanentAssistant() {
LOWpublic/scripts/welcome-screen.js534async function renameRecentCharacterChat(avatarId, fileName) {
LOWpublic/scripts/welcome-screen.js599async function deleteRecentCharacterChat(avatarId, fileName) {
LOWpublic/scripts/welcome-screen.js690async function openRecentChatsSettingsPopup() {
LOWpublic/scripts/welcome-screen.js819export async function openPermanentAssistantChat({ tryCreate = true, created = false } = {}) {
LOWpublic/scripts/welcome-screen.js883export async function openPermanentAssistantCard() {
LOWpublic/scripts/welcome-screen.js898export function assignCharacterAsAssistant(characterId) {
LOWpublic/scripts/variables.js895function closureDeserializeCallback(args, value) {
LOWpublic/scripts/action-loader-slashcommands.js15export function registerActionLoaderSlashCommands() {
LOWpublic/scripts/chat-templates.js120export async function deriveTemplatesFromChatTemplate(chat_template, hash) {
LOWpublic/scripts/kai-settings.js134function loadKoboldSettingsFromPreset(preset) {
LOWpublic/scripts/kai-settings.js229export async function generateKoboldWithStreaming(generate_data, signal) {
LOWpublic/scripts/itemized-prompts.js65export async function replaceItemizedPromptText(mesId, promptText) {
LOWpublic/scripts/itemized-prompts.js389export function deleteItemizedPromptForMessage(messageId) {
LOWpublic/scripts/logprobs.js74function renderAlternativeTokensView() {
LOWpublic/scripts/logprobs.js509export function saveLogprobsForActiveMessage(logprobs, continueFrom) {
LOWpublic/scripts/logprobs.js559function getActiveMessageLogprobData() {
LOWpublic/scripts/logprobs.js575function convertTokenIdLogprobsToText(input) {
LOWpublic/scripts/personas.js207function verifyPersonaSearchSortRule() {
LOWpublic/scripts/personas.js551export async function convertCharacterToPersona(characterId = null) {
LOWpublic/scripts/personas.js689export function updatePersonaConnectionsAvatarList() {
LOWpublic/scripts/personas.js965export function isPersonaConnectionLocked(connection) {
LOWpublic/scripts/personas.js1206async function onPersonaDescriptionInput() {
LOWpublic/scripts/personas.js1238async function onPersonaDescriptionDepthValueInput() {
LOWpublic/scripts/personas.js1252async function onPersonaDescriptionDepthRoleInput() {
LOWpublic/scripts/personas.js1316async function onPersonaDescriptionPositionInput() {
LOWpublic/scripts/personas.js1334export function getOrCreatePersonaDescriptor() {
LOWpublic/scripts/personas.js1334export function getOrCreatePersonaDescriptor() {
LOWpublic/scripts/personas.js1518function getPersonaTemporaryLockInfo() {
LOWpublic/scripts/personas.js1543async function loadPersonaForCurrentChat({ doRender = false } = {}) {
LOWpublic/scripts/personas.js1875export async function retriggerFirstMessageOnEmptyChat() {
LOWpublic/scripts/personas.js2463function userMessageNamesEnumProvider() {
LOWpublic/scripts/personas.js2472function registerPersonaSlashCommands() {
LOWpublic/scripts/tags.js127function getVisibleAvatarsForGroupContext(type, currentGroup) {
LOWpublic/scripts/tags.js151function filterActionableTagsForGroupContext(actionTags) {
312 more matches not shown…
Self-Referential Comments18 hits · 54 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/pr-check-merge-conflicts.yaml23 # Create a GitHub App token
MEDIUM.github/workflows/on-close-handler.yml23 # Create a GitHub App token
MEDIUM.github/workflows/issues-updates-on-merge.yml23 # Create a GitHub App token
MEDIUM.github/workflows/on-open-handler.yml23 # Create a GitHub App token
MEDIUM.github/workflows/job-close-stale.yml23 # Create a GitHub App token
MEDIUM.github/workflows/job-close-stale.yml68 # Create a GitHub App token
MEDIUM.github/workflows/job-close-stale.yml106 # Create a GitHub App token
MEDIUM.github/workflows/issues-auto-manager.yml23 # Create a GitHub App token
MEDIUM.github/workflows/issues-auto-manager.yml57 # Create a GitHub App token
MEDIUM.github/workflows/issues-auto-manager.yml115 # Create a GitHub App token
MEDIUM.github/workflows/issues-auto-manager.yml142 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml32 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml69 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml100 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml134 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml171 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml250 # Create a GitHub App token
MEDIUM.github/workflows/pr-auto-manager.yml290 # Create a GitHub App token
Hallucination Indicators3 hits · 35 pts
SeverityFileLineSnippet
CRITICALpublic/lib/jquery-ui.min.js6!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict"
CRITICALpublic/lib/jquery-3.5.1.min.js2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):f
CRITICALpublic/lib/epub.min.js1!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d
Slop Phrases19 hits · 20 pts
SeverityFileLineSnippet
LOWpublic/locales/it-it.json1400 "Don't forget to save a snapshot of your settings before proceeding.": "Non dimenticare di salvare un'istantanea del
LOWpublic/locales/th-th.json1413 "Don't forget to save a snapshot of your settings before proceeding.": "อย่าลืมบันทึกสแนปช็อตการตั้งค่าของคุณก่อนดำเนิ
LOWpublic/locales/ko-kr.json1417 "Don't forget to save a snapshot of your settings before proceeding.": "계속하기 전에 설정의 스냅샷을 저장하는 것을 잊지 마세요.",
LOWpublic/locales/es-es.json1400 "Don't forget to save a snapshot of your settings before proceeding.": "No olvide guardar una instantánea de su conf
LOWpublic/locales/ja-jp.json1402 "Don't forget to save a snapshot of your settings before proceeding.": "続行する前に、設定のスナップショットを保存することを忘れないでください。",
LOWpublic/locales/zh-cn.json3416 "Don't forget to save a snapshot of your settings before proceeding.": "在继续之前,不要忘记保存您的设置快照。",
LOWpublic/locales/ar-sa.json1400 "Don't forget to save a snapshot of your settings before proceeding.": "لا تنس حفظ لقطة من إعداداتك قبل المتابعة.",
LOWpublic/locales/pt-pt.json1398 "Don't forget to save a snapshot of your settings before proceeding.": "Não se esqueça de salvar um instantâneo de s
LOWpublic/locales/uk-ua.json1398 "Don't forget to save a snapshot of your settings before proceeding.": "Перш ніж продовжити, не забудьте зберегти зн
LOWpublic/locales/de-de.json1400 "Don't forget to save a snapshot of your settings before proceeding.": "Vergessen Sie nicht, einen Schnappschuss Ihr
LOWpublic/locales/fr-fr.json1322 "Don't forget to save a snapshot of your settings before proceeding.": "N'oubliez pas d'enregistrer un instantané de
LOWpublic/locales/zh-tw.json1400 "Don't forget to save a snapshot of your settings before proceeding.": "在繼續之前,請不要忘記進行備份。",
LOWpublic/locales/is-is.json1398 "Don't forget to save a snapshot of your settings before proceeding.": "Ekki gleyma að vista mynd af stillingunum þí
LOWpublic/locales/ru-ru.json1569 "Don't forget to save a snapshot of your settings before proceeding.": "Настоятельно советуем перед этим сохранить с
LOWpublic/locales/nl-nl.json1396 "Don't forget to save a snapshot of your settings before proceeding.": "Vergeet niet een momentopname van uw instell
LOWpublic/locales/vi-vn.json1398 "Don't forget to save a snapshot of your settings before proceeding.": "Đừng quên sao lưu snapshot của cài đặt của b
LOWpublic/scripts/templates/resetSettings.html5 <div data-i18n="Don't forget to save a snapshot of your settings before proceeding.">
LOWpublic/scripts/templates/resetSettings.html6 Don't forget to save a snapshot of your settings before proceeding.
LOWsrc/endpoints/vectors.js21// Don't forget to add new sources to the SOURCES array
Over-Commented Block15 hits · 15 pts
SeverityFileLineSnippet
LOWdefault/config.yaml21 # Open the browser automatically on server startup.
LOWdefault/config.yaml41# Interval in seconds to write a heartbeat file. Set to 0 to disable.
LOWdefault/config.yaml101 url: "socks5://username:password@example.com:1080"
LOWdefault/config.yaml121 # This will use auto login to an account with the same username
LOWdefault/config.yaml141# Host whitelist configuration. Recommended if you're using a listen mode
LOWdefault/config.yaml181# Disable startup security checks - NOT RECOMMENDED
LOWdefault/config.yaml221 enabled: true
LOWdefault/config.yaml281 - raw.githubusercontent.com
LOWdefault/config.yaml321# A placeholder message to use in strict prompt post-processing mode when the prompt doesn't start with a user message
LOWdefault/config.yaml341 # Controls how long the model will stay loaded into memory following the request
LOWdefault/config.yaml361 # -- IMPORTANT! --
LOWdefault/config.yaml381 # Enables caching of the system prompt (if supported). Only for OpenRouter.
LOWpublic/script.js1161 // We need to do multiple filter runs in a specific order, otherwise different settings might override each other
LOWpublic/scripts/dynamic-styles.js121
LOWpublic/scripts/slash-commands/SlashCommandParser.js581 * @returns Whether the next characters are the indicated symbol.
Verbosity Indicators8 hits · 12 pts
SeverityFileLineSnippet
LOWpublic/script.js3347 // For group chats, we need to check if group cards should be used
LOWpublic/scripts/world-info.js2259 // Step 1: Clean all <option> elements within <select>
LOWpublic/scripts/world-info.js2267 // Step 2: Clean all <select> elements
LOWpublic/scripts/world-info.js2289 // Step 3: Clean <div>, <span>, <input>
LOWpublic/scripts/extensions/gallery/index.js630 // Step 1: Clone the template content
LOWpublic/scripts/extensions/gallery/index.js640 // Step 2: Append the given image
LOWpublic/scripts/extensions/gallery/index.js687 // Step 3: Attach it to the movingDivs container
LOWpublic/scripts/extensions/gallery/index.js690 // Step 4: Call dragElement and loadMovingUIState
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippet
MEDIUMpublic/scripts/world-info.js2722 // we gonna utilize the custom tokenizer that also handles the input.
MEDIUMpublic/lib/epub.min.js1!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d
MEDIUMpublic/lib/epub.min.js1!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("JSZip")):"function"==typeof d
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippet
MEDIUMsrc/endpoints/characters.js1328 // ── Bulk mode: avatars array is present ──────────────────
MEDIUMsrc/endpoints/characters.js1398 // ── Single mode (default behavior) ───────────────────────
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippet
HIGHpublic/script.js614export let amount_gen = 80; //default max length of AI generated responses
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippet
LOWpublic/scripts/variables.js2070 <pre><code class="language-stscript">/len Lorem ipsum | /echo</code></pre>
LOWpublic/scripts/extensions/tts/index.js94 const fallbackPreview = 'Neque porro quisquam est qui dolorem ipsum quia dolor sit amet';
LOWpublic/scripts/extensions/tts/index.js94 const fallbackPreview = 'Neque porro quisquam est qui dolorem ipsum quia dolor sit amet';
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWdocker/docker-entrypoint.sh58 # Check if PUID/PGID variables are provided