fix(agents): harden compaction and reset safety

Co-authored-by: jaden-clovervnd <91520439+jaden-clovervnd@users.noreply.github.com>
Co-authored-by: Sid <201593046+Sid-Qin@users.noreply.github.com>
Co-authored-by: Marcus Widing <245375637+widingmarcus-cyber@users.noreply.github.com>
This commit is contained in:
Peter Steinberger
2026-02-26 17:35:55 +01:00
parent 273973d374
commit 0ec7711bc2
20 changed files with 472 additions and 18 deletions

View File

@@ -133,27 +133,59 @@ function annotateInterSessionUserMessages(messages: AgentMessage[]): AgentMessag
return touched ? out : messages;
}
function stripStaleAssistantUsageBeforeLatestCompaction(messages: AgentMessage[]): AgentMessage[] {
let latestCompactionSummaryIndex = -1;
for (let i = 0; i < messages.length; i += 1) {
if (messages[i]?.role === "compactionSummary") {
latestCompactionSummaryIndex = i;
function parseMessageTimestamp(value: unknown): number | null {
if (typeof value === "number" && Number.isFinite(value)) {
return value;
}
if (typeof value === "string") {
const parsed = Date.parse(value);
if (Number.isFinite(parsed)) {
return parsed;
}
}
if (latestCompactionSummaryIndex <= 0) {
return null;
}
function stripStaleAssistantUsageBeforeLatestCompaction(messages: AgentMessage[]): AgentMessage[] {
let latestCompactionSummaryIndex = -1;
let latestCompactionTimestamp: number | null = null;
for (let i = 0; i < messages.length; i += 1) {
const entry = messages[i];
if (entry?.role !== "compactionSummary") {
continue;
}
latestCompactionSummaryIndex = i;
latestCompactionTimestamp = parseMessageTimestamp(
(entry as { timestamp?: unknown }).timestamp ?? null,
);
}
if (latestCompactionSummaryIndex === -1) {
return messages;
}
const out = [...messages];
let touched = false;
for (let i = 0; i < latestCompactionSummaryIndex; i += 1) {
const candidate = out[i] as (AgentMessage & { usage?: unknown }) | undefined;
for (let i = 0; i < out.length; i += 1) {
const candidate = out[i] as
| (AgentMessage & { usage?: unknown; timestamp?: unknown })
| undefined;
if (!candidate || candidate.role !== "assistant") {
continue;
}
if (!candidate.usage || typeof candidate.usage !== "object") {
continue;
}
const messageTimestamp = parseMessageTimestamp(candidate.timestamp);
const staleByTimestamp =
latestCompactionTimestamp !== null &&
messageTimestamp !== null &&
messageTimestamp <= latestCompactionTimestamp;
const staleByLegacyOrdering = i < latestCompactionSummaryIndex;
if (!staleByTimestamp && !staleByLegacyOrdering) {
continue;
}
const candidateRecord = candidate as unknown as Record<string, unknown>;
const { usage: _droppedUsage, ...rest } = candidateRecord;
out[i] = rest as unknown as AgentMessage;