feat(ui): add Compact button to session detail page#1117
Conversation
Backend method sessions.compact (Issue 958) was not exposed in the web UI. Users only had Reset (wipes both messages and summary) and Delete. Compact truncates messages to last N (default 4) while preserving the summary, letting agents keep context after recovering from full-context situations. Adds: - SESSIONS_COMPACT method constant. - compactSession callback in useSessions hook. - "Compact" button between Reset and Delete in session detail header, with confirm dialog explaining the difference vs Reset. - i18n keys for en/vi/zh: detail.compact, detail.compactTitle, detail.compactDescription, detail.confirmCompact, toast.compacted, toast.compactFailed. Backend unchanged.
🔍 Code Review — feat(ui): add Compact button to session detail page🎯 Tổng quanExpose Scope: 7 files, +57/-3, 1 commit 🤖 CI Status + Merge ConflictsCI: ✅ All checks passed — go: pass (7m16s), web: pass (55s) ✅ Điểm Tốt
🟢 LOW
📊 Summary
💡 Recommendation🟢 APPROVED Clean UI feature, đúng pattern, i18n đầy đủ, backend unchanged. Small scope, clear value for operators managing long sessions. Ready to merge! 🚀 |
Summary
Expose backend method
sessions.compact(Issue 958) trong web UI session detail page. User trước đây chỉ có Đặt lại (wipe cả messages + summary) và Xóa (xóa hẳn session). Thiếu cách giảm token usage mà vẫn giữ context.Compact = truncate messages về N tin gần nhất (default 4), giữ summary nguyên vẹn → agent vẫn nhớ context qua summary, mở lại budget cho prompt+output.
Use case thực tế
Session group chat dài (ví dụ 188 messages, 7 lần auto-compact, vẫn đẩy mỗi turn lên ~199k/200k tokens do tool results bloat history) → Compact giảm history về 4 messages cuối, agent đọc summary để tiếp tục task.
What changed
ui/web/src/api/protocol.tsSESSIONS_COMPACTconstantui/web/src/pages/sessions/hooks/use-sessions.tscompactSession(key, keepLast?)callback, exportsui/web/src/pages/sessions/session-detail-page.tsxonCompactprop, button + confirm dialogui/web/src/pages/sessions/sessions-page.tsxcompactSession→onCompactui/web/src/i18n/locales/{en,vi,zh}/sessions.jsonUI: nút "Compact" (Shrink icon, variant=outline) nằm giữa "Reset" và "Delete". Confirm dialog giải thích rõ khác biệt vs Reset.
Backend
Không đổi. Dùng method có sẵn
internal/gateway/methods/sessions.go:242(handleCompact):{ key: string, keepLast?: number }(default 4){ ok, original, kept }Test plan
main, không liên quan)resetSessioncho consistencyi18n preview
Notes
main(prismjsmissing trongscript-editor.tsx) không liên quan, không block PR này.onCompactkhông truyền (backward compat), button + dialog ẩn hoàn toàn.