@auxiora/conversation 1.0.0 → 1.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auxiora/conversation",
3
- "version": "1.0.0",
3
+ "version": "1.3.0",
4
4
  "description": "Real-time voice conversation engine with state machine, turn-taking, and voice personality",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,13 +12,19 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@auxiora/personality": "1.0.0",
16
- "@auxiora/stt": "1.0.0",
17
- "@auxiora/tts": "1.0.0"
15
+ "@auxiora/stt": "1.3.0",
16
+ "@auxiora/personality": "1.3.0",
17
+ "@auxiora/tts": "1.3.0"
18
18
  },
19
19
  "engines": {
20
20
  "node": ">=22.0.0"
21
21
  },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
25
+ "files": [
26
+ "dist/"
27
+ ],
22
28
  "scripts": {
23
29
  "build": "tsc",
24
30
  "clean": "rm -rf dist",
package/src/engine.ts DELETED
@@ -1,156 +0,0 @@
1
- import type {
2
- ConversationState,
3
- ConversationConfig,
4
- TurnEvent,
5
- TurnHandler,
6
- StateHandler,
7
- } from './types.js';
8
- import { DEFAULT_CONVERSATION_CONFIG } from './types.js';
9
-
10
- /** Valid state transitions. */
11
- const VALID_TRANSITIONS: Record<ConversationState, ConversationState[]> = {
12
- idle: ['listening'],
13
- listening: ['thinking', 'idle'],
14
- thinking: ['speaking', 'idle'],
15
- speaking: ['idle', 'interrupted'],
16
- interrupted: ['listening', 'idle'],
17
- };
18
-
19
- /**
20
- * Conversation engine — manages the state machine for real-time voice conversations.
21
- * State flow: idle -> listening -> thinking -> speaking -> idle
22
- * Interruption: speaking -> interrupted -> listening
23
- */
24
- export class ConversationEngine {
25
- private state: ConversationState = 'idle';
26
- private config: ConversationConfig;
27
- private turnHandlers: TurnHandler[] = [];
28
- private stateHandlers: StateHandler[] = [];
29
- private turnCount = 0;
30
-
31
- constructor(config?: Partial<ConversationConfig>) {
32
- this.config = { ...DEFAULT_CONVERSATION_CONFIG, ...config };
33
- }
34
-
35
- /** Start a conversation session (idle -> listening). */
36
- start(): void {
37
- this.transition('listening');
38
- }
39
-
40
- /** Stop the conversation (any state -> idle). */
41
- stop(): void {
42
- this.state = 'idle';
43
- this.turnCount = 0;
44
- for (const handler of this.stateHandlers) {
45
- handler(this.state, 'idle');
46
- }
47
- }
48
-
49
- /** Get current state. */
50
- getState(): ConversationState {
51
- return this.state;
52
- }
53
-
54
- /** Get number of turns completed. */
55
- getTurnCount(): number {
56
- return this.turnCount;
57
- }
58
-
59
- /** Register a turn event handler. */
60
- onTurn(handler: TurnHandler): void {
61
- this.turnHandlers.push(handler);
62
- }
63
-
64
- /** Register a state change handler. */
65
- onStateChange(handler: StateHandler): void {
66
- this.stateHandlers.push(handler);
67
- }
68
-
69
- /** Transition to a new state. */
70
- transition(to: ConversationState): void {
71
- const from = this.state;
72
- const allowed = VALID_TRANSITIONS[from];
73
- if (!allowed.includes(to)) {
74
- throw new Error(`Invalid transition: ${from} -> ${to}`);
75
- }
76
- this.state = to;
77
- for (const handler of this.stateHandlers) {
78
- handler(from, to);
79
- }
80
- }
81
-
82
- /** Process user speech input. */
83
- async handleUserSpeech(text: string, audio?: Buffer): Promise<void> {
84
- if (this.state !== 'listening') {
85
- throw new Error(`Cannot process speech in state: ${this.state}`);
86
- }
87
-
88
- const event: TurnEvent = {
89
- type: 'user_speech',
90
- timestamp: Date.now(),
91
- text,
92
- audio,
93
- };
94
-
95
- await this.emitTurn(event);
96
- this.transition('thinking');
97
- this.turnCount++;
98
- }
99
-
100
- /** Process AI response. */
101
- async handleAIResponse(text: string, audio?: Buffer): Promise<void> {
102
- if (this.state !== 'thinking') {
103
- throw new Error(`Cannot send response in state: ${this.state}`);
104
- }
105
-
106
- this.transition('speaking');
107
-
108
- const event: TurnEvent = {
109
- type: 'ai_response',
110
- timestamp: Date.now(),
111
- text,
112
- audio,
113
- };
114
-
115
- await this.emitTurn(event);
116
- }
117
-
118
- /** Signal that speaking is complete, return to listening. */
119
- finishSpeaking(): void {
120
- if (this.state !== 'speaking') {
121
- throw new Error(`Cannot finish speaking in state: ${this.state}`);
122
- }
123
- this.transition('idle');
124
- this.transition('listening');
125
- }
126
-
127
- /** Handle an interruption (user starts talking while AI is speaking). */
128
- async handleInterruption(): Promise<void> {
129
- if (this.state !== 'speaking') {
130
- throw new Error(`Cannot interrupt in state: ${this.state}`);
131
- }
132
-
133
- if (!this.config.interruptionEnabled) return;
134
-
135
- this.transition('interrupted');
136
-
137
- const event: TurnEvent = {
138
- type: 'interruption',
139
- timestamp: Date.now(),
140
- };
141
- await this.emitTurn(event);
142
-
143
- this.transition('listening');
144
- }
145
-
146
- /** Get current config. */
147
- getConfig(): ConversationConfig {
148
- return { ...this.config };
149
- }
150
-
151
- private async emitTurn(event: TurnEvent): Promise<void> {
152
- for (const handler of this.turnHandlers) {
153
- await handler(event);
154
- }
155
- }
156
- }
package/src/index.ts DELETED
@@ -1,20 +0,0 @@
1
- export type {
2
- ConversationState,
3
- ConversationConfig,
4
- TurnEvent,
5
- VoicePersonality,
6
- TurnHandler,
7
- StateHandler,
8
- } from './types.js';
9
- export {
10
- DEFAULT_CONVERSATION_CONFIG,
11
- DEFAULT_VOICE_PERSONALITY,
12
- } from './types.js';
13
- export { ConversationEngine } from './engine.js';
14
- export { TurnManager } from './turn-manager.js';
15
- export { VoicePersonalityAdapter } from './voice-personality.js';
16
- export {
17
- AudioStreamManager,
18
- type AudioStreamEvent,
19
- type StreamDirection,
20
- } from './stream.js';
package/src/stream.ts DELETED
@@ -1,133 +0,0 @@
1
- import type { ConversationConfig } from './types.js';
2
- import { DEFAULT_CONVERSATION_CONFIG } from './types.js';
3
-
4
- /** Audio stream direction. */
5
- export type StreamDirection = 'inbound' | 'outbound';
6
-
7
- /** Audio stream event. */
8
- export interface AudioStreamEvent {
9
- direction: StreamDirection;
10
- timestamp: number;
11
- /** Audio data chunk. */
12
- data: Buffer;
13
- /** Whether voice activity was detected in this chunk. */
14
- voiceDetected?: boolean;
15
- }
16
-
17
- /**
18
- * Manages bidirectional audio streaming with VAD and echo cancellation hints.
19
- */
20
- export class AudioStreamManager {
21
- private config: ConversationConfig;
22
- private inboundBuffer: Buffer[] = [];
23
- private outboundBuffer: Buffer[] = [];
24
- private active = false;
25
- private vadState = false;
26
- private listeners: Array<(event: AudioStreamEvent) => void> = [];
27
-
28
- constructor(config?: Partial<ConversationConfig>) {
29
- this.config = { ...DEFAULT_CONVERSATION_CONFIG, ...config };
30
- }
31
-
32
- /** Start the audio stream. */
33
- start(): void {
34
- this.active = true;
35
- this.inboundBuffer = [];
36
- this.outboundBuffer = [];
37
- this.vadState = false;
38
- }
39
-
40
- /** Stop the audio stream. */
41
- stop(): void {
42
- this.active = false;
43
- this.inboundBuffer = [];
44
- this.outboundBuffer = [];
45
- }
46
-
47
- /** Whether the stream is active. */
48
- isActive(): boolean {
49
- return this.active;
50
- }
51
-
52
- /** Push inbound audio (from microphone). */
53
- pushInbound(data: Buffer): void {
54
- if (!this.active) return;
55
- this.inboundBuffer.push(data);
56
-
57
- const voiceDetected = this.detectVoiceActivity(data);
58
- this.vadState = voiceDetected;
59
-
60
- this.emit({
61
- direction: 'inbound',
62
- timestamp: Date.now(),
63
- data,
64
- voiceDetected,
65
- });
66
- }
67
-
68
- /** Push outbound audio (to speaker). */
69
- pushOutbound(data: Buffer): void {
70
- if (!this.active) return;
71
- this.outboundBuffer.push(data);
72
-
73
- this.emit({
74
- direction: 'outbound',
75
- timestamp: Date.now(),
76
- data,
77
- });
78
- }
79
-
80
- /** Get accumulated inbound audio and clear the buffer. */
81
- flushInbound(): Buffer {
82
- const combined = Buffer.concat(this.inboundBuffer);
83
- this.inboundBuffer = [];
84
- return combined;
85
- }
86
-
87
- /** Get accumulated outbound audio and clear the buffer. */
88
- flushOutbound(): Buffer {
89
- const combined = Buffer.concat(this.outboundBuffer);
90
- this.outboundBuffer = [];
91
- return combined;
92
- }
93
-
94
- /** Whether voice activity is currently detected. */
95
- isVoiceActive(): boolean {
96
- return this.vadState;
97
- }
98
-
99
- /** Whether echo cancellation is enabled. */
100
- isEchoCancellationEnabled(): boolean {
101
- return this.config.echoCancellation;
102
- }
103
-
104
- /** Register an audio stream event listener. */
105
- onAudio(listener: (event: AudioStreamEvent) => void): void {
106
- this.listeners.push(listener);
107
- }
108
-
109
- /**
110
- * Simple energy-based voice activity detection.
111
- * Compares average sample amplitude against the sensitivity threshold.
112
- */
113
- private detectVoiceActivity(data: Buffer): boolean {
114
- if (data.length < 2) return false;
115
-
116
- let energy = 0;
117
- const samples = data.length / 2; // 16-bit samples
118
- for (let i = 0; i < data.length - 1; i += 2) {
119
- const sample = data.readInt16LE(i);
120
- energy += Math.abs(sample);
121
- }
122
- const avgEnergy = energy / samples;
123
- // Normalize to 0-1 range (Int16 max = 32767)
124
- const normalized = avgEnergy / 32767;
125
- return normalized > this.config.vadSensitivity;
126
- }
127
-
128
- private emit(event: AudioStreamEvent): void {
129
- for (const listener of this.listeners) {
130
- listener(event);
131
- }
132
- }
133
- }
@@ -1,78 +0,0 @@
1
- import type { ConversationConfig, TurnEvent } from './types.js';
2
- import { DEFAULT_CONVERSATION_CONFIG } from './types.js';
3
-
4
- /** Filler words used during thinking pauses. */
5
- const FILLER_WORDS = ['um', 'uh', 'hmm', 'let me think', 'well'];
6
-
7
- /** Backchannel responses to acknowledge the user. */
8
- const BACKCHANNEL_RESPONSES = ['uh-huh', 'yeah', 'I see', 'right', 'got it', 'mm-hmm'];
9
-
10
- /**
11
- * Manages turn-taking, natural pauses, backchanneling, and filler words.
12
- */
13
- export class TurnManager {
14
- private config: ConversationConfig;
15
- private lastSpeechEnd = 0;
16
- private turnHistory: TurnEvent[] = [];
17
-
18
- constructor(config?: Partial<ConversationConfig>) {
19
- this.config = { ...DEFAULT_CONVERSATION_CONFIG, ...config };
20
- }
21
-
22
- /** Record the end of a speech turn. */
23
- recordTurnEnd(): void {
24
- this.lastSpeechEnd = Date.now();
25
- }
26
-
27
- /** Check if enough silence has passed to end the current turn. */
28
- isTurnComplete(): boolean {
29
- if (this.lastSpeechEnd === 0) return false;
30
- return (Date.now() - this.lastSpeechEnd) >= this.config.silenceTimeout;
31
- }
32
-
33
- /** Get a random filler word for thinking pauses. */
34
- getFiller(): string | null {
35
- if (!this.config.fillersEnabled) return null;
36
- return FILLER_WORDS[Math.floor(Math.random() * FILLER_WORDS.length)];
37
- }
38
-
39
- /** Get a backchannel response to acknowledge user speech. */
40
- getBackchannel(): string | null {
41
- if (!this.config.backchannelEnabled) return null;
42
- return BACKCHANNEL_RESPONSES[Math.floor(Math.random() * BACKCHANNEL_RESPONSES.length)];
43
- }
44
-
45
- /** Detect if the user is attempting to interrupt. */
46
- detectInterruption(speechDuration: number): boolean {
47
- if (!this.config.interruptionEnabled) return false;
48
- return speechDuration >= this.config.minSpeechDuration;
49
- }
50
-
51
- /** Calculate natural pause duration between sentences. */
52
- calculatePause(sentenceLength: number): number {
53
- // Longer sentences get slightly longer pauses
54
- const basePause = 200;
55
- const lengthFactor = Math.min(sentenceLength / 100, 2);
56
- return Math.round(basePause + lengthFactor * 150);
57
- }
58
-
59
- /** Add a turn event to history. */
60
- addToHistory(event: TurnEvent): void {
61
- this.turnHistory.push(event);
62
- // Keep last 50 turns
63
- if (this.turnHistory.length > 50) {
64
- this.turnHistory = this.turnHistory.slice(-50);
65
- }
66
- }
67
-
68
- /** Get recent turn history. */
69
- getHistory(limit = 10): TurnEvent[] {
70
- return this.turnHistory.slice(-limit);
71
- }
72
-
73
- /** Reset turn state. */
74
- reset(): void {
75
- this.lastSpeechEnd = 0;
76
- this.turnHistory = [];
77
- }
78
- }
package/src/types.ts DELETED
@@ -1,67 +0,0 @@
1
- /** States of a real-time conversation. */
2
- export type ConversationState = 'idle' | 'listening' | 'thinking' | 'speaking' | 'interrupted';
3
-
4
- /** Events emitted during a conversation turn. */
5
- export interface TurnEvent {
6
- type: 'user_speech' | 'ai_response' | 'interruption' | 'silence' | 'backchannel' | 'filler';
7
- timestamp: number;
8
- /** Transcribed text (for user_speech) or response text (for ai_response). */
9
- text?: string;
10
- /** Audio data associated with this event. */
11
- audio?: Buffer;
12
- /** Duration in milliseconds. */
13
- duration?: number;
14
- }
15
-
16
- /** Voice personality settings for natural conversation. */
17
- export interface VoicePersonality {
18
- /** Speaking pace (0.5 = slow, 1.0 = normal, 1.5 = fast). */
19
- pace: number;
20
- /** Pitch adjustment (-1.0 to 1.0). */
21
- pitch: number;
22
- /** How often to use filler words (0 = never, 1 = frequently). */
23
- fillerStyle: number;
24
- /** Natural pause duration in milliseconds between sentences. */
25
- pauseDuration: number;
26
- }
27
-
28
- export const DEFAULT_VOICE_PERSONALITY: VoicePersonality = {
29
- pace: 1.0,
30
- pitch: 0.0,
31
- fillerStyle: 0.2,
32
- pauseDuration: 300,
33
- };
34
-
35
- /** Configuration for the conversation engine. */
36
- export interface ConversationConfig {
37
- /** Voice activity detection sensitivity (0-1). */
38
- vadSensitivity: number;
39
- /** Maximum silence before ending a turn (ms). */
40
- silenceTimeout: number;
41
- /** Minimum speech duration to register as a turn (ms). */
42
- minSpeechDuration: number;
43
- /** Whether to enable interruption detection. */
44
- interruptionEnabled: boolean;
45
- /** Whether to insert filler words while thinking. */
46
- fillersEnabled: boolean;
47
- /** Whether to enable backchannel responses (uh-huh, yeah, etc.). */
48
- backchannelEnabled: boolean;
49
- /** Echo cancellation hint for the audio system. */
50
- echoCancellation: boolean;
51
- }
52
-
53
- export const DEFAULT_CONVERSATION_CONFIG: ConversationConfig = {
54
- vadSensitivity: 0.5,
55
- silenceTimeout: 1500,
56
- minSpeechDuration: 300,
57
- interruptionEnabled: true,
58
- fillersEnabled: true,
59
- backchannelEnabled: true,
60
- echoCancellation: true,
61
- };
62
-
63
- /** Callback for conversation turn events. */
64
- export type TurnHandler = (event: TurnEvent) => void | Promise<void>;
65
-
66
- /** Callback for state changes. */
67
- export type StateHandler = (from: ConversationState, to: ConversationState) => void;
@@ -1,90 +0,0 @@
1
- import type { VoicePersonality } from './types.js';
2
- import { DEFAULT_VOICE_PERSONALITY } from './types.js';
3
- import type { TTSOptions } from '@auxiora/tts';
4
-
5
- /** Named personality templates mapped to voice parameters. */
6
- const PERSONALITY_TEMPLATES: Record<string, VoicePersonality> = {
7
- friendly: {
8
- pace: 1.0,
9
- pitch: 0.1,
10
- fillerStyle: 0.3,
11
- pauseDuration: 250,
12
- },
13
- professional: {
14
- pace: 0.95,
15
- pitch: 0.0,
16
- fillerStyle: 0.05,
17
- pauseDuration: 350,
18
- },
19
- enthusiastic: {
20
- pace: 1.15,
21
- pitch: 0.2,
22
- fillerStyle: 0.4,
23
- pauseDuration: 200,
24
- },
25
- calm: {
26
- pace: 0.85,
27
- pitch: -0.1,
28
- fillerStyle: 0.1,
29
- pauseDuration: 450,
30
- },
31
- concise: {
32
- pace: 1.1,
33
- pitch: 0.0,
34
- fillerStyle: 0.0,
35
- pauseDuration: 200,
36
- },
37
- };
38
-
39
- /**
40
- * Maps personality templates to TTS voice parameters.
41
- */
42
- export class VoicePersonalityAdapter {
43
- private personality: VoicePersonality;
44
-
45
- constructor(personality?: Partial<VoicePersonality>) {
46
- this.personality = { ...DEFAULT_VOICE_PERSONALITY, ...personality };
47
- }
48
-
49
- /** Load a named personality template. */
50
- static fromTemplate(name: string): VoicePersonalityAdapter {
51
- const template = PERSONALITY_TEMPLATES[name];
52
- if (!template) {
53
- return new VoicePersonalityAdapter();
54
- }
55
- return new VoicePersonalityAdapter(template);
56
- }
57
-
58
- /** List available personality template names. */
59
- static listTemplates(): string[] {
60
- return Object.keys(PERSONALITY_TEMPLATES);
61
- }
62
-
63
- /** Get the current voice personality settings. */
64
- getPersonality(): VoicePersonality {
65
- return { ...this.personality };
66
- }
67
-
68
- /** Convert personality to TTS options. */
69
- toTTSOptions(baseOptions?: TTSOptions): TTSOptions {
70
- return {
71
- ...baseOptions,
72
- speed: this.personality.pace,
73
- };
74
- }
75
-
76
- /** Get the natural pause duration for this personality. */
77
- getPauseDuration(): number {
78
- return this.personality.pauseDuration;
79
- }
80
-
81
- /** Whether this personality uses filler words. */
82
- useFillers(): boolean {
83
- return this.personality.fillerStyle > 0;
84
- }
85
-
86
- /** Get filler word probability (0-1). */
87
- getFillerProbability(): number {
88
- return this.personality.fillerStyle;
89
- }
90
- }
@@ -1,310 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { ConversationEngine } from '../src/engine.js';
3
- import { TurnManager } from '../src/turn-manager.js';
4
- import { VoicePersonalityAdapter } from '../src/voice-personality.js';
5
- import { AudioStreamManager } from '../src/stream.js';
6
- import type { ConversationState, TurnEvent } from '../src/types.js';
7
-
8
- describe('ConversationEngine', () => {
9
- let engine: ConversationEngine;
10
-
11
- beforeEach(() => {
12
- engine = new ConversationEngine();
13
- });
14
-
15
- it('should start in idle state', () => {
16
- expect(engine.getState()).toBe('idle');
17
- });
18
-
19
- it('should transition from idle to listening on start', () => {
20
- engine.start();
21
- expect(engine.getState()).toBe('listening');
22
- });
23
-
24
- it('should stop and return to idle', () => {
25
- engine.start();
26
- engine.stop();
27
- expect(engine.getState()).toBe('idle');
28
- });
29
-
30
- it('should process user speech and transition to thinking', async () => {
31
- engine.start();
32
- await engine.handleUserSpeech('Hello');
33
- expect(engine.getState()).toBe('thinking');
34
- expect(engine.getTurnCount()).toBe(1);
35
- });
36
-
37
- it('should process AI response and transition to speaking', async () => {
38
- engine.start();
39
- await engine.handleUserSpeech('Hello');
40
- await engine.handleAIResponse('Hi there!');
41
- expect(engine.getState()).toBe('speaking');
42
- });
43
-
44
- it('should finish speaking and return to listening', async () => {
45
- engine.start();
46
- await engine.handleUserSpeech('Hello');
47
- await engine.handleAIResponse('Hi!');
48
- engine.finishSpeaking();
49
- expect(engine.getState()).toBe('listening');
50
- });
51
-
52
- it('should handle interruption during speaking', async () => {
53
- engine.start();
54
- await engine.handleUserSpeech('Hello');
55
- await engine.handleAIResponse('Let me explain...');
56
- await engine.handleInterruption();
57
- expect(engine.getState()).toBe('listening');
58
- });
59
-
60
- it('should reject invalid state transitions', () => {
61
- expect(() => engine.transition('speaking')).toThrow('Invalid transition');
62
- });
63
-
64
- it('should reject speech in non-listening state', async () => {
65
- await expect(engine.handleUserSpeech('Hello')).rejects.toThrow('Cannot process speech');
66
- });
67
-
68
- it('should reject AI response in non-thinking state', async () => {
69
- engine.start();
70
- await expect(engine.handleAIResponse('Hi')).rejects.toThrow('Cannot send response');
71
- });
72
-
73
- it('should emit turn events', async () => {
74
- const events: TurnEvent[] = [];
75
- engine.onTurn(event => { events.push(event); });
76
- engine.start();
77
- await engine.handleUserSpeech('Hello');
78
- expect(events).toHaveLength(1);
79
- expect(events[0].type).toBe('user_speech');
80
- expect(events[0].text).toBe('Hello');
81
- });
82
-
83
- it('should emit state change events', () => {
84
- const changes: Array<{ from: ConversationState; to: ConversationState }> = [];
85
- engine.onStateChange((from, to) => { changes.push({ from, to }); });
86
- engine.start();
87
- expect(changes).toHaveLength(1);
88
- expect(changes[0]).toEqual({ from: 'idle', to: 'listening' });
89
- });
90
-
91
- it('should track turn count', async () => {
92
- engine.start();
93
- expect(engine.getTurnCount()).toBe(0);
94
- await engine.handleUserSpeech('First');
95
- expect(engine.getTurnCount()).toBe(1);
96
- await engine.handleAIResponse('Reply');
97
- engine.finishSpeaking();
98
- await engine.handleUserSpeech('Second');
99
- expect(engine.getTurnCount()).toBe(2);
100
- });
101
- });
102
-
103
- describe('TurnManager', () => {
104
- let manager: TurnManager;
105
-
106
- beforeEach(() => {
107
- manager = new TurnManager({ silenceTimeout: 100 });
108
- });
109
-
110
- it('should not be complete initially', () => {
111
- expect(manager.isTurnComplete()).toBe(false);
112
- });
113
-
114
- it('should detect turn completion after silence timeout', async () => {
115
- manager.recordTurnEnd();
116
- await new Promise(resolve => setTimeout(resolve, 150));
117
- expect(manager.isTurnComplete()).toBe(true);
118
- });
119
-
120
- it('should return filler words when enabled', () => {
121
- const fillerManager = new TurnManager({ fillersEnabled: true });
122
- const filler = fillerManager.getFiller();
123
- expect(filler).toBeTypeOf('string');
124
- });
125
-
126
- it('should not return fillers when disabled', () => {
127
- const noFillers = new TurnManager({ fillersEnabled: false });
128
- expect(noFillers.getFiller()).toBeNull();
129
- });
130
-
131
- it('should return backchannel responses', () => {
132
- const bcManager = new TurnManager({ backchannelEnabled: true });
133
- const bc = bcManager.getBackchannel();
134
- expect(bc).toBeTypeOf('string');
135
- });
136
-
137
- it('should not return backchannels when disabled', () => {
138
- const noBc = new TurnManager({ backchannelEnabled: false });
139
- expect(noBc.getBackchannel()).toBeNull();
140
- });
141
-
142
- it('should detect interruption for sufficient duration', () => {
143
- expect(manager.detectInterruption(500)).toBe(true);
144
- });
145
-
146
- it('should not detect interruption for short speech', () => {
147
- const strictManager = new TurnManager({ minSpeechDuration: 1000 });
148
- expect(strictManager.detectInterruption(500)).toBe(false);
149
- });
150
-
151
- it('should calculate longer pauses for longer sentences', () => {
152
- const shortPause = manager.calculatePause(10);
153
- const longPause = manager.calculatePause(200);
154
- expect(longPause).toBeGreaterThan(shortPause);
155
- });
156
-
157
- it('should maintain turn history', () => {
158
- const event: TurnEvent = { type: 'user_speech', timestamp: Date.now(), text: 'Hello' };
159
- manager.addToHistory(event);
160
- const history = manager.getHistory();
161
- expect(history).toHaveLength(1);
162
- expect(history[0].text).toBe('Hello');
163
- });
164
-
165
- it('should limit history to 50 entries', () => {
166
- for (let i = 0; i < 60; i++) {
167
- manager.addToHistory({ type: 'user_speech', timestamp: Date.now(), text: `msg-${i}` });
168
- }
169
- const history = manager.getHistory(100);
170
- expect(history.length).toBeLessThanOrEqual(50);
171
- });
172
-
173
- it('should reset state', () => {
174
- manager.recordTurnEnd();
175
- manager.addToHistory({ type: 'user_speech', timestamp: Date.now() });
176
- manager.reset();
177
- expect(manager.isTurnComplete()).toBe(false);
178
- expect(manager.getHistory()).toHaveLength(0);
179
- });
180
- });
181
-
182
- describe('VoicePersonalityAdapter', () => {
183
- it('should use default personality', () => {
184
- const adapter = new VoicePersonalityAdapter();
185
- const p = adapter.getPersonality();
186
- expect(p.pace).toBe(1.0);
187
- expect(p.pitch).toBe(0.0);
188
- });
189
-
190
- it('should load from template', () => {
191
- const adapter = VoicePersonalityAdapter.fromTemplate('calm');
192
- const p = adapter.getPersonality();
193
- expect(p.pace).toBeLessThan(1.0);
194
- expect(p.pauseDuration).toBeGreaterThan(400);
195
- });
196
-
197
- it('should fall back to defaults for unknown template', () => {
198
- const adapter = VoicePersonalityAdapter.fromTemplate('nonexistent');
199
- expect(adapter.getPersonality().pace).toBe(1.0);
200
- });
201
-
202
- it('should list available templates', () => {
203
- const templates = VoicePersonalityAdapter.listTemplates();
204
- expect(templates).toContain('friendly');
205
- expect(templates).toContain('professional');
206
- expect(templates).toContain('calm');
207
- expect(templates.length).toBeGreaterThanOrEqual(4);
208
- });
209
-
210
- it('should convert to TTS options', () => {
211
- const adapter = VoicePersonalityAdapter.fromTemplate('enthusiastic');
212
- const opts = adapter.toTTSOptions({ voice: 'alloy' });
213
- expect(opts.voice).toBe('alloy');
214
- expect(opts.speed).toBeGreaterThan(1.0);
215
- });
216
-
217
- it('should report filler usage', () => {
218
- const noFillers = VoicePersonalityAdapter.fromTemplate('concise');
219
- expect(noFillers.useFillers()).toBe(false);
220
-
221
- const fillers = VoicePersonalityAdapter.fromTemplate('friendly');
222
- expect(fillers.useFillers()).toBe(true);
223
- });
224
- });
225
-
226
- describe('AudioStreamManager', () => {
227
- let stream: AudioStreamManager;
228
-
229
- beforeEach(() => {
230
- stream = new AudioStreamManager({ vadSensitivity: 0.01 });
231
- });
232
-
233
- it('should not be active initially', () => {
234
- expect(stream.isActive()).toBe(false);
235
- });
236
-
237
- it('should be active after start', () => {
238
- stream.start();
239
- expect(stream.isActive()).toBe(true);
240
- });
241
-
242
- it('should be inactive after stop', () => {
243
- stream.start();
244
- stream.stop();
245
- expect(stream.isActive()).toBe(false);
246
- });
247
-
248
- it('should buffer inbound audio', () => {
249
- stream.start();
250
- stream.pushInbound(Buffer.from([0x00, 0x10, 0x00, 0x20]));
251
- stream.pushInbound(Buffer.from([0x00, 0x30]));
252
- const flushed = stream.flushInbound();
253
- expect(flushed.length).toBe(6);
254
- });
255
-
256
- it('should buffer outbound audio', () => {
257
- stream.start();
258
- stream.pushOutbound(Buffer.from([0x01, 0x02]));
259
- const flushed = stream.flushOutbound();
260
- expect(flushed.length).toBe(2);
261
- });
262
-
263
- it('should clear buffer on flush', () => {
264
- stream.start();
265
- stream.pushInbound(Buffer.from([0x00, 0x10]));
266
- stream.flushInbound();
267
- const second = stream.flushInbound();
268
- expect(second.length).toBe(0);
269
- });
270
-
271
- it('should detect voice activity for loud audio', () => {
272
- stream.start();
273
- // Create a loud sample (high amplitude Int16)
274
- const loud = Buffer.alloc(4);
275
- loud.writeInt16LE(20000, 0);
276
- loud.writeInt16LE(25000, 2);
277
- stream.pushInbound(loud);
278
- expect(stream.isVoiceActive()).toBe(true);
279
- });
280
-
281
- it('should not detect voice activity for silence', () => {
282
- stream.start();
283
- const silence = Buffer.alloc(4, 0);
284
- stream.pushInbound(silence);
285
- expect(stream.isVoiceActive()).toBe(false);
286
- });
287
-
288
- it('should emit audio events', () => {
289
- const events: Array<{ direction: string }> = [];
290
- stream.onAudio(event => events.push({ direction: event.direction }));
291
- stream.start();
292
- stream.pushInbound(Buffer.from([0x00, 0x01]));
293
- stream.pushOutbound(Buffer.from([0x02, 0x03]));
294
- expect(events).toHaveLength(2);
295
- expect(events[0].direction).toBe('inbound');
296
- expect(events[1].direction).toBe('outbound');
297
- });
298
-
299
- it('should report echo cancellation setting', () => {
300
- expect(stream.isEchoCancellationEnabled()).toBe(true);
301
- const noEcho = new AudioStreamManager({ echoCancellation: false });
302
- expect(noEcho.isEchoCancellationEnabled()).toBe(false);
303
- });
304
-
305
- it('should ignore data when not active', () => {
306
- stream.pushInbound(Buffer.from([0x01]));
307
- const flushed = stream.flushInbound();
308
- expect(flushed.length).toBe(0);
309
- });
310
- });
@@ -1,13 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
-
3
- describe('Conversation package exports', () => {
4
- it('should export all public APIs', async () => {
5
- const mod = await import('../src/index.js');
6
- expect(mod.ConversationEngine).toBeDefined();
7
- expect(mod.TurnManager).toBeDefined();
8
- expect(mod.VoicePersonalityAdapter).toBeDefined();
9
- expect(mod.AudioStreamManager).toBeDefined();
10
- expect(mod.DEFAULT_CONVERSATION_CONFIG).toBeDefined();
11
- expect(mod.DEFAULT_VOICE_PERSONALITY).toBeDefined();
12
- });
13
- });
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src"
6
- },
7
- "include": ["src/**/*"],
8
- "references": [
9
- { "path": "../stt" },
10
- { "path": "../tts" },
11
- { "path": "../personality" }
12
- ]
13
- }
@@ -1 +0,0 @@
1
- {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/types.ts","./src/engine.ts","./src/turn-manager.ts","../tts/dist/types.d.ts","../tts/dist/openai-tts.d.ts","../tts/dist/elevenlabs-tts.d.ts","../tts/dist/index.d.ts","./src/voice-personality.ts","./src/stream.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/console.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/url.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/posix.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/win32.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/quic.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test/reporters.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util/types.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[76,135,136,138,146,150,153,155,156,157,169],[76,137,138,146,150,153,155,156,157,169],[138,146,150,153,155,156,157,169],[76,138,146,150,153,155,156,157,169,177],[76,138,139,144,146,149,150,153,155,156,157,159,169,174,186],[76,138,139,140,146,149,150,153,155,156,157,169],[76,138,146,150,153,155,156,157,169],[76,138,141,146,150,153,155,156,157,169,187],[76,138,142,143,146,150,153,155,156,157,160,169],[76,138,143,146,150,153,155,156,157,169,174,183],[76,138,144,146,149,150,153,155,156,157,159,169],[76,137,138,145,146,150,153,155,156,157,169],[76,138,146,147,150,153,155,156,157,169],[76,138,146,148,149,150,153,155,156,157,169],[76,137,138,146,149,150,153,155,156,157,169],[76,138,146,149,150,151,153,155,156,157,169,174,186],[76,138,146,149,150,151,153,155,156,157,169,174,177],[76,125,138,146,149,150,152,153,155,156,157,159,169,174,186],[76,138,146,149,150,152,153,155,156,157,159,169,174,183,186],[76,138,146,150,152,153,154,155,156,157,169,174,183,186],[74,75,76,77,78,79,80,81,82,83,84,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],[76,138,146,149,150,153,155,156,157,169],[76,138,146,150,153,155,157,169],[76,138,146,150,153,155,156,157,158,169,186],[76,138,146,149,150,153,155,156,157,159,169,174],[76,138,146,150,153,155,156,157,160,169],[76,138,146,150,153,155,156,157,161,169],[76,138,146,149,150,153,155,156,157,164,169],[76,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193],[76,138,146,150,153,155,156,157,166,169],[76,138,146,150,153,155,156,157,167,169],[76,138,143,146,150,153,155,156,157,159,169,177],[76,138,146,149,150,153,155,156,157,169,170],[76,138,146,150,153,155,156,157,169,171,187,190],[76,138,146,149,150,153,155,156,157,169,174,176,177],[76,138,146,150,153,155,156,157,169,175,177],[76,138,146,150,153,155,156,157,169,177,187],[76,138,146,150,153,155,156,157,169,178],[76,135,138,146,150,153,155,156,157,169,174,180],[76,138,146,150,153,155,156,157,169,174,179],[76,138,146,149,150,153,155,156,157,169,181,182],[76,138,146,150,153,155,156,157,169,181,182],[76,138,143,146,150,153,155,156,157,159,169,174,183],[76,138,146,150,153,155,156,157,169,184],[76,138,146,150,153,155,156,157,159,169,185],[76,138,146,150,152,153,155,156,157,167,169,186],[76,138,146,150,153,155,156,157,169,187,188],[76,138,143,146,150,153,155,156,157,169,188],[76,138,146,150,153,155,156,157,169,174,189],[76,138,146,150,153,155,156,157,158,169,190],[76,138,146,150,153,155,156,157,169,191],[76,138,141,146,150,153,155,156,157,169],[76,138,143,146,150,153,155,156,157,169],[76,138,146,150,153,155,156,157,169,187],[76,125,138,146,150,153,155,156,157,169],[76,138,146,150,153,155,156,157,169,186],[76,138,146,150,153,155,156,157,169,192],[76,138,146,150,153,155,156,157,164,169],[76,138,146,150,153,155,156,157,169,182],[76,125,138,146,149,150,151,153,155,156,157,164,169,174,177,186,189,190,192],[76,138,146,150,153,155,156,157,169,174,193],[76,91,94,97,98,138,146,150,153,155,156,157,169,186],[76,94,138,146,150,153,155,156,157,169,174,186],[76,94,98,138,146,150,153,155,156,157,169,186],[76,138,146,150,153,155,156,157,169,174],[76,88,138,146,150,153,155,156,157,169],[76,92,138,146,150,153,155,156,157,169],[76,90,91,94,138,146,150,153,155,156,157,169,186],[76,138,146,150,153,155,156,157,159,169,183],[76,138,146,150,153,155,156,157,169,194],[76,88,138,146,150,153,155,156,157,169,194],[76,90,94,138,146,150,153,155,156,157,159,169,186],[76,85,86,87,89,93,138,146,149,150,153,155,156,157,169,174,186],[76,94,102,110,138,146,150,153,155,156,157,169],[76,86,92,138,146,150,153,155,156,157,169],[76,94,119,120,138,146,150,153,155,156,157,169],[76,86,89,94,138,146,150,153,155,156,157,169,177,186,194],[76,94,138,146,150,153,155,156,157,169],[76,90,94,138,146,150,153,155,156,157,169,186],[76,85,138,146,150,153,155,156,157,169],[76,88,89,90,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,138,146,150,153,155,156,157,169],[76,94,112,115,138,146,150,153,155,156,157,169],[76,94,102,103,104,138,146,150,153,155,156,157,169],[76,92,94,103,105,138,146,150,153,155,156,157,169],[76,93,138,146,150,153,155,156,157,169],[76,86,88,94,138,146,150,153,155,156,157,169],[76,94,98,103,105,138,146,150,153,155,156,157,169],[76,98,138,146,150,153,155,156,157,169],[76,92,94,97,138,146,150,153,155,156,157,169,186],[76,86,90,94,102,138,146,150,153,155,156,157,169],[76,94,112,138,146,150,153,155,156,157,169],[76,105,138,146,150,153,155,156,157,169],[76,88,94,119,138,146,150,153,155,156,157,169,177,192,194],[64,76,138,146,150,153,155,156,157,169],[64,65,66,71,72,76,138,146,150,153,155,156,157,169],[64,70,76,138,146,150,153,155,156,157,169],[67,76,138,146,150,153,155,156,157,169],[67,68,69,76,138,146,150,153,155,156,157,169]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"032a0eb3cdd300b2b344571b9db32f13452ee4c6873af19d07262f7dbc8157df","signature":"74857f23e5d178ef6acfc087eae7952cc9a05cf38a155bf66c43d217ba3a42a9","impliedFormat":99},{"version":"0f9197e7182a86753e80c7c2ca44841c32c66b725643a301c0174aaae71477dd","signature":"a2609016cf2a607fd9ee14c48ba72742c60d516f4a541cb9699f13b212554e03","impliedFormat":99},{"version":"f4805b64650a129ff0f91e6819000f76af10052d07e6859ad31224177b717db1","signature":"ff37e044edbcc58391f784e47b94e6ab4f60de4ac7bf54d078979e7c2d41363b","impliedFormat":99},{"version":"46e799e5a2a51b8720ee99f1fe94f0135b3216977f3fc92d2b82bc607d5e3281","impliedFormat":99},{"version":"560b78a4b6d9c483415f88689dc1d92244a62deb302ad762260cb182dd622f1f","impliedFormat":99},{"version":"2fdbfe39b17ee02b73590781a06fc6c17c19e693aaecdc8055697f47d2aa929c","impliedFormat":99},{"version":"6d4e9c89a03a89e69dbc3ec61de93feec3606f72b2dcd69b687dbf1d9ba4f3c4","impliedFormat":99},{"version":"7e672e2d2829d82e6555f05788424e1baf0115ae676df8c2767297bc390d29de","signature":"c15c76d9fb245a77c4cc11add07c2cc6f1e4d44e18c3a60ca7e05c7cc95a0d94","impliedFormat":99},{"version":"5ee75f4dd5d2e60144e501669671e1783b76d4106999f415c1596d0d6c7ead15","signature":"f3bc492adb4ea162b6da0887e6c3b937f4a8279005fb5ccd5b1e90eabc203389","impliedFormat":99},{"version":"87a43019be52a364658cdd294f0c9a33d0c648be92879d2fddd6a8500ccd0998","signature":"d3b511bd1f26eedc78934c6821a3a9859dff0e36c89e62c994ccd1a93d974d8b","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"e6f370b5c1d52edabb93ef055d0c0c396a98be77db8aa022fcc3670787b8b5f5","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"10947bb49601aeec9ea1dddf61ef6e4f8442f949bd40a8008e12b129deb037be","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"1641d32611fc7aa82cdd9fa38ff18349aac4eda9e032ced76b21943673887f9a","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[[64,66],[71,73]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":10},"referencedMap":[[135,1],[136,1],[137,2],[76,3],[138,4],[139,5],[140,6],[74,7],[141,8],[142,9],[143,10],[144,11],[145,12],[146,13],[147,13],[148,14],[149,15],[150,16],[151,17],[77,7],[75,7],[152,18],[153,19],[154,20],[194,21],[155,22],[156,23],[157,22],[158,24],[159,25],[160,26],[161,27],[162,27],[163,27],[164,28],[165,29],[166,30],[167,31],[168,32],[169,33],[170,33],[171,34],[172,7],[173,7],[174,35],[175,36],[176,35],[177,37],[178,38],[179,39],[180,40],[181,41],[182,42],[183,43],[184,44],[185,45],[186,46],[187,47],[188,48],[189,49],[190,50],[191,51],[78,22],[79,7],[80,52],[81,53],[82,7],[83,54],[84,7],[126,55],[127,56],[128,57],[129,57],[130,58],[131,7],[132,4],[133,59],[134,56],[192,60],[193,61],[62,7],[63,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[57,7],[58,7],[10,7],[59,7],[1,7],[60,7],[61,7],[102,62],[114,63],[100,64],[115,65],[124,66],[91,67],[92,68],[90,69],[123,70],[118,71],[122,72],[94,73],[111,74],[93,75],[121,76],[88,77],[89,71],[95,78],[96,7],[101,79],[99,78],[86,80],[125,81],[116,82],[105,83],[104,78],[106,84],[109,85],[103,86],[107,87],[119,70],[97,88],[98,89],[110,90],[87,65],[113,91],[112,78],[108,92],[117,7],[85,7],[120,93],[65,94],[73,95],[72,94],[66,94],[64,7],[71,96],[69,97],[70,98],[68,97],[67,7]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}