openspec/lightweight-tasks/task1-2-4.md

feat: implement stream-json session handling and control requests
This commit is contained in:
x22x22
2025-10-30 12:04:58 +08:00
parent c7ca1d40fd
commit e25d68afe9
7 changed files with 928 additions and 51 deletions

View File

@@ -23,6 +23,7 @@ import { getStartupWarnings } from './utils/startupWarnings.js';
import { getUserStartupWarnings } from './utils/userStartupWarnings.js';
import { ConsolePatcher } from './ui/utils/ConsolePatcher.js';
import { runNonInteractive } from './nonInteractiveCli.js';
import { runStreamJsonSession } from './streamJson/session.js';
import { ExtensionStorage, loadExtensions } from './config/extension.js';
import {
cleanupCheckpoints,
@@ -414,6 +415,29 @@ export async function main() {
input = `${stdinData}\n\n${input}`;
}
}
const inputFormat =
typeof config.getInputFormat === 'function'
? config.getInputFormat()
: 'text';
if (inputFormat === 'stream-json') {
const trimmedInput = (input ?? '').trim();
const nonInteractiveConfig = await validateNonInteractiveAuth(
settings.merged.security?.auth?.selectedType,
settings.merged.security?.auth?.useExternal,
config,
settings,
);
await runStreamJsonSession(
nonInteractiveConfig,
settings,
trimmedInput.length > 0 ? trimmedInput : undefined,
);
await runExitCleanup();
process.exit(0);
}
if (!input) {
console.error(
`No input provided via stdin. Input can be provided by piping data into gemini or using the --prompt option.`,