

























@@ -13,6 +13,15 @@ import {
1313createQaChannelGatewayConfig,
1414QA_CHANNEL_REQUIRED_PLUGIN_IDS,
1515} from "./qa-channel-transport.js";
16+import {
17+appendQaChildOutput,
18+appendQaChildOutputTail,
19+createQaChildOutputCapture,
20+createQaChildOutputTail,
21+formatQaChildOutputTail,
22+QA_CHILD_STDOUT_MAX_BYTES,
23+readQaChildOutput,
24+} from "./child-output.js";
1625import { buildQaGatewayConfig } from "./qa-gateway-config.js";
17261827type ModelRow = {
@@ -164,8 +173,8 @@ export async function loadQaRunnerModelOptions(params: { repoRoot: string; signa
164173});
165174await fs.writeFile(configPath, `${JSON.stringify(cfg, null, 2)}\n`, "utf8");
166175167-const stdout: Buffer[] = [];
168-const stderr: Buffer[] = [];
176+const stdout = createQaChildOutputCapture();
177+const stderr = createQaChildOutputTail();
169178const nodeExecPath = await resolveQaNodeExecPath();
170179await new Promise<void>((resolve, reject) => {
171180let aborted = params.signal?.aborted === true;
@@ -203,8 +212,8 @@ export async function loadQaRunnerModelOptions(params: { repoRoot: string; signa
203212} else {
204213params.signal?.addEventListener("abort", abortCatalogLoad, { once: true });
205214}
206-child.stdout.on("data", (chunk) => stdout.push(Buffer.from(chunk)));
207-child.stderr.on("data", (chunk) => stderr.push(Buffer.from(chunk)));
215+child.stdout.on("data", (chunk) => appendQaChildOutput(stdout, chunk));
216+child.stderr.on("data", (chunk) => appendQaChildOutputTail(stderr, chunk));
208217child.once("error", (error) => {
209218cleanup();
210219reject(aborted ? createCatalogAbortError() : error);
@@ -216,18 +225,27 @@ export async function loadQaRunnerModelOptions(params: { repoRoot: string; signa
216225return;
217226}
218227if (code === 0) {
228+if (stdout.exceeded) {
229+reject(
230+new Error(
231+`qa model catalog stdout exceeded ${QA_CHILD_STDOUT_MAX_BYTES} bytes; refusing to parse truncated output`,
232+),
233+);
234+return;
235+}
219236resolve();
220237return;
221238}
239+const stderrText = formatQaChildOutputTail(stderr, "qa model catalog stderr");
222240reject(
223241new Error(
224-`qa model catalog failed (${code ?? "unknown"}): ${Buffer.concat(stderr).toString("utf8").trim()}`,
242+`qa model catalog failed (${code ?? "unknown"}): ${stderrText}`,
225243),
226244);
227245});
228246});
229247230-return parseQaRunnerModelOptionsOutput(Buffer.concat(stdout).toString("utf8"));
248+return parseQaRunnerModelOptionsOutput(readQaChildOutput(stdout));
231249} finally {
232250await fs.rm(tempRoot, { recursive: true, force: true });
233251}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。