@oshara/voice-sdk 0.1.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 (61) hide show
  1. package/README.md +198 -0
  2. package/dist/appearance-CNWT8x1G.cjs +2 -0
  3. package/dist/appearance-CNWT8x1G.cjs.map +1 -0
  4. package/dist/appearance-i6QBkpCk.js +650 -0
  5. package/dist/appearance-i6QBkpCk.js.map +1 -0
  6. package/dist/consent-CK9VXNPa.js +54 -0
  7. package/dist/consent-CK9VXNPa.js.map +1 -0
  8. package/dist/consent-D7QNSkQD.cjs +2 -0
  9. package/dist/consent-D7QNSkQD.cjs.map +1 -0
  10. package/dist/core/analytics.d.ts +30 -0
  11. package/dist/core/appearance.d.ts +113 -0
  12. package/dist/core/audioSettings.d.ts +69 -0
  13. package/dist/core/consent.d.ts +17 -0
  14. package/dist/core/createVoiceAgent.d.ts +79 -0
  15. package/dist/core/events.d.ts +103 -0
  16. package/dist/core/formController.d.ts +28 -0
  17. package/dist/core/forms.d.ts +235 -0
  18. package/dist/core/index.d.ts +29 -0
  19. package/dist/core/prevContext.d.ts +26 -0
  20. package/dist/core/transport.d.ts +30 -0
  21. package/dist/core/types.d.ts +49 -0
  22. package/dist/core/voice.d.ts +79 -0
  23. package/dist/createVoiceAgent-BM3HODS6.js +1058 -0
  24. package/dist/createVoiceAgent-BM3HODS6.js.map +1 -0
  25. package/dist/createVoiceAgent-CJWxWzz6.cjs +4 -0
  26. package/dist/createVoiceAgent-CJWxWzz6.cjs.map +1 -0
  27. package/dist/index.cjs +2 -0
  28. package/dist/index.cjs.map +1 -0
  29. package/dist/index.js +44 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/react/index.d.ts +60 -0
  32. package/dist/react.cjs +2 -0
  33. package/dist/react.cjs.map +1 -0
  34. package/dist/react.js +115 -0
  35. package/dist/react.js.map +1 -0
  36. package/dist/styles.css +1838 -0
  37. package/dist/ui/index.d.ts +21 -0
  38. package/dist/ui/ui.d.ts +165 -0
  39. package/dist/ui.cjs +284 -0
  40. package/dist/ui.cjs.map +1 -0
  41. package/dist/ui.js +1153 -0
  42. package/dist/ui.js.map +1 -0
  43. package/package.json +67 -0
  44. package/src/core/analytics.ts +111 -0
  45. package/src/core/appearance.ts +464 -0
  46. package/src/core/audioSettings.ts +180 -0
  47. package/src/core/consent.ts +78 -0
  48. package/src/core/createVoiceAgent.ts +280 -0
  49. package/src/core/events.ts +120 -0
  50. package/src/core/formController.ts +317 -0
  51. package/src/core/forms.ts +861 -0
  52. package/src/core/index.ts +121 -0
  53. package/src/core/prevContext.ts +153 -0
  54. package/src/core/transport.ts +118 -0
  55. package/src/core/types.ts +66 -0
  56. package/src/core/voice.ts +1179 -0
  57. package/src/react/index.ts +238 -0
  58. package/src/ui/index.ts +507 -0
  59. package/src/ui/styles.css +1838 -0
  60. package/src/ui/ui.ts +1672 -0
  61. package/src/vite-env.d.ts +10 -0
@@ -0,0 +1,21 @@
1
+ import { VoiceAgentClient } from '../core';
2
+ import { UIRefs } from './ui';
3
+ export interface MountVoiceUIOptions {
4
+ /** Where to mount. Default document.body. */
5
+ target?: HTMLElement;
6
+ /** Fill the parent container instead of floating (hides FAB). */
7
+ inline?: boolean;
8
+ /** Open the panel on mount. */
9
+ openChat?: boolean;
10
+ /** Hide the panel close button. */
11
+ closeButtonHide?: boolean;
12
+ /** Host element id. Default "voice-agent-widget-root". */
13
+ rootId?: string;
14
+ }
15
+ export interface VoiceUIHandle {
16
+ destroy: () => void;
17
+ /** The shadow-DOM refs, for advanced host integrations. */
18
+ refs: UIRefs;
19
+ }
20
+ export declare function mountVoiceUI(client: VoiceAgentClient, opts?: MountVoiceUIOptions): VoiceUIHandle;
21
+ export type { UIRefs } from './ui';
@@ -0,0 +1,165 @@
1
+ import { AppearanceConfig } from '../core/appearance';
2
+ import { FormDefinition } from '../core/forms';
3
+ export interface FormInputBinding {
4
+ /** Read the current field value as a string (comma-joined for multi-select groups). */
5
+ read: () => string;
6
+ /** Toggle the disabled state across one or more underlying inputs. */
7
+ setDisabled: (busy: boolean) => void;
8
+ /** Show (or, with an empty string, clear) an inline validation error under the field. */
9
+ setError: (message: string) => void;
10
+ }
11
+ export type Screen = "welcome" | "call" | "form";
12
+ export interface UIRefs {
13
+ host: HTMLDivElement;
14
+ shadow: ShadowRoot;
15
+ fab: HTMLButtonElement;
16
+ panel: HTMLDivElement;
17
+ closeBtn: HTMLButtonElement;
18
+ welcomeScreen: HTMLDivElement;
19
+ welcomeLogo: HTMLImageElement;
20
+ welcomeLogoFallback: HTMLDivElement;
21
+ welcomeName: HTMLDivElement;
22
+ welcomeDesc: HTMLDivElement;
23
+ langPicker: HTMLDivElement;
24
+ langTrigger: HTMLButtonElement;
25
+ langTriggerLabel: HTMLSpanElement;
26
+ langTriggerCode: HTMLSpanElement;
27
+ langMenu: HTMLDivElement;
28
+ startBtn: HTMLButtonElement;
29
+ startBtnLabel: HTMLSpanElement;
30
+ consent: HTMLDivElement;
31
+ consentText: HTMLSpanElement;
32
+ consentLink: HTMLAnchorElement;
33
+ poweredBy: HTMLAnchorElement;
34
+ /** Currently selected language code (BCP-47 short, e.g. "en"). */
35
+ selectedLanguage: string;
36
+ callScreen: HTMLDivElement;
37
+ callLogo: HTMLImageElement;
38
+ callLogoFallback: HTMLDivElement;
39
+ callName: HTMLDivElement;
40
+ callStatus: HTMLDivElement;
41
+ callTimer: HTMLDivElement;
42
+ callTimerText: HTMLSpanElement;
43
+ orb: HTMLDivElement;
44
+ orbLabel: HTMLDivElement;
45
+ /** Contextual processing line under the orb ("Searching the knowledge base…"). */
46
+ agentStatusLine: HTMLDivElement;
47
+ transcript: HTMLDivElement;
48
+ transcriptSegments: Map<string, HTMLDivElement>;
49
+ /**
50
+ * Per-role pointer to the bubble that is still in `interim` state. Used to
51
+ * coalesce streaming + final segments when the STT backend emits different
52
+ * `seg.id`s for interim vs final (e.g. sherpa), which would otherwise leave
53
+ * the half-finished interim bubble onscreen alongside a new final bubble.
54
+ */
55
+ transcriptInterimBubble: Map<"user" | "agent", HTMLDivElement>;
56
+ textInputRow: HTMLDivElement;
57
+ textInput: HTMLTextAreaElement;
58
+ textSendBtn: HTMLButtonElement;
59
+ muteBtn: HTMLButtonElement;
60
+ endBtn: HTMLButtonElement;
61
+ settingsBtn: HTMLButtonElement;
62
+ audioDrawer: HTMLDivElement;
63
+ audioDrawerClose: HTMLButtonElement;
64
+ audioMeterBar: HTMLDivElement;
65
+ audioMicSelect: HTMLSelectElement;
66
+ audioSpeakerSelect: HTMLSelectElement;
67
+ audioSpeakerRow: HTMLLabelElement;
68
+ audioVolume: HTMLInputElement;
69
+ audioVolumeValue: HTMLSpanElement;
70
+ audioNcEngine: HTMLSelectElement;
71
+ audioDfStrengthRow: HTMLLabelElement;
72
+ audioDfStrength: HTMLInputElement;
73
+ audioDfStrengthValue: HTMLSpanElement;
74
+ audioTogAec: HTMLInputElement;
75
+ audioTogNs: HTMLInputElement;
76
+ audioTogAgc: HTMLInputElement;
77
+ audioTogVi: HTMLInputElement;
78
+ audioTogViRow: HTMLLabelElement;
79
+ audioTogHp: HTMLInputElement;
80
+ audioTogTranscription: HTMLInputElement;
81
+ audioTogTextInput: HTMLInputElement;
82
+ audioDiagEngine: HTMLElement;
83
+ audioDiagAec: HTMLElement;
84
+ audioDiagNs: HTMLElement;
85
+ audioDiagAgc: HTMLElement;
86
+ audioDiagVi: HTMLElement;
87
+ audioDiagSr: HTMLElement;
88
+ audioDiagLoss: HTMLElement;
89
+ audioDiagJitter: HTMLElement;
90
+ audioDiagRtt: HTMLElement;
91
+ formScreen: HTMLDivElement;
92
+ formTranscript: HTMLDivElement;
93
+ formTranscriptSegments: Map<string, HTMLDivElement>;
94
+ formTranscriptInterimBubble: Map<"user" | "agent", HTMLDivElement>;
95
+ formTitle: HTMLDivElement;
96
+ formEyebrow: HTMLDivElement;
97
+ formSubtitle: HTMLDivElement;
98
+ formStepper: HTMLDivElement;
99
+ formFields: HTMLDivElement;
100
+ formError: HTMLDivElement;
101
+ formSuccess: HTMLDivElement;
102
+ formSubmitBtn: HTMLButtonElement;
103
+ formBackBtn: HTMLButtonElement;
104
+ formCancelBtn: HTMLButtonElement;
105
+ formStepBackBtn: HTMLButtonElement;
106
+ formCallControls: HTMLDivElement;
107
+ formMuteBtn: HTMLButtonElement;
108
+ formEndBtn: HTMLButtonElement;
109
+ formInputs: Map<string, FormInputBinding>;
110
+ appearance: AppearanceConfig;
111
+ }
112
+ export declare function buildUI(rootId: string, opts?: {
113
+ inline?: boolean;
114
+ parent?: HTMLElement;
115
+ closeButtonHide?: boolean;
116
+ }): UIRefs;
117
+ export declare function applyAppearance(refs: UIRefs, appearance: AppearanceConfig): void;
118
+ export declare function setScreen(refs: UIRefs, screen: Screen): void;
119
+ export interface RenderFormArgs {
120
+ definition: FormDefinition;
121
+ values: Record<string, string>;
122
+ /** Label for the cancel/back button — "Back to call" while connected, etc. */
123
+ cancelLabel?: string;
124
+ /** Which step (0-indexed) to render; ignored when the form has no `steps`. */
125
+ stepIndex?: number;
126
+ /** Fired whenever the user edits a field. Used to push state to the agent. */
127
+ onFieldChange?: () => void;
128
+ }
129
+ /**
130
+ * Render a form definition's fields into the form screen. Existing values are
131
+ * read from `values`; the on-screen inputs are kept in `refs.formInputs` so
132
+ * the controller can pull current values back out at submit time.
133
+ */
134
+ export declare function renderForm(refs: UIRefs, args: RenderFormArgs): void;
135
+ /** Apply inline validation errors, then clear any field not in the list. */
136
+ export declare function setFieldErrors(refs: UIRefs, errors: {
137
+ name: string;
138
+ message: string;
139
+ }[]): void;
140
+ /** Clear every inline field error. */
141
+ export declare function clearFieldErrors(refs: UIRefs): void;
142
+ export declare function readFormValues(refs: UIRefs): Record<string, string>;
143
+ export declare function setFormBusy(refs: UIRefs, busy: boolean): void;
144
+ export declare function setFormError(refs: UIRefs, message: string): void;
145
+ export declare function setFormSuccess(refs: UIRefs, message: string): void;
146
+ export declare function setCallStatus(refs: UIRefs, text: string): void;
147
+ export declare function setCallTimer(refs: UIRefs, remainingMs: number | null): void;
148
+ export type OrbState = "idle" | "listening" | "speaking" | "connecting" | "thinking";
149
+ export declare function setOrbState(refs: UIRefs, state: OrbState): void;
150
+ /**
151
+ * Write the contextual processing text (e.g. "Searching the knowledge base…")
152
+ * under the orb, or clear it when `text` is null/empty. This is the per-tool
153
+ * label from a voice.agent_status event; the generic orb label still reads
154
+ * "Thinking…".
155
+ */
156
+ export declare function setAgentStatusLine(refs: UIRefs, text: string | null): void;
157
+ export declare function setMuteVisual(refs: UIRefs, muted: boolean): void;
158
+ export declare function setFormCallControlsVisible(refs: UIRefs, visible: boolean): void;
159
+ export declare function setAudioDrawerOpen(refs: UIRefs, open: boolean): void;
160
+ export declare function setAudioMeterLevel(refs: UIRefs, level: number): void;
161
+ export declare function populateAudioDeviceSelect(select: HTMLSelectElement, devices: MediaDeviceInfo[], selectedDeviceId: string, defaultLabel: string): void;
162
+ export declare function appendOrUpdateTranscriptSegment(refs: UIRefs, role: "user" | "agent", segmentId: string, text: string, isFinal: boolean): void;
163
+ export declare function clearTranscript(refs: UIRefs): void;
164
+ export declare function showAgentTransition(refs: UIRefs, agentName: string): void;
165
+ export declare function setFormTranscriptVisible(refs: UIRefs, visible: boolean): void;