/** * Routing-token grammar: `network[.subnetwork…].role[#seat]`. * * The token is what the engine matches 1:1. Capability — cognition, weight, * family, host — is NEVER encoded in the token; it is an enrolment attribute * and a registry gate. Do not smuggle capability into a segment. * * Grammar: * token = segment ("." segment)* ("#" seat)? * segment = [a-z][a-z0-9-]* (first is the network, last is the role, * any in between are subnetworks) * seat = [a-z0-9-]+ * * A single-segment token (e.g. `decide`) is a bare role with no network and no * subnetworks (`network` is absent). */ export interface RoutingToken { readonly network?: string; readonly subnetworks: readonly string[]; readonly role: string; readonly seat?: string; } /** True when `name` is a valid network/subnetwork/role segment. */ export declare function isSegmentName(name: string): boolean; /** True when `seat` is a valid seat label. */ export declare function isSeatLabel(seat: string): boolean; export type TokenParseErrorCode = "empty" | "whitespace" | "multiple-seat-markers" | "empty-seat" | "bad-seat" | "empty-segment" | "bad-segment"; export declare class TokenParseError extends Error { readonly code: TokenParseErrorCode; constructor(code: TokenParseErrorCode, message: string); } export declare function parseToken(token: string): RoutingToken; export declare function isValidToken(token: string): boolean; export declare function formatToken(token: RoutingToken): string;