/**
 * The device surface, in one import.
 *
 * A barrel and nothing else — no logic, no re-shaping, no defaults. It exists
 * because four consumers want different thirds of this directory and none of
 * them should have to know which file a name lives in: a pack authors against
 * `types.ts`, the arena drives `sim.ts`, the office scene takes a
 * `DeviceSource` from `adapter.ts`, and the panel wants the vocabulary tables
 * from all three.
 *
 * **Nothing here imports THREE, the DOM or the network**, and that is a
 * property worth stating rather than assuming: `src/index.ts` re-exports this
 * onto the package surface, and `src/arena/` may import it, so a three.js
 * import added anywhere under `src/devices/` would break both at once. The
 * render layer for devices is `src/interiors/devices.ts`, which is deliberately
 * *not* re-exported from here.
 */

export {
  CANONICAL_CAPABILITIES,
  CAPABILITY_READING,
  DEVICE_CAPABILITIES,
  DEVICE_COMMAND_OPS,
  DEVICE_KINDS,
  DEVICE_PROVENANCE,
  DEVICE_RANGES,
  deviceKindOfAssetId,
  deviceRange,
  deviceStateSignature,
  hasCapability,
  initialDeviceState,
  isDeviceCapability,
  isDeviceCommandOp,
  isDeviceKind,
  isDeviceProvenance,
  normalizeDeviceCommand,
  validateDeviceDeclaration,
  type DeviceAnchor,
  type DeviceAssetId,
  type DeviceCapability,
  type DeviceCommand,
  type DeviceCommandOp,
  type DeviceCommandValue,
  type DeviceDeclaration,
  type DeviceKind,
  type DeviceNumericCapability,
  type DeviceOffset,
  type DeviceProvenance,
  type DeviceRange,
  type DeviceState,
} from "./types.ts";

export {
  createSimulatedDevices,
  type SimulatedDevices,
  type SimulatedDevicesOptions,
} from "./sim.ts";

export {
  createDeviceSource,
  createNullDeviceSource,
  type DeviceClient,
  type DeviceReading,
  type DeviceSource,
  type DeviceSourceOptions,
} from "./adapter.ts";
