fix: scope history injection to pending-only
This commit is contained in:
@@ -4,6 +4,7 @@ import {
|
||||
buildHistoryContext,
|
||||
buildHistoryContextFromEntries,
|
||||
buildHistoryContextFromMap,
|
||||
buildPendingHistoryContextFromMap,
|
||||
HISTORY_CONTEXT_MARKER,
|
||||
} from "./history.js";
|
||||
import { CURRENT_MESSAGE_MARKER } from "./mentions.js";
|
||||
@@ -81,4 +82,27 @@ describe("history helpers", () => {
|
||||
expect(result).toContain("B: two");
|
||||
expect(result).not.toContain("C: three");
|
||||
});
|
||||
|
||||
it("builds context from pending map without appending", () => {
|
||||
const historyMap = new Map<string, { sender: string; body: string }[]>();
|
||||
historyMap.set("room", [
|
||||
{ sender: "A", body: "one" },
|
||||
{ sender: "B", body: "two" },
|
||||
]);
|
||||
|
||||
const result = buildPendingHistoryContextFromMap({
|
||||
historyMap,
|
||||
historyKey: "room",
|
||||
limit: 3,
|
||||
currentMessage: "current",
|
||||
formatEntry: (entry) => `${entry.sender}: ${entry.body}`,
|
||||
});
|
||||
|
||||
expect(historyMap.get("room")?.map((entry) => entry.body)).toEqual(["one", "two"]);
|
||||
expect(result).toContain(HISTORY_CONTEXT_MARKER);
|
||||
expect(result).toContain("A: one");
|
||||
expect(result).toContain("B: two");
|
||||
expect(result).toContain(CURRENT_MESSAGE_MARKER);
|
||||
expect(result).toContain("current");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -23,12 +23,12 @@ export function buildHistoryContext(params: {
|
||||
);
|
||||
}
|
||||
|
||||
export function appendHistoryEntry(params: {
|
||||
historyMap: Map<string, HistoryEntry[]>;
|
||||
export function appendHistoryEntry<T extends HistoryEntry>(params: {
|
||||
historyMap: Map<string, T[]>;
|
||||
historyKey: string;
|
||||
entry: HistoryEntry;
|
||||
entry: T;
|
||||
limit: number;
|
||||
}): HistoryEntry[] {
|
||||
}): T[] {
|
||||
const { historyMap, historyKey, entry } = params;
|
||||
if (params.limit <= 0) return [];
|
||||
const history = historyMap.get(historyKey) ?? [];
|
||||
@@ -38,6 +38,34 @@ export function appendHistoryEntry(params: {
|
||||
return history;
|
||||
}
|
||||
|
||||
export function recordPendingHistoryEntry<T extends HistoryEntry>(params: {
|
||||
historyMap: Map<string, T[]>;
|
||||
historyKey: string;
|
||||
entry: T;
|
||||
limit: number;
|
||||
}): T[] {
|
||||
return appendHistoryEntry(params);
|
||||
}
|
||||
|
||||
export function buildPendingHistoryContextFromMap(params: {
|
||||
historyMap: Map<string, HistoryEntry[]>;
|
||||
historyKey: string;
|
||||
limit: number;
|
||||
currentMessage: string;
|
||||
formatEntry: (entry: HistoryEntry) => string;
|
||||
lineBreak?: string;
|
||||
}): string {
|
||||
if (params.limit <= 0) return params.currentMessage;
|
||||
const entries = params.historyMap.get(params.historyKey) ?? [];
|
||||
return buildHistoryContextFromEntries({
|
||||
entries,
|
||||
currentMessage: params.currentMessage,
|
||||
formatEntry: params.formatEntry,
|
||||
lineBreak: params.lineBreak,
|
||||
excludeLast: false,
|
||||
});
|
||||
}
|
||||
|
||||
export function buildHistoryContextFromMap(params: {
|
||||
historyMap: Map<string, HistoryEntry[]>;
|
||||
historyKey: string;
|
||||
|
||||
Reference in New Issue
Block a user