feat: ClaudeMeter — Wear OS rate-limit tracker for Claude Code
- wear: Compose for Wear UI, polls api.anthropic.com, shows 5h/7d utilization - mobile: companion app — token input + Data Layer API + WiFi ADB install - ADB pairing via libadb-android (SPAKE2 + TLS), pm install on watch - Build: AGP 8.7.3, Gradle 8.13, Kotlin 1.9.22, compileSdk 35
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
# Claude Meter — лимит Claude Code на часах
|
||||
|
||||
Минимальное Wear OS приложение для Galaxy Watch 6 Classic (и любых Wear OS 3+).
|
||||
Опрашивает `api.anthropic.com` так же, как [Clawdmeter](https://github.com/HermannBjorgvin/Clawdmeter),
|
||||
но без ESP32/демона/BLE — часы ходят на API сами по WiFi.
|
||||
|
||||
Показывает:
|
||||
- **5h** — загрузка 5-часового окна (%) и минуты до сброса
|
||||
- **7d** — загрузка недельного окна (%) и минуты до сброса
|
||||
- **status** — `normal` / `banned` / `unknown`
|
||||
|
||||
Цвет: зелёный <70%, янтарь 70–90%, красный ≥90%.
|
||||
|
||||
## Архитектура (минимум)
|
||||
|
||||
- **mobile** (телефон) — одно приложение, две функции:
|
||||
1. Поле ввода OAuth-токена + кнопка «Отправить токен» (через Wearable Data Layer).
|
||||
2. Установка wear APK на часы по WiFi ADB — без компьютера, прямо с телефона.
|
||||
Использует [dadb](https://github.com/mobile-dev-inc/dadb) — pure-Kotlin ADB-клиент.
|
||||
Wear APK встроен в mobile APK (assets), копируется при установке.
|
||||
- **wear** (часы):
|
||||
- `TokenReceiverService` — `WearableListenerService`, ловит `/token` даже когда app закрыто.
|
||||
- `TokenStore` — `EncryptedSharedPreferences` (токен шифруется на устройстве).
|
||||
- `ApiPoller` — один `HttpURLConnection` POST к `api.anthropic.com/v1/messages`
|
||||
(`max_tokens=1`, haiku — самый дешёвый запрос ради rate-limit заголовков).
|
||||
- `MainActivity` — Compose for Wear, авто-опрос при запуске + кнопка «Обновить».
|
||||
|
||||
## APK
|
||||
|
||||
После `./gradlew assembleDebug`:
|
||||
- `mobile/build/outputs/apk/debug/mobile-debug.apk` — для телефона (27 МБ, включает wear APK)
|
||||
- `wear/build/outputs/apk/debug/wear-debug.apk` — для часов (22 МБ, можно ставить и вручную)
|
||||
|
||||
## Установка
|
||||
|
||||
### Шаг 1: поставить mobile APK на телефон
|
||||
```
|
||||
adb install -r mobile/build/outputs/apk/debug/mobile-debug.apk
|
||||
```
|
||||
Или скопировать APK на телефон и открыть.
|
||||
|
||||
### Шаг 2: включить отладку по WiFi на часах
|
||||
1. На часах: Settings → About watch → тапнуть 7 раз по «Build number» → Developer mode.
|
||||
2. Settings → Developer options → **Debug over WiFi** → включить.
|
||||
3. Запомнить IP-адрес (показан в Developer options под «Debug over WiFi»).
|
||||
|
||||
### Шаг 3: установить wear APK с телефона
|
||||
1. Открыть **Claude Meter Setup** на телефоне.
|
||||
2. В секции «2. Установка приложения на часы» ввести IP часов и порт (5555).
|
||||
3. Нажать «Установить на часы».
|
||||
4. При первом подключении — подтвердить RSA-ключ на часах (появится диалог).
|
||||
5. Готово — приложение Claude Meter появилось на часах.
|
||||
|
||||
> ADB-ключ генерируется один раз, хранится в `filesDir` приложения на телефоне.
|
||||
> При следующих установках подтверждение на часах не нужно.
|
||||
|
||||
### Шаг 4: отправить токен
|
||||
1. Скопировать `accessToken` из `~/.claude/.credentials.json` на ПК.
|
||||
2. В секции «1. Токен Claude Code» вставить токен → «Отправить токен».
|
||||
3. На часах открыть **Claude Meter** — увидит токен → покажет проценты.
|
||||
|
||||
Токен протухает (OAuth) — перепастить на телефоне, «Отправить» снова.
|
||||
`// ponytail: token on-device, re-paste on OAuth expiry.`
|
||||
|
||||
## Где взять токен
|
||||
|
||||
Claude Code хранит OAuth-токен в `~/.claude/.credentials.json`:
|
||||
```json
|
||||
{"claudeAiOauth": {"accessToken": "***..."}}
|
||||
```
|
||||
|
||||
## Что добавлять потом (не сейчас)
|
||||
|
||||
- **Фоновое обновление** — `WorkManager` periodic (~15 мин). Сейчас по тапу + при запуске.
|
||||
- **Complication на циферблате** — always-on виджет с %. Больше бойлерплейта, делаем когда v0 зайдёт.
|
||||
- **График истории** — Room + простая диаграмма. YAGNI пока.
|
||||
- **Авто-рефреш токена** — если Claude Code добавит refresh-token flow. Сейчас ручная перепоставка.
|
||||
Reference in New Issue
Block a user