@ai-matrx/meet 0.11.35 → 0.11.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { P as ParticipantIdentity, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, e as ParticipantRole, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-XY6Xj1dG.cjs';
1
+ import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-XY6Xj1dG.cjs';
2
2
  export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutRemainingMs, ar as captureHeldOf, as as collabFromState, at as createMeetApi, au as defaultCaptionLanguage, av as fileDownloadPath, aw as focusFromRow, ax as isGuest, ay as isHostRole, az as isLinkFollower, aA as isObserverRole, aB as loadMeetingActivities, aC as scheduleSettingsPatch, aD as withItem } from './collab-XY6Xj1dG.cjs';
3
3
  import { RealtimeManager } from '@ai-matrx/realtime';
4
4
  import { MessagingSupabaseClient, ActionHandler } from '@ai-matrx/messaging';
@@ -125,6 +125,39 @@ declare function learnNames(book: NameBook, entries: readonly {
125
125
  */
126
126
  declare function displayNameFor(book: NameBook, identity: ParticipantIdentity | string, preferred?: string | null | undefined): string;
127
127
 
128
+ /**
129
+ * S8 — LEAVE INTENTS (CORE-DESIGN §2.7 `/v1/meet/leave`, §4.2 `host_leave_prompt` · `end_confirm`,
130
+ * §11 `leave-or-end-choice`, `host-leave-assign`).
131
+ *
132
+ * What the host's Leave OFFERS is the meeting's behavior profile, resolved by the server and
133
+ * carried on the token response (`leave_policy`). What each choice DOES is the server's: the
134
+ * `/leave` door decides from the pass and the run row whether this person holds the run's host
135
+ * powers. The skin owns only the words.
136
+ */
137
+
138
+ type HostLeavePrompt = "leave_or_end" | "must_assign_or_end" | "leave_only";
139
+ interface LeavePolicy {
140
+ readonly hostLeavePrompt: HostLeavePrompt;
141
+ /** Ask "End for everyone?" once more before ending (Teams). */
142
+ readonly endConfirm: boolean;
143
+ }
144
+ /** The Meet profile's values — used only when the server sent none (an ad-hoc call). */
145
+ declare const DEFAULT_LEAVE_POLICY: LeavePolicy;
146
+ declare function leavePolicyFrom(raw: unknown): LeavePolicy;
147
+ /** One thing the Leave control can do. */
148
+ type LeaveChoice = "leave" | "assign_and_leave" | "end_for_all";
149
+ /**
150
+ * The choices Leave offers, in order. Not the host → just leave (no menu). The host:
151
+ * `leave_or_end` (Meet) → leave · end for everyone; `must_assign_or_end` (Zoom) → assign a new
152
+ * host (when someone else is here) · end for everyone, with a plain leave only when nobody is
153
+ * left to hand it to; `leave_only` (Teams) → leave · end meeting.
154
+ */
155
+ declare function leaveChoices(args: {
156
+ readonly policy: LeavePolicy;
157
+ readonly role: ParticipantRole | null;
158
+ readonly othersPresent: boolean;
159
+ }): readonly LeaveChoice[];
160
+
128
161
  /**
129
162
  * LISTEN-ONLY ATTENDANCE — being IN the room is never contingent on a device.
130
163
  *
@@ -717,6 +750,16 @@ interface MeetSnapshot {
717
750
  * (server-set, delivered on join). A local pin outranks it on this screen only.
718
751
  */
719
752
  readonly spotlight: ParticipantIdentity | null;
753
+ /**
754
+ * S8 REPLICATED ROOM STATE (CORE-DESIGN §2.6 RS), from the room's metadata — the server's
755
+ * truth, delivered on join and after every reconnect: who holds the run's host powers
756
+ * (`actingHost`), who is presenting, and how many people wait to be let in.
757
+ */
758
+ readonly actingHost: ParticipantIdentity | null;
759
+ readonly presenter: ParticipantIdentity | null;
760
+ readonly waitingCount: number;
761
+ /** S8: what the host's Leave offers in this meeting (from the token's `leave_policy`). */
762
+ readonly leavePolicy: LeavePolicy;
720
763
  /** The last thing a host did to THIS participant, in words. Dismissible. */
721
764
  readonly moderationNotice: ModerationNotice | null;
722
765
  /**
@@ -819,11 +862,6 @@ interface MeetStore {
819
862
  setParticipants(participants: readonly MeetParticipant[]): void;
820
863
  setSpeaking(identities: readonly ParticipantIdentity[]): void;
821
864
  setQuality(identity: ParticipantIdentity, quality: ConnectionQuality): void;
822
- /**
823
- * Raise or lower a hand. `at` is WHEN it went up, which is the hand queue's
824
- * order — first raised, first called on, the way Meet orders it.
825
- */
826
- setHand(identity: ParticipantIdentity, raised: boolean, at?: number): void;
827
865
  addChat(message: RoomChatMessage): void;
828
866
  /** The saved chat, read once per join. Merged with anything that arrived live. */
829
867
  loadChat(messages: readonly RoomChatMessage[]): void;
@@ -1562,18 +1600,6 @@ declare const ROOM_EVENTS: {
1562
1600
  readonly wrapUp: "matrx.meet.wrap_up";
1563
1601
  /** The meeting ended for everyone. Payload `{ meeting_id, ended_at, trigger }`. */
1564
1602
  readonly ended: "matrx.meet.ended";
1565
- /**
1566
- * A `meet_recordings` row changed state. Payload
1567
- * `{ meeting_id, recording: { id, state, started_by } }`.
1568
- *
1569
- * 🚨 THIS IS THE ONLY WAY A GUEST LEARNS A RECORDING IS RUNNING. PreJoin
1570
- * promises every joiner an indicator, and `anon` holds no SELECT grant on
1571
- * `meet_recordings` (MRI-A10 settled that widening it is forbidden), so
1572
- * without this packet the promise was a sentence with nothing behind it: on
1573
- * production 2026-09-09 the guest lane showed no indicator at all while the
1574
- * host recorded (MRI-C8).
1575
- */
1576
- readonly recording: "matrx.meet.recording";
1577
1603
  /**
1578
1604
  * A chat message to everyone was SAVED (Meet wave 2). Payload
1579
1605
  * `{ message: { id, meeting_id, sender_identity, sender_name, body, created_at } }`.
@@ -2020,11 +2046,16 @@ interface MeetRoomDriver {
2020
2046
  * (the gesture is what the browser checks). Optional: a driver without it never blocks.
2021
2047
  */
2022
2048
  startAudio?(): Promise<void>;
2049
+ /**
2050
+ * S7 — a "join here too" companion plays no remote audio (the person's other device does; two
2051
+ * speakers in one room echo). `false` removes every attached remote audio element and keeps new
2052
+ * ones from attaching. Optional: a driver without it always plays.
2053
+ */
2054
+ setRemoteAudioPlayback?(enabled: boolean): void;
2023
2055
  }
2024
2056
  type RoomDriverFactory = (handlers: RoomDriverHandlers) => MeetRoomDriver | Promise<MeetRoomDriver>;
2025
2057
  /** Topics for the in-room control plane. One place, so senders cannot drift. */
2026
2058
  declare const DATA_TOPICS: {
2027
- readonly hand: "mx.hand";
2028
2059
  readonly reaction: "mx.reaction";
2029
2060
  readonly chat: "mx.chat";
2030
2061
  };
@@ -2201,6 +2232,14 @@ interface MeetingSession {
2201
2232
  withdraw(): Promise<void>;
2202
2233
  /** Ask again after a denial or an expired knock (only offered when allowed). */
2203
2234
  askAgain(): Promise<void>;
2235
+ /**
2236
+ * S8: the HOST's leave intents through `POST /v1/meet/leave` — end the meeting for everyone,
2237
+ * or hand the run's host powers to `assignTo` (a person key) before leaving. The server
2238
+ * decides from the pass whether this person holds the run's host powers.
2239
+ */
2240
+ hostLeave(intent: "end_for_all" | {
2241
+ readonly assignTo: string;
2242
+ }): Promise<void>;
2204
2243
  setLock(locked: boolean): Promise<MeetingRecord>;
2205
2244
  /** End it for everyone, through the server (MRI-A6). */
2206
2245
  endForEveryone(): Promise<EndMeetingResult>;
@@ -2522,12 +2561,18 @@ interface RoomEngine {
2522
2561
  leave(): Promise<void>;
2523
2562
  /** The person's own "back to the device check" press from `left` / `disconnected`. */
2524
2563
  backToPrejoin(): void;
2564
+ /**
2565
+ * S7: BEFORE Join — is this person already live in `roomName` on another tab of THIS browser
2566
+ * (`TabClaim.presentElsewhere`)? When yes the pre-join offers Switch here / Join here too up
2567
+ * front (the same choice the server would otherwise ask after the press). Returns whether it did.
2568
+ * A guest has no stable person key before the pass, so the server's own answer covers them.
2569
+ */
2570
+ checkElsewhere(roomName: RoomName): Promise<boolean>;
2525
2571
  /** Clear a refused-share notice (the `share` region) the person dismissed. */
2526
2572
  dismissShareNotice(): void;
2527
2573
  setMicrophoneEnabled(enabled: boolean): Promise<void>;
2528
2574
  setCameraEnabled(enabled: boolean): Promise<void>;
2529
2575
  setScreenShareEnabled(enabled: boolean): Promise<void>;
2530
- raiseHand(raised: boolean): Promise<void>;
2531
2576
  react(emoji: string): Promise<void>;
2532
2577
  /**
2533
2578
  * A PRIVATE message to one person (Meet wave 2). Data plane only, addressed
@@ -2579,6 +2624,8 @@ interface EffectsStorage {
2579
2624
  * them out of THIS file and fails if the two sides drift.
2580
2625
  */
2581
2626
  declare const PARTICIPANT_ROLE_ATTRIBUTE = "matrx.participant.role";
2627
+ /** S8: the server's raise time of a hand (epoch ms), "" when down. Pinned with aidream's `room_state.ATTRIBUTE_HAND`. */
2628
+ declare const PARTICIPANT_HAND_ATTRIBUTE = "matrx.hand";
2582
2629
  declare const PARTICIPANT_CAN_RECORD_ATTRIBUTE = "matrx.participant.can_record";
2583
2630
  /** Standing travels beside the role (CORE-DESIGN §2.1). Pinned by aidream's tests too. */
2584
2631
  declare const PARTICIPANT_STANDING_ATTRIBUTE = "matrx.participant.standing";
@@ -2828,6 +2875,8 @@ interface RoomToken {
2828
2875
  * ladder. Absent from an older server → the knob defaults.
2829
2876
  */
2830
2877
  readonly connectionPolicy?: ConnectionPolicy | undefined;
2878
+ /** S8: what the host's Leave offers for this meeting (`host_leave_prompt`, `end_confirm`). */
2879
+ readonly leavePolicy?: LeavePolicy | undefined;
2831
2880
  }
2832
2881
 
2833
2882
  interface TokenClientOptions {
@@ -3535,13 +3584,15 @@ declare function createWebEffectsStorage(key?: string): EffectsStorage;
3535
3584
  */
3536
3585
 
3537
3586
  /** Every host power the server performs. One vocabulary with `services/meet/moderation.py`. */
3538
- type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3587
+ type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "present" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3539
3588
  declare const MODERATION_ACTIONS: readonly ModerationAction[];
3540
3589
  interface ModerationRequest {
3541
3590
  readonly action: ModerationAction;
3542
3591
  readonly identity?: ParticipantIdentity | null | undefined;
3543
3592
  readonly name?: string | undefined;
3544
3593
  readonly reason?: string | undefined;
3594
+ /** `present` only: true = I am presenting now, false = I stopped (S8). */
3595
+ readonly on?: boolean | undefined;
3545
3596
  }
3546
3597
  interface ModerationResult {
3547
3598
  readonly action: ModerationAction;
@@ -3863,4 +3914,4 @@ declare function participantAttributes(p: MeetParticipant): Record<string, strin
3863
3914
  /** The listen-only notice's contract code, from why the microphone is off. */
3864
3915
  declare function microphoneNoticeCode(track: LocalTrackState, permission?: PermissionReading): "mic-blocked" | "device-lost" | null;
3865
3916
 
3866
- export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
3917
+ export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
package/dist/core.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { P as ParticipantIdentity, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, e as ParticipantRole, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-XY6Xj1dG.js';
1
+ import { P as ParticipantIdentity, e as ParticipantRole, k as AdmissionState, a1 as NoteTakerState, a as MeetParticipant, M as MeetingRecord, R as RoomName, d as CallInvite, a6 as ParticipantStanding, a3 as ObserversVisibleTo, S as StageLayout, L as LobbyEntry, aa as RecordingState, U as UserId, aE as RecordingSource, ae as TranscriptSegment, g as MeetingNote, W as WrapUpAnnouncement, j as CollabSnapshot, p as ConnectionQuality, h as MeetingId, b as MeetApi, f as CallMode, O as OrganizationId, m as CallId, n as CallState, Z as MeetingKind, a8 as RecordingPolicy, V as MeetingAttendee, a9 as RecordingRecord, a0 as MeetingSettings, X as MeetingChanges, a4 as OccurrenceOverride, $ as MeetingOccurrence, af as UpcomingOccurrence, Y as MeetingInvitee, I as InviteeInput, q as InviteeRole, ab as RsvpAnswer, ac as RsvpInvitation, c as MeetIdentity, C as CollabPanel } from './collab-XY6Xj1dG.js';
2
2
  export { A as AccessTokenSource, l as CAPTION_LANGUAGES, o as CallablePerson, E as EMPTY_COLLAB, F as FILE_SESSION_PATH, J as JsonObject, r as JsonValue, s as MeetApiOptions, t as MeetApiRequest, u as MeetAppFocus, v as MeetBreakoutBroadcast, w as MeetBreakoutPlan, x as MeetBreakoutRoom, y as MeetCollabSettings, z as MeetFileMedia, B as MeetPoll, D as MeetPollOption, G as MeetPollState, H as MeetQuestion, K as MeetQuestionState, N as MeetStroke, Q as MeetingActivities, i as MeetingAppPanel, _ as MeetingNoteKind, a2 as ORGANIZATION_HEADER, a5 as OccurrenceState, a7 as ROLE_RANK, ad as RsvpState, T as TranscriptSource, ag as appPanelOf, ah as applyCollabPacket, ai as asCallId, aj as asMeetingId, ak as asOrganizationId, al as asParticipantIdentity, am as asRoomName, an as asUserId, ao as assignedRoom, ap as autoAssign, aq as breakoutRemainingMs, ar as captureHeldOf, as as collabFromState, at as createMeetApi, au as defaultCaptionLanguage, av as fileDownloadPath, aw as focusFromRow, ax as isGuest, ay as isHostRole, az as isLinkFollower, aA as isObserverRole, aB as loadMeetingActivities, aC as scheduleSettingsPatch, aD as withItem } from './collab-XY6Xj1dG.js';
3
3
  import { RealtimeManager } from '@ai-matrx/realtime';
4
4
  import { MessagingSupabaseClient, ActionHandler } from '@ai-matrx/messaging';
@@ -125,6 +125,39 @@ declare function learnNames(book: NameBook, entries: readonly {
125
125
  */
126
126
  declare function displayNameFor(book: NameBook, identity: ParticipantIdentity | string, preferred?: string | null | undefined): string;
127
127
 
128
+ /**
129
+ * S8 — LEAVE INTENTS (CORE-DESIGN §2.7 `/v1/meet/leave`, §4.2 `host_leave_prompt` · `end_confirm`,
130
+ * §11 `leave-or-end-choice`, `host-leave-assign`).
131
+ *
132
+ * What the host's Leave OFFERS is the meeting's behavior profile, resolved by the server and
133
+ * carried on the token response (`leave_policy`). What each choice DOES is the server's: the
134
+ * `/leave` door decides from the pass and the run row whether this person holds the run's host
135
+ * powers. The skin owns only the words.
136
+ */
137
+
138
+ type HostLeavePrompt = "leave_or_end" | "must_assign_or_end" | "leave_only";
139
+ interface LeavePolicy {
140
+ readonly hostLeavePrompt: HostLeavePrompt;
141
+ /** Ask "End for everyone?" once more before ending (Teams). */
142
+ readonly endConfirm: boolean;
143
+ }
144
+ /** The Meet profile's values — used only when the server sent none (an ad-hoc call). */
145
+ declare const DEFAULT_LEAVE_POLICY: LeavePolicy;
146
+ declare function leavePolicyFrom(raw: unknown): LeavePolicy;
147
+ /** One thing the Leave control can do. */
148
+ type LeaveChoice = "leave" | "assign_and_leave" | "end_for_all";
149
+ /**
150
+ * The choices Leave offers, in order. Not the host → just leave (no menu). The host:
151
+ * `leave_or_end` (Meet) → leave · end for everyone; `must_assign_or_end` (Zoom) → assign a new
152
+ * host (when someone else is here) · end for everyone, with a plain leave only when nobody is
153
+ * left to hand it to; `leave_only` (Teams) → leave · end meeting.
154
+ */
155
+ declare function leaveChoices(args: {
156
+ readonly policy: LeavePolicy;
157
+ readonly role: ParticipantRole | null;
158
+ readonly othersPresent: boolean;
159
+ }): readonly LeaveChoice[];
160
+
128
161
  /**
129
162
  * LISTEN-ONLY ATTENDANCE — being IN the room is never contingent on a device.
130
163
  *
@@ -717,6 +750,16 @@ interface MeetSnapshot {
717
750
  * (server-set, delivered on join). A local pin outranks it on this screen only.
718
751
  */
719
752
  readonly spotlight: ParticipantIdentity | null;
753
+ /**
754
+ * S8 REPLICATED ROOM STATE (CORE-DESIGN §2.6 RS), from the room's metadata — the server's
755
+ * truth, delivered on join and after every reconnect: who holds the run's host powers
756
+ * (`actingHost`), who is presenting, and how many people wait to be let in.
757
+ */
758
+ readonly actingHost: ParticipantIdentity | null;
759
+ readonly presenter: ParticipantIdentity | null;
760
+ readonly waitingCount: number;
761
+ /** S8: what the host's Leave offers in this meeting (from the token's `leave_policy`). */
762
+ readonly leavePolicy: LeavePolicy;
720
763
  /** The last thing a host did to THIS participant, in words. Dismissible. */
721
764
  readonly moderationNotice: ModerationNotice | null;
722
765
  /**
@@ -819,11 +862,6 @@ interface MeetStore {
819
862
  setParticipants(participants: readonly MeetParticipant[]): void;
820
863
  setSpeaking(identities: readonly ParticipantIdentity[]): void;
821
864
  setQuality(identity: ParticipantIdentity, quality: ConnectionQuality): void;
822
- /**
823
- * Raise or lower a hand. `at` is WHEN it went up, which is the hand queue's
824
- * order — first raised, first called on, the way Meet orders it.
825
- */
826
- setHand(identity: ParticipantIdentity, raised: boolean, at?: number): void;
827
865
  addChat(message: RoomChatMessage): void;
828
866
  /** The saved chat, read once per join. Merged with anything that arrived live. */
829
867
  loadChat(messages: readonly RoomChatMessage[]): void;
@@ -1562,18 +1600,6 @@ declare const ROOM_EVENTS: {
1562
1600
  readonly wrapUp: "matrx.meet.wrap_up";
1563
1601
  /** The meeting ended for everyone. Payload `{ meeting_id, ended_at, trigger }`. */
1564
1602
  readonly ended: "matrx.meet.ended";
1565
- /**
1566
- * A `meet_recordings` row changed state. Payload
1567
- * `{ meeting_id, recording: { id, state, started_by } }`.
1568
- *
1569
- * 🚨 THIS IS THE ONLY WAY A GUEST LEARNS A RECORDING IS RUNNING. PreJoin
1570
- * promises every joiner an indicator, and `anon` holds no SELECT grant on
1571
- * `meet_recordings` (MRI-A10 settled that widening it is forbidden), so
1572
- * without this packet the promise was a sentence with nothing behind it: on
1573
- * production 2026-09-09 the guest lane showed no indicator at all while the
1574
- * host recorded (MRI-C8).
1575
- */
1576
- readonly recording: "matrx.meet.recording";
1577
1603
  /**
1578
1604
  * A chat message to everyone was SAVED (Meet wave 2). Payload
1579
1605
  * `{ message: { id, meeting_id, sender_identity, sender_name, body, created_at } }`.
@@ -2020,11 +2046,16 @@ interface MeetRoomDriver {
2020
2046
  * (the gesture is what the browser checks). Optional: a driver without it never blocks.
2021
2047
  */
2022
2048
  startAudio?(): Promise<void>;
2049
+ /**
2050
+ * S7 — a "join here too" companion plays no remote audio (the person's other device does; two
2051
+ * speakers in one room echo). `false` removes every attached remote audio element and keeps new
2052
+ * ones from attaching. Optional: a driver without it always plays.
2053
+ */
2054
+ setRemoteAudioPlayback?(enabled: boolean): void;
2023
2055
  }
2024
2056
  type RoomDriverFactory = (handlers: RoomDriverHandlers) => MeetRoomDriver | Promise<MeetRoomDriver>;
2025
2057
  /** Topics for the in-room control plane. One place, so senders cannot drift. */
2026
2058
  declare const DATA_TOPICS: {
2027
- readonly hand: "mx.hand";
2028
2059
  readonly reaction: "mx.reaction";
2029
2060
  readonly chat: "mx.chat";
2030
2061
  };
@@ -2201,6 +2232,14 @@ interface MeetingSession {
2201
2232
  withdraw(): Promise<void>;
2202
2233
  /** Ask again after a denial or an expired knock (only offered when allowed). */
2203
2234
  askAgain(): Promise<void>;
2235
+ /**
2236
+ * S8: the HOST's leave intents through `POST /v1/meet/leave` — end the meeting for everyone,
2237
+ * or hand the run's host powers to `assignTo` (a person key) before leaving. The server
2238
+ * decides from the pass whether this person holds the run's host powers.
2239
+ */
2240
+ hostLeave(intent: "end_for_all" | {
2241
+ readonly assignTo: string;
2242
+ }): Promise<void>;
2204
2243
  setLock(locked: boolean): Promise<MeetingRecord>;
2205
2244
  /** End it for everyone, through the server (MRI-A6). */
2206
2245
  endForEveryone(): Promise<EndMeetingResult>;
@@ -2522,12 +2561,18 @@ interface RoomEngine {
2522
2561
  leave(): Promise<void>;
2523
2562
  /** The person's own "back to the device check" press from `left` / `disconnected`. */
2524
2563
  backToPrejoin(): void;
2564
+ /**
2565
+ * S7: BEFORE Join — is this person already live in `roomName` on another tab of THIS browser
2566
+ * (`TabClaim.presentElsewhere`)? When yes the pre-join offers Switch here / Join here too up
2567
+ * front (the same choice the server would otherwise ask after the press). Returns whether it did.
2568
+ * A guest has no stable person key before the pass, so the server's own answer covers them.
2569
+ */
2570
+ checkElsewhere(roomName: RoomName): Promise<boolean>;
2525
2571
  /** Clear a refused-share notice (the `share` region) the person dismissed. */
2526
2572
  dismissShareNotice(): void;
2527
2573
  setMicrophoneEnabled(enabled: boolean): Promise<void>;
2528
2574
  setCameraEnabled(enabled: boolean): Promise<void>;
2529
2575
  setScreenShareEnabled(enabled: boolean): Promise<void>;
2530
- raiseHand(raised: boolean): Promise<void>;
2531
2576
  react(emoji: string): Promise<void>;
2532
2577
  /**
2533
2578
  * A PRIVATE message to one person (Meet wave 2). Data plane only, addressed
@@ -2579,6 +2624,8 @@ interface EffectsStorage {
2579
2624
  * them out of THIS file and fails if the two sides drift.
2580
2625
  */
2581
2626
  declare const PARTICIPANT_ROLE_ATTRIBUTE = "matrx.participant.role";
2627
+ /** S8: the server's raise time of a hand (epoch ms), "" when down. Pinned with aidream's `room_state.ATTRIBUTE_HAND`. */
2628
+ declare const PARTICIPANT_HAND_ATTRIBUTE = "matrx.hand";
2582
2629
  declare const PARTICIPANT_CAN_RECORD_ATTRIBUTE = "matrx.participant.can_record";
2583
2630
  /** Standing travels beside the role (CORE-DESIGN §2.1). Pinned by aidream's tests too. */
2584
2631
  declare const PARTICIPANT_STANDING_ATTRIBUTE = "matrx.participant.standing";
@@ -2828,6 +2875,8 @@ interface RoomToken {
2828
2875
  * ladder. Absent from an older server → the knob defaults.
2829
2876
  */
2830
2877
  readonly connectionPolicy?: ConnectionPolicy | undefined;
2878
+ /** S8: what the host's Leave offers for this meeting (`host_leave_prompt`, `end_confirm`). */
2879
+ readonly leavePolicy?: LeavePolicy | undefined;
2831
2880
  }
2832
2881
 
2833
2882
  interface TokenClientOptions {
@@ -3535,13 +3584,15 @@ declare function createWebEffectsStorage(key?: string): EffectsStorage;
3535
3584
  */
3536
3585
 
3537
3586
  /** Every host power the server performs. One vocabulary with `services/meet/moderation.py`. */
3538
- type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3587
+ type ModerationAction = "mute" | "stop_video" | "stop_screen" | "mute_all" | "ask_unmute" | "ask_all_unmute" | "spotlight" | "present" | "raise_hand" | "lower_hand" | "lower_all_hands" | "make_cohost" | "revoke_cohost" | "transfer_host" | "rename" | "remove" | "report";
3539
3588
  declare const MODERATION_ACTIONS: readonly ModerationAction[];
3540
3589
  interface ModerationRequest {
3541
3590
  readonly action: ModerationAction;
3542
3591
  readonly identity?: ParticipantIdentity | null | undefined;
3543
3592
  readonly name?: string | undefined;
3544
3593
  readonly reason?: string | undefined;
3594
+ /** `present` only: true = I am presenting now, false = I stopped (S8). */
3595
+ readonly on?: boolean | undefined;
3545
3596
  }
3546
3597
  interface ModerationResult {
3547
3598
  readonly action: ModerationAction;
@@ -3863,4 +3914,4 @@ declare function participantAttributes(p: MeetParticipant): Record<string, strin
3863
3914
  /** The listen-only notice's contract code, from why the microphone is off. */
3864
3915
  declare function microphoneNoticeCode(track: LocalTrackState, permission?: PermissionReading): "mic-blocked" | "device-lost" | null;
3865
3916
 
3866
- export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };
3917
+ export { ATTENDANCE_CSV_HEADER, AdmissionState, type AnnounceResult, type ApplyRoomEventArgs, type AskArgs, type AttendanceKind, type AttendanceRow, type AudioProcessing, type BrowserFamily, CALL_INVITE_KIND, CALL_INVITE_VERSION, CONSENT_NOTICE_ATTRIBUTE, type CallCenter, type CallCenterOptions, CallId, CallInvite, type CallInviteHandlerOptions, type CallInvitePayload, CallMode, type CallOutcomePhase, CallState, type CollabAction, CollabPanel, type CollabRequest, type CollabResult, type CollabRuntime, CollabSnapshot, type CollabStoreLike, type ConnectionPolicy, ConnectionQuality, type ConnectionRegion, type ConnectionSupervisor, type ConnectionSupervisorOptions, type CreateCallInviteInput, type CreateMeetingInput, DATA_TOPICS, DEFAULT_CONNECTION_POLICY, DEFAULT_EFFECTS, DEFAULT_LEAVE_POLICY, DEFAULT_PAGE_SIZE, type DataTopic, type DeviceKind, type DeviceManager, type DeviceManagerOptions, type DeviceNotice, type DeviceOffer, type DeviceSnapshot, type DeviceStorage, type DeviceUnavailableReason, type DriverConnectionState, type DriverParticipant, type DriverTrackKind, type DriverTranscription, END_MEETING_NOT_SERVED, type EffectsStorage, type EndMeetingResult, type ExitInput, type ExitPhase, type ExitResolution, type ExitServerWord, type FollowUpDraft, type FollowUpRecipient, type FollowUpSendResult, GUEST_RECORD_ACCESS_CHOICES, GUEST_RECORD_ACCESS_LEVELS, GUEST_RECORD_ACCESS_METADATA_KEY, GUEST_RECORD_NOT_SHARED, type Ghost, type GuestRecordAccess, type GuestRecordAccessResolution, type GuestRecordAccessSetting, type HostLeavePrompt, IDLE_MEDIA, IDLE_MEDIA_REGION, IDLE_PHASES, IDLE_TRACK, type InRoomClient, type InRoomClientOptions, InviteeInput, InviteeRole, JOIN_REFUSAL_REASONS, type JoinRefusalReason, type JoinRequest, LISTEN_ONLY_NOTICE, LIVEKIT_BASE_DELAYS_MS, LIVE_PHASES, type LeaveChoice, type LeavePolicy, type LibraryRecording, type LiveKitDriverOptions, LobbyEntry, type LocalMediaState, type LocalTrackState, MEETING_INVITE_KIND, MEETING_INVITE_VERSION, MEETING_PASS_HEADER, MEETING_RECORD_GRACE_MS, MEET_ANSWER_CONTEXT_EVENT, MEET_ANSWER_EVENTS, MEET_EVENTS, MEET_REACTIONS, MEET_ROUTES, MEET_SCHEMA, MODERATION_ACTIONS, type MediaDevicesLike, type MediaEffects, type MediaKind, type MediaPlatform, type MediaRegionState, type MediaSupervisor, type MediaSupervisorOptions, type MediaUnavailable, type MeetAi, type MeetAiAnswer, type MeetAiOptions, type MeetAnswerCoverage, MeetApi, type MeetDevice, MeetError, type MeetErrorCode, type MeetEvent, type MeetGrants, MeetIdentity, type MeetObservation, MeetParticipant, type MeetPatch, type MeetPhase, type MeetRepository, type MeetRoomDriver, type MeetSnapshot, type MeetStore, MeetingAttendee, MeetingChanges, type MeetingChatHistory, MeetingId, type MeetingInviteHandlerOptions, type MeetingInvitePayload, MeetingInvitee, MeetingKind, MeetingNote, MeetingOccurrence, MeetingRecord, type MeetingRecordAnswer, type MeetingRecordBundle, type MeetingRecordCache, type MeetingRecordChange, type MeetingRecordFailure, type MeetingRecordParts, type MeetingRecordRestriction, type MeetingRecordRestrictionNotice, type MeetingRecordState, type MeetingSearchHit, type MeetingSearchSource, type MeetingSession, type MeetingSessionOptions, MeetingSettings, type ModerationAction, type ModerationNotice, type ModerationRequest, type ModerationResult, NOTE_TAKER_IDENTITY_PREFIX, NOTE_TAKER_METADATA_KEY, NO_GRANTS, NO_SHARE, type NameBook, type NetworkPort, type NoteTakerDispatch, type NoteTakerRefusal, NoteTakerState, type NoteTakerStatus, type ObserveInput, type ObservedConnection, type ObservedPhase, ObserversVisibleTo, OccurrenceOverride, OrganizationId, type OsFamily, PARTICIPANT_CAN_RECORD_ATTRIBUTE, PARTICIPANT_HAND_ATTRIBUTE, PARTICIPANT_ROLE_ATTRIBUTE, PARTICIPANT_STANDING_ATTRIBUTE, ParticipantIdentity, ParticipantRole, ParticipantStanding, type PermissionReading, type PhaseEvent, type PhaseEventType, type PlatformDevice, REACTION_TTL_MS, REFUSED_ABSENCE, RESUME_WINDOW_MS, ROOM_EVENTS, ROOM_EVENT_PREFIX, RPCS, type ReconnectPolicyLike, type ReconnectPolicyOptions, type RecordingController, type RecordingControllerOptions, RecordingPolicy, RecordingRecord, RecordingState, type RepositoryOptions, type ResumeMarker, type ResumeStorage, type RoomChatMessage, type RoomDriverFactory, type RoomDriverHandlers, type RoomEngine, type RoomEngineOptions, type RoomEventOutcome, type RoomEventTopic, RoomName, type RoomReaction, type RoomToken, type RoomTokenStorage, RsvpAnswer, RsvpInvitation, type ScheduleMeetingInput, type ShareRegion, type Stage, type StageArgs, StageLayout, TABLES, TRANSCRIPTION_ATTRIBUTES, TRANSCRIPTION_TOPIC, type TokenClient, type TokenClientOptions, type TokenRequest, type TranscriptBlock, type TranscriptFormat, type TranscriptMatch, TranscriptSegment, UpcomingOccurrence, UserId, type VideoEffect, WAITING_PHASES, WrapUpAnnouncement, type WrapUpStatus, absenceSentence, activeWrapUpSummary, activityAttention, admissionPhase, announceMeeting, applyRoomEvent, assembleMeetingRecord, attendanceCsv, attendanceReport, attendanceTotals, attendeeKey, autoRejoinDelayMs, availableActivities, callInviteAction, callInviteText, callStateLabel, canModerate, canModerateParticipant, canTransition, captionSegment, changesPatch, classifyDeviceFailure, clockPosition, computeStage, connectionPolicyFrom, countLabel, createCallCenter, createCallInviteHandler, createConnectionSupervisor, createDeviceManager, createInRoomClient, createLiveKitDriver, createMediaSupervisor, createMeetAi, createMeetRepository, createMeetStore, createMeetingInviteHandler, createMeetingRecordCache, createMeetingSession, createMemoryDeviceStorage, createReachabilityProbe, createReconnectPolicy, createRecordingController, createRoomEngine, createTokenClient, createWebDeviceStorage, createWebEffectsStorage, createWebNetworkPort, createWebResumeStorage, createWebRoomTokenStorage, detectBrowser, detectOs, deviceChipLabel, deviceFixSteps, deviceNoticeCode, deviceUnavailableReason, displayNameFor, gridColumns, groupTranscript, guestRecordAccessExplanation, guestRecordAccessLabel, guestRecordAccessSetting, hasEnded, hostUserIds, httpUrlOf, invalidResponse, isGuestIdentity, isJoinRefusalReason, isListenOnly, isLivePhase, isNoteTaker, isRealName, isRefusedPhase, isRoomEventTopic, isUnannouncedDeparture, isWaitingPhase, learnName, learnNames, leaveChoices, leavePolicyFrom, listenOnlyNotice, loadFollowUpDraft, loadGuestMeetingRecord, loadMeetingChat, loadMeetingRecord, loadMeetingRecordParts, mapConnectionState, mapQuality, meetingInviteAction, meetingLength, meetingLink, meetingPassHeaders, meetingPath, meetingSlug, meetingTopic, meetingWhen, mergeCaption, mergeGhosts, mergeRecord, microphoneNoticeCode, moveToRoom, nextPhase, nextTranslationBatch, normalizeDeviceError, normalizeMeetError, normalizeSpoken, noteTakerIdentity, noteTakerLabel, noteTakerParticipant, noteTakerStatus, notesDocument, observe as observeMeeting, observedDevice, observedPhase, observedQuality, orderParticipants, parseRoomToken, participantAttributes, participantSummary, performCollab, playableRecordingFileId, projectInvitee, projectLibraryRecording, projectNote, projectOccurrence, projectOverride, projectParticipant, projectRsvpInvitation, projectSearchHit, projectSegment, projectUpcoming, pushMeetingToGoogleCalendar, readServerRefusal, readableTranscript, reasonOf, recordingLabel, recordingNotice, recordingOffsetMs, refusalPhase, rememberedMeetingPass, resolveExit, roleOf, roomTopic, rootAttributes, searchTranscript, sendFollowUp, setCaptionLanguage, setGuestRecordAccess, settingsPatch, snapshotParticipant, snippetRuns, staticObservation, summarizeMeetingRecordRestrictions, takeMoveRequest, takePanelRequest, transcriptDocument, unavailableFrom, uniqueAttendees, untranslatedLines, userTopic, wasRefused, webMediaPlatform, wrapUpStatus };