maxpane 0.3.3__py3-none-any.whl
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.
- maxpane-0.3.3.dist-info/METADATA +81 -0
- maxpane-0.3.3.dist-info/RECORD +163 -0
- maxpane-0.3.3.dist-info/WHEEL +4 -0
- maxpane-0.3.3.dist-info/entry_points.txt +2 -0
- maxpane-0.3.3.dist-info/licenses/LICENSE +21 -0
- maxpane_dashboard/__init__.py +3 -0
- maxpane_dashboard/__main__.py +99 -0
- maxpane_dashboard/abis/cattown/competition.json +1026 -0
- maxpane_dashboard/abis/cattown/fishing_game.json +1382 -0
- maxpane_dashboard/abis/cattown/kibble_oracle.json +42 -0
- maxpane_dashboard/abis/cattown/kibble_token.json +224 -0
- maxpane_dashboard/abis/cattown/revenue_share.json +724 -0
- maxpane_dashboard/abis/cattown/sushi_v2_pair.json +166 -0
- maxpane_dashboard/analytics/__init__.py +0 -0
- maxpane_dashboard/analytics/base_overview_signals.py +146 -0
- maxpane_dashboard/analytics/base_signals.py +98 -0
- maxpane_dashboard/analytics/base_tokens.py +162 -0
- maxpane_dashboard/analytics/cattown_conditions.py +237 -0
- maxpane_dashboard/analytics/cattown_economy.py +95 -0
- maxpane_dashboard/analytics/cattown_signals.py +181 -0
- maxpane_dashboard/analytics/dota_signals.py +155 -0
- maxpane_dashboard/analytics/ev.py +106 -0
- maxpane_dashboard/analytics/frenpet_battle.py +142 -0
- maxpane_dashboard/analytics/frenpet_population.py +209 -0
- maxpane_dashboard/analytics/frenpet_signals.py +212 -0
- maxpane_dashboard/analytics/leaderboard.py +67 -0
- maxpane_dashboard/analytics/ocm_signals.py +121 -0
- maxpane_dashboard/analytics/production.py +80 -0
- maxpane_dashboard/analytics/signals.py +128 -0
- maxpane_dashboard/app.py +239 -0
- maxpane_dashboard/data/__init__.py +79 -0
- maxpane_dashboard/data/base_cache.py +239 -0
- maxpane_dashboard/data/base_client.py +945 -0
- maxpane_dashboard/data/base_manager.py +406 -0
- maxpane_dashboard/data/base_models.py +409 -0
- maxpane_dashboard/data/cache.py +173 -0
- maxpane_dashboard/data/cattown_cache.py +179 -0
- maxpane_dashboard/data/cattown_client.py +847 -0
- maxpane_dashboard/data/cattown_manager.py +317 -0
- maxpane_dashboard/data/cattown_models.py +122 -0
- maxpane_dashboard/data/client.py +356 -0
- maxpane_dashboard/data/dota_cache.py +177 -0
- maxpane_dashboard/data/dota_client.py +321 -0
- maxpane_dashboard/data/dota_manager.py +338 -0
- maxpane_dashboard/data/dota_models.py +106 -0
- maxpane_dashboard/data/frenpet_cache.py +214 -0
- maxpane_dashboard/data/frenpet_client.py +669 -0
- maxpane_dashboard/data/frenpet_manager.py +452 -0
- maxpane_dashboard/data/frenpet_models.py +189 -0
- maxpane_dashboard/data/manager.py +219 -0
- maxpane_dashboard/data/models.py +672 -0
- maxpane_dashboard/data/ocm_cache.py +215 -0
- maxpane_dashboard/data/ocm_client.py +538 -0
- maxpane_dashboard/data/ocm_manager.py +248 -0
- maxpane_dashboard/data/ocm_models.py +60 -0
- maxpane_dashboard/data/price.py +77 -0
- maxpane_dashboard/data/snapshot.py +30 -0
- maxpane_dashboard/screens/__init__.py +1 -0
- maxpane_dashboard/screens/bakery.py +195 -0
- maxpane_dashboard/screens/base_terminal.py +179 -0
- maxpane_dashboard/screens/cattown.py +178 -0
- maxpane_dashboard/screens/dota.py +191 -0
- maxpane_dashboard/screens/frenpet.py +192 -0
- maxpane_dashboard/screens/game_select.py +80 -0
- maxpane_dashboard/screens/ocm.py +182 -0
- maxpane_dashboard/screens/splash.py +81 -0
- maxpane_dashboard/templates/__init__.py +21 -0
- maxpane_dashboard/templates/activity_feed_template.py +105 -0
- maxpane_dashboard/templates/hero_metrics_template.py +101 -0
- maxpane_dashboard/templates/leaderboard_template.py +95 -0
- maxpane_dashboard/templates/screen_template.py +195 -0
- maxpane_dashboard/templates/signals_template.py +122 -0
- maxpane_dashboard/templates/sparkline_template.py +140 -0
- maxpane_dashboard/templates/status_bar_template.py +101 -0
- maxpane_dashboard/templates/two_column_table_template.py +101 -0
- maxpane_dashboard/themes/__init__.py +131 -0
- maxpane_dashboard/themes/minimal.tcss +1405 -0
- maxpane_dashboard/widgets/__init__.py +19 -0
- maxpane_dashboard/widgets/activity_feed.py +110 -0
- maxpane_dashboard/widgets/base/__init__.py +41 -0
- maxpane_dashboard/widgets/base/fee_claims.py +108 -0
- maxpane_dashboard/widgets/base/fee_leaderboard.py +73 -0
- maxpane_dashboard/widgets/base/fee_stats.py +64 -0
- maxpane_dashboard/widgets/base/gecko_pools.py +64 -0
- maxpane_dashboard/widgets/base/graduated.py +69 -0
- maxpane_dashboard/widgets/base/launch_feed.py +107 -0
- maxpane_dashboard/widgets/base/launch_stats.py +61 -0
- maxpane_dashboard/widgets/base/overview/__init__.py +23 -0
- maxpane_dashboard/widgets/base/overview/_legacy_overview.py +421 -0
- maxpane_dashboard/widgets/base/overview/bt_activity_feed.py +126 -0
- maxpane_dashboard/widgets/base/overview/bt_best_plays.py +111 -0
- maxpane_dashboard/widgets/base/overview/bt_hero_metrics.py +127 -0
- maxpane_dashboard/widgets/base/overview/bt_leaderboard.py +124 -0
- maxpane_dashboard/widgets/base/overview/bt_overview_leaderboard.py +127 -0
- maxpane_dashboard/widgets/base/overview/bt_signals.py +93 -0
- maxpane_dashboard/widgets/base/overview/bt_sparklines.py +118 -0
- maxpane_dashboard/widgets/base/overview.py +421 -0
- maxpane_dashboard/widgets/base/pool_info.py +63 -0
- maxpane_dashboard/widgets/base/price_sparklines.py +105 -0
- maxpane_dashboard/widgets/base/token_chart.py +99 -0
- maxpane_dashboard/widgets/base/token_price.py +82 -0
- maxpane_dashboard/widgets/base/token_signals.py +67 -0
- maxpane_dashboard/widgets/base/top_movers.py +82 -0
- maxpane_dashboard/widgets/base/trade_feed.py +113 -0
- maxpane_dashboard/widgets/base/trending_table.py +89 -0
- maxpane_dashboard/widgets/base/volume_bars.py +70 -0
- maxpane_dashboard/widgets/base/volume_sparklines.py +79 -0
- maxpane_dashboard/widgets/cattown/__init__.py +17 -0
- maxpane_dashboard/widgets/cattown/ct_activity_feed.py +122 -0
- maxpane_dashboard/widgets/cattown/ct_best_plays.py +115 -0
- maxpane_dashboard/widgets/cattown/ct_hero_metrics.py +159 -0
- maxpane_dashboard/widgets/cattown/ct_leaderboard.py +86 -0
- maxpane_dashboard/widgets/cattown/ct_signals.py +85 -0
- maxpane_dashboard/widgets/cattown/ct_sparklines.py +116 -0
- maxpane_dashboard/widgets/cookie_chart.py +113 -0
- maxpane_dashboard/widgets/dota/__init__.py +17 -0
- maxpane_dashboard/widgets/dota/dota_activity_feed.py +94 -0
- maxpane_dashboard/widgets/dota/dota_best_plays.py +97 -0
- maxpane_dashboard/widgets/dota/dota_hero_metrics.py +138 -0
- maxpane_dashboard/widgets/dota/dota_leaderboard.py +69 -0
- maxpane_dashboard/widgets/dota/dota_signals.py +85 -0
- maxpane_dashboard/widgets/dota/dota_sparklines.py +112 -0
- maxpane_dashboard/widgets/ev_table.py +95 -0
- maxpane_dashboard/widgets/frenpet/__init__.py +47 -0
- maxpane_dashboard/widgets/frenpet/action_queue.py +119 -0
- maxpane_dashboard/widgets/frenpet/aggregate_stats.py +74 -0
- maxpane_dashboard/widgets/frenpet/alerts.py +65 -0
- maxpane_dashboard/widgets/frenpet/battle_feed.py +105 -0
- maxpane_dashboard/widgets/frenpet/battle_log.py +164 -0
- maxpane_dashboard/widgets/frenpet/game_stats.py +47 -0
- maxpane_dashboard/widgets/frenpet/logo.py +21 -0
- maxpane_dashboard/widgets/frenpet/market_conditions.py +91 -0
- maxpane_dashboard/widgets/frenpet/next_actions.py +145 -0
- maxpane_dashboard/widgets/frenpet/overview/__init__.py +18 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_battle_activity.py +121 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_best_plays.py +81 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_game_signals.py +97 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_hero_metrics.py +110 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_overview_leaderboard.py +96 -0
- maxpane_dashboard/widgets/frenpet/overview/fp_score_trends.py +124 -0
- maxpane_dashboard/widgets/frenpet/pet_card.py +124 -0
- maxpane_dashboard/widgets/frenpet/pet_signals.py +150 -0
- maxpane_dashboard/widgets/frenpet/pet_stats.py +104 -0
- maxpane_dashboard/widgets/frenpet/pets_in_context.py +75 -0
- maxpane_dashboard/widgets/frenpet/population.py +46 -0
- maxpane_dashboard/widgets/frenpet/score_dist.py +62 -0
- maxpane_dashboard/widgets/frenpet/score_trend.py +120 -0
- maxpane_dashboard/widgets/frenpet/sniper_queue.py +169 -0
- maxpane_dashboard/widgets/frenpet/target_landscape.py +69 -0
- maxpane_dashboard/widgets/frenpet/top_leaderboard.py +83 -0
- maxpane_dashboard/widgets/frenpet/training_status.py +63 -0
- maxpane_dashboard/widgets/frenpet/wallet_activity.py +94 -0
- maxpane_dashboard/widgets/hero_metrics.py +102 -0
- maxpane_dashboard/widgets/leaderboard.py +83 -0
- maxpane_dashboard/widgets/ocm/__init__.py +17 -0
- maxpane_dashboard/widgets/ocm/ocm_activity_feed.py +110 -0
- maxpane_dashboard/widgets/ocm/ocm_hero_metrics.py +94 -0
- maxpane_dashboard/widgets/ocm/ocm_signals.py +85 -0
- maxpane_dashboard/widgets/ocm/ocm_sparklines.py +116 -0
- maxpane_dashboard/widgets/ocm/ocm_staking_overview.py +92 -0
- maxpane_dashboard/widgets/ocm/ocm_supply_breakdown.py +96 -0
- maxpane_dashboard/widgets/signals_panel.py +118 -0
- maxpane_dashboard/widgets/status_bar.py +101 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: maxpane
|
|
3
|
+
Version: 0.3.3
|
|
4
|
+
Summary: Terminal dashboard for onchain games — RugPull Bakery, FrenPet, Cat Town, OCM, DOTA, and more
|
|
5
|
+
Project-URL: Homepage, https://github.com/banse/maxpane
|
|
6
|
+
Project-URL: Repository, https://github.com/banse/maxpane
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Keywords: blockchain,dashboard,gaming,onchain,terminal,tui
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Topic :: Games/Entertainment
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Requires-Dist: httpx>=0.27
|
|
20
|
+
Requires-Dist: pydantic>=2.0
|
|
21
|
+
Requires-Dist: python-dotenv>=1.0
|
|
22
|
+
Requires-Dist: textual>=0.80
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# MaxPane
|
|
26
|
+
|
|
27
|
+
Terminal dashboard for blockchain games on Base, Abstract, and Ethereum.
|
|
28
|
+
|
|
29
|
+
Track leaderboards, signals, and analytics for RugPull Bakery, FrenPet, Cat Town, OCM, DOTA, and Base token trading — all from your terminal.
|
|
30
|
+
|
|
31
|
+
## Install
|
|
32
|
+
|
|
33
|
+
### Quick install (dashboard only)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pip install maxpane
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Requires Python 3.11+
|
|
40
|
+
|
|
41
|
+
### Full install (with Matrix intro sequence)
|
|
42
|
+
|
|
43
|
+
The full experience includes a Rust-powered Matrix-inspired intro animation. This requires [Rust](https://rustup.rs/) in addition to Python.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git clone https://github.com/banse/maxpane.git
|
|
47
|
+
cd maxpane
|
|
48
|
+
|
|
49
|
+
# Build the intro binary
|
|
50
|
+
cd maxpane && cargo build --release && cd ..
|
|
51
|
+
|
|
52
|
+
# Install the Python dashboard
|
|
53
|
+
pip install -e .
|
|
54
|
+
|
|
55
|
+
# Run with intro
|
|
56
|
+
./maxpane/target/release/maxpane && maxpane
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or add an alias to your shell config (`~/.zshrc` or `~/.bashrc`):
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
alias maxpane='~/path/to/maxpane/maxpane/target/release/maxpane && command maxpane'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Usage
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
maxpane # launch dashboard (default: bakery)
|
|
69
|
+
maxpane --game frenpet # start on FrenPet view
|
|
70
|
+
maxpane --game base # start on Base trading view
|
|
71
|
+
maxpane --theme minimal # use minimal theme
|
|
72
|
+
maxpane --poll-interval 60 # poll every 60s instead of 30s
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Available games
|
|
76
|
+
|
|
77
|
+
`bakery` `frenpet` `base` `cattown` `ocm` `dota`
|
|
78
|
+
|
|
79
|
+
### Available themes
|
|
80
|
+
|
|
81
|
+
`matrix` `minimal` `bloomberg` `htop` `retro` `bakery` `frenpet` `base`
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
maxpane_dashboard/__init__.py,sha256=uuKxeuLIn29ViB19vlj1X_Mjorrl2FuMLgGxgT--uyo,73
|
|
2
|
+
maxpane_dashboard/__main__.py,sha256=KXrQcyBKLYoEwh_qipQiVNeCGZzhv0F8543-zRrUsDc,3087
|
|
3
|
+
maxpane_dashboard/app.py,sha256=36fVh13-n5WBHl50U-YBDWzRrukf2Q7SRyOnNtBj7L0,9125
|
|
4
|
+
maxpane_dashboard/abis/cattown/competition.json,sha256=nzWQiacxPBWlTc8b84wfNJ_gwFmdtaiXhEgiTdT3uQU,19896
|
|
5
|
+
maxpane_dashboard/abis/cattown/fishing_game.json,sha256=ZCKxCv4oWQw0yq0aczmHHKpTQzCM7mjhqZTKTTN0c1Q,26340
|
|
6
|
+
maxpane_dashboard/abis/cattown/kibble_oracle.json,sha256=1v1NkZ0z7pPjQPkudOmhF0WHc1_9YbxLXz0oUfu0R-w,684
|
|
7
|
+
maxpane_dashboard/abis/cattown/kibble_token.json,sha256=OagT4OSkG-e0UBx3niAzdy59AO-NVaEJvNSBFRubSp4,4049
|
|
8
|
+
maxpane_dashboard/abis/cattown/revenue_share.json,sha256=_ClsByzsNAZ8SMF1jgNxZxozQklPKXCbFbsmRtCzYRc,13324
|
|
9
|
+
maxpane_dashboard/abis/cattown/sushi_v2_pair.json,sha256=9gZWUAXpjstIOVPV4erah5vSZl8yo-PxgbxlHPYUCfs,3034
|
|
10
|
+
maxpane_dashboard/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
maxpane_dashboard/analytics/base_overview_signals.py,sha256=yoD4WrpYHLfNvuZssbWtcXp3YbZ0TnztJjAujD-ZjCU,5133
|
|
12
|
+
maxpane_dashboard/analytics/base_signals.py,sha256=Kl_pJfCXP-XsTOY22-H0p-CUzvK3x_fTpyQxPBlXNoA,2826
|
|
13
|
+
maxpane_dashboard/analytics/base_tokens.py,sha256=kqr990Ps1wSehIm4jio-3U7sPSo-DthdIm6V6Dm9980,5249
|
|
14
|
+
maxpane_dashboard/analytics/cattown_conditions.py,sha256=4QOcQB3girimc60AopdD7NnTcm_uAQGgGmbAcaAAUNk,15323
|
|
15
|
+
maxpane_dashboard/analytics/cattown_economy.py,sha256=Vz5Ds0fT7ZcFspldOy6jcbGntCRq31x_tJhQCzZX7NA,2728
|
|
16
|
+
maxpane_dashboard/analytics/cattown_signals.py,sha256=uydmsVFF9vPbCJTvjipQX24W5tMdX0NstK8SuNY2njc,5693
|
|
17
|
+
maxpane_dashboard/analytics/dota_signals.py,sha256=T361tNgygSqaN1ysZhRWTX8-LOBSmI20_Yh2esRWh3I,4838
|
|
18
|
+
maxpane_dashboard/analytics/ev.py,sha256=vPjRGGYrZoGnsjDvb5q5JpXvni3Tsa2I1wHE1JuL3hs,4180
|
|
19
|
+
maxpane_dashboard/analytics/frenpet_battle.py,sha256=lfbDuioJQPO67R4VsOYVL7g-9fH_F6w6-J1_G0c-eAk,4533
|
|
20
|
+
maxpane_dashboard/analytics/frenpet_population.py,sha256=fK4dosw4GEfdyfWXVk1ppR8Y4wVkUV9Ii-oMyv-AzbU,6301
|
|
21
|
+
maxpane_dashboard/analytics/frenpet_signals.py,sha256=QpKd8wIOF10b1dcZxde8Sib-AQGSMBfTfdWgslsLxc4,6732
|
|
22
|
+
maxpane_dashboard/analytics/leaderboard.py,sha256=IeHIWySQfeCxvFvBphCaYgUJmb5_qn_PMEeZA1dapT4,2012
|
|
23
|
+
maxpane_dashboard/analytics/ocm_signals.py,sha256=Jsw1IZPQFkjwoeSo6Lbz58Gnf7mXuav9K6U8uqt_5Y4,3473
|
|
24
|
+
maxpane_dashboard/analytics/production.py,sha256=AFy6D8uez2IeQRjtuCOwg9a6gGkUPzbaknaTUHk_Hvg,2383
|
|
25
|
+
maxpane_dashboard/analytics/signals.py,sha256=IU0v3IYzq2DvfJm5A9jtjaS5SoNtb0wDrNDQvujMsgM,4420
|
|
26
|
+
maxpane_dashboard/data/__init__.py,sha256=l0vPXpcCbaGbA4KnL3mhV-yAiE8p_b75FVjzSd8d2yo,1980
|
|
27
|
+
maxpane_dashboard/data/base_cache.py,sha256=4JUD9NoPYvoRDtqKSKPGeH0LZC6hPu4ppp9F5OxCnBA,8836
|
|
28
|
+
maxpane_dashboard/data/base_client.py,sha256=ABV8WXCJ8MBwuoCME4DxiMieV_FkC5_uWoRGPsuhcE4,36157
|
|
29
|
+
maxpane_dashboard/data/base_manager.py,sha256=aPxm2q5kyUDAfnDUdPfzkcZyAk5DsHzsAS_tHZOZYS4,14660
|
|
30
|
+
maxpane_dashboard/data/base_models.py,sha256=lvEm93r0wInf30FLTNoThnfZ-8V0K74BKC5hFarcXFY,14110
|
|
31
|
+
maxpane_dashboard/data/cache.py,sha256=aBhD1oHa3TJQESaNfshBQbU1EfFBNL_-XLifJa8AuEw,5959
|
|
32
|
+
maxpane_dashboard/data/cattown_cache.py,sha256=f978rttY4NqxPa9FkYbUSFoy-ylluiCvspb4vUOmDWc,6522
|
|
33
|
+
maxpane_dashboard/data/cattown_client.py,sha256=nTfvCK4SZ8sH31Wlg4V5zvOfsvgWUX_fRqIf1Ll1deQ,32893
|
|
34
|
+
maxpane_dashboard/data/cattown_manager.py,sha256=ySEyPxEkBdUzW9pce0cTQOW9XH_e3x3FP4IywhfRKYk,11488
|
|
35
|
+
maxpane_dashboard/data/cattown_models.py,sha256=scWXReAiUJMfLPYD1A-qzX9w8IYQfxKJr9H_K8aKwk0,2928
|
|
36
|
+
maxpane_dashboard/data/client.py,sha256=9w0fwiHoOmnsOP4CJb_hrAbb_zDP1dzOMcL0vEpfGjg,12275
|
|
37
|
+
maxpane_dashboard/data/dota_cache.py,sha256=c7vMyvbE0XVoaKQShg0exyhqIIT1yOmF5uDodgMjMgI,6269
|
|
38
|
+
maxpane_dashboard/data/dota_client.py,sha256=N4sVEzzLL-bBvdR3XTF2-6MCivZppKXNYitkSRrz75c,11454
|
|
39
|
+
maxpane_dashboard/data/dota_manager.py,sha256=8gWT77GdvEshPVvMNuYk55BtyhwaLzxjYOdskc-NzDo,12346
|
|
40
|
+
maxpane_dashboard/data/dota_models.py,sha256=8DbFMEhMQd71QHb9h6DQ9qwQ8xl5lyYS0QmXwTdWKUo,2423
|
|
41
|
+
maxpane_dashboard/data/frenpet_cache.py,sha256=G09z00L-YfMldpKJ4Tx-8_NVktdEKoqgbpbeLxsjAQk,7650
|
|
42
|
+
maxpane_dashboard/data/frenpet_client.py,sha256=eeZ0mvgN9vlbOiafUcJ2kUgeiVdyBoeja63DxspUqe0,25073
|
|
43
|
+
maxpane_dashboard/data/frenpet_manager.py,sha256=6K9ai0mmunHV8Wl3nRLRWPQOMEcnBbbCTqF--XfpqSA,16658
|
|
44
|
+
maxpane_dashboard/data/frenpet_models.py,sha256=oos6WKJv5fQbic8xr2lt4qDLdqjx4YtRT25tyth_sig,6393
|
|
45
|
+
maxpane_dashboard/data/manager.py,sha256=IPYxmJqtTQ6kpDx2x3DWaA0CMQ299kjA_hQ8sWVJDkU,8822
|
|
46
|
+
maxpane_dashboard/data/models.py,sha256=Q7hEW3hiH_0hBN8aodJPdD6aast7gbLrkm-HQkAXc28,21925
|
|
47
|
+
maxpane_dashboard/data/ocm_cache.py,sha256=iCSdJCFPIP_Rn57hkDfu8QP798YIVlIY-XCF14Xu9NU,7819
|
|
48
|
+
maxpane_dashboard/data/ocm_client.py,sha256=aSB59J1n40n54yftgbTW6wTTzMYHrE8IzUTJWShjPKM,19705
|
|
49
|
+
maxpane_dashboard/data/ocm_manager.py,sha256=8g9a5-yRqXf5dIoRcbWaJE64d8FMgPrhDsjO5bWAaYs,9220
|
|
50
|
+
maxpane_dashboard/data/ocm_models.py,sha256=CXZ0yIBnD3-2yv59wFNwx-0ATrE-_hI5VrohHxAWdf4,1575
|
|
51
|
+
maxpane_dashboard/data/price.py,sha256=S-nRkP_q6kIN0htk95VbmKobiBZBqkJ4tbyj-hVZAcw,2360
|
|
52
|
+
maxpane_dashboard/data/snapshot.py,sha256=X741zmGv6MXKnv2YVuGCU0IOtj8B0p5vNTUO7wGg6uk,775
|
|
53
|
+
maxpane_dashboard/screens/__init__.py,sha256=8qIvctVQpUkH_de51jDRnR4UyIcvHT6KUHgLQHapgKE,48
|
|
54
|
+
maxpane_dashboard/screens/bakery.py,sha256=8b2r0BEnvTG6XL3Twim29AwSqjkyzVgxKi_9s4GAHoA,6843
|
|
55
|
+
maxpane_dashboard/screens/base_terminal.py,sha256=7iGvj1MA6xRTFSIoXc536IuggKIKZWT8F5ZHdv_3bV0,5967
|
|
56
|
+
maxpane_dashboard/screens/cattown.py,sha256=bDhYYJkXyMQ-9Q1e01obMiljhHFjFx2yeIByCEKPJMo,6030
|
|
57
|
+
maxpane_dashboard/screens/dota.py,sha256=LW4c14tQyXf1R04As5kgzL7yBoOlkHxvzC7cwYcbGqI,6800
|
|
58
|
+
maxpane_dashboard/screens/frenpet.py,sha256=U3nT1t_vRLCBHmrDczsIom3-pUTPO_JQCrUZ21C6tPc,6985
|
|
59
|
+
maxpane_dashboard/screens/game_select.py,sha256=_MJoO_wO94LkRV71pJjSy_skFZkloNNL-JwshPl0p2Y,2393
|
|
60
|
+
maxpane_dashboard/screens/ocm.py,sha256=gTgHqGuMfArRTWhlzrtB2LzaxmUn7JJx8IPZYMtua4w,6556
|
|
61
|
+
maxpane_dashboard/screens/splash.py,sha256=d-Oz-FXDrzZGurNGFwkNEQgUOeEO2m9n970YZJVoByM,2863
|
|
62
|
+
maxpane_dashboard/templates/__init__.py,sha256=r_nB2teVOGIKyiV2Za6VvU7uDa3q2lieEoR1H1acCis,1094
|
|
63
|
+
maxpane_dashboard/templates/activity_feed_template.py,sha256=rYaSzGa6jAAPDQ24egpffozXhUakUabGwyGGtLqvPVY,3301
|
|
64
|
+
maxpane_dashboard/templates/hero_metrics_template.py,sha256=c3Fv0w90OW2oeVyLAUVMNve-G4PtV_J2EpDRVALBCdY,2878
|
|
65
|
+
maxpane_dashboard/templates/leaderboard_template.py,sha256=W12-RMzhDJ7DsFnLALTi1SSQNk4N7EYyd9hSyDBtB54,3161
|
|
66
|
+
maxpane_dashboard/templates/screen_template.py,sha256=8b2r0BEnvTG6XL3Twim29AwSqjkyzVgxKi_9s4GAHoA,6843
|
|
67
|
+
maxpane_dashboard/templates/signals_template.py,sha256=OOyvnU3ivoin8zLxB3O4zNE7qXJpyn9AM5PZ50jZ8IY,3964
|
|
68
|
+
maxpane_dashboard/templates/sparkline_template.py,sha256=odL-KP2BSxht5I9KgQPKULDZjxAE7vlhrKClLvTACgM,4523
|
|
69
|
+
maxpane_dashboard/templates/status_bar_template.py,sha256=dgTVSQ8Q40ROFK_P3-tz7m1JoA-dvCBi3lNk6Z_aoZk,3059
|
|
70
|
+
maxpane_dashboard/templates/two_column_table_template.py,sha256=MO68giYK3TmO_jXCb5HTaNeMmhlZ_DzscB6oc1i_MPs,3228
|
|
71
|
+
maxpane_dashboard/themes/__init__.py,sha256=5aGt_Y_W2CT0hlo3AaEWrLxO8ZyK1Ja2S-7BZuTaA_Y,2832
|
|
72
|
+
maxpane_dashboard/themes/minimal.tcss,sha256=X7NH_uWCdCXBwUZ8jlS8LOZt8Nnlsv5lDxxHiS1qstg,23647
|
|
73
|
+
maxpane_dashboard/widgets/__init__.py,sha256=KgPRRXh8P62UD_Q-8Oh4r6CqKpCK6NtjoEql5a2XZr0,612
|
|
74
|
+
maxpane_dashboard/widgets/activity_feed.py,sha256=M4KqetagGWMxdQbTxIsIaklIFSXbE9yT6vAqAnU0zaM,3583
|
|
75
|
+
maxpane_dashboard/widgets/cookie_chart.py,sha256=n_AYHxVcaIlCKCUC9ncMCv8tcdxHTWTT5mCDCRCZk8E,3459
|
|
76
|
+
maxpane_dashboard/widgets/ev_table.py,sha256=ri1q39Z_m5V9eRGQw4Jye-rQ-6e4MdyE1mHaiBenhT4,3101
|
|
77
|
+
maxpane_dashboard/widgets/hero_metrics.py,sha256=_VBSiAfVMOMXiVEo27aylj1UQcvyS1FsiEr3FCCKAec,3178
|
|
78
|
+
maxpane_dashboard/widgets/leaderboard.py,sha256=pxUmQiID1mG-HEcj9g0fsXVScnuvABmQfN1-NeV1Hv8,2559
|
|
79
|
+
maxpane_dashboard/widgets/signals_panel.py,sha256=wS_Pcz2hlyVcJVDaYjs-ZI8dfC6HSxt-K7H8-EsmlqY,3794
|
|
80
|
+
maxpane_dashboard/widgets/status_bar.py,sha256=-lF6qRhz4UFUwtaiLCqzQe47xq2orevCPf4Ns4WcIMs,3057
|
|
81
|
+
maxpane_dashboard/widgets/base/__init__.py,sha256=fvTpsU-swHadg579JEb9EXtFNAEhVyalEDlzYkVoGFM,1612
|
|
82
|
+
maxpane_dashboard/widgets/base/fee_claims.py,sha256=RlZVpDClDTq26zSzIwC0Vp46PiAu4TIIRO_hrrf3Cyg,3127
|
|
83
|
+
maxpane_dashboard/widgets/base/fee_leaderboard.py,sha256=r4Nr0ATrvigid_-KczFp7TRboYIeEVMii9bm2_BNFm4,2123
|
|
84
|
+
maxpane_dashboard/widgets/base/fee_stats.py,sha256=ntV7iTaTwLmBcbhT8cgEOx3_DVtMTrTt-qKU3QKRn2M,1965
|
|
85
|
+
maxpane_dashboard/widgets/base/gecko_pools.py,sha256=FQQlryobvaT5a4i3Qa2GX8PSHpf4g1JXpoyld5Q2E3A,1858
|
|
86
|
+
maxpane_dashboard/widgets/base/graduated.py,sha256=9Vn1Sn8AX1vmrqKjIhCtphJhJ45XThRU0JPHrAYY__E,2112
|
|
87
|
+
maxpane_dashboard/widgets/base/launch_feed.py,sha256=9h1was3GRHkLqGevumoMIv_n87PcsxPrCu5LT1L92ow,3470
|
|
88
|
+
maxpane_dashboard/widgets/base/launch_stats.py,sha256=niHtR8pq2DuYJWet48thgNLZdVphdHX7_QAAXe2yNXc,1907
|
|
89
|
+
maxpane_dashboard/widgets/base/overview.py,sha256=4iwcwbWYgSLepQn5DTRggC9hOT_UuITSsg16OWIA-cE,14089
|
|
90
|
+
maxpane_dashboard/widgets/base/pool_info.py,sha256=04Ds019n48ynip18vtkrqhZubBxdeu6kcRADjky5Kf0,1908
|
|
91
|
+
maxpane_dashboard/widgets/base/price_sparklines.py,sha256=lm2Edd_AtVVq14jEmR8wq3t41l-XPVGKeX3dlAP0hnc,3154
|
|
92
|
+
maxpane_dashboard/widgets/base/token_chart.py,sha256=Vv0TcSQwmEkCZRTzzlLKCAjVmO43Wd92kyBaIsj4Gf8,2628
|
|
93
|
+
maxpane_dashboard/widgets/base/token_price.py,sha256=UcDoy_Dn-6SDCXo_bK_Hy2I8lLPfWIbqTRzR_BNc574,2270
|
|
94
|
+
maxpane_dashboard/widgets/base/token_signals.py,sha256=zrTV4qpCQuswa4O2wQu71bN9mkLZ9n7W7eGEqcmQ604,2227
|
|
95
|
+
maxpane_dashboard/widgets/base/top_movers.py,sha256=C0H8J9foLjuzmmIvN4dDbC3gSW2w2GPCEtFYG3SqKPg,2496
|
|
96
|
+
maxpane_dashboard/widgets/base/trade_feed.py,sha256=BjOIq7ANkyzlzu9ssCYsbAFQIBaeLzh9ddIFdPevhnU,3385
|
|
97
|
+
maxpane_dashboard/widgets/base/trending_table.py,sha256=uF5JSsqvcx_wPbz5jd4M5-XHoe3q1OUSi-zFlK6JCr0,2819
|
|
98
|
+
maxpane_dashboard/widgets/base/volume_bars.py,sha256=R8gn-hhtQPC2FSVoyyoijvkg781sPWzB3xAmp4HGN-k,2004
|
|
99
|
+
maxpane_dashboard/widgets/base/volume_sparklines.py,sha256=tfkev8KaOe67XM7Pirn31E9AFrihunw8BE7wutgBlMI,2683
|
|
100
|
+
maxpane_dashboard/widgets/base/overview/__init__.py,sha256=AbrvXGx5VDKUJDg9MeO-wmmwoXlxGH9eEZKcX54Lzzg,905
|
|
101
|
+
maxpane_dashboard/widgets/base/overview/_legacy_overview.py,sha256=4iwcwbWYgSLepQn5DTRggC9hOT_UuITSsg16OWIA-cE,14089
|
|
102
|
+
maxpane_dashboard/widgets/base/overview/bt_activity_feed.py,sha256=hqk0SRj1PyseMf695UhooWLj-UNC-yBuxt45hbMLTOY,3592
|
|
103
|
+
maxpane_dashboard/widgets/base/overview/bt_best_plays.py,sha256=lE-xD0PGycpg9FdV6iUcuD8qohOIS6AoQ-aWUHgu6dA,3917
|
|
104
|
+
maxpane_dashboard/widgets/base/overview/bt_hero_metrics.py,sha256=bOsAywVqZ_2ihGz6NpVIqzBrAiL8yfCdlWrGhphili8,4027
|
|
105
|
+
maxpane_dashboard/widgets/base/overview/bt_leaderboard.py,sha256=iImkplkCJFGiQXrx8e-jmD4nCrZVZZS1Hv6WjY2rr9E,4104
|
|
106
|
+
maxpane_dashboard/widgets/base/overview/bt_overview_leaderboard.py,sha256=t6dCC97B_MQKaVFcUsmcg-p9OwpBfLZJxpxcNxMTlKA,4242
|
|
107
|
+
maxpane_dashboard/widgets/base/overview/bt_signals.py,sha256=Nx3UUBJ4xhak1XKSxeuEv1RywUFNZkMJYN4xrm91l7M,3255
|
|
108
|
+
maxpane_dashboard/widgets/base/overview/bt_sparklines.py,sha256=pw-E5FGYe8rTgwObwzlnvEGfHoSMf0lzm1_SllCGs-U,3874
|
|
109
|
+
maxpane_dashboard/widgets/cattown/__init__.py,sha256=NXXxyyq6UxBjxBHaOUXL183I7EKvKJ-wSLt-eTWrDsU,413
|
|
110
|
+
maxpane_dashboard/widgets/cattown/ct_activity_feed.py,sha256=F9DtOhfSuZxDoU-5m3smyEVDfxUH-aQIfVBsutrpaSk,3459
|
|
111
|
+
maxpane_dashboard/widgets/cattown/ct_best_plays.py,sha256=D1utYhjMSHaEc990CjAZq_PVkSmQFJGhrY8gu6JJ22M,3726
|
|
112
|
+
maxpane_dashboard/widgets/cattown/ct_hero_metrics.py,sha256=UIU0pNwD3Hi2awUUD4PZXgnbvL0NUeW32NbmEa0yUec,5706
|
|
113
|
+
maxpane_dashboard/widgets/cattown/ct_leaderboard.py,sha256=aIdGNikArmGRUQDR1iqLl4j16-hZnwMSf6aPJgkARBc,2657
|
|
114
|
+
maxpane_dashboard/widgets/cattown/ct_signals.py,sha256=k94BLYKZmjoP-baMPcu3LUf54EIGcOX6Nedic6cak9A,2803
|
|
115
|
+
maxpane_dashboard/widgets/cattown/ct_sparklines.py,sha256=JVBAhQc1dMexEU76YXwk2JiwAjyy_huGS3YeW_Zmdk8,3690
|
|
116
|
+
maxpane_dashboard/widgets/dota/__init__.py,sha256=sGdpOI_QbUVuZw_hL_Pak8AAG_fKmiCtDxDD_7oAQ38,462
|
|
117
|
+
maxpane_dashboard/widgets/dota/dota_activity_feed.py,sha256=_0inrr77BOBxfbTQFqOGPlYhJfrE6YcqkVf__6Gmg5o,2593
|
|
118
|
+
maxpane_dashboard/widgets/dota/dota_best_plays.py,sha256=7P2YuJ-KjO4dTf092L1EvGU2do5XU6Iz5Hu7Iq1zgEE,3431
|
|
119
|
+
maxpane_dashboard/widgets/dota/dota_hero_metrics.py,sha256=RxqyM560FoIY6_qePE6OpF7_d9EsSmW7fq76Qm6Zi48,4676
|
|
120
|
+
maxpane_dashboard/widgets/dota/dota_leaderboard.py,sha256=ZuN0SgCmQdRAckuAai2QuaqeOniavk5IrU4RKXJ7dUY,2184
|
|
121
|
+
maxpane_dashboard/widgets/dota/dota_signals.py,sha256=9dMdsZ3vXnEliNSYHxRZwgi1SFzBpQ9kzDld2YgnSKs,2866
|
|
122
|
+
maxpane_dashboard/widgets/dota/dota_sparklines.py,sha256=0vf91DSeP1uDzP-_4aKJ89wse0S5vLmy-flwTz0JS58,3572
|
|
123
|
+
maxpane_dashboard/widgets/frenpet/__init__.py,sha256=dLfl5KJA4C1trQJApVurcaUnHV1fMrZ5S57RH1T1V1I,1984
|
|
124
|
+
maxpane_dashboard/widgets/frenpet/action_queue.py,sha256=5EQeqbW28dGMSF0oWWi_ELavrWGcndQXDyBhSAO8-Lc,4064
|
|
125
|
+
maxpane_dashboard/widgets/frenpet/aggregate_stats.py,sha256=CWlrC2EtUJASbK-_caEqTrT3HeYqNB5NLftQCeeFXRg,2269
|
|
126
|
+
maxpane_dashboard/widgets/frenpet/alerts.py,sha256=QFJ5pD9AcjJ9ISWKtfVuCAIhuiBcNRsx8G53tlWrudo,1838
|
|
127
|
+
maxpane_dashboard/widgets/frenpet/battle_feed.py,sha256=fQ2riDxmJjqMJB01Po6yG63Hrs4CM1gLzrO_7vt3HhI,3313
|
|
128
|
+
maxpane_dashboard/widgets/frenpet/battle_log.py,sha256=qJwc31aqAycqvc2VXUyBg_RD-_aTMzqLxCuKyJTfefw,5555
|
|
129
|
+
maxpane_dashboard/widgets/frenpet/game_stats.py,sha256=ICaYEweN9NZVrSeYG-QnhET_7-6woe7xjwLezI92tqE,1656
|
|
130
|
+
maxpane_dashboard/widgets/frenpet/logo.py,sha256=VM0mjh0XL4sol-ZlRiZ-2nMMoRRX-NQ9ldUMF5Lsjnc,526
|
|
131
|
+
maxpane_dashboard/widgets/frenpet/market_conditions.py,sha256=-UAqCROdVUpFpjGgeqDXiKsJGZpEyhZZBFNoyrffO5M,2795
|
|
132
|
+
maxpane_dashboard/widgets/frenpet/next_actions.py,sha256=v_eNgF3efGas-YN0yqA-C1wyKmnMs8G10KSjL5q_vTE,5095
|
|
133
|
+
maxpane_dashboard/widgets/frenpet/pet_card.py,sha256=XkjSXn8KZijJ8SS5IFe464Ew_jL15_jyFqdqKJ3cO3Q,3667
|
|
134
|
+
maxpane_dashboard/widgets/frenpet/pet_signals.py,sha256=X1pa37FEsJuUWZWxgGEafZ-7A33ETe9fAG3ZAesp89k,4769
|
|
135
|
+
maxpane_dashboard/widgets/frenpet/pet_stats.py,sha256=RoTLWJIh--o2PA3qBKvROfyzJFpyjRMeNr6sXlCcgdo,3346
|
|
136
|
+
maxpane_dashboard/widgets/frenpet/pets_in_context.py,sha256=F1-upjSgHzfi4SOyBGpb8hma6kOEtznQ7fgVlXBlXJc,2374
|
|
137
|
+
maxpane_dashboard/widgets/frenpet/population.py,sha256=ekTR1VivkleOyrmTkWlSOo-H_MiPRxXRodeiSGeJpVM,1548
|
|
138
|
+
maxpane_dashboard/widgets/frenpet/score_dist.py,sha256=S_HFQ5zH4sBcjz80Sh3Ur69dg_muuz4xfQDaLRbtVeE,2026
|
|
139
|
+
maxpane_dashboard/widgets/frenpet/score_trend.py,sha256=XCMeTgx4IBIZpvVNS1quS23v_lXBNWY7kB56sp8d208,3388
|
|
140
|
+
maxpane_dashboard/widgets/frenpet/sniper_queue.py,sha256=FIvDO3M4RNt3nbd-vRaa8rjUfydhAPnOjdVgcuO6F-Y,4774
|
|
141
|
+
maxpane_dashboard/widgets/frenpet/target_landscape.py,sha256=p4pZLMos5FcBIzEpuzytI5o8PiVW8BWRxsEJj3JRRwQ,2225
|
|
142
|
+
maxpane_dashboard/widgets/frenpet/top_leaderboard.py,sha256=41B0oiie0ndY05sH-IHwzFWDSq_Y_Gvw79A-MNkxXJk,2505
|
|
143
|
+
maxpane_dashboard/widgets/frenpet/training_status.py,sha256=isFW0fFvorUAWu6wZCpeg7_UEdF0w7-YpuRP-H276BA,1816
|
|
144
|
+
maxpane_dashboard/widgets/frenpet/wallet_activity.py,sha256=M2fBfRtqpd6U2rl7cX2PngX0Ji9vT2_xzFsmPTz8K_U,2931
|
|
145
|
+
maxpane_dashboard/widgets/frenpet/overview/__init__.py,sha256=r8yhBwYXUjlha281enZAslB814lxhMP9zA1xBqQNtM8,763
|
|
146
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_battle_activity.py,sha256=IZLG1jAc0WZPyXF81eig18VeoGK3CfPBT-sMVz7G9io,3570
|
|
147
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_best_plays.py,sha256=TITueqnUmecpQEq7vNAu9BOEYZ20SKSzormU7XSxtaM,2731
|
|
148
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_game_signals.py,sha256=21VOP4oP9ESd0vilULl58o8AWgXI9lDZm5n67_Gnxjc,3352
|
|
149
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_hero_metrics.py,sha256=I_SGiExHP-DV1RJ8ui9F7GV0FGKqBQOQfeht6VtebNs,3425
|
|
150
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_overview_leaderboard.py,sha256=kHgs_1glFvISgwJRMgE8f0DgbKtgO0kZwoT8mHTJUNw,3021
|
|
151
|
+
maxpane_dashboard/widgets/frenpet/overview/fp_score_trends.py,sha256=IQskOecRGsLWWN5cPXva0amTB_HJUF10-7mTYjSQFb8,4115
|
|
152
|
+
maxpane_dashboard/widgets/ocm/__init__.py,sha256=5HDlkSZrQbl8RQK2rJgTlR7mbl3i3_56PMzl8z7artM,470
|
|
153
|
+
maxpane_dashboard/widgets/ocm/ocm_activity_feed.py,sha256=kptDhC5ijiGVzV2iQuBmX3yhsFcnfsZCG0FyQ8pf-q0,3411
|
|
154
|
+
maxpane_dashboard/widgets/ocm/ocm_hero_metrics.py,sha256=_TAabSrfgZImgMA1zZGadnMzRpB97IqqZbHeXiQPRBQ,2875
|
|
155
|
+
maxpane_dashboard/widgets/ocm/ocm_signals.py,sha256=Mhb4oUsEmOS8G-34PzpE3HSBU4J4-8dtlpmnwrbKAcc,2806
|
|
156
|
+
maxpane_dashboard/widgets/ocm/ocm_sparklines.py,sha256=hOMvUnkXtGUyCX8ttYXLpAXG0gCzr4CBD04ibGwoBCc,3653
|
|
157
|
+
maxpane_dashboard/widgets/ocm/ocm_staking_overview.py,sha256=b4V-Vr1PI1gp_rjkeJKxhZQ7qu0sFauo01qx8o2X1Vk,2931
|
|
158
|
+
maxpane_dashboard/widgets/ocm/ocm_supply_breakdown.py,sha256=WU3vshU69F9F_uFUzncLVAPXHz0lVEn2irKScKb4uLM,3494
|
|
159
|
+
maxpane-0.3.3.dist-info/METADATA,sha256=JAuDLIrMx_8bNfLRM_ECeJ7mvCnUrP8r8M0oM6PrvAQ,2358
|
|
160
|
+
maxpane-0.3.3.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
161
|
+
maxpane-0.3.3.dist-info/entry_points.txt,sha256=xtKfoVbxDKfDybsQXaiOb-LGc1mEMAwNDHGTLaAH48E,60
|
|
162
|
+
maxpane-0.3.3.dist-info/licenses/LICENSE,sha256=RM1_7vYhWzd5Iyl8subLwwULslkrvU1i0vxLxsuVBJU,1062
|
|
163
|
+
maxpane-0.3.3.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 banse
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Launch the MaxPane dashboard: python -m maxpane_dashboard"""
|
|
2
|
+
import argparse
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
import warnings
|
|
7
|
+
|
|
8
|
+
warnings.filterwarnings("ignore")
|
|
9
|
+
|
|
10
|
+
from maxpane_dashboard.app import MaxPaneApp
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
_DEFAULT_FONT_SIZE = 17
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _maximize_terminal() -> None:
|
|
17
|
+
"""Maximize the terminal window and set font size before launching the TUI."""
|
|
18
|
+
term = os.environ.get("TERM_PROGRAM", "")
|
|
19
|
+
if term == "iTerm.app":
|
|
20
|
+
# Set font size via iTerm2 proprietary escape sequence
|
|
21
|
+
sys.stdout.write(f"\033]1337;SetFontSize={_DEFAULT_FONT_SIZE}\a")
|
|
22
|
+
sys.stdout.write("\033]1337;SetFullscreen=true\a")
|
|
23
|
+
sys.stdout.flush()
|
|
24
|
+
elif term == "Apple_Terminal":
|
|
25
|
+
# Terminal.app: use AppleScript to set font size and maximize
|
|
26
|
+
import subprocess
|
|
27
|
+
subprocess.run(
|
|
28
|
+
["osascript", "-e",
|
|
29
|
+
f'tell application "Terminal" to set font size of front window to {_DEFAULT_FONT_SIZE}'],
|
|
30
|
+
capture_output=True,
|
|
31
|
+
)
|
|
32
|
+
sys.stdout.write("\033[9;1t")
|
|
33
|
+
sys.stdout.flush()
|
|
34
|
+
else:
|
|
35
|
+
# Generic: just maximize
|
|
36
|
+
sys.stdout.write("\033[9;1t")
|
|
37
|
+
sys.stdout.flush()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def main():
|
|
41
|
+
parser = argparse.ArgumentParser(description="MaxPane Dashboard")
|
|
42
|
+
parser.add_argument(
|
|
43
|
+
"--poll-interval",
|
|
44
|
+
type=int,
|
|
45
|
+
default=30,
|
|
46
|
+
help="Poll interval in seconds (default: 30)",
|
|
47
|
+
)
|
|
48
|
+
parser.add_argument(
|
|
49
|
+
"--theme",
|
|
50
|
+
default="matrix",
|
|
51
|
+
choices=["matrix", "minimal", "bloomberg", "htop", "retro", "bakery", "frenpet", "base"],
|
|
52
|
+
)
|
|
53
|
+
parser.add_argument(
|
|
54
|
+
"--game",
|
|
55
|
+
default="bakery",
|
|
56
|
+
choices=["bakery", "frenpet", "base", "cattown", "ocm", "dota"],
|
|
57
|
+
help="Which game dashboard to show first (default: bakery)",
|
|
58
|
+
)
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
"--wallet",
|
|
61
|
+
default=os.environ.get("MAXPANE_WALLET", ""),
|
|
62
|
+
help="Wallet address for FrenPet pet view",
|
|
63
|
+
# TODO: make configurable via settings screen or config file
|
|
64
|
+
)
|
|
65
|
+
parser.add_argument(
|
|
66
|
+
"--log-level",
|
|
67
|
+
default="WARNING",
|
|
68
|
+
choices=["DEBUG", "INFO", "WARNING", "ERROR"],
|
|
69
|
+
help="Logging verbosity (default: WARNING)",
|
|
70
|
+
)
|
|
71
|
+
args = parser.parse_args()
|
|
72
|
+
|
|
73
|
+
# Log to file to prevent warnings from bleeding into the TUI
|
|
74
|
+
log_file = os.path.join(os.path.expanduser("~"), ".maxpane", "maxpane.log")
|
|
75
|
+
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
|
76
|
+
logging.basicConfig(
|
|
77
|
+
level=getattr(logging, args.log_level),
|
|
78
|
+
format="%(asctime)s %(name)s %(levelname)s %(message)s",
|
|
79
|
+
filename=log_file,
|
|
80
|
+
filemode="w",
|
|
81
|
+
)
|
|
82
|
+
# Suppress noisy third-party loggers
|
|
83
|
+
logging.getLogger("httpx").setLevel(logging.ERROR)
|
|
84
|
+
logging.getLogger("httpcore").setLevel(logging.ERROR)
|
|
85
|
+
logging.getLogger("pydantic").setLevel(logging.ERROR)
|
|
86
|
+
|
|
87
|
+
_maximize_terminal()
|
|
88
|
+
|
|
89
|
+
app = MaxPaneApp(
|
|
90
|
+
poll_interval=args.poll_interval,
|
|
91
|
+
theme=args.theme,
|
|
92
|
+
initial_game=args.game,
|
|
93
|
+
wallet_address=args.wallet,
|
|
94
|
+
)
|
|
95
|
+
app.run()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if __name__ == "__main__":
|
|
99
|
+
main()
|