DeepSeek Monitor 的 macOS 本地监控仓库。通过 Chrome 扩展同步 platform.deepseek.com 上的 API 账户余额和模型用量数据。
SwiftUI SwiftData WidgetKit Chrome Extension MV3 Network Framework
| Dashboard | Widget 组件 |
|---|---|
![]() |
![]() |
DeepSeek Monitor 由两部分组成:
- macOS App — 本地 HTTP 服务监听
127.0.0.1:5199,接收 Chrome 扩展推送的数据,通过 SwiftData 持久化至本地 SQLite,并提供 Dashboard 总览、模型用量详情、Widget 组件和菜单栏常驻入口 - Chrome 扩展 — Manifest V3 扩展,在 DeepSeek 平台页面中获取 API 数据,通过 HTTP POST 推送至本地 App
所有数据存储在本地,不经过任何第三方服务器。
- Dashboard 总览 — 查看账户余额、钱包明细(普通/赠送额度)、当月消费金额和 Token 用量
- 多模型监控 — 分别追踪 deepseek-v4-pro / deepseek-v4-flash 的 Token 消耗、请求次数、缓存命中率
- 月度趋势图 — 按天展示各模型消耗金额柱状图
- 模型钻取 — 进入模型详情页查看 Token 消耗堆叠图(缓存未命中 / 缓存命中 / 输出)
- WidgetKit 组件 — 支持小、中、大三种尺寸,在通知中心直接查看余额和消耗概览
- 菜单栏常驻 — 通过 MenuBarExtra 驻留菜单栏,一键打开主窗口;关闭主窗口后自动隐藏 Dock 图标
- Chrome 扩展同步 — 点击扩展图标一键同步 DeepSeek 平台数据至本地 App
- SwiftData 持久化 — 所有数据本地存储,无第三方依赖
┌─────────────────────────────────────────────────────────┐
│ Chrome 浏览器 │
│ ┌─────────────────────────────────────┐ │
│ │ Chrome Extension (MV3) │ │
│ │ ┌────────────┐ ┌───────────────┐ │ │
│ │ │ content.js │ │ background.js │ │ │
│ │ │ 页面数据抓取 │ │ 后台调度 & 通信 │ │ │
│ │ └──────┬─────┘ └───────┬───────┘ │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌──────────────────────────────┐ │ │
│ │ │ POST /api/data │ │ │
│ │ │ → http://127.0.0.1:5199 │ │ │
│ │ └──────────────┬───────────────┘ │ │
│ └─────────────────┼───────────────────┘ │
└────────────────────┼────────────────────────────────────┘
│ HTTP (localhost only)
▼
┌─────────────────────────────────────────────────────────┐
│ macOS App │
│ ┌────────────────┐ ┌──────────────────────────────┐ │
│ │ LocalServer │ │ DatabaseService │ │
│ │ NWListener:5199 │──▶ SwiftData → 本地 SQLite │ │
│ └────────────────┘ └──────────────┬───────────────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ WidgetSnapshotStore │ │
│ │ App Group UserDefaults│ │
│ └──────────┬──────────┘ │
└─────────────────────────────────────┼───────────────────┘
│ WidgetKit
▼
┌─────────────────────────────────────────────────────────┐
│ Widget Extension (WidgetKit) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Provider.readSnapshot() → WidgetSnapshot │ │
│ │ App Group UserDefaults 读取 → Widget UI 渲染 │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
数据流说明:
- Chrome Extension:
content.js在 DeepSeek 平台页面注入,通过页面 API 获取余额、钱包、模型用量等数据;background.js负责调度后台同步任务 - 本地通信:扩展将数据通过 HTTP POST 发送至
http://127.0.0.1:5199/api/data,仅限本地回环地址,不对外暴露 - SwiftData 持久化:macOS App 的
LocalServer(基于 Network Framework 的 NWListener)接收请求后,由DatabaseService解析 JSON 并写入 SwiftData(底层 SQLite) - Widget 数据共享:
DatabaseService在每次写入后生成精简WidgetSnapshot,通过 App Group 共享的UserDefaults(suiteName:)写入;Widget Extension 的Provider在刷新时读取该快照渲染 UI
| 组件 | 要求 |
|---|---|
| macOS | 14.0+ |
| Xcode | 16.0+ |
| Chrome | 最新版本(用于加载扩展) |
| DeepSeek | platform.deepseek.com 账号 |
首次运行如遇签名问题,从 example 创建本地配置(Configs/Local.xcconfig 已被 .gitignore 忽略,不会提交个人配置):
cp Configs/Local.xcconfig.example Configs/Local.xcconfig然后填写以下三个键值:
| 键 | 说明 |
|---|---|
DEVELOPMENT_TEAM |
你的 Apple Team ID |
PRODUCT_BUNDLE_IDENTIFIER_PREFIX |
产品 Bundle Identifier 前缀,例如 com.example |
APP_GROUP_IDENTIFIER |
App Group 标识符(macOS 推荐 TeamID 前缀格式,如 ABCDEF1234.com.example.monitor),App 与 Widget 两个 target 必须使用同一个 App Group,否则 Widget 会读不到数据 |
如果不使用 Local.xcconfig,也可通过 Xcode Signing & Capabilities 面板选择 Team,但 Xcode 可能会修改已跟踪的 project.pbxproj 文件,提交前请检查不要将个人签名信息提交进 Git。
直接用 Xcode 打开 deepseek-monitor.xcodeproj,选择 DeepSeekMonitor scheme,运行即可。
首次运行: 如果遇到签名问题,请从 example 创建本地配置:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig(已加入.gitignore,不会提交)。然后填写DEVELOPMENT_TEAM、PRODUCT_BUNDLE_IDENTIFIER_PREFIX及APP_GROUP_IDENTIFIER(macOS 推荐APP_GROUP_IDENTIFIER使用 TeamID 前缀格式,例如ABCDEF1234.com.example.monitor,且 App 与 Widget 两个 target 必须使用同一个 App Group,否则 Widget 会读不到数据)。如果通过 Xcode Signing & Capabilities 选择 Team,注意提交前检查project.pbxproj差异,避免将个人签名配置提交进 Git。
本项目无需执行额外构建命令,Xcode 打开即可运行。
- 打开 Chrome 浏览器,访问
chrome://extensions/ - 开启右上角"开发者模式"
- 点击"加载已解压的扩展程序"
- 选择仓库中的
chrome-extension目录
- 启动 macOS App(菜单栏会出现 DeepSeek Monitor 鲸鱼图标)
- 在 Chrome 中登录 platform.deepseek.com
- 点击 Chrome 工具栏中的 DeepSeek Monitor 扩展图标
- 在弹出的面板中点击"同步"按钮,数据将自动推送至本地 App
首次同步前需要先打开并登录 DeepSeek 平台页面。后续可在任意页面点击扩展同步,失效时按提示刷新平台页面即可。
- 从菜单栏图标或 Dock 中打开 Dashboard,查看余额、钱包明细、当月累计消费
- 点击模型卡片进入详情页,查看 Token 消耗堆叠图(区分缓存未命中、缓存命中、输出)
- 设置页面可执行"清空本地数据"操作
- 在通知中心编辑器中添加 DeepSeek Monitor Widget
- 小组件:显示可用余额估算和当日消费
- 中组件:额外展示当月消费和双模型概览
- 大组件:完整展示余额、当月/今日消费、模型 Token/请求数/缓存命中率、月度每日消费柱状图
- 点击菜单栏鲸鱼图标快速打开主窗口
- 关闭主窗口后 App 自动隐藏 Dock 图标,从菜单栏重新打开
Deepseek-Monitor-Mac/
├── Configs/ # xcconfig 构建配置
│ ├── Base.xcconfig
│ ├── Debug.xcconfig
│ ├── Local.xcconfig.example # 本地签名配置模板
│ └── Release.xcconfig
├── DeepSeekMonitor/ # App 主 Target
│ ├── DeepSeekMonitorApp.swift # App 入口 (WindowGroup + MenuBarExtra)
│ ├── Server/
│ │ ├── LocalServer.swift # 本地 HTTP 服务 (NWListener, 端口 5199)
│ │ └── DatabaseService.swift # SwiftData 读写封装
│ ├── Models/
│ │ └── MonitorData.swift # 数据模型 & JSON 通信格式 & SwiftData Schema
│ ├── Shared/
│ │ └── WidgetSnapshot.swift # Widget 快照 & App Group UserDefaults 存储
│ ├── Views/
│ │ ├── Dashboard/ # 总览页 (余额 + 模型卡片 + 月度消费图)
│ │ ├── Detail/ # 模型钻取页 (Token 堆叠图)
│ │ └── Settings/ # 设置页
│ └── Assets.xcassets/
├── DeepSeekMonitorWidget/ # WidgetKit 组件 Target
│ ├── Provider.swift # Widget 时间线数据提供
│ ├── SmallWidgetView.swift
│ ├── MediumWidgetView.swift
│ └── LargeWidgetView.swift
├── DeepSeekMonitorTests/ # 单元测试
├── chrome-extension/ # Chrome MV3 扩展
│ ├── manifest.json
│ ├── background.js # Service Worker (后台调度)
│ ├── content.js # 页面注入脚本
│ ├── page-intercept.js # 页面 API 拦截辅助
│ ├── popup/ # 扩展弹出面板
│ └── tests/ # 扩展测试数据
└── deepseek-monitor.xcodeproj # Xcode 工程文件
- 语言:Swift 5.9+,SwiftUI 构建 UI
- 数据存储:SwiftData(底层 SQLite),无第三方依赖
- 本地服务:基于 Network Framework 的 NWListener,仅监听
127.0.0.1:5199 - 组件通信:Widget 通过 App Group 共享 UserDefaults 读取快照数据(suite 由
APP_GROUP_IDENTIFIER配置) - Chrome 扩展:Manifest V3,Service Worker + Content Script 架构
- 最低部署目标:macOS 14.0
- 项目约束:不引入第三方依赖
- 全部本地化:Chrome 扩展从 DeepSeek 平台获取的数据直接推送至本地
127.0.0.1:5199,不经过任何第三方服务器 - 本地端口限制:App 的 HTTP 服务仅监听本地回环地址,不对外暴露
- 沙箱保护:App 运行在 macOS App Sandbox 中
- 无数据上传:项目不含任何数据上传、遥测或分析 SDK
- 有限访问范围:扩展仅访问 DeepSeek 平台、本地 App 和必要的本地存储
Q:同步时提示"无法连接本地 App"
A:请确认 macOS App 已经启动,并且没有其他程序占用 5199 端口。可在终端使用 lsof -i :5199 检查端口占用情况。
Q:所有页面都可以点击同步吗?
A:在有有效同步信息时可以。首次同步或同步失效时需回到 DeepSeek 平台页面重新同步。
Q:同步后数据没有更新
A:点击扩展图标重新同步,或检查 App 菜单栏 Debug 日志面板查看详细错误信息。
Q:Widget 显示"无数据"
A:请先完成至少一次数据同步,Widget 会自动在 15 分钟内刷新。也可以手动在通知中心下拉刷新。
Q:数据存储在什么位置?
A:App 使用 SwiftData 在应用沙箱内存储 SQLite 数据库,Widget 快照通过 App Group 共享 UserDefaults 存储。所有数据均不离开本地设备。
本项目基于 MIT License 开源。



