fix: remove unnecessary auto expand tools

This commit is contained in:
Haileyesus
2026-06-30 16:12:23 +03:00
parent 858bed609a
commit 770404c701
21 changed files with 7 additions and 71 deletions

View File

@@ -24,7 +24,6 @@ interface ToolRendererProps {
onFileOpen?: (filePath: string, diffInfo?: any) => void; onFileOpen?: (filePath: string, diffInfo?: any) => void;
createDiff?: (oldStr: string, newStr: string) => DiffLine[]; createDiff?: (oldStr: string, newStr: string) => DiffLine[];
selectedProject?: Project | null; selectedProject?: Project | null;
autoExpandTools?: boolean;
showRawParameters?: boolean; showRawParameters?: boolean;
rawToolInput?: string; rawToolInput?: string;
isSubagentContainer?: boolean; isSubagentContainer?: boolean;
@@ -80,7 +79,6 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
onFileOpen, onFileOpen,
createDiff, createDiff,
selectedProject, selectedProject,
autoExpandTools = false,
showRawParameters = false, showRawParameters = false,
rawToolInput, rawToolInput,
isSubagentContainer, isSubagentContainer,
@@ -151,8 +149,8 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
output={output} output={output}
isError={Boolean(toolResult?.isError)} isError={Boolean(toolResult?.isError)}
status={toolStatus !== 'completed' ? toolStatus : undefined} status={toolStatus !== 'completed' ? toolStatus : undefined}
// Commands stay collapsed by default (even consecutive ones); only // Commands stay collapsed by default; only failures auto-expand so they
// failures auto-expand so they remain visible. // remain visible.
defaultOpen={false} defaultOpen={false}
/> />
); );
@@ -199,7 +197,7 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
<PlanDisplay <PlanDisplay
title={title} title={title}
content={contentProps.content || ''} content={contentProps.content || ''}
defaultOpen={displayConfig.defaultOpen ?? autoExpandTools} defaultOpen={displayConfig.defaultOpen ?? false}
isStreaming={isStreaming} isStreaming={isStreaming}
showRawParameters={mode === 'input' && showRawParameters} showRawParameters={mode === 'input' && showRawParameters}
rawContent={rawToolInput} rawContent={rawToolInput}
@@ -216,7 +214,7 @@ export const ToolRenderer: React.FC<ToolRendererProps> = memo(({
const defaultOpen = displayConfig.defaultOpen !== undefined const defaultOpen = displayConfig.defaultOpen !== undefined
? displayConfig.defaultOpen ? displayConfig.defaultOpen
: autoExpandTools; : false;
const contentProps = displayConfig.getContentProps?.(parsedData, { const contentProps = displayConfig.getContentProps?.(parsedData, {
selectedProject, selectedProject,

View File

@@ -126,7 +126,6 @@ export interface ChatInterfaceProps {
onNavigateToSession?: (targetSessionId: string, options?: SessionNavigationOptions) => void; onNavigateToSession?: (targetSessionId: string, options?: SessionNavigationOptions) => void;
onSessionEstablished?: (sessionId: string, context: SessionEstablishedContext) => void; onSessionEstablished?: (sessionId: string, context: SessionEstablishedContext) => void;
onShowSettings?: () => void; onShowSettings?: () => void;
autoExpandTools?: boolean;
showRawParameters?: boolean; showRawParameters?: boolean;
showThinking?: boolean; showThinking?: boolean;
sendByCtrlEnter?: boolean; sendByCtrlEnter?: boolean;

View File

@@ -31,7 +31,6 @@ function ChatInterface({
onNavigateToSession, onNavigateToSession,
onSessionEstablished, onSessionEstablished,
onShowSettings, onShowSettings,
autoExpandTools,
showRawParameters, showRawParameters,
showThinking, showThinking,
sendByCtrlEnter, sendByCtrlEnter,
@@ -355,7 +354,6 @@ function ChatInterface({
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
onShowSettings={onShowSettings} onShowSettings={onShowSettings}
onGrantToolPermission={handleGrantToolPermission} onGrantToolPermission={handleGrantToolPermission}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
showThinking={showThinking} showThinking={showThinking}
selectedProject={selectedProject} selectedProject={selectedProject}

View File

@@ -62,7 +62,6 @@ interface ChatMessagesPaneProps {
onFileOpen?: (filePath: string, diffInfo?: unknown) => void; onFileOpen?: (filePath: string, diffInfo?: unknown) => void;
onShowSettings?: () => void; onShowSettings?: () => void;
onGrantToolPermission: (suggestion: { entry: string; toolName: string }) => { success: boolean }; onGrantToolPermission: (suggestion: { entry: string; toolName: string }) => { success: boolean };
autoExpandTools?: boolean;
showRawParameters?: boolean; showRawParameters?: boolean;
showThinking?: boolean; showThinking?: boolean;
selectedProject: Project; selectedProject: Project;
@@ -112,7 +111,6 @@ function ChatMessagesPane({
onFileOpen, onFileOpen,
onShowSettings, onShowSettings,
onGrantToolPermission, onGrantToolPermission,
autoExpandTools,
showRawParameters, showRawParameters,
showThinking, showThinking,
selectedProject, selectedProject,
@@ -264,7 +262,6 @@ function ChatMessagesPane({
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
onShowSettings={onShowSettings} onShowSettings={onShowSettings}
onGrantToolPermission={onGrantToolPermission} onGrantToolPermission={onGrantToolPermission}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
showThinking={showThinking} showThinking={showThinking}
selectedProject={selectedProject} selectedProject={selectedProject}
@@ -285,7 +282,6 @@ function ChatMessagesPane({
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
onShowSettings={onShowSettings} onShowSettings={onShowSettings}
onGrantToolPermission={onGrantToolPermission} onGrantToolPermission={onGrantToolPermission}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
showThinking={showThinking} showThinking={showThinking}
selectedProject={selectedProject} selectedProject={selectedProject}

View File

@@ -1,4 +1,4 @@
import { memo, useEffect, useMemo, useRef, useState } from 'react'; import { memo, useMemo, useRef } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import SessionProviderLogo from '../../../llm-logo-provider/SessionProviderLogo'; import SessionProviderLogo from '../../../llm-logo-provider/SessionProviderLogo';
@@ -30,7 +30,6 @@ type MessageComponentProps = {
onFileOpen?: (filePath: string, diffInfo?: unknown) => void; onFileOpen?: (filePath: string, diffInfo?: unknown) => void;
onShowSettings?: () => void; onShowSettings?: () => void;
onGrantToolPermission?: (suggestion: ClaudePermissionSuggestion) => PermissionGrantResult | null | undefined; onGrantToolPermission?: (suggestion: ClaudePermissionSuggestion) => PermissionGrantResult | null | undefined;
autoExpandTools?: boolean;
showRawParameters?: boolean; showRawParameters?: boolean;
showThinking?: boolean; showThinking?: boolean;
selectedProject?: Project | null; selectedProject?: Project | null;
@@ -45,7 +44,7 @@ type InteractiveOption = {
const COPY_HIDDEN_TOOL_NAMES = new Set(['Bash', 'Edit', 'Write', 'ApplyPatch']); const COPY_HIDDEN_TOOL_NAMES = new Set(['Bash', 'Edit', 'Write', 'ApplyPatch']);
const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, autoExpandTools, showRawParameters, showThinking, selectedProject, provider }: MessageComponentProps) => { const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, showRawParameters, showThinking, selectedProject, provider }: MessageComponentProps) => {
const { t } = useTranslation('chat'); const { t } = useTranslation('chat');
const isGrouped = prevMessage && prevMessage.type === message.type && const isGrouped = prevMessage && prevMessage.type === message.type &&
((prevMessage.type === 'assistant') || ((prevMessage.type === 'assistant') ||
@@ -53,7 +52,6 @@ const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, a
(prevMessage.type === 'tool') || (prevMessage.type === 'tool') ||
(prevMessage.type === 'error')); (prevMessage.type === 'error'));
const messageRef = useRef<HTMLDivElement | null>(null); const messageRef = useRef<HTMLDivElement | null>(null);
const [isExpanded, setIsExpanded] = useState(false);
const userCopyContent = String(message.content || ''); const userCopyContent = String(message.content || '');
const formattedMessageContent = useMemo( const formattedMessageContent = useMemo(
() => formatUsageLimitText(String(message.content || '')), () => formatUsageLimitText(String(message.content || '')),
@@ -72,32 +70,6 @@ const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, a
!message.isThinking; !message.isThinking;
useEffect(() => {
const node = messageRef.current;
if (!autoExpandTools || !node || !message.isToolUse) return;
const observer = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting && !isExpanded) {
setIsExpanded(true);
const details = node.querySelectorAll<HTMLDetailsElement>('details');
details.forEach((detail) => {
detail.open = true;
});
}
});
},
{ threshold: 0.1 }
);
observer.observe(node);
return () => {
observer.unobserve(node);
};
}, [autoExpandTools, isExpanded, message.isToolUse]);
const formattedTime = useMemo(() => new Date(message.timestamp).toLocaleTimeString(), [message.timestamp]); const formattedTime = useMemo(() => new Date(message.timestamp).toLocaleTimeString(), [message.timestamp]);
const shouldHideThinkingMessage = Boolean(message.isThinking && !showThinking); const shouldHideThinkingMessage = Boolean(message.isThinking && !showThinking);
@@ -210,7 +182,6 @@ const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, a
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
createDiff={createDiff} createDiff={createDiff}
selectedProject={selectedProject} selectedProject={selectedProject}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
rawToolInput={typeof message.toolInput === 'string' ? message.toolInput : undefined} rawToolInput={typeof message.toolInput === 'string' ? message.toolInput : undefined}
isSubagentContainer={message.isSubagentContainer} isSubagentContainer={message.isSubagentContainer}
@@ -250,7 +221,6 @@ const MessageComponent = memo(({ message, prevMessage, createDiff, onFileOpen, a
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
createDiff={createDiff} createDiff={createDiff}
selectedProject={selectedProject} selectedProject={selectedProject}
autoExpandTools={autoExpandTools}
/> />
</div> </div>
) )

View File

@@ -22,7 +22,6 @@ interface ToolGroupContainerProps {
onFileOpen?: (filePath: string, diffInfo?: unknown) => void; onFileOpen?: (filePath: string, diffInfo?: unknown) => void;
onShowSettings?: () => void; onShowSettings?: () => void;
onGrantToolPermission?: (suggestion: ClaudePermissionSuggestion) => PermissionGrantResult | null | undefined; onGrantToolPermission?: (suggestion: ClaudePermissionSuggestion) => PermissionGrantResult | null | undefined;
autoExpandTools?: boolean;
showRawParameters?: boolean; showRawParameters?: boolean;
showThinking?: boolean; showThinking?: boolean;
selectedProject?: Project | null; selectedProject?: Project | null;
@@ -66,7 +65,6 @@ export default function ToolGroupContainer({
onFileOpen, onFileOpen,
onShowSettings, onShowSettings,
onGrantToolPermission, onGrantToolPermission,
autoExpandTools,
showRawParameters, showRawParameters,
showThinking, showThinking,
selectedProject, selectedProject,
@@ -133,7 +131,6 @@ export default function ToolGroupContainer({
onFileOpen={onFileOpen} onFileOpen={onFileOpen}
onShowSettings={onShowSettings} onShowSettings={onShowSettings}
onGrantToolPermission={onGrantToolPermission} onGrantToolPermission={onGrantToolPermission}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
showThinking={showThinking} showThinking={showThinking}
selectedProject={selectedProject} selectedProject={selectedProject}

View File

@@ -54,7 +54,7 @@ function MainContent({
newSessionTrigger, newSessionTrigger,
}: MainContentProps) { }: MainContentProps) {
const { preferences } = useUiPreferences(); const { preferences } = useUiPreferences();
const { autoExpandTools, showRawParameters, showThinking, sendByCtrlEnter } = preferences; const { showRawParameters, showThinking, sendByCtrlEnter } = preferences;
const { currentProject, setCurrentProject } = useTaskMaster() as TaskMasterContextValue; const { currentProject, setCurrentProject } = useTaskMaster() as TaskMasterContextValue;
const { tasksEnabled, isTaskMasterInstalled } = useTasksSettings() as TasksSettingsContextValue; const { tasksEnabled, isTaskMasterInstalled } = useTasksSettings() as TasksSettingsContextValue;
@@ -170,7 +170,6 @@ function MainContent({
onNavigateToSession={onNavigateToSession} onNavigateToSession={onNavigateToSession}
onSessionEstablished={onSessionEstablished} onSessionEstablished={onSessionEstablished}
onShowSettings={onShowSettings} onShowSettings={onShowSettings}
autoExpandTools={autoExpandTools}
showRawParameters={showRawParameters} showRawParameters={showRawParameters}
showThinking={showThinking} showThinking={showThinking}
sendByCtrlEnter={sendByCtrlEnter} sendByCtrlEnter={sendByCtrlEnter}

View File

@@ -2,7 +2,6 @@ import {
Brain, Brain,
Eye, Eye,
Languages, Languages,
Maximize2,
Mic, Mic,
} from 'lucide-react'; } from 'lucide-react';
@@ -24,11 +23,6 @@ export const CHECKBOX_CLASS =
'h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-500 focus:ring-blue-500 focus:ring-2 dark:focus:ring-blue-400 bg-gray-100 dark:bg-gray-800 checked:bg-blue-600 dark:checked:bg-blue-600'; 'h-4 w-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 dark:text-blue-500 focus:ring-blue-500 focus:ring-2 dark:focus:ring-blue-400 bg-gray-100 dark:bg-gray-800 checked:bg-blue-600 dark:checked:bg-blue-600';
export const TOOL_DISPLAY_TOGGLES: PreferenceToggleItem[] = [ export const TOOL_DISPLAY_TOGGLES: PreferenceToggleItem[] = [
{
key: 'autoExpandTools',
labelKey: 'quickSettings.autoExpandTools',
icon: Maximize2,
},
{ {
key: 'showRawParameters', key: 'showRawParameters',
labelKey: 'quickSettings.showRawParameters', labelKey: 'quickSettings.showRawParameters',

View File

@@ -2,7 +2,6 @@ import type { CSSProperties } from 'react';
import type { LucideIcon } from 'lucide-react'; import type { LucideIcon } from 'lucide-react';
export type PreferenceToggleKey = export type PreferenceToggleKey =
| 'autoExpandTools'
| 'showRawParameters' | 'showRawParameters'
| 'showThinking' | 'showThinking'
| 'sendByCtrlEnter' | 'sendByCtrlEnter'

View File

@@ -24,13 +24,11 @@ export default function QuickSettingsPanelView() {
} = useQuickSettingsDrag({ isMobile }); } = useQuickSettingsDrag({ isMobile });
const quickSettingsPreferences = useMemo<QuickSettingsPreferences>(() => ({ const quickSettingsPreferences = useMemo<QuickSettingsPreferences>(() => ({
autoExpandTools: preferences.autoExpandTools,
showRawParameters: preferences.showRawParameters, showRawParameters: preferences.showRawParameters,
showThinking: preferences.showThinking, showThinking: preferences.showThinking,
sendByCtrlEnter: preferences.sendByCtrlEnter, sendByCtrlEnter: preferences.sendByCtrlEnter,
voiceEnabled: preferences.voiceEnabled, voiceEnabled: preferences.voiceEnabled,
}), [ }), [
preferences.autoExpandTools,
preferences.sendByCtrlEnter, preferences.sendByCtrlEnter,
preferences.showRawParameters, preferences.showRawParameters,
preferences.showThinking, preferences.showThinking,

View File

@@ -1,7 +1,6 @@
import { useEffect, useReducer, useRef } from 'react'; import { useEffect, useReducer, useRef } from 'react';
type UiPreferences = { type UiPreferences = {
autoExpandTools: boolean;
showRawParameters: boolean; showRawParameters: boolean;
showThinking: boolean; showThinking: boolean;
sendByCtrlEnter: boolean; sendByCtrlEnter: boolean;
@@ -33,7 +32,6 @@ type UiPreferencesAction =
| ResetPreferencesAction; | ResetPreferencesAction;
const DEFAULTS: UiPreferences = { const DEFAULTS: UiPreferences = {
autoExpandTools: false,
showRawParameters: false, showRawParameters: false,
showThinking: true, showThinking: true,
sendByCtrlEnter: false, sendByCtrlEnter: false,

View File

@@ -57,7 +57,6 @@
"inputSettings": "Eingabeeinstellungen" "inputSettings": "Eingabeeinstellungen"
}, },
"darkMode": "Darkmode", "darkMode": "Darkmode",
"autoExpandTools": "Werkzeuge automatisch erweitern",
"showRawParameters": "Rohe Parameter anzeigen", "showRawParameters": "Rohe Parameter anzeigen",
"showThinking": "Denken anzeigen", "showThinking": "Denken anzeigen",
"sendByCtrlEnter": "Mit Strg+Enter senden", "sendByCtrlEnter": "Mit Strg+Enter senden",

View File

@@ -73,7 +73,6 @@
"inputSettings": "Input Settings" "inputSettings": "Input Settings"
}, },
"darkMode": "Dark Mode", "darkMode": "Dark Mode",
"autoExpandTools": "Auto-expand tools",
"showRawParameters": "Show raw parameters", "showRawParameters": "Show raw parameters",
"showThinking": "Show thinking", "showThinking": "Show thinking",
"sendByCtrlEnter": "Send by Ctrl+Enter", "sendByCtrlEnter": "Send by Ctrl+Enter",

View File

@@ -57,7 +57,6 @@
"inputSettings": "Paramètres de saisie" "inputSettings": "Paramètres de saisie"
}, },
"darkMode": "Mode sombre", "darkMode": "Mode sombre",
"autoExpandTools": "Développer automatiquement les outils",
"showRawParameters": "Afficher les paramètres bruts", "showRawParameters": "Afficher les paramètres bruts",
"showThinking": "Afficher la réflexion", "showThinking": "Afficher la réflexion",
"sendByCtrlEnter": "Envoyer avec Ctrl+Entrée", "sendByCtrlEnter": "Envoyer avec Ctrl+Entrée",

View File

@@ -57,7 +57,6 @@
"inputSettings": "Impostazioni input" "inputSettings": "Impostazioni input"
}, },
"darkMode": "Modalità scura", "darkMode": "Modalità scura",
"autoExpandTools": "Espandi strumenti automaticamente",
"showRawParameters": "Mostra parametri grezzi", "showRawParameters": "Mostra parametri grezzi",
"showThinking": "Mostra ragionamento", "showThinking": "Mostra ragionamento",
"sendByCtrlEnter": "Invia con Ctrl+Invio", "sendByCtrlEnter": "Invia con Ctrl+Invio",

View File

@@ -57,7 +57,6 @@
"inputSettings": "入力設定" "inputSettings": "入力設定"
}, },
"darkMode": "ダークモード", "darkMode": "ダークモード",
"autoExpandTools": "ツールを自動展開",
"showRawParameters": "生パラメータを表示", "showRawParameters": "生パラメータを表示",
"showThinking": "思考を表示", "showThinking": "思考を表示",
"sendByCtrlEnter": "Ctrl+Enterで送信", "sendByCtrlEnter": "Ctrl+Enterで送信",

View File

@@ -57,7 +57,6 @@
"inputSettings": "입력 설정" "inputSettings": "입력 설정"
}, },
"darkMode": "다크 모드", "darkMode": "다크 모드",
"autoExpandTools": "도구 자동 펼치기",
"showRawParameters": "Raw 파라미터 표시", "showRawParameters": "Raw 파라미터 표시",
"showThinking": "생각 과정 표시", "showThinking": "생각 과정 표시",
"sendByCtrlEnter": "Ctrl+Enter로 전송", "sendByCtrlEnter": "Ctrl+Enter로 전송",

View File

@@ -57,7 +57,6 @@
"inputSettings": "Настройки ввода" "inputSettings": "Настройки ввода"
}, },
"darkMode": "Темная тема", "darkMode": "Темная тема",
"autoExpandTools": "Автоматически разворачивать инструменты",
"showRawParameters": "Показывать сырые параметры", "showRawParameters": "Показывать сырые параметры",
"showThinking": "Показывать размышления", "showThinking": "Показывать размышления",
"sendByCtrlEnter": "Отправка по Ctrl+Enter", "sendByCtrlEnter": "Отправка по Ctrl+Enter",

View File

@@ -57,7 +57,6 @@
"inputSettings": "Girdi Ayarları" "inputSettings": "Girdi Ayarları"
}, },
"darkMode": "Koyu Mod", "darkMode": "Koyu Mod",
"autoExpandTools": "Araçları otomatik genişlet",
"showRawParameters": "Ham parametreleri göster", "showRawParameters": "Ham parametreleri göster",
"showThinking": "Düşünmeyi göster", "showThinking": "Düşünmeyi göster",
"sendByCtrlEnter": "Ctrl+Enter ile gönder", "sendByCtrlEnter": "Ctrl+Enter ile gönder",

View File

@@ -57,7 +57,6 @@
"inputSettings": "输入设置" "inputSettings": "输入设置"
}, },
"darkMode": "深色模式", "darkMode": "深色模式",
"autoExpandTools": "自动展开工具",
"showRawParameters": "显示原始参数", "showRawParameters": "显示原始参数",
"showThinking": "显示思考过程", "showThinking": "显示思考过程",
"sendByCtrlEnter": "使用 Ctrl+Enter 发送", "sendByCtrlEnter": "使用 Ctrl+Enter 发送",

View File

@@ -57,7 +57,6 @@
"inputSettings": "輸入設定" "inputSettings": "輸入設定"
}, },
"darkMode": "深色模式", "darkMode": "深色模式",
"autoExpandTools": "自動展開工具",
"showRawParameters": "顯示原始參數", "showRawParameters": "顯示原始參數",
"showThinking": "顯示思考過程", "showThinking": "顯示思考過程",
"sendByCtrlEnter": "使用 Ctrl+Enter 傳送", "sendByCtrlEnter": "使用 Ctrl+Enter 傳送",