The most full featured web-to-app toolkit on Android, a complete APK workshop that runs entirely on your phone
This report summarizes scanner evidence for shiaho777/web-to-app, a Kotlin project with 7,149 GitHub stars. SynthScan examined 399,839 lines of code across 1554 source files, recording 818 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 17.0 (Elevated 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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 38 finding(s).
Are imports declared and package/API names verified? 700 finding(s).
Are wrappers, guards, and repeated structures necessary? 83 finding(s).
Which changes need focused human review? 818 finding(s).
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.
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.
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.
The scanner identified 818 distinct pattern matches across 15 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/com/webtoapp/core/privacy/FingerprintGeneratorTest.kt | 48 | val hints = com.webtoapp.core.kernel.UserAgentProfileDeriver.derive(fp.userAgent) | CODE |
| CRITICAL | …va/com/webtoapp/core/webview/WebViewResumeStoreTest.kt | 55 | com.google.common.truth.Truth.assertWithMessage("unexpectedly persisted $dead") | CODE |
| CRITICAL | …com/webtoapp/core/activation/ActivationRelaunchTest.kt | 230 | timeLimitMs = java.util.concurrent.TimeUnit.DAYS.toMillis(3), | CODE |
| CRITICAL | …ebtoapp/core/agent/llm/ReasoningContentContractTest.kt | 71 | val ev = com.webtoapp.core.agent.engine.AgentEvent.ThinkingDelta( | CODE |
| CRITICAL | app/src/main/java/com/webtoapp/WebToAppApplication.kt | 93 | com.webtoapp.core.i18n.HostLanguage.applyBlocking(this) | CODE |
| CRITICAL | app/src/main/java/com/webtoapp/WebToAppApplication.kt | 170 | com.webtoapp.core.crypto.AesCryptoEngine.clearKeyCache() | CODE |
| CRITICAL | app/src/main/java/com/webtoapp/ui/MainActivity.kt | 159 | val lightSurface = com.webtoapp.ui.shared.WindowHelper.isColorLight(bg) | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 205 | com.webtoapp.core.script.UserScriptStorage.deleteScriptsForApp( | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 209 | com.webtoapp.core.app.ProjectDirCleaner.deleteForApp(getApplication(), webApp) | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 246 | com.webtoapp.core.script.UserScriptStorage.isFileReference(it.code) | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 250 | com.webtoapp.core.script.UserScriptStorage.internalizeScripts( | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 516 | injectScripts = com.webtoapp.core.script.UserScriptStorage.externalizeScripts( | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 538 | com.webtoapp.core.script.UserScriptStorage.deleteScriptsForApp( | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 543 | com.webtoapp.core.app.ProjectDirCleaner.deleteForApp(getApplication(), webApp) | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 684 | injectScripts = com.webtoapp.core.script.UserScriptStorage.externalizeScripts( | CODE |
| CRITICAL | …c/main/java/com/webtoapp/ui/viewmodel/MainViewModel.kt | 1510 | val config = com.webtoapp.core.scraper.WebsiteScraper.ScrapeConfig( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/splash/SplashLauncherActivity.kt | 59 | if (!com.webtoapp.core.appmodifier.PayloadIntegrity.verify( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/splash/SplashLauncherActivity.kt | 374 | com.webtoapp.ui.components.announcement.AnnouncementDialog( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/splash/SplashLauncherActivity.kt | 375 | config = com.webtoapp.ui.components.announcement.AnnouncementConfig( | CODE |
| CRITICAL | …ava/com/webtoapp/ui/codepreview/HtmlPreviewActivity.kt | 366 | view?.evaluateJavascript(com.webtoapp.core.webview.DownloadBridge.getInjectionScript(), null) | CODE |
| CRITICAL | …ava/com/webtoapp/ui/codepreview/HtmlPreviewActivity.kt | 367 | view?.evaluateJavascript(com.webtoapp.core.webview.PrintBridge.getInjectionScript(), null) | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 58 | if (!com.webtoapp.core.wordpress.WordPressDependencyManager.isPhpReady(context)) { | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 96 | com.webtoapp.core.wordpress.WordPressManager.autoInstallIfNeeded( | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 106 | com.webtoapp.core.wordpress.WordPressManager.applyRuntimeConfig( | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 213 | com.webtoapp.core.webview.LocalHttpServer.stablePortForPackageName(portOwner) | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 265 | val memorySite = com.webtoapp.core.webview.LocalHttpServer.MemorySite( | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 319 | com.webtoapp.core.webview.LocalHttpServer.shouldEnableCrossOriginIsolation(siteDir) | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 463 | com.webtoapp.core.webview.LocalHttpServer.stablePortForPackageName(portOwner) | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 599 | val nodePath = com.webtoapp.core.nodejs.NodeDependencyManager.getNodeLibraryPath(context) | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 601 | com.webtoapp.core.shell.ShellLogger.i("NodeJsShell", "nativeLibraryDir: ${context.applicationInfo.native | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 605 | com.webtoapp.core.shell.ShellLogger.e("NodeJsShell", "libnode.so 未找到") | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 612 | com.webtoapp.core.shell.ShellLogger.i("NodeJsShell", "libnode.so 路径: $nodePath (size=${java.io.File(node | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 625 | com.webtoapp.core.shell.ShellLogger.i("NodeJsShell", "提取 Node.js 项目文件到 ${projectDir.absolutePath}") | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 651 | com.webtoapp.core.shell.ShellLogger.i("NodeJsShell", "Node.js 就绪: $serverUrl") | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 657 | com.webtoapp.core.shell.ShellLogger.e("NodeJsShell", "Node.js 服务器启动失败") | CODE |
| CRITICAL⚡ | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 661 | com.webtoapp.core.shell.ShellLogger.e("NodeJsShell", "Node.js Shell 启动失败", e) | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 750 | if (!com.webtoapp.core.wordpress.WordPressDependencyManager.isPhpReady(context)) { | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 873 | val pythonHome = com.webtoapp.core.python.PythonDependencyManager.getPythonDir(context) | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 886 | val abi = com.webtoapp.core.python.PythonDependencyManager.getDeviceAbi() | CODE |
| CRITICAL | …rc/main/java/com/webtoapp/ui/shell/ShellServerModes.kt | 1078 | val elfInfo = com.webtoapp.core.golang.GoDependencyManager.parseElf(file) | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 90 | if (com.webtoapp.core.webview.FileChooserLifetime.isOpen()) { | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 91 | com.webtoapp.core.webview.FileChooserLifetime.holdCamera(uri) | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 95 | com.webtoapp.core.webview.CameraCaptureIntents.revokeOutput(activity, uri) | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 103 | ?: com.webtoapp.core.webview.FileChooserLifetime.cameraUri() | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 105 | ?: com.webtoapp.core.webview.FileChooserLifetime.callback() | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 400 | com.webtoapp.core.webview.CameraCaptureIntents.revokeOutput(activity, cameraPhotoUri) | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 408 | com.webtoapp.core.webview.FileChooserLifetime.holdCamera(output) | CODE |
| CRITICAL⚡ | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 411 | com.webtoapp.core.webview.CameraCaptureIntents.attachOutput( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 56 | com.webtoapp.data.model.DownloadLocationMode.valueOf( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 144 | com.webtoapp.core.webview.CameraCaptureIntents.revokeOutput(activity, photoUri) | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 147 | com.webtoapp.core.webview.FileChooserLifetime.markClosed() | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 167 | com.webtoapp.core.webview.FileChooserLifetime.holdCallback(filePathCallback) | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 189 | com.webtoapp.core.webview.FileChooserLifetime.markOpen() | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 228 | com.webtoapp.data.model.ShareDeliveryMode.valueOf(wv.shareDeliveryMode) | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 243 | val item = com.webtoapp.core.share.SharedContentInbox.findForFileChooser( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 305 | com.webtoapp.core.share.SharedContentInbox.claim(activity, item.id) | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 376 | com.webtoapp.core.webview.FileChooserLifetime.holdCamera(output) | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 377 | com.webtoapp.core.webview.CameraCaptureIntents.attachOutput( | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 476 | com.webtoapp.core.webview.FileChooserLifetime.markClosed() | CODE |
| CRITICAL | …/java/com/webtoapp/ui/shell/ShellPermissionDelegate.kt | 543 | com.webtoapp.core.webview.FileChooserLifetime.endPermissionDialog() | CODE |
| 606 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 28 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 30 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 89 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 91 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 152 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 154 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 201 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 203 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 311 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …pp/core/apkbuilder/WebViewConfigBooleanCoverageTest.kt | 313 | // ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 52 | // ── mime filter ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 85 | // ── chooser matching ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 103 | // ── filename sanitiser ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 141 | // ── end-to-end round trip ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 266 | // ── history relaunch (issue #1029) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 266 | // ── history relaunch (issue #1029) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 323 | // ── consume (issue #1038) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 323 | // ── consume (issue #1038) ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 386 | // ── on-demand byte reads (issue #1296) ───────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/core/share/SharedContentInboxTest.kt | 386 | // ── on-demand byte reads (issue #1296) ───────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 136 | // ── 防护强度:一键预设 ───────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 176 | // ── 当前指纹 ───────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 239 | // ── 环境伪装:三个维度各一个紧凑选择器 ───────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 251 | // ── 高级:逐项防护开关(折叠) ──────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 336 | // ──────────────────────────── 伪装维度选择器 ──────────────────────────── | COMMENT |
| MEDIUM | …java/com/webtoapp/ui/components/IsolationConfigCard.kt | 717 | // ──────────────────────────── 指纹展示辅助 ──────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 63 | // ── 头部 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 128 | // ── 推送通道 ───────────────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 199 | // ──────────────────────────── 轮询 ──────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 329 | // ──────────────────────────── WebSocket ──────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 403 | // ──────────────────────────── FCM ──────────────────────────── | COMMENT |
| MEDIUM | …a/com/webtoapp/ui/components/NotificationConfigCard.kt | 516 | // ──────────────────────────── 共享小部件 ──────────────────────────── | COMMENT |
| MEDIUM | …/com/webtoapp/ui/components/BackgroundRunConfigCard.kt | 46 | // ── 头部:图标 + 标题 + 状态副标题 + 开关 ────────────────── | COMMENT |
| MEDIUM | …/com/webtoapp/ui/components/BackgroundRunConfigCard.kt | 111 | // ── 保持唤醒 ───────────────────────────────────── | COMMENT |
| MEDIUM | …/com/webtoapp/ui/components/BackgroundRunConfigCard.kt | 151 | // ── 常驻通知(前台服务必需,可自定义文案)─────────── | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 46 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 49 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 67 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 69 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 679 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 681 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 769 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 771 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 800 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 802 | // ══════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | app/src/main/java/com/webtoapp/core/i18n/Strings.kt | 5207 | // ── Inbound share sheet (issue #943) ──────────────────────────────────────── | COMMENT |
| MEDIUM | app/src/main/java/com/webtoapp/core/i18n/Strings.kt | 5207 | // ── Inbound share sheet (issue #943) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/com/webtoapp/core/share/SharedContentInbox.kt | 296 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ain/java/com/webtoapp/core/share/SharedContentInbox.kt | 298 | // ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 34 | # ───────────────────────── enum values (must mirror the Kotlin source) ─ | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 66 | # ───────────────────────── regex helpers ─────────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 123 | # ───────────────────────── primitive checks ──────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 182 | # ───────────────────────── registry checks ───────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 274 | # ───────────────────────── cross-file consistency ───────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 306 | # ───────────────────────── per-folder structural checks ─────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/validate_modules.py | 538 | # ───────────────────────── entry point ───────────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/generate_submissions.py | 66 | # ───────────────────────── git helpers ───────────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/generate_submissions.py | 134 | # ───────────────────────── GitHub API helpers ────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/generate_submissions.py | 214 | # ───────────────────────── core logic ────────────────────────────────── | COMMENT |
| MEDIUM | .github/scripts/ci/generate_submissions.py | 525 | # ───────────────────────── CLI entry ─────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …src/main/assets/sample_projects/python-flask-en/app.py | 173 | except: pass | CODE |
| HIGH | app/src/main/assets/sample_projects/python-flask/app.py | 506 | except Exception: | CODE |
| HIGH | …src/main/assets/sample_projects/python-flask-ar/app.py | 158 | except: pass | CODE |
| HIGH | .github/scripts/ci/validate_modules.py | 498 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | .github/scripts/ci/generate_submissions.py | 298 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | .github/scripts/ci/generate_submissions.py | 330 | except subprocess.CalledProcessError: | CODE |
| HIGH | .github/scripts/ci/generate_submissions.py | 424 | except (urllib.error.HTTPError, urllib.error.URLError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …src/main/assets/sample_projects/python-flask-en/app.py | 8 | CODE | |
| LOW | …src/main/assets/sample_projects/python-flask-en/app.py | 10 | CODE | |
| LOW | …src/main/assets/sample_projects/python-flask-en/app.py | 11 | CODE | |
| LOW | …src/main/assets/sample_projects/python-flask-en/app.py | 12 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-en/main.py | 6 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-en/main.py | 7 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-en/main.py | 13 | CODE | |
| LOW | …src/main/assets/sample_projects/python-fastapi/main.py | 6 | CODE | |
| LOW | …src/main/assets/sample_projects/python-fastapi/main.py | 7 | CODE | |
| LOW | …src/main/assets/sample_projects/python-fastapi/main.py | 13 | CODE | |
| LOW | app/src/main/assets/sample_projects/python-flask/app.py | 8 | CODE | |
| LOW | app/src/main/assets/sample_projects/python-flask/app.py | 10 | CODE | |
| LOW | app/src/main/assets/sample_projects/python-flask/app.py | 11 | CODE | |
| LOW | app/src/main/assets/sample_projects/python-flask/app.py | 12 | CODE | |
| LOW | …n/assets/sample_projects/python-django/mysite/views.py | 5 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-ar/main.py | 6 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-ar/main.py | 7 | CODE | |
| LOW | …/main/assets/sample_projects/python-fastapi-ar/main.py | 13 | CODE | |
| LOW | …src/main/assets/sample_projects/python-flask-ar/app.py | 7 | CODE | |
| LOW | …ssets/sample_projects/python-django-en/mysite/views.py | 5 | CODE | |
| LOW | …ssets/sample_projects/python-django-ar/mysite/views.py | 4 | CODE | |
| LOW | …ssets/sample_projects/python-django-ar/mysite/views.py | 6 | CODE | |
| LOW | .github/scripts/audit_ui_design_system.py | 10 | CODE | |
| LOW | .github/scripts/ci/validate_modules.py | 23 | CODE | |
| LOW | .github/scripts/ci/validate_modules.py | 26 | CODE | |
| LOW | .github/scripts/ci/validate_modules.py | 31 | CODE | |
| LOW | .github/scripts/ci/generate_submissions.py | 43 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …btoapp/data/model/WebViewConfigDefaultsContractTest.kt | 61 | "enablePrintBridge", | COMMENT |
| LOW | …com/webtoapp/core/extension/ChromeExtensionPolyfill.kt | 1581 | // (storage.get, sendMessage, tabs.create, etc.) and direct values for sync methods | COMMENT |
| LOW | …webtoapp/core/appearance/BrowserDisguiseJsGenerator.kt | 801 | // [FINAL] 最终封印 — 属性枚举顺序 & 冻结关键对象 | COMMENT |
| LOW | …ain/java/com/webtoapp/core/apkbuilder/ApkBuildCache.kt | 401 | parts += "openWith=${config.openWithEnabled}" | COMMENT |
| LOW | …ain/java/com/webtoapp/core/apkbuilder/AxmlRebuilder.kt | 1321 | // each feature-stack bundle) into the binary AndroidManifest of the output | COMMENT |
| LOW | app/src/main/cpp/sys_optimizer.c | 1 | #define _GNU_SOURCE | COMMENT |
| LOW | app/src/main/cpp/perf_engine.c | 1 | #include <jni.h> | COMMENT |
| LOW | app/src/main/cpp/static_exec_loader.c | 21 | * | COMMENT |
| LOW | app/src/main/cpp/static_exec_loader.c | 41 | COMMENT | |
| LOW | app/src/main/cpp/static_exec_loader.c | 421 | COMMENT | |
| LOW | app/src/main/cpp/node_bridge.cpp | 1 | #include <jni.h> | COMMENT |
| LOW | app/src/main/cpp/go_exec_loader.c | 1 | #include <errno.h> | COMMENT |
| LOW | app/src/main/cpp/go_exec_loader.c | 21 | #define ET_EXEC 2 | COMMENT |
| LOW | app/src/main/cpp/go_exec_loader.c | 41 | #endif | COMMENT |
| LOW | …ets/web_extensions/wta_native_bridge/content_script.js | 1 | // WTA Native Bridge content script (GeckoView). | COMMENT |
| LOW | docs/guide/more-features/share-receive.md | 21 | The app dispatches a `wta:share` DOM event on `window` and `document`, and also exposes a small API: | COMMENT |
| LOW | docs/extensions/userscript.md | 1 | # Userscripts | COMMENT |
| LOW | docs/zh/guide/more-features/share-receive.md | 21 | App 会在 `window` 和 `document` 上派发 `wta:share` DOM 事件,同时暴露一个小 API: | COMMENT |
| LOW | docs/zh/extensions/userscript.md | 1 | # 油猴脚本 | COMMENT |
| LOW | .github/workflows/modules-publish.yml | 1 | name: Module Market Publish | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/main/assets/sample_projects/python-fastapi-en/main.py | 134 | document.getElementById('result').textContent=JSON.stringify(d,null,2)+'\\n\\n⏱️ '+ms+'ms'; | CODE |
| HIGH | …src/main/assets/sample_projects/python-fastapi/main.py | 134 | document.getElementById('result').textContent=JSON.stringify(d,null,2)+'\\n\\n⏱️ '+ms+'ms'; | CODE |
| HIGH | …/main/assets/sample_projects/python-fastapi-ar/main.py | 134 | document.getElementById('result').textContent=JSON.stringify(d,null,2)+'\\n\\n⏱️ '+ms+'ms'; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/main/assets/sample_projects/python-fastapi-en/main.py | 0 | fastapi api monitor — 精美的 api 监控仪表盘 展示 fastapi 的高性能异步能力,包含交互式 api 文档 | STRING |
| HIGH | …src/main/assets/sample_projects/python-fastapi/main.py | 0 | fastapi api monitor — 精美的 api 监控仪表盘 展示 fastapi 的高性能异步能力,包含交互式 api 文档 | STRING |
| HIGH | …/main/assets/sample_projects/python-fastapi-ar/main.py | 0 | fastapi api monitor — 精美的 api 监控仪表盘 展示 fastapi 的高性能异步能力,包含交互式 api 文档 | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 697 | except Exception: | CODE |
| LOW | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 716 | except Exception: | CODE |
| LOW | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 740 | except Exception: | CODE |
| LOW | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 750 | except Exception: | CODE |
| MEDIUM | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 762 | print(f"Error: Entry file not found: {entry_file}", file=sys.stderr) | CODE |
| MEDIUM | …rc/main/java/com/webtoapp/core/python/PythonRuntime.kt | 682 | def _patched_version(name): | CODE |
| MEDIUM | …c/main/java/com/webtoapp/core/apkbuilder/ApkBuilder.kt | 2933 | def _patched_version(name): | CODE |
| LOW | …c/main/java/com/webtoapp/core/apkbuilder/ApkBuilder.kt | 2946 | except Exception: | CODE |
| LOW | …c/main/java/com/webtoapp/core/apkbuilder/ApkBuilder.kt | 2965 | except Exception: | CODE |
| LOW | app/src/main/assets/sample_projects/python-flask/app.py | 506 | except Exception: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …c/main/java/com/webtoapp/ui/shell/MultiWebShellMode.kt | 501 | // The parent scaffold already reserves a solid status bar. A transparent | COMMENT |
| MEDIUM | …c/main/java/com/webtoapp/ui/shell/MultiWebShellMode.kt | 605 | // Fullscreen content padding is already applied by the parent scaffold | COMMENT |
| MEDIUM | …main/java/com/webtoapp/ui/shell/ShellScaffoldLayout.kt | 149 | // Fullscreen already owns the system bars, so the scaffold must not add | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate_shell_strings.py | 41 | CODE | |
| LOW | scripts/generate_shell_strings.py | 155 | CODE | |
| LOW | scripts/generate_shell_strings.py | 184 | CODE | |
| LOW | scripts/generate_shell_strings.py | 214 | CODE | |
| LOW | scripts/generate_shell_strings.py | 261 | CODE | |
| LOW | scripts/generate_shell_strings.py | 282 | CODE | |
| LOW | scripts/generate_shell_strings.py | 348 | CODE | |
| LOW | scripts/generate_shell_strings.py | 394 | CODE | |
| LOW | .github/scripts/ci/validate_modules.py | 502 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/webtoapp/core/apkbuilder/AppTypePreflightSmokeTest.kt | 126 | adminEmail = "admin@example.com", | CODE |
| LOW | …in/java/com/webtoapp/core/extension/ExtensionModule.kt | 178 | @SerializedName("placeholder") | CODE |
| LOW | …btoapp/core/agent/export/SaveSessionAsModuleUseCase.kt | 149 | placeholder = c.optString("placeholder") | CODE |
| LOW | …/com/webtoapp/core/agent/tool/builtin/PreviewScript.kt | 47 | var name = (el.getAttribute('aria-label') || el.getAttribute('placeholder') || el.innerText || el.value || ' | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check_config_field_drift.py | 69 | def extract_object_returned_keys(text: str) -> set[str]: | CODE |
| LOW | .github/scripts/ci/validate_modules.py | 276 | def _validate_plugin_registry_consistency( | CODE |
| LOW | .github/scripts/ci/generate_submissions.py | 278 | def _read_existing_submissions() -> dict[str, Any]: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/modules-publish.yml | 5 | # This file is what tells the in-app market who submitted each module | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/src/main/java/com/webtoapp/core/i18n/StringsA.kt | 12857 | AppLanguage.ENGLISH -> "Icons generated by AI will be saved here automatically" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …c/main/java/com/webtoapp/core/apkbuilder/ApkBuilder.kt | 2289 | // Re-parse and re-encode to canonical DER so the stored format is robust to the | COMMENT |