fix(session): tolerate contentless synthetic messages
This commit is contained in:
1 parent
5e277c2111
commit
fdbeeddc36
2 files changed
+7
-2
No files matched your search
@@ -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' }))
|
||||
|
||||
Reference in new issue
Block a user