refactor: streamline non-interactive session handling by removing settings parameter and introducing minimal settings instance

This commit is contained in:
mingholy.lmh
2025-11-18 12:20:47 +08:00
parent f9a2b7b032
commit 13cc8f9f55
6 changed files with 67 additions and 66 deletions

View File

@@ -38,7 +38,7 @@ import {
isControlResponse,
isControlCancel,
} from './types.js';
import type { LoadedSettings } from '../config/settings.js';
import { createMinimalSettings } from '../config/settings.js';
import { runNonInteractive } from '../nonInteractiveCli.js';
import { ConsolePatcher } from '../ui/utils/ConsolePatcher.js';
@@ -87,7 +87,6 @@ class SessionManager {
private userMessageQueue: CLIUserMessage[] = [];
private abortController: AbortController;
private config: Config;
private settings: LoadedSettings;
private sessionId: string;
private promptIdCounter: number = 0;
private inputReader: StreamJsonInputReader;
@@ -100,13 +99,8 @@ class SessionManager {
private shutdownHandler: (() => void) | null = null;
private initialPrompt: CLIUserMessage | null = null;
constructor(
config: Config,
settings: LoadedSettings,
initialPrompt?: CLIUserMessage,
) {
constructor(config: Config, initialPrompt?: CLIUserMessage) {
this.config = config;
this.settings = settings;
this.sessionId = config.getSessionId();
this.debugMode = config.getDebugMode();
this.abortController = new AbortController();
@@ -569,11 +563,17 @@ class SessionManager {
const promptId = this.getNextPromptId();
try {
await runNonInteractive(this.config, this.settings, input, promptId, {
abortController: this.abortController,
adapter: this.outputAdapter,
controlService: this.controlService ?? undefined,
});
await runNonInteractive(
this.config,
createMinimalSettings(),
input,
promptId,
{
abortController: this.abortController,
adapter: this.outputAdapter,
controlService: this.controlService ?? undefined,
},
);
} catch (error) {
// Error already handled by runNonInteractive via adapter.emitResult
if (this.debugMode) {
@@ -686,15 +686,11 @@ function extractUserMessageText(message: CLIUserMessage): string | null {
* Entry point for stream-json mode
*
* @param config - Configuration object
* @param settings - Loaded settings
* @param input - Optional initial prompt input to process before reading from stream
* @param promptId - Prompt ID (not used in stream-json mode but kept for API compatibility)
*/
export async function runNonInteractiveStreamJson(
config: Config,
settings: LoadedSettings,
input: string,
_promptId: string,
): Promise<void> {
const consolePatcher = new ConsolePatcher({
debugMode: config.getDebugMode(),
@@ -717,7 +713,7 @@ export async function runNonInteractiveStreamJson(
};
}
const manager = new SessionManager(config, settings, initialPrompt);
const manager = new SessionManager(config, initialPrompt);
await manager.run();
} finally {
consolePatcher.cleanup();