diff --git a/packages/adapters/openclaw/src/server/execute.ts b/packages/adapters/openclaw/src/server/execute.ts index dca12b90..487ee2b4 100644 --- a/packages/adapters/openclaw/src/server/execute.ts +++ b/packages/adapters/openclaw/src/server/execute.ts @@ -326,7 +326,6 @@ function inferSseTerminal(input: { const doneType = normalizedType === "done" || normalizedType.endsWith(".completed") || - normalizedType.endsWith(".done") || normalizedType === "completed"; if (doneType) { return { terminal: true, failed: false, errorMessage: null }; @@ -357,7 +356,7 @@ function inferSseTerminal(input: { } if (payloadType) { - if (payloadType.endsWith(".completed") || payloadType.endsWith(".done")) { + if (payloadType.endsWith(".completed")) { return { terminal: true, failed: false, errorMessage: null }; } if ( diff --git a/server/src/__tests__/openclaw-adapter.test.ts b/server/src/__tests__/openclaw-adapter.test.ts index c8c38900..00bef759 100644 --- a/server/src/__tests__/openclaw-adapter.test.ts +++ b/server/src/__tests__/openclaw-adapter.test.ts @@ -392,6 +392,34 @@ describe("openclaw adapter execute", () => { expect(headers["x-openclaw-session-key"]).toBe("paperclip"); }); + it("does not treat response.output_text.done as a terminal OpenResponses event", async () => { + const fetchMock = vi.fn().mockResolvedValue( + sseResponse([ + "event: response.output_text.done\n", + 'data: {"type":"response.output_text.done","text":"partial"}\n\n', + "event: response.completed\n", + 'data: {"type":"response.completed","status":"completed"}\n\n', + ]), + ); + vi.stubGlobal("fetch", fetchMock); + + const result = await execute( + buildContext({ + url: "https://agent.example/v1/responses", + method: "POST", + }), + ); + + expect(result.exitCode).toBe(0); + expect(result.resultJson).toEqual( + expect.objectContaining({ + terminal: true, + eventCount: 2, + lastEventType: "response.completed", + }), + ); + }); + it("appends wake text when OpenResponses input is provided as a message object", async () => { const fetchMock = vi.fn().mockResolvedValue( sseResponse([