No material or immediate-danger item was identified.
Contextual expected matches (46)
JavaScript analysis reported javascript.xray.sql-injection
Expected behavior · high confidence
The security scanner thought there might be an SQL injection risk, but this app doesn't use any SQL database. It's just a harmless log message about a character's outfit change.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.sql-injection. The match applies to this repository.
Contextual assessment: The static analysis flagged a sql-injection signal at line 21393. The context shows a console.warn with a template literal interpolating a detected outfit string. No SQL queries, database connections, or query construction exist anywhere in the provided evidence. The application uses IndexedDB and localStorage for persistence, not SQL. This is a false positive from pattern matching.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.sql-injection
- File role
- production
- Source
- app.js:21393
JavaScript analysis reported javascript.xray.unsafe-vm-context
Expected behavior · high confidence
The code uses Node's built-in virtual machine to run small pieces of the app in a safe testing environment, like a sandbox for experimenting. This is how many tests work and does not create a security risk.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context. The match applies to this repository.
Contextual assessment: The 'unsafe-vm-context' signal flags use of vm.runInNewContext. In this test file, vm is used with hardcoded application source slices and fixed test data to unit-test individual functions in isolation. No user-supplied or dynamically-fetched code is passed to vm. The sandbox context is a plain object and no dangerous capabilities are exposed. This is a standard testing pattern and does not represent a runtime attack vector.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-vm-context
- File role
- production
- Source
- scratch/engine_audit.js:97
JavaScript analysis reported javascript.download-to-execution
Expected behavior · high confidence
This file talks to AI models over the internet or a local server, which is exactly what the app is supposed to do. It does not run any downloaded code, so there's no hidden danger.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The scanner flagged a correlation between network retrieval (fetch calls) and dynamic code execution sinks, but the provided source code only uses fetch for OpenAI-compatible API calls to local or configured model endpoints. No eval, new Function, or other dynamic execution sink is present. The fetched response is used as text output, not executed. This is standard behavior for an LLM client and proportionate to the project's stated purpose.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.download-to-execution
- File role
- production
- Source
- labs-core.js:1-253
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This is part of a test that checks how the project handles certain keywords. It runs a small piece of the project's own code in a sandbox to see if it works correctly. It is not used during normal use of the application.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Line 115 in the regression test file uses vm.runInNewContext to execute a function (parseLoreKeywords, loreKeywordMatches) extracted from the project's own application source, with a sandbox containing only Set, RegExp, and String. This is a unit test for the lore keyword parser. The executed code is project-authored, not user-supplied. The result is used only for assertion comparisons. No production impact.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/gameplay_overhaul_audit.js:115
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This file stores a fictional world's characters, images, and settings as data. The scanner flagged the long image data strings, but they are just embedded pictures, not dangerous links.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The file is a generated JavaScript data structure defining a persistent world for Horde Studio. It contains large inline base64-encoded media assets (data URIs) which are normal for this format. The 'shady-link' signal is a false positive triggered by the long data URI strings. No external URLs or network requests are present; the data is purely declarative and local.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- policy-panic-world.js:2
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This line runs a test that checks how the project saves and restores game state. It runs a small piece of the project's own code in a sandbox to verify it behaves correctly. No outside data is used.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Line 47 in the regression test file uses vm.runInNewContext to execute functions captureWorldTurnState and restoreWorldTurnState extracted from the project's own application source. The sandbox context is limited to structuredClone, JSON, a safeJsonClone helper, isPlainObject, and a stub bumpMemoryEpoch. The executed code is project-authored, not user-supplied. This is a standard testing pattern for isolated verification.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/gameplay_overhaul_audit.js:47
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This test checks that a built-in character's photo is correctly embedded as a data URL. It doesn't connect to any website or download anything. The scanner warning is a false alarm.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: Line 36 asserts that a bundled virtual human's profilePhoto property starts with 'data:image/jpeg;base64,'. This is a data URI, not a network URL or shady link. The scanner flagged it as a 'shady-link' due to a heuristic that treats data: URIs as potentially suspicious. However, the test merely validates that the bundled character data contains an embedded base64-encoded JPEG image. No actual network request is made. This is safe expected behavior for test validation of bundled assets.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- scratch/included_human_audit.js:36
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This is a test that runs a small piece of the app's code to check if it works correctly. It does not run any user-supplied code and only runs during development testing.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: This vm.runInNewContext call is part of a test suite (engine_audit.js) that slices application code to unit-test specific functions. The executed code is hardcoded string slices from the application bundle, not user or external input. The test context is a fresh empty object, and no runtime state is leaked. This is a standard Node.js testing pattern with no production exposure.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:125
JavaScript analysis reported javascript.xray.suspicious-literal
Expected behavior · high confidence
This signal appeared because the file has very long text strings inside, but that's normal for an AI roleplay preset — it's just saved prompts, not hidden code.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.suspicious-literal. The match applies to this repository.
Contextual assessment: The suspicious-literal signal was raised on a static preset definition file (file) that contains only data: an array of JSON-like system prompt objects with long text values. No obfuscation, dynamic execution, or hidden logic is present. The scanner likely flagged the large content as an unusual literal, but it is structurally identical to a data file for SillyTavern-adjacent preset systems.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.suspicious-literal
- File role
- production
- Source
- presets.js:1
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The security scanner flagged some code as suspicious, but it's actually just the character's built-in profile pictures stored as text. No external links or data theft is involved.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: JS-X-Ray flagged 'shady-link' on the data:image/jpeg;base64 URIs embedded in the virtual-human character definition. These are inline base64-encoded JPEG images for the character's profile and base photos, not external URLs. No network request or credential exposure occurs from these data URIs. The scanner signal is a false positive in this context.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- ashlyn-reynolds-human.js:5
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
Another test that runs app functions in a safe sandbox to verify they reject bad data. Only runs during development.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Same pattern as prior candidate: vm.runInNewContext used to execute a hardcoded slice of application source to test validation functions. The string is composed from literal source slices via app.slice(), no dynamic input. No user or attacker influence. Part of the project's own security audit suite.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:135
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The file contains a list of common local addresses for AI model servers. This is used to automatically find a running local model. It does not send data to the internet.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The scanner identified hardcoded URLs (14 occurrences) but they are all localhost or private IP addresses used for auto-discovery of local model servers (e.g., Ollama, LM Studio). The normalizeLoopbackBase function validates that only private hosts are used. These URLs are not sent to external services; they are used to probe for local endpoints. This is expected for a local-first AI tool and does not represent a security concern.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- labs-core.js:17
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
A test that checks if the game's travel rules work correctly. It runs inside the test runner, not in the live app.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Third occurrence: vm.runInNewContext used to test travel logic. The executed code is built from functionSource() which extracts hardcoded function bodies from the application string. No external or untrusted data reaches the vm context. This is a unit test, not a production execution path.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:143
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This test checks a feature that rotates items in a large world to keep things manageable. It runs a small piece of the project's own code in a sandbox to make sure the rotation works as expected.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Line 130 in the regression test file uses vm.runInNewContext to execute the rotatingWorldWindow function extracted from the project's own application source. The sandbox context is limited to Math, Number, Array. The executed code is project-authored, not user-supplied. This test verifies the rotation algorithm produces different orderings with different parameters.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/gameplay_overhaul_audit.js:130
JavaScript analysis reported javascript.xray.obfuscated-code
Expected behavior · high confidence
The scanner thought this file might be scrambled, but it's just a data file with long image strings. It's not hidden or malicious.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The 'obfuscated-code' signal triggered due to the file's very long lines (base64 data URIs) and lack of typical formatting. However, the file is a generated data structure, not obfuscated code. The scanner confidence is low, indicating uncertainty. The normalized representation shows valid JavaScript object syntax with no obfuscation, minification, or hidden logic.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.obfuscated-code
- File role
- production
- Source
- policy-panic-world.js:1
JavaScript analysis reported javascript.xray.obfuscated-code
Expected behavior · high confidence
This is a build script that prepares images and game data. It's not hiding anything; the code is easy to read and does exactly what it says.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The script is a straightforward build tool that reads PNG assets, converts them to JPEG via the sharp library, and constructs a world file with embedded media. All code is clearly readable and serves its documented purpose. The scanner's obfuscated-code signal has low confidence and is not supported by the visible source—there is no concealment, encoding, or intentional obfuscation.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.obfuscated-code
- File role
- production
- Source
- scratch/build_policy_panic_world.js:1
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This is the same safe test pattern as the other flag. It uses a sandbox to test app code without risking any harmful execution.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: The OpenGrep rule flags the same vm.runInNewContext call from the quest engine stress test. As analyzed in the companion assessment, this is a deliberate sandboxed test execution of a static code slice, not a dynamic eval of untrusted content. No security concern.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/quest_engine_stress_test.js:55-66
JavaScript analysis reported javascript.xray.unsafe-regex
Expected behavior · high confidence
This is a test file that uses a regular expression to check the app's own code. Since it never sees user input, it cannot be used to attack anyone.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.
Contextual assessment: The regex is used solely in a test assertion that checks whether a hardcoded application source string contains a specific code pattern. It does not process any user-supplied or network-supplied input. Therefore the unsafe-regex pattern cannot be triggered by an attacker and poses no security risk.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-regex
- File role
- production
- Source
- scratch/authored_world_audit.js:172
JavaScript analysis reported javascript.download-to-execution
Expected behavior · high confidence
The app uses fetch to talk to its local bridge and AI providers, and it updates the page using safe HTML escaping. There is no way for an attacker to make it run code from the network based on what we can see.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The scanner correlated fetch (network retrieval) with a code execution sink in the same file. The visible fetch calls are to the local MCP bridge (localhost:43127) or hardcoded provider API bases. The only dynamic DOM update is innerHTML with values escaped via escapeHTML, not arbitrary code execution. No eval, new Function, or similar execution of fetched content is present in the provided evidence.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.download-to-execution
- File role
- production
- Source
- app.js:456-8242
JavaScript analysis reported javascript.download-to-execution
Expected behavior · high confidence
The scanner thought there might be a path that downloads code and then runs it, but looking at the actual file, there is no network download happening. The code only runs pre-written test snippets. This is not a real vulnerability.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution. The match applies to this repository.
Contextual assessment: The 'download-to-execution' correlation suggests a network retrieval primitive combined with a code execution sink in the same file. The supplied evidence shows no network function (fetch, http) in the visible code. The file is a test suite that uses vm.runInNewContext with static app source. There is no demonstrated path where remotely fetched data reaches a dynamic code execution sink. The correlation is a static-analysis artifact without runtime reachability.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.download-to-execution
- File role
- production
- Source
- scratch/engine_audit.js:97-419
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This is a security test that checks Horde Studio blocks remote model endpoints. The flagged URL is just an example used in the test, not a real connection attempt.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The JS-X-Ray shady-link signal flagged a line in a test file where a remote URL is used as an assertion input. The test explicitly verifies that remote cognition endpoints are normalized to localhost, confirming a security guard. No actual remote connection is made; the URL is a test argument.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- scratch/labs_cognition_audit.js:44
JavaScript analysis reported javascript.xray.unsafe-vm-context
Expected behavior · high confidence
Detailed wording was omitted by the public report safety filter.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context. The match applies to this repository.
Contextual assessment: The Node.js vm.runInNewContext call on line 47 is used within a project-internal regression test script to extract and execute a specific function from the project's own application code (file) in a sandboxed context. The executed code is a statically extracted substring of the project's own source, not user-controlled input. The sandbox context is limited to safe built-ins (structuredClone, JSON, a stub bumpMemoryEpoch). No untrusted data reaches the vm call, and the test has no runtime reachability in production browser execution. This is a standard testing pattern for isolated unit verification.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-vm-context
- File role
- production
- Source
- scratch/gameplay_overhaul_audit.js:47
zizmor reported artipacked
Expected behavior · high confidence
This workflow builds and uploads the application. The token used to upload is temporary and not stored inside the uploaded file. There is no security issue here.
Technical evidence
Scanner reason: zizmor matched workflow-security rule artipacked. The match applies to this repository.
Contextual assessment: The zizmor artipacked rule flags potential credential persistence into GitHub Actions artifacts, but this workflow uses github.token only to upload a pre-built portable application zip to a release via gh. The token is not embedded into the artifact; it is an environment variable scoped and short-lived. No evidence of credential leakage or persistence exists in the supplied workflow source.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- zizmor 1.28.0
- Rule
- artipacked
- File role
- tooling
- Source
- .github/workflows/package-current-release.yml:13-16
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
A test that simulates launching a preset selector to ensure it picks a valid option. Only runs when the developers run tests.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: vm.runInNewContext is used with a hardcoded string template to test DEFAULT_SYSTEM_PRESETS initialization. The code is a known slice of the application's source. No untrusted input is involved. This is a development-time test.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:97
JavaScript analysis reported javascript.xray.unsafe-regex
Expected behavior · high confidence
This is a complex pattern used by the project's own test tools to clean up source code before checking it. It only runs on the project's own files, not on anything a user might type or send. There is no practical risk.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.
Contextual assessment: The regex on line 193 is part of a test-utility function (constInitializerIsInert) that normalizes regex literals in static source code extracted from the project's own file file. The regex is used to replace JavaScript regex literals with a placeholder to prevent false positives in a subsequent call-detection scan. The input is the project's own source, not attacker-controlled data. No ReDoS risk is demonstrated because the input is controlled by the developer and is not dynamic or user-provided.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-regex
- File role
- production
- Source
- scratch/app_source.js:193
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The app talks to several services like local model servers and cloud AI providers, which means it needs to reference many web addresses. All of them are expected for the app's features, not hidden or malicious.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The shady-link signal flags 36 URL references across the codebase. All observed URLs connect to local loopback addresses for self-hosted services, well-known model provider endpoints, an open weather API, blob and data URIs for media handling, and SVG namespace constants. These matches are consistent with the project's stated purpose of connecting to local and cloud AI services and media providers. No evidence of unexpected destinations or credential exfiltration is present.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- app.js:250
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
Another development test that checks the game clock doesn't go negative. Safe and only runs when testing.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: vm.runInNewContext used to test getWorldTimeData with a hardcoded function source slice. The context is a fresh object, input is hardcoded test values. No dynamic or untrusted data. Part of the unit test suite.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:240
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This file stores images as long text strings. The scanner flagged them as suspicious links, but they are just embedded pictures for the world.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The 'shady-link' signal is a false positive triggered by the long data URI strings present in this generated world data file. These data URIs are embedded JPEG images for NPC portraits and location backgrounds, not external URLs or network destinations. No runtime network requests are made from this file.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- policy-panic-world.js:15
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
A test that verifies undoing a game turn doesn't break the world map. Only runs during development.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: vm.runInNewContext used to test turn snapshot restore functions. The code string is built from multiple hardcoded functionSource() calls joined together. The context object receives no external input. This is a development-only unit test ensuring snapshot logic doesn't corrupt shared world geography. No attacker-accessible path.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:249-256
JavaScript analysis reported javascript.xray.unsafe-vm-context
Expected behavior · high confidence
This is a test script that runs a chunk of the app's map code in a sandbox to make sure it works. No user data or secrets are involved, and the script only runs when the developer manually executes it.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context. The match applies to this repository.
Contextual assessment: The file is a developer test script that runs a static slice of the application's world-map engine inside a Node.js VM context (vm.runInNewContext) for isolated regression and stress testing. The input string is constructed from hardcoded offsets and the file source file read at test start; no user-controlled or untrusted data is injected. The use of vm.runInNewContext is appropriate for this test isolation purpose and does not expose any production risk.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-vm-context
- File role
- production
- Source
- scratch/world_map_stress_test.js:17-30
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The scanner flagged 'data:image/jpeg;base64,...' as a suspicious link, but that's just how images are stored directly in the data — no external server is contacted. It's safe.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The shady-link signal at line 33 in file points to the assertion: assert(ash.profilePhoto.startsWith('data:image/jpeg;base64,')). This is a data URI (embedded image), not an external link. The scanner interpreted the 'data:' prefix as a suspicious URL, but it's a legitimate inline image reference for a virtual human's profile photo. A similar assertion on the next line for basePhoto also triggers. No network request or data exfiltration is involved.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- scratch/ashlyn_archive_audit.js:33
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This file contains a character definition with a pre-loaded profile picture stored inside the code itself (a data URI). It does not connect to the internet or send data anywhere.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The file defines a virtual human character object with embedded Base64 image data for profile photos, using data URIs. No external network calls or URLs are present in the provided source; the scanner signal 'shady-link' likely matched the data URI strings, which are static content storage, not actual network links. The file is a generated data artifact for the Horde Studio project.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- jane-harlow-human.js:4
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This test checks how the project handles different statistics for characters, like health or agility. It runs a small piece of the project's own code in a sandbox to verify the default settings are correct.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Line 84 in the regression test file uses vm.runInNewContext to execute the worldStatRollConfig function extracted from the project's own application source. The sandbox context is limited to isPlainObject. The executed code is project-authored, not user-supplied. This test verifies default stat roll configuration for different stat types.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/gameplay_overhaul_audit.js:84
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This is a test file that runs part of the app's map code inside a sandbox to check for bugs. It only runs when the developer tests manually and does not affect users.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: This candidate flags the same vm.runInNewContext call in the test file. The dynamic execution is limited to a predetermined slice of the application's own source code with no runtime user input. The test script is not shipped or executed in production; it is a developer-only artifact. No credential handling, exfiltration, or persistence is present. The behavior is standard for unit testing isolated functions.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/world_map_stress_test.js:17-30
zizmor reported artipacked
Expected behavior · high confidence
This workflow creates a release when a new version tag is pushed. It uses a temporary token to upload the application, but the token stays in the workflow environment and is not packed into the download. Safe.
Technical evidence
Scanner reason: zizmor matched workflow-security rule artipacked. The match applies to this repository.
Contextual assessment: The zizmor artipacked rule flags potential credential persistence into artifacts, but this workflow uses github.token only to create a release and upload the portable zip. The token is not written into the artifact. The workflow triggers only on tag pushes and has no artifact-storing steps beyond the release upload. No credential persistence is demonstrated.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- zizmor 1.28.0
- Rule
- artipacked
- File role
- tooling
- Source
- .github/workflows/release.yml:15-16
JavaScript analysis reported javascript.xray.obfuscated-code
Expected behavior · high confidence
The file is a character definition file with a pre-stored image. It is not hidden or scrambled; it's just data.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The file is a generated data artifact (virtual human character definition) and its code is not obfuscated; it is a straightforward JSON-like object with named properties. The scanner signal 'obfuscated-code' is a low-confidence false positive likely triggered by the large inline base64 image strings, which are not obfuscation but static data.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.obfuscated-code
- File role
- production
- Source
- jane-harlow-human.js:1
JavaScript analysis reported javascript.credential-to-network
Expected behavior · high confidence
The app reads which AI service you set up and sends your story text to that service. That is exactly what it's supposed to do. The credentials stay with your chosen provider.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.credential-to-network. The match applies to this repository.
Contextual assessment: The scanner noted credential access (reading API base URLs from state.globalSettings) correlated with a network sink (fetch). The code reads base URLs for user-configured providers and makes fetch requests to those URLs. This is the intended behavior: the app sends prompts to the user's chosen AI provider. No evidence shows credentials being sent to an attacker-controlled destination or outside the configured provider endpoints.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.credential-to-network
- File role
- production
- Source
- app.js:456-1475
JavaScript analysis reported javascript.xray.unsafe-vm-context
Expected behavior · high confidence
This test file carefully isolates a piece of the app's quest code in a sandbox to run unit tests. It only uses code already in the app and doesn't allow any outside input, making it safe.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context. The match applies to this repository.
Contextual assessment: vm.runInNewContext is used in a test helper to extract a bounded portion of the application's quest engine code and execute it inside a sandboxed context with only safe stubs (console, showToast, utility functions). The source string is a fixed slice of file determined by start/end markers; no untrusted input is involved. This is a standard Node.js testing pattern and does not introduce runtime code injection risk.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.unsafe-vm-context
- File role
- production
- Source
- scratch/quest_engine_stress_test.js:55-66
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
This file contains automated tests for the app's companion system. The URLs and keys shown are test data, not real secrets or malicious links. They are used to verify that the app correctly connects to AI providers during development testing.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The scanner flagged hardcoded URLs and API key patterns in a test file. The evidence shows unit tests for a companion module that validate provider configuration, image request construction, and authentication headers. All URLs point to test endpoints or documented provider base URLs; the API key strings are test placeholders. No production credential exfiltration or malicious network destination is present. The file's role is production but its content is exclusively test code, so the flagged patterns do not affect shipped behavior.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- scratch/companion_audit.js:525
JavaScript analysis reported javascript.xray.obfuscated-code
Expected behavior · high confidence
The scanner thought the long text might be hidden code, but it's just a set of AI instructions stored as data — nothing dangerous.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: The obfuscated-code signal also fired on the same static data. The file contains only plain object literals and string content. No minification, encoding, or concealment is used. The scanner's low confidence further supports that this is a false positive.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.obfuscated-code
- File role
- production
- Source
- presets.js:1
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
This is a test that checks whether the app's internal function extractor works correctly. It uses JavaScript's Function constructor on strings it already knows are safe, so there's no risk to users.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: The test file uses new Function() to validate that extracted function source strings parse correctly. This is a deliberate test-harness technique to verify the extractor produces syntactically valid JavaScript. No user or attacker-controlled input reaches this call; the source strings are statically derived from the application's own source code. This is not a vulnerability.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/extractor_audit.js:180
JavaScript analysis reported javascript.xray.prototype-pollution
Expected behavior · high confidence
The scanner thought there might be a way to mess with object internals, but the code actually protects against that. There's no actual issue here.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.prototype-pollution. The match applies to this repository.
Contextual assessment: The static analysis flagged a prototype-pollution signal at line 921. The context around that line shows object literal initialization (state defaults) and no assignment to __proto__, prototype, or constructor. The codebase includes defensive cloning (safeJsonClone) that strips prototype-pollution keys, and uses isPlainObject checks. No prototype pollution vulnerability is demonstrated.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.prototype-pollution
- File role
- production
- Source
- app.js:921
JavaScript analysis reported javascript.xray.obfuscated-code
Expected behavior · high confidence
A security scanner thought the first line of the JavaScript code looked suspicious, but it's just a simple line that collects any errors that happen while the app runs. Nothing hidden or dangerous.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code. The match applies to this repository.
Contextual assessment: JS-X-Ray flagged line 1 of file as obfuscated code, but the actual source shows a straightforward runtime error tracking assignment: window.__hordeRuntimeErrors = window.__hordeRuntimeErrors || [];. This is a common pattern for accumulating runtime errors, not obfuscation. The scanner confidence is low, and no obfuscated or concealed logic is visible in the supplied code.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.obfuscated-code
- File role
- production
- Source
- app.js:1
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The file holds a character profile with a built-in image. It does not make any internet connections.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: The file contains only static data URIs (base64 encoded images) and no external network URLs. The scanner signal 'shady-link' likely matched the data URI strings, which are not actual network links. The file is a character data definition for Horde Studio's virtual human feature.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- jane-harlow-human.js:14
JavaScript analysis reported javascript.xray.shady-link
Expected behavior · high confidence
The security scanner flagged some code as suspicious, but it's actually just the character's built-in profile pictures stored as text. No external links or data theft is involved.
Technical evidence
Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link. The match applies to this repository.
Contextual assessment: JS-X-Ray flagged 'shady-link' on the data:image/jpeg;base64 URIs embedded in the virtual-human character definition. These are inline base64-encoded JPEG images for the character's profile and base photos, not external URLs. No network request or credential exposure occurs from these data URIs. The scanner signal is a false positive in this context.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
- Rule
- javascript.xray.shady-link
- File role
- production
- Source
- ashlyn-reynolds-human.js:14
OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval
Expected behavior · high confidence
A test that makes sure user-generated text in chat gets properly cleaned up to prevent attacks. Only runs during testing.
Technical evidence
Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.
Contextual assessment: Another vm.runInNewContext test: this one tests HTML escaping by executing the escapeHTML function in a sandbox. The input is a hardcoded test string. The context is isolated and no data persists. Standard unit test practice.
Impact: none · Exploitability: unlikely
Developer action: none
- Scanner
- opengrep 1.26.0
- Rule
- tavernkeeper.dynamic-execution.javascript-eval
- File role
- production
- Source
- scratch/engine_audit.js:115