@nextpa/chat-core 0.1.0 → 0.1.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 (93) hide show
  1. package/README.md +27 -4
  2. package/dist/constants/defaults.d.ts +1 -1
  3. package/dist/core/chat-manager.d.ts +2 -2
  4. package/dist/core/chat-manager.js +1 -1
  5. package/dist/core/config-manager.d.ts +2 -2
  6. package/dist/core/config-manager.js +2 -2
  7. package/dist/core/connection-manager.d.ts +4 -4
  8. package/dist/core/connection-manager.js +7 -7
  9. package/dist/core/connection-retry-handler.js +1 -1
  10. package/dist/core/consent-manager.d.ts +1 -1
  11. package/dist/core/consent-manager.js +2 -2
  12. package/dist/core/conversation-persistence.d.ts +3 -3
  13. package/dist/core/conversation-persistence.js +3 -3
  14. package/dist/core/event-emitter.js +1 -1
  15. package/dist/core/index.d.ts +9 -9
  16. package/dist/core/index.js +7 -7
  17. package/dist/core/local-storage-persistence.d.ts +1 -1
  18. package/dist/core/local-storage-persistence.js +1 -1
  19. package/dist/core/navigation-manager.d.ts +1 -1
  20. package/dist/core/navigation-manager.js +3 -3
  21. package/dist/core/popover-manager.d.ts +1 -1
  22. package/dist/core/session-beacon.js +1 -1
  23. package/dist/core/text-connection-manager.d.ts +4 -4
  24. package/dist/core/text-connection-manager.js +5 -5
  25. package/dist/core/text-mode-manager.d.ts +7 -7
  26. package/dist/core/text-mode-manager.js +4 -4
  27. package/dist/core/text-types.d.ts +2 -2
  28. package/dist/core/text-widget-controller.d.ts +4 -4
  29. package/dist/core/text-widget-controller.js +9 -9
  30. package/dist/core/theme-manager.d.ts +1 -1
  31. package/dist/core/theme-manager.js +2 -2
  32. package/dist/core/types.d.ts +3 -3
  33. package/dist/core/voice-state-manager.d.ts +5 -5
  34. package/dist/core/voice-state-manager.js +3 -3
  35. package/dist/core/widget-controller.d.ts +3 -3
  36. package/dist/core/widget-controller.js +13 -13
  37. package/dist/core/widget-core.d.ts +11 -11
  38. package/dist/core/widget-core.js +9 -9
  39. package/dist/google.js +3 -3
  40. package/dist/index.d.ts +25 -25
  41. package/dist/index.js +22 -22
  42. package/dist/openai.js +2 -2
  43. package/dist/services/api.d.ts +1 -1
  44. package/dist/services/api.js +2 -2
  45. package/dist/services/index.d.ts +3 -3
  46. package/dist/services/index.js +3 -3
  47. package/dist/services/page-interaction/content-extractor.d.ts +1 -1
  48. package/dist/services/page-interaction/content-extractor.js +1 -1
  49. package/dist/services/page-interaction/dom-executor.d.ts +1 -1
  50. package/dist/services/page-interaction/dom-executor.js +1 -1
  51. package/dist/services/page-interaction/dom-extractor.d.ts +1 -1
  52. package/dist/services/page-interaction/dom-extractor.js +2 -2
  53. package/dist/services/page-interaction/extension-bridge.d.ts +1 -1
  54. package/dist/services/page-interaction/iframe-navigation-manager.js +2 -2
  55. package/dist/services/page-interaction/index.d.ts +5 -5
  56. package/dist/services/page-interaction/index.js +4 -4
  57. package/dist/services/page-interaction/page-interaction-handler.d.ts +1 -1
  58. package/dist/services/page-interaction/page-interaction-handler.js +4 -4
  59. package/dist/services/realtime/google/google-audio.js +1 -1
  60. package/dist/services/realtime/google/google-provider.d.ts +1 -1
  61. package/dist/services/realtime/google/google-provider.js +3 -3
  62. package/dist/services/realtime/google/google-tool-mapper.d.ts +1 -1
  63. package/dist/services/realtime/google/index.d.ts +1 -1
  64. package/dist/services/realtime/google/index.js +1 -1
  65. package/dist/services/realtime/openai/index.d.ts +1 -1
  66. package/dist/services/realtime/openai/index.js +1 -1
  67. package/dist/services/realtime/openai/openai-provider.d.ts +1 -1
  68. package/dist/services/realtime/openai/openai-provider.js +3 -3
  69. package/dist/services/realtime/openai/openai-tool-mapper.d.ts +1 -1
  70. package/dist/services/realtime/provider-factory.d.ts +1 -1
  71. package/dist/services/realtime/types.d.ts +1 -1
  72. package/dist/services/realtime/vertexai/index.d.ts +1 -1
  73. package/dist/services/realtime/vertexai/index.js +1 -1
  74. package/dist/services/realtime/vertexai/vertexai-provider.d.ts +1 -1
  75. package/dist/services/realtime/vertexai/vertexai-provider.js +3 -3
  76. package/dist/services/realtime/voice-session-tracker.d.ts +1 -1
  77. package/dist/services/realtime/voice-session-tracker.js +1 -1
  78. package/dist/services/signalr.js +1 -1
  79. package/dist/services/voice-health-watchdog.d.ts +1 -1
  80. package/dist/services/voice-health-watchdog.js +1 -1
  81. package/dist/services/webrtc-event-handler.d.ts +3 -3
  82. package/dist/services/webrtc-greeting.d.ts +2 -2
  83. package/dist/services/webrtc-greeting.js +1 -1
  84. package/dist/services/webrtc-microphone.d.ts +1 -1
  85. package/dist/services/webrtc-microphone.js +1 -1
  86. package/dist/services/webrtc.d.ts +2 -2
  87. package/dist/services/webrtc.js +6 -6
  88. package/dist/utils/connect-chime.js +2 -2
  89. package/dist/utils/language-detection.js +1 -1
  90. package/dist/utils/styles.d.ts +1 -1
  91. package/dist/utils/theme-detection.js +1 -1
  92. package/dist/utils/ui-sounds.js +2 -2
  93. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -11,30 +11,30 @@
11
11
  * which the consuming app imports for the providers it uses.
12
12
  */
13
13
  // Controllers & core managers (voice + text orchestration)
14
- export { WidgetController, TextWidgetController, ConfigManager, ChatManager, ConnectionManager, TextConnectionManager, EventEmitter, } from './core';
15
- export { resolveSameOriginTarget } from './core/link-target';
14
+ export { WidgetController, TextWidgetController, ConfigManager, ChatManager, ConnectionManager, TextConnectionManager, EventEmitter, } from './core/index.js';
15
+ export { resolveSameOriginTarget } from './core/link-target.js';
16
16
  // Backend API, SignalR, WebRTC services
17
- export { WidgetApiClient, } from './services/api';
18
- export { WebRtcService } from './services/webrtc';
19
- export { VoiceSessionTracker } from './services/realtime/voice-session-tracker';
20
- export { startThinkingAudio, stopThinkingAudio } from './services/thinking-audio-pulse';
17
+ export { WidgetApiClient, } from './services/api.js';
18
+ export { WebRtcService } from './services/webrtc.js';
19
+ export { VoiceSessionTracker } from './services/realtime/voice-session-tracker.js';
20
+ export { startThinkingAudio, stopThinkingAudio } from './services/thinking-audio-pulse.js';
21
21
  // Page interaction (widget DOM bridge)
22
- export { PageInteractionHandler, } from './services/page-interaction/page-interaction-handler';
23
- export { initExtensionBridge, refreshExtensionContext, } from './services/page-interaction/extension-bridge';
24
- export { IframeNavigationManager } from './services/page-interaction/iframe-navigation-manager';
25
- export { generateSelector } from './services/page-interaction/selector-generator';
26
- export { NEXTPA_IFRAME_NAME } from './services/page-interaction/constants';
22
+ export { PageInteractionHandler, } from './services/page-interaction/page-interaction-handler.js';
23
+ export { initExtensionBridge, refreshExtensionContext, } from './services/page-interaction/extension-bridge.js';
24
+ export { IframeNavigationManager } from './services/page-interaction/iframe-navigation-manager.js';
25
+ export { generateSelector } from './services/page-interaction/selector-generator.js';
26
+ export { NEXTPA_IFRAME_NAME } from './services/page-interaction/constants.js';
27
27
  // Realtime provider abstraction
28
- export { createRealtimeProvider, registerRealtimeProvider, } from './services/realtime/provider-factory';
28
+ export { createRealtimeProvider, registerRealtimeProvider, } from './services/realtime/provider-factory.js';
29
29
  // Defaults / demo config
30
- export { getDemoConfig, isDemoMode, setDemoMode, DEFAULT_LOGO_DATA_URL, DEFAULT_DESIGN_TOKENS, } from './constants/defaults';
30
+ export { getDemoConfig, isDemoMode, setDemoMode, DEFAULT_LOGO_DATA_URL, DEFAULT_DESIGN_TOKENS, } from './constants/defaults.js';
31
31
  // Framework-neutral utilities
32
- export { MicLevelAnalyser } from './utils/mic-level-analyser';
33
- export { logger } from './utils/logger';
34
- export { primeAudioOnGesture } from './utils/audio-context';
35
- export { detectHostLanguage } from './utils/language-detection';
36
- export { isGerman } from './utils/tool-status';
37
- export { getMessageBubbleClasses, getMinimizedWidthClasses, getPlacementClasses, } from './utils/styles';
38
- export { PROACTIVE_OPEN_WIDGET_EVENT, } from './utils/proactive-events';
39
- export { CONNECT_CHIME_VARIANTS, getActiveConnectChimeVariant, setActiveConnectChimeVariant, playConnectChimeVariant, } from './utils/connect-chime';
40
- export { playMuteSound, playUnmuteSound, playEndCallSound } from './utils/ui-sounds';
32
+ export { MicLevelAnalyser } from './utils/mic-level-analyser.js';
33
+ export { logger } from './utils/logger.js';
34
+ export { primeAudioOnGesture } from './utils/audio-context.js';
35
+ export { detectHostLanguage } from './utils/language-detection.js';
36
+ export { isGerman } from './utils/tool-status.js';
37
+ export { getMessageBubbleClasses, getMinimizedWidthClasses, getPlacementClasses, } from './utils/styles.js';
38
+ export { PROACTIVE_OPEN_WIDGET_EVENT, } from './utils/proactive-events.js';
39
+ export { CONNECT_CHIME_VARIANTS, getActiveConnectChimeVariant, setActiveConnectChimeVariant, playConnectChimeVariant, } from './utils/connect-chime.js';
40
+ export { playMuteSound, playUnmuteSound, playEndCallSound } from './utils/ui-sounds.js';
package/dist/openai.js CHANGED
@@ -1,7 +1,7 @@
1
- import { registerRealtimeProvider } from './services/realtime/provider-factory';
1
+ import { registerRealtimeProvider } from './services/realtime/provider-factory.js';
2
2
  // Subpath entry (@nextpa/chat-core/openai): importing it registers the OpenAI
3
3
  // provider as a lazy loader — the SDK stays in its own async chunk.
4
4
  registerRealtimeProvider('openai', async () => {
5
- const { OpenAiRealtimeProvider } = await import('./services/realtime/openai');
5
+ const { OpenAiRealtimeProvider } = await import('./services/realtime/openai/index.js');
6
6
  return new OpenAiRealtimeProvider();
7
7
  });
@@ -1,4 +1,4 @@
1
- import type { ToolDefinition, VoiceUsage, WidgetConfig } from '../types';
1
+ import type { ToolDefinition, VoiceUsage, WidgetConfig } from '../types/index.js';
2
2
  export interface WidgetTokenRequestContext {
3
3
  readonly baseUrl: string;
4
4
  readonly clientId: string;
@@ -1,5 +1,5 @@
1
- import { logger } from '../utils/logger';
2
- import { detectHostLanguage } from '../utils/language-detection';
1
+ import { logger } from '../utils/logger.js';
2
+ import { detectHostLanguage } from '../utils/language-detection.js';
3
3
  // Dev fallback only; the host app passes the real base URL to the constructor.
4
4
  const API_BASE_URL = 'https://localhost:6101';
5
5
  export class WidgetApiClient {
@@ -1,3 +1,3 @@
1
- export { WidgetApiClient } from './api';
2
- export { WebRtcService } from './webrtc';
3
- export { SignalRService, type SignalREvents } from './signalr';
1
+ export { WidgetApiClient } from './api.js';
2
+ export { WebRtcService } from './webrtc.js';
3
+ export { SignalRService, type SignalREvents } from './signalr.js';
@@ -1,3 +1,3 @@
1
- export { WidgetApiClient } from './api';
2
- export { WebRtcService } from './webrtc';
3
- export { SignalRService } from './signalr';
1
+ export { WidgetApiClient } from './api.js';
2
+ export { WebRtcService } from './webrtc.js';
3
+ export { SignalRService } from './signalr.js';
@@ -1,2 +1,2 @@
1
- import type { PageContent } from './types';
1
+ import type { PageContent } from './types.js';
2
2
  export declare function extractPageContent(doc?: Document, win?: Window): PageContent;
@@ -1,4 +1,4 @@
1
- import { queryAllDeep } from './deep-query';
1
+ import { queryAllDeep } from './deep-query.js';
2
2
  const CONTENT_ROOT_SELECTOR = 'main, [role="main"], article';
3
3
  const SKIP_SELECTOR = 'nav, footer, aside, script, style, noscript, template, [aria-hidden="true"], [hidden]';
4
4
  const CONTENT_SELECTOR = 'h1, h2, h3, h4, h5, h6, p, li, blockquote, pre, figcaption, dt, dd, td, th, summary';
@@ -1,4 +1,4 @@
1
- import type { ActionResult } from './types';
1
+ import type { ActionResult } from './types.js';
2
2
  export declare function fillField(selector: string, value: string, doc?: Document): ActionResult;
3
3
  export declare function fillFields(fields: Record<string, string>, doc?: Document): ActionResult;
4
4
  export declare function clickElement(selector: string, doc?: Document): ActionResult;
@@ -1,4 +1,4 @@
1
- import { querySelectorDeep } from './deep-query';
1
+ import { querySelectorDeep } from './deep-query.js';
2
2
  const HIGHLIGHT_DEFAULT_COLOR = '#3b82f6';
3
3
  const HIGHLIGHT_DEFAULT_DURATION_MS = 3000;
4
4
  const HIGHLIGHT_FADEOUT_MS = 300;
@@ -1,4 +1,4 @@
1
- import type { ButtonElement, FormElement, InteractiveElement, LinkElement, PageSnapshot, ProductCardElement, TableElement } from './types';
1
+ import type { ButtonElement, FormElement, InteractiveElement, LinkElement, PageSnapshot, ProductCardElement, TableElement } from './types.js';
2
2
  export declare function extractPageSnapshot(doc?: Document, win?: Window): PageSnapshot;
3
3
  export declare function extractForms(doc?: Document, win?: Window): FormElement[];
4
4
  export declare function extractButtons(doc?: Document, win?: Window): ButtonElement[];
@@ -1,5 +1,5 @@
1
- import { queryAllDeep } from './deep-query';
2
- import { generateSelector } from './selector-generator';
1
+ import { queryAllDeep } from './deep-query.js';
2
+ import { generateSelector } from './selector-generator.js';
3
3
  const MAX_FORMS = 50;
4
4
  const MAX_BUTTONS = 100;
5
5
  const MAX_LINKS = 100;
@@ -1,4 +1,4 @@
1
- import type { ExternalExecutor } from './page-interaction-handler';
1
+ import type { ExternalExecutor } from './page-interaction-handler.js';
2
2
  export type PageContext = {
3
3
  url: string;
4
4
  title: string;
@@ -1,5 +1,5 @@
1
- import { logger } from '../../utils/logger';
2
- import { NEXTPA_IFRAME_NAME } from './constants';
1
+ import { logger } from '../../utils/logger.js';
2
+ import { NEXTPA_IFRAME_NAME } from './constants.js';
3
3
  const IFRAME_Z_INDEX = '2147483640';
4
4
  const WIDGET_Z_INDEX = '2147483641';
5
5
  const BLOCK_DETECTION_TIMEOUT_MS = 3000;
@@ -1,5 +1,5 @@
1
- export { extractPageSnapshot, extractForms, extractButtons, extractLinks, extractTables, extractProductCards, extractInteractiveElements } from './dom-extractor';
2
- export { extractPageContent } from './content-extractor';
3
- export { fillField, fillFields, clickElement, scrollToElement, highlightElement, waitForElement } from './dom-executor';
4
- export { generateSelector } from './selector-generator';
5
- export type { PageSnapshot, FormElement, ButtonElement, LinkElement, TableElement, ProductCardElement, InteractiveElement, PageContent, PageInteractionRequest, PageInteractionResult, ActionResult } from './types';
1
+ export { extractPageSnapshot, extractForms, extractButtons, extractLinks, extractTables, extractProductCards, extractInteractiveElements } from './dom-extractor.js';
2
+ export { extractPageContent } from './content-extractor.js';
3
+ export { fillField, fillFields, clickElement, scrollToElement, highlightElement, waitForElement } from './dom-executor.js';
4
+ export { generateSelector } from './selector-generator.js';
5
+ export type { PageSnapshot, FormElement, ButtonElement, LinkElement, TableElement, ProductCardElement, InteractiveElement, PageContent, PageInteractionRequest, PageInteractionResult, ActionResult } from './types.js';
@@ -1,4 +1,4 @@
1
- export { extractPageSnapshot, extractForms, extractButtons, extractLinks, extractTables, extractProductCards, extractInteractiveElements } from './dom-extractor';
2
- export { extractPageContent } from './content-extractor';
3
- export { fillField, fillFields, clickElement, scrollToElement, highlightElement, waitForElement } from './dom-executor';
4
- export { generateSelector } from './selector-generator';
1
+ export { extractPageSnapshot, extractForms, extractButtons, extractLinks, extractTables, extractProductCards, extractInteractiveElements } from './dom-extractor.js';
2
+ export { extractPageContent } from './content-extractor.js';
3
+ export { fillField, fillFields, clickElement, scrollToElement, highlightElement, waitForElement } from './dom-executor.js';
4
+ export { generateSelector } from './selector-generator.js';
@@ -1,5 +1,5 @@
1
1
  import type * as signalR from '@microsoft/signalr';
2
- import type { PageInteractionRequest, PageInteractionResult } from './types';
2
+ import type { PageInteractionRequest, PageInteractionResult } from './types.js';
3
3
  export type DocumentProvider = () => Document;
4
4
  export type WindowProvider = () => Window;
5
5
  export type ExternalExecutor = (request: PageInteractionRequest) => Promise<PageInteractionResult | string>;
@@ -1,7 +1,7 @@
1
- import { logger } from '../../utils/logger';
2
- import { extractPageSnapshot } from './dom-extractor';
3
- import { extractPageContent } from './content-extractor';
4
- import { clickElement, fillField, fillFields, highlightElement, scrollToElement, waitForElement } from './dom-executor';
1
+ import { logger } from '../../utils/logger.js';
2
+ import { extractPageSnapshot } from './dom-extractor.js';
3
+ import { extractPageContent } from './content-extractor.js';
4
+ import { clickElement, fillField, fillFields, highlightElement, scrollToElement, waitForElement } from './dom-executor.js';
5
5
  const ALLOWED_ACTIONS = new Set(['read', 'read_content', 'fill', 'fill_multiple', 'click', 'scroll_to', 'highlight', 'wait_for']);
6
6
  const MAX_REQUESTS_PER_SECOND = 10;
7
7
  const DANGEROUS_SELECTOR_PATTERN = /javascript:|<script|on\w+\s*=/i;
@@ -1,4 +1,4 @@
1
- import { logger } from '../../../utils/logger';
1
+ import { logger } from '../../../utils/logger.js';
2
2
  const CAPTURE_SAMPLE_RATE = 16000;
3
3
  const PLAYBACK_SAMPLE_RATE = 24000;
4
4
  const PLAYBACK_BUFFER_SIZE = 7680;
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types';
1
+ import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types.js';
2
2
  export declare class GoogleRealtimeProvider implements RealtimeProviderClient {
3
3
  private session;
4
4
  private readonly audioHandler;
@@ -1,7 +1,7 @@
1
1
  import { GoogleGenAI, MediaModality, Modality, VoiceActivityType } from '@google/genai';
2
- import { mapToolsForGoogle } from './google-tool-mapper';
3
- import { GoogleAudioHandler } from './google-audio';
4
- import { logger } from '../../../utils/logger';
2
+ import { mapToolsForGoogle } from './google-tool-mapper.js';
3
+ import { GoogleAudioHandler } from './google-audio.js';
4
+ import { logger } from '../../../utils/logger.js';
5
5
  const AUDIO_MIME_TYPE = 'audio/pcm;rate=16000';
6
6
  const DEFAULT_VOICE = 'Kore';
7
7
  const MAX_TOOL_CALL_HISTORY = 5;
@@ -1,3 +1,3 @@
1
1
  import type { FunctionDeclaration } from '@google/genai';
2
- import type { ToolDefinition } from '../../../types';
2
+ import type { ToolDefinition } from '../../../types/index.js';
3
3
  export declare function mapToolsForGoogle(tools: ToolDefinition[]): FunctionDeclaration[];
@@ -1 +1 @@
1
- export { GoogleRealtimeProvider } from './google-provider';
1
+ export { GoogleRealtimeProvider } from './google-provider.js';
@@ -1 +1 @@
1
- export { GoogleRealtimeProvider } from './google-provider';
1
+ export { GoogleRealtimeProvider } from './google-provider.js';
@@ -1 +1 @@
1
- export { OpenAiRealtimeProvider } from './openai-provider';
1
+ export { OpenAiRealtimeProvider } from './openai-provider.js';
@@ -1 +1 @@
1
- export { OpenAiRealtimeProvider } from './openai-provider';
1
+ export { OpenAiRealtimeProvider } from './openai-provider.js';
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types';
1
+ import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types.js';
2
2
  export declare class OpenAiRealtimeProvider implements RealtimeProviderClient {
3
3
  private readonly client;
4
4
  private readonly eventHandlers;
@@ -1,7 +1,7 @@
1
1
  import { OpenAIRealtimeWebRTC } from '@openai/agents-realtime';
2
- import { mapToolsForOpenAI } from './openai-tool-mapper';
3
- import { waitForAudioPlaybackEnd } from './openai-audio-monitor';
4
- import { logger } from '../../../utils/logger';
2
+ import { mapToolsForOpenAI } from './openai-tool-mapper.js';
3
+ import { waitForAudioPlaybackEnd } from './openai-audio-monitor.js';
4
+ import { logger } from '../../../utils/logger.js';
5
5
  function unwrapTranscript(text) {
6
6
  try {
7
7
  const parsed = JSON.parse(text);
@@ -1,4 +1,4 @@
1
- import type { ToolDefinition } from '../../../types';
1
+ import type { ToolDefinition } from '../../../types/index.js';
2
2
  type OpenAIFunctionToolDefinition = {
3
3
  type: 'function';
4
4
  name: string;
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient, RealtimeProviderType } from './types';
1
+ import type { RealtimeProviderClient, RealtimeProviderType } from './types.js';
2
2
  export type RealtimeProviderLoader = () => Promise<RealtimeProviderClient> | RealtimeProviderClient;
3
3
  export declare function registerRealtimeProvider(providerType: RealtimeProviderType, loader: RealtimeProviderLoader): void;
4
4
  export declare function createRealtimeProvider(providerType: RealtimeProviderType): Promise<RealtimeProviderClient>;
@@ -1,4 +1,4 @@
1
- import type { FunctionCall, ToolDefinition } from '../../types';
1
+ import type { FunctionCall, ToolDefinition } from '../../types/index.js';
2
2
  export type RealtimeProviderType = 'openai' | 'google' | 'vertexai';
3
3
  export type ProviderError = {
4
4
  readonly code?: string;
@@ -1 +1 @@
1
- export { VertexAiRealtimeProvider } from './vertexai-provider';
1
+ export { VertexAiRealtimeProvider } from './vertexai-provider.js';
@@ -1 +1 @@
1
- export { VertexAiRealtimeProvider } from './vertexai-provider';
1
+ export { VertexAiRealtimeProvider } from './vertexai-provider.js';
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types';
1
+ import type { RealtimeProviderClient, RealtimeProviderConnectConfig, ProviderEventMap } from '../types.js';
2
2
  export declare class VertexAiRealtimeProvider implements RealtimeProviderClient {
3
3
  private ws;
4
4
  private readonly audioHandler;
@@ -1,6 +1,6 @@
1
- import { mapToolsForGoogle } from '../google/google-tool-mapper';
2
- import { GoogleAudioHandler } from '../google/google-audio';
3
- import { logger } from '../../../utils/logger';
1
+ import { mapToolsForGoogle } from '../google/google-tool-mapper.js';
2
+ import { GoogleAudioHandler } from '../google/google-audio.js';
3
+ import { logger } from '../../../utils/logger.js';
4
4
  const AUDIO_MIME_TYPE = 'audio/pcm;rate=16000';
5
5
  const DEFAULT_VOICE = 'Kore';
6
6
  const MAX_TOOL_CALL_HISTORY = 5;
@@ -1,4 +1,4 @@
1
- import type { WidgetApiClient } from '../../services/api';
1
+ import type { WidgetApiClient } from '../../services/api.js';
2
2
  export declare class VoiceSessionTracker {
3
3
  private sessionId;
4
4
  private heartbeatTimer;
@@ -1,4 +1,4 @@
1
- import { logger } from '../../utils/logger';
1
+ import { logger } from '../../utils/logger.js';
2
2
  const LOG_PREFIX = '[VoiceSessionTracker]';
3
3
  const HEARTBEAT_INTERVAL_MS = 30_000;
4
4
  export class VoiceSessionTracker {
@@ -1,5 +1,5 @@
1
1
  import * as signalR from '@microsoft/signalr';
2
- import { logger } from '../utils/logger';
2
+ import { logger } from '../utils/logger.js';
3
3
  export class SignalRService {
4
4
  connection = null;
5
5
  events = {};
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient } from './realtime/types';
1
+ import type { RealtimeProviderClient } from './realtime/types.js';
2
2
  export type VoiceUnhealthyReason = 'no-setup' | 'no-greeting-response';
3
3
  /**
4
4
  * Watches a freshly-connected realtime voice session and reports when it is
@@ -1,4 +1,4 @@
1
- import { logger } from '../utils/logger';
1
+ import { logger } from '../utils/logger.js';
2
2
  const SETUP_TIMEOUT_MS = 6000;
3
3
  const GREETING_RESPONSE_TIMEOUT_MS = 8000;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient, ProviderUsage } from './realtime/types';
2
- import type { ConnectionState, ConversationEvents } from '../types';
3
- import type { MicrophoneManager } from './webrtc-microphone';
1
+ import type { RealtimeProviderClient, ProviderUsage } from './realtime/types.js';
2
+ import type { ConnectionState, ConversationEvents } from '../types/index.js';
3
+ import type { MicrophoneManager } from './webrtc-microphone.js';
4
4
  export declare function setupEventHandlers(client: RealtimeProviderClient, events: ConversationEvents, microphoneManager: MicrophoneManager, setConnectionState: (state: ConnectionState) => void, onUsageUpdated?: (usage: ProviderUsage) => void): void;
@@ -1,3 +1,3 @@
1
- import type { RealtimeProviderClient } from './realtime/types';
2
- import type { MicrophoneManager } from './webrtc-microphone';
1
+ import type { RealtimeProviderClient } from './realtime/types.js';
2
+ import type { MicrophoneManager } from './webrtc-microphone.js';
3
3
  export declare function startGreetingFlow(client: RealtimeProviderClient, microphoneManager: MicrophoneManager, onMicrophoneReady: (() => void) | undefined, skipGreeting?: boolean): void;
@@ -1,4 +1,4 @@
1
- import { logger } from '../utils/logger';
1
+ import { logger } from '../utils/logger.js';
2
2
  const GREETING_TIMEOUT_MS = 30000;
3
3
  export function startGreetingFlow(client, microphoneManager, onMicrophoneReady, skipGreeting = false) {
4
4
  // Only bail when the connection genuinely failed. A successful connect can
@@ -1,4 +1,4 @@
1
- import type { RealtimeProviderClient } from './realtime/types';
1
+ import type { RealtimeProviderClient } from './realtime/types.js';
2
2
  export declare class MicrophoneManager {
3
3
  private _isReady;
4
4
  private pendingMuteState;
@@ -1,4 +1,4 @@
1
- import { logger } from '../utils/logger';
1
+ import { logger } from '../utils/logger.js';
2
2
  export class MicrophoneManager {
3
3
  _isReady = false;
4
4
  pendingMuteState = null;
@@ -1,5 +1,5 @@
1
- import type { ConnectionState, ConversationEvents, ToolDefinition } from '../types';
2
- import type { RealtimeProviderType } from './realtime/types';
1
+ import type { ConnectionState, ConversationEvents, ToolDefinition } from '../types/index.js';
2
+ import type { RealtimeProviderType } from './realtime/types.js';
3
3
  export type TranscriptionMode = 'oob' | 'native';
4
4
  export interface WebRtcConfig {
5
5
  token: string;
@@ -1,9 +1,9 @@
1
- import { createRealtimeProvider } from './realtime/provider-factory';
2
- import { logger } from '../utils/logger';
3
- import { MicrophoneManager } from './webrtc-microphone';
4
- import { setupEventHandlers } from './webrtc-event-handler';
5
- import { startGreetingFlow } from './webrtc-greeting';
6
- import { VoiceHealthWatchdog } from './voice-health-watchdog';
1
+ import { createRealtimeProvider } from './realtime/provider-factory.js';
2
+ import { logger } from '../utils/logger.js';
3
+ import { MicrophoneManager } from './webrtc-microphone.js';
4
+ import { setupEventHandlers } from './webrtc-event-handler.js';
5
+ import { startGreetingFlow } from './webrtc-greeting.js';
6
+ import { VoiceHealthWatchdog } from './voice-health-watchdog.js';
7
7
  export class WebRtcService {
8
8
  client = null;
9
9
  events = {};
@@ -1,5 +1,5 @@
1
- import { getSharedAudioContext, withResumedContext } from './audio-context';
2
- import { logger } from './logger';
1
+ import { getSharedAudioContext, withResumedContext } from './audio-context.js';
2
+ import { logger } from './logger.js';
3
3
  const MASTER_FILTER_Q = 0.5;
4
4
  const REVERB_DECAY_POWER = 2.2;
5
5
  const cachedImpulses = new Map();
@@ -1,4 +1,4 @@
1
- import { logger } from './logger';
1
+ import { logger } from './logger.js';
2
2
  export function detectHostLanguage() {
3
3
  try {
4
4
  const lang = document.documentElement.lang;
@@ -1,4 +1,4 @@
1
- import type { WidgetConfig } from '../types';
1
+ import type { WidgetConfig } from '../types/index.js';
2
2
  export declare function getPlacementClasses(placement: WidgetConfig['placement'] | undefined): string;
3
3
  export declare function getMinimizedWidthClasses(size: WidgetConfig['size'] | undefined): string;
4
4
  export declare function getMessageBubbleClasses(isUser: boolean, isDark: boolean): string;
@@ -1,4 +1,4 @@
1
- import { logger } from './logger';
1
+ import { logger } from './logger.js';
2
2
  export function detectHostTheme() {
3
3
  const root = document.documentElement;
4
4
  const body = document.body;
@@ -1,5 +1,5 @@
1
- import { getSharedAudioContext, withResumedContext } from './audio-context';
2
- import { logger } from './logger';
1
+ import { getSharedAudioContext, withResumedContext } from './audio-context.js';
2
+ import { logger } from './logger.js';
3
3
  const MUTE_PULSES = [
4
4
  { frequency: 523.25, durationSec: 0.06 },
5
5
  { frequency: 349.23, durationSec: 0.08 },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextpa/chat-core",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Framework-neutral voice & text chat engine for the NextPA platform.",
5
5
  "type": "module",
6
6
  "license": "MIT",