TavernKeeper Scan Report

ddkhan24/hordestudio

Commit 4caa114 Reviewed

No material or immediate-danger concern was identified in this review.

This advisory report describes what the named tools and contextual reviewer found at one exact commit. Unknown or unobserved behavior may still exist.

0 immediate danger 0 material 149 low

What this review found

No material or immediate-danger item was identified.

Minor cautions

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

This line uses a regular expression to clean up AI-generated text. While the pattern could be slow on very specific inputs, that would only affect your own machine and is unlikely to be triggered by a real attacker.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: Line 5751 contains a regex pattern that strips HTML-like tags from AI-generated text. The pattern uses a non-greedy quantifier and alternation, which can cause catastrophic backtracking on crafted input, leading to a potential ReDoS. However, the input originates from the AI model, which the user controls or trusts, and the project is local-first. An attacker would need to control the model output to trigger this, which is not a typical threat vector in this context. The regex is used for legitimate content formatting and is not obfuscated.

Impact: low · Exploitability: unlikely

Developer action: Consider using a simpler string replacement or a safe regex pattern to avoid potential ReDoS. For example, split and filter instead of a single complex regex.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:5751

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern used to detect movement in a game can be tricked into running very slowly, which might freeze the app temporarily.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18048 in extractUserMovementTarget uses optional groups and alternation that can cause exponential backtracking on crafted input. The pattern tests if the target matches room/place/area/building/house/here with an optional prefix. A maliciously crafted user input could trigger catastrophic backtracking, leading to client-side denial of service.

Impact: low · Exploitability: plausible

Developer action: Review the regex for ReDoS resilience. Consider using a simpler pattern, bounding repetition, or implementing a regex timeout.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18048

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A code scanner flagged a line that uses a regular expression to read stat values from a text field. While the pattern could theoretically be slow on very weird input, in practice the input is always short and typed by the user, so the worst that could happen is a brief browser hiccup. This is a very low-risk finding.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: JS-X-Ray flagged the regex at line 14742 as potentially unsafe, which typically indicates a ReDoS risk. The regex /^(.+?):\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))$/ is used to parse user-provided stat-reward strings (e.g., 'strength: +5') after splitting the input field on commas. The pattern contains a lazy quantifier (.+?) followed by a simple numeric pattern, which does not exhibit the nested quantifiers or exponential backtracking characteristic of dangerous ReDoS. User input is short (a single text field), and the regex operates on each comma-separated part independently, limiting input length. Even if a crafted input caused excessive backtracking, the impact would be a temporary browser-tab freeze or slowdown, which is a recoverable local self-denial of service. No cross-user or remote attacker path exists, and the evidence does not demonstrate actual exploitation or harm beyond static analysis signaling.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:14742

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

The code uses a regular expression to read error messages from a text-to-speech service. This is a standard pattern, but the scanner flagged it as a potential risk. However, it's unlikely to be exploited because an attacker would need to control the service's error message to cause problems, and even then, the worst that could happen is a temporary freeze in the audio generation feature.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex pattern at line 31922 is used to parse error messages from TTS API responses. While JS-X-Ray flagged it as potentially unsafe (unsafe-regex), the pattern is static, applied only to short API error texts, and does not contain deeply nested quantifiers that would cause catastrophic backtracking on typical inputs. An attacker would need to control the API response message to trigger a ReDoS, which is not feasible in the intended use case (OpenRouter TTS service). Even if triggered, the impact would be limited to a client-side slowdown or unresponsive TTS feature, which is a recoverable local denial of service.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:31922

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern that checks if the player wants to go 'out' can be forced to take a very long time to run, potentially freezing the browser tab.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18045 in extractUserMovementTarget uses nested optional groups and a variable-length dot-star pattern that can cause catastrophic backtracking. It tests if the target starts with 'out' optionally followed by 'side' and then an optional group containing spaces and anything. Crafted input can cause exponential evaluation time.

Impact: low · Exploitability: plausible

Developer action: Simplify the regex or use non-backtracking alternatives. Avoid nested optional quantifiers with variable-length content.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18045

zizmor reported unpinned-uses

Minor caution · high confidence

The release pipeline uses a general version number for a GitHub Action instead of locking it to a specific, unchangeable version. In theory, someone could change what that version number points to and sneak malicious code into the release process. There's no sign this has happened, but it's better to be safe by using the action's exact unique ID.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The workflow uses actions/checkout@v4 with a mutable version tag instead of a pinned commit SHA. If the action's v4 tag were maliciously overwritten, code execution inside the CI runner could be compromised, potentially affecting release integrity. However, the workflow is triggered only on tag pushes, and there is no evidence that such substitution has occurred. The risk is mitigated by GitHub's controls on popular actions, but pinning to a sha is a security best practice.

Impact: low · Exploitability: plausible

Developer action: Replace 'actions/checkout@v4' with a pinned commit SHA, for example 'actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683' (the commit for v4.2.2). Use a Dependabot or Renovate configuration to automatically update the pinned SHA when a new version is released.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/release.yml:16

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

This line tests whether the AI's message contains a 'Plot Momentum' section. The regex used might be slow on unusual text, but it only affects your own browser and is not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: Line 5766 contains a regex that checks for a specific summary tag pattern in AI-generated text. The pattern uses a greedy quantifier and alternation, which could cause catastrophic backtracking on crafted input. As with other signals in this file, the input is from the AI model and is not attacker-controlled in a practical sense. The impact is limited to a local browser ReDoS, which is low.

Impact: low · Exploitability: unlikely

Developer action: Replace the complex regex with a simpler string search (e.g., includes or indexOf) to avoid ReDoS potential.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:5766

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern used to check if the player is moving through a door could be made to run very slowly, causing a temporary freeze.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18047 in extractUserMovementTarget uses alternation and optional groups that may cause ReDoS. It matches phrases like 'through the door/doorway/entrance/gate' with optional 'the' and trailing whitespace. Crafted input with overlapping alternations can lead to exponential backtracking.

Impact: low · Exploitability: plausible

Developer action: Refactor to reduce backtracking. Consider using a static prefix match before applying the full regex.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18047

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern that understands simple movement commands like 'go east' can be tricked into freezing by typing a specially crafted phrase.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18079 is the commandMovement pattern with multiple alternations and optional groups. It matches bare commands like 'go', 'walk', etc., followed by optional destination. The presence of optional groups and nested alternations can cause catastrophic backtracking on crafted input, leading to a denial of service.

Impact: low · Exploitability: plausible

Developer action: Simplify alternation by using character classes or splitting into separate checks. Consider using a regex library with built-in protection.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18079

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

This line finds special planning blocks in AI messages to display them properly. The complex pattern could be slow on weird input, but only your own machine would be affected.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: Line 5734 contains a large regex that matches multiple HTML-like markup patterns in AI-generated text. It uses non-greedy quantifiers and alternation with backreferences, which can cause catastrophic backtracking on specially crafted input. The input is from the AI model, not an external attacker, so the practical exploitability is very low. The regex is visible and serves a legitimate formatting purpose.

Impact: low · Exploitability: unlikely

Developer action: Simplify the regex by splitting into multiple passes or using a parser. Consider limiting input length or using a timeout for regex execution.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:5734

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

This line pulls out a 'Director's Notes' section from AI replies. The regex might be slow on unusual text, but only your own browser would slow down.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: Line 5763 contains a regex that extracts details tags from AI-generated text. The pattern uses a non-greedy quantifier and alternation, which can cause ReDoS on crafted input. The input source is the AI model, not an external attacker, making exploitation impractical. The regex is used for legitimate content extraction and is not obfuscated.

Impact: low · Exploitability: unlikely

Developer action: Consider using a simpler approach like a stack-based parser or splitting on known patterns instead of a single complex regex.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:5763

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A complex pattern used to understand sentences like 'I walk to the door' could be made to run extremely slowly, freezing the app.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18057 (actorMovement) is a long pattern with many alternations and optional groups, including nested quantifiers. It parses player movement statements. The complexity can lead to exponential backtracking on specially crafted input, causing a client-side denial of service.

Impact: low · Exploitability: plausible

Developer action: Redesign the parser to avoid deeply nested alternations. Consider tokenizing input before applying regex or using a simpler grammar.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18057

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A complicated part of the code that checks if an image is valid could be tricked with a specially crafted image name, making your browser slow or freeze for a moment. It only affects your own device and doesn't steal any information.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex on line 1089 validates that media asset data is a data:image URL. The pattern includes a repeating optional group (?:;[^,]*)? which can cause excessive backtracking when a very long string contains many semicolons before the comma. Since asset.data length is limited only by a large byte limit (512 MB total), a crafted input could cause a client-side ReDoS, freezing the browser tab. This is a local denial of service with no data exfiltration or persistence.

Impact: low · Exploitability: plausible

Developer action: Replace the regex with a simpler validation, for example: asset.data.startsWith('data:image/') && asset.data.includes(','). If a regex is preferred, use an atomic group or a possessive quantifier to prevent backtracking, such as /^data:image\/[a-z0-9.+-]+(?:;[^,]*)?+[,]/i.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:1089

zizmor reported unpinned-uses

Minor caution · medium confidence

This workflow uses 'actions/checkout@v4' which is a stable version tag, but security best practice is to pin to a specific commit hash. The risk is very low because the tag is well-maintained and the workflow only runs manually.

Technical evidence

Scanner reason: zizmor matched workflow-security rule unpinned-uses in this repository.

Contextual assessment: The action reference actions/checkout@v4 uses a mutable major-version tag rather than a pinned commit hash. While GitHub's v4 tag is maintained and widely trusted, a compromised or retargeted tag could in theory inject malicious behavior. The workflow is manually triggered (workflow_dispatch) and only performs checkout, build, and release upload, limiting exposure. There is no evidence that the v4 tag has been tampered with.

Impact: low · Exploitability: unlikely

Developer action: Consider replacing 'actions/checkout@v4' with a full commit hash from the official repository to ensure supply-chain integrity.

Scanner
zizmor 1.28.0
Rule
unpinned-uses
File role
tooling
Source
.github/workflows/package-current-release.yml:14

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern that checks if the player mentioned a person instead of a place could be forced to run slowly and freeze the browser.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18052 matches pronouns (him, her, them, etc.) with optional direction prefixes. The use of optional groups and alternation can cause catastrophic backtracking on crafted input containing long strings that nearly match the pattern.

Impact: low · Exploitability: plausible

Developer action: Simplify the regex by avoiding nested optional groups. Use anchored alternatives or a simple alternation without optional quantifiers.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18052

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A pattern that understands sentences like 'I yawn and then walk to the door' could be tricked into running very slowly, freezing the app.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 18070 (continuedActorMovement) is a complex pattern with alternations, optional groups, and a bounded quantifier that can still cause exponential backtracking due to overlapping alternatives. It matches compound player movement sentences. Crafted input can cause a denial of service.

Impact: low · Exploitability: plausible

Developer action: Consider breaking the parsing into smaller steps. Use atomic groups or possessive quantifiers if supported. Alternatively, use a lightweight parser instead of a single complex regex.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:18070
Expected scanner matches (131)

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code checks that provider URLs use secure connections or local addresses, which is normal for this kind of app.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The URL validation logic in normalizeRemoteApiBase is part of the expected configuration of provider API endpoints. The regex patterns enforce HTTPS or localhost-only connections, which is appropriate for an application that allows users to set custom base URLs for AI providers.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:493

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regular expression checks that uploaded image data is in the correct format. It works predictably and quickly, even on large images. There is no risk of the program freezing or crashing from a specially crafted input.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex /^data:image\/[a-z0-9.+-]+(?:;[^,]*)?,/i is a simple linear-time validator for data URI format. It consists of a fixed prefix, a character class with no alternations or nested quantifiers, an optional group with a negated character class, and a literal suffix. No overlapping quantifiers or ambiguous branches exist that would cause exponential backtracking. The scanner likely flagged this conservatively due to the presence of + and * quantifiers, but the pattern is provably linear and not vulnerable to ReDoS.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:2505

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is just a test checking that old generated photos are stripped from exports. The 'data:' string is a fake image used for testing, not a real link or security concern.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 368 contains a base64 data URI ('data:image/jpeg;base64,generated') used as a test fixture in an assertion. The scanner flagged 'shady-link' based on the data: scheme, but this is a static test value with no runtime network destination or user-controlled input. The test verifies archive payload sanitization; the data URI is never sent to an external endpoint.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:368

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The file contains an image stored directly in the code, which is a normal way to include pictures in a game or story. It's not a suspicious link or a security threat.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI embedded in the world definition file. The data URI is a static inline image asset (character portrait or location background) with clearly identifiable metadata including a hash, creation timestamp, and a prompt describing the original AI-generated image. No external network destination, user-controlled variable, or exfiltration path is present. The data is loaded as an image source within the application's own interface.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:145

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 in this repository.

Contextual assessment: The vm.runInNewContext call at line 97 is part of a test that executes a hardcoded snippet from the application source to verify behavior. It uses a predefined string extracted via app.slice, not user-supplied input. This is a standard and safe testing pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:97

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line just checks if the server address you typed is on your own computer (like localhost). If it isn't, the app warns you that your browser's security may block the connection. It's a helpful, normal feature, not a hidden danger.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The candidate at line 9119 checks whether a user-provided or default localhost URL is a loopback address ('localhost', '127.0.0.1', '::1', '[::1]'). This is part of a visible local connection tester feature that warns users if they attempt to connect to a non-loopback host. The code does not exfiltrate data, execute hidden network requests, or behave outside the app's stated purpose of testing connectivity to local AI model servers. No malicious or concealed behavior 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:9119

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line sets a default address for the app's built-in helper program. Since it only points to your own computer, there is no security concern.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The constant HORDE_MCP_BRIDGE_DEFAULT is a hardcoded loopback URL used as the default for the local MCP bridge. This is expected for a local-first application that communicates with a companion bridge process on the same machine.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:249

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is just test data for a companion's photo setting. It's a fake image string, not a real link or security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 276 contains 'data:image/jpeg;base64,identity' used as a test parameter for a companion object. This is a static test fixture image. The scanner's 'shady-link' signal is triggered by the data URI pattern, but no actual network request is made; it is only used in assertion comparisons.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:276

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake image used in a test to make sure the app sends only the right photo to the AI provider. It doesn't affect real users.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1123 contains a hardcoded data URI 'data:image/png;base64,DISPLAY_ONLY' used as a test fixture to verify that the code does not include the profile photo in image API requests. This is a static test value, not user-controlled or sent to any external service; it exists only within the Node.js test suite 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1123

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test file uses Node's virtual machine to run small pieces of the main application in isolation. It only uses code from the app itself and does not let outsiders control what gets executed. This is a normal way to test parts of a program without causing side effects.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: This is a vm.runInNewContext call in a regression test file that extracts a function from the application source by slicing between known string markers. The context object passed is extremely restricted (containing only structuredClone, JSON, safeJsonClone, isPlainObject, bumpMemoryEpoch). The code being executed comes from the same application, not from user or network input, and the test validates behavior of the application's own functions. No mechanism exists for an attacker to control the parsed string or the context; any malicious injection would require prior compromise of the application source. The scanner signal flags vm use generically, but in this context it is a safe, common testing pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/gameplay_overhaul_audit.js:130

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line cleans up a temporary audio URL after it's no longer needed. It's just normal housekeeping and not a security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line at 32082 uses URL.revokeObjectURL to clean up a blob URL from an audio preview player element. This is a standard browser API call for memory management and does not create a network request or expose data externally. The static analysis 'shady-link' signal is a false positive in this context; the code is part of the application's expected TTS audio playback flow, where blob URLs are created for generated audio and then revoked after use.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:32082

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 45 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:45

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 65 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:65

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A security scanner noticed a suspicious-looking link in the test file, but it's just a fake image placeholder used to test how the app handles photo references. No real data or network calls are involved.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a literal string at line 1355 as a 'shady-link' pattern. The actual code is a test that creates a mock companion object with a placeholder data URI ('data:image/png;base64,REFERENCE') as a fake photo. This is test data, not a real network destination or exfiltration attempt. The test confirms that reference images are omitted when includeReference is false. There is no data flow to an external server, no credential exposure, and no user harm. The rule fired on a completely benign test string.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1355

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The code was flagged for containing a web address, but it is just the default address for connecting to a local AI model on your own computer. This is a normal and expected part of the app's settings.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line is a hardcoded default URL for the local text generation provider (Ollama). This is part of the application's documented provider configuration and is not used for exfiltration or malicious redirection. The scanner's 'shady-link' pattern does not distinguish between benign configuration defaults and actual suspicious links.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:32724

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a default setting to connect to a local image-generation program (ComfyUI) running on your own computer. There is no security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1290 contains a loopback address (127.0.0.1:8188) used as the default ComfyUI URL. The code passes it through normalizeLoopbackUrl, which is consistent with the project's local-first design. The scanner signal 'shady-link' is a false positive because the destination is localhost, not an external untrusted host.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:1290

JavaScript analysis reported javascript.xray.sql-injection

Expected behavior · high confidence

A security scanner flagged a line of code as a possible SQL injection, but that line just logs a warning message. The code never talks to a database, so there is no actual security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.sql-injection in this repository.

Contextual assessment: The candidate flags line 20722 for SQL injection, but the line contains a console.warn statement that interpolates the 'detected' variable into a log message. The 'detected' value is a string derived from regex matching on narrative text (outfit descriptions) and is not used in any SQL query, database operation, or server-side context. The project is a browser-based frontend application with IndexedDB for storage; no SQL database is involved. This is a static-analysis 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
Rule
javascript.xray.sql-injection
File role
production
Source
app.js:20722

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · medium confidence

The code checks if an image is already saved as a data URL before trying to download it. That's normal for saving images in this app.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner identified a string comparison `startsWith('data:image/')` at line 31414, which is part of a legitimate fallback in `makeWorldVisualPortable`. The function fetches a provider-generated image URL (line 31409) and embeds it as a data URL. The flagged line simply checks if the fallback source already starts with the data URL prefix before throwing an error. No malicious link, concealed network target, or exfiltration is present. The fetch on line 31409 is the actual network operation and is an expected part of making a world visual portable.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:31414

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The test uses a safe sandbox to run small parts of the main application in isolation to check if they work correctly. Only the program's own code is run, and no outside data can influence it. This is a normal and safe testing practice.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: vm.runInNewContext at line 47 is used to capture and execute a slice of the project's own file (captureWorldTurnState and restoreWorldTurnState) in a sandboxed context. The context provides only structuredClone, JSON, safeJsonClone, isPlainObject, and an empty bumpMemoryEpoch. No user-supplied or untrusted data enters the dynamically executed code. This is a standard unit-test pattern for isolating individual functions from a large codebase. The test file is not shipped to users and runs only during development.

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

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 85 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:85

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This adds a header that OpenRouter requires when you use their service, which is standard for that provider.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The attributionHeaders function returns static OpenRouter-required headers (HTTP-Referer and X-Title) only when the OpenRouter provider is active. The source code comments confirm these are never sent to local servers, matching the expected API attribution pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:709

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is the same legitimate OpenRouter attribution header code.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Same attributionHeaders function as candidate 2b053600, with the same static URL strings. The duplication is from the bounded evidence window; it is the same legitimate 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:712

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake image used in a test to check that the app correctly reads image data from the AI's reply.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1227 contains a hardcoded data URI 'data:image/jpeg;base64,BBBB' used as a test fixture to verify GPTProto image response extraction from a JSON-like response. This is a static test value with no dynamic input or network destination in the test 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1227

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security scanner thought it found a suspicious link in a JavaScript file, but the actual content is just a long encoded picture used as background art in the Policy Panic game. There's no real link or security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded data string as a potential 'shady-link', but the evidence shows this string is generated AI image data embedded in a world-asset JavaScript file. The base64 content does not contain any actual network links or malicious references; it is a legitimate asset for the Policy Panic game within Horde Studio. The scanner signal is a false positive arising from static analysis pattern matching on encoded 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
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

The test uses a safe sandbox to run small parts of the main application in isolation to check if they work correctly. Only the program's own code is run, and no outside data can influence it. This is a normal and safe testing practice.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: vm.runInNewContext at line 47 is used to capture and execute a slice of the project's own file (captureWorldTurnState and restoreWorldTurnState) in a sandboxed context. The context provides only structuredClone, JSON, safeJsonClone, isPlainObject, and an empty bumpMemoryEpoch. No user-supplied or untrusted data enters the dynamically executed code. This is a standard unit-test pattern for isolating individual functions from a large codebase. The test file is not shipped to users and runs only during development.

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 is a test artifact: the line contains an example image string used to check how the app stores companion photos. It does not contact any website or network service.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line is inside a test case in a Node assertion-based audit script. The matching literal is a data-URI image string passed as a test fixture to a normalization function, verifying that a display profile photo stays distinct from a generation reference. No URL is dereferenced, no request is made, and no network data flow exists. The shady-link scanner signal is a static-match false positive on the data-URI string shape.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:443

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

Detailed wording was omitted by the public report safety filter.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: Line 125 contains vm.runInNewContext in a test that validates CSS-facing functions. The executed code is a static substring of the application source compiled at test time, not user or external input. The sandbox prevents any access to host globals beyond the explicitly provided context. No attacker-controlled data reaches this execution, and any failure only causes a test assertion error. This is standard test infrastructure, not a production attack surface.

Impact: low · 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.shady-link

Expected behavior · high confidence

This line just cleans up a temporary audio link after a voice message finishes playing — like closing a file you're done with. There's no hidden behavior or danger.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 32164 calls URL.revokeObjectURL on a blob URL when the audio result has no persistent data URL. This is standard browser memory management to release the blob URL after playback ends. The code is part of playCompanionVoiceMessage, a function that plays voice messages in a local-first AI roleplay application. The blob URL is created earlier in the same function from a generated audio response. There is no evidence of exfiltration, phishing, or malicious redirection. The scanner signal 'shady-link' likely triggered on the revokeObjectURL call, but this is a benign cleanup operation fully in line with the project's stated purpose of playing TTS audio.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:32164

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake identity photo used in a test to confirm the app uses the right image when generating photos.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1155 contains a hardcoded data URI 'data:image/png;base64,IDENTITY' used as a test fixture to verify that GPTProto photo requests use the base photo instead of the profile photo. This static test value is only present in the test file and has no external exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1155

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just another image stored directly in the code for the game's artwork. Not a security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The surrounding context shows it is an inline location background image ('Break room') with associated metadata (hash, creation timestamp, generation model, and prompt). It is a static asset used for rendering the application's user interface, not a dynamic or attacker-controlled resource.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:115

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is test data for a photo generation test. It's just a placeholder image string, not a real link.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 299 contains 'data:image/jpeg;base64,identity' used as a test value in building an MCP generation request. This is a static test fixture embedded in assertion code. No runtime network access or suspicious behavior 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:299

JavaScript analysis reported javascript.xray.suspicious-literal

Expected behavior · high confidence

The scanner thought a line looked suspicious, but it's actually just a long text prompt for an AI character preset — harmless and normal for this kind of project.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.suspicious-literal in this repository.

Contextual assessment: JS-X-Ray flagged the file for a 'suspicious-literal' pattern, but the source code shows a static data structure containing long plaintext prompt strings used for an AI roleplay preset. No obfuscation, encoding, concealed execution, or external destination is present. The scanner heuristic likely triggered on the length or structure of the string literals, which is expected for this type of configuration 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
Rule
javascript.xray.suspicious-literal
File role
production
Source
presets.js:1

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern reads story text to figure out where you're going. It only looks at short phrases so it cannot be abused to freeze your browser.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20466 contains nested optional groups and alternations but uses explicit bounded quantifiers ({0,20} and {1,80}) that prevent catastrophic backtracking in practice. The scanner signal is conservative and does not identify a reachable vulnerability. The pattern is used for narrative location detection, matching the project's stated purpose.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20466

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This line checks that an address entered for the local helper program only points to your own computer. The pattern used is safe and does not pose a risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex on line 257 is a static pattern that validates loopback URLs. It is not supplied by user input and does not contain nested quantifiers that would cause catastrophic backtracking. It is a safe and appropriate validation guard.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:257

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test runs several of the app's own functions together in a sandbox to confirm they work properly. It does not use any data from outside the test.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: The vm.runInNewContext call spanning lines 249-256 is inside a test that assembles multiple function sources from the application and passes them into a new context. All inputs are hardcoded strings from the app variable, not from any untrusted source.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:249-256

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · medium confidence

This part of the code cleans up AI messages by removing roleplay actions like *smiles* or *laughs*. The complicated-looking rule it uses is actually safe and won't let an attacker slow down or crash your browser.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 29766 is used solely in the `sanitizeCompanionTextReply` function to test whether a short substring (captured from markdown-like emphasis patterns, bounded to 140 characters) matches a defined set of action cues. The pattern is anchored with `^` and contains a flat alternation; the only potentially backtracking component is the final `[a-z]+ing\b`, which backtracks linearly through the input characters (O(n) worst case) and never exponentially. The `.test()` call returns as soon as any alternative matches, further limiting work. Even under crafted input, the maximum impact would be a negligible, transient local slowdown on the client device, which does not constitute material security harm in this threat model.

Impact: none · Exploitability: unlikely

Developer action: None required. The regex is not vulnerable to catastrophic backtracking as used. If desired, the final alternative could be simplified to `/^[a-z]+ing\b/i` with an explicit word-character check, but the current form is acceptable.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:29766

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just the app reading the ComfyUI server address you provided in settings so it can connect to it. It's not sending your data anywhere suspicious.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 8870 reads the ComfyUI base URL from a settings input field and normalizes it via `normalizeLoopbackUrl()`, which enforces loopback/localhost addresses. The URL is a user-configured endpoint for their own local ComfyUI instance, not an external or unvalidated destination. The scanner's 'shady-link' signal is a generic heuristic triggered by string interpolation of URL patterns; no actual shady link or data 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:8870

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This pattern finds AI-generated tool commands in chat text. It's a simple tag matcher and doesn't have any security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 29249 matches an opening XML-like tool tag with optional 'uncensored' prefix and flexible separators. It is used to parse AI model output for embedded function calls. The pattern contains no nested quantifiers or overlapping alternations that would cause catastrophic backtracking. The scanner's 'unsafe-regex' signal is a conservative false positive in this context; the regex is appropriate for the intended parsing task and does not introduce a realistic denial-of-service vector from model-generated input.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:29254

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A character portrait stored as data in the code. It is part of the game content, not a security threat.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The context shows it is an NPC portrait image ('Nisha Patel portrait') with metadata indicating it was generated using OpenAI's image generator. This is a legitimate inline asset for the story application.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:125

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code is reading a streaming AI response line by line, which is a normal part of how chat apps get responses from AI models. The 'shady link' warning was triggered by the word 'data:' which is not a link but a standard way to receive data from an AI service.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner rule 'javascript.xray.shady-link' flagged line 6804, but the code at that line is a standard SSE stream parser (`if (line.startsWith('data: ')) {`) used to consume a streaming chat-completion response from an AI API endpoint. This is normal behavior for an AI chat application; no shady link or network destination is involved. The signal likely matched the literal string 'data: ' which is an SSE protocol prefix, not a link. The project's stated purpose includes connecting to AI providers and handling streaming responses, making this parsing expected.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:6804

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This image is part of the game's backgrounds, stored in the code. It's not a harmful link.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The surrounding context shows it is a location background image ('Reception lobby') with generated image metadata. This is a static asset used to render the game environment within the application.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:135

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This alert came from an automated code scanner that thought a line of code might contain a suspicious link. But the line just checks if a piece of streaming data starts with the word 'data:' — a normal step when the app receives AI-generated text in chunks. No real link or shady destination is present. It's a harmless false alarm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line (3457) contains a standard JavaScript string-matching operation `line.startsWith('data: ')` used to parse Server-Sent Events (SSE) from an AI generation API. The JS-X-Ray 'shady-link' rule likely triggered on the string literal 'data: ' due to its resemblance to a protocol/scheme prefix, but this is a legitimate and well-known SSE parsing pattern. No actual URL, link, or network destination is embedded at this line; the fetch to OpenRouter is performed earlier and is expected behavior for an AI roleplay application. The static analyzer signal 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:3457

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test that checks if character and world data validation works. It runs the app's own validation code in a sandbox, not anything from outside, so it is safe.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: Detailed technical wording was omitted by the public report safety filter.

Impact: low · 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

This default setting points to a local image server on your own machine. No external network is involved.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1285 contains a loopback address (127.0.0.1:7860/v1) as the default local image server URL. It is processed by normalizeLoopbackUrl, confirming intended local-only use. The scanner's 'shady-link' classification does not apply to localhost destinations 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:1285

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a default setting for connecting to a local AI model running on your own computer. The code makes sure you can only connect to your own machine, which is safe and expected.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The default baseUrl on line 17 is a loopback address (127.0.0.1) for local inference, which is the expected configuration for a local-first AI studio. The normalizeLoopbackBase function strictly restricts all user-supplied URLs to known loopback hosts, preventing external network destinations. No malicious or unexpected data flow 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
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:17

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · medium confidence

The code checks whether an image is already in data URL format to decide whether to download it. That's a normal part of saving images from providers.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner identified a string comparison `!data.startsWith('data:image/')` at line 31406, which gates the decision to fetch an external image URL. This is part of the expected `makeWorldVisualPortable` function that downloads a provider image and converts it to a data URL for offline embedding. The flagged conditional does not perform any network operation, send data, or introduce a remote target. It is a normal data-flow check for image embedding.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:31406

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is from a test that checks how the app handles photo requests. The 'data:' string is just a test image, not a real link.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 281 contains 'data:image/jpeg;base64,identity' used in a test assertion comparing an image request's output. This is a static test fixture. No actual network traffic or external link 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:281

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

The code fetches data from a server and reads the reply as plain JSON text. It does not run any computer code from the reply, so downloading the content cannot turn into an attack. This is a normal and safe pattern.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution in this repository.

Contextual assessment: The file contains fetch() for HTTP POST requests (line 244) and then parses the response via JSON.parse or the custom parseJSON function, which only returns JSON objects. There is no dynamic code execution (eval, Function, innerHTML, document.write) that would allow an attacker to execute arbitrary code from the network response. The scanner correlation is a false positive; the parseJSON function only extracts structured JSON data and throws on malformed input.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.download-to-execution
File role
production
Source
labs-core.js:1-244

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This is a harmless regex that checks whether a string starts with a valid data URI format. It is simple and cannot be tricked into causing the browser to freeze or consume excessive CPU. The security scanner flagged it in error.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex /^data:image\/[a-z0-9.+-]+(?:;[^,]*)?,/i at line 30910 is a simple anchored pattern used to validate data URIs. It contains no nested quantifiers or overlapping alternatives that could cause catastrophic backtracking. The character class [a-z0-9.+-] is linear and the optional group (?:;[^,]*)? is followed by a required comma, giving the regex engine only one valid path per input. The scanner's 'unsafe-regex' signal is a false positive; this regex does not exhibit ReDoS vulnerability.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:30910

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line is part of the same test, providing a second example image string to verify photo handling. It performs no network activity.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line is the sibling fixture value in the same test case. It is a data-URI image string used as input to a pure normalization function and then compared against the profile photo value. There is no network destination, no fetch or XHR call, no exfiltration path, and no attacker-controlled data flow. The scanner rule matched the static literal shape but the surrounding code confirms this is ordinary test data processing.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:444

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code connects to a local helper program that runs on your computer, which is a normal part of how the app works.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The mcpBridgeRequest function makes HTTP requests to the local MCP bridge, which is part of the project's architecture for coordinating with a local Python bridge. The path is concatenated from a user-configurable base URL, but this is expected for a local-first application that communicates with a local service.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:444

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The code is doing exactly what you'd expect: reading the AI's response as it comes in, line by line. The flagged line just checks if a line starts with 'data: ', which is the standard way AI streaming APIs send their responses. This is normal and safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 3238 is a standard Server-Sent Events (SSE) parsing pattern: checking if a line starts with 'data: '. This is the expected and visible mechanism to stream token-by-token responses from an AI chat-completion API (OpenRouter). No suspicious destination, concealed execution, or credential exfiltration is present. The scanner's 'shady-link' signal is a false positive; the line contains no URL or external reference, just a string literal used for stream parsing.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:3238

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just the app reading the local image server address you provided in settings so it can generate images. It stays on your computer.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 8865 reads the local image server URL from a settings input field and normalizes it via `normalizeLoopbackUrl()`, which enforces loopback/localhost addresses. The URL is a user-configured endpoint for their own local image generation service. The scanner's 'shady-link' signal is a generic heuristic on URL patterns; no actual shady link or data 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:8865

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code opens a browser popup so you can sign in to an AI service. The URL for signing in comes from your own computer's local helper program, not from a stranger. This is how online logins normally work, and it is safe here.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 8753 opens a child window to about:blank as part of a standard OAuth authorization flow. The window's location is subsequently set to an authorization URL (response.authUrl) returned by the local MCP bridge after a POST to /providers/{providerId}/connect. The bridge is a local Python service running on 127.0.0.1, and the provider configuration is hardcoded in HORDE_MCP_PROVIDERS. The response is generated by the trusted local bridge, so the URL is not attacker-controlled. If the initial window.open fails, a fallback uses window.open with a noopener attribute, which is a safe practice. The scanner detected window.open with a dynamic URL, but in this OAuth context the behavior is proportionate and expected.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:8753

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This pattern finds the closing tag of AI tool commands. It's safe and necessary for the app's functionality.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 29254 matches a closing XML-like tool tag with optional 'uncensored' prefix. It is used in conjunction with the start pattern to delimit tool call bodies. Like its counterpart, it contains no nested quantifiers and is not vulnerable to ReDoS. The signal from the scanner is a conservative false positive.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:29304

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern recognizes when you type things like 'my outfit is a red dress'. It works on short phrases and is safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20625 (matching 'my outfit is ...') uses a bounded quantifier {2,100} with no overlapping alternations, making catastrophic backtracking impossible. The scanner signal does not demonstrate any actual vulnerability.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20625

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a list of addresses where the app looks for local AI models on your own computer, like checking for Ollama or LM Studio. It's completely normal and not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The string at line 406 is a hardcoded localhost URL used in the discover() function to probe for local AI model servers. This matches the project's documented support for local endpoints such as Ollama at port 11434. No external or malicious destination is involved. The scanner signal is a false positive for this legitimate local network access pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:406

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test verifies that travel between locations works correctly. It uses a sandbox to run the app's own travel code, not any outside code, so it is not a security concern.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: Line 143 uses vm.runInNewContext to test movement logic. The executed string is built from the functionSource helper, which extracts code from the static application source. There is no attacker-controlled input at any point. The sandbox context is empty except for the tested functions. The only consequence of a misbehavior is a failed test assertion, which has no user-facing impact.

Impact: low · 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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app provides a default address for a local image-generation tool. It's only used on your own computer and is not a security threat.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line sets a default URL for a local image server (127.0.0.1:7860). This is a localhost-only endpoint used for configuring a user-controlled local service, not an external or shady destination. The scanner signal 'shady-link' is a false positive for this legitimate configuration default.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:9317

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This code looks for common network errors and shows a helpful message instead of a technical error.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex /Failed to fetch|NetworkError|Load failed/i is used solely to detect common fetch errors and display a user-friendly message. It does not process user input or have performance implications, making it safe.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:462

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test runs a specific part of the app in isolation to check that it safely handles dangerous HTML. It uses predefined code from the app itself.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: The vm.runInNewContext at line 135 executes a hardcoded slice of the application source for testing HTML escaping. The code passed is derived from app.indexOf and app.slice, not from any external or dynamic input.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:135

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The test uses a safe sandbox to run small parts of the main application in isolation to check if they work correctly. Only the program's own code is run, and no outside data can influence it. This is a normal and safe testing practice.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: vm.runInNewContext at line 115 is used to capture and execute a slice of the project's own file (parseLoreKeywords and loreKeywordMatches) in a sandboxed context. The context provides only Set, RegExp, and String. No user-supplied or untrusted data enters the dynamically executed code. This is a standard unit-test pattern for isolating individual functions from a large codebase. The test file is not shipped to users and runs only during development.

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.shady-link

Expected behavior · high confidence

Another background image for the game. It's stored as data in the code, not a suspicious link.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The context shows it is a location background image ('Main office bullpen') with metadata indicating it was AI-generated. This is a legitimate inline asset for the application's world rendering.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:95

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

A scanner thought the file contained hidden code, but it's just a data file with pictures stored as text.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code in this repository.

Contextual assessment: The JS-X-Ray obfuscated-code signal at line 1 likely triggers on the large base64 embedded banner image. The file is a generated world data bundle containing standard base64-encoded JPEG images; it is not obfuscated 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
Rule
javascript.xray.obfuscated-code
File role
production
Source
policy-panic-world.js:1

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A test file includes a local address for testing purposes. It's not a real security issue.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 174 contains a hardcoded localhost URL used in a test context to simulate an embedded runtime environment. This is part of the project's cognitive audit test file and does not represent an actual network call to an external destination. The URL matches the project's expected local bridge address.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/labs_cognition_audit.js:211

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

This file is a tool that packages images and story details into a single file for a roleplaying world. It's like a recipe that combines pictures and text. The code is easy to read and does exactly what it says—it doesn't hide anything or send data anywhere.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code in this repository.

Contextual assessment: The file is a build script for assembling a Horde Studio world definition. It reads PNG images from a local asset directory, converts them to JPEG, base64-encodes them, and constructs a large JSON world object with locations, NPCs, game rules, and narrative text. The code is fully readable, uses standard Node.js APIs (fs, path, sharp), and performs no network communication, no dynamic execution, and no credential handling. The 'obfuscated-code' signal is a false positive triggered by the presence of large embedded string literals (narrative prompts, dialogue) in an otherwise transparent script.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-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 test file uses JavaScript's built-in sandbox feature to run a portion of the game's quest engine in isolation. This is a normal and sensible testing practice—no user data or secrets are involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: The file file is a test script that uses vm.runInNewContext to isolate a static slice of the main file quest engine code for unit testing. The evaluated code is a hardcoded substring of the application, not user-supplied or attacker-controlled input. The context object is populated with mock functions and data structures, and no external data flows into the evaluated code. This is a standard and appropriate testing pattern using Node.js vm module for sandboxing; there is no dynamic execution of untrusted input, no exfiltration, and no persistence outside the test process.

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-vm-context

Expected behavior · high confidence

This test checks that a time-calculation function in the app never produces negative values. It runs the function in a sandbox with fixed test data.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:240

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This flagged line is a test that checks if the app's code has been written correctly. The pattern is searching through the app's own code, not through any user input. Even though the pattern could be slow on weird inputs, it only ever looks at the app's own files, so it cannot be triggered by an attacker.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The flagged regex at line 172 is a static pattern used in a test assertion to verify that a specific source code transformation exists in the project's own file module. The input to the regex (the `app` variable) is the project's own production code, not attacker-controlled data. While the regex contains a nested quantifier pattern that could theoretically cause backtracking on pathological input, no such input exists in this context. The test runs in a developer environment, not against user-supplied data. There is no demonstrated security exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
scratch/authored_world_audit.js:172

JavaScript analysis reported javascript.credential-to-network

Expected behavior · high confidence

The app stores your API keys and sends them securely to the AI provider you choose, which is exactly how this kind of app is supposed to work.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.credential-to-network in this repository.

Contextual assessment: The application stores API keys for multiple providers in a state object and sends them via Authorization headers to the appropriate provider endpoints. This is the expected behavior of an AI client that needs authentication. The code shows a clear function providerAuthHeaders that selects the correct key based on the active provider. There is no evidence of sending credentials to an unexpected destination.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.credential-to-network
File role
production
Source
app.js:417-1379

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake profile picture used in a test to make sure the app doesn't accidentally send it when generating a new photo.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1154 contains a hardcoded data URI 'data:image/png;base64,PROFILE' used as a test fixture to verify that the GPTProto photo request does not include the profile photo. This static test value is only present in the test file and has no external exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1154

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A security scanner flagged a line in the image-processing code, but the line just checks if the browser could encode the image. There is no hidden link or network call here.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner signal "shady-link" at line 2417 is a false positive. The flagged line is part of the optimizeImage helper and contains the literal string 'data:,' used to check whether canvas.toDataURL returned an empty placeholder. No external URL, network request, or suspicious destination is present. The code performs client-side image resizing and compression only.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:2417

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This is just a normal check to see if a user typed a number. The regular expression used is simple and cannot be tricked into crashing or slowing down the app. It's perfectly safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex `/^-?\d+(?:\.\d+)?$/` at line 34061 is used in `parseCompanionProviderOption` to validate whether a user-provided string is a numeric value before converting it via `Number()`. The pattern is simple, anchored, and contains no overlapping quantifiers or alternations that could cause catastrophic backtracking. It only matches an optional minus sign, one or more digits, and an optional decimal portion. This regex is not susceptible to ReDoS and performs safely on any input. The JS-X-Ray 'unsafe-regex' signal is a false positive for this pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:34061

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

The code has both network access and code execution capabilities, but they are not linked together. The code execution only happens in tests with predefined code, not with anything fetched from the internet.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution in this repository.

Contextual assessment: The file contains both a fetch-like primitive (via ndarray of modules) and vm.runInNewContext calls, but the two patterns are not connected in a data flow. The vm calls are all in test functions using hardcoded strings. The download-to-execution correlation is incidental; no evidence shows network data being passed to an execution sink.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-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 line is part of a test that checks whether the app correctly blocks connections to remote servers. Using a fake address like 'evil.example' is just to make sure the block works properly. There is no real security issue here.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 44 is an assertion in a test file that calls Labs.normalizeConfig with a remote URL and verifies it is rewritten to a local loopback address. This tests a security hardening feature that blocks remote cognition endpoints, not a vulnerability. The presence of the string 'evil.example' in a test assertion is a legitimate test input, not an actual shady link used in production.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-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

This test file uses Node's virtual machine to run a small piece of the main application in isolation. It only uses code from the app itself and does not let outsiders control what gets executed. This is a normal way to test parts of a program without causing side effects.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: This is a vm.runInNewContext call in a regression test file that extracts a function from the application source by slicing between known string markers. The context object passed is extremely restricted (containing only isPlainObject). The code being executed comes from the same application, not from user or network input, and the test validates behavior of the application's own functions. No mechanism exists for an attacker to control the parsed string or the context; any malicious injection would require prior compromise of the application source. The scanner signal flags vm use generically, but in this context it is a safe, common testing pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-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 temporarily uses a GitHub token to upload the built app, but that token is not saved anywhere inside the uploaded file. The scanner warning about credentials being stored in artifacts does not apply here.

Technical evidence

Scanner reason: zizmor matched workflow-security rule artipacked in this repository.

Contextual assessment: The workflow uses ${{ github.token }} exclusively to authenticate the gh release upload command. The token is set as an environment variable for the run step and is never written into any file or artifact. The uploaded portable zip artifact contains only the built application; it does not contain credentials, the workflow definition, or any environment variables. No credential persistence mechanism is present in the supplied evidence.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This regular expression helps the app pick out important story events from the AI's writing. It's safe and doesn't introduce a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex on line 8135 is used to identify narrative events (death, destruction, etc.) in model-generated story text for world ledger extraction. The pattern uses simple alternation and a single optional group; it does not contain nested quantifiers or exponential backtracking. Input is derived from the AI model's response, not from attacker-controlled user input. No ReDoS vulnerability is demonstrated in the supplied context.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:8135

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app provides a default address for ComfyUI, an image-making tool that runs on your own computer. This is safe and expected.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The flagged line sets a default URL for a local ComfyUI server (127.0.0.1:8188). This is a localhost-only default for a user-configurable service. The 'shady-link' signal is a false positive; the URL points to a local service that the user intentionally runs.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:9320

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test that checks if the starting world configuration is correct. It runs a small piece of the app's own code in a sandbox, which is standard practice and not dangerous.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: Line 97 contains vm.runInNewContext in a test that validates the starter world preset. The code is a static string concatenation of a presets source and the assignment of DEFAULT_SYSTEM_PRESETS. No external data is involved. The sandbox prevents access to the host environment. The only harm from a flaw would be a test failure, not a runtime vulnerability.

Impact: low · 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 pattern used by a testing tool to clean up code before analyzing it. It only runs on the project's own source files, not on anything you type or upload, so there is no security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 193 is a static literal used to strip inline regex literals from a hardcoded source string (file) during source-code extraction for testing. It operates exclusively on developer-controlled input read from the local filesystem. No untrusted user input reaches this regex, so there is no viable ReDoS or injection path. The pattern is correctly scoped to a parsing utility and its complexity is proportional to the task.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
scratch/app_source.js:193

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

This signal said the app might download and run code, but actually it only downloads normal data like chat messages and doesn't run anything dangerous.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.download-to-execution in this repository.

Contextual assessment: The correlation between network retrieval and code execution sinks is a false positive in this context. The code uses fetch() for data retrieval and JSON.parse() for data parsing, but does not dynamically execute fetched code via eval, Function, or similar. No unsafe code execution is present in the provided source segments.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.download-to-execution
File role
production
Source
app.js:417-7864

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is test data for a companion's reference photo. It's not a real link or security threat.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 328 contains 'data:image/jpeg;base64,reference' used as a test fixture in a companion object. The scanner's 'shady-link' is based on the data URI pattern. This is static test data with no network destination.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:328

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that runs small pieces of the app's own code in a sandbox to check if they work correctly. It does not affect the app when you use it normally and cannot be triggered by a bad actor.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: The file 'file' is a test suite that uses Node.js's vm.runInNewContext to execute isolated slices of the application source for unit-testing purposes. The executed code at line 240 consists entirely of a hardcoded function name derived from the bundled application string; there is no runtime user or external input involved. This is a standard pattern for sandboxed function testing and does not introduce a runtime code-execution surface in the shipped application.

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

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 15 triggers on the banner image data URI at the start of the world object. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:15

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The code checks the health of a local AI model server, which is a normal part of how the application works.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 211 makes a health check call to a local Ollama endpoint at localhost port 11434. This is a core expected behavior of the project, which is designed to connect to local model servers. No external data exfiltration or malicious network activity 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/labs_cognition_audit.js:174

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The detection was a false alarm. The code uses a standard SVG namespace string to draw map visuals inside the page; it doesn't connect to any outside website or load anything from the internet.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner rule 'shady-link' flagged line 13022, but the actual string is the standard SVG namespace constant used for document.createElementNS calls. The surrounding code renders a semantic world map locally and makes no network requests. The flagged literal is a hardcoded non-resolving URI type, not a dynamically constructed or externally controlled URL.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:13022

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This part of the test file runs several of the app's own helper functions in a sandbox to verify they work correctly. It does not give anyone a way to run harmful code on your computer.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: The multi-line vm.runInNewContext call at lines 249–256 assembles several helper functions (isPlainObject, safeJsonClone, captureWorldTurnState, restoreWorldTurnState) and an inline stub from static strings obtained via the 'functionSource' helper. These are all internal, pre-defined pieces of the application logic. The context object is a fresh empty object used only for the test assertion. No user-controlled or network-originated data reaches the evaluated string. This is standard test isolation and does not constitute 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/engine_audit.js:249-256

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test file runs a small part of the app's own code in a sandbox to verify that the world map features work correctly. It's like a self-test, not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: The file uses vm.runInNewContext to execute a controlled substring of the application's own source code (file) for unit-testing world map functions. All data passed into the VM context is hardcoded test data; no user input, external data, or untrusted code is involved. This is a standard Node.js testing pattern and does not create a security vulnerability.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/world_map_stress_test.js:17-30

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test verifies that a CSS sanitization function rejects injection attempts. It runs the function in a sandbox with a deliberately bad input to confirm it is blocked.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: Line 143 contains a vm.runInNewContext call that tests a CSS-safe URL function using a hardcoded malicious string. The code passed to vm is a fixed slice of the application, not user-controllable.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:143

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A character portrait stored in the code. It's part of the game and not a security problem.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The surrounding context shows it is an NPC portrait image ('Wade Greeley portrait') with generated image metadata. This is a static asset used in the character interface.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:155

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This line checks if the user is saying hello. The code pattern looks complex but it's just a list of possible greetings. It's not a security risk because the pattern is simple and won't slow down your browser even with tricky input.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regular expression at line 417 matches common English greetings with a fixed set of alternatives and a trailing character class. It contains no nested quantifiers, repeating groups, or overlapping alternations that could cause catastrophic backtracking. Static analysis flagged it as unsafe-regex, but the pattern is safe for real-world use. Any theoretical client-side ReDoS would require a contrived input targeting a non-existent vulnerability and would only cause a temporary UI delay, which is not a meaningful 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
Rule
javascript.xray.unsafe-regex
File role
production
Source
labs-ui.js:417

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The test uses a safe sandbox to run small parts of the main application in isolation to check if they work correctly. Only the program's own code is run, and no outside data can influence it. This is a normal and safe testing practice.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: vm.runInNewContext at line 84 is used to capture and execute a slice of the project's own file (worldStatRollConfig) in a sandboxed context. The context provides only isPlainObject. No user-supplied or untrusted data enters the dynamically executed code. This is a standard unit-test pattern for isolating individual functions from a large codebase. The test file is not shipped to users and runs only during development.

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A security scanner noticed a suspicious-looking link in the test file, but it's just a fake image placeholder used to test how the app recovers when a reference image is omitted. No real data or network calls are involved.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a literal string at line 1375 as a 'shady-link' pattern. The actual code is a test that creates a mock companion object with a placeholder data URI ('data:image/png;base64,REFERENCE') as a fake photo. This test verifies that reference-free recovery removes image bytes and writes a usable standalone subject prompt. The string is a test data stub with no real network destination, credential, or user-impact. The rule fired on a completely benign test string.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1375

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code checks that any web address you use must point to your own computer. It blocks connections to outside servers, which is a safety feature, not a risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 50 contains a hostname allowlist check that restricts accepted URLs to localhost, 127.0.0.1, and IPv6 loopback equivalents. This is a security control that prevents connections to external servers, not a shady-link. The scanner flagged the list of hostnames but this is a legitimate defensive measure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:50

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that runs a small piece of the main program in a secure sandbox to check if the world map feature works correctly. It only uses hardcoded test data and is never used by the actual application or accessible to users.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: The file file uses vm.runInNewContext to evaluate a statically-extracted slice of the main file within a fresh V8 sandbox. This is a developer-only test harness that reads a hardcoded portion of the project's own source, executes it in an empty context, and runs assertions against hardcoded world data. No user-supplied or attacker-controlled input reaches the vm call at runtime. The dynamic execution is fully controlled, transparent, and proportionate to the stated purpose of regression and limit stress testing. There is no evidence of any data exfiltration, credential handling, or harmful persistence.

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is test data for checking how old photo data is handled. It's just a fake image string.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 437 contains 'data:image/png;base64,old' used as a test fixture for normalizing legacy photo data. This is a static test value in an assertion block. No network activity or suspicious destination.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:437

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 35 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:35

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern helps clean up clothing descriptions by cutting off unwanted parts. It only sees short text fragments so it cannot be misused.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20568 is used to split captured text at certain keywords. The alternation contains nested groups but is applied to a short, already-bounded input, and has no unbounded quantifiers. No catastrophic backtracking risk is demonstrated.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20568

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line reads the server address you typed into the settings and prepares it for a connection test. It defaults to a common local server address (localhost:11434) if you left the field blank. It's just part of the connection tester—nothing shady.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:9113

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code is part of how the app talks to an AI provider to generate story responses. It reads the AI's streamed reply and processes it. There's nothing shady here — it's just doing what the app is supposed to do: send your message to the AI and handle the response.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The candidate at line 19593 is located within the processWorldStreamLine function which parses server-sent events from an external AI provider API. The line checks if the stream line starts with 'data:' — a standard SSE protocol check. The surrounding code makes legitimate fetch requests to an OpenAI-compatible chat completions endpoint, includes proper authentication headers, and processes tool calls and state updates as part of the application's stated purpose of persistent AI story generation. The JS-X-Ray 'shady-link' signal did not retain matched literal values, and no evidence of unexpected network destinations, credential exfiltration, or concealed behavior is present in the supplied context. The fetch calls are to a configurable base URL (apiBase()) which is typical for this kind of application.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:19593

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a default setting for generating images using a local server on your own computer. It's safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1260 sets a default localImageBaseUrl to a loopback address (127.0.0.1:7860/v1). This is a legitimate default for the local-first platform to connect to a locally running Stable Diffusion or similar server. The scanner signal is not a security threat.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
app.js:1260

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

The app uses a simple pattern to read version numbers. It only looks at short text and can't cause performance problems.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The flagged regex is used to parse numeric version strings (e.g., '1.2.3'). The pattern is finite and does not allow catastrophic backtracking because it matches at most four groups of digits separated by dots. Input is constrained to version strings or similar short text. No ReDoS or unsafe behavior 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
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:9380

zizmor reported artipacked

Expected behavior · high confidence

A security scanner thought the workflow might save secret tokens in a file that gets uploaded somewhere, but looking at the actual workflow, there is no such file upload. The token is only used temporarily to create a release on GitHub, which is exactly what it's supposed to do. There is no risk here.

Technical evidence

Scanner reason: zizmor matched workflow-security rule artipacked in this repository.

Contextual assessment: The 'artipacked' scanner rule flags potential credential persistence through GitHub Actions artifacts. The reviewed workflow contains no actions/upload-artifact or actions/download-artifact steps. The release assets are uploaded directly via the `gh release create` command using the built-in GITHUB_TOKEN. No credentials are persisted in artifacts; the token is scoped to the job and not stored. This scanner finding is a false positive.

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.prototype-pollution

Expected behavior · high confidence

This code includes a safety check that stops a certain type of attack, so it's actually making the app more secure.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.prototype-pollution in this repository.

Contextual assessment: The safeJsonClone function explicitly filters out __proto__, prototype, and constructor keys to prevent prototype pollution during deep cloning. This is a defensive measure, not a vulnerability. The scanner signal is triggered by the presence of those keywords in the code, but the context shows they are used as a security guard.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.prototype-pollution
File role
production
Source
app.js:845

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a list of addresses where the app looks for local AI models on your own computer, like checking for KoboldCpp. It's completely normal and not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The string at line 409 is a hardcoded localhost URL (port 5001) used in the discover() function to probe for local AI model servers, specifically matching KoboldCpp as noted in the project's documentation. No external or malicious destination is involved. The scanner signal is a false positive for this legitimate local network access pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:409

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test file uses Node's virtual machine to run a small piece of the main application in isolation. It only uses code from the app itself and does not let outsiders control what gets executed. This is a normal way to test parts of a program without causing side effects.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: This is a vm.runInNewContext call in a regression test file that extracts a function from the application source by slicing between known string markers. The context object passed is extremely restricted (containing only isPlainObject). The code being executed comes from the same application, not from user or network input, and the test validates behavior of the application's own functions. No mechanism exists for an attacker to control the parsed string or the context; any malicious injection would require prior compromise of the application source. The scanner signal flags vm use generically, but in this context it is a safe, common testing pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/gameplay_overhaul_audit.js:84

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is from a test about archiving virtual humans. The 'data:' string is a fake generated photo used in testing, not a real link.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 351 contains 'data:image/jpeg;base64,generated' used as a test fixture in a timeline message. This is a static test value in assertion code. No actual network request or external link 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:351

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 55 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:55

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test file uses Node's built-in VM sandbox to run a slice of the app's quest engine logic. It's a safe testing technique, not a security issue. The sandbox only contains harmless helpers, and no outside attacker can run code through it.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: This is a developer stress-test file that uses vm.runInNewContext to load a fixed substring of the project's own file into a sandboxed context. The context is deliberately limited to console, a stub showToast, internal quest module flags, and project helper functions. No user input, network data, or attacker-controlled code is evaluated. The VM usage is appropriate for isolating quest engine logic during testing and does not introduce a code execution vulnerability in shipped behavior because the file is not executed in production.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-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 is a fake reference image used in a test to check that the app sends the correct source photo for AI generation.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1124 contains a hardcoded data URI 'data:image/png;base64,PROVIDER_REFERENCE' used as a test fixture to verify that the image API request sends only the generation reference photo. This static test value is only present in the test file and has no external exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1124

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regular expression is used by a testing tool to find function definitions inside the project's own code. It never processes outside information, so it is safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 211 is a static pattern used to match function declarations in a hardcoded source file (file). It is part of the declaration-indexing logic in a Node.js test harness. The input is a known string read from the filesystem; no attacker-controlled data influences the match. The pattern is standard and not exposed to ReDoS risk 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
Rule
javascript.xray.unsafe-regex
File role
production
Source
scratch/app_source.js:239

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a piece of image data as suspicious, but it's just normal game art stored as text inside the file.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The JS-X-Ray shady-link signal at line 75 triggers on content inside a base64-encoded JPEG data URI. This is a standard embedded image in a generated world bundle; no actual network link or suspicious destination 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:75

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This default setting lets the app talk to ComfyUI on your own computer. It is not connecting to the internet.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1263 sets a default comfyUiBaseUrl to a loopback address (127.0.0.1:8188). This is the standard port for ComfyUI, a local image-generation tool. The project's configuration handling uses normalizeLoopbackUrl, indicating deliberate localhost-only design. No external data flow or 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
Rule
javascript.xray.shady-link
File role
production
Source
app.js:1263

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This pattern cleans up leftover AI command tags from chat text. It's a harmless cleanup regex.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 29304 detects dangling tool-protocol fragments in visible text after embedded tool calls have been extracted. It combines the opening/closing tag and arg tags into one alternation. The pattern is bounded and lacks nested quantifiers. Even if the alternation could cause minor backtracking on crafted input, the worst outcome is a brief tab delay—a local self-DoS with no credential or data exposure. The scanner signal is a conservative false positive.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:29249

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This flagged line is test data for a companion's profile photo. It's a fake image string, not a real link or security concern.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 327 contains 'data:image/jpeg;base64,profile' used as a test fixture in a companion object. This is a static test value in assertion code. No network destination or user-controlled input 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
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:327

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern understands when you change your clothes in the story. It looks at short phrases and is safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20626 (matching 'I swap my outfit for ...') uses bounded quantifiers {0,25} and {2,100} and has no overlapping alternatives. No catastrophic backtracking is possible. The signal is conservative and does not indicate a real vulnerability.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20626

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a list of addresses where the app looks for local AI models on your own computer, like checking for llama.cpp. It's completely normal and not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The string at line 408 is a hardcoded localhost URL (port 8080) used in the discover() function to probe for local AI model servers, specifically matching llama.cpp server as noted in the project's documentation. No external or malicious destination is involved. The scanner signal is a false positive for this legitimate local network access pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:408

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a list of addresses where the app looks for local AI models on your own computer, like checking for LM Studio. It's completely normal and not a security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The string at line 407 is a hardcoded localhost URL (port 1234) used in the discover() function to probe for local AI model servers, specifically matching LM Studio as noted in the project's documentation. No external or malicious destination is involved. The scanner signal is a false positive for this legitimate local network access pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
labs-core.js:407

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test runs a preset-finding function in isolation to confirm it correctly selects a built-in starter world. It uses only predefined data.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: Line 125 contains a vm.runInNewContext call that tests a preset-selection function using a hardcoded presetsSource string. No dynamic or untrusted input 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
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:125

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

The detector thought the code was purposely hidden, but it's just a list of preset settings for an AI roleplay tool. Everything is readable and meant to be that way.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code in this repository.

Contextual assessment: JS-X-Ray flagged the file for 'obfuscated-code' with low confidence, but the source reveals a straightforward JavaScript constant array containing descriptive preset labels and AI system prompts. There is no obfuscation — all strings are plaintext and clearly serve a legitimate function. The scanner's low confidence aligns with this being 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
Rule
javascript.xray.obfuscated-code
File role
production
Source
presets.js:1

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This code uses `new Function` only to check whether extracted snippets are valid JavaScript. The snippets come from the project's own code, not from anything a user types or uploads, so there is no risk of running untrusted code.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: The `new Function` call on line 180 is used inside a test to verify that the project's own code extractor (app_source.js) produces syntactically valid function bodies. The source argument (`entry.source`) is extracted from the project's own application source code (file) by a controlled static analysis tool. There is no user-controlled or attacker-controlled input reaching this constructor; it operates entirely on project-authored strings. The test runs in a development or CI environment and never exposes the generated function to untrusted data. This pattern is a legitimate and appropriate use of dynamic parsing for correctness verification.

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.shady-link

Expected behavior · high confidence

Another game background image stored as data. Not a threat.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: The scanner flagged a base64-encoded JPEG data URI at this line. The context shows it is a location background image ('Records basement') with generated image metadata. This is a legitimate inline asset for the application's world 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
Rule
javascript.xray.shady-link
File role
production
Source
policy-panic-world.js:105

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

A security scanner thought some code might be hidden, but looking at the actual code shows it's plain and easy to read. There's nothing sneaky here.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.obfuscated-code in this repository.

Contextual assessment: The scanner rule 'obfuscated-code' flagged line 1, but the provided source code is fully readable, well-commented, and contains no actual obfuscation, minification, or encoded strings. The signal is a false positive with low scanner confidence. No hidden or transformed behavior 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
Rule
javascript.xray.obfuscated-code
File role
production
Source
app.js:1

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake image used in a test to confirm the app can extract a WebP image from the AI's response.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.shady-link in this repository.

Contextual assessment: Line 1223 contains a hardcoded data URI 'data:image/webp;base64,AAAA' used as a test fixture to verify GPTProto image extraction from a Gemini-like response. This static test value is only present in the test file and has no external exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.shady-link
File role
production
Source
scratch/companion_audit.js:1223

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regular expression checks whether a line of code ends with a semicolon. It only looks at the project's own source files, so there is no risk to users.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 239 is a static pattern used to test whether a line of source code ends with a semicolon. It operates on a substring of the hardcoded file file during declaration extraction. No user input is involved; the only data processed is local source text. The pattern is simple and cannot cause adverse effects.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
scratch/app_source.js:211

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern detects when the story says you are wearing something. It only checks short phrases and cannot be tricked.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20515 (matching 'you are wearing ...') uses bounded quantifiers {0,30} and {3,80} with no nested alternations. Catastrophic backtracking is not possible. The scanner signal does not demonstrate a vulnerability.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20515

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test checks that HTML tags are properly escaped. It runs the app's escape function in a sandbox, so there is no way for an attacker to exploit this.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval in this repository.

Contextual assessment: Line 115 uses vm.runInNewContext to test HTML escaping. The executed code is a static slice of the app source containing the escapeHTML function. No user or external input reaches this sandbox. The sandbox prevents access to host globals. The only possible outcome is a test failure, which is recoverable and has no user impact.

Impact: low · 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

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test file uses Node's virtual machine to run a small piece of the main application in isolation. It only uses code from the app itself and does not let outsiders control what gets executed. This is a normal way to test parts of a program without causing side effects.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: This is a vm.runInNewContext call in a regression test file that extracts a function from the application source by slicing between known string markers. The context object passed is extremely restricted (containing only Set, RegExp, String). The code being executed comes from the same application, not from user or network input, and the test validates behavior of the application's own functions. No mechanism exists for an attacker to control the parsed string or the context; any malicious injection would require prior compromise of the application source. The scanner signal flags vm use generically, but in this context it is a safe, common testing pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/gameplay_overhaul_audit.js:115

JavaScript analysis reported javascript.xray.unsafe-vm-context

Expected behavior · high confidence

This test checks that the app's security policy correctly blocks inline scripts. It runs a small piece of the app in a sandbox with fixed test data.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-vm-context in this repository.

Contextual assessment: Line 115 contains a vm.runInNewContext call that tests CSP policies with hardcoded assertions. The executed code is a static string derived from the app source. No external input reaches the sandbox.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:115

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern understands when you type 'I'm wearing a blue coat'. It works with short sentences and is safe.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex in this repository.

Contextual assessment: The regex at line 20623 (matching 'I'm wearing ...') uses bounded quantifiers {0,30}? and {2,100} with no overlapping alternations. The scanner signal is conservative; no catastrophic backtracking is reachable. The pattern is part of the outfit detection logic, consistent with the project's purpose.

Impact: low · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
app.js:20623

Related contextual observations

Static regex with potential ReDoS pattern in test code

low risk · medium confidence

The pattern used in a test is a bit inefficient, but it only checks the app's own code and cannot be used by an outsider to cause problems.

Technical assessment

The regex at line 172 contains the subpattern `(\/\/[^\n]*\n\s*)*` which could in theory cause catastrophic backtracking if matched against a long string of comment-like content. However, the input is a fixed source file from the same project, and the test is run locally. This is a code quality observation rather than a security finding.

Impact: none · Exploitability: unlikely

Developer action: Consider simplifying the regex to avoid nested quantifiers, e.g., by removing the outer group repetition or using a non-backtracking approach. However, no urgent action is needed.

Sources:

Scanner signal matches test fixture data-URI strings, not network behavior

low risk · high confidence

The automated scanner saw strings that look like embedded images and flagged them, but the code is just a test checking how the app stores pictures. Nothing is sent anywhere.

Technical assessment

Both scanner candidates originate from the same test asserting that an explicit display profile photo remains separate from a base generation reference. The matched literals are local data-URI strings contained in the test input; the audit script imports no networking modules and the surrounding assertions only call normalization and comparison functions. This is a benign static-analysis false positive on the data-URI shape.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity