AI Slop Code Risk Monitor

pt-plugins/PT-depiler

SlopCodeMonitor badge for pt-plugins/PT-depiler Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

PT-depiler 是在原 PT-Plugin-Plus 基础上, 基于浏览器最新的 Manifest v3 标准开发的一款浏览器插件(Web Extensions), 一个可以提升 PT 站点使用效率的工具。

1.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for pt-plugins/PT-depiler, a TypeScript project with 2,697 GitHub stars. SynthScan examined 174,949 lines of code across 728 source files, recording 131 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 1.2 (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.

1.2
Adjusted Signal
1.2
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
2.7K
Stars
TypeScript
Language
174.9K
Lines of Code
728
Files
131
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 3.0/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 97 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 5.3/100 · LOW

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

PR Review Velocity Impact 5.5/100 · LOW

Which changes need focused human review? 131 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 34LOW 97

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 131 distinct pattern matches across 5 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 Separators34 hits · 105 pts
SeverityFileLineSnippetContext
MEDIUM⚡src/entries/background/utils/nativeMessaging.ts60// ── Module-scoped state ──────────────────────────────────────────────COMMENT
MEDIUM⚡src/entries/background/utils/nativeMessaging.ts70// ── Helpers ──────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/background/utils/nativeMessaging.ts110// ── Lifecycle ────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/background/utils/nativeMessaging.ts291// ── Runtime permission listeners ─────────────────────────────────────COMMENT
MEDIUMsrc/entries/background/utils/nativeMessaging.ts305// ── Message handlers ─────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/background/utils/nativeMessaging.ts339// ── Startup ──────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/Index.vue56// ── state ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/Index.vue89// ── computed ───────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/Index.vue128// ── table headers ─────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/Index.vue172// ── data loading ──────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/Index.vue208// ── actions ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…ies/options/views/Overview/MyClient/TorrentStateTd.vue12// ── state chip display map ────────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/utils.ts10// ── module-level shared state ─────────────────────────────────────────────COMMENT
MEDIUMsrc/entries/options/views/Overview/MyClient/utils.ts31// ── composable ────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/backupServer/entity/S3.ts74 // ───── AWS Signature V4 ─────COMMENT
MEDIUMsrc/packages/backupServer/entity/S3.ts195 // ───── S3 XML 响应解析 ─────COMMENT
MEDIUMsrc/packages/backupServer/entity/S3.ts227 // ───── AbstractBackupServer 实现 ─────COMMENT
MEDIUMsrc/packages/backupServer/entity/BackblazeB2.ts40// ── B2 API 响应类型 ──────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/backupServer/entity/BackblazeB2.ts88// ── 辅助函数 ─────────────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/backupServer/entity/BackblazeB2.ts97// ── 主类 ─────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/backupServer/entity/BackblazeB2.ts115 // ── 授权与桶解析 ──────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/backupServer/entity/BackblazeB2.ts172 // ── 抽象方法实现 ──────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/uTorrent.ts449 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/uTorrent.ts451 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/qBittorrent.ts779 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/qBittorrent.ts781 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Transmission.ts661 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Transmission.ts663 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Deluge.ts574 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Deluge.ts576 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/ruTorrent.ts490 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/ruTorrent.ts492 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Flood.ts356 // ─────────────────────────────────────────────COMMENT
MEDIUMsrc/packages/downloader/entity/Flood.ts358 // ─────────────────────────────────────────────COMMENT
Hyper-Verbose Identifiers86 hits · 86 pts
SeverityFileLineSnippetContext
LOWvite/plugin/generateWebextLocales.ts4export function vitePluginGenerateWebextLocales() {CODE
LOWvite/plugin/generateSiteIndex.ts167async function generateSiteMetadataIndex(config: ResolvedConfig): Promise<TSiteMetadataIndex> {CODE
LOWvite/plugin/generateSiteIndex.ts249export function vitePluginGenerateSiteIndex(): Plugin {CODE
LOWvite/scripts/checkSiteDefinition.ts833export function checkMetadataIndexContract(): IMetadataIndexContractResult {CODE
LOWsrc/extends/pinia/webExtPersistence.ts88export function piniaWebExtPersistencePlugin(context: PiniaPluginContext) {CODE
LOWsrc/extends/axios/replaceUnsafeHeader.ts103 function removeDummyHeaderRequestId(config: any) {CODE
LOWsrc/extends/axios/retryWhenCloudflareBlock.ts68function removeCustomCloudflareCookie(response: AxiosResponse | undefined) {CODE
LOWsrc/extends/axios/retryWhenCloudflareBlock.ts75export function setupRetryWhenCloudflareBlock(axios: AxiosInstance): AxiosRetryWhenCloudflareBlockInstance {CODE
LOWsrc/entries/messages.ts302export function isUserInfoQueueCancelledError(error: unknown): boolean {CODE
LOW⚡src/entries/background/utils/nativeMessaging.ts72async function getOrCreateInstanceId(): Promise<string> {CODE
LOWsrc/entries/offscreen/utils/socialRecommendations.ts39function getDoubanPosterRatioCandidates(poster: string): string[] {CODE
LOWsrc/entries/offscreen/utils/socialRecommendations.ts79async function getSocialInformationSafely(item: ISocialRecommendationItem) {CODE
LOWsrc/entries/offscreen/utils/socialRecommendations.ts174function getVisibleRecommendationItemKeys(items: ISocialRecommendationItem[]) {CODE
LOWsrc/entries/offscreen/utils/socialRecommendations.ts190function shouldEnrichRecommendation(CODE
LOWsrc/entries/offscreen/utils/download.ts118export async function getTorrentInfoForVerification(torrent: ITorrent) {CODE
LOWsrc/entries/offscreen/utils/download.ts316async function isAllowedSaveDownloadHistory(): Promise<boolean> {CODE
LOWsrc/entries/offscreen/utils/download.ts420async function downloadTorrentToLocalFile(CODE
LOWsrc/entries/offscreen/utils/download.ts593export async function deleteDownloadHistoryById(downloadId: TTorrentDownloadKey) {CODE
LOW…ies/options/views/Settings/SetSearchSolution/Index.vue115async function confirmDeleteSearchSolution(solutionId: TSolutionKey) {CODE
LOW…ies/options/views/Settings/SetSearchSolution/Index.vue119function simplePatchSearchSolution(solutionId: TSolutionKey, value: boolean) {CODE
LOW…ries/options/views/Settings/SetSearchSolution/utils.ts23export async function generateSiteSearchSolution(CODE
LOW…views/Settings/SetSearchSolution/SiteCategoryPanel.vue54async function showCustomSolutionDialogFn() {CODE
LOWsrc/entries/options/views/Settings/SetBase/UiWindow.vue21function initContentScriptExceptionSites() {CODE
LOWsrc/entries/options/views/Settings/SetBackup/Index.vue111async function confirmDeleteBackupServer(id: TBackupServerKey) {CODE
LOW…ies/options/views/Settings/SetBackup/HistoryDialog.vue53async function confirmDeleteBackupHistory(toDeleteId: string) {CODE
LOW…ies/options/views/Settings/SetBackup/RestoreDialog.vue156function convertIsoDurationToMinutes(duration: string): number {CODE
LOW…entries/options/views/Settings/SetBackup/AddDialog.vue38async function updateStoredDownloaderConfigByDefault(type: IBackupServerMetadata["type"]) {CODE
LOW…entries/options/views/Settings/SetBackup/AddDialog.vue48async function saveStoredBackupServerConfig() {CODE
LOW…es/options/views/Settings/SetMediaServer/AddDialog.vue52async function updateStoredMediaServerConfigByDefault(e: TDownloaderKey) {CODE
LOW…es/options/views/Settings/SetMediaServer/AddDialog.vue61async function saveStoredMediaServerConfig() {CODE
LOWsrc/entries/options/views/Settings/SetSite/Index.vue173function sortIndexLongPressBinding(siteId: TSiteID, position: "up" | "down"): [() => void, OnLongPressOptions] {CODE
LOWsrc/entries/options/views/Settings/SetSite/utils.ts22export function getCanAddedSiteIndexEntries(): TSiteMetadataIndexEntryWithId[] {CODE
LOW…ies/options/views/Settings/SetDownloader/AddDialog.vue46async function updateStoredDownloaderConfigByDefault(type: string) {CODE
LOW…ies/options/views/Settings/SetDownloader/AddDialog.vue58async function saveStoredDownloaderConfig() {CODE
LOW…Settings/SetDownloader/DefaultDownloaderEditDialog.vue27function updateDefaultDownloaderInput(downloaderId: TDownloaderKey, clean: boolean = true) {CODE
LOWsrc/entries/options/views/Layout/Topbar.vue57function refreshSingleSearchSiteIds() {CODE
LOWsrc/entries/options/views/Layout/RecommendationMenu.vue79function hasIncompleteRecommendations() {CODE
LOWsrc/entries/options/views/Layout/RecommendationMenu.vue90function getVisibleRecommendationItems() {CODE
LOWsrc/entries/options/views/Layout/RecommendationMenu.vue119async function enrichRecommendationItems(CODE
LOWsrc/entries/options/views/Layout/RecommendationMenu.vue159function getRecommendationRegionClass(region?: string) {CODE
LOWsrc/entries/options/views/Layout/RecommendationMenu.vue165function getRecommendationPosterSrc(item: ISocialRecommendationItem) {CODE
LOW…/options/views/Overview/SearchResultSnapshot/Index.vue68function tryToDeleteSearchSnapshot(searchSnapshotId: TSearchSnapshotKey[]) {CODE
LOW…/options/views/Overview/SearchResultSnapshot/Index.vue73async function confirmDeleteSearchSnapshot(searchSnapshotId: TSearchSnapshotKey) {CODE
LOW…ries/options/views/Overview/MyData/BonusFormatSpan.vue35function toggleNumberSimplification() {CODE
LOW…es/options/views/Overview/MyData/UserLevelShowSpan.vue34function toggleNumberSimplification() {CODE
LOW…es/options/views/Overview/MyData/utils/lastUserData.ts106export async function cancelFlushSiteLastUserInfo() {CODE
LOW…tions/views/Overview/MyData/UserDataTimeline/Index.vue74function resetTimelineDataWithControl() {CODE
LOW…ions/views/Overview/MyData/UserDataStatistic/Index.vue94function createTotalInfoTooltipFormatter(type: (keyof typeof formatDict)[]) {CODE
LOW…ions/views/Overview/MyData/UserDataStatistic/Index.vue214function updateLastHoveredSeriesIndex(data: any) {CODE
LOW…tions/views/Overview/MyData/UserDataStatistic/utils.ts26function calculateDailyIncremental(CODE
LOW…tries/options/views/Overview/DownloadHistory/Index.vue79async function confirmDeleteDownloadHistory(downloadHistoryId: TTorrentDownloadKey) {CODE
LOWsrc/entries/options/views/Overview/MyClient/utils.ts80 function scheduleDownloaderRefresh(id: string) {CODE
LOW…/entries/options/views/Overview/SearchEntity/Index.vue51function normalizeSnapshotPromotions(items: ISearchResultTorrent[] = []) {CODE
LOW…tries/options/views/Overview/SearchEntity/ActionTd.vue71async function localDlTorrentDownloadLink() {CODE
LOW…tent-script/app/components/AdvanceListModuleDialog.vue87function handleRemoteDownloadMulti(isDefaultSend = false) {CODE
LOWsrc/entries/content-script/app/pages/SiteListPage.vue88function handleRemoteDownloadMulti(isDefaultSend = false) {CODE
LOWsrc/packages/backupServer/utils.ts63export function hasBackupRetentionToApply(retention?: IBackupRetention): boolean {CODE
LOWsrc/packages/backupServer/index.ts29export async function getBackupServerDefaultConfig(configType: string): Promise<IBackupConfig> {CODE
LOWsrc/packages/downloader/index.ts23export async function getDownloaderDefaultConfig(type: string): Promise<DownloaderBaseConfig> {CODE
LOWsrc/packages/downloader/entity/uTorrent.ts576function mapTorrentFilePriorityToUtorrent(priority: TorrentFilePriority): number {CODE
26 more matches not shown…
Verbosity Indicators3 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts226 // Step 1: 获取上传 URLCOMMENT
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts233 // Step 2: 构建 zip blobCOMMENT
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts238 // Step 3: 上传文件COMMENT
Structural Annotation Overuse3 hits · 7 pts
SeverityFileLineSnippetContext
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts226 // Step 1: 获取上传 URLCOMMENT
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts233 // Step 2: 构建 zip blobCOMMENT
LOW⚡src/packages/backupServer/entity/BackblazeB2.ts238 // Step 3: 上传文件COMMENT
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWvite.config.ts201 // 并直接复用 options 构建已拆分的 vendor chunk(见 issue #1467)。COMMENT
LOW.github/workflows/action_publish.yml41 # 提交至 Chrome Web StoreCOMMENT
LOWsrc/styles/vuetify/settings.scss1// Vuetify 4 MD3 elevation shadows (0-5 scale), per the official Elevation Migration Guide.COMMENT
LOWsrc/packages/site/schemas/NexusPHP.ts661 // 官方语言包COMMENT
LOWsrc/packages/site/definitions/limetorrents.ts121 // 详情页 `/xxx-torrent-<id>.html`(实测 https://www.limetorrents.fun/...-torrent-19999186.html 等):COMMENT