| 441 | |
| 442 | /** Coerce string/number input to a finite number, throwing with a labeled message. */ |
| 443 | const requireNumber = (value: unknown, label: string): number => { |
| 444 | const num = Number(value) |
| 445 | if (value === undefined || value === null || value === '' || Number.isNaN(num)) { |
| 446 | throw new Error(`${label} is required and must be a number.`) |
| 447 | } |
| 448 | return num |
| 449 | } |
| 450 | |
| 451 | /** Coerce agent-supplied "true"/"false" strings (or booleans) to a real boolean. */ |
| 452 | const toBoolean = (value: unknown): boolean => |