/** * schema-domain-cluster.ts, the `cluster.*` config domain. * * These settings describe how the local network's goodvibes nodes agree on * which ONE of them consumes inbound channel messages. They never affect * outbound sends, sessions, the control plane, or HTTP, those run on every * node regardless of who holds the role. * * `cluster.peers` is an array, so like `conversationGate.gatedSurfaces` it is * not a scalar ConfigKey; it is read through `getCategory('cluster')` and * carried in DAEMON_OWNED_NON_SCHEMA_CONFIG_PATHS so ownership walks see it. */ import { type ConfigSettingDefinition } from './schema-shared.js'; /** LAN leader election (`cluster.*`). */ export interface ClusterConfig { enabled: boolean; heartbeatSeconds: number; masterTimeoutSeconds: number; bootProbeSeconds: number; port: number; multicastGroup: string; secret: string; /** * Static list of other nodes, as `host` or `host:port`, for networks that * drop multicast (many corporate wireless networks, some VPN interfaces). * Additive rather than exclusive: coordination messages go to the multicast * group AND to every host listed here, so a mixed network where only some * links carry multicast still converges. Empty, the default, means * multicast only, and this setting does nothing. */ peers: string[]; /** How often the internal group key is replaced, in hours. */ keyRotationHours: number; /** How long both generations are accepted around a rotation, in minutes. */ keyRotationGraceMinutes: number; /** How often this machine advertises its group on the network, in seconds. */ beaconSeconds: number; /** How often the member list is shared with the group, in seconds. */ rosterGossipSeconds: number; } declare module './schema-types.js' { interface GoodVibesConfig { cluster: ClusterConfig; } } export declare const clusterConfigDefaults: { cluster: ClusterConfig; }; export declare const clusterConfigSettings: ConfigSettingDefinition[]; //# sourceMappingURL=schema-domain-cluster.d.ts.map