@chaoset/session-archive 0.3.12 → 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 +39 -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 +257 -134
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
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
|
+
|
|
3
42
|
## 0.3.12 (2026-09-12)
|
|
4
43
|
|
|
5
44
|
### 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,20 +137,47 @@ 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));
|
|
@@ -202,6 +230,41 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
202
230
|
* 因此 live 仅对"内存存在且**未归档**"的会话为真(防将来误用),
|
|
203
231
|
* 归档面板中恒为 false。 */
|
|
204
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
|
+
}
|
|
205
268
|
/**
|
|
206
269
|
* 沉降观察:等一个写入沉降窗口后重取文件 stat(null = 文件已消失)。
|
|
207
270
|
* 归档瞬间的生成流兜底用:归档会话会因 web 客户端重连恢复 tab 而长期
|
|
@@ -212,7 +275,11 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
212
275
|
* 沉降窗口内体积必然增长;一次性落盘不会。增长与否由调用点对比前后
|
|
213
276
|
* 两次 stat 的 size 判定。
|
|
214
277
|
*/
|
|
215
|
-
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; }));
|
|
216
283
|
/**
|
|
217
284
|
* delete ↔ unarchive 临界区的互斥串行化(插件闭包内的 promise 链)。
|
|
218
285
|
* 两者的「检查 → 生效」窗口必须互斥,否则并发时会出现两种错位:
|
|
@@ -344,8 +411,9 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
344
411
|
}
|
|
345
412
|
}
|
|
346
413
|
/** 删除后的复验:先等 settleMs 给进行中的写入留出落盘时间,再确认文件没有
|
|
347
|
-
* 被宿主 materialize 的 mkdir -p
|
|
348
|
-
*
|
|
414
|
+
* 被宿主 materialize 的 mkdir -p 整体重建。返回 true 表示文件仍在(重现)。
|
|
415
|
+
* 只有 ENOENT 视为已消失;EACCES 等 stat 错误按「仍在」处理,让上层走
|
|
416
|
+
* 二次删除并以真实错误上报,不谎报 deleted。 */
|
|
349
417
|
async function filePresentAfterSettle(path, settleMs) {
|
|
350
418
|
if (settleMs > 0)
|
|
351
419
|
await delay(settleMs);
|
|
@@ -353,8 +421,10 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
353
421
|
await stat(path);
|
|
354
422
|
return true;
|
|
355
423
|
}
|
|
356
|
-
catch {
|
|
357
|
-
|
|
424
|
+
catch (error) {
|
|
425
|
+
if (error?.code === 'ENOENT')
|
|
426
|
+
return false;
|
|
427
|
+
return true;
|
|
358
428
|
}
|
|
359
429
|
}
|
|
360
430
|
/** 单个归档会话的展示行。标题读取失败回退 null(面板显示目录名)。
|
|
@@ -377,7 +447,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
377
447
|
}
|
|
378
448
|
else {
|
|
379
449
|
try {
|
|
380
|
-
title =
|
|
450
|
+
title = await readTitle(persistence, sessionId);
|
|
381
451
|
}
|
|
382
452
|
catch { }
|
|
383
453
|
if (titleCache.size >= TITLE_CACHE_LIMIT) {
|
|
@@ -390,7 +460,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
390
460
|
}
|
|
391
461
|
else {
|
|
392
462
|
try {
|
|
393
|
-
title =
|
|
463
|
+
title = await readTitle(persistence, sessionId);
|
|
394
464
|
}
|
|
395
465
|
catch { }
|
|
396
466
|
}
|
|
@@ -406,33 +476,26 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
406
476
|
}
|
|
407
477
|
return {
|
|
408
478
|
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
409
|
-
*
|
|
410
|
-
* 全事件流解析便宜一个数量级以上。 */
|
|
479
|
+
* 只调这里:逐 id stat 只读元数据头,不枚举全部历史会话。 */
|
|
411
480
|
async count() {
|
|
412
481
|
const archived = [...archivedSet()];
|
|
413
482
|
if (archived.length === 0)
|
|
414
483
|
return { count: 0 };
|
|
415
|
-
const snapshots = await
|
|
416
|
-
|
|
417
|
-
let count = 0;
|
|
418
|
-
for (const sessionId of archived)
|
|
419
|
-
if (persisted.has(sessionId))
|
|
420
|
-
count++;
|
|
421
|
-
return { count };
|
|
484
|
+
const snapshots = await snapshotsByIds(archived);
|
|
485
|
+
return { count: snapshots.size };
|
|
422
486
|
},
|
|
423
487
|
/** 列出全部归档会话(存在性过滤:文件已删的幽灵归档记录不显示)。 */
|
|
424
488
|
async list() {
|
|
425
489
|
const archived = [...archivedSet()];
|
|
426
490
|
if (archived.length === 0)
|
|
427
491
|
return { items: [] };
|
|
428
|
-
const snapshots = await
|
|
429
|
-
const byId = new Map(snapshots.map((snapshot) => [snapshot.header.id, snapshot.header]));
|
|
492
|
+
const snapshots = await snapshotsByIds(archived);
|
|
430
493
|
const rows = [];
|
|
431
494
|
for (const sessionId of archived) {
|
|
432
|
-
const
|
|
433
|
-
if (
|
|
495
|
+
const snapshot = snapshots.get(sessionId);
|
|
496
|
+
if (snapshot === undefined)
|
|
434
497
|
continue; // 幽灵 id:会话文件已不存在
|
|
435
|
-
rows.push({ sessionId, header });
|
|
498
|
+
rows.push({ sessionId, header: snapshot.header });
|
|
436
499
|
}
|
|
437
500
|
const items = await limitedConcurrency(cfg.titleReadConcurrency, rows.map(({ sessionId, header }) => () => rowFor(sessionId, header)));
|
|
438
501
|
return { items };
|
|
@@ -444,33 +507,43 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
444
507
|
throw Object.assign(new Error('session not archived: ' + sessionId), { code: 'NOT_ARCHIVED' });
|
|
445
508
|
}
|
|
446
509
|
const id = sessionId;
|
|
447
|
-
|
|
448
|
-
|
|
510
|
+
// 事件流分块消费(readSession 时代 read(0) 一次性物化全部事件):
|
|
511
|
+
// 头从句柄上取,消息逐块提取,达到上限后只计数不再拼接文本;
|
|
512
|
+
// title 事件同趟收集(fold 只消费最后一个,全量物化没有必要)。
|
|
513
|
+
const titleEvents = [];
|
|
449
514
|
const messages = [];
|
|
450
515
|
let totalMessageCount = 0;
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
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
|
+
});
|
|
457
543
|
totalMessageCount++;
|
|
458
|
-
continue;
|
|
459
544
|
}
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
// message 可缺(损坏/异构日志)——detail 是整会话只读端点,一条
|
|
463
|
-
// 畸形事件不应让整个请求 TypeError。
|
|
464
|
-
const text = messageText(event.type === 'user/message' ? event.data.content : event.data.message?.content, cfg.messagePreviewChars);
|
|
465
|
-
if (text.length === 0)
|
|
466
|
-
continue;
|
|
467
|
-
messages.push({
|
|
468
|
-
role: event.type === 'user/message' ? 'user' : 'assistant',
|
|
469
|
-
text,
|
|
470
|
-
time: event.time,
|
|
471
|
-
});
|
|
472
|
-
totalMessageCount++;
|
|
473
|
-
}
|
|
545
|
+
});
|
|
546
|
+
const title = foldSessionTitle(titleEvents)?.title ?? null;
|
|
474
547
|
return {
|
|
475
548
|
sessionId,
|
|
476
549
|
header: {
|
|
@@ -505,12 +578,76 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
505
578
|
const unique = [...new Set(sessionIds)];
|
|
506
579
|
const deleted = [];
|
|
507
580
|
const failed = [];
|
|
508
|
-
// 归档成员前置校验:persistence
|
|
509
|
-
//
|
|
510
|
-
//
|
|
581
|
+
// 归档成员前置校验:persistence 覆盖所有持久化会话而非仅归档会话,
|
|
582
|
+
// 不校验的话任何"未归档、不在内存"的会话 id 都会绕过 live/busy
|
|
583
|
+
// 两道保护被不可逆物理删除。快照只 stat 归档成员:非成员在循环里
|
|
584
|
+
// 前置拒绝,不必查持久层。
|
|
511
585
|
const archived = archivedSet();
|
|
512
|
-
const snapshots = await
|
|
513
|
-
|
|
586
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
587
|
+
/** 常规删除流(located 路径),必须在 exclusive 临界区内调用:
|
|
588
|
+
* TOCTOU 复核 → busy 沉降观察 → rm → 重现复验。 */
|
|
589
|
+
const deleteLocatedFile = async (sessionId, path) => {
|
|
590
|
+
try {
|
|
591
|
+
// TOCTOU 复核:fileInfo 的 stat 是快照,检查与 rm 之间文件可能
|
|
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; });
|
|
596
|
+
if (fresh === null) {
|
|
597
|
+
deleted.push(sessionId);
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
// 生成流兜底:内存中的会话且 mtime 在窗口内,沉降观察一次,文件
|
|
601
|
+
// 仍在增长说明活跃写入方在 append(删除后会把半截日志写回来),
|
|
602
|
+
// 拒绝;体积静止则只是一次性落盘/迁移/flush 刷新过 mtime,照删。
|
|
603
|
+
const inMemory = ctx.sessions.get(sessionId) !== undefined;
|
|
604
|
+
if (inMemory && Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS) {
|
|
605
|
+
const second = await settleStat(path);
|
|
606
|
+
if (second === null) {
|
|
607
|
+
deleted.push(sessionId);
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
610
|
+
if (second.size > fresh.size) {
|
|
611
|
+
failed.push({ sessionId, reason: 'busy' });
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
fresh = second;
|
|
615
|
+
}
|
|
616
|
+
await rm(path, { force: true });
|
|
617
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
618
|
+
// rm 后复验:防宿主 materialize 的 mkdir -p 把路径在删除窗口内重建。
|
|
619
|
+
// 重现只可能来自活跃写入方(内存中的生成流,或刚写完不久、客户端
|
|
620
|
+
// 重连即恢复的 tab)。据此分两档:
|
|
621
|
+
// - 可能活跃(内存存在 或 60s 内有写入):维持原 300ms settle 两段
|
|
622
|
+
// 复验;重现则再删一次,仍未删掉计入 failed('reappeared')。
|
|
623
|
+
// - 冷文件(不在内存且超过 60s 无写入):未来写入需要用户主动继续
|
|
624
|
+
// 对话,不会落在删除窗口内——做零等待的即时复验即可。批量清理
|
|
625
|
+
// 陈旧归档不再为每个文件白付 2×300ms。
|
|
626
|
+
const plausiblyActive = inMemory || Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS;
|
|
627
|
+
const settleMs = plausiblyActive ? REAPPEAR_SETTLE_MS : 0;
|
|
628
|
+
if (await filePresentAfterSettle(path, settleMs)) {
|
|
629
|
+
try {
|
|
630
|
+
await rm(path, { force: true });
|
|
631
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
632
|
+
}
|
|
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)) {
|
|
641
|
+
failed.push({ sessionId, reason: 'reappeared' });
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
deleted.push(sessionId);
|
|
646
|
+
}
|
|
647
|
+
catch (error) {
|
|
648
|
+
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
649
|
+
}
|
|
650
|
+
};
|
|
514
651
|
for (const sessionId of unique) {
|
|
515
652
|
const id = sessionId;
|
|
516
653
|
if (!archived.has(sessionId)) {
|
|
@@ -521,31 +658,50 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
521
658
|
failed.push({ sessionId, reason: 'live' });
|
|
522
659
|
continue;
|
|
523
660
|
}
|
|
524
|
-
if (
|
|
661
|
+
if (snapshots.get(sessionId) === undefined) {
|
|
525
662
|
// ghost id(枚举不到)。"枚举不到 ≠ 文件不存在":首行损坏的日志会被
|
|
526
|
-
// persistence
|
|
527
|
-
//
|
|
528
|
-
//
|
|
529
|
-
//
|
|
530
|
-
//
|
|
663
|
+
// persistence 静默跳过;而 jsonl 后端按 cwd 分目录,ghost 探测没有
|
|
664
|
+
// header、拿不到 cwd,locate 只能探缺省目录(_no-cwd 一类)——既探
|
|
665
|
+
// 不到真实文件,也确认不了缺失。因此 ghost 一律不能当"已删"报成功
|
|
666
|
+
// (0.3.9 谎报成功的同源变体),计入 failed;ghost id 留在归档集合,
|
|
667
|
+
// 由 list() 的存在性过滤隐藏,面板与侧边栏均不可见。
|
|
531
668
|
failed.push({ sessionId, reason: 'unenumerable' });
|
|
532
669
|
continue;
|
|
533
670
|
}
|
|
534
|
-
const header =
|
|
671
|
+
const header = snapshots.get(sessionId).header;
|
|
535
672
|
const file = await fileInfo(header);
|
|
536
673
|
if (file.state === 'unknown') {
|
|
537
674
|
// 文件存在(枚举得到)但无法定位路径:删不得也不该谎报成功。
|
|
538
675
|
failed.push({ sessionId, reason: 'unlocatable' });
|
|
539
676
|
continue;
|
|
540
677
|
}
|
|
678
|
+
// ── 与 unarchive 的 confirm → setState 互斥的删除临界区(exclusive)。
|
|
679
|
+
// rm 及其全部前置判定(含 absent 复核)都在窗口内:unarchive 要么
|
|
680
|
+
// 整体先落地(此处复验归档成员资格失败、拒绝删除),要么整体等删除
|
|
681
|
+
// 完成(confirm 探到 absent、拒绝恢复)——"文件被删的同时归档标记
|
|
682
|
+
// 被移除"的错位不存在。
|
|
541
683
|
if (file.state === 'absent') {
|
|
542
|
-
|
|
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
|
+
});
|
|
543
703
|
continue;
|
|
544
704
|
}
|
|
545
|
-
// ── 与 unarchive 的 confirm → setState 互斥的删除临界区(exclusive)。
|
|
546
|
-
// rm 及其全部前置判定都在窗口内:unarchive 要么整体先落地(此处复验
|
|
547
|
-
// 归档成员资格失败、拒绝删除),要么整体等删除完成(confirm 探到
|
|
548
|
-
// absent、拒绝恢复)——"文件被删的同时归档标记被移除"的错位不存在。
|
|
549
705
|
await exclusive(async () => {
|
|
550
706
|
// 归档成员锁内复验:快照之后、删除之前,unarchive 可能已把 id 移出
|
|
551
707
|
// 集合——删除先行发起也不能清掉刚恢复的会话文件。
|
|
@@ -553,58 +709,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
553
709
|
failed.push({ sessionId, reason: 'not-archived' });
|
|
554
710
|
return;
|
|
555
711
|
}
|
|
556
|
-
|
|
557
|
-
// TOCTOU 复核:fileInfo 的 stat 是快照,检查与 rm 之间文件可能
|
|
558
|
-
// 恰好变化;rm 前重取一次。
|
|
559
|
-
let fresh = await stat(file.path).catch(() => null);
|
|
560
|
-
if (fresh === null) {
|
|
561
|
-
deleted.push(sessionId);
|
|
562
|
-
return;
|
|
563
|
-
}
|
|
564
|
-
// 生成流兜底:内存中的会话且 mtime 在窗口内,沉降观察一次,文件
|
|
565
|
-
// 仍在增长说明活跃写入方在 append(删除后会把半截日志写回来),
|
|
566
|
-
// 拒绝;体积静止则只是一次性落盘/迁移/flush 刷新过 mtime,照删。
|
|
567
|
-
const inMemory = ctx.sessions.get(sessionId) !== undefined;
|
|
568
|
-
if (inMemory && Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS) {
|
|
569
|
-
const second = await settleStat(file.path);
|
|
570
|
-
if (second === null) {
|
|
571
|
-
deleted.push(sessionId);
|
|
572
|
-
return;
|
|
573
|
-
}
|
|
574
|
-
if (second.size > fresh.size) {
|
|
575
|
-
failed.push({ sessionId, reason: 'busy' });
|
|
576
|
-
return;
|
|
577
|
-
}
|
|
578
|
-
fresh = second;
|
|
579
|
-
}
|
|
580
|
-
await rm(file.path, { force: true });
|
|
581
|
-
await removeSessionDirIfOwned(sessionId, file.path, (message) => ctx.logger?.warn?.(message));
|
|
582
|
-
// rm 后复验:防宿主 materialize 的 mkdir -p 把路径在删除窗口内重建。
|
|
583
|
-
// 重现只可能来自活跃写入方(内存中的生成流,或刚写完不久、客户端
|
|
584
|
-
// 重连即恢复的 tab)。据此分两档:
|
|
585
|
-
// - 可能活跃(内存存在 或 60s 内有写入):维持原 300ms settle 两段
|
|
586
|
-
// 复验;重现则再删一次,仍未删掉计入 failed('reappeared')。
|
|
587
|
-
// - 冷文件(不在内存且超过 60s 无写入):未来写入需要用户主动继续
|
|
588
|
-
// 对话,不会落在删除窗口内——做零等待的即时复验即可。批量清理
|
|
589
|
-
// 陈旧归档不再为每个文件白付 2×300ms。
|
|
590
|
-
const plausiblyActive = inMemory || Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS;
|
|
591
|
-
const settleMs = plausiblyActive ? REAPPEAR_SETTLE_MS : 0;
|
|
592
|
-
if (await filePresentAfterSettle(file.path, settleMs)) {
|
|
593
|
-
try {
|
|
594
|
-
await rm(file.path, { force: true });
|
|
595
|
-
await removeSessionDirIfOwned(sessionId, file.path, (message) => ctx.logger?.warn?.(message));
|
|
596
|
-
}
|
|
597
|
-
catch { }
|
|
598
|
-
if (await filePresentAfterSettle(file.path, settleMs)) {
|
|
599
|
-
failed.push({ sessionId, reason: 'reappeared' });
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
deleted.push(sessionId);
|
|
604
|
-
}
|
|
605
|
-
catch (error) {
|
|
606
|
-
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
607
|
-
}
|
|
712
|
+
await deleteLocatedFile(sessionId, file.path);
|
|
608
713
|
});
|
|
609
714
|
}
|
|
610
715
|
return { deleted, failed, removedFromArchive: 0 };
|
|
@@ -613,28 +718,46 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
613
718
|
* 批量恢复归档会话(仅从归档集合移除,会话数据不动)。只恢复仍存在
|
|
614
719
|
* 持久化文件的会话:文件已删的 ghost id(已彻底删除的会话)拒绝恢复,
|
|
615
720
|
* 避免删除后的会话再次出现在侧边栏对话列表。
|
|
721
|
+
*
|
|
722
|
+
* 与 delete 对称的失败语义(failed[].reason):'not-archived' 非归档
|
|
723
|
+
* 成员;'unenumerable' 持久化枚举不到(文件已删/首行损坏);其余为
|
|
724
|
+
* confirm 复核淘汰('not-restorable')或底层错误消息。restored 之外的
|
|
725
|
+
* 每个请求 id 都必须在 failed 里有下落——客户端据此把「已恢复 0 个」
|
|
726
|
+
* 渲染为失败而非成功。
|
|
616
727
|
*/
|
|
617
728
|
async unarchive(sessionIds) {
|
|
618
729
|
const unique = [...new Set(sessionIds)];
|
|
619
|
-
const
|
|
620
|
-
const
|
|
730
|
+
const archived = archivedSet();
|
|
731
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
732
|
+
const failed = [];
|
|
621
733
|
// 锁外先做一遍廉价过滤(明显不可恢复的直接淘汰),锁内由 confirm 复核,
|
|
622
734
|
// 消除与并发 deleteArchived 的检查-移除窗口。
|
|
623
735
|
const candidates = [];
|
|
624
736
|
for (const sessionId of unique) {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
continue;
|
|
628
|
-
|
|
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);
|
|
629
746
|
}
|
|
630
|
-
const restored = await removeFromArchiveSet(candidates
|
|
631
|
-
const
|
|
632
|
-
if (
|
|
747
|
+
const restored = await removeFromArchiveSet(candidates, async (sessionId) => {
|
|
748
|
+
const snapshot = snapshots.get(sessionId);
|
|
749
|
+
if (snapshot === undefined)
|
|
633
750
|
return false;
|
|
634
|
-
const file = await fileInfo(header);
|
|
635
|
-
|
|
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;
|
|
636
759
|
});
|
|
637
|
-
return { restored, removedFromArchive: restored.length };
|
|
760
|
+
return { restored, failed, removedFromArchive: restored.length };
|
|
638
761
|
},
|
|
639
762
|
};
|
|
640
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