Leaderboard github.com
BeyondDimension/SteamTools
🛠「Watt Toolkit」是一个开源跨平台的多功能 Steam 工具箱。
AI provenance
2%
explicit
- Confidence
- 95%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
62/100
weak
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
60/100
weak
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
2% explicit
Explicit AI attribution on 2% of first-party code added; an estimated 2% including velocity signals.
How the score is built
- Explicitly attributed share2%
- Unattributed share in AI-pace bursts12%
- Estimated AI-generated share2%
- AI tool configuration files1
- Work sessions at AI pace25
- Releases at AI pace0
- Coding-style index (1.0+ means possible)0.11
Attributed AI tools
| Tool | Commits | Lines added | First seen | Last seen |
|---|---|---|---|---|
| GitHub Copilot coding agent | 45 | 12,839 | 2026-03-11 | 2026-11-05 |
| OpenAI Codex | 2 | 87 | 2026-06-25 | 2026-11-06 |
Lines added per month all AI-attributed share
- 2020-0949,863 · 0% AI
- 2020-1111,821 · 0% AI
- 2020-1216,157 · 0% AI
- 2021-0152,953 · 0% AI
- 2021-0259,689 · 0% AI
- 2021-0366,971 · 0% AI
- 2021-04125,150 · 0% AI
- 2021-0520,443 · 0% AI
- 2021-0621,842 · 0% AI
- 2021-0715,254 · 0% AI
- 2021-0814,241 · 0% AI
- 2021-095,756 · 0% AI
- 2021-1021,486 · 0% AI
- 2021-1128,388 · 0% AI
- 2021-1210,541 · 0% AI
- 2022-014,355 · 0% AI
- 2022-024,027 · 0% AI
- 2022-034,954 · 0% AI
- 2022-047,895 · 0% AI
- 2022-0552,474 · 0% AI
- 2022-0613,861 · 0% AI
- 2022-078,652 · 0% AI
- 2022-084,353 · 0% AI
- 2022-0916 · 0% AI
- 2022-1064 · 0% AI
- 2022-11239 · 0% AI
- 2022-122,645 · 0% AI
- 2023-01439 · 0% AI
- 2023-0249,300 · 0% AI
- 2023-036,280 · 0% AI
- 2023-041,634 · 0% AI
- 2023-0516,429 · 0% AI
- 2023-0614,582 · 0% AI
- 2023-0733,978 · 0% AI
- 2023-0814,220 · 0% AI
- 2023-099,832 · 0% AI
- 2023-10263 · 0% AI
- 2023-114,945 · 0% AI
- 2023-121,331 · 0% AI
- 2024-0187 · 0% AI
- 2024-025,161 · 0% AI
- 2024-031,102 · 0% AI
- 2024-041,872 · 0% AI
- 2024-0547 · 0% AI
- 2024-061,104 · 0% AI
- 2024-072,636 · 0% AI
- 2024-084,584 · 0% AI
- 2024-091,060 · 0% AI
- 2024-1052 · 0% AI
- 2024-11459 · 0% AI
- 2024-1250 · 0% AI
- 2025-01206 · 0% AI
- 2025-028 · 0% AI
- 2025-03254 · 0% AI
- 2025-051 · 0% AI
- 2026-01383 · 0% AI
- 2026-02392 · 0% AI
- 2026-03648 · 0% AI
- 2026-0685 · 100% AI
- 2026-07152 · 100% AI
- 2026-08476 · 100% AI
- 2026-1011,706 · 100% AI
- 2026-116,227 · 8% AI
Findings in AI-attributed lines vs the rest
From git blame: 9,366 lines trace to AI-attributed commits, 109,771 to others. Reported, not scored.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Code quality | 0.00 | 0.10 | 0.00× |
| Security | 0.00 | 0.02 | 0.00× |
Evidence by analyzer
Explicit AI attributionok27 items
- GitHub Copilot coding agent: 45 attributed commits, 12,839 lines added
- OpenAI Codex: 2 attributed commits, 87 lines added
- OpenAI Codex: on merged branch (5768c34327)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot'
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- GitHub Copilot coding agent: on merged branch (04e0895dad)
- attributed_commit_share
- 1.0%
- attributed_commits
- 47
- attributed_loc
- 12,926
- attributed_loc_share
- 1.6%
- commits
- 4,901
- effective_loc
- 816,075
- tools_detected
- 2
AI tool configurationok1 item
- artifacts
- 1
- earliest_adoption
- 2026-10-28
- tools_configured
- 1
- workflow_agents
- 0
Commit velocityok15 items
- 16,084 lines of first-party code in ~3.9h (4,119 lines/hour, 1 commit session)
- 10,873 lines of first-party code in ~4.0h (2,718 lines/hour, 1 commit session)
- 10,894 lines of first-party code in ~4.7h (2,319 lines/hour, 2 commit session)
- 7,802 lines of first-party code in ~4.0h (1,950 lines/hour, 1 commit session)
- 6,875 lines of first-party code in ~4.0h (1,719 lines/hour, 1 commit session)
- 3,782 lines of first-party code in ~2.4h (1,596 lines/hour, 1 commit session)
- 4,312 lines of first-party code in ~4.3h (1,003 lines/hour, 3 commit session)
- 3,484 lines of first-party code in ~4.0h (871 lines/hour, 1 commit session)
- 3,346 lines of first-party code in ~4.0h (836 lines/hour, 1 commit session)
- 3,291 lines of first-party code in ~4.0h (823 lines/hour, 1 commit session)
- 3,180 lines of first-party code in ~4.0h (795 lines/hour, 1 commit session)
- 2,707 lines of first-party code in ~4.0h (677 lines/hour, 1 commit session)
- 1,239 lines of first-party code in ~1.9h (660 lines/hour, 2 commit session)
- 2,139 lines of first-party code in ~3.3h (654 lines/hour, 2 commit session)
- 2,657 lines of first-party code in ~4.1h (653 lines/hour, 2 commit session)
- excluded_import_loc
- 208,274
- flagged_loc
- 104,443
- flagged_loc_share
- 17.3%
- flagged_units
- 25
- max_loc_per_hour
- 13,047.47
- measured_loc
- 604,877
- median_loc_per_hour
- 62.65
- pr_timed_units
- 9
- pre_ai_era_burst_loc
- 166,619
- pre_ai_era_bursts
- 16
- pre_ai_era_measured_loc
- 269,836
- work_units
- 2,806
Release velocityok
- flagged_releases
- 0
- max_loc_per_day
- 3,982.80
- releases
- 73
Coding styleok5 items
- step-by-step narration comment: // STEP 0: Search HostFxr
- step-by-step narration comment: // STEP 1: Load HostFxr and get exported hosting functions
- step-by-step narration comment: // STEP 2: Initialize and start the .NET Core runtime
- step-by-step narration comment: // STEP 3: Load managed assembly and get function pointer to a managed method
- step-by-step narration comment: // First, try to get the signature from the catalog signature APIs.
- count:assistant_voice
- 0
- count:emoji_in_code
- 14
- count:narrated_steps
- 5
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 11
- files:narrated_steps
- 2
- files:placeholder
- 0
- index
- 0.11
- lines_scanned
- 105,453
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0.13
- per_kloc:narrated_steps
- 0.05
- per_kloc:placeholder
- 0
Findings in AI-written linesok
- ai_lines
- 9,366
- blame_failures
- 0
- files_blamed
- 980
- other_lines
- 109,771
- quality:ai_findings
- 0
- quality:ai_per_kloc
- 0
- quality:other_findings
- 11
- quality:other_per_kloc
- 0.10
- quality:ratio
- 0
- security:ai_findings
- 0
- security:ai_per_kloc
- 0
- security:other_findings
- 2
- security:other_per_kloc
- 0.02
- security:ratio
- 0
Code quality
62 weak
Code quality is weak: test-to-source ratio 0.00, CI runs tests; 16% of function code in complex or long functions; 6% duplicated lines. Weakest area: testing.
How the score is built
- Complexity63
- Duplication69
- Lint and smells99
- Tests and CI35
- Documentation65
- Type safetynot measured
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok10 items
- AboutAppInfoPopup::GetInfoString in src/AboutAppInfoPopup.cs: complexity 81, 387 lines
- ProxyService::StartProxyServiceCoreAsync in src/BD.WTTS.Client.Plugins.Accelerator/Services/Mvvm/ProxyService.Operate.cs: complexity 73, 242 lines
- AboutPageViewModel::GetInfoString in src/BD.WTTS.Client/UI/ViewModels/Pages/AboutPageViewModel.EasterEgg.cs: complexity 70, 323 lines
- Program::MainCore in src/BD.WTTS.Client.AppHost/Program.cs: complexity 69, 251 lines
- Startup::StartAsync in src/BD.WTTS.Client/Startup/Startup.cs: complexity 65, 242 lines
- Startup::RunUIApplication in src/BD.WTTS.Client/Startup/Startup.Host.cs: complexity 60, 187 lines
- HostsFileServiceImpl::HandleHosts in src/BD.WTTS.Client/Services.Implementation/Net/HostsFileServiceImpl.cs: complexity 54, 212 lines
- Startup::ConfigureCommands in src/BD.WTTS.Client/Startup/Startup.Commands.cs: complexity 47, 411 lines
- Handler in src/BD.WTTS.Client.Tools.Publish/Commands/IDotNetPublishCommand.cs: complexity 42, 389 lines
- MainAsync in src/BD.WTTS.Client.IPC/Services/IPCSubProcessService.cs: complexity 41, 148 lines
- complex_functions
- 70
- function_nloc
- 50,165
- functions
- 3,527
- long_functions
- 27
- many_param_functions
- 10
- mean_ccn
- 3.23
- p90_ccn
- 7
- risky_nloc_share
- 15.6%
Duplication (jscpd)ok10 items
- 6+ duplicated lines: src/AboutAppInfoPopup.cs:51 and src/BD.WTTS.Client/UI/ViewModels/Pages/AboutPageViewModel.EasterEgg.cs:56
- 6+ duplicated lines: src/Avalonia.Skia.Internals/ImmutableBitmap.cs:27 and src/Avalonia.Skia.Internals/ImmutableBitmap.cs:94
- 6+ duplicated lines: src/Avalonia.Skia.Internals/SkiaSharpHelpers.cs:22 and src/Avalonia.Skia.Internals/SkiaSharpHelpers.cs:62
- 6+ duplicated lines: src/BD.WTTS.Client.AppHost/MessageBox.cs:35 and src/BD.WTTS.Client.AppHost/MessageBox.cs:48
- 6+ duplicated lines: src/BD.WTTS.Client.AppHost/Net35.cs:78 and src/BD.WTTS.Client/Startup/Startup.CompatibilityCheck.cs:90
- 6+ duplicated lines: src/BD.WTTS.Client.AppHost/Program.cs:100 and src/BD.WTTS.Client/Startup/Startup.CompatibilityCheck.cs:66
- 6+ duplicated lines: src/BD.WTTS.Client.Avalonia/Extensions/ServiceCollection/ServiceCollectionExtensions.TryAddAvaloniaThemeService.cs:1 and src/BD.WTTS.Client.Avalonia/Extensions/ServiceCollection/ServiceCollectionExtensions.TryAddAvaloniaToastService.cs:1
- 6+ duplicated lines: src/BD.WTTS.Client.Avalonia/Services.Implementation/UI/Views/Windows/AvaloniaWindowManagerImpl.cs:84 and src/BD.WTTS.Client/Services/UI/Views/Windows/IWindowManager.cs:12
- 6+ duplicated lines: src/BD.WTTS.Client.Avalonia/Services.Implementation/UI/Widgets/AvaloniaFilePickerPlatformService.cs:29 and src/BD.WTTS.Client/Models/AvaloniaFilePickerFileTypeFilter.cs:24
- 6+ duplicated lines: src/BD.WTTS.Client.Avalonia/Services.Implementation/UI/Widgets/AvaloniaFilePickerPlatformService.cs:269 and src/BD.WTTS.Client.Avalonia/Services.Implementation/UI/Widgets/AvaloniaFilePickerPlatformService.cs:307
- compared_lines
- 76,508
- duplicated_lines
- 4,656
- duplicated_share
- 6.1%
- files
- 980
Lintok
- category:best-practice
- 11
- findings
- 11
- scanned_lines
- 118,735
- weighted_findings
- 2.75
Tests and CIok5 items
- CI config: .github/workflows/dotnet.yml
.github/workflows/dotnet.yml - CI config: .github/workflows/publish.yml
.github/workflows/publish.yml - CI config: .github/workflows/sync-gitee.yml
.github/workflows/sync-gitee.yml - CI config: .github/workflows/xamarin.yml
.github/workflows/xamarin.yml - CI runs tests (dotnet test, unittest)
- check:ci_present
- yes
- check:ci_runs_lint
- no
- check:ci_runs_tests
- yes
- check:has_tests
- no
- check:test_ratio
- no
- check:tests_cochange
- no
- ci_files
- 4
- cochange_commits
- 227
- cochange_share
- 0.0%
- source_lines
- 119,137
- test_lines
- 0
- test_ratio
- 0
Documentationok2 items
- README.md
README.md - LICENSE
LICENSE
- check:changelog
- no
- check:contributing
- no
- check:license
- yes
- check:readme
- yes
- readme_lines
- 97
Type safetyskipped
Security
60 weak
Security posture is weak: 24 high-severity workflow issues. Weakest area: ci actions.
How the score is built
- Secrets72
- Static analysis (SAST)100
- Vulnerable dependenciesnot measured
- CI workflows0
- Security posture40
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesskipped
no registry dependencies declared
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 0
- secrets_low_confidence
- 7
- secrets_nonprod
- 3
Static analysis (opengrep)ok
- findings
- 2
- findings_high
- 0
- findings_low
- 0
- findings_medium
- 2
- parse_errors
- 19
- scanned_lines
- 118,735
- weighted_findings
- 1.20
Dependencies (osv-scanner)skipped
CI workflows (zizmor)ok
- findings
- 72
- findings_high
- 24
- findings_low
- 35
- findings_medium
- 13
- penalty
- 316.20
- workflows
- 4
Security postureok1 item
- Dependency updates: .github/dependabot.yml
.github/dependabot.yml
- check:dependency_updates
- yes
- check:lockfiles
- yes
- check:security_policy
- no
- check:signed_commits
- no
- signed_commit_share
- 2.5%
- unpinned_manifests
- 0
Release downloadsok5 items
- release 3.2.0 ships Steam++_v3.2.0_linux_arm64.tgz (2448 downloads)
- release 3.2.0 ships Steam++_v3.2.0_linux_x64.tgz (1915 downloads)
- release 3.2.0 ships Steam++_v3.2.0_macos.dmg (21696 downloads)
- release 3.2.0 ships Steam++_v3.2.0_win_x64.7z (6379 downloads)
- release 3.2.0 ships Steam++_v3.2.0_win_x64.exe (21720 downloads)
- binary_assets
- 44
- signals
- 1
- suspicious
- 0
Findings
24 high15 medium22 low34 info
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:134 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:142 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:150 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:158 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:166 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:174 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:182 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:190 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:26 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:32 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/dotnet.yml:66 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:116 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:25 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:258 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:262 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:31 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:68 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/publish.yml:76 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/sync-gitee.yml:16 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/xamarin.yml:21 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/xamarin.yml:27 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/xamarin.yml:33 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/xamarin.yml:57 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/xamarin.yml:66 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| medium | zizmor/dependabot-cooldown |
.github/dependabot.yml:17 | insufficient cooldown in Dependabot updates [confidence high] | CI workflows (zizmor) |
| medium | zizmor/dependabot-cooldown |
.github/dependabot.yml:8 | insufficient cooldown in Dependabot updates [confidence high] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/dotnet.yml:13 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/dotnet.yml:25 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/dotnet.yml:64 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/publish.yml:1 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/publish.yml:14 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/publish.yml:24 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/publish.yml:66 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/publish.yml:74 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/sync-gitee.yml:12 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/xamarin.yml:10 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/xamarin.yml:20 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | opengrep/csharp.lang.security.filesystem.unsafe-path-combine |
src/BD.WTTS.Client.Tools.Publish/Helpers/MSIXHelper.cs:251 | String argument rootPublicPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] | Static analysis (opengrep) |
| medium | opengrep/csharp.lang.security.filesystem.unsafe-path-combine |
src/BD.WTTS.Client.Tools.Publish/Helpers/MSIXHelper.cs:274 | String argument dirPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] | Static analysis (opengrep) |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/HttpServer/Middleware/RequestLoggingMiddleware.cs:49 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/HttpServer/Middleware/RequestLoggingMiddleware.cs:53 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/HttpServer/Middleware/RequestLoggingMiddleware.cs:57 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/PacketIntercept/DnsInterceptor.cs:156 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/PacketIntercept/TcpInterceptor.cs:49 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/PacketIntercept/TcpInterceptor.cs:53 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.ArchiSteamFarmPlus/_/ArchiSteamFarm/NLog/ArchiLogger.cs:15 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.ArchiSteamFarmPlus/_/ArchiSteamFarm/NLog/ArchiLogger.cs:25 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.ArchiSteamFarmPlus/_/ArchiSteamFarm/NLog/ArchiLogger.cs:35 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.ArchiSteamFarmPlus/_/ArchiSteamFarm/NLog/ArchiLogger.cs:40 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | opengrep/csharp.lang.best-practice.structured-logging |
src/BD.WTTS.Client.Plugins.ArchiSteamFarmPlus/_/ArchiSteamFarm/NLog/ArchiLogger.cs:45 | String interpolation in log message obscures the distinction between variables and the log message. Use structured logging instead, where the variables are passed as additional arguments and the interpolation is performed by the logging... | Lint |
| low | zizmor/obfuscation |
.github/workflows/publish.yml:310 | obfuscated usage of GitHub Actions features [confidence high] | CI workflows (zizmor) |
| low | gitleaks/generic-api-key |
Web/app.8ca12835.js:169 | Possible generic-api-key secret in history (commit a04b041760); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
Web/uploads/js/steamvac/1.5.js:24 | Possible generic-api-key secret in history (commit a04b041760); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
references/Titanium-Web-Proxy/docs/api/Titanium.Web.Proxy.Network.DefaultCertificateDiskCache.html:305 | Possible generic-api-key secret in history (commit 798355e342); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
references/Titanium-Web-Proxy/docs/api/Titanium.Web.Proxy.Network.ICertificateCache.html:275 | Possible generic-api-key secret in history (commit 798355e342); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
references/Titanium-Web-Proxy/docs/index.json:305 | Possible generic-api-key secret in history (commit 798355e342); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
references/Titanium-Web-Proxy/src/Titanium.Web.Proxy/Certificates/DefaultCertificateDiskCache.cs:22 | Possible generic-api-key secret in history (commit 798355e342); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
references/Titanium-Web-Proxy/src/Titanium.Web.Proxy/Certificates/ICertificateCache.cs:15 | Possible generic-api-key secret in history (commit 798355e342); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
src/BD.WTTS.Client/Services/Implementation/Steam/SteamGridDBWebApiServiceImpl.cs:8 | Possible generic-api-key secret in history (commit 931d5654d6); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
src/ST.Blazor.BackManage/Client/wwwroot/data/menu.json:138 | Possible generic-api-key secret in history (commit fdb652f09c); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
src/ST.Client/Services/Implementation/SteamGridDBWebApiServiceImpl.cs:13 | Possible generic-api-key secret in history (commit add400fbae); removed from the current tree but still retrievable | Secrets (gitleaks) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:124 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:134 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:135 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:142 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:143 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:150 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:151 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:158 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:159 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:166 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:167 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:174 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:175 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:182 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:183 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:190 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:191 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:198 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:199 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:206 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:207 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:214 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:215 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:222 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:223 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:230 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:231 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:238 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:239 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:246 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:247 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:254 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/template-injection |
.github/workflows/publish.yml:255 | code injection via template expansion [confidence low] | CI workflows (zizmor) |
| info | zizmor/superfluous-actions |
.github/workflows/publish.yml:262 | action functionality is already included by the runner [confidence high] | CI workflows (zizmor) |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | ok | prov-5 | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-5 | 0 | |
| Findings in AI-written lines | AI provenance | ok | git-blame | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 11 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | skipped | — | 0 | |
| CI workflows (zizmor) | Security | ok | zizmor 1.32.0 | 72 | |
| Dependencies (osv-scanner) | Security | skipped | — | 0 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | skipped | — | 0 | no registry dependencies declared |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 2 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 10 |
Score history
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | fc6f13d01cfe | prov-5+qual-2+sec-2 | 2% | 62 | 60 |
Full text report
- Repository: https://github.com/BeyondDimension/SteamTools
- Commit:
fc6f13d01cfe5d470ca87645a33e5f528e9248c0 - Generated: 2026-11-14T15:14:52+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 2 | explicit | 95% | 100% |
| Code quality | 62 | weak | 90% | 100% |
| Security | 60 | weak | 85% | 100% |
AI provenance
Explicit AI attribution on 2% of first-party code added; an estimated 2% including velocity signals.
- Explicitly attributed share (lower bound): 1.6%
- Unattributed share in AI-consistent velocity bursts: 12.1%
- Estimated AI-generated share: 1.6%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| GitHub Copilot coding agent | 45 | 12,839 |
| OpenAI Codex | 2 | 87 |
- AI tooling configured in repo: github-copilot
Current source lines last changed by AI-attributed commits: 9,366 of 119,137.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Quality | 0.0 | 0.1 | 0.0x |
| Security | 0.0 | 0.018 | 0.0x |
- Stylometry index: 0.11 per 1,000 lines (narrated steps 5, placeholders 0, assistant phrasing 0, emoji 14). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-01 | 206 | 0% |
| 2025-02 | 8 | 0% |
| 2025-03 | 254 | 0% |
| 2025-05 | 1 | 0% |
| 2026-01 | 383 | 0% |
| 2026-02 | 392 | 0% |
| 2026-03 | 648 | 0% |
| 2026-06 | 85 | 100% |
| 2026-07 | 152 | 100% |
| 2026-08 | 476 | 100% |
| 2026-10 | 11,706 | 100% |
| 2026-11 | 6,227 | 8% |
Evidence
- OpenAI Codex: on merged branch (5768c34327) (ceac9b65a2e6)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (11f35fcf36cd)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (3d855ef204bf)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (cb4ee35c36eb)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (76b0a5fc21c6)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (0918d776fe08)
- GitHub Copilot coding agent: trailer 'Co-authored-by: Copilot' (788b90335270)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (4ed8319f7462)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (9b66636a0ce5)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (17ab5c2e7582)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (88bb1bad1654)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (36ffd2c076fb)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (cb18e2d99c90)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (0bb5226be0d9)
- GitHub Copilot coding agent: on merged branch (04e0895dad) (ea2d8247ad36)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is weak: test-to-source ratio 0.00, CI runs tests; 16% of function code in complex or long functions; 6% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 63 |
| Duplication | 69 |
| Code smells (Opengrep) | 99 |
| Tests and CI | 35 |
| Documentation | 65 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 3,527; mean complexity 3.2, 90th percentile 7; 70 complex and 27 long functions
- Duplicated lines: 6.1% of 76,508 compared
- Tests: 0 test lines for 119,137 source lines (ratio 0.00); CI test commands: dotnet test, unittest; 0% of recent source commits also change tests
- Docs missing or thin: contributing, changelog
Most complex functions:
- AboutAppInfoPopup::GetInfoString in src/AboutAppInfoPopup.cs: complexity 81, 387 lines
- ProxyService::StartProxyServiceCoreAsync in src/BD.WTTS.Client.Plugins.Accelerator/Services/Mvvm/ProxyService.Operate.cs: complexity 73, 242 lines
- AboutPageViewModel::GetInfoString in src/BD.WTTS.Client/UI/ViewModels/Pages/AboutPageViewModel.EasterEgg.cs: complexity 70, 323 lines
- Program::MainCore in src/BD.WTTS.Client.AppHost/Program.cs: complexity 69, 251 lines
- Startup::StartAsync in src/BD.WTTS.Client/Startup/Startup.cs: complexity 65, 242 lines
Security
Security posture is weak: 24 high-severity workflow issues. Weakest area: ci actions.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 72 |
| Static analysis (Opengrep) | 100 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | 0 |
| Posture (policy, updates, signing, lockfiles) | 40 |
| OpenSSF Scorecard | n/a |
- Posture checks passed: dependency updates, lockfiles; missing: security policy, signed commits
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:26 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:32 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:66 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:134 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:142 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:150 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:158 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:166 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:174 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:182 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/dotnet.yml:190 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:25 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:31 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:68 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:76 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:116 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:258 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/publish.yml:262 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/sync-gitee.yml:16 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/xamarin.yml:21 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/xamarin.yml:27 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/xamarin.yml:33 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/xamarin.yml:57 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/xamarin.yml:66 |
| medium | opengrep/csharp.lang.security.filesystem.unsafe-path-combine: String argument rootPublicPath is used to read or write data from a file via Path.Combine without direct sanitization via Path.GetFileName. If the path is user-supplied data this can lead to path traversal. [confidence medium] |
src/BD.WTTS.Client.Tools.Publish/Helpers/MSIXHelper.cs:251 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Distribution signals
- binary-release-asset: release 3.2.0 ships Steam++_v3.2.0_linux_arm64.tgz (2448 downloads)
- binary-release-asset: release 3.2.0 ships Steam++_v3.2.0_linux_x64.tgz (1915 downloads)
- binary-release-asset: release 3.2.0 ships Steam++_v3.2.0_macos.dmg (21696 downloads)
- binary-release-asset: release 3.2.0 ships Steam++_v3.2.0_win_x64.7z (6379 downloads)
- binary-release-asset: release 3.2.0 ships Steam++_v3.2.0_win_x64.exe (21720 downloads)
Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.
Repository profile
- Source lines: 119,137; test lines: 0
| Language | Lines |
|---|---|
| C# | 118,648 |
| PowerShell | 402 |
| Shell | 87 |