dsh-whale-widget 0.2.10 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/PROVENANCE.md ADDED
@@ -0,0 +1,35 @@
1
+ # 素材来源与许可范围(PROVENANCE)
2
+
3
+ 本仓库的**代码**按 MIT 许可(见 [`LICENSE`](LICENSE))。`assets/` 目录下的**美术素材**(图片 / 动图 / 音效)**不在 MIT 覆盖范围内**,按下面的说明「原样提供」。
4
+
5
+ ## 一、许可范围
6
+
7
+ | 范围 | 许可 |
8
+ |---|---|
9
+ | `lib/`、`cordis.patch.yml`、`package.json`、文档与维护脚本 | **MIT**(见 `LICENSE`) |
10
+ | `assets/**`(图片 / 动图 / 音效) | **不适用 MIT**:由维护者提供或使用 AI 工具生成,按 **as-is** 随插件分发,仅用于运行本插件;不授予再许可,也不声明为原创作品。 |
11
+
12
+ 这样划分的原因:代码可以明确授权,而美术素材的来源与权利状态往往无法百分之百举证 —— 与其给一个站不住的授权,不如如实标注范围,并承诺收到权利主张就处理(见第四节)。
13
+
14
+ ## 二、逐项来源
15
+
16
+ | 文件 | 来源 / 说明 |
17
+ |---|---|
18
+ | `DSniang1.png`(鲸鱼本体,气泡由代码绘制) | **AI 工具生成**的图像,经人工挑选与裁切。生成工具与原始出处**已不可考**(文件内元数据已被剥离,见第三节)。 |
19
+ | `DSniang02.png` | 同上(备用整图,兼容旧版手动安装路径)。 |
20
+ | `DSH2.png`(README 顶部展示图) | 由维护者自行设计与排版(使用在线设计工具),2026-09 替换为清理版(已剥离全部内嵌元数据)。 |
21
+ | `rua.gif`、`bubble-petpet.gif` | 内置动图素材。 |
22
+ | `bubble-money1.gif` | 内置泡泡图(余额预警默认内容的配图)。 |
23
+ | `Ya1.mp3` / `Ya2.mp3`、`D1.mp3` / `D2.mp3` | 内置音效(按压 / 松开)。 |
24
+ | `minecraft-exp-orb.wav`、`task-end-a.wav` | 内置任务结束音(Minecraft·经验球 / 预设 A)。 |
25
+
26
+ ## 三、元数据清理
27
+
28
+ 图片素材曾内嵌过设计工具的 XMP 归属信息(工具名、模板名、账号 id,甚至第三方品牌名)。自 **0.3.1** 起,随包 PNG **一律剥离** `eXIf` / `iTXt` / `tEXt` / `zTXt` 元数据块,只保留渲染必需的 `IHDR` / `sRGB` / `gAMA` / `pHYs` / `IDAT` / `IEND`。
29
+
30
+ - 复核:解析每个 PNG 的块序列,确认不再有文本 / EXIF 块;
31
+ - 剥离:逐块重写,不触碰像素数据(IHDR/IDAT/IEND 原样保留),因此画面完全不变。
32
+
33
+ ## 四、权利主张 / Takedown
34
+
35
+ 如果你认为 `assets/` 中有素材侵犯了你的权利,请在本仓库开一条 issue,说明**文件名**与**依据**,我们会在核实后**立即替换或移除**,不附加其它条件。我们也欢迎直接提供可自由再分发的替代素材。
package/README.md CHANGED
@@ -1,49 +1,162 @@
1
- # DSH 小鲸鱼余额挂件(DeepSeek Balance Whale Widget)
1
+ # DSH 小鲸鱼记账挂件(DeepSeek Balance Whale Widget)
2
2
 
3
- ![DSH 小鲸鱼余额挂件](assets/DSH2.png)
3
+ ![DSH 小鲸鱼记账挂件](assets/DSH2.png)
4
4
 
5
- DeepSeek Harness(DSH)Web 界面右下角的常驻余额挂件:小鲸鱼气泡图 + DeepSeek API 余额 + 今日已用 + 每轮对话消耗统计,每次打开界面自动启用。本项目是标准 DSH 插件包,可通过 `dsh plugin` 安装/卸载。
5
+ DeepSeek Harness(DSH)Web 界面右下角的常驻挂件:小鲸鱼气泡图 + DeepSeek API 余额 + 今日已用 + 每轮对话消耗,并且**泡泡内容可以完全自定义**(点击序列、模块化排版、并列加权出泡、随机语句/随机图片)。标准 DSH bundle 插件,`dsh plugin` 一键安装,无需任何会话令牌。
6
6
 
7
7
  ## 特性
8
8
 
9
+ ### 记账与显示
10
+
9
11
  - 🐋 **常驻自启**:随 DSH Web 界面每次打开自动出现(标准 DSH bundle 插件)
10
12
  - 💰 **余额**:60 秒自动刷新 + 点击鲸鱼手动刷新;余额变化时数字**滚动动画**;瞬时网络抖动自动沿用最近余额不报错
11
- - 📊 **今日已用**:两种模式任选(见下),显示今日消耗金额
12
- - **小鲸鱼记账(推荐,免令牌)**:不需要任何会话令牌,鲸鱼娘每次观测余额后用余额差值自动记账(`.dshw-usage.json`,跨天自动归零归档)
13
- - **实时·令牌**:填入平台会话令牌后直接调用平台用量接口,按**峰谷定价**(工作日高峰 9:00–12:0014:00–18:00,其余空闲;2026-08-23 起周末全天按谷价)实时换算今日已用
14
- - 💬 **每轮对话消耗统计**:监听本机会话事件,每轮对话结束后弹出本轮消耗金额(精确 usage,非估算)
15
- - 菜单可开关「每轮对话后自动显示消耗金额」;「自动关闭时间」可自定义秒数(填 0 表示不自动关闭)
16
- - 消耗金额泡泡显示期间,余额变动不弹普通泡泡
17
- - 🖱️ **拖拽 + 四边四分之一吸附**(左/右/上/下,角落可组合)
18
- - 🔄 左吸附时整体**水平镜像翻转**(文字同步反向、带动画)
13
+ - 📊 **今日已用(小鲸鱼记账)**:不需要任何令牌。余额**下降**按观测累计为消费,余额**上升**(充值 / 赠金)单独记录、不会冲掉已有消费;检测到余额增加会提示「待核对余额调整」,可在「小鲸鱼记账 → 充值 / 余额校正」按实际累计到账金额与非调用扣减校正(逐轮明细保留 90 天或最多 2 万条、逐日归档保留 365 天,超期数据归档到 `.dshw-usage-archive.json`);金额按 8 位小数记账、显示保留两位
14
+ - 💬 **每轮对话消耗**:监听 DSH 本机会话事件,按模型**真实 usage**(input / cache / output / reasoning tokens)换算金额,每轮结束弹出消耗泡泡;可开关、自动关闭秒数可设(0 = 不自动关闭),**泡泡内容可自定义**(模块化,金额用 `{cost}` 引用),入口:菜单 → 每轮消耗提示 → 「自定义提示」
15
+ - ⛰️ **峰谷定价**:工作日高峰 9:00–12:0014:00–18:00(北京时间),其余空闲;2026-08-23 起**周末全天谷价**。峰谷模块支持状态文字、倒计时、"梁文峰谷 / !?强强?! / 简洁"等多种样式
16
+ - 📒 **用量记录窗口**:今日模型消费、近 7 天、全部记录;模型占比条;按日期展开逐条明细(含时间与金额);支持按日期或**模型名搜索**;模型名带友好标注(`deepseek-flash` → `DeepSeek-V4.1-Flash`,旧名标注"同 V4.1 Flash")
17
+
18
+ ### 交互
19
+
20
+ - 🖱️ **拖拽 + 吸附**:四边吸附区可自定义(按比例或像素),角落可组合;可关闭吸附自由摆放
21
+ - 🔄 贴左吸附时整体**水平镜像翻转**(文字同步反向、带动画)
19
22
  - 🧸 **按压 Q 弹**玩偶效果(按压时底部坐标不变)
20
- - 🎚️ **汉堡菜单**(悬停鲸鱼右上角出现):大小滑块(0.6–2.5 倍)、音效切换(小黄鸭 / 音效1)、音量调节、用量模式、峰谷提示文案(默认 / 梁文峰谷 / !?强强?!)、气泡开关、每轮消耗开关与自动关闭时间
21
- - 🔊 **音效**:按压/松手音效(可选包内 mp3,缺失时静默降级)
22
- - 💬 **随机台词**:点击气泡切换随机台词段(加权随机,含峰谷提示/今日已用/gif 动图/卖萌吐槽),再点一次关闭;气泡总显示 5 秒自动收起
23
- - 📐 随浏览器窗口自动缩放;文字位置/字号与图片联动
23
+ - 🎚️ **主菜单**:大小滑块、音效开关/音量、峰值文案、泡泡开关、每轮消耗开关 + 「自定义提示」(每轮消耗内容 / 自动关闭秒数 / 任务结束音效)、吸附设置、角色/资源管理、自定义泡泡、余额预警、今日预算
24
+ - 🙈 **可隐藏菜单按钮**:隐藏后,电脑端**右键鲸鱼**、手机端**长按鲸鱼约 1.5 秒**唤出菜单
25
+ - 📱 **移动端友好**:鲸鱼可触摸拖动(自研触摸接管,不会把页面手势判成滚动导致拖不动);泡泡编辑器支持**长按 0.4 秒进入拖拽排序**;去掉了浏览器默认的点击高亮方块
26
+
27
+ ### 泡泡系统(核心)
28
+
29
+ - 💬 **点击序列**:第一次点击显示"首次点击泡",再点进入"再次点击"队列;队列可任意增删排序,还能把两泡**并列为 A/B 加权选择**(每轮按权重抽一个)
30
+ - 🔁 **点按角色推进队列**(可选,在「自定义泡泡」窗口里开):开启后**点一下角色=往后推进一项**(第 1→2→3…,走到最后一项再点收起泡泡,下次点按从第 1 项重新开始);关闭时是原来的行为 —— 点角色回到"首次点击泡"。设置只在这个窗口里,随窗口的「保存」一起生效
31
+ - 🧩 **模块化内容**:一个泡泡由若干模块按行组成,支持类型
32
+ - 文本、超链接
33
+ - **随机语句**(多条句子带权重,每次显示抽 1 条且不连续重复)
34
+ - **图片/动图**(从泡泡图库选,独占一整行)
35
+ - **随机图片**(多张图带权重,抽 1 张且不连续重复,同样独占一行)
36
+ - 余额数值、今日已用、峰谷时段(内置数值,内容自动获取,可调占位符与样式)
37
+ - 🎨 **逐模块样式**:字体(含自定义字体)、字号、加粗/斜体/下划线、纯色或**跑马灯渐变**配色、底色;文本与随机语句支持悬浮快捷编辑
38
+ - 🖐️ **拖拽排版**:桌面端原生拖拽、移动端长按拖拽;模块可并入某行首/尾、可拆行、整行可排序;**每行最多 6 个模块、泡泡最多 6 行**,图片类模块独占一行且一个泡泡只允许一个
39
+ - 📚 **模块库**:把常用模块"另存"进库,之后在任意泡泡里点击或拖入复用
40
+
41
+ ### 提醒
42
+
43
+ - 🔔 **余额预警**:余额低于设定值时弹提醒,内容可编辑(含图片/随机图片模块)
44
+ - 💸 **今日预算**:今日已用达到设定金额时弹提醒,内容同样可编辑
45
+ - 💬 **每轮消耗提示**:一轮对话结束后弹消耗泡泡,内容同样可编辑(模块化,金额用 `{cost}`);内容、自动关闭秒数与**任务结束音效**都在菜单 → 每轮消耗提示 → 「自定义提示」里设置
46
+ - 三者都支持自动关闭秒数设置;气泡模式不可用时自动退化为居中卡片(卡片内也会渲染图片模块)
47
+
48
+ ### 音效 / 角色 / 图片
49
+
50
+ - 🔊 **按压 & 松开音效**:内置「小黄鸭」「音效1」两套预置;也可导入音频片段并自由组合成**自定义音效组**(槽位可留空 = 该事件静音)
51
+ - 🎵 **任务结束音**:一轮回复完成时播放;内置两个预设音效 —— 默认 **Minecraft·经验球**(`assets/minecraft-exp-orb.wav`)与 **A**(`assets/task-end-a.wav`),也可选任意片段或音效组
52
+ - ✂️ **音频片段管理**:导入时可视化裁剪、试听;资源管理窗口统一查看/试听/删除
53
+ - 🐳 **自定义角色**:上传自己的鲸鱼图片(图库管理,可回退默认)
54
+ - 🖼️ **泡泡图库**:内置 `petpet`、`money1` 两张图,也可上传 png/gif,供图片/随机图片模块使用
55
+
56
+ ### 自定义 API(多厂商余额 / 额度)
57
+
58
+ 除内置的 DeepSeek 余额外,可在「小鲸鱼记账 → 模型」里添加任意厂商;每个模型独立配置余额预警 / 今日预算 / 额度:
59
+
60
+ - 🧩 **厂商模板(34 个,选完自动带好凭据名 / 币种 / 接口 / 字段路径 / 事件匹配 / 探活地址)**:
61
+ - **可直接查到余额或额度**:DeepSeek(内置)、OpenRouter、Kimi / Moonshot(CN / 国际)、阶跃星辰 StepFun、Novita、智谱 GLM Coding Plan(国内 / 国际 z.ai)、Kimi Coding、MiniMax Coding(国内 / 国际)、**OpenCode Go(订阅,5h / 周 / 月三窗口)**、OpenAI 兼容中转站(OneAPI / New API)
62
+ - **官方没有「用 API key 查余额」的接口**(下拉里标注「(无余额接口)」,选完会用 `probeUrl` 探活验证 key,余额显示「—」,今日已用按会话事件估算):硅基流动(CN / EN)、火山方舟 Ark、OpenAI、Anthropic Claude、Google Gemini、xAI Grok、Groq、Mistral AI、Together AI、Fireworks AI、DeepInfra、Cerebras、阿里云百炼(通义千问)、百度千帆(文心)、腾讯混元、讯飞星火、魔搭 ModelScope、本地模型(Ollama / LM Studio)
63
+ - **全手填**:自定义 HTTP(URL 与字段路径自己写)、Codex(本地会话,无需接口)
64
+ - 🔑 **密钥不落配置**:密钥写入 DSH 官方凭据服务,配置文件里只存**凭据名**(如 `OPENROUTER_API_KEY`);删除模型会连带清理该模型的额度模块与设置
65
+ - 💰 **余额**:按模板的接口与 JSON 字段路径读取(支持 `a.b[0].c` 与 `scale` 乘数);点「测试连通性」可先验证 key
66
+ - 📉 **今日已用**:有余额接口时记录观测到的**下降额**(当天首次观测为统计起点,充值等增加额不会冲掉消费),无余额接口的厂商显示本机会话**估算**
67
+ - 🎯 **额度(订阅 / 资源包)**:填总量即可,已用**按 DSH 会话 token 自动累计**(口径 `input + cacheRead + output`,推理 token 已含在 output 内,跨天保留),也可切换手动填写;支持「不重置 / 每日 / 每月」
68
+ - 🧾 **订阅额度接口(`kind:'quota'` 模板)**:直接读厂商官方接口的「窗口已用% + 重置时间」,与上面按会话统计的额度互补。**支持一个接口返回多个窗口**(目前 OpenCode Go 为 5h / 周 / 月三窗口),逐窗口展示已用百分比与各自的紧凑重置倒计时;模板用 `quota.json.windows` 描述各窗口的字段路径
69
+ - 💱 **单价(可选)**:位置在「密钥 / 接口」面板 → 展开「接口与字段(高级)」→「单价(可选)」。每个模型可自填单价 —— **缓存命中 / 未命中输入 / 输出**,单位是「币种 / 百万 token」;币种支持人民币(CNY)与美元(USD),**选美元时必须填汇率(元/USD)**;记账与账本**统一按人民币结算**(美元单价会按汇率折算);单价**不分峰谷**(两个时段同价)。留空则沿用内置价目表(DeepSeek flash / pro)。注意:**内置 DeepSeek 不支持自定义单价**(始终用内置峰谷价);额度单位选「金额(元)」时,已用**只能手动填写**
70
+ - 🫧 **泡泡模块**:每个模型自动获得「余额·<模型名>」与「额度·<模型名>」两个模块,占位符 `{balance}`、`{today}`、`{quota}`、`{quota_used}`、`{quota_left}`、`{quota_total}`、`{quota_reset}`
71
+
72
+ > 说明:并非所有厂商都提供「用 API key 查余额」的接口。**硅基流动**的余额接口已被官方下线([2026-08-11 更新公告](https://api-docs.siliconflow.cn/docs/release-notes/overview):`/user/info` 自 **2026-08-14** 起停止服务,「后续将适时提供替代 API」,截至发版仍未见替代接口),**火山方舟**的余额 / 用量与**阿里云百炼 / 百度千帆 / 腾讯混元**一样属于各家云平台 AK/SK 签名的 OpenAPI,**OpenAI / Anthropic / Gemini / xAI / Groq / Mistral / Together / Fireworks / DeepInfra / Cerebras** 则根本没有公开的余额查询接口 —— 这些模板统一是「无余额接口 + 探活验证 key」,今日已用按会话事件估算。厂商的**订阅额度**接口(智谱 / Kimi Coding / MiniMax Coding / OpenCode Go)只对订阅套餐账号有效:Token 资源包账号调用智谱接口会返回「当前用户不存在coding plan」,这种情况请用上面的「额度(订阅 / 资源包)」自动统计。
73
+ >
74
+ > 模板只提供**默认值**:选完模板后可以随意改写接口地址与字段路径;留空的字段会**继续沿用模板默认值**(不会因为留空而失效)。
75
+
76
+ ### Codex 模式(本地会话统计)
77
+
78
+ > ⚠️ **限制**:Codex 支持目前只是**部分接口适配**,本挂件**不能安装到 Codex 里**(它是 DSH Web 插件,Codex 仅作为数据来源被读取);订阅窗口没有真实订阅样本可验证,遇异常欢迎反馈。
79
+
80
+ 挂件可以直接读本机 Codex 的会话日志统计 token 用量 —— 因此**不限于 DSH 内部**,你在 Codex CLI / 桌面版里跑的消耗也能看到。
81
+
82
+ - 📂 **数据来源**:`$CODEX_HOME/sessions/YYYY/MM/DD/rollout-*.jsonl`(含 `archived_sessions/`),明文 JSONL;只读本机文件、**不联网、不需要密钥**,也不会写入 `~/.codex`
83
+ - 📈 **统计口径**:优先用日志里累计量(`total_token_usage`)的**差值**累加,天然避免同一轮多条记录被重复计数;模型归属由 `turn_context.payload.model` 判定;按天 + 模型聚合,带增量缓存(`$DSH_HOME/.dshw-codex.json`,只存聚合与文件偏移)
84
+ - 🖥️ **显示**:模型列表显示 `Codex 今日 x · 近7天 y tokens`;模型子菜单显示今日 / 本月 / 累计 / 近7天与会话文件数;「测试」按钮直接返回本地统计
85
+ - 🎯 **额度**:该模型的「额度」里,已用来源可选 **Codex 本地会话 token**(不重置=累计−基准、每日=今日、每月=本月),复用同一套展示与泡泡模块
86
+ - 🪟 **订阅窗口(5h / 周)**:日志里的 `rate_limits` 带窗口快照,有 ChatGPT 订阅时子菜单自动追加 `5h 已用 x% · 2小时30分后重置 | 周 已用 y% · 3天后重置`(字段名已做容错;API-key 计费或无订阅时该行不显示)
24
87
 
25
88
  ## 目录结构
26
89
 
27
90
  ```text
28
91
  dsh-whale-widget/
29
- ├── package.json # DSH bundle 插件元数据
30
- ├── README.md # 本文件
31
- ├── cordis.patch.yml # 插件挂载声明
92
+ ├── package.json # DSH bundle 插件元数据(dsh.bundle.patch 指向 cordis.patch.yml)
93
+ ├── README.md # 本文件
94
+ ├── cordis.patch.yml # 插件挂载声明
32
95
  ├── lib/
33
- └── index.js # 宿主侧插件本体
96
+ ├── index.js # 宿主侧插件本体(路由 + 记账 + 音效/图片/角色服务)
97
+ │ └── accounting.mjs # 记账内核(定点金额运算 + 余额观测/校正账本)
34
98
  ├── assets/
35
- │ ├── DSH2.png # README 顶部展示图
36
- │ ├── DSniang1.png # 小鲸鱼本体(cut-out,气泡由代码绘制)
37
- │ ├── DSniang02.png # 备用整图(兼容旧版手动安装路径)
38
- │ ├── rua.gif # 随机台词 gif(可选)
39
- │ ├── Ya1.mp3 / Ya2.mp3 # 小黄鸭音效(可选)
40
- └── D1.mp3 / D2.mp3 # 音效1(可选)
41
- └── whale-widget-prompt.md # 完整规格/维护提示词
99
+ │ ├── whale-widget.js # 前端挂件本体(由宿主按 mtime 热读取)
100
+ │ ├── DSH2.png # README 顶部展示图
101
+ │ ├── DSniang1.png # 小鲸鱼本体(cut-out,气泡由代码绘制)
102
+ │ ├── DSniang02.png # 备用整图(兼容旧版手动安装路径)
103
+ │ ├── rua.gif # 随机台词/撒娇动图(可选)
104
+ ├── Ya1.mp3 / Ya2.mp3 # 预置音效「小黄鸭」按压 / 松开
105
+ │ ├── D1.mp3 / D2.mp3 # 预置音效「音效1」按压 / 松开
106
+ │ ├── minecraft-exp-orb.wav # 任务结束音内置默认音效(Minecraft·经验球)
107
+ │ ├── task-end-a.wav # 任务结束音内置预设(A)
108
+ │ ├── bubble-petpet.gif # 内置泡泡图:petpet
109
+ │ └── bubble-money1.gif # 内置泡泡图:money1(余额预警默认内容的配图)
110
+ └── whale-widget-prompt.md # 完整规格/维护提示词(面向二次开发)
42
111
  ```
43
112
 
113
+ 运行时数据(都放在 `$DSH_HOME`,默认 `~/.dsh`;本机开发环境为 `D:\TestBox\deepseek\`):
114
+
115
+ | 文件 / 目录 | 用途 |
116
+ |---|---|
117
+ | `.dshw-size.json` | 挂件外观与开关(缩放、音量、音效组、峰值样式、吸附相关等) |
118
+ | `.dshw-usage.json` | 记账账本 + 按日余额观测/校正摘要 + 用量设置(任务结束音、余额预警、今日预算、每轮消耗提示内容) |
119
+ | `.dshw-usage.json.before-recharge-fix.bak` | 旧格式账本备份(0.3.1 首次写入旧账本前自动创建;已存在则不覆盖) |
120
+ | `.dshw-turn.json` | 每轮消耗的 seq(避免热重载后前端把新轮次当旧轮次) |
121
+ | `.dshw-bubble.json` | 自定义泡泡配置(点击序列 + 模块库 + 点按角色推进队列开关) |
122
+ | `.dshw-api.json` | 自定义 API 模型注册表(厂商 / 凭据名 / 接口字段 / 自定义单价 / 额度与用量累计;**不含密钥**) |
123
+ | `.dshw-usage-archive.json` | 账本归档(超过保留期的逐轮明细与逐日汇总;明细 90 天/2 万条、逐日 365 天) |
124
+ | `.dshw-codex.json` | Codex 本地会话统计缓存(按天/模型聚合 + 文件偏移;**不含任何凭据**) |
125
+ | `whale-roles/` | 自定义角色图 + `roles.json` 索引 |
126
+ | `whale-audio/` | 音频片段 `<id>.wav` + `audio.json` 索引(音效组/片段) |
127
+ | `whale-bubble-imgs/` | 泡泡图库图片 + `bubble-imgs.json` 索引 |
128
+
44
129
  ## 安装
45
130
 
46
- ### 方式 A:直接从 GitHub 安装(推荐)
131
+ ### 方式 A:已有本插件的完整资源包(本地目录 / 压缩包)(推荐)
132
+
133
+ 适用于别人直接发给你一个 zip,或你手上已有一份解压好的插件目录(目录里应有 `package.json`、`cordis.patch.yml`、`lib/`、`assets/`、`README.md`)。
134
+
135
+ ```powershell
136
+ # 1) 若是 zip:先解压到一个固定、以后不会移动或删除的目录(不要放临时目录/下载目录)
137
+ # 例:D:\Plugins\dsh-whale-widget
138
+ # 要安装的是「包含 package.json 的那一层」,不要多套一层同名目录
139
+
140
+ # 2) 确认关键文件都在(缺 assets/ 会导致没图、没声)
141
+ Test-Path "D:\Plugins\dsh-whale-widget\package.json",
142
+ "D:\Plugins\dsh-whale-widget\lib\index.js",
143
+ "D:\Plugins\dsh-whale-widget\assets\whale-widget.js"
144
+
145
+ # 3) 如果之前从 GitHub / npm 装过同名插件,先卸载避免版本冲突
146
+ dsh plugin --profile web remove dsh-whale-widget
147
+
148
+ # 4) 用绝对路径安装(路径含空格要加引号)
149
+ dsh plugin --profile web add link:D:\Plugins\dsh-whale-widget
150
+ ```
151
+
152
+ 说明:
153
+
154
+ - `link:` 是**软链安装**:源目录里的文件改了立即生效;但安装后**不能移动/重命名该目录**,移动了要重新 add 一次
155
+ - 想改用拷贝安装:`dsh plugin --profile web add file:D:\Plugins\dsh-whale-widget`(此后源目录再改不会同步,需重新 add)
156
+ - 资源包自带 `assets/minecraft-exp-orb.wav`、`assets/task-end-a.wav` 等内置资源;**删掉 assets 里的文件会让对应功能静默降级**(无图/无声)
157
+ - 装完同样要重启 `dsh web`,再 F5 刷新浏览器
158
+
159
+ ### 方式 B:直接从 GitHub 安装
47
160
 
48
161
  无需本地克隆,一条命令安装:
49
162
 
@@ -60,9 +173,9 @@ dsh plugin --profile web add github:MeteorNOX/DeepSeek-Balance-Whale-Widget
60
173
  ```
61
174
  - 安装完成后重启 `dsh web`,再 F5 刷新浏览器
62
175
 
63
- ### 方式 B:本地安装(从当前仓库)
176
+ ### 方式 C:本地安装(从当前仓库)
64
177
 
65
- 在**仓库根目录**(`DeepSeek-Balance-Whale-Widget`,即 `package.json` 所在目录)执行:
178
+ 在**仓库根目录**(`package.json` 所在目录)执行:
66
179
 
67
180
  ```powershell
68
181
  dsh plugin --profile web add link:.
@@ -71,51 +184,96 @@ dsh plugin --profile web add link:.
71
184
  说明:
72
185
 
73
186
  - `dsh plugin` 会把参数转发给 pnpm,并在成功后自动把 `dsh-whale-widget` 加入 `dsh.profile.bundles`
74
- - **`link:.` 表示链接当前目录**(仓库根目录本身就是插件包)。如果你复制了仓库到别处,用绝对路径:
187
+ - **`link:.` 表示链接当前目录**(仓库根目录本身就是插件包)。如果仓库在别处,用绝对路径:
75
188
  ```powershell
76
189
  dsh plugin --profile web add link:D:\你的路径\DeepSeek-Balance-Whale-Widget
77
190
  ```
78
- - ⚠️ 不要用 `link:.\dsh-whale-widget`——仓库里**没有** `dsh-whale-widget/` 子目录,这样会安装成普通依赖而非插件,重启后挂件不出现
191
+ - ⚠️ 不要用 `link:.\dsh-whale-widget`——仓库里**没有** `dsh-whale-widget/` 子目录,这样会安装成普通依赖而非插件
79
192
  - 安装完成后重启 `dsh web`,再 F5 刷新浏览器
80
- - **如果之后移动了源码目录**,必须重新执行一次 `dsh plugin --profile web add link:.<新路径>`。若提示已存在/冲突,先 `dsh plugin --profile web remove dsh-whale-widget` 再重新 add
193
+ - **移动了源码目录**后必须重新执行一次 `add link:<新路径>`;若提示冲突,先 `dsh plugin --profile web remove dsh-whale-widget` add
81
194
 
82
- ### 方式 C:发布到 npm 后安装
195
+ ### 方式 D:发布到 npm 后安装
83
196
 
84
197
  ```powershell
85
198
  dsh plugin --profile web add dsh-whale-widget
86
199
  ```
87
200
 
88
- ### 给 AI 的安装说明(用 dsh 辅助安装时,直接复制给 AI)
89
-
90
- 如果你希望让另一个 DSH / AI 助手帮你安装,把下面这段发给它即可:
201
+ ### 给 AI 的安装说明(直接复制给 AI 助手)
91
202
 
92
203
  ```
93
- 请帮我安装插件 dsh-whale-widget,来源是 GitHub 仓库 MeteorNOX/DeepSeek-Balance-Whale-Widget。
204
+ 请帮我安装插件 dsh-whale-widget。可能的来源有两种:GitHub 仓库
205
+ MeteorNOX/DeepSeek-Balance-Whale-Widget,或者我本地已经有这个插件的「完整资源包」。
94
206
 
95
207
  步骤:
96
208
  1. 确保 pnpm 可用(没有就先:npm install -g pnpm)
97
- 2. 在 Web profile 安装(任选一种来源):
98
- 首选,直接从 GitHub 安装(无需本地克隆,装完可在插件管理页面里更新):
209
+ 2. 在 Web profile 安装(按我实际拿到的来源任选一种):
210
+
211
+ 【来源一:从 GitHub 安装】
99
212
  dsh plugin --profile web add github:MeteorNOX/DeepSeek-Balance-Whale-Widget
100
- 或从本地仓库链接安装(例如本地克隆的仓库根目录):
101
- dsh plugin --profile web add link:.<仓库绝对路径>
213
+ 或从本地 git 仓库链接安装:
214
+ dsh plugin --profile web add link:<仓库绝对路径>
102
215
  (注意:仓库根目录就是插件包,不要写成 link:.\dsh-whale-widget 这种带子目录的路径)
103
- 3. 如果报 pnpm 阻止构建脚本(allowBuilds 相关),在 C:\Users\<用户名>\.dsh\profiles\web\pnpm-workspace.yaml 的 allowBuilds 下加对应的包 key,然后重跑
216
+
217
+ 【来源二:我本地已有完整资源包(zip 或已解压目录)】
218
+ 先确认「完整资源包」长什么样:一个目录,里面应当有
219
+ package.json、cordis.patch.yml、lib/index.js、
220
+ assets/(含 whale-widget.js、DSniang1.png、Ya1.mp3、minecraft-exp-orb.wav、task-end-a.wav 等)、README.md
221
+ 然后按下面做:
222
+ a) 如果给我的是 zip:先解压到一个**固定、以后不会移动或删除**的目录,例如
223
+ D:\Plugins\dsh-whale-widget
224
+ 不要解压到临时目录/下载目录/会被清理的位置;也不要多套一层——
225
+ 要安装的是**包含 package.json 的那一层**,不是外面那个同名压缩包目录
226
+ b) 检查文件完整性(任意一条 False 就先告诉我,不要继续装):
227
+ Test-Path "<资源包目录>\package.json"
228
+ Test-Path "<资源包目录>\lib\index.js"
229
+ Test-Path "<资源包目录>\assets\whale-widget.js"
230
+ 并确认 package.json 里 name 是 dsh-whale-widget、带 dsh.bundle.patch 字段
231
+ c) 如果之前从 GitHub / npm 装过同名插件,先卸载避免版本冲突:
232
+ dsh plugin --profile web remove dsh-whale-widget
233
+ d) 用**绝对路径**安装(路径含空格要加引号):
234
+ dsh plugin --profile web add link:<资源包目录>
235
+ link: 是软链安装:源目录改了立即生效,但安装后不能移动/重命名该目录;
236
+ 移动后必须重新执行一次 add。若想按拷贝安装可用:
237
+ dsh plugin --profile web add file:<资源包目录>
238
+ (file: 以后源目录改动不会同步,需要重新 add)
239
+
240
+ 3. 如果报 pnpm 阻止构建脚本(allowBuilds 相关),在 ~/.dsh/profiles/web/pnpm-workspace.yaml 的
241
+ allowBuilds 下加对应 key,然后重跑
104
242
  4. 重启 dsh web,然后 F5 刷新浏览器
105
243
 
106
244
  安装后验证:
107
245
  - dsh --profile web --dump-config 应该能看到 dsh-whale-widget 在 bundles 里
108
246
  - curl http://127.0.0.1:3080/dsh-whale/balance.json 应返回 200 JSON(含 totalBalance)
109
247
  - curl http://127.0.0.1:3080/dsh-whale/widget.js 应返回 200 JS
248
+ - curl "http://127.0.0.1:3080/dsh-whale/audio-fragment.wav?id=exp_orb" 应返回 200 audio/wav
249
+ - curl "http://127.0.0.1:3080/dsh-whale/audio-fragment.wav?id=end_a" 也应返回 200 audio/wav
250
+ (用来确认资源包里的内置音效已随包就位;若是 404 说明 assets/ 不完整)
110
251
 
111
- 另外请检查 DSH 凭据里是否配置了 DEEPSEEK_API_KEY(没有就提示用户配置;DEEPSEEK_PLATFORM_TOKEN 可选,不配也能用默认的记账模式)。
252
+ 另外请检查 DSH 凭据里是否配置了 DEEPSEEK_API_KEY(没有就提示用户配置)。
112
253
  ```
113
254
 
114
- ### 关于令牌(安装后必读)
255
+ ## 凭据(安装后必读)
115
256
 
116
- > **默认不需要任何令牌。** 安装后只需配置 `DEEPSEEK_API_KEY`(拉取余额必需),「今日已用」会自动使用默认的**小鲸鱼记账**模式(余额差值本地记账),开箱即用。
117
- >
118
- > 「实时·令牌」模式用到的 `DEEPSEEK_PLATFORM_TOKEN`(DeepSeek 平台网页会话令牌)是**可选的**,仅在你想要更精确的实时用量换算时才需要配置。获取方式见下方「用量模式使用教程」。
257
+ 只需一个凭据:
258
+
259
+ - **`DEEPSEEK_API_KEY`(必需)**:DeepSeek API 密钥,用于拉取余额(`GET https://api.deepseek.com/user/balance`)。在 DSH 凭据服务里配置(凭据管理界面 / `.dsh/.credentials.yaml`)。
260
+
261
+ > **不需要** `DEEPSEEK_PLATFORM_TOKEN`。早期版本的"实时·令牌"模式已下线,今日已用统一由**小鲸鱼记账**(余额差 + 会话事件)计算,零令牌开箱即用。
262
+
263
+ 添加自定义模型时,还会按需用到各自厂商的凭据名(都可不配,用到哪个配哪个):
264
+
265
+ | 凭据名 | 用途 |
266
+ |---|---|
267
+ | `OPENROUTER_API_KEY` | OpenRouter 余额(`/api/v1/credits`) |
268
+ | `MOONSHOT_API_KEY` | Kimi / Moonshot 大陆站余额(人民币) |
269
+ | `MOONSHOT_INTL_API_KEY` | Kimi / Moonshot 国际站余额(美元,独立账号体系) |
270
+ | `SILICONFLOW_API_KEY` | 硅基流动 `/v1/models` 探活 |
271
+ | `ARK_API_KEY` | 火山方舟 `/api/v3/models` 探活 |
272
+ | `ZHIPU_API_KEY` | 智谱(订阅额度接口 / Coding 端点) |
273
+ | `OPENCODE_GO_API_KEY` | OpenCode Go 订阅额度(`opencode.ai/zen/go/v1/usage`,鉴权为 `Authorization: Bearer <key>`) |
274
+ | `CUSTOM_API_KEY` | 自定义 HTTP / OpenAI 兼容中转站 |
275
+
276
+ > ⚠️ 自定义模型面板里的「凭据名」决定密钥写进哪个 ref。换厂商时请确认这一栏跟着模板变了,否则新密钥会写进上一家厂商的凭据名里(覆盖掉原来的 key)。v679 起新增模型会自动跟随模板。
119
277
 
120
278
  ## 卸载
121
279
 
@@ -152,81 +310,77 @@ Remove-Item "$web\DSniang02.png" -ErrorAction SilentlyContinue
152
310
 
153
311
  清理后再执行上面的安装命令。
154
312
 
155
- ## 用量模式使用教程
156
-
157
- ### 必需的凭据
158
-
159
- - **`DEEPSEEK_API_KEY`**(必需):DeepSeek API 密钥,用于拉取余额(`api.deepseek.com/user/balance`)。在 DSH 凭据服务中配置即可(`dsh` 的凭据管理界面 / `.dsh/.credentials.yaml`)。
160
-
161
- ### 两种用量模式
162
-
163
- 挂件的「今日已用」有两种模式,在**菜单 → 用量**中选择:
164
-
165
- **① 小鲸鱼记账(推荐,默认)—— 完全不需要额外配置**
166
-
167
- 鲸鱼娘自己用**余额差值**记账:每次观测到余额下降就把差值累加到当天用量,跨天自动归零归档(保留 30 天);观测币种发生变化时只重置基准、不记差值(防止多币种账户切换污染账本)。只要配好了 `DEEPSEEK_API_KEY` 就能用,**开箱即用**。
168
-
169
- - 账本文件:`$DSH_HOME/.dshw-usage.json`(自动生成)
170
- - 优点:零配置、免令牌
171
- - 说明:依赖「观测到的余额下降」累计,若 DSH 关闭期间有消耗会漏记;要精确请用令牌模式
172
-
173
- **② 实时·令牌(可选)—— 需要 `DEEPSEEK_PLATFORM_TOKEN`**
174
-
175
- 鲸鱼娘直接调用 DeepSeek 平台用量接口,按**峰谷定价**实时换算今日已用,**精确到每小时的 token 用量**。
176
-
177
- **令牌在哪获取:**
178
- 1. 浏览器打开并登录 **https://platform.deepseek.com**
179
- 2. 按 **F12** 打开开发者工具 → 切到 **Network(网络)** 标签
180
- 3. 在平台页面点击「用量」或刷新页面,找到名为 `usage/by_api_key/amount` 的请求
181
- 4. 点开该请求 → **Request Headers(请求标头)** → 复制 `Authorization` 的值(形如 `Bearer eyJ...` 的一长串)
182
- 5. 把整段值(含 `Bearer` 前缀或只要后面的 token 部分均可)配置为 DSH 凭据 `DEEPSEEK_PLATFORM_TOKEN`:
183
- ```powershell
184
- # 在 DSH 凭据服务中设置,例如编辑 $env:USERPROFILE\.dsh\.credentials.yaml
185
- # DEEPSEEK_PLATFORM_TOKEN: <你复制的令牌>
186
- ```
187
- 6. 重启 `dsh web`,在**菜单 → 用量**里选择「实时·令牌」
188
-
189
- **说明:**
190
- - ⚠️ **令牌非必需**:不配置时挂件自动使用默认的「小鲸鱼记账」模式,功能不受影响
191
- - 该令牌是 DeepSeek **平台网页的会话令牌**(不是 `sk-` 开头的 API key),仅在登录平台网页时有效;重新登录后可能需要重新获取
192
- - 接口不返回金额,只返回 token 分桶,挂件会按内置峰谷定价表换算成金额;定价表在 `lib/index.js` 顶部 `PRICING` 常量,DeepSeek 调价时可自行修改
193
-
194
- ### 每轮对话消耗(无需任何凭据)
195
-
196
- 「每轮对话消耗统计」直接监听 DSH 本机会话事件,按模型真实 usage 换算金额(与今日已用同一套峰谷定价表),**不需要** `DEEPSEEK_PLATFORM_TOKEN`。
197
-
198
313
  ## 验证
199
314
 
200
315
  ```powershell
201
316
  dsh --profile web --dump-config | Select-String -Pattern "whale"
202
317
 
203
- curl http://127.0.0.1:3080/dsh-whale/image.png
204
318
  curl http://127.0.0.1:3080/dsh-whale/balance.json
205
319
  curl http://127.0.0.1:3080/dsh-whale/size.json
206
- curl http://127.0.0.1:3080/dsh-whale/last-turn.json
320
+ curl http://127.0.0.1:3080/dsh-whale/widget.js
321
+ curl http://127.0.0.1:3080/dsh-whale/image.png
322
+ curl http://127.0.0.1:3080/dsh-whale/audio.json
207
323
  ```
208
324
 
209
- - `/dsh-whale/image.png` → 200 `image/png`
210
- - `/dsh-whale/balance.json` → 200,含 `{"ok":true,"totalBalance":...,"currency":"CNY","todayUsage":...}`
325
+ - `/dsh-whale/balance.json` → 200 JSON,含 `{ok:true, totalBalance, currency, todayUsage}`
211
326
  - `/dsh-whale/size.json` → GET 返回配置;PUT 写入
212
- - `/dsh-whale/last-turn.json` → 200,含最近一轮对话消耗 `{seq, turn, amount, tokens}`
327
+ - `/dsh-whale/widget.js` → 200 JS(前端挂件本体)
328
+ - `/dsh-whale/image.png` → 200 `image/png`
329
+ - `/dsh-whale/audio.json` → 200,含 `groups` / `fragments`(其中内置片段 `exp_orb` = Minecraft·经验球、`end_a` = A)
330
+ - `/dsh-whale/audio-fragment.wav?id=exp_orb` → 200 `audio/wav`(内置任务结束音;无需用户导入)
331
+ - `/dsh-whale/audio-fragment.wav?id=end_a` → 200 `audio/wav`(内置任务结束音 A)
213
332
  - 浏览器 F5 后右下角出现挂件
214
333
 
334
+ > ⚠️ **关于上面这些 `curl`**:全部 21 个 `/dsh-whale/*` 路由现已接入 **DSH 浏览器信任栅栏**(`connection.requestRejection`)。
335
+ > 因此**不带会话凭据的裸 `curl` 会返回 401**(伪造 `Host` 头则是 403)—— 这是预期行为,不是接口坏了。
336
+ > 想验证接口是否存活,看返回 **401/403** 即说明路由已注册且栅栏在工作;在浏览器里访问同一条路径(带会话)才是 200。
337
+
215
338
  ## 常见问题
216
339
 
217
- - **挂件不出现**:确认 `dsh plugin add` 成功;`dsh --profile web --dump-config` 里能看到 `dsh-whale-widget`;重启 `dsh web` 后 F5。
218
- - **图片不显示**:确认 `assets/DSniang1.png` 在插件包内,且没有把旧文件放在 profile 里占用了同名路由。
219
- - **余额报「未配置 DEEPSEEK_API_KEY」**:去 DSH 配置凭据。
220
- - **今日已用显示 --**:记账模式下需要先跑一次余额观测(60 秒内自动完成);令牌模式需要配置 `DEEPSEEK_PLATFORM_TOKEN`。
221
- - **每轮消耗不显示**:确认菜单「每轮对话后自动显示消耗金额」已勾选;一轮对话必须完整结束(turn/end)才会结算。
222
- - **没有声音**:确认 `assets/*.mp3` 在包内;若不想带音效文件,静默降级为无声音。
223
- - **本地开发改了代码不生效**:使用 `link:` 安装时,修改源码后重启 `dsh web`(ESM 模块缓存);如果用已发布版本,需要 `npm publish` 新版本后 `dsh plugin --profile web update dsh-whale-widget`。
224
- - **自定义图片**:气泡由代码绘制(SVG),鲸鱼本体为 cut-out PNG,放在右下角 59.45%;换图需保证透明背景 cut-out,否则按 `whale-widget-prompt.md` 调整几何参数。
340
+ - **挂件不出现**:确认安装命令成功;`dsh --profile web --dump-config` 里能看到 `dsh-whale-widget`;重启 `dsh web` 后 F5。
341
+ - **图片/音效不显示、没声音**:确认插件包内 `assets/` 完整(`DSniang1.png`、`*.mp3`、`minecraft-exp-orb.wav` 等);缺失时相关功能静默降级。
342
+ - **余额报「未配置 DEEPSEEK_API_KEY」**:去 DSH 凭据里配置。
343
+ - **今日已用显示 `--`**:先等一次成功的余额观测;统计从该观测时刻开始,起点之前的消费不在此区间内。
344
+ - **今日已用与官网有差异**:先核对同一账户、同一币种与同一统计区间;若有充值或其它余额调整,用「小鲸鱼记账 → 充值 / 余额校正」填写实际到账金额。余额接口只返回余额快照、不提供充值流水,充值与消费发生在同一次刷新间隔时需要实际到账金额才能校正。
345
+ - **充值后消费数字没变**:这是预期行为——充值不会增加消费;数字上方会出现「待核对余额调整」,提示你补充本统计区间的累计到账金额。
346
+ - **每轮消耗不显示**:确认菜单里「每轮对话后自动显示消耗金额」已勾选;一轮对话要完整结束(`turn/end`)才结算。余额变化泡泡与消耗泡泡抢层时,提醒会退化为居中卡片。
347
+ - **每轮消耗泡泡的内容**:菜单 每轮消耗提示 「自定义提示」里编辑(模块化,金额用 `{cost}`);这里同时能设自动关闭秒数与任务结束音效。
348
+ - **任务结束音没响**:该开关默认**关闭**(默认已选中内置的 Minecraft·经验球;另有内置预设 **A** 可选);到菜单 → 每轮消耗提示 → 「自定义提示」里打开即可。若自定义片段文件被删,会回退/静音。
349
+ - **手机上拖不动鲸鱼**:本版本已用触摸事件接管拖拽,请硬刷新页面拿到最新 `whale-widget.js`;仍不行请反馈浏览器型号。
350
+ - **隐藏了菜单按钮怎么进菜单**:电脑端右键鲸鱼,手机端长按鲸鱼约 1.5 秒。
351
+ - **改了前端代码不生效**:前端 `assets/whale-widget.js` 由宿主按 mtime 热读取,**硬刷新**(Ctrl+F5)即可;改了宿主 `lib/index.js` 必须**重启 `dsh web`**。
352
+ - **模型名看不懂**:账本记录的是 API 模型 id;`deepseek-flash` 即 DeepSeek-V4.1-Flash,旧名 `deepseek-v4-flash` / `-vision-exp` 现在也由同一颗 V4.1-Flash 提供并按 Flash 计价(面板里已加标注)。
353
+
354
+ ## 定价表
355
+
356
+ 金额按 **CNY / 百万 tokens** 计,`[空闲时段, 高峰时段]`;高峰 = 工作日 9:00–12:00、14:00–18:00(北京时间),空闲价为高峰价的一半;2026-08-23 起周末全天按谷价。表在 `lib/index.js` 顶部 `PRICING` / `BASE_PRICE` / `PRO_PRICE`,官方调价时改这里。
357
+
358
+ | 模型 | 缓存命中 | 缓存未命中 | 输出 |
359
+ |---|---|---|---|
360
+ | `deepseek-flash`(DeepSeek-V4.1-Flash) | 0.02 / 0.04 | 1 / 2 | 4 / 8 |
361
+ | `deepseek-v4-pro`(V4 Pro) | 0.15 / 0.30 | 4.5 / 9.0 | 13.5 / 27.0 |
362
+
363
+ > 旧模型名 `deepseek-v4-flash`、`deepseek-v4-flash-vision-exp` 仍可调用,按 Flash 价计费。
225
364
 
226
365
  ## 开发与维护
227
366
 
228
- 完整规格、视觉参数、架构结论和生成提示词见 `whale-widget-prompt.md`。修改文字位置、颜色、动画、吸附逻辑、台词组或定价表时参考该文件。
367
+ - 仓库里 `lib/index.js` 是宿主本体、`lib/accounting.mjs` 是记账内核(定点金额运算 + 观测/校正账本)、`assets/whale-widget.js` 是前端本体;宿主改动(含记账内核)需重启 `dsh web`,仅前端改动硬刷新页面即生效。
368
+ - 完整规格、视觉参数、路由清单、架构结论与生成提示词见 [`whale-widget-prompt.md`](whale-widget-prompt.md)。
369
+ - 本地联调:`dsh plugin --profile web add link:.` 后,改前端 → Ctrl+F5;改宿主 → 重启 `dsh web`。
370
+
371
+ ## 致谢
372
+
373
+ - 充值记账修复方案(余额上升与下降分开记账、显式余额校正公式、按账户/币种隔离观测窗口、账本原子写入与迁移备份)由 GitHub 用户 [@Yang-huai406](https://github.com/Yang-huai406) 独立设计并实现为可运行的修复分支;**0.3.1 在该方案基础上移植合并**,并保留本项目既有的音效修复。感谢他的支持。
374
+ - OpenCode Go 订阅额度(多窗口额度 `quota.json.windows`、按窗口展示与紧凑重置倒计时、「订阅额度」模块的窗口选择)由 GitHub 用户 [@ELFsay](https://github.com/ELFsay) 提交([#99](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/99)),已合入 `main`。感谢他的贡献。
375
+ - **历史合并 PR 的贡献者**(按合入顺序,均已进入本仓库代码 / 发布流程):
376
+ - [@ztzpro](https://github.com/ztzpro)([#1](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/1)):把余额小鲸鱼挂件**改造成标准 DSH 插件包**(今天的 `cordis.patch.yml` + bundle 结构就来自这里);
377
+ - [@under-the-ocean](https://github.com/under-the-ocean)([#6](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/6) / [#7](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/7)):push 触发**自动发布 npm**、升级 npm 以支持 Trusted Publishing(OIDC)—— 现在的发版流程仍是这套;
378
+ - [@21253soursweetlemon](https://github.com/21253soursweetlemon)([#16](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/16) / [#18](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/18)):gif 加载失败降级为文字台词、右缘滚动条避让、**锚点位置记忆**(窗口变化不悬空、能吸回原位 —— 位置系统的起点);
379
+ - [@fangbm](https://github.com/fangbm)([#15](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/15) / [#19](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/19) / [#31](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/31) / [#33](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/33) / [#46](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/46)):多币种余额顺序稳定、每轮消耗泡泡两处缺陷、**周末全天谷价**、记账币种感知、发布时自动建 Release 并生成 PR changelog;
380
+ - [@xiaolinnnnnnn](https://github.com/xiaolinnnnnnn)([#26](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget/pull/26)):Windows 桌面端(Tauri v2)重构。
229
381
 
230
382
  ## 许可证
231
383
 
232
- 本项目基于 **MIT License** 开源,详见 [LICENSE](LICENSE)。
384
+ 本项目**代码**基于 **MIT License** 开源,详见 [LICENSE](LICENSE)。
385
+
386
+ ⚠️ **`assets/` 下的美术素材(图片 / 动图 / 音效)不在 MIT 覆盖范围内**:它们由维护者提供或使用 AI 工具生成,按「原样(as-is)」随插件分发、仅供运行本插件使用,不授予再许可、也不声明为原创作品。逐项来源、元数据清理说明与权利主张(takedown)方式见 **[PROVENANCE.md](PROVENANCE.md)**。
package/assets/DSH2.png CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file