The extension lets users type custom JavaScript into a settings box for tracker display, and runs it using new Function. This JavaScript is also included in exported and imported preset files. If someone shares a preset file containing malicious JavaScript and a user imports and selects it, the malicious code runs in their browser with access to their SillyTavern data and API keys. Users would not expect a preset file to contain executable code.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Detailed technical wording was omitted by the public report safety filter.
Impact: high · Exploitability: plausible
Developer action: Review the cited evidence and confirm the intended behavior.
mesTrackerJavascript included in exportable and importable presets
material risk · high confidence
Preset files exported by this extension include the custom JavaScript field. If a user imports a preset from someone else, that JavaScript runs when they select the preset, creating a way to sneak malicious code into a file users expect to contain only prompt templates.
Technical assessment
getCurrentPresetSettings includes mesTrackerJavascript in the preset object that gets exported to JSON files and imported from JSON files. This means executable JavaScript is bundled into shareable preset files, and importing a preset from an untrusted source can introduce arbitrary code that executes when the preset is selected.
Impact: high · Exploitability: plausible
Developer action: Do not include mesTrackerJavascript in preset export/import, or strip and warn about executable code when importing presets from files.
Preset selection triggers JavaScript execution from imported data
material risk · high confidence
When a user picks an imported preset from the dropdown, the extension runs the JavaScript that came with it. This is the step that turns an imported file into executed code.
Technical assessment
onPresetSelectChange calls Object.assign(extensionSettings, presetSettings) which copies the imported mesTrackerJavascript into the active settings, then calls setSettingsInitialValues which calls processTrackerJavascript, triggering the new Function execution of the imported code.
The scanner flagged this file as potentially obfuscated, but the actual code is plain, readable JavaScript with clear comments. It does what the extension says it does: generates trackers using a separate connection. No hidden or obfuscated behavior was found.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The JS-X-Ray obfuscated-code signal (scanner_confidence=low) is a false positive. The supplied source for file is fully readable, well-commented production JavaScript. It imports SillyTavern core modules, manages independent connection profile requests via ctx.ConnectionManagerRequestService.sendRequest, builds prompt templates with regex-based placeholder substitution, and parses tracker responses. No minified, encoded, packed, or obfuscated code is present. All data flows remain within SillyTavern's extension context and route to the user-configured connection profile. No external destinations, concealed execution, credential access, or persistence beyond saving tracker data to chat messages are observed. The temporary preset override on the live profile (lines 145-152) is restored in a finally block, matching the stated purpose of non-interfering independent generation.
The scanner flagged this file as potentially obfuscated, but the code is plain and readable. It manages the extension's settings, UI, and preset dropdowns. No hidden or obfuscated behavior was found.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The JS-X-Ray obfuscated-code signal (scanner_confidence=low) is a false positive. The supplied source for file is fully readable, well-commented JavaScript handling settings initialization, migration, UI loading, event listener registration, connection profile dropdowns, completion preset categorization, and preset import/export. No minified, encoded, packed, or obfuscated code is present. All operations use SillyTavern's standard saveSettingsDebounced and jQuery UI patterns. The settings data stays within the extension's configuration scope and does not access credentials, make external network calls, or perform concealed execution.
Readable generation request code with proper preset restoration
low risk · high confidence
The generation code is straightforward and readable. It sends prompts to the model using the user's chosen connection profile and restores any temporary changes afterward.
Technical assessment
The sendIndependentGenerationRequest function temporarily overrides the connection profile's preset for a single request and restores it in a finally block. This matches the README's stated feature of using a dedicated completion preset without interfering with the main connection. No credentials are read or transmitted beyond what SillyTavern's own ConnectionManagerRequestService handles.
Readable settings initialization and UI management code
low risk · high confidence
The settings code is straightforward. It handles loading the settings panel, managing presets, and updating dropdown menus. Nothing hidden or suspicious.
Technical assessment
The initSettings function performs standard settings migration and merge logic. The loadSettingsUI function fetches HTML from the extension folder and appends it to the SillyTavern settings panel. Both are standard SillyTavern extension patterns with no obfuscation or hidden behavior.