import type { VcMeetingConsumerManagedSink, VcMeetingConsumerProfileFilter, VcMeetingConsumerResponseMode, VcMeetingListenerOutputPlacement } from '../types.js'; import type { VcMeetingPreparationQaMode } from './vc-meeting-preparations-store.js'; declare const RUNTIME_SCHEMA_VERSION: 3; export type VcMeetingRuntimeSelectedAgentStatus = 'activating' | 'active' | 'failed' | 'paused'; export interface VcMeetingRuntimeSelectedAgent { profileId: string; memberId: string; agentAppId: string; label?: string; role: string; /** Frozen role instructions for this meeting membership snapshot. */ instructions?: string; status: VcMeetingRuntimeSelectedAgentStatus; /** Last activation failure shown on the profile card. Cleared on retry/success. */ activationError?: string; filter?: VcMeetingConsumerProfileFilter; responseMode: VcMeetingConsumerResponseMode; listenerPlacement: VcMeetingListenerOutputPlacement; capabilities: string[]; ownedSinks: VcMeetingConsumerManagedSink[]; /** Immutable P0/P1 delivery semantics snapshot; optional for new records until hub activation. */ deliveryProfileHash?: string; } export declare const VC_MEETING_RUNTIME_LEGACY_PROFILE_ID = "legacy-generalist"; export declare const VC_MEETING_RUNTIME_LEGACY_MEMBER_ID = "meeting_assistant"; export declare const VC_MEETING_RUNTIME_LEGACY_ROLE = "meeting_assistant"; export declare const VC_MEETING_RUNTIME_LEGACY_PROFILE_HASH: string; export interface VcMeetingRuntimeSessionRecord { schemaVersion: typeof RUNTIME_SCHEMA_VERSION; larkAppId: string; meeting: { id: string; meetingNo?: string; topic?: string; }; listenerChatId: string; attentionTargetOpenId?: string; consumerMode?: 'pending' | 'listenOnly' | 'agent'; selectedAgents: VcMeetingRuntimeSelectedAgent[]; /** @deprecated Derived only when selectedAgents contains exactly one entry. */ selectedAgentAppId?: string; /** @deprecated Derived only when selectedAgents contains exactly one entry. */ selectedAgentLabel?: string; /** @deprecated Derived only when selectedAgents contains exactly one entry. */ consumerPaused?: boolean; consumerClosePhase?: 'data_closing' | 'finalizing'; consumerFinalizationDeadlineAt?: number; /** Fixed hard-stop for post-deadline receiver reconciliation. It is * persisted so daemon restarts can never extend the recovery window. */ consumerCloseResolutionDeadlineAt?: number; textOutputPolicy?: VcMeetingOutputPolicy; voiceOutputPolicy?: VcMeetingOutputPolicy; syncIntervalMs?: number; consumerSelectionExpiresAt?: number; consumerCardMessageId?: string; /** Durable fence set when the listener bot's own participant_left event is observed. */ listenerPresenceStale?: boolean; listenerPresenceChangedAtMs?: number; listenerPresenceGeneration?: number; /** Keeps an already-sent recovery card safely actionable across daemon restarts. */ listenerRejoinNonce?: string; listenerRejoinCardMessageId?: string; temporaryInstructionOpenIds?: string[]; temporaryInstructionUnionIds?: string[]; preparationMeetingNo?: string; qaMode?: VcMeetingPreparationQaMode; qaAgentAppId?: string; qaRecentOutputHashes?: string[]; createdAt: number; updatedAt: number; expiresAt: number; } export type VcMeetingOutputPolicy = 'deny' | 'approval' | 'allow'; export declare function listVcMeetingRuntimeSessions(dataDir: string, larkAppId: string, now?: number): VcMeetingRuntimeSessionRecord[]; export declare function pruneExpiredVcMeetingRuntimeSessions(dataDir: string, now?: number): number; export declare function listVcMeetingRuntimeSessionsByListenerAndAgent(dataDir: string, input: { listenerChatId: string; agentAppId: string; }, now?: number): VcMeetingRuntimeSessionRecord[]; /** * @deprecated P0 compatibility wrapper. It preserves the historical * latest-updated match until daemon routing is migrated to the list API. */ export declare function findVcMeetingRuntimeSessionByListenerAndAgent(dataDir: string, input: { listenerChatId: string; selectedAgentAppId: string; }, now?: number): VcMeetingRuntimeSessionRecord | undefined; export declare function recordVcMeetingRuntimeSession(dataDir: string, input: { larkAppId: string; meeting: { id: string; meetingNo?: string; topic?: string; }; listenerChatId: string; attentionTargetOpenId?: string; consumerMode?: 'pending' | 'listenOnly' | 'agent'; selectedAgents?: VcMeetingRuntimeSelectedAgent[]; /** @deprecated Use selectedAgents. Accepted for the P0 daemon writer. */ selectedAgentAppId?: string; /** @deprecated Use selectedAgents. Accepted for the P0 daemon writer. */ selectedAgentLabel?: string; /** @deprecated Use selectedAgents[].status=paused. */ consumerPaused?: boolean; consumerClosePhase?: 'data_closing' | 'finalizing'; consumerFinalizationDeadlineAt?: number; consumerCloseResolutionDeadlineAt?: number; textOutputPolicy?: VcMeetingOutputPolicy; voiceOutputPolicy?: VcMeetingOutputPolicy; syncIntervalMs?: number; consumerSelectionExpiresAt?: number; consumerCardMessageId?: string; listenerPresenceStale?: boolean; listenerPresenceChangedAtMs?: number; listenerPresenceGeneration?: number; listenerRejoinNonce?: string; listenerRejoinCardMessageId?: string; temporaryInstructionOpenIds?: string[]; temporaryInstructionUnionIds?: string[]; preparationMeetingNo?: string; qaMode?: VcMeetingPreparationQaMode; qaAgentAppId?: string; qaRecentOutputHashes?: string[]; }, now?: number): void; export declare function removeVcMeetingRuntimeSession(dataDir: string, larkAppId: string, meetingId: string): void; export declare function recordVcMeetingEndedTombstone(dataDir: string, input: { larkAppId: string; meetingId: string; }, now?: number, ttlMs?: number): void; export declare function hasVcMeetingEndedTombstone(dataDir: string, larkAppId: string, meetingId: string, now?: number): boolean; export {}; //# sourceMappingURL=vc-meeting-runtime-store.d.ts.map