balance-dsh 2.1.2 → 2.1.3
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/README.md +4 -2
- package/lib/index.js +18 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,9 +90,11 @@ token 数用官方文档站「图片 Token 计算器」的同一套算法估算
|
|
|
90
90
|
|
|
91
91
|
整张卡片可以收起(点标题一行展开 / 折叠)。**没有保存按钮**,改动后约 0.35 秒自动保存,左下角依次显示「修改中… → 保存中… → 已保存」;点「恢复默认」立刻写回全部默认值。设置存放在你的 `.dsh` 目录下的 `balance-dsh.json`。
|
|
92
92
|
|
|
93
|
-
### `/balance` 命令
|
|
93
|
+
### `/balance-dsh-rannist` 命令
|
|
94
94
|
|
|
95
|
-
在对话里输入 `/balance` 查询余额明细和当前会话消耗。
|
|
95
|
+
在对话里输入 `/balance-dsh-rannist` 查询余额明细和当前会话消耗。
|
|
96
|
+
|
|
97
|
+
命令名带作者后缀是刻意的:DSH 的命令名全局唯一,`/balance` 这类通用名会和别的余额插件撞车(先注册的赢、后来的整条命令消失),所以用全名、不设备用名。注意 DSH 只接受**小写**命令名,写成大写会在注册时被判非法。
|
|
96
98
|
|
|
97
99
|
## 使用统计口径
|
|
98
100
|
|
package/lib/index.js
CHANGED
|
@@ -758,7 +758,13 @@ function formatBalance(balance) {
|
|
|
758
758
|
// | { status:"failed" } (网络失败;官方明确“失败绝不变成 0 余额”)
|
|
759
759
|
// client 是 AccountClientMetadata(version / locale / timezoneOffsetSeconds),
|
|
760
760
|
// 缺字段会在平台侧组装请求头时抛错,所以三个字段都要给。
|
|
761
|
-
const PLUGIN_VERSION = "2.1.
|
|
761
|
+
const PLUGIN_VERSION = "2.1.3";
|
|
762
|
+
|
|
763
|
+
/** 斜杠命令名(2026-10-31 定案:用带作者后缀的全名,避免和别的余额插件撞车,也不设备用名)。
|
|
764
|
+
* ⚠️ DSH 的 COMMAND_NAME = /^[a-z][a-z0-9_-]*$/u —— **只允许小写**。
|
|
765
|
+
* 写成 balance-dsh-Rannist 会在 normalizeDefinition 里抛 TypeError,整条命令直接消失,
|
|
766
|
+
* 所以这里落成小写;界面里输入 `/balance-dsh-rannist` 即可。 */
|
|
767
|
+
const COMMAND_NAME = "balance-dsh-rannist";
|
|
762
768
|
|
|
763
769
|
/** 磁盘上**实际安装**的版本号。
|
|
764
770
|
*
|
|
@@ -3111,7 +3117,7 @@ async function sumSubagentUsage(ctx, sessionId, config) {
|
|
|
3111
3117
|
function formatUsage(usage, pricing, multiplier = 2, model = "") {
|
|
3112
3118
|
// ⚠️ usage 为 null 时绝不许直接解引用(2026-10-31 全量审查)。
|
|
3113
3119
|
// sumSessionUsage 在会话还在装载 / 事件为空时会返回 null,
|
|
3114
|
-
//
|
|
3120
|
+
// 而命令处理把 usage 直接传进来 —— 下面一行 usage.byModel 就是 TypeError,
|
|
3115
3121
|
// 整个命令面板报错。命令只是查看入口,拿不到数字就说一句话。
|
|
3116
3122
|
if (usage == null || typeof usage !== "object") {
|
|
3117
3123
|
return "当前会话消耗:暂时无数据(会话可能还在加载,稍后再试)";
|
|
@@ -3301,13 +3307,17 @@ let statsInFlight = null;
|
|
|
3301
3307
|
await refreshCnCalendar(ctx, false);
|
|
3302
3308
|
});
|
|
3303
3309
|
|
|
3304
|
-
// 1)
|
|
3310
|
+
// 1) 命令行查询入口。命令名**必须是插件专属的**(2026-10-31 用户反馈:
|
|
3311
|
+
// 「这个指令跟好多插件冲突了」)—— DSH 的命令名是全局唯一的,注册重名会抛
|
|
3312
|
+
// `command "x" is already registered`,先注册的那个赢、后来的整条命令消失。
|
|
3313
|
+
// 所以直接用带作者后缀的全名,不设备用名(用户 2026-10-31 定案)。
|
|
3314
|
+
// ⚠️ DSH 的命令名规则是 COMMAND_NAME = /^[a-z][a-z0-9_-]*$/u,**只允许小写**,
|
|
3315
|
+
// 写成大写 Rannist 会在 normalizeDefinition 里抛 TypeError、整条命令消失,
|
|
3316
|
+
// 所以这里落成小写的 balance-dsh-rannist。
|
|
3305
3317
|
ctx.inject(["commands"], (commandCtx) => {
|
|
3306
|
-
// register 抛错(命令名冲突 / API 变更)只影响 /balance 命令本身,
|
|
3307
|
-
// 不能让它中止 bootstrap —— 余额行和消耗行都不走命令通道。
|
|
3308
3318
|
try {
|
|
3309
3319
|
commandCtx.commands.register({
|
|
3310
|
-
name:
|
|
3320
|
+
name: COMMAND_NAME,
|
|
3311
3321
|
description: "查询 DeepSeek 余额与当前会话消耗",
|
|
3312
3322
|
handler: async ({ agent, signal }) => {
|
|
3313
3323
|
const usage = sumSessionUsage(agent.session, effectiveConfig);
|
|
@@ -3334,7 +3344,7 @@ let statsInFlight = null;
|
|
|
3334
3344
|
},
|
|
3335
3345
|
});
|
|
3336
3346
|
} catch (error) {
|
|
3337
|
-
runQuietly("注册 /
|
|
3347
|
+
runQuietly("注册 /" + COMMAND_NAME + " 命令", () => {
|
|
3338
3348
|
throw error;
|
|
3339
3349
|
});
|
|
3340
3350
|
}
|
|
@@ -3423,8 +3433,7 @@ let statsInFlight = null;
|
|
|
3423
3433
|
wantUpdate = false;
|
|
3424
3434
|
}
|
|
3425
3435
|
if (wantUpdate) {
|
|
3426
|
-
if (req.method === "POST") {
|
|
3427
|
-
// ⚠️ 必须和设置写入同一道同源校验(2026-10-31 第二十二轮审计):
|
|
3436
|
+
if (req.method === "POST") { // ⚠️ 必须和设置写入同一道同源校验(2026-10-31 第二十二轮审计):
|
|
3428
3437
|
// 这条分支会真的下载 npm 包并覆盖插件安装目录。少了校验,本机任意网页
|
|
3429
3438
|
// 用一个 text/plain 的简单请求就能触发写盘(CSRF)。
|
|
3430
3439
|
if (!isSameOriginJsonRequest(req)) {
|