dsh-connect-doubao 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +148 -0
- package/README.en.md +311 -296
- package/README.md +411 -276
- package/lib/cli-doctor.js +18 -4
- package/lib/cli-probe.js +1 -1
- package/lib/client.js +319 -29
- package/lib/{doubao-quota-XUFfDd1i.js → doubao-quota-SO5U9prN.js} +540 -71
- package/lib/doubao-status-BAUM_fsV.js +1511 -0
- package/lib/index.js +297 -21
- package/package.json +109 -107
- package/lib/doubao-status-C3wgMqnL.js +0 -773
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# 更新记录
|
|
2
|
+
|
|
3
|
+
本文件记录每个发布版本对用户可见的变化。版本号遵循 [SemVer](https://semver.org/lang/zh-CN/)。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 0.3.1 — 2026-11-02
|
|
8
|
+
|
|
9
|
+
> 相对 `0.3.0` 的 3 个提交。修「User Data 不在 C 盘就读不到登录信息」,并补上手动指定目录的
|
|
10
|
+
> 入口 —— 之前只能靠环境变量。
|
|
11
|
+
|
|
12
|
+
### 新增
|
|
13
|
+
|
|
14
|
+
- **手动指定豆包数据目录** —— 设置卡片新增「豆包数据目录」一段,带「选择目录…」按钮
|
|
15
|
+
(桌面端弹系统原生文件夹对话框)和「改回自动探测」。装豆包时把数据目录改到 D 盘、
|
|
16
|
+
或事后手动搬走的人,现在可以自己指路,不用再设环境变量 `DSH_DOUBAO_PROFILE`。
|
|
17
|
+
段落里会显示当前用的是哪个目录,以及探测到的全部候选(带来源:
|
|
18
|
+
`manual` / `env` / `appdata` / `process` / `scan`)。
|
|
19
|
+
- 选中的路径在写入前会校验目录里是否有 `Default\Network\Cookies`,选错当场提示并**拒绝保存**;
|
|
20
|
+
- 选中的目录后来被删掉或搬走,会自动退回自动探测,不会把凭据加载卡死;
|
|
21
|
+
- 指到 `User Data` 本身或它的父目录(例如 `D:\Doubao`)都可以,后者会自动往下找一层。
|
|
22
|
+
- 浏览器形态的宿主没有原生目录对话框,按钮会明确报错而不是静默失败。
|
|
23
|
+
|
|
24
|
+
### 修复
|
|
25
|
+
|
|
26
|
+
- **User Data 不在 C 盘就读不到登录信息** —— 凭据查找曾硬编码
|
|
27
|
+
`%LOCALAPPDATA%\Doubao\User Data`,把数据放到 D 盘(安装器提供这个选项,也有人事后手动搬)
|
|
28
|
+
的机器会报 `Doubao user profile not found`,而报错里显示的路径恰恰是用户根本没有的那个。
|
|
29
|
+
现在改为五层回退:卡片里手动选的目录 → 环境变量 `DSH_DOUBAO_PROFILE` → AppData 候选 →
|
|
30
|
+
运行中客户端的 `--user-data-dir` → 限时扫盘(深度 4、1.5 秒预算、跳过系统目录)。
|
|
31
|
+
顺序按**代价**而非准确度排:常见情况 4 次 `existsSync` 就命中,不会为 0.8 秒的进程探测
|
|
32
|
+
拖慢每次冷启动。返回候选**列表**而非单一路径,因为「复制而非移动」会留下空壳 profile —
|
|
33
|
+
凭据加载逐个尝试,取第一个真正解出可用会话的。
|
|
34
|
+
- **手动指定的目录失效后会永久留空** —— 覆盖值现在每次都会重新校验,失效的选点自动落回
|
|
35
|
+
自动探测,不再遮蔽真正可用的 profile。
|
|
36
|
+
- **提示文案里的 Windows 路径少了一层反斜杠** —— `Default\Network\Cookies` 写在单引号字符串里
|
|
37
|
+
会被当成转义序列,浏览器实际看到的是 `DefaultNetworkCookies`,正好是最需要准确的那句话。
|
|
38
|
+
已补转义,并加了 `scripts/check-locale-literals.mjs` 直接检查构建产物里的字面量
|
|
39
|
+
(`npm run check` 会自动跑)。
|
|
40
|
+
|
|
41
|
+
### 测试
|
|
42
|
+
|
|
43
|
+
- 11 个测试文件、**151 个用例**全绿(0.3.0 是 132 例)。新增覆盖:`profileDir` 的存取与非法
|
|
44
|
+
类型、`/__save` 对目录存在性的校验(选错目录必须 400 且不写盘)、`/profile` 只读路由
|
|
45
|
+
(空结果返回 `null` 而不是空字符串)、手动覆盖的优先级与失效回退。
|
|
46
|
+
- `doctor` 五项全绿;`doctor --json` 的 `credentials.data.profile` 会显示来源,
|
|
47
|
+
现在多一个 `via manual`。
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 0.3.0 — 2026-11-02
|
|
52
|
+
|
|
53
|
+
> 相对 `0.2.0` 的 15 个提交。这一版把插件从「只能纯聊天」推到了「能生图、能续聊、
|
|
54
|
+
> 能让模型通过提示词层模拟去调工具」,并修掉了一个从项目第一天就存在的设置持久化缺陷。
|
|
55
|
+
|
|
56
|
+
### 新增
|
|
57
|
+
|
|
58
|
+
- **豆包生图(Seedream 5.0)** —— 模型选择器里新增「豆包 生图(Seedream 5.0)」。
|
|
59
|
+
生成结果以 Markdown 图片形式追加在回复正文里,可直接预览与保存。
|
|
60
|
+
实测一次请求返回 3 张 2848×1600 图片(右下角带「豆包 AI生成」水印)。
|
|
61
|
+
注意 URL 后缀是 `.jpeg` 但字节是 PNG,保存时按内容判格式。
|
|
62
|
+
- **模型清单自动发现** —— 不再硬编码模型名。插件直接读豆包客户端的本地缓存
|
|
63
|
+
(`menuConfV2`,V8 structured clone 编码),豆包上线新模型时清单会自动跟上。
|
|
64
|
+
缓存解析失败时自动回退到内置静态清单,`doctor` 会显示当前用的是哪一种。
|
|
65
|
+
「工作任务」专属模型按名称前缀自动隐藏。
|
|
66
|
+
- **真会话续聊** —— 同一个 DSH 会话的第二轮起只发送增量消息,由豆包服务端维护线程内存,
|
|
67
|
+
不再每轮重发全部历史。实测第二轮只发 20 个字符,服务端仍能答出上一轮的内容。
|
|
68
|
+
- **深度思考分离** —— 开启深度思考后,思考过程走 `reasoning_content` 而不是混进正文。
|
|
69
|
+
- **实验性工具调用(提示词层模拟)** —— 让豆包能驱动 DSH 的本地工具(读写文件等)。
|
|
70
|
+
默认**关闭**,设置卡片里有独立开关。实现方式是在提示词里注入工具契约,再把模型输出的
|
|
71
|
+
` ```doubao-tool ` 围栏解析回标准 `tool_calls`。实测 5 次调用、坏 JSON 0 次、5/5 轮收敛。
|
|
72
|
+
- **设置卡片新增工具开关段落** —— 与模型清单分开保存,避免「换模型」和「放开文件权限」
|
|
73
|
+
共用一次确认;关不掉的权限开关是比误开更坏的失败。
|
|
74
|
+
- **手动指定豆包数据目录** —— 设置卡片新增「豆包数据目录」一段,带「选择目录…」按钮
|
|
75
|
+
(桌面端弹原生文件夹对话框)和「改回自动探测」。装豆包时把数据目录改到 D 盘、或者事后
|
|
76
|
+
手动搬走的人,现在可以自己指路,不用再设环境变量。选中的路径在写入前会校验
|
|
77
|
+
`Default\Network\Cookies` 是否存在,选错当场提示且不落盘;已选的目录后来被删掉会自动
|
|
78
|
+
退回自动探测。段落里会列出当前用着哪个目录、以及探测到的全部候选。
|
|
79
|
+
|
|
80
|
+
### 修复
|
|
81
|
+
|
|
82
|
+
- **设置保存失败(从项目第一天就存在)** —— 症状是点开关报
|
|
83
|
+
`保存失败:host did not persist the value`,或看起来保存成功但刷新后回退。
|
|
84
|
+
根因不在 schema:本插件的 fiber 在 DSH 0.2.1 上**永远停在 `state 1`(LOADING)**,
|
|
85
|
+
宿主因此从不给它挂 `runtime.Config`,`describe()` 直接过滤掉命名空间,任何写入都失败于
|
|
86
|
+
`No configurable plugin entry "dsh-connect-doubao"`。
|
|
87
|
+
**这意味着历史上这个插件的设置一次都没能落盘过,包括手工改 `cordis.patch.yml` 的那些。**
|
|
88
|
+
现在两个开关改存插件自己的 `~/.dsh/dsh-connect-doubao.settings.json`,
|
|
89
|
+
写入是先写临时文件再原子重命名,读取不依赖任何宿主服务在线。
|
|
90
|
+
- **工具契约导致幻觉** —— 温和措辞的契约下,模型会回「已完成修改:…」但**磁盘根本没动**。
|
|
91
|
+
这是最坏的失败模式:用户以为文件改了。契约已改为硬性规则(第一条回复必须是工具调用、
|
|
92
|
+
严禁在没有 `[tool result]` 时声称完成),实测从 0/2 提升到 2/2。
|
|
93
|
+
- **多步编辑互相污染** —— 局部替换链会让第 N 次编辑失效于第 N+1 次,最终文件出现重复行。
|
|
94
|
+
契约加入「每次修改后重新读取文件再决定下一步」后,同一任务 1 次 edit + 1 次 read 收敛。
|
|
95
|
+
- **回复首字丢失** —— 回复开头在 `STREAM_MSG_NOTIFY`、增量在 `STREAM_CHUNK`,
|
|
96
|
+
旧代码只取一边导致「1+1」变成「+1」。已抽出 `assembleReplyText` 统一拼接。
|
|
97
|
+
- **对话模式根本不通** —— `agent_mode` 常量写反(1/2 互相搞错),每一轮都被路由到
|
|
98
|
+
豆包的任务 agent,直接回 `710010702`。已按 CDP 抓到的真实请求体整体重写。
|
|
99
|
+
- **User Data 不在 C 盘就读不到登录信息** —— 凭据查找曾硬编码
|
|
100
|
+
`%LOCALAPPDATA%\Doubao\User Data`,把数据放到 D 盘(安装器提供这个选项,也有人事后手动搬)
|
|
101
|
+
的机器会报 `Doubao user profile not found`。现在改为五层回退:设置卡片里手动选的目录 →
|
|
102
|
+
环境变量 `DSH_DOUBAO_PROFILE` → AppData 候选 → 运行中客户端的 `--user-data-dir` → 限时扫盘。
|
|
103
|
+
顺序按**代价**而非准确度排:常见情况 4 次 `existsSync` 就命中,不会为 0.8 s 的进程探测
|
|
104
|
+
拖慢每次冷启动。返回的是候选**列表**而非单一路径,因为「复制而非移动」会留下空壳 profile —
|
|
105
|
+
凭据加载会逐个尝试,取第一个真正能解出可用会话的。
|
|
106
|
+
|
|
107
|
+
### 改进
|
|
108
|
+
|
|
109
|
+
- **改动说明改为逐条列出** —— 工具执行完成后不再只说「已修改」,而是按「哪个文件 → 改了什么 →
|
|
110
|
+
为什么」逐条说明,多处改动分别列出。
|
|
111
|
+
- **请求体形状有测试钉住** —— 18 个断言全部取自 CDP 抓包而非由被测常量反推,
|
|
112
|
+
防止 `agent_mode` 这类常量再次静默回归。
|
|
113
|
+
|
|
114
|
+
### 已知限制
|
|
115
|
+
|
|
116
|
+
- **选不到 2.1 Pro / 2.1 Lite**。服务端**不校验** `model_item_key`(四种真 key 和一个不存在的
|
|
117
|
+
key 耗时与长度无可测差异),模型由服务端按产品/模式/账号决定。目录已收缩为
|
|
118
|
+
「快速 / 2.1 Turbo·专家 / 生图」三项,Pro/Lite 只能在豆包客户端自己的「工作任务」里用。
|
|
119
|
+
- **「工作任务 · 本地电脑」调不到**。协议层字段(`runtime_type: 2`、`sandbox_id`、`device_name`)
|
|
120
|
+
都能发对,但执行者是需要 App 进程内 CUA 运行时的组件,外部客户端一律
|
|
121
|
+
`710010702`。插件默认走纯对话模式,`DSH_DOUBAO_TASK=1` 才尝试任务模式。
|
|
122
|
+
- **工具模拟只在豆包自身不具备的能力上可靠**。让它「查天气」时它会改用自带联网搜索,
|
|
123
|
+
不调用我们的工具。
|
|
124
|
+
- **Windows only**。凭据解密依赖 DPAPI。User Data 可以不在 C 盘(见上文五层回退)。
|
|
125
|
+
浏览器形态的宿主没有原生目录对话框,「选择目录…」会明确报错而不是静默失败,
|
|
126
|
+
那种环境请用 `DSH_DOUBAO_PROFILE`。
|
|
127
|
+
|
|
128
|
+
### 测试
|
|
129
|
+
|
|
130
|
+
- 11 个测试文件、**151 个用例**全绿。本版新增三个文件:`store.test.ts` 20 例(文件合并语义、
|
|
131
|
+
原子写入、无临时文件残留、`profileDir` 存取与非法类型)、`save-route.test.ts` 20 例
|
|
132
|
+
(字段白名单、Origin 校验、值形状、500 契约、`profileDir` 的路径存在性校验、`/profile`
|
|
133
|
+
只读路由)、`profile.test.ts` 25 例(五层探测优先级、去重、扫描深度与时间预算、
|
|
134
|
+
手动覆盖的优先与失效回退)。
|
|
135
|
+
- `doctor` 五项全绿:凭据 29 cookie / 账号通过 / shim OK / 额度 / 模型发现。
|
|
136
|
+
`doctor --json` 的 `credentials.data` 现在同时给出 `profile`(用的是哪个、`via env|appdata|
|
|
137
|
+
process|scan|manual`)与 `candidates`(全部候选),定位"读不到登录信息"时先看这两项。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 0.2.0
|
|
142
|
+
|
|
143
|
+
- 修复对话模式完全不通(`agent_mode` 常量写反)。
|
|
144
|
+
- 请求体按 CDP 抓包重写。
|
|
145
|
+
|
|
146
|
+
## 0.1.1 / 0.1.0
|
|
147
|
+
|
|
148
|
+
- 首个可用版本:凭据复用(DPAPI + AES-GCM)、provider 注册、只读额度卡片。
|