Important
💡 AI 提示 / AI Generation Notice
本项目的核心架构、代码重构、安全校验流程与 GUI 均由 Claude Code + DeepSeek-V4-Flash-0731 协同生成;人类作者负责创意把控、需求定义、技术 Review 与最终决策。
本项目仍应被视为一个由人类维护的开源项目:任何安全相关用途都建议先进行独立审计与充分测试。
一款基于 PySide6 的 OpenCode Go(opencode.ai)使用记录监控桌面工具。
实时抓取云端 API 调用记录,本地 SQLite 存储并防重,提供 5 大功能页:总览看板、明细检索、高级统计分析、多 Sheet 报表导出与系统设置。数据获取严格遵循 opencode.ai 的 SolidStart Server Function + seroval 私有协议(详见获取Opencode_Go使用记录原理与注意事项.md),全程纯 Python 实现,无需 Node.js。
| 功能页 | 亮点 |
|---|---|
| 📊 总览 | 脱敏 Cookie / 上次同步 / 秒级时钟 / 版本 / 核心设置状态;时间范围筛选(近1小时 ~ 自定义);6 项指标卡;模型占比环形图(悬停 Tooltip、点击联动明细) |
| 📋 所有使用记录 | 虚拟分页表格(滚动加载,万条不卡);实时搜索;异常高消耗自动标红(成本或 Token > 均值 3 倍);双击 / 右键打标签 |
| 📈 高级统计 | 时间 / API Key / 模型 / 成本 / Token / 标签 六维组合筛选;5 类交互图表(见下);图表-表格反向联动(点击热力格 / 柱段 / 散点,底部明细自动筛选);筛选预设;内置 SQL 终端 |
| 💾 数据导出 | CSV / 多 Sheet Excel(Raw_Data / Summary_Charts / By_API_Key / By_Model / 说明),后台线程执行,界面不卡顿 |
| ⚙️ 系统设置 | Cookie 管理(含文件导入);工作区与 Server Function ID(失效后一键从前端 bundle 恢复);自动同步;托盘驻留;日 / 周 / 月花费预警 + Webhook(钉钉 / 飞书 / 企业微信 / Telegram / 自定义);定时导出报表;暗色 / 亮色主题 |
高级统计页的 5 类交互图表(均支持缩放 / 框选 / 拖拽 / 悬浮 Tooltip):
- 🕐 双轴时间趋势图 —— 左轴 Token(输入/输出堆叠面积),右轴 Cost($)折线,叠加看成本效率
- 🔥 调用热力图 —— 星期 × 24 小时矩阵,精准定位使用高峰期
- 🧱 Key × 模型堆叠柱状图 —— 直观对比各 API Key 的模型消耗结构
- 📉 累积成本曲线 —— 含月底预计总花费虚线预测
- 💠 单次请求散点图 —— Token × 成本,识别高消耗异常调用(标红阈值线)
- Windows 10 / 11(其他平台理论可运行,未充分测试)
- Python 3.10+
- 一个已登录 opencode.ai 的浏览器(用于复制 Cookie)
pip install -r requirements.txtpython main.py- 打开
https://opencode.ai/workspace/<你的工作区ID>/usage(需已登录) - 浏览器按
F12→Network→ 刷新页面 → 复制任意请求头中的Cookie: auth=...整行 - 在「系统设置 → 数据同步」粘贴保存,填入工作区 ID,点击 立即同步
首次同步会分页拉取全部历史调用记录(约每页 50 条,间隔 300ms 防限流);之后同步自动增量——检测到某页全部为已同步记录即停止,通常 1-3 页 / 数秒内完成。
opencode.ai 的 usage 页面没有传统 REST API,而是基于 SolidStart 的 Server Function(RPC):
POST https://opencode.ai/_server
请求头: Cookie / X-Server-Id(64位hex哈希) / X-Server-Instance(server-fn:N)
请求体: seroval v1 序列化的参数数组 [workspaceId, page]
响应 : seroval vanilla JS 代码(非 JSON!)
- 请求体编码:
{"t":{"t":9,"i":0,"l":2,"a":[…],"o":0},"f":31,"m":[]} - 响应解析:seroval 引用表
$R[N]+new Date()+Object.assign(new Error(...))错误体,由ocgmon/seroval.py纯 Python 递归下降解析器处理 - 分页:每页 50 条,返回 < 50 条即最后一页
- 增量同步:记录按时间最新→最旧排序,同步前加载已入库 ID 集合,整页全部命中即提前停止(实测空闲期同步 1.4s / 2 页完成)
- 函数 ID 恢复:前端发版后
X-Server-Id会失效,设置页可自动从前端 JS bundle 重新提取
| 项 | 说明 |
|---|---|
| 成本 | 接口原始值单位 = 1/1e8 美元(如 41,201 = $0.0004),应用内已换算 |
| 总输入 Tokens | inputTokens + cacheReadTokens + cacheWrite5mTokens + cacheWrite1hTokens |
| 总 Tokens | 总输入 + outputTokens |
| 时间 | 接口返回 UTC,应用内转换为本地时间(+8) |
- 记录
id(usg_...,API 请求唯一 ID)作为主键 - 联合唯一索引
(timestamp, model, input, output, cost)兜底防脏数据
批量 INSERT OR IGNORE 写入,重复同步自动跳过,实测重复导入 0 误插。
- 所有网络请求(QThread)与 Excel 导出(QThread)均在后台线程执行,GUI 永不阻塞
- 错误分类处理:Cookie 失效 / 函数 ID 失效 / 接口限流 / 网络超时,均给出友好提示与修复入口
OpenCodeGoMonitor/
|-- main.py # 程序入口
|-- requirements.txt # 依赖清单
|-- ocgmon/
| |-- seroval.py # seroval v1 编解码(纯 Python,协议核心)
| |-- fetcher.py # 分页抓取 + 错误分类 + 函数ID恢复 + QThread Worker
| |-- db.py # SQLite 层(防重写入 / 聚合查询 / 标签 / 预设)
| |-- exporter.py # CSV / 多 Sheet Excel 导出(后台线程)
| |-- alerts.py # 花费预警阈值 + Webhook 通知
| |-- theme.py # 暗/亮主题 QSS 与 matplotlib 配色
| |-- charts.py # 5 类交互图表(Tooltip / 缩放 / 点击联动)
| |-- main_window.py # 主窗口 + 系统托盘 + 定时任务
| `-- ui/ # 五个选项卡 + SQL 终端 + 预设对话框
`-- 获取Opencode_Go使用记录原理与注意事项.md # 协议逆向原理文档
Cookie 为 @hapi/iron 加密会话,会过期。重新从浏览器复制最新 Cookie: auth=... 更新即可。
前端每次发版函数哈希都会变化。进入「系统设置 → 数据导出」旁的恢复函数ID按钮,应用会自动从前端 bundle 提取最新 ID。
在「系统设置」增大请求间隔(建议 ≥ 300ms),稍后重试。
单次调用成本或 Token 超过全部记录均值 3 倍的异常高消耗调用,被自动标红警示。
- Cookie 仅保存在本机
%APPDATA%\OCGMonitor\config.json,绝不会上传或写入日志 - 程序只做只读查询,不修改云端任何数据
- 本仓库不含任何真实使用记录 / Cookie / 工作区 ID(已完全脱敏)
本项目采用 MIT License 开源。 欢迎 Fork、修改或集成到自己的项目中,保留版权声明即可。