Variable: GenieAttachmentSchema
constGenieAttachmentSchema:ZodObject<{attachment_id:ZodOptional<ZodString>;attachment_type:ZodOptional<ZodCustom<AttachmentType,AttachmentType>>;query:ZodOptional<ZodObject<{description:ZodOptional<ZodString>;id:ZodOptional<ZodString>;last_updated_timestamp:ZodOptional<ZodNumber>;parameters:ZodOptional<ZodArray<ZodObject<{keyword:ZodOptional<ZodString>;sql_type:ZodOptional<ZodString>;value:ZodOptional<ZodString>; },$strip>>>;query:ZodOptional<ZodString>;query_result_metadata:ZodOptional<ZodObject<{is_truncated:ZodOptional<ZodBoolean>;row_count:ZodOptional<ZodNumber>; },$strip>>;statement_id:ZodOptional<ZodString>;thoughts:ZodOptional<ZodArray<ZodObject<{content:ZodString;thought_type:ZodCustom<GenieThoughtType,GenieThoughtType>; },$strip>>>;title:ZodOptional<ZodString>; },$strip>>;suggested_questions:ZodOptional<ZodObject<{questions:ZodOptional<ZodArray<ZodString>>; },$strip>>;text:ZodOptional<ZodObject<{content:ZodOptional<ZodString>;id:ZodOptional<ZodString>;purpose:ZodOptional<ZodCustom<GenieTextAttachmentPurpose,GenieTextAttachmentPurpose>>; },$strip>>; },$strip>
GenieAttachment with:
queryre-typed to the thoughts-aware GenieQueryAttachmentSchema.attachment_typediscriminator literal (AttachmentType) so consumers canswitch (att.attachment_type)to narrow which sub-object is populated. Optional on the wire (Genie doesn’t send it); callers compute it with detectAttachmentType when they want the literal up-front.
text is re-typed to the forward-compatible
GenieTextAttachmentSchema. attachment_id and
suggested_questions pass through unchanged. attachment_id is genuinely
optional on the wire:
the first text attachment Genie emits per turn (the “main
answer text”) arrives with no id, only the follow-up text
attachment gets one.