diff --git a/packages/core/session/src/index.ts b/packages/core/session/src/index.ts index 313575dcbb..2150d5ceaa 100644 --- a/packages/core/session/src/index.ts +++ b/packages/core/session/src/index.ts @@ -366,10 +366,10 @@ function assertMessageEventShape(event: Record, subject: string /** Reject the request-only image marker from durable message content at every nesting depth. */ function assertNoLoggedImageOffloadMarker(type: string, data: unknown, subject: string): void { if (type !== 'user/message' && type !== 'assistant/message' && type !== 'tool/result') return - // Both callers supply a message envelope with array content: append by type and seed by validation. const dataRecord = data as Record const message = (type === 'user/message' ? dataRecord : dataRecord['message']) as Record - const content = message['content'] as unknown[] + const content = message['content'] + if (!Array.isArray(content)) return const visit = (blocks: readonly unknown[]): void => { for (const value of blocks) { if (typeof value !== 'object' || value === null || Array.isArray(value)) continue diff --git a/packages/core/session/tests/image-offload.spec.ts b/packages/core/session/tests/image-offload.spec.ts index 4508e1c581..287c9e3ce3 100644 --- a/packages/core/session/tests/image-offload.spec.ts +++ b/packages/core/session/tests/image-offload.spec.ts @@ -92,6 +92,11 @@ describe('image/offload append validation', () => { it('rejects request-only offload markers from appended and restored messages', () => { const session = seeded() + expect(() => session.append('assistant/message', { + turn: 1, + step: 1, + message: {}, + } as never, { surfaceOp: 'append' })).not.toThrow() expect(() => session.append('user/message', createUserMessage({ content: [{ ...image('marked'), offloaded: true }], source: { kind: 'user' }, }), { surfaceOp: 'append' }))