dsh-recall-plugin 2.3.19 → 2.3.20

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.
@@ -79,8 +79,8 @@ function createRoutesCore(deps) {
79
79
  });
80
80
  if (!result.ok) return result;
81
81
  const cutSeq = await snaps.resolveCutSeq(sessionId, id);
82
- const staleQueueRpcIds = await snaps.resolveStaleQueueRpcIds(sessionId, cutSeq);
83
- return { ok: true, count: result.count, cutSeq, staleQueueRpcIds };
82
+ const staleQueueItemIds = await snaps.resolveStaleQueueItemIds(sessionId, cutSeq);
83
+ return { ok: true, count: result.count, cutSeq, staleQueueItemIds };
84
84
  },
85
85
  // 设置页排障:最近错误(Host 侧 console.error 的页面可见副本)。
86
86
  // M1-D3/D5:条目自带 count/kind(recordError 富集)——count 在服务端
package/lib/snapshots.js CHANGED
@@ -71,7 +71,7 @@ function scanCutSeqDetail(events, messageId) {
71
71
  function scanCutSeq(events, messageId) {
72
72
  return scanCutSeqDetail(events, messageId).cut;
73
73
  }
74
- function scanStaleQueueRpcIds(events, cutSeq) {
74
+ function scanStaleQueueItemIds(events, cutSeq) {
75
75
  if (!Array.isArray(events)) return [];
76
76
  if (typeof cutSeq !== "number" || !Number.isFinite(cutSeq)) return [];
77
77
  const out = [];
@@ -83,12 +83,20 @@ function scanStaleQueueRpcIds(events, cutSeq) {
83
83
  for (const item of inserted) {
84
84
  const source = item && item.source;
85
85
  if (!source || source.kind !== "user") continue;
86
- const rpcId = source.rpcId;
87
- if (typeof rpcId === "string" && rpcId !== "" && out.indexOf(rpcId) < 0) out.push(rpcId);
86
+ const id = item.id;
87
+ if (typeof id === "string" && id !== "" && out.indexOf(id) < 0) out.push(id);
88
88
  }
89
89
  }
90
90
  return out;
91
91
  }
92
+ function liveEventsOf(live) {
93
+ if (!live) return null;
94
+ if (typeof live.snapshotEvents === "function") {
95
+ const events = live.snapshotEvents();
96
+ if (Array.isArray(events)) return events;
97
+ }
98
+ return Array.isArray(live.events) ? live.events : null;
99
+ }
92
100
  function disposeLease(lease) {
93
101
  const disposeSymbol = Symbol.dispose;
94
102
  if (!disposeSymbol || lease === null || typeof lease !== "object") return;
@@ -427,30 +435,31 @@ function createSnapshots(ctx, rt, config) {
427
435
  state.cutSeqCache.set(cacheKey, result);
428
436
  return result;
429
437
  }
430
- async function resolveStaleQueueRpcIds(sessionId, cutSeq) {
438
+ async function resolveStaleQueueItemIds(sessionId, cutSeq) {
431
439
  if (!sessionId || typeof cutSeq !== "number" || !Number.isFinite(cutSeq)) return [];
432
- const live = sessions.get(sessionId);
433
- if (live && Array.isArray(live.events)) return scanStaleQueueRpcIds(live.events, cutSeq);
440
+ const live = liveEventsOf(sessions.get(sessionId));
441
+ if (live) return scanStaleQueueItemIds(live, cutSeq);
434
442
  const query = ctx.get("sessionQuery");
435
443
  if (!query) return [];
436
- try {
437
- const log = await query.readSession(sessionId);
438
- if (log && Array.isArray(log.events)) return scanStaleQueueRpcIds(log.events, cutSeq);
439
- } catch (error) {
440
- }
441
- if (typeof query.observeSession !== "function") return [];
442
- try {
443
- const lease = await query.observeSession(sessionId);
444
+ if (typeof query.observeSession === "function") {
444
445
  try {
445
- return lease && Array.isArray(lease.events) ? scanStaleQueueRpcIds(lease.events, cutSeq) : [];
446
- } finally {
447
- disposeLease(lease);
446
+ const lease = await query.observeSession(sessionId);
447
+ try {
448
+ return lease && Array.isArray(lease.events) ? scanStaleQueueItemIds(lease.events, cutSeq) : [];
449
+ } finally {
450
+ disposeLease(lease);
451
+ }
452
+ } catch (error) {
448
453
  }
454
+ }
455
+ try {
456
+ const log = await query.readSession(sessionId);
457
+ return log && Array.isArray(log.events) ? scanStaleQueueItemIds(log.events, cutSeq) : [];
449
458
  } catch (error) {
450
459
  return [];
451
460
  }
452
461
  }
453
- return { saveIndex, loadIndex, readExclude, writeExclude, rebuildOrphans, captureSnapshot, diffFor, rollbackFor, resolveCutSeq, resolveStaleQueueRpcIds, feedbackFor, loadLineage, recordLineage };
462
+ return { saveIndex, loadIndex, readExclude, writeExclude, rebuildOrphans, captureSnapshot, diffFor, rollbackFor, resolveCutSeq, resolveStaleQueueItemIds, feedbackFor, loadLineage, recordLineage };
454
463
  }
455
464
  export {
456
465
  createSnapshots,
@@ -463,5 +472,5 @@ export {
463
472
  rescueRollback,
464
473
  scanCutSeq,
465
474
  scanCutSeqDetail,
466
- scanStaleQueueRpcIds
475
+ scanStaleQueueItemIds
467
476
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-recall-plugin",
3
- "version": "2.3.19",
3
+ "version": "2.3.20",
4
4
  "description": "在 DSH 中撤回自己发过的消息:工作区文件与对话历史一起回到那条消息发出之前,消息的文本与附件自动放回输入框,改完即可重发。文件走独立影子 git 快照(不碰项目自身的 git),对话走官方 sessions.fork,原会话归档可找回。",
5
5
  "type": "module",
6
6
  "repository": {