dsh-deepseek-web-login 0.6.16 → 0.6.18

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
@@ -2,6 +2,61 @@
2
2
 
3
3
  本项目遵循大致语义化版本;日期为本地时间。
4
4
 
5
+ ## 0.6.18 — 2026-10-01
6
+
7
+ **修会话爆炸:token 刷新/内部请求不再冲掉 chat 的网页端会话。**
8
+
9
+ 用户现场:链式投喂下,一个窗口聊了几句后网页端突然多出几个新会话,上一句的会话也没了;
10
+ 刷新后只剩一个。根因有两个,合在一起触发:
11
+
12
+ 1. **`accountKey` 用 `token|cookie` 当账号身份** —— token 每 2 小时左右就会刷新(自动/手动重登),
13
+ 刷新后插件认为"换了账号",旧网页端会话被退役,投喂链也断了。
14
+ 2. **内部请求(`session-title`、`compaction` 等)也传 `promptParts` 走链式** —— 这些请求的条目
15
+ 和 chat 的链不匹配,触发了「历史不是严格追加 → 重开链 → 强制换新会话」,于是每个标题/压缩
16
+ 请求都把当前 chat 会话冲掉,旧的删、新的建。
17
+
18
+ ### 改动
19
+
20
+ - `webapi.ts`:`accountKey` 优先用服务端返回的 `user.id` 当稳定身份;没有 `user.id` 时才回退到
21
+ `token|cookie`(兼容手动粘 token 的老记录)。
22
+ - `adapter.ts`:只有用户可见的 `chat` 才把 `promptParts` 传下去;`session-title` / `compaction`
23
+ 等内部调用走全量,不再抢 chat 的链。
24
+ - `context-feed.ts` / `webapi.ts`:没有 `promptParts` 的请求不触发「强制换新会话」,也不会因为
25
+ 没 ready 而把 chat 的链删掉。
26
+ - 回归用例:`check-session-reuse` +2(token 刷新稳定性/回退)、`check-context-chain` +1、
27
+ `check-context-feed` +1,全部反向验证。
28
+
29
+ ## 0.6.17 — 2026-10-01
30
+
31
+ **增量投喂不再重发「模型上一句回答」(用户反馈:完全没必要)。**
32
+
33
+ 用户原话:「为啥网页版的聊天我看到了,还总是把模型上一句回答的结果,加到下一句当提示词!
34
+ 完全没必要啊!!!!」(附截图:增量气泡里赫然是 `Assistant: <上一句整段回答>` + `User: 嘟嘟嘟!`)
35
+
36
+ 原因:主机的消息列表里既有用户消息、也有**助手消息**(=我们上一轮从服务端流下来的那段回复);
37
+ `serializePromptParts` 把它们统一转写成 `Assistant: …` / `User: …` 条目,而增量投喂原样把
38
+ "新追加的条目"整段发出去 ⇒ 那条回答被当成下一句的输入重发。**它本来就是服务端的上一轮输出
39
+ (就在我们要挂的父消息位置),重发纯属白烧 token,还让模型看到自己在"自言自语"。**
40
+
41
+ 改动:
42
+
43
+ 1. `context-feed.ts` 新增 `isAssistantTranscriptEntry()`:增量里 `Assistant: …` 条目一律剔除。
44
+ ⚠️ **只剔增量**:全量 prompt 是"从零重述",必须保留完整对话(有用例钉着)。
45
+ 2. 🔴 **续写/纠正轮必须跳过剔除** —— 那两轮(`adapter.ts` 在回答被截断 / 模型把工具程序写进正文时
46
+ 自动发起)是**故意**把半截回答再发一遍的(`Assistant: 半截` + `User: <续写指令>`),
47
+ 剔了模型就只能从零重写。判据用**插件自己的指令常量**(`isContinuationCue`),不猜文案 ——
48
+ 为此把 `CONTINUE_INSTRUCTION` / `TOOL_CALL_RETRY_INSTRUCTION` 从 `adapter.ts` 挪到
49
+ `protocol.ts`(单一来源,适配器与判据共用)。
50
+ ⚠️ 这条是**既有用例逼出来的**:一刀切的实现让「链式 + 续写轮」那条用例立刻变红,
51
+ 说明它守的是真语义差异,不是过时的断言。
52
+ 3. 边界:尾巴上**只有**回声(没有新用户/工具内容)时不做剔除 —— 宁可多发一段,
53
+ 也不要发空增量让这一轮退化成重开链(那会连带换掉会话)。
54
+ 4. 可见性:剔了几条进日志(`另略过 N 条模型回声`)并进决策回执(`echoDropped`)。
55
+
56
+ 用例:`check-context-feed` +4(剔回声 / 工具调用回声也剔 / 尾巴只有回声时不剔 / 全量不受影响),
57
+ 并把「续写轮」那条改成用**真实常量**构造(原来用自造文案)+断言"续写轮不剔"。
58
+ 反向验证:退回一刀切的实现 ⇒ 新用例立刻变红。59/59 用例文件通过。
59
+
5
60
  ## 0.6.16 — 2026-10-01
6
61
 
7
62
  **修严重的现场 bug:链式模式下"一个窗口聊三句 ⇒ 网页端多出三个新会话,旧会话还被删掉"。**