




























@@ -211,6 +211,58 @@ describe("CLI attempt execution", () => {
211211let storePath: string;
212212let homeEnvSnapshot: ReturnType<typeof captureEnv> | undefined;
213213214+async function runOpenClawEmbeddedAttemptForTest(overrides?: {
215+opts?: Partial<RunAgentAttemptParams["opts"]>;
216+runId?: string;
217+}) {
218+const runId = overrides?.runId ?? "run-embedded-live-stream-gate";
219+const sessionKey = `agent:main:direct:${runId}`;
220+const sessionEntry: SessionEntry = {
221+sessionId: `session-${runId}`,
222+updatedAt: Date.now(),
223+};
224+const sessionStore: Record<string, SessionEntry> = { [sessionKey]: sessionEntry };
225+await fs.writeFile(storePath, JSON.stringify(sessionStore, null, 2), "utf-8");
226+runEmbeddedAgentMock.mockResolvedValueOnce({
227+meta: { durationMs: 1 },
228+} satisfies EmbeddedAgentRunResult);
229+230+await runAgentAttempt({
231+providerOverride: "openai",
232+originalProvider: "openai",
233+modelOverride: "gpt-5.4",
234+cfg: {} as OpenClawConfig,
235+ sessionEntry,
236+sessionId: sessionEntry.sessionId,
237+ sessionKey,
238+sessionAgentId: "main",
239+sessionFile: path.join(tmpDir, `${runId}.jsonl`),
240+workspaceDir: tmpDir,
241+body: "stream gate",
242+isFallbackRetry: false,
243+resolvedThinkLevel: "medium",
244+timeoutMs: 1_000,
245+ runId,
246+opts: {
247+message: "stream gate",
248+ ...overrides?.opts,
249+} as RunAgentAttemptParams["opts"],
250+runContext: {} as RunAgentAttemptParams["runContext"],
251+spawnedBy: undefined,
252+messageChannel: "telegram",
253+skillsSnapshot: undefined,
254+resolvedVerboseLevel: undefined,
255+agentDir: tmpDir,
256+onAgentEvent: vi.fn(),
257+authProfileProvider: "openai",
258+ sessionStore,
259+ storePath,
260+sessionHasHistory: false,
261+});
262+263+return firstEmbeddedAgentArg();
264+}
265+214266beforeEach(async () => {
215267homeEnvSnapshot = captureEnv(["HOME"]);
216268tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-cli-attempt-"));
@@ -2123,6 +2175,24 @@ describe("CLI attempt execution", () => {
21232175});
21242176});
212521772178+it("keeps live stream output for visible subagent lane runs", async () => {
2179+const embeddedArg = await runOpenClawEmbeddedAttemptForTest({
2180+opts: { lane: "subagent" },
2181+runId: "visible-subagent-stream",
2182+});
2183+2184+expect(embeddedArg.suppressLiveStreamOutput).toBe(false);
2185+});
2186+2187+it("suppresses live stream output for hidden internal runs", async () => {
2188+const embeddedArg = await runOpenClawEmbeddedAttemptForTest({
2189+opts: { lane: "subagent", sessionEffects: "internal" },
2190+runId: "internal-subagent-stream",
2191+});
2192+2193+expect(embeddedArg.suppressLiveStreamOutput).toBe(true);
2194+});
2195+21262196it("forwards selected auth profiles through metadata-scoped provider aliases", async () => {
21272197const sessionKey = "agent:main:direct:metadata-auth-alias";
21282198const sessionEntry: SessionEntry = {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。