From aa1d1c65246b9ead814aaf44763faa7724e3725c Mon Sep 17 00:00:00 2001 From: Adam Weidman Date: Thu, 7 May 2026 14:32:22 -0400 Subject: [PATCH] refactor: address review follow-ups for local protocol --- packages/core/src/agent/content-utils.test.ts | 10 ++++++---- packages/core/src/agent/content-utils.ts | 2 -- packages/core/src/agent/legacy-agent-session.test.ts | 7 ++++--- packages/core/src/agent/legacy-agent-session.ts | 6 ++++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/core/src/agent/content-utils.test.ts b/packages/core/src/agent/content-utils.test.ts index 346b0e2a56..53fe867c59 100644 --- a/packages/core/src/agent/content-utils.test.ts +++ b/packages/core/src/agent/content-utils.test.ts @@ -187,14 +187,16 @@ describe('contentPartsToGeminiParts', () => { ]); }); - it('throws on unknown ContentPart variants', () => { + it('serializes unknown ContentPart variants', () => { // Force an unknown variant past the type system const content = [ { type: 'custom_widget', payload: 123 }, ] as unknown as ContentPart[]; - expect(() => contentPartsToGeminiParts(content)).toThrow( - 'Unhandled ContentPart type: {"type":"custom_widget","payload":123}', - ); + const result = contentPartsToGeminiParts(content); + expect(result).toHaveLength(1); + expect(result[0]).toEqual({ + text: JSON.stringify({ type: 'custom_widget', payload: 123 }), + }); }); }); diff --git a/packages/core/src/agent/content-utils.ts b/packages/core/src/agent/content-utils.ts index 1c716ffd11..50d054ff0e 100644 --- a/packages/core/src/agent/content-utils.ts +++ b/packages/core/src/agent/content-utils.ts @@ -99,8 +99,6 @@ export function contentPartsToGeminiParts(content: ContentPart[]): Part[] { })(part); break; } - break; - } } } return result; diff --git a/packages/core/src/agent/legacy-agent-session.test.ts b/packages/core/src/agent/legacy-agent-session.test.ts index 1be4b023bd..525548e292 100644 --- a/packages/core/src/agent/legacy-agent-session.test.ts +++ b/packages/core/src/agent/legacy-agent-session.test.ts @@ -241,10 +241,11 @@ describe('LegacyAgentSession', () => { ); }); - it('returns null streamId for non-message payloads', async () => { + it('throws for non-message payloads', async () => { const session = new LegacyAgentSession(deps); - const result = await session.send({ update: { title: 'test' } }); - expect(result.streamId).toBeNull(); + await expect(session.send({ update: { title: 'test' } })).rejects.toThrow( + 'only supports message sends', + ); }); it('throws if send is called while a stream is active', async () => { diff --git a/packages/core/src/agent/legacy-agent-session.ts b/packages/core/src/agent/legacy-agent-session.ts index 182256323f..e8d5e56ef5 100644 --- a/packages/core/src/agent/legacy-agent-session.ts +++ b/packages/core/src/agent/legacy-agent-session.ts @@ -105,10 +105,12 @@ export class LegacyAgentProtocol implements AgentProtocol { }; } - async send(payload: AgentSend): Promise<{ streamId: string | null }> { + async send(payload: AgentSend): Promise<{ streamId: string }> { const message = 'message' in payload ? payload.message : undefined; if (!message) { - return { streamId: null }; + throw new Error( + 'LegacyAgentSession.send() only supports message sends for the moment.', + ); } if (this._activeStreamId) {