/** * Provider-neutral contract for the optional Redis runtime. * * Core owns feature semantics and stable facades. The extension owns Redis * packages, connections, protocol details, and transport lifecycle. * * @module extensions/distributed/redis-runtime-provider */ import type { ClaudeCodeEvent, ClaudeCodeEventHandler, ClaudeCodeEventPublisher, ClaudeCodeEventSubscriber } from "../../workflow/claude-code/types.js"; /** Registry name used by the Redis runtime extension. */ export declare const RedisRuntimeProviderName: "RedisRuntimeProvider"; /** Structural module surface used by the platform Redis adapter. */ export interface NodeRedisModule { createClient(options: { url?: string; socket?: { host?: string; port?: number; connectTimeout?: number; reconnectStrategy?: (retries: number) => number | Error; }; }): NodeRedisClient; } /** Structural node-redis client surface used by the platform adapter. */ export interface NodeRedisClient { connect(): Promise; hSet(key: string, fields: Record): Promise; hGetAll(key: string): Promise>; hDel(key: string, fields: string[]): Promise; del(keys: string[]): Promise; sAdd(key: string, members: string[]): Promise; sRem(key: string, members: string[]): Promise; sMembers(key: string): Promise; rPush(key: string, values: string[]): Promise; lRange(key: string, start: number, stop: number): Promise; lIndex(key: string, index: number): Promise; lSet(key: string, index: number, value: string): Promise; lLen(key: string): Promise; xAdd(key: string, id: string, fields: Record): Promise; xRead(streams: Array<{ key: string; id: string; }>, options?: { BLOCK?: number; COUNT?: number; }): Promise; }>; }> | null>; xGroupCreate(key: string, group: string, id: string, options?: { MKSTREAM?: boolean; }): Promise; xReadGroup(group: string, consumer: string, streams: Array<{ key: string; id: string; }>, options?: { BLOCK?: number; COUNT?: number; }): Promise; }>; }> | null>; xAck(key: string, group: string, ids: string[]): Promise; keys(pattern: string): Promise; scan(cursor: number, options?: { MATCH?: string; COUNT?: number; }): Promise<{ cursor: number; keys: string[]; }>; exists(keys: string[]): Promise; expire(key: string, seconds: number): Promise; set(key: string, value: string, options?: { NX?: boolean; PX?: number; EX?: number; }): Promise; get(key: string): Promise; publish(channel: string, message: string): Promise; subscribe(channel: string, listener: (message: string, channel: string) => void): Promise; unsubscribe(channel: string): Promise; eval(script: string, options?: { keys?: string[]; arguments?: string[]; }): Promise; close(): Promise; destroy(): void; on(event: "error", listener: (error: unknown) => void): unknown; } /** Structural client surface used by core cache features. */ export interface RedisClient { connect(): Promise; disconnect(): Promise; get(key: string): Promise; mGet(keys: string[]): Promise>; set(key: string, value: string, options?: { EX?: number; NX?: boolean; }): Promise; del(key: string | string[]): Promise; scan(cursor: number, options?: { MATCH?: string; COUNT?: number; }): Promise<{ cursor: number; keys: string[]; }>; expire(key: string, seconds: number): Promise; eval(script: string, options: { keys: string[]; arguments: string[]; }): Promise; incr(key: string): Promise; pExpire(key: string, milliseconds: number): Promise; pTTL(key: string): Promise; ttl?(key: string): Promise; info?(section?: "server" | "memory" | "cluster"): Promise; on?(event: string, listener: (...args: unknown[]) => void): void; isOpen?: boolean; } /** Independently owned Redis connection returned to a core feature. */ export interface RedisClientHandle { readonly client: RedisClient; close(): Promise; } /** Connection options accepted by the stable core Redis client facade. */ export interface RedisClientOptions { url?: string; connectTimeout?: number; autoReconnect?: boolean; tls?: boolean; password?: string; username?: string; } /** Redis Pub/Sub publisher configuration. */ export interface RedisEventPublisherConfig { /** Redis URL. */ url: string; /** Channel prefix (default: `claude-code`). */ channelPrefix?: string; /** Enable debug logging. */ debug?: boolean; } /** Redis-backed event publisher/subscriber implementation. */ export interface RedisEventPublisherImplementation extends ClaudeCodeEventPublisher, ClaudeCodeEventSubscriber { publish(event: ClaudeCodeEvent): Promise; subscribe(runId: string, handler: ClaudeCodeEventHandler): Promise<() => void>; close(): Promise; } /** Optional Redis runtime implementation supplied by an extension. */ export interface RedisRuntimeProvider { readonly id: string; loadModule(): Promise; getClient(options?: RedisClientOptions): Promise; disconnectClient(): Promise; openClient(options?: RedisClientOptions, signal?: AbortSignal): Promise; createEventPublisher(config: RedisEventPublisherConfig): Promise; close(): Promise; } /** * Validate and snapshot a provider before core invokes extension-owned code. * Accessors are rejected so registration cannot execute code during capture. */ export declare function captureRedisRuntimeProvider(value: unknown): Readonly; //# sourceMappingURL=redis-runtime-provider.d.ts.map