@cxyhhhhh/dsh-qqbot 0.5.4-dev.202610301949 → 0.5.4-dev.202610302146
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 +5 -0
- package/CHANGELOG_EN.md +5 -0
- package/doc/defect-review-config-session-id.md +209 -0
- package/lib/host/adapter.d.ts +18 -0
- package/lib/host/adapter.d.ts.map +1 -1
- package/lib/host/adapter.js +36 -0
- package/lib/host/adapter.js.map +1 -1
- package/lib/media/vision-tool.d.ts +7 -1
- package/lib/media/vision-tool.d.ts.map +1 -1
- package/lib/media/vision-tool.js +63 -18
- package/lib/media/vision-tool.js.map +1 -1
- package/lib/model/model-resolver.d.ts.map +1 -1
- package/lib/model/model-resolver.js +1 -1
- package/lib/model/model-resolver.js.map +1 -1
- package/lib/model/prefs-store.d.ts +22 -1
- package/lib/model/prefs-store.d.ts.map +1 -1
- package/lib/model/prefs-store.js +112 -15
- package/lib/model/prefs-store.js.map +1 -1
- package/lib/session/session-manager.d.ts +30 -1
- package/lib/session/session-manager.d.ts.map +1 -1
- package/lib/session/session-manager.js +96 -28
- package/lib/session/session-manager.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
- **文件发送路径白名单解析符号链接**:按真实位置判定,root 内的符号链接指向外部时拒绝访问。(#94)
|
|
35
35
|
- **图片附件按真实格式命名扩展名**:QQ 网关对图片统一标注 `image/png`(实际多为 GIF/JPEG),落盘文件名照搬导致按扩展名解码的读图工具失败;现按文件头(magic bytes)识别真实格式并校正扩展名,字节不变、不转码,识别不了的格式保持原行为。(#76)
|
|
36
36
|
- **统一 workspace 路径解析**:新增插件目录单一事实源(`~/.dsh-qqbot`),workspace、media、模型偏好等子路径统一派生,未配置 `cwd` 时不再误用宿主进程目录(此前导致 workspace 内文件发送被误拒);不存在的文件也改为报「文件不存在」而非误报路径不允许。
|
|
37
|
+
- **vision 配置自动补写不再破坏 settings.yaml**:启动时为视觉模型补写 `input` 声明改用文档保真编辑(注释、锚点、其他配置原样保留)+ 原子写 + 并发冲突时放弃重试,此前全量重序列化会抹掉文件里的全部注释与排版。
|
|
38
|
+
- **偏好文件并发安全**:`model-prefs.json`(会话 id 映射,多实例/多进程共享)改为原子写 + 写前合并其他写者的条目,多 bot 或多 profile 并存不再互相覆盖丢映射;删除操作带墓碑防止被并发写复活;读取/写入失败升级为可见告警(此前仅 debug 甚至静默,映射丢失表现为「QQ 里丢上下文」且无从排查)。
|
|
39
|
+
- **修复会话列表可能打不开**:恢复会话失败时只在确认磁盘上确实没有该会话后才新建,日志损坏、后端故障等原因不再沿用同一会话 id 重复创建(此前会把同一 id 写进多个目录,宿主随后拒绝加载整个会话列表);这类故障改为明确报错并记录日志,恢复后原会话历史仍在。
|
|
40
|
+
- **修复并发消息可能切错会话**:旧版本的会话 id 由用户标识确定性派生,仅用于迁移存量会话,不再用于新建;同一会话的并发请求(斜杠指令与普通消息同时到达)合并为一次恢复/创建,不再产生两个互相覆盖且无人回收的会话实例。
|
|
41
|
+
- **vision 配置补写不再丢数字精度**:补写 `input` 声明时整数按原文保留,用户 `settings.yaml` 里的大整数(安装 id、时间戳等)不再被截断。
|
|
37
42
|
|
|
38
43
|
### 内部改进
|
|
39
44
|
|
package/CHANGELOG_EN.md
CHANGED
|
@@ -34,6 +34,11 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
34
34
|
- **File-send path allowlist resolves symlinks**: paths are judged by their real locations; a symlink inside an allowed root pointing outside is rejected. (#94)
|
|
35
35
|
- **Image attachments named by their real format**: the QQ gateway labels all images `image/png` (most are actually GIF/JPEG), so saved files carried wrong extensions and extension-based image decoding failed; extensions are now corrected from the file header (magic bytes) — bytes unchanged, no transcoding, unknown formats keep the original behavior. (#76)
|
|
36
36
|
- **Unified workspace path resolution**: introduced a single source of truth for the plugin data directory (`~/.dsh-qqbot`), from which the workspace, media, and model-preference paths are uniformly derived; without an explicit `cwd` the host process directory is no longer wrongly used (previously causing workspace file sends to be denied). Missing files now report "file not found" instead of a misleading path denial.
|
|
37
|
+
- **Vision config auto-patch no longer clobbers settings.yaml**: the startup fix-up that declares `input` for the vision model now uses fidelity-preserving document editing (comments, anchors, and other settings kept as-is) with atomic writes and conflict-aware retry; the previous full re-serialization wiped all comments and formatting from the file.
|
|
38
|
+
- **Concurrent-safe preference file**: `model-prefs.json` (the session-id mapping shared by multi-bot and multi-profile setups) now writes atomically and merges other writers' entries before overwriting, so coexisting bots/profiles no longer clobber each other's mappings; deletions carry tombstones so concurrent writes cannot resurrect them; load/write failures surface as visible warnings (previously debug-only or silent — a lost mapping showed up as "lost context in QQ" with nothing to trace).
|
|
39
|
+
- **Fixed an unopenable session list**: when resuming a session fails, a new one is created only after confirming the session is genuinely absent on disk; corrupt logs and backend failures no longer recreate the same session id (which used to write one id into several directories, after which the host refused to load the whole session list). Such failures now fail loudly with a log entry, and the original history is still there once the fault clears.
|
|
40
|
+
- **Fixed concurrent messages landing on the wrong session**: the legacy session id derived from the user identity is now only used to migrate existing sessions, never to create new ones; concurrent requests for the same session (a slash command arriving alongside a normal message) are coalesced into one resume/create, so two mutually overwriting, never-reclaimed session instances are no longer produced.
|
|
41
|
+
- **Vision config patch keeps numeric precision**: integers are preserved verbatim when the `input` declaration is added, so large integers in the user's `settings.yaml` (install ids, timestamps) are no longer truncated.
|
|
37
42
|
|
|
38
43
|
### Internal
|
|
39
44
|
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# dsh 配置写入与会话 id 缺陷审查
|
|
2
|
+
|
|
3
|
+
> 审查基线:`main@078c338`(0.5.4)
|
|
4
|
+
> 复现用例:分支 `test/defect-repro-config-session`(提交 `0202760`)
|
|
5
|
+
> 修复:D1 `e5902f6`、E3 `e49dadf`、E1/E2 与 D1 数值保真(本分支)
|
|
6
|
+
> 日期:2026-10-30
|
|
7
|
+
|
|
8
|
+
## 1. 背景
|
|
9
|
+
|
|
10
|
+
用户反馈两类问题,需确认 0.5.4 是否已修复:
|
|
11
|
+
|
|
12
|
+
1. 以不恰当的方式操作 dsh 配置,安装后用户可能丢失自己的配置;
|
|
13
|
+
2. 以不恰当的方式固定会话 id(未沿用 dsh 的 UUID 方式),边界情况(如多进程并发)下会话列表可能出现重复 id,导致用户无法打开 dsh。
|
|
14
|
+
|
|
15
|
+
## 2. 结论速览
|
|
16
|
+
|
|
17
|
+
| 问题 | 结论 |
|
|
18
|
+
|---|---|
|
|
19
|
+
| 1. 操作 dsh 配置 | **已修复**:`cordis.patch.yml` 与 `~/.dsh/settings.yaml` 写入均满足文档保真 + 原子写 |
|
|
20
|
+
| 2. 固定会话 id | **已修复**:新 id 为 `session-${randomUUID()}`;确定性 id 仅用于迁移存量会话 |
|
|
21
|
+
|
|
22
|
+
缺陷清单与当前状态:
|
|
23
|
+
|
|
24
|
+
| 编号 | 缺陷 | 严重度 | 状态 |
|
|
25
|
+
|---|---|---|---|
|
|
26
|
+
| D1 | `settings.yaml` 整文件 load+dump:丢注释、改值、非原子、无锁 | 高 | ✅ 已修复(`e5902f6` + 本分支补数值保真) |
|
|
27
|
+
| E1 | `resume` 任何失败都当「会话不存在」,用同一 id 盲目 `create`,错误被吞 | 高 | ✅ 已修复(本分支) |
|
|
28
|
+
| E2 | 并发窗口内用 0.5.x 确定性 legacy id 新建会话 | 高 | ✅ 已修复(本分支) |
|
|
29
|
+
| E3 | `model-prefs.json` 无并发/崩溃保护,损坏后静默回落 legacy id | 中 | ✅ 已修复(`e49dadf`) |
|
|
30
|
+
| — | 行首 tab 规范化会改写多行文本内容 | — | ❌ 误报,已澄清 |
|
|
31
|
+
|
|
32
|
+
修复后用例语义由「复现当前错误行为」改为「钉死修复后行为」,文件与分组保持不变。
|
|
33
|
+
|
|
34
|
+
## 3. 问题 1:dsh 配置写入
|
|
35
|
+
|
|
36
|
+
### 3.1 已修复:`cordis.patch.yml`(提交 17a5c80、9d2cc6c)
|
|
37
|
+
|
|
38
|
+
`src/setup/persist.ts` 改用 eemeli/yaml Document API 原地编辑,满足四条约束:
|
|
39
|
+
|
|
40
|
+
| 约束 | 位置 |
|
|
41
|
+
|---|---|
|
|
42
|
+
| 文档保真(注释/锚点/`!!js`/insert 行原样保留) | `applyEdit`、`PARSE_OPTIONS` |
|
|
43
|
+
| fail-closed(非法 YAML / 顶层非数组 / config 非映射 / 锚点共享拒写) | `parseProfilePatch`、`findEntryConfig`(128-178 行) |
|
|
44
|
+
| 原子写(同目录临时文件 + rename) | `editProfilePatch`(97-105 行) |
|
|
45
|
+
| 乐观校验 + 读回验证 + 回滚 | `editProfilePatch`(89-122 行) |
|
|
46
|
+
|
|
47
|
+
三个入口 `persistCredentialsToProfile` / `removeCredentialsFromProfile` / `updateProfileConfig`(234-375 行)只改 `im-qqbot` 条目;`updateProfileConfig` 不碰 `appId/appSecret`。调用方:`src/index.ts:51`、`src/setup/index.ts:133`、`src/setup/bind-routes.ts:151/328`。测试:`persist.test.ts`、`bind-integration.test.ts`。
|
|
48
|
+
|
|
49
|
+
> 设计行为(非缺陷,需知悉):扫码重新绑定会把私聊白名单 `c2cAllow` 整体替换为扫码者一人(`overwriteC2cAllowlist`,205-214 行)。原本配置了多人白名单的用户会感知为「配置被覆盖」。
|
|
50
|
+
|
|
51
|
+
### 3.2 已修复:D1 `~/.dsh/settings.yaml`(提交 e5902f6,数值保真见本分支)
|
|
52
|
+
|
|
53
|
+
**位置**:`src/media/vision-tool.ts` `ensureVisionInputModal`,由 `src/gateway/bootstrap.ts` 在每次启动时调用。
|
|
54
|
+
|
|
55
|
+
**触发条件**:`vision.enabled` 且该视觉模型未声明 `input: [..., image]`。补齐后幂等,因此每个模型通常只在首次启动时触发一次。
|
|
56
|
+
|
|
57
|
+
采纳了修复建议 2(叶子级编辑而非停写)。改动后满足:
|
|
58
|
+
|
|
59
|
+
| 约束 | 实现 |
|
|
60
|
+
|---|---|
|
|
61
|
+
| 文档保真 | `parseDocument` + 逐层 `get` 定位到目标模型后 `model.set('input', ...)`,注释/锚点/其他命名空间原文保留 |
|
|
62
|
+
| 数值保真 | `parseDocument(..., { intAsBigInt: true })`,整数不经 double 中转(否则大整数回写丢精度) |
|
|
63
|
+
| 原子写 | 同目录临时文件 + `renameSync`,失败时清理临时文件 |
|
|
64
|
+
| 乐观校验 | 写前重读比对,窗口内被外部改动则放弃本次补写(幂等,下次启动重试) |
|
|
65
|
+
| fail-closed | 解析失败 / 定位不到目标只 `warn`,不阻断启动、不写文件 |
|
|
66
|
+
|
|
67
|
+
**回归用例**:`src/media/vision-tool.test.ts` 覆盖注释与锚点保真(D1-1)、其他命名空间值保真(D1-2)、原子写与无临时文件残留(D1-3)、乐观校验让宿主写入胜出(D1-4);`src/media/vision-modal.test.ts` 覆盖补写生效、幂等、fail-closed、tab 归一化。
|
|
68
|
+
|
|
69
|
+
**遗留(低风险,已评估)**:未使用宿主 `dsh-settings-file` 的跨进程写锁(`withFileLock`),乐观校验只把竞态窗口收窄到「读回比对 → rename」之间;临时文件名固定 `.imqqbot.tmp`,多进程同时首启会互相踩。该路径每模型仅首启触发一次且失败不损坏原文件,暂不引入锁依赖。
|
|
70
|
+
|
|
71
|
+
## 4. 问题 2:会话 id
|
|
72
|
+
|
|
73
|
+
### 4.1 已修复(提交 0a1abbb)
|
|
74
|
+
|
|
75
|
+
`src/session/session-id.ts`:
|
|
76
|
+
|
|
77
|
+
- `mintSessionId()` = `session-${randomUUID()}`,与宿主一致(`packages/host/apiproxy/src/api-proxy.ts:2168/2415`);
|
|
78
|
+
- `legacyDerivedSessionId()` 保留 0.5.x 的 SHA-256 派生算法,**仅用于定位存量会话**。
|
|
79
|
+
|
|
80
|
+
`src/session/session-manager.ts` 用到新 id 的位置:
|
|
81
|
+
|
|
82
|
+
| 场景 | 位置 |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `/model` 切换 fork 子会话 | 328 行 |
|
|
85
|
+
| `/new` | 591 行 |
|
|
86
|
+
| 首次创建 | 536-541 行 |
|
|
87
|
+
| legacy 迁移:resume 命中则沿用并落盘 | 455-465、515、533 行 |
|
|
88
|
+
|
|
89
|
+
### 4.2 已修复:E1 resume 失败按原因分流
|
|
90
|
+
|
|
91
|
+
**原缺陷**:`getOrCreate` 的 `catch {}` 吞掉错误,prefs 已记录 id X 时,`resume(X)` 无论因何失败(日志损坏、IO 错误、HMR 期间同 id 未释放、preset 挂载失败等)都会接着 `create(X)`。宿主自身只在确认磁盘不存在时才 create(`packages/core/agent-loop/src/index.ts` 406-428 行,注释 “corruption and backend failures stay loud”)。
|
|
92
|
+
|
|
93
|
+
**后果**(修复前):跨进程且两个进程 cwd 不同时,jsonl 后端 `link()` 的 EEXIST 保护只覆盖同一 project 目录,同一 id 落在两个目录,之后 `list()` 抛 `duplicate JSONL session id`,**会话列表整体无法打开**——即用户反馈的现象;0.5.x 老会话遇一次瞬时错误即被永久弃用。
|
|
94
|
+
|
|
95
|
+
**修复**:宿主调用收口到 `src/host/adapter.ts`(该文件的定位就是「收口所有版本漂移点」),`session-manager` 不再直接 `ctx.get('sessionPersistence')`。
|
|
96
|
+
|
|
97
|
+
- adapter 新增 `sessionExists(sessionId): Promise<boolean | undefined>`,三种结果语义互不混同:
|
|
98
|
+
| 结果 | 含义 | 调用方动作 |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| `true` | 会话在盘上 | 拒绝重建,warn 后抛原 resume 错误 |
|
|
101
|
+
| `false` | 宿主报 `SessionPersistenceNotFoundError` | 允许首次创建 |
|
|
102
|
+
| `undefined` | 旧宿主无该服务,无求证手段 | 按 resume 结果创建,warn 留痕 |
|
|
103
|
+
| 抛出 | 求证过程本身失败(后端故障) | 拒绝重建,不能据此断言不存在 |
|
|
104
|
+
- **判定只认错误 `name`**,不做 `cause` 链回溯、不做 `ENOENT`、不做文案猜测。参照 `dsh-im` 的 `isSessionNotFound`(只比对 code)与其注释「never recognize arbitrary internal failures」:resume/load 的报错可能来自别的环节(preset 挂载、工具缺失、同 id 未释放),宽泛的文案匹配会把「工具 not found」误判成「会话不存在」,恰好触发本要防的重建。不 import 宿主错误类——插件未直接依赖 session-persistence 包,跨 realm 的 `instanceof` 也不可靠。
|
|
105
|
+
- 顺带把原先散落的 `resolvePersistedPreset` 的 `ctx.get` 也收到 adapter 的 `sessionHeader`。
|
|
106
|
+
- `mayCreateAfterResumeFailure(key, sessionId, resumeError)` 只负责按上表分流并记日志,返回 false 时由调用方抛原 resume 错误(原错误信息量大于求证错误)。
|
|
107
|
+
|
|
108
|
+
> 比建议的 `list()` 更省:`load` 是单条查询,且只在 create 路径触发一次。
|
|
109
|
+
|
|
110
|
+
**回归用例**:adapter 侧 4 个(load 成功 / NotFound name / 文案含 not found 但 name 不符 → 抛 / 无服务 → undefined);session-manager 侧 E1-1(会话在盘上不重建、prefs 不改写、日志可见)、E1-2(瞬时错误不弃用 legacy,故障恢复后仍能恢复)、E1-3(求证失败按存在处理,抛原 resume 错误)、E1-4(确认缺失 → 即使 resume 报 IO 错误也允许创建)、E1-5(旧宿主降级路径留痕)。
|
|
111
|
+
|
|
112
|
+
### 4.3 已修复:E2 确定性 id 不进入新建路径
|
|
113
|
+
|
|
114
|
+
**原缺陷**:prefs 为空时候选为 legacy id L,`resume(L)` 等待期间 prefs 被并发写入会使 `if (!getSessionId(key))` 不成立,局部 `sessionId` 仍为 L,于是用 0.5.x 确定性 id 新建会话;同时同 key 并发 `getOrCreate` 会各自 create,先建的 agent 被覆盖且未 dispose。
|
|
115
|
+
|
|
116
|
+
并发写入来源未变:`/new` 同步写 prefs,`/compact` 从磁盘拉起会话,斜杠指令位于 `concurrencyGuard` 之前(`src/gateway/middleware-setup.ts`)。
|
|
117
|
+
|
|
118
|
+
**修复**:
|
|
119
|
+
|
|
120
|
+
- `openSession` 进入时记录 `candidateIsLegacy`(prefs 是否 miss),不再以「此刻 prefs 是否为空」作判据;
|
|
121
|
+
- 新增 `resolveCreateId(key, candidate, candidateIsLegacy)`:prefs 在窗口内被改写则采用其最新 id(内存与 prefs 指向同一会话);候选来自 legacy 派生则一律铸造新 id;候选来自 prefs 且确认缺失则沿用该 id;
|
|
122
|
+
- create 成功后统一 `persistSessionId`,内存与 prefs 不再分叉;
|
|
123
|
+
- `getOrCreate` 外层加 per-key singleflight(`inflight` Map):同 key 并发复用同一次 resume/create,后到者只更新回复目标与活跃时间;完成或失败后清理在途记录。
|
|
124
|
+
|
|
125
|
+
**回归用例**:E2-1(`/new` 并发写入 → 采用 prefs 最新 id,不用 legacy)、E2-2(`/compact` 与普通消息并发 → 一次 resume/create、无多余 agent)、E2-3(singleflight 失败时双方收到同一错误且在途记录已清理)。
|
|
126
|
+
|
|
127
|
+
### 4.4 已修复:E3 `model-prefs.json` 并发/崩溃保护(提交 e49dadf)
|
|
128
|
+
|
|
129
|
+
原缺陷:映射只存于全局 `~/.dsh-qqbot/model-prefs.json`,启动读一次、之后全量快照覆盖写(非原子、无锁、写前不重读),读取失败仅在 debug 下打日志。
|
|
130
|
+
|
|
131
|
+
修复后(`src/model/prefs-store.ts`):同目录临时文件(名带 pid + 随机后缀,跨进程互不覆盖)+ rename;`mergeDisk` 写前重读按 key 合并,内存覆盖同 key;引入**删除墓碑**防止「本进程的删除被并发写复活」(建议之外的补充);加载失败经 `onError` 无条件告警;发现损坏先备份到 `.corrupted.<ts>` 再覆盖,保留人工恢复的余地。
|
|
132
|
+
|
|
133
|
+
**回归用例**:`prefs-store.test.ts` 覆盖多实例写前合并、内存覆盖同 key、外部写入新 key 不丢、删除墓碑、原子写与临时文件清理;`session-manager.test.ts` E3-4 钉死「映射丢失留下可见日志」。
|
|
134
|
+
|
|
135
|
+
### 4.5 其他
|
|
136
|
+
|
|
137
|
+
- `session-manager.ts` 头部过时注释(「SessionId 由 sessionKey 确定性派生」)已更新为当前语义:映射存于 prefs,新 id 由 `mintSessionId()` 铸造,确定性 id 仅用于迁移;
|
|
138
|
+
- 宿主调用统一经 `host/adapter.ts`,`session-manager` 内不再出现 `ctx.get`(`agentPresets` 的读取仍在 manager 内,因其返回的是插件自有服务契约而非宿主漂移点)。
|
|
139
|
+
|
|
140
|
+
### 4.6 与 dsh-im 的做法对照
|
|
141
|
+
|
|
142
|
+
`dsh-im` 走 RPC 架构,但同一问题的处理方式可直接借鉴,本次修复据此收紧:
|
|
143
|
+
|
|
144
|
+
| 关注点 | dsh-im | 本插件 |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| 判定收口 | `shared/session-error.mjs` 导出 `isSessionNotFound(code)`,13 处调用方只问布尔 | `host/adapter.ts` 导出 `sessionExists(id)`,调用方只看三态 |
|
|
147
|
+
| 判定严格度 | 只比对 code(`session-not-found` / `session/not-found`),注释明示不认任意 internal 错误 | 只比对错误 `name`,不做 cause 回溯/文案猜测 |
|
|
148
|
+
| 旧宿主兼容 | 单独的 `isSessionLogCorrupt`,**限定** method 白名单 + 特定文案签名才认 | `sessionExists` 返回 `undefined` 表示无求证手段,不猜 |
|
|
149
|
+
| 存在性求证 | `sessionExists()` 先查归档再读 history,归档算存在(否则会静默绑新会话) | `load` 单条查询,求证失败则抛而非当作不存在 |
|
|
150
|
+
|
|
151
|
+
本次按此修正了初版实现的两处过度设计:删掉 `resume-failure.ts` 的 8 层 `cause` 回溯与 `/not found|no such|does not exist/i` 宽泛正则(该正则会把「工具 not found」误判成「会话不存在」),把宿主访问从 `session-manager` 挪进 adapter。
|
|
152
|
+
|
|
153
|
+
## 5. 误报澄清
|
|
154
|
+
|
|
155
|
+
此前判断「行首 tab 规范化 `/^\t+/gm` 会改写多行文本块(如提示词)内容」**不成立**:
|
|
156
|
+
|
|
157
|
+
- 合法 YAML 中第 0 列 tab 不可能出现在块标量内部(js-yaml 直接报 `tab characters must not be used in indentation`);
|
|
158
|
+
- 块内缩进之后的 tab 不匹配 `/^\t+/m`;
|
|
159
|
+
- 多行引号字符串续行前导空白在折叠时本就被剥离。
|
|
160
|
+
|
|
161
|
+
该规范化只影响宿主本身也无法解析的非法文件。用例「误报澄清」固定该结论。
|
|
162
|
+
|
|
163
|
+
## 6. 验证方法
|
|
164
|
+
|
|
165
|
+
### 6.1 用例约定
|
|
166
|
+
|
|
167
|
+
- 用例现已全部为回归用例,断言**修复后的期望行为**;原「缺陷复现」断言(钉死当时的错误行为)已随修复逐条翻转,编号与分组保留,便于对照本文档追溯;
|
|
168
|
+
- 每组配有「对照组」用例,证明测试装置本身正确(正常路径行为符合预期)。
|
|
169
|
+
|
|
170
|
+
### 6.2 隔离手段
|
|
171
|
+
|
|
172
|
+
| 依赖 | 隔离方式 |
|
|
173
|
+
|---|---|
|
|
174
|
+
| `~/.dsh-qqbot` | `vi.mock('../shared/dirs.ts')` 指向临时目录,不触碰真实插件目录 |
|
|
175
|
+
| `~/.dsh/settings.yaml` | `DSH_HOME` 指向临时目录 |
|
|
176
|
+
| 写入中途失败 / 宿主并发写 | `vi.mock('node:fs')` 包装 `writeFileSync` / `readFileSync` 注入钩子 |
|
|
177
|
+
| 宿主 agent 注册表 | fake `get/resume/create`,用 deferred Promise 精确控制并发时序 |
|
|
178
|
+
| 宿主 persistence | `persistenceCtx(load)` 注入替身,覆盖 `sessionExists` 的四种结果;默认 `absentCtx`(磁盘无会话)对应全新用户,`emptyCtx`(无服务)对应旧宿主降级 |
|
|
179
|
+
|
|
180
|
+
### 6.3 变异检查
|
|
181
|
+
|
|
182
|
+
修复前曾临时为 `getOrCreate` 加最小修复(非「不存在」错误向上抛 + legacy 候选一律铸造)以排除「用例空转」:E1/E2 共 4 个用例全部变红,对照组保持通过。修复落地后这 4 个用例按期望行为重写,仍由同一组装置驱动。
|
|
183
|
+
|
|
184
|
+
### 6.4 运行
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
pnpm install --frozen-lockfile
|
|
188
|
+
pnpm vitest run
|
|
189
|
+
pnpm tsc
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
结果:26 个文件 291 个用例全部通过,`tsc` 无错。项目以 pnpm 管理依赖(`pnpm-lock.yaml`),仓库内的 `package-lock.json` 并非事实源,勿用 `npm ci`。
|
|
193
|
+
|
|
194
|
+
## 7. 覆盖边界
|
|
195
|
+
|
|
196
|
+
- 「会话列表出现重复 id 导致 dsh 无法打开」的最终后果发生在宿主侧,插件单测无法覆盖;单测钉死的是插件侧前提——不再对已存在 id / legacy 固定 id 发起 create,宿主侧行为依据阅读 deepseek-harness 源码;
|
|
197
|
+
- `sessionExists` 在旧宿主(无 `sessionPersistence`)上返回 `undefined`,此时退回「按 resume 结果创建」——等同修复前行为,E1-5 钉死该降级路径会留日志,但真实旧宿主未实测;
|
|
198
|
+
- 项目当前无 ESLint 配置,`pnpm lint` 不可用。
|
|
199
|
+
|
|
200
|
+
## 8. 变更影响评估
|
|
201
|
+
|
|
202
|
+
| 问题 | 回答 |
|
|
203
|
+
|---|---|
|
|
204
|
+
| 影响接口 | 会话创建/恢复(所有入站消息、`/new`、`/compact`、`/model`);启动时视觉配置自检 |
|
|
205
|
+
| 向后兼容 | legacy 迁移语义保持:prefs 未命中时仍探测 legacy 一次,resume 命中则沿用并落盘 |
|
|
206
|
+
| 行为变更 | resume 因非缺失原因失败时不再静默重建,改为向上抛——用户会看到报错而非被切到空会话;故障恢复后原会话历史仍在 |
|
|
207
|
+
| 灰度 | 会话路由变更影响全部用户,建议先在测试 bot 验证老用户(0.5.x 会话)恢复路径 |
|
|
208
|
+
| 数据迁移 | 无 DDL;`model-prefs.json` 格式不变 |
|
|
209
|
+
| 回滚 | 代码回滚即可;E3 修复引入的备份文件不影响旧版本读取 |
|
package/lib/host/adapter.d.ts
CHANGED
|
@@ -25,9 +25,27 @@ export interface HostAdapter {
|
|
|
25
25
|
globalService(name: string): unknown | undefined;
|
|
26
26
|
/** 官方 fork seed 构造;旧宿主无导出时返回 undefined */
|
|
27
27
|
buildForkSeed(events: readonly unknown[], boundary: number): Promise<readonly unknown[] | undefined>;
|
|
28
|
+
/** 会话 header 读取(取 meta.agentPreset 等);服务缺失或读取失败返回 undefined */
|
|
29
|
+
sessionHeader(sessionId: string): Promise<SessionHeaderLike | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* 会话是否存在于持久化层。
|
|
32
|
+
*
|
|
33
|
+
* 三种结果语义不同,调用方必须区分——把「判不出」当成「不存在」正是重建已存在
|
|
34
|
+
* 会话、撞出重复 id 的根因:
|
|
35
|
+
* - `true` / `false`:确定答案;
|
|
36
|
+
* - `undefined`:旧宿主无该服务,没有求证手段;
|
|
37
|
+
* - 抛出:求证过程本身失败(后端故障),不能据此断言会话不存在。
|
|
38
|
+
*/
|
|
39
|
+
sessionExists(sessionId: string): Promise<boolean | undefined>;
|
|
28
40
|
/** 探测结果摘要(启动契约检查用) */
|
|
29
41
|
readonly capabilities: string[];
|
|
30
42
|
}
|
|
43
|
+
/** 会话持久化 header 的最小结构(只读插件关心的字段) */
|
|
44
|
+
export interface SessionHeaderLike {
|
|
45
|
+
meta?: {
|
|
46
|
+
agentPreset?: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
31
49
|
export declare function createHostAdapter(ctx: Context, logger?: AdapterLogger): HostAdapter;
|
|
32
50
|
/** 测试辅助:清空模块缓存 */
|
|
33
51
|
export declare function _resetAdapterCache(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/host/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,aAAa,CAAC,OAAO,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,OAAO,EAAE,CAAC;IACvH,uCAAuC;IACvC,UAAU,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAChF,iCAAiC;IACjC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACjD,0CAA0C;IAC1C,aAAa,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IACrG,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/host/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,aAAa,CAAC,OAAO,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,SAAS,OAAO,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,GAAG,SAAS,OAAO,EAAE,CAAC;IACvH,uCAAuC;IACvC,UAAU,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAChF,iCAAiC;IACjC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACjD,0CAA0C;IAC1C,aAAa,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IACrG,+DAA+D;IAC/D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;IACzE;;;;;;;;OAQG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,sBAAsB;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAiCD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,WAAW,CAuFnF;AAWD,kBAAkB;AAClB,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
package/lib/host/adapter.js
CHANGED
|
@@ -6,6 +6,15 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
6
6
|
}
|
|
7
7
|
return path;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* 宿主「会话不存在」错误的稳定 name。
|
|
11
|
+
*
|
|
12
|
+
* 不 import `SessionPersistenceNotFoundError`:该类属 session-persistence 包
|
|
13
|
+
* (插件未直接依赖),且跨 realm 的 instanceof 不可靠。只认 name,不做文案
|
|
14
|
+
* 猜测——resume/load 的报错可能来自别的环节(preset 挂载、同 id 未释放),
|
|
15
|
+
* 把它们误判成「会话不存在」会导致重建一个实际存在的会话。
|
|
16
|
+
*/
|
|
17
|
+
const NOT_FOUND_NAME = 'SessionPersistenceNotFoundError';
|
|
9
18
|
/** 模块级函数的动态 import 结果缓存(spec 变量路径绕开本地依赖类型检查) */
|
|
10
19
|
const moduleCache = new Map();
|
|
11
20
|
async function importModule(spec, logger) {
|
|
@@ -26,6 +35,8 @@ export function createHostAdapter(ctx, logger) {
|
|
|
26
35
|
const capabilities = [];
|
|
27
36
|
// events 读取路径只有运行时才能确定,sessionEvents 内自适应
|
|
28
37
|
capabilities.push('sessionEvents(s自适应)');
|
|
38
|
+
// persistence 可能在插件启动后才注册,sessionExists/sessionHeader 内每次取
|
|
39
|
+
capabilities.push(safeGet(ctx, 'sessionPersistence') ? 'sessionPersistence(已注册)' : 'sessionPersistence(缺失,会话存在性判定降级)');
|
|
29
40
|
let resolveFn;
|
|
30
41
|
const presets = safeGet(ctx, 'agentPresets');
|
|
31
42
|
if (presets && typeof presets.serviceFor === 'function') {
|
|
@@ -66,6 +77,31 @@ export function createHostAdapter(ctx, logger) {
|
|
|
66
77
|
globalService(name) {
|
|
67
78
|
return safeGet(ctx, name);
|
|
68
79
|
},
|
|
80
|
+
async sessionHeader(sessionId) {
|
|
81
|
+
const persistence = safeGet(ctx, 'sessionPersistence');
|
|
82
|
+
if (!persistence)
|
|
83
|
+
return undefined;
|
|
84
|
+
try {
|
|
85
|
+
return await persistence.load(sessionId);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
async sessionExists(sessionId) {
|
|
92
|
+
const persistence = safeGet(ctx, 'sessionPersistence');
|
|
93
|
+
if (!persistence)
|
|
94
|
+
return undefined;
|
|
95
|
+
try {
|
|
96
|
+
await persistence.load(sessionId);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (err?.name === NOT_FOUND_NAME)
|
|
101
|
+
return false;
|
|
102
|
+
throw err; // 求证失败 ≠ 会话不存在
|
|
103
|
+
}
|
|
104
|
+
},
|
|
69
105
|
async buildForkSeed(events, boundary) {
|
|
70
106
|
const mod = await importModule('@deepseek-ai/dsh-session/fork', logger);
|
|
71
107
|
const fn = mod?.buildForkSeed;
|
package/lib/host/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/host/adapter.ts"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/host/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,13 @@ export declare const DESCRIBE_IMAGE_TOOL_NAME = "qqbot_describe_image";
|
|
|
8
8
|
*
|
|
9
9
|
* 模型配置界面不暴露 `input` 字段,用户通过界面配置的视觉模型默认是纯文本,
|
|
10
10
|
* 会导致 pi-ai adapter 拒绝图片输入。这里在启动时兜底:未声明 image 时自动补 `[text, image]`。
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* 写入遵循与 setup/persist.ts 相同的约束(该文件是宿主用户级配置,多写者共存):
|
|
13
|
+
* - 文档保真:eemeli/yaml Document API 原地编辑,注释/锚点/其他配置原样保留;
|
|
14
|
+
* - 原子写:同目录临时文件 + rename,崩溃不留半份文件;
|
|
15
|
+
* - 乐观校验:写入窗口内文件被外部改动则放弃本次补写(幂等,下次启动再补);
|
|
16
|
+
* - fail-closed:解析失败仅 warn 不阻断启动(视觉功能可另行手动配置)。
|
|
17
|
+
* 幂等:已声明 image 则不写(不触 mtime,不引发宿主重载)。
|
|
12
18
|
*/
|
|
13
19
|
export declare function ensureVisionInputModal(vision: VisionConfig, logger: Logger): void;
|
|
14
20
|
/** 注册 qqbot_describe_image 工具(服务缺失时优雅降级,不阻断插件启动) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision-tool.d.ts","sourceRoot":"","sources":["../../src/media/vision-tool.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA2B1C,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AA2H/D
|
|
1
|
+
{"version":3,"file":"vision-tool.d.ts","sourceRoot":"","sources":["../../src/media/vision-tool.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA2B1C,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AA2H/D;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA4EjF;AAED,oDAAoD;AACpD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqElG"}
|
package/lib/media/vision-tool.js
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
*
|
|
9
9
|
* 手写 ToolDefinition(标准 JSON Schema),避免引入 dsh-tools 的 8 个 peer 依赖。
|
|
10
10
|
*/
|
|
11
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
12
12
|
import { readFile, stat } from 'node:fs/promises';
|
|
13
13
|
import { homedir } from 'node:os';
|
|
14
14
|
import { basename, join, resolve } from 'node:path';
|
|
15
|
-
import
|
|
15
|
+
import { parseDocument, isMap, isSeq, isScalar } from 'yaml';
|
|
16
16
|
import { BlockAssembler, createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
17
17
|
/** 工具名(qqbot 前缀避免与外部 describe-image 包的同名工具冲突) */
|
|
18
18
|
export const DESCRIBE_IMAGE_TOOL_NAME = 'qqbot_describe_image';
|
|
@@ -134,7 +134,13 @@ function resolveDshHome() {
|
|
|
134
134
|
*
|
|
135
135
|
* 模型配置界面不暴露 `input` 字段,用户通过界面配置的视觉模型默认是纯文本,
|
|
136
136
|
* 会导致 pi-ai adapter 拒绝图片输入。这里在启动时兜底:未声明 image 时自动补 `[text, image]`。
|
|
137
|
-
*
|
|
137
|
+
*
|
|
138
|
+
* 写入遵循与 setup/persist.ts 相同的约束(该文件是宿主用户级配置,多写者共存):
|
|
139
|
+
* - 文档保真:eemeli/yaml Document API 原地编辑,注释/锚点/其他配置原样保留;
|
|
140
|
+
* - 原子写:同目录临时文件 + rename,崩溃不留半份文件;
|
|
141
|
+
* - 乐观校验:写入窗口内文件被外部改动则放弃本次补写(幂等,下次启动再补);
|
|
142
|
+
* - fail-closed:解析失败仅 warn 不阻断启动(视觉功能可另行手动配置)。
|
|
143
|
+
* 幂等:已声明 image 则不写(不触 mtime,不引发宿主重载)。
|
|
138
144
|
*/
|
|
139
145
|
export function ensureVisionInputModal(vision, logger) {
|
|
140
146
|
if (!vision.enabled || !vision.provider || !vision.model)
|
|
@@ -144,28 +150,67 @@ export function ensureVisionInputModal(vision, logger) {
|
|
|
144
150
|
if (!existsSync(settingsPath))
|
|
145
151
|
return;
|
|
146
152
|
// YAML 禁止 tab 缩进(配置界面/编辑器可能写入),读入时把行首 tab 规范化为空格
|
|
147
|
-
const
|
|
148
|
-
const normalized =
|
|
149
|
-
|
|
150
|
-
|
|
153
|
+
const before = readFileSync(settingsPath, 'utf8');
|
|
154
|
+
const normalized = before.replace(/^\t+/gm, (tabs) => ' '.repeat(tabs.length));
|
|
155
|
+
// intAsBigInt:整数不经 double 中转,避免回写时把用户其他配置里的大整数
|
|
156
|
+
// (安装 id、时间戳等)截断到 2^53 精度
|
|
157
|
+
const doc = parseDocument(normalized, { intAsBigInt: true });
|
|
158
|
+
if (doc.errors.length > 0)
|
|
159
|
+
throw new Error(`settings.yaml 解析失败: ${doc.errors[0]?.message ?? 'unknown'}`);
|
|
160
|
+
const root = doc.contents;
|
|
161
|
+
if (!isMap(root))
|
|
162
|
+
throw new Error('settings.yaml 顶层不是映射');
|
|
163
|
+
// 逐层定位 llm-pi-ai.providers.{provider}.models(原地遍历,保留原文)
|
|
164
|
+
const piAi = root.get('llm-pi-ai', true);
|
|
165
|
+
if (!isMap(piAi)) {
|
|
166
|
+
logger.warn(`im-qqbot: settings.yaml 未找到 llm-pi-ai,请手动确认 vision 模型已声明 image 输入`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const providers = piAi.get('providers', true);
|
|
170
|
+
if (!isMap(providers)) {
|
|
171
|
+
logger.warn(`im-qqbot: settings.yaml 未找到 llm-pi-ai.providers.${vision.provider},请手动确认 vision 模型已声明 image 输入`);
|
|
151
172
|
return;
|
|
152
|
-
|
|
153
|
-
const provider =
|
|
154
|
-
|
|
155
|
-
|
|
173
|
+
}
|
|
174
|
+
const provider = providers.get(vision.provider, true);
|
|
175
|
+
if (!isMap(provider)) {
|
|
176
|
+
logger.warn(`im-qqbot: settings.yaml 未找到 llm-pi-ai.providers.${vision.provider},请手动确认 vision 模型已声明 image 输入`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const models = provider.get('models', true);
|
|
180
|
+
if (!isSeq(models)) {
|
|
156
181
|
logger.warn(`im-qqbot: settings.yaml 未找到 llm-pi-ai.providers.${vision.provider}.models,请手动确认 vision 模型已声明 image 输入`);
|
|
157
182
|
return;
|
|
158
183
|
}
|
|
159
|
-
const model = models.find((
|
|
160
|
-
if (model === undefined) {
|
|
184
|
+
const model = models.items.find((item) => isMap(item) && isScalar(item.get('id', true)) && String(item.get('id', true)) === vision.model);
|
|
185
|
+
if (model === undefined || !isMap(model)) {
|
|
161
186
|
logger.warn(`im-qqbot: settings.yaml 未找到 vision 模型 ${vision.model},请手动确认已声明 image 输入`);
|
|
162
187
|
return;
|
|
163
188
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
189
|
+
// 幂等:已声明 image 则不写(不触 mtime)
|
|
190
|
+
const input = model.get('input', true);
|
|
191
|
+
if (isSeq(input) && input.items.some((i) => isScalar(i) && i.value === 'image'))
|
|
192
|
+
return;
|
|
193
|
+
// 原地补写 input: [text, image],其余内容(注释/锚点/格式)原样保留
|
|
194
|
+
model.set('input', ['text', 'image']);
|
|
195
|
+
const next = doc.toString({ lineWidth: 0 });
|
|
196
|
+
// 乐观校验:写入窗口内被外部改动(宿主设置流程)则放弃,下次启动幂等重试
|
|
197
|
+
if (readFileSync(settingsPath, 'utf8') !== before) {
|
|
198
|
+
logger.warn('im-qqbot: settings.yaml 在写入窗口内被外部修改,跳过 vision input 补写(下次启动重试)');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// 原子写:同目录临时文件 + rename
|
|
202
|
+
const tmpPath = `${settingsPath}.imqqbot.tmp`;
|
|
203
|
+
try {
|
|
204
|
+
writeFileSync(tmpPath, next, 'utf8');
|
|
205
|
+
renameSync(tmpPath, settingsPath);
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
try {
|
|
209
|
+
unlinkSync(tmpPath);
|
|
210
|
+
}
|
|
211
|
+
catch { /* 临时文件可能不存在 */ }
|
|
212
|
+
throw err;
|
|
213
|
+
}
|
|
169
214
|
logger.info(`im-qqbot: 已为 vision 模型补充 input: [text, image] (${vision.provider}/${vision.model})`);
|
|
170
215
|
}
|
|
171
216
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vision-tool.js","sourceRoot":"","sources":["../../src/media/vision-tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vision-tool.js","sourceRoot":"","sources":["../../src/media/vision-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/model/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUzD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;gBAG/B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/model/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUzD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;gBAG/B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,EACrB,MAAM,CAAC,EAAE,MAAM;IAYjB;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI7D;;;;;;;;;OASG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAW1D;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAIxD;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIjD;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,cAAc,IAAI,UAAU;IAc5B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA+BzC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAgBzB,OAAO,CAAC,YAAY;IAoBpB,6DAA6D;IAC7D,OAAO,CAAC,UAAU;IASlB,6CAA6C;IAC7C,OAAO,CAAC,aAAa;CAatB"}
|
|
@@ -10,7 +10,7 @@ export class ModelResolver {
|
|
|
10
10
|
this.ctx = ctx;
|
|
11
11
|
this.config = config;
|
|
12
12
|
this.logger = logger;
|
|
13
|
-
this.prefs = new PrefsStore(config.debug ? (msg) => this.logger?.debug(msg) : undefined);
|
|
13
|
+
this.prefs = new PrefsStore(config.debug ? (msg) => this.logger?.debug(msg) : undefined, { onError: (msg) => this.logger?.warn(`im-qqbot: ${msg}`) });
|
|
14
14
|
this.settings = new SettingsReader();
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/model/model-resolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/model/model-resolver.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,MAAM,OAAO,aAAa;IACP,KAAK,CAAa;IAClB,QAAQ,CAAiB;IACzB,GAAG,CAAU;IACb,MAAM,CAAgB;IACtB,MAAM,CAAU;IAEjC,YACE,GAAY,EACZ,MAAqB,EACrB,MAAe;QAEf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,CAC5D,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;IACrE,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,UAAkB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9C,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB,EAAE,KAAiB;QAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAkB;QAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB,EAAE,SAAiB;QAChD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,UAAkB;QAC/B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAkB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAkB,EAAE,QAAgB;QAC5C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9C,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACtD,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YACtC,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzE,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACzE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,oBAAoB;oBACpB,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB,2BAA2B,UAAU,cAAc,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtG,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,OAAO,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,6CAA6C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChG,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO,SAAqB,CAAC;gBAC5D,OAAQ,SAAiD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,aAAa;IAEL,YAAY;QAClB,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAEhD,CAAC;YAEd,IAAI,iBAAiB,IAAI,OAAO,iBAAiB,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;gBAClF,MAAM,SAAS,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;gBACvD,IAAI,SAAS,EAAE,QAAQ,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC5C,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,uCAAuC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,6DAA6D;IACrD,UAAU,CAAC,IAAY;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAoD,CAAC;YACzE,OAAO,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,6CAA6C;IACrC,aAAa;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAA+B,CAAC;YACjE,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC3F,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACrF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ModelRoute } from './types.ts';
|
|
2
2
|
/** 日志回调(可选) */
|
|
3
3
|
type DebugFn = (msg: string) => void;
|
|
4
|
+
/** 持久化异常回调(可选,应接 warn 级日志——映射丢失影响会话连续性,需可见) */
|
|
5
|
+
type ErrorFn = (msg: string) => void;
|
|
4
6
|
export declare class PrefsStore {
|
|
5
7
|
/** per-peer 模型偏好(内存态) */
|
|
6
8
|
private overrides;
|
|
@@ -8,10 +10,16 @@ export declare class PrefsStore {
|
|
|
8
10
|
private sessionIds;
|
|
9
11
|
/** per-peer preset 偏好(内存态) */
|
|
10
12
|
private presets;
|
|
13
|
+
/** 本进程显式删除的 key(防止并发合并把删除复活) */
|
|
14
|
+
private deleted;
|
|
11
15
|
/** 隔离偏好文件路径 */
|
|
12
16
|
private readonly prefsPath;
|
|
13
17
|
private readonly debugLog?;
|
|
14
|
-
|
|
18
|
+
private readonly onError?;
|
|
19
|
+
constructor(debugLog?: DebugFn, options?: {
|
|
20
|
+
path?: string;
|
|
21
|
+
onError?: ErrorFn;
|
|
22
|
+
});
|
|
15
23
|
getOverride(sessionKey: string): ModelRoute | undefined;
|
|
16
24
|
setOverride(sessionKey: string, route: ModelRoute): void;
|
|
17
25
|
clearOverride(sessionKey: string): boolean;
|
|
@@ -23,6 +31,19 @@ export declare class PrefsStore {
|
|
|
23
31
|
setPreset(sessionKey: string, presetId: string): void;
|
|
24
32
|
clearPreset(sessionKey: string): boolean;
|
|
25
33
|
private load;
|
|
34
|
+
/**
|
|
35
|
+
* 读取磁盘当前状态用于合并。
|
|
36
|
+
*
|
|
37
|
+
* 不存在 → null(首次写);损坏(半截 JSON 等)→ 先备份原文件再返回 null:
|
|
38
|
+
* 损坏文件通常只是尾部截断,前面的映射条目往往完好,直接覆盖会把它们一并
|
|
39
|
+
* 丢掉(用户表现为「QQ 里丢上下文」且无从恢复)。备份保留一份人工可救的证据。
|
|
40
|
+
*/
|
|
41
|
+
private readDiskState;
|
|
42
|
+
/** 损坏文件只备份一次(避免每次写入都产生新备份),失败不阻断写入 */
|
|
43
|
+
private corruptedBackedUp;
|
|
44
|
+
private backupCorrupted;
|
|
45
|
+
/** 合并内存与磁盘(内存覆盖同 key,磁盘独有的其他写者条目保留,墓碑 key 除外) */
|
|
46
|
+
private mergeDisk;
|
|
26
47
|
private write;
|
|
27
48
|
}
|
|
28
49
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefs-store.d.ts","sourceRoot":"","sources":["../../src/model/prefs-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prefs-store.d.ts","sourceRoot":"","sources":["../../src/model/prefs-store.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAe;AACf,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AACrC,+CAA+C;AAC/C,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAkBrC,qBAAa,UAAU;IACrB,yBAAyB;IACzB,OAAO,CAAC,SAAS,CAAiC;IAClD,0CAA0C;IAC1C,OAAO,CAAC,UAAU,CAA6B;IAC/C,8BAA8B;IAC9B,OAAO,CAAC,OAAO,CAA6B;IAC5C,gCAAgC;IAChC,OAAO,CAAC,OAAO,CAAmF;IAClG,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAU;gBAEvB,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAS9E,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvD,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAMxD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAS1C,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAMxC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAMzD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAW3C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIjD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMrD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAWxC,OAAO,CAAC,IAAI;IAmCZ;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAkBrB,sCAAsC;IACtC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe;IAYvB,iDAAiD;IACjD,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,KAAK;CAqBd"}
|
package/lib/model/prefs-store.js
CHANGED
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
* PrefsStore — per-peer 会话偏好持久化(模型 + preset)
|
|
3
3
|
*
|
|
4
4
|
* 隔离文件 I/O 操作,便于单元测试时 mock。
|
|
5
|
-
* 存储路径:~/.dsh-qqbot/model-prefs.json
|
|
5
|
+
* 存储路径:~/.dsh-qqbot/model-prefs.json(全局共享,多实例/多进程共存)。
|
|
6
|
+
*
|
|
7
|
+
* 并发安全(该文件存在多个写者——同进程多 bot 实例、跨进程多 profile):
|
|
8
|
+
* - 原子写:同目录临时文件 + rename,崩溃不留半份文件;
|
|
9
|
+
* - 写前合并:重读磁盘,保留其他写者的条目,内存覆盖同 key(本进程视角权威);
|
|
10
|
+
* - 删除墓碑:本进程显式删除的 key 在合并时压住磁盘旧值,防止「删除被并发写复活」。
|
|
6
11
|
*/
|
|
7
|
-
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
12
|
+
import { readFileSync, writeFileSync, renameSync, unlinkSync, existsSync, mkdirSync } from 'node:fs';
|
|
13
|
+
import { randomBytes } from 'node:crypto';
|
|
8
14
|
import { resolve, dirname } from 'node:path';
|
|
9
15
|
import { PLUGIN_HOME } from "../shared/dirs.js";
|
|
10
16
|
export class PrefsStore {
|
|
@@ -14,12 +20,16 @@ export class PrefsStore {
|
|
|
14
20
|
sessionIds = new Map();
|
|
15
21
|
/** per-peer preset 偏好(内存态) */
|
|
16
22
|
presets = new Map();
|
|
23
|
+
/** 本进程显式删除的 key(防止并发合并把删除复活) */
|
|
24
|
+
deleted = { overrides: new Set(), sessionIds: new Set(), presets: new Set() };
|
|
17
25
|
/** 隔离偏好文件路径 */
|
|
18
26
|
prefsPath;
|
|
19
27
|
debugLog;
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
onError;
|
|
29
|
+
constructor(debugLog, options) {
|
|
30
|
+
this.prefsPath = options?.path ?? resolve(PLUGIN_HOME, 'model-prefs.json');
|
|
22
31
|
this.debugLog = debugLog;
|
|
32
|
+
this.onError = options?.onError;
|
|
23
33
|
this.load();
|
|
24
34
|
}
|
|
25
35
|
// ── Override 操作 ──
|
|
@@ -28,12 +38,15 @@ export class PrefsStore {
|
|
|
28
38
|
}
|
|
29
39
|
setOverride(sessionKey, route) {
|
|
30
40
|
this.overrides.set(sessionKey, route);
|
|
41
|
+
this.deleted.overrides.delete(sessionKey);
|
|
31
42
|
this.write();
|
|
32
43
|
}
|
|
33
44
|
clearOverride(sessionKey) {
|
|
34
45
|
const deleted = this.overrides.delete(sessionKey);
|
|
35
|
-
if (deleted)
|
|
46
|
+
if (deleted) {
|
|
47
|
+
this.deleted.overrides.add(sessionKey);
|
|
36
48
|
this.write();
|
|
49
|
+
}
|
|
37
50
|
return deleted;
|
|
38
51
|
}
|
|
39
52
|
hasOverride(sessionKey) {
|
|
@@ -45,12 +58,15 @@ export class PrefsStore {
|
|
|
45
58
|
}
|
|
46
59
|
setSessionId(sessionKey, sessionId) {
|
|
47
60
|
this.sessionIds.set(sessionKey, sessionId);
|
|
61
|
+
this.deleted.sessionIds.delete(sessionKey);
|
|
48
62
|
this.write();
|
|
49
63
|
}
|
|
50
64
|
clearSessionId(sessionKey) {
|
|
51
65
|
const deleted = this.sessionIds.delete(sessionKey);
|
|
52
|
-
if (deleted)
|
|
66
|
+
if (deleted) {
|
|
67
|
+
this.deleted.sessionIds.add(sessionKey);
|
|
53
68
|
this.write();
|
|
69
|
+
}
|
|
54
70
|
return deleted;
|
|
55
71
|
}
|
|
56
72
|
// ── Preset 操作 ──
|
|
@@ -59,12 +75,15 @@ export class PrefsStore {
|
|
|
59
75
|
}
|
|
60
76
|
setPreset(sessionKey, presetId) {
|
|
61
77
|
this.presets.set(sessionKey, presetId);
|
|
78
|
+
this.deleted.presets.delete(sessionKey);
|
|
62
79
|
this.write();
|
|
63
80
|
}
|
|
64
81
|
clearPreset(sessionKey) {
|
|
65
82
|
const deleted = this.presets.delete(sessionKey);
|
|
66
|
-
if (deleted)
|
|
83
|
+
if (deleted) {
|
|
84
|
+
this.deleted.presets.add(sessionKey);
|
|
67
85
|
this.write();
|
|
86
|
+
}
|
|
68
87
|
return deleted;
|
|
69
88
|
}
|
|
70
89
|
// ── 私有方法 ──
|
|
@@ -97,21 +116,99 @@ export class PrefsStore {
|
|
|
97
116
|
}
|
|
98
117
|
}
|
|
99
118
|
catch (err) {
|
|
100
|
-
|
|
119
|
+
const msg = `loadPrefs failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
120
|
+
// 解析失败(半截 JSON 等)意味着 sessionKey→sessionId 映射丢失,
|
|
121
|
+
// 会话将回退固定 id——影响连续性,必须可见而非仅 debug
|
|
122
|
+
this.onError?.(msg);
|
|
123
|
+
this.debugLog?.(msg);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 读取磁盘当前状态用于合并。
|
|
128
|
+
*
|
|
129
|
+
* 不存在 → null(首次写);损坏(半截 JSON 等)→ 先备份原文件再返回 null:
|
|
130
|
+
* 损坏文件通常只是尾部截断,前面的映射条目往往完好,直接覆盖会把它们一并
|
|
131
|
+
* 丢掉(用户表现为「QQ 里丢上下文」且无从恢复)。备份保留一份人工可救的证据。
|
|
132
|
+
*/
|
|
133
|
+
readDiskState() {
|
|
134
|
+
if (!existsSync(this.prefsPath))
|
|
135
|
+
return null;
|
|
136
|
+
let raw;
|
|
137
|
+
try {
|
|
138
|
+
raw = readFileSync(this.prefsPath, 'utf8');
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null; // 读不到(权限/并发删除):按首次写处理,不备份
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const data = JSON.parse(raw);
|
|
145
|
+
if (typeof data !== 'object' || data === null)
|
|
146
|
+
throw new Error('not an object');
|
|
147
|
+
return data;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
this.backupCorrupted(raw);
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** 损坏文件只备份一次(避免每次写入都产生新备份),失败不阻断写入 */
|
|
155
|
+
corruptedBackedUp = false;
|
|
156
|
+
backupCorrupted(raw) {
|
|
157
|
+
if (this.corruptedBackedUp)
|
|
158
|
+
return;
|
|
159
|
+
this.corruptedBackedUp = true;
|
|
160
|
+
const backupPath = `${this.prefsPath}.corrupted.${Date.now()}`;
|
|
161
|
+
try {
|
|
162
|
+
writeFileSync(backupPath, raw, 'utf8');
|
|
163
|
+
this.onError?.(`model-prefs.json 损坏,已备份原文件到 ${backupPath}(会话映射可能丢失,可从备份人工恢复)`);
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
this.onError?.(`model-prefs.json 损坏且备份失败: ${err instanceof Error ? err.message : String(err)}`);
|
|
101
167
|
}
|
|
102
168
|
}
|
|
169
|
+
/** 合并内存与磁盘(内存覆盖同 key,磁盘独有的其他写者条目保留,墓碑 key 除外) */
|
|
170
|
+
mergeDisk(disk) {
|
|
171
|
+
const pick = (mem, diskMap, tomb) => {
|
|
172
|
+
const out = Object.fromEntries(mem.entries());
|
|
173
|
+
if (diskMap && typeof diskMap === 'object') {
|
|
174
|
+
for (const [key, value] of Object.entries(diskMap)) {
|
|
175
|
+
if (key in out || tomb.has(key))
|
|
176
|
+
continue;
|
|
177
|
+
out[key] = value;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
};
|
|
182
|
+
return {
|
|
183
|
+
overrides: pick(this.overrides, disk?.overrides, this.deleted.overrides),
|
|
184
|
+
sessionIds: pick(this.sessionIds, disk?.sessionIds, this.deleted.sessionIds),
|
|
185
|
+
presets: pick(this.presets, disk?.presets, this.deleted.presets),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
103
188
|
write() {
|
|
104
189
|
try {
|
|
105
190
|
mkdirSync(dirname(this.prefsPath), { recursive: true });
|
|
106
|
-
const data =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
191
|
+
const data = this.mergeDisk(this.readDiskState());
|
|
192
|
+
// 原子写:同目录临时文件 + rename(同分区保证原子,崩溃不留半份文件)。
|
|
193
|
+
// tmp 名带进程+随机后缀:跨进程并发写时各自的临时文件互不覆盖,
|
|
194
|
+
// rename 只会带走自己写的那份(固定名会让 A 的 rename 落盘 B 的内容)
|
|
195
|
+
const tmpPath = `${this.prefsPath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
|
|
196
|
+
try {
|
|
197
|
+
writeFileSync(tmpPath, JSON.stringify(data, null, 2), 'utf8');
|
|
198
|
+
renameSync(tmpPath, this.prefsPath);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
try {
|
|
202
|
+
unlinkSync(tmpPath);
|
|
203
|
+
}
|
|
204
|
+
catch { /* 临时文件可能不存在 */ }
|
|
205
|
+
throw err;
|
|
206
|
+
}
|
|
112
207
|
}
|
|
113
208
|
catch (err) {
|
|
114
|
-
|
|
209
|
+
const msg = `writePrefs failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
210
|
+
this.onError?.(msg);
|
|
211
|
+
this.debugLog?.(msg);
|
|
115
212
|
}
|
|
116
213
|
}
|
|
117
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefs-store.js","sourceRoot":"","sources":["../../src/model/prefs-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prefs-store.js","sourceRoot":"","sources":["../../src/model/prefs-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,14 @@ import type { DshAgent, DshAgentRegistry, PresetEntry, PresetSwitchOutcome, Sess
|
|
|
9
9
|
export declare function latestCompletedPrefixBoundary(events: readonly unknown[]): number | undefined;
|
|
10
10
|
export declare class SessionManager {
|
|
11
11
|
private sessions;
|
|
12
|
+
/**
|
|
13
|
+
* 同 key 正在进行的 getOrCreate(singleflight)。
|
|
14
|
+
*
|
|
15
|
+
* 斜杠命令与待答问题截获位于 concurrencyGuard 之前(见 gateway/middleware-setup),
|
|
16
|
+
* 与普通消息不串行:同 key 并发进入会各自 resume/create,产出两个 agent,
|
|
17
|
+
* 后写入 sessions 的覆盖前者且前者无人 dispose(泄漏)。
|
|
18
|
+
*/
|
|
19
|
+
private inflight;
|
|
12
20
|
private readonly evictor;
|
|
13
21
|
private readonly modelResolver;
|
|
14
22
|
private readonly ctx;
|
|
@@ -85,8 +93,29 @@ export declare class SessionManager {
|
|
|
85
93
|
/** 候选命中后落盘,后续永远走 prefs */
|
|
86
94
|
private persistSessionId;
|
|
87
95
|
private composePreset;
|
|
88
|
-
/** 获取或恢复或创建会话(get → resume → create
|
|
96
|
+
/** 获取或恢复或创建会话(get → resume → create);同 key 并发合并为一次 */
|
|
89
97
|
getOrCreate(scope: ChatScope, peerId: string, senderId: string, replyTarget: ReplyTarget): Promise<SessionRecord>;
|
|
98
|
+
/** getOrCreate 的实际打开流程(已通过 singleflight 保证同 key 串行) */
|
|
99
|
+
private openSession;
|
|
100
|
+
/**
|
|
101
|
+
* resume 失败后是否允许首次创建。
|
|
102
|
+
*
|
|
103
|
+
* 只有确认会话不存在才可创建:损坏/占用/后端故障沿用同一 id 重建,会把同一
|
|
104
|
+
* sessionId 写进多个 project 目录,宿主 `list()` 随后报 duplicate,会话列表
|
|
105
|
+
* 整体打不开(对齐宿主 `restoreOrCreateConfigured` 的 fail-loud 语义)。
|
|
106
|
+
*
|
|
107
|
+
* @returns 允许创建返回 true;拒绝时已记录 warn,调用方应抛出原 resume 错误。
|
|
108
|
+
*/
|
|
109
|
+
private mayCreateAfterResumeFailure;
|
|
110
|
+
/**
|
|
111
|
+
* 确认候选会话缺失后决定用哪个 id 新建。
|
|
112
|
+
*
|
|
113
|
+
* - resume 等待期间 prefs 被并发改写(`/new` 换新会话):采用 prefs 的最新 id,
|
|
114
|
+
* 否则内存与 prefs 指向不同会话,重启后用户被切走;
|
|
115
|
+
* - 候选来自 0.5.x 确定性派生:一律铸造新 id,确定性 id 不进入新建路径;
|
|
116
|
+
* - 候选来自 prefs 且确认缺失:沿用该 id 新建,prefs 无需改写。
|
|
117
|
+
*/
|
|
118
|
+
private resolveCreateId;
|
|
90
119
|
findBySessionId(sessionId: string): SessionRecord | undefined;
|
|
91
120
|
findByAgent(agent: DshAgent): SessionRecord | undefined;
|
|
92
121
|
remove(scope: ChatScope, peerId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* - c2c: peerId = senderId (用户 openid)
|
|
6
6
|
* - group: peerId = groupOpenid
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* sessionKey → sessionId 的映射存于 prefs(`model-prefs.json`),新会话 id 由
|
|
9
|
+
* `mintSessionId()` 铸造(`session-` + UUID,与宿主一致)。0.5.x 的 SHA-256 确定性
|
|
10
|
+
* 派生 id 仅用于探测存量会话并迁移,不再用于新建——确定性 id 跨进程必然相同,
|
|
11
|
+
* 两个进程各自新建会把同一 id 写入不同 project 目录。
|
|
11
12
|
*
|
|
12
13
|
* 支持 agent-presets 系统:通过 setup hook 在 create/resume 时
|
|
13
14
|
* 挂载 preset(工具集、prompt sections 等),实现场景化配置。
|
|
@@ -53,6 +54,14 @@ export function latestCompletedPrefixBoundary(events) {
|
|
|
53
54
|
}
|
|
54
55
|
export class SessionManager {
|
|
55
56
|
sessions = new Map();
|
|
57
|
+
/**
|
|
58
|
+
* 同 key 正在进行的 getOrCreate(singleflight)。
|
|
59
|
+
*
|
|
60
|
+
* 斜杠命令与待答问题截获位于 concurrencyGuard 之前(见 gateway/middleware-setup),
|
|
61
|
+
* 与普通消息不串行:同 key 并发进入会各自 resume/create,产出两个 agent,
|
|
62
|
+
* 后写入 sessions 的覆盖前者且前者无人 dispose(泄漏)。
|
|
63
|
+
*/
|
|
64
|
+
inflight = new Map();
|
|
56
65
|
evictor;
|
|
57
66
|
modelResolver;
|
|
58
67
|
ctx;
|
|
@@ -124,22 +133,7 @@ export class SessionManager {
|
|
|
124
133
|
* 读不到(服务缺失 / session 不存在 / 未记录 agentPreset)返回 undefined。
|
|
125
134
|
*/
|
|
126
135
|
async resolvePersistedPreset(sessionId) {
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
persistence = this.ctx.get('sessionPersistence');
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
return undefined;
|
|
133
|
-
}
|
|
134
|
-
if (!persistence)
|
|
135
|
-
return undefined;
|
|
136
|
-
try {
|
|
137
|
-
const { meta } = await persistence.load(sessionId);
|
|
138
|
-
return meta?.agentPreset;
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return undefined;
|
|
142
|
-
}
|
|
136
|
+
return (await this.host.sessionHeader(sessionId))?.meta?.agentPreset;
|
|
143
137
|
}
|
|
144
138
|
// ── 模型相关(委托给 ModelResolver) ──
|
|
145
139
|
getEffectiveModel(scope, peerId) {
|
|
@@ -391,7 +385,7 @@ export class SessionManager {
|
|
|
391
385
|
return {};
|
|
392
386
|
}
|
|
393
387
|
}
|
|
394
|
-
/** 获取或恢复或创建会话(get → resume → create
|
|
388
|
+
/** 获取或恢复或创建会话(get → resume → create);同 key 并发合并为一次 */
|
|
395
389
|
async getOrCreate(scope, peerId, senderId, replyTarget) {
|
|
396
390
|
const key = this.sessionKey(scope, peerId);
|
|
397
391
|
const existing = this.sessions.get(key);
|
|
@@ -400,7 +394,28 @@ export class SessionManager {
|
|
|
400
394
|
existing.lastActivity = Date.now();
|
|
401
395
|
return existing;
|
|
402
396
|
}
|
|
397
|
+
// singleflight:同 key 并发复用同一次 resume/create,后到者只更新回复目标
|
|
398
|
+
const pending = this.inflight.get(key);
|
|
399
|
+
if (pending) {
|
|
400
|
+
const shared = await pending;
|
|
401
|
+
shared.replyTarget = replyTarget;
|
|
402
|
+
shared.lastActivity = Date.now();
|
|
403
|
+
return shared;
|
|
404
|
+
}
|
|
405
|
+
const task = this.openSession(key, scope, peerId, senderId, replyTarget);
|
|
406
|
+
this.inflight.set(key, task);
|
|
407
|
+
try {
|
|
408
|
+
return await task;
|
|
409
|
+
}
|
|
410
|
+
finally {
|
|
411
|
+
this.inflight.delete(key);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/** getOrCreate 的实际打开流程(已通过 singleflight 保证同 key 串行) */
|
|
415
|
+
async openSession(key, scope, peerId, senderId, replyTarget) {
|
|
403
416
|
const route = this.modelResolver.getEffectiveRoute(key);
|
|
417
|
+
// prefs 命中 = 已知存量会话;miss 时取 0.5.x 派生 id 仅作存量探测候选,不用于新建
|
|
418
|
+
const candidateIsLegacy = this.modelResolver.getSessionId(key) === undefined;
|
|
404
419
|
let sessionId = SessionId(this.currentSessionId(key));
|
|
405
420
|
this.logger.info(`getOrCreate: key=${key} route=${route ? `${route.provider}/${route.model}` : 'host-default'} sessionId=${sessionId}`);
|
|
406
421
|
let agent;
|
|
@@ -431,13 +446,10 @@ export class SessionManager {
|
|
|
431
446
|
this.persistSessionId(key, sessionId);
|
|
432
447
|
this.logger.info(`resumed session: key=${key} preset=${agentPreset ?? 'none'} route=${resumeRoute ? `${resumeRoute.provider}/${resumeRoute.model}` : 'session-own'}`);
|
|
433
448
|
}
|
|
434
|
-
catch {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
this.modelResolver.setSessionId(key, sessionId);
|
|
439
|
-
this.logger.info(`migrated to minted session id: key=${key} sessionId=${sessionId}`);
|
|
440
|
-
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
if (!(await this.mayCreateAfterResumeFailure(key, sessionId, err)))
|
|
451
|
+
throw err;
|
|
452
|
+
sessionId = this.resolveCreateId(key, sessionId, candidateIsLegacy);
|
|
441
453
|
const created = await this.agents.create({
|
|
442
454
|
sessionId,
|
|
443
455
|
meta: {
|
|
@@ -449,7 +461,8 @@ export class SessionManager {
|
|
|
449
461
|
});
|
|
450
462
|
agent = created.agent;
|
|
451
463
|
handle = created;
|
|
452
|
-
this.
|
|
464
|
+
this.persistSessionId(key, sessionId);
|
|
465
|
+
this.logger.info(`created new session: key=${key} sessionId=${sessionId} preset=${agentPreset ?? 'none'}`);
|
|
453
466
|
}
|
|
454
467
|
}
|
|
455
468
|
const record = {
|
|
@@ -467,6 +480,57 @@ export class SessionManager {
|
|
|
467
480
|
this.sessions.set(key, record);
|
|
468
481
|
return record;
|
|
469
482
|
}
|
|
483
|
+
/**
|
|
484
|
+
* resume 失败后是否允许首次创建。
|
|
485
|
+
*
|
|
486
|
+
* 只有确认会话不存在才可创建:损坏/占用/后端故障沿用同一 id 重建,会把同一
|
|
487
|
+
* sessionId 写进多个 project 目录,宿主 `list()` 随后报 duplicate,会话列表
|
|
488
|
+
* 整体打不开(对齐宿主 `restoreOrCreateConfigured` 的 fail-loud 语义)。
|
|
489
|
+
*
|
|
490
|
+
* @returns 允许创建返回 true;拒绝时已记录 warn,调用方应抛出原 resume 错误。
|
|
491
|
+
*/
|
|
492
|
+
async mayCreateAfterResumeFailure(key, sessionId, resumeError) {
|
|
493
|
+
const context = `key=${key} sessionId=${sessionId} resumeErr=${errorText(resumeError)}`;
|
|
494
|
+
let exists;
|
|
495
|
+
try {
|
|
496
|
+
exists = await this.host.sessionExists(sessionId);
|
|
497
|
+
}
|
|
498
|
+
catch (probeError) {
|
|
499
|
+
// 求证本身失败(后端故障):无法断言不存在,按存在处理
|
|
500
|
+
this.logger.warn(`refusing to recreate session, existence unknown: ${context} probeErr=${errorText(probeError)}`);
|
|
501
|
+
return false;
|
|
502
|
+
}
|
|
503
|
+
if (exists === true) {
|
|
504
|
+
this.logger.warn(`refusing to recreate existing session: ${context}`);
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
if (exists === undefined) {
|
|
508
|
+
// 旧宿主无 persistence 服务,没有求证手段:仅按 resume 结果创建
|
|
509
|
+
this.logger.warn(`creating session without existence check (host lacks sessionPersistence): ${context}`);
|
|
510
|
+
}
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* 确认候选会话缺失后决定用哪个 id 新建。
|
|
515
|
+
*
|
|
516
|
+
* - resume 等待期间 prefs 被并发改写(`/new` 换新会话):采用 prefs 的最新 id,
|
|
517
|
+
* 否则内存与 prefs 指向不同会话,重启后用户被切走;
|
|
518
|
+
* - 候选来自 0.5.x 确定性派生:一律铸造新 id,确定性 id 不进入新建路径;
|
|
519
|
+
* - 候选来自 prefs 且确认缺失:沿用该 id 新建,prefs 无需改写。
|
|
520
|
+
*/
|
|
521
|
+
resolveCreateId(key, candidate, candidateIsLegacy) {
|
|
522
|
+
const latest = this.modelResolver.getSessionId(key);
|
|
523
|
+
if (latest !== undefined && latest !== candidate) {
|
|
524
|
+
this.logger.info(`adopting concurrently written session id: key=${key} sessionId=${latest}`);
|
|
525
|
+
return SessionId(latest);
|
|
526
|
+
}
|
|
527
|
+
if (candidateIsLegacy) {
|
|
528
|
+
const minted = SessionId(mintSessionId());
|
|
529
|
+
this.logger.info(`migrated to minted session id: key=${key} sessionId=${minted}`);
|
|
530
|
+
return minted;
|
|
531
|
+
}
|
|
532
|
+
return candidate;
|
|
533
|
+
}
|
|
470
534
|
findBySessionId(sessionId) {
|
|
471
535
|
for (const record of this.sessions.values()) {
|
|
472
536
|
if (record.sessionId === sessionId)
|
|
@@ -565,6 +629,10 @@ export class SessionManager {
|
|
|
565
629
|
return this.sessions.size;
|
|
566
630
|
}
|
|
567
631
|
}
|
|
632
|
+
/** 错误文案(日志用) */
|
|
633
|
+
function errorText(err) {
|
|
634
|
+
return err instanceof Error ? err.message : String(err);
|
|
635
|
+
}
|
|
568
636
|
/** 从消息对象中提取纯文本(用于导出/统计) */
|
|
569
637
|
function extractMessageText(message) {
|
|
570
638
|
const blocks = message?.content;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cxyhhhhh/dsh-qqbot",
|
|
3
|
-
"version": "0.5.4-dev.
|
|
3
|
+
"version": "0.5.4-dev.202610302146",
|
|
4
4
|
"icon": "./assets/icons/qq_logo.svg",
|
|
5
5
|
"description": "在 QQ 私聊和群聊里直接对话 DeepSeek Harness。 Chat with DeepSeek Harness in QQ private and group chats.",
|
|
6
6
|
"type": "module",
|