TavernKeeper Scan Report

selinawynters-ops/ST---ThreadKeeper

Commit d33f8f5 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 5 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
index.js:315
Contextual expected matches (2)

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

When the extension is uninstalled, it automatically cleans up its own data from your saved chats and settings. The fetch interception only acts on the delete-this-extension request and passes everything else through unchanged.

Technical evidence

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

Contextual assessment: The scanner correlated fetch() calls with a dynamic execution sink (window.fetch reassignment). The fetch calls in postJson target local SillyTavern API endpoints only ('/api/chats/get', '/api/chats/save', '/api/chats/group/get', '/api/chats/group/save', '/api/chats/search'). installUninstallHook monkey-patches window.fetch to detect when this specific extension is being deleted via '/api/extensions/delete' and then runs wipeThreadKeeperData to strip ThreadKeeper metadata from all chats and remove its settings entry. The hook delegates all other fetch calls to the original implementation unchanged, only parsing the body when the URL matches the extensions delete endpoint and the extensionName matches. This is a legitimate self-cleanup mechanism proportional to the project's stated purpose; no external destinations, credential exfiltration, or concealed execution 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_families-1
Rule
javascript.download-to-execution
File role
production
Source
uninstall.js:33-178

JavaScript analysis reported javascript.download-to-execution

Expected behavior · high confidence

The extension fetches chat data from SillyTavern's own local API and injects extracted facts into prompts, which is exactly what it is designed to do. No external data flows or hidden execution were found.

Technical evidence

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

Contextual assessment: The scanner correlated fetch() calls with prompt-injection sinks. The fetch calls (e.g., fetchGroupChatFile via '/api/chats/group/get') target local SillyTavern backend endpoints only, not external servers. The 'execution sink' is setExtensionPrompt and onChatCompletionPromptReady, which inject fact text into the LLM prompt — the explicitly stated purpose of the ThreadKeeper extension. getTokenCountAsync measures token counts. No external network destinations, credential handling, obfuscation, or concealed execution are present in the supplied code. The data flow is local chat data → fact extraction → prompt injection, all proportionate to the project's stated purpose.

Impact: none · Exploitability: unlikely

Developer action: none

Scanner
javascript-analysis webcrack-2.16.0_js-x-ray-16.0.0_signatures-1_literals-1_families-1
Rule
javascript.download-to-execution
File role
production
Source
index.js:1353-3121

Related contextual observations

Local group-chat fetch for continuation feature

low risk · high confidence

The extension fetches other chats from the same group through SillyTavern's local API to carry facts forward, which matches the documented continuation feature.

Technical assessment

maybeSeedGroupContinuation uses fetchGroupChatFile to read group chat metadata from the local '/api/chats/group/get' endpoint, selects the most recently active chat with ThreadKeeper data, and copies its facts into the current chat. All fetch destinations are local SillyTavern API routes. No external endpoints are contacted.

Impact: none · Exploitability: unlikely

Developer action: none

Sources:

Global fetch monkey-patch for uninstall cleanup

low risk · high confidence

The extension intercepts all network requests by replacing the browser's fetch function, but only acts on the one request that deletes this extension. While this is a broad technique, the actual behavior is safe and limited to cleanup.

Technical assessment

installUninstallHook replaces window.fetch with a wrapper that inspects every fetch response. The guard checks response.ok, URL inclusion of '/api/extensions/delete', and payload extensionName before acting. All other requests pass through to the original fetch unchanged. While monkey-patching a global is a broad interception pattern, the actual trigger is narrowly scoped to the extension's own uninstall event and the behavior is cleanup-only. No external network calls or data exfiltration occur.

Impact: low · Exploitability: unlikely

Developer action: none

Sources:

Coverage and limitations

JavaScript coverage

Tools

Limitations

Technical scan identity