type DebugConfig = { enableDebugLogs?: boolean; debugLogChannelIds?: string[]; }; export function pickDefined(input: Record): Record { const out: Record = {}; for (const [k, v] of Object.entries(input)) { if (v !== undefined) out[k] = v; } return out; } export function shouldDebugLog(cfg: DebugConfig, channelId?: string): boolean { if (!cfg.enableDebugLogs) return false; const allow = Array.isArray(cfg.debugLogChannelIds) ? cfg.debugLogChannelIds : []; if (allow.length === 0) return true; if (!channelId) return true; return allow.includes(channelId); } export function debugCtxSummary(ctx: Record, event: Record) { const meta = ((ctx.metadata || event.metadata || {}) as Record) || {}; return { sessionKey: typeof ctx.sessionKey === "string" ? ctx.sessionKey : undefined, commandSource: typeof ctx.commandSource === "string" ? ctx.commandSource : undefined, messageProvider: typeof ctx.messageProvider === "string" ? ctx.messageProvider : undefined, channel: typeof ctx.channel === "string" ? ctx.channel : undefined, channelId: typeof ctx.channelId === "string" ? ctx.channelId : undefined, senderId: typeof ctx.senderId === "string" ? ctx.senderId : undefined, from: typeof ctx.from === "string" ? ctx.from : undefined, metaSenderId: typeof meta.senderId === "string" ? meta.senderId : typeof meta.sender_id === "string" ? meta.sender_id : undefined, metaUserId: typeof meta.userId === "string" ? meta.userId : typeof meta.user_id === "string" ? meta.user_id : undefined, }; }