dsh-workbuddy-xdpool 1.7.0 → 1.7.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/CHANGELOG.md CHANGED
@@ -4,6 +4,151 @@
4
4
 
5
5
  版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
6
6
 
7
+ ## 1.7.1 (2026-09-28)
8
+
9
+ 一句话:**你存进去的设置,终于会在重启后真的生效了。顺带让那些甩不掉的失效账号可以永久请出去。**
10
+
11
+ 这一版修的都是社区朋友报的问题([#17](https://github.com/XDTrees/dsh-workbuddy-xdpool/issues/17)、
12
+ [#18](https://github.com/XDTrees/dsh-workbuddy-xdpool/issues/18)、
13
+ [#19](https://github.com/XDTrees/dsh-workbuddy-xdpool/issues/19)),症状各不一样,
14
+ 但核心都是同一句话:**「我明明设置过了,它当没看见。」**
15
+
16
+ ### 一、重启一次,设置就白设一次
17
+
18
+ **你会看到**:把账号使用方式调成「轮换模式」、把积分自动化打开、模型只勾了三四只……
19
+ 配置明明写进文件了,重启 DSH 一看 —— 模式跳回「优先」,自动化显示「已关闭」,
20
+ 模型**全部打勾**。改一次、重启一次、退一次,堪称赛博西西弗斯。
21
+
22
+ **最关键的线索**(也是报问题那位朋友观察得最准的地方):**同一张卡片上,
23
+ 「今日自动化」的收益账本能正常显示**(签到 +200、猫猫旅行 +26 都在)。
24
+
25
+ 账本读得出来、开关却是关的 —— 说明配置**读得到**,只是**没人去用它**。
26
+ 就好比你钥匙插得进去,但没人转那一下。
27
+
28
+ **为什么**:负责把配置写到「池子 / 模型目录 / 自动化」这三个地方的那个函数,
29
+ 只在**两个事件回调**里被调用:设置变更时(0.1.5)和热更新时(0.1.7)。
30
+
31
+ 问题就在这儿 —— 这俩都是**事件**,开机那一刻谁都不响。
32
+ 而 0.1.7 上那个 `configure({auto})` 只管登记「这个插件有个设置页」,
33
+ **既不读值也不写值**。于是三条线全停在出厂默认值上,配置文件孤零零躺在磁盘上,
34
+ 写得一丝不苟,就是没人理它。
35
+
36
+ 顺带这也解释了一个「灵异现象」:为什么**退回旧版反而正常** ——
37
+ 旧版走的是另一条路(`onChange`),开机时会被触发一次。
38
+
39
+ **怎么修的**:开机时老老实实调用一次,就一行。回归测试专门盯着「这行必须是
40
+ 开机就执行的独立语句」,防止以后有人手滑把它挪回回调里。
41
+
42
+ ### 二、自动化开关亮着「已开启」,实际一个任务都不跑
43
+
44
+ **你会看到**:开关明明开着,界面也没报错,但**所有任务永远不会触发**。
45
+ 一个安静的、什么都不做的自动化。薛定谔的积分。
46
+
47
+ **为什么**:一条自我强化的四段链条,每一环都在帮倒忙:
48
+
49
+ 1. 配置结构里把时间表写成了「可选数组」,于是**「没设置」被自动填成了空数组 `[]`** ——
50
+ 从此「我没配」和「我故意配成空」长得一模一样;
51
+ 2. 调度器看到 `[]` 觉得「这是个有效值」,欣然采纳,**内置的默认时间表永远用不上**;
52
+ 3. 判断「该不该跑」时看到空数组,直接回一句「不跑」——**永远地**;
53
+ 4. 卡片在回写配置时**漏掉了「猫猫旅行」的时间**,还把空数组原样写了回去。
54
+
55
+ 于是文件被**固化**成空的,而且**你在界面上怎么点都修不好**——
56
+ 因为界面永远只会写回空数组。死循环。
57
+
58
+ **怎么修的**:空数组一律当作「没设置」,回落到默认时间表
59
+ (签到 9 点、上报 10 点、任务 11 点、连登 12 点,猫猫旅行早晚各一趟 9 点和 21 点);
60
+ 三个地方都改(构造、应用配置、卡片回写),并把时间表抽成**两端共用的一份**——
61
+ 宿主和浏览器代码没法互相引用,写两份迟早会漂移,那种漂移还特别隐蔽。
62
+ 顺手把「猫猫旅行永远写不回去」也修了。
63
+
64
+ ### 三、模型选择一丢,就给你「全选」
65
+
66
+ **你会看到**:本来精挑细选勾了三四只模型,某天打开一看——**全勾上了**,
67
+ 而且**真正生效的也真的变成了全部**。你的精简清单变成了自助餐。
68
+
69
+ **为什么**:「没有选择」和「选择丢了」这两种情况,在代码里长得**一模一样**
70
+ (都是 `undefined`)。而它的兜底是个**空对象**,空对象翻译过来恰好是
71
+ **「全部启用」**。
72
+
73
+ 所以一旦选择丢失,系统不是「保持不变」,而是**朝最离谱的方向**——
74
+ 把你有意关掉的模型全放出来。
75
+
76
+ **怎么修的**:兜底改成「**沿用现在正在生效的那份选择**」。
77
+ 丢了就丢了,至少不会变成「全开」。丢失只会原地不动,不会放飞自我。
78
+
79
+ ### 四、失效账号终于可以彻底请出去
80
+
81
+ **这个不是 bug,是缺功能**。池子里混着国内版和国际版账号,国际版更容易触发风控。
82
+ 一旦某个号废了,它就一直赖在池子里 —— 而且**没有任何办法把它彻底弄走**。
83
+
84
+ 现有三条路都不行:「停用」只是让它不参与轮换(**账号还在卡片上、凭据文件还会被读取**);
85
+ 命令行 `remove` 只对你手动导入的快照有效;`disabledAccountIds` 同样是「排除轮换」,
86
+ 不是「移除」。
87
+
88
+ 最要命的是:**只要你在桌面 App 里再登一次这个号,它就又回来了**。打地鼠。
89
+
90
+ **怎么修的**:新增**「移出池子」**,和「暂时停用」明确分开:
91
+
92
+ - **卡片**上每个账号多了个「移出池子」按钮,下面还有一块「**已移出的账号**」——
93
+ 每条都能**恢复**。移除不是单向门,点错了能找回来;
94
+ - **命令行**同步支持 `ignore` / `unignore` / `ignored`,`accounts` 也会列出已移出的号
95
+ (不然账号凭空消失,你还以为插件坏了);
96
+ - 被移出的账号**连凭据都不再读取**,所以它**不会在你重新登录后又偷偷溜回来**。
97
+
98
+ 关于「为什么不干脆把凭据文件删掉」:那个文件就是桌面 App 当前登录的凭证,
99
+ 删了会把 App 一起登出;而且下次登录它还会生成回来。属于既伤人、又没用。
100
+
101
+ 移出名单存在插件自己的文件里(`~/.dsh/.workbuddy-xdpool/ignored.json`),
102
+ 这样**命令行和卡片读写的是同一份**——不然会出现「卡片能改、终端改不了」的尴尬。
103
+
104
+ ### 五、国际版模型的「倍率」和「免费」标记回来了
105
+
106
+ **你会看到**:国际版那几个模型的倍率(`x0.79` 这种)和「免费」标签不见了。
107
+ 光秃秃一行模型名,看着像没人管的弃儿。
108
+
109
+ **为什么**(这个是拉了真实接口逐字段对出来的,两个毛病叠加):
110
+
111
+ 1. 上游**明明发了** `tags` 字段,但我们的解析代码**从头到尾就没读它**——
112
+ 读的时候没读,转换的时候又丢一次。所以卡片的标签逻辑**对两个平台的所有模型
113
+ 都不可能命中**,白写了;
114
+ 2. 「免费」一直在等一个叫 `free` 的标签出现,而**两个平台从来没发过这种标签**
115
+ (实测标签是 `craft`、`text-to-image` 这类东西)。
116
+ 真正的「免费」写法是 **`credits: "x0.00"`**——国际版有三只模型就是零费率,
117
+ 它们一直免费,我们一直不知道。
118
+
119
+ **怎么修的**:把 `tags` 老老实实读进来传下去;「免费」改成**看倍率是不是 0**
120
+ (谁也不会为了 0 费率专门发个标签);倍率是 0 的时候**不再显示「x0.00 积分」**——
121
+ 零费率的免费模型旁边挂个 0,还不如干脆说"免费"。
122
+
123
+ 另外给「静态兜底列表」也补上了倍率:以前上游一抽风就回退到那份没倍率的列表,
124
+ 表现就是「倍率突然全没了」,你还以为是插件坏了,其实只是网络打了个嗝。
125
+
126
+ ### 六、顺便修了一个让我很尴尬的事
127
+
128
+ 上一版我说「可以了」,结果有人(其实就是我)改完代码**只改了源码仓库,
129
+ 忘了同步到 DSH 真正加载的那个目录**。所以怎么重启都看不到新按钮——
130
+ 代码在隔壁房间好好地跑着,你在这边找。
131
+
132
+ 这版已经同步部署,并留了备份可以回退。
133
+
134
+ ### 验证
135
+
136
+ - 类型检查全绿,测试 **248 项全绿**(原 222 + 新增 26)。
137
+ - 新增的两个测试文件**逐项做了反向验证**:把修复**撤回**去,测试必须变红
138
+ (撤回一处 → 1 项红;撤回另一处 → 2 项红;撤回忽略过滤 → 1 项红;
139
+ 撤回标签读取 → 3 项红)。确认这些测试不是"闭着眼睛也全绿"的装饰品。
140
+ - 拿**真实构建产物**跑端到端:空时间表能解析出默认值、被移出的账号在
141
+ **凭据文件还在的情况下不会被重新扫描进来**、恢复后能回来。
142
+ - 拿**真实的国际版接口数据**跑完整解析链,确认倍率和免费标记的实际渲染结果
143
+ (20 个模型有倍率、3 个正确识别为免费)。
144
+
145
+ ### 最后
146
+
147
+ 感谢 [@hmtime](https://github.com/hmtime) 提交 #17 / #18。
148
+ 报告里「配置读得到、但没被应用」和「账本能显示、开关却是关的」这两句
149
+ 几乎是直接指向了根因 —— 光看现象的话,很容易一头扎进"肯定是写入失败了"的坑里
150
+ 查半天。这样的报告质量,值得一版单独的更新日志来谢。
151
+
7
152
  ## 1.7.0 (2026-09-25)
8
153
 
9
154
  一句话:**这一版终于能在 DSH 0.1.7 上活下来了,顺带把设置入口搬进了左栏、把页面重新排了一遍。**