TavernKeeper Scan Report

ZDOSt/Story-Engine

Commit ab3b8cb Reviewed

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

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

0 immediate danger 0 material 27 low

What this review found

No material or immediate-danger item was identified.

Minor cautions

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
character-sheet-validation.js:108

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
scene-item-state.js:443

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
prose-guard-edits.js:294

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

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

JavaScript analysis reported javascript.xray.unsafe-regex

Minor caution · medium confidence

A crafted input might briefly slow or freeze the local client, without showing broader security harm.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The expression may permit a local CPU slowdown, but this evidence shows no credential, persistence, code-execution, or cross-user impact.

Impact: low · Exploitability: plausible

Developer action: Bound the input length or replace the expression when practical.

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
character-sheet-generation.js:183
Contextual expected matches (12)

JavaScript analysis reported javascript.xray.unsafe-regex

Expected behavior · high confidence

A regular expression used to parse path strings in a test evaluation tool is a normal code pattern with no security risk.

Technical evidence

Scanner reason: JavaScript analysis matched static JavaScript security signal javascript.xray.unsafe-regex. The match applies to this repository.

Contextual assessment: The regex /^relationshipEngine[([^]]+)](?:.(.*))?$/ on line 44 is a simple, non-nested pattern used to parse report path strings within resolveReportPath. The input (reportPath) originates from fixture definitions in the project's own test infrastructure, not from untrusted or attacker-controlled sources. The regex lacks catastrophic backtracking patterns (no nested quantifiers or overlapping alternation). This is a standard string-parsing regex in a golden-output evaluator utility and poses no demonstrated security risk.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.xray.unsafe-regex
File role
production
Source
semantic-golden-evaluator.mjs:44

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

A test file uses dynamic function construction to test the project's own source code. This is a testing technique, not a security risk.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The new Function call at lines 11921-11927 constructs a function from trackerMigrationSource, which is a slice of the project's own index.js source code read via fs.readFileSync. The constants injected are hardcoded numeric values. No attacker-controlled or untrusted input flows into the function body or arguments. This is a test-time pattern to exercise the migrateTrackerWidgetSettings function in isolation. The executed code is the project's own committed source.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:11921-11927

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

The flagged dynamic code execution is inside a test file that reads the project's own settings-migration function, wraps it for isolated testing, and passes in controlled mock values. No untrusted or attacker-controlled data reaches it.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

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

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:17719-17731

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to pull functions out of the extension's main source file and run them with fake browser objects. This is a standard testing technique. No untrusted or external data is involved, and the file is not loaded by the extension at runtime.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The flagged `new Function(...)` calls appear in file, a Node.js test harness that imports assert and fs, defines named test cases, and reports PASS/FAIL results. The dynamic Function constructor is used to extract source slices from the project's own index.js via fs.readFileSync and execute them with mocked globalThis and document objects, enabling isolated testing of widget geometry functions without a browser environment. No external or attacker-controlled input reaches the Function constructor body; the executed source is the project's own committed code. No network calls, credential access, persistence, or obfuscation are present. This is a conventional testing pattern and poses no demonstrated security exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:22132-22147

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

A test file uses dynamic function construction to test the project's own source code. This is a testing technique, not a security risk.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The new Function call at lines 11928-11931 constructs a function from itemFormatterSource, which is a slice of the project's own index.js source code read via fs.readFileSync. The only argument passed is a hardcoded sanitizer function. No attacker-controlled or untrusted input flows into the function body or arguments. This is a test-time pattern to exercise the formatTrackerItemDisplayName function in isolation. The executed code is the project's own committed source.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:11928-11931

Gitleaks reported generic-api-key

Expected behavior · high confidence

The flagged string is not a real credential. It is a fake test value used to verify that the extension's diagnostic system properly redacts secrets from error messages before they are displayed or logged. The test confirms redaction works correctly.

Technical evidence

Scanner reason: Gitleaks matched secret-detection rule generic-api-key. The match applies to this repository.

Contextual assessment: Line 18459 in file constructs a synthetic Error object containing fake credential-like strings (`b80965ff4cbf`, `fd83b6339f88`, `google-sensitive-key`) and passes it to `annotateSemanticDiagnosticError` and `formatSemanticDiagnostic`. Lines 18463-18466 then assert that the formatted diagnostic output redacts all of these patterns to `[REDACTED]`. These are not live API keys; they are artificial test fixtures designed to validate the project's secret-redaction logic in diagnostic output. No real credential is present, no credential is transmitted or persisted, and the test exists to verify a security-positive feature.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
gitleaks 8.30.1
Rule
generic-api-key
File role
production
Source
test-behavior.mjs:18459

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to pull specific functions out of the project's own source code and test them with hardcoded values. No untrusted or external input is involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The candidate is a `new Function()` call inside a test file (file) that reads source from the project's own index.js, slices out the `getNarratorHandoffWidgetLayout` function body, and wraps it in a dynamically created function to test it with hardcoded mock parameters. The code executed is the project's own committed source, not user input or network data. No untrusted data flows into the Function constructor. This is a legitimate test isolation pattern.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:21984-21999

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to isolate a function from the project's own source code and test it. No external input is involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The candidate is a `new Function()` call in file that extracts `normalizeNarratorHandoffDisplayMode` from the project's own index.js source and tests it with a hardcoded modes object. The executed code is the project's own committed source. No untrusted input reaches the Function constructor. This is a standard test isolation technique.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:21955-21958

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to isolate a function from the project's own source code and test it. No external input is involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The candidate is a `new Function()` call in file that extracts `normalizeTrackerWidgetSavedDimension` from the project's own index.js and tests it with hardcoded numeric values (450, 280). The source of the executed code is the project's own committed file. No untrusted data flows into the Function constructor.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:21959-21964

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to isolate a function from the project's own source code and test it. No external input is involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The candidate is a `new Function()` call in file that extracts `migrateNarratorHandoffSettings` from the project's own index.js and invokes it with hardcoded mock parameters. The executed code body is sourced from the project's own committed source file. No untrusted input reaches the Function constructor.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:21967-21975

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

A test file uses dynamic function construction to test the project's own source code. This is a testing technique, not a security risk.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The new Function call at lines 11911-11920 constructs a function from trackerLayoutSource, which is a slice of the project's own index.js source code read via fs.readFileSync. The constants injected are hardcoded numeric values. No attacker-controlled or untrusted input flows into the function body or arguments. This is a test-time pattern to exercise specific functions in isolation from the main bundle. The executed code is the project's own committed source, not external content.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:11911-11920

OpenGrep reported tavernkeeper.dynamic-execution.javascript-eval

Expected behavior · high confidence

This is a test file that uses dynamic code execution to isolate a function from the project's own source code and test it. No external input is involved.

Technical evidence

Scanner reason: OpenGrep matched static-analysis rule tavernkeeper.dynamic-execution.javascript-eval. The match applies to this repository.

Contextual assessment: The candidate is a `new Function()` call in file that extracts `getLatestNarratorHandoffEntry` from the project's own index.js and invokes it with simple hardcoded mock functions. The code executed is the project's own committed source. No untrusted data flows into the Function constructor.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
opengrep 1.26.0
Rule
tavernkeeper.dynamic-execution.javascript-eval
File role
production
Source
test-behavior.mjs:21976-21980

Related contextual observations

Regex input originates from fixture data, not untrusted sources

low risk · high confidence

The regex only processes paths defined within the project's own test fixtures, not external user input.

Technical assessment

resolveReportPath accepts reportPath values from fixture.forbiddenOutputs rules, which are developer-authored test data. The regex match and subsequent property traversal operate on the project's own ledger objects. No untrusted input reaches this code path in normal operation.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

All new Function calls execute project's own source code slices in a test file

low risk · high confidence

All three dynamic function calls operate on the project's own source code and hardcoded values, not external input.

Technical assessment

All three new Function calls source their code bodies from slices of index.js read via fs.readFileSync at test time. The injected constants are hardcoded literals and the only callable argument is a trivial inline sanitizer. No untrusted or attacker-controlled data reaches any of these dynamic function constructors. This is a self-contained testing technique with no demonstrated exposure.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Test asserts absence of secret-rotation patterns in production source

low risk · high confidence

The same test block verifies that the production source does not contain secret-rotation or secret-state handling patterns, confirming the test is exercising a security-conscious migration path.

Technical assessment

Lines 17689-17694 assert that index.js does not contain rotateSecret, secret_state, withConnectionProfileSecret, or CHAT_COMPLETION_SECRET_KEYS patterns, while the adapter source does contain secret_id references. This is a security regression test ensuring the main extension code does not handle raw API secrets, which is consistent with the project's stated purpose of routing through SillyTavern's connection profiles.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Test validates three distinct secret-redaction patterns

low risk · high confidence

The test confirms that Authorization headers, api_key parameters, and URL query-key parameters are all stripped from diagnostic messages, preventing accidental credential leakage in logs.

Technical assessment

Lines 18463-18466 assert that the formatted diagnostic does not contain the raw secret strings and does contain redacted placeholders for Authorization headers, api_key parameters, and URL query keys. This validates that the production diagnostic formatter properly scrubs credential patterns before output, reducing the risk of accidental secret exposure in error logs.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

All five dynamic-execution matches are test-file function isolation with project-own source

low risk · high confidence

All five dynamic execution matches are in a test file that extracts functions from the project's own source code and tests them with hardcoded values. This is a legitimate testing pattern with no security risk.

Technical assessment

All five candidates are `new Function()` calls within a single test case in test-behavior.mjs. The test reads the project's own index.js source, slices out specific function bodies, and wraps them in dynamically created functions with hardcoded mock dependencies. This is a common pattern for unit-testing functions that are not separately exported. The code executed is always the project's own committed source, and all parameters are hardcoded test values. No untrusted input, network data, or user-controlled content reaches any of these Function constructors.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Additional new Function test harness instances follow the same safe pattern

low risk · high confidence

Detailed wording was omitted by the public report safety filter.

Technical assessment

Earlier in the same test file, multiple additional `new Function(...)` invocations follow the identical pattern: extracting source slices from index.js and constructing functions with injected mock dependencies (e.g., normalizeMode, migrate, getLatest, getLayout). All executed source originates from the project's own committed index.js, with no external or untrusted input. These are consistent with isolated unit testing of internal functions.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Unresolved JavaScript stages

Tools

Limitations

Technical scan identity