@eddyskywalker/dsh-chatgpt-subscription 0.11.7 → 0.12.2
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 +619 -776
- package/README.md +34 -2
- package/lib/client.js +141 -5
- package/lib/client.js.map +1 -1
- package/lib/index.js +2879 -1541
- package/lib/types/client/CodexSubscriptionSection.d.ts +18 -0
- package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
- package/lib/types/client/kimi-code/KimiCodeSection.d.ts.map +1 -1
- package/lib/types/client/kimi-code/KimiModelCapabilities.d.ts.map +1 -1
- package/lib/types/client/kimi-code/locales.d.ts +11 -2
- package/lib/types/client/kimi-code/locales.d.ts.map +1 -1
- package/lib/types/client/kimi-code/styles.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +45 -5
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/host/antigravity/mapper.d.ts +3 -2
- package/lib/types/host/antigravity/mapper.d.ts.map +1 -1
- package/lib/types/host/antigravity/tool-schema.d.ts +13 -1
- package/lib/types/host/antigravity/tool-schema.d.ts.map +1 -1
- package/lib/types/host/claude/mapper.d.ts +57 -3
- package/lib/types/host/claude/mapper.d.ts.map +1 -1
- package/lib/types/host/codex-fetch.d.ts.map +1 -1
- package/lib/types/host/common/idle-watchdog.d.ts +10 -0
- package/lib/types/host/common/idle-watchdog.d.ts.map +1 -1
- package/lib/types/host/common/prompt-estimate.d.ts +22 -0
- package/lib/types/host/common/prompt-estimate.d.ts.map +1 -0
- package/lib/types/host/common/request-images.d.ts +130 -0
- package/lib/types/host/common/request-images.d.ts.map +1 -0
- package/lib/types/host/common/tool-schema.d.ts +27 -0
- package/lib/types/host/common/tool-schema.d.ts.map +1 -0
- package/lib/types/host/common/video-request.d.ts +81 -0
- package/lib/types/host/common/video-request.d.ts.map +1 -0
- package/lib/types/host/common/video.d.ts +90 -0
- package/lib/types/host/common/video.d.ts.map +1 -0
- package/lib/types/host/fetch-address-policy.d.ts +2 -1
- package/lib/types/host/fetch-address-policy.d.ts.map +1 -1
- package/lib/types/host/fetch-configuration.d.ts +6 -0
- package/lib/types/host/fetch-configuration.d.ts.map +1 -0
- package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
- package/lib/types/host/kimi-code/cache-hint.d.ts +76 -0
- package/lib/types/host/kimi-code/cache-hint.d.ts.map +1 -0
- package/lib/types/host/kimi-code/client.d.ts +36 -1
- package/lib/types/host/kimi-code/client.d.ts.map +1 -1
- package/lib/types/host/kimi-code/mapper.d.ts +118 -145
- package/lib/types/host/kimi-code/mapper.d.ts.map +1 -1
- package/lib/types/host/kimi-code/modalities.d.ts +9 -80
- package/lib/types/host/kimi-code/modalities.d.ts.map +1 -1
- package/lib/types/host/kimi-code/routes.d.ts +8 -0
- package/lib/types/host/kimi-code/routes.d.ts.map +1 -1
- package/lib/types/host/kimi-code/token-store.d.ts +30 -1
- package/lib/types/host/kimi-code/token-store.d.ts.map +1 -1
- package/lib/types/host/kimi-code/video-store.d.ts.map +1 -1
- package/lib/types/host/minimax-code/adapter.d.ts +8 -1
- package/lib/types/host/minimax-code/adapter.d.ts.map +1 -1
- package/lib/types/host/minimax-code/files-api.d.ts +117 -0
- package/lib/types/host/minimax-code/files-api.d.ts.map +1 -0
- package/lib/types/host/minimax-code/mapper.d.ts +50 -25
- package/lib/types/host/minimax-code/mapper.d.ts.map +1 -1
- package/lib/types/host/minimax-code/modalities.d.ts +20 -0
- package/lib/types/host/minimax-code/modalities.d.ts.map +1 -0
- package/lib/types/host/minimax-code/model-catalog.d.ts +27 -11
- package/lib/types/host/minimax-code/model-catalog.d.ts.map +1 -1
- package/lib/types/host/minimax-code/types.d.ts +10 -0
- package/lib/types/host/minimax-code/types.d.ts.map +1 -1
- package/lib/types/host/routes.d.ts +2 -2
- package/lib/types/host/routes.d.ts.map +1 -1
- package/lib/types/host/search-provider-switcher.d.ts +2 -0
- package/lib/types/host/search-provider-switcher.d.ts.map +1 -1
- package/lib/types/index.d.ts +8 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/shared/contracts.d.ts +11 -0
- package/lib/types/shared/contracts.d.ts.map +1 -1
- package/lib/types/shared/kimi-code-contracts.d.ts +65 -0
- package/lib/types/shared/kimi-code-contracts.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,776 +1,619 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## Unreleased
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- **验证**:`tsc -b --force` 与 test
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
-
|
|
150
|
-
|
|
151
|
-
- **
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
-
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
|
|
167
|
-
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
-
|
|
184
|
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
- **
|
|
213
|
-
-
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
-
|
|
218
|
-
-
|
|
219
|
-
|
|
220
|
-
-
|
|
221
|
-
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
|
|
228
|
-
-
|
|
229
|
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
-
|
|
236
|
-
|
|
237
|
-
-
|
|
238
|
-
|
|
239
|
-
-
|
|
240
|
-
|
|
241
|
-
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
-
|
|
258
|
-
|
|
259
|
-
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
-
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
- **
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
-
|
|
283
|
-
-
|
|
284
|
-
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
-
|
|
290
|
-
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
|
|
305
|
-
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
-
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
-
|
|
341
|
-
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
-
|
|
358
|
-
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
-
|
|
372
|
-
-
|
|
373
|
-
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
-
|
|
377
|
-
-
|
|
378
|
-
-
|
|
379
|
-
|
|
380
|
-
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
-
|
|
384
|
-
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
-
|
|
396
|
-
|
|
397
|
-
-
|
|
398
|
-
-
|
|
399
|
-
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
-
|
|
406
|
-
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
-
|
|
410
|
-
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
-
|
|
414
|
-
|
|
415
|
-
-
|
|
416
|
-
|
|
417
|
-
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
-
|
|
421
|
-
|
|
422
|
-
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
-
|
|
432
|
-
-
|
|
433
|
-
|
|
434
|
-
-
|
|
435
|
-
|
|
436
|
-
-
|
|
437
|
-
-
|
|
438
|
-
-
|
|
439
|
-
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
-
|
|
448
|
-
|
|
449
|
-
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
-
|
|
462
|
-
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
-
|
|
468
|
-
-
|
|
469
|
-
|
|
470
|
-
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
-
|
|
477
|
-
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
-
|
|
484
|
-
|
|
485
|
-
-
|
|
486
|
-
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
-
|
|
490
|
-
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
-
|
|
498
|
-
-
|
|
499
|
-
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
-
|
|
507
|
-
-
|
|
508
|
-
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
-
|
|
512
|
-
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
-
|
|
522
|
-
-
|
|
523
|
-
|
|
524
|
-
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
-
|
|
529
|
-
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
-
|
|
536
|
-
-
|
|
537
|
-
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
-
|
|
543
|
-
-
|
|
544
|
-
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
-
|
|
561
|
-
-
|
|
562
|
-
-
|
|
563
|
-
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
-
|
|
589
|
-
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
-
|
|
598
|
-
-
|
|
599
|
-
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
- **修复 `buildModelOptions` 丢弃目录能力的问题**:`supportsVideo` 与 `minimumPlan` 此前被硬编码为 `false`/`null`,`description` 恒为 `null`——即实时目录与静态注册表已知的信息被直接丢掉。现在按「实时目录 > 静态注册表」取值,视频输入标记与描述都能正确显示。
|
|
621
|
-
- 关于截图里两个特殊能力的说明(已核对官方文档与实测资料,并据此决定是否接入):
|
|
622
|
-
- **视频输入**:`k3` 与 `kimi-for-coding` 确实支持视频,`k3-256k` **只支持图片**。但 **DSH 的模态词汇表只有 `text` 与 `image` 两项**(`ModelModalityMap`),没有 video——若谎报支持视频,DSH 会把无法投递的字节交给该线路。因此**不将其声明为可发送模态**,只在模型提示与能力行中如实标注,避免误导。
|
|
623
|
-
- **`dynamically_loaded_tools`**:这是 K3 的独有能力,允许在会话中途以「不含 content 的 `system` 消息 + `tools` 数组」注入额外工具定义,从而让顶层工具列表保持小而稳定(`system`/`tools` 属于缓存前缀,改动会使整个前缀缓存失效)。DSH 没有对应概念,本插件也无法从适配器层注入消息,因此**仅作展示说明**,不实现——这也解释了为什么官方把工具集稳定性作为优化建议。
|
|
624
|
-
- 依据官方文档与实测数据补齐 K3 系列的能力、参数与优化(新增 `test/kimi-code-k3.test.ts`,31 条):
|
|
625
|
-
- **保留思考 (Preserved Thinking) 默认开启**。官方 CLI 的默认是 `[thinking] keep = "all"`,即服务会跨轮保留推理内容——其错误参考里要求「每个缺 `reasoning_content` 的 assistant 消息都要补上」正以此为前提。此前我们只在**带工具调用**时回传 `reasoning_content`,普通文本轮次不带,这既与官方 `keep=all` 的约定不符,也在长会话里丢失了多轮推理的连贯性。现在思考开启时(含未显式指定档位,因为模型默认就推理)**每条 assistant 消息都写该字段**,无推理时写空串(服务要求的正是空值而非省略);思考关闭则完全不写。可用 `DSH_KIMI_CODE_PRESERVE_THINKING=0` 关闭,卡片会显示当前状态。
|
|
626
|
-
- **输出上限改为跟随上下文窗口**(`maxOutputTokensFor(modelId, contextWindow)`)。`reasoning_content` 计入输出,而此前固定 32768 的上限会把 `max` 档的长思考**中途截断**并返回 `length`;官方客户端是按窗口封顶(并夹到 窗口 − prompt)——这正是官方文档所说「官方 kimi-code 行为」的 `computeCompletionBudgetCap`。现在按窗口封顶并保留 4096 余量,同时不低于模型声明的下限,避免小窗口把答案饿死。
|
|
627
|
-
- **新增请求前夹取**(`clampOutputToContext` + `estimatedInputTokens`):调用方若已知 prompt 规模,`max_tokens` 会被下调到 prompt + 输出可容纳;prompt 规模未知时**不做猜测**——猜小会截断推理、猜大被直接拒绝,只有服务知道真实大小。
|
|
628
|
-
- **请求体超过 2 MB 时本地拒绝**(`assertRequestBodyFits`)。这是该端点最常被触发的 400(`total message size N exceeds limit 2097152`),官方文案不给出路;现在按真实序列化体积判断并直接提示「压缩会话/开新会话、检查大工具结果与图片」,既给出可操作建议也省掉一次注定失败的往返。
|
|
629
|
-
- **stop 序列按服务的硬上限裁剪**:最多 5 条、每条不超过 32 字节。超长的序列**整条丢弃而不是截断**——截断后的停止串会在错误位置终止生成,静默改变答案是比不停止更糟的结果。
|
|
630
|
-
- **新增缓存与 K3 调优卡片**:滚动统计命中/新处理的 prompt tokens、输出 tokens 与**缓存命中率**。Kimi 的缓存按内容哈希自动命中、无需也无法手动声明(实测 `prompt_cache_key` 与 Anthropic `cache_control` 标记均被忽略),所以读缓存比例是唯一能证明缓存真的生效的证据;卡片同时说明「同一会话内系统提示与工具列表一旦变化会使整个前缀缓存失效,应保持工具集合稳定、把新增内容追加在末尾」。
|
|
631
|
-
- 澄清并锁定一个此前的错误假设:`prompt_cache_key` 在订阅端**完全是 no-op**(实测:设与不设、相同与不同 key 均命中同一缓存)。我们仍发送它(与官方 CLI 行为一致且无害),但代码注释已改为如实说明,不再声称它能提高命中率。
|
|
632
|
-
- 新增 `test/kimi-code-identity.test.ts`(15 条:JWT 解码、`user_id` 优先于 `sub`、邮箱归一化、不透明 token 回退、账号解析与套餐来源、刷新补全身份、连接测试的成功/401/5xx 三分支)与 `test/kimi-code-routes.test.ts`(8 条:无额度时仍显示账号、status 携带 `quotaError`、显式刷新的成功与失败、连接测试的结论与延迟、未登录拒绝、目录与启用集合)。
|
|
633
|
-
- 新增 79 条单测:`test/kimi-code-oauth.test.ts`(设备码请求只带 client_id、区域主机切换、`expires_in`/`interval` 缺省回落、刷新对 502/429 的重试与对 401/invalid_grant 的立即失败、刷新阈值下限、并发共用刷新、被拒令牌不再重试)、`test/kimi-code-mapper.test.ts`(档位映射全表、未知档位不发送、temperature 被丢弃、`reasoning_content` 仅在带工具调用时回传、cache key 稳定、两条线路的请求形状与流式解码、usage 与工具增量拼接)、`test/kimi-code-adapter.test.ts`(重试策略取值、上文那类 502 判定为可重试、配额型 429 不重试、403 额度与 401 权限/凭据的区分、`Retry-After` 透传、目录与上下文覆盖)、`test/kimi-code-quota.test.ts`(四窗口标签与重置时间、字符串比例、越界钳制、两种响应形状、定点数换算、套餐名解析、模型目录能力)。
|
|
634
|
-
- 在 `README` 增补 Kimi Code 线路说明与故障排查条目,并更新客户端注册用例以覆盖新增的设置区块与额度胶囊。
|
|
635
|
-
|
|
636
|
-
- 修复 Command Code 额度卡片显示 `meter-1` / `meter-2` 的问题:`/alpha/billing/credits` 的窗口是按名字键控的(`windowLimits.fiveHour` / `weekly`),记录本身**只有数字没有名称字段**,此前的通用扫描找不到可用的 id/label,只能回退到序号占位。现在按名字读取该区块并套用官方 CLI 同款标签(`5-hour` / `Weekly`,另支持 `daily` / `monthly`),排序固定为最短窗口在前;`credits.monthlyCredits` / `purchasedCredits` / `freeCredits` 三笔余额也各自成条。通用扫描保留为兜底,并改为按对象身份跳过已读记录,避免同一份数据被重复上报。
|
|
637
|
-
- 修复 Command Code 套餐名称为空的问题:服务只在订阅(或账单)里给出机器 id(`individual-goat`),`/alpha/whoami` 完全不提套餐,因此卡片一直是空白。新增 `src/host/command-code/plans.ts`,转录官方 CLI 的套餐表(Go / GOAT / Pro / Pro / Provider / Max / Ultra / Teams Pro 及各自月度额度),按**最长前缀**匹配——`individual-pro` 同时是 `individual-pro-v1` 与 `individual-provider` 的前缀,按最短匹配会把 Provider 误判成 Pro;同时按服务实际大小写与 `_`/`-` 混用做归一化,未识别的 id 原样显示而不是隐藏。
|
|
638
|
-
- 额度卡片同时补齐订阅状态与续费日期(`active` / `trialing` / `past_due` 等)与套餐月度额度;余额解析此前查 `credits` 只会命中外层对象而返回 null(这也是余额一直空白的原因),现按三个池求和。
|
|
639
|
-
- 修正无名称的额度条目不再被静默丢弃:仍会展示,但改用可读标签(`Extra allowance`)与说明,而不是此前既不可读、又可能掩盖真实额度的 `meter-N`。
|
|
640
|
-
- 新增 `test/command-code-quota.test.ts`(13 条),fixture 为**从真实账号抓取的原样响应**:套餐名解析(含最长前缀与归一化)、订阅状态与周期、5 小时/周窗口的标签与毫秒级 resetAt 保真、窗口排序、三个余额池求和、无名称额度标签,以及 usage/summary 不产生伪额度。
|
|
641
|
-
- 修复 Command Code 线路按“厂商/模型名前缀”猜测模型能力的错误做法:模型是否支持图片输入、支持哪些思考深度,都改由官方 CLI 自带的模型能力表(`src/host/command-code/model-catalog.ts`)逐模型查表决定,未知模型回落到纯文本。此前的前缀启发式把 **DeepSeek V4.1 Flash 这类真正的视觉模型判成了纯文本**,导致设置页不声明图片能力、DSH 不会把粘贴的图片交给该线路。同类错误还有多处:`moonshotai/Kimi-K3`、`xai/grok-4.5`、`xai/grok-4.6`、`MiniMaxAI/MiniMax-M3`、`Qwen/Qwen3.8-*` 都被误判为纯文本;而 `deepseek/deepseek-v4-flash`、`deepseek/deepseek-v4-pro`、`zai-org/GLM-5.3` 才是纯文本——同一个厂商内部两种都有(`z-ai/glm-5.3-flash` 支持图片,`zai-org/GLM-5.3` 不支持),前缀判断无法区分。
|
|
642
|
-
- 思考深度同样改为查表:此前用 `['low','high','max']` / `['minimal','low','medium','high']` 等族级猜测覆盖所有模型,现在逐模型取注册表声明的集合(例如 `claude-*` 是 `low,medium,high,xhigh,max`,`gpt-5.4-mini` 是 `low,medium,high`,`deepseek/deepseek-v4-pro` 是 `high,max`,`claude-haiku-4-5` 与多数 Kimi/Qwen 模型没有思考档位)。
|
|
643
|
-
- 因此新增 `xhigh` 与 `minimal` 两个思考档位:`CommandCodeReasoningEffort` 联合类型、设置卡下拉、路由校验与偏好 schema 一并放开;Anthropic 线路的 `xhigh` 映射为 24576 thinking 预算(介于 `high` 16384 与 `max` 32768 之间),`minimal` 为 1024。
|
|
644
|
-
- 修复输出上限被误降到族级默认值的问题:注册表只为 5 个条目声明了 `maxTokens`,此前其余模型一律落到 32768。现在未声明的模型按多 provider 一致的 `limit.output` 补齐(Claude/GPT 系列 64K–128K、DeepSeek 384K、Kimi K3 131072、Grok 500K 等),注册表声明值优先。
|
|
645
|
-
- 新增 12 条用例锁定上述行为:逐模型模态(含 `deepseek-v4.1-flash` 支持图片、`deepseek-v4-flash` 不支持、GLM 同厂商正反例、Kimi/Grok/MiniMax/Qwen 视觉模型)、未知模型回落纯文本、逐模型思考档位(含空档位与 `xhigh`)、输出上限三级优先级,以及适配器对视觉模型发送内联图片的端到端路径。
|
|
646
|
-
- 新增 Command Code Provider(`command-code`),把 Command Code 的 Provider API 作为本插件的第三条线路接入 DSH:Anthropic 格式模型走 `https://api.commandcode.ai/provider/v1/messages`,其余(开源模型与 GPT 系列)走 `.../chat/completions`,两条线路各自把 DSH 的消息 / 工具 / 图片 / 流式协议映射到对应线上格式。模型 id 决定线路(`claude-*` 为 Anthropic),因为该 API 会拒绝把模型发到格式不符的端点。
|
|
647
|
-
- 浏览器登录复刻官方 CLI 的回环回调契约:本机 `127.0.0.1:5959` 起一次性回调服务器(端口占用时顺延,最多 10 个),打开 `https://commandcode.ai/studio/auth/cli?callback=…&state=…&mode=redirect`,Studio 页面以跨域 POST 回传 `{apiKey,state,userId,userName,keyName}`。因此回调端点实现了 CORS 预检(含 Chrome 的 `Access-Control-Allow-Private-Network`)、10 KB 体积上限、`state` 校验、授权拒绝(`access_denied`)路径,以及成功后 303 跳转到 `/callback/complete` 的人工可读页面。另提供“手动填写 API Key”入口作为无浏览器环境的兜底;两条路径都先用 `/alpha/whoami` 验证再落盘。
|
|
648
|
-
- 新增 `/command-code/api` 设置路由(status / login / login/status / login/apikey / logout / quota / models / settings / catalog/refresh / connection/test),修改状态的操作只接受同源 JSON POST。
|
|
649
|
-
- 设置页新增「Command Code」卡片:账号与密钥信息、连接状态与路由归属、模型勾选(含该模型走的线路)、默认思考深度、逐模型上下文窗口覆盖、额度与用量;对话输入框新增 `command-code` 线路的额度胶囊。
|
|
650
|
-
- 模型目录取自公开的 `/provider/v1/models`(含每个模型的 `context_length`),30 分钟缓存、可手动刷新;离线时回落到内置目录。上下文窗口默认取目录值,可逐模型覆盖(用于 DSH 的压缩与溢出判断)。
|
|
651
|
-
- 额度来自 `/alpha/billing/credits`、`/alpha/billing/subscriptions`、`/alpha/usage/summary` 与 `/alpha/whoami`:各线路独立容错(一条失败不影响其余),解析器按“带 limit/used/百分比的对象”通用识别而不绑定某个具体响应 schema,识别不出时给出空态而不是伪造 0%。
|
|
652
|
-
- Command Code 凭据(API Key)与 Antigravity 一样只存 Host:Windows 使用 CurrentUser DPAPI(`$DSH_HOME/storages/command-code-credentials.json.dpapi`),macOS 使用登录钥匙串,Linux 使用 Secret Service;明文 JSON 仅作为迁移来源,读取后加密回写并删除。凭据不会进入浏览器、`settings.yaml` 或日志。
|
|
653
|
-
- `command-code` 路由可能已被其他适配器占用(例如内置 `llm-pi-ai` 用同一端点声明过同名 Provider),而 DSH 的 `registerAdapter` 对重复路由是 all-or-nothing 并抛 `DUPLICATE_ADAPTER`。插件因此把注册做成“可用即接管”:冲突时不让插件加载失败,只在设置页显示路由归属与冲突原因,并监听 `llm/adapters-updated`——原占用方释放该路由后自动接管,无需重启。
|
|
654
|
-
- 新增 Kimi 系列的两项「能力补齐」(`src/host/kimi-code/modalities.ts`):
|
|
655
|
-
- **视频输入真正可用**,不再只是提示文字。DSH 的 `ModelModalityMap` 只有 `text` / `image`,但它是**可合并扩展的接口**,因此本插件用 TypeScript 模块增强把它扩成 `text` / `image` / `video`(`ContentBlockMap` 同理新增 `video` 块)——**没有改动 DSH 任何一行代码**,增强只存在于本插件的编译单元里。此前 `k3` / `kimi-for-coding` 的视频能力只能在设置卡里显示为说明文字;现在它是真实模态:`resolveModel` 会声明 video,适配器会把 `{ type: 'video', attachment }` 映射成服务文档的 `{ type: 'video_url', video_url: { url: 'data:video/mp4;base64,…' } }`(`api.kimi.com/coding` 的 OpenAI 线路)。
|
|
656
|
-
- 视频与图片**各有独立预算**:图片仍是文档的 2 MB 上限,视频按自己的 48 MiB base64 预算按「最旧优先」省略(一个视频片段就远超整段对话的图片额度,共用一个预算会让图片永远发不出去);请求体校验也据此只在**确实携带视频**时才放宽到 64 MiB,纯文本/图片请求仍按 2 MB 本地拦截。
|
|
657
|
-
- **不臆造未记录的字段**:`k3-256k` 只接受图片,选中它时视频会降级为明确的文字说明(提示改用 k3/kimi-for-coding);不在文档容器白名单内的格式(白名单来自官方 vision guide:mp4/mpeg/mov/avi/x-flv/mpg/webm/wmv/3gpp)同样降级并说明;而 **Anthropic Messages 线路没有文档化的视频内容块**,因此走该线路时视频一律降级为文字而不是猜一个字段名发出去。
|
|
658
|
-
- `dynamically_loaded_tools` 按官方线格式实现:K3 接受**消息级工具声明**(`messages[].tools`),即可在会话中途以「无 `content` 字段的 `system` 消息」注入完整工具定义(`{ name, description, parameters }` 三元组,服务拒绝只给工具名)。这正是**保护前缀缓存**的手段——官方文档明确把「保持顶层 `tools` 字节稳定」列为该特性目的之一(顶层工具变化、或中途修改/删除已发出的声明都会使缓存从该点起失效,而在末尾追加不影响缓存前缀)。本插件提供 `withMessageTools()` 在 system 消息上挂声明,映射器按历史顺序输出;声明按请求重发(服务端不保留),且仅在模型声明该能力时发送,否则降级为一条说明消息而不是发出必然 400 的请求。
|
|
659
|
-
- 能力判定统一走「实时 `/v1/models` > 内置注册表」:listing 的 `supports_video_in` / `supports_dynamic_tools` 直接采信,离线回落内置表(`k3` / `k3-256k` 具备动态工具加载,`kimi-for-coding` 系列不具备)。设置卡把两项能力显示在模型旁。
|
|
660
|
-
- 修复动态工具声明**位置被提升**的问题:首版把历史里所有 `messages[].tools` 声明收集后统一发在请求最前面,但 Kimi 的缓存是**前缀匹配**——把声明放到它首次发出位置之前会重写缓存前缀并使已缓存对话失效,恰好破坏该特性存在的唯一理由。现在每条声明按其在历史中的真实位置插入(`flushSlots` 按「非 system 消息数」定位并交错输出),因此**末尾追加**仍是缓存安全的追加,而中途新增的声明不会前移。
|
|
661
|
-
- 修复 `isAbort` 用 `instanceof Error` 判定取消的缺陷:DSH 的 `LlmError` **不是 Error 子类**,所以在真实调用链上取消会被误判为「读取失败」并降级成模型可见的占位文本——把用户主动取消变成了一个错误答案。改为按 `name === 'AbortError'` 结构化判定,并保留 `signal.aborted` 短路。
|
|
662
|
-
- 声明所在 system 消息**同时带有文本**时不再静默丢弃:服务的动态工具 schema 没有 `content` 字段,两者无法合成一条消息,因此现在保留文本(另发一条),并把声明替换为明确的说明消息,而不是让工具无声消失。
|
|
663
|
-
- **按官方 CLI 的能力表逐模型修正两项能力**(依据 `managed:kimi-code` 托管模型表里每个模型的 `capabilities` 列表):`k3` = image_in + video_in + dynamically_loaded_tools;`k3-256k` = image_in + **dynamically_loaded_tools**(无 video);`kimi-for-coding` = image_in + video_in + **dynamically_loaded_tools**;`kimi-for-coding-highspeed` = image_in + video_in(**无** dynamically_loaded_tools)。修正了先前把 `dynamically_loaded_tools` 当成「K3 独有」的推导错误——官方线文档只提 K3 是因为它描述的是 K3 的请求 schema,而 CLI 自己的能力表把它也标给了 K2.8 Preview。
|
|
664
|
-
- 修正能力判定与官方表格的一致性(已对照 https://www.kimi.com/code/docs/en/kimi-code/models.html 逐项核对):`k3` 与 `kimi-for-coding` 为「Image, video」、`k3-256k` 为「Image only」,与内置表一致;`kimi-for-coding-highspeed` 官方标为 K2.7 Code HighSpeed,「Thinking: ON」且无可选档位,故其固有档位仍按官方标注为 `high`。
|
|
665
|
-
- 按第二轮审计修正视频入口的几处问题:
|
|
666
|
-
- **`.mkv` 能存不能发**:入口白名单收 `.mkv`(存为 `video/x-matroska`)而 mapper 的 `isVideoMediaType` 不含它,导致用户挂载 mkv 会收到「Attached video ✅」,模型却只拿到 `unsupported-container` 占位文本。现在入口**只接受 mapper 真能发出的容器**(即 `KIMI_VIDEO_MEDIA_TYPES`),mkv 在入口即被拒绝并说明——入口承诺与线上行为从此是同一件事。
|
|
667
|
-
- **`e2e` 注释的覆盖声称超出实际**:该测试直调 `buildOpenAIRequest`,从不经过 DSH 真实管道。注释已改为如实说明「覆盖请求映射阶段 + 安装版运行时的内容助手」,并明确列出**未**覆盖的部分(会话持久化 / compaction / transcript),要求装机实测。过程中还发现一个值得记录的事实:本仓库**安装版 `@deepseek-ai/dsh-llm` 是 0.1.1-rc.2**(根 barrel 只导出 `contentHasImage` / `projectImagesForTextModel`,**完全没有** file 投影),而工作区 checkout 是 0.1.5-rc.1——两者不是同一份代码,断言已改为针对实际运行的那份。
|
|
668
|
-
- **视频存储新增回收**:内容寻址让重复挂载免费,但此前没有任何清理,目录只会增长。现在写入时按 mtime 做 LRU 回收(预算 512 MB,best-effort、失败不影响挂载),并顺带清理崩溃写入残留的 `.tmp.*` 文件。
|
|
669
|
-
- 顺带修掉两处小瑕疵:`video-tool.ts` 自己写的 DNS `lookup` 改为复用 `fetch-address-policy.ts` 已有的 `lookupHostAddresses`(避免语义漂移);`index.ts` 中 `disposeVideoTool()` 的缩进与相邻一致。
|
|
670
|
-
- **视频输入打通了入口**:此前只有一条没有生产者的 mapper 路径(能力表也只能标注「无上传入口」)。现在新增两件东西,让视频端到端可达:
|
|
671
|
-
- `kimi_attach_video` 工具(`src/host/kimi-code/video-tool.ts`):接受**本地绝对路径**或 **http(s) 链接**,把视频字节交给插件的视频存储,再以 `exec.deferContext()` 注入一条 plugin 来源的 user 消息(与本插件已有的图片工具同一机制,**不需要改动 DSH**)。可选 `question` 参数让模型在同一轮就视频作答。
|
|
672
|
-
- 视频本地存储(`src/host/kimi-code/video-store.ts`):DSH 的附件服务只存图片,因此本线路自带存储。标识取字节 sha256(重复挂载同一文件幂等),读取时**重新校验摘要**,被篡改或截断的对象会被拒绝而不是当成原文件发出去。
|
|
673
|
-
- **尺寸上限取官方依据**:官方视频集成把本地文件编码为 `data:video/...;base64,...` 并限制该载荷约 **50 MB**(且明确说这是其客户端上限、非 Kimi API 上限),VS Code 端文件选择器限 **20 MB**。前者描述的是「这个 wire 上模型接受什么」,故上限设为略低于它的 **30 MB 原始字节**(base64 增长 4/3,所以编码后正好落在 40 MB,留在 50 MB 之下)。
|
|
674
|
-
- **两个安全/正确性闸门**:URL 来源在发起请求**之前**套用与搜索抓取 provider 相同的公网地址策略(否则该工具会成为一个 SSRF 原语——测试里有一条专门证明策略缺失时用例会失败);且只有当**当前会话路由到 `kimi-code` 且所选模型声明了 video** 时才允许挂载,否则明确拒绝并给出补救(换 k3 / kimi-for-coding),绝不会把别的适配器没有处理分支的块注入进去。
|
|
675
|
-
- 能力表脚注相应改为「视频需先用 kimi_attach_video 挂载;直接粘贴仍只支持图片」。
|
|
676
|
-
- 新增 `test/kimi-code-video-tool.test.ts`(17 条:容器识别、内容寻址与幂等、超限/空文件/类型拒绝、摘要失配与文件缺失、相对路径/未知扩展名/非视频模型/错误 provider 的拒绝、私网 URL 拒绝且**不发出请求**)与 `test/kimi-code-video-e2e.test.ts`(3 条:从落盘文件解析出字节并确认线上是真实 base64 内容、字节缺失时降级为可读文本、无视频请求不受影响)。
|
|
677
|
-
- **修复审查发现的问题**(视频与动态工具):
|
|
678
|
-
- **live 目录现在真的能关掉能力**:`parseCatalogModel` 原先把 `supports_dynamic_tools === true` 之外的一切都当作「字段缺席」,于是服务端显式返回 `false` 时会回退到内置表、照样显示支持——与 `model-catalog.ts` 注释里「live 列表权威、包括可以关掉」的承诺自相矛盾。现按三态解析(`true` / `false` / 缺席),显式 `false` 穿透回退。
|
|
679
|
-
- **卡片与请求路径统一到一个解析入口** `dynamicToolsForEntry()`:此前卡片会回退内置表而请求路径 (`entry?.supportsDynamicTools === true`) 不会,导致在线但 `/models` 未返回该字段时 **UI 显示支持、实际请求却降级为「模型不支持」**,且行为随网络状态翻转;离线反而正常。现在两处共用同一函数。
|
|
680
|
-
- **声明不再随持久化丢失**:`withMessageTools` 原先把声明只挂在 `Symbol` 上且 `enumerable: false`,而 DSH 会话历史经 JSON 持久化必然丢掉符号键——会话恢复后声明会静默消失,模型会「以为自己有工具但请求里没有」。现在同时写入一个普通字符串键 `kimiCodeMessageTools`(可被 JSON 序列化,但仍非枚举,兄弟线路照样看不见),并新增 `rehydrateMessageTools()` 供恢复后重新挂上符号。
|
|
681
|
-
- **不再重复发送 system 文本**:`leadingSystemText` 折叠所有 system 文本到请求开头,而声明槽位又会在原位置重发一次,同一段文本出现两遍(浪费 token,且第二次位置可能扰动本想保护的缓存前缀)。现在 `leadingSystemText` 跳过带声明的消息,文本只在声明位置出现一次。
|
|
682
|
-
- **Anthropic 线路不再静默吞掉声明**:该协议不支持消息级声明,原本直接丢弃且无任何提示,模型可能调用从未声明的工具。现在把未发送数量写进 `system` 提示。
|
|
683
|
-
- **请求体守卫不再二次序列化、也不再被用户文本欺骗**:原先用 `JSON.stringify(body).includes('"video_url"')` 判断是否带视频——body 可达数十 MB 却被序列化两次,且用户消息里只要出现该字面量就会把 2 MB 守卫放宽到 64 MB。现由调用方显式传 `carriesVideo`(复用已有的 `requestHasVideo`)。
|
|
684
|
-
- **不再超前宣称视频能力**:模型确实接受视频,但本插件与 DSH 的附件服务都没有视频生产者/读取者(`videos` 读取器从未在 `src/index.ts` 注入),实际永远走 `unreadable` 占位。能力表因此把标签标为「视频*」并加脚注说明当前版本没有上传入口、不会发出视频内容块,避免 UI 承诺与实际可达路径不符。
|
|
685
|
-
- 清理 `classifyKimiFailure` 中 `isLimit ? 'PROVIDER_ERROR' : 'PROVIDER_ERROR'` 的死三元(两分支同值,读起来像意图未实现)。
|
|
686
|
-
- **修复上一轮修复引入的回归**:`leadingSystemText` 是两条 wire 共用的,跳过声明载体后,只有 OpenAI 路径会在载体原位置重发文本;Anthropic 路径因此**整段丢失载体文本**(只剩工具数量提示),恰好违反 `declarationSlots` 注释里「丢掉 system 文本会静默改变模型收到的信息」这条原则。现在 Anthropic 路径会把载体文本拼回 `system`(排在 notice 之前),并加了 2 条回归用例——其中顺序断言特意先 `>= 0` 再比较,否则文本缺失时 `indexOf` 返回 -1 会让断言**空过**。
|
|
687
|
-
- 顺手清理审查指出的三处小瑕疵:`classifyKimiFailure` 中删掉三元后遗留的未引用 `isLimit`(改为真正参与文案选择的 `limitReached`);`client.ts` 里错位堆在 `dynamicToolsForEntry` 上方的「Input modalities」注释归位;`withMessageTools` 的注释原先一边说「非枚举所以其他读者看不到」一边字符串键副本是 `enumerable: true`,改为明确写清两个副本可见性不同及其原因。
|
|
688
|
-
- `assertRequestBodyFits` 现在**返回**它序列化出的 body,供适配器直接复用:此前带视频时同一个数十 MB 的 body 会被 `JSON.stringify` 两次。
|
|
689
|
-
- 新增 `test/kimi-code-review-fixes.test.ts`逐条钉住上述缺陷:显式 `false` 生效、三态回退边界、文本只出现一次、Anthropic 提示、守卫不被文本欺骗、声明经 JSON 往返后仍可发送;`test/kimi-code-capability-ui.test.tsx` 增加脚注相关 1 条。
|
|
690
|
-
|
|
691
|
-
- **重排模型能力展示**:此前把能力说明当成长句塞在模型名那一列,把名称列撑开、右侧描述错位。现改为独立的四列表格(模型 / 多模态 / 动态工具 / 说明):能力只显示短标签(视频 / 仅图片 / 动态工具 / —),逐模型的协议、默认思考档位与所需套餐移入悬停提示;表格自身不再附带任何解释段落。表格抽成可测组件 `KimiModelCapabilities`(`src/client/kimi-code/KimiModelCapabilities.tsx`),新增 `test/kimi-code-capability-ui.test.tsx`(5 条)钉住列数、每模型一行、长句不得进入单元格、悬停内容,以及说明为空时不渲染 `null`。该表也**不再依赖 `description` 是否存在**——实时目录条目缺描述时整个表格(含能力)仍渲染。
|
|
692
|
-
- 澄清并测试这两项能力的**跨模型隔离**:机制本身有三重隔离——符号载体**不可枚举**(其他线路的序列化器看不到它)、映射器只在 `messageTools === true` 时输出、且声明只存在于 Kimi 的 OpenAI 线路映射中。新增 `test/kimi-code-capability-isolation.test.ts`(6 条):Command Code 各模型仍不含 video(证明模块增强是**纯类型、不产生运行时值**)、Kimi 四个模型 id 的 video 与 dynamically_loaded_tools 与官方能力表**逐项**一致(并断言两者并非同一集合:HighSpeed 有 video 却无动态工具)、视频块不会出现在兄弟线路的请求体里、同一段历史里的声明也不会被兄弟线路带出去。
|
|
693
|
-
- 另记录一个**证据取舍**:公共 `models.dev` 目录虽声明了 `dynamically_loaded_tools` 字段,但 Moonshot 自家四个条目均未标注,故本插件**不采信该目录**,改以官方 CLI 托管模型表的 `capabilities` 为准;运行时仍以实时 `/v1/models` 的 `supports_dynamic_tools` / `supports_video_in` 覆盖内置表。
|
|
694
|
-
- 新增 `test/kimi-code-declaration-position.test.ts`(7 条回归用例):声明按历史位置交错(含前后两条声明之间有对话的情形)、末尾追加落在队尾且前缀不变、首条声明仍在队首、文本与声明同处一条消息时保留文本并给出说明、以及取消检测在「非 Error 的 AbortError 对象」与「signal 已 abort」两条真实路径上都向上抛出、而真正的读取失败仍降级。这 7 条在把两个缺陷临时改回后**确有 3 条失败**(位置 2 条 + 取消 1 条),确认它们是真的回归用例而非同义反复。
|
|
695
|
-
- 新增 `test/kimi-code-capabilities.test.ts`(24 条):模态词表与容器白名单、视频解析与缺字节/无 reader 的降级、最旧优先省略、两种模型能力下的线级视频形状、Anthropic 线路绝不发未记录字段、消息级工具声明的符号载体(不污染 `Object.keys`)、`content` 字段不得出现、能力缺失时的降级、历史顺序保持、以及请求体预算(纯文本仍按 2 MB 拒绝、带视频才放宽)。另有 3 条既有断言随行为变更更新(`inputModalities` 现含 `video`)。
|
|
696
|
-
- 新增 80 条单测:`test/command-code-mapper.test.ts`(两条线路的请求映射、图片内联与超限省略、OpenAI/Anthropic 流式解码、工具调用增量拼接、usage 与 finish reason、截断流拒绝)、`test/command-code-oauth.test.ts`(回环回调服务器:CORS 预检、表单/JSON 回调、state 校验、拒绝路径、303 跳转、宽限期发布)、`test/command-code-routes.test.ts`(账户/额度/目录解析、模型选项与启用集合、设置路由与同源校验)、`test/command-code-adapter.test.ts`(目录、上下文覆盖、两条线路的端到端流式与工具往返、缺凭据/401/429/截断的错误分类)、`test/command-code-store.test.ts`(凭据校验、模型设置文件、设置卡与胶囊的纯函数)、`test/command-code-plugin.test.ts`(插件装配、路由接管与释放后自动接管)。
|
|
697
|
-
- 修复开启系统代理的机器上 `web_fetch` 必然失败的问题:DSH 内置抓取 provider 在连接前解析、校验并固定目标地址,而代理工具(Clash/Mihomo 等)的 fake-ip DNS 会把域名解析成 `198.18.0.0/15` 里的保留地址(实测 `api.github.com` → `198.18.0.17`),于是每次调用都以 `WEB_BLOCKED_URL`(`resolves to a non-public IP address`)结束——代理根本没被用上。DSH 只在进程环境变量里读到代理时才走代理,看不到系统代理。现在只要插件配置了可用代理(系统代理自动检测或自定义代理),`web_fetch` 就改用本插件的抓取 provider:由代理解析源站,与 DSH 对“走代理的请求”采用的语义一致;未配置代理时仍由内置 provider 抓取,其解析与固定策略不变。
|
|
698
|
-
- 抓取 provider 新增地址策略 `src/host/fetch-address-policy.ts`,保留内置 provider 安全边界中不需要 DNS 的那一半:URL 里写明的 IP 字面量只有全球可路由单播才放行(loopback、私网、链路本地、CGNAT、多播、保留地址、IPv6 转换与隧道前缀一律拒绝);域名用本机解析器检查一次,落在私网(含 `localhost`、`127.0.0.1.nip.io` 这类)一律拒绝;只有代理的 fake-ip 答案被接受,本机解析不出的域名交给代理处理。与内置 provider 的差别是不再固定(pin)连接地址——fake-ip 环境下这一步无法成立,已在 README 的安全边界中写明。
|
|
699
|
-
- 代理偏好在运行时变化(例如系统代理 ↔ 直连)会重新选择抓取后端;选择 ChatGPT 搜索来源时同时切换搜索与抓取的行为保持不变。
|
|
700
|
-
- `ProxyManager` 新增系统代理探测的观察点(`onSystemProxyDetected`):只在「从未知变为已知代理」时通知——探测失败与「本机没有代理」都读作 `null`,因此不会因为一次 `reg query` / `scutil` 抖动就把已经可用的路由拆掉。插件据此在代理迟于 DSH 出现时自动重新选择抓取后端,否则内置 provider 会一直占到进程结束。
|
|
701
|
-
- 新增 `test/fetch-address-policy.test.ts`(地址分类、fake-ip 识别、私网解析拒绝、解析失败放行),并扩充 `test/codex-fetch.test.ts`、`test/search-provider-switcher.test.ts`、`test/web-provider-lifecycle.test.ts` 覆盖抓取 provider 的拒绝路径与后端切换。
|
|
702
|
-
- 修复 Antigravity 线路静默丢弃用户上传图片的问题(issue #5):本插件把 `gemini-*` / `claude-*` 都声明为支持图片输入,DSH 因此不把图片投影成文本,而是以 `{ type: 'image', attachment }` 的形式原样交给适配器;但 `mapper.ts` 只认内联 `data` / `base64` / `source.*`,`contentToUserParts()` 又用 `if (img) parts.push(img)` 静默跳过,于是发给 Google 的 `streamGenerateContent` 请求里只剩下文本,模型只能回答「没有收到图片」。现在 `AntigravityAdapter` 接入 `ctx.attachments`,在组装请求前把附件解析为 Gemini `inlineData`(媒体类型取自已校验的附件引用),同一附件在多条消息中只读取一次。
|
|
703
|
-
- 读不出字节的图片不再静默消失:降级为 `[image unavailable: …]` 文本让模型能说明图片没读到;取消(AbortSignal)仍向上抛出,不会变成模型可见的文本。工具结果中的图片同样以 `[image: 名称]` 保留,与 Codex 线路一致。
|
|
704
|
-
- 新增 8 条 `test/antigravity-mapper.test.ts` 用例(内联映射、跨消息去重、读取失败降级、无附件服务降级、取消传播、旧内联格式、工具结果图片标记,以及不传解析结果时默认参数仍不静默丢弃)与 3 条 `test/antigravity-adapter.test.ts` 端到端用例:`gemini-3.8-flash` 与 `claude-opus-4-6` 各断言一次真实请求体中的 `inlineData`(两个 provider 共用同一 mapper),另一条用 429 逼出候选链,断言每个 runtime model 候选都带着图片、且附件只读一次。新增 `test/antigravity-image-wire.test.ts` 做线级验证:不 mock `fetch`,改为在 127.0.0.1 上起回环服务器并把 `DSH_ANTIGRAVITY_ENDPOINT` 指向它,读取真正离开进程的请求体,断言 `contents[0].parts` 是 `[text, inlineData]`。把这三组用例跑在回退后的修复前源码上,共 12 条失败(其中线级用例显示 socket 上只剩文本),因此它们是货真价实的回归用例。再新增 `test/antigravity-image-bundle.test.ts`:issue 是在 npm 安装版上发现的,所以这条用例直接 import 打包产物 `lib/index.js`(而不是 `src`)跑同一段线级断言,证明用户装到的那个 bundle 里同样带着修复;`lib/` 是提交进仓库的生成物,源码改动后忘记 `npm run build` 时它会失败。工具结果里的图片仍只记名不内联——DSH 自己的多 provider 适配器(`llm-pi-ai`)对工具结果里的非文本块是直接丢掉的,记名已经比参照实现保留得更多,而 `functionResponse.parts` 是否被该端点接受在本地无从验证,故按「不臆造线上行为」处理,并在代码里写明理由。
|
|
705
|
-
- 新增单次请求的图片体积上限(`MAX_REQUEST_IMAGE_BYTES`,12 MiB base64):修复后本线路会把历史里的图片全部内联,图片多的会话会让请求体持续膨胀直到被 Google 的 20 MB 体积上限拒绝,而最先被牺牲的恰是模型最不需要的旧图。现在超过预算时按 DSH 的顺序(最旧优先)把图片替换为上游同款占位文案,`test/antigravity-mapper.test.ts` 与 `test/antigravity-adapter.test.ts` 各有一条用例覆盖(被省略的图片不会被读取,最新一张仍以 `inlineData` 发出,且不改动持久历史)。该逻辑在插件内实现而非调用 DSH 的 `offloadRequestImagesWithPolicy`:本插件支持的 DSH 区间里这个符号的形态发生了不兼容变化(`OFFLOADED_IMAGE_TEXT` 常量 → `offloadedImageText()` 函数;`offloadRequestImages()` 在 0.1.5-rc.1 被移除;`placeholder` 由可选变必填),绑定任一形态都会重演 issue #4 那种"在某个受支持版本上直接加载失败"。
|
|
706
|
-
- 修正 `test/subagent-model-authorization.test.ts` 的守卫类型:Host 工具注册表登记的是单参数 `ToolGuard`(`@deepseek-ai/dsh-tools`),测试却按插件内部的三参数 `DelegationGuard` 别名调用,导致 `npm run typecheck` 长期以 TS2554 失败。模拟注册表改为按真实契约取类型后,仓库自带的 `npm run typecheck` 恢复通过。
|
|
707
|
-
|
|
708
|
-
## 0.2.15 - 2026-09-11
|
|
709
|
-
|
|
710
|
-
- 新增子代理模型授权守卫:DSH 的「Subagent」允许列表(`subagent-model-selection`)原本只在模型**显式**填写 `provider`/`model` 时生效,而委派调用不填路由时子代理会继承父级模型——于是 DeepSeek 会话里的子代理仍会在未授权模型上运行。插件现在在 Host 工具注册表上注册一个单调守卫(`ctx.tools.guard`),当调用会话(或最近的、记录了策略的祖先会话)带有允许列表时,任何生效路由不在此列表内的委派都会在子代理启动前被拒绝,拒绝理由里带上全部已授权路由,模型据此重试即可选中合规模型。
|
|
711
|
-
- 该守卫只在会话确实记录了允许列表时介入(与 DSH 委派工具的会话快照语义一致),不会改变未启用该设置的会话;`subagentModelScope: 'preference'` 可让当前设置卡允许列表也约束未记录策略的会话(含恢复的旧会话)。
|
|
712
|
-
- 只读取公开接口:会话日志事件 `subagent/model-selection-policy`、父会话谱系、Host 设置文档与 `ctx.tools.guard`,不修改 DSH 本体。
|
|
713
|
-
- 新增配置项:`subagentModelAuthorization`(默认 `true`)、`subagentModelTools`(默认 `['subagent']`)、`subagentModelScope`(默认 `session`,可选 `preference`)。
|
|
714
|
-
- 新增 14 条单测覆盖策略解析、谱系继承、设置读取、显式/继承路由的拒绝与放行、作用域切换以及守卫安装路径(含注册与释放)。
|
|
715
|
-
## 0.2.14 - 2026-09-10
|
|
716
|
-
|
|
717
|
-
- 移除失效的「子代理最大嵌套深度 / 子代理上下文预算」设置:这两个偏好键在 DSH 侧没有任何消费方(全仓库无引用),插件自身也只有写、没有读,保存了也不生效。它们源于 2026-08-28 的 `5b08e2e`——那次提交迁移到 DSH 原生子代理模型路由,删除了 `subagent-context-adapter` / `subagent-policy` / `SubagentSettingsSection`,但把这两个控件和偏好键留了下来。相关 DTO 字段、schema、路由校验、界面控件、6 条未引用文案与失效单测一并移除;子代理模型与思考深度改用 DSH 自身的“Subagent”设置卡片,最大嵌套深度由 preset 中 `tool-subagent` 的 `maxDepth` 决定,README 同步更正。
|
|
718
|
-
|
|
719
|
-
## 0.2.13 - 2026-09-10
|
|
720
|
-
|
|
721
|
-
- 回退 Codex 与 Antigravity 模型上新增的 `systemPromptUpdate: 'in-history'` 声明:Responses 线路把系统提示词放在顶层 `instructions`,Antigravity 把它放在固定的 `systemInstruction` 加一条 user turn,两条路由都无法把"历史中最后一条 system 消息"当作完整系统提示词。声明该能力会让 DSH 在提示词变化时改为追加 system 节点并保留旧节点,而两个 mapper 会把新旧提示词一并发出。Codex mapper 同时改为只取最新一条非空 system 消息,避免将来重新声明时再次拼接过期提示词。
|
|
722
|
-
- 移除 `src/compat.ts` 对 `@deepseek-ai/dsh-llm` 的 `ContentBlockMap.file` / `LlmResolvedModelInfo.systemPromptUpdate` 模块增强:本地 DSH(`packages/llm/llm`,0.1.5-rc.1)已经声明 `'file': FileBlock`,与增强中的 `Record<string, unknown>` 冲突(TS2717),对着本地依赖编译会直接失败。
|
|
723
|
-
- 移除两个 mapper 中不可达的 `file` 内容块处理:DSH 内核在进入适配器之前已把文件块投影为 `fileHandleText`(`dsh-llm` 的 `projectFilesToText`),适配器永远收不到 `file` 块;原实现读取的 `byteSize` / `savedPath` 在真实 `FileAttachmentRef` 中也不存在(真实字段是 `bytes`)。
|
|
724
|
-
- 移除只完成一半的「智能体团队混合模型规则」(`teamModelRules`):该功能当时只有偏好存储、路由白名单校验、匹配函数和 64 条中英文案,没有任何地方据此选择子代理模型(DSH 内核对子代理模型走 `subagent/model-selection-policy`),因此连同 DTO、schema、路由处理、单测与未引用文案一并移除,等 DSH 提供介入点后再实现。
|
|
725
|
-
- 修复 Antigravity 新账号开通在全部端点失败时静默返回成功:`onboardUser` 现在会在候选端点循环结束后抛出最后一次失败,而不是让调用方误以为已开通。
|
|
726
|
-
- 修复登出竞态:`clearCachedQuota()` 增加 epoch 标记,登出时仍在途的配额请求不再回写 `cachedQuota`,也不再为已登出账号写入模型目录;in-flight 槽位改为按持有者清理,避免"清理后重新拉取"丢失新的在途请求。
|
|
727
|
-
- `/antigravity/api/status` 改用导出的 `ANTIGRAVITY_QUOTA_CACHE_TTL_MS`,不再内联 120000。
|
|
728
|
-
- 移除 Antigravity 设置页与输入框配额胶囊里重复的 `POST /quota`:Host 在 `/status` 中已经会刷新过期缓存,客户端再发一次会让单次挂载产生 2–4 次上游配额请求;配额空态改为明确提示(新增 `quotaEmpty` / `googleValidation` 文案,不再硬编码中文)。
|
|
729
|
-
- `parseEnvProxy` 新增 `envFile` 注入点:`$DSH_HOME/.env` 兜底代理探测现在有测试覆盖(含 `export` 前缀、引号、注释、空值、环境变量优先),既有"无代理返回 null"的断言也不再依赖运行机器上是否真的存在 `~/.dsh/.env`。
|
|
730
|
-
- Antigravity User-Agent 恢复按真实平台填写 `os_type` / `arch`(仍可用 `DSH_ANTIGRAVITY_OS` / `DSH_ANTIGRAVITY_ARCH` 覆盖),不再默认冒充 darwin/arm64。
|
|
731
|
-
- 移除未被引用的 `SANDBOX_ENDPOINT` 并修正端点注释;DSH 依赖区间末项由 `^0.1.5` 改为 `^0.1.5-rc.1`(`^0.1.5` 不匹配本地实际依赖 0.1.5-rc.1),并同步了长期滞后的 `package-lock.json` 根信息。
|
|
732
|
-
|
|
733
|
-
## 0.2.12 - 2026-09-10
|
|
734
|
-
|
|
735
|
-
- Antigravity 登录与开通:对齐官方 2.8.0 User-Agent 格式并支持环境变量覆盖,新增 `loadCodeAssist` 详情解析、免费层资格校验与 Google 账号安全验证链接提取,以及新账号的 `onboardUser` LRO 轮询开通。
|
|
736
|
-
- Antigravity 配额:`/status` 按 2 分钟 TTL 自动拉取配额,`/quota` 支持强制刷新并在并发调用间去重;Web 设置页与输入框配额胶囊自动获取配额,不再需要手动刷新。
|
|
737
|
-
- 代理:`auto` 模式在进程环境之外新增 `$DSH_HOME/.env` 兜底探测。
|
|
738
|
-
- 依赖:`@deepseek-ai/*` peer/dev 版本区间扩展到 `^0.1.3` / `^0.1.4` / `^0.1.5`。
|
|
739
|
-
|
|
740
|
-
## 0.2.10 - 2026-09-06
|
|
741
|
-
|
|
742
|
-
- 修复 Antigravity 模型元数据校验失败导致 Provider 整体消失的问题:在 `resolveModel` 中清洗并安全兜底 `defaultEffort`,确保透传给 DSH 内核的 `defaultEffort` 必定存在于当前模型的 `efforts` 清单内;解决 `gemini-3.1-pro` 等模型(仅支持 `low` / `high`)因默认回退 `medium` 触发 `@deepseek-ai/dsh-llm` 的 `INVALID_MODEL_REASONING` 校验异常导致 Provider 从模型选择列表中消失的问题(Issue #4)。
|
|
743
|
-
|
|
744
|
-
## 0.2.9 - 2026-09-06
|
|
745
|
-
|
|
746
|
-
- 修复在官方 DSH 0.1.2-rc.1 / dsh-llm 0.1.2-rc.1 上加载失败问题:移除 Antigravity 模块中对 `CallId` 的静态具名导入,统一采用 `toToolCallId` 兼容垫片,动态兼容 `ToolCallId` 与 `CallId`;解决启动(boot)阶段因缺失 `CallId` 导出抛出 SyntaxError 导致插件整树无法加载的问题(Issue #4)。
|
|
747
|
-
- 修复搜索与抓取来源切换未生效:正确更新 Loader 配置,并在 DSH web 服务重载时重新注册后端、保留默认来源;解决启用插件抓取后仍由 DSH 内置 fetch 拦截 TUN/Fake-IP 地址的问题。
|
|
748
|
-
- 修复 Antigravity 工具调用:原样回传 Google 工具 ID,兼容旧会话保存的原始 ID;转换工具参数 Schema,过滤 `propertyNames` 等不支持字段并处理嵌套结构。
|
|
749
|
-
- 修复 Gemini 3.7 / 3.8 的旧 `off` / `none` 思考配置,使用最低支持档位 `LOW` 并关闭思考摘要;400 请求错误直接保留原始详情,不再被模型降级错误覆盖。
|
|
750
|
-
- Codex 订阅供应商新增 `gpt-6-astra`(6 Astra),支持文本、图片、工具调用和 `low` 至 `max` 思考档位,默认 `medium`;旧会话的 `none` / `minimal` 转为 `low`。
|
|
751
|
-
- 新增 Astra 上下文设置:默认 272K,订阅侧最高 872K,界面与服务端统一校验;保留已有模型选择与上下文配置。
|
|
752
|
-
|
|
753
|
-
## 0.1.28 - 2026-08-28
|
|
754
|
-
|
|
755
|
-
- 新增支持 1.5x 倍速快速模式(Fast Mode / Priority Service Tier):在设置页「增强功能」中提供开关,开启后向 Codex 后端请求自动注入 `service_tier: 'priority'`,以约 2x–2.5x 额度消耗换取约 1.5 倍的 Token 生成速度。
|
|
756
|
-
- 修复偏好设置更新白名单校验,支持持久化保存 `fastMode` 配置。
|
|
757
|
-
|
|
758
|
-
## 0.1.21 - 2026-08-22
|
|
759
|
-
|
|
760
|
-
- 修复 DSH 更新到 `0.1.1-rc.2` 后“本轮运行失败:registration.adapter.prepareCall is not a function”:新代理循环经 `ctx.llm.prepareCall()` 冻结每次调用,适配器必须实现 `prepareCall`;CodexChatGptAdapter 现显式绑定同一次解析的模型元数据与流分发(`PreparedAdapterCall`)。
|
|
761
|
-
- 将全部 `@deepseek-ai/*` peerDependencies 与 devDependencies 版本统一从 `^0.1.1-rc.1` 提升至 `^0.1.1-rc.2`,并重新生成 package-lock.json。
|
|
762
|
-
- 增强文件完整性与编码防御:确保 `package.json` 及全部工程文件均为无 BOM 的 UTF-8 编码,新增 `test/package-integrity.test.ts` 自动化防范 UTF-8 BOM 引入与依赖一致性。已在本机 rc.2 依赖集上验证:typecheck、69 项测试与 tsdown 构建全部通过。
|
|
763
|
-
|
|
764
|
-
## 0.1.20 - 2026-08-22
|
|
765
|
-
|
|
766
|
-
- 新增独立的“子代理”设置页;模型、思考深度和上下文预算改为所有 DSH 内置子代理的全局设置,不再要求父 Agent 使用 Codex 模型。
|
|
767
|
-
- 新增全局 0–3 最大嵌套深度和每个父 Agent 子树的活动子代理数量上限;新委派即时受限,现有运行不被中断。
|
|
768
|
-
- 子代理设置扩展为 DSH 全部已接入 Provider/模型;思考深度使用所选模型的真实 reasoning effort 目录,上下文在选定模型后展开并作为子 Agent 的有效压缩预算。
|
|
769
|
-
- 设置页新增 GPT-5.6 Sol / Terra / Luna 有效上下文窗口配置:默认 272K,可选最高 1M,并动态影响 DSH 的模型解析、压缩阈值与溢出判断。
|
|
770
|
-
|
|
771
|
-
## 0.1.12 - 2026-08-20
|
|
772
|
-
|
|
773
|
-
- 适配 DSH `0.1.0-rc.8`:peerDependencies / devDependencies 中全部 DSH 包范围从 `^0.1.0-rc.6` 提升至 `^0.1.0-rc.8`,并重新生成 package-lock.json。已在本机 rc.8 依赖集上验证:typecheck、55 项测试与 tsdown 构建全部通过,插件代码无需改动。
|
|
774
|
-
- 移除已无引用的 `@deepseek-ai/dsh-agent` peer 依赖(子代理报告去重兼容模块已于 0.1.11 移除)。
|
|
775
|
-
- 新增 `@deepseek-ai/dsh-client-connection` peer 依赖(客户端 `ContentBlock` 类型来源,符合 rc.8 客户端包 peer 声明惯例)。
|
|
776
|
-
- 说明:rc.8 中 `@deepseek-ai/dsh-client-ui-slots` 不再是 DSH 运行时依赖图成员(仅保留为各客户端包的 devDependency),插件继续将其声明为 peer 依赖以保证安装时解析(`^0.1.0-rc.6` 联网安装时解析到 rc.8;本地锁文件因离线环境暂固定 rc.7,API 与 rc.8 用法一致)。
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
- **[MiniMax Code] Files API:超内联上限的媒体改走上传与 mm_file 引用**
|
|
6
|
+
- 新增 `src/host/minimax-code/files-api.ts`。这是让大视频可发送的唯一路径——内联 base64 涨 4/3,
|
|
7
|
+
50 MB 视频编码后约 67 MB,会超出 64 MB 请求体上限。
|
|
8
|
+
- **每项事实均为实测**,因为官方客户端的 `files_api_upload_endpoint` 只是相对路径,照抄会 404:
|
|
9
|
+
- 端点是 `/messages` 的**兄弟** `/mavis/api/v1/llm/v1/files/upload`。挂在 `/messages` 下面会得到
|
|
10
|
+
503 `direct_route_not_configured`,挂到 host 上会得到 404 HTML——两者都不像「路径差一段」。
|
|
11
|
+
- **只发 `Authorization`,不发本线路其它请求都带的 `X-Msh-*` 身份头**。带上去时服务回答
|
|
12
|
+
`{"file":null,…"invalid params"}`,与「表单字段名写错」逐字节相同(我扫了 8 个字段名加空表单,
|
|
13
|
+
全部同一句)。去掉身份头后同样的表单立刻成功。
|
|
14
|
+
- 表单 `purpose` 在前、`file` 在后;取值 `image_understanding` / `video_understanding`。
|
|
15
|
+
- 响应 `file.file_id`,但**失败时 HTTP 是 200**,必须同时检查 `base_resp.status_code === 0`,
|
|
16
|
+
否则会把字面量 `"null"` 当 id 发上线。
|
|
17
|
+
- 引用形态 `mm_file://<id>`,裸 id 会被拒为「非 http(s)」。
|
|
18
|
+
- 四个生命周期职责:TTL 取 12 小时并在过期后重传;缓存 key 含账号,**id 绝不跨账号复用**
|
|
19
|
+
(未验证是否跨账号可读,按不可读处理);删除因**服务端没有 delete 路由**而做不到,改为靠内容哈希
|
|
20
|
+
去重控制上传量;失败降级为「媒体保持内联、请求继续」,不让优化失败拖垮整轮。
|
|
21
|
+
- 触发点在两个体积 offload 之后,且只上传超过内联上限的媒体。
|
|
22
|
+
- `503 direct_route_not_configured` 单独归类为 `route-not-configured`,与「表单被拒」区分:
|
|
23
|
+
前者是账号没开该路由、重试无用,后者是请求本身的问题。
|
|
24
|
+
- 端到端验证:真实上传取得 `file_id`,以 `mm_file://` 引用发送,messages 返回 200。
|
|
25
|
+
- 测试:新增 `test/minimax-files-api.test.ts`(17 例),其中三例锁定本轮踩过的坑
|
|
26
|
+
(路径是兄弟而非子路径、只发 bearer、非 JSON body 要如实报告而非谎称「无理由拒绝」)。
|
|
27
|
+
- 实测细节与仍未解决的问题记录在 `docs/minimax-files-api-handoff.md`。
|
|
28
|
+
- 验证:`tsc -b --force` 与 `tsc -p test/tsconfig.json` 通过;`vitest run` 2555 passed / 7 skipped;
|
|
29
|
+
`npm run build` 通过。
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
- **[MiniMax Code] 支持视频输入;把视频子系统提取为两条线路共享**
|
|
33
|
+
- **视频能力(N6)**:M3 与 M3.1 现在声明并支持视频输入,此前只有文档记载、路由没有实现。
|
|
34
|
+
块形状与 base64 取向**均为实测**,未沿用 Kimi 线的猜测:
|
|
35
|
+
- 端点接受 `{ type: 'video', source: { type: 'base64', media_type, data } }`,并会解码后跑 ffprobe 校验;
|
|
36
|
+
- **裸 base64** 正确;`data:` URL 会在第 4 字节被拒(MiniMax 与 Kimi 的取向**相反**);
|
|
37
|
+
- `video_url`、把视频当 image、document 块三种形状均被明确拒绝;
|
|
38
|
+
- 无可读字节、或模型不支持时,降级为解释性占位文本而不是静默丢弃。
|
|
39
|
+
内联预算 `MAX_REQUEST_VIDEO_BYTES = 16 MB`(base64 涨 4/3,文档的 50 MB 会超出 64 MB 请求体上限);
|
|
40
|
+
更长的视频需要 Files API,见交接文档。
|
|
41
|
+
- **共享化**:视频的块类型、模态表增强、遍历、字节预算与 base64 编码,从 Kimi 线的 mapper 提取到
|
|
42
|
+
`src/host/common/video.ts` 与 `src/host/common/video-request.ts`。
|
|
43
|
+
必须共享的原因:`ModelModalityMap` / `ContentBlockMap` 的模块增强是全局的,
|
|
44
|
+
两条线路各写一份就是对同一个 `video` 键的重复声明。**wire 形状仍各线自有**——
|
|
45
|
+
两条端点的 base64 取向相反,不能共用编码。
|
|
46
|
+
- **能力表更新**:M3 / M3.1 的 `inputModalities` 加入 `'video'`。
|
|
47
|
+
该字段是 DSH 能力管道(提示准入、模型选择器、子代理委派)会据以行动的声明,
|
|
48
|
+
因此只有在线路真的能编码时才列入。
|
|
49
|
+
- **测试**:新增 `test/video-shared.test.ts`(7 例)覆盖共享层,
|
|
50
|
+
其中一例专门锁定「裸 base64、不加 data URL 前缀」这条与 Kimi 相反的约定;
|
|
51
|
+
更新 minimax review-fixes 的视频用例(此前断言「永不声明 video」,现改为「只在支持它的模型上声明」)。
|
|
52
|
+
- **N4 Files API 未实现**:已写交接文档 `docs/minimax-files-api-handoff.md`,
|
|
53
|
+
记录实测事实、实现清单、四个必须自建的生命周期职责,以及「不该做的事」
|
|
54
|
+
(其中「把 maxAttachments 当内联上限」是本轮已被实测推翻的错误)。
|
|
55
|
+
- **验证**:`tsc -b --force` 与 `tsc -p test/tsconfig.json` 通过;
|
|
56
|
+
`vitest run` 2538 passed / 7 skipped;`npm run build` 通过。
|
|
57
|
+
|
|
58
|
+
- **[MiniMax Code] 按官方文档更正 thinking 控制字段**
|
|
59
|
+
- **背景**:与官方开源客户端 `MiniMax-AI/minimax-code`(`56221c1`)对照后,逐项核对 MiniMax 官方文档
|
|
60
|
+
`platform.minimax.io/docs/guides/text-generation.md`,发现 thinking 控制字段的形状与文档不符。
|
|
61
|
+
- **thinking 字段更正**(经实测确认):
|
|
62
|
+
- 文档明确 **Thinking is on by default and needs no configuration**。原实现发送的
|
|
63
|
+
`thinking: {type:'enabled', effort}` 是**从未被文档支持的推断字段**——这也解释了为什么它
|
|
64
|
+
一直「生效」:思考之所以出现是因为模型默认就在思考,与该字段是否被读取无关。
|
|
65
|
+
现**完全不再发送 `thinking` 对象**。
|
|
66
|
+
- 文档的协议对照表规定 Anthropic 兼容面的思考深度字段是**顶层 `output_config.effort`**,
|
|
67
|
+
而非 thinking 对象内部。原实现把 `effort` 放错了层级,服务端不会读取。
|
|
68
|
+
- 文档的 effort 取值只有 `low` / `medium` / `high` / `xhigh` / `max`,且**省略即 max**。
|
|
69
|
+
原实现的 `'default'` 是本地占位值,现不会到达 wire;调用方未指定时整个 `output_config` 字段不出现。
|
|
70
|
+
- 实测确认:用一个需要真实推理的题目,`low` 约 1.1–1.3K 输出 / 11–14s,`max` 4000 输出触顶 /
|
|
71
|
+
51–62s,约 3 倍思考量、4 倍延迟,字段确实被读取。(用简单题目测会得到「无差异」的**假阴性**——
|
|
72
|
+
任何档位下思考量都相同。)
|
|
73
|
+
- **实测纠正一处误判**:曾按「`maxAttachments` 只声明、无人执行」为它新增按数量截断,随后用已登录账号
|
|
74
|
+
实测发现 **M3 带 4/5/8/9/10/12/20/48 张内联图全部返回 200**,订阅端点对内联图片**没有数量上限**。
|
|
75
|
+
该字段来自模型的 **Files API 能力块**(`max_attachments_count`),描述的是**上传路径**,
|
|
76
|
+
而本线路从不走上传——与 `filesApiDocumented` 描述的是同一件事。**按数量截断只会白白丢掉服务
|
|
77
|
+
免费接受的图片,已回退**;字段文档改写为「Files API 的数字,本线路不上传」。
|
|
78
|
+
教训:「声明了却无人执行」不总是 bug,先要确认那个声明描述的是不是自己走的路径。
|
|
79
|
+
- **补齐缺失的请求形状测试**:此前 `thinkingFieldFor` / `body.thinking` / `output_config` 在整个
|
|
80
|
+
测试树中**零命中**——现有的 thinking 回放用例只检查**响应侧**,所以请求体字段写错永远不会被发现,
|
|
81
|
+
这正是该推断字段能长期存活的原因。新增 7 例锁定:任何模型任何档位都不发送 `thinking` 键、
|
|
82
|
+
effort 落在顶层、省略时字段不存在、非法档位不落到 wire。
|
|
83
|
+
- **验证**:`tsc -b --force` 与 `tsc -p test/tsconfig.json` 通过;`vitest run` 2529 passed / 7 skipped;
|
|
84
|
+
`npm run build` 通过。
|
|
85
|
+
- **留待决策 / 实测**:
|
|
86
|
+
- 官方文档规定**省略 effort 即为 max**,而 `max` 档在 4000 输出上限下就已触顶。这意味着
|
|
87
|
+
**未指定档位的请求默认跑在最贵档位**。这是文档定义的行为而非缺陷,但是否把默认降到 `high`
|
|
88
|
+
值得作为产品决策复核。
|
|
89
|
+
- 实测确认 **M3 可以关闭思考**(`effort:'none'` 生效),**M3.1 忽略它并继续思考**,与官方文档一致,
|
|
90
|
+
因此现有的 `toggle` / `forced-effort` 划分保持不变。
|
|
91
|
+
- M3 上下文 512K(本线路,抄自订阅 `config.yaml`)vs 1M(平台文档)口径不同,需约 4 MB 提示才能
|
|
92
|
+
验证,**未获授权前不烧额度**,保持原样。
|
|
93
|
+
- **[Kimi Code] 对齐官方客户端的 K 系列模型能力,修复两处正确性缺陷与一处并发归因错误**
|
|
94
|
+
- **背景**:与官方开源客户端 `MoonshotAI/kimi-code`(`21406fb`)逐文件对照后的 11 项差距,分四批落地。
|
|
95
|
+
- **正确性**:
|
|
96
|
+
- tool-call id 原本只做 `slice(0, 64)`——共享 64 字符前缀的两个 id 会被截成同一个,**后续工具结果配错到错误的调用**;且不净化字符,`.` `:` 空格可能让服务端拒绝整个请求。现改为「净化 + 截断 + 碰撞递增后缀」,后缀同样受 64 上限约束。请求侧与流式侧共享同一个 normalizer,保证同一调用在两侧得到同一 id。
|
|
97
|
+
- reasoning 字段名原本硬编码 `reasoning_content`。Kimi 用该名,但新版 vLLM 已改名为 `reasoning` 且请求侧**只认**新名(vllm#38488)——回写旧名会静默丢失每个历史 assistant 轮次的思考链,并触发 "thinking is enabled but reasoning_content is missing"。现按对端实际用过的键回写(覆盖 `reasoning_content` / `reasoning_details` / `reasoning`)。
|
|
98
|
+
- **并发**:前缀稳定性追踪与缓存统计原本是进程级单例,DSH 多会话 / subagent 并行时会互相覆盖,归因指向**另一个会话**的变更——这类错误比没有归因更糟,因为用户会相信它。现按 `sessionId`(漂移)与 `sessionId + accountId`(缓存统计,账号池下每个账号在服务端各有一份缓存)分桶,并有 256 会话 LRU 上限。状态接口新增 `?sessionId=` 参数。
|
|
99
|
+
- **服务端声明驱动**:新增 `supports_thinking_type` 三态(`only` 剔除 `none`、`no` 返回空)、`limit.input` 独立输入上限(prompt 用 `min(window, cap)` 夹,输出仍用完整窗口)、`supports_tool_use`(与「不支持消息级工具」区分开)、`status` 退役模型过滤。设置卡片相应展示「输入上限」「不支持工具」。
|
|
100
|
+
- **成本可见性**:新增缓存过期提示——空闲超过所选 TTL 且上下文足够大时提示下一轮将重新处理的 token 数。判定沿用官方的「缺数据即跳过」原则,宁漏报不误报。`cacheWriteTokens` 保留字段并标注该线路恒为 0。
|
|
101
|
+
- **验证**:`tsc -b --force` 与 `tsc -p test/tsconfig.json` 通过;`vitest run` 2522 passed / 7 skipped(新增 45 例);`npm run build`、`npm pack --dry-run` 通过。
|
|
102
|
+
- **未做**:Moonshot 开放平台(API Key)线路——它是唯一能触达 `kimi-k*` 真实 K 系列 id 的路径,按决定暂缓。
|
|
103
|
+
|
|
104
|
+
- **[Kimi Code] 图片超预算时按需缩放而非丢弃,稳定提示缓存前缀**
|
|
105
|
+
- **现象**:一次 UI 走查连续贴入 10 张 1440×1000 截图时,`cacheReadTokens` 四次断崖式下跌(100,864 → 16,384 等),合计约 13.3 万 token 被迫按未命中全价重算。
|
|
106
|
+
- **根本原因**:Kimi 网关对单次请求的**整个消息体**限制 2 MB(官方报错 `total message size N exceeds limit 2097152`),图片 base64 与对话文本、工具 Schema、System Prompt 共享该额度。插件的 `MAX_REQUEST_IMAGE_BYTES`(1.5 MB)超出后,`offloadOldestRequestImages` 从最旧的图开始丢弃。**丢弃张数随每张新图递增,而每次变化都会重写保留前缀,于是下一轮缓存再次失效**——第 4、6、8、10 张图各触发一次,四次全部落在图片注入之后。
|
|
107
|
+
- **修复方案**:
|
|
108
|
+
- `resolveRequestImages` 对长边超过 1024 px 的图片调用 Harness 的 `attachments.readImageRequest` 派生缩小版本(目标 256 KiB 原始字节,约 350 KiB base64,四张可落入 1.5 MB 预算),已在限额内的图片保持原字节不变。存储的原图与会话历史均不作修改。
|
|
109
|
+
- **为何按长边而非累加字节判定**:`readImageRequest` 的 `variantId` 由附件与目标内容寻址,同一张图在每一轮得到同一个 target,字节恒定;若改按累加量动态调整 target,每新增一张图都会改写全部旧图字节,反而造成更频繁的缓存击穿。
|
|
110
|
+
- **降级容错**:派生版本仍超边长时优雅降级为 `[image unavailable]` 占位文本;派生失败同样降级;用户主动取消(Abort)正常透传。
|
|
111
|
+
- `offloadOldestRequestImages` 的丢弃逻辑保留为总量兜底,仅在原图大到缩放也装不下时触发。
|
|
112
|
+
- **测试与验证**:新增 11 项回归测试(长边/竖图缩放、已在限额内逐字节原样发送、十张 QA 图不再触发丢弃、派生超限与失败降级、取消透传);`npm run typecheck`、`npm test`(2467 passed / 7 skipped)与 `npm run build` 全部通过。
|
|
113
|
+
- **已知限制**:十张 1440×1000 截图缩放后仍超出 1.5 MB 预算,需缩到 1000 px 宽以内(四张以内)方可全量保留;本改动的作用是使省略数量不再随新增图片递增,从而不再反复击穿缓存。
|
|
114
|
+
|
|
115
|
+
- **[Antigravity] Claude 工具 Schema 兼容降级处理([#39](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/39))**
|
|
116
|
+
- **背景与现象**:Claude 对出站工具的 JSON Schema 要求较严苛,包含复杂联合类型时容易报错。
|
|
117
|
+
- **解决方案**:
|
|
118
|
+
- **Schema 折叠降级**:仅针对 Claude 目标,在出站边界折叠 `anyOf` / `oneOf` / `allOf` 与类型联合;优先保留可填写的对象形状,将原始备选形式与约束摘要放入字段描述(Description)中。
|
|
119
|
+
- **枚举合并**:同类型枚举合并时保留空字符串重置值。
|
|
120
|
+
- **覆盖范围**:覆盖调度参数、权限枚举、引用引用($ref)、数组、根级联合、可空类型及单分支结构。
|
|
121
|
+
- **隔离保障**:此改动为网关兼容降级,不修改原始工具 Schema;Gemini 保持原转换路径;工具端仍严格校验实际参数。
|
|
122
|
+
- **验证**:通过离线序列化请求验证,全量测试通过(2456 passed / 7 skipped)。
|
|
123
|
+
|
|
124
|
+
- **[通用配置] 网页抓取 Provider 选择与响应上限可配置([#40](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/40))**
|
|
125
|
+
- **新增配置项(插件 Config)**:
|
|
126
|
+
- `fetchProvider`: 可选 `auto | plugin | dsh`(默认 `auto` 保持既有行为)。`dsh` 显式优先于代理检测和 Codex 搜索选择;`plugin` 则独立启用插件自身抓取。
|
|
127
|
+
- `fetchMaxBodyChars`: 抓取正文最大字符数(默认 100,000,须为正安全整数)。
|
|
128
|
+
- `fetchMaxResponseBytes`: 最大响应字节数(默认 2,097,152,即 2 MB,须为正安全整数)。
|
|
129
|
+
- **界面与日志**:插件状态接口、设置页及切换日志展示当前配置与上限(日志中自动脱敏代理凭据);README 补充配置重载说明。
|
|
130
|
+
- **注意事项**:DSH 抓取模式不使用插件设置的上限;工具层另有固定输出限制。测试已固定离线 DNS,不再依赖本机透明代理。
|
|
131
|
+
|
|
132
|
+
- **[Claude] 修复多图会话因单张宽图导致后续所有轮次永久卡死 400**
|
|
133
|
+
- **报错信息**:`messages.N.content.M.image.source.base64.data: At least one of the image dimensions exceed max allowed size for many-image requests: 2000 pixels`
|
|
134
|
+
- **根本原因**:
|
|
135
|
+
- **Anthropic 接口限制**:单张图片最长边上限为 8000 px;但当单次请求图片**超过 20 张**时,每张图片的最长边不得超过 **2000 px**。
|
|
136
|
+
- **存图与累积**:DSH 归一化存图规则为总像素 2048×2048、最长边 8192,导致常见并排对比截图(如 2904×1272)被原样落盘存储。会话历史不断累加图片,一旦总数 >20 且存在宽图,整轮请求即报 400,且后续轮次及派生(fork)会话均无法自行恢复。
|
|
137
|
+
- **修复方案**:
|
|
138
|
+
- **动态上限决策**:`resolveRequestImages` 预先统计请求包含的图片总数(含重复附件及 `tool-result` 嵌套图片),超过 20 张时将最长边阈值收敛至 2000 px,否则为 8000 px。
|
|
139
|
+
- **精准按需压缩**:仅对超限图片调用 Harness 的 `attachments.readImageRequest` 派生缩小版本;未超限图片保持原字节不变,确保提示缓存(Prompt Cache)前缀稳定。存储的原图及会话历史均不作修改。
|
|
140
|
+
- **降级容错**:若无法获取缩小版本或派生结果依然超限,优雅降级为可见的 `[image unavailable]` 占位文本,避免整轮对话崩溃;用户主动取消(Abort)正常透传。
|
|
141
|
+
- **老版本兼容**:兼容 peer 范围内 0.1.2-alpha.5 起各代 Harness(兼容旧版 `maxPixels` 与新版宽高目标参数,按未取整宽高比计算像素预算)。
|
|
142
|
+
- **测试与验证**:新增 7 项边缘限制回归测试,并通过 34 张真实历史图片(含 3 张 2904×1272 截图)离线回放验证,超限图成功缩至 2000×876,其余 31 张原样发送。
|
|
143
|
+
|
|
144
|
+
- **[通用机制] 插件内上下文预算自愈恢复机制(400/422 重试)**
|
|
145
|
+
- **适用范围**:Kimi Code、MiniMax Code、Command Code、Claude、WorkBuddy。
|
|
146
|
+
- **工作机制**:
|
|
147
|
+
- 当模型请求返回 HTTP 400 / 422 且明确报告了自洽的窗口、输入及输出 token 计数时,若当前输入仍能容纳且上游输出预留与实际发送上限一致,插件会自动保留全部完整消息与工具定义,**仅下调输出上限并自动重试一次**(预留 1024 tokens 余量,且至少保留 1024 输出 tokens)。
|
|
148
|
+
- 普通生成请求与压缩摘要请求共用此恢复链路,无需修改 DSH 核心代码,亦不截断历史消息。
|
|
149
|
+
- **边界保障**:显式 `thinking budget` 不满足时不强行重试;鉴权失败、限流、请求体超限、模糊计数及流式错误均维持原样报错。Kimi / MiniMax 的输入估算补齐了推理文本与工具调用参数计算。
|
|
150
|
+
|
|
151
|
+
- **[设置 / UI] 修复设置页「订阅服务」整页样式丢失(仅标签栏有样式,正文裸奔)**
|
|
152
|
+
- **根本原因**:客户端插件系统的样式归属记账机制存在副作用。当其他模块 Materialize 时,会扫描并认领页面内所有未打标(`style:not([data-plugin])`)的 `<style>` 标签。当那个模块被重载或销毁时,会调用 `removeOwnedStyles` 批量删掉名下标签。本插件原先注入的 7 张独立样式表未打上 `data-plugin` 属性,导致被其他插件误认领并随之被删除,仅留存了聊天区的 `.../main` 样式表。
|
|
153
|
+
- **修复方案**:
|
|
154
|
+
- 新增 `src/client/common/plugin-style.ts` 中的统一安装器 `installPluginStyle(name, css, legacyId?)`。
|
|
155
|
+
- 统一按 `data-plugin-css` 定位,创建或命中时均强制打上本插件的 `data-plugin` 归属标记;CSS 变更时直接更新 `textContent`,`disposer` 设为空操作以将样式表托管给文档生命周期。
|
|
156
|
+
- 自动就地接管旧 bundle 残留在 DOM 中的未打标样式元素,杜绝重复注入和误删。
|
|
157
|
+
- **验证**:新增 `test/client-style-ownership.test.ts` 5 项测试,断言 DOM 中无遗留未标记样式表,且模拟重载清理后能完整恢复。
|
|
158
|
+
|
|
159
|
+
- **[Ollama] 修复「同步模型列表」报 `Unexpected end of JSON input`([#36](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/36))**
|
|
160
|
+
- **根本原因**:
|
|
161
|
+
- 并非 Ollama Cloud 端点或 Token 鉴权问题,而是插件自身的 `/ollama/api` 路由处理器未加全局 `try/catch` 保护。
|
|
162
|
+
- 当底层设置落盘失败抛错时,DSH 内置 Web Server 会返回一个完全没有 Body 的空 HTTP 400 响应(`res.writeHead(400); res.end()`)。前端卡片直接调用 `response.json()` 解析空响应体,触发原生语法解析异常,掩盖了真实的报错原因。
|
|
163
|
+
- **修复方案**:
|
|
164
|
+
- **服务端兜底**:路由处理器全量增加 `try/catch`,统一采用 `{ ok: false, error }` 规范封包返回,并补齐 404 兜底与独立保护。
|
|
165
|
+
- **精细化错误诊断**:新增 `fetchCatalog()`,区分 `auth`(401/403,提供 API Key 链接)、`upstream`(上游其他状态码)、`unreachable`(DNS/TLS/超时)、`malformed`(代理返回 HTML 等非 JSON 格式);细化区分“未配置 Key”与“所有 Key 均在冷却中”。
|
|
166
|
+
- **客户端安全解析**:前端改用先读文本再解析的策略,遇空响应体或非 JSON 格式时清晰展示 HTTP 状态码与 Content-Type,杜绝原生异常弹窗。
|
|
167
|
+
- **验证**:新增 12 条路由回归测试(包含写入中断断言)及 8 条客户端解析测试,测试全部通过。
|
|
168
|
+
|
|
169
|
+
- **[通用机制] 上下文超限错误归一化映射以支持 Harness 自动压缩**
|
|
170
|
+
- **改进内容**:
|
|
171
|
+
- 将 MiniMax、Kimi、Codex、Claude、Command Code、WorkBuddy 与 Antigravity 接入的 HTTP/SSE 上下文超限错误标准归一化为 `CONTEXT_WINDOW_EXCEEDED`。
|
|
172
|
+
- 使得支持溢出自愈的 Harness 能顺利触发会话压缩与历史修剪,而非直接以 Provider 普通错误中断对话。
|
|
173
|
+
- 鉴权、限流、配额不足及输出长度上限等错误保持独立归类;Command Code OpenAI 协议及 Antigravity 流内错误帧不再被静默忽略。
|
|
174
|
+
|
|
175
|
+
- **[Claude / Command Code] 修复登录时弹出两个一模一样授权页的问题([#33](https://github.com/Aa728848/dsh-chatgpt-subscription/pull/33))**
|
|
176
|
+
- **根本原因**:
|
|
177
|
+
- 授权窗口被前端与后端各触发了一次:前端设置卡片在 `/login` 返回后调用 `window.open(authUrl)`;而主机端 `/login` 路由在调用 `beginLogin` 时未显式传入 `openBrowser` 参数,触发了默认逻辑,在宿主机上通过系统命令(`cmd /c start` / `open` / `xdg-open`)再次拉起了浏览器。
|
|
178
|
+
- **修复方案**:
|
|
179
|
+
- 统一采用“仅在前端卡片打开”的交互范式,保留用户界面所在终端的 `window.open`(支持远程访问 GUI),主机端默认将 `openBrowser` 置为空操作,彻底消除双重拉起。
|
|
180
|
+
- 经全线路审计:Antigravity、WorkBuddy、Codex 均已是单开,本次修复完善了 Claude 与 Command Code 两条线路。
|
|
181
|
+
|
|
182
|
+
- **[Codex] 修复响应流异常中断被误判为 `UNKNOWN` 导致拒绝重试([#32](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/32))**
|
|
183
|
+
- **根本原因**:
|
|
184
|
+
- 底层 Undici 连接在流消费阶段异常断开时抛出无 Code 的 `TypeError: terminated`(真实原因挂载在 `.cause`,如 `ECONNRESET`)。
|
|
185
|
+
- 错误经过适配器边界时被默认归一化为 `code: "UNKNOWN"`,而 Codex 线路声明的可重试集合不包含 `UNKNOWN`,导致 `dsh-llm-retry` 放弃重试,一次网络微小中断即导致整轮任务失败。
|
|
186
|
+
- **修复方案**:
|
|
187
|
+
- 在 `ResponsesClient.stream()` 消费阶段补齐 `catch` 并由 `streamFailure()` 归类:非取消错误一律归类为 `TRANSPORT`,并将完整 Cause 链路提取至 Message(如 `Codex stream failed: terminated: read ECONNRESET`),成功命中可重试策略。
|
|
188
|
+
- 即使流已产生部分 Chunk 也依然按可重试处理(由 DSH 将半截输出结算为已丢弃的 Attempt,重试会重新开启完整尝试,工具调用只在流正常结束时执行,安全无副作用)。
|
|
189
|
+
- **验证**:新增 4 项流异常分类测试,断言 Undici 中断错误能正确识别为 `TRANSPORT` 并触发重试策略。
|
|
190
|
+
|
|
191
|
+
- **[Antigravity] 修复 Claude 普通文本回放碎片化导致触碰缓存上限**
|
|
192
|
+
- **改进内容**:
|
|
193
|
+
- 修复此前将每个 SSE 文本 Delta 都回放为独立内容块的问题。
|
|
194
|
+
- 回放时仅合并相邻的纯文本 Part,保留签名、工具调用及其他元数据边界(Gemini 逻辑保持不变)。
|
|
195
|
+
- 消除因数百个碎文本块触碰 Claude 20-position 缓存回看限制的问题,优化多轮对话缓存复用率。
|
|
196
|
+
|
|
197
|
+
- **[Antigravity] 修复 Claude 多轮对话报 `thinking.signature: Field required`**
|
|
198
|
+
- **改进内容**:在请求回放时,自动将连续的思考分片与独立签名合并为结构完整的 Thinking Part;自动剔除缺少签名的残缺分片及跨模型残留 Reasoning,保留正常正文与工具调用。
|
|
199
|
+
|
|
200
|
+
- **[Antigravity] 新增 Claude Opus 5.5 / Sonnet 5.5 模型支持**
|
|
201
|
+
- **改进内容**:
|
|
202
|
+
- 对齐 `fetchAvailableModels` 实时目录,新增对应 `-low` / `-medium` / `-high` 推理档位路由。
|
|
203
|
+
- 默认上下文窗口与输出上限沿用反重力 Claude 规范(1M / 64K)。用户可在设置中自主勾选启用。
|
|
204
|
+
|
|
205
|
+
- **[协议复核] 多线路 Provider 报文格式与并发闸门校准**
|
|
206
|
+
- **改进内容**:
|
|
207
|
+
- 校准 Command Code Responses 的真实事件标识、块索引与多模态报文;
|
|
208
|
+
- 规范 Ollama 原生图片/工具参数传递、附件降级机制及工具历史格式;
|
|
209
|
+
- 增强 MiniMax 原生回放的来源隔离与顺序保护;
|
|
210
|
+
- 优化并发闸门控制逻辑,正确处理动态降限、正小数配额与取消竞争;Codex 改用请求本地释放句柄,不再由普通 429 误推断全局并发上限。
|
|
211
|
+
|
|
212
|
+
- **[思维保护] 修复思维坍塌保护(Reasoning Collapse Guard)构造非法消息导致会话损坏**
|
|
213
|
+
- **问题现象**:触发推理坍塌守卫后,会话卡死且 DSH 提示「是否修复插件根因」。
|
|
214
|
+
- **根本原因**:
|
|
215
|
+
- 守卫构建续跑消息时使用了手写字面量对象 `{ role: 'user', content: [...] }`,缺少 `id` 与 `source` 属性。
|
|
216
|
+
- DSH 在 `session.append` 时进行严格校验,抛出 `lacks an identified message` 及 `has invalid source` 异常,导致会话状态损坏并中断。
|
|
217
|
+
- **修复方案**:改用官方 `createUserMessage()` 工厂函数,并附带本插件专用的 `dsh-chatgpt-subscription` source kind、`form: 'notice'` 标记与摘要信息,确保在全代际 DSH 运行环境中均完全合规。
|
|
218
|
+
- **测试**:新增集成用例,将守卫输出的消息送入真实 `adoptSessionEvent` 校验通过。
|
|
219
|
+
|
|
220
|
+
- **[压缩策略] 修复输出上限作为固定预留导致自动压缩失效([#30](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/30) / [#31](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/31))**
|
|
221
|
+
- **改进内容**:
|
|
222
|
+
- Kimi / MiniMax 不再将动态预算上报为固定的 `defaultMaxTokens`,改为在发送阶段动态计算并对齐上限,避免压缩器误扣固定额度。
|
|
223
|
+
- 其余六条线路对齐 DSH 默认压缩策略,安全过滤过大的默认预留值,解决 Command Code(Kimi-K2.6、Grok 4.5/4.6)及 WorkBuddy(deepseek-v3-2-volc)因预留过大导致无法触发压缩的问题。
|
|
224
|
+
|
|
225
|
+
- **[Codex] 对齐官方客户端默认参数:优化 Verbosity 并默认省略推理摘要以节省额度**
|
|
226
|
+
- **背景与取证**:
|
|
227
|
+
- 与官方 Codex CLI 随包模型表(`codex-rs/models-manager/models.json`)及真实会话报文严格核对:官方每个模型均声明 `default_reasoning_summary: "none"`、`default_verbosity: "low"`、`support_verbosity: true`。
|
|
228
|
+
- **问题分析与修复**:
|
|
229
|
+
- **额度浪费修复**:此前未配置时插件发送 `{ summary: 'auto' }`,而推理摘要属于计费输出内容,导致用户每轮对话都在产生额外计费。现修复为:未配置或选“无”时**完全省略 `summary` 字段**(对齐官方 `skip_serializing_if = "Option::is_none"`);显式选择 `auto` / `concise` / `detailed` 时如实发送。
|
|
230
|
+
- **详细度对齐**:此前未配置时不发送 `text` 字段,服务端会套用默认的 `medium`,导致生成文本比官方更啰嗦。现未配置时按目录默认发送 `low`。
|
|
231
|
+
- **模型能力感知**:新增 `codexCatalogEntryById()`,仅对明确声明支持 `supportsOutputVerbosity` 的模型发送 `text.verbosity` 字段,避免向未知模型注入非法字段。
|
|
232
|
+
- **测试**:新增 5 项官方契约回归测试,锁定默认参数与字段省略逻辑。
|
|
233
|
+
|
|
234
|
+
- **[Command Code] 同步官方 92 个新模型目录,补齐思考等级与多模态输入**
|
|
235
|
+
- **根本原因**:
|
|
236
|
+
- 插件内置能力表滞后(仅包含 74 个旧模型),而官方 CLI 注册表及实时 `/provider/v1/models` 端点已扩充至 92 个模型。适配器对未知模型采取保守回退策略(纯文本且无思考等级),导致 16 个真实在服模型丢失了图片输入和思考档位选择(如用户反馈的 `deepseek/deepseek-v4.1-flash-fast`,以及 `gpt-6-sol`、`claude-sonnet-5-5`、`xai/grok-4.7`、`z-ai/glm-5.3-flashx` 等)。
|
|
237
|
+
- **修复方案**:
|
|
238
|
+
- **重构能力目录**:完整同步官方注册表(覆盖 85 个实际服务模型),精确补齐上下文窗口、maxTokens 与思考档位;
|
|
239
|
+
- **规范化思考关闭(off -> none)**:读取端将官方注册表的 `off` 映射为 DSH 标准的 `none`;向底层发包时彻底移除 `reasoning` 字段(该线路上游通过省略字段表示关闭思考);
|
|
240
|
+
- **防止 cross-model 400 报错**:设置页提供全局默认档位,但不同模型支持的档位不同;适配器发包前动态校验模型支持档位,若全局默认档位不被当前模型支持,自动回退到该模型自身的默认档位,杜绝上游拒绝。
|
|
241
|
+
- **测试与验证**:新增实时模型覆盖与 `none` 字段省略断言,全量测试通过。
|
|
242
|
+
|
|
243
|
+
- **[Codex] 修复对话每轮报 400:移除上游拒收的 `max_output_tokens` 字段([#29](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/29))**
|
|
244
|
+
- **根本原因**:
|
|
245
|
+
- 插件在请求未指定 `maxTokens` 时会自动补上模型上限并发送 `max_output_tokens` 字段。然而订阅版 Responses 对话端点会直接拒绝该字段(返回 `400 Unsupported parameter: max_output_tokens`)。
|
|
246
|
+
- 经查阅官方 Codex CLI 源码(`ResponsesApiRequest`),官方客户端在对话时**从不发送**此字段;发它是插件早期的冗余实现。
|
|
247
|
+
- **修复方案**:
|
|
248
|
+
- 在 `buildResponsesPayload()` 中彻底删除 `max_output_tokens` 写入,生成长度交由服务端默认行为决定(与官方 CLI 一致)。
|
|
249
|
+
- 适配器内部仍正常上报 `defaultMaxTokens` 供 DSH 本地用于计算压缩窗口预算(不出进程)。
|
|
250
|
+
- **测试**:重写契约测试,断言对话报文绝不携带 `max_output_tokens` 字段。
|
|
251
|
+
> ⚠️ **历史说明**:更早版本中“修复声明了输出上限却从不发送”的条目已被推翻,确认对话端点不可发送该字段。
|
|
252
|
+
|
|
253
|
+
- **[Codex] 修复模型选择器在部分套餐(如 Prolite)下显示为空的问题**
|
|
254
|
+
- **根本原因**:
|
|
255
|
+
- 接入实时模型目录后,插件将订阅接口返回的模型与用户勾选的可见模型取交集。
|
|
256
|
+
- 部分订阅套餐(如 Prolite)的 `GET /backend-api/codex/models` 仅返回了代码审查相关的 slug(如 `codex-auto-review`),交集计算后导致列表为空。实际上该账号具备普通对话模型的可用权限。
|
|
257
|
+
- **修复方案**:
|
|
258
|
+
- 订阅目录依然作为可用模型的权威参考;但当交集为空时,**优雅回退至插件内置的模型表**,并按用户勾选进行过滤,确保模型选择器永不意外变空。
|
|
259
|
+
- **测试**:覆盖空目录场景与有效目录场景的边界测试。
|
|
260
|
+
|
|
261
|
+
- **[MiniMax] 修复请求体 2 MB 本地虚假拦截与图片预算过小问题**
|
|
262
|
+
- **问题现象**:会话进行到约 2 MB 时,插件在本地直接抛错拦截(`request was not sent: the serialized body is ... above the 2097152-byte ceiling`),请求根本未发出。
|
|
263
|
+
- **根本原因**:
|
|
264
|
+
- 插件原实现错误复用了 Kimi 线路的 `MAX_MESSAGE_BODY_BYTES`(2 MB)。2 MB 是 Kimi 网关自身的硬性限制,而 MiniMax 的 Anthropic 兼容端点支持数十 MB 的请求体。
|
|
265
|
+
- MiniMax 允许单张图片 10 MB 原始数据,2 MB 的整包限制会导致单张合法图片即触发本地误拦截。
|
|
266
|
+
- 类似地,图片预算原先也错误借用了 Kimi 的 1.5 MB 预算,导致合法图片被静默替换成了占位文本。
|
|
267
|
+
- **修复方案**:
|
|
268
|
+
- **独立上限**:将请求体上限调整为 MiniMax 自有的 `DEFAULT_MAX_MESSAGE_BODY_BYTES`(64 MB),并支持环境变量 `DSH_MINIMAX_CODE_MAX_BODY_BYTES` 自定义覆盖;
|
|
269
|
+
- **放宽图片预算**:将单图预算调整为本线路自有的 `DEFAULT_MAX_REQUEST_IMAGE_BYTES`(16 MB),装得下 10 MB 单图并留足余量,支持 `DSH_MINIMAX_CODE_MAX_IMAGE_BYTES` 覆盖;
|
|
270
|
+
- **横向审计**:对全仓库 7 条线路的请求体和图片预算进行了严格审计,明确各线路均根据对应网关的真实属性独立定义,避免不合理的跨线路继承。
|
|
271
|
+
- **测试**:新增 7 项映射层测试,验证 >2 MB 真实请求体正常通过,失控请求依然被拦截。
|
|
272
|
+
|
|
273
|
+
- **[Claude / Kimi] 提示缓存时长(TTL)支持自定义配置(5 分钟 / 1 小时)**
|
|
274
|
+
- **Claude 线路**:
|
|
275
|
+
- 官方 Claude Code 订阅用户在额度内支持 **1 小时** 提示缓存 TTL(超出后降为 5 分钟)。此前插件仅发送默认 5 分钟的 `{ type: 'ephemeral' }`,未能享受到官方的 4 倍缓存窗口。
|
|
276
|
+
- 现默认按订阅身份发送 `ttl: '1h'`,并同步附加授权 Beta 头 `extended-cache-ttl-2025-04-11`。设置页支持切换“跟随官方 / 1 小时 / 5 分钟”。
|
|
277
|
+
- **Kimi Code 线路**:
|
|
278
|
+
- 对齐官方文档,OpenAI 兼容协议支持 `prompt_cache_options`,Anthropic 兼容协议支持顶层 `cache_control`;默认未配置时不发送任何缓存字段。
|
|
279
|
+
- **测试**:新增 11 条缓存 TTL 单元测试,覆盖不同协议与档位校验。
|
|
280
|
+
|
|
281
|
+
- **[Codex] 跟进上游第三方接入规范(Beta 头、统一 Originator、实时目录与多轮续传)**
|
|
282
|
+
- **补齐 Beta 标头**:出站请求统一携带 `openai-beta: responses=experimental`;
|
|
283
|
+
- **统一 Originator**:收敛各端点的 Originator 标识为单一的 `CODEX_ORIGINATOR`(统一为 `opencode`),避免登录与不同端点识别产生割裂;
|
|
284
|
+
- **实时模型目录**:接入 `GET /backend-api/codex/models` 动态加载,支持 15 分钟单飞缓存与本地磁盘快照持久化,新模型发布无需频繁更新插件代码;未知模型保守回落,不臆造虚假能力;
|
|
285
|
+
- **多轮提示续传**:支持发送 `prompt_cache_key` 并回传响应头 `x-codex-turn-state`,提升服务端前缀缓存命中与多轮对话续接效率;本地维护 LRU 缓存避免内存无界增长。
|
|
286
|
+
- **测试**:新增 19 条测试,覆盖 Wire 标头、Originator 一致性、实时目录与状态回传。
|
|
287
|
+
|
|
288
|
+
- **[号池架构] 修复所有订阅线路共享号池的读-改-写竞态**
|
|
289
|
+
- **根本原因**:此前各线路对号池的读写未实现跨异步操作的严格锁保护,当多并发请求触发 Token 刷新或设置更新时,后提交的事务容易覆盖先提交的新 Token、账号及冷却状态。
|
|
290
|
+
- **重构要点**:
|
|
291
|
+
- **严格原子事务**:账号增删、备注、主账号切换、冷却标记等操作均在统一锁内完成“读最新 -> 改 -> 写”闭环;
|
|
292
|
+
- **非阻塞整池单飞**:令牌刷新采用按账号/凭据代际的独立单飞控制,网络 I/O 在锁外执行,避免死锁;
|
|
293
|
+
- **条件写保护**:凭据写回严格比对发起时的版本代际,过时刷新结果直接丢弃,杜绝复活已删除账号或覆盖新登录凭据;
|
|
294
|
+
- **落盘验证与记账解耦**:关键 Token 落盘后立即读回校验;最近使用时间等非关键记账失败不阻塞正常请求。
|
|
295
|
+
- **测试**:新增并发冲突回归测试(`test/account-pool-concurrency.test.ts`)。
|
|
296
|
+
|
|
297
|
+
- **[Claude] 线路健壮性审计修复(综合 8 项)**
|
|
298
|
+
- **账号重新登录写错存储**:修复“按账号重新登录”后将新凭据写入旧单账号文件而非号池行、导致死循环提示重新登录的问题;
|
|
299
|
+
- **刷新令牌解析失败重发**:修复 HTTP 200 但响应体解析异常时重复重试消费型 Refresh Token 导致凭据失效的问题;
|
|
300
|
+
- **登录轮询停滞**:修复卡片在轮询到 `exchanging` 瞬态时提前停止轮询的 Bug;
|
|
301
|
+
- **空文本块防御**:对于纯图片的工具调用结果,自动填充 `(see attached image)` 占位文本,避免因空文本块被 API 拒绝;
|
|
302
|
+
- **孤立代理项字符清洗**:工具输出按字节截断时若在 Emoji 中间断开,`JSON.stringify` 会产生未配对的代理项字符(`\uD83D`);现统一清洗孤立代理项与 NUL 字符;
|
|
303
|
+
- **403 权限错误误判**:上游返回无权限(如模型未包含在订阅中)时归类为 `PROVIDER_ERROR`,不再错误地将正常账号标记为失效踢出号池;
|
|
304
|
+
- **模型目录分页**:请求模型列表时发送 `limit=1000`,避免默认每页 20 条导致可用模型截断;
|
|
305
|
+
- **结束状态规范化**:`refusal` / `sensitive` 明确映射为错误,`model_context_window_exceeded` 映射为截断(`max-tokens`),杜绝误触发工具调用。
|
|
306
|
+
|
|
307
|
+
- **[Claude] 修复输出速度(TPS)与首字延迟(TTFT)统计虚高的问题**
|
|
308
|
+
- **根本原因**:
|
|
309
|
+
- DSH 统计 TPS 时将全部思考 Token 计入输出,且计算区间为“首个非空 Delta 到结束”。
|
|
310
|
+
- 插件此前将全部 `thinking_delta` 缓冲到思考块结束才一次性发出,导致思考耗时被完全忽略,首字时钟直到回答阶段才开始计时,统计出的 TPS 达到正常值的 10 倍以上(如显示 1100 tok/s,实际仅 85 tok/s),且思考阶段界面无字白屏。
|
|
311
|
+
- **修复方案**:
|
|
312
|
+
- 思考块开始时即发出 `block-start`,每个 `thinking_delta` 到达时立即发出 `reasoning-delta`,实时流式更新;
|
|
313
|
+
- 思考 Token 统计改用服务端下发的真实 `thinking_tokens` 计数,不再依赖“字符数/4”的粗暴估算。
|
|
314
|
+
- **测试**:新增流式事件逐项断言,实测思考期间流式正常输出。
|
|
315
|
+
|
|
316
|
+
- **[Claude] 修复新账号使用 Claude Opus 5.5 提示词前缀变化后持续 400 报错**
|
|
317
|
+
- **根本原因**:官方自 2026-08-31 起对 Opus 5.5 等模型强制执行思考前缀校验;一旦系统提示词、工具列表发生变动,必须在请求中显式携带 `block_binding: { prefix_mismatch_behavior: 'drop_block' }`,否则直接报 400。
|
|
318
|
+
- **修复方案**:能力表中标记 `bindsThinkingToPrefix`,在 Adaptive 分支中为该类模型自动携带 `block_binding` 并附带 `anthropic-beta: thinking-binding-controls-2026-08-01` 授权标头。
|
|
319
|
+
|
|
320
|
+
- **[Claude] 支持 Claude Sonnet 5.5(`claude-sonnet-5-5`)**
|
|
321
|
+
- **修复要点**:
|
|
322
|
+
- 补齐本地能力表策展条目(1M 上下文、128K 输出上限、支持图片、不可关闭思考);
|
|
323
|
+
- 自动根据模型特征附加 `block_binding` 及相关 Beta 鉴权标头;
|
|
324
|
+
- 申报默认 CLI 版本提升至 `2.1.285`(满足官方 >= 2.1.284 门槛)。
|
|
325
|
+
|
|
326
|
+
- **[Codex] 新增模型 GPT-6.1 Sol(`gpt-6.1-sol`)**
|
|
327
|
+
- **模型规格**:1,050,000 上下文窗口、128,000 输出上限、支持图文输入;
|
|
328
|
+
- **配置对齐**:归入 `gpt-6` 族 profile,默认思考档位 `medium`,支持 `low` 至 `max`(不支持 `none` / `minimal`);默认加入可见模型列表。
|
|
329
|
+
|
|
330
|
+
- **[模型目录] 修复清空缓存后在途请求回写旧数据的竞态**
|
|
331
|
+
- **修复方案**:为 `kimi-code` / `command-code` / `workbuddy` 模型目录缓存引入 `catalogCacheEpoch` 递增机制。清空缓存时递增 Epoch,在途的异步拉取请求若 Epoch 失配则放弃写入快照与恢复缓存,杜绝旧数据覆盖新状态。
|
|
332
|
+
|
|
333
|
+
- **[DSH 兼容] 跟进 DeepSeek Harness 0.2.0-rc.2**
|
|
334
|
+
- 更新全部 `@deepseek-ai/dsh-*` 依赖的 peerDependencies 范围(追加 `|| ^0.2.0-rc.2`),更新基线并重新生成 package-lock.json;通过新旧基线多环境回归测试,无破坏性行为改动。
|
|
335
|
+
|
|
336
|
+
- **[MiniMax] 修复并发刷新导致的令牌失效与每小时频繁掉线**
|
|
337
|
+
- **根本原因**:
|
|
338
|
+
- Access Token 有效期仅 1 小时,续期窗口定在到期前 60 秒内。号池内部缺少并发单飞控制,用量轮询与模型请求容易在同一秒内同时触发刷新。
|
|
339
|
+
- 输掉竞态的调用者收到 `invalid_grant`,导致错误地将正常账号标记为 `authStatus: expired` 永久失效,并在卡片上报“需要重新登录”。
|
|
340
|
+
- **修复方案**:
|
|
341
|
+
- **提前 5 分钟续期**:将刷新前置至到期前 5 分钟(`PRE_EXPIRY_REFRESH_MS`),避开临界失效窗口;
|
|
342
|
+
- **全进程单飞锁**:引入以账号身份为键的单飞刷新注册表,所有并发调用共享同一次刷新事务;
|
|
343
|
+
- **磁盘状态优先**:收到刷新失败时先重新读取磁盘凭据,若已由其他进程或单飞成功刷新,直接采纳新状态,不写入墓碑;
|
|
344
|
+
- **账号行自我修复**:`healStaleAuthFailures` 在读取号池时自动比对并清除历史残留的错误失效标记;
|
|
345
|
+
- **补齐重新登录按钮**:修复设置卡片上重新登录按钮在满足条件时未正确渲染的问题。
|
|
346
|
+
- **测试**:新增 13 条抗并发争用测试(`test/minimax-code-token-contention.test.ts`)。
|
|
347
|
+
|
|
348
|
+
- **[思维保护] 新增推理坍缩守卫(Reasoning Collapse Guard):死循环自动熔断与恢复**
|
|
349
|
+
- **背景与现象**:长推理流可能退化为死循环重复短语(如 `Let me call. Go. Calling. Go.`),既不调用工具也不产出结论,一路消耗完上限(实测单会话烧掉 128,000 output tokens)。
|
|
350
|
+
- **工作机制**:
|
|
351
|
+
- **滑动窗口打分**:基于尾部字符的 n-gram 唯一率打分,坍缩流(重复度极高)得分高达 0.98,正常深思通常 <= 0.28,阈值设为 0.85,可在 1.5 KB 处迅速灵敏检测并中断;
|
|
352
|
+
- **多级自愈恢复**:中断后在原会话中创建一条携带系统 Notice 形式的恢复消息,分三级恢复(首次静默续跑 -> 二次提示不要重蹈覆辙 -> 三次终止本轮退出);
|
|
353
|
+
- **安全无侵入**:接入 Harness 的 `llm/stream` waterfall 接缝(兼容 0.1.2-alpha.5 至最新版本),不改动请求上下文,不修改最大 Token 预算,默认开启且支持配置关闭。
|
|
354
|
+
- **测试**:新增 29 条专项回归测试,通过真实归档坍缩样本与健康思考样本验证。
|
|
355
|
+
|
|
356
|
+
- **[MiniMax] 新增每日自动签到功能**
|
|
357
|
+
- **功能简介**:自动领取官方桌面端“每日签到”积分(七日循环递增 400~2000 分)。
|
|
358
|
+
- **技术实现**:
|
|
359
|
+
- 完全复用本线路现有的 OAuth 凭据,对齐官方开源 CLI(`MiniMax-AI/minimax-code`)的签到网关与加密签名逻辑;
|
|
360
|
+
- 国内区(`agent.minimaxi.com`)与国际区(`agent.minimax.io`)双区均支持;
|
|
361
|
+
- 设置页增加“每日签到”卡片(支持开关、今日状态展示、连签天数统计与“立即签到”手动补签);
|
|
362
|
+
- 进程内定时调度,启动即签,每 10 分钟补检,幂等防重;状态落盘于 `minimax-code-checkin.json`。
|
|
363
|
+
- **测试**:新增 22 项测试,覆盖双区端点、签名头算法比对、401 自动续签及跨天重置。
|
|
364
|
+
|
|
365
|
+
- **[DSH 兼容] 跟进 DeepSeek Harness 0.2.0-rc.1**
|
|
366
|
+
- 更新 peerDependencies 基线,验证全量核心包源码与插槽契约兼容性;重新生成锁文件。
|
|
367
|
+
|
|
368
|
+
- **[MiniMax] 接入官方客户端用量与配额查询端点**
|
|
369
|
+
- **端点对齐**:对齐官方 CLI 源码,接入 `/v1/api/openplatform/coding_plan/remains` 端点,自动探测并记忆国内/国际区网关;
|
|
370
|
+
- **配额双窗口展示**:解析并独立展示 5 小时滚动窗口与每周窗口的剩余百分比、重置倒计时与使用量;
|
|
371
|
+
- **诚实诊断与状态反馈**:若当前登录凭据受限于平台鉴权策略无法拉取用量,卡片如实提示“请在控制台或官方应用中查看”,杜绝模糊的“暂无数据”或错误归因。
|
|
372
|
+
- **性能与防护**:状态接口轮询仅读取内存缓存,绝不在轮询时阻塞发网,避免卡顿;失败状态记忆 10~30 分钟。
|
|
373
|
+
- **测试**:新增 17 条配额映射与缓存策略测试。
|
|
374
|
+
|
|
375
|
+
- **[MiniMax] 补齐与兄弟线路对等的号池与模型管理功能**
|
|
376
|
+
- **供应商全局总开关**:关闭时立刻清空对外暴露的模型,彻底停用流量;
|
|
377
|
+
- **模型自主勾选**:支持在设置网格中勾选/全选/取消特定模型,决定对话页可见列表;
|
|
378
|
+
- **上下文窗口自定义覆盖**:每个已启用模型均可自定义容量(如 1M / 512K),支持一键恢复默认;
|
|
379
|
+
- **默认思考深度配置**:支持设置全局默认思考等级,自动兼容模型固有支持范围;
|
|
380
|
+
- **多账号池与桌面态导入**:支持多账号轮询/顺序耗尽调度;支持一键从本地 MiniMax Code 客户端只读导入凭据(桌面账号标记不可删除,续期自动原子回写)。
|
|
381
|
+
|
|
382
|
+
- **[MiniMax] 新增 MiniMax Code 编程订阅线路(PR #23 审计修复)**
|
|
383
|
+
- **核心特性**:注册 `minimax-code` Provider,支持只读复用 MiniMax Code 桌面端凭据或通过 RFC 8628 设备码登录,请求走 Anthropic Messages 协议与 Bearer 鉴权。
|
|
384
|
+
- **合并审计修复(10 项重要缺陷)**:
|
|
385
|
+
- **① 消除 UI 文案串味**:解除错误的 `t` 函数全局注入,恢复独立的 i18n 字典,杜绝显示为字面键名或出现“使用 ChatGPT 登录”的错误文案;
|
|
386
|
+
- **② 保护官方客户端登录态**:登出操作仅清除插件自有凭据,桌面端凭据标记为 `native: true` 禁止从插件侧撤销注销,防止误踢用户官方客户端;
|
|
387
|
+
- **③ 规范路由挂载前缀**:纠正路由前缀为 `/minimax-code/api`,消除与其他线路的冲突;
|
|
388
|
+
- **④ 修复 401 无法自愈**:遇到 401 时主动触发一次强制令牌续期并重试,自愈后恢复通信;
|
|
389
|
+
- **⑤ 国际区凭据完整支持**:探测全部区域目录,并严格按凭据真实记录的区域决定 Host 端点;
|
|
390
|
+
- **⑥ 消除明文备份凭据泄露隐患**:移除写回时复制出的 `.dsh-bak` 明文文件,改用纯原子重命名;
|
|
391
|
+
- **⑦ 诊断信息安全脱敏**:将此前泄露真实 Token 前缀的报错改为输出 SHA-256 指纹截断;
|
|
392
|
+
- **⑧ 修正虚假的多模态声明**:移除尚未具备解析器的 `video` 输入声明,仅声明实际支持的 `text` / `image`;
|
|
393
|
+
- **⑨ 修复输出上限收敛空跑**:修复上下文夹取时未正确估算输入 Token 导致跳过收敛的缺陷;
|
|
394
|
+
- **⑩ 优化性能**:移除无配额线路空转的 60 秒定时轮询,凭据读取操作合并为单次完成。
|
|
395
|
+
- **测试**:新增 15 项审计回归测试,全量验证通过。
|
|
396
|
+
|
|
397
|
+
- **[团队协作] 适配 DSH Agent Teams:自适应协作与权限继承**
|
|
398
|
+
- **根本原因**:Agent Teams bundle 在会话作用域内重载了同名的协调工具,顶替了内置的 `tool-subagent-control`,导致子代理回访异常;且 `spawn_teammate` 创建时不携带路由参数。
|
|
399
|
+
- **修复方案**:
|
|
400
|
+
- 将 `spawn_teammate` 纳入 `DEFAULT_SUBAGENT_INHERIT_TOOLS` 继承模式,继承 Lead 路由,防止被授权守卫硬性拒绝;
|
|
401
|
+
- 优化 Preset 提示词,新增 R0.5 协作模式侦测及 R-T Teammate 协作规范,使模型能自适应普通子代理模式与 Agent Teams 协作模式。
|
|
402
|
+
- **测试**:测试断言两种预设形态完全一致,继承权限判定准确。
|
|
403
|
+
|
|
404
|
+
- **[设置 / UI] 修复客户端样式表在 Fiber 热重载时偶发丢失**
|
|
405
|
+
- **根本原因**:ChatGPT 样式表在卸载时执行 `element.remove()`,而在 Cordis Fiber 重启(如修改配置、HMR)时,新 Fiber 先运行看到旧标签返回空 Disposer,旧 Fiber 随后异步将标签从 DOM 彻底移除,导致样式表永久丢失。
|
|
406
|
+
- **修复方案**:改为主样式表托管模式:标签归全局文档所有,存在则就地更新 `textContent`,Disposer 置为空操作,并在热更新时即时刷新 CSS 规则。
|
|
407
|
+
|
|
408
|
+
- **[Claude] 修复回复包含内容时 100% 失败报错(`must be losslessly JSON-serializable`)**
|
|
409
|
+
- **问题现象**:每当模型输出文字、思考或工具调用时,整轮对话必定崩溃报错,提示 `Assistant stream chunk must be losslessly JSON-serializable`。
|
|
410
|
+
- **根本原因**:
|
|
411
|
+
- DSH 在会话日志落盘前会对流式 Chunk 进行严格无损 JSON 校验,遇到 `undefined`、非法数字、数组空洞等直接拒收整块消息。
|
|
412
|
+
- 插件在 `mapper.ts` 中将文本块和工具调用的占位显式写为了 `state.replayBlocks[index] = undefined`,或解析参数失败时带入 `undefined`。
|
|
413
|
+
- **修复方案**:
|
|
414
|
+
- 将占位值从 `undefined` 修正为标准 JSON 合法值 `null`;
|
|
415
|
+
- 新增 `jsonSafeValue()` 过滤管道,递归清洗非有限数字、-0、未定义字段及循环引用;
|
|
416
|
+
- 类型系统收紧,将 `replayBlocks` 类型改为 `(Record<string, unknown> | null)[]`,在编译期杜绝 `undefined` 赋值。
|
|
417
|
+
- **验证**:通过真实失败日志回放验证,7 种曾被拦截的流式形态全量测试通过。
|
|
418
|
+
|
|
419
|
+
- **[调度预设] 修复调度模式 R8 兜底状态卡死、不派发子代理的问题**
|
|
420
|
+
- **根本原因**:
|
|
421
|
+
- 调度模式在触发 R8 兜底(由主模型亲自执行)后,模型容易在对话历史中自我强化这一结论,导致即使当前任务已顺利结束,下一个新任务依然拒绝派发子代理。
|
|
422
|
+
- **修复方案**:
|
|
423
|
+
- **作用域限定**:明确 R8 兜底仅为**单任务级别**,绝非会话级状态;
|
|
424
|
+
- **明确解除与恢复条件**:新任务开始时强制回到 R0 重新分诊,不得沿用兜底假定;触发条件收紧为“同一任务重派两次依然失败”;
|
|
425
|
+
- **针对性解法**:对子代理上限超限(等待结算)和模型白名单拦截(显式指定模型)提供明确的修条件路径。
|
|
426
|
+
- **验证**:Preset 与代码声明通过逐字节一致性校验及反模式拦截断言。
|
|
427
|
+
|
|
428
|
+
- **[Claude] 修复提示缓存命中率为 0(每次请求均全额计费)**
|
|
429
|
+
- **根本原因**:Anthropic 提示缓存需要请求中携带 `cache_control` 断点,此前适配器虽然实现了标记能力但默认置为 `false`,导致从不发出断点,服务端无法命中缓存。
|
|
430
|
+
- **修复方案**:
|
|
431
|
+
- **默认开启缓存**:改为 Opt-out 机制,默认开启缓存;
|
|
432
|
+
- **精准标记核心断点**:在符合 4 个断点上限的前提下,固定标记三处最关键的位置:System 块末尾、**最后一条 User 消息的最后一个块**(多轮历史复用核心)、最后一个工具定义;
|
|
433
|
+
- **规范标记时机**:在合并连续消息之后进行最终标记,保证断点位置稳定,前缀无动态漂移。
|
|
434
|
+
- **验证**:独立断言请求体断点分布,验证多轮历史复用断点正确生成。
|
|
435
|
+
|
|
436
|
+
- **[Claude] 修复 Claude Opus 5.5 因上报版本过旧被拒(`claude_code_version_too_old`)**
|
|
437
|
+
- **报错信息**:`Claude Code 2.1.251 does not support this model; version 2.1.280 or newer is required.`
|
|
438
|
+
- **根本原因**:插件向服务端硬编码申报的版本号为 `2.1.251`,而 Opus 5.5 要求客户端版本 >= `2.1.280`。
|
|
439
|
+
- **修复方案**:
|
|
440
|
+
- 申报版本更新为真实已发布的 `2.1.283`(后续推进至 2.1.285);
|
|
441
|
+
- 能力表引入 `minCliVersion` 门槛字段,发请求前在本地进行预检拦截,版本不满足时给出清晰的可操作提示,不再盲目向服务端发包;
|
|
442
|
+
- 新增自动化测试守卫,确保全表所有模型的版本门槛均严格 <= 当前默认申报版本。
|
|
443
|
+
|
|
444
|
+
- **[Kimi] 修复设置卡片定期误报 `rejected the stored credential (401)`**
|
|
445
|
+
- **根本原因**:
|
|
446
|
+
- Access Token 有效期仅 900 秒(15 分钟),而前端卡片查询用量时直接携带了号池中已过期的 Access Token,导致上游返回 401 并被误判为“凭据被拒绝”;
|
|
447
|
+
- 单账号镜像文件与号池同时刷新同一枚单次有效的 Refresh Token,引发跨路径轮换冲突,造成账号被误标为失效。
|
|
448
|
+
- **修复方案**:
|
|
449
|
+
- **号池接入实时凭据获取**:卡片用量查询改走号池的 `getFreshCredential()`,在临期前自动续期;
|
|
450
|
+
- **401 强制刷新自愈**:收到 401 时主动发起一次强制续期并重试,只有二次 401 才判定为失效;
|
|
451
|
+
- **解除镜像刷新耦合**:模型目录加载改用号池的活跃凭据,不再触碰单凭据镜像文件,消除竞态。
|
|
452
|
+
- **测试**:新增 9 项凭据自愈与目录加载解耦测试。
|
|
453
|
+
|
|
454
|
+
- **[Claude] 移除「合规告知 + 确认门禁」限制**
|
|
455
|
+
- **背景与改动**:
|
|
456
|
+
- 彻底移除设置卡片顶部的显式确认告知框、`/claude/api/consent` 路由及主机侧 403 门禁,路由改为无条件自动注册;
|
|
457
|
+
- 兼容用户磁盘已有的 `consent` 历史配置字段,不影响旧配置正常读取;
|
|
458
|
+
- 保持条款风险的客观陈述,使用户开箱即用体验更加顺畅。
|
|
459
|
+
|
|
460
|
+
- **[Claude] 新增模型 Claude Opus 5.5(`claude-opus-5-5`)**
|
|
461
|
+
- **规格说明**:1M 上下文、128K 输出上限、支持图片输入、思考档位支持 `low` 至 `max`;
|
|
462
|
+
- **特性适配**:
|
|
463
|
+
- 官方不支持关闭思考(显式关闭或设置 budget 均报 400),能力表标记为不可关闭思考;
|
|
464
|
+
- 默认思考档位为 `medium`(避免被静默提升为 `high` 造成额外额度开销)。
|
|
465
|
+
|
|
466
|
+
- **[架构演进] Claude (订阅) 线路正式上线,替代原 GLM 线路**
|
|
467
|
+
- **变更概述**:移除 `zhipu-coding-plan` Provider,新增 `claude-subscription` Provider,支持以 Claude Pro / Max 订阅的 OAuth 登录态直连 Anthropic Messages 接口(无需 API Key、不按量计费);设置页相应标签替换为 Claude。
|
|
468
|
+
- **核心架构实现**:
|
|
469
|
+
- **OAuth 认证与安全**:对齐 Claude Code 官方身份块,采用独立随机生成的 PKCE Verifier 与 State,规避敏感参数泄露风险;
|
|
470
|
+
- **思考模式分级处理**:严格支持 `mid-convo`(携带前缀绑定)、`adaptive`、`budget` 及 `none` 四类思考形态;
|
|
471
|
+
- **多轮会话回放**:保留带签名的思考块(Thinking Signature)原样回放,剔除无签名残缺块,保障多轮工具调用稳定;
|
|
472
|
+
- **账号管理与号池**:以稳定的内部 ID 作为路由键,支持多账号轮询与自动重试;支持只读收编本机 Claude Code 的已有登录凭据(快照模式,永不跨进程抢刷);
|
|
473
|
+
- **额度与用量监控**:双轨兼容已用百分比与统一限流响应头换算,卡片清晰展示用量进度与重置倒计时。
|
|
474
|
+
|
|
475
|
+
- **[DSH 兼容] 修复启动时报 `fiber state 5` 导致 web 模块未激活警告([#18](https://github.com/Aa728848/dsh-chatgpt-subscription/issues/18))**
|
|
476
|
+
- **根本原因**:在具备透明代理/系统代理的环境下,插件在注册 Provider 后立即同步修改了 `web` 配置,导致 `web` 模块触发热重载(卸载中状态,即 Fiber State 5),与宿主 profile 合成审计产生启动时序竞态。
|
|
477
|
+
- **修复方案**:将首次 Provider 状态同步推迟一个宏任务(`setTimeout(applyWebProviders, 0)`),确保其落在宿主审计之后,消除误报警告。
|
|
478
|
+
|
|
479
|
+
- **[DSH 兼容] 支持 DeepSeek Harness 0.2.0-rc.2 / 0.1.7-rc.2**
|
|
480
|
+
- 对齐多项 Harness 核心组件更新,平滑兼容会话中途变更工具声明、模型选择器硬门槛校验及依赖生态演进。
|
|
481
|
+
|
|
482
|
+
- **[发布规范] 修复 npm `latest` 发布标签锁定问题**
|
|
483
|
+
- 修正 `package.json` 中固定的 `publishConfig.tag`,确保稳定版本发布时默认进入 `latest` 分发通道,预发布版本显式通过 `--tag alpha` 发布。
|
|
484
|
+
|
|
485
|
+
- **[测试套件] 修复 Windows 环境下 DPAPI 超时与测试假失败**
|
|
486
|
+
- 将 `vitest.config.ts` 的单测超时时间从 15s 放宽至 60s,并将最大并行 Worker 数限制为 4,彻底解决因子进程高并发争用导致的超时及跨用例 Mock 污染问题,实现全量测试稳定通过。
|
|
487
|
+
|
|
488
|
+
- **[WorkBuddy] 每日自动签到功能与健壮性提升**
|
|
489
|
+
- **核心功能**:国区账号在宿主启动时自动签到,运行期每 10 分钟幂等补检;状态持久化于 `storages/workbuddy-checkin.json`,设置页支持开关与手动补签;
|
|
490
|
+
- **评审优化**:
|
|
491
|
+
- 修复偏好 Store 异步加载导致已关闭签到的账号在重启时被误签的问题;
|
|
492
|
+
- 修复活动未开放账号被当天永久跳过的问题,增加每小时重试节流;
|
|
493
|
+
- 细化签到状态,区分“无活动”与“已签到”;手动补签请求改为串行队列,保证执行语义;
|
|
494
|
+
- 增强上游字段兼容性(蛇形/驼峰容错、软失败重试豁免、401 强制续期)。
|
|
495
|
+
|
|
496
|
+
- **[模型配置] 模型上下文窗口跟随启用开关,并支持单行/批量恢复默认**
|
|
497
|
+
- **按需展示**:上下文窗口配置仅展示当前已勾选启用的模型,未勾选时不产生冗余输入框;
|
|
498
|
+
- **覆盖全量模型**:ChatGPT 标签页放开全部目录模型的上下文覆盖能力;
|
|
499
|
+
- **恢复默认支持**:支持传入 `null` 删除特定模型的覆盖配置以恢复目录默认值;设置页提供单行“恢复默认”及全页“全部恢复默认”便捷操作。
|
|
500
|
+
|
|
501
|
+
## 0.8.0-alpha.0 - 2026-09-23
|
|
502
|
+
|
|
503
|
+
- **[发布说明] 0.8.0-alpha.0 预发布**:0.8.0 正式版定稿前作为预发布分发,仅发布至 npm `alpha` 标签,不影响 `latest` 默认安装。
|
|
504
|
+
|
|
505
|
+
- **[Codex] 新增模型 GPT-6 Sol 与 GPT-6 Luna(`gpt-6-sol`、`gpt-6-luna`)**
|
|
506
|
+
- **规格支持**:支持文本 + 图片输入,默认思考档位 `medium`,订阅侧上下文上限 872K;
|
|
507
|
+
- **族群 Profile 重构**:将 Astra 专属配置泛化为 `gpt-6` 族群共享 Profile,统一处理思考档位(收敛 `none` / `minimal` 至 `low`);
|
|
508
|
+
- **配置与输出上限**:默认有效上下文提至 384K,输出上限按模型区分(GPT-6 系列提至 128,000,老模型维持 32,768)。
|
|
509
|
+
|
|
510
|
+
- **[DSH 兼容] 深度适配 DeepSeek Harness 0.1.7-alpha.1(三处破坏性重写)**
|
|
511
|
+
- **会话消息模型适配**:0.1.7 将工具结果改为一等的 `role: "tool"` 消息。新增 `llm-compat.ts` 作为双向兼容垫片,出站前自动归一化,既有 5 条线路的 Mapper 逻辑无缝保持兼容;
|
|
512
|
+
- **设置 API 重构**:0.1.7 废弃 `settings.register`,改为从插件配置动态生成表单。新增 `file-preferences.ts` 支持将设置落盘至独立文件,并无缝自动迁移老用户的 `settings.yaml` 配置;
|
|
513
|
+
- **Agent Preset 运行时注册**:适配 0.1.7 改用包声明行的机制,动态注册 `dispatch` 编排预设,避免老版本加载崩溃。
|
|
514
|
+
|
|
515
|
+
- **[社区 PR 合并与优化] 合并 PR #12、#14、#15 并修补潜在缺陷**
|
|
516
|
+
- **#12**:macOS 钥匙串在载荷包含本地化字符时安全解码十六进制字节;
|
|
517
|
+
- **#14**:偏好设置 Store 在无 `register` 环境下优雅回退至文件持久化并从文件水合,解决重启后模型开关重置的问题;
|
|
518
|
+
- **#15**:合并多项通用功能优化与稳定性增强。
|
|
519
|
+
|
|
520
|
+
- **[WorkBuddy] 修复多账号去重缺陷与昵称冒充身份问题**
|
|
521
|
+
- **根本原因**:OAuth 授权响应缺少明确账号身份时退化使用昵称作为 ID,导致桌面端扫盘获取的 UUID 账号与网页登录账号产生重复。
|
|
522
|
+
- **修复方案**:统一采用 `intl:<用户全局ID>` 规范账号身份,建立身份别名映射,消除重复账号现象。
|
|
523
|
+
|
|
524
|
+
- **[Kimi Code] 优化模型选择器打开卡顿问题(从 800+ ms 降至 0 ms)**
|
|
525
|
+
- **根本原因**:`loadProviderModels()` 在读取 30 分钟目录缓存之前调用了 `ensureAccessToken()`,而在 Windows 下读取 DPAPI 需要频繁 `spawn("powershell.exe")`。选择器构建时遍历每个模型调用,导致重复启动子进程阻塞主线程。
|
|
526
|
+
- **修复方案**:将 Token 获取逻辑后置至缓存未命中的真实请求分支,命中内存缓存时直接零延迟返回。
|
|
527
|
+
|
|
528
|
+
- **[调度预设] 修复 0.1.6 环境下 Dispatch 预设挂载失败**
|
|
529
|
+
- 兼容 Harness 0.1.6 对 Workflow 引擎的包名变更(`@deepseek-ai/dsh-workflow-ptc`),补齐多级 Node 依赖寻址。
|
|
530
|
+
|
|
531
|
+
- **[ChatGPT] 修复对话中执行网页搜索报凭据缺失的问题**
|
|
532
|
+
- 拆分“号池取号”与“服务取凭据”逻辑,确保未被选入模型对话轮换的活跃账号依然能为 `codex-search` 提供合法的只读凭据。
|
|
533
|
+
|
|
534
|
+
- **[WorkBuddy] 正式上线腾讯 WorkBuddy / CodeBuddy 订阅线路**
|
|
535
|
+
- 注册 `workbuddy-subscription` 独立 Provider;
|
|
536
|
+
- 支持直接扫描复用 CodeBuddy 桌面端登录态,或通过官方浏览器授权绑定多账号;
|
|
537
|
+
- 桌面账号支持隐藏/恢复保护,支持多账号安全隔离存储与调度。
|
|
538
|
+
|
|
539
|
+
## 0.5.0 - 2026-09-20
|
|
540
|
+
|
|
541
|
+
- **[号池架构] 全面支持多账号管理与轮换调度(覆盖全部四条线路)**
|
|
542
|
+
- **共享号池内核(`account-pool.ts`)**:引入系统安全存储(DPAPI / Keychain / Secret Service),支持顺序耗尽(Sequential Drain)、轮询调度(Round-Robin)与粘性会话(Sticky Session)三种策略,提供 429 智能冷却与自动接力;
|
|
543
|
+
- **多供应商覆盖**:将 Antigravity 的号池能力推广至 ChatGPT、Command Code 与 Kimi Code;
|
|
544
|
+
- **容错增强**:最后使用时间记账等非关键写失败改为 Best-effort,杜绝因本地记账异常阻断正常取号。
|
|
545
|
+
|
|
546
|
+
## 0.3.9 - 2026-09-19
|
|
547
|
+
|
|
548
|
+
- **[多模态] 修复工具结果内嵌图像无法传递给模型的问题(PR #7)**
|
|
549
|
+
- **根本原因**:三条线路此前仅检查消息顶层 Content,导致截图类工具结果内部嵌套的图像块在模型侧全部丢失,模型无法感知图片并容易产生幻觉。
|
|
550
|
+
- **修复方案**:
|
|
551
|
+
- 递归遍历 `tool-result` 中的图像附件;
|
|
552
|
+
- Anthropic 协议支持块数组回传原生图片;OpenAI 协议在连续 Tool 消息段末追加包含 `image_url` 的 User 消息;Gemini 协议通过 `inlineData` 混合并入;
|
|
553
|
+
- 读取失败时优雅降级为明确的 `[image unavailable: ...]` 占位文本。
|
|
554
|
+
- **[Antigravity / Kimi] 提示词优化与工具 Schema $ref 展开**:在系统提示词后置注入进度规则;递归内联工具参数的本地 `$ref` 引用。
|
|
555
|
+
- **[供应商管理] 支持自由停用供应商与清空模型列表(Issue #8)**:增加“启用此供应商”总开关,支持彻底清空模型以隐藏 Provider,不再挤占界面空间。
|
|
556
|
+
- **[Antigravity] 多账号池与双重调度策略上线**:支持管理多个 Google 账号,支持顺序耗尽与基于 LRU 的轮询调度,支持 429 自动冷却换号。
|
|
557
|
+
|
|
558
|
+
## 0.3.6 - 2026-09-17
|
|
559
|
+
|
|
560
|
+
- **[调度预设] 随包分发 Dispatch Agent Preset**:内置基于 PTC 模式的复杂任务编排预设(复杂度分诊、任务拆解与子代理指派);子代理委派强制显式指定 Provider + Model。
|
|
561
|
+
- **[网络与代理] 修复透明代理(Fake-IP)环境下 `web_fetch` 失败问题**:
|
|
562
|
+
- 自动识别并接管 Fake-IP(`198.18.0.0/15`)解析,由插件抓取 Provider 自行经由代理发送请求,避免被内置地址过滤硬性拦截;
|
|
563
|
+
- 引入地址安全策略(`fetch-address-policy.ts`),防范私网穿透风险。
|
|
564
|
+
- **[多模态] Kimi Code 打通端到端视频输入**:支持视频媒体附件识别与解析,并在超限时采用最旧优先降级策略。
|
|
565
|
+
- **[Antigravity] 修复用户上传图片静默丢弃问题(Issue #5)**:正确将图片附件接入 Gemini `inlineData` 报文,杜绝模型回答“未收到图片”;引入 12 MiB 单次请求图片体积上限保护。
|
|
566
|
+
- **[Harness 兼容] 开发与测试基线升级至 DSH 0.1.5-rc.2**,重排模型能力展示表格。
|
|
567
|
+
|
|
568
|
+
## 0.2.15 - 2026-09-11
|
|
569
|
+
|
|
570
|
+
- 移除对 `@deepseek-ai/dsh-llm` 的冲突模块类型增强;
|
|
571
|
+
- 移除 Mapper 中不可达的 `file` 块处理;
|
|
572
|
+
- 移除未启用的智能体团队混合模型规则;
|
|
573
|
+
- 修复 Antigravity 新账号开通在候选端点全部失败时静默返回成功的缺陷;
|
|
574
|
+
- 修复登出时在途配额请求可能回写旧缓存的竞态问题。
|
|
575
|
+
|
|
576
|
+
## 0.2.14 - 2026-09-10
|
|
577
|
+
|
|
578
|
+
- 优化 Antigravity 配额自动刷新机制,对齐官方 2.8.0 规范;
|
|
579
|
+
- 完善代理探测逻辑,支持 `.env` 兜底识别。
|
|
580
|
+
|
|
581
|
+
## 0.2.13 - 2026-09-10
|
|
582
|
+
|
|
583
|
+
- 优化 Antigravity 开通与配额接口,增强网络容错与多平台适配。
|
|
584
|
+
|
|
585
|
+
## 0.2.12 - 2026-09-10
|
|
586
|
+
|
|
587
|
+
- Antigravity 登录对齐官方 2.8.0 User-Agent 格式,新增免费层资格校验与开通 LRO 轮询;
|
|
588
|
+
- 状态接口按 2 分钟 TTL 自动拉取配额,支持并发去重;
|
|
589
|
+
- 依赖版本区间扩展支持 DSH `^0.1.3` 至 `^0.1.5`。
|
|
590
|
+
|
|
591
|
+
## 0.2.10 - 2026-09-06
|
|
592
|
+
|
|
593
|
+
- 修复 Antigravity 模型元数据校验失败导致 Provider 整体消失的问题(安全兜底 `defaultEffort`,解决 `gemini-3.1-pro` 触发异常导致选择器丢失的问题,Issue #4)。
|
|
594
|
+
|
|
595
|
+
## 0.2.9 - 2026-09-06
|
|
596
|
+
|
|
597
|
+
- 修复在官方 DSH 0.1.2-rc.1 上启动因缺少 `CallId` 导出抛出语法错误的问题(采用 `toToolCallId` 动态兼容垫片,Issue #4);
|
|
598
|
+
- 修复搜索与抓取来源切换在重载时未能正确生效的问题;
|
|
599
|
+
- Codex 订阅新增 `gpt-6-astra` 模型,支持 `low` 至 `max` 思考档位;提供独立上下文容量设置。
|
|
600
|
+
|
|
601
|
+
## 0.1.28 - 2026-08-28
|
|
602
|
+
|
|
603
|
+
- 新增支持 1.5x 倍速快速模式(Fast Mode / Priority Service Tier),请求注入 `service_tier: 'priority'`;
|
|
604
|
+
- 修复偏好设置更新白名单校验,持久化保存快速模式开关。
|
|
605
|
+
|
|
606
|
+
## 0.1.21 - 2026-08-22
|
|
607
|
+
|
|
608
|
+
- 适配 DSH `0.1.1-rc.2` 的新循环机制,适配器显式实现 `prepareCall`;
|
|
609
|
+
- 全量提升依赖版本至 `^0.1.1-rc.2`,增强无 BOM 的 UTF-8 编码与完整性检查。
|
|
610
|
+
|
|
611
|
+
## 0.1.20 - 2026-08-22
|
|
612
|
+
|
|
613
|
+
- 新增独立的子代理全局设置页,支持配置模型、思考深度与上下文预算;
|
|
614
|
+
- 支持限制子代理最大嵌套深度(0–3)与并发活动数量;
|
|
615
|
+
- 新增 GPT-5.6 系列有效上下文窗口配置(默认 272K,最高 1M)。
|
|
616
|
+
|
|
617
|
+
## 0.1.12 - 2026-08-20
|
|
618
|
+
|
|
619
|
+
- 适配 DSH `0.1.0-rc.8`,升级依赖生态与客户端插槽声明。
|