export interface RepeaterConfig { readonly threshold: number; readonly cooldown: number; readonly maxLength: number; } export declare const DEFAULT_REPEATER_CONFIG: RepeaterConfig; export declare function resolveRepeaterConfig(raw: unknown): RepeaterConfig; export interface RepeaterInboundFields { readonly conversation: { readonly kind: 'private' | 'group' | 'channel'; readonly id: string; }; readonly content: string; readonly sender?: { readonly id: string; readonly name?: string; } | string; readonly metadata?: Readonly>; } /** * Best-effort group detection for Plugin Runtime `Message`. * Channel type comes from `conversation.kind`(metadata.type/channelType 优先, * 兼容早期适配器);无类型信息时按会话 `kind:id` 作为 group key。 */ export declare function resolveGroupId(message: RepeaterInboundFields): string | null; export type RepeaterTickResult = { readonly action: 'next'; } | { readonly action: 'repeat'; readonly content: string; }; export declare class RepeaterEngine { #private; constructor(); get totalRepeats(): number; get activeGroups(): number; tick(message: RepeaterInboundFields, config: RepeaterConfig): RepeaterTickResult; statusLines(config: RepeaterConfig): string; pruneStale(now?: number, expiry?: number, cooldown?: number): void; dispose(): void; } //# sourceMappingURL=engine.d.ts.map