@@ -3,6 +3,11 @@ import { createRequire } from "node:module";
|
3 | 3 | import path from "node:path"; |
4 | 4 | import { Client } from "@modelcontextprotocol/sdk/client/index.js"; |
5 | 5 | import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; |
| 6 | +import { |
| 7 | +appendQaChildOutputTail, |
| 8 | +createQaChildOutputTail, |
| 9 | +formatQaChildOutputTail, |
| 10 | +} from "./child-output.js"; |
6 | 11 | import { extractQaToolPayload } from "./extract-tool-payload.js"; |
7 | 12 | import { resolveQaNodeExecPath } from "./node-exec.js"; |
8 | 13 | import type { |
@@ -54,11 +59,11 @@ async function callPluginToolsMcp(params: {
|
54 | 59 | cwd: params.env.gateway.tempRoot, |
55 | 60 | env: transportEnv, |
56 | 61 | }); |
57 | | -let stderrTail = ""; |
| 62 | +const stderrTail = createQaChildOutputTail(MCP_STDERR_TAIL_LIMIT); |
58 | 63 | const stderr = transport.stderr; |
59 | 64 | if (stderr && typeof stderr.on === "function") { |
60 | 65 | stderr.on("data", (chunk: unknown) => { |
61 | | -stderrTail = `${stderrTail}${String(chunk)}`.slice(-MCP_STDERR_TAIL_LIMIT); |
| 66 | +appendQaChildOutputTail(stderrTail, chunk); |
62 | 67 | }); |
63 | 68 | } |
64 | 69 | const client = new Client({ name: "openclaw-qa-suite", version: "0.0.0" }, {}); |
@@ -85,7 +90,7 @@ async function callPluginToolsMcp(params: {
|
85 | 90 | { timeout: MCP_REQUEST_TIMEOUT_MS }, |
86 | 91 | ); |
87 | 92 | } catch (error) { |
88 | | -const tail = stderrTail.trim(); |
| 93 | +const tail = formatQaChildOutputTail(stderrTail, "MCP stderr").trim(); |
89 | 94 | if (!tail || !(error instanceof Error)) { |
90 | 95 | throw error; |
91 | 96 | } |
|