dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
让 DeepSeek API 的每一分花费,都看得见。💰
一个挂在 DeepSeek Harness Web 侧边栏的小组件:实时告诉你这次对话烧了多少 token、花了多少钱、账户还剩多少余额。悬停徽章弹出完整详情,点击徽章直接跳进设置页的仪表盘;token 明细、7 日趋势、CSV 对账、月度预算告警、明暗主题,应有尽有。
| 功能 | 说明 |
|---|---|
| 💰 实时余额 | 直连官方 get-user-balance,API Key 不出服务器 |
| 📊 消耗统计 | 本对话 / 今日 / 本月 / 全局,按模型拆分 token 与金额 |
| 📈 7 日趋势 | V4 Pro / V4 Flash 双模型柱状图,金额 / Token 一键切换 |
| 🧾 CSV 对账 | 导入官方 amount CSV,本地金额按官方单价重算后对比,同时展示 Token 与请求数 |
| 🎯 价格校准 | 从官方 CSV 自动提取单价,写入本地价表 |
| 🔔 预算告警 | 月度限额超了可推 webhook,花钱心里有数 |
| 🚀 一键充值 | 面板里直达 DeepSeek 用量页 |
| 🌗 明暗主题 | 跟随系统 / 白天 / 夜晚,三处面板同步响应 |
| 📦 数据不丢 | 每次调用落盘,历史金额按当前价表重算 |
两种方式任选其一,装完即自动激活,无需改任何配置文件。
到 GitHub Releases 页面下载 deepseek-ai-dsh-api-cost-0.1.0.tgz,然后:
pnpm dsh plugin --profile web add ./deepseek-ai-dsh-api-cost-0.1.0.tgz
git clone https://github.com/MoyunLee/dsh-api-cost.git
pnpm dsh plugin --profile web add file:./dsh-api-cost
仓库已提交预构建的
lib/client.js,本地安装直接用它,无需构建、无需授权。 网页「Download ZIP」解压后,同样用file:方式安装即可。
pnpm dsh web
打开 http://127.0.0.1:3080,左下角就是「余额 / 花费」徽章。
余额查询需要 DeepSeek API Key,二选一:
# 环境变量
DEEPSEEK_API_KEY=sk-… dsh web
或写入 $DSH_HOME/.credentials.yaml:
DEEPSEEK_API_KEY: sk-…
优先级:进程环境变量 > .credentials.yaml > .env 层。不配 Key 时余额显示 --,token 与金额统计照常工作。
+¥Z 实时增量。amount-*.csv。本地金额会先按 CSV 里的
官方单价重算,再与官方金额对比(避免本地价表与扣费单价不同造成的假偏差),并同时展示
官方/本地 Token 与请求数。「按官方价格校准」可把官方单价写入本地价表。配置写在 profile 用户层 $DSH_HOME/profiles/web/cordis.patch.yml,按行 id 覆盖、与内置默认值合并,只写要改的字段即可:
- id: api-cost
config:
# 覆盖/新增模型价格(¥/百万 token:input=缓存未命中 / cacheRead=缓存命中 / cacheWrite / output)
prices:
my-model:
input: 3.0
cacheRead: 0.1
cacheWrite: 3.0
output: 9.0
# 峰谷计费(默认关闭;北京时间高峰 9:00–12:00、14:00–18:00,谷时段半价)
peak:
enabled: true
peakHours: [[9, 12], [14, 18]]
peakMultiplier: 1.0
offpeakMultiplier: 0.5
# 月度预算告警(0 = 关闭;超限可选 webhook 通知一次)
budget:
monthlyLimit: 50
webhookUrl: 'https://example.com/hook'
# 余额校准(expected = initialBalance − 本地累计;偏差超阈值提示)
calibration:
enabled: true
initialBalance: 100
deviationThreshold: 0.05
| 模型 | input(缓存未命中) | cacheRead(缓存命中) | cacheWrite | output |
|---|---|---|---|---|
| deepseek-v4-flash | 3.0 | 0.10 | 3.0 | 9.0 |
| deepseek-v4-pro | 9.0 | 0.30 | 9.0 | 27.0 |
官方定价可能随时调整:实际扣费单价以 官方定价页 为准;对账时会自动按你导入 CSV 里的官方单价重算,不依赖这张表。
scratch-plugin/* 已注册为 workspace 成员,可以 link: 安装并开启热更新:
pnpm install # 装 peer 依赖
pnpm dsh plugin --profile web add ./scratch-plugin/api-cost # 裸路径 = link 到源码
两个终端:
# 终端 A:改 src/client/index.js 后自动重打 lib/client.js
cd scratch-plugin/api-cost && pnpm watch:client
# 终端 B:web 服务(client 改动自动热更新)
pnpm dsh web --patch ./scratch-plugin/cordis.yml
src/client/index.js → lib/client.js):dsh web 内置的 dsh-client-hmr
监测 bundle 变化并热更新浏览器。src/index.js):作者仓库根的 scratch-plugin/cordis.yml 里用 --patch
重新启用了 web 组合包默认关掉的 hmr 行,保存源码后框架会卸载并重载该插件。
⚠️ 官方把这条标记为「重载生命周期未测试」,异常时删掉该 overlay 里那节 id: hmr 并重启即可回退。
(这段 hmr 覆盖只存在于作者仓库根的 overlay,不会随 tarball/npm/GitHub 发布给用户。)cd scratch-plugin/api-cost
# 1) 改代码:前端 src/client/index.js;后端 src/index.js(纯 ESM,无需构建)
# 2) 只改前端才需要重打 bundle(tsdown 从仓库根解析,插件自身不装)
pnpm build:client
# 3) 打包(只打包不构建,务必先 build)
pnpm pack
# 4) 提交 + 推送(装了 gh 就再上传 Release)
git add -A
git commit -m "改动说明"
git push origin main --tags
改 client → build → pack 三步一个都不能少,否则
.tgz里的lib/client.js是旧代码。 发布包刻意不含devDependencies(react/tsdown 是构建期/外部依赖,运行时不需要),所以file:安装零构建、零链接,不会触发跨盘 symlink。版本升级:大改动 bump
package.json的version并打新 tagv0.x.0; 覆盖 Release 附件:gh release upload v0.1.0 deepseek-ai-dsh-api-cost-0.1.0.tgz --clobber。
不想用了,一行命令移除插件(会同时删掉依赖和 profile 里的插件层):
pnpm dsh plugin --profile web remove @deepseek-ai/dsh-api-cost
然后重启 dsh web 即彻底停用。
插件产生的本地账本数据在
$DSH_HOME/api-cost/(默认%USERPROFILE%\.dsh\api-cost\),dsh plugin remove不会删它。想连数据一起清干净,手动删掉这个目录:Remove-Item -Recurse -Force "$env:USERPROFILE\.dsh\api-cost"浏览器里的外观模式偏好存在 localStorage(键
dsh-api-cost-theme),清浏览器站点数据时一并清掉即可。
prices 中配置的模型按 0 元计费(token 照常累计)——先看量再看价。x-dsh-api-cost: confirm,可防跨站 CSRF;但仍属本机个人工具,若把服务暴露到公网,请自行加鉴权。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。