omnimeet

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 5, 2026 License: MIT Imports: 14 Imported by: 0

README

OmniMeet Core

Go CI Go Lint Go SAST Docs Docs Visualization License

Unified abstraction for real-time collaboration platforms

OmniMeet enables AI agents to participate in meetings as first-class participants alongside humans, abstracting over LiveKit, Daily, Zoom, Google Meet, Microsoft Teams, and other real-time collaboration platforms.

Features

  • 🔌 Provider Agnostic - Write code once, deploy on any supported platform
  • 🤖 Agent-First Design - Built for AI agents, not retrofitted
  • 🎙️ Voice Integration - Seamless STT/TTS with OmniVoice
  • 🛠️ OmniAgent Skills - Ready-to-use tools for meeting management
  • Real-time Events - Participant joins, track publications, active speakers

Installation

go get github.com/plexusone/omnimeet-core

Quick Start

package main

import (
    "context"
    "log"

    "github.com/plexusone/omnimeet-core/meeting"
    "github.com/plexusone/omni-livekit/omnimeet"
)

func main() {
    ctx := context.Background()

    // Create LiveKit provider
    provider, _ := omnimeet.NewProvider(omnimeet.Config{
        APIKey:    "your-api-key",
        APISecret: "your-api-secret",
        ServerURL: "wss://your-livekit-server",
    })

    // Create a meeting
    m, _ := provider.CreateMeeting(ctx, meeting.CreateRequest{
        Name: "Team Standup",
    })

    log.Printf("Meeting created: %s", m.ID)
}

Packages

Package Description
meeting Meeting state and lifecycle
participant Participant info and roles
track Audio/video track types
event Real-time meeting events
token Authentication tokens
provider Provider interface and client
agent Agent skill interfaces
skill Meeting skill for OmniAgent
voice Voice agent types
recording Recording state
transcript Transcription types

Provider Implementations

Provider Package Status
LiveKit omni-livekit Available
Daily omni-daily Planned
Zoom omni-zoom Planned

Architecture

OmniMeet is part of the PlexusOne OmniAgent ecosystem:

OmniAgent (orchestration)
     |
     +-- OmniLLM    (reasoning)
     +-- OmniChat   (async messaging)
     +-- OmniVoice  (speech: TTS/STT)
     +-- OmniMemory (conversation memory)
     +-- OmniMeet   (real-time collaboration)  <-- This library
             |
             +-- omni-livekit
             +-- omni-daily
             +-- omni-zoom

Documentation

Requirements

  • Go 1.26 or later

License

Apache 2.0 - see LICENSE for details.

Documentation

Overview

Package omnimeet provides a unified abstraction for real-time collaboration platforms.

Package omnimeet provides a unified abstraction for real-time collaboration platforms.

OmniMeet enables AI agents to participate in meetings alongside humans, supporting providers like LiveKit, Daily, Zoom, Google Meet, and more.

Core Concepts

  • Meeting: A live collaborative session containing participants and media streams
  • Participant: An entity in a meeting (human, AI agent, recorder, observer)
  • Track: A media stream (audio, video, screen share, data)
  • Event: Real-time events (join, leave, track published, etc.)

Architecture

OmniMeet follows the PlexusOne provider pattern:

  • omnimeet-core: Core interfaces and types (this package)
  • omni-livekit: LiveKit provider implementation
  • omni-daily: Daily provider implementation
  • omnimeet: Bundle package with common providers

Basic Usage

import (
    "github.com/plexusone/omnimeet"
    _ "github.com/plexusone/omni-livekit" // Register provider
)

func main() {
    provider, _ := omnimeet.GetMeetingProvider("livekit",
        omnimeet.WithAPIKey("..."),
        omnimeet.WithAPISecret("..."),
        omnimeet.WithServerURL("wss://your-livekit-server.com"),
    )

    meeting, _ := provider.CreateMeeting(ctx, meeting.CreateRequest{
        Name: "Team Standup",
    })

    token, _ := provider.CreateJoinToken(ctx, token.CreateRequest{
        MeetingID: meeting.ID,
        Participant: participant.Info{
            Name: "AI Assistant",
            Kind: participant.KindAgent,
        },
    })

    fmt.Printf("Join URL: %s\n", token.JoinURL)
}

Agent Participation

For AI agents to actively participate in meetings (receiving/publishing audio), use the AgentParticipant interface:

factory := provider.(provider.AgentParticipantFactory)
agent, _ := factory.CreateAgentParticipant(provider.AgentParticipantOptions{})

agent.JoinMeeting(ctx, meeting.ID, token)
defer agent.LeaveMeeting(ctx)

audioCh, _ := agent.SubscribeToAllAudio(ctx)
for frame := range audioCh {
    // Process audio with OmniVoice STT
    // Generate response with OmniAgent
    // Publish response with agent.PublishAudio()
}

Integration with PlexusOne

OmniMeet integrates with other PlexusOne libraries:

  • OmniVoice: STT/TTS for speech processing
  • OmniAgent: AI agent orchestration
  • OmniChat: Meeting invites via messaging
  • OmniMemory: Storing meeting transcripts

See https://github.com/plexusone/omnimeet-core for documentation.

Package omnimeet provides a unified abstraction for real-time collaboration platforms.

Package omnimeet provides a unified abstraction for real-time collaboration platforms.

Index

Constants

View Source
const (
	// PriorityThin is for minimal implementations (e.g., stdlib-only).
	PriorityThin = 0
	// PriorityThick is for full SDK implementations.
	PriorityThick = 10
)

Priority levels for provider registration.

View Source
const (
	MeetingStatusPending = meeting.StatusPending
	MeetingStatusActive  = meeting.StatusActive
	MeetingStatusEnded   = meeting.StatusEnded
)

Meeting status constants

View Source
const (
	ParticipantKindHuman    = participant.KindHuman
	ParticipantKindAgent    = participant.KindAgent
	ParticipantKindRecorder = participant.KindRecorder
	ParticipantKindObserver = participant.KindObserver
	ParticipantKindSIP      = participant.KindSIP
)

Participant kind constants

View Source
const (
	ConnectionQualityUnknown   = participant.ConnectionQualityUnknown
	ConnectionQualityExcellent = participant.ConnectionQualityExcellent
	ConnectionQualityGood      = participant.ConnectionQualityGood
	ConnectionQualityPoor      = participant.ConnectionQualityPoor
	ConnectionQualityLost      = participant.ConnectionQualityLost
)

Connection quality constants

View Source
const (
	TrackKindAudio            = track.KindAudio
	TrackKindVideo            = track.KindVideo
	TrackKindScreenShare      = track.KindScreenShare
	TrackKindScreenShareAudio = track.KindScreenShareAudio
	TrackKindData             = track.KindData
)

Track kind constants

View Source
const (
	TrackSourceMicrophone  = track.SourceMicrophone
	TrackSourceCamera      = track.SourceCamera
	TrackSourceScreen      = track.SourceScreen
	TrackSourceApplication = track.SourceApplication
	TrackSourceUnknown     = track.SourceUnknown
)

Track source constants

View Source
const (
	EventMeetingCreated           = event.TypeMeetingCreated
	EventMeetingStarted           = event.TypeMeetingStarted
	EventMeetingEnded             = event.TypeMeetingEnded
	EventParticipantJoined        = event.TypeParticipantJoined
	EventParticipantLeft          = event.TypeParticipantLeft
	EventParticipantUpdated       = event.TypeParticipantUpdated
	EventTrackPublished           = event.TypeTrackPublished
	EventTrackUnpublished         = event.TypeTrackUnpublished
	EventTrackMuted               = event.TypeTrackMuted
	EventTrackUnmuted             = event.TypeTrackUnmuted
	EventActiveSpeakerChanged     = event.TypeActiveSpeakerChanged
	EventRecordingStarted         = event.TypeRecordingStarted
	EventRecordingStopped         = event.TypeRecordingStopped
	EventTranscriptUpdated        = event.TypeTranscriptUpdated
	EventDataMessageReceived      = event.TypeDataMessageReceived
	EventConnectionQualityChanged = event.TypeConnectionQualityChanged
)

Event type constants

View Source
const (
	RecordingStatusPending    = recording.StatusPending
	RecordingStatusRecording  = recording.StatusRecording
	RecordingStatusProcessing = recording.StatusProcessing
	RecordingStatusCompleted  = recording.StatusCompleted
	RecordingStatusFailed     = recording.StatusFailed
)

Recording status constants

View Source
const (
	ConnectionStateDisconnected = provider.ConnectionStateDisconnected
	ConnectionStateConnecting   = provider.ConnectionStateConnecting
	ConnectionStateConnected    = provider.ConnectionStateConnected
	ConnectionStateReconnecting = provider.ConnectionStateReconnecting
	ConnectionStateFailed       = provider.ConnectionStateFailed
)

Connection state constants

View Source
const Version = "0.1.0"

Version is the current version of omnimeet-core.

Variables

View Source
var (
	// ErrMeetingNotFound is returned when a meeting cannot be found.
	ErrMeetingNotFound = errors.New("meeting not found")

	// ErrMeetingEnded is returned when trying to operate on an ended meeting.
	ErrMeetingEnded = errors.New("meeting has ended")

	// ErrMeetingFull is returned when a meeting has reached its participant limit.
	ErrMeetingFull = errors.New("meeting is full")

	// ErrParticipantNotFound is returned when a participant cannot be found.
	ErrParticipantNotFound = errors.New("participant not found")

	// ErrParticipantAlreadyJoined is returned when a participant tries to join twice.
	ErrParticipantAlreadyJoined = errors.New("participant already joined")

	// ErrTrackNotFound is returned when a track cannot be found.
	ErrTrackNotFound = errors.New("track not found")

	// ErrTrackAlreadyPublished is returned when trying to publish a duplicate track.
	ErrTrackAlreadyPublished = errors.New("track already published")

	// ErrNotConnected is returned when an operation requires a connection.
	ErrNotConnected = errors.New("not connected to meeting")

	// ErrAlreadyConnected is returned when trying to connect while already connected.
	ErrAlreadyConnected = errors.New("already connected to meeting")

	// ErrConnectionFailed is returned when a connection attempt fails.
	ErrConnectionFailed = errors.New("connection failed")

	// ErrTokenExpired is returned when a join token has expired.
	ErrTokenExpired = errors.New("token expired")

	// ErrTokenInvalid is returned when a join token is invalid.
	ErrTokenInvalid = errors.New("token invalid")

	// ErrPermissionDenied is returned when an operation is not permitted.
	ErrPermissionDenied = errors.New("permission denied")

	// ErrRecordingNotFound is returned when a recording cannot be found.
	ErrRecordingNotFound = errors.New("recording not found")

	// ErrRecordingAlreadyStarted is returned when trying to start a second recording.
	ErrRecordingAlreadyStarted = errors.New("recording already started")

	// ErrRecordingNotStarted is returned when trying to stop a non-existent recording.
	ErrRecordingNotStarted = errors.New("recording not started")

	// ErrRecordingNotSupported is returned when recording is not supported.
	ErrRecordingNotSupported = errors.New("recording not supported by provider")

	// ErrAgentParticipationNotSupported is returned when agent participation is not supported.
	ErrAgentParticipationNotSupported = errors.New("agent participation not supported by provider")

	// ErrProviderNotFound is returned when a provider cannot be found in the registry.
	ErrProviderNotFound = errors.New("provider not found")

	// ErrProviderAlreadyRegistered is returned when trying to register a duplicate provider.
	ErrProviderAlreadyRegistered = errors.New("provider already registered")

	// ErrInvalidConfiguration is returned when configuration is invalid.
	ErrInvalidConfiguration = errors.New("invalid configuration")

	// ErrWebhookValidationFailed is returned when webhook signature validation fails.
	ErrWebhookValidationFailed = errors.New("webhook validation failed")

	// ErrRateLimited is returned when rate limited by the provider.
	ErrRateLimited = errors.New("rate limited")

	// ErrQuotaExceeded is returned when quota is exceeded.
	ErrQuotaExceeded = errors.New("quota exceeded")

	// ErrTimeout is returned when an operation times out.
	ErrTimeout = errors.New("operation timed out")
)

Common errors

View Source
var DefaultAgentPermissions = participant.DefaultAgentPermissions

DefaultAgentPermissions returns the default permissions for an AI agent.

View Source
var DefaultAudioConfig = provider.DefaultAudioConfig

DefaultAudioConfig returns the default audio configuration.

View Source
var DefaultHumanPermissions = participant.DefaultHumanPermissions

DefaultHumanPermissions returns the default permissions for a human participant.

View Source
var DefaultObserverPermissions = participant.DefaultObserverPermissions

DefaultObserverPermissions returns the default permissions for an observer.

View Source
var DefaultRecorderPermissions = participant.DefaultRecorderPermissions

DefaultRecorderPermissions returns the default permissions for a recorder.

View Source
var FromTTSResult = voice.FromTTSResult

FromTTSResult converts an OmniVoice TTS result to a meeting AudioFrame.

View Source
var NewVoiceAgentParticipant = voice.NewVoiceAgentParticipant

NewVoiceAgentParticipant creates a new VoiceAgentParticipant.

View Source
var ToSTTFormat = voice.ToSTTFormat

ToSTTFormat converts a meeting AudioFrame to OmniVoice STT format.

Functions

func ClearMeetingProviders

func ClearMeetingProviders()

ClearMeetingProviders removes all meeting providers from the registry. This is primarily useful for testing.

func GetMeetingProvider

func GetMeetingProvider(name string, opts ...ProviderOption) (provider.MeetingProvider, error)

GetMeetingProvider returns a meeting provider by name.

func HasMeetingProvider

func HasMeetingProvider(name string) bool

HasMeetingProvider returns true if a meeting provider is registered.

func IsPermanent

func IsPermanent(err error) bool

IsPermanent returns true if the error is permanent (not retryable).

func IsRetryable

func IsRetryable(err error) bool

IsRetryable returns true if the error is retryable.

func ListMeetingProviders

func ListMeetingProviders() []string

ListMeetingProviders returns the names of all registered meeting providers.

func RegisterMeetingProvider

func RegisterMeetingProvider(name string, factory ProviderFactory, priority int)

RegisterMeetingProvider registers a meeting provider factory.

If a provider with the same name is already registered, it will be replaced only if the new provider has equal or higher priority.

func UnregisterMeetingProvider

func UnregisterMeetingProvider(name string)

UnregisterMeetingProvider removes a meeting provider from the registry. This is primarily useful for testing.

Types

type AgentParticipant

type AgentParticipant = provider.AgentParticipant

AgentParticipant represents an AI agent's participation in a meeting.

type AgentParticipantFactory

type AgentParticipantFactory = provider.AgentParticipantFactory

AgentParticipantFactory creates AgentParticipant instances.

type AgentParticipantOptions

type AgentParticipantOptions = provider.AgentParticipantOptions

AgentParticipantOptions contains options for creating an AgentParticipant.

type AudioConfig

type AudioConfig = provider.AudioConfig

AudioConfig specifies the audio configuration for an agent.

type AudioFrame

type AudioFrame = provider.AudioFrame

AudioFrame represents a frame of audio data.

type ConnectionQuality

type ConnectionQuality = participant.ConnectionQuality

ConnectionQuality indicates the quality of a participant's connection.

type ConnectionState

type ConnectionState = provider.ConnectionState

ConnectionState represents the connection state.

type CreateJoinTokenRequest

type CreateJoinTokenRequest = token.CreateRequest

CreateJoinTokenRequest contains the parameters for creating a join token.

type CreateMeetingRequest

type CreateMeetingRequest = meeting.CreateRequest

CreateMeetingRequest contains the parameters for creating a new meeting.

type DataMessage

type DataMessage = provider.DataMessage

DataMessage represents a data message sent between participants.

type Event

type Event = event.Event

Event represents an event that occurred in a meeting.

type EventHandler

type EventHandler = event.Handler

EventHandler is a function that handles events.

type EventType

type EventType = event.Type

EventType represents the type of event.

type JoinToken

type JoinToken = token.JoinToken

JoinToken represents an access token for joining a meeting.

type ListMeetingsOptions

type ListMeetingsOptions = meeting.ListOptions

ListMeetingsOptions contains options for listing meetings.

type Meeting

type Meeting = meeting.Meeting

Meeting represents a live collaborative session.

type MeetingError

type MeetingError struct {
	MeetingID string
	Op        string
	Err       error
}

MeetingError wraps an error with meeting context.

func NewMeetingError

func NewMeetingError(meetingID, op string, err error) *MeetingError

NewMeetingError creates a new MeetingError.

func (*MeetingError) Error

func (e *MeetingError) Error() string

Error returns the error message.

func (*MeetingError) Unwrap

func (e *MeetingError) Unwrap() error

Unwrap returns the underlying error.

type MeetingProvider

type MeetingProvider = provider.MeetingProvider

MeetingProvider is the core interface that all meeting providers must implement.

type MeetingStatus

type MeetingStatus = meeting.Status

MeetingStatus represents the current state of a meeting.

type Participant

type Participant = participant.Participant

Participant represents an entity that joins a meeting.

type ParticipantInfo

type ParticipantInfo = participant.Info

ParticipantInfo contains information for creating or identifying a participant.

type ParticipantKind

type ParticipantKind = participant.Kind

ParticipantKind represents the type of participant.

type ParticipantPermissions

type ParticipantPermissions = participant.Permissions

ParticipantPermissions defines what a participant is allowed to do.

type ProviderClient

type ProviderClient = provider.Client[provider.MeetingProvider]

ProviderClient manages multiple meeting providers.

func NewProviderClient

func NewProviderClient(primary MeetingProvider, fallbacks ...MeetingProvider) *ProviderClient

NewProviderClient creates a new provider client.

type ProviderError

type ProviderError struct {
	Provider string
	Op       string
	Err      error
}

ProviderError wraps an error with provider context.

func NewProviderError

func NewProviderError(provider, op string, err error) *ProviderError

NewProviderError creates a new ProviderError.

func (*ProviderError) Error

func (e *ProviderError) Error() string

Error returns the error message.

func (*ProviderError) Unwrap

func (e *ProviderError) Unwrap() error

Unwrap returns the underlying error.

type ProviderFactory

type ProviderFactory func(config map[string]any) (provider.MeetingProvider, error)

ProviderFactory is a function that creates a MeetingProvider.

type ProviderOption

type ProviderOption func(*providerConfig)

ProviderOption is an option for provider creation.

func WithAPIKey

func WithAPIKey(apiKey string) ProviderOption

WithAPIKey sets the API key for the provider.

func WithAPISecret

func WithAPISecret(apiSecret string) ProviderOption

WithAPISecret sets the API secret for the provider.

func WithConfig

func WithConfig(config map[string]any) ProviderOption

WithConfig sets configuration values for the provider.

func WithServerURL

func WithServerURL(url string) ProviderOption

WithServerURL sets the server URL for the provider.

func WithWebhookSecret

func WithWebhookSecret(secret string) ProviderOption

WithWebhookSecret sets the webhook secret for signature validation.

type Recording

type Recording = recording.Recording

Recording represents a meeting recording.

type RecordingOptions

type RecordingOptions = recording.Options

RecordingOptions contains options for starting a recording.

type RecordingProvider

type RecordingProvider = provider.RecordingProvider

RecordingProvider is an optional interface for providers that support recording.

type RecordingStatus

type RecordingStatus = recording.Status

RecordingStatus represents the status of a recording.

type STTConfig

type STTConfig = stt.TranscriptionConfig

STTConfig configures speech-to-text (from omnivoice-core).

type STTProvider

type STTProvider = stt.Provider

STTProvider is the interface for speech-to-text providers (from omnivoice-core).

type TTSConfig

type TTSConfig = tts.SynthesisConfig

TTSConfig configures text-to-speech (from omnivoice-core).

type TTSProvider

type TTSProvider = tts.Provider

TTSProvider is the interface for text-to-speech providers (from omnivoice-core).

type Track

type Track = track.Track

Track represents a media stream published by a participant.

type TrackKind

type TrackKind = track.Kind

TrackKind represents the type of media track.

type TrackSource

type TrackSource = track.Source

TrackSource represents the source of a track.

type Transcript

type Transcript = transcript.Transcript

Transcript represents a meeting transcript.

type TranscriptConfig

type TranscriptConfig = transcript.Config

TranscriptConfig contains configuration for transcription.

type TranscriptHandler

type TranscriptHandler = voice.TranscriptHandler

TranscriptHandler is called when speech is transcribed.

type TranscriptSegment

type TranscriptSegment = transcript.Segment

TranscriptSegment represents a segment of a transcript.

type TranscriptWord

type TranscriptWord = transcript.Word

TranscriptWord represents a word with timing information.

type VideoQuality

type VideoQuality = track.VideoQuality

VideoQuality represents the quality level for video tracks.

type VoiceAgentParticipant

type VoiceAgentParticipant = voice.VoiceAgentParticipant

VoiceAgentParticipant wraps AgentParticipant with OmniVoice integration.

type VoiceConfig

type VoiceConfig = voice.Config

VoiceConfig configures the VoiceAgentParticipant.

type WebhookHandler

type WebhookHandler = provider.WebhookHandler

WebhookHandler is an optional interface for providers that support webhooks.

Directories

Path Synopsis
Package agent provides OmniAgent integration for OmniMeet.
Package agent provides OmniAgent integration for OmniMeet.
Package event provides event types for OmniMeet.
Package event provides event types for OmniMeet.
examples
basic-agent command
Example: basic-agent demonstrates an AI agent joining a LiveKit meeting.
Example: basic-agent demonstrates an AI agent joining a LiveKit meeting.
omniagent-integration command
Example: omniagent-integration demonstrates how to add meeting capabilities to OmniAgent.
Example: omniagent-integration demonstrates how to add meeting capabilities to OmniAgent.
Package meeting provides the core Meeting type and related types for OmniMeet.
Package meeting provides the core Meeting type and related types for OmniMeet.
Package participant provides the Participant type and related types for OmniMeet.
Package participant provides the Participant type and related types for OmniMeet.
Package provider defines the core provider interfaces for OmniMeet.
Package provider defines the core provider interfaces for OmniMeet.
Package recording provides recording types for OmniMeet.
Package recording provides recording types for OmniMeet.
Package skill provides an omniskill-compatible meeting skill for OmniAgent.
Package skill provides an omniskill-compatible meeting skill for OmniAgent.
Package token provides join token types for OmniMeet.
Package token provides join token types for OmniMeet.
Package track provides the Track type and related types for OmniMeet.
Package track provides the Track type and related types for OmniMeet.
Package transcript provides transcript types for OmniMeet.
Package transcript provides transcript types for OmniMeet.
Package voice provides integration between OmniMeet and OmniVoice.
Package voice provides integration between OmniMeet and OmniVoice.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL