@metatell/bot-sdk 0.0.1

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.
Files changed (45) hide show
  1. package/dist/client.d.ts +127 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +552 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/index.d.ts +12 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +17 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/pcm-utils.d.ts +19 -0
  10. package/dist/pcm-utils.d.ts.map +1 -0
  11. package/dist/pcm-utils.js +98 -0
  12. package/dist/pcm-utils.js.map +1 -0
  13. package/dist/sdk/AgentClient.d.ts +201 -0
  14. package/dist/sdk/AgentClient.d.ts.map +1 -0
  15. package/dist/sdk/AgentClient.js +404 -0
  16. package/dist/sdk/AgentClient.js.map +1 -0
  17. package/dist/sdk/errors.d.ts +36 -0
  18. package/dist/sdk/errors.d.ts.map +1 -0
  19. package/dist/sdk/errors.js +61 -0
  20. package/dist/sdk/errors.js.map +1 -0
  21. package/dist/sdk/logging/LogEventEmitter.d.ts +38 -0
  22. package/dist/sdk/logging/LogEventEmitter.d.ts.map +1 -0
  23. package/dist/sdk/logging/LogEventEmitter.js +54 -0
  24. package/dist/sdk/logging/LogEventEmitter.js.map +1 -0
  25. package/dist/sdk/logging/index.d.ts +22 -0
  26. package/dist/sdk/logging/index.d.ts.map +1 -0
  27. package/dist/sdk/logging/index.js +10 -0
  28. package/dist/sdk/logging/index.js.map +1 -0
  29. package/dist/sdk/logging/providers/default.d.ts +21 -0
  30. package/dist/sdk/logging/providers/default.d.ts.map +1 -0
  31. package/dist/sdk/logging/providers/default.js +171 -0
  32. package/dist/sdk/logging/providers/default.js.map +1 -0
  33. package/dist/sdk/logging/spi.d.ts +35 -0
  34. package/dist/sdk/logging/spi.d.ts.map +1 -0
  35. package/dist/sdk/logging/spi.js +30 -0
  36. package/dist/sdk/logging/spi.js.map +1 -0
  37. package/dist/sdk/rate.d.ts +36 -0
  38. package/dist/sdk/rate.d.ts.map +1 -0
  39. package/dist/sdk/rate.js +81 -0
  40. package/dist/sdk/rate.js.map +1 -0
  41. package/dist/types.d.ts +111 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +24 -0
  44. package/dist/types.js.map +1 -0
  45. package/package.json +34 -0
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Agent Client - facade for CLI/SDK usage
3
+ */
4
+ import { EventEmitter } from 'node:events';
5
+ // Realtime types will be defined locally to avoid circular dependencies
6
+ import { AnimationNotFoundError, AnimationPlaybackError, AnimationService, AvatarController, AvatarNotSpawnedError, ConfigurationProvider, ConnectionManager, CoreServiceFactory, MessageService, UserAvatarManager, } from '@metatell/bot-core';
7
+ import { getLogger } from './logging/index.js';
8
+ import { RateLimitedQueue } from './rate.js';
9
+ /**
10
+ * Default implementation using existing services
11
+ */
12
+ export class DefaultAgentClient extends EventEmitter {
13
+ avatarController;
14
+ messageService;
15
+ userAvatarManager;
16
+ connectionManager;
17
+ animationService;
18
+ // Voice transport functionality moved to consuming packages
19
+ rateLimiter = new RateLimitedQueue();
20
+ logger = getLogger('AgentClient');
21
+ factory;
22
+ voiceMuted = false;
23
+ status = {
24
+ connected: false,
25
+ connecting: false,
26
+ retries: 0,
27
+ };
28
+ lastConnectionOptions;
29
+ configProvider;
30
+ constructor(factory, config = {}) {
31
+ super();
32
+ this.factory = factory;
33
+ // コアサービスインターフェースのみに依存(型推論で取得)
34
+ this.avatarController = factory.getService(AvatarController);
35
+ this.messageService = factory.getService(MessageService);
36
+ this.userAvatarManager = factory.getService(UserAvatarManager);
37
+ this.connectionManager = factory.getService(ConnectionManager);
38
+ this.configProvider = factory.getService(ConfigurationProvider);
39
+ // Optional services
40
+ try {
41
+ this.animationService = factory.getService(AnimationService);
42
+ }
43
+ catch {
44
+ // Animation service is optional
45
+ this.logger.debug('Animation service not available');
46
+ }
47
+ // Voice transport functionality moved to consuming packages
48
+ // Setup event handlers for user join
49
+ this.setupEventHandlers();
50
+ // レート制限の設定
51
+ if (config.rateLimit?.messages) {
52
+ this.rateLimiter.setRate('messages', config.rateLimit.messages);
53
+ }
54
+ if (config.rateLimit?.moves) {
55
+ this.rateLimiter.setRate('moves', config.rateLimit.moves);
56
+ }
57
+ if (config.rateLimit?.looks) {
58
+ this.rateLimiter.setRate('looks', config.rateLimit.looks);
59
+ }
60
+ }
61
+ async connect(options) {
62
+ this.logger.info('Connecting to server', options);
63
+ this.status.connecting = true;
64
+ // 接続オプションを保存
65
+ this.lastConnectionOptions = options;
66
+ try {
67
+ let serverUrl;
68
+ let hubId;
69
+ // Use provided values or parse from URL
70
+ if (options.serverUrl && options.hubId) {
71
+ serverUrl = options.serverUrl;
72
+ hubId = options.hubId;
73
+ }
74
+ else {
75
+ // URLを解析してserverUrlとhubIdを取得
76
+ const url = new URL(options.url);
77
+ // HTTPSからWSSに変換
78
+ const protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
79
+ const port = url.port ? `:${url.port}` : '';
80
+ serverUrl = `${protocol}//${url.hostname}${port}`;
81
+ // hubIdを取得(パスから'/'を除去)
82
+ const pathParts = url.pathname.split('/').filter(Boolean);
83
+ hubId = pathParts[0];
84
+ if (!hubId) {
85
+ throw new Error('Invalid URL: hub ID not found');
86
+ }
87
+ }
88
+ // Connect through connection manager directly
89
+ await this.connectionManager.connect({
90
+ serverUrl,
91
+ hubId,
92
+ });
93
+ // セッションIDを取得
94
+ const sessionId = this.connectionManager.getSessionId();
95
+ this.status.sessionId = sessionId || undefined;
96
+ // ハブチャンネルが準備できるまで待機
97
+ let channel = this.connectionManager.getHubChannel();
98
+ let retries = 0;
99
+ while (!channel && retries < 50) {
100
+ // 最大5秒待機
101
+ await new Promise((resolve) => setTimeout(resolve, 100));
102
+ channel = this.connectionManager.getHubChannel();
103
+ retries++;
104
+ }
105
+ if (!channel) {
106
+ throw new Error('Failed to get hub channel after connection');
107
+ }
108
+ // Send room entry events
109
+ channel.push('events:entering', {});
110
+ channel.push('events:entered', {
111
+ initialOccupantCount: 0,
112
+ isNewDaily: true,
113
+ isNewMonthly: true,
114
+ isNewDayWindow: true,
115
+ isNewMonthWindow: true,
116
+ entryDisplayType: 'Bot',
117
+ userAgent: 'MetatellBot/1.0',
118
+ });
119
+ // Get avatar configuration and spawn
120
+ const configProvider = this.factory.getService(ConfigurationProvider);
121
+ const config = configProvider.getConfiguration();
122
+ if (config.profile.avatarId) {
123
+ this.logger.debug('Spawning avatar', {
124
+ avatarId: config.profile.avatarId,
125
+ organizationAvatarUrl: config.organizationAvatarUrl,
126
+ });
127
+ await this.avatarController.spawn(config.profile.avatarId, undefined, config.organizationAvatarUrl);
128
+ }
129
+ // Voice connection functionality moved to consuming packages
130
+ this.status.connected = true;
131
+ this.status.connecting = false;
132
+ this.logger.info('Connected successfully', {
133
+ serverUrl,
134
+ hubId,
135
+ sessionId: this.status.sessionId,
136
+ voiceEnabled: false, // Voice functionality moved to consuming packages
137
+ });
138
+ }
139
+ catch (error) {
140
+ this.status.connecting = false;
141
+ this.status.retries++;
142
+ this.logger.error('Connection failed', { error });
143
+ throw error;
144
+ }
145
+ }
146
+ async disconnect() {
147
+ this.logger.info('Disconnecting from server');
148
+ // Voice disconnection functionality moved to consuming packages
149
+ await this.connectionManager.disconnect();
150
+ this.status.connected = false;
151
+ this.status.room = undefined;
152
+ this.status.sessionId = undefined;
153
+ }
154
+ async join(room) {
155
+ this.logger.info('Joining room', { room });
156
+ // 既に接続されている場合は、一旦切断してから再接続
157
+ if (this.status.connected) {
158
+ await this.disconnect();
159
+ }
160
+ // 新しいroomに接続
161
+ const config = this.configProvider.getConfiguration();
162
+ const newUrl = config.hubUrl.replace(/\/[^/]+\/$/, `/${room}/`); // URLのroom部分を更新
163
+ if (this.lastConnectionOptions?.url) {
164
+ // URL形式の接続オプションを使用
165
+ await this.connect({
166
+ url: newUrl,
167
+ token: this.lastConnectionOptions.token,
168
+ voice: this.lastConnectionOptions.voice,
169
+ });
170
+ }
171
+ else if (this.lastConnectionOptions) {
172
+ // 個別パラメータ形式の接続オプションを使用
173
+ await this.connect({
174
+ ...this.lastConnectionOptions,
175
+ hubId: room,
176
+ hubUrl: newUrl,
177
+ });
178
+ }
179
+ else {
180
+ // 新規接続
181
+ await this.connect({
182
+ url: newUrl,
183
+ });
184
+ }
185
+ this.status.room = room;
186
+ }
187
+ async leave() {
188
+ this.logger.info('Leaving room');
189
+ if (this.status.connected) {
190
+ await this.disconnect();
191
+ }
192
+ this.status.room = undefined;
193
+ }
194
+ getStatus() {
195
+ return { ...this.status };
196
+ }
197
+ async send(message) {
198
+ return this.rateLimiter.execute('messages', async () => {
199
+ await this.messageService.sendMessage(message);
200
+ });
201
+ }
202
+ // Alias for send
203
+ async say(message) {
204
+ return this.send(message);
205
+ }
206
+ async move(position) {
207
+ return this.rateLimiter.execute('moves', async () => {
208
+ this.logger.debug('Moving avatar', position);
209
+ await this.avatarController.move(position);
210
+ });
211
+ }
212
+ async look(target) {
213
+ return this.rateLimiter.execute('looks', async () => {
214
+ if ('userId' in target) {
215
+ this.logger.debug('Looking at user', { userId: target.userId });
216
+ const user = this.userAvatarManager.getUser(target.userId);
217
+ if (!user) {
218
+ throw new Error(`User not found: ${target.userId}`);
219
+ }
220
+ await this.lookAtPosition(user.position);
221
+ }
222
+ else {
223
+ this.logger.debug('Looking at position', target);
224
+ await this.lookAtPosition(target);
225
+ }
226
+ });
227
+ }
228
+ async lookAtNearest() {
229
+ return this.rateLimiter.execute('looks', async () => {
230
+ this.logger.debug('Looking at nearest user');
231
+ const currentState = this.avatarController.getState();
232
+ if (!currentState) {
233
+ throw new Error('Avatar not spawned');
234
+ }
235
+ const nearestUser = this.userAvatarManager.getNearestUser(currentState.position);
236
+ if (!nearestUser) {
237
+ throw new Error('No users found');
238
+ }
239
+ await this.lookAtPosition(nearestUser.position);
240
+ });
241
+ }
242
+ async lookAtPosition(target) {
243
+ const currentState = this.avatarController.getState();
244
+ if (!currentState) {
245
+ throw new Error('Avatar not spawned');
246
+ }
247
+ // 向く方向を計算(Y軸回転のみ)
248
+ const dx = target.x - currentState.position.x;
249
+ const dz = target.z - currentState.position.z;
250
+ const angle = Math.atan2(dx, dz);
251
+ // クォータニオンに変換(Y軸回転)
252
+ const rotation = {
253
+ x: 0,
254
+ y: Math.sin(angle / 2),
255
+ z: 0,
256
+ w: Math.cos(angle / 2),
257
+ };
258
+ await this.avatarController.rotate(rotation);
259
+ }
260
+ getUsers() {
261
+ return this.userAvatarManager.getUsers();
262
+ }
263
+ getUser(id) {
264
+ return this.userAvatarManager.getUser(id);
265
+ }
266
+ getUsersNearby(radius) {
267
+ const avatarState = this.avatarController.getState();
268
+ if (!avatarState)
269
+ return [];
270
+ return this.userAvatarManager.getUsersInRange(avatarState.position, radius);
271
+ }
272
+ on(event, handler) {
273
+ super.on(event, handler);
274
+ return this;
275
+ }
276
+ off(event, handler) {
277
+ super.off(event, handler);
278
+ return this;
279
+ }
280
+ // Override EventEmitter methods to return this for chaining
281
+ addListener(eventName, listener) {
282
+ super.addListener(eventName, listener);
283
+ return this;
284
+ }
285
+ removeListener(eventName, listener) {
286
+ super.removeListener(eventName, listener);
287
+ return this;
288
+ }
289
+ setRateLimit(key, perSecond) {
290
+ this.rateLimiter.setRate(key, perSecond);
291
+ }
292
+ getRateLimit(key) {
293
+ return this.rateLimiter.getRate(key);
294
+ }
295
+ /**
296
+ * Play animation on avatar
297
+ */
298
+ async playAnimation(animationId, options) {
299
+ try {
300
+ const result = await this.avatarController.playAnimation(animationId, options);
301
+ this.logger.info('Animation played', {
302
+ animationId,
303
+ playbackId: result.playbackId,
304
+ });
305
+ return result;
306
+ }
307
+ catch (error) {
308
+ // Convert to specific error types
309
+ if (error instanceof AvatarNotSpawnedError) {
310
+ throw error;
311
+ }
312
+ if (error instanceof AnimationNotFoundError) {
313
+ throw error;
314
+ }
315
+ throw new AnimationPlaybackError(`Failed to play animation: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
316
+ }
317
+ }
318
+ /**
319
+ * Stop current animation
320
+ */
321
+ async stopAnimation() {
322
+ await this.avatarController.stopAnimation();
323
+ this.logger.debug('Animation stopped');
324
+ }
325
+ /**
326
+ * Get available animations
327
+ */
328
+ async getAvailableAnimations() {
329
+ if (!this.animationService) {
330
+ // Return empty array if animation service not available
331
+ this.logger.warn('Animation service not available');
332
+ return [];
333
+ }
334
+ const config = this.factory.getService(ConfigurationProvider);
335
+ const avatarId = config.getConfiguration().profile.avatarId;
336
+ if (!avatarId) {
337
+ this.logger.warn('No avatar ID configured');
338
+ return [];
339
+ }
340
+ try {
341
+ return await this.animationService.getAvailableAnimations(avatarId);
342
+ }
343
+ catch (error) {
344
+ this.logger.error('Failed to get available animations', { error });
345
+ return [];
346
+ }
347
+ }
348
+ /**
349
+ * Get current animation
350
+ */
351
+ getCurrentAnimation() {
352
+ return this.avatarController.getCurrentAnimation();
353
+ }
354
+ /**
355
+ * Send voice frame (stub - implementation moved to consuming packages)
356
+ */
357
+ async sendVoiceFrame(_pcmData) {
358
+ throw new Error('Voice functionality not available in SDK core - use consuming package implementation');
359
+ }
360
+ /**
361
+ * Mute/unmute voice (stub - implementation moved to consuming packages)
362
+ */
363
+ async muteVoice(muted) {
364
+ this.voiceMuted = muted;
365
+ this.logger.debug(`Voice ${muted ? 'muted' : 'unmuted'} - functionality moved to consuming packages`);
366
+ }
367
+ /**
368
+ * Check if voice is muted
369
+ */
370
+ isVoiceMuted() {
371
+ return this.voiceMuted;
372
+ }
373
+ // Voice connection functionality moved to consuming packages
374
+ setupEventHandlers() {
375
+ // Listen for user join events to resync avatar
376
+ this.userAvatarManager.on('userJoined', async (user) => {
377
+ // Resync avatar for new users so they can see the bot
378
+ const currentState = this.avatarController.getState();
379
+ if (currentState) {
380
+ try {
381
+ await this.avatarController.resyncAvatar();
382
+ this.logger.debug(`Resynced avatar for new user: ${user.nickname}`);
383
+ }
384
+ catch (error) {
385
+ this.logger.error('Failed to resync avatar:', { error, user: user.nickname });
386
+ }
387
+ }
388
+ });
389
+ }
390
+ }
391
+ /**
392
+ * Factory function to create agent client
393
+ */
394
+ export function createAgentClient(config, clientConfig) {
395
+ const factory = new CoreServiceFactory(config);
396
+ return new DefaultAgentClient(factory, clientConfig);
397
+ }
398
+ /**
399
+ * Factory function to create agent client with existing factory
400
+ */
401
+ export function createAgentClientWithFactory(factory, clientConfig) {
402
+ return new DefaultAgentClient(factory, clientConfig);
403
+ }
404
+ //# sourceMappingURL=AgentClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentClient.js","sourceRoot":"","sources":["../../src/sdk/AgentClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SDK error definitions
3
+ */
4
+ export declare abstract class MetatellError extends Error {
5
+ abstract readonly code: string;
6
+ readonly timestamp: Date;
7
+ constructor(message: string);
8
+ }
9
+ export declare class AuthenticationError extends MetatellError {
10
+ readonly status?: number | undefined;
11
+ readonly code = "AUTH_ERROR";
12
+ constructor(message: string, status?: number | undefined);
13
+ }
14
+ export declare class RateLimitedError extends MetatellError {
15
+ readonly retryAfterMs?: number | undefined;
16
+ readonly code = "RATE_LIMITED";
17
+ constructor(message: string, retryAfterMs?: number | undefined);
18
+ }
19
+ export declare class TransportError extends MetatellError {
20
+ readonly reason?: string | undefined;
21
+ readonly code = "TRANSPORT_ERROR";
22
+ constructor(message: string, reason?: string | undefined);
23
+ }
24
+ export declare class ProtocolError extends MetatellError {
25
+ readonly data?: unknown | undefined;
26
+ readonly code = "PROTOCOL_ERROR";
27
+ constructor(message: string, data?: unknown | undefined);
28
+ }
29
+ export declare class TimeoutError extends MetatellError {
30
+ readonly timeoutMs: number;
31
+ readonly code = "TIMEOUT_ERROR";
32
+ constructor(message: string, timeoutMs: number);
33
+ }
34
+ export declare function isMetatellError(error: unknown): error is MetatellError;
35
+ export declare function isRetryableError(error: unknown): boolean;
36
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/sdk/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8BAAsB,aAAc,SAAQ,KAAK;IAC/C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,SAAS,OAAa;gBAEnB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;aAKlC,MAAM,CAAC,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,gBAAe;gBAG1B,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA;CAIlC;AAED,qBAAa,gBAAiB,SAAQ,aAAa;aAK/B,YAAY,CAAC,EAAE,MAAM;IAJvC,QAAQ,CAAC,IAAI,kBAAiB;gBAG5B,OAAO,EAAE,MAAM,EACC,YAAY,CAAC,EAAE,MAAM,YAAA;CAIxC;AAED,qBAAa,cAAe,SAAQ,aAAa;aAK7B,MAAM,CAAC,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,qBAAoB;gBAG/B,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA;CAIlC;AAED,qBAAa,aAAc,SAAQ,aAAa;aAK5B,IAAI,CAAC,EAAE,OAAO;IAJhC,QAAQ,CAAC,IAAI,oBAAmB;gBAG9B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,OAAO,YAAA;CAIjC;AAED,qBAAa,YAAa,SAAQ,aAAa;aAK3B,SAAS,EAAE,MAAM;IAJnC,QAAQ,CAAC,IAAI,mBAAkB;gBAG7B,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,MAAM;CAIpC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQxD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * SDK error definitions
3
+ */
4
+ export class MetatellError extends Error {
5
+ timestamp = new Date();
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = this.constructor.name;
9
+ }
10
+ }
11
+ export class AuthenticationError extends MetatellError {
12
+ status;
13
+ code = 'AUTH_ERROR';
14
+ constructor(message, status) {
15
+ super(message);
16
+ this.status = status;
17
+ }
18
+ }
19
+ export class RateLimitedError extends MetatellError {
20
+ retryAfterMs;
21
+ code = 'RATE_LIMITED';
22
+ constructor(message, retryAfterMs) {
23
+ super(message);
24
+ this.retryAfterMs = retryAfterMs;
25
+ }
26
+ }
27
+ export class TransportError extends MetatellError {
28
+ reason;
29
+ code = 'TRANSPORT_ERROR';
30
+ constructor(message, reason) {
31
+ super(message);
32
+ this.reason = reason;
33
+ }
34
+ }
35
+ export class ProtocolError extends MetatellError {
36
+ data;
37
+ code = 'PROTOCOL_ERROR';
38
+ constructor(message, data) {
39
+ super(message);
40
+ this.data = data;
41
+ }
42
+ }
43
+ export class TimeoutError extends MetatellError {
44
+ timeoutMs;
45
+ code = 'TIMEOUT_ERROR';
46
+ constructor(message, timeoutMs) {
47
+ super(message);
48
+ this.timeoutMs = timeoutMs;
49
+ }
50
+ }
51
+ export function isMetatellError(error) {
52
+ return error instanceof MetatellError;
53
+ }
54
+ export function isRetryableError(error) {
55
+ if (!isMetatellError(error))
56
+ return false;
57
+ return (error instanceof TransportError ||
58
+ error instanceof TimeoutError ||
59
+ (error instanceof RateLimitedError && error.retryAfterMs !== undefined));
60
+ }
61
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/sdk/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAgB,aAAc,SAAQ,KAAK;IAEtC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IAE/B,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAKlC;IAJT,IAAI,GAAG,YAAY,CAAA;IAE5B,YACE,OAAe,EACC,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,WAAM,GAAN,MAAM,CAAS;IAGjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IAK/B;IAJT,IAAI,GAAG,cAAc,CAAA;IAE9B,YACE,OAAe,EACC,YAAqB;QAErC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,iBAAY,GAAZ,YAAY,CAAS;IAGvC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;IAK7B;IAJT,IAAI,GAAG,iBAAiB,CAAA;IAEjC,YACE,OAAe,EACC,MAAe;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,WAAM,GAAN,MAAM,CAAS;IAGjC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,aAAa;IAK5B;IAJT,IAAI,GAAG,gBAAgB,CAAA;IAEhC,YACE,OAAe,EACC,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,SAAI,GAAJ,IAAI,CAAU;IAGhC,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAK3B;IAJT,IAAI,GAAG,eAAe,CAAA;IAE/B,YACE,OAAe,EACC,SAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFE,cAAS,GAAT,SAAS,CAAQ;IAGnC,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,aAAa,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEzC,OAAO,CACL,KAAK,YAAY,cAAc;QAC/B,KAAK,YAAY,YAAY;QAC7B,CAAC,KAAK,YAAY,gBAAgB,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CACxE,CAAA;AACH,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Event emitter for log-related events
3
+ * Provides reactive log updates to consumers
4
+ */
5
+ import type { CoreLogRecord } from './index.js';
6
+ export type LogEventHandler = (records: CoreLogRecord[]) => void;
7
+ export interface ILogEventEmitter {
8
+ /**
9
+ * Subscribe to new log events
10
+ */
11
+ onNewLogs(handler: LogEventHandler): () => void;
12
+ /**
13
+ * Emit new log records
14
+ */
15
+ emitNewLogs(records: CoreLogRecord[]): void;
16
+ /**
17
+ * Remove all log event listeners
18
+ */
19
+ removeAllListeners(): void;
20
+ }
21
+ /**
22
+ * Implementation of log event emitter
23
+ */
24
+ export declare class LogEventEmitter implements ILogEventEmitter {
25
+ private handlers;
26
+ onNewLogs(handler: LogEventHandler): () => void;
27
+ emitNewLogs(records: CoreLogRecord[]): void;
28
+ removeAllListeners(): void;
29
+ }
30
+ /**
31
+ * Get the global log event emitter
32
+ */
33
+ export declare function getLogEventEmitter(): ILogEventEmitter;
34
+ /**
35
+ * Reset the log event emitter (mainly for testing)
36
+ */
37
+ export declare function resetLogEventEmitter(): void;
38
+ //# sourceMappingURL=LogEventEmitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogEventEmitter.d.ts","sourceRoot":"","sources":["../../../src/sdk/logging/LogEventEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,CAAA;AAEhE,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,IAAI,CAAA;IAE/C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;IAE3C;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAAA;CAC3B;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAkC;IAElD,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,IAAI;IAS/C,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI;IAa3C,kBAAkB,IAAI,IAAI;CAG3B;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CAKrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Event emitter for log-related events
3
+ * Provides reactive log updates to consumers
4
+ */
5
+ /**
6
+ * Implementation of log event emitter
7
+ */
8
+ export class LogEventEmitter {
9
+ handlers = new Set();
10
+ onNewLogs(handler) {
11
+ this.handlers.add(handler);
12
+ // Return unsubscribe function
13
+ return () => {
14
+ this.handlers.delete(handler);
15
+ };
16
+ }
17
+ emitNewLogs(records) {
18
+ if (records.length === 0)
19
+ return;
20
+ // Notify all handlers
21
+ for (const handler of this.handlers) {
22
+ try {
23
+ handler(records);
24
+ }
25
+ catch (error) {
26
+ console.error('Error in log event handler:', error);
27
+ }
28
+ }
29
+ }
30
+ removeAllListeners() {
31
+ this.handlers.clear();
32
+ }
33
+ }
34
+ // Global singleton instance
35
+ let globalLogEventEmitter = null;
36
+ /**
37
+ * Get the global log event emitter
38
+ */
39
+ export function getLogEventEmitter() {
40
+ if (!globalLogEventEmitter) {
41
+ globalLogEventEmitter = new LogEventEmitter();
42
+ }
43
+ return globalLogEventEmitter;
44
+ }
45
+ /**
46
+ * Reset the log event emitter (mainly for testing)
47
+ */
48
+ export function resetLogEventEmitter() {
49
+ if (globalLogEventEmitter) {
50
+ globalLogEventEmitter.removeAllListeners();
51
+ }
52
+ globalLogEventEmitter = null;
53
+ }
54
+ //# sourceMappingURL=LogEventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogEventEmitter.js","sourceRoot":"","sources":["../../../src/sdk/logging/LogEventEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH;;GAEG;AACH,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAyB,IAAI,GAAG,EAAE,CAAA;IAElD,SAAS,CAAC,OAAwB;QAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAE1B,8BAA8B;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC,CAAA;IACH,CAAC;IAED,WAAW,CAAC,OAAwB;QAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAEhC,sBAAsB;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;CACF;AAED,4BAA4B;AAC5B,IAAI,qBAAqB,GAA4B,IAAI,CAAA;AAEzD;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAA;IAC/C,CAAC;IACD,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,qBAAqB,EAAE,CAAC;QAC1B,qBAAqB,CAAC,kBAAkB,EAAE,CAAA;IAC5C,CAAC;IACD,qBAAqB,GAAG,IAAI,CAAA;AAC9B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SDK Logging module - SPI and default implementation
3
+ */
4
+ export { getLogEventEmitter, type ILogEventEmitter, type LogEventHandler, resetLogEventEmitter, } from './LogEventEmitter.js';
5
+ export { DefaultLoggerProvider, getRingBuffer } from './providers/default.js';
6
+ export * from './spi.js';
7
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
8
+ export interface LogRecord {
9
+ ts: number;
10
+ level: LogLevel;
11
+ module: string;
12
+ msg: string;
13
+ meta?: unknown;
14
+ }
15
+ export interface RingBufferLike {
16
+ drain(): LogRecord[];
17
+ drainNew?(): LogRecord[];
18
+ clear(): void;
19
+ size(): number;
20
+ }
21
+ export type { LogRecord as CoreLogRecord };
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/logging/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE7E,cAAc,UAAU,CAAA;AAGxB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,QAAQ,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,SAAS,EAAE,CAAA;IACpB,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAA;IACxB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,MAAM,CAAA;CACf;AAGD,YAAY,EAAE,SAAS,IAAI,aAAa,EAAE,CAAA"}