@chaoset/session-archive 0.3.11 → 0.3.13
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 +62 -0
- package/README.md +22 -13
- package/client/client.cjs +37 -11
- package/client/index.tsx +43 -15
- package/lib/index.d.ts +18 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +308 -136
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.13 (2026-09-14)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
* 面板性能:`list`/`count`/`delete`/`unarchive` 四端点不再全量枚举实例上
|
|
8
|
+
的所有持久化会话,改走官方契约的逐 id `stat(id)`(只读目标会话的元数据
|
|
9
|
+
头,宿主缺 `stat` 时回退全量 `list`)。`count` 是每 5 秒每标签页的徽标
|
|
10
|
+
轮询端点,实例积累数千历史会话时此前等于持续全树扫
|
|
11
|
+
* 标题与详情读取分块化(`read(offset, length)` 官方契约,块长 200 事件):
|
|
12
|
+
此前 `read(0)` 一次性物化整条事件流,大日志下峰值内存 O(整条日志) 且同步
|
|
13
|
+
JSON.parse 集中在宿主事件循环上;分块后峰值 O(块),语义不变(标题仍取
|
|
14
|
+
最后一个 `session/title` 事件,经官方 `foldSessionTitle` 折叠)
|
|
15
|
+
* 恢复(unarchive)补齐与删除对称的 `failed` 语义:ghost(文件已删/枚举
|
|
16
|
+
不到)、非归档成员、confirm 复核淘汰(`not-restorable`)的 id 不再静默
|
|
17
|
+
丢弃——客户端此前把「已恢复 0 个」当成功样式展示,选 5 个只恢复 3 个
|
|
18
|
+
也没有任何失败说明
|
|
19
|
+
* 删除的 absent 快速路径纳入 exclusive 临界区:宿主「写临时文件 + rename」
|
|
20
|
+
格式迁移的瞬间目录扫描可能扫空,此前直接报幂等删除成功而文件实际可能
|
|
21
|
+
随迁移回来;现在锁内重扫,发现文件在则转常规删除流
|
|
22
|
+
* 删除复验的第二次 rm 失败不再吞异常误标为 `reappeared`(EPERM/EBUSY 的
|
|
23
|
+
真实原因现在原样上报);`settleStat`/复验只把 ENOENT 视为「文件已消失」,
|
|
24
|
+
EACCES 等错误按仍在处理并以真实错误计入 failed,不再谎报 deleted
|
|
25
|
+
* `detail` 的 `totalMessageCount` 计数口径在截断线两侧统一:空文本消息
|
|
26
|
+
(纯工具调用)此前在截断线前不计、超线后计入
|
|
27
|
+
* 客户端失败原因本地化:`unenumerable`/`unlocatable`/`reappeared`/
|
|
28
|
+
`not-archived`/`not-restorable` 此前以英文原样上屏;部分成功时同时如实
|
|
29
|
+
显示成功计数(warn 样式),整单失败才用 error 样式;busy 提示从「请先
|
|
30
|
+
停止会话」(归档会话无流可停)改为「仍在生成落盘,请稍后重试」
|
|
31
|
+
* README 三处与实现对齐:列表不再声称恒为 false 的「运行状态」;`busy`
|
|
32
|
+
语义更新为「内存存在且沉降观察窗内体积仍在增长」;限制一节补充首行损坏
|
|
33
|
+
孤儿日志面板不可见也不可删的说明
|
|
34
|
+
|
|
35
|
+
### Tests
|
|
36
|
+
|
|
37
|
+
* 新增 3 用例(分块读取跨块完整性、unarchive failed 覆盖全部未恢复 id、
|
|
38
|
+
count/list 走逐 id stat 不打全量 list);夹具 `read` 按官方契约支持
|
|
39
|
+
`offset/length`、补 `stat`
|
|
40
|
+
* build + typecheck + 全量测试通过,并在隔离测试实例真实验证
|
|
41
|
+
|
|
42
|
+
## 0.3.12 (2026-09-12)
|
|
43
|
+
|
|
44
|
+
### Fixes
|
|
45
|
+
|
|
46
|
+
* 修复删除谎报成功的又一同源变体:`fileInfo` 外层兜底把 locate 抛错(后端
|
|
47
|
+
异常/契约漂移)误判为「文件不存在」(absent),删除路径随后把它记成幂等
|
|
48
|
+
删除成功——文件实际可能还在。现按语义表返回 `unknown`,对应删除路径的
|
|
49
|
+
`unlocatable` 拒绝;恢复路径同样谨慎拒绝
|
|
50
|
+
* 收窄删除与恢复的并发竞态:`deleteArchived` 与 `unarchive` 的「检查 → 生效」
|
|
51
|
+
窗口经插件闭包内的 promise 链互斥。registry 写锁只串行化归档集合写入而
|
|
52
|
+
挡不住删除,此前并发时可能出现「文件被删、归档标记也被移出」——内存会话
|
|
53
|
+
重回侧边栏,等同误恢复;反向则可能删掉刚恢复的会话文件。删除临界区内
|
|
54
|
+
同时复验归档成员资格
|
|
55
|
+
* `detail` 对畸形 assistant 事件(缺 `data.message`)容错:一条损坏/异构
|
|
56
|
+
日志不再让整个详情请求 TypeError
|
|
57
|
+
* 标题缓存加 500 条 FIFO 上限(已删会话的条目不再被 mtime 命中更新,长驻
|
|
58
|
+
宿主进程下无界累积);并发限制器宽度下限 1,直调传入 0/负数不再静默
|
|
59
|
+
返回全 undefined 的列表
|
|
60
|
+
* 测试夹具的 `archivedSessionIds` 改为 getter(官方契约形态):静态属性会在
|
|
61
|
+
`setState` 后与内部 state 脱钩,host 侧集合快照永远读到旧值
|
|
62
|
+
* 新增 3 用例(locate 抛错拒绝删除、删除↔恢复互斥两变体、畸形事件容错);
|
|
63
|
+
build + typecheck + 全量测试通过,并在隔离测试实例真实验证
|
|
64
|
+
|
|
3
65
|
## 0.3.11 (2026-09-12)
|
|
4
66
|
|
|
5
67
|
### Fixes
|
package/README.md
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
补上 DSH 缺失的「归档后半程」:web 侧边栏底部新增**归档**面板。
|
|
4
4
|
|
|
5
|
-
-
|
|
5
|
+
- **查看归档**:列出全部归档会话(标题、目录、时间、体积);点击
|
|
6
6
|
会话可展开**只读浏览**其聊天内容(用户/助手文本消息)。
|
|
7
|
-
-
|
|
7
|
+
- **批量恢复**:勾选多个会话一键移回会话树,恢复其在原工作区的位置;无法
|
|
8
|
+
恢复的会话(文件已删等)逐条给出原因。
|
|
8
9
|
- **彻底删除**:删除勾选会话的持久化文件与会话目录;两段式确认(第一次点击
|
|
9
|
-
进入确认态,4
|
|
10
|
-
|
|
10
|
+
进入确认态,4 秒内再次点击执行)避免误删。正在生成落盘的会话(沉降观察窗
|
|
11
|
+
内体积仍在增长)拒绝删除;若宿主允许归档运行中会话,插件同样拒绝。
|
|
11
12
|
- 工具条提供全选与已选计数;侧边栏徽标实时显示归档数量(订阅宿主归档集合,
|
|
12
13
|
轻量轮询兜底)。
|
|
13
14
|
|
|
@@ -27,12 +28,13 @@ dsh plugin --profile web remove @chaoset/session-archive
|
|
|
27
28
|
|
|
28
29
|
## 工作原理
|
|
29
30
|
|
|
30
|
-
- **列表**:宿主归档集合 ∩
|
|
31
|
-
`session/title`
|
|
31
|
+
- **列表**:宿主归档集合 ∩ 逐 id 持久化快照(官方 `stat(id)`,不枚举实例上
|
|
32
|
+
的全部历史会话);标题折叠自会话事件流的最后一个 `session/title` 事件
|
|
33
|
+
(事件流分块读取,峰值内存有界),体积来自文件 stat。
|
|
32
34
|
- **查看**:只读解析会话事件流,提取用户/助手文本消息;超过 `detailMaxMessages`
|
|
33
35
|
条时截断并如实标注。
|
|
34
36
|
- **恢复**:仅从归档集合移除仍存在持久化文件的会话 id,会话数据不动;文件已删
|
|
35
|
-
|
|
37
|
+
的会话拒绝恢复,并在 `failed` 里逐条给出原因。
|
|
36
38
|
- **删除**:live 会话拒绝;每个会话删除持久化文件与会话目录。删除后**保留**
|
|
37
39
|
该会话在归档集合中的占位 id——否则仍挂在内存中的会话会因「不再归档」立刻
|
|
38
40
|
重新出现在侧边栏(效果等同恢复);列表按文件存在性过滤,面板与侧边栏都不再
|
|
@@ -46,14 +48,18 @@ dsh plugin --profile web remove @chaoset/session-archive
|
|
|
46
48
|
| `count()` | — | `{ count }`(存在性过滤后的归档数量,徽标轮询轻端点) |
|
|
47
49
|
| `detail(sessionId)` | 会话 id | `{ sessionId, header, title, messageCount, totalMessageCount, truncated, messages, live }` |
|
|
48
50
|
| `delete(sessionIds[])` | id 数组 | `{ deleted, failed, removedFromArchive }` |
|
|
49
|
-
| `unarchive(sessionIds[])` | id 数组 | `{ restored, removedFromArchive }` |
|
|
51
|
+
| `unarchive(sessionIds[])` | id 数组 | `{ restored, failed, removedFromArchive }` |
|
|
50
52
|
|
|
51
|
-
> `delete`
|
|
52
|
-
>
|
|
53
|
-
>
|
|
53
|
+
> `delete` 与 `unarchive` 共用 `failed[].reason` 词表:`not-archived`(非归档
|
|
54
|
+
> 成员)、`live`(内存中未归档会话)、`busy`(内存存在且沉降观察窗内体积仍在
|
|
55
|
+
> 增长——活跃生成流)、`unenumerable`(文件存在但持久化枚举不到,或文件已删)、
|
|
56
|
+
> `unlocatable`(枚举得到但无法定位路径)、`reappeared`(删除后被生成流重建,
|
|
57
|
+
> 二次删除仍压不掉)、`not-restorable`(仅 unarchive:confirm 复核时文件已不在);
|
|
58
|
+
> 其余为底层删除错误消息。
|
|
54
59
|
|
|
55
60
|
> `delete` 的 `removedFromArchive` 恒为 0(删除保留归档占位 id,见上);
|
|
56
|
-
> `unarchive` 的为实际从归档集合移除的 id
|
|
61
|
+
> `unarchive` 的为实际从归档集合移除的 id 数。`restored` 之外的每个请求 id
|
|
62
|
+
> 都会在 `failed` 里给出原因。
|
|
57
63
|
|
|
58
64
|
`ArchiveRow`:`{ sessionId, title, cwd, createdAt, updatedAt, size, live }`。
|
|
59
65
|
|
|
@@ -67,6 +73,9 @@ config 字段(`cordis.patch.yml` 或 `~/.dsh/plugins/session-archive/config.js
|
|
|
67
73
|
|
|
68
74
|
## 限制
|
|
69
75
|
|
|
70
|
-
-
|
|
76
|
+
- 正在生成落盘的会话拒绝删除——归档会话不在会话列表、无流可停,请稍后重试
|
|
77
|
+
(沉降观察窗内体积不再增长即可删)。
|
|
78
|
+
- 首行损坏的孤儿日志被宿主枚举静默跳过:面板既看不到也无法经面板删除(删除
|
|
79
|
+
会因 `unenumerable` 被拒绝),只能手动清理文件。
|
|
71
80
|
- 无官方 unarchive API,恢复归档通过 registry 写入通道实现;若未来 DSH 提供
|
|
72
81
|
官方 API,插件会切换过去(行为不变)。
|
package/client/client.cjs
CHANGED
|
@@ -140,11 +140,11 @@ window.__ModuleLoader__.load({
|
|
|
140
140
|
selected: "\u5DF2\u9009 {n} \u9879",
|
|
141
141
|
restore: "\u6062\u590D\u6240\u9009",
|
|
142
142
|
restoreDone: "\u5DF2\u6062\u590D {n} \u4E2A\u5F52\u6863\u4F1A\u8BDD",
|
|
143
|
-
restoreFailed: "\u6062\u590D\u5931\u8D25",
|
|
143
|
+
restoreFailed: "\u6062\u590D\u5931\u8D25\uFF1A{n} \u4E2A",
|
|
144
144
|
delete: "\u5220\u9664\u6240\u9009",
|
|
145
145
|
deleteConfirm: "\u518D\u6B21\u70B9\u51FB\u786E\u8BA4\u5220\u9664",
|
|
146
146
|
deleteDone: "\u5DF2\u5220\u9664 {n} \u4E2A\u5F52\u6863\u4F1A\u8BDD",
|
|
147
|
-
deleteFailed: "\
|
|
147
|
+
deleteFailed: "\u5220\u9664\u5931\u8D25\uFF1A{n} \u4E2A",
|
|
148
148
|
confirmAll: "\u786E\u8BA4\u5220\u9664\u5168\u90E8 {n} \u4E2A\uFF1F",
|
|
149
149
|
noSelection: "\u8BF7\u5148\u52FE\u9009\u4F1A\u8BDD",
|
|
150
150
|
view: "\u67E5\u770B",
|
|
@@ -160,7 +160,13 @@ window.__ModuleLoader__.load({
|
|
|
160
160
|
sizeBytes: "{n} B",
|
|
161
161
|
sizeKB: "{n} KB",
|
|
162
162
|
sizeMB: "{n} MB",
|
|
163
|
-
runningHint: "\
|
|
163
|
+
runningHint: "\u8BE5\u4F1A\u8BDD\u4ECD\u5728\u751F\u6210\u843D\u76D8\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
|
|
164
|
+
batchError: "\u6279\u91CF\u64CD\u4F5C\u5931\u8D25\uFF08{n} \u9879\uFF09",
|
|
165
|
+
reasonUnenumerable: "\u4F1A\u8BDD\u6587\u4EF6\u679A\u4E3E\u4E0D\u5230",
|
|
166
|
+
reasonUnlocatable: "\u65E0\u6CD5\u5B9A\u4F4D\u4F1A\u8BDD\u6587\u4EF6",
|
|
167
|
+
reasonReappeared: "\u5220\u9664\u540E\u88AB\u91CD\u5EFA",
|
|
168
|
+
reasonNotArchived: "\u4E0D\u662F\u5F52\u6863\u4F1A\u8BDD",
|
|
169
|
+
reasonNotRestorable: "\u6587\u4EF6\u5DF2\u4E0D\u5728\uFF0C\u65E0\u6CD5\u6062\u590D"
|
|
164
170
|
};
|
|
165
171
|
var en = {
|
|
166
172
|
badge: "Archive",
|
|
@@ -174,11 +180,11 @@ window.__ModuleLoader__.load({
|
|
|
174
180
|
selected: "{n} selected",
|
|
175
181
|
restore: "Restore",
|
|
176
182
|
restoreDone: "Restored {n} archived sessions",
|
|
177
|
-
restoreFailed: "Restore failed",
|
|
183
|
+
restoreFailed: "Restore failed: {n}",
|
|
178
184
|
delete: "Delete",
|
|
179
185
|
deleteConfirm: "Click again to confirm delete",
|
|
180
186
|
deleteDone: "Deleted {n} archived sessions",
|
|
181
|
-
deleteFailed: "
|
|
187
|
+
deleteFailed: "Deletion failed: {n}",
|
|
182
188
|
confirmAll: "Delete all {n}?",
|
|
183
189
|
noSelection: "Select sessions first",
|
|
184
190
|
view: "View",
|
|
@@ -194,7 +200,13 @@ window.__ModuleLoader__.load({
|
|
|
194
200
|
sizeBytes: "{n} B",
|
|
195
201
|
sizeKB: "{n} KB",
|
|
196
202
|
sizeMB: "{n} MB",
|
|
197
|
-
runningHint: "
|
|
203
|
+
runningHint: "Session still writing; retry shortly",
|
|
204
|
+
batchError: "Batch operation failed ({n})",
|
|
205
|
+
reasonUnenumerable: "session log not enumerable",
|
|
206
|
+
reasonUnlocatable: "session file cannot be located",
|
|
207
|
+
reasonReappeared: "recreated after delete",
|
|
208
|
+
reasonNotArchived: "not an archived session",
|
|
209
|
+
reasonNotRestorable: "file no longer present"
|
|
198
210
|
};
|
|
199
211
|
function formatBytes(bytes, t) {
|
|
200
212
|
if (bytes === void 0 || bytes === null || Number(bytes) === 0) return "\u2014";
|
|
@@ -444,13 +456,27 @@ window.__ModuleLoader__.load({
|
|
|
444
456
|
const result = await call(action, ids);
|
|
445
457
|
const doneIds = result.deleted || result.restored || [];
|
|
446
458
|
const n = doneIds.length;
|
|
447
|
-
|
|
448
|
-
|
|
459
|
+
const doneText = t(doneKey).replace("{n}", String(n));
|
|
460
|
+
if (Array.isArray(result.failed) && result.failed.length > 0) {
|
|
461
|
+
const reasonText = (reason) => {
|
|
462
|
+
const map = {
|
|
463
|
+
live: t("live"),
|
|
464
|
+
busy: t("runningHint"),
|
|
465
|
+
unenumerable: t("reasonUnenumerable"),
|
|
466
|
+
unlocatable: t("reasonUnlocatable"),
|
|
467
|
+
reappeared: t("reasonReappeared"),
|
|
468
|
+
"not-archived": t("reasonNotArchived"),
|
|
469
|
+
"not-restorable": t("reasonNotRestorable")
|
|
470
|
+
};
|
|
471
|
+
return map[String(reason)] ?? String(reason ?? "error");
|
|
472
|
+
};
|
|
449
473
|
const detail = result.failed.slice(0, 3).map((item) => shortId(item.sessionId) + ": " + reasonText(item.reason)).join("; ");
|
|
450
474
|
const more = result.failed.length > 3 ? " (+" + (result.failed.length - 3) + ")" : "";
|
|
451
|
-
|
|
475
|
+
const failText = t(failKey).replace("{n}", String(result.failed.length)) + " \u2014 " + detail + more;
|
|
476
|
+
if (n > 0) setNotice({ kind: "warn", text: doneText + "\uFF1B" + failText });
|
|
477
|
+
else setNotice({ kind: "error", text: failText });
|
|
452
478
|
} else {
|
|
453
|
-
setNotice({ kind: "ok", text:
|
|
479
|
+
setNotice({ kind: "ok", text: doneText });
|
|
454
480
|
}
|
|
455
481
|
if (doneIds.length > 0) {
|
|
456
482
|
const done = new Set(doneIds);
|
|
@@ -466,7 +492,7 @@ window.__ModuleLoader__.load({
|
|
|
466
492
|
setConfirmingDelete(false);
|
|
467
493
|
await load();
|
|
468
494
|
} catch (actionError) {
|
|
469
|
-
setNotice({ kind: "error", text: t(
|
|
495
|
+
setNotice({ kind: "error", text: t("batchError").replace("{n}", String(ids.length)) + ": " + (actionError && actionError.message || actionError) });
|
|
470
496
|
} finally {
|
|
471
497
|
setBusy(false);
|
|
472
498
|
}
|
package/client/index.tsx
CHANGED
|
@@ -103,11 +103,11 @@ const zh = {
|
|
|
103
103
|
selected: "已选 {n} 项",
|
|
104
104
|
restore: "恢复所选",
|
|
105
105
|
restoreDone: "已恢复 {n} 个归档会话",
|
|
106
|
-
restoreFailed: "
|
|
106
|
+
restoreFailed: "恢复失败:{n} 个",
|
|
107
107
|
delete: "删除所选",
|
|
108
108
|
deleteConfirm: "再次点击确认删除",
|
|
109
109
|
deleteDone: "已删除 {n} 个归档会话",
|
|
110
|
-
deleteFailed: "
|
|
110
|
+
deleteFailed: "删除失败:{n} 个",
|
|
111
111
|
confirmAll: "确认删除全部 {n} 个?",
|
|
112
112
|
noSelection: "请先勾选会话",
|
|
113
113
|
view: "查看",
|
|
@@ -123,7 +123,13 @@ const zh = {
|
|
|
123
123
|
sizeBytes: "{n} B",
|
|
124
124
|
sizeKB: "{n} KB",
|
|
125
125
|
sizeMB: "{n} MB",
|
|
126
|
-
runningHint: "
|
|
126
|
+
runningHint: "该会话仍在生成落盘,请稍后重试",
|
|
127
|
+
batchError: "批量操作失败({n} 项)",
|
|
128
|
+
reasonUnenumerable: "会话文件枚举不到",
|
|
129
|
+
reasonUnlocatable: "无法定位会话文件",
|
|
130
|
+
reasonReappeared: "删除后被重建",
|
|
131
|
+
reasonNotArchived: "不是归档会话",
|
|
132
|
+
reasonNotRestorable: "文件已不在,无法恢复"
|
|
127
133
|
};
|
|
128
134
|
const en = {
|
|
129
135
|
badge: "Archive",
|
|
@@ -137,11 +143,11 @@ const en = {
|
|
|
137
143
|
selected: "{n} selected",
|
|
138
144
|
restore: "Restore",
|
|
139
145
|
restoreDone: "Restored {n} archived sessions",
|
|
140
|
-
restoreFailed: "Restore failed",
|
|
146
|
+
restoreFailed: "Restore failed: {n}",
|
|
141
147
|
delete: "Delete",
|
|
142
148
|
deleteConfirm: "Click again to confirm delete",
|
|
143
149
|
deleteDone: "Deleted {n} archived sessions",
|
|
144
|
-
deleteFailed: "
|
|
150
|
+
deleteFailed: "Deletion failed: {n}",
|
|
145
151
|
confirmAll: "Delete all {n}?",
|
|
146
152
|
noSelection: "Select sessions first",
|
|
147
153
|
view: "View",
|
|
@@ -157,7 +163,13 @@ const en = {
|
|
|
157
163
|
sizeBytes: "{n} B",
|
|
158
164
|
sizeKB: "{n} KB",
|
|
159
165
|
sizeMB: "{n} MB",
|
|
160
|
-
runningHint: "
|
|
166
|
+
runningHint: "Session still writing; retry shortly",
|
|
167
|
+
batchError: "Batch operation failed ({n})",
|
|
168
|
+
reasonUnenumerable: "session log not enumerable",
|
|
169
|
+
reasonUnlocatable: "session file cannot be located",
|
|
170
|
+
reasonReappeared: "recreated after delete",
|
|
171
|
+
reasonNotArchived: "not an archived session",
|
|
172
|
+
reasonNotRestorable: "file no longer present"
|
|
161
173
|
};
|
|
162
174
|
|
|
163
175
|
// ── 工具函数 ─────────────────────────────────────────────────────────
|
|
@@ -432,18 +444,34 @@ function ArchivePanel(props: any) {
|
|
|
432
444
|
const result = await call(action, ids);
|
|
433
445
|
const doneIds = result.deleted || result.restored || [];
|
|
434
446
|
const n = doneIds.length;
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
//
|
|
438
|
-
|
|
439
|
-
|
|
447
|
+
const doneText = t(doneKey).replace("{n}", String(n));
|
|
448
|
+
if (Array.isArray(result.failed) && result.failed.length > 0) {
|
|
449
|
+
// host 对每个失败项都给了 reason( live/busy/unenumerable/not-archived
|
|
450
|
+
// /not-restorable/具体错误),只报数量会让用户不知道为什么失败、该等
|
|
451
|
+
// 多久重试。全部本地化,未知 reason 原样透出兜底。
|
|
452
|
+
const reasonText = (reason: any) => {
|
|
453
|
+
const map: Record<string, any> = {
|
|
454
|
+
live: t("live"),
|
|
455
|
+
busy: t("runningHint"),
|
|
456
|
+
unenumerable: t("reasonUnenumerable"),
|
|
457
|
+
unlocatable: t("reasonUnlocatable"),
|
|
458
|
+
reappeared: t("reasonReappeared"),
|
|
459
|
+
"not-archived": t("reasonNotArchived"),
|
|
460
|
+
"not-restorable": t("reasonNotRestorable"),
|
|
461
|
+
};
|
|
462
|
+
return map[String(reason)] ?? String(reason ?? "error");
|
|
463
|
+
};
|
|
440
464
|
const detail = result.failed.slice(0, 3)
|
|
441
465
|
.map((item: any) => shortId(item.sessionId) + ": " + reasonText(item.reason))
|
|
442
466
|
.join("; ");
|
|
443
467
|
const more = result.failed.length > 3 ? " (+" + (result.failed.length - 3) + ")" : "";
|
|
444
|
-
|
|
468
|
+
const failText = t(failKey).replace("{n}", String(result.failed.length)) + " — " + detail + more;
|
|
469
|
+
// 全失败才用 error 样式;部分成功是 warn,成功计数也要如实带上,
|
|
470
|
+
// 不能只报失败让用户以为一个都没成。
|
|
471
|
+
if (n > 0) setNotice({ kind: "warn", text: doneText + ";" + failText });
|
|
472
|
+
else setNotice({ kind: "error", text: failText });
|
|
445
473
|
} else {
|
|
446
|
-
setNotice({ kind: "ok", text:
|
|
474
|
+
setNotice({ kind: "ok", text: doneText });
|
|
447
475
|
}
|
|
448
476
|
if (doneIds.length > 0) {
|
|
449
477
|
const done = new Set(doneIds);
|
|
@@ -461,8 +489,8 @@ function ArchivePanel(props: any) {
|
|
|
461
489
|
setConfirmingDelete(false);
|
|
462
490
|
await load();
|
|
463
491
|
} catch (actionError: any) {
|
|
464
|
-
//
|
|
465
|
-
setNotice({ kind: "error", text: t(
|
|
492
|
+
// 异常分支(整单失败,不是部分失败):带请求发出时的数量,与部分失败分支措辞区分。
|
|
493
|
+
setNotice({ kind: "error", text: t("batchError").replace("{n}", String(ids.length)) + ": " + (actionError && actionError.message || actionError) });
|
|
466
494
|
} finally {
|
|
467
495
|
setBusy(false);
|
|
468
496
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -49,10 +49,11 @@ export interface LocatableSessionPersistence {
|
|
|
49
49
|
* host 端全部逻辑基于官方 service 契约类型(@deepseek-ai/dsh-workspace /
|
|
50
50
|
* dsh-session / dsh-session-persistence / dsh-session-title 的官方 d.ts),
|
|
51
51
|
* 面向 DSH 0.1.5-alpha 宿主线,不保留旧宿主版本兼容:
|
|
52
|
-
* 1. list() — archivedSessionIds ∩
|
|
53
|
-
* 每条附带标题(官方 foldSessionTitle
|
|
54
|
-
*
|
|
55
|
-
* live
|
|
52
|
+
* 1. list() — archivedSessionIds ∩ 逐 id persistence.stat(),
|
|
53
|
+
* 每条附带标题(官方 foldSessionTitle 折叠,事件流
|
|
54
|
+
* 分块读取)、目录、创建时间、最后修改时间(文件
|
|
55
|
+
* mtime)、体积与 live 状态(会话仍在内存中运行时
|
|
56
|
+
* 禁止删除)。
|
|
56
57
|
* 2. detail(id) — open(id,'read') 句柄只读会话事件流(标题 + 文本
|
|
57
58
|
* 消息 user/assistant),供面板"查看"展开。
|
|
58
59
|
* 3. delete(ids) — 批量彻底删除:live 会话拒绝;逐个删除持久化文件
|
|
@@ -98,8 +99,7 @@ export declare const config: {
|
|
|
98
99
|
*/
|
|
99
100
|
export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>): {
|
|
100
101
|
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
101
|
-
*
|
|
102
|
-
* 全事件流解析便宜一个数量级以上。 */
|
|
102
|
+
* 只调这里:逐 id stat 只读元数据头,不枚举全部历史会话。 */
|
|
103
103
|
count(): Promise<{
|
|
104
104
|
count: number;
|
|
105
105
|
}>;
|
|
@@ -122,9 +122,9 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
122
122
|
totalMessageCount: number;
|
|
123
123
|
truncated: boolean;
|
|
124
124
|
messages: {
|
|
125
|
-
role:
|
|
125
|
+
role: 'user' | 'assistant';
|
|
126
126
|
text: string;
|
|
127
|
-
time:
|
|
127
|
+
time: unknown;
|
|
128
128
|
}[];
|
|
129
129
|
live: boolean;
|
|
130
130
|
}>;
|
|
@@ -154,9 +154,19 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
154
154
|
* 批量恢复归档会话(仅从归档集合移除,会话数据不动)。只恢复仍存在
|
|
155
155
|
* 持久化文件的会话:文件已删的 ghost id(已彻底删除的会话)拒绝恢复,
|
|
156
156
|
* 避免删除后的会话再次出现在侧边栏对话列表。
|
|
157
|
+
*
|
|
158
|
+
* 与 delete 对称的失败语义(failed[].reason):'not-archived' 非归档
|
|
159
|
+
* 成员;'unenumerable' 持久化枚举不到(文件已删/首行损坏);其余为
|
|
160
|
+
* confirm 复核淘汰('not-restorable')或底层错误消息。restored 之外的
|
|
161
|
+
* 每个请求 id 都必须在 failed 里有下落——客户端据此把「已恢复 0 个」
|
|
162
|
+
* 渲染为失败而非成功。
|
|
157
163
|
*/
|
|
158
164
|
unarchive(sessionIds: string[]): Promise<{
|
|
159
165
|
restored: string[];
|
|
166
|
+
failed: {
|
|
167
|
+
sessionId: string;
|
|
168
|
+
reason: string;
|
|
169
|
+
}[];
|
|
160
170
|
removedFromArchive: number;
|
|
161
171
|
}>;
|
|
162
172
|
};
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAGV,SAAS,EACV,MAAM,0BAA0B,CAAC;AAgBlC,eAAO,MAAM,IAAI,oBAAoB,CAAC;AAEtC,oDAAoD;AACpD,eAAO,MAAM,MAAM,UAA0D,CAAC;AA4D9E,eAAO,MAAM,MAAM;IARjB,iCAAiC;;IAEjC,8BAA8B;;IAE9B,4BAA4B;;CAIa,CAAC;AAsG5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuQpE;0CACsC;IAChC,KAAK;;;IAOX,sCAAsC;IAChC,IAAI;;;IAcV;+CAC2C;IACrC,MAAM,YAAY,MAAM;;;YA8CxB,GAAG;YACH,SAAS;YACT,aAAa;YACb,WAAW;;;;;;;kBAxCe,MAAM,GAAG,WAAW;kBAAQ,MAAM;kBAAQ,OAAO;;;;IAmDjF;;;;;;;;;;;;;OAaG;IACG,cAAc,aAAa,MAAM,EAAE;;;uBAGN,MAAM;oBAAU,MAAM;;;;IA4IzD;;;;;;;;;;OAUG;IACG,SAAS,aAAa,MAAM,EAAE;;;uBAID,MAAM;oBAAU,MAAM;;;;EA8B5D;AAED,iCAAiC;AACjC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAmBrD"}
|
package/lib/index.js
CHANGED
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
* host 端全部逻辑基于官方 service 契约类型(@deepseek-ai/dsh-workspace /
|
|
9
9
|
* dsh-session / dsh-session-persistence / dsh-session-title 的官方 d.ts),
|
|
10
10
|
* 面向 DSH 0.1.5-alpha 宿主线,不保留旧宿主版本兼容:
|
|
11
|
-
* 1. list() — archivedSessionIds ∩
|
|
12
|
-
* 每条附带标题(官方 foldSessionTitle
|
|
13
|
-
*
|
|
14
|
-
* live
|
|
11
|
+
* 1. list() — archivedSessionIds ∩ 逐 id persistence.stat(),
|
|
12
|
+
* 每条附带标题(官方 foldSessionTitle 折叠,事件流
|
|
13
|
+
* 分块读取)、目录、创建时间、最后修改时间(文件
|
|
14
|
+
* mtime)、体积与 live 状态(会话仍在内存中运行时
|
|
15
|
+
* 禁止删除)。
|
|
15
16
|
* 2. detail(id) — open(id,'read') 句柄只读会话事件流(标题 + 文本
|
|
16
17
|
* 消息 user/assistant),供面板"查看"展开。
|
|
17
18
|
* 3. delete(ids) — 批量彻底删除:live 会话拒绝;逐个删除持久化文件
|
|
@@ -136,29 +137,59 @@ function normalizeConfig(source, defaults = DEFAULT_CONFIG) {
|
|
|
136
137
|
titleReadConcurrency: positiveInt(merged.titleReadConcurrency, defaults.titleReadConcurrency),
|
|
137
138
|
};
|
|
138
139
|
}
|
|
140
|
+
/** 标题/详情分块读取的块长(事件数,官方契约 read(offset,length) 的上界,
|
|
141
|
+
* 超界返回空数组)。此前 read(0) 一次性物化全部事件:大日志下峰值内存
|
|
142
|
+
* O(整条日志)、同步 JSON.parse 集中在宿主事件循环上,面板打开(并发 4 路
|
|
143
|
+
* 标题读)拖慢的是整个宿主而不只是面板;分块后峰值 O(块)。 */
|
|
144
|
+
const READ_CHUNK_EVENTS = 200;
|
|
139
145
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
146
|
+
* 分块遍历一条会话的事件流(升序、全量),每块交给 onChunk 消费后即可弃,
|
|
147
|
+
* 返回句柄上的会话头。用完 close——不 close 会漏句柄。
|
|
142
148
|
*/
|
|
143
|
-
async function
|
|
149
|
+
async function scanSession(persistence, sessionId, onChunk) {
|
|
144
150
|
const handle = await persistence.open(sessionId, 'read');
|
|
145
151
|
try {
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
for (let offset = 0;; offset += READ_CHUNK_EVENTS) {
|
|
153
|
+
const { events } = await handle.read(offset, READ_CHUNK_EVENTS);
|
|
154
|
+
if (events.length === 0)
|
|
155
|
+
break;
|
|
156
|
+
onChunk(events);
|
|
157
|
+
if (events.length < READ_CHUNK_EVENTS)
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
return handle.header;
|
|
148
161
|
}
|
|
149
162
|
finally {
|
|
150
163
|
await handle.close();
|
|
151
164
|
}
|
|
152
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* 读取会话标题(官方 foldSessionTitle 折叠)。fold 只消费最后一个
|
|
168
|
+
* session/title 事件——只收集 title 事件再折叠,与全量折叠语义一致
|
|
169
|
+
* (latest-wins),内存 O(title 事件数)(正常日志恒为 1)。
|
|
170
|
+
*/
|
|
171
|
+
async function readTitle(persistence, sessionId) {
|
|
172
|
+
const titleEvents = [];
|
|
173
|
+
await scanSession(persistence, sessionId, (events) => {
|
|
174
|
+
for (const event of events) {
|
|
175
|
+
if (event.type === 'session/title')
|
|
176
|
+
titleEvents.push(event);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
return foldSessionTitle(titleEvents)?.title ?? null;
|
|
180
|
+
}
|
|
153
181
|
/** 等待 ms 毫秒(沉降观察、删除窗口用)。 */
|
|
154
182
|
function delay(ms) {
|
|
155
183
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
156
184
|
}
|
|
157
|
-
/** 并发限制器:最多 N
|
|
185
|
+
/** 并发限制器:最多 N 个任务并行,其余排队。宽度下限 1——直调
|
|
186
|
+
* createArchiveHost 传 0/负数时若产出 0 个 worker,会静默返回全 undefined
|
|
187
|
+
* 的数组而非报错。 */
|
|
158
188
|
function limitedConcurrency(limit, tasks) {
|
|
159
189
|
const results = new Array(tasks.length);
|
|
160
190
|
let cursor = 0;
|
|
161
|
-
const
|
|
191
|
+
const width = Math.max(1, Math.min(limit, tasks.length));
|
|
192
|
+
const workers = Array.from({ length: width }, async () => {
|
|
162
193
|
while (cursor < tasks.length) {
|
|
163
194
|
const at = cursor++;
|
|
164
195
|
const task = tasks[at];
|
|
@@ -199,6 +230,41 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
199
230
|
* 因此 live 仅对"内存存在且**未归档**"的会话为真(防将来误用),
|
|
200
231
|
* 归档面板中恒为 false。 */
|
|
201
232
|
const isLive = (sessionId) => ctx.sessions.get(sessionId) !== undefined && !archivedSet().has(sessionId);
|
|
233
|
+
/**
|
|
234
|
+
* 批量查一组 id 的持久化快照,返回 Map(只含枚举得到的 id)。
|
|
235
|
+
*
|
|
236
|
+
* 优先逐 id 走官方契约 stat(id)——只读该会话的元数据头,成本 O(项目目录数)/id;
|
|
237
|
+
* 此前四个端点(count/list/delete/unarchive)都用全量 persistence.list():
|
|
238
|
+
* 枚举实例上**所有**会话(每文件读头)只为挑出几个归档 id,而 count 是
|
|
239
|
+
* 每 5 秒每标签页的徽标轮询端点,实例积累数千历史会话后是持续的全树扫。
|
|
240
|
+
* 枚举不到(stat 返回 undefined 或抛错——jsonl 后端对重复 id 会抛异常)
|
|
241
|
+
* 的 id 不出现在 Map 里,与 list() 时代「不在快照表里」的幽灵语义对齐:
|
|
242
|
+
* list() 同样静默跳过首行损坏的日志;stat 抛错按枚举不到处理方向更保守
|
|
243
|
+
* (删除/恢复一律拒绝)。stat 不在契约上的宿主回退一次全量 list()。
|
|
244
|
+
*/
|
|
245
|
+
async function snapshotsByIds(ids) {
|
|
246
|
+
const result = new Map();
|
|
247
|
+
if (ids.length === 0)
|
|
248
|
+
return result;
|
|
249
|
+
if (typeof persistence.stat !== 'function') {
|
|
250
|
+
const wanted = new Set(ids);
|
|
251
|
+
for (const snapshot of await persistence.list()) {
|
|
252
|
+
if (wanted.has(snapshot.header.id) && !result.has(snapshot.header.id)) {
|
|
253
|
+
result.set(snapshot.header.id, snapshot);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return result;
|
|
257
|
+
}
|
|
258
|
+
await limitedConcurrency(8, ids.map((id) => async () => {
|
|
259
|
+
try {
|
|
260
|
+
const snapshot = await persistence.stat(id);
|
|
261
|
+
if (snapshot !== undefined)
|
|
262
|
+
result.set(id, snapshot);
|
|
263
|
+
}
|
|
264
|
+
catch { }
|
|
265
|
+
}));
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
202
268
|
/**
|
|
203
269
|
* 沉降观察:等一个写入沉降窗口后重取文件 stat(null = 文件已消失)。
|
|
204
270
|
* 归档瞬间的生成流兜底用:归档会话会因 web 客户端重连恢复 tab 而长期
|
|
@@ -209,7 +275,28 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
209
275
|
* 沉降窗口内体积必然增长;一次性落盘不会。增长与否由调用点对比前后
|
|
210
276
|
* 两次 stat 的 size 判定。
|
|
211
277
|
*/
|
|
212
|
-
const settleStat = (path) => delay(REAPPEAR_SETTLE_MS).then(() => stat(path).
|
|
278
|
+
const settleStat = (path) => delay(REAPPEAR_SETTLE_MS).then(() => stat(path).then((info) => ({ size: info.size, mtimeMs: info.mtimeMs }),
|
|
279
|
+
// 只有 ENOENT 才是「文件已消失」:EACCES 等错误下把 null 当已消失会
|
|
280
|
+
// 谎报 deleted;上抛交给删除临界区的 catch 以真实原因计入 failed。
|
|
281
|
+
(error) => { if (error?.code === 'ENOENT')
|
|
282
|
+
return null; throw error; }));
|
|
283
|
+
/**
|
|
284
|
+
* delete ↔ unarchive 临界区的互斥串行化(插件闭包内的 promise 链)。
|
|
285
|
+
* 两者的「检查 → 生效」窗口必须互斥,否则并发时会出现两种错位:
|
|
286
|
+
* - unarchive 的 confirm 看到 located → deleteArchived 随后 rm →
|
|
287
|
+
* setState 仍把 id 移出归档集合:文件没了、归档标记也没了,内存
|
|
288
|
+
* 会话重回侧边栏(等同误恢复);
|
|
289
|
+
* - 反向:恢复刚落地,先行发起的删除把新恢复会话的文件清掉。
|
|
290
|
+
* registry 的 enqueueOperation 只串行化归档集合写入,deleteArchived
|
|
291
|
+
* 不经过它,因此这里自行串行化。delete 的临界区不获取 registry 锁、
|
|
292
|
+
* 本临界区只在已持有 registry 写锁时进入,无循环等待。
|
|
293
|
+
*/
|
|
294
|
+
let exclusiveTail = Promise.resolve();
|
|
295
|
+
function exclusive(section) {
|
|
296
|
+
const run = exclusiveTail.then(section, section);
|
|
297
|
+
exclusiveTail = run.then(() => { }, () => { });
|
|
298
|
+
return run;
|
|
299
|
+
}
|
|
213
300
|
/**
|
|
214
301
|
* 从归档集合移除若干 id(恢复用;删除不调用——见 deleteArchived),返回实际移除的 id。
|
|
215
302
|
*
|
|
@@ -219,9 +306,9 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
219
306
|
* ——宿主内部形状,这里以显式断言收窄并在运行时探测可用性:形状一旦
|
|
220
307
|
* 变化自动降级为"仅删文件",归档列表按存在性过滤幽灵 id,功能仍正确。
|
|
221
308
|
*
|
|
222
|
-
* confirm 在 registry 写锁临界区内逐个复核 id
|
|
223
|
-
*
|
|
224
|
-
*
|
|
309
|
+
* confirm 在 registry 写锁临界区内逐个复核 id 是否仍可恢复(文件仍存在);
|
|
310
|
+
* confirm → setState 段再与 deleteArchived 的删除临界区经 exclusive 互斥
|
|
311
|
+
* ——registry 写锁只挡住其他归档集合写入者,挡不住不经过它的删除。
|
|
225
312
|
*/
|
|
226
313
|
async function removeFromArchiveSet(ids, confirm) {
|
|
227
314
|
const set = new Set(ids);
|
|
@@ -238,24 +325,27 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
238
325
|
const state = writable.requireState();
|
|
239
326
|
const current = [...state.archivedSessionIds];
|
|
240
327
|
let eligible = current.filter((id) => set.has(id));
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
328
|
+
// confirm → setState 与 deleteArchived 的删除临界区互斥(见 exclusive)。
|
|
329
|
+
await exclusive(async () => {
|
|
330
|
+
if (confirm !== undefined) {
|
|
331
|
+
const confirmed = [];
|
|
332
|
+
for (const id of eligible) {
|
|
333
|
+
try {
|
|
334
|
+
if (await confirm(id))
|
|
335
|
+
confirmed.push(id);
|
|
336
|
+
}
|
|
337
|
+
catch { }
|
|
247
338
|
}
|
|
248
|
-
|
|
339
|
+
eligible = confirmed;
|
|
249
340
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
await writable.setState({ ...state, archivedSessionIds: remaining });
|
|
341
|
+
removedIds = eligible;
|
|
342
|
+
// 只有真正移除的 id 才离开归档集合;未通过复核的保持原状(仍是 ghost
|
|
343
|
+
// 或正常归档),不能因为请求过就一并抹掉。
|
|
344
|
+
const removedSet = new Set(removedIds);
|
|
345
|
+
const remaining = current.filter((id) => !removedSet.has(id));
|
|
346
|
+
if (removedIds.length > 0)
|
|
347
|
+
await writable.setState({ ...state, archivedSessionIds: remaining });
|
|
348
|
+
});
|
|
259
349
|
});
|
|
260
350
|
return removedIds;
|
|
261
351
|
}
|
|
@@ -313,12 +403,17 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
313
403
|
return { state: 'absent' };
|
|
314
404
|
}
|
|
315
405
|
catch {
|
|
316
|
-
|
|
406
|
+
// 内层每个 stat 都各自兜底,这里只会接到 locate 抛错(后端异常/契约
|
|
407
|
+
// 漂移)——既不能确认存在也不能确认缺失,必须按 unknown 处理。返回
|
|
408
|
+
// absent 会让 deleteArchived 把它记成"幂等删除成功"(0.3.9 谎报成功
|
|
409
|
+
// 的同源变体);unknown 对应删除路径的 unlocatable 拒绝。
|
|
410
|
+
return { state: 'unknown' };
|
|
317
411
|
}
|
|
318
412
|
}
|
|
319
413
|
/** 删除后的复验:先等 settleMs 给进行中的写入留出落盘时间,再确认文件没有
|
|
320
|
-
* 被宿主 materialize 的 mkdir -p
|
|
321
|
-
*
|
|
414
|
+
* 被宿主 materialize 的 mkdir -p 整体重建。返回 true 表示文件仍在(重现)。
|
|
415
|
+
* 只有 ENOENT 视为已消失;EACCES 等 stat 错误按「仍在」处理,让上层走
|
|
416
|
+
* 二次删除并以真实错误上报,不谎报 deleted。 */
|
|
322
417
|
async function filePresentAfterSettle(path, settleMs) {
|
|
323
418
|
if (settleMs > 0)
|
|
324
419
|
await delay(settleMs);
|
|
@@ -326,15 +421,20 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
326
421
|
await stat(path);
|
|
327
422
|
return true;
|
|
328
423
|
}
|
|
329
|
-
catch {
|
|
330
|
-
|
|
424
|
+
catch (error) {
|
|
425
|
+
if (error?.code === 'ENOENT')
|
|
426
|
+
return false;
|
|
427
|
+
return true;
|
|
331
428
|
}
|
|
332
429
|
}
|
|
333
430
|
/** 单个归档会话的展示行。标题读取失败回退 null(面板显示目录名)。
|
|
334
431
|
* 标题按 mtime 缓存:readSession 会解析整条事件流,而面板关闭态的徽标
|
|
335
432
|
* 轮询每 5 秒打一次 list——不缓存的话就是"读整本会话只为取一行标题"的
|
|
336
433
|
* 持续开销。mtime 不变即命中缓存;文件不可定位(无 locate 的宿主后端)
|
|
337
|
-
* 时跳过缓存直接读,标题仍然可得。折叠用官方 foldSessionTitle。
|
|
434
|
+
* 时跳过缓存直接读,标题仍然可得。折叠用官方 foldSessionTitle。
|
|
435
|
+
* 缓存有上限(FIFO 淘汰最旧条目):已删除会话的条目不再被 mtime 命中
|
|
436
|
+
* 更新,长驻 host 进程下无界累积。 */
|
|
437
|
+
const TITLE_CACHE_LIMIT = 500;
|
|
338
438
|
const titleCache = new Map();
|
|
339
439
|
async function rowFor(sessionId, header) {
|
|
340
440
|
const file = await fileInfo(header);
|
|
@@ -347,15 +447,20 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
347
447
|
}
|
|
348
448
|
else {
|
|
349
449
|
try {
|
|
350
|
-
title =
|
|
450
|
+
title = await readTitle(persistence, sessionId);
|
|
351
451
|
}
|
|
352
452
|
catch { }
|
|
453
|
+
if (titleCache.size >= TITLE_CACHE_LIMIT) {
|
|
454
|
+
const oldest = titleCache.keys().next().value;
|
|
455
|
+
if (oldest !== undefined)
|
|
456
|
+
titleCache.delete(oldest);
|
|
457
|
+
}
|
|
353
458
|
titleCache.set(sessionId, { mtimeMs: located.mtimeMs, title });
|
|
354
459
|
}
|
|
355
460
|
}
|
|
356
461
|
else {
|
|
357
462
|
try {
|
|
358
|
-
title =
|
|
463
|
+
title = await readTitle(persistence, sessionId);
|
|
359
464
|
}
|
|
360
465
|
catch { }
|
|
361
466
|
}
|
|
@@ -371,33 +476,26 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
371
476
|
}
|
|
372
477
|
return {
|
|
373
478
|
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
374
|
-
*
|
|
375
|
-
* 全事件流解析便宜一个数量级以上。 */
|
|
479
|
+
* 只调这里:逐 id stat 只读元数据头,不枚举全部历史会话。 */
|
|
376
480
|
async count() {
|
|
377
481
|
const archived = [...archivedSet()];
|
|
378
482
|
if (archived.length === 0)
|
|
379
483
|
return { count: 0 };
|
|
380
|
-
const snapshots = await
|
|
381
|
-
|
|
382
|
-
let count = 0;
|
|
383
|
-
for (const sessionId of archived)
|
|
384
|
-
if (persisted.has(sessionId))
|
|
385
|
-
count++;
|
|
386
|
-
return { count };
|
|
484
|
+
const snapshots = await snapshotsByIds(archived);
|
|
485
|
+
return { count: snapshots.size };
|
|
387
486
|
},
|
|
388
487
|
/** 列出全部归档会话(存在性过滤:文件已删的幽灵归档记录不显示)。 */
|
|
389
488
|
async list() {
|
|
390
489
|
const archived = [...archivedSet()];
|
|
391
490
|
if (archived.length === 0)
|
|
392
491
|
return { items: [] };
|
|
393
|
-
const snapshots = await
|
|
394
|
-
const byId = new Map(snapshots.map((snapshot) => [snapshot.header.id, snapshot.header]));
|
|
492
|
+
const snapshots = await snapshotsByIds(archived);
|
|
395
493
|
const rows = [];
|
|
396
494
|
for (const sessionId of archived) {
|
|
397
|
-
const
|
|
398
|
-
if (
|
|
495
|
+
const snapshot = snapshots.get(sessionId);
|
|
496
|
+
if (snapshot === undefined)
|
|
399
497
|
continue; // 幽灵 id:会话文件已不存在
|
|
400
|
-
rows.push({ sessionId, header });
|
|
498
|
+
rows.push({ sessionId, header: snapshot.header });
|
|
401
499
|
}
|
|
402
500
|
const items = await limitedConcurrency(cfg.titleReadConcurrency, rows.map(({ sessionId, header }) => () => rowFor(sessionId, header)));
|
|
403
501
|
return { items };
|
|
@@ -409,31 +507,43 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
409
507
|
throw Object.assign(new Error('session not archived: ' + sessionId), { code: 'NOT_ARCHIVED' });
|
|
410
508
|
}
|
|
411
509
|
const id = sessionId;
|
|
412
|
-
|
|
413
|
-
|
|
510
|
+
// 事件流分块消费(readSession 时代 read(0) 一次性物化全部事件):
|
|
511
|
+
// 头从句柄上取,消息逐块提取,达到上限后只计数不再拼接文本;
|
|
512
|
+
// title 事件同趟收集(fold 只消费最后一个,全量物化没有必要)。
|
|
513
|
+
const titleEvents = [];
|
|
414
514
|
const messages = [];
|
|
415
515
|
let totalMessageCount = 0;
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
516
|
+
const meta = await scanSession(persistence, id, (events) => {
|
|
517
|
+
for (const event of events) {
|
|
518
|
+
if (event.type === 'session/title') {
|
|
519
|
+
titleEvents.push(event);
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
if (event.type !== 'user/message' && event.type !== 'assistant/message')
|
|
523
|
+
continue;
|
|
524
|
+
// 官方事件 data:user/message 是 UserMessage 本体(content 在自身),
|
|
525
|
+
// assistant/message 是包装对象(content 在 .message.content)。
|
|
526
|
+
// message 可缺(损坏/异构日志)——detail 是整会话只读端点,一条
|
|
527
|
+
// 畸形事件不应让整个请求 TypeError。
|
|
528
|
+
const text = messageText(event.type === 'user/message' ? event.data.content : event.data.message?.content, cfg.messagePreviewChars);
|
|
529
|
+
// 空文本消息(纯工具调用等)在任何位置都不计入总数——截断线两侧
|
|
530
|
+
// 口径一致。放在上限判定之前:不提取文本就无法区分空与非空,
|
|
531
|
+
// 提取成本受 messagePreviewChars 上界约束。
|
|
532
|
+
if (text.length === 0)
|
|
533
|
+
continue;
|
|
534
|
+
if (messages.length >= cfg.detailMaxMessages) {
|
|
535
|
+
totalMessageCount++;
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
messages.push({
|
|
539
|
+
role: event.type === 'user/message' ? 'user' : 'assistant',
|
|
540
|
+
text,
|
|
541
|
+
time: event.time,
|
|
542
|
+
});
|
|
422
543
|
totalMessageCount++;
|
|
423
|
-
continue;
|
|
424
544
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
const text = messageText(event.type === 'user/message' ? event.data.content : event.data.message.content, cfg.messagePreviewChars);
|
|
428
|
-
if (text.length === 0)
|
|
429
|
-
continue;
|
|
430
|
-
messages.push({
|
|
431
|
-
role: event.type === 'user/message' ? 'user' : 'assistant',
|
|
432
|
-
text,
|
|
433
|
-
time: event.time,
|
|
434
|
-
});
|
|
435
|
-
totalMessageCount++;
|
|
436
|
-
}
|
|
545
|
+
});
|
|
546
|
+
const title = foldSessionTitle(titleEvents)?.title ?? null;
|
|
437
547
|
return {
|
|
438
548
|
sessionId,
|
|
439
549
|
header: {
|
|
@@ -468,69 +578,43 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
468
578
|
const unique = [...new Set(sessionIds)];
|
|
469
579
|
const deleted = [];
|
|
470
580
|
const failed = [];
|
|
471
|
-
// 归档成员前置校验:persistence
|
|
472
|
-
//
|
|
473
|
-
//
|
|
581
|
+
// 归档成员前置校验:persistence 覆盖所有持久化会话而非仅归档会话,
|
|
582
|
+
// 不校验的话任何"未归档、不在内存"的会话 id 都会绕过 live/busy
|
|
583
|
+
// 两道保护被不可逆物理删除。快照只 stat 归档成员:非成员在循环里
|
|
584
|
+
// 前置拒绝,不必查持久层。
|
|
474
585
|
const archived = archivedSet();
|
|
475
|
-
const snapshots = await
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
if (!archived.has(sessionId)) {
|
|
480
|
-
failed.push({ sessionId, reason: 'not-archived' });
|
|
481
|
-
continue;
|
|
482
|
-
}
|
|
483
|
-
if (isLive(id)) {
|
|
484
|
-
failed.push({ sessionId, reason: 'live' });
|
|
485
|
-
continue;
|
|
486
|
-
}
|
|
487
|
-
if (headersById.get(sessionId) === undefined) {
|
|
488
|
-
// ghost id(枚举不到)。"枚举不到 ≠ 文件不存在":首行损坏的日志会被
|
|
489
|
-
// persistence.list() 静默跳过;而 jsonl 后端按 cwd 分目录,ghost
|
|
490
|
-
// 探测没有 header、拿不到 cwd,locate 只能探缺省目录(_no-cwd 一类)
|
|
491
|
-
// ——既探不到真实文件,也确认不了缺失。因此 ghost 一律不能当
|
|
492
|
-
// "已删"报成功(0.3.9 谎报成功的同源变体),计入 failed;ghost id
|
|
493
|
-
// 留在归档集合,由 list() 的存在性过滤隐藏,面板与侧边栏均不可见。
|
|
494
|
-
failed.push({ sessionId, reason: 'unenumerable' });
|
|
495
|
-
continue;
|
|
496
|
-
}
|
|
497
|
-
const header = headersById.get(sessionId);
|
|
498
|
-
const file = await fileInfo(header);
|
|
499
|
-
if (file.state === 'unknown') {
|
|
500
|
-
// 文件存在(枚举得到)但无法定位路径:删不得也不该谎报成功。
|
|
501
|
-
failed.push({ sessionId, reason: 'unlocatable' });
|
|
502
|
-
continue;
|
|
503
|
-
}
|
|
504
|
-
if (file.state === 'absent') {
|
|
505
|
-
deleted.push(sessionId);
|
|
506
|
-
continue;
|
|
507
|
-
}
|
|
586
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
587
|
+
/** 常规删除流(located 路径),必须在 exclusive 临界区内调用:
|
|
588
|
+
* TOCTOU 复核 → busy 沉降观察 → rm → 重现复验。 */
|
|
589
|
+
const deleteLocatedFile = async (sessionId, path) => {
|
|
508
590
|
try {
|
|
509
591
|
// TOCTOU 复核:fileInfo 的 stat 是快照,检查与 rm 之间文件可能
|
|
510
|
-
// 恰好变化;rm
|
|
511
|
-
|
|
592
|
+
// 恰好变化;rm 前重取一次。只有 ENOENT 才是「已消失」,其余错误
|
|
593
|
+
// 上抛以真实原因计入 failed。
|
|
594
|
+
let fresh = await stat(path).then((info) => ({ size: info.size, mtimeMs: info.mtimeMs }), (error) => { if (error?.code === 'ENOENT')
|
|
595
|
+
return null; throw error; });
|
|
512
596
|
if (fresh === null) {
|
|
513
597
|
deleted.push(sessionId);
|
|
514
|
-
|
|
598
|
+
return;
|
|
515
599
|
}
|
|
516
600
|
// 生成流兜底:内存中的会话且 mtime 在窗口内,沉降观察一次,文件
|
|
517
601
|
// 仍在增长说明活跃写入方在 append(删除后会把半截日志写回来),
|
|
518
602
|
// 拒绝;体积静止则只是一次性落盘/迁移/flush 刷新过 mtime,照删。
|
|
519
603
|
const inMemory = ctx.sessions.get(sessionId) !== undefined;
|
|
520
604
|
if (inMemory && Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS) {
|
|
521
|
-
const second = await settleStat(
|
|
605
|
+
const second = await settleStat(path);
|
|
522
606
|
if (second === null) {
|
|
523
607
|
deleted.push(sessionId);
|
|
524
|
-
|
|
608
|
+
return;
|
|
525
609
|
}
|
|
526
610
|
if (second.size > fresh.size) {
|
|
527
611
|
failed.push({ sessionId, reason: 'busy' });
|
|
528
|
-
|
|
612
|
+
return;
|
|
529
613
|
}
|
|
530
614
|
fresh = second;
|
|
531
615
|
}
|
|
532
|
-
await rm(
|
|
533
|
-
await removeSessionDirIfOwned(sessionId,
|
|
616
|
+
await rm(path, { force: true });
|
|
617
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
534
618
|
// rm 后复验:防宿主 materialize 的 mkdir -p 把路径在删除窗口内重建。
|
|
535
619
|
// 重现只可能来自活跃写入方(内存中的生成流,或刚写完不久、客户端
|
|
536
620
|
// 重连即恢复的 tab)。据此分两档:
|
|
@@ -541,15 +625,21 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
541
625
|
// 陈旧归档不再为每个文件白付 2×300ms。
|
|
542
626
|
const plausiblyActive = inMemory || Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS;
|
|
543
627
|
const settleMs = plausiblyActive ? REAPPEAR_SETTLE_MS : 0;
|
|
544
|
-
if (await filePresentAfterSettle(
|
|
628
|
+
if (await filePresentAfterSettle(path, settleMs)) {
|
|
545
629
|
try {
|
|
546
|
-
await rm(
|
|
547
|
-
await removeSessionDirIfOwned(sessionId,
|
|
630
|
+
await rm(path, { force: true });
|
|
631
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
548
632
|
}
|
|
549
|
-
catch {
|
|
550
|
-
|
|
633
|
+
catch (error) {
|
|
634
|
+
// 二次删除失败必须以真实原因上报:吞掉会让 EPERM/EBUSY 被
|
|
635
|
+
// 误标为 reappeared,把排障方向带偏。
|
|
636
|
+
ctx.logger?.warn?.(`session-archive: second delete failed for ${sessionId}: ${String(error)}`);
|
|
637
|
+
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
if (await filePresentAfterSettle(path, settleMs)) {
|
|
551
641
|
failed.push({ sessionId, reason: 'reappeared' });
|
|
552
|
-
|
|
642
|
+
return;
|
|
553
643
|
}
|
|
554
644
|
}
|
|
555
645
|
deleted.push(sessionId);
|
|
@@ -557,6 +647,70 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
557
647
|
catch (error) {
|
|
558
648
|
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
559
649
|
}
|
|
650
|
+
};
|
|
651
|
+
for (const sessionId of unique) {
|
|
652
|
+
const id = sessionId;
|
|
653
|
+
if (!archived.has(sessionId)) {
|
|
654
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
655
|
+
continue;
|
|
656
|
+
}
|
|
657
|
+
if (isLive(id)) {
|
|
658
|
+
failed.push({ sessionId, reason: 'live' });
|
|
659
|
+
continue;
|
|
660
|
+
}
|
|
661
|
+
if (snapshots.get(sessionId) === undefined) {
|
|
662
|
+
// ghost id(枚举不到)。"枚举不到 ≠ 文件不存在":首行损坏的日志会被
|
|
663
|
+
// persistence 静默跳过;而 jsonl 后端按 cwd 分目录,ghost 探测没有
|
|
664
|
+
// header、拿不到 cwd,locate 只能探缺省目录(_no-cwd 一类)——既探
|
|
665
|
+
// 不到真实文件,也确认不了缺失。因此 ghost 一律不能当"已删"报成功
|
|
666
|
+
// (0.3.9 谎报成功的同源变体),计入 failed;ghost id 留在归档集合,
|
|
667
|
+
// 由 list() 的存在性过滤隐藏,面板与侧边栏均不可见。
|
|
668
|
+
failed.push({ sessionId, reason: 'unenumerable' });
|
|
669
|
+
continue;
|
|
670
|
+
}
|
|
671
|
+
const header = snapshots.get(sessionId).header;
|
|
672
|
+
const file = await fileInfo(header);
|
|
673
|
+
if (file.state === 'unknown') {
|
|
674
|
+
// 文件存在(枚举得到)但无法定位路径:删不得也不该谎报成功。
|
|
675
|
+
failed.push({ sessionId, reason: 'unlocatable' });
|
|
676
|
+
continue;
|
|
677
|
+
}
|
|
678
|
+
// ── 与 unarchive 的 confirm → setState 互斥的删除临界区(exclusive)。
|
|
679
|
+
// rm 及其全部前置判定(含 absent 复核)都在窗口内:unarchive 要么
|
|
680
|
+
// 整体先落地(此处复验归档成员资格失败、拒绝删除),要么整体等删除
|
|
681
|
+
// 完成(confirm 探到 absent、拒绝恢复)——"文件被删的同时归档标记
|
|
682
|
+
// 被移除"的错位不存在。
|
|
683
|
+
if (file.state === 'absent') {
|
|
684
|
+
// absent 不是无脑幂等成功:fileInfo 的目录扫描是快照,宿主格式
|
|
685
|
+
// 迁移(写临时文件+rename)的瞬间目录可能扫空,报已删前锁内重扫
|
|
686
|
+
// 一次;重扫发现文件在,转常规删除流。
|
|
687
|
+
await exclusive(async () => {
|
|
688
|
+
if (!archivedSet().has(sessionId)) {
|
|
689
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
const fresh = await fileInfo(header);
|
|
693
|
+
if (fresh.state === 'unknown') {
|
|
694
|
+
failed.push({ sessionId, reason: 'unlocatable' });
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
if (fresh.state === 'absent') {
|
|
698
|
+
deleted.push(sessionId);
|
|
699
|
+
return;
|
|
700
|
+
}
|
|
701
|
+
await deleteLocatedFile(sessionId, fresh.path);
|
|
702
|
+
});
|
|
703
|
+
continue;
|
|
704
|
+
}
|
|
705
|
+
await exclusive(async () => {
|
|
706
|
+
// 归档成员锁内复验:快照之后、删除之前,unarchive 可能已把 id 移出
|
|
707
|
+
// 集合——删除先行发起也不能清掉刚恢复的会话文件。
|
|
708
|
+
if (!archivedSet().has(sessionId)) {
|
|
709
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
await deleteLocatedFile(sessionId, file.path);
|
|
713
|
+
});
|
|
560
714
|
}
|
|
561
715
|
return { deleted, failed, removedFromArchive: 0 };
|
|
562
716
|
},
|
|
@@ -564,28 +718,46 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
564
718
|
* 批量恢复归档会话(仅从归档集合移除,会话数据不动)。只恢复仍存在
|
|
565
719
|
* 持久化文件的会话:文件已删的 ghost id(已彻底删除的会话)拒绝恢复,
|
|
566
720
|
* 避免删除后的会话再次出现在侧边栏对话列表。
|
|
721
|
+
*
|
|
722
|
+
* 与 delete 对称的失败语义(failed[].reason):'not-archived' 非归档
|
|
723
|
+
* 成员;'unenumerable' 持久化枚举不到(文件已删/首行损坏);其余为
|
|
724
|
+
* confirm 复核淘汰('not-restorable')或底层错误消息。restored 之外的
|
|
725
|
+
* 每个请求 id 都必须在 failed 里有下落——客户端据此把「已恢复 0 个」
|
|
726
|
+
* 渲染为失败而非成功。
|
|
567
727
|
*/
|
|
568
728
|
async unarchive(sessionIds) {
|
|
569
729
|
const unique = [...new Set(sessionIds)];
|
|
570
|
-
const
|
|
571
|
-
const
|
|
730
|
+
const archived = archivedSet();
|
|
731
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
732
|
+
const failed = [];
|
|
572
733
|
// 锁外先做一遍廉价过滤(明显不可恢复的直接淘汰),锁内由 confirm 复核,
|
|
573
734
|
// 消除与并发 deleteArchived 的检查-移除窗口。
|
|
574
735
|
const candidates = [];
|
|
575
736
|
for (const sessionId of unique) {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
continue;
|
|
579
|
-
|
|
737
|
+
if (!archived.has(sessionId)) {
|
|
738
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
739
|
+
continue;
|
|
740
|
+
}
|
|
741
|
+
if (snapshots.get(sessionId) === undefined) {
|
|
742
|
+
failed.push({ sessionId, reason: 'unenumerable' }); // 持久化记录已删:拒绝恢复
|
|
743
|
+
continue;
|
|
744
|
+
}
|
|
745
|
+
candidates.push(sessionId);
|
|
580
746
|
}
|
|
581
|
-
const restored = await removeFromArchiveSet(candidates
|
|
582
|
-
const
|
|
583
|
-
if (
|
|
747
|
+
const restored = await removeFromArchiveSet(candidates, async (sessionId) => {
|
|
748
|
+
const snapshot = snapshots.get(sessionId);
|
|
749
|
+
if (snapshot === undefined)
|
|
584
750
|
return false;
|
|
585
|
-
const file = await fileInfo(header);
|
|
586
|
-
|
|
751
|
+
const file = await fileInfo(snapshot.header);
|
|
752
|
+
if (file.state !== 'located') {
|
|
753
|
+
// located 才确认文件在:absent(快照后文件消失)/unknown(无法确认)
|
|
754
|
+
// 谨慎拒绝,并如实计入 failed。
|
|
755
|
+
failed.push({ sessionId, reason: 'not-restorable' });
|
|
756
|
+
return false;
|
|
757
|
+
}
|
|
758
|
+
return true;
|
|
587
759
|
});
|
|
588
|
-
return { restored, removedFromArchive: restored.length };
|
|
760
|
+
return { restored, failed, removedFromArchive: restored.length };
|
|
589
761
|
},
|
|
590
762
|
};
|
|
591
763
|
}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED