docs: sync AGENTS.md and README.md for Ollama Pro integration
- AGENTS.md: add Ollama to project overview, service list, data flow, widget service count (3→4), credential echo coverage, dashboard item count (7→8), fix widget refresh flow (DEEPSEEK+OPENCODE_GO → selectedService+DEEPSEEK) - README.md: add Ollama to title, features, download requirements, architecture diagram, project structure; mark Jsoup as unused}
This commit is contained in:
parent
e3d21e0a8f
commit
8469f01354
14
AGENTS.md
14
AGENTS.md
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
## 项目概述
|
## 项目概述
|
||||||
|
|
||||||
Android(Jetpack Compose + Kotlin)APP,统一查询 DeepSeek、OpenCode Go、CommandCode Go、Codex / ChatGPT Plus 的余额/配额。
|
Android(Jetpack Compose + Kotlin)APP,统一查询 DeepSeek、OpenCode Go、CommandCode Go、Codex / ChatGPT Plus、Ollama Pro 的余额/配额。
|
||||||
DeepSeek 走 REST API,OpenCode Go 通过 OkHttp 抓取 dashboard HTML 解析 SSR hydration 数据。
|
DeepSeek 走 REST API,OpenCode Go 通过 OkHttp 抓取 dashboard HTML 解析 SSR hydration 数据。
|
||||||
CommandCode Go 走 JSON API 抓取用量数据,Codex / ChatGPT Plus 通过 auth.json 刷新 token 后查询 wham 用量。APP 名为「雨晴Token」(粉色调品牌),配套桌面小组件。
|
CommandCode Go 走 JSON API 抓取用量数据,Codex / ChatGPT Plus 通过 auth.json 刷新 token 后查询 wham 用量。Ollama Pro 通过 Cookie 抓取 settings 页 HTML 解析用量百分比。APP 名为「雨晴Token」(粉色调品牌),配套桌面小组件。
|
||||||
|
|
||||||
## 技术栈
|
## 技术栈
|
||||||
|
|
||||||
@ -24,6 +24,7 @@ CommandCode Go 走 JSON API 抓取用量数据,Codex / ChatGPT Plus 通过 aut
|
|||||||
- ✅ OpenCode Go — OkHttp 抓 dashboard HTML,解析 `rollingUsage`/`weeklyUsage`/`monthlyUsage`
|
- ✅ OpenCode Go — OkHttp 抓 dashboard HTML,解析 `rollingUsage`/`weeklyUsage`/`monthlyUsage`
|
||||||
- ✅ CommandCode Go — JSON API 抓取用量数据,`CommandCodeUsageRepository` 解析(workspaceId = `"commandcode"`)
|
- ✅ CommandCode Go — JSON API 抓取用量数据,`CommandCodeUsageRepository` 解析(workspaceId = `"commandcode"`)
|
||||||
- ✅ Codex / ChatGPT Plus — 粘贴完整 auth.json(含 refresh_token),调 `chatgpt.com/backend-api/wham/usage`;token 过期前 60 分钟自动刷新
|
- ✅ Codex / ChatGPT Plus — 粘贴完整 auth.json(含 refresh_token),调 `chatgpt.com/backend-api/wham/usage`;token 过期前 60 分钟自动刷新
|
||||||
|
- ✅ Ollama Pro — Cookie 认证,OkHttp 抓 `ollama.com/settings` HTML,正则解析 plan/session(5h)/weekly 百分比 + `data-time` 重置时间 + `data-model` 模型级请求次数;无官方 API(ollama/ollama#12532)
|
||||||
- ✅ 文案统一:所有服务标签均使用中文("每周"统一代替 "weekly"/"Weekly"/"weekly")
|
- ✅ 文案统一:所有服务标签均使用中文("每周"统一代替 "weekly"/"Weekly"/"weekly")
|
||||||
- ❌ OpenCode Zen / 小米 MiMo — 未实现
|
- ❌ OpenCode Zen / 小米 MiMo — 未实现
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ CommandCode Go 走 JSON API 抓取用量数据,Codex / ChatGPT Plus 通过 aut
|
|||||||
**凭据回显红线**:
|
**凭据回显红线**:
|
||||||
|
|
||||||
> ⚠️ `CredentialEditViewModel.load()` 首次加载已有凭据时,需针对每种 `Credential` 子类显式编写回显分支。
|
> ⚠️ `CredentialEditViewModel.load()` 首次加载已有凭据时,需针对每种 `Credential` 子类显式编写回显分支。
|
||||||
> 当前覆盖:`ApiKeyCredential`(API Key 输入框)、`SessionCredential`(Cookie 输入框)、`CodexCredential`(auth.json 输入框)。
|
> 当前覆盖:`ApiKeyCredential`(API Key 输入框)、`SessionCredential`(Cookie 输入框 / `ollamaCookie` 字段)、`CodexCredential`(auth.json 输入框)。
|
||||||
> 新增凭据类型(如 OpenCode Zen / MiMo)时必须同步添加对应的 `load()` 回显分支,否则用户保存后看不到已存内容。
|
> 新增凭据类型(如 OpenCode Zen / MiMo)时必须同步添加对应的 `load()` 回显分支,否则用户保存后看不到已存内容。
|
||||||
|
|
||||||
**ViewModel 加载机制红线**:
|
**ViewModel 加载机制红线**:
|
||||||
@ -60,7 +61,7 @@ CommandCode Go 走 JSON API 抓取用量数据,Codex / ChatGPT Plus 通过 aut
|
|||||||
**首页布局**:
|
**首页布局**:
|
||||||
|
|
||||||
> Dashboard 使用 `PullToRefreshBox` → `Column` + `verticalScroll`(非 `LazyColumn`)。
|
> Dashboard 使用 `PullToRefreshBox` → `Column` + `verticalScroll`(非 `LazyColumn`)。
|
||||||
> 页面仅 7 个 item,`LazyColumn` 的 dispose/recompose 会导致用量卡片的 `LaunchedEffect` 反复触发,产生卡顿。
|
> 页面仅 8 个 item,`LazyColumn` 的 dispose/recompose 会导致用量卡片的 `LaunchedEffect` 反复触发,产生卡顿。
|
||||||
>
|
>
|
||||||
> **自适应断点**:容器宽度 > 600dp 时卡片双列(`BoxWithConstraints`),≤600dp 时单列。
|
> **自适应断点**:容器宽度 > 600dp 时卡片双列(`BoxWithConstraints`),≤600dp 时单列。
|
||||||
> OCGO / CCGO 服务余额卡底部均提供「查看用量详情」入口,未配置凭据时不显示。
|
> OCGO / CCGO 服务余额卡底部均提供「查看用量详情」入口,未配置凭据时不显示。
|
||||||
@ -110,7 +111,7 @@ Expanded(平板,≥840dp):
|
|||||||
|
|
||||||
**桌面小组件(Widget)**:
|
**桌面小组件(Widget)**:
|
||||||
- 显示当前选中服务的用量+DeepSeek 余额
|
- 显示当前选中服务的用量+DeepSeek 余额
|
||||||
- 支持三服务切换:OCGO / CCGO / Codex(右上角 ↻ 按钮旁的切换按钮循环切换)
|
- 支持四服务切换:OCGO / CCGO / Codex / Ollama(右上角 ↻ 按钮旁的切换按钮循环切换)
|
||||||
- 右上角 ↻ 手动刷新按钮(后台广播 → `WidgetRefreshReceiver` → EntryPoints 获取 `RefreshBalanceUseCase`)
|
- 右上角 ↻ 手动刷新按钮(后台广播 → `WidgetRefreshReceiver` → EntryPoints 获取 `RefreshBalanceUseCase`)
|
||||||
- 刷新逻辑:只刷新当前选中服务 + DeepSeek,不再串行刷全部服务;25s 超时保护;`isRefreshing` 互斥锁防连续点击
|
- 刷新逻辑:只刷新当前选中服务 + DeepSeek,不再串行刷全部服务;25s 超时保护;`isRefreshing` 互斥锁防连续点击
|
||||||
- 点击刷新后立即更新 Widget 右上角时间为"刷新中..."(`showRefreshing()`),再后台请求网络
|
- 点击刷新后立即更新 Widget 右上角时间为"刷新中..."(`showRefreshing()`),再后台请求网络
|
||||||
@ -149,6 +150,7 @@ DashboardViewModel.refresh()
|
|||||||
→ RefreshBalanceUseCase(service)
|
→ RefreshBalanceUseCase(service)
|
||||||
→ DeepSeekRepository.fetchBalance() / OpenCodeGoRepository.fetchBalance()
|
→ DeepSeekRepository.fetchBalance() / OpenCodeGoRepository.fetchBalance()
|
||||||
→ CommandCodeGoRepository.fetchBalance() / CodexRepository.fetchBalance()
|
→ CommandCodeGoRepository.fetchBalance() / CodexRepository.fetchBalance()
|
||||||
|
→ OllamaRepository.fetchBalance()
|
||||||
→ BalanceCache.put(service, result)
|
→ BalanceCache.put(service, result)
|
||||||
→ OpenCodeGoWidgetProvider.notifyDataChanged(context)
|
→ OpenCodeGoWidgetProvider.notifyDataChanged(context)
|
||||||
|
|
||||||
@ -169,7 +171,7 @@ CCGO 清除按钮(详情页顶栏):
|
|||||||
|
|
||||||
Widget 刷新按钮:
|
Widget 刷新按钮:
|
||||||
↻ → PendingIntent.getBroadcast() → WidgetRefreshReceiver
|
↻ → PendingIntent.getBroadcast() → WidgetRefreshReceiver
|
||||||
→ EntryPoints → RefreshBalanceUseCase(DEEPSEEK + OPENCODE_GO)
|
→ EntryPoints → RefreshBalanceUseCase(selectedService + DEEPSEEK)
|
||||||
→ notifyDataChanged()
|
→ notifyDataChanged()
|
||||||
|
|
||||||
MIUI 曝光刷新(用户划到负一屏/桌面):
|
MIUI 曝光刷新(用户划到负一屏/桌面):
|
||||||
|
|||||||
14
README.md
14
README.md
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
[](https://github.com/CATMIAOZHI/Rainytoken/actions)
|
[](https://github.com/CATMIAOZHI/Rainytoken/actions)
|
||||||
[](https://github.com/CATMIAOZHI/Rainytoken/releases)
|
[](https://github.com/CATMIAOZHI/Rainytoken/releases)
|
||||||
Android AI 余额与用量查询 APP —— 统一查看 DeepSeek、OpenCode Go、CommandCode Go 的余额与用量配额。粉色调品牌 UI,配套桌面小组件。
|
Android AI 余额与用量查询 APP —— 统一查看 DeepSeek、OpenCode Go、CommandCode Go、Codex / ChatGPT Plus、Ollama Pro 的余额与用量配额。粉色调品牌 UI,配套桌面小组件。
|
||||||
🐱 雨晴Token — AI Balance & Usage Quota Query | the Rainy Family tools.
|
🐱 雨晴Token — AI Balance & Usage Quota Query | the Rainy Family tools.
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -34,7 +34,7 @@ Android AI 余额与用量查询 APP —— 统一查看 DeepSeek、OpenCode Go
|
|||||||
| 📋 **详细数据** | 原始记录分页浏览,支持时间 + 模型筛选,点击查看完整字段 |
|
| 📋 **详细数据** | 原始记录分页浏览,支持时间 + 模型筛选,点击查看完整字段 |
|
||||||
| 🔍 **多粒度筛选** | 5小时 / 12小时(10分钟桶) / 24小时 / 今天 / 昨天 / 最近7天 / 当月 / 自定义日·月·范围 |
|
| 🔍 **多粒度筛选** | 5小时 / 12小时(10分钟桶) / 24小时 / 今天 / 昨天 / 最近7天 / 当月 / 自定义日·月·范围 |
|
||||||
| 🏷️ **模型筛选** | 多选 / 单选 / 全选,动态图例自适应换行 |
|
| 🏷️ **模型筛选** | 多选 / 单选 / 全选,动态图例自适应换行 |
|
||||||
| 📱 **桌面小组件** | 不打开 APP 也能看用量;支持三服务切换(OCGO/CCGO/Codex)+ DeepSeek 余额;可拖入负一屏;划到即自动刷新(MIUI 曝光刷新) |
|
| 📱 **桌面小组件** | 不打开 APP 也能看用量;支持四服务切换(OCGO/CCGO/Codex/Ollama)+ DeepSeek 余额;可拖入负一屏;划到即自动刷新(MIUI 曝光刷新) |
|
||||||
| 🔄 **自动同步** | 首页下拉自动同步用量;无缓存时启动自动全量同步;CCGO 详情页支持手动清除并重新同步 |
|
| 🔄 **自动同步** | 首页下拉自动同步用量;无缓存时启动自动全量同步;CCGO 详情页支持手动清除并重新同步 |
|
||||||
| 🌙 **深色模式** | 全局自适应 — App 内文字/图标/背景自动切换,小组件独立适配暗色布局 |
|
| 🌙 **深色模式** | 全局自适应 — App 内文字/图标/背景自动切换,小组件独立适配暗色布局 |
|
||||||
| ➕ **一键添桌面** | APP 内点 + 直接添加小组件,不用去系统列表翻 |
|
| ➕ **一键添桌面** | APP 内点 + 直接添加小组件,不用去系统列表翻 |
|
||||||
@ -47,7 +47,7 @@ Android AI 余额与用量查询 APP —— 统一查看 DeepSeek、OpenCode Go
|
|||||||
|
|
||||||
前往 [Releases](https://github.com/CATMIAOZHI/Rainytoken/releases) 下载最新 APK。
|
前往 [Releases](https://github.com/CATMIAOZHI/Rainytoken/releases) 下载最新 APK。
|
||||||
|
|
||||||
> ⚠️ 需要配置 DeepSeek API Key、OpenCode Go 登录凭据、CommandCode Go API Key 或 Codex auth.json 才能拉取数据。
|
> ⚠️ 需要配置 DeepSeek API Key、OpenCode Go 登录凭据、CommandCode Go API Key、Codex auth.json 或 Ollama Pro Cookie 才能拉取数据。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -76,8 +76,8 @@ Android AI 余额与用量查询 APP —— 统一查看 DeepSeek、OpenCode Go
|
|||||||
│ │ │
|
│ │ │
|
||||||
│ ┌────────────────────▼─────────────────────────┐ │
|
│ ┌────────────────────▼─────────────────────────┐ │
|
||||||
│ │ Repository + Network │ │
|
│ │ Repository + Network │ │
|
||||||
│ │ DeepSeekApi(Retrofit)· OpenCodeGo 网页抓取 │
|
│ │ DeepSeekApi(Retrofit)· OpenCodeGo 网页抓取
|
||||||
│ │ · OpenCodeUsageRepository · CommandCodeUsageRepository · CodexRepository(OkHttp 调 chatgpt.com)│ │
|
│ │ · OpenCodeUsageRepository · CommandCodeUsageRepository · CodexRepository · OllamaRepository(OkHttp)│ │
|
||||||
│ └────────────────────┬────────────────────────┘ │
|
│ └────────────────────┬────────────────────────┘ │
|
||||||
│ │ │
|
│ │ │
|
||||||
│ ┌────────────────────▼─────────────────────────┐ │
|
│ ┌────────────────────▼─────────────────────────┐ │
|
||||||
@ -100,7 +100,7 @@ Rainytoken/
|
|||||||
│ │ ├── cache/ # BalanceCache(DataStore)
|
│ │ ├── cache/ # BalanceCache(DataStore)
|
||||||
│ │ ├── local/ # UsageCache(DataStore + 内存缓存)、UsageRecord、ChartBucket
|
│ │ ├── local/ # UsageCache(DataStore + 内存缓存)、UsageRecord、ChartBucket
|
||||||
│ │ ├── remote/ # DeepSeekApi(Retrofit)+ OpenCodeGo 抓取 + UsageRepository
|
│ │ ├── remote/ # DeepSeekApi(Retrofit)+ OpenCodeGo 抓取 + UsageRepository
|
||||||
│ │ └── repository/ # DeepSeek / OpenCodeGo / CommandCode / Codex / Credential Repository
|
│ │ └── repository/ # DeepSeek / OpenCodeGo / CommandCode / Codex / Ollama / Credential Repository
|
||||||
│ ├── domain/
|
│ ├── domain/
|
||||||
│ │ ├── model/ # ServiceBalance、Credential 等
|
│ │ ├── model/ # ServiceBalance、Credential 等
|
||||||
│ │ ├── service/ # ServiceType 枚举
|
│ │ ├── service/ # ServiceType 枚举
|
||||||
@ -161,7 +161,7 @@ chmod +x ./setup_android_env.sh
|
|||||||
| `com.squareup.retrofit2:retrofit` | DeepSeek REST API |
|
| `com.squareup.retrofit2:retrofit` | DeepSeek REST API |
|
||||||
| `com.squareup.okhttp3:okhttp` | OpenCode Go 网页抓取 |
|
| `com.squareup.okhttp3:okhttp` | OpenCode Go 网页抓取 |
|
||||||
| `org.jetbrains.kotlinx:kotlinx-serialization-json` | JSON 序列化 |
|
| `org.jetbrains.kotlinx:kotlinx-serialization-json` | JSON 序列化 |
|
||||||
| `org.jsoup:jsoup` | HTML 解析(SSR hydration 数据提取) |
|
| `org.jsoup:jsoup` | HTML 解析(已引入但实际未使用,HTML 解析全用正则) |
|
||||||
| `androidx.datastore:datastore-preferences` | 本地缓存 |
|
| `androidx.datastore:datastore-preferences` | 本地缓存 |
|
||||||
| `com.google.dagger:hilt-android` | 依赖注入 |
|
| `com.google.dagger:hilt-android` | 依赖注入 |
|
||||||
| `com.google.devtools.ksp:symbol-processing-api` | KSP 注解处理 |
|
| `com.google.devtools.ksp:symbol-processing-api` | KSP 注解处理 |
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user