import type { EventEnvelope } from "@hasna/events"; /** Deep field extraction over Hasna event envelopes and todos task records. */ export declare function eventData(event: EventEnvelope): Record; export declare function eventMetadata(event: EventEnvelope): Record; export declare function stringField(value: unknown): string | undefined; export declare function slugSegment(value: string, fallback?: string): string; export declare function stableSuffix(value: string): string; export declare function stableHash(parts: unknown[]): string; export declare function taskEventField(data: Record, keys: string[]): string | undefined; export declare function objectField(value: unknown): Record | undefined; export declare function taskEventRecords(data: Record, metadata: Record): Record[]; export declare function booleanLike(value: unknown): boolean; export declare function hasTruthyField(records: Record[], keys: string[]): boolean; export declare function firstTruthyField(records: Record[], keys: string[]): string | undefined; export declare function automationRecords(data: Record, metadata: Record): Record[]; export declare function tagsFromValue(value: unknown): string[]; export declare function taskEventTags(records: Record[]): string[]; /** * First route-disallowed tag on a task, if any. Exposed so drains can exclude * tasks that can never route (no-auto/blocked/manual/…) from the bounded * candidate window *before* slicing, instead of letting them occupy scan slots * every tick only to be rejected by eligibility — the "skip re-burns the window * forever" half of the merge-lane decay. */ export declare function taskRouteDisallowedTag(tags: string[]): string | undefined; export declare function taskRouteEligibility(data: Record, metadata: Record): { eligible: boolean; reason?: string; tags: string[]; }; export declare function canonicalRouteField(value: string): string; export declare function recordFieldValues(record: Record, field: string): string[]; export declare function routeFieldValues(records: Record[], field: string): string[]; export declare function firstRouteField(records: Record[], fields: string[]): string | undefined; export declare function routeFieldList(records: Record[], fields: string[]): string[] | undefined;