refactor(plugin-sdk): unify channel dedupe primitives

This commit is contained in:
Peter Steinberger
2026-02-22 10:46:00 +01:00
parent edaa5ef7a5
commit 59807efa31
10 changed files with 339 additions and 70 deletions

View File

@@ -1,3 +1,5 @@
import { createDedupeCache } from "openclaw/plugin-sdk";
export type ProcessedMessageTracker = {
mark: (id?: string | null) => boolean;
has: (id?: string | null) => boolean;
@@ -5,29 +7,14 @@ export type ProcessedMessageTracker = {
};
export function createProcessedMessageTracker(limit = 2000): ProcessedMessageTracker {
const seen = new Set<string>();
const order: string[] = [];
const dedupe = createDedupeCache({ ttlMs: 0, maxSize: limit });
const mark = (id?: string | null) => {
const trimmed = id?.trim();
if (!trimmed) {
return true;
}
if (seen.has(trimmed)) {
return false;
}
seen.add(trimmed);
order.push(trimmed);
if (order.length > limit) {
const overflow = order.length - limit;
for (let i = 0; i < overflow; i += 1) {
const oldest = order.shift();
if (oldest) {
seen.delete(oldest);
}
}
}
return true;
return !dedupe.check(trimmed);
};
const has = (id?: string | null) => {
@@ -35,12 +22,12 @@ export function createProcessedMessageTracker(limit = 2000): ProcessedMessageTra
if (!trimmed) {
return false;
}
return seen.has(trimmed);
return dedupe.peek(trimmed);
};
return {
mark,
has,
size: () => seen.size,
size: () => dedupe.size(),
};
}