@aginies/webuikit 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -9,8 +9,13 @@ import { ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, TextareaHTML
9
9
  interface AginiesConfig {
10
10
  /** Platform origin, e.g. `https://app.example.com`. No trailing slash. */
11
11
  baseUrl: string;
12
- /** Activation token issued for the deployment. Without it nothing renders. */
13
- token: string;
12
+ /** Activation token issued for the deployment. Without it nothing renders, unless `hosted`. */
13
+ token?: string;
14
+ /**
15
+ * The platform's own pages: the widget runs on the platform origin and activates
16
+ * without a token. Refused from any other origin.
17
+ */
18
+ hosted?: boolean;
14
19
  /** UI language. Defaults to the document language, then English. */
15
20
  locale?: 'tr' | 'en';
16
21
  /** Fetch implementation override (tests, SSR). */
@@ -21,6 +26,10 @@ interface ActivationConfig {
21
26
  brand: {
22
27
  name: string;
23
28
  logoUrl: string | null;
29
+ /** The brand's public site, for the footer link. */
30
+ siteUrl?: string;
31
+ /** False on whitelabelled installs: the footer does not name the platform. */
32
+ poweredBy?: boolean;
24
33
  };
25
34
  theme: Record<string, string | undefined> | null;
26
35
  /** Widget modules the activation unlocks; empty means all. */
@@ -67,6 +76,16 @@ interface ChatConfig {
67
76
  blockId: string;
68
77
  path?: string;
69
78
  }>;
79
+ /** What the platform can do with speech for this chat. */
80
+ voice?: {
81
+ stt: boolean;
82
+ tts: boolean;
83
+ };
84
+ }
85
+ interface Transcription {
86
+ transcript: string;
87
+ language?: string;
88
+ duration?: number;
70
89
  }
71
90
  interface ChatAuthRequired {
72
91
  authRequired: ChatConfig['authType'];
@@ -108,7 +127,9 @@ declare class AginiesError extends Error {
108
127
  }
109
128
  declare class AginiesClient {
110
129
  readonly baseUrl: string;
111
- readonly token: string;
130
+ readonly token: string | null;
131
+ /** True when activated from the platform's own page. */
132
+ readonly hosted: boolean;
112
133
  readonly locale: 'tr' | 'en';
113
134
  private readonly fetchImpl;
114
135
  private state;
@@ -143,6 +164,10 @@ declare class AginiesClient {
143
164
  private request;
144
165
  /** A raw request against the platform for endpoints the client does not wrap. */
145
166
  fetchRaw(path: string, init?: RequestInit): Promise<Response>;
167
+ /** Sends a recording to the platform's transcription model. */
168
+ transcribe(identifier: string, audio: Blob, filename?: string, language?: string): Promise<Transcription>;
169
+ /** Audio for a reply from the platform's synthesis endpoint. */
170
+ speak(identifier: string, text: string): Promise<Blob>;
146
171
  /** Hosted-chat configuration. Resolves to an auth requirement instead of throwing on 401. */
147
172
  getChat(identifier: string): Promise<ChatConfig | ChatAuthRequired>;
148
173
  /**
@@ -381,6 +406,7 @@ declare function useChat(identifier: string, enabled?: boolean): {
381
406
  }) => Promise<boolean>;
382
407
  requestCode: (email: string) => Promise<CodeRequestResult>;
383
408
  verifyCode: (email: string, otp: string) => Promise<boolean>;
409
+ signInWithSso: (email: string) => Promise<"redirected" | "unauthorized" | "error">;
384
410
  reload: () => Promise<void>;
385
411
  };
386
412
  interface ChatWidgetProps {
@@ -396,9 +422,14 @@ interface ChatWidgetProps {
396
422
  defaultOpen?: boolean;
397
423
  /** Theme for the widget subtree; `auto` follows the host page. */
398
424
  theme?: 'dark' | 'light' | 'auto';
425
+ /**
426
+ * Offer dictation and a hands-free voice conversation when the platform provides speech
427
+ * for this chat and the browser can record. Default true.
428
+ */
429
+ voice?: boolean;
399
430
  className?: string;
400
431
  }
401
- declare function ChatWidget({ identifier, mode, position, launcherLabel, defaultOpen, theme, className, }: ChatWidgetProps): react.JSX.Element | null;
432
+ declare function ChatWidget({ identifier, mode, position, launcherLabel, defaultOpen, theme, voice, className, }: ChatWidgetProps): react.JSX.Element | null;
402
433
 
403
434
  /**
404
435
  * Small Markdown renderer for agent replies. It builds React elements directly, so nothing
@@ -410,6 +441,44 @@ declare function Markdown({ text, className }: {
410
441
  className?: string;
411
442
  }): react.JSX.Element;
412
443
 
444
+ /**
445
+ * Voice for the chat widget: records the visitor with the browser's recorder, sends the
446
+ * clip to the platform (which runs its own transcription model) and plays replies back
447
+ * from the platform's synthesis endpoint. No third-party browser speech API is involved,
448
+ * so it behaves the same in every browser and the audio never leaves the platform.
449
+ */
450
+ type VoiceState = 'idle' | 'listening' | 'transcribing' | 'speaking' | 'denied' | 'unsupported';
451
+ interface UseVoiceOptions {
452
+ identifier: string;
453
+ /** Receives the transcript of a finished recording; empty recordings are dropped. */
454
+ onTranscript: (text: string) => void;
455
+ /** Language hint for transcription; omit for auto-detection. */
456
+ language?: string;
457
+ /** Stop recording after this much silence once speech was heard. */
458
+ silenceMs?: number;
459
+ /** Longest single recording. */
460
+ maxMs?: number;
461
+ }
462
+ interface VoiceControls {
463
+ state: VoiceState;
464
+ /** Last failure, cleared on the next successful action. */
465
+ error: string | null;
466
+ /** Whether this browser can record at all. */
467
+ supported: boolean;
468
+ /** Input level 0..1 while listening, for a meter. */
469
+ level: number;
470
+ startListening: () => Promise<void>;
471
+ /** Ends the recording and transcribes it. */
472
+ stopListening: () => void;
473
+ /** Ends the recording and discards it. */
474
+ cancelListening: () => void;
475
+ /** Plays a reply; resolves when playback ends or is stopped. */
476
+ speak: (text: string) => Promise<void>;
477
+ stopSpeaking: () => void;
478
+ }
479
+ declare function isVoiceSupported(): boolean;
480
+ declare function useVoice({ identifier, onTranscript, language, silenceMs, maxMs, }: UseVoiceOptions): VoiceControls;
481
+
413
482
  /** Joins class names, dropping falsy entries. */
414
483
  declare function cx(...parts: Array<string | false | null | undefined>): string;
415
484
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
@@ -614,6 +683,72 @@ declare const STRINGS: {
614
683
  readonly tr: "Kurumsal giriş";
615
684
  readonly en: "Sign in";
616
685
  };
686
+ readonly ssoRetry: {
687
+ readonly tr: "Giriş yaptım, yenile";
688
+ readonly en: "I have signed in, refresh";
689
+ };
690
+ };
691
+ readonly voice: {
692
+ readonly talk: {
693
+ readonly tr: "Konuşmak için dokunun";
694
+ readonly en: "Tap to talk";
695
+ };
696
+ readonly stopTalking: {
697
+ readonly tr: "Bitirmek için dokunun";
698
+ readonly en: "Tap when done";
699
+ };
700
+ readonly dictate: {
701
+ readonly tr: "Sesle yaz";
702
+ readonly en: "Dictate";
703
+ };
704
+ readonly handsFree: {
705
+ readonly tr: "Sesli sohbet";
706
+ readonly en: "Voice conversation";
707
+ };
708
+ readonly exit: {
709
+ readonly tr: "Sesli sohbetten çık";
710
+ readonly en: "Leave voice conversation";
711
+ };
712
+ readonly listening: {
713
+ readonly tr: "Dinliyor";
714
+ readonly en: "Listening";
715
+ };
716
+ readonly transcribing: {
717
+ readonly tr: "Yazıya dökülüyor";
718
+ readonly en: "Transcribing";
719
+ };
720
+ readonly thinking: {
721
+ readonly tr: "Yanıt hazırlanıyor";
722
+ readonly en: "Working on it";
723
+ };
724
+ readonly speaking: {
725
+ readonly tr: "Konuşuyor";
726
+ readonly en: "Speaking";
727
+ };
728
+ readonly idle: {
729
+ readonly tr: "Hazır";
730
+ readonly en: "Ready";
731
+ };
732
+ readonly interrupt: {
733
+ readonly tr: "Sözünü kesmek için dokunun";
734
+ readonly en: "Tap to interrupt";
735
+ };
736
+ readonly micDenied: {
737
+ readonly tr: "Mikrofon izni verilmedi. Tarayıcı ayarlarından izin verin.";
738
+ readonly en: "Microphone access was denied. Allow it in your browser settings.";
739
+ };
740
+ readonly unsupported: {
741
+ readonly tr: "Bu tarayıcı ses kaydını desteklemiyor.";
742
+ readonly en: "This browser cannot record audio.";
743
+ };
744
+ readonly unavailable: {
745
+ readonly tr: "Ses özelliği bu sohbet için açık değil.";
746
+ readonly en: "Voice is not enabled for this chat.";
747
+ };
748
+ readonly error: {
749
+ readonly tr: "Ses işlenemedi. Lütfen tekrar deneyin.";
750
+ readonly en: "Voice could not be processed. Please try again.";
751
+ };
617
752
  };
618
753
  readonly run: {
619
754
  readonly submit: {
@@ -962,4 +1097,4 @@ declare function runAgent(client: AginiesClient, workflowId: string, options: Ru
962
1097
  /** Decodes an execute SSE body into run events. Exported for tests. */
963
1098
  declare function parseRunSSE(stream: ReadableStream<Uint8Array>): AsyncGenerator<RunEvent>;
964
1099
 
965
- export { ATTACHMENT_LIMITS, type ActivationConfig, type ActivationSession, type ActivationState, AgentRunner, type AgentRunnerProps, AginiesClient, type AginiesConfig, AginiesError, AginiesProvider, type AginiesProviderProps, ApprovalPanel, type ApprovalPanelProps, type ApprovalStatus, Button, type ButtonProps, type ChatAttachment, type ChatAuthRequired, type ChatConfig, type ChatFilePayload, type ChatMessage, type ChatStreamEvent, ChatWidget, type ChatWidgetProps, Chip, type CodeRequestResult, type CostBarItem, CostBars, type CostBarsProps, Eyebrow, Field, type HeatmapRow, Input, type Locale, Markdown, Panel, type PauseContext, type PausePoint, type PausedExecution, type ResumeField, type ResumeOutcome, type ResumeQueueEntry, type ResumeStatus, type RunEvent, type RunField, type RunOptions, type RunStatus, type RunStep, RunTimeline, type RunTimelineProps, type SendMessageInput, Spinner, Stat, type StatItem, StatTiles, type StructuredItem, type StructuredResponse, StructuredUI, SuccessHeatmap, type SuccessHeatmapProps, Tag, Textarea, type TimelineStep, buildSubmission, cx, fieldsOf, formatFieldValue, getClient, getPauseContext, getPausedExecution, init, initialValues, listPausedExecutions, outputOf, parseFieldValue, parseRunSSE, parseSSE, parseStructured, resumeExecution, runAgent, translator, useAgentRun, useAginies, useApproval, useChat, useModule };
1100
+ export { ATTACHMENT_LIMITS, type ActivationConfig, type ActivationSession, type ActivationState, AgentRunner, type AgentRunnerProps, AginiesClient, type AginiesConfig, AginiesError, AginiesProvider, type AginiesProviderProps, ApprovalPanel, type ApprovalPanelProps, type ApprovalStatus, Button, type ButtonProps, type ChatAttachment, type ChatAuthRequired, type ChatConfig, type ChatFilePayload, type ChatMessage, type ChatStreamEvent, ChatWidget, type ChatWidgetProps, Chip, type CodeRequestResult, type CostBarItem, CostBars, type CostBarsProps, Eyebrow, Field, type HeatmapRow, Input, type Locale, Markdown, Panel, type PauseContext, type PausePoint, type PausedExecution, type ResumeField, type ResumeOutcome, type ResumeQueueEntry, type ResumeStatus, type RunEvent, type RunField, type RunOptions, type RunStatus, type RunStep, RunTimeline, type RunTimelineProps, type SendMessageInput, Spinner, Stat, type StatItem, StatTiles, type StructuredItem, type StructuredResponse, StructuredUI, SuccessHeatmap, type SuccessHeatmapProps, Tag, Textarea, type TimelineStep, type Transcription, type UseVoiceOptions, type VoiceControls, type VoiceState, buildSubmission, cx, fieldsOf, formatFieldValue, getClient, getPauseContext, getPausedExecution, init, initialValues, isVoiceSupported, listPausedExecutions, outputOf, parseFieldValue, parseRunSSE, parseSSE, parseStructured, resumeExecution, runAgent, translator, useAgentRun, useAginies, useApproval, useChat, useModule, useVoice };
package/dist/index.d.ts CHANGED
@@ -9,8 +9,13 @@ import { ButtonHTMLAttributes, HTMLAttributes, InputHTMLAttributes, TextareaHTML
9
9
  interface AginiesConfig {
10
10
  /** Platform origin, e.g. `https://app.example.com`. No trailing slash. */
11
11
  baseUrl: string;
12
- /** Activation token issued for the deployment. Without it nothing renders. */
13
- token: string;
12
+ /** Activation token issued for the deployment. Without it nothing renders, unless `hosted`. */
13
+ token?: string;
14
+ /**
15
+ * The platform's own pages: the widget runs on the platform origin and activates
16
+ * without a token. Refused from any other origin.
17
+ */
18
+ hosted?: boolean;
14
19
  /** UI language. Defaults to the document language, then English. */
15
20
  locale?: 'tr' | 'en';
16
21
  /** Fetch implementation override (tests, SSR). */
@@ -21,6 +26,10 @@ interface ActivationConfig {
21
26
  brand: {
22
27
  name: string;
23
28
  logoUrl: string | null;
29
+ /** The brand's public site, for the footer link. */
30
+ siteUrl?: string;
31
+ /** False on whitelabelled installs: the footer does not name the platform. */
32
+ poweredBy?: boolean;
24
33
  };
25
34
  theme: Record<string, string | undefined> | null;
26
35
  /** Widget modules the activation unlocks; empty means all. */
@@ -67,6 +76,16 @@ interface ChatConfig {
67
76
  blockId: string;
68
77
  path?: string;
69
78
  }>;
79
+ /** What the platform can do with speech for this chat. */
80
+ voice?: {
81
+ stt: boolean;
82
+ tts: boolean;
83
+ };
84
+ }
85
+ interface Transcription {
86
+ transcript: string;
87
+ language?: string;
88
+ duration?: number;
70
89
  }
71
90
  interface ChatAuthRequired {
72
91
  authRequired: ChatConfig['authType'];
@@ -108,7 +127,9 @@ declare class AginiesError extends Error {
108
127
  }
109
128
  declare class AginiesClient {
110
129
  readonly baseUrl: string;
111
- readonly token: string;
130
+ readonly token: string | null;
131
+ /** True when activated from the platform's own page. */
132
+ readonly hosted: boolean;
112
133
  readonly locale: 'tr' | 'en';
113
134
  private readonly fetchImpl;
114
135
  private state;
@@ -143,6 +164,10 @@ declare class AginiesClient {
143
164
  private request;
144
165
  /** A raw request against the platform for endpoints the client does not wrap. */
145
166
  fetchRaw(path: string, init?: RequestInit): Promise<Response>;
167
+ /** Sends a recording to the platform's transcription model. */
168
+ transcribe(identifier: string, audio: Blob, filename?: string, language?: string): Promise<Transcription>;
169
+ /** Audio for a reply from the platform's synthesis endpoint. */
170
+ speak(identifier: string, text: string): Promise<Blob>;
146
171
  /** Hosted-chat configuration. Resolves to an auth requirement instead of throwing on 401. */
147
172
  getChat(identifier: string): Promise<ChatConfig | ChatAuthRequired>;
148
173
  /**
@@ -381,6 +406,7 @@ declare function useChat(identifier: string, enabled?: boolean): {
381
406
  }) => Promise<boolean>;
382
407
  requestCode: (email: string) => Promise<CodeRequestResult>;
383
408
  verifyCode: (email: string, otp: string) => Promise<boolean>;
409
+ signInWithSso: (email: string) => Promise<"redirected" | "unauthorized" | "error">;
384
410
  reload: () => Promise<void>;
385
411
  };
386
412
  interface ChatWidgetProps {
@@ -396,9 +422,14 @@ interface ChatWidgetProps {
396
422
  defaultOpen?: boolean;
397
423
  /** Theme for the widget subtree; `auto` follows the host page. */
398
424
  theme?: 'dark' | 'light' | 'auto';
425
+ /**
426
+ * Offer dictation and a hands-free voice conversation when the platform provides speech
427
+ * for this chat and the browser can record. Default true.
428
+ */
429
+ voice?: boolean;
399
430
  className?: string;
400
431
  }
401
- declare function ChatWidget({ identifier, mode, position, launcherLabel, defaultOpen, theme, className, }: ChatWidgetProps): react.JSX.Element | null;
432
+ declare function ChatWidget({ identifier, mode, position, launcherLabel, defaultOpen, theme, voice, className, }: ChatWidgetProps): react.JSX.Element | null;
402
433
 
403
434
  /**
404
435
  * Small Markdown renderer for agent replies. It builds React elements directly, so nothing
@@ -410,6 +441,44 @@ declare function Markdown({ text, className }: {
410
441
  className?: string;
411
442
  }): react.JSX.Element;
412
443
 
444
+ /**
445
+ * Voice for the chat widget: records the visitor with the browser's recorder, sends the
446
+ * clip to the platform (which runs its own transcription model) and plays replies back
447
+ * from the platform's synthesis endpoint. No third-party browser speech API is involved,
448
+ * so it behaves the same in every browser and the audio never leaves the platform.
449
+ */
450
+ type VoiceState = 'idle' | 'listening' | 'transcribing' | 'speaking' | 'denied' | 'unsupported';
451
+ interface UseVoiceOptions {
452
+ identifier: string;
453
+ /** Receives the transcript of a finished recording; empty recordings are dropped. */
454
+ onTranscript: (text: string) => void;
455
+ /** Language hint for transcription; omit for auto-detection. */
456
+ language?: string;
457
+ /** Stop recording after this much silence once speech was heard. */
458
+ silenceMs?: number;
459
+ /** Longest single recording. */
460
+ maxMs?: number;
461
+ }
462
+ interface VoiceControls {
463
+ state: VoiceState;
464
+ /** Last failure, cleared on the next successful action. */
465
+ error: string | null;
466
+ /** Whether this browser can record at all. */
467
+ supported: boolean;
468
+ /** Input level 0..1 while listening, for a meter. */
469
+ level: number;
470
+ startListening: () => Promise<void>;
471
+ /** Ends the recording and transcribes it. */
472
+ stopListening: () => void;
473
+ /** Ends the recording and discards it. */
474
+ cancelListening: () => void;
475
+ /** Plays a reply; resolves when playback ends or is stopped. */
476
+ speak: (text: string) => Promise<void>;
477
+ stopSpeaking: () => void;
478
+ }
479
+ declare function isVoiceSupported(): boolean;
480
+ declare function useVoice({ identifier, onTranscript, language, silenceMs, maxMs, }: UseVoiceOptions): VoiceControls;
481
+
413
482
  /** Joins class names, dropping falsy entries. */
414
483
  declare function cx(...parts: Array<string | false | null | undefined>): string;
415
484
  interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
@@ -614,6 +683,72 @@ declare const STRINGS: {
614
683
  readonly tr: "Kurumsal giriş";
615
684
  readonly en: "Sign in";
616
685
  };
686
+ readonly ssoRetry: {
687
+ readonly tr: "Giriş yaptım, yenile";
688
+ readonly en: "I have signed in, refresh";
689
+ };
690
+ };
691
+ readonly voice: {
692
+ readonly talk: {
693
+ readonly tr: "Konuşmak için dokunun";
694
+ readonly en: "Tap to talk";
695
+ };
696
+ readonly stopTalking: {
697
+ readonly tr: "Bitirmek için dokunun";
698
+ readonly en: "Tap when done";
699
+ };
700
+ readonly dictate: {
701
+ readonly tr: "Sesle yaz";
702
+ readonly en: "Dictate";
703
+ };
704
+ readonly handsFree: {
705
+ readonly tr: "Sesli sohbet";
706
+ readonly en: "Voice conversation";
707
+ };
708
+ readonly exit: {
709
+ readonly tr: "Sesli sohbetten çık";
710
+ readonly en: "Leave voice conversation";
711
+ };
712
+ readonly listening: {
713
+ readonly tr: "Dinliyor";
714
+ readonly en: "Listening";
715
+ };
716
+ readonly transcribing: {
717
+ readonly tr: "Yazıya dökülüyor";
718
+ readonly en: "Transcribing";
719
+ };
720
+ readonly thinking: {
721
+ readonly tr: "Yanıt hazırlanıyor";
722
+ readonly en: "Working on it";
723
+ };
724
+ readonly speaking: {
725
+ readonly tr: "Konuşuyor";
726
+ readonly en: "Speaking";
727
+ };
728
+ readonly idle: {
729
+ readonly tr: "Hazır";
730
+ readonly en: "Ready";
731
+ };
732
+ readonly interrupt: {
733
+ readonly tr: "Sözünü kesmek için dokunun";
734
+ readonly en: "Tap to interrupt";
735
+ };
736
+ readonly micDenied: {
737
+ readonly tr: "Mikrofon izni verilmedi. Tarayıcı ayarlarından izin verin.";
738
+ readonly en: "Microphone access was denied. Allow it in your browser settings.";
739
+ };
740
+ readonly unsupported: {
741
+ readonly tr: "Bu tarayıcı ses kaydını desteklemiyor.";
742
+ readonly en: "This browser cannot record audio.";
743
+ };
744
+ readonly unavailable: {
745
+ readonly tr: "Ses özelliği bu sohbet için açık değil.";
746
+ readonly en: "Voice is not enabled for this chat.";
747
+ };
748
+ readonly error: {
749
+ readonly tr: "Ses işlenemedi. Lütfen tekrar deneyin.";
750
+ readonly en: "Voice could not be processed. Please try again.";
751
+ };
617
752
  };
618
753
  readonly run: {
619
754
  readonly submit: {
@@ -962,4 +1097,4 @@ declare function runAgent(client: AginiesClient, workflowId: string, options: Ru
962
1097
  /** Decodes an execute SSE body into run events. Exported for tests. */
963
1098
  declare function parseRunSSE(stream: ReadableStream<Uint8Array>): AsyncGenerator<RunEvent>;
964
1099
 
965
- export { ATTACHMENT_LIMITS, type ActivationConfig, type ActivationSession, type ActivationState, AgentRunner, type AgentRunnerProps, AginiesClient, type AginiesConfig, AginiesError, AginiesProvider, type AginiesProviderProps, ApprovalPanel, type ApprovalPanelProps, type ApprovalStatus, Button, type ButtonProps, type ChatAttachment, type ChatAuthRequired, type ChatConfig, type ChatFilePayload, type ChatMessage, type ChatStreamEvent, ChatWidget, type ChatWidgetProps, Chip, type CodeRequestResult, type CostBarItem, CostBars, type CostBarsProps, Eyebrow, Field, type HeatmapRow, Input, type Locale, Markdown, Panel, type PauseContext, type PausePoint, type PausedExecution, type ResumeField, type ResumeOutcome, type ResumeQueueEntry, type ResumeStatus, type RunEvent, type RunField, type RunOptions, type RunStatus, type RunStep, RunTimeline, type RunTimelineProps, type SendMessageInput, Spinner, Stat, type StatItem, StatTiles, type StructuredItem, type StructuredResponse, StructuredUI, SuccessHeatmap, type SuccessHeatmapProps, Tag, Textarea, type TimelineStep, buildSubmission, cx, fieldsOf, formatFieldValue, getClient, getPauseContext, getPausedExecution, init, initialValues, listPausedExecutions, outputOf, parseFieldValue, parseRunSSE, parseSSE, parseStructured, resumeExecution, runAgent, translator, useAgentRun, useAginies, useApproval, useChat, useModule };
1100
+ export { ATTACHMENT_LIMITS, type ActivationConfig, type ActivationSession, type ActivationState, AgentRunner, type AgentRunnerProps, AginiesClient, type AginiesConfig, AginiesError, AginiesProvider, type AginiesProviderProps, ApprovalPanel, type ApprovalPanelProps, type ApprovalStatus, Button, type ButtonProps, type ChatAttachment, type ChatAuthRequired, type ChatConfig, type ChatFilePayload, type ChatMessage, type ChatStreamEvent, ChatWidget, type ChatWidgetProps, Chip, type CodeRequestResult, type CostBarItem, CostBars, type CostBarsProps, Eyebrow, Field, type HeatmapRow, Input, type Locale, Markdown, Panel, type PauseContext, type PausePoint, type PausedExecution, type ResumeField, type ResumeOutcome, type ResumeQueueEntry, type ResumeStatus, type RunEvent, type RunField, type RunOptions, type RunStatus, type RunStep, RunTimeline, type RunTimelineProps, type SendMessageInput, Spinner, Stat, type StatItem, StatTiles, type StructuredItem, type StructuredResponse, StructuredUI, SuccessHeatmap, type SuccessHeatmapProps, Tag, Textarea, type TimelineStep, type Transcription, type UseVoiceOptions, type VoiceControls, type VoiceState, buildSubmission, cx, fieldsOf, formatFieldValue, getClient, getPauseContext, getPausedExecution, init, initialValues, isVoiceSupported, listPausedExecutions, outputOf, parseFieldValue, parseRunSSE, parseSSE, parseStructured, resumeExecution, runAgent, translator, useAgentRun, useAginies, useApproval, useChat, useModule, useVoice };