autowsgr 2.2.0__tar.gz → 2.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- autowsgr-2.2.1/.agents/skills/emulator-debug/SKILL.md +118 -0
- autowsgr-2.2.1/.agents/skills/generic-issue-log-analysis/SKILL.md +311 -0
- autowsgr-2.2.1/.agents/skills/release-backend/SKILL.md +113 -0
- autowsgr-2.2.1/.gitattributes +7 -0
- autowsgr-2.2.1/.github/CONTRIBUTING.md +90 -0
- autowsgr-2.2.1/.github/ISSUE_TEMPLATE/bug_report.yml +56 -0
- autowsgr-2.2.1/.github/ISSUE_TEMPLATE/config.yml +5 -0
- autowsgr-2.2.1/.github/ISSUE_TEMPLATE/enhancement_suggestion.yml +35 -0
- autowsgr-2.2.1/.github/workflows/ai-issue-analysis.yml +64 -0
- autowsgr-2.2.1/.github/workflows/lint.yml +25 -0
- autowsgr-2.2.1/.github/workflows/lunar.yml +28 -0
- autowsgr-2.2.1/.github/workflows/pytest.yml +31 -0
- autowsgr-2.2.1/.github/workflows/release.yml +58 -0
- autowsgr-2.2.1/.github/workflows/sync-upstream.yml +19 -0
- autowsgr-2.2.1/.gitignore +142 -0
- autowsgr-2.2.1/.pre-commit-config.yaml +29 -0
- autowsgr-2.2.1/AGENTS.md +85 -0
- autowsgr-2.2.1/CLAUDE.md +1 -0
- {autowsgr-2.2.0/autowsgr.egg-info → autowsgr-2.2.1}/PKG-INFO +15 -19
- {autowsgr-2.2.0 → autowsgr-2.2.1}/README.md +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/__init__.py +1 -1
- autowsgr-2.2.1/autowsgr/combat/README.md +202 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/actions.py +4 -3
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/engine.py +6 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/handlers.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/node_tracker.py +6 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/recognizer.py +5 -5
- autowsgr-2.2.1/autowsgr/context/README.md +23 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/controller/scrcpy.py +22 -20
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/detector.py +12 -9
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/os_control/linux.py +21 -14
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/os_control/macos.py +5 -5
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/os_control/windows.py +18 -11
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/image_resources/keys.py +3 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/infra/__init__.py +4 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/infra/config.py +10 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/infra/exceptions.py +24 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/infra/logger.py +11 -9
- autowsgr-2.2.1/autowsgr/ops/README.md +117 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/campaign.py +2 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/handlers.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/logic.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/state.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/navigate.py +4 -4
- autowsgr-2.2.1/autowsgr/ops/retry_plan.md +111 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/startup.py +4 -3
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/main.py +2 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/game.py +4 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/health.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/ops.py +9 -9
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/system.py +4 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/task.py +9 -9
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/serializers.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/types.py +1 -1
- autowsgr-2.2.1/autowsgr/ui/README.md +366 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/fleet_change/_change.py +2 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/repair.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/build_page.py +9 -9
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/choose_ship_page.py +2 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/map_controller.py +17 -15
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/main_page/event_nav.py +11 -14
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/base.py +3 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/data.py +4 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/campaign.py +38 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/expedition.py +6 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/sortie.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/mission_page/data.py +4 -7
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/sidebar_page.py +5 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/tabbed_page.py +3 -7
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/utils/navigation.py +2 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/utils/ship_list.py +1 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/api_dll.py +6 -9
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/ocr.py +20 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/pixel.py +1 -1
- autowsgr-2.2.1/docs/ai-issue-analysis-bot.md +47 -0
- autowsgr-2.2.1/docs/architecture/README.md +219 -0
- autowsgr-2.2.1/docs/architecture/combat-engine.md +427 -0
- autowsgr-2.2.1/docs/architecture/context-and-config.md +268 -0
- autowsgr-2.2.1/docs/architecture/emulator.md +183 -0
- autowsgr-2.2.1/docs/architecture/infra.md +256 -0
- autowsgr-2.2.1/docs/architecture/ops.md +304 -0
- autowsgr-2.2.1/docs/architecture/scheduler-and-server.md +311 -0
- autowsgr-2.2.1/docs/architecture/ui.md +225 -0
- autowsgr-2.2.1/docs/architecture/vision.md +297 -0
- autowsgr-2.2.1/docs/developer/test_pkg.md +223 -0
- autowsgr-2.2.1/docs/logo.png +0 -0
- autowsgr-2.2.1/docs/spelling_wordlist.txt +3 -0
- autowsgr-2.2.1/docs/usage/usage_combat.md +478 -0
- autowsgr-2.2.1/docs/usage/usage_daily_ops.md +330 -0
- autowsgr-2.2.1/docs/usage/usage_decisive.md +333 -0
- autowsgr-2.2.1/docs/usage/usage_quickstart.md +216 -0
- autowsgr-2.2.1/examples/usersettings.full.yaml +138 -0
- autowsgr-2.2.1/examples/usersettings.minimal.yaml +25 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/pyproject.toml +78 -56
- autowsgr-2.2.1/renovate.json +46 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/combat/test_combat.py +33 -33
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/conftest.py +2 -1
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/emulator/test_controller.py +55 -46
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/infra/test_config.py +14 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/infra/test_file_utils.py +6 -5
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/build.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/campaign.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/cook.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/decisive_battle.py +3 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/destroy.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/event_fight.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/exercise.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/expedition.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/normal_fight.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/repair.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/reward.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/scheduler.py +1 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/startup.py +1 -2
- autowsgr-2.2.1/testing/ui/README.md +296 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/_framework.py +3 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/backyard_page/e2e.py +12 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/bath_page/e2e.py +9 -3
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/battle_preparation/e2e.py +14 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/battle_preparation/test_unit.py +56 -45
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/build_page/e2e.py +9 -3
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/canteen_page/e2e.py +8 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/decisive_battle_page/e2e.py +10 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/event_page/e2e.py +12 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/friend_page/e2e.py +8 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/intensify_page/e2e.py +9 -3
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/main_page/e2e.py +22 -18
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/map_page/e2e.py +13 -7
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/map_page/test_unit.py +14 -11
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/mission_page/e2e.py +8 -2
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/page/test_unit.py +10 -10
- autowsgr-2.2.1/testing/ui/run_all_e2e.ps1 +70 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/run_all_e2e.py +6 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/sidebar_page/e2e.py +12 -6
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/test_matcher.py +23 -10
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/test_ocr.py +5 -8
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/test_roi.py +11 -6
- autowsgr-2.2.1/tools/VisualIdentity.md +121 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/tools/pixel_marker.py +5 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/tools/update_shipnames.py +4 -16
- autowsgr-2.2.1/usersettings.yaml +141 -0
- autowsgr-2.2.1/uv.lock +4215 -0
- autowsgr-2.2.0/MANIFEST.in +0 -2
- autowsgr-2.2.0/PKG-INFO +0 -89
- autowsgr-2.2.0/autowsgr.egg-info/SOURCES.txt +0 -1197
- autowsgr-2.2.0/autowsgr.egg-info/dependency_links.txt +0 -1
- autowsgr-2.2.0/autowsgr.egg-info/requires.txt +0 -15
- autowsgr-2.2.0/autowsgr.egg-info/top_level.txt +0 -6
- autowsgr-2.2.0/setup.cfg +0 -4
- {autowsgr-2.2.0 → autowsgr-2.2.1}/LICENSE +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/history.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/plan.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/recognition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/rules.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/combat/state.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/constants/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/constants/shipnames.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/build.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/equipment.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/expedition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/fleet.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/game_context.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/resources.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/context/ship.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/bin/scrcpy-server.jar +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/equip_complete_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/equip_fast_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/equip_full_depot_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/equip_start_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/resource_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/ship_complete_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/ship_fast_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/ship_full_depot_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/build/ship_start_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/choose_ship/tab_1_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/choose_ship/tab_2_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/choose_ship/tab_3_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/choose_ship/tab_4_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/battle_times_exceed_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/bypass_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/end_battle_page_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/end_exercise_page_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/end_map_page_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/fight_condition_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/fight_period_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/flagship_damage_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/formation_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/get_item_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/get_ship_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/missile_animation_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/missile_support_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/mvp_badge_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/night_battle_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/proceed_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/a_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/b_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/c_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/d_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/loot_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/s_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result/ss_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/result_page_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/ship_icon_1_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/ship_icon_2_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/combat/spot_enemy_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/README.md +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/confirm_1_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/confirm_2_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/confirm_3_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/confirm_4_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/common/confirm_5_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/cook/cook_button_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/cook/have_cook_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/cook/no_times_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/decisive/entry_cant_fight_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/decisive/entry_challenging_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/decisive/entry_refresh_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/decisive/entry_refreshed_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/decisive/use_last_fleet_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/error/bad_network_1_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/error/bad_network_2_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/error/network_retry_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/error/remote_login_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/error/remote_login_confirm_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/event/event_icon_20260212_720p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/reward/collect_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/reward/collect_all_540p.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/ui/build.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/ui/friend.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/ui/intensify.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/ui/map.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/images/ui/mission.png +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/decisive_battle/enemy_spec.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20220928/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20221118/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230117/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230613/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230809/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-7.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/E-8.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-7.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20230927/H-8.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20231215/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-7.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/E-8.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-7.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240206/H-8.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240419/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20240930/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20241219/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250123/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250710/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20250930/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260104/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/E-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/event/20260212/H-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/1-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/1-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/1-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/1-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/1-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/10-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/2-6.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/3-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/3-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/3-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/3-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/4-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/4-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/4-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/4-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/5-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/5-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/5-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/5-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/5-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/6-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/6-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/6-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/6-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/7-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/7-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/7-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/7-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/7-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/8-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/8-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/8-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/8-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/8-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/9-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/9-2.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/9-3.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/9-4.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/map/normal/9-5.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/missions.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/event/E5ADE/345/244/234/346/210/230.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/event/H5ADE/345/244/234/346/210/230.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/1-1.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/1/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/2-1/346/215/236/350/203/226/346/254/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/2/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/3/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/4/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/5-2/347/202/270/351/261/274.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/5/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-15SS.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-1/347/202/270/351/261/274/344/270/215/346/211/2235/351/261/274.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-1/347/202/270/351/261/274/344/270/215/346/211/223/350/275/273/346/257/215.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-1/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-1/347/273/203/346/275/234/350/211/207.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-2/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-4D/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6-4F/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/6/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-1/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-2/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-3/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-4/345/215/203/344/274/252.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-4/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-4/347/211/271/346/256/212/344/273/273/345/212/241..yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-4/350/203/226/346/254/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7-5/347/211/271/346/256/212/344/273/273/345/212/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/7/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-1A/345/217/252/347/202/2705/346/275/234/350/211/207.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-2A/345/217/252/347/202/2705/346/275/234/350/211/207.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-2A/347/202/270/351/261/274.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-2B.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-2BJ.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-2C/347/273/203/351/207/215/345/267/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-3CE/347/273/203/351/207/215/345/267/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-3C/351/261/274/351/230/237/347/273/203/347/272/247.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-4-6SSweek.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-5AI.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8-5AI/345/217/252/346/211/2231/351/251/261/351/200/220.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/8/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-1A.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-1B.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-1BF/347/202/270/351/261/274/345/270/246/346/215/236/350/203/226/346/254/241.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-1B/345/217/252/347/202/2705/346/275/234/350/211/207.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-2ADGHM.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-2C/345/217/252/347/202/2704/346/275/234/350/211/207.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-2C/347/202/270/351/261/274.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-2/350/203/226/346/254/24185/345/267/245/347/250/213.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-2/350/203/226/346/254/24185/346/227/240/351/227/250/347/245/236.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-3AD.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-46SS.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-4/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-5A/345/244/247/350/247/222/345/272/246.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-5B.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9-5BE.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/plan/normal_fight/9/345/221/250/345/270/270.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/data/shipnames.yaml +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/controller/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/controller/protocol.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/os_control/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/emulator/os_control/base.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/image_resources/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/image_resources/_lazy.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/image_resources/combat.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/image_resources/ops.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/infra/file_utils.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/__init__.py +29 -29
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/build.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/cook.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/__init__.py +8 -8
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/base.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/chapter.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/config.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/decisive/controller.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/destroy.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/event_fight.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/exercise.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/expedition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/normal_fight.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/repair.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ops/reward.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/scheduler/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/scheduler/launcher.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/scheduler/scheduler.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/routes/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/schemas.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/task_manager.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/server/ws_manager.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/backyard_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/bath_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/bath_page/page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/bath_page/recognition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/bath_page/signatures.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/base.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/blood.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/constants.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/detection.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/fleet_change/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/fleet_change/_detect.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/fleet_change.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/preparation.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/battle/supply.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/canteen_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/battle_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/fleet_ocr.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/overlay.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/decisive/preparation.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/event/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/event/event_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/friend_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/intensify_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/main_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/main_page/constants.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/main_page/controller.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/main_page/overlays.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/decisive.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/map/panels/exercise.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/mission_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/mission_page/page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/mission_page/recognition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/navigation.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/start_screen_page.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/ui/utils/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/__init__.py +15 -15
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/image_matcher.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/image_template.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/matcher.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/autowsgr/vision/roi.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/campaign.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/change_fleet.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/decisive.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/event_fight.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/exercise.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/expedition.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/normal_fight.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/examples/week.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/combat/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/emulator/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/emulator/test_os_control.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/infra/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/infra/test_exceptions.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ops/_framework.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/backyard_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/bath_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/battle_preparation/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/build_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/canteen_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/decisive_battle_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/event_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/friend_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/intensify_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/main_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/map_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/mission_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/ui/sidebar_page/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/_helpers.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/test_image_checker.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/testing/vision/test_image_template.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/tools/__init__.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/tools/benchmark_emulator.py +0 -0
- {autowsgr-2.2.0 → autowsgr-2.2.1}/tools/debug_screenshot.py +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: emulator-debug
|
|
3
|
+
description: 'Debug and fix emulator connection issues in AutoWSGR. Use when: ADB device not found, scrcpy connection timeout, ModuleNotFoundError for cv2/retry/adbutils, emulator serial mismatch, no first frame, screenshot timeout, emulator detection failure.'
|
|
4
|
+
argument-hint: 'Describe the error message or connection symptom'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Emulator Connection Debugging
|
|
8
|
+
|
|
9
|
+
Diagnose and fix emulator connection problems in AutoWSGR's scrcpy-based device control pipeline.
|
|
10
|
+
|
|
11
|
+
## Connection Pipeline Overview
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
usersettings.yaml (emulator.type / serial)
|
|
15
|
+
-> resolve_serial() # autowsgr/emulator/detector.py
|
|
16
|
+
-> adb connect <serial> # TCP devices only (port in serial)
|
|
17
|
+
-> adbutils.adb.device() # autowsgr/emulator/controller/scrcpy.py
|
|
18
|
+
-> window_size() # adbutils shell
|
|
19
|
+
-> deploy scrcpy-server.jar # push to /data/local/tmp/
|
|
20
|
+
-> start scrcpy server # app_process on device
|
|
21
|
+
-> connect video socket # LOCAL_ABSTRACT 'scrcpy'
|
|
22
|
+
-> wait first frame (10s) # H264 decode via av
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Diagnostic Procedure
|
|
26
|
+
|
|
27
|
+
### Step 1: Confirm Emulator is Running
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
Get-Process | Where-Object {
|
|
31
|
+
$_.ProcessName -match 'ld|dnplayer|bluestacks|mumu|nox|memu'
|
|
32
|
+
} | Select-Object ProcessName, Id
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Map process names to emulator types:
|
|
36
|
+
|
|
37
|
+
| ProcessName pattern | Emulator type |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `LdVBoxHeadless`, `dnplayer` | 雷电 |
|
|
40
|
+
| `MuMuVMMHeadless`, `MuMuNx*` | MuMu |
|
|
41
|
+
| `HD-Player`, `Bluestacks` | 蓝叠 |
|
|
42
|
+
|
|
43
|
+
### Step 2: Verify ADB Connectivity
|
|
44
|
+
|
|
45
|
+
Locate the ADB binary used by the project:
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
uv run python -c "from adbutils._utils import adb_path; print(adb_path())"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Then check devices:
|
|
52
|
+
|
|
53
|
+
```powershell
|
|
54
|
+
& "<adb_path>" devices -l
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
If the device list is empty, find the listening port and connect manually:
|
|
58
|
+
|
|
59
|
+
```powershell
|
|
60
|
+
netstat -ano | Select-String "LISTENING" | Select-String "16384|16416|7555|5555|5554"
|
|
61
|
+
& "<adb_path>" connect 127.0.0.1:<port>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Step 3: Validate usersettings.yaml
|
|
65
|
+
|
|
66
|
+
Key fields in `usersettings.yaml`:
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
emulator:
|
|
70
|
+
type: MuMu # Must match the actual running emulator
|
|
71
|
+
serial: null # null = auto-detect; or explicit like 127.0.0.1:16384
|
|
72
|
+
path: null # null = auto-detect from registry
|
|
73
|
+
process_name: null # null = auto-infer
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Supported `type` values**: 雷电, 蓝叠, MuMu, 云手机, 其他 (see `autowsgr/types.py`)
|
|
77
|
+
|
|
78
|
+
## Common Errors and Fixes
|
|
79
|
+
|
|
80
|
+
| Error | Cause | Fix |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `device 'emulator-5554' not found` | Config `type` mismatches actual emulator (e.g., 雷电 config but MuMu running) | Change `emulator.type` in usersettings.yaml |
|
|
83
|
+
| `device '127.0.0.1:16384' not found` | ADB server not connected to TCP device | Code auto-connects now; if still failing, manually `adb connect 127.0.0.1:16384` |
|
|
84
|
+
| `ModuleNotFoundError: cv2` | opencv-python + opencv-python-headless conflict | `uv pip uninstall opencv-python` then `uv sync` (project uses headless) |
|
|
85
|
+
| `ModuleNotFoundError: retry` | `retry2` not installed (provides `retry` module) | `uv sync` (retry2 is a transitive dep of adbutils) |
|
|
86
|
+
| `scrcpy video stream no first frame` | JAR not pushed, device too slow, or port conflict | Check `autowsgr/data/bin/scrcpy-server.jar` exists; increase screenshot_timeout |
|
|
87
|
+
| `未发现已连接的 ADB 设备` | No emulator process running or ADB server down | Start emulator; run `adb start-server` |
|
|
88
|
+
| `EmulatorConnectionError` after 3 retries | Persistent ADB issue | Kill all adb processes, restart emulator, then retry |
|
|
89
|
+
|
|
90
|
+
## Serial Auto-Detection Logic
|
|
91
|
+
|
|
92
|
+
`resolve_serial()` in `autowsgr/emulator/detector.py` follows this priority:
|
|
93
|
+
|
|
94
|
+
1. `config.serial` explicitly set -> use directly
|
|
95
|
+
2. Only 1 ADB device online -> auto-select
|
|
96
|
+
3. Multiple devices, but `config.type` matches exactly 1 -> auto-select
|
|
97
|
+
4. Multiple ambiguous devices -> interactive prompt (TTY only)
|
|
98
|
+
5. No devices -> raise `EmulatorConnectionError`
|
|
99
|
+
|
|
100
|
+
Serial-to-type matching patterns:
|
|
101
|
+
|
|
102
|
+
| Pattern | Type |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `emulator-\d+` | 雷电 |
|
|
105
|
+
| `127.0.0.1:1638x-16xxx` | MuMu 12 |
|
|
106
|
+
| `127.0.0.1:620xx` | MuMu (old) |
|
|
107
|
+
| `127.0.0.1:555x-59xx` | 蓝叠 |
|
|
108
|
+
|
|
109
|
+
## Key Source Files
|
|
110
|
+
|
|
111
|
+
| File | Role |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `autowsgr/emulator/controller/scrcpy.py` | ScrcpyController: connect, screenshot, deploy |
|
|
114
|
+
| `autowsgr/emulator/detector.py` | detect_emulators, resolve_serial, identify_emulator_type |
|
|
115
|
+
| `autowsgr/infra/config.py` | EmulatorConfig model, YAML loading |
|
|
116
|
+
| `autowsgr/types.py` | EmulatorType enum |
|
|
117
|
+
| `autowsgr/scheduler/launcher.py` | Launcher.connect() entry point |
|
|
118
|
+
| `autowsgr/data/bin/scrcpy-server.jar` | Bundled scrcpy server (v2.7) |
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: generic-issue-log-analysis
|
|
3
|
+
description: 分析当前仓库或用户明确指定的公开 GitHub issue(完整 URL 或 `#1234`)。优先读取 issue 正文和评论,按需下载日志包、截图、配置导出和崩溃转储,建立时间线后结合仓库代码、文档和必要的上游依赖判断根因,并给出修复建议或下一步排查建议。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Generic Issue Log Analysis
|
|
7
|
+
|
|
8
|
+
## Scope
|
|
9
|
+
|
|
10
|
+
- 默认把 `#1234` 视为当前仓库 issue。
|
|
11
|
+
- 如果用户给了完整 issue URL,则以该 URL 为准。
|
|
12
|
+
- 只分析可以直接访问的公开 issue、评论、截图和附件。
|
|
13
|
+
- 如果缺少日志、现场图、配置导出或崩溃信息,要先明确说明证据不足,再基于现有材料给出初步判断。
|
|
14
|
+
- 如果问题依赖私有环境、外部服务或用户本地状态,而仓库内证据不足,要明确列出还缺哪些材料。
|
|
15
|
+
|
|
16
|
+
## AutoWSGR Repository Hints
|
|
17
|
+
|
|
18
|
+
- 任务 API 入口优先看 `autowsgr/server/routes/task.py`,请求模型看 `autowsgr/server/schemas.py`。
|
|
19
|
+
- 常规战与活动战执行链路优先看 `autowsgr/ops/normal_fight.py` 与 `autowsgr/ops/event_fight.py`。
|
|
20
|
+
- 作战计划解析看 `autowsgr/combat/plan.py`,重点字段:`plan_id`、`fleet_id`、`fleet`。
|
|
21
|
+
- 编队切换与按舰船名换船优先看 `autowsgr/ui/battle/fleet_change/` 与 `autowsgr/ui/choose_ship_page.py`。
|
|
22
|
+
- 日志关键词可优先检索:`[Task]`、`[OPS]`、`[UI]`、`[Combat]`、`[识别]`。
|
|
23
|
+
- 涉及“只切舰队号不换船”的问题时,先核对路由层是否把请求里的 `plan.fleet` 覆盖透传到执行器。
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. 规范化输入。
|
|
28
|
+
|
|
29
|
+
- `#1234` 视为当前仓库 issue。
|
|
30
|
+
- 完整 issue URL 以 URL 为准。
|
|
31
|
+
- 如果用户给的是模糊描述,先在 issue 文本里定位编号、链接或关键上下文。
|
|
32
|
+
|
|
33
|
+
2. 获取 issue 内容。
|
|
34
|
+
|
|
35
|
+
- 读取正文和评论。
|
|
36
|
+
- 提取这些信息:版本、分支、平台、环境、任务或入口、预期行为、实际行为、复现步骤、维护者评论、附件链接。
|
|
37
|
+
- 如果维护者、机器人或其他评论已经给出结论,不要直接照抄;仍要用日志、代码和文档自行验证。
|
|
38
|
+
|
|
39
|
+
3. 提取附件和现场证据。
|
|
40
|
+
|
|
41
|
+
- 优先关注日志包、截图、配置导出、崩溃转储、诊断报告和资源导出。
|
|
42
|
+
- 不要假定附件命名固定;除了项目约定命名,也要留意 `log`、`report`、`debug`、`crash`、`dump`、`config`、`trace`、`screenshot` 等常见关键词。
|
|
43
|
+
- 如果同一个 issue 有多份日志,先看最新一次复现;如果 issue 在对比不同版本、不同环境或不同控制器,再补看旧样本。
|
|
44
|
+
|
|
45
|
+
4. 下载并解压附件。
|
|
46
|
+
|
|
47
|
+
- 二进制附件不要只靠网页抓取工具直接分析,应先下载到工作区临时目录,例如 `.cache/issue-logs/issue-<number>/`。
|
|
48
|
+
- 解压后先列目录,不要假定内部结构固定。
|
|
49
|
+
- 只读取和结论直接相关的文件,不要把整份大日志、整份配置或整个转储内容直接塞进回复。
|
|
50
|
+
|
|
51
|
+
5. 建立时间线。
|
|
52
|
+
|
|
53
|
+
- 先从 issue 文本确定“用户认为出问题的时刻”和复现条件。
|
|
54
|
+
- 再把界面日志、服务日志、运行时日志、截图、配置快照和崩溃信息串成一条时间线。
|
|
55
|
+
- 优先锁定这次复现对应的 `task_id`、`session_id`、请求 ID、时间戳或其他稳定标识,再追踪细节。
|
|
56
|
+
|
|
57
|
+
6. 回溯到代码和文档。
|
|
58
|
+
|
|
59
|
+
- 先看本仓库文档、配置定义和实现代码。
|
|
60
|
+
- 如果问题明显落在上游依赖、共享组件、绑定层或外部工具,再按需查看相关仓库或文档。
|
|
61
|
+
- 只看真正相关的模块,不要为了“完整”而把整个依赖栈都扫一遍。
|
|
62
|
+
|
|
63
|
+
7. 区分 issue 当时环境和当前分支。
|
|
64
|
+
|
|
65
|
+
- 先以 issue 文本、附件、配置快照和缓存资源还原用户当时的实际环境。
|
|
66
|
+
- 再对照当前仓库代码,判断问题是当前仍存在,还是当时存在但现在可能已修复。
|
|
67
|
+
- 如果 issue 很旧,或日志流程与当前主线明显不一致,必要时按对应 tag、release 或历史提交复核旧逻辑。
|
|
68
|
+
- 输出给用户时,如果提到任务名、入口名、设置项、按钮名、错误提示或日志前缀,先在仓库里搜索翻译 / 本地化文件,不要直接把 `t("...")`、`i18n.t("...")`、`LocalizationHelper.GetString("...")`、`DynamicResource` key、枚举名或内部 ID 当成最终展示文本。
|
|
69
|
+
|
|
70
|
+
8. 输出结论。
|
|
71
|
+
|
|
72
|
+
- 明确区分“已证实的根因”“高概率怀疑点”“证据不足的待确认项”。
|
|
73
|
+
- 给出能执行的下一步,例如修复方向、需要补充的材料、临时绕过方案、是否建议升级或回滚。
|
|
74
|
+
|
|
75
|
+
## Artifact Map
|
|
76
|
+
|
|
77
|
+
### Runtime / Core Logs
|
|
78
|
+
|
|
79
|
+
- 模块归属:核心运行时、执行引擎、任务调度层。
|
|
80
|
+
- 最适合看:
|
|
81
|
+
- 实际执行路径
|
|
82
|
+
- 识别、调用、动作失败
|
|
83
|
+
- 超时、重试、异常栈
|
|
84
|
+
- 对任务行为和底层错误通常最权威。
|
|
85
|
+
|
|
86
|
+
### UI / Frontend Logs
|
|
87
|
+
|
|
88
|
+
- 模块归属:GUI、前端或用户交互层。
|
|
89
|
+
- 最适合看:
|
|
90
|
+
- 用户到底点了什么
|
|
91
|
+
- 参数是否真的提交
|
|
92
|
+
- 用户可见报错和时间线入口
|
|
93
|
+
|
|
94
|
+
### Service / Bridge / Agent Logs
|
|
95
|
+
|
|
96
|
+
- 模块归属:后台服务、桥接层、agent、进程编排或 IPC 层。
|
|
97
|
+
- 最适合看:
|
|
98
|
+
- 服务启动失败
|
|
99
|
+
- 子进程异常
|
|
100
|
+
- IPC、HTTP、RPC、FFI、资源加载或实例生命周期错误
|
|
101
|
+
|
|
102
|
+
### Config Snapshots
|
|
103
|
+
|
|
104
|
+
- 模块归属:配置快照、导出配置、任务参数、缓存配置。
|
|
105
|
+
- 最适合看:
|
|
106
|
+
- 实际启用了哪些选项
|
|
107
|
+
- issue 文字里说的配置是否真和日志一致
|
|
108
|
+
- 当前行为是配置问题还是实现问题
|
|
109
|
+
|
|
110
|
+
### Screenshots / On-Error Artifacts
|
|
111
|
+
|
|
112
|
+
- 模块归属:出错现场图、保存的识别图、界面截图。
|
|
113
|
+
- 最适合看:
|
|
114
|
+
- 当时停留画面
|
|
115
|
+
- 是否被弹窗、遮罩、加载态、分辨率、缩放、主题或权限影响
|
|
116
|
+
- 日志和用户描述冲突时,画面证据是否支持其中一方
|
|
117
|
+
|
|
118
|
+
### Dumps / Crash Reports
|
|
119
|
+
|
|
120
|
+
- 模块归属:崩溃现场、转储、调用栈、诊断报告。
|
|
121
|
+
- 最适合看:
|
|
122
|
+
- 闪退、崩溃、进程退出
|
|
123
|
+
- 是否需要进一步用符号表、调试器或上游信息分析
|
|
124
|
+
|
|
125
|
+
### Exported Resources / Cached Definitions
|
|
126
|
+
|
|
127
|
+
- 模块归属:缓存资源、导出的任务定义、运行时生成的元数据。
|
|
128
|
+
- 最适合看:
|
|
129
|
+
- issue 当时到底使用了哪一版资源或配置定义
|
|
130
|
+
- 当前主线和用户当时环境是否不一致
|
|
131
|
+
|
|
132
|
+
## How To Filter Evidence
|
|
133
|
+
|
|
134
|
+
1. 先从 issue 文本拿到这些锚点:
|
|
135
|
+
|
|
136
|
+
- 版本、分支、提交、发布日期
|
|
137
|
+
- 平台、设备、环境、控制方式
|
|
138
|
+
- 任务名、入口名、操作路径
|
|
139
|
+
- 用户说“出问题”的具体时间、阶段或界面
|
|
140
|
+
|
|
141
|
+
2. 再从日志里找高价值信号:
|
|
142
|
+
|
|
143
|
+
- `Error`、`Warn`、`Fatal`
|
|
144
|
+
- `timeout`、`retry`
|
|
145
|
+
- `failed`、`exception`
|
|
146
|
+
- `task_id`、`session_id`、请求 ID
|
|
147
|
+
- 保存截图、导出现场、崩溃恢复、资源加载失败
|
|
148
|
+
|
|
149
|
+
3. 先锁定“这一次复现”再下钻。
|
|
150
|
+
|
|
151
|
+
- 一个日志包里通常会混有很多历史运行。
|
|
152
|
+
- 如果 issue 文本说失败,但对应这次复现的任务最终成功,要明确写出“本次日志未复现用户描述的问题”。
|
|
153
|
+
|
|
154
|
+
4. 区分表象和根因。
|
|
155
|
+
|
|
156
|
+
- 高层日志、UI 提示或机器人评论经常只是表象。
|
|
157
|
+
- 如果更靠近执行层的日志已经给出更直接的错误链路,应优先以那层为准,再回头解释用户看到的现象。
|
|
158
|
+
|
|
159
|
+
5. 回答时只保留关键片段。
|
|
160
|
+
|
|
161
|
+
- 只摘足够支撑结论的少量证据。
|
|
162
|
+
- 不要把整份日志、整段 issue 讨论或整份配置直接倾倒进回复。
|
|
163
|
+
|
|
164
|
+
## Common Patterns
|
|
165
|
+
|
|
166
|
+
- 维护者评论已经给出判断,但日志和代码证据并不支持:
|
|
167
|
+
- 以可验证证据为准,把维护者评论当成补强而不是唯一依据。
|
|
168
|
+
|
|
169
|
+
- issue 文本说“失败 / 卡死 / 误点”,但对应复现日志最终成功:
|
|
170
|
+
- 先明确“本次日志没有复现出用户描述的问题”。
|
|
171
|
+
- 再区分是用户补错了日志,还是代码里确实存在脆弱点但这次没触发。
|
|
172
|
+
|
|
173
|
+
- 用户日志里的流程与当前主线代码明显不一致:
|
|
174
|
+
- 先确认 issue 当时的版本、tag 或 release。
|
|
175
|
+
- 不要用当前主线直接否定旧版本问题。
|
|
176
|
+
|
|
177
|
+
- 配置快照和实际运行日志不一致:
|
|
178
|
+
- 不要立刻认定是用户表述错误。
|
|
179
|
+
- 先确认配置是否在复现后又被修改、是否有多个配置文件、是否存在缓存或导出时机差异。
|
|
180
|
+
|
|
181
|
+
- 日志显示现场图、诊断包或转储已保存,但附件里没有对应文件:
|
|
182
|
+
- 把“缺失的关键证据”单独写出来。
|
|
183
|
+
- 不要假装已经验证过那部分现场。
|
|
184
|
+
|
|
185
|
+
- 多层架构项目里某一层日志只暴露表象:
|
|
186
|
+
- 先在最接近问题根因的那层日志定性,再回到上层解释用户看到的现象。
|
|
187
|
+
|
|
188
|
+
- 证据更接近“场景不支持”而不是“实现缺陷”:
|
|
189
|
+
- 必须给出代码、配置白名单、文档限制或运行时分支依据,而不是只给主观判断。
|
|
190
|
+
|
|
191
|
+
## Correlating With Code
|
|
192
|
+
|
|
193
|
+
- 先看 issue 模板、README、开发文档、排障文档。
|
|
194
|
+
- 再看任务入口、配置定义、流水线或调度定义。
|
|
195
|
+
- 然后看运行时、服务层、桥接层、前端或 GUI 实现。
|
|
196
|
+
- 只有当证据已经明显指向上游依赖时,才继续看外部仓库、SDK、框架或绑定层。
|
|
197
|
+
|
|
198
|
+
## Localized Copy
|
|
199
|
+
|
|
200
|
+
- 总结任务、入口、设置项、按钮、错误提示、日志前缀等用户可见文案时,先在仓库里主动搜索翻译 / 本地化文件。
|
|
201
|
+
- 优先搜索这些常见目录、文件名和关键词:
|
|
202
|
+
- `locale`、`locales`、`i18n`、`lang`、`langs`、`translations`、`messages`
|
|
203
|
+
- `zh-cn`、`zh_cn`、`zh-hans`、`zhHans`、`zh`
|
|
204
|
+
- `*.json`、`*.yaml`、`*.yml`、`*.toml`、`*.resx`、`*.xaml`、`*.ts`、`*.js`
|
|
205
|
+
- 再从实际代码调用反查 key:
|
|
206
|
+
- `t("...")`、`i18n.t("...")`、`intl.formatMessage(...)`
|
|
207
|
+
- `LocalizationHelper.GetString("...")`、`GetString("...")`
|
|
208
|
+
- `DynamicResource SomeKey`、`StaticResource SomeKey`
|
|
209
|
+
- 其他项目自定义的资源读取函数
|
|
210
|
+
- 查找顺序建议:
|
|
211
|
+
- 先从报错日志、配置字段、界面代码里提取疑似 key / id / 枚举名
|
|
212
|
+
- 再在本地化文件中找对应中文文案
|
|
213
|
+
- 如果同时存在多语言,优先使用简体中文;若没有简体中文,则退回 issue 正文更接近的语言或仓库主语言,并说明未找到中文文案
|
|
214
|
+
- 如果配置或日志里带有用户自定义名称,输出时优先保留用户自定义名称;必要时再括号补默认任务 / 入口文案或原始 key。
|
|
215
|
+
- 如果仓库里确实找不到翻译 / 本地化文件,要明确说明“未发现可用的翻译文件 / 本地化资源”,再退回原始 key、英文字符串或内部 ID。
|
|
216
|
+
|
|
217
|
+
## Linking Code Evidence
|
|
218
|
+
|
|
219
|
+
- 如果要指向具体代码行,不要写本地路径加行号,也不要写绝对路径。
|
|
220
|
+
- 统一给出对应仓库的远端 GitHub `blob` 行号链接,用尖括号包裹。
|
|
221
|
+
- 链接格式:
|
|
222
|
+
- `https://github.com/<owner>/<repo>/blob/<commit>/<path>#L14-L20`
|
|
223
|
+
- `<owner>/<repo>` 应使用本次实际分析的代码仓库;如果引用的是上游依赖或外部仓库,就用那个仓库自己的链接。
|
|
224
|
+
- `<commit>` 必须是本次分析实际依据的代码版本:
|
|
225
|
+
- 默认使用当前检出的 `HEAD`
|
|
226
|
+
- 如果为了复核旧 issue 切到了某个 tag / commit,就使用那个版本解析后的 SHA
|
|
227
|
+
- 如果引用的是文档、配置样例或资源定义,也尽量给对应远端链接,而不是本地路径。
|
|
228
|
+
|
|
229
|
+
## Output Format
|
|
230
|
+
|
|
231
|
+
最终回答用这个结构:
|
|
232
|
+
|
|
233
|
+
```markdown
|
|
234
|
+
## Issue 概要
|
|
235
|
+
|
|
236
|
+
- issue:`#1234`
|
|
237
|
+
- 版本 / 分支 / 环境:
|
|
238
|
+
- 任务 / 入口 / 相关设置:优先写翻译文件里的用户可见文案;必要时再补 key / id / 枚举名
|
|
239
|
+
- 关键提示 / 报错文案:优先写翻译文件中的实际显示文本
|
|
240
|
+
- 用户现象:
|
|
241
|
+
|
|
242
|
+
## 附件概览
|
|
243
|
+
|
|
244
|
+
- 实际可读文件:
|
|
245
|
+
- 缺失或未上传的证据:
|
|
246
|
+
|
|
247
|
+
## 关键证据
|
|
248
|
+
|
|
249
|
+
<details><summary>点击此处展开</summary>
|
|
250
|
+
|
|
251
|
+
- issue 正文 / 评论:
|
|
252
|
+
- 运行时日志:
|
|
253
|
+
- UI / 服务日志:
|
|
254
|
+
- 配置快照:
|
|
255
|
+
- 现场图 / 转储:
|
|
256
|
+
- 代码依据:如需指向具体实现,直接附远端 GitHub 行号链接
|
|
257
|
+
|
|
258
|
+
</details>
|
|
259
|
+
|
|
260
|
+
## 根因判断
|
|
261
|
+
|
|
262
|
+
- 直接结论:
|
|
263
|
+
- 证据链:
|
|
264
|
+
- 当前主线是否可能已修复:
|
|
265
|
+
|
|
266
|
+
## 修复方案
|
|
267
|
+
|
|
268
|
+
1. 代码 / 配置 / 资源层修复
|
|
269
|
+
2. 需要补充的测试、日志或截图
|
|
270
|
+
3. 如问题属于不支持场景,应如何限制入口或改进提示
|
|
271
|
+
|
|
272
|
+
## 给用户的建议
|
|
273
|
+
|
|
274
|
+
- 用户现在可以直接尝试的动作:
|
|
275
|
+
- 是否建议升级 / 重下完整包 / 重置配置 / 更换环境:
|
|
276
|
+
- 是否有临时绕过方案:
|
|
277
|
+
|
|
278
|
+
## 给修复 AI 的建议(可复制)
|
|
279
|
+
|
|
280
|
+
<details><summary>点击此处展开</summary>
|
|
281
|
+
|
|
282
|
+
~~~text
|
|
283
|
+
现象:
|
|
284
|
+
[一句话描述用户可见的问题]
|
|
285
|
+
|
|
286
|
+
关键证据:
|
|
287
|
+
[粘贴原始日志、堆栈、监控截图中的关键文本]
|
|
288
|
+
|
|
289
|
+
可能相关线索(待验证):
|
|
290
|
+
[根据日志/现象推测的可能方向,不保证准确,供参考]
|
|
291
|
+
~~~
|
|
292
|
+
|
|
293
|
+
</details>
|
|
294
|
+
|
|
295
|
+
## 置信度
|
|
296
|
+
|
|
297
|
+
- 高 / 中 / 低
|
|
298
|
+
- 还缺什么证据
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Reminders
|
|
302
|
+
|
|
303
|
+
- 不要只看一个日志文件下结论。
|
|
304
|
+
- 不要把 issue 评论、机器人提示或维护者判断当成唯一证据。
|
|
305
|
+
- 不要把当前分支代码直接当成 issue 当时的真实环境。
|
|
306
|
+
- 日志和截图冲突时,优先解释冲突,再决定更可信的证据链。
|
|
307
|
+
- 如果问题本身没有在当前日志中复现,要明确写“证据未复现”,不要硬凑结论。
|
|
308
|
+
- 如果 issue 版本较旧,要明确区分“当时的根因”和“当前主线是否已修复”。
|
|
309
|
+
- 如果回答里出现任务名、入口名、设置项、按钮名、提示文案,优先先搜索项目里的翻译 / 本地化文件,再使用实际用户可见文案;必要时才补原始 key / id。
|
|
310
|
+
- 如果回答里引用了具体代码行,直接给远端 GitHub `blob` 行号链接,用尖括号包裹,不要给本地路径加行号。
|
|
311
|
+
- 如果证据表明问题已在新版本修复,明确建议升级;如果怀疑安装包、资源文件或配置损坏,明确建议重建;如果判断为真实代码缺陷且暂无 workaround,明确建议等待修复。
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-backend
|
|
3
|
+
description: 'Release AutoWSGR Python backend to PyPI and GitHub. USE WHEN: bumping backend version, publishing to PyPI, creating backend release, tagging backend build. Includes mandatory local CI check before push.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Release AutoWSGR Backend
|
|
7
|
+
|
|
8
|
+
发布 AutoWSGR Python 后端包到 PyPI + 创建 GitHub Release 的完整流程。
|
|
9
|
+
|
|
10
|
+
## 前置条件
|
|
11
|
+
|
|
12
|
+
- Python 3.12+ 虚拟环境已激活
|
|
13
|
+
- `pre-commit install` 已执行
|
|
14
|
+
- 所有待发布改动已合并到 `main`
|
|
15
|
+
|
|
16
|
+
## 发布步骤
|
|
17
|
+
|
|
18
|
+
### 1. 更新版本号
|
|
19
|
+
|
|
20
|
+
编辑 `autowsgr/__init__.py`:
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
__version__ = 'x.y.z'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`pyproject.toml` 通过 `{attr = "autowsgr.__version__"}` 动态读取,无需手动编辑。
|
|
27
|
+
|
|
28
|
+
版本号遵循语义化版本:
|
|
29
|
+
- **patch** (x.y.Z): bug 修复、小调整
|
|
30
|
+
- **minor** (x.Y.0): 新功能、新 API
|
|
31
|
+
- **major** (X.0.0): 破坏性变更
|
|
32
|
+
|
|
33
|
+
### 2. 本地跑 CI(必须!)
|
|
34
|
+
|
|
35
|
+
**远端 CI 经常因环境差异失败,必须先在本地确认通过后再推送。**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 跑全部 pre-commit 检查(等同 CI lint job)
|
|
39
|
+
pre-commit run --all-files
|
|
40
|
+
|
|
41
|
+
# 确认包能正常构建
|
|
42
|
+
python -m build
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
常见本地 CI 失败原因及修复:
|
|
46
|
+
|
|
47
|
+
| 检查项 | 失败原因 | 修复方式 |
|
|
48
|
+
|--------|----------|----------|
|
|
49
|
+
| `check-shebang-scripts-are-executable` | 有 shebang 的脚本未标记可执行 | `git add --chmod=+x <file>` |
|
|
50
|
+
| `ruff-check` | 代码风格/lint 错误 | `ruff check --fix .` 自动修复;无法自动修复的需手动改 |
|
|
51
|
+
| `ruff-format` | 格式不规范 | `ruff format .` |
|
|
52
|
+
| `trailing-whitespace` | 行尾空格 | pre-commit 自动修复后 re-add |
|
|
53
|
+
| `end-of-file-fixer` | 文件末尾缺换行 | pre-commit 自动修复后 re-add |
|
|
54
|
+
| `codespell` | 拼写错误 | 修正拼写或加入 `docs/spelling_wordlist.txt` |
|
|
55
|
+
|
|
56
|
+
#### ruff 常见错误处理策略
|
|
57
|
+
|
|
58
|
+
- **E402** (import not at top): 把 `_log = get_logger(...)` 移到 import 之后
|
|
59
|
+
- **UP042** (str+Enum): 改为继承 `StrEnum`
|
|
60
|
+
- **RUF015** (list(...)[0]): 改用 `next(iter(...))`
|
|
61
|
+
- **FURB110** (ternary if/else): 改用 `or` 运算符
|
|
62
|
+
- **SIM401** (if/else → dict.get): 改用 `.get(key, default)`
|
|
63
|
+
- **不适合修复的规则**: 已在 `pyproject.toml [tool.ruff.lint] ignore` 中配置忽略(如 N818, RUF022, RUF012)
|
|
64
|
+
|
|
65
|
+
**如果 pre-commit 自动修了文件,需要重新 `git add` 再跑一遍(跑两遍是正常的)。**
|
|
66
|
+
|
|
67
|
+
### 3. 提交并推送
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git add -A
|
|
71
|
+
git commit -m "release: vX.Y.Z"
|
|
72
|
+
git push origin main
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**注意**:backend 不需要手动打标签。`release.yml` workflow 会自动从 `__init__.py` 提取版本号并创建 `vX.Y.Z` 标签。
|
|
76
|
+
|
|
77
|
+
### 4. CI 自动执行
|
|
78
|
+
|
|
79
|
+
推送到 `main` 且 `autowsgr/__init__.py` 有变更时,两个 workflow 并行触发:
|
|
80
|
+
|
|
81
|
+
**python-publish.yml**(PyPI 发布):
|
|
82
|
+
1. `python -m build` 构建 sdist + wheel
|
|
83
|
+
2. `pypa/gh-action-pypi-publish` 上传到 PyPI
|
|
84
|
+
|
|
85
|
+
**release.yml**(GitHub Release):
|
|
86
|
+
1. **lint job**: `pre-commit run --all-files` + `python -m build`(质量门禁)
|
|
87
|
+
2. **release job**(依赖 lint 通过):
|
|
88
|
+
- 从 `__init__.py` 提取版本号
|
|
89
|
+
- 创建 git tag `vX.Y.Z`
|
|
90
|
+
- 创建 GitHub Release(自动生成 release notes)
|
|
91
|
+
|
|
92
|
+
### 5. 验证发布
|
|
93
|
+
|
|
94
|
+
- [ ] [PyPI 包页面](https://pypi.org/project/autowsgr/) 版本已更新
|
|
95
|
+
- [ ] GitHub Release 页面有新版本
|
|
96
|
+
- [ ] `pip install autowsgr==X.Y.Z` 能正常安装
|
|
97
|
+
|
|
98
|
+
## 关键文件
|
|
99
|
+
|
|
100
|
+
| 文件 | 说明 |
|
|
101
|
+
|------|------|
|
|
102
|
+
| `autowsgr/__init__.py` | 版本号定义(唯一版本源) |
|
|
103
|
+
| `pyproject.toml` | 包配置、依赖声明 |
|
|
104
|
+
| `.github/workflows/python-publish.yml` | PyPI 发布 workflow |
|
|
105
|
+
| `.github/workflows/release.yml` | GitHub Release workflow(含 lint 门禁) |
|
|
106
|
+
| `.pre-commit-config.yaml` | 本地 + CI lint 规则 |
|
|
107
|
+
|
|
108
|
+
## 回滚
|
|
109
|
+
|
|
110
|
+
如果发布了有问题的版本:
|
|
111
|
+
1. PyPI: 在 pypi.org 项目管理页面 yank 该版本(无法删除,只能 yank)
|
|
112
|
+
2. GitHub Release: 删除对应 Release 和 tag
|
|
113
|
+
3. 修复后发一个新的 patch 版本
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# 贡献到 AutoWSGR
|
|
2
|
+
|
|
3
|
+
我们欢迎对 [AutoWSGR](https://github.com/OpenWSGR/AutoWSGR) 的贡献!在贡献之前,请阅读以下指南。
|
|
4
|
+
|
|
5
|
+
技术规范(开发环境、代码风格、测试、约定式提交等)详见项目根目录的 [`AGENTS.md`](../AGENTS.md)。
|
|
6
|
+
|
|
7
|
+
------
|
|
8
|
+
|
|
9
|
+
## 开发设置 Development Setup
|
|
10
|
+
|
|
11
|
+
1. 克隆仓库。
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
git clone git@github.com:OpenWSGR/AutoWSGR.git
|
|
15
|
+
cd AutoWSGR
|
|
16
|
+
```
|
|
17
|
+
2. 设置开发环境。
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
uv sync
|
|
21
|
+
pre-commit install
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
------
|
|
25
|
+
|
|
26
|
+
## 合并请求指导 Pull Request Guidelines
|
|
27
|
+
|
|
28
|
+
### 原则 Principles
|
|
29
|
+
|
|
30
|
+
1. **小的变更 Small Changes**: 做出小的、增量的变更,这些变更易于审查。
|
|
31
|
+
2. **清晰的提交信息 Clear Commit Messages**: 编写清晰、简洁的提交信息来解释变更。我们推荐使用 [Semantic Commit Messages](https://www.conventionalcommits.org/zh-hans/v1.0.0/) 格式。
|
|
32
|
+
3. **PR 描述 PR Description**: 在合并请求中提供变更的清晰描述。
|
|
33
|
+
4. **代码审查 Code Review**: 在创建合并请求之前审查自己的代码。在合并之前,获得至少一个其他团队成员的批准(不包括你自己)。
|
|
34
|
+
5. **测试 Testing**: 确保在创建合并请求之前本地测试代码,并确保在合并之前 CI/CD 流水线中的测试通过。
|
|
35
|
+
|
|
36
|
+
### 如何贡献 How to Contribute
|
|
37
|
+
|
|
38
|
+
1. 为你的特性或错误修复创建一个新的分支。
|
|
39
|
+
1. 如果你不是项目管理者:从 GitHub 仓库 (<https://github.com/OpenWSGR/AutoWSGR>) 创建一个 Fork 仓库,随后克隆并创建自己的功能分支。
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git clone https://github.com/<yourname>/AutoWSGR
|
|
43
|
+
cd AutoWSGR
|
|
44
|
+
git checkout -b <my-feature-branch>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
2. 如果你是项目管理员:可以不用 Fork,转为在主仓库创建一个分支。
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git fetch --all
|
|
51
|
+
git checkout main
|
|
52
|
+
git checkout -b <my-feature-branch>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. 做出你的变更并将它们提交到分支。提交前不要忘记运行 `pre-commit` 检查。
|
|
56
|
+
|
|
57
|
+
3. 将你的变更推送到远程仓库并创建一个合并请求。
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
git push -u origin <my-feature-branch>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
4. 转到 GitHub 仓库 (<https://github.com/OpenWSGR/AutoWSGR>) 并创建一个新的合并请求。
|
|
64
|
+
|
|
65
|
+
5. 将合并请求分配给至少一个团队成员进行审查。在获得至少一个批准之前,**不要合并** 请求!
|
|
66
|
+
|
|
67
|
+
在审查过程中,你可能需要根据反馈对代码进行更改。保持分支与 `main` 分支保持最新。
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git fetch --all
|
|
71
|
+
git rebase -i origin/main
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
6. 合并请求获得批准后,压缩并将其合并到 `main` 分支中。
|
|
75
|
+
|
|
76
|
+
------
|
|
77
|
+
|
|
78
|
+
## 测试 Testing
|
|
79
|
+
|
|
80
|
+
在创建合并请求之前,请确保在本地测试你的变更。可以运行 [`examples`](../examples) 目录中的各种脚本进行测试。
|
|
81
|
+
|
|
82
|
+
------
|
|
83
|
+
|
|
84
|
+
## 文档 Documentation
|
|
85
|
+
|
|
86
|
+
如果你对代码库进行了更改,请更新 [用户文档](https://docs-autowsgr.notion.site)。同样鼓励在代码中编写注释和文档字符串。
|
|
87
|
+
|
|
88
|
+
------
|
|
89
|
+
|
|
90
|
+
如果你有任何问题或需要帮助,请通过 qq 群 568500514 联系团队。
|