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.
- package/CHANGELOG.md +12 -0
- package/lib/client.js +1694 -1717
- package/lib/routes-core.js +2 -2
- package/lib/snapshots.js +28 -19
- package/package.json +1 -1
package/lib/routes-core.js
CHANGED
|
@@ -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
|
|
83
|
-
return { ok: true, count: result.count, cutSeq,
|
|
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
|
|
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
|
|
87
|
-
if (typeof
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
446
|
-
|
|
447
|
-
|
|
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,
|
|
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
|
-
|
|
475
|
+
scanStaleQueueItemIds
|
|
467
476
|
};
|
package/package.json
CHANGED