From eb318c2b2923f629667f052058c33c2b05f34f80 Mon Sep 17 00:00:00 2001 From: Janghoon Lee <44862514+savagemanage@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:31:50 +0000 Subject: [PATCH] feat(tui): fold compaction summaries to one line A compaction summary is bookkeeping, not an answer. Show it as one muted line (click to open) instead of the whole Objective / Important Details markdown. --- packages/tui/src/i18n/en.ts | 1 + packages/tui/src/i18n/ko.ts | 1 + packages/tui/src/routes/session/index.tsx | 13 ++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/tui/src/i18n/en.ts b/packages/tui/src/i18n/en.ts index 2f283068a4..a236d84839 100644 --- a/packages/tui/src/i18n/en.ts +++ b/packages/tui/src/i18n/en.ts @@ -472,6 +472,7 @@ export const dict = { "session.thought": "Thought", "session.thought.detail": "Thought: {{detail}}", "session.compaction": " Compaction ", + "session.compaction.summary": "Conversation summary (click to show)", "session.todos": "# Todos", "session.questions": "# Questions", "session.click_to_expand": "Click to expand", diff --git a/packages/tui/src/i18n/ko.ts b/packages/tui/src/i18n/ko.ts index d4b8926d0a..460d4710d1 100644 --- a/packages/tui/src/i18n/ko.ts +++ b/packages/tui/src/i18n/ko.ts @@ -451,6 +451,7 @@ export const dict: Record = { "session.thought": "생각 끝", "session.thought.detail": "생각 끝: {{detail}}", "session.compaction": " 요약 ", + "session.compaction.summary": "대화 요약 (눌러서 보기)", "session.todos": "# 할 일", "session.questions": "# 질문", "session.click_to_expand": "눌러서 펼치기", diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index c0be1bebd2..9dee0870dd 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -1525,9 +1525,20 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las const childShortcut = useCommandShortcut("session.child.first") const backgroundShortcut = useCommandShortcut("session.background") + // A compaction summary is bookkeeping, not an answer: folded to one line, click to open. + const isSummary = createMemo(() => props.message.summary === true) + const [summaryOpen, setSummaryOpen] = createSignal(false) + return ( <> - + + setSummaryOpen((prev) => !prev)}> + + {(summaryOpen() ? "▾ " : "▸ ") + language.t("session.compaction.summary")} + + + + {(part, index) => { const component = createMemo(() => PART_MAPPING[part.type as keyof typeof PART_MAPPING]) return (