@bernierllc/chat-suite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.eslintrc.js +26 -0
  2. package/README.md +542 -0
  3. package/__tests__/integration/ChatSuite.test.ts +235 -0
  4. package/__tests__/unit/ConfigManager.test.ts +122 -0
  5. package/__tests__/unit/MessageOrchestrator.test.ts +223 -0
  6. package/__tests__/unit/UserManager.test.ts +208 -0
  7. package/dist/ChatSuite.d.ts +76 -0
  8. package/dist/ChatSuite.d.ts.map +1 -0
  9. package/dist/ChatSuite.js +273 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +37 -0
  13. package/dist/neverhub/discovery.d.ts +40 -0
  14. package/dist/neverhub/discovery.d.ts.map +1 -0
  15. package/dist/neverhub/discovery.js +106 -0
  16. package/dist/neverhub/event-handlers.d.ts +38 -0
  17. package/dist/neverhub/event-handlers.d.ts.map +1 -0
  18. package/dist/neverhub/event-handlers.js +125 -0
  19. package/dist/neverhub/index.d.ts +4 -0
  20. package/dist/neverhub/index.d.ts.map +1 -0
  21. package/dist/neverhub/index.js +26 -0
  22. package/dist/neverhub/service-registration.d.ts +29 -0
  23. package/dist/neverhub/service-registration.d.ts.map +1 -0
  24. package/dist/neverhub/service-registration.js +66 -0
  25. package/dist/providers/ChatKitProvider.d.ts +53 -0
  26. package/dist/providers/ChatKitProvider.d.ts.map +1 -0
  27. package/dist/providers/ChatKitProvider.js +167 -0
  28. package/dist/providers/ExternalProviders.d.ts +101 -0
  29. package/dist/providers/ExternalProviders.d.ts.map +1 -0
  30. package/dist/providers/ExternalProviders.js +153 -0
  31. package/dist/providers/index.d.ts +3 -0
  32. package/dist/providers/index.d.ts.map +1 -0
  33. package/dist/providers/index.js +25 -0
  34. package/dist/services/ConfigManager.d.ts +50 -0
  35. package/dist/services/ConfigManager.d.ts.map +1 -0
  36. package/dist/services/ConfigManager.js +95 -0
  37. package/dist/services/HealthMonitor.d.ts +58 -0
  38. package/dist/services/HealthMonitor.d.ts.map +1 -0
  39. package/dist/services/HealthMonitor.js +148 -0
  40. package/dist/services/MessageOrchestrator.d.ts +63 -0
  41. package/dist/services/MessageOrchestrator.d.ts.map +1 -0
  42. package/dist/services/MessageOrchestrator.js +212 -0
  43. package/dist/services/ProviderManager.d.ts +83 -0
  44. package/dist/services/ProviderManager.d.ts.map +1 -0
  45. package/dist/services/ProviderManager.js +204 -0
  46. package/dist/services/UserManager.d.ts +61 -0
  47. package/dist/services/UserManager.d.ts.map +1 -0
  48. package/dist/services/UserManager.js +141 -0
  49. package/dist/services/index.d.ts +6 -0
  50. package/dist/services/index.d.ts.map +1 -0
  51. package/dist/services/index.js +28 -0
  52. package/dist/types/index.d.ts +4 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/index.js +26 -0
  55. package/dist/types/message-types.d.ts +80 -0
  56. package/dist/types/message-types.d.ts.map +1 -0
  57. package/dist/types/message-types.js +32 -0
  58. package/dist/types/provider-types.d.ts +96 -0
  59. package/dist/types/provider-types.d.ts.map +1 -0
  60. package/dist/types/provider-types.js +9 -0
  61. package/dist/types/suite-types.d.ts +101 -0
  62. package/dist/types/suite-types.d.ts.map +1 -0
  63. package/dist/types/suite-types.js +9 -0
  64. package/dist/utils/config-inheritance.d.ts +24 -0
  65. package/dist/utils/config-inheritance.d.ts.map +1 -0
  66. package/dist/utils/config-inheritance.js +167 -0
  67. package/dist/utils/error-handling.d.ts +37 -0
  68. package/dist/utils/error-handling.d.ts.map +1 -0
  69. package/dist/utils/error-handling.js +102 -0
  70. package/dist/utils/index.d.ts +5 -0
  71. package/dist/utils/index.d.ts.map +1 -0
  72. package/dist/utils/index.js +27 -0
  73. package/dist/utils/message-bridge.d.ts +68 -0
  74. package/dist/utils/message-bridge.d.ts.map +1 -0
  75. package/dist/utils/message-bridge.js +126 -0
  76. package/dist/utils/user-mapping.d.ts +63 -0
  77. package/dist/utils/user-mapping.d.ts.map +1 -0
  78. package/dist/utils/user-mapping.js +110 -0
  79. package/jest.config.cjs +30 -0
  80. package/package.json +67 -0
  81. package/src/ChatSuite.ts +347 -0
  82. package/src/index.ts +25 -0
  83. package/src/neverhub/discovery.ts +137 -0
  84. package/src/neverhub/event-handlers.ts +141 -0
  85. package/src/neverhub/index.ts +11 -0
  86. package/src/neverhub/service-registration.ts +89 -0
  87. package/src/providers/ChatKitProvider.ts +193 -0
  88. package/src/providers/ExternalProviders.ts +171 -0
  89. package/src/providers/index.ts +10 -0
  90. package/src/services/ConfigManager.ts +112 -0
  91. package/src/services/HealthMonitor.ts +169 -0
  92. package/src/services/MessageOrchestrator.ts +271 -0
  93. package/src/services/ProviderManager.ts +247 -0
  94. package/src/services/UserManager.ts +176 -0
  95. package/src/services/index.ts +13 -0
  96. package/src/types/index.ts +11 -0
  97. package/src/types/message-types.ts +94 -0
  98. package/src/types/provider-types.ts +116 -0
  99. package/src/types/suite-types.ts +117 -0
  100. package/src/utils/config-inheritance.ts +189 -0
  101. package/src/utils/error-handling.ts +114 -0
  102. package/src/utils/index.ts +12 -0
  103. package/src/utils/message-bridge.ts +164 -0
  104. package/src/utils/user-mapping.ts +132 -0
  105. package/tsconfig.json +31 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,26 @@
1
+ /*
2
+ Copyright (c) 2025 Bernier LLC
3
+
4
+ This file is licensed to the client under a limited-use license.
5
+ The client may use and modify this code *only within the scope of the project it was delivered for*.
6
+ Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
7
+ */
8
+
9
+ module.exports = {
10
+ parser: '@typescript-eslint/parser',
11
+ extends: [
12
+ 'eslint:recommended',
13
+ 'plugin:@typescript-eslint/recommended'
14
+ ],
15
+ parserOptions: {
16
+ ecmaVersion: 2020,
17
+ sourceType: 'module',
18
+ project: './tsconfig.json'
19
+ },
20
+ rules: {
21
+ '@typescript-eslint/explicit-module-boundary-types': 'error',
22
+ '@typescript-eslint/no-explicit-any': 'error',
23
+ '@typescript-eslint/no-unused-vars': 'error',
24
+ 'no-console': 'off'
25
+ }
26
+ };
package/README.md ADDED
@@ -0,0 +1,542 @@
1
+ # @bernierllc/chat-suite
2
+
3
+ Comprehensive chat orchestration suite with AI-powered routing and multi-provider support.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @bernierllc/chat-suite
9
+ ```
10
+
11
+ ## Overview
12
+
13
+ The Chat Suite provides a unified interface for orchestrating multiple chat providers (ChatKit, Slack, Discord, Teams) with AI-powered routing, analytics, and NeverHub integration. It handles cross-platform message bridging, user management, health monitoring, and intelligent message routing.
14
+
15
+ ## Features
16
+
17
+ - **Multi-Provider Orchestration** - Unified interface for multiple chat platforms
18
+ - **AI-Powered Routing** - Intelligent message routing based on intent analysis
19
+ - **Cross-Platform Bridging** - Seamless message flow between platforms
20
+ - **User Management** - Unified user identity across all platforms
21
+ - **Health Monitoring** - Real-time health status of all providers
22
+ - **NeverHub Integration** - Service discovery and event orchestration
23
+ - **Analytics Integration** - Comprehensive usage metrics and insights
24
+ - **Graceful Degradation** - Works with minimal configuration
25
+
26
+ ## Quick Start
27
+
28
+ ### Minimal Configuration (ChatKit Only)
29
+
30
+ ```typescript
31
+ import { ChatSuite } from '@bernierllc/chat-suite';
32
+
33
+ const chatSuite = new ChatSuite({
34
+ providers: {
35
+ chatkit: {
36
+ enabled: true,
37
+ priority: 1,
38
+ config: {
39
+ serviceName: 'chatkit-adapter'
40
+ }
41
+ }
42
+ }
43
+ });
44
+
45
+ await chatSuite.initialize();
46
+
47
+ // Send a message
48
+ const result = await chatSuite.sendMessage('chatkit', {
49
+ content: 'Hello from the chat suite!',
50
+ userId: 'user123'
51
+ });
52
+
53
+ console.log('Message sent:', result.data?.messageId);
54
+ ```
55
+
56
+ ### Full Configuration (Multiple Providers)
57
+
58
+ ```typescript
59
+ import { ChatSuite } from '@bernierllc/chat-suite';
60
+
61
+ const chatSuite = new ChatSuite({
62
+ enabled: true,
63
+
64
+ providers: {
65
+ chatkit: {
66
+ enabled: true,
67
+ priority: 1,
68
+ config: {
69
+ serviceName: 'chatkit-adapter',
70
+ features: ['streaming', 'attachments', 'threads']
71
+ }
72
+ },
73
+ slack: {
74
+ enabled: true,
75
+ priority: 2,
76
+ config: {
77
+ serviceName: 'chat-integration-slack',
78
+ channels: ['#general', '#dev']
79
+ }
80
+ }
81
+ },
82
+
83
+ aiRouting: {
84
+ enabled: true,
85
+ serviceName: 'chat-ai-router',
86
+ fallbackToHuman: true,
87
+ intentThreshold: 0.8
88
+ },
89
+
90
+ analytics: {
91
+ enabled: true,
92
+ serviceName: 'chat-analytics',
93
+ metricsInterval: 60000
94
+ },
95
+
96
+ neverhub: {
97
+ enabled: true,
98
+ serviceName: 'chat-suite',
99
+ capabilities: [
100
+ { type: 'chat', name: 'multi-provider-chat', version: '1.0.0' },
101
+ { type: 'orchestration', name: 'chat-orchestration', version: '1.0.0' }
102
+ ],
103
+ dependencies: ['chat-provider-*', 'chat-ai-router', 'chat-analytics']
104
+ }
105
+ });
106
+
107
+ await chatSuite.initialize();
108
+ ```
109
+
110
+ ## Core Concepts
111
+
112
+ ### Providers
113
+
114
+ Providers are chat platform adapters that implement a common interface:
115
+
116
+ - **ChatKit** (Required) - Primary chat provider using `@bernierllc/chatkit-adapter`
117
+ - **Slack** (Optional) - Requires `@bernierllc/chat-integration-slack`
118
+ - **Discord** (Optional) - Requires `@bernierllc/chat-integration-discord`
119
+ - **Teams** (Optional) - Requires `@bernierllc/chat-integration-teams`
120
+
121
+ ### Priority System
122
+
123
+ Providers are assigned priorities (1 = highest). Messages are routed to the highest priority available provider unless specified otherwise.
124
+
125
+ ### Message Orchestration
126
+
127
+ The suite coordinates messages across providers, handling:
128
+ - Message queueing and delivery
129
+ - Cross-platform bridging
130
+ - Retry logic with exponential backoff
131
+ - Error handling and recovery
132
+
133
+ ## API Reference
134
+
135
+ ### ChatSuite
136
+
137
+ Main orchestration class.
138
+
139
+ #### `constructor(config?: Partial<ChatSuiteConfig>)`
140
+
141
+ Create a new chat suite instance.
142
+
143
+ ```typescript
144
+ const suite = new ChatSuite({
145
+ providers: {
146
+ chatkit: { enabled: true, priority: 1, config: {} }
147
+ }
148
+ });
149
+ ```
150
+
151
+ #### `async initialize(): Promise<SuiteInitResult>`
152
+
153
+ Initialize the chat suite and all enabled providers.
154
+
155
+ ```typescript
156
+ const result = await suite.initialize();
157
+ console.log('Initialized providers:', result.providersInitialized);
158
+ ```
159
+
160
+ #### `async sendMessage(providerType, message): Promise<SuiteResult<ProviderMessageResult>>`
161
+
162
+ Send a message through a specific provider.
163
+
164
+ ```typescript
165
+ const result = await suite.sendMessage('chatkit', {
166
+ content: 'Hello!',
167
+ userId: 'user123',
168
+ channelId: 'channel456'
169
+ });
170
+ ```
171
+
172
+ #### `async broadcastMessage(config): Promise<SuiteResult<ProviderMessageResult[]>>`
173
+
174
+ Broadcast a message to multiple providers.
175
+
176
+ ```typescript
177
+ const result = await suite.broadcastMessage({
178
+ content: 'Important announcement!',
179
+ platforms: ['chatkit', 'slack'],
180
+ channels: ['#announcements'],
181
+ priority: MessagePriority.HIGH
182
+ });
183
+ ```
184
+
185
+ #### `async getHealth(): Promise<ChatSuiteHealth>`
186
+
187
+ Get health status of all providers.
188
+
189
+ ```typescript
190
+ const health = await suite.getHealth();
191
+ console.log('Suite status:', health.status);
192
+ console.log('Provider health:', health.providers);
193
+ ```
194
+
195
+ #### `getUserManager(): UserManager`
196
+
197
+ Get the user manager for cross-platform user management.
198
+
199
+ ```typescript
200
+ const userManager = suite.getUserManager();
201
+
202
+ userManager.registerUser({
203
+ provider: 'chatkit',
204
+ platformUserId: 'chatkit123',
205
+ displayName: 'John Doe',
206
+ email: 'john@example.com'
207
+ });
208
+ ```
209
+
210
+ #### `getConfigManager(): ConfigManager`
211
+
212
+ Get the configuration manager.
213
+
214
+ ```typescript
215
+ const configManager = suite.getConfigManager();
216
+
217
+ configManager.updateConfig({
218
+ analytics: { enabled: false }
219
+ });
220
+ ```
221
+
222
+ #### `async shutdown(): Promise<void>`
223
+
224
+ Shutdown the chat suite and all providers.
225
+
226
+ ```typescript
227
+ await suite.shutdown();
228
+ ```
229
+
230
+ ### UserManager
231
+
232
+ Cross-platform user identity management.
233
+
234
+ ```typescript
235
+ const userManager = suite.getUserManager();
236
+
237
+ // Register a user
238
+ const result = userManager.registerUser({
239
+ provider: 'chatkit',
240
+ platformUserId: 'chatkit123',
241
+ displayName: 'Alice',
242
+ email: 'alice@example.com'
243
+ });
244
+
245
+ const unifiedId = result.data?.unifiedId;
246
+
247
+ // Link another platform
248
+ userManager.linkPlatform(unifiedId!, 'slack', 'slack456');
249
+
250
+ // Get unified ID from platform ID
251
+ const id = userManager.getUnifiedId('chatkit', 'chatkit123');
252
+
253
+ // Search users
254
+ const users = userManager.searchUsers('Alice');
255
+ ```
256
+
257
+ ## Usage Examples
258
+
259
+ ### Basic Chat Operations
260
+
261
+ ```typescript
262
+ import { ChatSuite, MessagePriority } from '@bernierllc/chat-suite';
263
+
264
+ const suite = new ChatSuite();
265
+ await suite.initialize();
266
+
267
+ // Send a simple message
268
+ await suite.sendMessage('chatkit', {
269
+ content: 'Hello, world!',
270
+ userId: 'user123'
271
+ });
272
+
273
+ // Send a message with attachments
274
+ await suite.sendMessage('chatkit', {
275
+ content: 'Check out this file',
276
+ userId: 'user123',
277
+ attachments: [{
278
+ filename: 'document.pdf',
279
+ contentType: 'application/pdf',
280
+ data: fileBuffer,
281
+ size: fileBuffer.length
282
+ }]
283
+ });
284
+
285
+ // Broadcast to multiple platforms
286
+ await suite.broadcastMessage({
287
+ content: 'System maintenance tonight at 10 PM',
288
+ platforms: ['chatkit', 'slack'],
289
+ priority: MessagePriority.URGENT
290
+ });
291
+ ```
292
+
293
+ ### User Management
294
+
295
+ ```typescript
296
+ const userManager = suite.getUserManager();
297
+
298
+ // Register users from different platforms
299
+ userManager.registerUser({
300
+ provider: 'chatkit',
301
+ platformUserId: 'chatkit123',
302
+ displayName: 'Alice',
303
+ email: 'alice@example.com'
304
+ });
305
+
306
+ userManager.registerUser({
307
+ provider: 'slack',
308
+ platformUserId: 'slack456',
309
+ displayName: 'Bob',
310
+ email: 'bob@example.com'
311
+ });
312
+
313
+ // Link platforms for the same user
314
+ const aliceId = userManager.getUnifiedId('chatkit', 'chatkit123');
315
+ userManager.linkPlatform(aliceId!, 'slack', 'slackAlice');
316
+
317
+ // Search for users
318
+ const results = userManager.searchUsers('alice@example.com');
319
+ ```
320
+
321
+ ### Health Monitoring
322
+
323
+ ```typescript
324
+ // Get overall health
325
+ const health = await suite.getHealth();
326
+
327
+ console.log('Suite Status:', health.status);
328
+ console.log('ChatKit Health:', health.providers.chatkit);
329
+
330
+ // Check specific provider
331
+ const providerManager = suite.getProviderManager();
332
+ const chatkit = providerManager.getProvider('chatkit');
333
+
334
+ if (chatkit) {
335
+ const providerHealth = await chatkit.getHealth();
336
+ console.log('ChatKit Latency:', providerHealth.latency);
337
+ console.log('Error Count:', providerHealth.errorCount);
338
+ }
339
+ ```
340
+
341
+ ### Configuration Management
342
+
343
+ ```typescript
344
+ const configManager = suite.getConfigManager();
345
+
346
+ // Update configuration
347
+ configManager.updateConfig({
348
+ analytics: { enabled: false },
349
+ aiRouting: {
350
+ enabled: true,
351
+ intentThreshold: 0.9
352
+ }
353
+ });
354
+
355
+ // Get current config
356
+ const config = configManager.getConfig();
357
+
358
+ // Export configuration
359
+ const json = configManager.toJSON();
360
+
361
+ // Load configuration
362
+ configManager.fromJSON(json);
363
+ ```
364
+
365
+ ## External Provider Integration
366
+
367
+ The suite supports optional external providers. To enable them:
368
+
369
+ ### Slack Integration
370
+
371
+ ```bash
372
+ npm install @bernierllc/chat-integration-slack
373
+ ```
374
+
375
+ ```typescript
376
+ import { ChatSuite } from '@bernierllc/chat-suite';
377
+ // When available: import { SlackProvider } from '@bernierllc/chat-integration-slack';
378
+
379
+ const suite = new ChatSuite({
380
+ providers: {
381
+ chatkit: { enabled: true, priority: 1, config: {} },
382
+ slack: {
383
+ enabled: true,
384
+ priority: 2,
385
+ config: {
386
+ token: process.env.SLACK_BOT_TOKEN,
387
+ channels: ['#general', '#dev']
388
+ }
389
+ }
390
+ }
391
+ });
392
+ ```
393
+
394
+ ### Discord Integration
395
+
396
+ ```bash
397
+ npm install @bernierllc/chat-integration-discord
398
+ ```
399
+
400
+ ```typescript
401
+ // When available: import { DiscordProvider } from '@bernierllc/chat-integration-discord';
402
+
403
+ const suite = new ChatSuite({
404
+ providers: {
405
+ chatkit: { enabled: true, priority: 1, config: {} },
406
+ discord: {
407
+ enabled: true,
408
+ priority: 3,
409
+ config: {
410
+ token: process.env.DISCORD_BOT_TOKEN,
411
+ guilds: ['123456789012345678']
412
+ }
413
+ }
414
+ }
415
+ });
416
+ ```
417
+
418
+ ### Teams Integration
419
+
420
+ ```bash
421
+ npm install @bernierllc/chat-integration-teams
422
+ ```
423
+
424
+ ```typescript
425
+ // When available: import { TeamsProvider } from '@bernierllc/chat-integration-teams';
426
+
427
+ const suite = new ChatSuite({
428
+ providers: {
429
+ chatkit: { enabled: true, priority: 1, config: {} },
430
+ teams: {
431
+ enabled: true,
432
+ priority: 4,
433
+ config: {
434
+ tenantId: process.env.TEAMS_TENANT_ID,
435
+ clientId: process.env.TEAMS_CLIENT_ID,
436
+ clientSecret: process.env.TEAMS_CLIENT_SECRET
437
+ }
438
+ }
439
+ }
440
+ });
441
+ ```
442
+
443
+ ## NeverHub Integration
444
+
445
+ The suite integrates with NeverHub for service discovery and event orchestration:
446
+
447
+ ```typescript
448
+ const suite = new ChatSuite({
449
+ neverhub: {
450
+ enabled: true,
451
+ serviceName: 'chat-suite',
452
+ capabilities: [
453
+ { type: 'chat', name: 'multi-provider-chat', version: '1.0.0' },
454
+ { type: 'orchestration', name: 'chat-orchestration', version: '1.0.0' }
455
+ ],
456
+ dependencies: ['chat-provider-*', 'chat-ai-router', 'chat-analytics']
457
+ }
458
+ });
459
+
460
+ await suite.initialize();
461
+
462
+ // NeverHub will automatically:
463
+ // - Register the chat suite as a service
464
+ // - Discover available chat providers
465
+ // - Publish message events
466
+ // - Subscribe to relevant events
467
+ // - Report health status
468
+ ```
469
+
470
+ ## Integration Status
471
+
472
+ - **Logger**: Not applicable (suite-level component, uses console logging)
473
+ - **Docs-Suite**: Ready - All types and APIs documented with JSDoc
474
+ - **NeverHub**: Integrated - Full service discovery, event publishing, and health monitoring
475
+
476
+ ## TypeScript Support
477
+
478
+ Full TypeScript support with strict type checking:
479
+
480
+ ```typescript
481
+ import {
482
+ ChatSuite,
483
+ ChatSuiteConfig,
484
+ MessagePriority,
485
+ ProviderType,
486
+ SuiteResult
487
+ } from '@bernierllc/chat-suite';
488
+
489
+ const config: ChatSuiteConfig = {
490
+ enabled: true,
491
+ providers: {
492
+ chatkit: {
493
+ enabled: true,
494
+ priority: 1,
495
+ config: {}
496
+ }
497
+ }
498
+ };
499
+
500
+ const suite = new ChatSuite(config);
501
+ ```
502
+
503
+ ## Error Handling
504
+
505
+ All operations return structured results:
506
+
507
+ ```typescript
508
+ const result = await suite.sendMessage('chatkit', {
509
+ content: 'Test message'
510
+ });
511
+
512
+ if (!result.success) {
513
+ console.error('Message failed:', result.error);
514
+ } else {
515
+ console.log('Message sent:', result.data?.messageId);
516
+ }
517
+ ```
518
+
519
+ ## Dependencies
520
+
521
+ ### Required
522
+ - `@bernierllc/neverhub-adapter` - NeverHub integration
523
+ - `@bernierllc/chatkit-adapter` - ChatKit provider
524
+ - `@bernierllc/chat-ai-router` - AI routing (optional feature)
525
+ - `@bernierllc/chat-analytics` - Analytics (optional feature)
526
+ - `zod` - Configuration validation
527
+
528
+ ### Optional (Peer Dependencies)
529
+ - `@bernierllc/chat-integration-slack` - Slack integration
530
+ - `@bernierllc/chat-integration-discord` - Discord integration
531
+ - `@bernierllc/chat-integration-teams` - Teams integration
532
+
533
+ ## License
534
+
535
+ Copyright (c) 2025 Bernier LLC. All rights reserved.
536
+
537
+ ## See Also
538
+
539
+ - [@bernierllc/chatkit-adapter](../chatkit-adapter) - ChatKit provider implementation
540
+ - [@bernierllc/chat-ai-router](../chat-ai-router) - AI-powered message routing
541
+ - [@bernierllc/chat-analytics](../chat-analytics) - Chat analytics and insights
542
+ - [@bernierllc/neverhub-adapter](../../core/neverhub-adapter) - NeverHub integration