@chaoset/session-archive 0.2.2 → 0.2.4
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 +45 -0
- package/README.md +7 -1
- package/client/client.cjs +52 -15
- package/client/index.tsx +75 -14
- package/lib/index.d.ts +16 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +164 -20
- package/lib/index.js.map +1 -1
- package/lib/remote.d.ts +3 -1
- package/lib/remote.d.ts.map +1 -1
- package/lib/remote.js +6 -1
- package/lib/remote.js.map +1 -1
- package/lib/typert.host.d.ts.map +1 -1
- package/lib/typert.host.js +10 -0
- package/lib/typert.host.js.map +1 -1
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.4](https://github.com/winliyou/dsh-plugins) (2026-08-23)
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **RemoteAPI: `SessionArchiveGateway` 缺少 0.2.3 引入的 `count()` 方法认领**——徽标轮询端点实际返回 404(客户端静默吞错,表现为计数不更新);补齐方法与 marker。
|
|
8
|
+
* `detail()` 达到 `detailMaxMessages` 后只递增计数、不再做文本提取;响应新增 `totalMessageCount` 与 `truncated`,客户端如实显示"共 N 条消息(已截断)"而非歧义计数。
|
|
9
|
+
* `deleteArchived` 对 ghost id 先经 `locate()` 探测孤儿文件:首行损坏、被 `persistence.list()` 静默跳过的日志计入 `failed('unenumerable')`,不再谎报成功并把文件留在磁盘上。
|
|
10
|
+
* rm 后约 300ms 复验:文件被进行中的生成流重建则再删一次,仍压不掉计入 `failed('reappeared')`。
|
|
11
|
+
* 客户端:列表浅比较(sessionId+updatedAt+size+live)未变化跳过重渲染;选择集自动剔除已消失项;批量异常提示带请求数量;零体积显示 "—";`detail.messages` 渲染前加形状防御。
|
|
12
|
+
|
|
13
|
+
### Accessibility
|
|
14
|
+
|
|
15
|
+
* 行标题由 span 改为真 button(键盘可达);面板补 `role="dialog"` 与 aria-label;Escape 关闭面板。
|
|
16
|
+
|
|
17
|
+
## [0.2.3](https://github.com/winliyou/dsh-plugins) (2026-08-22)
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* `count()` 轻端点 + 按 mtime 的标题缓存:面板关闭态的徽标轮询不再每 5 秒全量解析归档事件流。
|
|
22
|
+
* 删除失败原因端到端透出(`not-archived` / `busy` 等)。
|
|
23
|
+
* 客户端:成功通知独立样式;删除确认锁定选择集并显示数量;批量失败原因逐条展示;detail 加载失败可重试;复选框 aria-label。
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* `deleteArchived`/`detail` 前置校验归档成员资格:未归档的持久化会话不再可能经远程端点被不可逆删除/读取。
|
|
28
|
+
* busy 判定 TOCTOU:rm 前重取 mtime 复核;unarchive 的存在性确认移入 registry 写锁临界区,并发删除不再能把已删会话"复活"回侧边栏。
|
|
29
|
+
|
|
30
|
+
## [0.2.2](https://github.com/winliyou/dsh-plugins) (2026-08-22)
|
|
31
|
+
|
|
32
|
+
### Dependencies
|
|
33
|
+
|
|
34
|
+
* update @deepseek-ai/* to 0.1.0-rc.8
|
|
35
|
+
|
|
36
|
+
## [0.2.1](https://github.com/winliyou/dsh-plugins) (2026-08-22)
|
|
37
|
+
|
|
38
|
+
### Refactor
|
|
39
|
+
|
|
40
|
+
* republish TypeScript-refactor build output (tsc + esbuild pipeline)
|
|
41
|
+
|
|
42
|
+
## [0.2.0](https://github.com/winliyou/dsh-plugins) (2026-08-21)
|
|
43
|
+
|
|
44
|
+
### Bug Fixes
|
|
45
|
+
|
|
46
|
+
* expanded badge keeps text/icon state aligned with the sidebar wide prop
|
|
47
|
+
|
|
3
48
|
## [0.1.3](https://github.com/winliyou/dsh-plugins) (2026-08-18)
|
|
4
49
|
|
|
5
50
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -51,10 +51,16 @@ dsh plugin --profile web add @chaoset/session-archive
|
|
|
51
51
|
| 方法 | 参数 | 返回 |
|
|
52
52
|
| --- | --- | --- |
|
|
53
53
|
| `list()` | — | `{ items: ArchiveRow[] }` |
|
|
54
|
-
| `
|
|
54
|
+
| `count()` | — | `{ count }`(存在性过滤后的归档数量,徽标轮询轻端点) |
|
|
55
|
+
| `detail(sessionId)` | 会话 id | `{ sessionId, header, title, messageCount, totalMessageCount, truncated, messages, live }` |
|
|
55
56
|
| `delete(sessionIds[])` | id 数组 | `{ deleted, failed, removedFromArchive }` |
|
|
56
57
|
| `unarchive(sessionIds[])` | id 数组 | `{ restored, removedFromArchive }` |
|
|
57
58
|
|
|
59
|
+
> `delete` 的 `failed[].reason`:`not-archived`(非归档成员)、`live`(内存
|
|
60
|
+
> 中未归档会话)、`busy`(归档会话 60s 内仍有写入)、`unenumerable`(文件
|
|
61
|
+
> 存在但持久化枚举不到,如首行损坏的孤儿日志)、`reappeared`(删除后被
|
|
62
|
+
> 生成流重建、二次删除仍压不掉);其余为底层删除错误消息。
|
|
63
|
+
|
|
58
64
|
> `delete` 的 `removedFromArchive` 恒为 0:删除保留归档 ghost id(见上),
|
|
59
65
|
> 侧边栏不会重新显示已删除的会话;`unarchive` 的 `removedFromArchive` 为
|
|
60
66
|
> 实际从归档集合移除的 id 数。
|
package/client/client.cjs
CHANGED
|
@@ -74,10 +74,11 @@ window.__ModuleLoader__.load({
|
|
|
74
74
|
".sa_body{flex:1;min-height:0;padding:4px 12px 12px;overflow-y:auto}",
|
|
75
75
|
".sa_empty{color:var(--dsw-alias-label-tertiary);margin:24px 0;text-align:center;font-size:12px;line-height:18px}",
|
|
76
76
|
".sa_error{color:var(--dsw-alias-state-error-primary);margin:8px 0;font-size:12px;line-height:18px}",
|
|
77
|
+
".sa_ok{color:var(--dsw-alias-state-success-primary);margin:8px 0;font-size:12px;line-height:18px}",
|
|
77
78
|
".sa_rows{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}",
|
|
78
79
|
".sa_row{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);border-radius:12px;flex-direction:column;gap:6px;padding:8px 10px;display:flex}",
|
|
79
80
|
".sa_rowHead{align-items:center;gap:8px;display:flex}",
|
|
80
|
-
".sa_rowTitle{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden;cursor:pointer}",
|
|
81
|
+
".sa_rowTitle{background:none;border:none;padding:0;text-align:left;font:inherit;min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden;cursor:pointer}",
|
|
81
82
|
".sa_rowTitle:hover{text-decoration:underline}",
|
|
82
83
|
".sa_live{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-label);height:18px;border-radius:9px;flex:none;align-items:center;padding:0 6px;font-size:11px;line-height:18px;display:inline-flex}",
|
|
83
84
|
".sa_rowMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;overflow-wrap:anywhere}",
|
|
@@ -127,6 +128,7 @@ window.__ModuleLoader__.load({
|
|
|
127
128
|
user: "\u7528\u6237",
|
|
128
129
|
assistant: "\u52A9\u624B",
|
|
129
130
|
messages: "\u5171 {n} \u6761\u6D88\u606F",
|
|
131
|
+
messagesTruncated: "\u5171 {n} \u6761\u6D88\u606F\uFF08\u5DF2\u622A\u65AD\uFF09",
|
|
130
132
|
noMessages: "\uFF08\u65E0\u6587\u672C\u6D88\u606F\uFF09",
|
|
131
133
|
sizeBytes: "{n} B",
|
|
132
134
|
sizeKB: "{n} KB",
|
|
@@ -159,6 +161,7 @@ window.__ModuleLoader__.load({
|
|
|
159
161
|
user: "User",
|
|
160
162
|
assistant: "Assistant",
|
|
161
163
|
messages: "{n} messages",
|
|
164
|
+
messagesTruncated: "{n}+ messages",
|
|
162
165
|
noMessages: "(no text messages)",
|
|
163
166
|
sizeBytes: "{n} B",
|
|
164
167
|
sizeKB: "{n} KB",
|
|
@@ -166,6 +169,7 @@ window.__ModuleLoader__.load({
|
|
|
166
169
|
runningHint: "Running sessions cannot be deleted; stop them first"
|
|
167
170
|
};
|
|
168
171
|
function formatBytes(bytes, t) {
|
|
172
|
+
if (bytes === void 0 || bytes === null || Number(bytes) === 0) return "\u2014";
|
|
169
173
|
if (bytes < 1024) return t("sizeBytes").replace("{n}", String(bytes));
|
|
170
174
|
if (bytes < 1024 * 1024) return t("sizeKB").replace("{n}", (bytes / 1024).toFixed(1));
|
|
171
175
|
return t("sizeMB").replace("{n}", (bytes / (1024 * 1024)).toFixed(1));
|
|
@@ -180,6 +184,16 @@ window.__ModuleLoader__.load({
|
|
|
180
184
|
function shortId(id) {
|
|
181
185
|
return id.length > 12 ? id.slice(0, 12) + "\u2026" : id;
|
|
182
186
|
}
|
|
187
|
+
function sameItems(a, b) {
|
|
188
|
+
if (a.length !== b.length) return false;
|
|
189
|
+
for (let i = 0; i < a.length; i++) {
|
|
190
|
+
const x = a[i], y = b[i];
|
|
191
|
+
if (x === y) continue;
|
|
192
|
+
if (x === void 0 || y === void 0) return false;
|
|
193
|
+
if (x.sessionId !== y.sessionId || x.updatedAt !== y.updatedAt || x.size !== y.size || x.live !== y.live) return false;
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
183
197
|
function ArchivePanel(props) {
|
|
184
198
|
const t = props.t;
|
|
185
199
|
const call = props.call;
|
|
@@ -217,7 +231,13 @@ window.__ModuleLoader__.load({
|
|
|
217
231
|
setError(null);
|
|
218
232
|
try {
|
|
219
233
|
const result = await call("list");
|
|
220
|
-
|
|
234
|
+
const next = Array.isArray(result.items) ? result.items : [];
|
|
235
|
+
setItems((current) => sameItems(current, next) ? current : next);
|
|
236
|
+
const nextIds = new Set(next.map((item) => item.sessionId));
|
|
237
|
+
setSelected((currentSelected) => {
|
|
238
|
+
const pruned = [...currentSelected].filter((id) => nextIds.has(id));
|
|
239
|
+
return pruned.length === currentSelected.size ? currentSelected : new Set(pruned);
|
|
240
|
+
});
|
|
221
241
|
} catch (loadError) {
|
|
222
242
|
setError(t("loadFailed") + ": " + (loadError && loadError.message || loadError));
|
|
223
243
|
} finally {
|
|
@@ -230,10 +250,11 @@ window.__ModuleLoader__.load({
|
|
|
230
250
|
load();
|
|
231
251
|
}
|
|
232
252
|
}, [open, load]);
|
|
253
|
+
const [badgeCount, setBadgeCount] = React.useState(0);
|
|
233
254
|
const refreshSilently = React.useCallback(async () => {
|
|
234
255
|
try {
|
|
235
|
-
const result = await call("
|
|
236
|
-
|
|
256
|
+
const result = await call("count");
|
|
257
|
+
setBadgeCount(typeof result.count === "number" ? result.count : 0);
|
|
237
258
|
} catch {
|
|
238
259
|
}
|
|
239
260
|
}, [call]);
|
|
@@ -265,6 +286,14 @@ window.__ModuleLoader__.load({
|
|
|
265
286
|
document.addEventListener("pointerdown", onPointerDown);
|
|
266
287
|
return () => document.removeEventListener("pointerdown", onPointerDown);
|
|
267
288
|
}, [open]);
|
|
289
|
+
React.useEffect(() => {
|
|
290
|
+
if (!open) return;
|
|
291
|
+
const onKeyDown = (event) => {
|
|
292
|
+
if (event.key === "Escape") setOpen(false);
|
|
293
|
+
};
|
|
294
|
+
document.addEventListener("keydown", onKeyDown);
|
|
295
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
296
|
+
}, [open]);
|
|
268
297
|
const selectable = items.filter((item) => !item.live);
|
|
269
298
|
const allSelected = selectable.length > 0 && selectable.every((item) => selected.has(item.sessionId));
|
|
270
299
|
const toggleAll = (checked) => {
|
|
@@ -273,6 +302,7 @@ window.__ModuleLoader__.load({
|
|
|
273
302
|
} else {
|
|
274
303
|
setSelected(/* @__PURE__ */ new Set());
|
|
275
304
|
}
|
|
305
|
+
setConfirmingDelete(false);
|
|
276
306
|
};
|
|
277
307
|
const toggleOne = (sessionId, checked) => {
|
|
278
308
|
setSelected((current) => {
|
|
@@ -281,6 +311,7 @@ window.__ModuleLoader__.load({
|
|
|
281
311
|
else next.delete(sessionId);
|
|
282
312
|
return next;
|
|
283
313
|
});
|
|
314
|
+
setConfirmingDelete(false);
|
|
284
315
|
};
|
|
285
316
|
const toggleDetail = (item) => {
|
|
286
317
|
if (expanded === item.sessionId) {
|
|
@@ -288,7 +319,8 @@ window.__ModuleLoader__.load({
|
|
|
288
319
|
return;
|
|
289
320
|
}
|
|
290
321
|
setExpanded(item.sessionId);
|
|
291
|
-
|
|
322
|
+
const cached = details.get(item.sessionId);
|
|
323
|
+
if (cached === void 0 || cached.error !== void 0) {
|
|
292
324
|
setDetailLoading((current) => new Set(current).add(item.sessionId));
|
|
293
325
|
call("detail", item.sessionId).then((detail) => {
|
|
294
326
|
setDetails((current) => new Map(current).set(item.sessionId, detail));
|
|
@@ -318,7 +350,10 @@ window.__ModuleLoader__.load({
|
|
|
318
350
|
const doneIds = result.deleted || result.restored || [];
|
|
319
351
|
const n = doneIds.length;
|
|
320
352
|
if (result.failed && result.failed.length > 0) {
|
|
321
|
-
|
|
353
|
+
const reasonText = (reason) => reason === "live" ? t("live") : reason === "busy" ? t("runningHint") : String(reason ?? "error");
|
|
354
|
+
const detail = result.failed.slice(0, 3).map((item) => shortId(item.sessionId) + ": " + reasonText(item.reason)).join("; ");
|
|
355
|
+
const more = result.failed.length > 3 ? " (+" + (result.failed.length - 3) + ")" : "";
|
|
356
|
+
setNotice({ kind: "error", text: t(failKey).replace("{n}", String(result.failed.length)) + " \u2014 " + detail + more });
|
|
322
357
|
} else {
|
|
323
358
|
setNotice({ kind: "ok", text: t(doneKey).replace("{n}", String(n)) });
|
|
324
359
|
}
|
|
@@ -330,7 +365,7 @@ window.__ModuleLoader__.load({
|
|
|
330
365
|
setConfirmingDelete(false);
|
|
331
366
|
await load();
|
|
332
367
|
} catch (actionError) {
|
|
333
|
-
setNotice({ kind: "error", text: t(failKey).replace("{n}",
|
|
368
|
+
setNotice({ kind: "error", text: t(failKey).replace("{n}", String(ids.length)) + ": " + (actionError && actionError.message || actionError) });
|
|
334
369
|
} finally {
|
|
335
370
|
setBusy(false);
|
|
336
371
|
}
|
|
@@ -370,11 +405,11 @@ window.__ModuleLoader__.load({
|
|
|
370
405
|
)
|
|
371
406
|
),
|
|
372
407
|
iconOnly ? null : React.createElement("span", { className: "sa_badgeLabel" }, t("badge")),
|
|
373
|
-
iconOnly ? null : React.createElement("span", { className: "sa_badgeCount" }, String(items.length))
|
|
408
|
+
iconOnly ? null : React.createElement("span", { className: "sa_badgeCount" }, String(open ? items.length : badgeCount))
|
|
374
409
|
),
|
|
375
410
|
open ? React.createElement(
|
|
376
411
|
"div",
|
|
377
|
-
{ className: "sa_panel" },
|
|
412
|
+
{ className: "sa_panel", role: "dialog", "aria-label": t("panelTitle") },
|
|
378
413
|
React.createElement(
|
|
379
414
|
"div",
|
|
380
415
|
{ className: "sa_header" },
|
|
@@ -413,12 +448,12 @@ window.__ModuleLoader__.load({
|
|
|
413
448
|
type: "button",
|
|
414
449
|
disabled: busy || !hasSelection,
|
|
415
450
|
onClick: deleteSelected
|
|
416
|
-
}, confirmingDelete ? t("deleteConfirm") : t("delete"))
|
|
451
|
+
}, confirmingDelete ? selected.size > 1 ? t("confirmAll").replace("{n}", String(selected.size)) : t("deleteConfirm") : t("delete"))
|
|
417
452
|
),
|
|
418
453
|
React.createElement(
|
|
419
454
|
"div",
|
|
420
455
|
{ className: "sa_body" },
|
|
421
|
-
notice !== null ? React.createElement("p", { className:
|
|
456
|
+
notice !== null ? React.createElement("p", { className: notice.kind === "ok" ? "sa_ok" : "sa_error", role: "status" }, notice.text) : null,
|
|
422
457
|
error !== null ? React.createElement("p", { className: "sa_error", role: "alert" }, error) : null,
|
|
423
458
|
loading && items.length === 0 ? React.createElement("p", { className: "sa_empty" }, "\u2026") : null,
|
|
424
459
|
!loading && items.length === 0 && error === null ? React.createElement("p", { className: "sa_empty" }, t("empty")) : null,
|
|
@@ -441,11 +476,12 @@ window.__ModuleLoader__.load({
|
|
|
441
476
|
checked: selected.has(item.sessionId),
|
|
442
477
|
disabled: busy || item.live,
|
|
443
478
|
title: item.live ? t("runningHint") : void 0,
|
|
479
|
+
"aria-label": item.title !== null && item.title !== void 0 && item.title !== "" ? item.title : t("noneTitle"),
|
|
444
480
|
onChange: (e) => toggleOne(item.sessionId, e.target.checked)
|
|
445
481
|
}),
|
|
446
482
|
React.createElement(
|
|
447
|
-
"
|
|
448
|
-
{ className: "sa_rowTitle", onClick: () => toggleDetail(item), title: t("view") },
|
|
483
|
+
"button",
|
|
484
|
+
{ className: "sa_rowTitle", type: "button", onClick: () => toggleDetail(item), title: t("view") },
|
|
449
485
|
item.title !== null && item.title !== void 0 && item.title !== "" ? item.title : t("noneTitle")
|
|
450
486
|
),
|
|
451
487
|
item.live ? React.createElement("span", { className: "sa_live" }, t("live")) : null
|
|
@@ -464,7 +500,7 @@ window.__ModuleLoader__.load({
|
|
|
464
500
|
"span",
|
|
465
501
|
{ className: "sa_rowMeta" },
|
|
466
502
|
React.createElement("code", null, shortId(item.sessionId)),
|
|
467
|
-
detail !== void 0 && !detail.error && detail.messageCount !== void 0 ? " \xB7 " + t("messages").replace("{n}", String(detail.messageCount)) : null
|
|
503
|
+
detail !== void 0 && !detail.error && detail.messageCount !== void 0 ? " \xB7 " + (detail.truncated === true ? t("messagesTruncated").replace("{n}", String(detail.totalMessageCount !== void 0 ? detail.totalMessageCount : detail.messageCount)) : t("messages").replace("{n}", String(detail.messageCount))) : null
|
|
468
504
|
),
|
|
469
505
|
React.createElement(
|
|
470
506
|
"div",
|
|
@@ -481,7 +517,7 @@ window.__ModuleLoader__.load({
|
|
|
481
517
|
"div",
|
|
482
518
|
{ className: "sa_detail" },
|
|
483
519
|
detailPending ? React.createElement("p", { className: "sa_empty" }, "\u2026") : null,
|
|
484
|
-
detail === void 0 ? null : detail.error !== void 0 ? React.createElement("p", { className: "sa_error" }, detail.error) : detail.messages.length === 0 ? React.createElement("p", { className: "sa_empty" }, t("noMessages")) : detail.messages.map((message, index) => React.createElement(
|
|
520
|
+
detail === void 0 ? null : detail.error !== void 0 ? React.createElement("p", { className: "sa_error" }, detail.error) : !Array.isArray(detail.messages) ? React.createElement("p", { className: "sa_error" }, t("detailLoadFailed")) : detail.messages.length === 0 ? React.createElement("p", { className: "sa_empty" }, t("noMessages")) : detail.messages.map((message, index) => React.createElement(
|
|
485
521
|
"div",
|
|
486
522
|
{ className: "sa_msg", key: index },
|
|
487
523
|
React.createElement("span", { className: "sa_msgRole" }, message.role === "user" ? t("user") : t("assistant") + " \xB7 " + formatTime(message.time)),
|
|
@@ -501,6 +537,7 @@ window.__ModuleLoader__.load({
|
|
|
501
537
|
package: "@chaoset/session-archive",
|
|
502
538
|
descriptors: [
|
|
503
539
|
{ id: "@chaoset/session-archive#sessionArchive/list", service: "sessionArchive", namespace: "sessionArchive", method: "list", invocation: { kind: "direct" }, parameters: [], result: { mode: "strict", typeSymbol: "sessionArchive/list:result", schema: passthroughSchema } },
|
|
540
|
+
{ id: "@chaoset/session-archive#sessionArchive/count", service: "sessionArchive", namespace: "sessionArchive", method: "count", invocation: { kind: "direct" }, parameters: [], result: { mode: "strict", typeSymbol: "sessionArchive/count:result", schema: passthroughSchema } },
|
|
504
541
|
{ id: "@chaoset/session-archive#sessionArchive/detail", service: "sessionArchive", namespace: "sessionArchive", method: "detail", invocation: { kind: "direct" }, parameters: [{ name: "sessionId", wire: "sessionId", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/detail:sessionId", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/detail:result", schema: passthroughSchema } },
|
|
505
542
|
{ id: "@chaoset/session-archive#sessionArchive/delete", service: "sessionArchive", namespace: "sessionArchive", method: "delete", invocation: { kind: "direct" }, parameters: [{ name: "sessionIds", wire: "sessionIds", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/delete:sessionIds", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/delete:result", schema: passthroughSchema } },
|
|
506
543
|
{ id: "@chaoset/session-archive#sessionArchive/unarchive", service: "sessionArchive", namespace: "sessionArchive", method: "unarchive", invocation: { kind: "direct" }, parameters: [{ name: "sessionIds", wire: "sessionIds", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/unarchive:sessionIds", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/unarchive:result", schema: passthroughSchema } }
|
package/client/index.tsx
CHANGED
|
@@ -36,10 +36,11 @@ var css = [
|
|
|
36
36
|
".sa_body{flex:1;min-height:0;padding:4px 12px 12px;overflow-y:auto}",
|
|
37
37
|
".sa_empty{color:var(--dsw-alias-label-tertiary);margin:24px 0;text-align:center;font-size:12px;line-height:18px}",
|
|
38
38
|
".sa_error{color:var(--dsw-alias-state-error-primary);margin:8px 0;font-size:12px;line-height:18px}",
|
|
39
|
+
".sa_ok{color:var(--dsw-alias-state-success-primary);margin:8px 0;font-size:12px;line-height:18px}",
|
|
39
40
|
".sa_rows{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}",
|
|
40
41
|
".sa_row{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);border-radius:12px;flex-direction:column;gap:6px;padding:8px 10px;display:flex}",
|
|
41
42
|
".sa_rowHead{align-items:center;gap:8px;display:flex}",
|
|
42
|
-
".sa_rowTitle{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden;cursor:pointer}",
|
|
43
|
+
".sa_rowTitle{background:none;border:none;padding:0;text-align:left;font:inherit;min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:500;line-height:20px;overflow:hidden;cursor:pointer}",
|
|
43
44
|
".sa_rowTitle:hover{text-decoration:underline}",
|
|
44
45
|
".sa_live{background:var(--dsw-alias-state-warn-tertiary);color:var(--dsw-alias-state-warn-label);height:18px;border-radius:9px;flex:none;align-items:center;padding:0 6px;font-size:11px;line-height:18px;display:inline-flex}",
|
|
45
46
|
".sa_rowMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;overflow-wrap:anywhere}",
|
|
@@ -90,6 +91,7 @@ const zh = {
|
|
|
90
91
|
user: "用户",
|
|
91
92
|
assistant: "助手",
|
|
92
93
|
messages: "共 {n} 条消息",
|
|
94
|
+
messagesTruncated: "共 {n} 条消息(已截断)",
|
|
93
95
|
noMessages: "(无文本消息)",
|
|
94
96
|
sizeBytes: "{n} B",
|
|
95
97
|
sizeKB: "{n} KB",
|
|
@@ -122,6 +124,7 @@ const en = {
|
|
|
122
124
|
user: "User",
|
|
123
125
|
assistant: "Assistant",
|
|
124
126
|
messages: "{n} messages",
|
|
127
|
+
messagesTruncated: "{n}+ messages",
|
|
125
128
|
noMessages: "(no text messages)",
|
|
126
129
|
sizeBytes: "{n} B",
|
|
127
130
|
sizeKB: "{n} KB",
|
|
@@ -131,6 +134,8 @@ const en = {
|
|
|
131
134
|
|
|
132
135
|
// ── 工具函数 ─────────────────────────────────────────────────────────
|
|
133
136
|
function formatBytes(bytes: any, t: any) {
|
|
137
|
+
// 0/缺失(文件已不可 stat)显示占位符,避免误导性的 "0 B"。
|
|
138
|
+
if (bytes === void 0 || bytes === null || Number(bytes) === 0) return "—";
|
|
134
139
|
if (bytes < 1024) return t("sizeBytes").replace("{n}", String(bytes));
|
|
135
140
|
if (bytes < 1024 * 1024) return t("sizeKB").replace("{n}", (bytes / 1024).toFixed(1));
|
|
136
141
|
return t("sizeMB").replace("{n}", (bytes / (1024 * 1024)).toFixed(1));
|
|
@@ -141,6 +146,18 @@ function formatTime(ms: any) {
|
|
|
141
146
|
function shortId(id: any) {
|
|
142
147
|
return id.length > 12 ? id.slice(0, 12) + "…" : id;
|
|
143
148
|
}
|
|
149
|
+
// 列表浅比较(sessionId+updatedAt+size+live):数据没变就不 setItems,
|
|
150
|
+
// 静默刷新/重复刷新不再触发整表 reconcile。
|
|
151
|
+
function sameItems(a: any[], b: any[]) {
|
|
152
|
+
if (a.length !== b.length) return false;
|
|
153
|
+
for (let i = 0; i < a.length; i++) {
|
|
154
|
+
const x = a[i], y = b[i];
|
|
155
|
+
if (x === y) continue;
|
|
156
|
+
if (x === void 0 || y === void 0) return false;
|
|
157
|
+
if (x.sessionId !== y.sessionId || x.updatedAt !== y.updatedAt || x.size !== y.size || x.live !== y.live) return false;
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
144
161
|
|
|
145
162
|
// ── 归档面板 ─────────────────────────────────────────────────────────
|
|
146
163
|
function ArchivePanel(props: any) {
|
|
@@ -186,7 +203,15 @@ function ArchivePanel(props: any) {
|
|
|
186
203
|
setError(null);
|
|
187
204
|
try {
|
|
188
205
|
const result = await call("list");
|
|
189
|
-
|
|
206
|
+
const next = Array.isArray(result.items) ? result.items : [];
|
|
207
|
+
setItems((current) => (sameItems(current, next) ? current : next));
|
|
208
|
+
// 选择集剔除已从列表消失的 id:残留勾选会让"已选 N 项"虚高,
|
|
209
|
+
// 还可能把幽灵 id 发给批量操作(host 有幂等兜底,但不该依赖它)。
|
|
210
|
+
const nextIds = new Set(next.map((item: any) => item.sessionId));
|
|
211
|
+
setSelected((currentSelected) => {
|
|
212
|
+
const pruned = [...currentSelected].filter((id) => nextIds.has(id));
|
|
213
|
+
return pruned.length === currentSelected.size ? currentSelected : new Set(pruned);
|
|
214
|
+
});
|
|
190
215
|
} catch (loadError: any) {
|
|
191
216
|
setError(t("loadFailed") + ": " + (loadError && loadError.message || loadError));
|
|
192
217
|
} finally {
|
|
@@ -201,10 +226,13 @@ function ArchivePanel(props: any) {
|
|
|
201
226
|
// 后台静默刷新归档计数:侧边栏徽标要在「聊天列表里出现归档」时就同步显示数量,
|
|
202
227
|
// 而不是等到打开弹窗才更新。面板打开时由上面的 load() 负责,这里只在关闭态轮询,
|
|
203
228
|
// 避免刷新打断用户在面板里的勾选/操作;同时监听标签页重新可见。
|
|
229
|
+
// 关闭态走 count() 轻端点:list() 要解析每个归档会话的完整事件流,
|
|
230
|
+
// 5 秒一次的徽标轮询用它是持续的性能债;count 只读每个文件的首行头。
|
|
231
|
+
const [badgeCount, setBadgeCount] = React.useState(0);
|
|
204
232
|
const refreshSilently = React.useCallback(async () => {
|
|
205
233
|
try {
|
|
206
|
-
const result = await call("
|
|
207
|
-
|
|
234
|
+
const result = await call("count");
|
|
235
|
+
setBadgeCount(typeof result.count === "number" ? result.count : 0);
|
|
208
236
|
} catch {}
|
|
209
237
|
}, [call]);
|
|
210
238
|
React.useEffect(() => {
|
|
@@ -235,6 +263,16 @@ function ArchivePanel(props: any) {
|
|
|
235
263
|
return () => document.removeEventListener("pointerdown", onPointerDown);
|
|
236
264
|
}, [open]);
|
|
237
265
|
|
|
266
|
+
// Esc 关闭面板(仅 open 时监听):对话框惯例,键盘用户此前只能找 ✕。
|
|
267
|
+
React.useEffect(() => {
|
|
268
|
+
if (!open) return;
|
|
269
|
+
const onKeyDown = (event: any) => {
|
|
270
|
+
if (event.key === "Escape") setOpen(false);
|
|
271
|
+
};
|
|
272
|
+
document.addEventListener("keydown", onKeyDown);
|
|
273
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
274
|
+
}, [open]);
|
|
275
|
+
|
|
238
276
|
const selectable = items.filter((item) => !item.live);
|
|
239
277
|
const allSelected = selectable.length > 0 && selectable.every((item) => selected.has(item.sessionId));
|
|
240
278
|
|
|
@@ -244,6 +282,9 @@ function ArchivePanel(props: any) {
|
|
|
244
282
|
} else {
|
|
245
283
|
setSelected(new Set());
|
|
246
284
|
}
|
|
285
|
+
// 选择集变化即解除两段式删除的 armed 态:否则 4 秒窗口内改勾选,
|
|
286
|
+
// 第二次点击会把确认"误嫁"给新的选择集。
|
|
287
|
+
setConfirmingDelete(false);
|
|
247
288
|
};
|
|
248
289
|
const toggleOne = (sessionId: any, checked: any) => {
|
|
249
290
|
setSelected((current) => {
|
|
@@ -251,6 +292,7 @@ function ArchivePanel(props: any) {
|
|
|
251
292
|
if (checked) next.add(sessionId); else next.delete(sessionId);
|
|
252
293
|
return next;
|
|
253
294
|
});
|
|
295
|
+
setConfirmingDelete(false);
|
|
254
296
|
};
|
|
255
297
|
|
|
256
298
|
const toggleDetail = (item: any) => {
|
|
@@ -259,7 +301,10 @@ function ArchivePanel(props: any) {
|
|
|
259
301
|
return;
|
|
260
302
|
}
|
|
261
303
|
setExpanded(item.sessionId);
|
|
262
|
-
|
|
304
|
+
const cached = details.get(item.sessionId);
|
|
305
|
+
// 失败结果不缓存拦截:之前把 {error} 写进 Map 后 has() 恒真,唯一出路是
|
|
306
|
+
// 刷新页面;现在再次点击即重新请求。
|
|
307
|
+
if (cached === void 0 || cached.error !== void 0) {
|
|
263
308
|
setDetailLoading((current) => new Set(current).add(item.sessionId));
|
|
264
309
|
call("detail", item.sessionId).then((detail: any) => {
|
|
265
310
|
setDetails((current) => new Map(current).set(item.sessionId, detail));
|
|
@@ -290,7 +335,15 @@ function ArchivePanel(props: any) {
|
|
|
290
335
|
const doneIds = result.deleted || result.restored || [];
|
|
291
336
|
const n = doneIds.length;
|
|
292
337
|
if (result.failed && result.failed.length > 0) {
|
|
293
|
-
|
|
338
|
+
// host 对每个失败项都给了 reason(live/busy/not-archived/具体错误),
|
|
339
|
+
// 只报数量会让用户不知道为什么失败、该等多久重试。
|
|
340
|
+
const reasonText = (reason: any) =>
|
|
341
|
+
reason === "live" ? t("live") : reason === "busy" ? t("runningHint") : String(reason ?? "error");
|
|
342
|
+
const detail = result.failed.slice(0, 3)
|
|
343
|
+
.map((item: any) => shortId(item.sessionId) + ": " + reasonText(item.reason))
|
|
344
|
+
.join("; ");
|
|
345
|
+
const more = result.failed.length > 3 ? " (+" + (result.failed.length - 3) + ")" : "";
|
|
346
|
+
setNotice({ kind: "error", text: t(failKey).replace("{n}", String(result.failed.length)) + " — " + detail + more });
|
|
294
347
|
} else {
|
|
295
348
|
setNotice({ kind: "ok", text: t(doneKey).replace("{n}", String(n)) });
|
|
296
349
|
}
|
|
@@ -302,7 +355,8 @@ function ArchivePanel(props: any) {
|
|
|
302
355
|
setConfirmingDelete(false);
|
|
303
356
|
await load();
|
|
304
357
|
} catch (actionError: any) {
|
|
305
|
-
|
|
358
|
+
// 异常分支同样带数量:用请求发出时的 ids.length,不用无意义的 "?"。
|
|
359
|
+
setNotice({ kind: "error", text: t(failKey).replace("{n}", String(ids.length)) + ": " + (actionError && actionError.message || actionError) });
|
|
306
360
|
} finally {
|
|
307
361
|
setBusy(false);
|
|
308
362
|
}
|
|
@@ -340,11 +394,11 @@ function ArchivePanel(props: any) {
|
|
|
340
394
|
)
|
|
341
395
|
),
|
|
342
396
|
iconOnly ? null : React.createElement("span", { className: "sa_badgeLabel" }, t("badge")),
|
|
343
|
-
iconOnly ? null : React.createElement("span", { className: "sa_badgeCount" }, String(items.length))
|
|
397
|
+
iconOnly ? null : React.createElement("span", { className: "sa_badgeCount" }, String(open ? items.length : badgeCount))
|
|
344
398
|
),
|
|
345
399
|
open ? React.createElement(
|
|
346
400
|
"div",
|
|
347
|
-
{ className: "sa_panel" },
|
|
401
|
+
{ className: "sa_panel", role: "dialog", "aria-label": t("panelTitle") },
|
|
348
402
|
React.createElement(
|
|
349
403
|
"div",
|
|
350
404
|
{ className: "sa_header" },
|
|
@@ -381,12 +435,14 @@ function ArchivePanel(props: any) {
|
|
|
381
435
|
type: "button",
|
|
382
436
|
disabled: busy || !hasSelection,
|
|
383
437
|
onClick: deleteSelected
|
|
384
|
-
}, confirmingDelete
|
|
438
|
+
}, confirmingDelete
|
|
439
|
+
? (selected.size > 1 ? t("confirmAll").replace("{n}", String(selected.size)) : t("deleteConfirm"))
|
|
440
|
+
: t("delete"))
|
|
385
441
|
),
|
|
386
442
|
React.createElement(
|
|
387
443
|
"div",
|
|
388
444
|
{ className: "sa_body" },
|
|
389
|
-
notice !== null ? React.createElement("p", { className:
|
|
445
|
+
notice !== null ? React.createElement("p", { className: notice.kind === "ok" ? "sa_ok" : "sa_error", role: "status" }, notice.text) : null,
|
|
390
446
|
error !== null ? React.createElement("p", { className: "sa_error", role: "alert" }, error) : null,
|
|
391
447
|
loading && items.length === 0 ? React.createElement("p", { className: "sa_empty" }, "…") : null,
|
|
392
448
|
!loading && items.length === 0 && error === null ? React.createElement("p", { className: "sa_empty" }, t("empty")) : null,
|
|
@@ -409,11 +465,12 @@ function ArchivePanel(props: any) {
|
|
|
409
465
|
checked: selected.has(item.sessionId),
|
|
410
466
|
disabled: busy || item.live,
|
|
411
467
|
title: item.live ? t("runningHint") : void 0,
|
|
468
|
+
"aria-label": item.title !== null && item.title !== void 0 && item.title !== "" ? item.title : t("noneTitle"),
|
|
412
469
|
onChange: (e: any) => toggleOne(item.sessionId, e.target.checked)
|
|
413
470
|
}),
|
|
414
471
|
React.createElement(
|
|
415
|
-
"
|
|
416
|
-
{ className: "sa_rowTitle", onClick: () => toggleDetail(item), title: t("view") },
|
|
472
|
+
"button",
|
|
473
|
+
{ className: "sa_rowTitle", type: "button", onClick: () => toggleDetail(item), title: t("view") },
|
|
417
474
|
item.title !== null && item.title !== void 0 && item.title !== "" ? item.title : t("noneTitle")
|
|
418
475
|
),
|
|
419
476
|
item.live ? React.createElement("span", { className: "sa_live" }, t("live")) : null
|
|
@@ -429,7 +486,9 @@ function ArchivePanel(props: any) {
|
|
|
429
486
|
React.createElement("span", { className: "sa_rowMeta" },
|
|
430
487
|
React.createElement("code", null, shortId(item.sessionId)),
|
|
431
488
|
detail !== void 0 && !detail.error && detail.messageCount !== void 0
|
|
432
|
-
? " · " +
|
|
489
|
+
? " · " + (detail.truncated === true
|
|
490
|
+
? t("messagesTruncated").replace("{n}", String(detail.totalMessageCount !== void 0 ? detail.totalMessageCount : detail.messageCount))
|
|
491
|
+
: t("messages").replace("{n}", String(detail.messageCount)))
|
|
433
492
|
: null
|
|
434
493
|
),
|
|
435
494
|
React.createElement(
|
|
@@ -449,6 +508,7 @@ function ArchivePanel(props: any) {
|
|
|
449
508
|
detailPending ? React.createElement("p", { className: "sa_empty" }, "…") : null,
|
|
450
509
|
detail === void 0 ? null :
|
|
451
510
|
detail.error !== void 0 ? React.createElement("p", { className: "sa_error" }, detail.error) :
|
|
511
|
+
!Array.isArray(detail.messages) ? React.createElement("p", { className: "sa_error" }, t("detailLoadFailed")) :
|
|
452
512
|
detail.messages.length === 0 ? React.createElement("p", { className: "sa_empty" }, t("noMessages")) :
|
|
453
513
|
detail.messages.map((message: any, index: any) => React.createElement(
|
|
454
514
|
"div",
|
|
@@ -474,6 +534,7 @@ const REMOTE_CONTRIBUTION: TypertRemoteContribution = {
|
|
|
474
534
|
package: "@chaoset/session-archive",
|
|
475
535
|
descriptors: [
|
|
476
536
|
{ id: "@chaoset/session-archive#sessionArchive/list", service: "sessionArchive", namespace: "sessionArchive", method: "list", invocation: { kind: "direct" }, parameters: [], result: { mode: "strict", typeSymbol: "sessionArchive/list:result", schema: passthroughSchema } },
|
|
537
|
+
{ id: "@chaoset/session-archive#sessionArchive/count", service: "sessionArchive", namespace: "sessionArchive", method: "count", invocation: { kind: "direct" }, parameters: [], result: { mode: "strict", typeSymbol: "sessionArchive/count:result", schema: passthroughSchema } },
|
|
477
538
|
{ id: "@chaoset/session-archive#sessionArchive/detail", service: "sessionArchive", namespace: "sessionArchive", method: "detail", invocation: { kind: "direct" }, parameters: [{ name: "sessionId", wire: "sessionId", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/detail:sessionId", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/detail:result", schema: passthroughSchema } },
|
|
478
539
|
{ id: "@chaoset/session-archive#sessionArchive/delete", service: "sessionArchive", namespace: "sessionArchive", method: "delete", invocation: { kind: "direct" }, parameters: [{ name: "sessionIds", wire: "sessionIds", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/delete:sessionIds", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/delete:result", schema: passthroughSchema } },
|
|
479
540
|
{ id: "@chaoset/session-archive#sessionArchive/unarchive", service: "sessionArchive", namespace: "sessionArchive", method: "unarchive", invocation: { kind: "direct" }, parameters: [{ name: "sessionIds", wire: "sessionIds", source: "json", codec: { mode: "strict", typeSymbol: "sessionArchive/unarchive:sessionIds", schema: passthroughSchema } }], result: { mode: "strict", typeSymbol: "sessionArchive/unarchive:result", schema: passthroughSchema } }
|
package/lib/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// ── dsh.d.ts augmentations (appended by scripts/build.mjs) ──
|
|
1
2
|
import type { Context as CordisContext } from "@deepseek-ai/cordis";
|
|
2
3
|
|
|
3
4
|
declare module "@deepseek-ai/cordis" {
|
|
@@ -77,11 +78,18 @@ export declare const config: {
|
|
|
77
78
|
* 只读操作失败各自容错:单个会话的标题/详情读取失败不拖垮列表。
|
|
78
79
|
*/
|
|
79
80
|
export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>): {
|
|
81
|
+
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
82
|
+
* 只调这里:persistence.list() 只读每个文件的首行头,比 list() 的
|
|
83
|
+
* 全事件流解析便宜一个数量级以上。 */
|
|
84
|
+
count(): Promise<{
|
|
85
|
+
count: number;
|
|
86
|
+
}>;
|
|
80
87
|
/** 列出全部归档会话(存在性过滤:文件已删的幽灵归档记录不显示)。 */
|
|
81
88
|
list(): Promise<{
|
|
82
89
|
items: any[];
|
|
83
90
|
}>;
|
|
84
|
-
/** 读取一个归档会话的只读详情(标题 +
|
|
91
|
+
/** 读取一个归档会话的只读详情(标题 + 文本消息)。仅归档会话可读:
|
|
92
|
+
* detail 是对外暴露的远程端点,不校验成员资格就能读到任意未归档会话。 */
|
|
85
93
|
detail(sessionId: string): Promise<{
|
|
86
94
|
sessionId: string;
|
|
87
95
|
header: {
|
|
@@ -92,6 +100,8 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
92
100
|
};
|
|
93
101
|
title: string | null;
|
|
94
102
|
messageCount: number;
|
|
103
|
+
totalMessageCount: number;
|
|
104
|
+
truncated: boolean;
|
|
95
105
|
messages: {
|
|
96
106
|
role: string;
|
|
97
107
|
text: string;
|
|
@@ -106,6 +116,11 @@ export declare function createArchiveHost(ctx: Context, cfg: Record<string, any>
|
|
|
106
116
|
* 集合中"作为显示条件)会立刻把仍在内存中的会话重新显示出来,等同
|
|
107
117
|
* "恢复"。ghost id 由 list() 的存在性过滤隐藏,面板与侧边栏均不再
|
|
108
118
|
* 显示该会话;`removedFromArchive` 因此恒为 0。
|
|
119
|
+
*
|
|
120
|
+
* 失败语义(failed[].reason):'not-archived' 非归档成员;'live' 内存
|
|
121
|
+
* 未归档会话;'busy' 归档会话 60s 内仍有写入;'unenumerable' 文件存在
|
|
122
|
+
* 但持久化枚举不到(首行损坏的孤儿);'reappeared' 删除后被生成流重建、
|
|
123
|
+
* 二次删除仍压不掉;其余为底层删除错误消息。
|
|
109
124
|
*/
|
|
110
125
|
deleteArchived(sessionIds: string[]): Promise<{
|
|
111
126
|
deleted: string[];
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAYnD,eAAO,MAAM,IAAI,oBAAoB,CAAC;AAEtC,oDAAoD;AACpD,eAAO,MAAM,MAAM,UAA0D,CAAC;AAY9E,eAAO,MAAM,MAAM;IARjB,iCAAiC;;IAEjC,8BAA8B;;IAE9B,4BAA4B;;CAIa,CAAC;AAiE5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAYnD,eAAO,MAAM,IAAI,oBAAoB,CAAC;AAEtC,oDAAoD;AACpD,eAAO,MAAM,MAAM,UAA0D,CAAC;AAY9E,eAAO,MAAM,MAAM;IARjB,iCAAiC;;IAEjC,8BAA8B;;IAE9B,4BAA4B;;CAIa,CAAC;AAiE5C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAoIpE;;0BAEsB;IAChB,KAAK;;;IAUX,sCAAsC;IAChC,IAAI;;;IAeV;+CAC2C;IACrC,MAAM,YAAY,MAAM;;;YA4BxB,GAAG;YACH,SAAS;YACT,aAAa;YACb,WAAW;;;;;;;;;;;;;IAWjB;;;;;;;;;;;;OAYG;IACG,cAAc,aAAa,MAAM,EAAE;;;;;;;;IA8EzC;;;;OAIG;IACG,SAAS,aAAa,MAAM,EAAE;;;;EAwBvC;AAED,iCAAiC;AACjC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAmBrD"}
|
package/lib/index.js
CHANGED
|
@@ -140,8 +140,11 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
140
140
|
/** 归档瞬间的生成流兜底:会话仍在内存且文件最近有写入(60s 内)时
|
|
141
141
|
* 视为忙碌——删除文件后进行中的请求会把半截日志 append 回来。 */
|
|
142
142
|
const isBusy = (sessionId, file) => file !== null && ctx.sessions.get(sessionId) !== undefined && Date.now() - file.mtimeMs < 60_000;
|
|
143
|
-
/** 从归档集合移除若干 id(恢复用;删除不调用——见 deleteArchived),返回实际移除的 id。
|
|
144
|
-
|
|
143
|
+
/** 从归档集合移除若干 id(恢复用;删除不调用——见 deleteArchived),返回实际移除的 id。
|
|
144
|
+
* confirm 在 registry 写锁临界区内逐个复核 id 是否仍可恢复(文件仍存在):
|
|
145
|
+
* 存在性检查放在锁外的话,并发 deleteArchived 可在检查与移除之间删掉文件,
|
|
146
|
+
* 结果"文件没了、归档标记也没了",内存中的会话立刻重回侧边栏。 */
|
|
147
|
+
async function removeFromArchiveSet(ids, confirm) {
|
|
145
148
|
const set = new Set(ids);
|
|
146
149
|
const canWrite = registry !== undefined &&
|
|
147
150
|
typeof registry.enqueueOperation === 'function' &&
|
|
@@ -153,8 +156,23 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
153
156
|
await registry.enqueueOperation(async () => {
|
|
154
157
|
const state = registry.requireState();
|
|
155
158
|
const current = Array.isArray(state.archivedSessionIds) ? state.archivedSessionIds : [];
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
let eligible = current.filter((id) => set.has(id));
|
|
160
|
+
if (confirm !== undefined) {
|
|
161
|
+
const confirmed = [];
|
|
162
|
+
for (const id of eligible) {
|
|
163
|
+
try {
|
|
164
|
+
if (await confirm(id))
|
|
165
|
+
confirmed.push(id);
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
}
|
|
169
|
+
eligible = confirmed;
|
|
170
|
+
}
|
|
171
|
+
removedIds = eligible;
|
|
172
|
+
// 只有真正移除的 id 才离开归档集合;未通过复核的保持原状(仍是 ghost
|
|
173
|
+
// 或正常归档),不能因为请求过就一并抹掉。
|
|
174
|
+
const removedSet = new Set(removedIds);
|
|
175
|
+
const remaining = current.filter((id) => !removedSet.has(id));
|
|
158
176
|
if (removedIds.length > 0)
|
|
159
177
|
await registry.setState({ ...state, archivedSessionIds: remaining });
|
|
160
178
|
});
|
|
@@ -173,15 +191,58 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
173
191
|
return null;
|
|
174
192
|
}
|
|
175
193
|
}
|
|
176
|
-
/**
|
|
194
|
+
/** ghost 分支的孤儿探测:不经持久化枚举,直接 locate({id}) + stat 判断文件
|
|
195
|
+
* 是否实际存在(persistence.list() 会静默跳过首行损坏的日志,"枚举不到"
|
|
196
|
+
* 不等于"文件不存在")。cwd 未知的 ghost id 只能探到缺省位置(_no-cwd 一类),
|
|
197
|
+
* 尽力而为。返回存在的路径;无法定位或不存在返回 null。 */
|
|
198
|
+
async function probeOrphanFile(sessionId) {
|
|
199
|
+
try {
|
|
200
|
+
const location = persistence.locate({ id: sessionId });
|
|
201
|
+
if (location === undefined || typeof location.path !== 'string' || location.path.length === 0)
|
|
202
|
+
return null;
|
|
203
|
+
await stat(location.path);
|
|
204
|
+
return location.path;
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/** 删除后的复验:先等 settleMs 给进行中的写入留出落盘时间,再确认文件没有
|
|
211
|
+
* 被宿主 materialize 的 mkdir -p 整体重建(stat 任意失败——含 ENOENT——都
|
|
212
|
+
* 视为已消失)。返回 true 表示文件仍在(重现)。 */
|
|
213
|
+
async function filePresentAfterSettle(path, settleMs) {
|
|
214
|
+
if (settleMs > 0)
|
|
215
|
+
await new Promise((resolve) => setTimeout(resolve, settleMs));
|
|
216
|
+
try {
|
|
217
|
+
await stat(path);
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** 单个归档会话的展示行。标题读取失败回退 null(面板显示目录名)。
|
|
225
|
+
* 标题按 mtime 缓存:jsonl 后端没有后缀读取钩子,readFrom(id,0) 会解析
|
|
226
|
+
* 整条事件流,而面板关闭态的徽标轮询每 5 秒打一次 list——不缓存的话
|
|
227
|
+
* 就是"读整本会话只为取一行标题"的持续开销。mtime 不变即命中缓存。 */
|
|
228
|
+
const titleCache = new Map();
|
|
177
229
|
async function rowFor(sessionId, header) {
|
|
178
230
|
const file = await fileInfo(header);
|
|
179
231
|
let title = null;
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
232
|
+
if (file !== null) {
|
|
233
|
+
const cached = titleCache.get(sessionId);
|
|
234
|
+
if (cached !== undefined && cached.mtimeMs === file.mtimeMs) {
|
|
235
|
+
title = cached.title;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
try {
|
|
239
|
+
const { events } = await persistence.readFrom(sessionId, 0);
|
|
240
|
+
title = foldTitle(events);
|
|
241
|
+
}
|
|
242
|
+
catch { }
|
|
243
|
+
titleCache.set(sessionId, { mtimeMs: file.mtimeMs, title });
|
|
244
|
+
}
|
|
183
245
|
}
|
|
184
|
-
catch { }
|
|
185
246
|
return {
|
|
186
247
|
sessionId,
|
|
187
248
|
title,
|
|
@@ -193,6 +254,21 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
193
254
|
};
|
|
194
255
|
}
|
|
195
256
|
return {
|
|
257
|
+
/** 归档会话计数(存在性过滤后的真实数量)。侧边栏徽标的关闭态轮询
|
|
258
|
+
* 只调这里:persistence.list() 只读每个文件的首行头,比 list() 的
|
|
259
|
+
* 全事件流解析便宜一个数量级以上。 */
|
|
260
|
+
async count() {
|
|
261
|
+
const archived = [...archivedSet()];
|
|
262
|
+
if (archived.length === 0)
|
|
263
|
+
return { count: 0 };
|
|
264
|
+
const headers = await persistence.list();
|
|
265
|
+
const persisted = new Set(headers.map((header) => header.id));
|
|
266
|
+
let count = 0;
|
|
267
|
+
for (const sessionId of archived)
|
|
268
|
+
if (persisted.has(sessionId))
|
|
269
|
+
count++;
|
|
270
|
+
return { count };
|
|
271
|
+
},
|
|
196
272
|
/** 列出全部归档会话(存在性过滤:文件已删的幽灵归档记录不显示)。 */
|
|
197
273
|
async list() {
|
|
198
274
|
const archived = [...archivedSet()];
|
|
@@ -210,14 +286,25 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
210
286
|
const items = await limitedConcurrency(cfg.titleReadConcurrency, rows.map(({ sessionId, header }) => () => rowFor(sessionId, header)));
|
|
211
287
|
return { items };
|
|
212
288
|
},
|
|
213
|
-
/** 读取一个归档会话的只读详情(标题 +
|
|
289
|
+
/** 读取一个归档会话的只读详情(标题 + 文本消息)。仅归档会话可读:
|
|
290
|
+
* detail 是对外暴露的远程端点,不校验成员资格就能读到任意未归档会话。 */
|
|
214
291
|
async detail(sessionId) {
|
|
292
|
+
if (!archivedSet().has(sessionId)) {
|
|
293
|
+
throw Object.assign(new Error('session not archived: ' + sessionId), { code: 'NOT_ARCHIVED' });
|
|
294
|
+
}
|
|
215
295
|
const { meta, events } = await persistence.readFrom(sessionId, 0);
|
|
216
296
|
const title = foldTitle(events);
|
|
217
297
|
const messages = [];
|
|
298
|
+
let totalMessageCount = 0;
|
|
218
299
|
for (const event of events) {
|
|
219
300
|
if (event.type !== 'user/message' && event.type !== 'assistant/message')
|
|
220
301
|
continue;
|
|
302
|
+
// 达到上限后只计数、不再提取文本:截断语义要如实上报,尾部消息也不必
|
|
303
|
+
// 做字符串拼接(大日志下这部分是纯浪费)。
|
|
304
|
+
if (messages.length >= cfg.detailMaxMessages) {
|
|
305
|
+
totalMessageCount++;
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
221
308
|
const text = messageText(event.data, cfg.messagePreviewChars);
|
|
222
309
|
if (text.length === 0)
|
|
223
310
|
continue;
|
|
@@ -226,8 +313,7 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
226
313
|
text,
|
|
227
314
|
time: event.time,
|
|
228
315
|
});
|
|
229
|
-
|
|
230
|
-
break;
|
|
316
|
+
totalMessageCount++;
|
|
231
317
|
}
|
|
232
318
|
return {
|
|
233
319
|
sessionId,
|
|
@@ -239,6 +325,8 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
239
325
|
},
|
|
240
326
|
title,
|
|
241
327
|
messageCount: messages.length,
|
|
328
|
+
totalMessageCount,
|
|
329
|
+
truncated: totalMessageCount > messages.length,
|
|
242
330
|
messages,
|
|
243
331
|
live: isLive(sessionId),
|
|
244
332
|
};
|
|
@@ -250,21 +338,42 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
250
338
|
* 集合中"作为显示条件)会立刻把仍在内存中的会话重新显示出来,等同
|
|
251
339
|
* "恢复"。ghost id 由 list() 的存在性过滤隐藏,面板与侧边栏均不再
|
|
252
340
|
* 显示该会话;`removedFromArchive` 因此恒为 0。
|
|
341
|
+
*
|
|
342
|
+
* 失败语义(failed[].reason):'not-archived' 非归档成员;'live' 内存
|
|
343
|
+
* 未归档会话;'busy' 归档会话 60s 内仍有写入;'unenumerable' 文件存在
|
|
344
|
+
* 但持久化枚举不到(首行损坏的孤儿);'reappeared' 删除后被生成流重建、
|
|
345
|
+
* 二次删除仍压不掉;其余为底层删除错误消息。
|
|
253
346
|
*/
|
|
254
347
|
async deleteArchived(sessionIds) {
|
|
255
348
|
const unique = [...new Set(sessionIds)];
|
|
256
349
|
const deleted = [];
|
|
257
350
|
const failed = [];
|
|
351
|
+
// 归档成员前置校验:persistence.list() 含所有持久化会话而非仅归档
|
|
352
|
+
// 会话,不校验的话任何"未归档、不在内存"的会话 id 都会绕过 live/busy
|
|
353
|
+
// 两道保护被不可逆物理删除。
|
|
354
|
+
const archived = archivedSet();
|
|
258
355
|
const headers = await persistence.list();
|
|
259
356
|
const headersById = new Map(headers.map((item) => [item.id, item]));
|
|
260
357
|
for (const sessionId of unique) {
|
|
358
|
+
if (!archived.has(sessionId)) {
|
|
359
|
+
failed.push({ sessionId, reason: 'not-archived' });
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
261
362
|
if (isLive(sessionId)) {
|
|
262
363
|
failed.push({ sessionId, reason: 'live' });
|
|
263
364
|
continue;
|
|
264
365
|
}
|
|
265
366
|
const header = headersById.get(sessionId);
|
|
266
367
|
if (header === undefined) {
|
|
267
|
-
//
|
|
368
|
+
// ghost id(枚举不到)。但"枚举不到 ≠ 文件不存在":首行损坏的日志
|
|
369
|
+
// 会被 persistence.list() 静默跳过,直接当 ghost 报成功会把永远
|
|
370
|
+
// 删不掉的孤儿文件留在磁盘上。先 locate({id}) 探测,探到文件即
|
|
371
|
+
// "有文件但不可枚举",计入 failed 而非谎报成功。
|
|
372
|
+
if ((await probeOrphanFile(sessionId)) !== null) {
|
|
373
|
+
failed.push({ sessionId, reason: 'unenumerable' });
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
// 真不存在:幂等删除(ghost id 保留在归档集合中)。
|
|
268
377
|
deleted.push(sessionId);
|
|
269
378
|
continue;
|
|
270
379
|
}
|
|
@@ -278,8 +387,37 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
278
387
|
continue;
|
|
279
388
|
}
|
|
280
389
|
try {
|
|
390
|
+
// TOCTOU 复核:isBusy 读的是 stat 快照,检查与 rm 之间生成流可能
|
|
391
|
+
// 恰好落盘;删前重取一次 mtime 再判一次 busy。
|
|
392
|
+
let fresh = null;
|
|
393
|
+
try {
|
|
394
|
+
fresh = await stat(file.path);
|
|
395
|
+
}
|
|
396
|
+
catch { }
|
|
397
|
+
if (fresh === null) {
|
|
398
|
+
deleted.push(sessionId);
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
if (ctx.sessions.get(sessionId) !== undefined && Date.now() - fresh.mtimeMs < 60_000) {
|
|
402
|
+
failed.push({ sessionId, reason: 'busy' });
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
281
405
|
await rm(file.path, { force: true });
|
|
282
406
|
await rm(dirname(file.path), { recursive: true, force: true });
|
|
407
|
+
// rm 后复验:目录被删后,宿主 materialize 的 mkdir -p 仍可能把路径
|
|
408
|
+
// 整体重建(生成流恰在删除窗口内落盘)。等约 300ms 再 stat;若重现
|
|
409
|
+
// 则再删一次,仍未删掉计入 failed('reappeared'),不谎报成功。
|
|
410
|
+
if (await filePresentAfterSettle(file.path, 300)) {
|
|
411
|
+
try {
|
|
412
|
+
await rm(file.path, { force: true });
|
|
413
|
+
await rm(dirname(file.path), { recursive: true, force: true });
|
|
414
|
+
}
|
|
415
|
+
catch { }
|
|
416
|
+
if (await filePresentAfterSettle(file.path, 300)) {
|
|
417
|
+
failed.push({ sessionId, reason: 'reappeared' });
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
283
421
|
deleted.push(sessionId);
|
|
284
422
|
}
|
|
285
423
|
catch (error) {
|
|
@@ -296,17 +434,23 @@ export function createArchiveHost(ctx, cfg) {
|
|
|
296
434
|
async unarchive(sessionIds) {
|
|
297
435
|
const unique = [...new Set(sessionIds)];
|
|
298
436
|
const headers = await persistence.list();
|
|
299
|
-
const
|
|
437
|
+
const headersById = new Map(headers.map((item) => [item.id, item]));
|
|
438
|
+
// 锁外先做一遍廉价过滤(明显不可恢复的直接淘汰),锁内由 confirm 复核,
|
|
439
|
+
// 消除与并发 deleteArchived 的检查-移除窗口。
|
|
440
|
+
const candidates = [];
|
|
300
441
|
for (const sessionId of unique) {
|
|
301
|
-
const header =
|
|
442
|
+
const header = headersById.get(sessionId);
|
|
302
443
|
if (header === undefined)
|
|
303
444
|
continue; // 持久化记录已删:拒绝恢复
|
|
304
|
-
|
|
305
|
-
if (file === null)
|
|
306
|
-
continue; // 有记录无文件:拒绝恢复
|
|
307
|
-
restorable.push(sessionId);
|
|
445
|
+
candidates.push({ sessionId, header });
|
|
308
446
|
}
|
|
309
|
-
const restored = await removeFromArchiveSet(
|
|
447
|
+
const restored = await removeFromArchiveSet(candidates.map(({ sessionId }) => sessionId), async (sessionId) => {
|
|
448
|
+
const header = headersById.get(sessionId);
|
|
449
|
+
if (header === undefined)
|
|
450
|
+
return false;
|
|
451
|
+
const file = await fileInfo(header);
|
|
452
|
+
return file !== null; // 有记录无文件:拒绝恢复
|
|
453
|
+
});
|
|
310
454
|
return { restored, removedFromArchive: restored.length };
|
|
311
455
|
},
|
|
312
456
|
};
|
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/lib/remote.d.ts
CHANGED
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
import type { Context } from "@deepseek-ai/cordis";
|
|
15
15
|
declare const TypertRemoteService: typeof import("@deepseek-ai/dsh-typert-protocol").TypertRemoteService;
|
|
16
16
|
/**
|
|
17
|
-
* 归档管理远程服务:list 列出归档会话;
|
|
17
|
+
* 归档管理远程服务:list 列出归档会话;count 归档计数(徽标轮询轻端点);
|
|
18
|
+
* detail 读取会话内容;
|
|
18
19
|
* delete 批量删除归档会话(文件删除,归档集合保留 ghost id 防止内存会话
|
|
19
20
|
* 重现侧边栏);unarchive 批量恢复归档(仅限仍存在文件的会话)。
|
|
20
21
|
* 所有逻辑委托给 host 模块(lib/index.ts 传入的 archiveHost)。
|
|
@@ -28,6 +29,7 @@ export declare class SessionArchiveGateway extends TypertRemoteService {
|
|
|
28
29
|
serviceKey: string;
|
|
29
30
|
});
|
|
30
31
|
list(): any;
|
|
32
|
+
count(): any;
|
|
31
33
|
detail(sessionId: string): any;
|
|
32
34
|
delete(sessionIds: string[]): any;
|
|
33
35
|
unarchive(sessionIds: string[]): any;
|
package/lib/remote.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAyBnD,QAAA,MAAgB,mBAAmB,uEAAuB,CAAC;AA2B3D
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAyBnD,QAAA,MAAgB,mBAAmB,uEAAuB,CAAC;AA2B3D;;;;;;;;GAQG;AACH,qBAAa,qBAAsB,SAAQ,mBAAmB;IAC5D,OAAO,CAAC,IAAI,CAAM;IAClB,YAAY,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAIlE;IACD,IAAI,QAEH;IACD,KAAK,QAEJ;IACD,MAAM,CAAC,SAAS,EAAE,MAAM,OAKvB;IACD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAK1B;IACD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAK7B;CACF"}
|
package/lib/remote.js
CHANGED
|
@@ -63,7 +63,8 @@ function runPendingMarks(instance) {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
66
|
-
* 归档管理远程服务:list 列出归档会话;
|
|
66
|
+
* 归档管理远程服务:list 列出归档会话;count 归档计数(徽标轮询轻端点);
|
|
67
|
+
* detail 读取会话内容;
|
|
67
68
|
* delete 批量删除归档会话(文件删除,归档集合保留 ghost id 防止内存会话
|
|
68
69
|
* 重现侧边栏);unarchive 批量恢复归档(仅限仍存在文件的会话)。
|
|
69
70
|
* 所有逻辑委托给 host 模块(lib/index.ts 传入的 archiveHost)。
|
|
@@ -80,6 +81,9 @@ export class SessionArchiveGateway extends TypertRemoteService {
|
|
|
80
81
|
list() {
|
|
81
82
|
return this.host.list();
|
|
82
83
|
}
|
|
84
|
+
count() {
|
|
85
|
+
return this.host.count();
|
|
86
|
+
}
|
|
83
87
|
detail(sessionId) {
|
|
84
88
|
if (typeof sessionId !== "string" || sessionId.length === 0) {
|
|
85
89
|
throw new TypeError("detail expects a session id string");
|
|
@@ -100,6 +104,7 @@ export class SessionArchiveGateway extends TypertRemoteService {
|
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
106
|
markRemoteMethod(SessionArchiveGateway.prototype, "list");
|
|
107
|
+
markRemoteMethod(SessionArchiveGateway.prototype, "count");
|
|
103
108
|
markRemoteMethod(SessionArchiveGateway.prototype, "detail");
|
|
104
109
|
markRemoteMethod(SessionArchiveGateway.prototype, "delete");
|
|
105
110
|
markRemoteMethod(SessionArchiveGateway.prototype, "unarchive");
|
package/lib/remote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,4DAA4D;AAC5D,4DAA4D;AAC5D,0BAA0B;AAC1B,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;KACtD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACjF,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;AAE3D,IAAI,OAAO,GAA+C,EAAE,CAAC;AAE7D,sDAAsD;AACtD,SAAS,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAmB;IAC1E,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,cAAc,CAAC,EAAc,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACnD,CAAC;IACT,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,CAAE,KAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,wDAAwD;AACxD,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,OAAO,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,EAAE,YAAY,EAAE,IAAI,KAAK,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,4DAA4D;AAC5D,4DAA4D;AAC5D,0BAA0B;AAC1B,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,kCAAkC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;KACtD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACjF,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;AAE3D,IAAI,OAAO,GAA+C,EAAE,CAAC;AAE7D,sDAAsD;AACtD,SAAS,gBAAgB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAmB;IAC1E,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,cAAc,CAAC,EAAc,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACnD,CAAC;IACT,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,CAAE,KAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,wDAAwD;AACxD,SAAS,eAAe,CAAC,QAAgB;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,OAAO,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,EAAE,YAAY,EAAE,IAAI,KAAK,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IACpD,IAAI,CAAM;IAClB,YAAY,GAAY,EAAE,MAAyC;QACjE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,SAAiB;QACtB,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,CAAC,UAAoB;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IACD,SAAS,CAAC,UAAoB;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;CACF;AACD,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC1D,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3D,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5D,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5D,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC/D,iEAAiE;AACjE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC"}
|
package/lib/typert.host.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typert.host.d.ts","sourceRoot":"","sources":["../src/typert.host.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,QAAA,MAAM,WAAW,qBAAmB,CAAC;AAOrC,eAAO,MAAM,MAAM;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"typert.host.d.ts","sourceRoot":"","sources":["../src/typert.host.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAEH,QAAA,MAAM,WAAW,qBAAmB,CAAC;AAOrC,eAAO,MAAM,MAAM;;;;;;;;;;YA8BC,IAAI;;;;;;;;;;oBAjCZ,IAAI;oBAAQ,KAAK;;;;;;;;;;;;;YA2CL,IAAI;YAA4C,IAAI;YAAK,MAAM;;;;QAqC5E,QAAQ;QAAM,MAAM;QAAM,OAAO;;CAC3C,CAAC"}
|
package/lib/typert.host.js
CHANGED
|
@@ -34,6 +34,16 @@ export const TYPERT = {
|
|
|
34
34
|
result: codec('@chaoset/session-archive/types#ArchiveListResult'),
|
|
35
35
|
sourceLocation: { file: 'packages/session-archive/src/remote.ts', line: 1, column: 1 },
|
|
36
36
|
},
|
|
37
|
+
{
|
|
38
|
+
id: '@chaoset/session-archive#sessionArchive/count',
|
|
39
|
+
service: 'sessionArchive',
|
|
40
|
+
namespace: 'sessionArchive',
|
|
41
|
+
method: 'count',
|
|
42
|
+
invocation: { kind: 'direct' },
|
|
43
|
+
parameters: [],
|
|
44
|
+
result: codec('@chaoset/session-archive/types#ArchiveCountResult'),
|
|
45
|
+
sourceLocation: { file: 'packages/session-archive/src/remote.ts', line: 1, column: 1 },
|
|
46
|
+
},
|
|
37
47
|
{
|
|
38
48
|
id: '@chaoset/session-archive#sessionArchive/detail',
|
|
39
49
|
service: 'sessionArchive',
|
package/lib/typert.host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typert.host.js","sourceRoot":"","sources":["../src/typert.host.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;AACrC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAI,EAAE,QAAQ;IACd,UAAU;IACV,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE;CAC3C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,EAAE;IACX,WAAW,EAAE;QACX;YACE,EAAE,EAAE,8CAA8C;YAClD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,KAAK,CAAC,kDAAkD,CAAC;YACjE,cAAc,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACvF;QACD;YACE,EAAE,EAAE,gDAAgD;YACpD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK,CAAC,0CAA0C,CAAC;iBACzD;aACF;YACD,MAAM,EAAE,KAAK,CAAC,oDAAoD,CAAC;YACnE,cAAc,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACvF;QACD;YACE,EAAE,EAAE,gDAAgD;YACpD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK,CAAC,+CAA+C,CAAC;iBAC9D;aACF;YACD,MAAM,EAAE,KAAK,CAAC,6CAA6C,CAAC;YAC5D,cAAc,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACvF;QACD;YACE,EAAE,EAAE,mDAAmD;YACvD,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,gBAAgB;YAC3B,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK,CAAC,+CAA+C,CAAC;iBAC9D;aACF;YACD,MAAM,EAAE,KAAK,CAAC,gDAAgD,CAAC;YAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;SACvF;KACF;IACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;CACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"typert.host.js","sourceRoot":"","sources":["../src/typert.host.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.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "DSH plugin: browse archived sessions, inspect their content, batch-restore or permanently delete them with multi-select",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -48,5 +48,8 @@
|
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=22.19.0"
|
|
51
54
|
}
|
|
52
55
|
}
|