Make merged settings non-nullable and fix all lints related to that. (#16647)

This commit is contained in:
Jacob Richman
2026-01-15 09:26:10 -08:00
committed by GitHub
parent 2b6bfe4097
commit f7f38e2b9e
59 changed files with 964 additions and 744 deletions
+24 -20
View File
@@ -38,8 +38,12 @@ import {
type OutputFormat,
GEMINI_MODEL_ALIAS_AUTO,
} from '@google/gemini-cli-core';
import type { Settings } from './settings.js';
import { saveModelChange, loadSettings } from './settings.js';
import {
type Settings,
type MergedSettings,
saveModelChange,
loadSettings,
} from './settings.js';
import { loadSandboxConfig } from './sandboxConfig.js';
import { resolvePath } from '../utils/resolvePath.js';
@@ -54,7 +58,6 @@ import { requestConsentNonInteractive } from './extensions/consent.js';
import { promptForSetting } from './extensions/extensionSettings.js';
import type { EventEmitter } from 'node:stream';
import { runExitCleanup } from '../utils/cleanup.js';
import { getEnableHooks, getEnableHooksUI } from './settingsSchema.js';
export interface CliArgs {
query: string | undefined;
@@ -82,7 +85,9 @@ export interface CliArgs {
recordResponses: string | undefined;
}
export async function parseArguments(settings: Settings): Promise<CliArgs> {
export async function parseArguments(
settings: MergedSettings,
): Promise<CliArgs> {
const rawArgv = hideBin(process.argv);
const yargsInstance = yargs(rawArgv)
.locale('en')
@@ -280,16 +285,16 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
return true;
});
if (settings?.experimental?.extensionManagement ?? true) {
if (settings.experimental.extensionManagement) {
yargsInstance.command(extensionsCommand);
}
if (settings?.experimental?.skills ?? false) {
if (settings.experimental.skills) {
yargsInstance.command(skillsCommand);
}
// Register hooks command if hooks are enabled
if (getEnableHooksUI(settings)) {
if (settings.tools.enableHooks) {
yargsInstance.command(hooksCommand);
}
@@ -392,7 +397,7 @@ export interface LoadCliConfigOptions {
}
export async function loadCliConfig(
settings: Settings,
settings: MergedSettings,
sessionId: string,
argv: CliArgs,
options: LoadCliConfigOptions = {},
@@ -590,10 +595,7 @@ export async function loadCliConfig(
}
}
const excludeTools = mergeExcludeTools(
settings,
extraExcludes.length > 0 ? extraExcludes : undefined,
);
const excludeTools = mergeExcludeTools(settings, extraExcludes);
// Create a settings object that includes CLI overrides for policy generation
const effectiveSettings: Settings = {
@@ -742,15 +744,17 @@ export async function loadCliConfig(
disableLLMCorrection: settings.tools?.disableLLMCorrection,
modelConfigServiceConfig: settings.modelConfigs,
// TODO: loading of hooks based on workspace trust
enableHooks: getEnableHooks(settings),
enableHooksUI: getEnableHooksUI(settings),
enableHooks:
(settings.tools?.enableHooks ?? true) &&
(settings.hooks?.enabled ?? false),
enableHooksUI: settings.tools?.enableHooks ?? true,
hooks: settings.hooks || {},
projectHooks: projectHooks || {},
onModelChange: (model: string) => saveModelChange(loadedSettings, model),
onReload: async () => {
const refreshedSettings = loadSettings(cwd);
return {
disabledSkills: refreshedSettings.merged.skills?.disabled,
disabledSkills: refreshedSettings.merged.skills.disabled,
agents: refreshedSettings.merged.agents,
};
},
@@ -758,12 +762,12 @@ export async function loadCliConfig(
}
function mergeExcludeTools(
settings: Settings,
extraExcludes?: string[] | undefined,
settings: MergedSettings,
extraExcludes: string[] = [],
): string[] {
const allExcludeTools = new Set([
...(settings.tools?.exclude || []),
...(extraExcludes || []),
...(settings.tools.exclude || []),
...extraExcludes,
]);
return [...allExcludeTools];
return Array.from(allExcludeTools);
}