// Cron CLI parsing helpers for Telegram topic thread ids and session targets. import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, } from "@openclaw/normalization-core/string-coerce"; export function parseCronThreadIdOption(value: unknown): number | undefined { const raw = normalizeOptionalString(value); if (!raw) { return undefined; } if (!/^\d+$/.test(raw)) { throw new Error("--thread-id must be a positive integer Telegram topic thread id"); } const parsed = Number.parseInt(raw, 10); if (!Number.isSafeInteger(parsed) || parsed <= 0) { throw new Error("--thread-id must be a safe positive integer Telegram topic thread id"); } return parsed; } export function normalizeCronSessionTargetOption(value: unknown): string | undefined { // Preserve explicit session ids after `session:` while normalizing the mode prefix. const raw = normalizeOptionalString(value); if (!raw) { return undefined; } const lower = normalizeLowercaseStringOrEmpty(raw); if (lower === "main" || lower === "isolated" || lower === "current") { return lower; } if (lower.startsWith("session:")) { const id = normalizeOptionalString(raw.slice(8)); return id ? `session:${id}` : undefined; } return undefined; }