@metatell/bot-core 0.0.9 → 0.0.11

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.
@@ -0,0 +1,627 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { CoreServiceFactory } from '../CoreServiceFactory.js';
3
+ import { AnimationService } from '../interfaces/IAnimationService.js';
4
+ import { AppSettings } from '../interfaces/IAppSettings.js';
5
+ import { AvatarController } from '../interfaces/IAvatarController.js';
6
+ import { ConfigurationProvider, } from '../interfaces/IConfigurationProvider.js';
7
+ import { ConnectionManager } from '../interfaces/IConnectionManager.js';
8
+ import { EventBus, SystemEvents } from '../interfaces/IEventBus.js';
9
+ import { MessageService } from '../interfaces/IMessageService.js';
10
+ import { OrganizationService, } from '../interfaces/IOrganizationService.js';
11
+ import { PresenceManager } from '../interfaces/IPresenceManager.js';
12
+ import { UserAvatarManager } from '../interfaces/IUserAvatarManager.js';
13
+ import { getLogger } from '../logging/index.js';
14
+ // Rate limiting classes (these might need to be moved to core too)
15
+ class RateLimitedQueue {
16
+ rates = new Map();
17
+ async execute(_key, fn) {
18
+ // シンプルなレート制限実装
19
+ await fn();
20
+ }
21
+ getRate(key) {
22
+ return this.rates.get(key);
23
+ }
24
+ setRate(key, rate) {
25
+ this.rates.set(key, rate);
26
+ }
27
+ }
28
+ // Error types
29
+ export class MetatellError extends Error {
30
+ code;
31
+ cause;
32
+ constructor(code, message, cause) {
33
+ super(message);
34
+ this.code = code;
35
+ this.cause = cause;
36
+ this.name = 'MetatellError';
37
+ }
38
+ }
39
+ export class AuthError extends MetatellError {
40
+ constructor(code, message, cause) {
41
+ super(code, message, cause);
42
+ this.name = 'AuthError';
43
+ }
44
+ }
45
+ export class NetworkError extends MetatellError {
46
+ constructor(code, message, cause) {
47
+ super(code, message, cause);
48
+ this.name = 'NetworkError';
49
+ }
50
+ }
51
+ export class NotFoundError extends MetatellError {
52
+ constructor(code, message, cause) {
53
+ super(code, message, cause);
54
+ this.name = 'NotFoundError';
55
+ }
56
+ }
57
+ /**
58
+ * MetatellClient implementation
59
+ */
60
+ export class MetatellClientImpl extends EventEmitter {
61
+ options;
62
+ serviceFactory;
63
+ connectionManager;
64
+ messageService;
65
+ avatarController;
66
+ presenceManager;
67
+ organizationService;
68
+ animationService;
69
+ eventBus;
70
+ configProvider;
71
+ userAvatarManager;
72
+ rateLimiter = new RateLimitedQueue();
73
+ logger;
74
+ orgAvatarUrlCache = new Map();
75
+ voiceMuted = false;
76
+ constructor(options) {
77
+ super();
78
+ this.options = options;
79
+ // Initialize logger
80
+ this.logger = getLogger('MetatellClient');
81
+ // デバッグモードの場合、ロギングを有効化
82
+ if (options.debug) {
83
+ process.env.DEBUG = 'metatell:*';
84
+ }
85
+ // CoreServiceFactoryを初期化
86
+ this.serviceFactory = new CoreServiceFactory({
87
+ serverUrl: options.serverUrl,
88
+ hubUrl: options.serverUrl.replace(/^ws/, 'http'), // WebSocket URLからHTTP URLに変換
89
+ hubId: options.roomId,
90
+ profile: {
91
+ displayName: options.username || 'MetatellBot',
92
+ avatarId: options.avatarId || '', // 後で組織アバターから取得
93
+ },
94
+ botAccessKey: options.token,
95
+ debug: options.debug || false,
96
+ });
97
+ // 必要なサービスを取得
98
+ const container = this.serviceFactory.getContainer();
99
+ this.connectionManager = container.get(ConnectionManager);
100
+ this.messageService = container.get(MessageService);
101
+ this.avatarController = container.get(AvatarController);
102
+ this.presenceManager = container.get(PresenceManager);
103
+ this.userAvatarManager = container.get(UserAvatarManager);
104
+ this.organizationService = container.get(OrganizationService);
105
+ this.animationService = container.get(AnimationService);
106
+ this.eventBus = container.get(EventBus);
107
+ this.configProvider = container.get(ConfigurationProvider);
108
+ // デバッグモードの場合、AppSettingsのログレベルを変更
109
+ if (options.debug) {
110
+ const appSettings = container.get(AppSettings);
111
+ appSettings.setLogLevel('debug');
112
+ appSettings.setDebugMode(true);
113
+ }
114
+ // イベントのプロキシ設定
115
+ this.setupEventProxies();
116
+ // Voice mute state synchronization
117
+ this.eventBus.on('voice:mute-changed', ({ muted }) => {
118
+ this.applyVoiceMute(muted);
119
+ });
120
+ }
121
+ /**
122
+ * Parse mention from message body
123
+ * Format: [@displayName](session-id) message
124
+ * Example: [@MetatellCLI](b754ca96-d395-4b80-adb1-77cb0240a43d) hello
125
+ */
126
+ parseMessageMention(body) {
127
+ const mentionPattern = /\[@([^\]]+)\]\(([^)]+)\)\s*(.*)$/;
128
+ const match = body.match(mentionPattern);
129
+ if (match) {
130
+ return {
131
+ text: match[3].trim(),
132
+ mention: {
133
+ name: match[1],
134
+ sessionId: match[2],
135
+ },
136
+ };
137
+ }
138
+ return { text: body };
139
+ }
140
+ setupEventProxies() {
141
+ // Coreのイベントをクライアントイベントにマッピング
142
+ this.eventBus.on(SystemEvents.CONNECTION_ESTABLISHED, () => {
143
+ this.emit('connected');
144
+ });
145
+ this.eventBus.on(SystemEvents.CONNECTION_LOST, () => {
146
+ this.emit('disconnected');
147
+ });
148
+ this.eventBus.on(SystemEvents.MESSAGE_RECEIVED, (data) => {
149
+ const messageData = data;
150
+ this.emit('message', messageData);
151
+ // チャットメッセージの場合、詳細な情報を解析して別イベントを発火
152
+ if (messageData.type === 'chat' && messageData.body) {
153
+ const parsed = this.parseMessageMention(messageData.body);
154
+ // PresenceManagerから送信者の情報を取得
155
+ const users = this.presenceManager.getUsers();
156
+ const sender = users.find((u) => u.id === messageData.senderId);
157
+ // デバッグ情報
158
+ if (this.options.debug) {
159
+ this.logger.debug('Message sender lookup:', {
160
+ senderId: messageData.senderId,
161
+ foundSender: !!sender,
162
+ senderData: sender,
163
+ allUsers: users.map((u) => ({ id: u.id, name: u.profile?.displayName })),
164
+ });
165
+ }
166
+ const senderName = sender?.profile?.displayName || sender?.id.split('#')[0] || 'Unknown';
167
+ this.emit('chat-message', {
168
+ from: {
169
+ id: messageData.senderId || '',
170
+ name: senderName,
171
+ isBot: false,
172
+ },
173
+ text: parsed.text,
174
+ mention: parsed.mention,
175
+ });
176
+ }
177
+ });
178
+ this.eventBus.on(SystemEvents.USER_JOINED, (data) => {
179
+ // PresenceUserデータをUser型に変換
180
+ const presenceUser = data;
181
+ // UserAvatarManagerからアバター情報を取得
182
+ const avatar = this.userAvatarManager.getUser(presenceUser.id);
183
+ const user = {
184
+ id: presenceUser.id,
185
+ name: presenceUser.profile?.displayName || presenceUser.id.split('#')[0] || presenceUser.id,
186
+ isBot: false,
187
+ position: avatar?.position,
188
+ rotation: avatar?.rotation,
189
+ };
190
+ this.emit('user-join', user);
191
+ // 新しいユーザーが入室したときにアバターを再同期
192
+ this.resyncAvatarForNewUser();
193
+ });
194
+ this.eventBus.on(SystemEvents.USER_LEFT, (data) => {
195
+ // PresenceUserデータをUser型に変換
196
+ const presenceUser = data;
197
+ // UserAvatarManagerからアバター情報を取得
198
+ const avatar = this.userAvatarManager.getUser(presenceUser.id);
199
+ const user = {
200
+ id: presenceUser.id,
201
+ name: presenceUser.profile?.displayName || presenceUser.id.split('#')[0] || presenceUser.id,
202
+ isBot: false,
203
+ position: avatar?.position,
204
+ rotation: avatar?.rotation,
205
+ };
206
+ this.emit('user-leave', user);
207
+ });
208
+ }
209
+ async resyncAvatarForNewUser() {
210
+ try {
211
+ // アバターがスポーンされている場合のみ再同期
212
+ if (this.avatarController.getState()) {
213
+ await this.avatarController.resyncAvatar();
214
+ this.logger.debug('Avatar resynced for new user');
215
+ }
216
+ }
217
+ catch (error) {
218
+ this.logger.warn('Failed to resync avatar for new user', error);
219
+ }
220
+ }
221
+ async connect() {
222
+ try {
223
+ await this.connectionManager.connect({
224
+ serverUrl: this.options.serverUrl,
225
+ hubId: this.options.roomId,
226
+ });
227
+ // 組織情報を取得
228
+ const orgInfo = await this.organizationService.getOrganizationInfo(this.options.serverUrl.replace(/^ws/, 'http'), this.options.roomId);
229
+ // アバターIDが指定されていない場合、組織アバターから選択
230
+ let avatarId = this.options.avatarId;
231
+ let avatarUrl;
232
+ if (!avatarId && orgInfo.organizationId) {
233
+ try {
234
+ // 組織アバター一覧を取得
235
+ const avatars = await this.organizationService.fetchOrganizationAvatars(this.options.serverUrl.replace(/^ws/, 'http'), orgInfo.organizationId);
236
+ if (avatars.length > 0) {
237
+ // 最初のアバターを使用
238
+ const defaultAvatar = avatars[0];
239
+ avatarId = defaultAvatar.id;
240
+ avatarUrl = defaultAvatar.gltf.avatar;
241
+ }
242
+ }
243
+ catch (error) {
244
+ // 組織アバター取得に失敗した場合はスキップ
245
+ this.logger.debug('Failed to fetch organization avatars', error);
246
+ }
247
+ }
248
+ // アバターIDが取得できない場合はエラー
249
+ if (!avatarId) {
250
+ throw new MetatellError('NO_AVATAR_AVAILABLE', 'No avatar available. Organization avatars not found and no avatar ID specified.');
251
+ }
252
+ // アバターをスポーン
253
+ if (avatarId) {
254
+ // 設定を更新
255
+ const config = this.configProvider.getConfiguration();
256
+ config.profile.avatarId = avatarId;
257
+ if (avatarUrl) {
258
+ config.organizationAvatarUrl = avatarUrl;
259
+ }
260
+ await this.avatarController.spawn(avatarId, undefined, avatarUrl);
261
+ }
262
+ // ロビーからルームへ遷移
263
+ const hubChannel = this.connectionManager.getHubChannel();
264
+ if (hubChannel) {
265
+ hubChannel.push('events:entering', {});
266
+ hubChannel.push('events:entered', {
267
+ initialOccupantCount: 0,
268
+ isNewDaily: true,
269
+ isNewMonthly: true,
270
+ isNewDayWindow: true,
271
+ isNewMonthWindow: true,
272
+ entryDisplayType: 'Bot',
273
+ userAgent: 'MetatellBot/1.0',
274
+ });
275
+ }
276
+ }
277
+ catch (error) {
278
+ // エラーを適切なタイプに変換
279
+ if (error instanceof Error && error.message.includes('auth')) {
280
+ throw new AuthError('AUTH_FAILED', 'Authentication failed', error);
281
+ }
282
+ throw new NetworkError('CONNECTION_FAILED', 'Failed to connect', error);
283
+ }
284
+ }
285
+ async disconnect() {
286
+ await this.connectionManager.disconnect();
287
+ }
288
+ room = {
289
+ getUsers: async () => {
290
+ return this.buildUserList();
291
+ },
292
+ getNearbyUsers: async (radius = 10) => {
293
+ // 現在のアバター位置を取得
294
+ const currentPosition = this.avatar.getPosition();
295
+ if (!currentPosition) {
296
+ // アバターがスポーンされていない場合は全ユーザーを返す
297
+ return this.room.getUsers();
298
+ }
299
+ // UserAvatarManagerから距離内のユーザーを取得
300
+ const nearbyAvatars = this.userAvatarManager.getUsersInRange(currentPosition, radius);
301
+ // UserAvatarをUser型に変換
302
+ return nearbyAvatars.map((avatar) => ({
303
+ id: avatar.id,
304
+ name: avatar.nickname || avatar.id.split('#')[0] || avatar.id,
305
+ isBot: false,
306
+ position: avatar.position,
307
+ rotation: avatar.rotation,
308
+ }));
309
+ },
310
+ };
311
+ chat = {
312
+ send: async (text) => {
313
+ await this.rateLimiter.execute('messages', async () => {
314
+ await this.messageService.sendMessage(text);
315
+ });
316
+ },
317
+ onMessage: (handler) => {
318
+ // メッセージ受信イベントをサブスクライブ
319
+ this.eventBus.on(SystemEvents.MESSAGE_RECEIVED, async (data) => {
320
+ const messageData = data;
321
+ if (messageData.type === 'chat' && messageData.body) {
322
+ const parsed = this.parseMessageMention(messageData.body);
323
+ // PresenceManagerから送信者の情報を取得
324
+ const users = this.presenceManager.getUsers();
325
+ const sender = users.find((u) => u.id === messageData.senderId);
326
+ const senderName = sender?.profile?.displayName || sender?.id.split('#')[0] || 'Unknown';
327
+ const user = {
328
+ id: messageData.senderId || '',
329
+ name: senderName,
330
+ isBot: false,
331
+ };
332
+ handler({
333
+ from: user,
334
+ text: parsed.text,
335
+ mention: parsed.mention,
336
+ reply: async (replyText) => {
337
+ await this.messageService.sendMessage(replyText);
338
+ },
339
+ });
340
+ }
341
+ });
342
+ },
343
+ };
344
+ avatar = {
345
+ select: async (assetId) => {
346
+ // アバターを変更するには再度spawnを呼び出す
347
+ const state = this.avatarController.getState();
348
+ try {
349
+ // まず通常のアバターとしてspawnを試みる
350
+ await this.avatarController.spawn(assetId, state?.position);
351
+ }
352
+ catch (error) {
353
+ // avatarSrc URLが必要というエラーの場合のみ、組織アバターとして処理
354
+ if (error instanceof Error &&
355
+ error.message.includes('Organization avatar requires avatarSrc URL')) {
356
+ // キャッシュをチェック
357
+ let avatarSrc = this.orgAvatarUrlCache.get(assetId);
358
+ if (!avatarSrc) {
359
+ // キャッシュにない場合はOrganizationServiceから取得
360
+ const hubUrl = this.configProvider.getConfiguration().hubUrl;
361
+ const orgInfo = await this.organizationService.getOrganizationInfo(hubUrl, this.configProvider.getConfiguration().hubId);
362
+ if (!orgInfo.organizationId) {
363
+ throw new Error(`Cannot fetch organization avatars: organization ID not found`);
364
+ }
365
+ const avatars = await this.organizationService.fetchOrganizationAvatars(hubUrl, orgInfo.organizationId);
366
+ const targetAvatar = avatars.find((a) => a.id === assetId);
367
+ if (!targetAvatar) {
368
+ throw new Error(`Organization avatar not found: ${assetId}`);
369
+ }
370
+ avatarSrc = targetAvatar.gltf.avatar;
371
+ // URLをキャッシュに保存
372
+ this.orgAvatarUrlCache.set(assetId, avatarSrc);
373
+ this.logger.debug('Cached organization avatar URL', { assetId, avatarSrc });
374
+ }
375
+ else {
376
+ this.logger.debug('Using cached organization avatar URL', { assetId, avatarSrc });
377
+ }
378
+ // avatarSrc付きで再度spawnを試みる
379
+ await this.avatarController.spawn(assetId, state?.position, avatarSrc);
380
+ }
381
+ else {
382
+ // その他のエラーはそのまま再スロー
383
+ throw error;
384
+ }
385
+ }
386
+ },
387
+ play: async (animation) => {
388
+ try {
389
+ // アニメーションオプションを変換
390
+ const playOptions = {
391
+ loop: animation.loop || false,
392
+ duration: animation.duration,
393
+ transitionDuration: animation.transitionDuration,
394
+ };
395
+ if ('id' in animation && animation.id) {
396
+ await this.avatarController.playAnimation(animation.id, playOptions);
397
+ }
398
+ else if ('url' in animation && animation.url) {
399
+ // URLベースのアニメーションは現在のインターフェースではサポートされていない
400
+ // カスタムアニメーションとして扱う必要がある
401
+ throw new NotFoundError('ANIMATION_NOT_FOUND', 'URL-based animations are not yet supported');
402
+ }
403
+ else {
404
+ throw new NotFoundError('ANIMATION_NOT_FOUND', 'Animation must have either id or url');
405
+ }
406
+ }
407
+ catch (error) {
408
+ if (error instanceof Error && error.message.includes('not found')) {
409
+ throw new NotFoundError('ANIMATION_NOT_FOUND', error.message, error);
410
+ }
411
+ throw error;
412
+ }
413
+ },
414
+ moveTo: async (position) => {
415
+ await this.rateLimiter.execute('moves', async () => {
416
+ await this.avatarController.move(position);
417
+ });
418
+ },
419
+ rotateTo: async (rotation) => {
420
+ // Euler角(度数法)をラジアンに変換
421
+ const xRad = (rotation.x * Math.PI) / 180;
422
+ const yRad = (rotation.y * Math.PI) / 180;
423
+ const zRad = (rotation.z * Math.PI) / 180;
424
+ // オイラー角からクォータニオンに変換(ZYX順)
425
+ const cx = Math.cos(xRad / 2);
426
+ const sx = Math.sin(xRad / 2);
427
+ const cy = Math.cos(yRad / 2);
428
+ const sy = Math.sin(yRad / 2);
429
+ const cz = Math.cos(zRad / 2);
430
+ const sz = Math.sin(zRad / 2);
431
+ const quaternion = {
432
+ x: sx * cy * cz - cx * sy * sz,
433
+ y: cx * sy * cz + sx * cy * sz,
434
+ z: cx * cy * sz - sx * sy * cz,
435
+ w: cx * cy * cz + sx * sy * sz,
436
+ };
437
+ // AvatarControllerのrotateメソッドを使用
438
+ await this.avatarController.rotate(quaternion);
439
+ },
440
+ lookAt: async (target) => {
441
+ await this.rateLimiter.execute('looks', async () => {
442
+ // 現在位置を取得
443
+ const state = this.avatarController.getState();
444
+ if (!state) {
445
+ throw new MetatellError('AVATAR_NOT_SPAWNED', 'Avatar is not spawned');
446
+ }
447
+ // ターゲットへの方向ベクトルを計算
448
+ const dx = target.x - state.position.x;
449
+ const dz = target.z - state.position.z;
450
+ // Y軸周りの回転角度を計算(ラジアン)
451
+ const yRotation = Math.atan2(dx, dz);
452
+ // ラジアンからクォータニオンに変換(Y軸回転のみ)
453
+ const halfAngle = yRotation / 2;
454
+ const quaternion = {
455
+ x: 0,
456
+ y: Math.sin(halfAngle),
457
+ z: 0,
458
+ w: Math.cos(halfAngle),
459
+ };
460
+ // 回転を適用
461
+ await this.avatarController.rotate(quaternion);
462
+ });
463
+ },
464
+ getPosition: () => {
465
+ const state = this.avatarController.getState();
466
+ return state ? { ...state.position } : null;
467
+ },
468
+ getAvailableAssets: async () => {
469
+ // organizationInfoを取得するには、hubUrlとhubIdが必要
470
+ const config = this.configProvider.getConfiguration();
471
+ const orgInfo = await this.organizationService.getOrganizationInfo(config.hubUrl, config.hubId);
472
+ if (!orgInfo.organizationId) {
473
+ // 組織IDがない場合は空配列を返す
474
+ return [];
475
+ }
476
+ const avatars = await this.organizationService.fetchOrganizationAvatars(config.hubUrl, orgInfo.organizationId);
477
+ return avatars.map((avatar) => ({
478
+ id: avatar.id,
479
+ name: avatar.name,
480
+ thumbnailUrl: avatar.images?.preview?.url || avatar.thumbnail_url || '',
481
+ modelUrl: avatar.gltf.avatar,
482
+ }));
483
+ },
484
+ getAvailableAnimations: async () => {
485
+ // 現在のアバターIDを取得
486
+ const state = this.avatarController.getState();
487
+ if (!state) {
488
+ return [];
489
+ }
490
+ this.logger.debug('Getting available animations for avatar', { avatarId: state.avatarId });
491
+ const animations = await this.animationService.getAvailableAnimations(state.avatarId);
492
+ this.logger.debug('Retrieved animations', {
493
+ avatarId: state.avatarId,
494
+ animationCount: animations.length,
495
+ animations: animations.map((a) => ({ id: a.id, name: a.name })),
496
+ });
497
+ return animations.map((anim) => ({
498
+ id: anim.id,
499
+ name: anim.name || 'Unknown Animation',
500
+ duration: anim.duration,
501
+ }));
502
+ },
503
+ };
504
+ voice = {
505
+ playPcm: async (_input, _options) => {
506
+ // 音声機能は別パッケージ(@metatell/realtime)で実装
507
+ // ここではプレースホルダーを返す
508
+ const finishedPromise = new Promise((resolve) => {
509
+ setTimeout(resolve, 1000);
510
+ });
511
+ return {
512
+ stop: async () => {
513
+ // 音声停止の実装は別パッケージで行う
514
+ },
515
+ finished: finishedPromise,
516
+ };
517
+ },
518
+ };
519
+ async getInfo() {
520
+ const config = this.configProvider.getConfiguration();
521
+ const sessionId = this.getSessionId();
522
+ return {
523
+ name: config.profile?.displayName || 'MetatellBot',
524
+ version: '1.0.0',
525
+ roomId: config.hubId,
526
+ sessionId: sessionId || undefined,
527
+ };
528
+ }
529
+ buildUserList() {
530
+ const users = this.presenceManager.getUsers();
531
+ const currentSessionId = this.connectionManager.getSessionId();
532
+ return users.map((u) => {
533
+ if (u.id === currentSessionId) {
534
+ const avatarState = this.avatarController.getState();
535
+ return {
536
+ id: u.id,
537
+ name: u.profile?.displayName || u.id.split('#')[0] || u.id,
538
+ isBot: false,
539
+ position: avatarState?.position,
540
+ rotation: avatarState?.rotation
541
+ ? {
542
+ x: (avatarState.rotation.x * 180) / Math.PI,
543
+ y: (avatarState.rotation.y * 180) / Math.PI,
544
+ z: (avatarState.rotation.z * 180) / Math.PI,
545
+ w: 1, // 簡略化
546
+ }
547
+ : undefined,
548
+ };
549
+ }
550
+ const avatar = this.userAvatarManager.getUser(u.id);
551
+ return {
552
+ id: u.id,
553
+ name: u.profile?.displayName || u.id.split('#')[0] || u.id,
554
+ isBot: false,
555
+ position: avatar?.position,
556
+ rotation: avatar?.rotation,
557
+ };
558
+ });
559
+ }
560
+ getStatus() {
561
+ const sessionId = this.connectionManager.getSessionId();
562
+ return {
563
+ connected: !!sessionId,
564
+ connecting: !sessionId,
565
+ };
566
+ }
567
+ getUsers() {
568
+ return this.buildUserList();
569
+ }
570
+ getRateLimit(key) {
571
+ return this.rateLimiter.getRate(key);
572
+ }
573
+ setRateLimit(key, perSecond) {
574
+ this.rateLimiter.setRate(key, perSecond);
575
+ }
576
+ getSessionId() {
577
+ // 接続マネージャーからセッションIDを取得
578
+ return this.connectionManager.getSessionId();
579
+ }
580
+ applyVoiceMute(muted) {
581
+ if (this.voiceMuted === muted) {
582
+ // 状態が変化しない場合は何もしない
583
+ return;
584
+ }
585
+ this.voiceMuted = muted;
586
+ this.logger.info(`Voice ${muted ? 'muted' : 'unmuted'}`);
587
+ // クライアントイベントとして通知
588
+ this.emit('voice:mute-changed', { muted });
589
+ }
590
+ async muteVoice(muted) {
591
+ this.logger.debug('Voice mute requested', { muted });
592
+ // Only emit to the event bus; state and public event are updated via subscription
593
+ this.eventBus.emit('voice:mute-changed', { muted });
594
+ }
595
+ async sendVoiceFrame(_pcm) {
596
+ if (this.voiceMuted) {
597
+ this.logger.debug('Ignoring voice frame because microphone is muted');
598
+ return;
599
+ }
600
+ // 実装は外部パッケージからランタイムでパッチされる
601
+ throw new Error('Voice functionality not available - enable voice first with enableVoice()');
602
+ }
603
+ // EventEmitterのメソッドをオーバーライド
604
+ on(event, listener) {
605
+ // EventEmitterは汎用的な型を期待するため、型変換が必要
606
+ // string型にキャストして、リスナーは関数型として扱う
607
+ return super.on(event, listener);
608
+ }
609
+ off(event, listener) {
610
+ // EventEmitterは汎用的な型を期待するため、型変換が必要
611
+ return super.off(event, listener);
612
+ }
613
+ }
614
+ /**
615
+ * Create MetatellClient instance
616
+ * @param options Client configuration
617
+ * @returns MetatellClient instance
618
+ * @throws {MetatellError} If configuration is invalid
619
+ */
620
+ export function createMetatellClient(options) {
621
+ // 設定バリデーション
622
+ if (!options.serverUrl || !options.roomId) {
623
+ throw new MetatellError('INVALID_CONFIG', 'serverUrl and roomId are required');
624
+ }
625
+ return new MetatellClientImpl(options);
626
+ }
627
+ //# sourceMappingURL=MetatellClientImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetatellClientImpl.js","sourceRoot":"","sources":["../../src/client/MetatellClientImpl.ts"],"names":[],"mappings":"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"}