feat(ui): add Compact button to session detail page#1117
feat(ui): add Compact button to session detail page#1117nguyennguyenit wants to merge 1 commit intomainfrom
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.