AI Slop Code Risk Monitor

huangxd-/danmu_api

SlopCodeMonitor badge for huangxd-/danmu_api Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

一个人人都能部署的基于 js 的弹幕 API 服务器,支持爱优腾芒哔咪人韩巴狐乐西埋帆红弹幕直接获取,兼容弹弹play的搜索、详情查询和弹幕获取接口规范,并提供日志记录,支持vercel/netlify/edgeone/cloudflare/docker/hf等部署方式,不用提前下载弹幕,没有nas或小鸡也能一键部署。

3.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for huangxd-/danmu_api, a JavaScript project with 3,432 GitHub stars. SynthScan examined 74,754 lines of code across 170 source files, recording 180 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 3.5 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

3.5
Adjusted Signal
3.5
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
3.4K
Stars
JavaScript
Language
74.8K
Lines of Code
170
Files
180
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 8.6/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 131 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

Are imports declared and package/API names verified? 0 finding(s).

Agent Over-Engineering Ratio 15.4/100 · LOW

Are wrappers, guards, and repeated structures necessary? 168 finding(s).

PR Review Velocity Impact 17.0/100 · LOW

Which changes need focused human review? 180 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 0MEDIUM 49LOW 131

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 180 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Decorative Section Separators49 hits · 129 pts
SeverityFileLineSnippetContext
MEDIUM⚡danmu_api/utils/merge-util.js53 // ── 标题与结构 ──────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js58 // ── 日期 ─────────────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js61 // ── 集数对齐 (Episode Alignment) ─────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js1470 // ── 类型判断 ──────────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js1476 // ── 语言对齐 ──────────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js1482 // ── 季度编号 & 特殊类型 ───────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js1491 // ── 季度偏移精确匹配奖励 ──────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js1499 // ── 文本相似度(核心评分) ────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js2274 // ── 评分修正 ─────────────────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js2282 // ── Probe 覆盖逻辑 ──────────────────────────────────────────────COMMENT
MEDIUM⚡danmu_api/utils/merge-util.js2291 // ── 阈值过滤 ─────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js1516 // ── 数字严格相等奖励 ──────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js1520 // ── 断层惩罚(防异构/占位区污染) ─────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js1535 // ── 数字差分布统计(支持规律性检测) ─────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2163 // ── 之字结构强阻断 ───────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2174 // ── 媒体类型冲突检测 ─────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2185 // ── 上下文续作阻断 ───────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2214 // ── 主副别名交叉比对 ─────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2218 // ── 剧场版标题阻断 ───────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2240 // ── 日期匹配校验 ─────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2251 // ── 季度标记冲突校验 ─────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2306 // ── Tier 筛选:梯度过滤,保留合理竞争者 ─────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2640 // ── 隔离检索 ────────────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2693 // ── 跨源合集时序接管 ─────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2733 // ── 小数集数预处理 ───────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2751 // ── 合集切片 ─────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2831 // ── 智能对齐策略(特权映射表介入) ─────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2896 // ── 执行 URL 合并 ────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2915 // ── 对齐偏移计算 ─────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js2920 // ── 智能对齐策略(共识差计算) ───────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3043 // ── 执行 URL 合并 ────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3070 // ── 年份关系校验:与标题匹配侧沿用同一套判定 ──────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3097 // ── 覆盖率校验 ────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3114 // ── 别名合并 ─────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3135 // ── 记录合并层级 ──────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3152 // ── 合集进度双向写入 ──────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3205 // ── 番外沉底排序 ──────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3229 // ── 重复签名检测 ──────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3334 // ── 前置全局计算 ────────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3401 // ── Phase 1: CN Primary Isolation ──────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3438 // ── Phase 1.5: Secondary CN Self-Organization ───────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3469 // ── Phase 2: Standard Fallback ──────────────────────────────────────COMMENT
MEDIUMdanmu_api/utils/merge-util.js3521 // ── 最终整理 ─────────────────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js144 // ── 数据规范化 ──────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js219 // ── 搜索候选合并 ─────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js490 // ── 搜索接口 ─────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js631 // ── 详情 & 剧集 ──────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js880 // ── 番剧处理 ─────────────────────────────────────────────────COMMENT
MEDIUMdanmu_api/sources/hanjutv.js947 // ── 弹幕 ─────────────────────────────────────────────────────COMMENT
Hyper-Verbose Identifiers119 hits · 122 pts
SeverityFileLineSnippetContext
LOWdanmu_api/server.js73function resolvePublicRequestProtocol(req) {CODE
LOWdanmu_api/server.js554async function initializeFavoriteScheduler(mainPort) {CODE
LOWdanmu_api/ui/js/apitest.js132function updateCommentDurationFieldVisibility() {CODE
LOWdanmu_api/ui/js/apitest.js150function bindCommentDurationFieldVisibility() {CODE
LOWdanmu_api/ui/js/apitest.js524function estimateVideoDurationFromComments(comments) {CODE
LOWdanmu_api/ui/js/apitest.js723function showDanmuCallTraceFailure(trace, title, message, source) {CODE
LOWdanmu_api/ui/js/apitest.js730function getDanmuCallTraceTotalSeconds(trace, fallbackSeconds) {CODE
LOW⚡danmu_api/ui/js/apitest.js749function isCurrentDanmuFlowRequest(requestId) {CODE
LOW⚡danmu_api/ui/js/apitest.js753function startManualBangumiRequest() {CODE
LOW⚡danmu_api/ui/js/apitest.js761function isCurrentManualBangumiRequest(requestId) {CODE
LOW⚡danmu_api/ui/js/apitest.js765function invalidateActiveDanmuRequest() {CODE
LOW⚡danmu_api/ui/js/apitest.js769function setDanmuFlowButtonLoading(btn, requestId, loading) {CODE
LOWdanmu_api/ui/js/apitest.js785function resetManualFavoriteButton() {CODE
LOWdanmu_api/ui/js/apitest.js801function renderManualFavoriteButton() {CODE
LOWdanmu_api/ui/js/apitest.js1029function toggleFavoriteScheduleWeekday() {CODE
LOWdanmu_api/ui/js/apitest.js1035function openFavoriteScheduleModal(keyword) {CODE
LOWdanmu_api/ui/js/apitest.js1052function closeFavoriteScheduleModal() {CODE
LOWdanmu_api/ui/js/apitest.js1762function updateDanmuHeatmapTooltip(event, interactive, bars, tooltip, indicator, segs, segLen, maxTime) {CODE
LOWdanmu_api/ui/js/preview.js234function renderPreviewSearchResults(query) {CODE
LOWdanmu_api/ui/js/requestrecords.js73function initRequestRecordsInterface() {CODE
LOWdanmu_api/ui/js/pushdanmu.js139function displayEpisodeListForPush(animeTitle, episodes, pushUrl) {CODE
LOWdanmu_api/ui/js/pushdanmu.js181function jumpToEpisodeForPushDanmu() {CODE
LOWdanmu_api/ui/js/systemsettings.js242function updateLocalImportedConfig(key, value) {CODE
LOWdanmu_api/ui/js/systemsettings.js649async function checkDeployPlatformConfig() {CODE
LOWdanmu_api/ui/js/systemsettings.js2130function handleDelegatedTouchStart(e) {CODE
LOWdanmu_api/ui/js/systemsettings.js2199function handleSelectedTagsContainerDragOver(e) {CODE
LOWdanmu_api/ui/js/systemsettings.js2205function handleSelectedTagsContainerDrop(e) {CODE
LOWdanmu_api/ui/js/systemsettings.js2366function cleanupSelectedTagsTouchDrag() {CODE
LOWdanmu_api/ui/js/systemsettings.js3015async function autoCheckBilibiliCookieStatus() {CODE
LOWdanmu_api/ui/js/systemsettings.js3075function showBilibiliCookieSaveHint(text) {CODE
LOWdanmu_api/ui/js/systemsettings.js3161async function verifyDandanplayConnection() {CODE
LOW⚡danmu_api/ui/js/localdanmu.js9function localDanmuRedisUnavailable() {CODE
LOW⚡danmu_api/ui/js/localdanmu.js12function showLocalDanmuRedisRequired() {CODE
LOW⚡danmu_api/ui/js/localdanmu.js19function updateLocalDanmuPermission(config) {CODE
LOWdanmu_api/ui/js/localdanmu.js37function checkLocalDanmuWritePermission(action, event) {CODE
LOWdanmu_api/ui/js/localdanmu.js49function updateLocalDanmuTypeFields() {CODE
LOWdanmu_api/ui/js/localdanmu.js92function localDanmuEpisodeFromFilename(filename) {CODE
LOWdanmu_api/ui/js/localdanmu.js106function updateLocalDanmuUploadFiles() {CODE
LOWdanmu_api/ui/js/localdanmu.js235function prepareLocalDanmuReupload(resource) {CODE
LOWdanmu_api/apis/dandan-api.js77function shouldIncludeVideoDuration(queryFormat, includeDuration = false) {CODE
LOWdanmu_api/apis/dandan-api.js88function extractDurationFromSegments(segmentResult) {CODE
LOWdanmu_api/apis/dandan-api.js243function isSingleEpisodeMatchCandidate(anime, bangumiData) {CODE
LOWdanmu_api/apis/dandan-api.js1263function findCrossSeasonEpisodeMap(searchData, title, year, season, episode, platform, detailStore) {CODE
LOWdanmu_api/apis/dandan-api.js1744export async function extractTitleSeasonEpisode(cleanFileName) {CODE
LOWdanmu_api/apis/dandan-api.js1960function findSeasonPreferenceTitle(titles, season) {CODE
LOWdanmu_api/apis/dandan-api.js1968function findLegacySeasonPreferenceTitle(titles, season) {CODE
LOWdanmu_api/apis/system-api.js169export async function handleRemoteMappingRefresh() {CODE
LOWdanmu_api/apis/local-danmu-api.js19function invalidateLocalDanmuCache(resourceKey) {CODE
LOWdanmu_api/apis/env-api.js10function syncIntegrationsAfterEnvChange(key, deployPlatform) {CODE
LOWdanmu_api/apis/favorite-api.js57function removeRelatedSearchCaches(keyword) {CODE
LOWdanmu_api/apis/clients/fongmi-api.js85function normalizeFongmiTitleByRegex(name) {CODE
LOWdanmu_api/apis/clients/fongmi-api.js99function normalizeFongmiEpisodeByRegex(episode) {CODE
LOWdanmu_api/apis/clients/fongmi-api.js114function extractFongmiEpisodeNumber(episode) {CODE
LOWdanmu_api/apis/clients/fongmi-api.js167function extractFongmiSeasonNumber(episode) {CODE
LOWdanmu_api/apis/clients/fongmi-api.js186function buildFongmiSearchKeywords(name) {CODE
LOWdanmu_api/tests/worker-api.test.js1255async function resetRemoteTitleMappingState() {CODE
LOWdanmu_api/utils/cache-util.js88function collectUniqueAnimeDetails(detailStore) {CODE
LOWdanmu_api/utils/cache-util.js96function getActiveSearchCacheEntries() {CODE
LOWdanmu_api/utils/cache-util.js219export function resolveAnimeByIdFromDetailStore(id, detailStore = null, source = null) {CODE
LOWdanmu_api/utils/cache-util.js224export function resolveEpisodeContextById(id, detailStore = null) {CODE
59 more matches not shown…
Over-Commented Block9 hits · 8 pts
SeverityFileLineSnippetContext
LOWdanmu_api/ui/js/icons.js1// language=JavaScriptCOMMENT
LOWdanmu_api/tests/manual/live-source-checks.js1// 手工巡检:真实数据源联网用例(不参与 node --test 自动发现,也不会在 npm test 中执行)COMMENT
LOWdanmu_api/tests/manual/live-source-checks.js441 // const keyword = "子夜归";COMMENT
LOWdanmu_api/tests/configs/envs.test.js761// 因此本文件不包含 ':::' 的断言。COMMENT
LOWdanmu_api/utils/merge-util.js1import { globals } from '../configs/globals.js';COMMENT
LOWdanmu_api/utils/aiyifan-util.js1import { globals } from '../configs/globals.js';COMMENT
LOWdanmu_api/sources/registry.js1// =====================COMMENT
LOWdanmu_api/sources/registry.js41COMMENT
LOWforward/forward-widget.spec.js241 colorPool: '16777215,16744319,16752762,16774799,9498256,8388564,8900346,14204888,16758465',COMMENT
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdanmu_api/sources/aiyifan.js240 // Step 1: 搜索,拿到剧目列表COMMENT
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdanmu_api/sources/aiyifan.js240 // Step 1: 搜索,拿到剧目列表COMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWdanmu_api/worker.js63async function handleRequest(req, env, deployPlatform, clientIp) {CODE