


























@@ -1,8 +1,7 @@
11import type { AddressInfo } from "node:net";
22import net from "node:net";
3-import { afterEach, describe, expect, it, vi } from "vitest";
3+import { afterEach, describe, expect, it } from "vitest";
44import { WebSocketServer, type RawData, type WebSocket } from "ws";
5-import { __testing as agentJobTesting } from "../../../src/gateway/server-methods/agent-job.js";
65import { installGatewayTestHooks, startServer } from "../../../src/gateway/test-helpers.js";
76import { emitAgentEvent, registerAgentRunContext } from "../../../src/infra/agent-events.js";
87import { GatewayClientTransport, OpenClaw } from "./index.js";
@@ -283,7 +282,7 @@ describe("OpenClaw SDK websocket e2e", () => {
283282describe("OpenClaw SDK real Gateway e2e", () => {
284283installGatewayTestHooks({ scope: "test" });
285284286-it("consumes real Gateway events, waits, and calls current model status RPCs", async () => {
285+it("streams real Gateway agent events", async () => {
287286const token = "sdk-real-gateway-token";
288287const started = await startServer(token, { controlUiEnabled: false });
289288const transport = new GatewayClientTransport({
@@ -298,18 +297,27 @@ describe("OpenClaw SDK real Gateway e2e", () => {
298297try {
299298await oc.connect();
300299301-await expect(oc.models.status({ probe: false })).resolves.toMatchObject({
302-providers: expect.any(Array),
303-});
304-305300registerAgentRunContext(runId, {
306301sessionKey: "agent:main:dashboard:sdk-real-gateway",
307302verboseLevel: "off",
308303});
309304310305const run = await oc.runs.get(runId);
311-const waitPromise = run.wait({ timeoutMs: 1_000 });
312-await vi.waitFor(() => expect(agentJobTesting.getWaiterCount(runId)).toBeGreaterThan(0));
306+const eventsPromise = (async () => {
307+const seen: string[] = [];
308+const sessionKeys: Array<string | undefined> = [];
309+for await (const event of run.events()) {
310+seen.push(event.type);
311+sessionKeys.push(event.sessionKey);
312+if (event.type === "run.completed") {
313+break;
314+}
315+}
316+return { seen, sessionKeys };
317+})();
318+const eventsTimeout = new Promise<never>((_resolve, reject) => {
319+setTimeout(() => reject(new Error("timed out waiting for real Gateway SDK events")), 2_000);
320+});
313321314322emitAgentEvent({
315323 runId,
@@ -327,22 +335,7 @@ describe("OpenClaw SDK real Gateway e2e", () => {
327335data: { phase: "end", endedAt: 222 },
328336});
329337330-await expect(waitPromise).resolves.toMatchObject({
331- runId,
332-status: "completed",
333-startedAt: 111,
334-endedAt: 222,
335-});
336-337-const seen: string[] = [];
338-const sessionKeys: Array<string | undefined> = [];
339-for await (const event of run.events()) {
340-seen.push(event.type);
341-sessionKeys.push(event.sessionKey);
342-if (event.type === "run.completed") {
343-break;
344-}
345-}
338+const { seen, sessionKeys } = await Promise.race([eventsPromise, eventsTimeout]);
346339expect(seen).toEqual(["run.started", "assistant.delta", "run.completed"]);
347340expect(sessionKeys).toEqual([
348341"agent:main:dashboard:sdk-real-gateway",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。