feat: show changed files after completed turns

Add changed-file pills with per-file diff stats
Add a chat setting to disable the feature fully
Avoid changed-file projection work when disabled
This commit is contained in:
Bohdan Triapitsyn
2026-06-03 22:11:37 +03:00
parent 9087950f1a
commit 04b1425c2e
22 changed files with 218 additions and 41 deletions
+1
View File
@@ -651,6 +651,7 @@ export interface SettingsPayload {
showOpenCodeUpdateNotifications?: boolean;
openCodeUpdateToastDismissedVersion?: string;
showToolFileIcons?: boolean;
showTurnChangedFiles?: boolean;
showExpandedBashTools?: boolean;
showExpandedEditTools?: boolean;
chatRenderMode?: 'sorted' | 'live';
+1
View File
@@ -134,6 +134,7 @@ export type DesktopSettings = {
showOpenCodeUpdateNotifications?: boolean;
openCodeUpdateToastDismissedVersion?: string;
showToolFileIcons?: boolean;
showTurnChangedFiles?: boolean;
showExpandedBashTools?: boolean;
showExpandedEditTools?: boolean;
timeFormatPreference?: 'auto' | '12h' | '24h';
@@ -1624,6 +1624,8 @@ export const settingsDict = {
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': 'Show Copy Answer, Save as image, and Read aloud on assistant text blocks that appear before later tool calls in the same response.',
'settings.openchamber.visual.field.showToolFileIconsAria': 'Show tool file icons',
'settings.openchamber.visual.field.showToolFileIcons': 'Show Tool File Icons',
'settings.openchamber.visual.field.showTurnChangedFilesAria': 'Show changed files for completed turns',
'settings.openchamber.visual.field.showTurnChangedFiles': 'Show Changed Files for Completed Turns',
'settings.openchamber.visual.field.showMobileStatusBarAria': 'Show mobile status bar',
'settings.openchamber.visual.field.showMobileStatusBar': 'Show Mobile Status Bar',
'settings.openchamber.visual.field.showDotfilesAria': 'Show dotfiles',
@@ -1591,6 +1591,8 @@ export const settingsDict = {
"settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip": "Muestra Copiar respuesta, Guardar como imagen y Leer en voz alta en bloques de texto del asistente que aparecen antes de llamadas a herramientas posteriores dentro de la misma respuesta.",
"settings.openchamber.visual.field.showToolFileIconsAria": "Mostrar iconos de archivos de herramientas",
"settings.openchamber.visual.field.showToolFileIcons": "Mostrar iconos de archivos de herramientas",
"settings.openchamber.visual.field.showTurnChangedFilesAria": "Mostrar archivos cambiados en turnos completados",
"settings.openchamber.visual.field.showTurnChangedFiles": "Mostrar archivos cambiados en turnos completados",
"settings.openchamber.visual.field.showMobileStatusBarAria": "Mostrar barra de estado móvil",
"settings.openchamber.visual.field.showMobileStatusBar": "Mostrar barra de estado móvil",
"settings.openchamber.visual.field.showDotfilesAria": "Mostrar archivos ocultos",
@@ -1591,6 +1591,8 @@ export const settingsDict = {
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': '같은 응답에서 이후 도구 호출 앞에 나타나는 어시스턴트 텍스트 블록에 답변 복사, 이미지로 저장, 소리 내어 읽기 작업을 표시합니다.',
'settings.openchamber.visual.field.showToolFileIconsAria': '도구 파일 아이콘 표시',
'settings.openchamber.visual.field.showToolFileIcons': '도구 파일 아이콘 표시',
'settings.openchamber.visual.field.showTurnChangedFilesAria': '완료된 턴의 변경 파일 표시',
'settings.openchamber.visual.field.showTurnChangedFiles': '완료된 턴의 변경 파일 표시',
'settings.openchamber.visual.field.showMobileStatusBarAria': '모바일 상태 바 표시',
'settings.openchamber.visual.field.showMobileStatusBar': '모바일 상태 바 표시',
'settings.openchamber.visual.field.showDotfilesAria': 'Dotfiles 표시',
@@ -937,6 +937,8 @@ export const settingsDict = {
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': 'Pokaż Kopiuj odpowiedź, Zapisz jako obraz i Odczytaj na głos w blokach tekstu asystenta, które pojawiają się przed późniejszymi wywołaniami narzędzi w tej samej odpowiedzi.',
'settings.openchamber.visual.field.showToolFileIcons': 'Pokaż ikony plików narzędzi',
'settings.openchamber.visual.field.showToolFileIconsAria': 'Pokaż ikony plików narzędzi',
'settings.openchamber.visual.field.showTurnChangedFiles': 'Pokaż zmienione pliki w ukończonych turach',
'settings.openchamber.visual.field.showTurnChangedFilesAria': 'Pokaż zmienione pliki w ukończonych turach',
'settings.openchamber.visual.field.spacingDensity': 'Gęstość odstępów',
'settings.openchamber.visual.field.stickyUserHeader': 'Przyklejony nagłówek użytkownika',
'settings.openchamber.visual.field.stickyUserHeaderAria': 'Przyklejony nagłówek użytkownika',
@@ -1591,6 +1591,8 @@ export const settingsDict = {
"settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip": "Mostra Copiar resposta, Salvar como imagem e Ler em voz alta em blocos de texto do assistente que aparecem antes de chamadas de ferramenta posteriores na mesma resposta.",
"settings.openchamber.visual.field.showToolFileIconsAria": "Mostrar ícones de arquivos de ferramentas",
"settings.openchamber.visual.field.showToolFileIcons": "Mostrar ícones de arquivos de ferramentas",
"settings.openchamber.visual.field.showTurnChangedFilesAria": "Mostrar arquivos alterados em turnos concluídos",
"settings.openchamber.visual.field.showTurnChangedFiles": "Mostrar arquivos alterados em turnos concluídos",
"settings.openchamber.visual.field.showMobileStatusBarAria": "Mostrar barra de status móvel",
"settings.openchamber.visual.field.showMobileStatusBar": "Mostrar barra de status móvel",
"settings.openchamber.visual.field.showDotfilesAria": "Mostrar arquivos ocultos",
@@ -1591,6 +1591,8 @@ export const settingsDict = {
"settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip": "Показує «Скопіювати відповідь», «Зберегти як зображення» та озвучення для текстових блоків асистента, які з’являються перед пізнішими викликами інструментів у тій самій відповіді.",
"settings.openchamber.visual.field.showToolFileIconsAria": "Показати значки файлів інструментів",
"settings.openchamber.visual.field.showToolFileIcons": "Показати значки файлів інструментів",
"settings.openchamber.visual.field.showTurnChangedFilesAria": "Показати змінені файли для завершених ходів",
"settings.openchamber.visual.field.showTurnChangedFiles": "Показати змінені файли для завершених ходів",
"settings.openchamber.visual.field.showMobileStatusBarAria": "Показати рядок стану мобільного пристрою",
"settings.openchamber.visual.field.showMobileStatusBar": "Показати мобільний рядок стану",
"settings.openchamber.visual.field.showDotfilesAria": "Показати dotfiles",
@@ -1591,6 +1591,8 @@ export const settingsDict = {
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': '在同一条回复中,如果助手文本块后面还有工具调用,则显示“复制回答”“保存为图片”和“朗读”操作。',
'settings.openchamber.visual.field.showToolFileIconsAria': '显示工具文件图标',
'settings.openchamber.visual.field.showToolFileIcons': '显示工具文件图标',
'settings.openchamber.visual.field.showTurnChangedFilesAria': '显示已完成回合的更改文件',
'settings.openchamber.visual.field.showTurnChangedFiles': '显示已完成回合的更改文件',
'settings.openchamber.visual.field.showMobileStatusBarAria': '显示移动端状态栏',
'settings.openchamber.visual.field.showMobileStatusBar': '显示移动端状态栏',
'settings.openchamber.visual.field.showDotfilesAria': '显示点文件',
@@ -1512,6 +1512,8 @@
'settings.openchamber.visual.field.showSplitAssistantMessageActionsTooltip': '在同一則回覆中,如果助理文字區塊後方還有工具呼叫,則顯示「複製回答」「儲存為圖片」和「朗讀」操作。',
'settings.openchamber.visual.field.showToolFileIconsAria': '顯示工具檔案圖示',
'settings.openchamber.visual.field.showToolFileIcons': '顯示工具檔案圖示',
'settings.openchamber.visual.field.showTurnChangedFilesAria': '顯示已完成回合的變更檔案',
'settings.openchamber.visual.field.showTurnChangedFiles': '顯示已完成回合的變更檔案',
'settings.openchamber.visual.field.showMobileStatusBarAria': '顯示行動裝置狀態列',
'settings.openchamber.visual.field.showMobileStatusBar': '顯示行動裝置狀態列',
'settings.openchamber.visual.field.showDotfilesAria': '顯示點檔案',
+6
View File
@@ -455,6 +455,9 @@ const applyDesktopUiPreferences = (settings: DesktopSettings) => {
if (typeof settings.showToolFileIcons === 'boolean' && settings.showToolFileIcons !== store.showToolFileIcons) {
store.setShowToolFileIcons(settings.showToolFileIcons);
}
if (typeof settings.showTurnChangedFiles === 'boolean' && settings.showTurnChangedFiles !== store.showTurnChangedFiles) {
store.setShowTurnChangedFiles(settings.showTurnChangedFiles);
}
if (typeof settings.showExpandedBashTools === 'boolean' && settings.showExpandedBashTools !== store.showExpandedBashTools) {
store.setShowExpandedBashTools(settings.showExpandedBashTools);
}
@@ -957,6 +960,9 @@ const sanitizeWebSettings = (payload: unknown): DesktopSettings | null => {
if (typeof candidate.showToolFileIcons === 'boolean') {
result.showToolFileIcons = candidate.showToolFileIcons;
}
if (typeof candidate.showTurnChangedFiles === 'boolean') {
result.showTurnChangedFiles = candidate.showTurnChangedFiles;
}
if (typeof candidate.showExpandedBashTools === 'boolean') {
result.showExpandedBashTools = candidate.showExpandedBashTools;
}