@mastra/voice-xai-realtime 0.0.0
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/CHANGELOG.md +39 -0
- package/README.md +106 -0
- package/dist/docs/SKILL.md +26 -0
- package/dist/docs/assets/SOURCE_MAP.json +6 -0
- package/dist/docs/references/docs-voice-overview.md +1188 -0
- package/dist/docs/references/reference-voice-xai-realtime.md +267 -0
- package/dist/index.cjs +851 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +849 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +181 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +25 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/index.ts"],"names":["result"],"mappings":"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","file":"index.js","sourcesContent":["import { Readable } from 'node:stream';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { MastraToolInvocationOptions } from '@mastra/core/tools';\nimport { isZodType, standardSchemaToJSONSchema, toStandardSchema } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport type { XAIFunctionTool } from './types';\n\ntype ToolExecute = (args: unknown, options: MastraToolInvocationOptions) => unknown;\n\nexport type XAIExecuteFunction = (\n args: unknown,\n options: { toolCallId: string; requestContext?: unknown },\n) => Promise<unknown>;\nexport type XAITransformedTool = { xaiTool: XAIFunctionTool; execute: XAIExecuteFunction };\n\n/**\n * Minimal logger contract accepted by {@link transformTools}. Pass the\n * voice provider's `this.logger` from inside the class so warnings respect\n * the configured Mastra log level instead of writing to stdout/stderr\n * unconditionally.\n */\nexport type XAITransformToolsLogger = { warn(message: string): void };\n\nexport const isReadableStream = (obj: unknown): obj is NodeJS.ReadableStream => {\n return (\n !!obj &&\n obj instanceof Readable &&\n typeof obj.read === 'function' &&\n typeof obj.pipe === 'function' &&\n obj.readable === true\n );\n};\n\nexport const int16ArrayToBase64 = (int16Array: Int16Array): string => {\n const buffer = new ArrayBuffer(int16Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < int16Array.length; i++) {\n // xAI's documented PCM format is Linear16 little-endian.\n view.setInt16(i * 2, int16Array[i]!, true);\n }\n return Buffer.from(buffer).toString('base64');\n};\n\nexport const readableToBuffer = async (stream: NodeJS.ReadableStream): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n};\n\nexport const readableToBase64 = async (stream: NodeJS.ReadableStream): Promise<string> => {\n return (await readableToBuffer(stream)).toString('base64');\n};\n\nexport const transformTools = (tools?: ToolsInput, logger: XAITransformToolsLogger = console) => {\n const xaiTools: XAITransformedTool[] = [];\n\n for (const [name, tool] of Object.entries(tools || {})) {\n let parameters: Record<string, unknown>;\n\n try {\n if ('inputSchema' in tool && tool.inputSchema) {\n parameters = schemaToJsonSchema(tool.inputSchema);\n } else if ('parameters' in tool && tool.parameters) {\n parameters = schemaToJsonSchema(tool.parameters);\n } else {\n continue;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to transform xAI realtime tool \"${name}\" schema: ${message}`);\n }\n\n if (!tool.execute) {\n logger.warn(`Skipping xAI realtime tool \"${name}\" because it has no execute function.`);\n continue;\n }\n\n xaiTools.push({\n xaiTool: {\n type: 'function',\n name,\n description: tool.description || `Tool: ${name}`,\n parameters,\n },\n execute: async (args, options) => {\n if (!tool.execute) {\n throw new Error(`Tool ${name} has no execute function`);\n }\n\n const execute = tool.execute as ToolExecute;\n const callOptions = {\n toolCallId: options.toolCallId,\n messages: [],\n requestContext: options.requestContext,\n } as MastraToolInvocationOptions;\n\n return execute(args, callOptions);\n },\n });\n }\n\n return xaiTools;\n};\n\nfunction schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n let jsonSchema: Record<string, unknown>;\n\n if (isZodType(schema)) {\n jsonSchema = zodToJsonSchema(schema) as Record<string, unknown>;\n } else {\n jsonSchema = standardSchemaToJSONSchema(toStandardSchema(schema as any), { io: 'input' }) as Record<\n string,\n unknown\n >;\n }\n\n delete jsonSchema.$schema;\n return jsonSchema;\n}\n","import { PassThrough } from 'node:stream';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { MastraVoice } from '@mastra/core/voice';\nimport type { VoiceConfig, VoiceEventType } from '@mastra/core/voice';\nimport type { WebSocket as WSType } from 'ws';\nimport { WebSocket } from 'ws';\nimport type {\n XAIClientEvent,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerEvent,\n XAISessionConfig,\n XAISpeaker,\n XAITurnDetection,\n XAITool,\n XAIVoice,\n} from './types';\nimport type { XAIExecuteFunction, XAITransformedTool } from './utils';\nimport { int16ArrayToBase64, isReadableStream, readableToBase64, transformTools } from './utils';\n\nexport type {\n XAIAudioConfig,\n XAIAudioFormat,\n XAIAudioFormatType,\n XAIFunctionTool,\n XAIRealtimeAnswerOptions,\n XAIRealtimeEventMap,\n XAIRealtimeListenOptions,\n XAIRealtimeModel,\n XAIRealtimeSpeakOptions,\n XAIRealtimeVoiceConfig,\n XAIServerTool,\n XAISessionConfig,\n XAISpeaker,\n XAITool,\n XAITurnDetection,\n XAIVoice,\n} from './types';\n\ntype EventCallback = (...args: any[]) => void;\ntype StreamWithId = PassThrough & { id: string };\ntype ConnectionState = 'closed' | 'connecting' | 'open';\n\nconst DEFAULT_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL: XAIRealtimeModel = 'grok-voice-think-fast-1.0';\nconst DEFAULT_VOICE: XAIVoice = 'eve';\n\nconst DEFAULT_TURN_DETECTION: XAITurnDetection = {\n type: 'server_vad',\n};\nconst FUNCTION_CALL_ARGUMENT_TIMEOUT_MS = 30_000;\n\nconst DEFAULT_AUDIO = {\n input: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n output: { format: { type: 'audio/pcm' as const, rate: 24000 as const } },\n};\n\nconst XAI_SPEAKERS: XAISpeaker[] = [\n {\n voiceId: 'eve',\n name: 'Eve',\n gender: 'female',\n description: 'Energetic, upbeat default voice.',\n },\n {\n voiceId: 'ara',\n name: 'Ara',\n gender: 'female',\n description: 'Warm, friendly conversational voice.',\n },\n {\n voiceId: 'rex',\n name: 'Rex',\n gender: 'male',\n description: 'Confident, clear professional voice.',\n },\n {\n voiceId: 'sal',\n name: 'Sal',\n gender: 'neutral',\n description: 'Smooth, balanced general-purpose voice.',\n },\n {\n voiceId: 'leo',\n name: 'Leo',\n gender: 'male',\n description: 'Authoritative, strong instructional voice.',\n },\n];\n\ninterface PendingFunctionResponse {\n pending: Set<Promise<void>>;\n expectedCallIds: Set<string>;\n startedCallIds: Set<string>;\n completedCallIds: Set<string>;\n missingCallTimeout?: ReturnType<typeof setTimeout>;\n sessionGeneration: number;\n responseDone: boolean;\n continuationSent: boolean;\n hasFunctionCall: boolean;\n}\n\ninterface FunctionCallEvent {\n responseId: string;\n callId: string;\n name: string;\n arguments: string;\n sessionGeneration: number;\n}\n\ntype ParsedFunctionArguments = { ok: true; value: unknown } | { ok: false; rawArguments: string; error: SyntaxError };\n\n/**\n * Realtime Grok Voice Agent API provider for Mastra.\n *\n * This provider follows Mastra's realtime voice contract while keeping xAI's\n * endpoint, authentication, voices, event names, and tool behavior explicit.\n */\nexport class XAIRealtimeVoice extends MastraVoice<\n XAIRealtimeVoiceConfig,\n XAIRealtimeSpeakOptions,\n XAIRealtimeListenOptions,\n ToolsInput,\n XAIRealtimeEventMap,\n XAISpeaker\n> {\n private ws?: WSType;\n private state: ConnectionState = 'closed';\n private readonly events = new Map<string, EventCallback[]>();\n private readonly queue: XAIClientEvent[] = [];\n private readonly speakerStreams = new Map<string, StreamWithId>();\n private readonly functionResponses = new Map<string, PendingFunctionResponse>();\n private readonly audioStreamCleanups = new Set<() => void>();\n private requestContext?: RequestContext;\n private instructions?: string;\n private tools?: ToolsInput;\n private transformedTools?: XAITransformedTool[];\n private readonly options: XAIRealtimeVoiceConfig;\n private readonly debug: boolean;\n private closedByUser = false;\n private connectPromise?: Promise<void>;\n private sessionGeneration = 0;\n private fallbackResponseCounter = 0;\n\n constructor(config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig = {}) {\n const normalizedConfig = XAIRealtimeVoice.normalizeConfig(config);\n super(normalizedConfig);\n\n this.options = normalizedConfig.realtimeConfig?.options || {};\n this.instructions = this.options.instructions;\n this.speaker = normalizedConfig.speaker || this.options.speaker || DEFAULT_VOICE;\n this.debug = this.options.debug || false;\n }\n\n private static normalizeConfig(\n config: VoiceConfig<XAIRealtimeVoiceConfig> | XAIRealtimeVoiceConfig,\n ): VoiceConfig<XAIRealtimeVoiceConfig> {\n if ('realtimeConfig' in config || 'speechModel' in config || 'listeningModel' in config) {\n const voiceConfig = config as VoiceConfig<XAIRealtimeVoiceConfig>;\n const options = voiceConfig.realtimeConfig?.options || {};\n return {\n ...voiceConfig,\n speaker: voiceConfig.speaker || options.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: voiceConfig.realtimeConfig?.model || options.model || DEFAULT_MODEL,\n apiKey: voiceConfig.realtimeConfig?.apiKey || options.apiKey,\n options,\n },\n };\n }\n\n const xaiConfig = config as XAIRealtimeVoiceConfig;\n return {\n speaker: xaiConfig.speaker || DEFAULT_VOICE,\n realtimeConfig: {\n model: xaiConfig.model || DEFAULT_MODEL,\n apiKey: xaiConfig.apiKey,\n options: xaiConfig,\n },\n };\n }\n\n getSpeakers(): Promise<XAISpeaker[]> {\n return Promise.resolve(XAI_SPEAKERS);\n }\n\n async getListener(): Promise<{ enabled: boolean }> {\n return { enabled: true };\n }\n\n addInstructions(instructions?: string): void {\n this.instructions = instructions ?? '';\n if (this.state === 'open') {\n this.updateConfig({ instructions: this.instructions });\n }\n }\n\n addTools(tools?: ToolsInput): void {\n this.tools = tools || {};\n this.transformedTools = undefined;\n if (this.state === 'open') {\n this.updateConfig({ tools: this.buildSessionTools() });\n }\n }\n\n updateConfig(sessionConfig: Partial<XAISessionConfig>): void {\n this.sendEvent({\n type: 'session.update',\n session: this.stripUndefined(sessionConfig) as XAISessionConfig,\n });\n }\n\n async connect({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n if (this.state === 'open') {\n return;\n }\n\n if (this.state === 'connecting' && this.connectPromise) {\n return this.connectPromise;\n }\n\n this.connectPromise = this.openConnection({ requestContext });\n\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async openConnection({ requestContext }: { requestContext?: RequestContext } = {}): Promise<void> {\n const apiKey = this.options.apiKey || this.realtimeConfig?.apiKey || process.env.XAI_API_KEY;\n const ephemeralToken = this.options.ephemeralToken;\n\n if (!apiKey && !ephemeralToken) {\n throw new Error('xAI API key is required. Set XAI_API_KEY, pass apiKey, or pass ephemeralToken.');\n }\n\n this.requestContext = requestContext;\n this.closedByUser = false;\n this.state = 'connecting';\n this.sessionGeneration += 1;\n\n const url = this.buildUrl();\n const protocols = ephemeralToken ? [`xai-client-secret.${ephemeralToken}`] : undefined;\n const wsOptions =\n !ephemeralToken && apiKey\n ? {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n }\n : undefined;\n\n const ws = new WebSocket(url, protocols, wsOptions);\n this.ws = ws;\n this.setupEventListeners(ws);\n\n try {\n await this.waitForOpen(ws);\n this.state = 'open';\n this.updateConfig(this.buildInitialSessionConfig());\n this.flushQueue();\n } catch (err) {\n this.cleanupSessionState();\n this.state = 'closed';\n this.ws = undefined;\n ws.close();\n throw err;\n }\n }\n\n close(): void {\n const ws = this.ws;\n this.state = 'closed';\n this.closedByUser = true;\n this.connectPromise = undefined;\n this.ws = undefined;\n this.cleanupSessionState();\n ws?.close();\n if (ws) {\n this.emit('close', { code: 1000, reason: 'closed' });\n }\n }\n\n disconnect(): void {\n this.close();\n }\n\n async speak(input: string | NodeJS.ReadableStream, options: XAIRealtimeSpeakOptions = {}): Promise<void> {\n const text = typeof input === 'string' ? input : (await this.readInputStream(input)).toString('utf-8');\n\n if (text.trim().length === 0) {\n throw new Error('Input text is empty');\n }\n\n if (options.speaker && options.speaker !== this.speaker) {\n this.speaker = options.speaker;\n this.updateConfig({ voice: options.speaker });\n }\n\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n\n await this.answer({ response: options.response });\n }\n\n async listen(audioData: NodeJS.ReadableStream | unknown, options: XAIRealtimeListenOptions = {}): Promise<void> {\n if (!isReadableStream(audioData)) {\n this.emit('error', { message: 'Unsupported audio data format' });\n return;\n }\n\n this.appendAudio(await readableToBase64(audioData));\n\n if (options.commit ?? true) {\n await this.commitAudioBuffer();\n }\n\n if (options.createResponse ?? true) {\n await this.answer({ response: options.response });\n }\n }\n\n async send(audioData: NodeJS.ReadableStream | Int16Array, eventId?: string): Promise<void> {\n if (this.state !== 'open' || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.emit('error', { message: 'Cannot send audio before connect() is open' });\n return;\n }\n\n if (isReadableStream(audioData)) {\n const cleanup = () => {\n audioData.removeListener('data', onData);\n audioData.removeListener('error', onError);\n audioData.removeListener('end', onEnd);\n audioData.removeListener('close', onEnd);\n this.audioStreamCleanups.delete(cleanup);\n };\n const onData = (chunk: unknown) => {\n try {\n const buffer = this.normalizeAudioChunk(chunk);\n this.appendAudio(buffer.toString('base64'), eventId);\n } catch (err) {\n this.emitError(err);\n cleanup();\n }\n };\n const onError = (err: Error) => {\n this.emitError(err);\n cleanup();\n };\n const onEnd = () => cleanup();\n\n this.audioStreamCleanups.add(cleanup);\n audioData.on('data', onData);\n audioData.on('error', onError);\n audioData.on('end', onEnd);\n audioData.on('close', onEnd);\n return;\n }\n\n if (audioData instanceof Int16Array) {\n this.appendAudio(int16ArrayToBase64(audioData), eventId);\n return;\n }\n\n this.emit('error', { message: 'Unsupported audio data format' });\n }\n\n async commitAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.commit', event_id: eventId });\n }\n\n async clearAudioBuffer(eventId?: string): Promise<void> {\n this.sendEvent({ type: 'input_audio_buffer.clear', event_id: eventId });\n }\n\n async cancelResponse(responseId?: string, eventId?: string): Promise<void> {\n this.sendEvent({ type: 'response.cancel', response_id: responseId, event_id: eventId });\n }\n\n async answer(options: XAIRealtimeAnswerOptions = {}): Promise<void> {\n this.sendEvent({\n type: 'response.create',\n ...(options.response ? { response: options.response } : {}),\n });\n }\n\n on<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event) || [];\n callbacks.push(callback as EventCallback);\n this.events.set(event, callbacks);\n }\n\n off<E extends VoiceEventType>(\n event: E,\n callback: (data: E extends keyof XAIRealtimeEventMap ? XAIRealtimeEventMap[E] : unknown) => void,\n ): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n const index = callbacks.indexOf(callback as EventCallback);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n private buildUrl(): string {\n const baseUrl = this.options.url || DEFAULT_URL;\n const url = new URL(baseUrl);\n url.searchParams.set('model', this.realtimeConfig?.model || this.options.model || DEFAULT_MODEL);\n return url.toString();\n }\n\n private buildInitialSessionConfig(): XAISessionConfig {\n const session = this.options.session || {};\n return this.stripUndefined({\n ...session,\n instructions: this.instructions,\n voice: this.speaker as XAIVoice,\n turn_detection: session.turn_detection ?? this.options.turnDetection ?? DEFAULT_TURN_DETECTION,\n audio: session.audio ?? this.options.audio ?? DEFAULT_AUDIO,\n tools: this.buildSessionTools(),\n }) as XAISessionConfig;\n }\n\n private buildSessionTools(): XAITool[] {\n const serverTools = [...(this.options.session?.tools || []), ...(this.options.serverTools || [])];\n const functionTools = this.getTransformedTools().map(tool => tool.xaiTool);\n return [...serverTools, ...functionTools];\n }\n\n private getTransformedTools(): XAITransformedTool[] {\n this.transformedTools ??= transformTools(this.tools, this.logger);\n return this.transformedTools;\n }\n\n private setupEventListeners(ws: WSType): void {\n ws.on('message', message => {\n if (this.ws !== ws) {\n return;\n }\n\n try {\n const event = JSON.parse(message.toString()) as XAIServerEvent;\n this.handleServerEvent(event);\n } catch (err) {\n this.emitError(err);\n }\n });\n\n ws.on('error', err => {\n if (this.ws !== ws) {\n return;\n }\n\n if (this.state === 'open') {\n this.emitError(err);\n }\n });\n\n ws.on('close', (code, reason) => {\n if (this.ws !== ws) {\n return;\n }\n\n this.state = 'closed';\n this.ws = undefined;\n this.connectPromise = undefined;\n this.cleanupSessionState();\n this.emit('close', { code, reason: reason?.toString?.() });\n });\n }\n\n private handleServerEvent(event: XAIServerEvent): void {\n if (this.debug) {\n const { delta, ...fields } = event;\n this.logger.debug(`[xAI realtime] ${event.type}`, { ...fields, deltaLength: delta?.length });\n }\n\n if (event.type !== 'error') {\n this.emit(event.type, event);\n }\n\n switch (event.type) {\n case 'session.created':\n case 'session.updated':\n case 'response.created':\n if (event.type === 'response.created') {\n this.createSpeakerStream(this.getResponseId(event));\n }\n return;\n case 'response.output_audio.delta':\n case 'response.audio.delta':\n this.handleAudioDelta(event);\n return;\n case 'response.output_audio.done':\n case 'response.audio.done':\n this.handleAudioDone(event);\n return;\n case 'response.text.delta':\n case 'response.output_text.delta':\n case 'response.audio_transcript.delta':\n case 'response.output_audio_transcript.delta':\n this.emit('writing', { text: event.delta || '', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'response.text.done':\n case 'response.output_text.done':\n case 'response.audio_transcript.done':\n case 'response.output_audio_transcript.done':\n this.emit('writing', { text: '\\n', response_id: this.getResponseId(event), role: 'assistant' });\n return;\n case 'conversation.item.input_audio_transcription.completed':\n case 'conversation.item.input_audio_transcription.done':\n this.emit('writing', {\n text: event.transcript || event.text || event.delta || '',\n response_id: this.getResponseId(event),\n role: 'user',\n });\n return;\n case 'response.function_call_arguments.done':\n this.handleFunctionCallEvent(event);\n return;\n case 'response.done':\n void this.handleResponseDone(event);\n return;\n case 'error':\n this.emit('error', {\n message: event.error?.message || 'xAI realtime error',\n code: event.error?.code || event.error?.type,\n details: event,\n });\n return;\n default:\n return;\n }\n }\n\n private handleAudioDelta(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n const audio = event.delta || '';\n const audioData = Buffer.from(audio, 'base64');\n const stream = this.createSpeakerStream(responseId);\n stream.write(audioData);\n this.emit('speaking', { audio, audioData, response_id: responseId });\n }\n\n private handleAudioDone(event: XAIServerEvent): void {\n const responseId = this.getResponseId(event);\n this.emit('speaking.done', { response_id: responseId });\n this.endSpeakerStream(responseId);\n }\n\n private handleFunctionCallEvent(event: XAIServerEvent): void {\n const call = this.normalizeFunctionCallEvent(event);\n if (!call) {\n this.emit('error', {\n message: 'Invalid xAI function call event',\n details: event,\n });\n return;\n }\n\n const state = this.getFunctionResponseState(call.responseId);\n state.hasFunctionCall = true;\n state.expectedCallIds.add(call.callId);\n\n if (state.startedCallIds.has(call.callId)) {\n return;\n }\n\n state.startedCallIds.add(call.callId);\n const pending = this.executeFunctionCall(call).finally(() => {\n state.completedCallIds.add(call.callId);\n state.pending.delete(pending);\n void this.maybeContinueAfterFunctionCalls(call.responseId);\n });\n\n state.pending.add(pending);\n }\n\n private async handleResponseDone(event: XAIServerEvent): Promise<void> {\n const responseId = this.getResponseId(event);\n this.endSpeakerStream(responseId);\n\n const expectedCallIds = this.getFunctionCallIds(event);\n const state =\n this.functionResponses.get(responseId) ||\n (expectedCallIds.length > 0 ? this.getFunctionResponseState(responseId) : undefined);\n\n if (!state) {\n return;\n }\n\n for (const callId of expectedCallIds) {\n state.expectedCallIds.add(callId);\n }\n\n state.hasFunctionCall ||= expectedCallIds.length > 0;\n state.responseDone = true;\n await this.maybeContinueAfterFunctionCalls(responseId);\n }\n\n private getFunctionCallIds(event: XAIServerEvent): string[] {\n return (\n event.response?.output\n ?.filter(output => output.type === 'function_call' && typeof output.call_id === 'string')\n .map(output => output.call_id as string) || []\n );\n }\n\n private async executeFunctionCall(call: FunctionCallEvent): Promise<void> {\n const tool = this.tools?.[call.name];\n const parsedArgs = this.parseFunctionArguments(call.arguments);\n if (!parsedArgs.ok) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = `Failed to parse xAI function call arguments: ${parsedArgs.error.message}`;\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: {\n call_id: call.callId,\n name: call.name,\n arguments: parsedArgs.rawArguments,\n error: parsedArgs.error,\n },\n });\n return;\n }\n\n const args = parsedArgs.value;\n\n try {\n if (!tool?.execute) {\n throw new Error(`Tool \"${call.name}\" not found`);\n }\n\n this.emit('tool-call-start', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n });\n\n const result = await this.executeTool(call.name, call.callId, args);\n\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n this.emit('tool-call-result', {\n toolCallId: call.callId,\n toolName: call.name,\n toolDescription: tool.description,\n args,\n result,\n });\n\n this.sendFunctionOutput(call.callId, result);\n } catch (err) {\n if (!this.isCurrentSession(call.sessionGeneration)) {\n return;\n }\n\n const message = err instanceof Error ? err.message : String(err);\n this.sendFunctionOutput(call.callId, { error: message });\n this.emit('error', {\n message,\n details: { call_id: call.callId, name: call.name },\n });\n }\n }\n\n private async executeTool(name: string, callId: string, args: unknown): Promise<unknown> {\n const transformedTool = this.getTransformedTools().find(tool => tool.xaiTool.name === name);\n\n if (!transformedTool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n return (transformedTool.execute as XAIExecuteFunction)(args, {\n toolCallId: callId,\n requestContext: this.requestContext,\n });\n }\n\n private sendFunctionOutput(callId: string, output: unknown): void {\n this.sendEvent({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output ?? null),\n },\n });\n }\n\n private isCurrentSession(sessionGeneration: number): boolean {\n return this.state === 'open' && this.sessionGeneration === sessionGeneration;\n }\n\n private async maybeContinueAfterFunctionCalls(responseId: string): Promise<void> {\n const state = this.functionResponses.get(responseId);\n const hasPendingExpectedCall =\n state?.expectedCallIds && [...state.expectedCallIds].some(callId => !state.completedCallIds.has(callId));\n\n if (state && hasPendingExpectedCall) {\n this.scheduleMissingFunctionCallTimeout(responseId, state);\n }\n\n if (\n !state ||\n !state.hasFunctionCall ||\n state.continuationSent ||\n !state.responseDone ||\n state.pending.size > 0 ||\n hasPendingExpectedCall\n ) {\n return;\n }\n\n state.continuationSent = true;\n this.clearMissingFunctionCallTimeout(state);\n this.sendEvent({ type: 'response.create' });\n this.functionResponses.delete(responseId);\n }\n\n private scheduleMissingFunctionCallTimeout(responseId: string, state: PendingFunctionResponse): void {\n if (state.missingCallTimeout || !state.responseDone) {\n return;\n }\n\n state.missingCallTimeout = setTimeout(() => {\n if (!this.isCurrentSession(state.sessionGeneration) || this.functionResponses.get(responseId) !== state) {\n return;\n }\n\n state.missingCallTimeout = undefined;\n const missingCallIds = [...state.expectedCallIds].filter(callId => !state.startedCallIds.has(callId));\n if (missingCallIds.length === 0) {\n void this.maybeContinueAfterFunctionCalls(responseId);\n return;\n }\n\n const message = `Timed out waiting for xAI function call arguments for ${missingCallIds.join(', ')}`;\n for (const callId of missingCallIds) {\n state.completedCallIds.add(callId);\n this.sendFunctionOutput(callId, { error: message });\n }\n this.emit('error', { message, details: { response_id: responseId, call_ids: missingCallIds } });\n void this.maybeContinueAfterFunctionCalls(responseId);\n }, FUNCTION_CALL_ARGUMENT_TIMEOUT_MS);\n }\n\n private clearMissingFunctionCallTimeout(state: PendingFunctionResponse): void {\n if (state.missingCallTimeout) {\n clearTimeout(state.missingCallTimeout);\n state.missingCallTimeout = undefined;\n }\n }\n\n private getFunctionResponseState(responseId: string): PendingFunctionResponse {\n let state = this.functionResponses.get(responseId);\n if (!state) {\n state = {\n pending: new Set(),\n expectedCallIds: new Set(),\n startedCallIds: new Set(),\n completedCallIds: new Set(),\n sessionGeneration: this.sessionGeneration,\n responseDone: false,\n continuationSent: false,\n hasFunctionCall: false,\n };\n this.functionResponses.set(responseId, state);\n }\n return state;\n }\n\n private normalizeFunctionCallEvent(event: XAIServerEvent): FunctionCallEvent | undefined {\n if (!event.call_id || !event.name || typeof event.arguments !== 'string') {\n return undefined;\n }\n\n return {\n responseId: this.getResponseId(event),\n callId: event.call_id,\n name: event.name,\n arguments: event.arguments,\n sessionGeneration: this.sessionGeneration,\n };\n }\n\n private parseFunctionArguments(args: string): ParsedFunctionArguments {\n try {\n return { ok: true, value: JSON.parse(args || '{}') };\n } catch (err) {\n return { ok: false, rawArguments: args, error: err as SyntaxError };\n }\n }\n\n private appendAudio(audio: string, eventId?: string): void {\n this.sendEvent({ type: 'input_audio_buffer.append', audio, event_id: eventId });\n }\n\n private normalizeAudioChunk(chunk: unknown): Buffer {\n if (Buffer.isBuffer(chunk)) {\n return chunk;\n }\n\n if (chunk instanceof ArrayBuffer) {\n return Buffer.from(chunk);\n }\n\n if (ArrayBuffer.isView(chunk)) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n throw new TypeError('Audio stream chunks must be Buffer, ArrayBuffer, or TypedArray values');\n }\n\n private sendEvent(event: XAIClientEvent): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN || this.state !== 'open') {\n if (this.closedByUser) {\n this.emit('error', { message: 'Cannot send event after close()' });\n return;\n }\n this.queue.push(event);\n return;\n }\n\n try {\n this.ws.send(JSON.stringify(this.stripUndefined(event)));\n } catch (err) {\n this.emitError(err);\n }\n }\n\n private flushQueue(): void {\n const queuedEvents = this.queue.splice(0, this.queue.length);\n for (const event of queuedEvents) {\n this.sendEvent(event);\n }\n }\n\n private waitForOpen(ws: WSType): Promise<void> {\n return new Promise((resolve, reject) => {\n if (ws.readyState === WebSocket.OPEN) {\n resolve();\n return;\n }\n\n const onOpen = () => {\n cleanup();\n resolve();\n };\n\n const onError = (err: Error) => {\n cleanup();\n reject(err);\n };\n\n const onClose = () => {\n cleanup();\n reject(new Error('WebSocket closed before opening'));\n };\n\n const cleanup = () => {\n ws.off?.('open', onOpen);\n ws.off?.('error', onError);\n ws.off?.('close', onClose);\n };\n\n ws.on('open', onOpen);\n ws.on('error', onError);\n ws.on('close', onClose);\n });\n }\n\n private getResponseId(event: XAIServerEvent): string {\n return (\n event.response_id ||\n event.response?.id ||\n event.item_id ||\n `fallback:${this.sessionGeneration}:${++this.fallbackResponseCounter}`\n );\n }\n\n private createSpeakerStream(responseId: string): StreamWithId {\n const existing = this.speakerStreams.get(responseId);\n if (existing) {\n return existing;\n }\n\n const stream = new PassThrough() as StreamWithId;\n stream.id = responseId;\n this.speakerStreams.set(responseId, stream);\n this.emit('speaker', stream);\n return stream;\n }\n\n private closeSpeakerStreams(): void {\n for (const stream of this.speakerStreams.values()) {\n stream.end();\n }\n this.speakerStreams.clear();\n }\n\n private endSpeakerStream(responseId: string): void {\n this.speakerStreams.get(responseId)?.end();\n this.speakerStreams.delete(responseId);\n }\n\n private cleanupSessionState(): void {\n this.sessionGeneration += 1;\n this.queue.length = 0;\n for (const cleanup of [...this.audioStreamCleanups]) {\n cleanup();\n }\n this.audioStreamCleanups.clear();\n for (const state of this.functionResponses.values()) {\n this.clearMissingFunctionCallTimeout(state);\n }\n this.functionResponses.clear();\n this.requestContext = undefined;\n this.closeSpeakerStreams();\n }\n\n private emit(event: string, ...args: any[]): void {\n const callbacks = this.events.get(event);\n if (!callbacks) {\n return;\n }\n\n for (const callback of callbacks) {\n callback(...args);\n }\n }\n\n private emitError(err: unknown): void {\n this.emit('error', {\n message: err instanceof Error ? err.message : String(err),\n details: err,\n });\n }\n\n private stripUndefined<T>(value: T, seen = new WeakSet<object>(), depth = 0, maxDepth = 100): T {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n if (depth >= maxDepth) {\n throw new Error('Cannot serialize xAI realtime event: maximum object depth exceeded');\n }\n\n const objectValue = value as object;\n if (Buffer.isBuffer(value) || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) {\n return value;\n }\n\n if (seen.has(objectValue)) {\n return undefined as T;\n }\n\n seen.add(objectValue);\n\n if (Array.isArray(value)) {\n const result = value\n .map(item => this.stripUndefined(item, seen, depth + 1, maxDepth))\n .filter(item => item !== undefined) as T;\n seen.delete(objectValue);\n return result;\n }\n\n const result = Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, this.stripUndefined(entry, seen, depth + 1, maxDepth)])\n .filter(([, entry]) => entry !== undefined),\n ) as T;\n\n seen.delete(objectValue);\n return result;\n }\n\n private async readInputStream(input: NodeJS.ReadableStream): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of input) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));\n }\n return Buffer.concat(chunks);\n }\n}\n"]}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { VoiceEventMap } from '@mastra/core/voice';
|
|
2
|
+
export type XAIRealtimeModel = 'grok-voice-think-fast-1.0' | 'grok-voice-fast-1.0' | (string & {});
|
|
3
|
+
export type XAIVoice = 'eve' | 'ara' | 'rex' | 'sal' | 'leo' | (string & {});
|
|
4
|
+
export type XAIAudioFormatType = 'audio/pcm' | 'audio/pcmu' | 'audio/pcma';
|
|
5
|
+
export type XAIPCMSampleRate = 8000 | 16000 | 22050 | 24000 | 32000 | 44100 | 48000;
|
|
6
|
+
export type XAIAudioFormat = {
|
|
7
|
+
type: 'audio/pcm';
|
|
8
|
+
rate?: XAIPCMSampleRate;
|
|
9
|
+
} | {
|
|
10
|
+
type: 'audio/pcmu' | 'audio/pcma';
|
|
11
|
+
rate?: 8000;
|
|
12
|
+
};
|
|
13
|
+
export interface XAIAudioConfig {
|
|
14
|
+
input?: {
|
|
15
|
+
format?: XAIAudioFormat;
|
|
16
|
+
};
|
|
17
|
+
output?: {
|
|
18
|
+
format?: XAIAudioFormat;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface XAITurnDetection {
|
|
22
|
+
type: 'server_vad' | null;
|
|
23
|
+
threshold?: number;
|
|
24
|
+
silence_duration_ms?: number;
|
|
25
|
+
prefix_padding_ms?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface XAIFunctionTool {
|
|
28
|
+
type: 'function';
|
|
29
|
+
name: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
parameters: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
export interface XAIFileSearchTool {
|
|
34
|
+
type: 'file_search';
|
|
35
|
+
vector_store_ids: string[];
|
|
36
|
+
max_num_results?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface XAIWebSearchTool {
|
|
39
|
+
type: 'web_search';
|
|
40
|
+
}
|
|
41
|
+
export interface XAIXSearchTool {
|
|
42
|
+
type: 'x_search';
|
|
43
|
+
allowed_x_handles?: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface XAIMCPTool {
|
|
46
|
+
type: 'mcp';
|
|
47
|
+
server_url: string;
|
|
48
|
+
server_label: string;
|
|
49
|
+
server_description?: string;
|
|
50
|
+
allowed_tools?: string[];
|
|
51
|
+
authorization?: string;
|
|
52
|
+
headers?: Record<string, string>;
|
|
53
|
+
}
|
|
54
|
+
export type XAIServerTool = XAIFileSearchTool | XAIWebSearchTool | XAIXSearchTool | XAIMCPTool;
|
|
55
|
+
export type XAITool = XAIFunctionTool | XAIServerTool;
|
|
56
|
+
export interface XAISessionConfig {
|
|
57
|
+
instructions?: string;
|
|
58
|
+
voice?: XAIVoice;
|
|
59
|
+
turn_detection?: XAITurnDetection;
|
|
60
|
+
audio?: XAIAudioConfig;
|
|
61
|
+
tools?: XAITool[];
|
|
62
|
+
[key: string]: unknown;
|
|
63
|
+
}
|
|
64
|
+
export interface XAIRealtimeVoiceConfig {
|
|
65
|
+
apiKey?: string;
|
|
66
|
+
ephemeralToken?: string;
|
|
67
|
+
model?: XAIRealtimeModel;
|
|
68
|
+
url?: string;
|
|
69
|
+
speaker?: XAIVoice;
|
|
70
|
+
instructions?: string;
|
|
71
|
+
turnDetection?: XAITurnDetection;
|
|
72
|
+
audio?: XAIAudioConfig;
|
|
73
|
+
serverTools?: XAIServerTool[];
|
|
74
|
+
session?: Omit<XAISessionConfig, 'instructions' | 'voice' | 'tools'> & {
|
|
75
|
+
tools?: XAIServerTool[];
|
|
76
|
+
};
|
|
77
|
+
debug?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface XAIRealtimeSpeakOptions {
|
|
80
|
+
speaker?: XAIVoice;
|
|
81
|
+
response?: Record<string, unknown>;
|
|
82
|
+
}
|
|
83
|
+
export interface XAIRealtimeListenOptions {
|
|
84
|
+
commit?: boolean;
|
|
85
|
+
createResponse?: boolean;
|
|
86
|
+
response?: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
export interface XAIRealtimeAnswerOptions {
|
|
89
|
+
response?: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
export interface XAIRealtimeEventMap extends VoiceEventMap {
|
|
92
|
+
speaker: NodeJS.ReadableStream;
|
|
93
|
+
speaking: {
|
|
94
|
+
audio?: string;
|
|
95
|
+
audioData?: Buffer;
|
|
96
|
+
response_id?: string;
|
|
97
|
+
};
|
|
98
|
+
writing: {
|
|
99
|
+
text: string;
|
|
100
|
+
role: 'assistant' | 'user';
|
|
101
|
+
response_id?: string;
|
|
102
|
+
};
|
|
103
|
+
error: {
|
|
104
|
+
message: string;
|
|
105
|
+
code?: string;
|
|
106
|
+
details?: unknown;
|
|
107
|
+
};
|
|
108
|
+
'speaking.done': {
|
|
109
|
+
response_id?: string;
|
|
110
|
+
};
|
|
111
|
+
'tool-call-start': {
|
|
112
|
+
toolCallId: string;
|
|
113
|
+
toolName: string;
|
|
114
|
+
toolDescription?: string;
|
|
115
|
+
args: unknown;
|
|
116
|
+
};
|
|
117
|
+
'tool-call-result': {
|
|
118
|
+
toolCallId: string;
|
|
119
|
+
toolName: string;
|
|
120
|
+
toolDescription?: string;
|
|
121
|
+
args: unknown;
|
|
122
|
+
result: unknown;
|
|
123
|
+
};
|
|
124
|
+
[key: string]: unknown;
|
|
125
|
+
}
|
|
126
|
+
export interface XAISpeaker {
|
|
127
|
+
voiceId: string;
|
|
128
|
+
name: string;
|
|
129
|
+
gender?: 'female' | 'male' | 'neutral';
|
|
130
|
+
description: string;
|
|
131
|
+
}
|
|
132
|
+
export type XAIClientEvent = {
|
|
133
|
+
type: 'session.update';
|
|
134
|
+
session: XAISessionConfig;
|
|
135
|
+
} | {
|
|
136
|
+
type: 'conversation.item.create';
|
|
137
|
+
item: Record<string, unknown>;
|
|
138
|
+
} | {
|
|
139
|
+
type: 'input_audio_buffer.append';
|
|
140
|
+
audio: string;
|
|
141
|
+
event_id?: string;
|
|
142
|
+
} | {
|
|
143
|
+
type: 'input_audio_buffer.commit';
|
|
144
|
+
event_id?: string;
|
|
145
|
+
} | {
|
|
146
|
+
type: 'input_audio_buffer.clear';
|
|
147
|
+
event_id?: string;
|
|
148
|
+
} | {
|
|
149
|
+
type: 'response.create';
|
|
150
|
+
response?: Record<string, unknown>;
|
|
151
|
+
} | {
|
|
152
|
+
type: 'response.cancel';
|
|
153
|
+
response_id?: string;
|
|
154
|
+
event_id?: string;
|
|
155
|
+
} | ({
|
|
156
|
+
type: string;
|
|
157
|
+
} & Record<string, unknown>);
|
|
158
|
+
export interface XAIServerEvent {
|
|
159
|
+
type: string;
|
|
160
|
+
response_id?: string;
|
|
161
|
+
item_id?: string;
|
|
162
|
+
call_id?: string;
|
|
163
|
+
name?: string;
|
|
164
|
+
arguments?: string;
|
|
165
|
+
delta?: string;
|
|
166
|
+
transcript?: string;
|
|
167
|
+
text?: string;
|
|
168
|
+
error?: {
|
|
169
|
+
message?: string;
|
|
170
|
+
code?: string;
|
|
171
|
+
type?: string;
|
|
172
|
+
[key: string]: unknown;
|
|
173
|
+
};
|
|
174
|
+
response?: {
|
|
175
|
+
id?: string;
|
|
176
|
+
output?: Array<Record<string, unknown>>;
|
|
177
|
+
[key: string]: unknown;
|
|
178
|
+
};
|
|
179
|
+
[key: string]: unknown;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ToolsInput } from '@mastra/core/agent';
|
|
2
|
+
import type { XAIFunctionTool } from './types.js';
|
|
3
|
+
export type XAIExecuteFunction = (args: unknown, options: {
|
|
4
|
+
toolCallId: string;
|
|
5
|
+
requestContext?: unknown;
|
|
6
|
+
}) => Promise<unknown>;
|
|
7
|
+
export type XAITransformedTool = {
|
|
8
|
+
xaiTool: XAIFunctionTool;
|
|
9
|
+
execute: XAIExecuteFunction;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Minimal logger contract accepted by {@link transformTools}. Pass the
|
|
13
|
+
* voice provider's `this.logger` from inside the class so warnings respect
|
|
14
|
+
* the configured Mastra log level instead of writing to stdout/stderr
|
|
15
|
+
* unconditionally.
|
|
16
|
+
*/
|
|
17
|
+
export type XAITransformToolsLogger = {
|
|
18
|
+
warn(message: string): void;
|
|
19
|
+
};
|
|
20
|
+
export declare const isReadableStream: (obj: unknown) => obj is NodeJS.ReadableStream;
|
|
21
|
+
export declare const int16ArrayToBase64: (int16Array: Int16Array) => string;
|
|
22
|
+
export declare const readableToBuffer: (stream: NodeJS.ReadableStream) => Promise<Buffer>;
|
|
23
|
+
export declare const readableToBase64: (stream: NodeJS.ReadableStream) => Promise<string>;
|
|
24
|
+
export declare const transformTools: (tools?: ToolsInput, logger?: XAITransformToolsLogger) => XAITransformedTool[];
|
|
25
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE3F;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG;IAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,gBAAgB,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,cAQ7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,YAAY,UAAU,KAAG,MAQ3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,CAAC,cAAc,KAAG,OAAO,CAAC,MAAM,CAMpF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,CAAC,cAAc,KAAG,OAAO,CAAC,MAAM,CAEpF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,UAAU,EAAE,SAAQ,uBAAiC,yBAiD3F,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mastra/voice-xai-realtime",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Mastra xAI Grok Voice Agent API integration",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"CHANGELOG.md"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"require": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"default": "./dist/index.cjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup --silent --config tsup.config.ts",
|
|
27
|
+
"prepack": "pnpx tsx ../../scripts/generate-package-docs.ts",
|
|
28
|
+
"build:watch": "tsup --watch --silent --config tsup.config.ts",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"lint": "eslint ."
|
|
31
|
+
},
|
|
32
|
+
"license": "Apache-2.0",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@mastra/schema-compat": "workspace:*",
|
|
35
|
+
"ws": "^8.20.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@internal/lint": "workspace:*",
|
|
39
|
+
"@internal/types-builder": "workspace:*",
|
|
40
|
+
"@mastra/core": "workspace:*",
|
|
41
|
+
"@types/node": "22.19.15",
|
|
42
|
+
"@types/ws": "^8.18.1",
|
|
43
|
+
"@vitest/coverage-v8": "catalog:",
|
|
44
|
+
"@vitest/ui": "catalog:",
|
|
45
|
+
"eslint": "^10.2.1",
|
|
46
|
+
"tsup": "^8.5.1",
|
|
47
|
+
"typescript": "catalog:",
|
|
48
|
+
"vitest": "catalog:",
|
|
49
|
+
"zod": "catalog:"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@mastra/core": ">=1.0.0-0 <2.0.0-0",
|
|
53
|
+
"zod": "^3.25.0 || ^4.0.0"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://mastra.ai",
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "git+https://github.com/mastra-ai/mastra.git",
|
|
59
|
+
"directory": "voice/xai-realtime-api"
|
|
60
|
+
},
|
|
61
|
+
"bugs": {
|
|
62
|
+
"url": "https://github.com/mastra-ai/mastra/issues"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=22.13.0"
|
|
66
|
+
}
|
|
67
|
+
}
|