import { CHAT_CHANNEL_ORDER } from "../channels/ids.js"; import { readCliStartupMetadata } from "./startup-metadata.js"; function dedupe(values: string[]): string[] { const seen = new Set(); const resolved: string[] = []; for (const value of values) { if (!value || seen.has(value)) { continue; } seen.add(value); resolved.push(value); } return resolved; } let precomputedChannelOptions: string[] | null | undefined; function loadPrecomputedChannelOptions(): string[] | null { if (precomputedChannelOptions !== undefined) { return precomputedChannelOptions; } try { const parsed = readCliStartupMetadata(import.meta.url) as { channelOptions?: unknown } | null; if (parsed && Array.isArray(parsed.channelOptions)) { precomputedChannelOptions = dedupe( parsed.channelOptions.filter((value): value is string => typeof value === "string"), ); return precomputedChannelOptions; } } catch { // Fall back to dynamic catalog resolution. } precomputedChannelOptions = null; return null; } export function resolveCliChannelOptions(): string[] { const precomputed = loadPrecomputedChannelOptions(); return precomputed ?? [...CHAT_CHANNEL_ORDER]; } export function formatCliChannelOptions(extra: string[] = []): string { return [...extra, ...resolveCliChannelOptions()].join("|"); } export const __testing = { resetPrecomputedChannelOptionsForTests(): void { precomputedChannelOptions = undefined; }, };