diff --git a/packages/ui/src/components/ui/MemoryDebugPanel.tsx b/packages/ui/src/components/ui/MemoryDebugPanel.tsx index 89e2c449..901d8f80 100644 --- a/packages/ui/src/components/ui/MemoryDebugPanel.tsx +++ b/packages/ui/src/components/ui/MemoryDebugPanel.tsx @@ -149,22 +149,43 @@ export const DebugPanel: React.FC = ({ onClose }) => { return () => window.clearTimeout(timeoutId); }, [copyState]); - const totalMessages = React.useMemo(() => { + const messageRoleCounts = React.useMemo(() => { + let assistant = 0; let total = 0; + let user = 0; for (const sessionId of Object.keys(messageRecord)) { - total += messageRecord[sessionId]?.length ?? 0; + const messages = messageRecord[sessionId] ?? []; + total += messages.length; + for (const message of messages) { + if (message.role === 'user') { + user += 1; + } else if (message.role === 'assistant') { + assistant += 1; + } + } } - return total; + return { assistant, total, user }; }, [messageRecord]); const sessionStats = React.useMemo(() => { return sessions.map(session => { - const messageCount = messageRecord[session.id]?.length || 0; + const messages = messageRecord[session.id] ?? []; + let assistantMessageCount = 0; + let userMessageCount = 0; + for (const message of messages) { + if (message.role === 'user') { + userMessageCount += 1; + } else if (message.role === 'assistant') { + assistantMessageCount += 1; + } + } const memoryState = sessionMemoryState.get(session.id); return { id: session.id, title: session.title || t('memoryDebugPanel.common.untitled'), - messageCount, + assistantMessageCount, + messageCount: messages.length, + userMessageCount, isStreaming: memoryState?.isStreaming || false, isZombie: memoryState?.isZombie || false, backgroundCount: memoryState?.backgroundMessageCount || 0, @@ -256,8 +277,10 @@ export const DebugPanel: React.FC = ({ onClose }) => { {activeTab === 'memory' ? (
- + + +
@@ -294,6 +317,12 @@ export const DebugPanel: React.FC = ({ onClose }) => { {stat.isZombie ? ! : null}
+ + {t('memoryDebugPanel.metric.roleMsgsValue', { + assistant: stat.assistantMessageCount, + user: stat.userMessageCount, + })} + {t('memoryDebugPanel.metric.msgsValue', { count: stat.messageCount })} @@ -318,6 +347,14 @@ export const DebugPanel: React.FC = ({ onClose }) => { sessions: sessions.map(s => ({ id: s.id, title: s.title })), currentSessionId, cachedSessions: Object.keys(messageRecord), + messageRoleCounts, + sessionMessageRoleCounts: sessionStats.map(stat => ({ + id: stat.id, + title: stat.title, + total: stat.messageCount, + user: stat.userMessageCount, + assistant: stat.assistantMessageCount, + })), memoryStates: Object.fromEntries(sessionMemoryState), }); }} diff --git a/packages/ui/src/lib/i18n/messages/en.ts b/packages/ui/src/lib/i18n/messages/en.ts index a1dd5582..2fc5149a 100644 --- a/packages/ui/src/lib/i18n/messages/en.ts +++ b/packages/ui/src/lib/i18n/messages/en.ts @@ -2505,6 +2505,8 @@ export const dict = { 'memoryDebugPanel.section.noVscodeSamples': 'No VS Code bridge samples yet.', 'memoryDebugPanel.metric.totalMessages': 'Total Messages', 'memoryDebugPanel.metric.cachedSessions': 'Cached Sessions', + 'memoryDebugPanel.metric.userMessages': 'User Messages', + 'memoryDebugPanel.metric.assistantMessages': 'Assistant Messages', 'memoryDebugPanel.metric.viewportWindow': 'Viewport Window', 'memoryDebugPanel.metric.zombieTimeout': 'Zombie Timeout', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total Requests', @@ -2522,6 +2524,7 @@ export const dict = { 'memoryDebugPanel.metric.messagesValue': '{count} messages', 'memoryDebugPanel.metric.minutesValue': '{count} minutes', 'memoryDebugPanel.metric.msgsValue': '{count} msgs', + 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', 'memoryDebugPanel.metric.countValue': 'count {value}', 'memoryDebugPanel.metric.avgValue': 'avg {value}', 'memoryDebugPanel.metric.maxValue': 'max {value}', diff --git a/packages/ui/src/lib/i18n/messages/es.ts b/packages/ui/src/lib/i18n/messages/es.ts index 764db8dc..4c02bf62 100644 --- a/packages/ui/src/lib/i18n/messages/es.ts +++ b/packages/ui/src/lib/i18n/messages/es.ts @@ -2471,6 +2471,8 @@ export const dict: Record = { "memoryDebugPanel.section.noVscodeSamples": "No hay muestras de puente VS Code aún.", "memoryDebugPanel.metric.totalMessages": "Mensajes totales", "memoryDebugPanel.metric.cachedSessions": "Sesiones en caché", + "memoryDebugPanel.metric.userMessages": "Mensajes del usuario", + "memoryDebugPanel.metric.assistantMessages": "Mensajes del asistente", "memoryDebugPanel.metric.viewportWindow": "Ventana de visualización", "memoryDebugPanel.metric.zombieTimeout": "Timeout zombie", "memoryDebugPanel.metric.githubTotalRequests": "Solicitudes totales de GitHub", @@ -2488,6 +2490,7 @@ export const dict: Record = { "memoryDebugPanel.metric.messagesValue": "{count} mensajes", "memoryDebugPanel.metric.minutesValue": "{count} minutos", "memoryDebugPanel.metric.msgsValue": "{count} mensajes", + "memoryDebugPanel.metric.roleMsgsValue": "U {user} / A {assistant}", "memoryDebugPanel.metric.countValue": "conteo {value}", "memoryDebugPanel.metric.avgValue": "prom. {value}", "memoryDebugPanel.metric.maxValue": "máx. {value}", diff --git a/packages/ui/src/lib/i18n/messages/fr.ts b/packages/ui/src/lib/i18n/messages/fr.ts index c1530922..aad37117 100644 --- a/packages/ui/src/lib/i18n/messages/fr.ts +++ b/packages/ui/src/lib/i18n/messages/fr.ts @@ -2315,6 +2315,8 @@ export const dict = { 'memoryDebugPanel.section.noVscodeSamples': 'Aucun échantillon de pont VS Code pour l\'instant.', 'memoryDebugPanel.metric.totalMessages': 'Nombre total de messages', 'memoryDebugPanel.metric.cachedSessions': 'Sessions mises en cache', + 'memoryDebugPanel.metric.userMessages': 'Messages utilisateur', + 'memoryDebugPanel.metric.assistantMessages': 'Messages assistant', 'memoryDebugPanel.metric.viewportWindow': 'Fenêtre d\'affichage', 'memoryDebugPanel.metric.zombieTimeout': 'Délai d\'attente des zombies', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub Total des demandes', @@ -2332,6 +2334,7 @@ export const dict = { 'memoryDebugPanel.metric.messagesValue': 'Messages {count}', 'memoryDebugPanel.metric.minutesValue': 'Minutes {count}', 'memoryDebugPanel.metric.msgsValue': 'Messages {count}', + 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', 'memoryDebugPanel.metric.countValue': 'compter {value}', 'memoryDebugPanel.metric.avgValue': 'moyenne {value}', 'memoryDebugPanel.metric.maxValue': 'maximum {value}', diff --git a/packages/ui/src/lib/i18n/messages/ko.ts b/packages/ui/src/lib/i18n/messages/ko.ts index 0dac5ae8..d6681225 100644 --- a/packages/ui/src/lib/i18n/messages/ko.ts +++ b/packages/ui/src/lib/i18n/messages/ko.ts @@ -2505,6 +2505,8 @@ export const dict: Record = { 'memoryDebugPanel.section.noVscodeSamples': 'VS Code 브리지 샘플 없음', 'memoryDebugPanel.metric.totalMessages': '전체 메시지', 'memoryDebugPanel.metric.cachedSessions': '캐시된 세션', + 'memoryDebugPanel.metric.userMessages': '사용자 메시지', + 'memoryDebugPanel.metric.assistantMessages': '어시스턴트 메시지', 'memoryDebugPanel.metric.viewportWindow': '뷰포트', 'memoryDebugPanel.metric.zombieTimeout': '좀비 타임아웃', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 전체 요청', @@ -2522,6 +2524,7 @@ export const dict: Record = { 'memoryDebugPanel.metric.messagesValue': '{count}개 메시지', 'memoryDebugPanel.metric.minutesValue': '{count}분', 'memoryDebugPanel.metric.msgsValue': '{count}개 메시지', + 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', 'memoryDebugPanel.metric.countValue': '개수 {value}', 'memoryDebugPanel.metric.avgValue': '평균 {value}', 'memoryDebugPanel.metric.maxValue': '최대 {value}', diff --git a/packages/ui/src/lib/i18n/messages/pl.ts b/packages/ui/src/lib/i18n/messages/pl.ts index 73e62e7c..d763ce39 100644 --- a/packages/ui/src/lib/i18n/messages/pl.ts +++ b/packages/ui/src/lib/i18n/messages/pl.ts @@ -2064,6 +2064,8 @@ export const dict: Record = { 'memoryDebugPanel.common.untitled': 'Bez tytułu', 'memoryDebugPanel.metric.avgValue': 'średnio {value}', 'memoryDebugPanel.metric.cachedSessions': 'Sesje w cache', + 'memoryDebugPanel.metric.userMessages': 'Wiadomości użytkownika', + 'memoryDebugPanel.metric.assistantMessages': 'Wiadomości asystenta', 'memoryDebugPanel.metric.chatMessageRenders': 'Renderowania ChatMessage', 'memoryDebugPanel.metric.chatMessageStaticDuringStream': 'ChatMessage statyczny podczas streamu', 'memoryDebugPanel.metric.chatMessageStaticOutsideActiveTurn': 'ChatMessage statyczny poza aktywną turą', @@ -2078,6 +2080,7 @@ export const dict: Record = { 'memoryDebugPanel.metric.metrics': 'Metryki', 'memoryDebugPanel.metric.minutesValue': '{count} minut', 'memoryDebugPanel.metric.msgsValue': '{count} wiad.', + 'memoryDebugPanel.metric.roleMsgsValue': 'U {user} / A {assistant}', 'memoryDebugPanel.metric.samples': 'Próbki', 'memoryDebugPanel.metric.totalMessages': 'Łączna liczba wiadomości', 'memoryDebugPanel.metric.totalValue': 'łącznie {value}', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.ts b/packages/ui/src/lib/i18n/messages/pt-BR.ts index 1e77dec9..748ff1ed 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.ts @@ -2471,6 +2471,8 @@ export const dict: Record = { "memoryDebugPanel.section.noVscodeSamples": "Ainda não há amostras da ponte VS Code.", "memoryDebugPanel.metric.totalMessages": "Mensagens totais", "memoryDebugPanel.metric.cachedSessions": "Sessões em cache", + "memoryDebugPanel.metric.userMessages": "Mensagens do usuário", + "memoryDebugPanel.metric.assistantMessages": "Mensagens do assistente", "memoryDebugPanel.metric.viewportWindow": "Janela de visualização", "memoryDebugPanel.metric.zombieTimeout": "Timeout zombie", "memoryDebugPanel.metric.githubTotalRequests": "Solicitações totais do GitHub", @@ -2488,6 +2490,7 @@ export const dict: Record = { "memoryDebugPanel.metric.messagesValue": "{count} mensagens", "memoryDebugPanel.metric.minutesValue": "{count} minutos", "memoryDebugPanel.metric.msgsValue": "{count} mensagens", + "memoryDebugPanel.metric.roleMsgsValue": "U {user} / A {assistant}", "memoryDebugPanel.metric.countValue": "contagem {value}", "memoryDebugPanel.metric.avgValue": "méd. {value}", "memoryDebugPanel.metric.maxValue": "máx. {value}", diff --git a/packages/ui/src/lib/i18n/messages/uk.ts b/packages/ui/src/lib/i18n/messages/uk.ts index a47c2b23..d5c21d6f 100644 --- a/packages/ui/src/lib/i18n/messages/uk.ts +++ b/packages/ui/src/lib/i18n/messages/uk.ts @@ -2471,6 +2471,8 @@ export const dict: Record = { "memoryDebugPanel.section.noVscodeSamples": "Ще немає зразків мостів VS Code.", "memoryDebugPanel.metric.totalMessages": "Усього повідомлень", "memoryDebugPanel.metric.cachedSessions": "Кешовані сесії", + "memoryDebugPanel.metric.userMessages": "Повідомлення користувача", + "memoryDebugPanel.metric.assistantMessages": "Повідомлення асистента", "memoryDebugPanel.metric.viewportWindow": "Вікно вʼюпорту", "memoryDebugPanel.metric.zombieTimeout": "Тайм-аут зомбі", "memoryDebugPanel.metric.githubTotalRequests": "Загальна кількість запитів GitHub", @@ -2488,6 +2490,7 @@ export const dict: Record = { "memoryDebugPanel.metric.messagesValue": "{count} повідомлення", "memoryDebugPanel.metric.minutesValue": "{count} хвилин", "memoryDebugPanel.metric.msgsValue": "{count} повідомлення", + "memoryDebugPanel.metric.roleMsgsValue": "К {user} / А {assistant}", "memoryDebugPanel.metric.countValue": "кількість {value}", "memoryDebugPanel.metric.avgValue": "середнє {value}", "memoryDebugPanel.metric.maxValue": "макс. {value}", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.ts b/packages/ui/src/lib/i18n/messages/zh-CN.ts index 34c45be2..7e6c5c2d 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.ts @@ -2471,6 +2471,8 @@ export const dict: Record = { 'memoryDebugPanel.section.noVscodeSamples': '暂无 VS Code 桥接采样。', 'memoryDebugPanel.metric.totalMessages': '消息总数', 'memoryDebugPanel.metric.cachedSessions': '缓存会话', + 'memoryDebugPanel.metric.userMessages': '用户消息', + 'memoryDebugPanel.metric.assistantMessages': '助手消息', 'memoryDebugPanel.metric.viewportWindow': '视口窗口', 'memoryDebugPanel.metric.zombieTimeout': '僵尸超时', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 请求总数', @@ -2488,6 +2490,7 @@ export const dict: Record = { 'memoryDebugPanel.metric.messagesValue': '{count} 条消息', 'memoryDebugPanel.metric.minutesValue': '{count} 分钟', 'memoryDebugPanel.metric.msgsValue': '{count} 条', + 'memoryDebugPanel.metric.roleMsgsValue': '用户 {user} / 助手 {assistant}', 'memoryDebugPanel.metric.countValue': '次数 {value}', 'memoryDebugPanel.metric.avgValue': '平均 {value}', 'memoryDebugPanel.metric.maxValue': '最大 {value}', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.ts b/packages/ui/src/lib/i18n/messages/zh-TW.ts index 83a004d6..07a54e10 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.ts @@ -2468,6 +2468,8 @@ export const dict: Record = { 'memoryDebugPanel.section.noVscodeSamples': '暫無 VS Code 橋接取樣。', 'memoryDebugPanel.metric.totalMessages': '訊息總數', 'memoryDebugPanel.metric.cachedSessions': '快取會話', + 'memoryDebugPanel.metric.userMessages': '使用者訊息', + 'memoryDebugPanel.metric.assistantMessages': '助理訊息', 'memoryDebugPanel.metric.viewportWindow': '視口視窗', 'memoryDebugPanel.metric.zombieTimeout': '殭屍逾時', 'memoryDebugPanel.metric.githubTotalRequests': 'GitHub 請求總數', @@ -2485,6 +2487,7 @@ export const dict: Record = { 'memoryDebugPanel.metric.messagesValue': '{count} 條訊息', 'memoryDebugPanel.metric.minutesValue': '{count} 分鐘', 'memoryDebugPanel.metric.msgsValue': '{count} 條', + 'memoryDebugPanel.metric.roleMsgsValue': '使用者 {user} / 助理 {assistant}', 'memoryDebugPanel.metric.countValue': '次數 {value}', 'memoryDebugPanel.metric.avgValue': '平均 {value}', 'memoryDebugPanel.metric.maxValue': '最大 {value}',