// Boundary helpers for values that enter Context Usage from JSON, Pi internals, // provider payloads, or other untyped seams. Keep generic uncertainty here or in // domain-named parsers, not in rendering/core logic. export type JsonPrimitive = string | number | boolean | null; export type JsonValue = JsonPrimitive | JsonObject | JsonValue[]; export type JsonObject = { [key: string]: JsonValue }; export function isJsonObject(value: unknown): value is JsonObject { return !!value && typeof value === "object" && !Array.isArray(value); } export function jsonObjectOrEmpty(value: unknown): JsonObject { return isJsonObject(value) ? value : {}; } export function stringValue(value: unknown): string | undefined { return typeof value === "string" ? value : undefined; } export function positiveNumberValue(value: unknown): number | undefined { return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined; } export function booleanValue(value: unknown): boolean | undefined { return typeof value === "boolean" ? value : undefined; }