MCPcopy
hub / github.com/coder/mux / getCompactionMetadataToPreserve

Function getCompactionMetadataToPreserve

src/node/services/historyService.ts:44–96  ·  view source on GitHub ↗
(
  workspaceId: string,
  existingMessage: MuxMessage,
  incomingMessage: MuxMessage
)

Source from the content-addressed store, hash-verified

42}
43
44function getCompactionMetadataToPreserve(
45 workspaceId: string,
46 existingMessage: MuxMessage,
47 incomingMessage: MuxMessage
48): Partial<MuxMetadata> | null {
49 const existingMetadata = existingMessage.metadata;
50 if (existingMetadata?.compactionBoundary !== true) {
51 return null;
52 }
53
54 if (existingMessage.role !== "assistant") {
55 // Self-healing read path: boundary metadata on non-assistant rows is invalid.
56 log.warn("Skipping malformed persisted compaction boundary during history update", {
57 workspaceId,
58 messageId: existingMessage.id,
59 reason: "compactionBoundary set on non-assistant message",
60 });
61 return null;
62 }
63
64 if (incomingMessage.role !== "assistant") {
65 return null;
66 }
67
68 if (!hasDurableCompactionBoundary(existingMetadata)) {
69 // Self-healing read path: malformed boundary metadata should not be propagated.
70 log.warn("Skipping malformed persisted compaction boundary during history update", {
71 workspaceId,
72 messageId: existingMessage.id,
73 reason: "compactionBoundary missing valid compacted+compactionEpoch metadata",
74 });
75 return null;
76 }
77
78 if (hasDurableCompactionBoundary(incomingMessage.metadata)) {
79 return null;
80 }
81
82 const preserved: Partial<MuxMetadata> = {
83 compacted: existingMetadata.compacted,
84 compactionBoundary: true,
85 compactionEpoch: existingMetadata.compactionEpoch,
86 };
87
88 if (
89 isCompactionSummaryMetadata(existingMetadata.muxMetadata) &&
90 !isCompactionSummaryMetadata(incomingMessage.metadata?.muxMetadata)
91 ) {
92 preserved.muxMetadata = existingMetadata.muxMetadata;
93 }
94
95 return preserved;
96}
97/**
98 * HistoryService - Manages chat history persistence and sequence numbering
99 *

Callers 1

updateHistoryMethod · 0.85

Calls 2

Tested by

no test coverage detected