diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a201c66..d79407c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,6 +33,7 @@ jobs: run: pnpm lint - name: Prettier run: pnpm format:check + build: name: Build runs-on: ubuntu-latest @@ -48,3 +49,5 @@ jobs: run: pnpm install --frozen-lockfile - name: Build run: pnpm build + - name: API changes + run: pnpm api:check diff --git a/REUSE.toml b/REUSE.toml index 3eeb1e01..ff7d4f40 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -9,7 +9,17 @@ SPDX-PackageDownloadLocation = "https://github.com/livekit/agents-js" # trivial files [[annotations]] -path = [".gitignore", "flake.lock", ".envrc", "packages/livekit-rtc/.gitignore", ".changeset/**", "**/CHANGELOG.md", "NOTICE", ".github/**"] +path = [ + ".gitignore", + "flake.lock", + ".envrc", + "packages/livekit-rtc/.gitignore", + ".changeset/**", + "**/CHANGELOG.md", + "NOTICE", + ".github/**", + "**/etc/*.api.md", +] SPDX-FileCopyrightText = "2024 LiveKit, Inc." SPDX-License-Identifier = "Apache-2.0" diff --git a/agents/etc/agents.api.md b/agents/etc/agents.api.md new file mode 100644 index 00000000..b3a37b7a --- /dev/null +++ b/agents/etc/agents.api.md @@ -0,0 +1,830 @@ +## API Report File for "@livekit/agents" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +/// + +import { AudioFrame } from '@livekit/rtc-node'; +import type { AudioSource } from '@livekit/rtc-node'; +import type { E2EEOptions } from '@livekit/rtc-node'; +import { EventEmitter } from 'node:events'; +import { JobType } from '@livekit/protocol'; +import type { LocalParticipant } from '@livekit/rtc-node'; +import type { Logger } from 'pino'; +import type * as proto from '@livekit/protocol'; +import type { RemoteAudioTrack } from '@livekit/rtc-node'; +import type { RemoteParticipant } from '@livekit/rtc-node'; +import type { Room } from '@livekit/rtc-node'; +import type { RtcConfiguration } from '@livekit/rtc-node'; +import type { TrackSource } from '@livekit/protocol'; +import { z } from 'zod'; + +// @public (undocumented) +export interface Agent { + // (undocumented) + entry: (ctx: JobContext) => Promise; + // (undocumented) + prewarm?: (proc: JobProcess) => unknown; +} + +// @public (undocumented) +const AGENT_STATE_ATTRIBUTE = "lk.agent.state"; + +// @public (undocumented) +class AgentPlayout extends EventEmitter { + constructor(audioSource: AudioSource, sampleRate: number, numChannels: number, inFrameSize: number, outFrameSize: number); + // Warning: (ae-incompatible-release-tags) The symbol "play" is marked as @public, but its signature references "AsyncIterableQueue" which is marked as @internal + // Warning: (ae-incompatible-release-tags) The symbol "play" is marked as @public, but its signature references "AsyncIterableQueue" which is marked as @internal + // + // (undocumented) + play(itemId: string, contentIndex: number, transcriptionFwd: TranscriptionForwarder, textStream: AsyncIterableQueue, audioStream: AsyncIterableQueue): PlayoutHandle; +} + +// @public (undocumented) +type AgentState = 'initializing' | 'thinking' | 'listening' | 'speaking'; + +// Warning: (ae-internal-missing-underscore) The name "AsyncIterableQueue" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export class AsyncIterableQueue implements AsyncIterable { + // (undocumented) + [Symbol.asyncIterator](): AsyncIterator; + constructor(); + // (undocumented) + close(): void; + // (undocumented) + put(item: T): void; +} + +// @public +type AudioBuffer_2 = AudioFrame[] | AudioFrame; +export { AudioBuffer_2 as AudioBuffer } + +// @public +export class AudioByteStream { + constructor(sampleRate: number, numChannels: number, samplesPerChannel?: number | null); + // (undocumented) + flush(): AudioFrame[]; + // (undocumented) + write(data: ArrayBuffer): AudioFrame[]; +} + +// @public +export enum AutoSubscribe { + // (undocumented) + AUDIO_ONLY = 3, + // (undocumented) + SUBSCRIBE_ALL = 0, + // (undocumented) + SUBSCRIBE_NONE = 1, + // (undocumented) + VIDEO_ONLY = 2 +} + +// @public (undocumented) +export class BasicTranscriptionForwarder implements TranscriptionForwarder { + constructor(room: Room, participantIdentity: string, trackSid: string, messageId: string); + // (undocumented) + close(interrupt: boolean): Promise; + // (undocumented) + currentCharacterIndex: number; + // (undocumented) + markAudioComplete(): void; + // (undocumented) + markTextComplete(): void; + // (undocumented) + pushAudio(frame: AudioFrame): void; + // (undocumented) + pushText(text: string): void; + // (undocumented) + start(): void; +} + +// @public +interface CallableFunction_2

{ + // (undocumented) + description: string; + // (undocumented) + execute: (args: inferParameters

) => PromiseLike; + // (undocumented) + parameters: P; +} + +// Warning: (ae-internal-missing-underscore) The name "CancellablePromise" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export class CancellablePromise { + constructor(executor: (resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void, onCancel: (cancelFn: () => void) => void) => void); + // (undocumented) + cancel(): void; + // (undocumented) + catch(onrejected?: ((reason: any) => TResult | Promise) | null): Promise; + // (undocumented) + get error(): Error | null; + // (undocumented) + finally(onfinally?: (() => void) | null): Promise; + // (undocumented) + static from(promise: Promise): CancellablePromise; + // (undocumented) + get isCancelled(): boolean; + // (undocumented) + then(onfulfilled?: ((value: T) => TResult1 | Promise) | null, onrejected?: ((reason: any) => TResult2 | Promise) | null): Promise; +} + +// @public (undocumented) +abstract class ChunkedStream implements AsyncIterableIterator { + // (undocumented) + [Symbol.asyncIterator](): ChunkedStream; + // (undocumented) + [Symbol.iterator](): ChunkedStream; + // (undocumented) + abstract close(): Promise; + // (undocumented) + collect(): Promise; + // (undocumented) + abstract next(): Promise>; +} + +declare namespace cli { + export { + runApp + } +} +export { cli } + +// Warning: (ae-internal-missing-underscore) The name "defaultInitializeProcessFunc" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export const defaultInitializeProcessFunc: (_: JobProcess) => JobProcess; + +// @public +export function defineAgent(agent: Agent): Agent; + +// @public (undocumented) +export const findMicroTrackId: (room: Room, identity: string) => string; + +// @public +type FunctionContext = { + [name: string]: CallableFunction_2; +}; + +// @public +export class FunctionExistsError extends Error { + constructor(msg?: string); +} + +// Warning: (ae-internal-missing-underscore) The name "Future" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export class Future { + constructor(); + // (undocumented) + get await(): Promise; + // (undocumented) + get done(): boolean; + // (undocumented) + reject(error: Error): void; + // (undocumented) + resolve(): void; +} + +// Warning: (ae-internal-missing-underscore) The name "gracefullyCancel" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export function gracefullyCancel(promise: CancellablePromise): Promise; + +// @public +type inferParameters

= z.infer

; + +// Warning: (ae-internal-missing-underscore) The name "initializeLogger" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export const initializeLogger: ({ pretty, level }: LoggerOptions) => void; + +// Warning: (ae-internal-missing-underscore) The name "isAgent" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal +export function isAgent(obj: unknown): obj is Agent; + +// @public (undocumented) +export type JobAcceptArguments = { + name: string; + identity: string; + metadata: string; +}; + +// @public +export class JobContext { + constructor(proc: JobProcess, info: RunningJobInfo, room: Room, onConnect: () => void, onShutdown: (s: string) => void); + addParticipantEntrypoint(callback: (job: JobContext, p: RemoteParticipant) => Promise): void; + addShutdownCallback(callback: () => Promise): void; + // (undocumented) + get agent(): LocalParticipant | undefined; + connect(e2ee?: E2EEOptions, autoSubscribe?: AutoSubscribe, rtcConfig?: RtcConfiguration): Promise; + // (undocumented) + get job(): proto.Job; + // @internal (undocumented) + onParticipantConnected(p: RemoteParticipant): void; + // (undocumented) + get proc(): JobProcess; + // (undocumented) + get room(): Room; + shutdown(reason?: string): void; + // @internal (undocumented) + shutdownCallbacks: (() => Promise)[]; + // (undocumented) + waitForParticipant(identity?: string): Promise; +} + +// @public (undocumented) +export class JobProcess { + // (undocumented) + get pid(): number; + // (undocumented) + userData: { + [id: string]: unknown; + }; +} + +// @public +export class JobRequest { + // @internal + constructor(job: proto.Job, onReject: () => Promise, onAccept: (args: JobAcceptArguments) => Promise); + accept(name?: string, identity?: string, metadata?: string): Promise; + // (undocumented) + get agentName(): string; + // (undocumented) + get id(): string; + // (undocumented) + get job(): proto.Job; + // (undocumented) + get publisher(): proto.ParticipantInfo | undefined; + reject(): Promise; + // (undocumented) + get room(): proto.Room | undefined; +} + +declare namespace llm { + export { + CallableFunction_2 as CallableFunction, + FunctionContext, + inferParameters, + oaiParams + } +} +export { llm } + +// Warning: (ae-internal-missing-underscore) The name "log" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export const log: () => Logger; + +// Warning: (ae-internal-missing-underscore) The name "LoggerOptions" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export type LoggerOptions = { + pretty: boolean; + level?: string; +}; + +// Warning: (ae-internal-missing-underscore) The name "loggerOptions" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export let loggerOptions: LoggerOptions; + +// @public +export const mergeFrames: (buffer: AudioBuffer_2) => AudioFrame; + +// @public +export class MissingCredentialsError extends Error { + constructor(msg?: string); +} + +declare namespace multimodal { + export { + RealtimeSession, + RealtimeModel, + AgentState, + AGENT_STATE_ATTRIBUTE, + MultimodalAgent, + proto_2 as proto, + PlayoutHandle, + AgentPlayout + } +} +export { multimodal } + +// @beta (undocumented) +class MultimodalAgent extends EventEmitter { + constructor({ model, fncCtx, }: { + model: RealtimeModel; + fncCtx?: llm.FunctionContext | undefined; + }); + // (undocumented) + get fncCtx(): llm.FunctionContext | undefined; + set fncCtx(ctx: llm.FunctionContext | undefined); + // (undocumented) + linkedParticipant: RemoteParticipant | null; + // (undocumented) + model: RealtimeModel; + // (undocumented) + readMicroTask: { + promise: Promise; + cancel: () => void; + } | null; + // (undocumented) + room: Room | null; + // (undocumented) + start(room: Room, participant?: RemoteParticipant | string | null): Promise; + // (undocumented) + subscribedTrack: RemoteAudioTrack | null; +} + +// Warning: (ae-internal-missing-underscore) The name "Mutex" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export class Mutex { + constructor(limit?: number); + // (undocumented) + isLocked(): boolean; + // (undocumented) + lock(): Promise<() => void>; +} + +// @internal (undocumented) +const oaiParams: (p: z.AnyZodObject) => { + type: "object"; + properties: Record; + required_properties: string[]; +}; + +// @public (undocumented) +class PlayoutHandle extends EventEmitter { + constructor(audioSource: AudioSource, sampleRate: number, itemId: string, contentIndex: number, transcriptionFwd: TranscriptionForwarder); + // (undocumented) + get audioSamples(): number; + // (undocumented) + get contentIndex(): number; + // (undocumented) + get done(): boolean; + // @internal (undocumented) + doneFut: Future; + // (undocumented) + interrupt(): void; + // (undocumented) + get interrupted(): boolean; + // @internal (undocumented) + intFut: Future; + // (undocumented) + get itemId(): string; + // @internal (undocumented) + pushedDuration: number; + // (undocumented) + get textChars(): number; + // @internal (undocumented) + totalPlayedTime: number | undefined; + // @internal (undocumented) + transcriptionFwd: TranscriptionForwarder; +} + +// @public (undocumented) +abstract class Plugin_2 { + constructor(title: string, version: string); + // (undocumented) + abstract downloadFiles(): void; + // (undocumented) + registeredPlugins: Plugin_2[]; + // (undocumented) + static registerPlugins(plugin: Plugin_2): void; + // (undocumented) + get title(): string; + // (undocumented) + get version(): string; +} +export { Plugin_2 as Plugin } + +// @public (undocumented) +const proto_2: {}; + +// Warning: (ae-internal-missing-underscore) The name "Queue" should be prefixed with an underscore because the declaration is marked as @internal +// +// @internal (undocumented) +export class Queue { + constructor(limit?: number); + // (undocumented) + get(): Promise; + // (undocumented) + items: T[]; + // (undocumented) + put(item: T): Promise; +} + +// @beta (undocumented) +abstract class RealtimeModel { + // (undocumented) + abstract close(): Promise; + // (undocumented) + abstract inFrameSize: number; + // (undocumented) + abstract numChannels: number; + // (undocumented) + abstract outFrameSize: number; + // (undocumented) + abstract sampleRate: number; + // (undocumented) + abstract session(options: any): RealtimeSession; +} + +// @beta (undocumented) +abstract class RealtimeSession extends EventEmitter { + // (undocumented) + abstract conversation: any; + // (undocumented) + abstract fncCtx: llm.FunctionContext | undefined; + // (undocumented) + abstract inputAudioBuffer: any; +} + +// @public +const runApp: (opts: WorkerOptions_2) => void; + +// @public (undocumented) +export type RunningJobInfo = { + acceptArguments: JobAcceptArguments; + job: proto.Job; + url: string; + token: string; +}; + +// @public (undocumented) +export interface SegmentedSentence { + // (undocumented) + text: string; +} + +// @public (undocumented) +export abstract class SentenceStream implements IterableIterator { + // (undocumented) + [Symbol.iterator](): SentenceStream; + // (undocumented) + close(): Promise; + // (undocumented) + abstract flush(): Promise; + // (undocumented) + abstract next(): IteratorResult; + // (undocumented) + abstract pushText(text: string): void; +} + +// @public (undocumented) +export abstract class SentenceTokenizer { + // (undocumented) + abstract stream(language: string | undefined): SentenceStream; + // (undocumented) + abstract tokenize(text: string, language?: string): SegmentedSentence[]; +} + +// @public (undocumented) +interface SpeechData { + // (undocumented) + confidence: number; + // (undocumented) + endTime: number; + // (undocumented) + language: string; + // (undocumented) + startTime: number; + // (undocumented) + text: string; +} + +// @public (undocumented) +class SpeechEvent { + constructor(type: SpeechEventType, alternatives?: SpeechData[]); + // (undocumented) + alternatives: SpeechData[]; + // (undocumented) + type: SpeechEventType; +} + +// @public (undocumented) +enum SpeechEventType { + END_OF_SPEECH = 3, + FINAL_TRANSCRIPT = 2, + INTERIM_TRANSCRIPT = 1, + START_OF_SPEECH = 0 +} + +// @public (undocumented) +abstract class SpeechStream implements IterableIterator { + // (undocumented) + [Symbol.iterator](): SpeechStream; + abstract close(wait: boolean): Promise; + // (undocumented) + abstract next(): IteratorResult; + abstract pushFrame(token: AudioFrame): void; +} + +// @public (undocumented) +class StreamAdapter extends STT { + constructor(stt: STT, vadStream: VADStream); + // (undocumented) + recognize(buffer: AudioBuffer_2, language?: string | undefined): Promise; + // (undocumented) + stream(language?: string | undefined): StreamAdapterWrapper; +} + +// @public (undocumented) +class StreamAdapter_2 extends TTS { + constructor(tts: TTS, tokenizer: SentenceTokenizer); + // (undocumented) + stream(): StreamAdapterWrapper_2; + // (undocumented) + synthesize(text: string): Promise; +} + +// @public (undocumented) +class StreamAdapterWrapper extends SpeechStream { + constructor(stt: STT, vadStream: VADStream, language?: string | undefined); + // (undocumented) + close(wait?: boolean): Promise; + // (undocumented) + next(): IteratorResult; + // (undocumented) + pushFrame(frame: AudioFrame): void; + // (undocumented) + run(reject: (arg: Error) => void): Promise; +} + +// @public (undocumented) +class StreamAdapterWrapper_2 extends SynthesizeStream { + constructor(tts: TTS, sentenceStream: SentenceStream); + // (undocumented) + close(): Promise; + // (undocumented) + flush(): Promise; + // (undocumented) + next(): IteratorResult; + // (undocumented) + pushText(token: string): void; + // (undocumented) + run(reject: (arg: Error) => void): Promise; +} + +// @public (undocumented) +abstract class STT { + constructor(streamingSupported: boolean); + // (undocumented) + abstract recognize(buffer: AudioBuffer_2, language?: string): Promise; + // (undocumented) + abstract stream(language: string | undefined): SpeechStream; + // (undocumented) + get streamingSupported(): boolean; +} + +declare namespace stt { + export { + STT, + SpeechEvent, + SpeechEventType, + SpeechStream, + SpeechData, + StreamAdapter, + StreamAdapterWrapper + } +} +export { stt } + +// @public (undocumented) +class SynthesisEvent { + constructor(type: SynthesisEventType, audio?: SynthesizedAudio | undefined); + // (undocumented) + audio?: SynthesizedAudio; + // (undocumented) + type: SynthesisEventType; +} + +// @public (undocumented) +enum SynthesisEventType { + AUDIO = 1, + FINISHED = 2, + STARTED = 0 +} + +// @public (undocumented) +interface SynthesizedAudio { + // (undocumented) + data: AudioFrame; + // (undocumented) + text: string; +} + +// @public (undocumented) +abstract class SynthesizeStream implements IterableIterator { + // (undocumented) + [Symbol.iterator](): SynthesizeStream; + // (undocumented) + abstract close(wait: boolean): Promise; + // (undocumented) + markSegmentEnd(): void; + // (undocumented) + abstract next(): IteratorResult; + // (undocumented) + abstract pushText(token?: string): void; +} + +// @public (undocumented) +export interface TranscriptionForwarder { + // (undocumented) + close(interrupt: boolean): Promise; + // (undocumented) + currentCharacterIndex: number; + // (undocumented) + markAudioComplete(): void; + // (undocumented) + markTextComplete(): void; + // (undocumented) + pushAudio(frame: AudioFrame): void; + // (undocumented) + pushText(text: string): void; + // (undocumented) + start(): void; +} + +// @public (undocumented) +abstract class TTS { + constructor(streamingSupported: boolean); + // (undocumented) + abstract stream(): SynthesizeStream; + // (undocumented) + get streamingSupported(): boolean; + // (undocumented) + abstract synthesize(text: string): Promise; +} + +declare namespace tts { + export { + TTS, + SynthesisEvent, + SynthesisEventType, + SynthesizedAudio, + SynthesizeStream, + StreamAdapter_2 as StreamAdapter, + StreamAdapterWrapper_2 as StreamAdapterWrapper, + ChunkedStream + } +} +export { tts } + +// @public (undocumented) +export abstract class VAD { + abstract stream({ minSpeakingDuration, minSilenceDuration, paddingDuration, sampleRate, maxBufferedSpeech, }: { + minSpeakingDuration: number; + minSilenceDuration: number; + paddingDuration: number; + sampleRate: number; + maxBufferedSpeech: number; + }): VADStream; +} + +// @public (undocumented) +export interface VADEvent { + duration: number; + samplesIndex: number; + // (undocumented) + speech: AudioFrame[]; + // (undocumented) + type: VADEventType; +} + +// @public (undocumented) +export enum VADEventType { + // (undocumented) + END_OF_SPEECH = 3, + // (undocumented) + SPEAKING = 2, + // (undocumented) + START_OF_SPEECH = 1 +} + +// @public (undocumented) +export abstract class VADStream implements IterableIterator { + // (undocumented) + [Symbol.iterator](): VADStream; + // (undocumented) + abstract close(wait: boolean): Promise; + // (undocumented) + abstract next(): IteratorResult; + // (undocumented) + abstract pushFrame(frame: AudioFrame): void; +} + +// @public (undocumented) +export const version = "0.1.0"; + +// @public +class Worker_2 { + constructor(opts: WorkerOptions_2); + // (undocumented) + get activeJobs(): RunningJobInfo[]; + // (undocumented) + close(): Promise; + // (undocumented) + drain(timeout?: number): Promise; + // (undocumented) + event: EventEmitter<[never]>; + // (undocumented) + get id(): string; + // (undocumented) + run(): Promise; + // (undocumented) + simulateJob(roomName: string, participantIdentity?: string): Promise; +} +export { Worker_2 as Worker } + +// @public +export class WorkerError extends Error { + constructor(msg?: string); +} + +// @public +class WorkerOptions_2 { + constructor({ agent, requestFunc, loadFunc, loadThreshold, numIdleProcesses, shutdownProcessTimeout, initializeProcessTimeout, permissions, agentName, workerType, maxRetry, wsURL, apiKey, apiSecret, host, port, logLevel, production, }: { + agent: string; + requestFunc?: (job: JobRequest) => Promise; + loadFunc?: () => Promise; + loadThreshold?: number; + numIdleProcesses?: number; + shutdownProcessTimeout?: number; + initializeProcessTimeout?: number; + permissions?: WorkerPermissions; + agentName?: string; + workerType?: JobType; + maxRetry?: number; + wsURL?: string; + apiKey?: string; + apiSecret?: string; + host?: string; + port?: number; + logLevel?: string; + production?: boolean; + }); + // (undocumented) + agent: string; + // (undocumented) + agentName: string; + // (undocumented) + apiKey?: string; + // (undocumented) + apiSecret?: string; + // (undocumented) + host: string; + // (undocumented) + initializeProcessTimeout: number; + // (undocumented) + loadFunc: () => Promise; + // (undocumented) + loadThreshold: number; + // (undocumented) + logLevel: string; + // (undocumented) + maxRetry: number; + // (undocumented) + numIdleProcesses: number; + // (undocumented) + permissions: WorkerPermissions; + // (undocumented) + port: number; + // (undocumented) + production: boolean; + // (undocumented) + requestFunc: (job: JobRequest) => Promise; + // (undocumented) + shutdownProcessTimeout: number; + // (undocumented) + workerType: JobType; + // (undocumented) + wsURL: string; +} +export { WorkerOptions_2 as WorkerOptions } + +// @public +export class WorkerPermissions { + constructor(canPublish?: boolean, canSubscribe?: boolean, canPublishData?: boolean, canUpdateMetadata?: boolean, canPublishSources?: TrackSource[], hidden?: boolean); + // (undocumented) + canPublish: boolean; + // (undocumented) + canPublishData: boolean; + // (undocumented) + canPublishSources: TrackSource[]; + // (undocumented) + canSubscribe: boolean; + // (undocumented) + canUpdateMetadata: boolean; + // (undocumented) + hidden: boolean; +} + +``` diff --git a/agents/package.json b/agents/package.json index 4e12b1a6..6bb58713 100644 --- a/agents/package.json +++ b/agents/package.json @@ -11,11 +11,11 @@ "clean": "rm -rf dist", "clean:build": "pnpm clean && pnpm build", "lint": "eslint -f unix \"src/**/*.ts\"", - "api:check": "api-extractor run --typescript-compiler-folder ../node_modules/typescript", - "api:update": "api-extractor run --local --typescript-compiler-folder ../node_modules/typescript --verbose" + "api:check": "api-extractor run", + "api:update": "api-extractor run --local --verbose" }, "devDependencies": { - "@microsoft/api-extractor": "^7.35.0", + "@microsoft/api-extractor": "^7.47.9", "@types/node": "^22.5.5", "@types/ws": "^8.5.10", "typescript": "^5.0.0" diff --git a/agents/src/multimodal/agent_playout.ts b/agents/src/multimodal/agent_playout.ts index 25f4edd0..5efbd737 100644 --- a/agents/src/multimodal/agent_playout.ts +++ b/agents/src/multimodal/agent_playout.ts @@ -2,11 +2,12 @@ // // SPDX-License-Identifier: Apache-2.0 import type { AudioFrame } from '@livekit/rtc-node'; -import { type AudioSource } from '@livekit/rtc-node'; +import type { AudioSource } from '@livekit/rtc-node'; import { EventEmitter } from 'node:events'; import { AudioByteStream } from '../audio.js'; import type { TranscriptionForwarder } from '../transcription.js'; -import { type AsyncIterableQueue, CancellablePromise, Future, gracefullyCancel } from '../utils.js'; +import { CancellablePromise, Future, gracefullyCancel } from '../utils.js'; +import type { AsyncIterableQueue } from '../utils.js'; export const proto = {}; diff --git a/agents/src/multimodal/multimodal_agent.ts b/agents/src/multimodal/multimodal_agent.ts index 4ab66c18..70669b5f 100644 --- a/agents/src/multimodal/multimodal_agent.ts +++ b/agents/src/multimodal/multimodal_agent.ts @@ -21,7 +21,8 @@ import type * as llm from '../llm/index.js'; import { log } from '../log.js'; import { BasicTranscriptionForwarder } from '../transcription.js'; import { findMicroTrackId } from '../utils.js'; -import { AgentPlayout, type PlayoutHandle } from './agent_playout.js'; +import type { PlayoutHandle } from './agent_playout.js'; +import { AgentPlayout } from './agent_playout.js'; /** * @internal diff --git a/examples/package.json b/examples/package.json index 71bc56ae..444fe6bf 100644 --- a/examples/package.json +++ b/examples/package.json @@ -18,5 +18,5 @@ "@livekit/rtc-node": "^0.9.0", "zod": "^3.23.8" }, - "version": null + "version": "0.0.0" } diff --git a/package.json b/package.json index 65b2eeb6..b95fdc7e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "devDependencies": { "@changesets/cli": "^2.27.1", "@livekit/changesets-changelog-github": "^0.0.4", - "@rushstack/heft": "^0.66.0", + "@rushstack/heft": "^0.68.2", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", @@ -31,7 +31,7 @@ "eslint-config-next": "^14.1.0", "eslint-config-prettier": "^8.10.0", "eslint-config-standard": "^17.1.0", - "eslint-config-turbo": "^1.12.2", + "eslint-config-turbo": "^2.1.3", "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^16.6.2", "eslint-plugin-prettier": "^5.1.3", @@ -39,7 +39,7 @@ "eslint-plugin-standard": "^5.0.0", "eslint-plugin-tsdoc": "^0.2.17", "prettier": "^3.2.5", - "turbo": "^1.13.3", + "turbo": "^2.1.3", "typedoc": "^0.25.13", "typescript": "^5.4.5", "vitest": "^1.6.0" diff --git a/plugins/openai/etc/agents-plugin-openai.api.md b/plugins/openai/etc/agents-plugin-openai.api.md new file mode 100644 index 00000000..5d6db2c1 --- /dev/null +++ b/plugins/openai/etc/agents-plugin-openai.api.md @@ -0,0 +1,19 @@ +## API Report File for "@livekit/agents-plugin-openai" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +declare namespace realtime { + export { + test + } +} +export { realtime } + +// @public (undocumented) +function test(): void; + +// (No @packageDocumentation comment for this package) + +``` diff --git a/plugins/openai/package.json b/plugins/openai/package.json index 9cc82cce..d3d60c7d 100644 --- a/plugins/openai/package.json +++ b/plugins/openai/package.json @@ -11,11 +11,11 @@ "clean": "rm -rf dist", "clean:build": "pnpm clean && pnpm build", "lint": "eslint -f unix \"src/**/*.{ts,js}\"", - "api:check": "api-extractor run --typescript-compiler-folder ../../node_modules/typescript", - "api:update": "api-extractor run --local --typescript-compiler-folder ../../node_modules/typescript --verbose" + "api:check": "api-extractor run", + "api:update": "api-extractor run --local --verbose" }, "devDependencies": { - "@microsoft/api-extractor": "^7.35.0", + "@microsoft/api-extractor": "^7.47.9", "@types/ws": "^8.5.10", "typescript": "^5.0.0" }, diff --git a/plugins/openai/src/realtime/api_proto.ts b/plugins/openai/src/realtime/api_proto.ts index 382582f6..fd213f31 100644 --- a/plugins/openai/src/realtime/api_proto.ts +++ b/plugins/openai/src/realtime/api_proto.ts @@ -2,22 +2,38 @@ // // SPDX-License-Identifier: Apache-2.0 +/** @internal */ export const SAMPLE_RATE = 24000; +/** @internal */ export const NUM_CHANNELS = 1; +/** @internal */ export const IN_FRAME_SIZE = 2400; // 100ms +/** @internal */ export const OUT_FRAME_SIZE = 1200; // 50ms +/** @internal */ export const API_URL = 'wss://api.openai.com/v1/realtime'; +/** @public */ export type Model = 'gpt-4o-realtime-preview-2024-10-01' | string; // Open-ended, for future models +/** @public */ +/** @public */ export type Voice = 'alloy' | 'shimmer' | 'echo' | string; +/** @public */ export type AudioFormat = 'pcm16'; // TODO: 'g711-ulaw' | 'g711-alaw' +/** @public */ export type Role = 'system' | 'assistant' | 'user' | 'tool'; +/** @public */ export type GenerationFinishedReason = 'stop' | 'max_tokens' | 'content_filter' | 'interrupt'; +/** @public */ export type InputTranscriptionModel = 'whisper-1' | string; // Open-ended, for future models +/** @public */ export type Modality = 'text' | 'audio'; +/** @public */ export type ToolChoice = 'auto' | 'none' | 'required' | string; +/** @public */ export type State = 'initializing' | 'listening' | 'thinking' | 'speaking' | string; +/** @public */ export type ResponseStatus = | 'in_progress' | 'completed' @@ -25,6 +41,7 @@ export type ResponseStatus = | 'cancelled' | 'failed' | string; +/** @public */ export type ClientEventType = | 'session.update' | 'input_audio_buffer.append' @@ -35,6 +52,7 @@ export type ClientEventType = | 'conversation.item.delete' | 'response.create' | 'response.cancel'; +/** @public */ export type ServerEventType = | 'error' | 'session.created' @@ -65,8 +83,10 @@ export type ServerEventType = | 'response.function_call_arguments.done' | 'rate_limits.updated'; +/** @public */ export type AudioBase64Bytes = string; +/** @public */ export interface Tool { type: 'function'; name: string; @@ -83,6 +103,7 @@ export interface Tool { }; } +/** @public */ export type TurnDetectionType = { type: 'server_vad'; threshold?: number; // 0.0 to 1.0, default: 0.5 @@ -90,62 +111,76 @@ export type TurnDetectionType = { silence_duration_ms?: number; // default: 200 }; +/** @public */ export type InputAudioTranscription = { model: InputTranscriptionModel; }; +/** @public */ export interface InputTextContent { type: 'input_text'; text: string; } +/** @public */ export interface InputAudioContent { type: 'input_audio'; audio: AudioBase64Bytes; } +/** @public */ export interface TextContent { type: 'text'; text: string; } +/** @public */ export interface AudioContent { type: 'audio'; audio: AudioBase64Bytes; transcript: string; } +/** @public */ export type Content = InputTextContent | InputAudioContent | TextContent | AudioContent; +/** @public */ export type ContentPart = { type: 'text' | 'audio'; audio?: AudioBase64Bytes; transcript?: string; }; +/** @public */ export interface BaseItem { id: string; object: 'realtime.item'; type: string; } +/** @public */ export interface SystemItem extends BaseItem { type: 'message'; role: 'system'; content: InputTextContent; } +/** @public */ export interface UserItem extends BaseItem { type: 'message'; role: 'user'; content: (InputTextContent | InputAudioContent)[]; } +/** @public */ export interface AssistantItem extends BaseItem { type: 'message'; role: 'assistant'; content: (TextContent | AudioContent)[]; } +/** @public */ +/** @public */ +/** @public */ export interface FunctionCallItem extends BaseItem { type: 'function_call'; call_id: string; @@ -153,12 +188,14 @@ export interface FunctionCallItem extends BaseItem { arguments: string; } +/** @public */ export interface FunctionCallOutputItem extends BaseItem { type: 'function_call_output'; call_id: string; output: string; } +/** @public */ export type ItemResource = | SystemItem | UserItem @@ -167,6 +204,7 @@ export type ItemResource = | FunctionCallOutputItem; // Session Resource +/** @public */ export interface SessionResource { id: string; object: 'realtime.session'; @@ -186,11 +224,13 @@ export interface SessionResource { } // Conversation Resource +/** @public */ export interface ConversationResource { id: string; object: 'realtime.conversation'; } +/** @public */ export type ResponseStatusDetails = | { type: 'incomplete'; @@ -208,6 +248,7 @@ export type ResponseStatusDetails = reason: 'turn_detected' | 'client_cancelled' | string; }; +/** @public */ export interface ResponseResource { id: string; object: 'realtime.response'; @@ -222,11 +263,13 @@ export interface ResponseResource { } // Client Events +/** @public */ interface BaseClientEvent { event_id?: string; type: ClientEventType; } +/** @public */ export interface SessionUpdateEvent extends BaseClientEvent { type: 'session.update'; session: Partial<{ @@ -244,55 +287,66 @@ export interface SessionUpdateEvent extends BaseClientEvent { }>; } +/** @public */ +/** @public */ export interface InputAudioBufferAppendEvent extends BaseClientEvent { type: 'input_audio_buffer.append'; audio: AudioBase64Bytes; } +/** @public */ export interface InputAudioBufferCommitEvent extends BaseClientEvent { type: 'input_audio_buffer.commit'; } +/** @public */ export interface InputAudioBufferClearEvent extends BaseClientEvent { type: 'input_audio_buffer.clear'; } +/** @public */ export interface UserItemCreate { type: 'message'; role: 'user'; content: (InputTextContent | InputAudioContent)[]; } +/** @public */ export interface AssistantItemCreate { type: 'message'; role: 'assistant'; content: TextContent[]; } +/** @public */ export interface SystemItemCreate { type: 'message'; role: 'system'; content: InputTextContent[]; } +/** @public */ export interface FunctionCallOutputItemCreate { type: 'function_call_output'; call_id: string; output: string; } +/** @public */ export type ConversationItemCreateContent = | UserItemCreate | AssistantItemCreate | SystemItemCreate | FunctionCallOutputItemCreate; +/** @public */ export interface ConversationItemCreateEvent extends BaseClientEvent { type: 'conversation.item.create'; previous_item_id?: string; item: ConversationItemCreateContent; } +/** @public */ export interface ConversationItemTruncateEvent extends BaseClientEvent { type: 'conversation.item.truncate'; item_id: string; @@ -300,11 +354,13 @@ export interface ConversationItemTruncateEvent extends BaseClientEvent { audio_end_ms: number; } +/** @public */ export interface ConversationItemDeleteEvent extends BaseClientEvent { type: 'conversation.item.delete'; item_id: string; } +/** @public */ export interface ResponseCreateEvent extends BaseClientEvent { type: 'response.create'; response?: Partial<{ @@ -319,10 +375,12 @@ export interface ResponseCreateEvent extends BaseClientEvent { }>; } +/** @public */ export interface ResponseCancelEvent extends BaseClientEvent { type: 'response.cancel'; } +/** @public */ export type ClientEvent = | SessionUpdateEvent | InputAudioBufferAppendEvent @@ -339,6 +397,7 @@ interface BaseServerEvent { type: ServerEventType; } +/** @public */ export interface ErrorEvent extends BaseServerEvent { type: 'error'; error: { @@ -350,47 +409,56 @@ export interface ErrorEvent extends BaseServerEvent { }; } +/** @public */ export interface SessionCreatedEvent extends BaseServerEvent { type: 'session.created'; session: SessionResource; } +/** @public */ export interface SessionUpdatedEvent extends BaseServerEvent { type: 'session.updated'; session: SessionResource; } +/** @public */ export interface ConversationCreatedEvent extends BaseServerEvent { type: 'conversation.created'; conversation: ConversationResource; } +/** @public */ export interface InputAudioBufferCommittedEvent extends BaseServerEvent { type: 'input_audio_buffer.committed'; item_id: string; } +/** @public */ export interface InputAudioBufferClearedEvent extends BaseServerEvent { type: 'input_audio_buffer.cleared'; } +/** @public */ export interface InputAudioBufferSpeechStartedEvent extends BaseServerEvent { type: 'input_audio_buffer.speech_started'; audio_start_ms: number; item_id: string; } +/** @public */ export interface InputAudioBufferSpeechStoppedEvent extends BaseServerEvent { type: 'input_audio_buffer.speech_stopped'; audio_end_ms: number; item_id: string; } +/** @public */ export interface ConversationItemCreatedEvent extends BaseServerEvent { type: 'conversation.item.created'; item: ItemResource; } +/** @public */ export interface ConversationItemInputAudioTranscriptionCompletedEvent extends BaseServerEvent { type: 'conversation.item.input_audio_transcription.completed'; item_id: string; @@ -398,6 +466,8 @@ export interface ConversationItemInputAudioTranscriptionCompletedEvent extends B transcript: string; } +/** @public */ +/** @public */ export interface ConversationItemInputAudioTranscriptionFailedEvent extends BaseServerEvent { type: 'conversation.item.input_audio_transcription.failed'; item_id: string; @@ -410,6 +480,7 @@ export interface ConversationItemInputAudioTranscriptionFailedEvent extends Base }; } +/** @public */ export interface ConversationItemTruncatedEvent extends BaseServerEvent { type: 'conversation.item.truncated'; item_id: string; @@ -417,21 +488,25 @@ export interface ConversationItemTruncatedEvent extends BaseServerEvent { audio_end_ms: number; } +/** @public */ export interface ConversationItemDeletedEvent extends BaseServerEvent { type: 'conversation.item.deleted'; item_id: string; } +/** @public */ export interface ResponseCreatedEvent extends BaseServerEvent { type: 'response.created'; response: ResponseResource; } +/** @public */ export interface ResponseDoneEvent extends BaseServerEvent { type: 'response.done'; response: ResponseResource; } +/** @public */ export interface ResponseOutputItemAddedEvent extends BaseServerEvent { type: 'response.output_item.added'; response_id: string; @@ -439,6 +514,7 @@ export interface ResponseOutputItemAddedEvent extends BaseServerEvent { item: ItemResource; } +/** @public */ export interface ResponseOutputItemDoneEvent extends BaseServerEvent { type: 'response.output_item.done'; response_id: string; @@ -446,6 +522,7 @@ export interface ResponseOutputItemDoneEvent extends BaseServerEvent { item: ItemResource; } +/** @public */ export interface ResponseContentPartAddedEvent extends BaseServerEvent { type: 'response.content_part.added'; response_id: string; @@ -455,6 +532,7 @@ export interface ResponseContentPartAddedEvent extends BaseServerEvent { part: ContentPart; } +/** @public */ export interface ResponseContentPartDoneEvent extends BaseServerEvent { type: 'response.content_part.done'; response_id: string; @@ -463,6 +541,7 @@ export interface ResponseContentPartDoneEvent extends BaseServerEvent { part: ContentPart; } +/** @public */ export interface ResponseTextDeltaEvent extends BaseServerEvent { type: 'response.text.delta'; response_id: string; @@ -471,6 +550,7 @@ export interface ResponseTextDeltaEvent extends BaseServerEvent { delta: string; } +/** @public */ export interface ResponseTextDoneEvent extends BaseServerEvent { type: 'response.text.done'; response_id: string; @@ -479,6 +559,7 @@ export interface ResponseTextDoneEvent extends BaseServerEvent { text: string; } +/** @public */ export interface ResponseAudioTranscriptDeltaEvent extends BaseServerEvent { type: 'response.audio_transcript.delta'; response_id: string; @@ -487,6 +568,7 @@ export interface ResponseAudioTranscriptDeltaEvent extends BaseServerEvent { delta: string; } +/** @public */ export interface ResponseAudioTranscriptDoneEvent extends BaseServerEvent { type: 'response.audio_transcript.done'; response_id: string; @@ -495,6 +577,7 @@ export interface ResponseAudioTranscriptDoneEvent extends BaseServerEvent { transcript: string; } +/** @public */ export interface ResponseAudioDeltaEvent extends BaseServerEvent { type: 'response.audio.delta'; response_id: string; @@ -503,6 +586,7 @@ export interface ResponseAudioDeltaEvent extends BaseServerEvent { delta: AudioBase64Bytes; } +/** @public */ export interface ResponseAudioDoneEvent extends BaseServerEvent { type: 'response.audio.done'; response_id: string; @@ -510,6 +594,7 @@ export interface ResponseAudioDoneEvent extends BaseServerEvent { content_index: number; } +/** @public */ export interface ResponseFunctionCallArgumentsDeltaEvent extends BaseServerEvent { type: 'response.function_call_arguments.delta'; response_id: string; @@ -517,6 +602,7 @@ export interface ResponseFunctionCallArgumentsDeltaEvent extends BaseServerEvent delta: string; } +/** @public */ export interface ResponseFunctionCallArgumentsDoneEvent extends BaseServerEvent { type: 'response.function_call_arguments.done'; response_id: string; @@ -524,6 +610,7 @@ export interface ResponseFunctionCallArgumentsDoneEvent extends BaseServerEvent arguments: string; } +/** @public */ export interface RateLimitsUpdatedEvent extends BaseServerEvent { type: 'rate_limits.updated'; rate_limits: { @@ -534,6 +621,7 @@ export interface RateLimitsUpdatedEvent extends BaseServerEvent { }[]; } +/** @public */ export type ServerEvent = | ErrorEvent | SessionCreatedEvent diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f155c045..30b3beee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^0.0.4 version: 0.0.4 '@rushstack/heft': - specifier: ^0.66.0 - version: 0.66.9(@types/node@22.5.5) + specifier: ^0.68.2 + version: 0.68.2(@types/node@22.5.5) '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 version: 4.3.0(prettier@3.2.5) @@ -39,8 +39,8 @@ importers: specifier: ^17.1.0 version: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0) eslint-config-turbo: - specifier: ^1.12.2 - version: 1.13.3(eslint@8.57.0) + specifier: ^2.1.3 + version: 2.1.3(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) @@ -63,8 +63,8 @@ importers: specifier: ^3.2.5 version: 3.2.5 turbo: - specifier: ^1.13.3 - version: 1.13.3 + specifier: ^2.1.3 + version: 2.1.3 typedoc: specifier: ^0.25.13 version: 0.25.13(typescript@5.4.5) @@ -82,7 +82,7 @@ importers: version: 1.21.0 '@livekit/rtc-node': specifier: ^0.9.0 - version: 0.9.0 + version: 0.9.2 commander: specifier: ^12.0.0 version: 12.0.0 @@ -103,8 +103,8 @@ importers: version: 3.23.8 devDependencies: '@microsoft/api-extractor': - specifier: ^7.35.0 - version: 7.43.7(@types/node@22.5.5) + specifier: ^7.47.9 + version: 7.47.9(@types/node@22.5.5) '@types/node': specifier: ^22.5.5 version: 22.5.5 @@ -125,7 +125,7 @@ importers: version: link:../plugins/openai '@livekit/rtc-node': specifier: ^0.9.0 - version: 0.9.0 + version: 0.9.2 zod: specifier: ^3.23.8 version: 3.23.8 @@ -141,14 +141,14 @@ importers: version: link:../../agents '@livekit/rtc-node': specifier: ^0.9.0 - version: 0.9.0 + version: 0.9.2 ws: specifier: ^8.16.0 version: 8.17.0 devDependencies: '@microsoft/api-extractor': - specifier: ^7.35.0 - version: 7.43.7(@types/node@22.5.5) + specifier: ^7.47.9 + version: 7.47.9(@types/node@22.5.5) '@types/ws': specifier: ^8.5.10 version: 8.5.10 @@ -483,38 +483,38 @@ packages: '@livekit/protocol@1.21.0': resolution: {integrity: sha512-3TohFPNZy1axTuoDLU6mA1rwuP4VawgehvX52OoLJnU+fNQYfmMJqz8k7NSh79jG5I8Og77YYhT905Omrhli2A==} - '@livekit/rtc-node-darwin-arm64@0.9.0': - resolution: {integrity: sha512-tZJ53W5/OBDbUVThDmonLtx7Rwd4TyC9rPVpUtb+r4OPKnQ6WMpTMqkrgXCO6u7KCl6Ol4vxXlPIHODcUOXaGw==} + '@livekit/rtc-node-darwin-arm64@0.9.2': + resolution: {integrity: sha512-40p8hx1URVbEA9qiu/fJv/wsRZnA3lq2Mfky8RQDtGcGzpkUaW9+Seate2UKRbTbQ4LaHo7tezV0uQQgal+nGA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@livekit/rtc-node-darwin-x64@0.9.0': - resolution: {integrity: sha512-O3oU1fftW4dLbNIrvDr6KcFCQm0c4K6PX5JYy50KSmqpCWCMbFeMOsdEaA+y/5lX58E5r1xVQ/Y6H19GDf1C7A==} + '@livekit/rtc-node-darwin-x64@0.9.2': + resolution: {integrity: sha512-Gw39yVRH27o52JMTa+CafG9RBIXuGkZ6UQt1EeuhdWxSUwSmFt+2e6hqeP8RizWXXRHfWdc7bGv9fUF2hBwCkA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@livekit/rtc-node-linux-arm64-gnu@0.9.0': - resolution: {integrity: sha512-RSJEJ7Yz20Bcd0zpsHCtLwkJaz/iVldhvdTbsX5SwZ61cZUeQwJzhWF8+q2i2KiSvGcr5KAywrekTW1dNDj/pQ==} + '@livekit/rtc-node-linux-arm64-gnu@0.9.2': + resolution: {integrity: sha512-Whhh8S+BQ/rXO1Aorqq2lv7CpI4FeApf9N+VHZEHqT49q5/sPvlXu2TeCAOsMR5r5QdMjG5z7ZQ8ANfMLl6ceA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@livekit/rtc-node-linux-x64-gnu@0.9.0': - resolution: {integrity: sha512-CS93WNGGb3n7xVMxv++rgOk017AADsqYF7enz4d5QUbTJmowY5o3CGLsFA52Fe8x/YVXSezb85wE9mPTXmo/IA==} + '@livekit/rtc-node-linux-x64-gnu@0.9.2': + resolution: {integrity: sha512-1mPQG5Y9PuzBa2rAYgUw5Vd3CT2i9WdEtrwTw7G2q3yfebG09ZNOKNQ/0uNQaBQz8a82YpswuJHkrkOM5N2kKA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@livekit/rtc-node-win32-x64-msvc@0.9.0': - resolution: {integrity: sha512-7E9teGVOkXC3XM/wNhbjAPuoPwzI4luAvTnwzAbQNpvP2FVDOuGfZTSjq39pr+zOqsVm7+pQ3u2ftYlrWO/F1Q==} + '@livekit/rtc-node-win32-x64-msvc@0.9.2': + resolution: {integrity: sha512-N2oaii+RwI8IIj8RYegK8qknZj6p7o48m6vrPzI/aDRHDY9iWRChSs+a7qKGlg6B4sFHikYWkHFzOiEWf0v68w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@livekit/rtc-node@0.9.0': - resolution: {integrity: sha512-T2e9YQVyoM37ClNq71wpCpkcAAWGYMSKA0VJpxwjVyOUtVjuRf37HAClZoKVJ1PoG5xw2aWegVlFvw8LY+wkqw==} + '@livekit/rtc-node@0.9.2': + resolution: {integrity: sha512-oJZUeXAc56ExPJCnNwnq8mR+qCE1AB78eKOmvra9v7UkGXBkdUVhNBwyNZliSnj7fj8IcVzaD3xF1WpLzFBVsw==} engines: {node: '>= 18'} '@livekit/typed-emitter@3.0.0': @@ -526,19 +526,25 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@microsoft/api-extractor-model@7.28.17': - resolution: {integrity: sha512-b2AfLP33oEVtWLeNavSBRdyDa8sKlXjN4pdhBnC4HLontOtjILhL1ERAmZObF4PWSyChnnC2vjb47C9WKCFRGg==} + '@microsoft/api-extractor-model@7.29.8': + resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==} - '@microsoft/api-extractor@7.43.7': - resolution: {integrity: sha512-t5M8BdnS+TmroUA/Z9HJXExS9iL4pK9I3yGu9PsXVTXPmcVXlBlA1CVI7TjRa1jwm+vusG/+sbX1/t5UkJhQMg==} + '@microsoft/api-extractor@7.47.9': + resolution: {integrity: sha512-TTq30M1rikVsO5wZVToQT/dGyJY7UXJmjiRtkHPLb74Prx3Etw8+bX7Bv7iLuby6ysb7fuu1NFWqma+csym8Jw==} hasBin: true '@microsoft/tsdoc-config@0.16.2': resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@microsoft/tsdoc-config@0.17.0': + resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} + '@microsoft/tsdoc@0.14.2': resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + '@microsoft/tsdoc@0.15.0': + resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} + '@next/eslint-plugin-next@14.2.3': resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==} @@ -645,44 +651,44 @@ packages: '@rushstack/eslint-patch@1.10.3': resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} - '@rushstack/heft-config-file@0.14.19': - resolution: {integrity: sha512-XLrq3gY6M7SzY2HRtmI/frCNURdqNdH557mXoULIfUEBj61lpngMKdBhEpzyekilEowTnHSmHpi0/JCyE61kbA==} + '@rushstack/heft-config-file@0.15.7': + resolution: {integrity: sha512-d8rwr9ctVmnVBPyl0o1WFh6NKsAJEX9eJip3mRGKOUd6Lq5FLHaTELwVNbqmZ76oQITABueD5MS02QE5Yq2fhw==} engines: {node: '>=10.13.0'} - '@rushstack/heft@0.66.9': - resolution: {integrity: sha512-nTdLS7ATkELK4dYQORQRt+TkW7+Jur4MSQIi76+sxbWxhS1nW9BN2Cz6+DFg/EWqTcxEIjqONFG0J3yHTDQZWQ==} + '@rushstack/heft@0.68.2': + resolution: {integrity: sha512-og467vYqnH0xNBx1zIizILUFF4zM1h+guGC3s/80pBjoVblS9oCGVrUiG8fGtxOdj7Karlm97s9s6qDzdNqSVw==} engines: {node: '>=10.13.0'} hasBin: true - '@rushstack/node-core-library@4.3.0': - resolution: {integrity: sha512-JuNZ7lwaYQ4R1TugpryyWBn4lIxK+L7fF+muibFp0by5WklG22nsvH868fuBoZMLo5FqAs6WFOifNos4PJjWSA==} + '@rushstack/node-core-library@5.9.0': + resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/operation-graph@0.2.19': - resolution: {integrity: sha512-yGxy5WfuR+uzR5AuwIYSayJsWb/Xa/mZvGlWI3A1CsJlOu9xBS2JFAGO9YAGURWY2QuUd64gGokYHKej2oa3Ew==} + '@rushstack/operation-graph@0.2.33': + resolution: {integrity: sha512-bokTOAt8jNAMiMZuMs83GXK4GkfAVbj3mx7g0hYuyqTVw7M/EgJO7eL2S/WjqyLxljwHL3cesXSY+csvhbbggA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.5.2': - resolution: {integrity: sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==} + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.11.0': - resolution: {integrity: sha512-LKz7pv0G9Py5uULahNSixK1pTqIIKd103pAGhDW51YfzPojvmO5wfITe0PEUNAJZjuufN/KgeRW83dJo1gL2rQ==} + '@rushstack/terminal@0.14.2': + resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.21.0': - resolution: {integrity: sha512-z38FLUCn8M9FQf19gJ9eltdwkvc47PxvJmVZS6aKwbBAa3Pis3r3A+ZcBCVPNb9h/Tbga+i0tHdzoSGUoji9GQ==} + '@rushstack/ts-command-line@4.22.8': + resolution: {integrity: sha512-XbFjOoV7qZHJnSuFUHv0pKaFA4ixyCuki+xMjsMfDwfvQjs5MYG0IK5COal3tRnG7KCDe2l/G+9LrzYE/RJhgg==} '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -823,9 +829,31 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1043,10 +1071,6 @@ packages: resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} engines: {node: '>=18'} - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1270,8 +1294,8 @@ packages: eslint-plugin-n: '^15.0.0 || ^16.0.0 ' eslint-plugin-promise: ^6.0.0 - eslint-config-turbo@1.13.3: - resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==} + eslint-config-turbo@2.1.3: + resolution: {integrity: sha512-smdkhd01V/e/I4EjJxaZA1kxZ1vdFCHpyryolxLtRBP0bZTrHDYh1H6NAyZ3Fy1jkhsQzXw+L+6m17ygROvNFw==} peerDependencies: eslint: '>6.6.0' @@ -1375,8 +1399,8 @@ packages: eslint-plugin-tsdoc@0.2.17: resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - eslint-plugin-turbo@1.13.3: - resolution: {integrity: sha512-RjmlnqYsEqnJ+U3M3IS5jLJDjWv5NsvReCpsC61n5pJ4JMHTZ/lU0EIoL1ccuL1L5wP0APzdXdByBxERcPQ+Nw==} + eslint-plugin-turbo@2.1.3: + resolution: {integrity: sha512-I9vPArzyOSYa6bm0iMCgD07MgdExc1VK2wGuVz21g4BUdj83w7mDKyCXR2rwOtCEW+wemFwgxanJ81imQZijNg==} peerDependencies: eslint: '>6.6.0' @@ -1870,6 +1894,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1936,12 +1963,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - - lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2349,6 +2370,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} @@ -2673,38 +2698,38 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - turbo-darwin-64@1.13.3: - resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} + turbo-darwin-64@2.1.3: + resolution: {integrity: sha512-ouJOm0g0YyoBuhmikEujVCBGo3Zr0lbSOWFIsQtWUTItC88F2w2byhjtsYGPXQwMlTbXwmoBU2lOCfWNkeEwHQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@1.13.3: - resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} + turbo-darwin-arm64@2.1.3: + resolution: {integrity: sha512-j2FOJsK4LAOtHQlb3Oom0yWB/Vi0nF1ljInr311mVzHoFAJRZtfW2fRvdZRb/lBUwjSp8be58qWHzANIcrA0OA==} cpu: [arm64] os: [darwin] - turbo-linux-64@1.13.3: - resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} + turbo-linux-64@2.1.3: + resolution: {integrity: sha512-ubRHkI1gSel7H7wsmxKK8C9UlLWqg/2dkCC88LFupaK6TKgvBKqDqA0Z1M9C/escK0Jsle2k0H8bybV9OYIl4Q==} cpu: [x64] os: [linux] - turbo-linux-arm64@1.13.3: - resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} + turbo-linux-arm64@2.1.3: + resolution: {integrity: sha512-LffUL+e5wv7BtD6DgnM2kKOlDkMo2eRjhbAjVnrCD3wi2ug0tl6NDzajnHHjtaMyOnIf4AvzSKdLWsBxafGBQA==} cpu: [arm64] os: [linux] - turbo-windows-64@1.13.3: - resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} + turbo-windows-64@2.1.3: + resolution: {integrity: sha512-S9SvcZZoaq5jKr6kA6eF7/xgQhVn8Vh7PVy5lono9zybvhyL4eY++y2PaLToIgL8G9IcbLmgOC73ExNjFBg9XQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@1.13.3: - resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} + turbo-windows-arm64@2.1.3: + resolution: {integrity: sha512-twlEo8lRrGbrR6T/ZklUIquW3IlFCEtywklgVA81aIrSBm56+GEVpSrHhIlsx1hiYeSNrs+GpDwZGe+V7fvEVQ==} cpu: [arm64] os: [win32] - turbo@1.13.3: - resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} + turbo@2.1.3: + resolution: {integrity: sha512-lY0yj2GH2a2a3NExZ3rGe+rHUVeFE2aXuRAue57n+08E7Z7N7YCmynju0kPC1grAQzERmoLpKrmzmWd+PNiADw==} hasBin: true type-check@0.4.0: @@ -2787,10 +2812,6 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - vite-node@1.6.0: resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2972,11 +2993,6 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - z-schema@5.0.5: - resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} - engines: {node: '>=8.0.0'} - hasBin: true - zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -3371,31 +3387,31 @@ snapshots: dependencies: '@bufbuild/protobuf': 1.9.0 - '@livekit/rtc-node-darwin-arm64@0.9.0': + '@livekit/rtc-node-darwin-arm64@0.9.2': optional: true - '@livekit/rtc-node-darwin-x64@0.9.0': + '@livekit/rtc-node-darwin-x64@0.9.2': optional: true - '@livekit/rtc-node-linux-arm64-gnu@0.9.0': + '@livekit/rtc-node-linux-arm64-gnu@0.9.2': optional: true - '@livekit/rtc-node-linux-x64-gnu@0.9.0': + '@livekit/rtc-node-linux-x64-gnu@0.9.2': optional: true - '@livekit/rtc-node-win32-x64-msvc@0.9.0': + '@livekit/rtc-node-win32-x64-msvc@0.9.2': optional: true - '@livekit/rtc-node@0.9.0': + '@livekit/rtc-node@0.9.2': dependencies: '@bufbuild/protobuf': 1.9.0 '@livekit/typed-emitter': 3.0.0 optionalDependencies: - '@livekit/rtc-node-darwin-arm64': 0.9.0 - '@livekit/rtc-node-darwin-x64': 0.9.0 - '@livekit/rtc-node-linux-arm64-gnu': 0.9.0 - '@livekit/rtc-node-linux-x64-gnu': 0.9.0 - '@livekit/rtc-node-win32-x64-msvc': 0.9.0 + '@livekit/rtc-node-darwin-arm64': 0.9.2 + '@livekit/rtc-node-darwin-x64': 0.9.2 + '@livekit/rtc-node-linux-arm64-gnu': 0.9.2 + '@livekit/rtc-node-linux-x64-gnu': 0.9.2 + '@livekit/rtc-node-win32-x64-msvc': 0.9.2 '@livekit/typed-emitter@3.0.0': {} @@ -3415,23 +3431,23 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@microsoft/api-extractor-model@7.28.17(@types/node@22.5.5)': + '@microsoft/api-extractor-model@7.29.8(@types/node@22.5.5)': dependencies: - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) + '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc-config': 0.17.0 + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.43.7(@types/node@22.5.5)': + '@microsoft/api-extractor@7.47.9(@types/node@22.5.5)': dependencies: - '@microsoft/api-extractor-model': 7.28.17(@types/node@22.5.5) - '@microsoft/tsdoc': 0.14.2 - '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.11.0(@types/node@22.5.5) - '@rushstack/ts-command-line': 4.21.0(@types/node@22.5.5) + '@microsoft/api-extractor-model': 7.29.8(@types/node@22.5.5) + '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc-config': 0.17.0 + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.2(@types/node@22.5.5) + '@rushstack/ts-command-line': 4.22.8(@types/node@22.5.5) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.8 @@ -3448,8 +3464,17 @@ snapshots: jju: 1.4.0 resolve: 1.19.0 + '@microsoft/tsdoc-config@0.17.0': + dependencies: + '@microsoft/tsdoc': 0.15.0 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.8 + '@microsoft/tsdoc@0.14.2': {} + '@microsoft/tsdoc@0.15.0': {} + '@next/eslint-plugin-next@14.2.3': dependencies: glob: 10.3.10 @@ -3521,23 +3546,23 @@ snapshots: '@rushstack/eslint-patch@1.10.3': {} - '@rushstack/heft-config-file@0.14.19(@types/node@22.5.5)': + '@rushstack/heft-config-file@0.15.7(@types/node@22.5.5)': dependencies: - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.11.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.2(@types/node@22.5.5) jsonpath-plus: 4.0.0 transitivePeerDependencies: - '@types/node' - '@rushstack/heft@0.66.9(@types/node@22.5.5)': + '@rushstack/heft@0.68.2(@types/node@22.5.5)': dependencies: - '@rushstack/heft-config-file': 0.14.19(@types/node@22.5.5) - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) - '@rushstack/operation-graph': 0.2.19(@types/node@22.5.5) - '@rushstack/rig-package': 0.5.2 - '@rushstack/terminal': 0.11.0(@types/node@22.5.5) - '@rushstack/ts-command-line': 4.21.0(@types/node@22.5.5) + '@rushstack/heft-config-file': 0.15.7(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/operation-graph': 0.2.33(@types/node@22.5.5) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.14.2(@types/node@22.5.5) + '@rushstack/ts-command-line': 4.22.8(@types/node@22.5.5) '@types/tapable': 1.0.6 fast-glob: 3.3.2 git-repo-info: 2.1.1 @@ -3548,39 +3573,41 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@rushstack/node-core-library@4.3.0(@types/node@22.5.5)': + '@rushstack/node-core-library@5.9.0(@types/node@22.5.5)': dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.8 semver: 7.5.4 - z-schema: 5.0.5 optionalDependencies: '@types/node': 22.5.5 - '@rushstack/operation-graph@0.2.19(@types/node@22.5.5)': + '@rushstack/operation-graph@0.2.33(@types/node@22.5.5)': dependencies: - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) - '@rushstack/terminal': 0.11.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) + '@rushstack/terminal': 0.14.2(@types/node@22.5.5) optionalDependencies: '@types/node': 22.5.5 - '@rushstack/rig-package@0.5.2': + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.11.0(@types/node@22.5.5)': + '@rushstack/terminal@0.14.2(@types/node@22.5.5)': dependencies: - '@rushstack/node-core-library': 4.3.0(@types/node@22.5.5) + '@rushstack/node-core-library': 5.9.0(@types/node@22.5.5) supports-color: 8.1.1 optionalDependencies: '@types/node': 22.5.5 - '@rushstack/ts-command-line@4.21.0(@types/node@22.5.5)': + '@rushstack/ts-command-line@4.22.8(@types/node@22.5.5)': dependencies: - '@rushstack/terminal': 0.11.0(@types/node@22.5.5) + '@rushstack/terminal': 0.14.2(@types/node@22.5.5) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -3756,6 +3783,14 @@ snapshots: acorn@8.11.3: {} + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -3763,6 +3798,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} @@ -4009,9 +4058,6 @@ snapshots: commander@12.0.0: {} - commander@9.5.0: - optional: true - concat-map@0.0.1: {} confbox@0.1.7: {} @@ -4306,10 +4352,10 @@ snapshots: eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-promise: 6.1.1(eslint@8.57.0) - eslint-config-turbo@1.13.3(eslint@8.57.0): + eslint-config-turbo@2.1.3(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-turbo: 1.13.3(eslint@8.57.0) + eslint-plugin-turbo: 2.1.3(eslint@8.57.0) eslint-import-resolver-node@0.3.9: dependencies: @@ -4464,7 +4510,7 @@ snapshots: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - eslint-plugin-turbo@1.13.3(eslint@8.57.0): + eslint-plugin-turbo@2.1.3(eslint@8.57.0): dependencies: dotenv: 16.0.3 eslint: 8.57.0 @@ -4967,6 +5013,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -5035,10 +5083,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.get@4.4.2: {} - - lodash.isequal@4.5.0: {} - lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} @@ -5460,6 +5504,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + require-main-filename@2.0.0: {} resolve-from@4.0.0: {} @@ -5802,32 +5848,32 @@ snapshots: wcwidth: 1.0.1 yargs: 17.7.2 - turbo-darwin-64@1.13.3: + turbo-darwin-64@2.1.3: optional: true - turbo-darwin-arm64@1.13.3: + turbo-darwin-arm64@2.1.3: optional: true - turbo-linux-64@1.13.3: + turbo-linux-64@2.1.3: optional: true - turbo-linux-arm64@1.13.3: + turbo-linux-arm64@2.1.3: optional: true - turbo-windows-64@1.13.3: + turbo-windows-64@2.1.3: optional: true - turbo-windows-arm64@1.13.3: + turbo-windows-arm64@2.1.3: optional: true - turbo@1.13.3: + turbo@2.1.3: optionalDependencies: - turbo-darwin-64: 1.13.3 - turbo-darwin-arm64: 1.13.3 - turbo-linux-64: 1.13.3 - turbo-linux-arm64: 1.13.3 - turbo-windows-64: 1.13.3 - turbo-windows-arm64: 1.13.3 + turbo-darwin-64: 2.1.3 + turbo-darwin-arm64: 2.1.3 + turbo-linux-64: 2.1.3 + turbo-linux-arm64: 2.1.3 + turbo-windows-64: 2.1.3 + turbo-windows-arm64: 2.1.3 type-check@0.4.0: dependencies: @@ -5911,8 +5957,6 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validator@13.12.0: {} - vite-node@1.6.0(@types/node@22.5.5): dependencies: cac: 6.7.14 @@ -6117,12 +6161,4 @@ snapshots: yocto-queue@1.0.0: {} - z-schema@5.0.5: - dependencies: - lodash.get: 4.4.2 - lodash.isequal: 4.5.0 - validator: 13.12.0 - optionalDependencies: - commander: 9.5.0 - zod@3.23.8: {} diff --git a/turbo.json b/turbo.json index 1ebe97ce..49bc194d 100644 --- a/turbo.json +++ b/turbo.json @@ -8,7 +8,7 @@ "LIVEKIT_API_SECRET", "LOG_LEVEL" ], - "pipeline": { + "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] @@ -25,10 +25,11 @@ "outputs": [] }, "api:check": { - "cache": false, "dependsOn": ["^build"] }, "api:update": { + "outputs": ["temp/*", "etc/*"], + "cache": false, "dependsOn": ["^build"] } }