@chaoset/session-archive 0.3.12 → 0.3.14-alpha.0
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 +15 -1
- package/README.md +22 -13
- package/client/client.cjs +37 -11
- package/client/index.tsx +43 -15
- package/lib/index.d.ts +26 -14
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +294 -183
- package/lib/index.js.map +1 -1
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.3.
|
|
3
|
+
## 0.3.14-alpha.0 (2026-09-15)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
|
|
7
|
+
* 同步稳定线 0.3.13 的全仓审查修复:count/list/delete/unarchive 改逐 id
|
|
8
|
+
`stat()`(不再全量枚举)、标题/详情事件流分块读取(块长 200,峰值内存
|
|
9
|
+
有界)、unarchive 补 `failed` 语义(unenumerable/not-archived/
|
|
10
|
+
not-restorable)、absent 快速路径纳入 exclusive 临界区、二次 rm 异常
|
|
11
|
+
真实上报、失败原因本地化与部分成功如实提示
|
|
12
|
+
* 跟进 DSH 宿主 0.1.6-alpha.1:归档集合移除改调官方新增的
|
|
13
|
+
`WorkspaceRegistry.unarchiveSession()`,删除此前复用私有写入通道
|
|
14
|
+
(`enqueueOperation` → `requireState` → `setState`)的 hack。新方法不做
|
|
15
|
+
存在性检查、内部串行化写入,因此「文件仍存在」的 confirm 复核仍由本插件
|
|
16
|
+
在调用前完成,并与 `deleteArchived` 经 exclusive 互斥;registry 缺失该
|
|
17
|
+
方法时恢复返回空(列表仍按存在性过滤幽灵 id)
|
|
4
18
|
|
|
5
19
|
### Fixes
|
|
6
20
|
|
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
|
@@ -48,11 +48,12 @@ export interface LocatableSessionPersistence {
|
|
|
48
48
|
*
|
|
49
49
|
* host 端全部逻辑基于官方 service 契约类型(@deepseek-ai/dsh-workspace /
|
|
50
50
|
* dsh-session / dsh-session-persistence / dsh-session-title 的官方 d.ts),
|
|
51
|
-
* 面向 DSH 0.1.
|
|
52
|
-
* 1. list() — archivedSessionIds ∩
|
|
53
|
-
* 每条附带标题(官方 foldSessionTitle
|
|
54
|
-
*
|
|
55
|
-
* live
|
|
51
|
+
* 面向 DSH 0.1.6-alpha 宿主线,不保留旧宿主版本兼容:
|
|
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 会话拒绝;逐个删除持久化文件
|
|
@@ -69,11 +70,13 @@ export interface LocatableSessionPersistence {
|
|
|
69
70
|
* 会话 id(文件已删的 ghost id 拒绝恢复,防止已彻底
|
|
70
71
|
* 删除的会话"复活"回侧边栏);会话数据不动。
|
|
71
72
|
*
|
|
72
|
-
* 归档集合(workspaceRegistry.archivedSessionIds
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
73
|
+
* 归档集合(workspaceRegistry.archivedSessionIds)的移除走官方 API
|
|
74
|
+
* unarchiveSession(DSH 0.1.6 新增;此前只有 archiveSession 方向,本插件
|
|
75
|
+
* 曾复用 registry 私有写入通道 enqueueOperation → requireState → setState,
|
|
76
|
+
* 0.1.6 起已删除该 hack)。官方 unarchiveSession 不做存在性检查、内部串行
|
|
77
|
+
* 化写入,因此"文件仍存在"的复核仍由本插件在调用前完成,并与 deleteArchived
|
|
78
|
+
* 经 exclusive 互斥(见下);若 registry 缺失该方法(旧宿主/残缺 mock),
|
|
79
|
+
* 恢复返回空,归档列表仍以存在性过滤幽灵 id,功能正确。
|
|
77
80
|
*
|
|
78
81
|
* 本文件运行时不依赖任何 dsh 内部包(纯 ESM + ctx.* service + 官方
|
|
79
82
|
* foldSessionTitle 纯函数),可独立安装;官方包仅作为 devDependency 提供
|
|
@@ -98,8 +101,7 @@ export declare const config: {
|
|
|
98
101
|
*/
|
|
99
102
|
export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>): {
|
|
100
103
|
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
101
|
-
*
|
|
102
|
-
* 全事件流解析便宜一个数量级以上。 */
|
|
104
|
+
* 只调这里:逐 id stat 只读元数据头,不枚举全部历史会话。 */
|
|
103
105
|
count(): Promise<{
|
|
104
106
|
count: number;
|
|
105
107
|
}>;
|
|
@@ -122,9 +124,9 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
122
124
|
totalMessageCount: number;
|
|
123
125
|
truncated: boolean;
|
|
124
126
|
messages: {
|
|
125
|
-
role:
|
|
127
|
+
role: 'user' | 'assistant';
|
|
126
128
|
text: string;
|
|
127
|
-
time:
|
|
129
|
+
time: unknown;
|
|
128
130
|
}[];
|
|
129
131
|
live: boolean;
|
|
130
132
|
}>;
|
|
@@ -154,9 +156,19 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
154
156
|
* 批量恢复归档会话(仅从归档集合移除,会话数据不动)。只恢复仍存在
|
|
155
157
|
* 持久化文件的会话:文件已删的 ghost id(已彻底删除的会话)拒绝恢复,
|
|
156
158
|
* 避免删除后的会话再次出现在侧边栏对话列表。
|
|
159
|
+
*
|
|
160
|
+
* 与 delete 对称的失败语义(failed[].reason):'not-archived' 非归档
|
|
161
|
+
* 成员;'unenumerable' 持久化枚举不到(文件已删/首行损坏);其余为
|
|
162
|
+
* confirm 复核淘汰('not-restorable')或底层错误消息。restored 之外的
|
|
163
|
+
* 每个请求 id 都必须在 failed 里有下落——客户端据此把「已恢复 0 个」
|
|
164
|
+
* 渲染为失败而非成功。
|
|
157
165
|
*/
|
|
158
166
|
unarchive(sessionIds: string[]): Promise<{
|
|
159
167
|
restored: string[];
|
|
168
|
+
failed: {
|
|
169
|
+
sessionId: string;
|
|
170
|
+
reason: string;
|
|
171
|
+
}[];
|
|
160
172
|
removedFromArchive: number;
|
|
161
173
|
}>;
|
|
162
174
|
};
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;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;IAqPpE;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
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*
|
|
8
8
|
* host 端全部逻辑基于官方 service 契约类型(@deepseek-ai/dsh-workspace /
|
|
9
9
|
* dsh-session / dsh-session-persistence / dsh-session-title 的官方 d.ts),
|
|
10
|
-
* 面向 DSH 0.1.
|
|
11
|
-
* 1. list() — archivedSessionIds ∩
|
|
12
|
-
* 每条附带标题(官方 foldSessionTitle
|
|
13
|
-
*
|
|
14
|
-
* live
|
|
10
|
+
* 面向 DSH 0.1.6-alpha 宿主线,不保留旧宿主版本兼容:
|
|
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 会话拒绝;逐个删除持久化文件
|
|
@@ -28,11 +29,13 @@
|
|
|
28
29
|
* 会话 id(文件已删的 ghost id 拒绝恢复,防止已彻底
|
|
29
30
|
* 删除的会话"复活"回侧边栏);会话数据不动。
|
|
30
31
|
*
|
|
31
|
-
* 归档集合(workspaceRegistry.archivedSessionIds
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
32
|
+
* 归档集合(workspaceRegistry.archivedSessionIds)的移除走官方 API
|
|
33
|
+
* unarchiveSession(DSH 0.1.6 新增;此前只有 archiveSession 方向,本插件
|
|
34
|
+
* 曾复用 registry 私有写入通道 enqueueOperation → requireState → setState,
|
|
35
|
+
* 0.1.6 起已删除该 hack)。官方 unarchiveSession 不做存在性检查、内部串行
|
|
36
|
+
* 化写入,因此"文件仍存在"的复核仍由本插件在调用前完成,并与 deleteArchived
|
|
37
|
+
* 经 exclusive 互斥(见下);若 registry 缺失该方法(旧宿主/残缺 mock),
|
|
38
|
+
* 恢复返回空,归档列表仍以存在性过滤幽灵 id,功能正确。
|
|
36
39
|
*
|
|
37
40
|
* 本文件运行时不依赖任何 dsh 内部包(纯 ESM + ctx.* service + 官方
|
|
38
41
|
* foldSessionTitle 纯函数),可独立安装;官方包仅作为 devDependency 提供
|
|
@@ -136,20 +139,47 @@ function normalizeConfig(source, defaults = DEFAULT_CONFIG) {
|
|
|
136
139
|
titleReadConcurrency: positiveInt(merged.titleReadConcurrency, defaults.titleReadConcurrency),
|
|
137
140
|
};
|
|
138
141
|
}
|
|
142
|
+
/** 标题/详情分块读取的块长(事件数,官方契约 read(offset,length) 的上界,
|
|
143
|
+
* 超界返回空数组)。此前 read(0) 一次性物化全部事件:大日志下峰值内存
|
|
144
|
+
* O(整条日志)、同步 JSON.parse 集中在宿主事件循环上,面板打开(并发 4 路
|
|
145
|
+
* 标题读)拖慢的是整个宿主而不只是面板;分块后峰值 O(块)。 */
|
|
146
|
+
const READ_CHUNK_EVENTS = 200;
|
|
139
147
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
148
|
+
* 分块遍历一条会话的事件流(升序、全量),每块交给 onChunk 消费后即可弃,
|
|
149
|
+
* 返回句柄上的会话头。用完 close——不 close 会漏句柄。
|
|
142
150
|
*/
|
|
143
|
-
async function
|
|
151
|
+
async function scanSession(persistence, sessionId, onChunk) {
|
|
144
152
|
const handle = await persistence.open(sessionId, 'read');
|
|
145
153
|
try {
|
|
146
|
-
|
|
147
|
-
|
|
154
|
+
for (let offset = 0;; offset += READ_CHUNK_EVENTS) {
|
|
155
|
+
const { events } = await handle.read(offset, READ_CHUNK_EVENTS);
|
|
156
|
+
if (events.length === 0)
|
|
157
|
+
break;
|
|
158
|
+
onChunk(events);
|
|
159
|
+
if (events.length < READ_CHUNK_EVENTS)
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
return handle.header;
|
|
148
163
|
}
|
|
149
164
|
finally {
|
|
150
165
|
await handle.close();
|
|
151
166
|
}
|
|
152
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* 读取会话标题(官方 foldSessionTitle 折叠)。fold 只消费最后一个
|
|
170
|
+
* session/title 事件——只收集 title 事件再折叠,与全量折叠语义一致
|
|
171
|
+
* (latest-wins),内存 O(title 事件数)(正常日志恒为 1)。
|
|
172
|
+
*/
|
|
173
|
+
async function readTitle(persistence, sessionId) {
|
|
174
|
+
const titleEvents = [];
|
|
175
|
+
await scanSession(persistence, sessionId, (events) => {
|
|
176
|
+
for (const event of events) {
|
|
177
|
+
if (event.type === 'session/title')
|
|
178
|
+
titleEvents.push(event);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
return foldSessionTitle(titleEvents)?.title ?? null;
|
|
182
|
+
}
|
|
153
183
|
/** 等待 ms 毫秒(沉降观察、删除窗口用)。 */
|
|
154
184
|
function delay(ms) {
|
|
155
185
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -202,6 +232,41 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
202
232
|
* 因此 live 仅对"内存存在且**未归档**"的会话为真(防将来误用),
|
|
203
233
|
* 归档面板中恒为 false。 */
|
|
204
234
|
const isLive = (sessionId) => ctx.sessions.get(sessionId) !== undefined && !archivedSet().has(sessionId);
|
|
235
|
+
/**
|
|
236
|
+
* 批量查一组 id 的持久化快照,返回 Map(只含枚举得到的 id)。
|
|
237
|
+
*
|
|
238
|
+
* 优先逐 id 走官方契约 stat(id)——只读该会话的元数据头,成本 O(项目目录数)/id;
|
|
239
|
+
* 此前四个端点(count/list/delete/unarchive)都用全量 persistence.list():
|
|
240
|
+
* 枚举实例上**所有**会话(每文件读头)只为挑出几个归档 id,而 count 是
|
|
241
|
+
* 每 5 秒每标签页的徽标轮询端点,实例积累数千历史会话后是持续的全树扫。
|
|
242
|
+
* 枚举不到(stat 返回 undefined 或抛错——jsonl 后端对重复 id 会抛异常)
|
|
243
|
+
* 的 id 不出现在 Map 里,与 list() 时代「不在快照表里」的幽灵语义对齐:
|
|
244
|
+
* list() 同样静默跳过首行损坏的日志;stat 抛错按枚举不到处理方向更保守
|
|
245
|
+
* (删除/恢复一律拒绝)。stat 不在契约上的宿主回退一次全量 list()。
|
|
246
|
+
*/
|
|
247
|
+
async function snapshotsByIds(ids) {
|
|
248
|
+
const result = new Map();
|
|
249
|
+
if (ids.length === 0)
|
|
250
|
+
return result;
|
|
251
|
+
if (typeof persistence.stat !== 'function') {
|
|
252
|
+
const wanted = new Set(ids);
|
|
253
|
+
for (const snapshot of await persistence.list()) {
|
|
254
|
+
if (wanted.has(snapshot.header.id) && !result.has(snapshot.header.id)) {
|
|
255
|
+
result.set(snapshot.header.id, snapshot);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
await limitedConcurrency(8, ids.map((id) => async () => {
|
|
261
|
+
try {
|
|
262
|
+
const snapshot = await persistence.stat(id);
|
|
263
|
+
if (snapshot !== undefined)
|
|
264
|
+
result.set(id, snapshot);
|
|
265
|
+
}
|
|
266
|
+
catch { }
|
|
267
|
+
}));
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
205
270
|
/**
|
|
206
271
|
* 沉降观察:等一个写入沉降窗口后重取文件 stat(null = 文件已消失)。
|
|
207
272
|
* 归档瞬间的生成流兜底用:归档会话会因 web 客户端重连恢复 tab 而长期
|
|
@@ -212,17 +277,22 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
212
277
|
* 沉降窗口内体积必然增长;一次性落盘不会。增长与否由调用点对比前后
|
|
213
278
|
* 两次 stat 的 size 判定。
|
|
214
279
|
*/
|
|
215
|
-
const settleStat = (path) => delay(REAPPEAR_SETTLE_MS).then(() => stat(path).
|
|
280
|
+
const settleStat = (path) => delay(REAPPEAR_SETTLE_MS).then(() => stat(path).then((info) => ({ size: info.size, mtimeMs: info.mtimeMs }),
|
|
281
|
+
// 只有 ENOENT 才是「文件已消失」:EACCES 等错误下把 null 当已消失会
|
|
282
|
+
// 谎报 deleted;上抛交给删除临界区的 catch 以真实原因计入 failed。
|
|
283
|
+
(error) => { if (error?.code === 'ENOENT')
|
|
284
|
+
return null; throw error; }));
|
|
216
285
|
/**
|
|
217
286
|
* delete ↔ unarchive 临界区的互斥串行化(插件闭包内的 promise 链)。
|
|
218
287
|
* 两者的「检查 → 生效」窗口必须互斥,否则并发时会出现两种错位:
|
|
219
288
|
* - unarchive 的 confirm 看到 located → deleteArchived 随后 rm →
|
|
220
|
-
*
|
|
289
|
+
* unarchiveSession 仍把 id 移出归档集合:文件没了、归档标记也没了,内存
|
|
221
290
|
* 会话重回侧边栏(等同误恢复);
|
|
222
291
|
* - 反向:恢复刚落地,先行发起的删除把新恢复会话的文件清掉。
|
|
223
|
-
* registry
|
|
224
|
-
* 不经过它,因此这里自行串行化。
|
|
225
|
-
*
|
|
292
|
+
* registry 的官方写入 API(archiveSession / unarchiveSession)内部自行
|
|
293
|
+
* 串行化归档集合写入,deleteArchived 不经过它,因此这里自行串行化。
|
|
294
|
+
* delete 的临界区与 unarchive 的 confirm → unarchiveSession 段经本链互斥;
|
|
295
|
+
* 本插件不持有 registry 写锁,只串行化自己的"检查 → 生效"窗口,无循环等待。
|
|
226
296
|
*/
|
|
227
297
|
let exclusiveTail = Promise.resolve();
|
|
228
298
|
function exclusive(section) {
|
|
@@ -233,53 +303,38 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
233
303
|
/**
|
|
234
304
|
* 从归档集合移除若干 id(恢复用;删除不调用——见 deleteArchived),返回实际移除的 id。
|
|
235
305
|
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
*
|
|
306
|
+
* 走官方 unarchiveSession(DSH 0.1.6 的公开契约;0.1.5 时代复用私有写入
|
|
307
|
+
* 通道的 hack 已删除)。官方方法不做存在性检查、幂等(未归档的 id 直接
|
|
308
|
+
* resolve),因此:
|
|
309
|
+
* - confirm 在调用前逐个复核 id 是否仍可恢复(文件仍存在);未通过复核
|
|
310
|
+
* 的保持原状(仍是 ghost 或正常归档),不能因为请求过就一并抹掉;
|
|
311
|
+
* - confirm → unarchiveSession 段与 deleteArchived 的删除临界区经
|
|
312
|
+
* exclusive 互斥(见 exclusive)——官方写入串行只挡住其他归档集合
|
|
313
|
+
* 写入者,挡不住不经过它的删除;
|
|
314
|
+
* - registry 缺失该方法(旧宿主/残缺 mock)时返回空:列表按存在性过滤
|
|
315
|
+
* 幽灵 id,功能仍正确。
|
|
245
316
|
*/
|
|
246
317
|
async function removeFromArchiveSet(ids, confirm) {
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
// 用索引签名绕开 private 成员的交叉归约——这是对宿主内部形状的受控依赖。
|
|
250
|
-
const writable = registry;
|
|
251
|
-
const canWrite = typeof writable.enqueueOperation === 'function' &&
|
|
252
|
-
typeof writable.requireState === 'function' &&
|
|
253
|
-
typeof writable.setState === 'function';
|
|
254
|
-
if (!canWrite)
|
|
318
|
+
const unarchiveSession = registry.unarchiveSession;
|
|
319
|
+
if (typeof unarchiveSession !== 'function')
|
|
255
320
|
return []; // 降级:仅删文件,列表按存在性过滤幽灵 id
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const current = [...state.archivedSessionIds];
|
|
260
|
-
let eligible = current.filter((id) => set.has(id));
|
|
261
|
-
// confirm → setState 与 deleteArchived 的删除临界区互斥(见 exclusive)。
|
|
321
|
+
const removedIds = [];
|
|
322
|
+
for (const sessionId of new Set(ids)) {
|
|
323
|
+
// confirm → 移除与 deleteArchived 的删除临界区互斥(见 exclusive)。
|
|
262
324
|
await exclusive(async () => {
|
|
263
325
|
if (confirm !== undefined) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
catch { }
|
|
326
|
+
try {
|
|
327
|
+
if (!(await confirm(sessionId)))
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return;
|
|
271
332
|
}
|
|
272
|
-
eligible = confirmed;
|
|
273
333
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
// 或正常归档),不能因为请求过就一并抹掉。
|
|
277
|
-
const removedSet = new Set(removedIds);
|
|
278
|
-
const remaining = current.filter((id) => !removedSet.has(id));
|
|
279
|
-
if (removedIds.length > 0)
|
|
280
|
-
await writable.setState({ ...state, archivedSessionIds: remaining });
|
|
334
|
+
await unarchiveSession.call(registry, sessionId);
|
|
335
|
+
removedIds.push(sessionId);
|
|
281
336
|
});
|
|
282
|
-
}
|
|
337
|
+
}
|
|
283
338
|
return removedIds;
|
|
284
339
|
}
|
|
285
340
|
/**
|
|
@@ -344,8 +399,9 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
344
399
|
}
|
|
345
400
|
}
|
|
346
401
|
/** 删除后的复验:先等 settleMs 给进行中的写入留出落盘时间,再确认文件没有
|
|
347
|
-
* 被宿主 materialize 的 mkdir -p
|
|
348
|
-
*
|
|
402
|
+
* 被宿主 materialize 的 mkdir -p 整体重建。返回 true 表示文件仍在(重现)。
|
|
403
|
+
* 只有 ENOENT 视为已消失;EACCES 等 stat 错误按「仍在」处理,让上层走
|
|
404
|
+
* 二次删除并以真实错误上报,不谎报 deleted。 */
|
|
349
405
|
async function filePresentAfterSettle(path, settleMs) {
|
|
350
406
|
if (settleMs > 0)
|
|
351
407
|
await delay(settleMs);
|
|
@@ -353,8 +409,10 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
353
409
|
await stat(path);
|
|
354
410
|
return true;
|
|
355
411
|
}
|
|
356
|
-
catch {
|
|
357
|
-
|
|
412
|
+
catch (error) {
|
|
413
|
+
if (error?.code === 'ENOENT')
|
|
414
|
+
return false;
|
|
415
|
+
return true;
|
|
358
416
|
}
|
|
359
417
|
}
|
|
360
418
|
/** 单个归档会话的展示行。标题读取失败回退 null(面板显示目录名)。
|
|
@@ -377,7 +435,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
377
435
|
}
|
|
378
436
|
else {
|
|
379
437
|
try {
|
|
380
|
-
title =
|
|
438
|
+
title = await readTitle(persistence, sessionId);
|
|
381
439
|
}
|
|
382
440
|
catch { }
|
|
383
441
|
if (titleCache.size >= TITLE_CACHE_LIMIT) {
|
|
@@ -390,7 +448,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
390
448
|
}
|
|
391
449
|
else {
|
|
392
450
|
try {
|
|
393
|
-
title =
|
|
451
|
+
title = await readTitle(persistence, sessionId);
|
|
394
452
|
}
|
|
395
453
|
catch { }
|
|
396
454
|
}
|
|
@@ -406,33 +464,26 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
406
464
|
}
|
|
407
465
|
return {
|
|
408
466
|
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
409
|
-
*
|
|
410
|
-
* 全事件流解析便宜一个数量级以上。 */
|
|
467
|
+
* 只调这里:逐 id stat 只读元数据头,不枚举全部历史会话。 */
|
|
411
468
|
async count() {
|
|
412
469
|
const archived = [...archivedSet()];
|
|
413
470
|
if (archived.length === 0)
|
|
414
471
|
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 };
|
|
472
|
+
const snapshots = await snapshotsByIds(archived);
|
|
473
|
+
return { count: snapshots.size };
|
|
422
474
|
},
|
|
423
475
|
/** 列出全部归档会话(存在性过滤:文件已删的幽灵归档记录不显示)。 */
|
|
424
476
|
async list() {
|
|
425
477
|
const archived = [...archivedSet()];
|
|
426
478
|
if (archived.length === 0)
|
|
427
479
|
return { items: [] };
|
|
428
|
-
const snapshots = await
|
|
429
|
-
const byId = new Map(snapshots.map((snapshot) => [snapshot.header.id, snapshot.header]));
|
|
480
|
+
const snapshots = await snapshotsByIds(archived);
|
|
430
481
|
const rows = [];
|
|
431
482
|
for (const sessionId of archived) {
|
|
432
|
-
const
|
|
433
|
-
if (
|
|
483
|
+
const snapshot = snapshots.get(sessionId);
|
|
484
|
+
if (snapshot === undefined)
|
|
434
485
|
continue; // 幽灵 id:会话文件已不存在
|
|
435
|
-
rows.push({ sessionId, header });
|
|
486
|
+
rows.push({ sessionId, header: snapshot.header });
|
|
436
487
|
}
|
|
437
488
|
const items = await limitedConcurrency(cfg.titleReadConcurrency, rows.map(({ sessionId, header }) => () => rowFor(sessionId, header)));
|
|
438
489
|
return { items };
|
|
@@ -444,33 +495,43 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
444
495
|
throw Object.assign(new Error('session not archived: ' + sessionId), { code: 'NOT_ARCHIVED' });
|
|
445
496
|
}
|
|
446
497
|
const id = sessionId;
|
|
447
|
-
|
|
448
|
-
|
|
498
|
+
// 事件流分块消费(readSession 时代 read(0) 一次性物化全部事件):
|
|
499
|
+
// 头从句柄上取,消息逐块提取,达到上限后只计数不再拼接文本;
|
|
500
|
+
// title 事件同趟收集(fold 只消费最后一个,全量物化没有必要)。
|
|
501
|
+
const titleEvents = [];
|
|
449
502
|
const messages = [];
|
|
450
503
|
let totalMessageCount = 0;
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
504
|
+
const meta = await scanSession(persistence, id, (events) => {
|
|
505
|
+
for (const event of events) {
|
|
506
|
+
if (event.type === 'session/title') {
|
|
507
|
+
titleEvents.push(event);
|
|
508
|
+
continue;
|
|
509
|
+
}
|
|
510
|
+
if (event.type !== 'user/message' && event.type !== 'assistant/message')
|
|
511
|
+
continue;
|
|
512
|
+
// 官方事件 data:user/message 是 UserMessage 本体(content 在自身),
|
|
513
|
+
// assistant/message 是包装对象(content 在 .message.content)。
|
|
514
|
+
// message 可缺(损坏/异构日志)——detail 是整会话只读端点,一条
|
|
515
|
+
// 畸形事件不应让整个请求 TypeError。
|
|
516
|
+
const text = messageText(event.type === 'user/message' ? event.data.content : event.data.message?.content, cfg.messagePreviewChars);
|
|
517
|
+
// 空文本消息(纯工具调用等)在任何位置都不计入总数——截断线两侧
|
|
518
|
+
// 口径一致。放在上限判定之前:不提取文本就无法区分空与非空,
|
|
519
|
+
// 提取成本受 messagePreviewChars 上界约束。
|
|
520
|
+
if (text.length === 0)
|
|
521
|
+
continue;
|
|
522
|
+
if (messages.length >= cfg.detailMaxMessages) {
|
|
523
|
+
totalMessageCount++;
|
|
524
|
+
continue;
|
|
525
|
+
}
|
|
526
|
+
messages.push({
|
|
527
|
+
role: event.type === 'user/message' ? 'user' : 'assistant',
|
|
528
|
+
text,
|
|
529
|
+
time: event.time,
|
|
530
|
+
});
|
|
457
531
|
totalMessageCount++;
|
|
458
|
-
continue;
|
|
459
532
|
}
|
|
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
|
-
}
|
|
533
|
+
});
|
|
534
|
+
const title = foldSessionTitle(titleEvents)?.title ?? null;
|
|
474
535
|
return {
|
|
475
536
|
sessionId,
|
|
476
537
|
header: {
|
|
@@ -505,12 +566,76 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
505
566
|
const unique = [...new Set(sessionIds)];
|
|
506
567
|
const deleted = [];
|
|
507
568
|
const failed = [];
|
|
508
|
-
// 归档成员前置校验:persistence
|
|
509
|
-
//
|
|
510
|
-
//
|
|
569
|
+
// 归档成员前置校验:persistence 覆盖所有持久化会话而非仅归档会话,
|
|
570
|
+
// 不校验的话任何"未归档、不在内存"的会话 id 都会绕过 live/busy
|
|
571
|
+
// 两道保护被不可逆物理删除。快照只 stat 归档成员:非成员在循环里
|
|
572
|
+
// 前置拒绝,不必查持久层。
|
|
511
573
|
const archived = archivedSet();
|
|
512
|
-
const snapshots = await
|
|
513
|
-
|
|
574
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
575
|
+
/** 常规删除流(located 路径),必须在 exclusive 临界区内调用:
|
|
576
|
+
* TOCTOU 复核 → busy 沉降观察 → rm → 重现复验。 */
|
|
577
|
+
const deleteLocatedFile = async (sessionId, path) => {
|
|
578
|
+
try {
|
|
579
|
+
// TOCTOU 复核:fileInfo 的 stat 是快照,检查与 rm 之间文件可能
|
|
580
|
+
// 恰好变化;rm 前重取一次。只有 ENOENT 才是「已消失」,其余错误
|
|
581
|
+
// 上抛以真实原因计入 failed。
|
|
582
|
+
let fresh = await stat(path).then((info) => ({ size: info.size, mtimeMs: info.mtimeMs }), (error) => { if (error?.code === 'ENOENT')
|
|
583
|
+
return null; throw error; });
|
|
584
|
+
if (fresh === null) {
|
|
585
|
+
deleted.push(sessionId);
|
|
586
|
+
return;
|
|
587
|
+
}
|
|
588
|
+
// 生成流兜底:内存中的会话且 mtime 在窗口内,沉降观察一次,文件
|
|
589
|
+
// 仍在增长说明活跃写入方在 append(删除后会把半截日志写回来),
|
|
590
|
+
// 拒绝;体积静止则只是一次性落盘/迁移/flush 刷新过 mtime,照删。
|
|
591
|
+
const inMemory = ctx.sessions.get(sessionId) !== undefined;
|
|
592
|
+
if (inMemory && Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS) {
|
|
593
|
+
const second = await settleStat(path);
|
|
594
|
+
if (second === null) {
|
|
595
|
+
deleted.push(sessionId);
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
if (second.size > fresh.size) {
|
|
599
|
+
failed.push({ sessionId, reason: 'busy' });
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
fresh = second;
|
|
603
|
+
}
|
|
604
|
+
await rm(path, { force: true });
|
|
605
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
606
|
+
// rm 后复验:防宿主 materialize 的 mkdir -p 把路径在删除窗口内重建。
|
|
607
|
+
// 重现只可能来自活跃写入方(内存中的生成流,或刚写完不久、客户端
|
|
608
|
+
// 重连即恢复的 tab)。据此分两档:
|
|
609
|
+
// - 可能活跃(内存存在 或 60s 内有写入):维持原 300ms settle 两段
|
|
610
|
+
// 复验;重现则再删一次,仍未删掉计入 failed('reappeared')。
|
|
611
|
+
// - 冷文件(不在内存且超过 60s 无写入):未来写入需要用户主动继续
|
|
612
|
+
// 对话,不会落在删除窗口内——做零等待的即时复验即可。批量清理
|
|
613
|
+
// 陈旧归档不再为每个文件白付 2×300ms。
|
|
614
|
+
const plausiblyActive = inMemory || Date.now() - fresh.mtimeMs < BUSY_WRITE_WINDOW_MS;
|
|
615
|
+
const settleMs = plausiblyActive ? REAPPEAR_SETTLE_MS : 0;
|
|
616
|
+
if (await filePresentAfterSettle(path, settleMs)) {
|
|
617
|
+
try {
|
|
618
|
+
await rm(path, { force: true });
|
|
619
|
+
await removeSessionDirIfOwned(sessionId, path, (message) => ctx.logger?.warn?.(message));
|
|
620
|
+
}
|
|
621
|
+
catch (error) {
|
|
622
|
+
// 二次删除失败必须以真实原因上报:吞掉会让 EPERM/EBUSY 被
|
|
623
|
+
// 误标为 reappeared,把排障方向带偏。
|
|
624
|
+
ctx.logger?.warn?.(`session-archive: second delete failed for ${sessionId}: ${String(error)}`);
|
|
625
|
+
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
if (await filePresentAfterSettle(path, settleMs)) {
|
|
629
|
+
failed.push({ sessionId, reason: 'reappeared' });
|
|
630
|
+
return;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
deleted.push(sessionId);
|
|
634
|
+
}
|
|
635
|
+
catch (error) {
|
|
636
|
+
failed.push({ sessionId, reason: error?.message ?? 'delete-failed' });
|
|
637
|
+
}
|
|
638
|
+
};
|
|
514
639
|
for (const sessionId of unique) {
|
|
515
640
|
const id = sessionId;
|
|
516
641
|
if (!archived.has(sessionId)) {
|
|
@@ -521,31 +646,50 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
521
646
|
failed.push({ sessionId, reason: 'live' });
|
|
522
647
|
continue;
|
|
523
648
|
}
|
|
524
|
-
if (
|
|
649
|
+
if (snapshots.get(sessionId) === undefined) {
|
|
525
650
|
// ghost id(枚举不到)。"枚举不到 ≠ 文件不存在":首行损坏的日志会被
|
|
526
|
-
// persistence
|
|
527
|
-
//
|
|
528
|
-
//
|
|
529
|
-
//
|
|
530
|
-
//
|
|
651
|
+
// persistence 静默跳过;而 jsonl 后端按 cwd 分目录,ghost 探测没有
|
|
652
|
+
// header、拿不到 cwd,locate 只能探缺省目录(_no-cwd 一类)——既探
|
|
653
|
+
// 不到真实文件,也确认不了缺失。因此 ghost 一律不能当"已删"报成功
|
|
654
|
+
// (0.3.9 谎报成功的同源变体),计入 failed;ghost id 留在归档集合,
|
|
655
|
+
// 由 list() 的存在性过滤隐藏,面板与侧边栏均不可见。
|
|
531
656
|
failed.push({ sessionId, reason: 'unenumerable' });
|
|
532
657
|
continue;
|
|
533
658
|
}
|
|
534
|
-
const header =
|
|
659
|
+
const header = snapshots.get(sessionId).header;
|
|
535
660
|
const file = await fileInfo(header);
|
|
536
661
|
if (file.state === 'unknown') {
|
|
537
662
|
// 文件存在(枚举得到)但无法定位路径:删不得也不该谎报成功。
|
|
538
663
|
failed.push({ sessionId, reason: 'unlocatable' });
|
|
539
664
|
continue;
|
|
540
665
|
}
|
|
666
|
+
// ── 与 unarchive 的 confirm → unarchiveSession 互斥的删除临界区(exclusive)。
|
|
667
|
+
// rm 及其全部前置判定(含 absent 复核)都在窗口内:unarchive 要么
|
|
668
|
+
// 整体先落地(此处复验归档成员资格失败、拒绝删除),要么整体等删除
|
|
669
|
+
// 完成(confirm 探到 absent、拒绝恢复)——"文件被删的同时归档标记
|
|
670
|
+
// 被移除"的错位不存在。
|
|
541
671
|
if (file.state === 'absent') {
|
|
542
|
-
|
|
672
|
+
// absent 不是无脑幂等成功:fileInfo 的目录扫描是快照,宿主格式
|
|
673
|
+
// 迁移(写临时文件+rename)的瞬间目录可能扫空,报已删前锁内重扫
|
|
674
|
+
// 一次;重扫发现文件在,转常规删除流。
|
|
675
|
+
await exclusive(async () => {
|
|
676
|
+
if (!archivedSet().has(sessionId)) {
|
|
677
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
const fresh = await fileInfo(header);
|
|
681
|
+
if (fresh.state === 'unknown') {
|
|
682
|
+
failed.push({ sessionId, reason: 'unlocatable' });
|
|
683
|
+
return;
|
|
684
|
+
}
|
|
685
|
+
if (fresh.state === 'absent') {
|
|
686
|
+
deleted.push(sessionId);
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
await deleteLocatedFile(sessionId, fresh.path);
|
|
690
|
+
});
|
|
543
691
|
continue;
|
|
544
692
|
}
|
|
545
|
-
// ── 与 unarchive 的 confirm → setState 互斥的删除临界区(exclusive)。
|
|
546
|
-
// rm 及其全部前置判定都在窗口内:unarchive 要么整体先落地(此处复验
|
|
547
|
-
// 归档成员资格失败、拒绝删除),要么整体等删除完成(confirm 探到
|
|
548
|
-
// absent、拒绝恢复)——"文件被删的同时归档标记被移除"的错位不存在。
|
|
549
693
|
await exclusive(async () => {
|
|
550
694
|
// 归档成员锁内复验:快照之后、删除之前,unarchive 可能已把 id 移出
|
|
551
695
|
// 集合——删除先行发起也不能清掉刚恢复的会话文件。
|
|
@@ -553,58 +697,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
553
697
|
failed.push({ sessionId, reason: 'not-archived' });
|
|
554
698
|
return;
|
|
555
699
|
}
|
|
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
|
-
}
|
|
700
|
+
await deleteLocatedFile(sessionId, file.path);
|
|
608
701
|
});
|
|
609
702
|
}
|
|
610
703
|
return { deleted, failed, removedFromArchive: 0 };
|
|
@@ -613,28 +706,46 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
613
706
|
* 批量恢复归档会话(仅从归档集合移除,会话数据不动)。只恢复仍存在
|
|
614
707
|
* 持久化文件的会话:文件已删的 ghost id(已彻底删除的会话)拒绝恢复,
|
|
615
708
|
* 避免删除后的会话再次出现在侧边栏对话列表。
|
|
709
|
+
*
|
|
710
|
+
* 与 delete 对称的失败语义(failed[].reason):'not-archived' 非归档
|
|
711
|
+
* 成员;'unenumerable' 持久化枚举不到(文件已删/首行损坏);其余为
|
|
712
|
+
* confirm 复核淘汰('not-restorable')或底层错误消息。restored 之外的
|
|
713
|
+
* 每个请求 id 都必须在 failed 里有下落——客户端据此把「已恢复 0 个」
|
|
714
|
+
* 渲染为失败而非成功。
|
|
616
715
|
*/
|
|
617
716
|
async unarchive(sessionIds) {
|
|
618
717
|
const unique = [...new Set(sessionIds)];
|
|
619
|
-
const
|
|
620
|
-
const
|
|
718
|
+
const archived = archivedSet();
|
|
719
|
+
const snapshots = await snapshotsByIds(unique.filter((id) => archived.has(id)));
|
|
720
|
+
const failed = [];
|
|
621
721
|
// 锁外先做一遍廉价过滤(明显不可恢复的直接淘汰),锁内由 confirm 复核,
|
|
622
722
|
// 消除与并发 deleteArchived 的检查-移除窗口。
|
|
623
723
|
const candidates = [];
|
|
624
724
|
for (const sessionId of unique) {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
continue;
|
|
628
|
-
|
|
725
|
+
if (!archived.has(sessionId)) {
|
|
726
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
727
|
+
continue;
|
|
728
|
+
}
|
|
729
|
+
if (snapshots.get(sessionId) === undefined) {
|
|
730
|
+
failed.push({ sessionId, reason: 'unenumerable' }); // 持久化记录已删:拒绝恢复
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
733
|
+
candidates.push(sessionId);
|
|
629
734
|
}
|
|
630
|
-
const restored = await removeFromArchiveSet(candidates
|
|
631
|
-
const
|
|
632
|
-
if (
|
|
735
|
+
const restored = await removeFromArchiveSet(candidates, async (sessionId) => {
|
|
736
|
+
const snapshot = snapshots.get(sessionId);
|
|
737
|
+
if (snapshot === undefined)
|
|
633
738
|
return false;
|
|
634
|
-
const file = await fileInfo(header);
|
|
635
|
-
|
|
739
|
+
const file = await fileInfo(snapshot.header);
|
|
740
|
+
if (file.state !== 'located') {
|
|
741
|
+
// located 才确认文件在:absent(快照后文件消失)/unknown(无法确认)
|
|
742
|
+
// 谨慎拒绝,并如实计入 failed。
|
|
743
|
+
failed.push({ sessionId, reason: 'not-restorable' });
|
|
744
|
+
return false;
|
|
745
|
+
}
|
|
746
|
+
return true;
|
|
636
747
|
});
|
|
637
|
-
return { restored, removedFromArchive: restored.length };
|
|
748
|
+
return { restored, failed, removedFromArchive: restored.length };
|
|
638
749
|
},
|
|
639
750
|
};
|
|
640
751
|
}
|
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chaoset/session-archive",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.14-alpha.0",
|
|
4
4
|
"description": "DSH plugin: browse archived sessions, inspect their content, batch-restore or permanently delete them with multi-select",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22.19.0"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"./package.json": "./package.json"
|
|
24
24
|
},
|
|
25
25
|
"dsh": {
|
|
26
|
-
"host": "0.1.
|
|
26
|
+
"host": "0.1.6-alpha.1",
|
|
27
27
|
"bundle": {
|
|
28
28
|
"patch": "./cordis.patch.yml"
|
|
29
29
|
},
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"optionalDependencies": {
|
|
40
|
-
"@deepseek-ai/dsh-typert-protocol": "^0.1.
|
|
40
|
+
"@deepseek-ai/dsh-typert-protocol": "^0.1.6-alpha.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@deepseek-ai/dsh-scope": "^0.1.
|
|
44
|
-
"@deepseek-ai/dsh-session": "^0.1.
|
|
45
|
-
"@deepseek-ai/dsh-session-persistence": "^0.1.
|
|
46
|
-
"@deepseek-ai/dsh-session-title": "^0.1.
|
|
47
|
-
"@deepseek-ai/dsh-workspace": "^0.1.
|
|
43
|
+
"@deepseek-ai/dsh-scope": "^0.1.6-alpha.1",
|
|
44
|
+
"@deepseek-ai/dsh-session": "^0.1.6-alpha.1",
|
|
45
|
+
"@deepseek-ai/dsh-session-persistence": "^0.1.6-alpha.1",
|
|
46
|
+
"@deepseek-ai/dsh-session-title": "^0.1.6-alpha.1",
|
|
47
|
+
"@deepseek-ai/dsh-workspace": "^0.1.6-alpha.1"
|
|
48
48
|
},
|
|
49
49
|
"repository": {
|
|
50
50
|
"type": "git",
|