AI Slop Code Risk Monitor

ZToolsCenter/ZTools

SlopCodeMonitor badge for ZToolsCenter/ZTools Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

An open-source implementation of uTools, a high-performance, scalable application launcher and plugin platform | Supports macOS and Windows, 一个高性能、可扩展的应用启动器和插件平台 uTools 的开源实现 | 支持 macOS 和 Windows

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for ZToolsCenter/ZTools, a TypeScript project with 4,070 GitHub stars. SynthScan examined 151,337 lines of code across 543 source files, recording 236 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.8 (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.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-16
Last Push
4.1K
Stars
TypeScript
Language
151.3K
Lines of Code
543
Files
236
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 7.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.6/100 · LOW

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

Agent Over-Engineering Ratio 7.4/100 · LOW

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

PR Review Velocity Impact 8.4/100 · LOW

Which changes need focused human review? 236 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 1HIGH 0MEDIUM 10LOW 225

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 236 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.

Hyper-Verbose Identifiers206 hits · 203 pts
SeverityFileLineSnippetContext
LOWresources/preload.js263function replayPendingPluginEnterIfNeeded() {CODE
LOWtests/e2e/private-sync.spec.ts563async function waitForSettingsSelectorHidden(CODE
LOWtests/e2e/private-sync.spec.ts584async function waitForSettingsDialogStable(electronApp: ElectronApplication): Promise<void> {CODE
LOWtests/e2e/internal-api-permissions.spec.ts902async function waitForSettingsSelectorHidden(CODE
LOW…ugins/setting/src/composables/useNotificationCenter.ts288async function isOfficialAccountLoggedIn(): Promise<boolean> {CODE
LOW…al-plugins/setting/src/composables/useZToolsAccount.ts48export async function promptDefaultDataImportAfterLogin(CODE
LOW…ins/setting/src/composables/usePluginCommandActions.ts294 function buildPluginAliasDraftTarget(CODE
LOWinternal-plugins/setting/src/utils/pluginUpgrade.ts37export async function upgradeInstalledPluginFromMarket(CODE
LOW…ting/src/components/common/HotkeyInput/HotkeyInput.vue177function handleEscapeWhileRecording(_event: KeyboardEvent): boolean {CODE
LOW…ing/src/components/common/shared/useOverlayPosition.ts184export function resolveAutoAdjustedPlacement(CODE
LOW…rc/components/common/ShortcutEditor/ShortcutEditor.vue136function resolveShortcutTargetOption(CODE
LOW…lugins/setting/src/components/common/Select/Select.vue479function handleDocumentPointerDown(event: PointerEvent): void {CODE
LOW…n/MatchCommandDetailDialog/MatchCommandDetailDialog.ts115 async function toggleSelectedMatchCommandDisabled(): Promise<void> {CODE
LOW…lugins/setting/src/events/codeEvent/ZtoolsCodeEvent.ts91export function addZtoolsCodeEventListener(CODE
LOW…lugins/setting/src/events/codeEvent/ZtoolsCodeEvent.ts106export function initZtoolsBaseEventHandler(options: InitBaseEventHandlerOptions = {}): void {CODE
LOW…g/src/views/PluginMarketSetting/PluginMarketSetting.ts25export function jumpFunctionPluginMarketSetting(config: PluginMarketSettingJumpFunction): void {CODE
LOW…-plugins/setting/src/views/SyncSetting/SyncSetting.vue188async function handleDeploymentModeChange(mode: DeploymentMode): Promise<void> {CODE
LOW…-plugins/setting/src/views/SyncSetting/SyncSetting.vue259async function handlePrivateConnectionTest(): Promise<void> {CODE
LOW…-plugins/setting/src/views/SyncSetting/SyncSetting.vue394async function refreshVisibleConflictPanel(): Promise<void> {CODE
LOW…/setting/src/views/PluginInstaller/PluginInstaller.vue67function handleSecurityDialogEscape(_event: KeyboardEvent): boolean {CODE
LOW…s/setting/src/views/PluginInstaller/PluginInstaller.ts14export function jumpFunctionPluginInstaller(config: PluginInstallerJumpFunction): void {CODE
LOW…lugins/setting/src/views/AboutSetting/AboutSetting.vue98async function handleAutoCheckUpdateChange(): Promise<void> {CODE
LOW…lugins/setting/src/views/AboutSetting/AboutSetting.vue134function handleUpdateOptionsKeydown(event: KeyboardEvent): void {CODE
LOW…lugins/setting/src/views/AboutSetting/AboutSetting.vue144async function handleReceiveBetaUpdatesChange(): Promise<void> {CODE
LOW…etting/src/views/ShortcutsSetting/ShortcutsSetting.vue270function handleAliasDialogAfterEnter(): void {CODE
LOW…etting/src/views/ShortcutsSetting/ShortcutsSetting.vue368async function loadBuiltInShortcutSettings(): Promise<void> {CODE
LOW…etting/src/views/ShortcutsSetting/ShortcutsSetting.vue568async function handleToggleBuiltInShortcut(CODE
LOW…etting/src/views/ShortcutsSetting/ShortcutsSetting.vue589function handleBuiltInToggleChange(key: BuiltInShortcutKey, event: Event): void {CODE
LOW…setting/src/views/ShortcutsSetting/ShortcutsSetting.ts11export function normalizeShortcutTargetValue(value: string): string {CODE
LOW…setting/src/views/ShortcutsSetting/ShortcutsSetting.ts43export function buildShortcutTargetCandidates(target: {CODE
LOW…setting/src/views/ShortcutsSetting/ShortcutsSetting.ts134export function jumpFunctionShortcutsSetting(config: ShortcutsSettingJumpFunction): void {CODE
LOW…ins/setting/src/views/PluginsSetting/PluginsSetting.ts17export function jumpFunctionPluginsSetting(config: PluginsSettingJumpFunction): void {CODE
LOW…ns/setting/src/views/PluginsSetting/PluginsSetting.vue264function handleUpgradeDownloadProgress(CODE
LOW…ns/setting/src/views/PluginsSetting/PluginsSetting.vue452async function handleUninstallFromDetail(CODE
LOW…ns/setting/src/views/PluginsSetting/PluginsSetting.vue601async function handleTogglePluginDisabled(plugin: any, disabled: boolean): Promise<void> {CODE
LOW…-plugins/setting/src/views/DataSetting/DataSetting.vue269async function handleAccountStorageChanged(): Promise<void> {CODE
LOW…ng/src/views/NotificationCenter/NotificationCenter.vue92async function executeNotificationAction(item: NotificationItem): Promise<void> {CODE
LOW…ing/src/views/LocalLaunchSetting/LocalLaunchSetting.ts11export function jumpLocalLaunchSettingJumpFunction(config: LocalLaunchSettingJumpFunction): void {CODE
LOW…/setting/src/views/AiModelsSetting/AiModelsSetting.vue285function officialModelSupportsModality(model: OfficialAiModel, modality: AiInputModality): boolean {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue281function temperatureCapabilityMode(modelId: string): TemperatureCapabilityMode {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue303function setTemperatureCapabilityMode(modelId: string, mode: TemperatureCapabilityMode): void {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue379function setReasoningCapabilityMode(modelId: string, mode: ReasoningCapabilityMode): void {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue405function supportedReasoningEfforts(modelId: string): AiReasoningEffort[] {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue429function setReasoningResponseField(modelId: string, responseField: AiReasoningResponseField): void {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue440function setDefaultReasoningEffort(modelId: string, effort: AiReasoningEffort): void {CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue454function toggleSupportedReasoningEffort(CODE
LOW…delsSetting/components/AiModelEditor/AiModelEditor.vue530function validateTemperatureConfigs(): string {CODE
LOW…ng/src/views/AllCommandsSetting/AllCommandsSetting.vue139function isDirectAppCommandDisabled(cmd: Command): boolean {CODE
LOW…ng/src/views/AllCommandsSetting/AllCommandsSetting.vue145async function toggleDirectAppCommandDisabled(cmd: Command): Promise<void> {CODE
LOW…ng/src/views/AllCommandsSetting/AllCommandsSetting.vue348function getFilteredSystemCommandsForSource(source: Source): Command[] {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue378function handleQuickActionsClickOutside(): void {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue411async function handleCompactMainWindowHeaderChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue427async function handleWindowDefaultHeightChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue455async function handleClipboardRetentionDaysChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue472async function resetClipboardRetentionDays(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue570async function handleAutoBackToSearchChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue589async function handleHideMainWindowOnPluginEscChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue608async function handleWindowPositionStrategyChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue630async function handleShowRecentInSearchChange(): Promise<void> {CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue642async function handleShowMatchRecommendationChange(): Promise<void> {CODE
146 more matches not shown…
Decorative Section Separators10 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMsrc/main/core/zbrowser/zbrowserExecutor.ts174 // ─────────────────── 操作方法 ───────────────────COMMENT
MEDIUMsrc/main/core/zbrowser/zbrowserExecutor.ts952 // ─────────────────── Cookie 操作 ───────────────────COMMENT
MEDIUMsrc/main/core/zbrowser/zbrowserExecutor.ts1035 // ─────────────────── 运行入口 ───────────────────COMMENT
MEDIUMsrc/main/core/zbrowser/zbrowserExecutor.ts1129 // ─────────────────── 私有方法 ───────────────────COMMENT
MEDIUMsrc/main/api/renderer/pluginInstaller.ts61// ━━━ Types ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
MEDIUMsrc/main/api/renderer/pluginInstaller.ts88// ━━━ PluginInstallerAPI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
MEDIUMsrc/main/api/renderer/pluginInstaller.ts665 // ━━━ Private ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
MEDIUMsrc/main/api/renderer/pluginMarket.ts11// ━━━ Types ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
MEDIUMsrc/main/api/renderer/pluginMarket.ts190// ━━━ Constants ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
MEDIUMsrc/main/api/renderer/pluginMarket.ts201// ━━━ PluginMarketAPI ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━COMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALtests/main/windowManagerMacActivation.test.ts293 mainWindow.webContents.send.mock.calls.filter(CODE
Verbosity Indicators5 hits · 9 pts
SeverityFileLineSnippetContext
LOWscripts/sync-api-types.js72 // Step 1: 克隆或更新 uTools 仓库COMMENT
LOW⚡scripts/sync-api-types.js89 // Step 2: 创建目标目录COMMENT
LOW⚡scripts/sync-api-types.js94 // Step 3: 复制并转换文件COMMENT
LOWscripts/sync-api-types.js126 // Step 4: 创建/更新 ZTools 特定文件COMMENT
LOWscripts/sync-api-types.js255 // Step 5: 完成COMMENT
Structural Annotation Overuse5 hits · 9 pts
SeverityFileLineSnippetContext
LOWscripts/sync-api-types.js72 // Step 1: 克隆或更新 uTools 仓库COMMENT
LOW⚡scripts/sync-api-types.js89 // Step 2: 创建目标目录COMMENT
LOW⚡scripts/sync-api-types.js94 // Step 3: 复制并转换文件COMMENT
LOWscripts/sync-api-types.js126 // Step 4: 创建/更新 ZTools 特定文件COMMENT
LOWscripts/sync-api-types.js255 // Step 5: 完成COMMENT
Fake / Example Data9 hits · 8 pts
SeverityFileLineSnippetContext
LOWtests/main/storage3.test.ts134 manager.switchAccount('user@example.com')CODE
LOWtests/main/storage3.test.ts137 expect(fs.existsSync(path.join(layout.accountsRoot, hashAccountId('user@example.com')))).toBe(CODE
LOW…ns/setting/src/views/GeneralSetting/GeneralSetting.vue1835 v-model="placeholder"CODE
LOWsrc/main/core/afdianPayment.ts110 input.getAttribute('placeholder') || ''CODE
LOWsrc/main/core/afdianPayment.ts188 /验证码|verification code/i.test(input.getAttribute('placeholder') || '')CODE
LOWsrc/main/core/afdianPayment.ts243 /验证码|verification code/i.test(input.getAttribute('placeholder') || '')CODE
LOWsrc/main/core/afdianPayment.ts270 input.getAttribute('placeholder') || ''CODE
LOWsrc/main/core/afdianPayment.ts319 input.getAttribute('placeholder') || ''CODE
LOWsrc/main/core/afdianPayment.ts323 /验证码|verification code/i.test(input.getAttribute('placeholder') || '') || visibleInputs.indexOf(input) === 1CODE