import type { ToolModelContentPart } from "assistant-stream"; const ENVELOPE_KEY = "__aui_modelContent"; export type ModelContentEnvelope = { readonly [ENVELOPE_KEY]: readonly ToolModelContentPart[]; readonly value: TResult; }; export function isModelContentEnvelope( value: TResult | ModelContentEnvelope, ): value is ModelContentEnvelope { return ( value != null && typeof value === "object" && ENVELOPE_KEY in value && Array.isArray((value as Record)[ENVELOPE_KEY]) ); } export function wrapModelContentEnvelope( result: TResult, modelContent: readonly ToolModelContentPart[], ): ModelContentEnvelope { return { [ENVELOPE_KEY]: modelContent, value: result }; } export function unwrapModelContentEnvelope( output: TResult | ModelContentEnvelope, ): { result: TResult; modelContent?: readonly ToolModelContentPart[]; } { if (isModelContentEnvelope(output)) { return { result: output.value, modelContent: output[ENVELOPE_KEY], }; } return { result: output }; }