Add manifest.json and implementation plan for ba-auto-daily script
- Created manifest.json to track file metadata for the project. - Added plan.md detailing the implementation strategy for the ba-auto-daily automation script, including feature prioritization and prerequisites.
This commit is contained in:
parent
92c9578512
commit
0ee1d495c8
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
.claude/settings.local.json
|
||||
graphify-out/cost.json
|
||||
graphify-out/cache/
|
||||
|
||||
1
graphify-out/.graphify_labels.json
Normal file
1
graphify-out/.graphify_labels.json
Normal file
@ -0,0 +1 @@
|
||||
{"0": "Detection Pipeline & Architecture", "1": "ba_dailies.sh Script & Cafe Claim", "2": "Combat/Story Feature Roadmap", "3": "AP/Task Sweep Features", "4": "Cafe Room 2 UI & Detector", "5": "Cafe Income Popup UI", "6": "Cafe Room 1 UI", "7": "Cafe Income Reference Capture", "8": "Game Main Screen UI", "9": "Student Rotation Popup", "10": "Shop Automation (Planned)", "11": "Sparkle Zoomed-Out Calibration", "12": "Student Rank-Up Popup Stage 1", "13": "Sparkle Template Asset", "14": "Group/Mini Story (Planned)", "15": "Student Rank-Up Popup Stage 2", "16": "Battle Pass Claim (Planned)", "17": "Crafting Automation (Planned)", "18": "Club/Group AP Claim (Planned)", "19": "Sparkle Zoomed-Centered Precondition", "20": "Sparkle Speech-Bubble Occlusion", "21": "Rank-Up Popup Dismissal Flow", "22": "Sparkle Sample Reference"}
|
||||
1
graphify-out/.graphify_python
Normal file
1
graphify-out/.graphify_python
Normal file
@ -0,0 +1 @@
|
||||
/Users/nik-macbookair/.local/share/uv/tools/graphifyy/bin/python
|
||||
1
graphify-out/.graphify_root
Normal file
1
graphify-out/.graphify_root
Normal file
@ -0,0 +1 @@
|
||||
/Users/nik-macbookair/repo/ba-auto-daily
|
||||
159
graphify-out/GRAPH_REPORT.md
Normal file
159
graphify-out/GRAPH_REPORT.md
Normal file
@ -0,0 +1,159 @@
|
||||
# Graph Report - . (2026-07-05)
|
||||
|
||||
## Corpus Check
|
||||
- Large corpus: 21 files · ~974,160 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder.
|
||||
|
||||
## Summary
|
||||
- 159 nodes · 176 edges · 23 communities (16 shown, 7 thin omitted)
|
||||
- Extraction: 90% EXTRACTED · 10% INFERRED · 1% AMBIGUOUS · INFERRED: 17 edges (avg confidence: 0.8)
|
||||
- Token cost: 320,012 input · 0 output
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
- [[_COMMUNITY_Detection Pipeline & Architecture|Detection Pipeline & Architecture]]
|
||||
- [[_COMMUNITY_ba_dailies.sh Script & Cafe Claim|ba_dailies.sh Script & Cafe Claim]]
|
||||
- [[_COMMUNITY_CombatStory Feature Roadmap|Combat/Story Feature Roadmap]]
|
||||
- [[_COMMUNITY_APTask Sweep Features|AP/Task Sweep Features]]
|
||||
- [[_COMMUNITY_Cafe Room 2 UI & Detector|Cafe Room 2 UI & Detector]]
|
||||
- [[_COMMUNITY_Cafe Income Popup UI|Cafe Income Popup UI]]
|
||||
- [[_COMMUNITY_Cafe Room 1 UI|Cafe Room 1 UI]]
|
||||
- [[_COMMUNITY_Cafe Income Reference Capture|Cafe Income Reference Capture]]
|
||||
- [[_COMMUNITY_Game Main Screen UI|Game Main Screen UI]]
|
||||
- [[_COMMUNITY_Student Rotation Popup|Student Rotation Popup]]
|
||||
- [[_COMMUNITY_Shop Automation (Planned)|Shop Automation (Planned)]]
|
||||
- [[_COMMUNITY_Sparkle Zoomed-Out Calibration|Sparkle Zoomed-Out Calibration]]
|
||||
- [[_COMMUNITY_Student Rank-Up Popup Stage 1|Student Rank-Up Popup Stage 1]]
|
||||
- [[_COMMUNITY_Sparkle Template Asset|Sparkle Template Asset]]
|
||||
- [[_COMMUNITY_GroupMini Story (Planned)|Group/Mini Story (Planned)]]
|
||||
- [[_COMMUNITY_Student Rank-Up Popup Stage 2|Student Rank-Up Popup Stage 2]]
|
||||
- [[_COMMUNITY_Battle Pass Claim (Planned)|Battle Pass Claim (Planned)]]
|
||||
- [[_COMMUNITY_Crafting Automation (Planned)|Crafting Automation (Planned)]]
|
||||
- [[_COMMUNITY_ClubGroup AP Claim (Planned)|Club/Group AP Claim (Planned)]]
|
||||
- [[_COMMUNITY_Sparkle Zoomed-Centered Precondition|Sparkle Zoomed-Centered Precondition]]
|
||||
- [[_COMMUNITY_Sparkle Speech-Bubble Occlusion|Sparkle Speech-Bubble Occlusion]]
|
||||
- [[_COMMUNITY_Rank-Up Popup Dismissal Flow|Rank-Up Popup Dismissal Flow]]
|
||||
- [[_COMMUNITY_Sparkle Sample Reference|Sparkle Sample Reference]]
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `do_cafe()` - 17 edges
|
||||
2. `detect_and_click.py (color-masked template-match sparkle detector/clicker)` - 12 edges
|
||||
3. `ba-auto-daily Implementation Plan` - 12 edges
|
||||
4. `Cafe Room 2 Reference Screenshot` - 11 edges
|
||||
5. `Event content (Activities) sweep feature` - 8 edges
|
||||
6. `do_mailbox()` - 7 edges
|
||||
7. `ba_dailies.sh (entry-point automation script)` - 6 edges
|
||||
8. `Cafe Income Popup (カフェの収入)` - 6 edges
|
||||
9. `Cafe Room 1 Reference Screenshot` - 6 edges
|
||||
10. `Blue Archive Main/Home Screen Screenshot` - 6 edges
|
||||
|
||||
## Surprising Connections (you probably didn't know these)
|
||||
- `Lesson/Schedule (affection farming via classes) feature` --semantically_similar_to--> `do_cafe()` [INFERRED] [semantically similar]
|
||||
plan.md → ba_dailies.sh
|
||||
- `Cafe Reward Menu Popup Screenshot` --rationale_for--> `do_cafe()` [INFERRED]
|
||||
screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png → ba_dailies.sh
|
||||
- `Receive Button (受取 / Enter)` --rationale_for--> `do_cafe()` [INFERRED]
|
||||
screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png → ba_dailies.sh
|
||||
- `Cafe Button (Bottom Navigation)` --references--> `do_cafe()` [INFERRED]
|
||||
screenshots/main/main.png → ba_dailies.sh
|
||||
- `Blue Archive Main/Home Screen Screenshot` --references--> `focus_game()` [INFERRED]
|
||||
screenshots/main/main.png → ba_dailies.sh
|
||||
|
||||
## Import Cycles
|
||||
- None detected.
|
||||
|
||||
## Hyperedges (group relationships)
|
||||
- **Tier 1 — high-priority, no-OCR-needed features** — plan_stamina_ap_sweep, plan_club_group_ap_claim, plan_momo_talk [EXTRACTED 1.00]
|
||||
- **Tier 2 — sweep-style AP consumption features sharing the buy-tickets/sweep-N-times/color-detect shape** — plan_commissions, plan_scrimmage, plan_bounty, plan_story_ap_sweep [EXTRACTED 1.00]
|
||||
- **Cafe sparkle-click automation pipeline (focus -> loop-detect-click -> claim)** — ba_dailies_script, ba_dailies_focus_game, ba_dailies_do_cafe, scripts_detect_and_click_script, assets_cafe_sparkle_image [EXTRACTED 1.00]
|
||||
|
||||
## Communities (23 total, 7 thin omitted)
|
||||
|
||||
### Community 0 - "Detection Pipeline & Architecture"
|
||||
Cohesion: 0.10
|
||||
Nodes (26): cafe_sparkle.png (template image for sparkle detection), cafe_sparkle.png Template Image, scp/rsync + ssh deployment of scripts/assets to nik-gpu, Single local screenshot->detect->click pipeline on nik-gpu (avoids SSH round-trip for the fast-moving sparkle), nik-gpu (Linux box running the Blue Archive client and X display), nik-macbookair (macOS development machine), numpy dependency, opencv-python dependency (+18 more)
|
||||
|
||||
### Community 1 - "ba_dailies.sh Script & Cafe Claim"
|
||||
Cohesion: 0.18
|
||||
Nodes (17): CAFE_MAX_CLICKS_PER_ROOM constant, click(), DISPLAY, do_cafe(), do_cafe_room(), do_mailbox(), focus_game(), press_enter() (+9 more)
|
||||
|
||||
### Community 2 - "Combat/Story Feature Roadmap"
|
||||
Cohesion: 0.12
|
||||
Nodes (19): baas module/arena.py (173 lines), baas module/explore_tasks/explore_task.py, baas module/main_story.py (auto_fight/enter_battle), baas module/momo_talk.py (183 lines, getConversationState), Known gap: unconfirmed rotated-student popup / zoom-center / rank-up popup handling in do_cafe, Arena (PvP ladder) feature, Auto-fight primitive (shared start-fight/max-speed/auto-mode/detect-result routine), baas reference project (pur1fying/blue_archive_auto_script, GPL-3.0, read-only research reference) (+11 more)
|
||||
|
||||
### Community 3 - "AP/Task Sweep Features"
|
||||
Cohesion: 0.13
|
||||
Nodes (15): baas module/activities/activity_utils.py, baas module/clear_special_task_power.py (148 lines), baas module/collect_daily_free_power.py, baas module/collect_daily_task_power.py, baas module/explore_tasks/sweep_task.py, baas module/explore_tasks/task_utils.py, baas module/rewarded_task.py (204 lines), baas module/scrimmage.py (166 lines) (+7 more)
|
||||
|
||||
### Community 4 - "Cafe Room 2 UI & Detector"
|
||||
Cohesion: 0.13
|
||||
Nodes (11): Green Swirl Markers Above Two Students (possible status/affection indicator), Bottom Edit Toolbar (編集モード / 贈り物 / 家具情報 / プリセット / すべて収納), Comfort Level Indicator (快適度 5500), Top HUD: AP / Gold / Gems Counters, Cafe Furnishings Layout (arcade cabinets, crane machine, sofas, plants), Cafe Income Rate Display (カフェの収入 4.1%), Invitation Ticket Purchase Prompt with Countdown Timer, "Move to Store 1" Button (1号店に移動) (+3 more)
|
||||
|
||||
### Community 5 - "Cafe Income Popup UI"
|
||||
Cohesion: 0.29
|
||||
Nodes (7): Cafe Reward Menu Popup Screenshot, Cafe Income Popup (カフェの収入), Popup Close Button (X), Receive Button (受取 / Enter), Store 1 AP Income Panel (1号店 AP), Store 1 Credits Income Panel (1号店 Credits), Store 2 Credits Income Panel (2号店 Credits)
|
||||
|
||||
### Community 6 - "Cafe Room 1 UI"
|
||||
Cohesion: 0.29
|
||||
Nodes (7): Cafe Edit-Mode Bottom Toolbar (edit/gift/furniture-info/preset/store-all), Cafe Income (カフェの収入) and Comfort Level (快適度) Display, Cafe Room 1 Reference Screenshot, "Move to Shop 2" (2号店に移動) Navigation Button, Cafe Room 1 Furniture Layout (train set, animal pen, swing, car, music stand), Student Characters Scattered in Cafe Room 1 (potential sparkle click targets), Designated Visit / Random Visit Icons (指定訪問・ランダム訪問)
|
||||
|
||||
### Community 7 - "Cafe Income Reference Capture"
|
||||
Cohesion: 0.33
|
||||
Nodes (6): Cafe Income Percentage Display (カフェの収入 8.3%), Cafe Room Interior Scene (furniture, students, train set), Comfort Level Meter (快適度 5500), Invitation Ticket Buttons (招待券 / 追加招待券) with Countdown Timer, Cafe Top Navigation Bar (AP / Gold / Gems, Back Button, Visit Buttons), Cafe Reward Screen Screenshot (Cursor on Top)
|
||||
|
||||
### Community 8 - "Game Main Screen UI"
|
||||
Cohesion: 0.33
|
||||
Nodes (6): Bottom Navigation Bar (Cafe, Schedule, Students, Formation, Social, Manufacture, Shop, Recruit, Work), Cafe Button (Bottom Navigation), Currency/Resource Display (AP, Credits, Gems), Mailbox/Envelope Icon (Top Bar), Blue Archive Main/Home Screen Screenshot, nik-gpu Window Title Bar
|
||||
|
||||
### Community 9 - "Student Rotation Popup"
|
||||
Cohesion: 0.40
|
||||
Nodes (5): Popup Close (X) Button, top-right corner, Student Rotation Popup Screenshot, OK Button (Enter-bound) below student list, Visited Student List Popup ("案内"), 訪問した生徒リスト (Visited Student List row of 5 avatars)
|
||||
|
||||
### Community 10 - "Shop Automation (Planned)"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): baas module/shop/common_shop.py, baas module/shop/shop_utils.py, baas module/shop/tactical_challenge_shop.py, Common Shop + Tactical (Arena) Shop feature
|
||||
|
||||
### Community 11 - "Sparkle Zoomed-Out Calibration"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): Cafe HUD (currency, comfort/kaitekido 5500, income 0.0%, timer 17:41:20), Cafe Room Interior (Zoomed Out, Full Layout), Yellow/White Affection Sparkle (visible near plush character), Cafe Zoomed-Out Calibration Screenshot
|
||||
|
||||
### Community 12 - "Student Rank-Up Popup Stage 1"
|
||||
Cohesion: 0.67
|
||||
Nodes (4): Bond Rank Heart Indicator (Rank 4), Conditional Rank-Up Popup Close (Automation Gap), Student Bond Rank-Up Popup Screenshot, "Attack +12" Stat Boost Banner
|
||||
|
||||
### Community 13 - "Sparkle Template Asset"
|
||||
Cohesion: 1.00
|
||||
Nodes (3): Cafe Affection Sparkle UI Element, Cafe Sparkle Template Image, Yellow/White Sparkle Color Signature
|
||||
|
||||
### Community 14 - "Group/Mini Story (Planned)"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): baas module/group_story.py, baas module/mini_story.py, Group Story / Mini Story cleanup feature
|
||||
|
||||
### Community 15 - "Student Rank-Up Popup Stage 2"
|
||||
Cohesion: 1.00
|
||||
Nodes (3): Bond Rank-Up Popup UI (絆ランクアップ! banner over portrait, stat-gain footer), Depicted Student (white/silver-haired, halo motif, off-shoulder outfit, Max HP +144), Rank-Up Popup Screenshot (Student B, Bond Rank 4, Max HP +144)
|
||||
|
||||
## Ambiguous Edges - Review These
|
||||
- `Cafe Room 2 Reference Screenshot` → `Green Swirl Markers Above Two Students (possible status/affection indicator)` [AMBIGUOUS]
|
||||
screenshots/cafe/room2.png · relation: conceptually_related_to
|
||||
|
||||
## Knowledge Gaps
|
||||
- **78 isolated node(s):** `DISPLAY`, `XAUTHORITY`, `nik-macbookair (macOS development machine)`, `opencv-python dependency`, `numpy dependency` (+73 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **7 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **What is the exact relationship between `Cafe Room 2 Reference Screenshot` and `Green Swirl Markers Above Two Students (possible status/affection indicator)`?**
|
||||
_Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
|
||||
- **Why does `do_cafe()` connect `ba_dailies.sh Script & Cafe Claim` to `Detection Pipeline & Architecture`, `Game Main Screen UI`, `Combat/Story Feature Roadmap`, `Cafe Income Popup UI`?**
|
||||
_High betweenness centrality (0.216) - this node is a cross-community bridge._
|
||||
- **Why does `ba-auto-daily Implementation Plan` connect `Combat/Story Feature Roadmap` to `ba_dailies.sh Script & Cafe Claim`?**
|
||||
_High betweenness centrality (0.148) - this node is a cross-community bridge._
|
||||
- **Why does `detect_and_click.py (color-masked template-match sparkle detector/clicker)` connect `Detection Pipeline & Architecture` to `ba_dailies.sh Script & Cafe Claim`?**
|
||||
_High betweenness centrality (0.114) - this node is a cross-community bridge._
|
||||
- **Are the 5 inferred relationships involving `do_cafe()` (e.g. with `Lesson/Schedule (affection farming via classes) feature` and `Cafe Reward Menu Popup Screenshot`) actually correct?**
|
||||
_`do_cafe()` has 5 INFERRED edges - model-reasoned connections that need verification._
|
||||
- **What connects `DISPLAY`, `XAUTHORITY`, `nik-macbookair (macOS development machine)` to the rest of the system?**
|
||||
_86 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `Detection Pipeline & Architecture` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.10461538461538461 - nodes in this community are weakly interconnected._
|
||||
307
graphify-out/graph.html
Normal file
307
graphify-out/graph.html
Normal file
File diff suppressed because one or more lines are too long
3937
graphify-out/graph.json
Normal file
3937
graphify-out/graph.json
Normal file
File diff suppressed because it is too large
Load Diff
107
graphify-out/manifest.json
Normal file
107
graphify-out/manifest.json
Normal file
@ -0,0 +1,107 @@
|
||||
{
|
||||
"ba_dailies.sh": {
|
||||
"mtime": 1783193775.9898694,
|
||||
"ast_hash": "3f9c9e34478f3994aba15b17db0444a5",
|
||||
"semantic_hash": "3f9c9e34478f3994aba15b17db0444a5"
|
||||
},
|
||||
"scripts/detect_and_click.py": {
|
||||
"mtime": 1783192949.1083212,
|
||||
"ast_hash": "9fd14f914a7cd6b93513229654d09b32",
|
||||
"semantic_hash": "9fd14f914a7cd6b93513229654d09b32"
|
||||
},
|
||||
"CLAUDE.md": {
|
||||
"mtime": 1783193888.424986,
|
||||
"ast_hash": "90b44a4d6d8d4fe6d2aedee977f7f9ab",
|
||||
"semantic_hash": "90b44a4d6d8d4fe6d2aedee977f7f9ab"
|
||||
},
|
||||
"plan.md": {
|
||||
"mtime": 1783194711.9961307,
|
||||
"ast_hash": "fab3982bdb49cd35c41f5b7625f2b9e9",
|
||||
"semantic_hash": "fab3982bdb49cd35c41f5b7625f2b9e9"
|
||||
},
|
||||
"assets/cafe_sparkle.png": {
|
||||
"mtime": 1783181613.5588827,
|
||||
"ast_hash": "1d4b19e525fd22d6b0d372f6b0aa66a0",
|
||||
"semantic_hash": "1d4b19e525fd22d6b0d372f6b0aa66a0"
|
||||
},
|
||||
"screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png": {
|
||||
"mtime": 1783191694.4495065,
|
||||
"ast_hash": "05ea29842233f181b16d4447e5ebbc73",
|
||||
"semantic_hash": "05ea29842233f181b16d4447e5ebbc73"
|
||||
},
|
||||
"screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png": {
|
||||
"mtime": 1783191698.6395793,
|
||||
"ast_hash": "aba65fd0be7b8da3ba97289ce92f723e",
|
||||
"semantic_hash": "aba65fd0be7b8da3ba97289ce92f723e"
|
||||
},
|
||||
"screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png": {
|
||||
"mtime": 1783191702.4029067,
|
||||
"ast_hash": "deab6fbf571e356250410062e3ebed13",
|
||||
"semantic_hash": "deab6fbf571e356250410062e3ebed13"
|
||||
},
|
||||
"screenshots/cafe/room1.png": {
|
||||
"mtime": 1783179797.5240161,
|
||||
"ast_hash": "4b468505d248b4db2176736e1381573a",
|
||||
"semantic_hash": "4b468505d248b4db2176736e1381573a"
|
||||
},
|
||||
"screenshots/cafe/room2.png": {
|
||||
"mtime": 1783179863.061459,
|
||||
"ast_hash": "5207a8f1fcfa106b0da99cf1c149a87b",
|
||||
"semantic_hash": "5207a8f1fcfa106b0da99cf1c149a87b"
|
||||
},
|
||||
"screenshots/cafe/sparkle/01_sparke_zoomed_centered.png": {
|
||||
"mtime": 1783181200.3681042,
|
||||
"ast_hash": "6f4583196baefaaf6d614f2456601e38",
|
||||
"semantic_hash": "6f4583196baefaaf6d614f2456601e38"
|
||||
},
|
||||
"screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png": {
|
||||
"mtime": 1783181200.3742974,
|
||||
"ast_hash": "6f004191111f34dafbfcbf66d5498f69",
|
||||
"semantic_hash": "6f004191111f34dafbfcbf66d5498f69"
|
||||
},
|
||||
"screenshots/cafe/sparkle/03_sparkle_zoomed_out.png": {
|
||||
"mtime": 1783181200.388494,
|
||||
"ast_hash": "6457807fda08a2c1d5745745b8bb1c9b",
|
||||
"semantic_hash": "6457807fda08a2c1d5745745b8bb1c9b"
|
||||
},
|
||||
"screenshots/cafe/sparkle/04_sparke_speech_text_overlap.png": {
|
||||
"mtime": 1783181200.4004235,
|
||||
"ast_hash": "0cccb33cd4a4d1a7bcf4706f0ccb6ae9",
|
||||
"semantic_hash": "0cccb33cd4a4d1a7bcf4706f0ccb6ae9"
|
||||
},
|
||||
"screenshots/cafe/sparkle/05_sparkle_student_hidden.png": {
|
||||
"mtime": 1783181200.4113557,
|
||||
"ast_hash": "bf6aaaaa2b12f737afd57257222c5b0c",
|
||||
"semantic_hash": "bf6aaaaa2b12f737afd57257222c5b0c"
|
||||
},
|
||||
"screenshots/cafe/sparkle/06_sparkle_sample.png": {
|
||||
"mtime": 1783181200.417372,
|
||||
"ast_hash": "aaf6ba6a74419a70fd2bfa308e5c2360",
|
||||
"semantic_hash": "aaf6ba6a74419a70fd2bfa308e5c2360"
|
||||
},
|
||||
"screenshots/cafe/student/01_student_rank_up_popup.png": {
|
||||
"mtime": 1783191828.3826306,
|
||||
"ast_hash": "c253443a605acac2261a71fe9f6a797d",
|
||||
"semantic_hash": "c253443a605acac2261a71fe9f6a797d"
|
||||
},
|
||||
"screenshots/cafe/student/02_student_rank_up_popup.png": {
|
||||
"mtime": 1783191828.3954592,
|
||||
"ast_hash": "761a0dd7d76e5bba664bc6de54606e8d",
|
||||
"semantic_hash": "761a0dd7d76e5bba664bc6de54606e8d"
|
||||
},
|
||||
"screenshots/cafe/student/03_student_rank_up_popup_closed.png": {
|
||||
"mtime": 1783191872.4982038,
|
||||
"ast_hash": "c04bb13964c820bff48a8e5fe8a1cc0d",
|
||||
"semantic_hash": "c04bb13964c820bff48a8e5fe8a1cc0d"
|
||||
},
|
||||
"screenshots/cafe/student/04_student_rotation_popup.png": {
|
||||
"mtime": 1783192210.4112637,
|
||||
"ast_hash": "d2f57180b8add30d27c4e31d7117c74a",
|
||||
"semantic_hash": "d2f57180b8add30d27c4e31d7117c74a"
|
||||
},
|
||||
"screenshots/main/main.png": {
|
||||
"mtime": 1783179791.8902233,
|
||||
"ast_hash": "c798e4f4d70763a987aa81af07562eca",
|
||||
"semantic_hash": "c798e4f4d70763a987aa81af07562eca"
|
||||
}
|
||||
}
|
||||
170
plan.md
Normal file
170
plan.md
Normal file
@ -0,0 +1,170 @@
|
||||
# ba-auto-daily implementation plan
|
||||
|
||||
Personal Blue Archive **JP** daily-automation script. Controls the game via `xdotool`
|
||||
over a remote X11 session (Steam+Proton on `nik-gpu`), using OpenCV template/color
|
||||
matching for detection. No OCR is set up yet (see Prerequisites).
|
||||
|
||||
Feature list and priority ordering below is derived from studying
|
||||
`~/repo/baas-reference` (pur1fying/blue_archive_auto_script, GPL-3.0, read-only
|
||||
reference — **not copied from**, reimplemented fresh in our own style). Its own
|
||||
default scheduler priority, complexity, and JP-relevance were used to rank the
|
||||
backlog. See "Reference" under each feature for the baas file(s) that describe the
|
||||
mechanic, for research purposes only.
|
||||
|
||||
## Status snapshot
|
||||
|
||||
| Feature | Status |
|
||||
|---|---|
|
||||
| Mailbox claim | ✅ Done (`do_mailbox`) |
|
||||
| Cafe (pats + income) | ✅ Done (`do_cafe`) |
|
||||
| Everything else below | Not started |
|
||||
|
||||
## Prerequisites (cross-cutting, unblock multiple tiers)
|
||||
|
||||
- **OCR.** Not set up. Needed for currency/ticket-count readouts, region/tab name
|
||||
search, and a few other read-a-number moments. When we get there, evaluate
|
||||
Tesseract vs PaddleOCR in the existing `~/.venvs/ba-auto-daily` venv. Until then,
|
||||
stick to features that are pure color-check / template-match.
|
||||
- **Auto-fight primitive.** A shared "start fight → max speed + auto-mode →
|
||||
detect win/lose" routine that Arena, and any future story/raid automation, all
|
||||
need. Build once, early, before Tier 3 combat features.
|
||||
Reference: `module/main_story.py` (`auto_fight`/`enter_battle`).
|
||||
|
||||
---
|
||||
|
||||
## Tier 1 — High priority, no OCR needed
|
||||
|
||||
### Stamina/AP sweep (free + task-menu power)
|
||||
Claim the daily free 10 AP purchase and the daily task-menu AP/pyroxene rewards.
|
||||
Pure color-check state detection, fixed clicks. High value: AP is capped and this
|
||||
is free currency/materials left on the table every day.
|
||||
Reference: `module/collect_daily_free_power.py`, `module/collect_daily_task_power.py`.
|
||||
|
||||
### Club/Group AP claim
|
||||
Claim 10 AP from the club/dorm menu. Trivial fixed click + color check.
|
||||
Reference: `module/group.py` (29 lines).
|
||||
|
||||
### Momo Talk (chat app conversations)
|
||||
Auto-complete unread chat conversations, including relationship-rank-up story
|
||||
beats, claim pyroxene. No OCR — pure pixel-column scanning state machine
|
||||
(reply bubble / "enter story" prompt detection by color). Runs on its own ~3h
|
||||
cadence like cafe. Moderate build effort but no new dependencies.
|
||||
Reference: `module/momo_talk.py` (183 lines, `getConversationState`).
|
||||
|
||||
---
|
||||
|
||||
## Tier 2 — Medium priority, sweep-style AP consumption
|
||||
|
||||
These three share the same shape: buy tickets (optional), sweep N times per
|
||||
sub-area, detected mostly by color (a multi-pixel "sss/star-rank" signature, not
|
||||
OCR). Minor OCR only for optional coin-balance readouts — can hardcode/skip that
|
||||
part initially and just sweep until out of stamina/tickets.
|
||||
|
||||
### Commissions ("Special Task" / 委託)
|
||||
Two sub-dungeons (Base Defense = EXP, Item Retrieval = credits).
|
||||
Reference: `module/clear_special_task_power.py` (148 lines).
|
||||
|
||||
### Scrimmage (学院交流会)
|
||||
Three academies, ticket purchase available on JP.
|
||||
Reference: `module/scrimmage.py` (166 lines).
|
||||
|
||||
### Bounty ("Rewarded Task" / 悬赏通缉)
|
||||
Three sub-areas, ticket purchase (0–12). Needs a little OCR for bounty-coin
|
||||
balance if we want auto-refresh; otherwise skippable.
|
||||
Reference: `module/rewarded_task.py` (204 lines).
|
||||
|
||||
### Normal/Hard story AP sweep (re-clear already-cleared stages)
|
||||
Sweep already-cleared main-story stages by region/mission count to burn AP.
|
||||
Needs OCR for current-region-number + a fuzzy swipe-search over mission
|
||||
buttons — more OCR-dependent than the three above, so ranked after them.
|
||||
Reference: `module/explore_tasks/sweep_task.py`, `module/explore_tasks/task_utils.py`.
|
||||
|
||||
---
|
||||
|
||||
## Tier 3 — Needs real OCR investment
|
||||
|
||||
Do these once OCR is actually set up.
|
||||
|
||||
### Battle Pass claim (JP-only feature upstream — relevant to us)
|
||||
Claim pass mission points + tier rewards. Simple template claim-flow; OCR only
|
||||
needed for the optional level/points stat readout (can stub that part).
|
||||
Reference: `module/collect_pass_reward.py` (146 lines).
|
||||
|
||||
### Common Shop + Tactical (Arena) Shop
|
||||
Auto-buy configured items, auto-refresh when affordable. OCR needed for
|
||||
currency balances and shop-tab name search.
|
||||
Reference: `module/shop/common_shop.py`, `module/shop/tactical_challenge_shop.py`,
|
||||
`module/shop/shop_utils.py`.
|
||||
|
||||
### Arena (PvP ladder)
|
||||
Fight until out of tickets or rank 1, claim season + daily rewards. Needs the
|
||||
Tier-1-prerequisite auto-fight primitive, plus OCR for ticket count and
|
||||
self/opponent level. High value (decays twice daily, at 06:00/20:00 reset) but
|
||||
gated on OCR + auto-fight both being ready.
|
||||
Reference: `module/arena.py` (173 lines).
|
||||
|
||||
---
|
||||
|
||||
## Tier 4 — Heavy investment, lower ROI (defer)
|
||||
|
||||
### Lesson / Schedule (affection farming via classes)
|
||||
Structurally the most complex non-crafting feature: fuzzy OCR region-name
|
||||
matching, per-region student-portrait templates, multi-page swipe search, and a
|
||||
bespoke isometric-grid pixel-sampling helper for locating a specific favorite
|
||||
student. A stripped-down "just pick the highest-affection lesson in a fixed
|
||||
region" version would be much cheaper than full favorite-student targeting —
|
||||
consider that subset first if we ever pick this up.
|
||||
Reference: `module/lesson.py` (615 lines).
|
||||
|
||||
### Crafting (自动制造)
|
||||
The single most complex feature in the reference project (1000+ lines): 3-phase
|
||||
material selection, priority-list + rarity-tier config, quantity-stepper OCR,
|
||||
filter/sort UI manipulation. Large one-time build cost for recurring but
|
||||
non-urgent value (crafting mats don't decay the way AP/tickets do).
|
||||
Reference: `module/create.py` (1028 lines).
|
||||
|
||||
### Main story / Normal-Hard story "push" (auto-clear next uncleared stage)
|
||||
Distinct from the Tier-1/2 "sweep already-cleared stages" — this is unlocking
|
||||
new content. baas ships ~920KB of hand-authored per-stage click/formation-swap
|
||||
JSON scripts for "grid mode"; "simple mode" (plain auto-fight, no positioning)
|
||||
is far cheaper but doesn't work on every stage. Only worth building incrementally,
|
||||
per-stage, on demand — not a batch feature.
|
||||
Reference: `module/main_story.py`, `module/explore_tasks/explore_task.py`.
|
||||
|
||||
### Group Story / Mini Story (side-plot cleanup)
|
||||
OCR-detect a "NEW" badge across a paged grid, clear each unread plot. Pure
|
||||
convenience, optional.
|
||||
Reference: `module/group_story.py`, `module/mini_story.py`.
|
||||
|
||||
### Event content (Activities: story/mission/challenge push)
|
||||
Shape mirrors Tier-2 sweep work, but the content is 100% ephemeral — a new
|
||||
JSON/script per event, expires when the event ends. Recommendation: only build
|
||||
the generic "event AP sweep" (reuses Tier-1/2 sweep logic almost as-is) as a
|
||||
standing capability; don't try to pre-build specific named events. Note also
|
||||
that per baas's own docs, current JP/Global events have mostly moved away from
|
||||
grid-walking challenges, so "challenge push" content increasingly needs manual
|
||||
play anyway — low automation ROI there specifically.
|
||||
Reference: `module/activities/activity_utils.py`, `module/sweep_activity.py`.
|
||||
|
||||
---
|
||||
|
||||
## Skip list (not relevant to this project)
|
||||
|
||||
| Feature | Why skip |
|
||||
|---|---|
|
||||
| Total Assault (raid) | Stubbed/dead code upstream too (`return True` before any real logic) and disabled by default; low value to chase. |
|
||||
| Joint Firing Drill (综合战术测试) | Hard-disabled for JP server in baas's own code (`if self.server == "JP": return True`) despite being in their README — it's a no-op on JP regardless. |
|
||||
| De-clothes localization toggle | CN-only. |
|
||||
| Restart / refresh-uiautomator2 | Android/ADB housekeeping for baas's mobile control backend; not applicable to our PC/Steam/Proton setup. |
|
||||
| Auto-unfriend | Disabled by default upstream too; low value, mildly risky (deletes friends). |
|
||||
| Daily minigame dispatcher | Event-specific and changes every campaign — not a stable feature to pre-build. Handle ad hoc if/when a specific live minigame is worth automating. |
|
||||
|
||||
---
|
||||
|
||||
## Notes on cadence
|
||||
|
||||
Several features are time-decaying rather than "any time" farmable, which should
|
||||
inform how often the script runs (cron/scheduler), not just build order:
|
||||
- Cafe income + Momo Talk: effectively continuous, ~3h internal cadence.
|
||||
- Arena: resets twice daily (06:00, 20:00 UTC).
|
||||
- Everything else: once-daily, JP/Global reset at 20:00 UTC (03:00 UTC+8).
|
||||
Loading…
x
Reference in New Issue
Block a user