AI Error Message Humanizer — Rewrite Cryptic Errors with OpenRouter
The AI review rates the findings as likely false positive, but the risk score (52/100) still counts them.
Analysis record
- Analysed
- 2 days ago
- Version
- v0.0.5
- Artifact
- SHA256 306…3E3
- Source
- Findings (non-IoC)
Is AI Error Message Humanizer — Rewrite Cryptic Errors with OpenRouter safe?
The extension takes the error message your code throws, reads the lines around it, and asks a language model to rewrite the message in plainer English. Doing that requires shipping a slice of your source file to openrouter.ai, the paid model gateway named in the extension's own description. A second domain, by-ciromaciel.click, carries the publisher's name. The manifest declares no permissions and no host permissions, so nothing here grants shell access or a background role; the extension works through the editor's standard workspace API.
One network finding, NET-FETCH-extension/out/extension.js, flags a fetch call inside the compiled entry point. For a tool whose entire function involves calling a model API, that fetch delivers the core feature. It would matter if the call went somewhere other than the provider.
Most of the remaining signal comes from the scanner reading build output. The bundled JavaScript in out/extension.js trips a set of code-smell rules that fire on any minified file, and the indicator hits land on README badge images from img.shields.io, the XML namespace schemas.openxmlformats.org, and IPv6 fragments pulled out of minified strings. None of those name a live host the extension contacts.
The thing worth thinking about here has nothing to do with malware. Every rewrite sends a piece of your code to a third-party API, and the publisher's own domain sits in the endpoint list with no explanation in the description. With zero installs at version 0.0.4, there's no track record to weigh that against.
Evidence ledger
Ranked by severity · findings with a source location link to the code viewer
YARA Rule Matches
7 rules| Severity | Rule | Hits | Files | Metadata |
|---|---|---|---|---|
| LOW | postinstall file manipulation | 2 | LICENSE.txtreadme.md | - |
| LOW | postinstall obfuscation | 1 | out/extension.js | - |
| LOW | postinstall network communication | 3 | LICENSE.txtreadme.mdpackage.json | - |
| LOW | postinstall system command | 4 | out/extension.jsreadme.mdextension.vsixmanifest +1 more | - |
| LOW | postinstall file download | 2 | out/extension.jsreadme.md | - |
| LOW | SQLInjection | 1 | out/extension.js | - |
| LOW | postinstall persistence mechanism | 1 | package.json | - |
Publisher Evidence
Limited evidenceCiro Cesar Maciel
Publisher identity, store signals, distribution reach, and warning signals used for context. Treat this as supporting evidence, not a clean bill of health.
12 evidence rows available.
Finding Categories
YARA Rules Matched
7 rules(14 hits)AI Security Report
AI Security Review
Evidence context: threat category none; evidence quality moderate.
The extension reads the code around a thrown error and sends it to a model provider for rewriting, so a network call in the compiled entry point comes with the territory. The single network finding, NET-FETCH-extension/out/extension.js-1 at extension/out/extension.js:1:0, marks a fetch in the bundled output. Nothing in the file set describes child_process spawning, a postinstall hook, or a download-and-execute path: malware-signature, malware and tool-poisoning all come back empty. The manifest declares no permissions and no host_permissions, the normal shape for a VS Code extension that works through the editor's workspace API instead of a declared capability list. Reading the active file and posting a snippet to openrouter.ai matches the published description, including the pay-per-token billing it advertises.
Credential exposure does not surface anywhere. The secret category holds zero findings, and none of the code-smell matches is a credential-read rule. No finding touches .env, .git/config, ~/.ssh, or VS Code's SecretStorage. An extension that needs one user-supplied OpenRouter key has no reason to reach for those paths, and nothing here says it does.
The endpoints deserve a plain reading. openrouter.ai serves the advertised API. img.shields.io supplies README badges, errors.new shows up in Go error-handling documentation and string constants, and schemas.openxmlformats.org is an XML namespace identifier that bundled OOXML libraries carry as a literal, so it never resolves to a host. The indicator hits land on IPv6 fragments and domain-shaped property chains lifted from minified code, which is what the extractor does to any bundle. The code-smell matches land on out/extension.js, compiled webpack or esbuild output where every bundled library contributes its own patterns.
The strongest counterargument is by-ciromaciel.click, a subdomain that carries the publisher's own name (Ciro Cesar Maciel) yet points somewhere other than the model provider. A host like that could carry telemetry the description never mentions. It does not change the conclusion, because the extension already ships the user's code to a third-party model API by design; a publisher-controlled host adds no capability the advertised flow lacks. The real caveat is track record. Zero installs at version 0.0.4 means no independent history against which to check what that subdomain receives. That argues for watching the endpoint over time, and it would argue for escalation if a future build were caught posting workspace content there.
Key Reasons
- The only network finding, NET-FETCH-extension/out/extension.js-1 in extension/out/extension.js:1:0, matches the extension's advertised call to openrouter.ai
- Secret findings total zero: no reads of .env, .git/config, SSH keys or SecretStorage appear in the evidence
- No postinstall, process-spawn or download-and-execute findings; malware, malware-signature and tool-poisoning categories are empty
- Voluminous IoC and code-smell hits trace to minified build output in out/extension.js plus README badges and XML namespace strings
- Publisher-owned endpoint by-ciromaciel.click and a zero-install 0.0.4 release leave no behavioral track record
False Positive Considerations
- IoC extractor matches on img.shields.io badges, schemas.openxmlformats.org namespace constants and IPv6 fragments from minified strings
- Code-smell YARA rules firing on bundled webpack/esbuild output in extension/out/extension.js
- A fetch call flagged as a network finding when the extension's stated purpose requires one
- errors.new treated as a contacted host when it is a documentation site appearing in string constants
Reviewed 2026-10-17; recommended action: monitor; model confidence 72%.
VS Code version history
Risk trend by version
2 analyzed versions. Each point is the latest successful scan for that version; failed zero-score scans are hidden. Dates are based on first seen by risky plugins.
Pick any point on the chart to explore that version's code below.
Source Code Not Available
Source code is not available for this version of the extension.
About This Extension
Frequently Asked Questions
Similar Extensions
Related extensions from the same publisher or marketplace