fix(session): tolerate contentless synthetic messages

This commit is contained in:
creatixchu committed 2026-09-07 13:01:19 +08:00
1 parent 5e277c2111
commit fdbeeddc36
2 files changed
+7 -2

No files matched your search

+2 -2
View File
@@ -366,10 +366,10 @@ function assertMessageEventShape(event: Record<string, unknown>, 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<string, unknown>
const message = (type === 'user/message' ? dataRecord : dataRecord['message']) as Record<string, unknown>
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
@@ -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' }))