import type { TranscriptSkillActivation, TranscriptUserOrigin } from '../model/frame'; import type { TurnOrigin } from '../model/turn'; export function projectTranscriptUserOrigin(origin: unknown): TranscriptUserOrigin | undefined { const candidate = origin as { readonly kind?: unknown; readonly skillActivations?: unknown; readonly clientMetadata?: unknown; readonly trigger?: unknown; readonly skillName?: unknown; readonly skillArgs?: unknown; } | undefined; if (candidate?.kind !== 'user' && candidate?.kind !== 'skill_activation') return undefined; const clientMetadata = Array.isArray(candidate.clientMetadata) ? candidate.clientMetadata.filter((entry): entry is Record => typeof entry === 'object' && entry !== null && !Array.isArray(entry)) : []; if (candidate.kind === 'skill_activation') { if (candidate.trigger !== 'user-slash') return undefined; if (typeof candidate.skillName !== 'string' || candidate.skillName.length === 0) return undefined; return { kind: 'skill_activation', trigger: 'user-slash', skillName: candidate.skillName, skillArgs: typeof candidate.skillArgs === 'string' ? candidate.skillArgs : undefined, clientMetadata: clientMetadata.length > 0 ? clientMetadata : undefined, }; } if (!Array.isArray(candidate.skillActivations) && clientMetadata.length === 0) return { kind: 'user' }; const skillActivations = (Array.isArray(candidate.skillActivations) ? candidate.skillActivations : []).flatMap((activation): TranscriptSkillActivation[] => { if (typeof activation !== 'object' || activation === null) return []; const value = activation as { readonly skillName?: unknown; readonly skillArgs?: unknown }; if (typeof value.skillName !== 'string') return []; return [{ skillName: value.skillName, skillArgs: typeof value.skillArgs === 'string' ? value.skillArgs : undefined, }]; }); return { kind: 'user', clientMetadata: clientMetadata.length > 0 ? clientMetadata : undefined, skillActivations: skillActivations.length > 0 ? skillActivations : undefined, }; } export function projectTranscriptUserTurnOrigin(origin: unknown): TurnOrigin { return { kind: 'user', payload: projectTranscriptUserOrigin(origin) ?? { kind: 'user' } }; }