feat(accessibility): Add option to disable loading phrases (#745)

This commit is contained in:
N. Taylor Mullen 2025-06-04 00:46:57 -07:00 committed by GitHub
parent d179b3aae4
commit afc30e314f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 31 additions and 3 deletions

View File

@ -214,6 +214,7 @@ export async function loadCliConfig(
vertexai: useVertexAI, vertexai: useVertexAI,
showMemoryUsage: showMemoryUsage:
argv.show_memory_usage || settings.showMemoryUsage || false, argv.show_memory_usage || settings.showMemoryUsage || false,
accessibility: settings.accessibility,
// Git-aware file filtering settings // Git-aware file filtering settings
fileFilteringRespectGitIgnore: settings.fileFiltering?.respectGitIgnore, fileFilteringRespectGitIgnore: settings.fileFiltering?.respectGitIgnore,
fileFilteringAllowBuildArtifacts: fileFilteringAllowBuildArtifacts:

View File

@ -21,6 +21,10 @@ export enum SettingScope {
Workspace = 'Workspace', Workspace = 'Workspace',
} }
export interface AccessibilitySettings {
disableLoadingPhrases?: boolean;
}
export interface Settings { export interface Settings {
theme?: string; theme?: string;
sandbox?: boolean | string; sandbox?: boolean | string;
@ -32,6 +36,7 @@ export interface Settings {
showMemoryUsage?: boolean; showMemoryUsage?: boolean;
contextFileName?: string; contextFileName?: string;
title?: string; title?: string;
accessibility?: AccessibilitySettings;
// Git-aware file filtering settings // Git-aware file filtering settings
fileFiltering?: { fileFiltering?: {

View File

@ -12,6 +12,7 @@ import {
MCPServerConfig, MCPServerConfig,
ApprovalMode, ApprovalMode,
ToolRegistry, ToolRegistry,
AccessibilitySettings,
} from '@gemini-code/core'; } from '@gemini-code/core';
import { LoadedSettings, SettingsFile, Settings } from '../config/settings.js'; import { LoadedSettings, SettingsFile, Settings } from '../config/settings.js';
@ -35,6 +36,7 @@ interface MockServerConfig {
approvalMode: ApprovalMode; approvalMode: ApprovalMode;
vertexai?: boolean; vertexai?: boolean;
showMemoryUsage?: boolean; showMemoryUsage?: boolean;
accessibility?: AccessibilitySettings;
getApiKey: Mock<() => string>; getApiKey: Mock<() => string>;
getModel: Mock<() => string>; getModel: Mock<() => string>;
@ -58,6 +60,7 @@ interface MockServerConfig {
setApprovalMode: Mock<(skip: ApprovalMode) => void>; setApprovalMode: Mock<(skip: ApprovalMode) => void>;
getVertexAI: Mock<() => boolean | undefined>; getVertexAI: Mock<() => boolean | undefined>;
getShowMemoryUsage: Mock<() => boolean>; getShowMemoryUsage: Mock<() => boolean>;
getAccessibility: Mock<() => AccessibilitySettings>;
} }
// Mock @gemini-code/core and its Config class // Mock @gemini-code/core and its Config class
@ -87,6 +90,7 @@ vi.mock('@gemini-code/core', async (importOriginal) => {
approvalMode: opts.approvalMode ?? ApprovalMode.DEFAULT, approvalMode: opts.approvalMode ?? ApprovalMode.DEFAULT,
vertexai: opts.vertexai, vertexai: opts.vertexai,
showMemoryUsage: opts.showMemoryUsage ?? false, showMemoryUsage: opts.showMemoryUsage ?? false,
accessibility: opts.accessibility ?? {},
getApiKey: vi.fn(() => opts.apiKey || 'test-key'), getApiKey: vi.fn(() => opts.apiKey || 'test-key'),
getModel: vi.fn(() => opts.model || 'test-model-in-mock-factory'), getModel: vi.fn(() => opts.model || 'test-model-in-mock-factory'),
@ -112,6 +116,7 @@ vi.mock('@gemini-code/core', async (importOriginal) => {
setApprovalMode: vi.fn(), setApprovalMode: vi.fn(),
getVertexAI: vi.fn(() => opts.vertexai), getVertexAI: vi.fn(() => opts.vertexai),
getShowMemoryUsage: vi.fn(() => opts.showMemoryUsage ?? false), getShowMemoryUsage: vi.fn(() => opts.showMemoryUsage ?? false),
getAccessibility: vi.fn(() => opts.accessibility ?? {}),
}; };
}); });
return { return {

View File

@ -399,7 +399,11 @@ export const App = ({
) : ( ) : (
<> <>
<LoadingIndicator <LoadingIndicator
currentLoadingPhrase={currentLoadingPhrase} currentLoadingPhrase={
config.getAccessibility()?.disableLoadingPhrases
? undefined
: currentLoadingPhrase
}
elapsedTime={elapsedTime} elapsedTime={elapsedTime}
/> />
<Box <Box

View File

@ -12,7 +12,7 @@ import { StreamingState } from '../types.js';
import { GeminiRespondingSpinner } from './GeminiRespondingSpinner.js'; import { GeminiRespondingSpinner } from './GeminiRespondingSpinner.js';
interface LoadingIndicatorProps { interface LoadingIndicatorProps {
currentLoadingPhrase: string; currentLoadingPhrase?: string;
elapsedTime: number; elapsedTime: number;
rightContent?: React.ReactNode; rightContent?: React.ReactNode;
} }
@ -37,7 +37,9 @@ export const LoadingIndicator: React.FC<LoadingIndicatorProps> = ({
} }
/> />
</Box> </Box>
{currentLoadingPhrase && (
<Text color={Colors.AccentPurple}>{currentLoadingPhrase}</Text> <Text color={Colors.AccentPurple}>{currentLoadingPhrase}</Text>
)}
<Text color={Colors.SubtleComment}> <Text color={Colors.SubtleComment}>
{streamingState === StreamingState.WaitingForConfirmation {streamingState === StreamingState.WaitingForConfirmation
? '' ? ''

View File

@ -31,6 +31,10 @@ export enum ApprovalMode {
YOLO = 'yolo', YOLO = 'yolo',
} }
export interface AccessibilitySettings {
disableLoadingPhrases?: boolean;
}
export class MCPServerConfig { export class MCPServerConfig {
constructor( constructor(
// For stdio transport // For stdio transport
@ -66,6 +70,7 @@ export interface ConfigParameters {
vertexai?: boolean; vertexai?: boolean;
showMemoryUsage?: boolean; showMemoryUsage?: boolean;
contextFileName?: string; contextFileName?: string;
accessibility?: AccessibilitySettings;
fileFilteringRespectGitIgnore?: boolean; fileFilteringRespectGitIgnore?: boolean;
fileFilteringAllowBuildArtifacts?: boolean; fileFilteringAllowBuildArtifacts?: boolean;
} }
@ -90,6 +95,7 @@ export class Config {
private approvalMode: ApprovalMode; private approvalMode: ApprovalMode;
private readonly vertexai: boolean | undefined; private readonly vertexai: boolean | undefined;
private readonly showMemoryUsage: boolean; private readonly showMemoryUsage: boolean;
private readonly accessibility: AccessibilitySettings;
private readonly geminiClient: GeminiClient; private readonly geminiClient: GeminiClient;
private readonly fileFilteringRespectGitIgnore: boolean; private readonly fileFilteringRespectGitIgnore: boolean;
private readonly fileFilteringAllowBuildArtifacts: boolean; private readonly fileFilteringAllowBuildArtifacts: boolean;
@ -114,6 +120,7 @@ export class Config {
this.approvalMode = params.approvalMode ?? ApprovalMode.DEFAULT; this.approvalMode = params.approvalMode ?? ApprovalMode.DEFAULT;
this.vertexai = params.vertexai; this.vertexai = params.vertexai;
this.showMemoryUsage = params.showMemoryUsage ?? false; this.showMemoryUsage = params.showMemoryUsage ?? false;
this.accessibility = params.accessibility ?? {};
this.fileFilteringRespectGitIgnore = this.fileFilteringRespectGitIgnore =
params.fileFilteringRespectGitIgnore ?? true; params.fileFilteringRespectGitIgnore ?? true;
this.fileFilteringAllowBuildArtifacts = this.fileFilteringAllowBuildArtifacts =
@ -214,6 +221,10 @@ export class Config {
return this.showMemoryUsage; return this.showMemoryUsage;
} }
getAccessibility(): AccessibilitySettings {
return this.accessibility;
}
getGeminiClient(): GeminiClient { getGeminiClient(): GeminiClient {
return this.geminiClient; return this.geminiClient;
} }