Repository Analysis

ok-oldking/ok-wuthering-waves

鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves

12.1 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of ok-oldking/ok-wuthering-waves, a Python project with 7,186 GitHub stars. SynthScan v2.0 examined 36,549 lines of code across 183 source files, recording 459 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 12.1 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

12.1
Adjusted Score
12.1
Raw Score
100%
Time Factor
2026-08-29
Last Push
7.2K
Stars
Python
Language
36.5K
Lines of Code
183
Files
459
Pattern Hits
2026-08-29
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 1MEDIUM 5LOW 453

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 459 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers277 hits · 246 pts
SeverityFileLineSnippetContext
LOWconfig.py11def _find_most_recently_run_pc_exe():CODE
LOWconfig.py44def _find_pc_exe_from_registry():CODE
LOWconfig.py85def _is_wuthering_waves_registry_entry(subkey_name, display_name):CODE
LOWconfig.py90def _find_pc_exe_near_registered_path(registered_path):CODE
LOWsetup.py24def find_packages_with_init_files(base_dir):CODE
LOWtests/TestMergeEchoTask.py21 def test_ungrouped_tasks_and_global_bag_hotkey_metadata(self):CODE
LOWtests/TestMergeEchoTask.py55 def test_stops_when_selected_echoes_do_not_fill_a_batch(self):CODE
LOWtests/TestMergeEchoTask.py129 def test_alerts_and_stops_when_bag_hotkey_fails(self):CODE
LOWtests/TestMergeEchoTask.py156 def test_quietly_returns_when_not_enough_notification_is_disabled(self):CODE
LOWtests/TestMergeEchoTask.py170 def test_daily_additional_tasks_metadata(self):CODE
LOWtests/TestMergeEchoTask.py195 def test_daily_runs_only_post_daily_selected_tasks(self):CODE
LOWtests/TestMergeEchoTask.py209 def assert_farm_alert_was_sent(task_class):CODE
LOWtests/TestMergeEchoTask.py231 def test_daily_does_not_alert_farm_echo_when_not_selected(self):CODE
LOWtests/TestMergeEchoTask.py244 def test_daily_suppresses_and_restores_not_enough_echo_notification(self):CODE
LOWtests/TestMergeEchoTask.py252 def assert_notification_suppressed(task_class):CODE
LOWtests/TestMergeEchoTask.py263 def test_daily_rejects_farm_echo_without_teleport(self):CODE
LOWtests/TestMergeEchoTask.py277 def test_daily_rejects_nightmare_without_selection(self):CODE
LOWtests/TestMergeEchoTask.py291 def test_daily_accepts_valid_additional_task_configs(self):CODE
LOWtests/TestMergeEchoTask.py311 def test_daily_stops_before_initialization_when_additional_config_is_invalid(self):CODE
LOWtests/TestKey.py37 def test_load_hotkey_skips_set_key_when_short_action_bar_visible(self):CODE
LOWtests/TestSkipDialogWideMode.py15 def test_finds_skip_dialog_icons_with_frame_processor(self):CODE
LOWtests/TestSkipDialogWideMode.py30 def test_finds_and_clicks_wide_mode_confirm_dialog(self):CODE
LOWtests/TestEnhanceEchoStatusBox.py65 def test_drop_search_box_covers_both_drop_templates(self):CODE
LOWtests/TestEnhanceEchoStatusBox.py80 def test_lock_search_box_covers_both_lock_templates(self):CODE
LOWtests/TestNightmareNestTask.py19 def test_nest_is_checked_before_nightmare_changes_book_scroll(self):CODE
LOWtests/TestNightmareNestTask.py26 def test_capture_success_clears_combat_before_post_combat_waits(self):CODE
LOWtests/TestNightmareNestTask.py47 def test_combat_nest_rechecks_after_pickup_in_team_and_open_world(self):CODE
LOWtests/TestNightmareNestTask.py77 def test_capture_mode_does_not_check_combat_after_pickup(self):CODE
LOWtests/TestNightmareNestTask.py84 def test_unreachable_nest_is_cached_when_travel_does_not_enter_world(self):CODE
LOWtests/TestNightmareNestTask.py123 def test_find_nest_skips_cached_unreachable_row(self):CODE
LOWtests/TestNightmareNestTask.py152 def test_cache_key_ignores_small_ocr_position_jitter(self):CODE
LOWtests/TestDomainRecoveryLoop.py18 def test_method_has_retry_parameter_with_default(self):CODE
LOWtests/TestDomainRecoveryLoop.py26 def test_method_increments_retries(self):CODE
LOWtests/TestDomainRecoveryLoop.py38 def test_method_stops_when_retry_budget_exceeded(self):CODE
LOWtests/TestDomainRecoveryLoop.py62 def test_loop_unpacks_must_use_from_farm_in_domain(self):CODE
LOWtests/TestMouseResetTask.py31 def test_run_keeps_only_one_callback(self):CODE
LOWtests/TestMouseResetTask.py39 def test_disabled_callback_stops_and_run_restarts_after_enable(self):CODE
LOWtests/TestMouseResetTask.py51 def test_callback_continues_while_enabled(self):CODE
LOWtests/TestMouseResetTask.py63 def test_browser_mode_does_not_start_loop(self):CODE
LOWtests/TestFarmEcho.py15 def test_find_boss_check_mark(self):CODE
LOWtests/TestCD.py27 def test_cd_values_from_screenshots(self):CODE
LOWtests/TestBaseCombatTask.py38 def test_revive_search_boss_name_matches_game_language(self):CODE
LOWtests/TestBaseCombatTask.py53 def test_revive_flow_uses_language_aware_search_name(self):CODE
LOWtests/test_rover.py8 def test_wind_team_state_initializes_when_form_is_already_known(self):CODE
LOWtests/TestSkipDialogConfirm.py15 def test_clicks_checkbox_then_confirm(self):CODE
LOWtests/TestSkipDialogConfirm.py38 def test_does_nothing_when_dialog_is_absent(self):CODE
LOWtests/TestSkipDialogConfirm.py47 def test_waits_for_optional_dialog_without_raising(self):CODE
LOWtests/TestSkipDialogConfirm.py59 def test_teleport_reuses_optional_dialog_handler(self):CODE
LOWtests/TestCustomCharLoader.py37 def test_loads_enabled_custom_char_class(self):CODE
LOWtests/TestCustomCharLoader.py53 def test_disabled_custom_char_uses_builtin_class(self):STRING
LOWtests/TestCustomCharLoader.py66 def test_remove_custom_char_code_deletes_file_and_uses_builtin_class(self):STRING
LOWtests/TestCustomCharLoader.py81 def test_failed_save_restores_previous_custom_code(self):STRING
LOWtests/TestCustomCharLoader.py97 def test_team_code_only_applies_to_matching_team(self):STRING
LOWtests/TestCustomCharLoader.py131 def test_same_character_can_have_different_code_in_two_teams(self):STRING
LOWtests/TestCustomCharLoader.py155 def test_list_custom_teams_skips_unreadable_team_folder(self):STRING
LOWtests/TestCustomCharLoader.py174 def test_export_and_import_team_archive(self):STRING
LOWtests/TestFeatureSet.py33 def test_template_larger_than_search_area_raises(self):CODE
LOWtests/TestScheduleSupport.py28 def test_selected_tasks_enable_schedule_support(self):CODE
LOWtests/TestScheduleSupport.py61 def test_tacet_task_run_handles_login_before_entering_world(self):CODE
LOWtests/TestScheduleSupport.py75 def test_multi_account_returns_to_main_before_switching_to_login(self):CODE
217 more matches not shown…
Deep Nesting69 hits · 69 pts
SeverityFileLineSnippetContext
LOWconfig.py11CODE
LOWconfig.py44CODE
LOWtests/TestScheduleSupport.py28CODE
LOW…ents/skills/ok-script-i18n/scripts/task_i18n_helper.py36CODE
LOW.github/scripts/extract_issue_log.py191CODE
LOW.github/scripts/extract_issue_log.py240CODE
LOWsrc/char/Changli.py62CODE
LOWsrc/char/Jinhsi.py82CODE
LOWsrc/char/Xigelika.py24CODE
LOWsrc/char/Cartethyia.py108CODE
LOWsrc/char/Cartethyia.py160CODE
LOWsrc/char/Suisui.py30CODE
LOWsrc/char/BaseChar.py369CODE
LOWsrc/char/BaseChar.py591CODE
LOWsrc/char/BaseChar.py963CODE
LOWsrc/char/Phrolova.py16CODE
LOWsrc/char/YangYangSp.py24CODE
LOWsrc/char/Chisa.py29CODE
LOWsrc/char/Zhezhi.py76CODE
LOWsrc/char/Aemeath.py59CODE
LOWsrc/char/Augusta.py13CODE
LOWsrc/char/Carlotta.py122CODE
LOWsrc/char/Carlotta.py237CODE
LOWsrc/char/Mornye.py10CODE
LOWsrc/char/Mornye.py34CODE
LOWsrc/char/Denia.py19CODE
LOWsrc/char/Camellya.py39CODE
LOWsrc/char/Camellya.py171CODE
LOWsrc/char/Camellya.py179CODE
LOWsrc/char/Qingxiao.py16CODE
LOWsrc/char/Qingxiao.py67CODE
LOWsrc/char/Luhesi.py29CODE
LOWsrc/char/Ciaccona.py26CODE
LOWsrc/char/Rover.py99CODE
LOWsrc/char/Rover.py196CODE
LOWsrc/char/Hiyuki.py37CODE
LOWsrc/char/Hiyuki.py84CODE
LOWsrc/char/Phoebe.py244CODE
LOWsrc/char/Phoebe.py465CODE
LOWsrc/char/Phoebe.py639CODE
LOWsrc/char/Zani.py152CODE
LOWsrc/char/Zani.py679CODE
LOWsrc/combat/CombatCheck.py139CODE
LOWsrc/combat/CombatCheck.py297CODE
LOWsrc/task/ChangeEchoTask.py44CODE
LOWsrc/task/AutoPickTask.py33CODE
LOWsrc/task/FiveToOneTask.py74CODE
LOWsrc/task/process_feature.py4CODE
LOWsrc/task/FarmMapTask.py176CODE
LOWsrc/task/DailyTask.py77CODE
LOWsrc/task/FarmEchoTask.py113CODE
LOWsrc/task/FarmEchoTask.py531CODE
LOWsrc/task/AutoCombatTask.py76CODE
LOWsrc/task/BaseCombatTask.py98CODE
LOWsrc/task/BaseCombatTask.py123CODE
LOWsrc/task/BaseCombatTask.py396CODE
LOWsrc/task/BaseCombatTask.py579CODE
LOWsrc/task/BaseCombatTask.py836CODE
LOWsrc/task/GardenTask.py29CODE
LOWsrc/task/NightmareNestTask.py80CODE
9 more matches not shown…
Unused Imports49 hits · 49 pts
SeverityFileLineSnippetContext
LOWtests/TestFarmEcho.py4CODE
LOWtests/TestFarmEcho.py6CODE
LOWtests/TestEnchaneEcho.py1CODE
LOWtests/TestEnchaneEcho.py5CODE
LOWtests/TestEcho.py5CODE
LOWtests/TestCombatCheck.py1CODE
LOWtests/TestWorld.py5CODE
LOWtests/TestOCR.py1CODE
LOWtests/TestOCR.py4CODE
LOW.agents/skills/deploy/scripts/next_tag.py4CODE
LOW.github/scripts/extract_issue_log.py4CODE
LOWsrc/globals.py3CODE
LOWsrc/globals.py5CODE
LOWsrc/OnnxYolo8Detect.py1CODE
LOWsrc/OnnxYolo8Detect.py2CODE
LOWsrc/OnnxYolo8Detect.py3CODE
LOWsrc/char/Changli.py6CODE
LOWsrc/char/BaseChar.py5CODE
LOWsrc/char/BaseChar.py6CODE
LOWsrc/char/BaseChar.py8CODE
LOWsrc/char/Rebecca.py2CODE
LOWsrc/char/Zani.py8CODE
LOWsrc/combat/CombatCheck.py6CODE
LOWsrc/combat/CombatCheck.py7CODE
LOWsrc/task/TacetTask.py3CODE
LOWsrc/task/ChangeEchoTask.py8CODE
LOWsrc/task/AutoPickTask.py3CODE
LOWsrc/task/AutoPickTask.py5CODE
LOWsrc/task/FiveToOneTask.py1CODE
LOWsrc/task/FiveToOneTask.py2CODE
LOWsrc/task/FiveToOneTask.py5CODE
LOWsrc/task/FiveToOneTask.py5CODE
LOWsrc/task/FarmMapTask.py1CODE
LOWsrc/task/FarmMapTask.py2CODE
LOWsrc/task/FarmMapTask.py4CODE
LOWsrc/task/FarmMapTask.py8CODE
LOWsrc/task/SimulationTask.py1CODE
LOWsrc/task/SkipBaseTask.py1CODE
LOWsrc/task/SkipBaseTask.py2CODE
LOWsrc/task/SkipBaseTask.py6CODE
LOWsrc/task/WWOneTimeTask.py1CODE
LOWsrc/task/DomainTask.py1CODE
LOWsrc/task/AutoCombatTask.py5CODE
LOWsrc/task/BaseCombatTask.py13CODE
LOWsrc/task/AutoLoginTask.py2CODE
LOWsrc/task/BaseWWTask.py5CODE
LOWsrc/task/BaseWWTask.py9CODE
LOWsrc/task/BaseWWTask.py9CODE
LOWsrc/task/EnhanceEchoTask.py9CODE
Excessive Try-Catch Wrapping40 hits · 44 pts
SeverityFileLineSnippetContext
LOWsrc/OpenVinoYolo8Detect.py38 except Exception:CODE
LOWsrc/OpenVinoYolo8Detect.py55 except Exception as e:CODE
LOWsrc/OpenVinoYolo8Detect.py142 except Exception as e:CODE
MEDIUMsrc/OpenVinoYolo8Detect.py131def detect(self, image, threshold=0.5, label=-1):CODE
LOWsrc/OnnxYolo8Detect.py79 except Exception as e:CODE
LOWsrc/OnnxYolo8Detect.py205 except Exception as e:CODE
LOWsrc/char/CustomCharLoader.py102 except Exception:CODE
LOWsrc/char/CustomCharLoader.py163 except Exception:CODE
LOWsrc/char/CustomCharLoader.py196 except Exception as e:CODE
LOWsrc/char/CustomCharLoader.py316 except Exception:CODE
LOWsrc/char/CustomCharLoader.py371 except Exception as e:CODE
LOWsrc/char/CustomCharLoader.py431 except Exception:CODE
LOWsrc/char/CustomCharLoader.py458 except Exception as e:CODE
LOWsrc/char/Linnai.py92 except Exception as e:CODE
LOWsrc/char/Linnai.py106 except Exception as e:CODE
MEDIUMsrc/char/Linnai.py87def find_target_status_in_box(self, box_name):CODE
LOWsrc/combat/CombatCheck.py189 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py472 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py495 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py530 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py562 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py579 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py604 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py612 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py633 except Exception as e:CODE
LOWsrc/gui/CharacterCodeTab.py713 except Exception as e:CODE
MEDIUMsrc/gui/CharacterCodeTab.py607def _preview_and_import_archive(self, archive_path, expected_team=None):CODE
LOWsrc/task/ChangeEchoTask.py60 except Exception as e:CODE
LOWsrc/task/DailyTask.py109 except Exception as e:CODE
LOWsrc/task/DailyTask.py181 except Exception as e:CODE
LOWsrc/task/DailyTask.py196 except Exception as e:CODE
LOWsrc/task/DailyTask.py242 except Exception:CODE
LOWsrc/task/FarmEchoTask.py106 except Exception as e:CODE
LOWsrc/task/FarmEchoTask.py192 except Exception as e:CODE
LOWsrc/task/FarmEchoTask.py226 except Exception as e:CODE
LOWsrc/task/FarmEchoTask.py390 except Exception:CODE
LOWsrc/task/AutoCombatTask.py42 except Exception as e:CODE
LOWsrc/task/BaseCombatTask.py232 except Exception as e:CODE
LOWsrc/task/MouseResetTask.py58 except Exception as e:CODE
LOWsrc/task/EnhanceEchoTask.py77 except Exception as e:CODE
Over-Commented Block12 hits · 12 pts
SeverityFileLineSnippetContext
LOWrequirements.txt1#COMMENT
LOWrequirements.txt21numpy==2.5.2COMMENT
LOWrequirements.txt41 # viaCOMMENT
LOWrequirements.txt61 # viaCOMMENT
LOWrequirements.txt81 # pyside6COMMENT
LOW.github/workflows/issue-triage.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"4cc8d8c95df5b538c35c626cb2ec9ab312f5a42b538c6b58b8b742ebdf6COMMENT
LOW.github/workflows/issue-triage.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/issue-triage.lock.yml41# - actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0COMMENT
LOW.github/workflows/issue-triage.lock.yml921 # --allow-tool githubCOMMENT
LOW.github/workflows/pull-request-review.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"f3b10126b2f29c4fbe4a64991ad1567c417ffe253774744f44033344fe4COMMENT
LOW.github/workflows/pull-request-review.lock.yml21# gh aw compileCOMMENT
LOW.github/workflows/pull-request-review.lock.yml41# - actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0COMMENT
Redundant / Tautological Comments5 hits · 8 pts
SeverityFileLineSnippetContext
LOW.github/workflows/test.yml89 # Check if the previous command succeededCOMMENT
LOWsrc/OnnxYolo8Detect.py171 # Check if indices is not an empty tuple, which can happen if NMSBoxes returns nothing.COMMENT
LOWsrc/char/BaseChar.py796 # # Check if the connected co mponent touches the borderCOMMENT
LOWsrc/task/BaseCombatTask.py1057 # Check if the contour is closed by checking if the start and end points are the sameCOMMENT
LOWsrc/task/BaseCombatTask.py1064 # Check if the polygon is closed (has no gaps) and has a reasonable number of vertices for a ring.COMMENT
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtests/test_extract_issue_log.py121 "pyappify app_version:None, app_profile:null, "CODE
AI Structural Patterns4 hits · 4 pts
SeverityFileLineSnippetContext
LOWsrc/char/Zani.py545CODE
LOWsrc/char/Zani.py715CODE
LOWsrc/task/BaseWWTask.py347CODE
LOWsrc/task/BaseWWTask.py575CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/task/BaseCombatTask.py1023 # Define the color rangeCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/task/BaseWWTask.py1323 # This is more robust than checking individual R, G, B channels.COMMENT