Archived
Collapse compaction summaries by metadata
This commit is contained in:
@@ -35,6 +35,8 @@ export function groupChatMessages(messages: ChatLine[], indexOffset = 0): ChatGr
|
||||
}
|
||||
|
||||
export function summarizeChatGroup(messages: ChatLine[]): string {
|
||||
if (messages.every((message) => message.source === "compaction")) return `${String(messages.length)} history compaction ${messages.length === 1 ? "summary" : "summaries"}`;
|
||||
if (messages.every((message) => message.source === "branch_summary")) return `${String(messages.length)} branch ${messages.length === 1 ? "summary" : "summaries"}`;
|
||||
const counts = messages.reduce<Record<string, number>>((acc, message) => {
|
||||
acc[message.role] = (acc[message.role] ?? 0) + 1;
|
||||
return acc;
|
||||
@@ -44,5 +46,6 @@ export function summarizeChatGroup(messages: ChatLine[]): string {
|
||||
}
|
||||
|
||||
function isReadablePart(message: ChatLine, part: ChatPart): boolean {
|
||||
if (message.source === "compaction" || message.source === "branch_summary") return false;
|
||||
return part.type === "text" && (message.role === "user" || message.role === "assistant" || message.role === "system" || message.role === "bash");
|
||||
}
|
||||
|
||||
@@ -24,10 +24,17 @@ function normalizeMessage(message: unknown): ChatLine[] {
|
||||
if (getString(message, "role") === "bashExecution") return [normalizeBashExecution(message)];
|
||||
const role = normalizeRole(getString(message, "role"));
|
||||
const parts = normalizeContent(getProperty(message, "content"), message);
|
||||
if (role === "tool") return [{ role, parts }];
|
||||
const source = normalizeSource(message, parts);
|
||||
if (role === "tool") return [{ role, parts, ...(source === undefined ? {} : { source }) }];
|
||||
|
||||
const visible = parts.filter((part) => part.type !== "empty");
|
||||
return visible.length > 0 ? [{ role, parts: visible }] : [];
|
||||
return visible.length > 0 ? [{ role, parts: visible, ...(source === undefined ? {} : { source }) }] : [];
|
||||
}
|
||||
|
||||
function normalizeSource(message: unknown, _parts: ChatPart[]): ChatLine["source"] | undefined {
|
||||
const source = getString(message, "source");
|
||||
if (source === "compaction" || source === "branch_summary") return source;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function normalizeBashExecution(message: unknown): ChatLine {
|
||||
|
||||
@@ -10,6 +10,7 @@ export type ChatPart =
|
||||
export interface ChatLine {
|
||||
role: "user" | "assistant" | "tool" | "system" | "bash";
|
||||
parts: ChatPart[];
|
||||
source?: "compaction" | "branch_summary";
|
||||
}
|
||||
|
||||
export interface CompletionItem {
|
||||
|
||||
@@ -308,8 +308,8 @@ function historyMessages(session: AgentSession): unknown[] {
|
||||
for (const entry of session.sessionManager.getBranch()) {
|
||||
if (entry.type === "message") messages.push(entry.message);
|
||||
else if (entry.type === "custom_message" && entry.display) messages.push({ role: "custom", content: entry.content, customType: entry.customType, details: entry.details });
|
||||
else if (entry.type === "compaction") messages.push({ role: "system", content: `Compacted history:\n\n${entry.summary}` });
|
||||
else if (entry.type === "branch_summary") messages.push({ role: "system", content: `Branch summary:\n\n${entry.summary}` });
|
||||
else if (entry.type === "compaction") messages.push({ role: "system", source: "compaction", content: `Compacted history:\n\n${entry.summary}` });
|
||||
else if (entry.type === "branch_summary") messages.push({ role: "system", source: "branch_summary", content: `Branch summary:\n\n${entry.summary}` });
|
||||
}
|
||||
return messages;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user