andrew
91b7002061
Merge origin/main into main (reconcile unrelated histories, keep 48x32 dog + 50% overlay)
2026-09-10 16:05:41 +03:00
andrew
04cac794ea
Dog loader: 48x32 detail and lighter overlay (50%)
2026-09-10 16:04:19 +03:00
andrew
65b5b45389
docs: smaller dog, no paw trail
2026-09-10 14:24:19 +03:00
andrew
3baa8be47f
docs: smaller dog, no paw trail
2026-09-10 14:24:18 +03:00
andrew
c3b432252b
tests: 32x22 art
2026-09-10 14:24:18 +03:00
andrew
9db4064a26
Dog loader: drop paw trail
2026-09-10 14:24:17 +03:00
andrew
1a45ac5257
Halve dog art to 32x22
2026-09-10 14:24:17 +03:00
andrew
d1384e8603
Dog loader: halve size (32x22) and drop the paw trail
2026-09-10 14:23:08 +03:00
andrew
3cc3a06b75
docs: GIF dog loader
2026-09-10 14:13:28 +03:00
andrew
b595d003bd
docs: GIF dog loader
2026-09-10 14:13:24 +03:00
andrew
835b82cb79
tests: dog_art frames + animation
2026-09-10 14:13:24 +03:00
andrew
b66bb92548
Dog loader: truecolor GIF frames + paw trail
2026-09-10 14:13:23 +03:00
andrew
063b8bbaab
Add embedded GIF dog animation frames
2026-09-10 14:13:23 +03:00
andrew
e8b1a2e83f
Dog loader: render real GIF frames as truecolor half-blocks
...
- add ui/dog_art.py: 12 frames from 236205.gif (64x42, 128-color
palette, transparent background), zlib+base64 embedded
- DogLoader draws half-block truecolor cells over the dimmed dashboard,
transparent background, paw trail 🐾 , 40 ms/frame (GIF speed)
- full-screen overlay + input blocking preserved
- tests: frame data + animation; docs updated
2026-09-10 14:12:11 +03:00
andrew
baff464dc0
docs: changelog for full-screen dog loader
2026-09-10 13:30:44 +03:00
andrew
e4cb33b35e
docs: full-screen loading indicator
2026-09-10 13:30:43 +03:00
andrew
53d9ad653a
tests: full-screen coverage + input blocking
2026-09-10 13:30:42 +03:00
andrew
e33b2237a8
Full-screen dog loader overlay: dim background, panel, input block
2026-09-10 13:30:41 +03:00
andrew
d7d146e586
Full-screen dog loader overlay with dim background and input blocking
...
- DogLoader now covers the whole window (dock top + _loading layer),
dims the dashboard behind it ($background 80%), draws a centered
rounded panel with a running ASCII dog and a 🐾 paw trail
- block keyboard bindings (check_action) and drop focus while refreshing;
restore focus to models table afterwards
- removed the docked progress line (covered by the overlay)
- docs updated; tests: full-screen coverage + input blocking
2026-09-10 13:30:00 +03:00
andrew
74c135a823
tests: assert built-in loading indicator stays off
2026-09-10 13:00:53 +03:00
andrew
36d2f5aac6
Fix: rename loading -> refreshing (avoid built-in dots indicator)
2026-09-10 13:00:52 +03:00
andrew
148e0a9391
Fix: use 'refreshing' reactive to avoid Textual built-in loading dots
...
Widget.loading is a Textual built-in reactive that swaps the widget for the
default dots spinner. Our dashboard used the same name, so setting it True
activated the built-in indicator (dots) instead of the dog loader. Renamed
to 'refreshing' and assert app.screen.loading stays False in tests.
2026-09-10 13:00:36 +03:00
andrew
8c374ea4e8
chore: close task
...
closes #1
2026-09-10 11:59:26 +03:00
andrew
cc52595c0b
docs: add loading indicator check to final checklist
...
Closes #1
2026-09-10 11:56:55 +03:00
andrew
adcb36059d
CHANGELOG: v1.0.4 dog loader
...
Closes #1
2026-09-10 11:55:51 +03:00
andrew
9f25d37b6e
Add dog ASCII animation on statistics refresh (task #1 )
...
- DogLoader widget: ASCII dog animating while data loads, shown as a
centered overlay and a docked progress line on the dashboard
- shown on timer auto-refresh and manual refresh (r)
- bump version to 1.0.4; CHANGELOG + README updated
- tests: hidden when idle, shown during refresh, frame animation
2026-09-10 11:51:14 +03:00
andrew
60caaf1d29
Add DogLoader tests
2026-09-10 11:51:02 +03:00
andrew
f6a155718f
Add DogLoader animation on refresh (task #1 )
2026-09-10 11:51:02 +03:00
andrew
d9b1edde96
v1.0.4: bump version
2026-09-10 11:51:01 +03:00
andrew
59bbfe15d2
v1.0.4: bump version
2026-09-10 11:51:01 +03:00
andrew
471eb4b638
v1.0.4: document dog loader
2026-09-10 11:51:00 +03:00
andrew
74dfc03c6a
v1.0.4: add dog loader entry
2026-09-10 11:50:59 +03:00
andrew
6caa021824
Fix issues found by CI on Gitea runner
...
- cli.py: remove redundant cast to str (mypy strict, click 8.5+ types prompt);
annotate prompt result explicitly
- test_storage.py: use now-relative timestamps instead of hardcoded 2026-08
dates so history-filter tests do not rot over time
- add Gitea Actions CI workflow (.gitea/workflows/ci.yml)
2026-09-03 12:03:14 +03:00
andrew
00cd64377a
Fix date-dependent storage tests (use now-relative timestamps)
2026-09-03 11:57:49 +03:00
andrew
0296ea501f
CI: auto-fix trailing newlines in ruff lint step
2026-09-03 11:47:17 +03:00
andrew
0920babb50
Add trailing newline to cli.py
2026-09-03 11:43:55 +03:00
andrew
d38415719f
Add trailing newline to cli.py (double newline to survive API trim)
2026-09-03 11:41:32 +03:00
andrew
99591fe5cc
Add trailing newline to cli.py
2026-09-03 11:41:07 +03:00
andrew
42c1a3d973
Add trailing newline to cli.py
2026-09-03 11:40:47 +03:00
andrew
3ed5e62dd6
Add trailing newline to cli.py
2026-09-03 11:40:15 +03:00
andrew
409b70109d
Add trailing newline to cli.py (fix ruff W292)
2026-09-03 11:37:21 +03:00
andrew
8598f2711a
Annotate prompt result as str (works with old and new click/mypy)
2026-09-03 11:34:16 +03:00
andrew
8a770d18a7
Remove redundant cast to str (fixes mypy strict warn_redundant_casts)
2026-09-03 11:33:39 +03:00
andrew
9b94482373
CI: use venv to avoid PEP 668 (externally-managed)
2026-09-03 11:30:19 +03:00
andrew
d25f885eec
CI: add --break-system-packages for Alpine (PEP 668)
2026-09-03 11:27:48 +03:00
andrew
05404bd65d
Fix CI: use shell steps instead of JS actions (Alpine runner has no node)
2026-09-03 11:24:12 +03:00
andrew
c2fafac157
Add CI workflow for Gitea Actions
2026-09-03 11:17:35 +03:00
andrew
e3936d75c3
Add tests/test_tui.py
2026-09-02 16:47:27 +03:00
andrew
58b640c088
Add tests/test_storage.py
2026-09-02 16:47:03 +03:00
andrew
ff7420e153
Add tests/test_services.py
2026-09-02 16:46:45 +03:00
andrew
0b658b8ccc
Add tests/test_platform.py
2026-09-02 16:46:19 +03:00
andrew
37d8a3702f
Add tests/test_models.py
2026-09-02 16:46:14 +03:00
andrew
53e6b6987e
Add tests/test_config.py
2026-09-02 16:45:56 +03:00
andrew
7b95a48bc3
Add tests/test_cli.py
2026-09-02 16:45:47 +03:00
andrew
2dbdc571b9
Add tests/test_auth.py
2026-09-02 16:45:34 +03:00
andrew
686acb4423
Add tests/test_api.py
2026-09-02 16:45:25 +03:00
andrew
bbd13f3bd8
Add tests/__init__.py
2026-09-02 16:45:02 +03:00
andrew
09935d55ef
Add src/selectel_ml_tui/ui/app.py
2026-09-02 16:44:57 +03:00
andrew
2ebd852998
Add src/selectel_ml_tui/ui/__init__.py
2026-09-02 16:44:12 +03:00
andrew
14f740bca0
Add src/selectel_ml_tui/api/gateway.py
2026-09-02 16:44:10 +03:00
andrew
1c57a40140
Add src/selectel_ml_tui/api/client.py
2026-09-02 16:44:01 +03:00
andrew
fbc7f0eca3
Add src/selectel_ml_tui/api/billing.py
2026-09-02 16:43:54 +03:00
andrew
da19070e20
Add src/selectel_ml_tui/api/__init__.py
2026-09-02 16:43:44 +03:00
andrew
8ce0074784
Add src/selectel_ml_tui/storage.py
2026-09-02 16:43:39 +03:00
andrew
4a6a188af1
Add src/selectel_ml_tui/services.py
2026-09-02 16:43:10 +03:00
andrew
c36a447e9a
Add src/selectel_ml_tui/platform.py
2026-09-02 16:42:39 +03:00
andrew
95458805e2
Add src/selectel_ml_tui/models.py
2026-09-02 16:42:32 +03:00
andrew
2d3af443fe
Add src/selectel_ml_tui/config.py
2026-09-02 16:42:17 +03:00
andrew
db895ab565
Add src/selectel_ml_tui/cli.py
2026-09-02 16:41:59 +03:00
andrew
a1bc9ea099
Add src/selectel_ml_tui/auth.py
2026-09-02 16:41:44 +03:00
andrew
f41a6d3428
Add src/selectel_ml_tui/__main__.py
2026-09-02 16:41:33 +03:00
andrew
88c8f04226
Add src/selectel_ml_tui/__init__.py
2026-09-02 16:41:32 +03:00
andrew
26ae2a3ab9
Add scripts/run.sh
2026-09-02 16:41:28 +03:00
andrew
53ddc40b36
Add scripts/install_macos.sh
2026-09-02 16:41:25 +03:00
andrew
1a5b69e7dc
Add scripts/install_ubuntu.sh
2026-09-02 16:41:24 +03:00
andrew
5052f471f7
Add scripts/build_macos.sh
2026-09-02 16:41:22 +03:00
andrew
8522860d12
Add scripts/build_ubuntu.sh
2026-09-02 16:41:20 +03:00
andrew
a738d56682
Add docs/FINAL_CHECKLIST.md
2026-09-02 16:41:16 +03:00
andrew
23ac79e05f
Add CHANGELOG.md
2026-09-02 16:41:10 +03:00
andrew
6dc6b51b94
Add README.md
2026-09-02 16:40:56 +03:00
andrew
1e3b638710
Add pyproject.toml
2026-09-02 16:40:18 +03:00
andrew
2022cea83c
Add selectel-ml-tui.spec
2026-09-02 16:40:12 +03:00
andrew
3c6489f806
Add Makefile
2026-09-02 16:40:03 +03:00
andrew
c8e312f209
Add ruff.toml
2026-09-02 16:39:56 +03:00
andrew
ab29e1722e
Add mypy.ini
2026-09-02 16:39:54 +03:00
andrew
5215e54d8e
Add .editorconfig
2026-09-02 16:39:47 +03:00
andrew
6621917731
Add .gitignore
2026-09-02 16:39:10 +03:00
andrew
f95223b88b
Initial import: selectel-ml-tui TUI for Selectel AI-router token usage
2026-09-02 16:38:03 +03:00