TavernKeeper Scan Report

ddkhan24/hordestudio

Commit 3842aae Reviewed

4 material concerns identified.

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 4 material 150 low

What this review found

JavaScript analysis reported javascript.xray.unsafe-regex

Material concern · high confidence

A small pattern used to check for a specific label can also cause slowdowns if 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 5624 filters for a specific summary tag. Although simpler, the pattern uses \(\s*\) repeated and optional groups, which can still cause backtracking on adversarial input, contributing to overall ReDoS risk.

Impact: medium · Exploitability: plausible

Developer action: Consider using string methods like .includes() instead of regex for exact text matching, or use a fixed pattern without 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:5624

JavaScript analysis reported javascript.xray.unsafe-regex

Material concern · high confidence

A text pattern used to find special blocks in messages can be exploited to make the browser freeze by sending a specially crafted message.

Technical evidence

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

Contextual assessment: The regex at line 5592 matches HTML-like details and planning tags. It contains nested quantifiers and alternations prone to catastrophic backtracking on crafted input, leading to ReDoS. The input flows from AI-generated text or imported character cards, which an attacker could control.

Impact: medium · Exploitability: plausible

Developer action: Replace the regex with a safer pattern, add input length limits, or consider using a dedicated HTML parser. Avoid using regex for parsing HTML-like structures.

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:5592

JavaScript analysis reported javascript.xray.unsafe-regex

Material concern · high confidence

A pattern used to clean up internal text blocks can be tricked into taking too long, freezing 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 5609 strips planning-style tags from inner content. It uses alternation and optional quantifiers that can cause excessive backtracking on adversarial input, resulting in browser hang.

Impact: medium · Exploitability: plausible

Developer action: Simplify the regex or use a string replace with a fixed list of tags. Avoid nested quantifiers with alternation.

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:5609

JavaScript analysis reported javascript.xray.unsafe-regex

Material concern · high confidence

Another pattern used to find special message sections can be exploited to 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 5621 matches details blocks in extractDirectorNotes. It has the same structure as line 5592, prone to catastrophic backtracking on crafted input, leading to denial of service.

Impact: medium · Exploitability: plausible

Developer action: Use the same fix as the regex at line 5592; consider a more robust parsing approach.

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:5621

Minor cautions

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium 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-regex in this repository.

Contextual assessment: The regex on line 240 is used to validate that a URL points to localhost or the IPv6 loopback. It contains a character class [^\s?#] followed by * with no nested quantifiers or alternation, making catastrophic backtracking practically impossible. No runtime input drives repeated backtracking. The regex is benign in this context.

Impact: none · Exploitability: unlikely

Developer action: Consider reviewing the regex for clarity, but no security fix is warranted.

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:240

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · high confidence

A pattern used to understand if you want to move 'outside' can get stuck processing a very long sentence, making the app freeze temporarily. Someone could paste a crafted message to cause this.

Technical evidence

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

Contextual assessment: Line 17734 contains the regex `/^out(?:side)?(?:\s+of\s+\S.*)?$/i`. While anchored, the nested `\S.*` inside an optional group can cause catastrophic backtracking when processing long or crafted strings that nearly match. This creates a ReDoS risk in the `extractUserMovementTarget` function, which operates on user-supplied roleplay input. The pattern is part of parsing movement commands and is directly reachable from user text.

Impact: low · Exploitability: plausible

Developer action: Replace the regex with a simpler anchored pattern that avoids nested quantifiers, e.g., `/^out(?:side)?(?:\s+of\s+\S+)?$/i` to limit backtracking. Consider using RegExp protection like a match 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:17737

zizmor reported unpinned-uses

Minor caution · medium confidence

The workflow uses a short version name for a GitHub Action instead of a fixed commit ID. This is a best-practice issue, not an immediate security problem, but it means the action could change unexpectedly.

Technical evidence

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

Contextual assessment: The workflow uses actions/checkout@v4 (a mutable tag) instead of a pinned commit SHA. While actions/checkout is an official GitHub action and the risk of a supply-chain attack is low, an unpinned reference allows the action's definition to change without explicit version control. The workflow has contents:write permission and uses the github.token to upload releases, so a compromised checkout action could potentially read repository contents or tamper with the release upload. However, no specific exploit or active compromise is demonstrated.

Impact: low · Exploitability: unlikely

Developer action: Pin actions/checkout to a full SHA commit hash to prevent supply-chain tampering.

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

zizmor reported unpinned-uses

Minor caution · medium confidence

The release process uses a GitHub Action without locking it to a specific version. If the action's label is tampered with, a bad actor could sneak malicious code into the app release. There is no sign this has happened.

Technical evidence

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

Contextual assessment: The workflow uses actions/checkout@v4, a major-version tag without a commit SHA pin. This exposes the release pipeline to the risk of a tag retag or hijack, which could inject malicious code into the release artifact. The impact is medium because the workflow has contents:write permission and uses the automatic github.token. However, there is no demonstrated exposure in the supplied evidence.

Impact: medium · Exploitability: plausible

Developer action: Pin the actions/checkout action to a specific commit SHA (e.g., uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 for v4).

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 · high confidence

A command pattern like 'go to the tower' can cause the app to freeze if a long tricky sentence is typed. This is a performance weakness.

Technical evidence

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

Contextual assessment: Line 17766 defines `/^(?:(?:then|so)\s+)?(?:go|walk|head|travel|move|run|ride|climb|return|enter|exit|leave|step|cross)\b\s*(?:(?:to|towards?|into|inside|through|across|up|down|for|in)\s+)?([^,.;!?]+)?/i`. This regex has multiple nested optional groups and a capturing group with `+` at the end, leading to potential catastrophic backtracking when processing user input that partially matches. The pattern is used in `extractUserMovementTarget` for command-like movement directives.

Impact: low · Exploitability: plausible

Developer action: Refactor the regex to remove nested optional quantifiers. Use a more linear approach, break into simpler patterns, or apply input length limits before matching. Consider using a regex timeout library.

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:17766

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · high confidence

A regex that tries to understand 'I walked to the door after opening it' can get trapped in a long computation, freezing the page. Crafty input can trigger this.

Technical evidence

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

Contextual assessment: Line 17756 contains the regex `/(?:^|[.!?]\s+)(?:(?:then|so)\s+)?(?:i|we)\b[^.!?]{0,100}?(?:,\s*(?:and\s+|then\s+)?|\s+(?:and|then|so|before|after|as|while)\s+)(?:(?:i|we)\s+)?(?:go|went|walk(?:ed)?|head(?:ed)?|travel(?:l?ed)?|moved?|run|ran|ride|rode|climb(?:ed)?|return(?:ed)?|enter(?:ed)?|exit(?:ed)?|leave|left|step(?:ped)?|cross(?:ed)?|ma[dk]e\s+(?:my|our)\s+way)\b\s*(?:(?:to|towards?|into|inside|through|across|up|down|for|in)\s+)?([^,.;!?]+)?/i`. This complex regex with multiple optional groups and quantifiers is highly susceptible to catastrophic backtracking. It processes user-supplied roleplay text in `extractUserMovementTarget`, making it reachable from any user input.

Impact: low · Exploitability: plausible

Developer action: Redesign the movement parsing logic to use simpler, separate regexes or a state machine. Avoid nested optional groups with overlapping quantifiers. Limit input length before regex matching.

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:17756

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · high confidence

A regex that parses 'I headed to the market' can hang the browser if given a carefully crafted long message. This is a performance bug.

Technical evidence

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

Contextual assessment: Line 17742 defines `/(?:^|[.!?]\s+)(?:(?:then|so)\s+)?(?:(?:i|we)\s+|let'?s\s+)(?:go|went|walk(?:ed)?|head(?:ed)?|travel(?:l?ed)?|moved?|run|ran|ride|rode|climb(?:ed)?|return(?:ed)?|enter(?:ed)?|exit(?:ed)?|leave|left|step(?:ped)?|cross(?:ed)?|ma[dk]e\s+(?:my|our)\s+way|sleep|slept)\b\s*(?:(?:to|towards?|into|inside|through|across|up|down|for|in)\s+)?([^,.;!?]+)?/i`. This regex contains many nested optional groups, alternations, and a capturing group with `+`, making it vulnerable to ReDoS. It is part of the movement extraction function that processes user input directly.

Impact: low · Exploitability: plausible

Developer action: Refactor the regex to reduce complexity. Use separate patterns for each verb group and combine results programmatically. Consider using a regex timeout or a dedicated parser.

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:17742

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

This regex could theoretically be slow on certain crafted inputs, but the app runs locally and only processes your own files, so it's not something an attacker could realistically use to cause trouble.

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 flagged as potentially vulnerable to ReDoS due to the optional group (?:;[^,]*)? containing a star quantifier [^,]* inside. In theory, a long input missing the final comma could cause catastrophic backtracking. However, the function addWorldMediaAsset is called only with user-supplied data in a local-first, single-user application. The input is not exposed to external attackers, and the regex validates image data URIs that are typically well-formed. No evidence of an actual exploit path or performance impact is provided.

Impact: low · Exploitability: unlikely

Developer action: Replace the regex with a simpler non-backtracking validation, such as a null-safe check for the prefix 'data:image/' using startsWith and a character-by-character parse, or use a regex without nested quantifiers like /^data:image\/[a-z0-9.+-]+(?:;[^,]+)?,/i (changing the inner star to plus).

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:2369

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · high confidence

A pattern that checks if you said 'through the door' can get stuck analyzing a long sentence, freezing the app temporarily. Malicious input could trigger this.

Technical evidence

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

Contextual assessment: Line 17736 contains the regex `/^.*\bthrough\s+(?:the\s+)?(?:door|doorway|entrance|gate)\s*$/i`. The leading `^.*` is greedy and, combined with the alternation at the end, can cause catastrophic backtracking on long non-matching inputs. This regex is used in `resolveMatch` within `extractUserMovementTarget`, applied to user-provided roleplay text.

Impact: low · Exploitability: plausible

Developer action: Remove the leading `.*` and anchor the pattern differently, e.g., use a word-boundary pattern or test the end of the string with a more efficient approach. Pre-process input to avoid long strings.

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:17734

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

The app uses a regular expression to check that image data is in the correct format. If someone crafts a special long string, it might slow down or freeze the browser temporarily. This is a low-severity issue.

Technical evidence

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

Contextual assessment: The scanner flagged an unsafe regex at line 993. The code uses a regex to validate image data URIs: /^data:image/[a-z0-9.+-]+(?:;[^,]*)?,/i. While this pattern is not highly complex, it could be subject to ReDoS if an attacker supplies a very long string that causes exponential backtracking in certain regex engines. The input comes from world media assets which the user creates, but a crafted entry could cause client-side performance degradation. No evidence of actual exploitation exists.

Impact: low · Exploitability: plausible

Developer action: Consider hardening the regex by limiting input length before testing or using a simpler validation approach, such as checking for the static prefix 'data:image/' with startsWith, then a minimal pattern for the full URI.

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:993

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · high confidence

This pattern is safe and does not cause performance issues. The scanner warning appears to be a false positive.

Technical evidence

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

Contextual assessment: Line 17737 defines `/^(?:the\s+)?(?:room|place|area|building|house|here)?$/i`. This regex does not contain nested quantifiers or greedy patterns that would cause catastrophic backtracking. The scanner flag is likely a false positive; the pattern is simple and anchored. No practical ReDoS risk is present.

Impact: low · Exploitability: plausible

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:17736
Expected scanner matches (127)

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just a fake picture string used in a test to check that private photos are removed from exported data.

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
scratch/companion_audit.js:368

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security scanner flagged a line inside a big block of image data. This is a false alarm—the data is just an encoded picture, not a real web address.

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 fired at line 145 inside a base64-encoded image data URI. Base64 encoding can produce arbitrary byte sequences that coincidentally match suspicious URL patterns. The content at this line is part of an inline image (media_policy_bullpen) used as a location background, not a dynamic network request. No actual external domain or fetch operation 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: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: This candidate flags a vm.runInNewContext call at line 97 within a test function ('starter world points to an installed preset'). The call executes a statically extracted portion of the application source (presetsSource) with a fixed string appended. No user-controlled or network-originated data reaches the VM; it is a standard unit-test pattern for isolating application code under Node's vm module. The signal is a benign use of dynamic code execution for testing, not a 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.unsafe-vm-context
File role
production
Source
scratch/engine_audit.js:97

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a default address for a local image-generation tool that runs on your computer. It's not a shady external link; it's expected to point to your own machine.

Technical evidence

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

Contextual assessment: The flagged URL at line 1189 is the default fallback passed to normalizeLoopbackUrl for localImageBaseUrl. The project intentionally connects to a local image-generation service running on 127.0.0.1:7860. This is a default configuration value, not an external or untrusted destination. Users can override the URL via settings, and normalizeLoopbackUrl validates that the address resolves to a loopback interface. The scanner signal reflects the presence of a hard-coded HTTP URL, which matches the project's local-first design and is not evidence of malicious behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test value that checks whether image data is passed correctly through the code—no real image or external connection.

Technical evidence

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

Contextual assessment: The flagged string is a static data URI used as test input for image request validation. It appears in an assert.equal call comparing request.image to a placeholder. No actual network call or untrusted user input flows through this value.

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

The security scanner flagged a line of test code that uses a fake profile photo placeholder. This is just a made-up test value, not a real security threat.

Technical evidence

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

Contextual assessment: The 'shady-link' signal at line 1123 corresponds to a test data URI 'data:image/png;base64,DISPLAY_ONLY' used as a fake profile photo value inside a unit test. This is a static test fixture, not a runtime network request or exfiltration. The scanner rule flags base64 data URIs generically, but in this test file the value is harmless and part of normal test setup.

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

Expected behavior · high confidence

This line checks that any configured server address points only to your own computer, which is exactly what a local-first app should do. It prevents accidentally sending data to the internet.

Technical evidence

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

Contextual assessment: Line 49 performs a hostname whitelist check that only allows localhost or IPv6 loopback addresses. This is a security control to prevent accidental or malicious use of external URLs, enforced by replacing non-loopback values with the safe default. The scanner signal 'shady-link' does not indicate actual malicious intent; it reflects the scanner matching a URL-parsing pattern without context. The code's behavior is protective and aligned with the project's local-first design.

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:49

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code sends a request to an AI service that the user selected (like OpenRouter or a local model) to generate story content. It's a normal part of how the app works, 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 fetch call and streaming response processing at and near line 3317 are part of the application's AI text generation workflow. The endpoint URL is configured by the user (e.g., OpenRouter, local LLM server) and is not hardcoded to an unauthorized destination. The 'shady-link' signal likely matched a dynamic URL or common pattern, but the data flow is consistent with the project's stated purpose of connecting to user-chosen AI providers. No evidence of data exfiltration, concealed behavior, or unauthorized network access is present in the supplied source excerpt.

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:3317

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: 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/gameplay_overhaul_audit.js:130

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 45, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 65, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

This part of the code checks if an image from an AI provider was successfully converted to a portable format. There's no security issue here.

Technical evidence

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

Contextual assessment: Line 30917 is inside a catch block in makeWorldVisualPortable. It checks whether stabilizeGeneratedImageSource returned a valid data URL. No network fetch or untrusted data sink occurs at this line. The scanner rule 'shady-link' appears to be a static pattern match that does not consider the conditional control flow or error-recovery context. The URL examined here originates from the image provider previously chosen by the user and is only used to decide whether to throw an error. No user harm is possible from this check.

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:30917

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app opens a small popup window for you to sign in to a connected service, which is normal and safe.

Technical evidence

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

Contextual assessment: The flagged line opens a blank popup window for OAuth authorization flow with MCP providers, a standard pattern in web applications for third-party authentication. No malicious data exfiltration occurs.

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:8690

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test that uses a fake image URL to make sure the app removes it when asked. This is harmless test setup, not a real security problem.

Technical evidence

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

Contextual assessment: The 'shady-link' scanner signal (javascript.xray.shady-link) flagged a data URI at line 1355 in the test file companion_audit.js. The URI ('data:image/png;base64,REFERENCE') is a static placeholder used in a unit test for the buildCompanionImageRequest function. It is not attacker-controlled, not used in production flow, and not exfiltrated. The test verifies that omitting the reference image correctly excludes the input_references field. No 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.shady-link
File role
production
Source
scratch/companion_audit.js:1355

JavaScript analysis reported javascript.xray.sql-injection

Expected behavior · high confidence

The security scanner thought a line of code might be a dangerous database command, but actually it's just a log message that prints something the user wrote. No database is involved, so there is no danger.

Technical evidence

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

Contextual assessment: The scanner flagged line 20325 for potential SQL injection, but the code is a console.warn call that logs a server-side warning string. The detected variable is user-controlled text parsed from narrative prose, but it is never used in any database query or SQL context. The project uses IndexedDB for storage and has no SQL execution paths. This is a static-analysis false positive; the pattern match does not correspond to actual injection risk.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
Rule
javascript.xray.sql-injection
File role
production
Source
app.js:20325

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern checks whether you're swapping your outfit based on what you type. While it's a complex-looking expression, it's carefully bounded and won't lock up your browser with normal input.

Technical evidence

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

Contextual assessment: The regex at line 20229 matches first-person outfit-swap patterns. It uses bounded quantifiers ([^.!?;]{2,100}) and alternation. No nested repetition or overlapping quantifiers that would cause catastrophic backtracking are present. The scanner's 'unsafe-regex' classification is a conservative heuristic, and no concrete ReDoS vulnerability is demonstrated in the supplied code evidence.

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:20229

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The test is running a small piece of the app's own code in a sandbox to check if it works correctly. No outside data or user input is used.

Technical evidence

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

Contextual assessment: This vm.runInNewContext call occurs inside a test that extracts a function from the project's own file source and executes it in a minimal sandbox. The context contains only safe built-in objects (Set, RegExp, String). No external or user-controlled input is passed; the code being evaluated is the project's own production logic. This is a standard Node.js testing pattern for internal functions that are not exported.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/gameplay_overhaul_audit.js:115

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 85, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

The code adds an attribution header (HTTP-Referer and X-Title) when talking to OpenRouter. This is a standard way for apps to identify themselves to the API provider, not a shady link.

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:616

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line lists a local address that the app checks to find a running AI model on your computer. It is only local and not sent anywhere else. This is normal behavior for the app.

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
labs-core.js:393

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The code downloads an image from the AI provider you chose, so it can be saved into your world. This is expected behavior for a creative tool that works with external image services.

Technical evidence

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

Contextual assessment: Line 30909 is the condition if (!data.startsWith('data:image/')) in makeWorldVisualPortable. When true, the function issues a fetch to the image provider's URL (line 30912) to retrieve the image as a blob and convert it to a data URL. This fetch is intentional: the user selected an AI image provider, and the application needs to download the generated image to embed it in the world save. The URL comes from the provider's response and is not an arbitrary attacker-controlled URL. The 'shady-link' signal does not account for the legitimate purpose of fetching images from user-configured 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:30909

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The scanner flagged a made-up base64 image value used in a test. 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: The 'shady-link' signal at line 1227 corresponds to a test data URI 'data:image/jpeg;base64,BBBB' used as a fake response image in a unit test for GPTProto image extraction. This is a static test fixture, not a network destination. It is not executed or accessible outside the test suite.

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

This file is a data file for a mini-game called Policy Panic. It stores pictures and game information. The security scanner found something that looked like a link, but that's just part of the game's data, not a real security threat.

Technical evidence

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

Contextual assessment: The file file contains base64-encoded serialized data for the Policy Panic mini-game within Horde Studio. The scanner rule 'javascript.xray.shady-link' detected a pattern consistent with a URL or link within the raw text, but this is expected as the game data includes encoded image URLs and references. No actual network access or exfiltration is present; the data is stored locally and used only by the in-app game. The scanner 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
policy-panic-world.js:2

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The test runs part of the app's world-turn-state functions inside a safe sandbox to verify they behave correctly. Only the app's own code is used.

Technical evidence

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

Contextual assessment: This vm.runInNewContext usage extracts two functions from the production file source (captureWorldTurnState and restoreWorldTurnState) and executes them with a context limited to structuredClone, JSON, safeJsonClone, isPlainObject, and a stub bumpMemoryEpoch. The code is purely the project's own logic run in a controlled test harness. No untrusted data enters the evaluated string or context.

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 just a fake photo link used in a test to make sure the app can handle old photo data. It never contacts the internet and is not present in the real app.

Technical evidence

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

Contextual assessment: The candidate is a static string literal `'data:image/png;base64,profile'` used as test fixture data in line 443 of a test file (file). JS-X-Ray's 'shady-link' rule flagged it because the string matches a data-URI pattern, but the code does not load, execute, or transmit this string as a URL. The test sets up a companion object for the `normalizeCompanion` function and asserts that it is preserved — no network fetch, no user-controlled input reaches this position, and the file itself is never shipped to users as production code. There is no demonstrated data flow to an external 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: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: The vm.runInNewContext call at line 125 is used within a test function that validates CSS sanitization functions. The executed code is a controlled slice of the application source with no user-supplied input. This is a legitimate testing pattern for verifying security properties of the application's own functions through isolated execution in the Node.js vm module.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:125

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This code uses a simple pattern to check if some text is a number. The pattern is safe and doesn't create any security problems.

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 33502 in file is a static regular expression that validates whether a trimmed string represents a valid numeric value (integer or decimal). This is a standard parsing pattern for converting user-provided option strings to numbers in companion image provider option handling. The regex pattern is hardcoded, not constructed from user input, and does not contain nested quantifiers, backreferences, or any ReDoS-vulnerable constructs. The JS-X-Ray static analysis signal likely flagged this as 'unsafe-regex' based on a general heuristic, but the actual pattern is safe and proportional to its purpose of numeric parsing. No security vulnerability arises from its 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.unsafe-regex
File role
production
Source
app.js:33502

JavaScript analysis reported javascript.download-to-execution

Expected behavior · low confidence

The app fetches data from AI providers and also runs code dynamically. This is normal for an AI chat app that needs to process responses. There's no sign it's downloading and running malicious code.

Technical evidence

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

Contextual assessment: The scanner correlated network retrieval and code execution in a broad range (lines 400-7722). The application uses fetch to communicate with local and remote API endpoints, and dynamically evaluates response data for roleplay generation. No evidence of fetching arbitrary code or executing untrusted input was found in the supplied evidence windows. The correlation is consistent with the project's purpose as an AI roleplay platform.

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:400-7722

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security scanner saw a fake base64 photo value used in a test. It is not dangerous.

Technical evidence

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

Contextual assessment: The 'shady-link' signal at line 1155 corresponds to a test data URI 'data:image/png;base64,IDENTITY' assigned to basePhoto in a unit test for GPTProto photo requests. This is a static test fixture with no actual network destination or credential 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

The security scanner flagged a line inside a block of image data. The flag is a false positive because the data is just an encoded picture, not an actual link.

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 fired at line 115 inside a base64-encoded image data URI. The line is part of a data:image/jpeg;base64,... string for an NPC portrait (media_policy_nisha). Base64 encoding can generate arbitrary sequences that incidentally match suspicious URL patterns. No network destination or fetch call exists at this location.

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.unsafe-regex

Expected behavior · low confidence

This expression helps the game figure out when you're walking into a new room based on story text. It's built with safety limits and won't cause problems.

Technical evidence

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

Contextual assessment: The regex at line 20069 detects narrated player movement from prose. It uses bounded character ranges ([^.!?]{0,20}, [^.!?;,]{1,80}) and a fixed alternation of verbs. The pattern is linear and does not exhibit exponential backtracking. The static signal is likely a 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:20069

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line just checks if the browser successfully encoded an image. It's like making sure a photo was properly saved before using it. No shady links or harmful behavior.

Technical evidence

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

Contextual assessment: The scanner flagged line 2281 under the 'shady-link' rule, but the code is a benign validation check within a client-side image optimization function. It compares the result of canvas.toDataURL('image/jpeg', quality) against an empty or minimal data URL to detect encoding failure. No network request, external link, or suspicious destination is involved. The string 'data:,' is a standard empty data URL returned by some browsers when encoding fails, and its presence here is purely defensive. The scanner signal is a false positive arising from a pattern match against the literal 'data:,' prefix.

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:2281

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test picture placeholder used to make sure photo references are handled correctly in character generation.

Technical evidence

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

Contextual assessment: The flagged string is a static data URI placeholder for a companion's basePhoto used in a test for MCP generation arguments. It is not transmitted to any network; it serves only as test input to verify that reference images are correctly included in the generated request 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:299

JavaScript analysis reported javascript.xray.suspicious-literal

Expected behavior · high confidence

This file stores default settings and instructions for the AI characters. The security scanner flagged some of the long text as suspicious, but it's just normal AI prompts with fancy formatting and special symbols—not anything dangerous.

Technical evidence

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

Contextual assessment: The file file is a large production data file containing structured system prompt objects with long multi-line strings (e.g., XML-like tags, special characters, emoji). The JS-X-Ray suspicious-literal signal is triggered by the presence of unusual string patterns, but manual inspection confirms these are legitimate preset configurations for AI roleplay behavior, not obfuscated or malicious content. No hidden code, encoded data, or concealed execution 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.suspicious-literal
File role
production
Source
presets.js:1

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

Expected behavior · high confidence

This test runs some of the app's own functions in isolation to make sure they work correctly. It only uses pre-written test data, not any outside information, so it's harmless.

Technical evidence

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

Contextual assessment: This candidate flags vm.runInNewContext at lines 249-256 within a test function ('turn snapshots restore timeline state without replacing shared authored geography'). The VM context is populated with statically extracted functions (isPlainObject, safeJsonClone, captureWorldTurnState, restoreWorldTurnState) and a stub function. Inputs are hardcoded test data. No external or untrusted data is involved; it is a standard sandboxed unit test.

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

Expected behavior · high confidence

This code tests whether a local AI server is running. The flagged line sets the server address to whatever the user typed or defaults to localhost. It is not doing anything sneaky like sending your data elsewhere.

Technical evidence

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

Contextual assessment: This scanner alert flagged a URL string in the local connection tester at line 8829. The value is either the user's input from an input field or a default localhost URL. It is used to construct a fetch request for testing connectivity to a local AI model server. The code does not exfiltrate, transform, or send this URL to any external destination outside the user's intended local test. The behavior is consistent with the documented project purpose of testing local model endpoints. No attacker-controlled data flows or concealed network access are 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:8829

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The flagged line sets a default address for a local AI image generation tool. It connects only to your own computer, not to the internet.

Technical evidence

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

Contextual assessment: The flagged URL is a default fallback pointing to a local ComfyUI instance (127.0.0.1:8188). This is neither remote nor malicious; it is the expected default for a local-first generative AI tool that can integrate with ComfyUI.

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:9027

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern reads what you're wearing from story text. It's a straightforward check and not 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 at line 20118 matches phrases like 'you are wearing...' or 'you're dressed in...'. It uses a bounded capture ([^.!?;]{3,80}) and simple optional groups. No unsafe repetition or overlapping alternation is present. The scanner alert is a heuristic flag with no demonstrated exploit.

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:20118

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security scanner flagged a line inside image data. This is a false positive—the line contains encoded picture data, not a real link.

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 fired at line 125 inside a base64-encoded image data URI. The line belongs to a data:image/jpeg;base64,... string for an NPC portrait (media_policy_nisha). Base64 encoding can produce coincidental matches to suspicious URL patterns. No external or dynamic network behavior is present at this line.

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

The security scanner flagged a line inside an encoded image. This is a false alarm—the data is picture content, not a web link.

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 fired at line 135 inside a base64-encoded image data URI. The line is part of a data:image/jpeg;base64,... string for a location background (media_policy_reception). Base64 encoding can create arbitrary byte sequences that match suspicious URL patterns by chance. No actual network request or untrusted destination exists at this location.

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

Expected behavior · high confidence

The app has built-in safeguards against a common JavaScript security issue called prototype pollution. The flagged line is part of a safety check, not a vulnerability.

Technical evidence

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

Contextual assessment: The scanner flagged a prototype pollution signal at line 749. The code at that line is part of the isPlainObject function, which safely checks object type using Object.prototype.toString. The application also includes explicit filtering of __proto__, prototype, and constructor keys in the safeJsonClone function. These protective measures mitigate prototype pollution. No vulnerable patterns were observed in the evidence windows.

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:749

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is the default address to a tool that generates images on your own computer, like Stable Diffusion. It's not an external link.

Technical evidence

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

Contextual assessment: The flagged URL at line 1164 is a default value for localImageBaseUrl in the globalSettings object. This value is used to connect to a local image server (e.g., Automatic1111/stable-diffusion-webui) running on localhost. The project is designed to work with local model servers and services via loopback addresses. Users can change the URL in settings, and the application strips non-loopback addresses via normalizeLoopbackUrl. There is no evidence of exfiltration or unauthorized data transfer.

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:1164

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: Detailed technical wording was omitted by the public report safety filter.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:135

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

The flagged regular expression is used to read stat names and numbers from a text box. It is designed safely with start and end anchors and a lazy search that stops early. Even though a scanner flagged it as potentially risky, the pattern won't slow down or crash the application in practice.

Technical evidence

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

Contextual assessment: The regex '^(.+?):\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))$' is anchored with ^ and $, uses a lazy quantifier (.+?) for the first capture group, and the numeric portion has only two linear alternatives. The anchored and lazy structure prevents exponential backtracking; any failed match involves linear backtracking proportional to input length. The JS-X-Ray 'unsafe-regex' signal is a static heuristic that does not account for anchor or lazy quantifier behavior. No practical ReDoS risk is demonstrated by the supplied evidence.

Impact: none · Exploitability: unlikely

Developer action: none

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

zizmor reported artipacked

Expected behavior · high confidence

The scanner warns about credentials being saved in build artifacts, but this workflow doesn't create any artifacts. The token is used only temporarily to upload the finished file, and nothing gets stored.

Technical evidence

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

Contextual assessment: The artipacked rule flags potential credential persistence through GitHub Actions artifacts. However, this workflow does not use the upload-artifact action or any artifact storage. It directly uploads a built zip file to a GitHub release using gh release upload with the github.token. No credentials are written to an artifact or persisted beyond the step execution. The scanner confidence is low and the evidence does not demonstrate any actual credential exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
zizmor 1.28.0
Rule
artipacked
File role
tooling
Source
.github/workflows/package-current-release.yml:19-22

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a fake image string in a test to see how the application handles photo references—no real data or network activity.

Technical evidence

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

Contextual assessment: The flagged string is a static data URI used to set basePhoto in a companion fixture for test coverage of image request behavior. No external destination receives this value; it is confined to the test's local assertion scope.

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

Expected behavior · high confidence

This is another fake photo string used in a test. It does nothing dangerous — just checks that the app correctly separates two photo fields. Not part of the real application.

Technical evidence

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

Contextual assessment: The candidate is a static string literal `'data:image/png;base64,reference'` used as test fixture data in line 444 of a test file (file). As with the adjacent candidate, JS-X-Ray flagged it due to its data-URI form, but it is never used as an executable URL. It is passed to `normalizeCompanion` in a test only, with no runtime reachability in shipped code. No attacker-controlled input, no network activity, and no exfiltration path exist. The scan signal is a false positive from static detection of a benign literal.

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

The app includes the web addresses of the AI providers it supports (OpenRouter and GPTProto). These are the normal server addresses you need to connect to, not hidden or suspicious links.

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:444

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test checks that the game's travel rules work correctly by running a small piece of the movement logic in a safe sandbox. No real-world data is involved.

Technical evidence

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

Contextual assessment: The vm.runInNewContext call at line 143 runs extracted functions (getExitTargetName, canTravelDirectly) from the application source to test travel restriction logic. The source is obtained through a controlled functionSource helper that extracts known function bodies. No runtime inputs are passed from outside the test, making this a standard testing technique.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:143

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · medium confidence

This pattern cuts extra details off clothing descriptions. It's built with limits and won't freeze 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 20171 is used to split outfit phrases by prepositions like 'against' or 'for'. It contains alternation with optional groups (e.g., `for\s+(?:the\s+)?(?:warmth|cold|...)`). While alternation can sometimes cause backtracking, the input is bounded to prose segments already trimmed. No practical ReDoS 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:20171

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

Expected behavior · high confidence

A test that checks whether the app's HTML escaping function works. It only feeds it a test string, so there is no risk.

Technical evidence

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

Contextual assessment: This candidate flags vm.runInNewContext at line 135 within a test function ('HTML escaping neutralizes stored markup'). The call executes a statically extracted escapeHTML function with a hardcoded HTML string. No user input or network data reaches the context. This is a safe and typical 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:135

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test checks that the game's stat-rolling settings work as expected by running a small piece of the app's configuration logic in a sandbox.

Technical evidence

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

Contextual assessment: This call evaluates a function extracted from file (worldStatRollConfig) inside a context containing only isPlainObject. The purpose is to test that the stat roll configuration correctly disables/enables rollability for resource vs. stat types. The evaluated string is a slice of the project's own source, not user-supplied data. No untrusted inputs are involved.

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

The security scanner flagged a line inside image data. This is a false positive—the line contains an encoded image, not an actual link.

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 fired at line 95 inside a base64-encoded image data URI. The line is part of a data:image/jpeg;base64,... string for a location background (media_policy_bullpen). Base64 encoding can produce byte sequences that coincidentally match suspicious URL detection heuristics. No external domain or fetch 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:95

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

The scanner thought part of this file might be obfuscated, but it's not. The file starts with a normal comment and then has a lot of image data stored as text. That's expected for this type of world file.

Technical evidence

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

Contextual assessment: The scanner flagged 'obfuscated-code' at line 1 with low confidence. Line 1 contains a standard JavaScript comment ('// Generated by scratch/build_policy_panic_world.js. Keep this file before app.js.') followed by an assignment. The file is a generated world definition with embedded base64 image data, which are long strings but not obfuscated code. No actual obfuscation is present; the scanner likely misinterpreted the large data strings. The project uses no obfuscation techniques.

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

This line sets a default address for a local image generator that runs on your own machine. It poses no security risk.

Technical evidence

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

Contextual assessment: The flagged URL is a default fallback pointing to a local image generation server (127.0.0.1:7860). This is the standard loopback address for a local OpenAI-compatible endpoint, expected in a local-first 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:9024

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line just loads a standard SVG namespace address, like telling the browser 'these shapes are SVG shapes'. It is not a link to a shady website and is required for the map drawing feature to work.

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:12718

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The code makes a test connection to a local AI model running on your own computer. This is normal for a local-first app and poses no security risk.

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' flagged line 144 which contains a hardcoded HTTP URL to localhost (127.0.0.1:11434/v1). This is a health-check call to a local Ollama instance in a test file (labs_cognition_audit.js). The URL is the expected base URL for a local model server, consistent with the project's local-first design. There is no data exfiltration; the request is internal to the user's machine. The signal is a false positive in this context.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · low confidence

This file is a build tool for a game world, and its code is written in a clear, straightforward way. The security scanner's warning about obfuscation is incorrect; the code does not hide anything.

Technical evidence

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

Contextual assessment: The supplied code is a build script that processes image assets and generates a world file. The code is plain, readable JavaScript using standard Node.js modules (fs, path, sharp) with no obfuscation techniques such as string encoding, eval, or minification. The JS-X-Ray obfuscated-code signal is a false positive, likely triggered by the repetitive structure of the asset map or the FNV-1a hash function implementation. No concealed execution, credential handling, or network calls are present in the visible portion.

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a normal part of how the app handles real-time AI responses. It watches for chunks of text that start with 'data: ' coming from the AI provider, which is a standard way to receive streaming messages. No suspicious activity is happening, it's just reading the AI's reply as it arrives.

Technical evidence

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

Contextual assessment: Line 6662 parses Server-Sent Events (SSE) streaming by checking if each line starts with 'data: '. This is the standard SSE protocol format used by OpenAI-compatible and other streaming AI APIs, and is required for processing streaming response chunks from the user's configured text generation provider (e.g., OpenRouter, Ollama, GPTProto). The scanner rule 'shady-link' may have matched the token 'data:' as a false positive for a data URI or base64 payload indicator, but the actual code performs no network exfiltration, data URI evaluation, or scripting from untrusted content. The 'data:' prefix is used solely to extract JSON payload lines from the stream.

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:6662

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test file runs a small piece of the game's own quest logic inside a safe sandbox to check that it works correctly. Since the code being run comes from the project itself and the sandbox blocks access to the file system and network, this is a normal and safe testing technique.

Technical evidence

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

Contextual assessment: The candidate uses vm.runInNewContext to execute a slice of the application's own quest engine source code (app) in a restricted sandbox context. The context only contains console, showToast, and module flags; it excludes require, process, fs, and other dangerous globals. The executed code is project-owned, not attacker-controlled. The file is a test file (file) and the sandbox is appropriate for module isolation testing. No untrusted input reaches the dynamic execution point, and no sandbox escape is demonstrated or plausible given the controlled source and restricted context.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/quest_engine_stress_test.js:55-66

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This check simply looks at text to see if it starts with a 'data:image/...' or 'blob:' prefix, which is a normal way to identify an already-embedded image. The pattern is fixed and cannot be tricked into causing performance problems. It's just a routine validation step.

Technical evidence

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

Contextual assessment: The regex at line 30428 is a static literal pattern matching valid data: and blob: URI prefixes for image sources. It is not constructed from user or untrusted input; it is a fixed pattern used for validation. The regex has no nested quantifiers or exponential backtracking constructs, making ReDoS exploitation impractical. The function normalizeGeneratedImageSource applies this regex to values derived from AI model responses or user-provided image data, which is the intended and disclosed purpose of the function. No unsafe dynamic regex construction or injection 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:30428

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

Expected behavior · high confidence

A test that runs parts of the app's logic in a sandbox to verify they behave correctly. It does not run any code from outside or take any input from users, so it is safe.

Technical evidence

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

Contextual assessment: This candidate flags vm.runInNewContext at line 240 within a test function ('world rule profiles make every mechanical subsystem optional'). The call executes various statically extracted application functions (getWorldTimeData, and later for snapshot tests). No external or untrusted data is supplied. The VM usage is purely for unit testing.

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 line is part of an automated test that checks whether the application's code includes a certain repair step. The 'unsafe regex' flag is a false alarm: the regex is only used on the app's own source code during testing, not on anything a user or attacker could control.

Technical evidence

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

Contextual assessment: The flagged line is a static regex literal used inside a Node.js assertion to verify that a specific source-code pattern (`normalizeAuthoredWorld(world)` following a lorebook array check) exists in the application's own source. The regex is hardcoded and operates on a controlled string (`app` source) at test time. There is no user input, untrusted data, or dynamic regex construction involved, so the regex cannot be exploited for ReDoS or injection. This is a standard test-time pattern check and presents 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.unsafe-regex
File role
production
Source
scratch/authored_world_audit.js:172

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · low confidence

This pattern checks for 'I'm wearing...' in your story text. It's safe and carefully limited.

Technical evidence

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

Contextual assessment: The regex at line 20226 matches first-person wearing declarations with contractions. It has bounded quantifiers and no overlapping repetition. The 'unsafe-regex' signal is a conservative static analysis warning without evidence of 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:20226

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The scanner flagged a placeholder base64 image used in a test. It is not a security concern.

Technical evidence

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

Contextual assessment: The 'shady-link' signal at line 1154 corresponds to a test data URI 'data:image/png;base64,PROFILE' used as a fake profile photo in a unit test. This is a static test fixture, not a runtime network call or hidden transfer.

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

This default address points to ComfyUI, a tool that runs AI image workflows on your own computer. 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 flagged URL at line 1194 is the default fallback passed to normalizeLoopbackUrl for comfyUiBaseUrl. The ComfyUI integration connects to a local workflow engine running on 127.0.0.1:8188. This is a hard-coded loopback address consistent with the project's design; users can change it in settings. normalizeLoopbackUrl restricts URLs to loopback addresses, preventing unintended external connections. No malicious data flow or untrusted 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
app.js:1194

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

The scanner thought there might be a connection between downloading something and running code, but this file does not actually download anything. It only runs the app's own test code in a sandbox.

Technical evidence

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

Contextual assessment: This candidate flags a correlation between network retrieval and code execution across lines 97-419. However, the supplied evidence contains no network retrieval primitive (no fetch, XMLHttpRequest, http/https module import, or similar). The file only uses require('fs'), require('path'), and require('vm'). The 'download-to-execution' signal is a false positive; no data flows from a network source into vm.runInNewContext. The code execution sinks (vm.runInNewContext) consume only statically extracted test strings.

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 is a test that checks the system blocks external AI endpoints. The flagged URL is just a test example, not a real attack.

Technical evidence

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

Contextual assessment: The scanner rule flagged a literal URL in a unit test assertion. The test deliberately uses a remote URL to verify that the normalizeConfig function replaces it with the local Ollama endpoint. This is a security safeguard test, not a 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.shady-link
File role
production
Source
scratch/labs_cognition_audit.js:44

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

Expected behavior · high confidence

Detailed wording was omitted by the public report safety filter.

Technical evidence

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

Contextual assessment: The vm.runInNewContext call at line 47 is part of a test sandbox that executes a snippet extracted from the project's own app.js. The sandbox contains only structuredClone, JSON, and utility functions. No dangerous APIs or dynamic user input are present. This is a standard unit-test pattern with no security implications.

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

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test uses vm to quickly check that a default preset is available when a new game starts. No external or user data is run.

Technical evidence

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

Contextual assessment: The vm.runInNewContext call at line 97 executes a hardcoded presets source variable (DEFAULT_SYSTEM_PRESETS) to verify that a starter world preset ID is valid. The executed code is a static variable defined elsewhere in the file, not from user input or external fetch. This is a safe test harness pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:97

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This code uses a simple pattern to find a specific tag in AI-generated text. The pattern is safe and won't cause the program to slow down or crash, even with unusual 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 28851 is used to detect the start of an embedded tool call tag in model-generated text. The pattern contains no nested quantifiers or overlapping alternations that would cause catastrophic backtracking. ReDoS risk is negligible. This is a legitimate parsing function for the project's companion tool call protocol.

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:28856

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This code uses a regular expression as part of a tool that reads and organizes the application's own source code. Since only the developer's own code is processed, there is no way for an attacker to trigger a problem here.

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 193 is part of the tool's own static analysis logic. It replaces regex literals in source code with placeholders to avoid misinterpreting them as function calls. The input to this regex is the project's own file source, which is controlled by the developer. No attacker-supplied or untrusted user input reaches this pattern. Therefore, the ReDoS risk flagged by JS-X-Ray is not exploitable 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:193

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is just the default address for a local AI server on your own machine, like a phone number for your own computer. You can change it to any other local server.

Technical evidence

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

Contextual assessment: The default base URL at line 16 is a hardcoded loopback address for a local Ollama-compatible API server. This is an expected and conventional default for local-first applications that allow users to substitute their own endpoint. The normalizeLoopbackBase function later validates any user-provided URL to ensure it stays on loopback. The scanner signal does not indicate exfiltration or harmful intent; the URL is safe and controlled.

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:16

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

The code talks to a local AI server to get JSON data, but never runs any code that the server sends back. It only reads the data, so there is no risk of running harmful code from the network.

Technical evidence

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

Contextual assessment: The file contains a fetch call to a configured loopback endpoint for obtaining JSON structures from a local model server. There is no dynamic code execution sink such as eval, Function, script injection, or command execution. The only code execution path is calling window.HordeLabsEmbedded.completeStructured, which is a pre-existing host object used only in embedded mode and is not supplied by network responses. All response handling is limited to JSON parsing and string extraction. The scanner correlation of network retrieval with a code execution sink is a false positive; no actual download-to-execution path exists in the supplied code.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test picture used to check that character profile photos are preserved in exports, but private chat photos are removed.

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
scratch/companion_audit.js:328

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test that runs one of the app's own helper functions in a safe sandbox to check if it works correctly. No harmful code is involved.

Technical evidence

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

Contextual assessment: The file is a test suite in a scratch directory. Line 240 uses vm.runInNewContext with a static function source extracted from the application's own code (getWorldTimeData). No user-provided or external input reaches the evaluated string. The vm context is an empty object, and the function is a deterministic internal utility. This is standard unit-test isolation for a self-contained function and does not introduce code injection risk.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:240

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a built-in address to check for a local AI server called Ollama. It only looks at your own computer and doesn't go to the internet. That's exactly what it's supposed to do.

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
labs-core.js:391

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 15, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test runs several of the app's own internal functions together in a sandbox to make sure the snapshot feature works. No user data or outside code is used.

Technical evidence

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

Contextual assessment: Lines 249-256 wrap four deterministic helper functions (isPlainObject, safeJsonClone, captureWorldTurnState, restoreWorldTurnState) and a stub for bumpMemoryEpoch into a single vm context for a unit test. All source strings originate from the application's own bundle, not from any external or untrusted source. The test validates snapshot/restore behavior with fixed inputs. No dynamic or attacker-controlled data is evaluated.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:249-256

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

Expected behavior · high confidence

This is a test file that runs a piece of the app's own code in an isolated sandbox to check if the world map works correctly. It's not exposed to users or attackers, so it's a safe and expected use of JavaScript's VM feature.

Technical evidence

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

Contextual assessment: The file `file` is a standalone test harness that uses `vm.runInNewContext` to execute a statically extracted portion of the application's own world map engine source code. The extracted code is hardcoded and derived from the same repository's `file`; no user-supplied or external untrusted input reaches the VM context. The context object is initially empty, and the executed code only defines helper functions and assigns them to the context. This pattern is a legitimate testing technique for isolating and validating specific logic without side effects. While `vm.runInNewContext` can execute arbitrary code, in this specific usage there is no data flow from an attacker or untrusted source, and the test does not run in a production user-facing context. No security risk is demonstrated.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regex is used to detect roleplay actions like "*smiles*" so they can be removed from chat text. It only runs on very short pieces of text (under 140 characters) and starts matching from the beginning, so even if it takes a few extra steps to decide something doesn't match, it won't cause any noticeable delay or security problem.

Technical evidence

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

Contextual assessment: The regex `actionCue` is anchored with `^` and applied to short trimmed substrings (max 140 characters) extracted from companion replies. While the `[a-z]+ing\b` alternative could cause backtracing, the anchored pattern and bounded input length (≤140 characters) limit worst-case step count to O(n), which is negligible in a client-side context. No evidence of exploitable denial-of-service or data exposure was supplied. The scanner's static signal does not account for these contextual constraints.

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:29368

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

Expected behavior · high confidence

A test that checks whether CSS sanitization functions work. It only uses test strings, so it is safe.

Technical evidence

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

Contextual assessment: This candidate flags vm.runInNewContext at line 143 within a test function ('CSS-facing values reject declaration injection'). The call executes statically extracted functions cssUrl and cssColor with hardcoded test strings. No user or network input is involved. This is a legitimate unit test.

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

The security scanner flagged a line inside a block of image data. This is a false alarm—the data is an encoded picture, not a real link.

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 fired at line 155 inside a base64-encoded image data URI. The line is part of a data:image/jpeg;base64,... string for an NPC portrait (media_policy_wade). Base64 encoding can produce arbitrary sequences that incidentally match suspicious URL patterns. No network request or external destination exists at this location.

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 pattern finds the end of a tag in AI text. Like the previous one, it is safe and won't cause performance issues.

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 28856 is used to detect the closing tag for an embedded tool call. Its structure mirrors the opening tag pattern and is similarly safe from ReDoS. No user-facing vulnerability is introduced.

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:28851

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app sends a header with its own website address when talking to OpenRouter. This is a normal way to identify the app, not a shady 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 shady-link at line 613. The evidence window shows the attributionHeaders function (with the horde-studio.ai URL) is defined near this line. The URL is the project's own domain, used for OpenRouter attribution. This is consistent with the project's stated integration and is not suspicious.

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:613

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app fetches data from a small helper program running on your own computer. The address is localhost, which is safe.

Technical evidence

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

Contextual assessment: The scanner flagged a shady-link at line 427. The evidence shows the mcpBridgeRequest function using fetch to call the local MCP bridge (default localhost URL). The base URL is user-configurable and defaults to a local loopback address. This is a legitimate local bridge communication, not an external shady link.

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:427

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test runs the world-window rotation function in a sandbox to confirm it works for large worlds. Only the app's own code is involved.

Technical evidence

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

Contextual assessment: This vm.runInNewContext invocation extracts the rotatingWorldWindow function from the project's own file source and executes it in a context with only safe globals (Math, Number, Array). The test verifies that rotation produces different orderings for different seeds. No external or user-controlled code is executed; the evaluated string is a static slice of internal production logic.

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

This is another test using a fake image URL to check how the app handles removing an image reference. It is safe test data, not an actual threat.

Technical evidence

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

Contextual assessment: The 'shady-link' scanner signal (javascript.xray.shady-link) flagged a data URI at line 1375 in the test file companion_audit.js. The URI ('data:image/png;base64,REFERENCE') is a static placeholder used in a unit test for reference-free recovery. It is not attacker-controlled, not used in production, and not exfiltrated. The test verifies that removing the reference image yields a standalone prompt. No 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.shady-link
File role
production
Source
scratch/companion_audit.js:1375

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: The file is a regression and limit stress test for the semantic world-map engine. It uses Node's built-in vm.runInNewContext to execute a sandboxed subset of the application's world-map source code. The sandbox context is an empty object ({}), and the executed code consists of helper functions and the extracted source. No untrusted user input is provided; all data is hardcoded test data. The vm module is the standard Node.js sandboxing mechanism and is appropriate for test isolation. There is no evidence of eval or dynamic code execution with untrusted content.

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

The code is reading a streaming response from an AI model, which is a normal feature of AI chat applications. It does nothing suspicious.

Technical evidence

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

Contextual assessment: The scanner flagged the string 'data: ' at line 3098 as a 'shady-link' pattern. However, this code is parsing a Server-Sent Events (SSE) stream from an AI text generation API (as shown in the surrounding context: POST request with streaming response, parsing lines starting with 'data: ' and extracting JSON delta content). This is standard, expected behavior for consuming LLM streaming responses and does not indicate any data exfiltration or malicious network access. No external untrusted destination 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:3098

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test photo placeholder to ensure older photo data is handled properly during updates.

Technical evidence

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

Contextual assessment: The flagged string is a static data URI used in a test to normalize a companion object. It provides a legacy basePhoto value for migration assertions. No external transmission occurs; the test only validates that profilePhoto and basePhoto are correctly assigned.

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

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 35, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

A scanner flagged a web address in the code, but it is just a default link to a program running on your own computer. That is normal for this kind of software.

Technical evidence

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

Contextual assessment: Line 232 defines a constant default URL pointing to the local Python bridge at 127.0.0.1 on port 43127. This is a loopback address with no external reachability or sensitive data exposure. The project is local-first and runs its own bridge on that endpoint. The constant is used only when no custom URL is configured, and the code validates loopback URLs before 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:232

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This code removes a temporary audio URL after preview playback, which is normal cleanup. It does not send data anywhere or do anything suspicious.

Technical evidence

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

Contextual assessment: The JavaScript signal 'shady-link' was triggered on line 31560, which calls URL.revokeObjectURL on a blob: URL during TTS audio preview cleanup. This is standard browser API usage for releasing object URLs after audio playback, not unusual or suspicious behavior. No actual URL or link is constructed or used; the literal 'blob:' is used only for a string prefix check. The matched literal was not retained, but the context confirms the operation is benign and expected for a TTS preview 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:31560

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app uses a default address for a local image server on your own computer—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: This line sets a default URL for a local image generation server (loopback address 127.0.0.1:7860). It is a configuration default, not an external or malicious link.

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:8685

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

The code uses a regular expression to read what audio format an AI service wants. The expression is simple and won't cause performance problems, even if someone sends weirdly crafted text.

Technical evidence

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

Contextual assessment: The regex at line 31404 is used to parse TTS API error messages for a required audio format. It matches simple literal strings like "only supports mp3" or "accepted: pcm" with optional quotes and whitespace. There are no nested quantifiers, overlapping alternatives, or other patterns that cause exponential backtracking. JS-X-Ray's unsafe-regex signal is a false positive for this pattern; the regex executes in linear time relative to input length. Input comes from API error responses, which are short strings, and even with adversarial input the performance impact is negligible.

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:31404

zizmor reported artipacked

Expected behavior · high confidence

This warning says the workflow might save secret credentials in a build artifact, but the workflow doesn't upload any artifacts at all, so the warning is a false alarm.

Technical evidence

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

Contextual assessment: The 'artipacked' rule flags credential persistence through GitHub Actions artifacts. The supplied workflow contains no actions/upload-artifact step or any other artifact-upload mechanism. The scanner likely produced a false positive due to heuristic matching with an unpinned action reference. No credential-leakage path exists in the evidence.

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

Expected behavior · high confidence

This test uses a safe sandbox to verify a small piece of app logic. It cannot access sensitive data or cause harm.

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 84 is a test that executes a function extracted from the project's own app.js. The sandbox is limited to a single helper function (isPlainObject). No user-controlled data reaches the sandbox. The pattern is typical for isolated testing and does not pose a 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.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 is a test picture inside a simulated chat history, used to confirm that private photos are removed when saving character archives.

Technical evidence

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

Contextual assessment: The flagged string is a static data URI for a generated photo in a timeline message used to test archive export. The test verifies that private generation data is not included in the exported payload. No network or attacker-controlled 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.shady-link
File role
production
Source
scratch/companion_audit.js:351

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 55, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

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 file uses vm.runInNewContext to execute a static code snippet from a local variable (app) within a sandboxed context containing only console, a toast stub, and project-specific helper objects. This pattern is appropriate for isolating module code during stress testing; the executed code and context are both controlled by the test file itself, not by external user input or an untrusted source. The scanner signal reflects a static pattern match for unsafe-vm-context, but no evidence of untrusted data being passed to vm.runInNewContext is present in the supplied source.

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

The code checks if the server address is on your own computer by comparing it to well-known local addresses like 'localhost'. This helps show a warning if you try to connect to another machine. It is harmless and expected.

Technical evidence

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

Contextual assessment: This scanner alert flagged the string literal list of loopback hostnames at line 8835. These values are used to determine whether the user-specified URL resolves to a local address, which informs a CSP warning displayed to the user. The list is static and contains standard loopback identifiers. It does not introduce any network access or data flow. The alert is a false positive from static analysis rules for URL-like patterns.

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:8835

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security scanner flagged a test value that looks like a data URI. It is only used in a test and poses no risk.

Technical evidence

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

Contextual assessment: The 'shady-link' signal at line 1124 corresponds to a test data URI 'data:image/png;base64,PROVIDER_REFERENCE' used as a base photo reference in a unit test for image API request building. It is a static fixture with no real provider reference or external 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:1124

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regex checks if a line of code ends with a semicolon while reading the app's own source files. Because only the app's own code is checked, an attacker cannot use it to slow things down.

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 239 is used to test whether a line of source code ends with a semicolon (optionally followed by a comment). It operates on trimmed lines extracted by the tool from the project's own file file. The input is developer-controlled source code, not external data. There is no demonstrated path for an attacker to supply input to this regex, so the ReDoS concern does not apply here.

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

This is a false alarm. The scanner thought a line might contain a suspicious link, but it's actually a long string of image data stored directly inside the file. That's normal for this kind of game world file.

Technical evidence

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

Contextual assessment: The scanner flagged a 'shady-link' pattern at line 75, but the context shows this line contains an embedded base64-encoded JPEG image as a data URI. Data URIs are not network links; they are inline image data bundled as part of a world definition file. No external network request is made. The project's purpose is to provide a local-first AI roleplay platform with persistent worlds, and embedding media assets is expected and documented behavior.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1
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 URL is for checking if KoboldCpp, another local AI server, is running on your machine. It only looks at your own computer and is harmless.

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
labs-core.js:394

JavaScript analysis reported javascript.credential-to-network

Expected behavior · high confidence

The app sends your API keys to the AI providers you choose (OpenRouter, GPTProto, or a local server). This is how it pays for and accesses those services. The keys are not sent anywhere else.

Technical evidence

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

Contextual assessment: The scanner correlated credential access (apiKey, gptprotoApiKey, localApiKey) with outbound network sinks. The code in providerAuthHeaders reads these keys and attaches them as Bearer tokens to API requests to the user-configured providers. This is expected behavior for an application that authenticates to external AI services. The credentials are only sent to the provider endpoints the user selects (OpenRouter, GPTProto, or local). No evidence of exfiltration to unauthorized destinations was found.

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:400-1283

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This line cleans up a temporary audio blob after playing it, which is normal and helps save memory. It is not suspicious or dangerous.

Technical evidence

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

Contextual assessment: Line 31642 calls `URL.revokeObjectURL()` on a blob URL after playback completes. This is standard JavaScript practice to release memory associated with an object URL when it is no longer needed. The 'shady-link' scanner signal is a false positive in this context; no external/network destination is involved, no credentials are transmitted, and the operation occurs entirely within the browser's blob URL lifecycle. The function `playCompanionVoiceMessage` is part of the application's TTS voice note feature, which legitimately generates and plays audio blobs.

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:31642

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This is a test photo placeholder used to check that character reference photos are excluded from exported archives.

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
scratch/companion_audit.js:327

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

Expected behavior · high confidence

A test that verifies the app correctly picks a starter world preset. It only uses the app's own code, so it is harmless.

Technical evidence

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

Contextual assessment: This candidate flags vm.runInNewContext at line 125 within a test function ('starter world points to an installed preset' duplicate detection). The call executes statically extracted preset source with a hardcoded string. No external input is involved. This is a standard unit-test usage.

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.unsafe-regex

Expected behavior · low confidence

This pattern reads when you write 'my outfit is...' in the story. It's a simple, safe expression.

Technical evidence

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

Contextual assessment: The regex at line 20228 matches 'my outfit is ...' phrases. It uses a bounded capture ([^.!?;]{2,100}) and a simple optional group. No unsafe repetition or nested quantifiers exist. The scanner alert is not supported by concrete exploit evidence.

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:20228

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

The scanner thought parts of this file might be hidden or scrambled, but looking at the actual text shows it's just normal instructions and settings for the AI, written in plain English with some symbols. Nothing is actually hidden.

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 is raised with low confidence against presets.js. Inspection of the file content shows clean JavaScript object literals with readable property names and string values. The long multi-line strings contain HTML-like tags, Unicode characters, and structured instructions, which may trigger heuristic obfuscation detection, but there is no actual variable renaming, string splitting, or encoded payload. The content is functionally transparent and serves its intended purpose as a preset definition 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.obfuscated-code
File role
production
Source
presets.js:1

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test that checks whether the tool that pulls out pieces of the program's own code works correctly. It tries to parse each extracted snippet as a function using `new Function`, which is a normal JavaScript way to check if code is valid. Only the project's own source code is used, not anything a user or attacker could control. This is not a security issue.

Technical evidence

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

Contextual assessment: The `new Function()` call at line 180 appears in a test suite function that validates the parser correctly extracts function source code. The input (`entry.source`) is sourced from the project's own source files via a deterministic extraction process, not from any user-supplied or external data. The test iterates over pre-extracted function declarations and checks that each parses without error. This is a standard testing pattern for ensuring code extraction correctness. There is no runtime path in production where user-controlled input reaches `new Function()` through this code; the file is a test harness not shipped as functional application code.

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

The security scanner flagged a line inside image data. This is a false positive—the line contains an encoded image, not an actual web link.

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 fired at line 105 inside a base64-encoded image data URI. The line is part of a data:image/jpeg;base64,... string for a location background (media_policy_records). Base64 encoding can generate byte sequences that coincidentally match suspicious URL detection patterns. No actual network access or untrusted 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:105

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This checks for LM Studio, a popular local AI app, at a standard address that only points to your own computer. It's a helpful shortcut and does nothing harmful.

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
labs-core.js:392

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This code cleans up any leftover tags in AI text. The search pattern is safe and won't cause problems.

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 28906 searches for any remaining dangling tool call or argument tags that were not consumed by the main extraction loop. It combines two alternatives without nested quantifiers, so ReDoS is not a practical concern. The pattern is part of a necessary cleanup step in the tool call parser.

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:28906

JavaScript analysis reported javascript.xray.obfuscated-code

Expected behavior · high confidence

The code simply sets up a list to record errors if they happen. It's written in plain, readable JavaScript, not hidden or scrambled.

Technical evidence

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

Contextual assessment: Line 1 of file shows `window.__hordeRuntimeErrors = window.__hordeRuntimeErrors || [];` — a standard forward-compatible initialization for a runtime error tracking array. The double-underscore prefix is a common JavaScript convention for internal or private globals, not obfuscation. There is no minification, string encoding, dynamic code execution, or concealment of logic. The scanner's low confidence and the clear readable source indicate 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
app.js:1

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The app uses a default address for ComfyUI, a local creative tool, on your own computer—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: This line sets a default URL for a local ComfyUI workflow execution server (loopback address 127.0.0.1:8188). It is a configuration default for a local creative tool integration.

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:8611

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

This default address is for ComfyUI, an AI image generator that runs locally. It's meant for your own computer, not an external site.

Technical evidence

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

Contextual assessment: The flagged URL at line 1167 is a default value for comfyUiBaseUrl in the globalSettings object. This is the address for a local ComfyUI instance that generates images and media. The project's README documents this as an expected configuration step. The URL is hard-coded only as a default and is never sent to an external server by default; it is used only to configure a local service that the user runs. normalizeLoopbackUrl enforces loopback-only usage.

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:1167

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · medium confidence

This regex is used to spot important story events like a character dying. It's a fixed pattern, not something built from user input. While some regex patterns can be slow on tricky inputs, this one is simple and applied to short sentences, so it's not a practical security risk.

Technical evidence

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

Contextual assessment: The static regex at line 7993 is a fixed pattern used to detect decisive narrative events like death or destruction within a fallback chronicle builder. The pattern contains an optional group with a word-character-and-space quantifier, but the overall structure does not exhibit nested quantifiers or alternations that would cause exponential backtracking on moderate-length narrative sentences. The code further limits sentence length to 420 characters, reducing any theoretical ReDoS surface. No dynamically constructed regex or untrusted input reaches the regex constructor; the pattern is compile-time constant. The JS-X-Ray unsafe-regex signal is a conservative alert that does not account for the bounded input 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:7993

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The scanner saw a fake base64 image value in a test. It is not a real threat.

Technical evidence

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

Contextual assessment: The 'shady-link' signal at line 1223 corresponds to a test data URI 'data:image/webp;base64,AAAA' used as a fake inlineData response in a unit test for GPTProto image extraction. This is a static test fixture, not a real base64 payload or 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:1223

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

This regex finds function definitions in the app's own code so the tool can track them. Since it only processes code written by the developer, it cannot be abused by an outsider.

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 211 defines the pattern for matching async and regular function declarations in JavaScript source. It is used by the tool to identify functions declared in the project's file file. The input is entirely the project's own source code, under the developer's control. There is no exposure to untrusted user input, so the flagged ReDoS potential is not a real vulnerability 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:211

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This test makes sure the app's HTML escaping function works against a known attack string. It runs a tiny piece of the app in a sandbox to confirm safety.

Technical evidence

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

Contextual assessment: The vm.runInNewContext call at line 115 extracts and runs the escapeHTML function from the application source to test its ability to neutralize stored markup. The sliced source is fixed and the test input is a hardcoded string. This isolated execution verifies a security control without exposing any runtime attacker control.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
scratch/engine_audit.js:115

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 115 is a test that executes a function extracted from the project's own app.js. The sandbox contains only Set, RegExp, and String globals. No external input or dangerous capabilities are provided. The activity is standard for testing in isolation and does not present a security concern.

Impact: none · Exploitability: unlikely

Developer action: none

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

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: This candidate flags vm.runInNewContext at line 115 within a test function ('CSP blocks inline scripts and plugins') – but actually the proof shows the call is at line 115 within the 'starter world points to an installed preset' test section (from the bounded evidence window). Regardless, the call uses statically extracted code and a hardcoded string built from app.slice. No dynamic or external data is passed to the VM. This is safe testing behavior.

Impact: none · Exploitability: unlikely

Developer action: none

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

JavaScript analysis reported javascript.xray.shady-link

Expected behavior · high confidence

The security check flagged a line of code that checks whether a piece of streaming data starts with 'data:'. This is a completely normal and expected part of reading a streaming response from an AI provider — it's not a shady link or anything harmful. The warning is a mistake.

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' triggered on a line inside processWorldStreamLine that parses Server-Sent Events (SSE) from an AI provider's /chat/completions streaming endpoint. The line 'if (!line.startsWith('data:')) return;' is standard SSE parsing logic and contains no link, URL, or external destination. The matched literal values were not retained by the scanner, and no evidence of a shady link, exfiltration, or unauthorized network access is present in the provided code context. This is a false positive caused by the rule matching the literal string 'data:' or a pattern within it.

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:19198

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · medium confidence

This line uses a simple pattern to read version numbers. It does not create 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 /\d+(?:\.\d+){0,3}/ extracts up to four numeric version components. It has no nested quantifiers or backtracking traps; it is not vulnerable to ReDoS. Input comes from release tag strings, not attacker-controlled data of arbitrary length.

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:9083

Related contextual observations

Unsafe regex pattern for image validation

low risk · medium confidence

The image-checking code uses a pattern that could be tricked into freezing your browser if someone provides a specially made long image string. This is a minor performance concern.

Technical assessment

The regex used to validate world media asset data URIs (line 993) may be vulnerable to ReDoS. While the pattern is simple, it contains multiple repeating character classes and optional groups that could cause catastrophic backtracking on crafted inputs. Although the input is user-controlled, the scope is limited to world editing and the impact is client-side performance degradation. No proof of active exploitation.

Impact: low · Exploitability: plausible

Developer action: Replace the regex with a simpler check, such as verifying the string starts with 'data:image/' and then doing a minimal validation of the remaining format. Also impose a reasonable size limit on asset.data before regex testing.

Sources:

Scanner false positive on default loopback URLs and popup window

low risk · high confidence

The scanner flagged some default local addresses and a popup window as suspicious, but they are actually normal parts of how the app connects to local services on your computer.

Technical assessment

The three flagged lines contain either a standard blank popup window for OAuth or default localhost URLs for local image generation and ComfyUI services. These are legitimate and expected in a local-first creative studio application. The scanner signal 'shady-link' is a false positive in this context.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Multiple unsafe regexes in movement parsing function

low risk · medium confidence

Several patterns in the movement detection code can cause the app to freeze if someone types a long or tricky sentence. This is a performance bug, not a data theft risk.

Technical assessment

The `extractUserMovementTarget` function in file contains several regex patterns (lines 17734, 17736, 17742, 17756, 17766) that are susceptible to catastrophic backtracking (ReDoS). One pattern (line 17737) appears safe. These regexes process user-supplied roleplay text to detect movement commands. While the attacker is the user themselves (self-application), crafted input could cause significant UI freeze. The risk is low because impact is temporary browser tab unresponsiveness and the user controls their own input. However, the patterns should be hardened to prevent accidental performance issues.

Impact: low · Exploitability: plausible

Developer action: Review all regexes in extractUserMovementTarget and replace complex patterns with simpler alternatives. Use input length limits (e.g., max 200 characters) before regex matching. Consider using RegExp protection libraries or switching to string methods for parsing.

Sources:

False positive static analysis flags for safe regular expressions in tool call parser

low risk · high confidence

The security scanner raised warnings about some text patterns in the code, but looking at the actual patterns shows they are safe and won't cause any slowdown or crash. They are just used to find specific tags in AI messages.

Technical assessment

The static analysis tool flagged three regular expressions as potentially unsafe. However, review of the actual patterns shows they are simple alternations and optional character matches without nested quantifiers or overlapping alternations that would cause catastrophic backtracking. The scanner may have a conservative heuristic for patterns containing alternation and optional groups, but the actual code does not present a ReDoS vulnerability. These are legitimate parsing patterns for extracting embedded tool calls from AI model output.

Impact: low · Exploitability: unlikely

Developer action: No change required; the patterns are safe and the scanner alert is a false positive. If desired, add a comment to suppress the warning in the scanner configuration.

Sources:

Fetch for image embedding is within project purpose

low risk · high confidence

This fetch downloads a picture from the AI service you picked, so the picture can be stored right in your world file. That's how the app is meant to work.

Technical assessment

The fetch at line 30912 inside makeWorldVisualPortable retrieves a generated image from a provider endpoint chosen by the user. The function is only called when the user has configured an image provider and the image is not already a data URL. The fetched data is converted to a data URL and embedded in the world asset storage, not sent to any third party. This network access is proportional to the project's stated purpose of making generated images portable for world saves.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

URL validation reinforces loopback-only policy

low risk · high confidence

The app double-checks that the AI server address always points back to your own computer, even if someone tries to set a different address. This keeps your data local.

Technical assessment

The normalizeLoopbackBase function at lines 45-58 uses the whitelist check on line 49 to enforce that any base URL used by the cognition system resolves to a loopback address. This prevents accidental or surreptitious data exfiltration to external servers. The function is applied during configuration normalization, ensuring that even if a caller supplies a non-loopback URL, it is replaced with the safe default.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Scanner false positive on base64-encoded game data

low risk · high confidence

The scanner got confused because the game data looks like it contains links when read as plain text, but it's really just encoded pictures and information for a game inside the app. There is no actual link that sends data anywhere.

Technical assessment

The entire content of line 2 is a base64-encoded data structure containing images and metadata for the Policy Panic mini-game. The 'shady-link' rule matched on a substring that resembles a URL when interpreted as plain text, but no actual link exists in the decoded data that is used for network communication. This is a static analysis artifact with no security relevance.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Static scanner signals are false positives from embedded base64 image data

low risk · high confidence

All the security warnings in this file are false alarms. The file contains pictures stored as text strings, which look suspicious to automated scanners but are completely normal for a game world file. No actual security issue exists.

Technical assessment

All eight scanner signals (7x shady-link, 1x obfuscated-code) originate from the same file, which is a generated world definition containing 13 embedded base64-encoded JPEG images as data URIs. The scanner pattern 'shady-link' likely matched the data: URI scheme or the long base64 string, but data URIs are not network links and pose no security risk. The 'obfuscated-code' signal at line 1 with low confidence is also a false positive; the file uses no obfuscation. The context shows the file's structure: a comment, then a well-formed JSON object with image data properties. This is expected behavior for a pre-built world asset in a local-first creative studio.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Simple hash function for file naming, not cryptographic

low risk · high confidence

The code includes a small function to create short labels for files; it's not trying to be a secure password hasher.

Technical assessment

The `hashData` function (lines 26-34) implements a simple FNV-1a hash used to generate a compact identifier for asset content. This is not used for security purposes; it is a common pattern for caching or deduplication. The stride-based sampling for long strings reduces computation cost. No cryptographic weakness is relevant here.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Build script uses legitimate image processing library

low risk · high confidence

The code uses a regular image editing tool (sharp) to prepare pictures for the game, which is exactly what you'd expect.

Technical assessment

The script imports `sharp`, a well-known image processing library, and uses it within normal parameters: converting PNG to JPEG, resizing, and writing output. This is consistent with the stated purpose of preparing game assets for a 'policy panic' world.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Test data URIs in companion audit tests

low risk · high confidence

Every flagged string is a fake picture used only in automated tests. These are not real images and never leave the test environment. There is no security concern.

Technical assessment

All eight flagged strings are static data URI test placeholders used in companion unit tests within a test file. They serve as dummy photo or image fields for assertions on normalization, export, archive, and request-building functions. No value originates from untrusted user input, is transmitted over a network, or reaches an external endpoint. The scanner's shady-link signal overmatches test fixtures containing base64-encoded example images.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Scanner false positive on security test assertion

low risk · high confidence

The security scanner mistook a test URL for a real shady link. The URL is only used to confirm the app blocks it.

Technical assessment

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

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity