@talk2view/sdk 0.22.0 → 0.23.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/README.md +24 -16
- package/dist/chat/views/settings.d.ts.map +1 -1
- package/dist/chat/views/settings.js +15 -13
- package/dist/chat/views/settings.js.map +1 -1
- package/dist/chat/voice-button.d.ts.map +1 -1
- package/dist/chat/voice-button.js +46 -7
- package/dist/chat/voice-button.js.map +1 -1
- package/dist/chat-css.js +1 -1
- package/dist/chat.css +1 -1
- package/dist/chat.isolated.css +21 -1
- package/dist/chat.raw.css +21 -1
- package/dist/constants.d.ts +10 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -4
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/sessions.d.ts +29 -6
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +27 -11
- package/dist/sessions.js.map +1 -1
- package/dist/types.d.ts +55 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/dist/voice-elevenlabs.d.ts +197 -0
- package/dist/voice-elevenlabs.d.ts.map +1 -0
- package/dist/voice-elevenlabs.js +358 -0
- package/dist/voice-elevenlabs.js.map +1 -0
- package/dist/voice-facade.js +1 -1
- package/dist/voice-facade.js.map +1 -1
- package/dist/voice-fence.d.ts +37 -0
- package/dist/voice-fence.d.ts.map +1 -0
- package/dist/voice-fence.js +44 -0
- package/dist/voice-fence.js.map +1 -0
- package/dist/voice-turn.d.ts +119 -0
- package/dist/voice-turn.d.ts.map +1 -0
- package/dist/voice-turn.js +207 -0
- package/dist/voice-turn.js.map +1 -0
- package/dist/voice.d.ts +131 -8
- package/dist/voice.d.ts.map +1 -1
- package/dist/voice.js +492 -114
- package/dist/voice.js.map +1 -1
- package/docs/chat.md +13 -7
- package/docs/voice.md +157 -33
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -62,15 +62,16 @@ your Talk2View engine — no fonts, no CDN — and uses your page's font unless
|
|
|
62
62
|
pass `fontFamily`. Voice is the exception; see
|
|
63
63
|
[What loads at runtime](#what-loads-at-runtime).
|
|
64
64
|
|
|
65
|
-
**It is large: 373.
|
|
65
|
+
**It is large: 373.9 KB gzip, excluding React.** A consumer who never imports
|
|
66
66
|
`/chat` pays none of it.
|
|
67
67
|
|
|
68
68
|
**Voice.** For partners with the realtime voice agent enabled, the launcher
|
|
69
69
|
shows a microphone beside the mark: press to talk, press again to hang up. The
|
|
70
|
-
agent uses the same tools, permissions and approval card as the chat.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
agent uses the same tools, permissions and approval card as the chat. A voice
|
|
71
|
+
call runs on the voice model the end-user and the partner chose, Gemini Live or
|
|
72
|
+
ElevenLabs. Standalone it is `<VoiceButton client={t2v} />`; without a UI it is
|
|
73
|
+
`t2v.voice`. Each voice model reaches its own hosts, so a Content Security Policy
|
|
74
|
+
has to allow the ones you offer. See
|
|
74
75
|
**[`docs/voice.md`](https://github.com/Talk2View/talk2view-typescript/blob/main/docs/voice.md)**.
|
|
75
76
|
|
|
76
77
|
Everything else — the full prop table, theming tokens, the launcher in a hostile
|
|
@@ -125,7 +126,7 @@ function App() {
|
|
|
125
126
|
|
|
126
127
|
That's it. `<Talk2View>` registers your tools and holds the chat state; `<ChatPanel>` is the UI — sign-in, streaming replies, tool calls and approvals. Both come from `@talk2view/sdk/ui`, and `<ChatPanel>` must be inside `<Talk2View>`.
|
|
127
128
|
|
|
128
|
-
> `/ui` is smaller than the packaged chat (40.9 KB gzip against 373.
|
|
129
|
+
> `/ui` is smaller than the packaged chat (40.9 KB gzip against 373.9, plus
|
|
129
130
|
> syntax highlighting loaded on demand) and has no assistant-ui in it, which is
|
|
130
131
|
> why it is still here.
|
|
131
132
|
|
|
@@ -218,15 +219,22 @@ you set another.
|
|
|
218
219
|
| `/react`, `/assistant-ui` | The engine only. |
|
|
219
220
|
| `/chat` | The engine only: no fonts, no CDN, no images (an image in a reply becomes a link). Previews of the files an end-user attaches are `blob:` URLs, so a strict `img-src` needs `blob:`. |
|
|
220
221
|
| `/ui` (deprecated) | The engine, the IBM Plex fonts from Google Fonts (`fonts.googleapis.com`, `fonts.gstatic.com`) and the Talk2View logo from `db.talk2view.com`. Code highlighting compiles WebAssembly, which a strict CSP allows with `'wasm-unsafe-eval'`. |
|
|
221
|
-
| Voice: `t2v.voice`, `<VoiceButton>`, the launcher's microphone | The engine, and Daily's call engine from `https://c.daily.co`, which runs through `Function()
|
|
222
|
-
|
|
223
|
-
So voice needs `https://c.daily.co` in `connect-src
|
|
224
|
-
`
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
222
|
+
| Voice: `t2v.voice`, `<VoiceButton>`, the launcher's microphone | The engine, and on every call, whichever the voice model, Daily's call engine from `https://c.daily.co`, which runs through `Function()` and starts an audio worklet. Gemini Live adds nothing. ElevenLabs adds `wss://livekit.rtc.elevenlabs.io` and `https://livekit.rtc.elevenlabs.io` only (with a token the engine mints, the client never contacts `api.elevenlabs.io`), and one audio worklet from a `blob:` URL that the call works without. |
|
|
223
|
+
|
|
224
|
+
So every voice call needs `https://c.daily.co` in `connect-src`, and
|
|
225
|
+
`'unsafe-eval'` and `blob:` in `script-src`, an ElevenLabs call included: the
|
|
226
|
+
SDK opens the microphone through Daily's library before the engine has chosen
|
|
227
|
+
the voice model. Without `https://c.daily.co` or `'unsafe-eval'`, no voice call
|
|
228
|
+
starts. If Daily's download fails, its library tries to send an error report to
|
|
229
|
+
Daily's own error tracking (Sentry); you can leave that blocked. A Gemini Live
|
|
230
|
+
call needs nothing more. An ElevenLabs call adds the two ElevenLabs hosts to
|
|
231
|
+
`connect-src`; one that cannot reach them is retried on Gemini Live when the
|
|
232
|
+
app offers it. The voice libraries come from your own bundle, loaded on the
|
|
233
|
+
first call that uses them: a chat that never starts a call never loads them,
|
|
234
|
+
the first voice call loads the Pipecat libraries and Daily's call engine,
|
|
235
|
+
whichever the voice model, and only an ElevenLabs call loads ElevenLabs'. The
|
|
236
|
+
call's audio travels over WebRTC: for Gemini Live through the ICE servers the
|
|
237
|
+
engine hands out for each call, for ElevenLabs through its own LiveKit service.
|
|
230
238
|
[`docs/voice.md`](https://github.com/Talk2View/talk2view-typescript/blob/main/docs/voice.md)
|
|
231
239
|
has the rest.
|
|
232
240
|
|
|
@@ -276,7 +284,7 @@ Tools with `return_direct: true` skip the AI's post-processing step. The tool re
|
|
|
276
284
|
There are four React entry points, and they do different jobs:
|
|
277
285
|
|
|
278
286
|
- **`@talk2view/sdk/chat`** — the branded Talk2View chat, packaged: `<Talk2ViewChat>` and `<Talk2ViewChatLauncher>`, one stylesheet, nothing to configure. Start here. See [Chat UI](#chat-ui) above and [`docs/chat.md`](https://github.com/Talk2View/talk2view-typescript/blob/main/docs/chat.md).
|
|
279
|
-
- **`@talk2view/sdk/ui`** — the previous chat panel, still supported: `<Talk2View>`, `<ChatPanel>`, `<ChatWidget>` and the components they are built from. 40.9 KB gzip against the packaged chat's 373.
|
|
287
|
+
- **`@talk2view/sdk/ui`** — the previous chat panel, still supported: `<Talk2View>`, `<ChatPanel>`, `<ChatWidget>` and the components they are built from. 40.9 KB gzip against the packaged chat's 373.9, and no assistant-ui.
|
|
280
288
|
- **`@talk2view/sdk/react`** — headless: `<T2VProvider>` and hooks, for building your own UI.
|
|
281
289
|
- **`@talk2view/sdk/assistant-ui`** — a runtime for [assistant-ui](https://www.assistant-ui.com): render the stock `<Thread />` on Talk2View. See [assistant-ui](#assistant-ui) below.
|
|
282
290
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"AAqDA,wBAAgB,YAAY,4CAsG3B"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
|
-
* The Settings view: which AI model answers, which
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The Settings view: which AI model answers, which dictation model transcribes
|
|
5
|
+
* what the end-user says, and which language it should expect. (A voice call's
|
|
6
|
+
* voice model, Gemini Live or ElevenLabs, is not chosen here: the end-user sets
|
|
7
|
+
* it on their Profile page.) Choices are stored with the SDK's own preferences,
|
|
8
|
+
* so they carry between a partner's own UI and this chat, and across visits.
|
|
8
9
|
*/
|
|
9
10
|
import { useEffect, useId, useState } from 'react';
|
|
10
11
|
import { useUserPreferences } from '../../react/useUserPreferences.js';
|
|
11
12
|
import { useChatContext } from '../provider.js';
|
|
12
13
|
import { LAUNCHER_COLOURWAYS, LAUNCHER_COLOURWAY_LABELS, setLauncherColourway, useLauncherColourway, useLauncherOptions, } from '../lib/launcher-variant.js';
|
|
13
|
-
/* Offered when the
|
|
14
|
-
no `supported_languages`). */
|
|
14
|
+
/* Offered when the dictation model does not restrict its languages (the API
|
|
15
|
+
sends no `supported_languages`). */
|
|
15
16
|
const COMMON_LANGUAGES = ['en', 'vi', 'zh', 'ja', 'ko', 'fr', 'de', 'es'];
|
|
16
|
-
/* The engine's fallback
|
|
17
|
+
/* The engine's fallback dictation model — DEFAULT_DICTATION_MODEL in the SDK. */
|
|
17
18
|
const FALLBACK_STT_MODEL = 'faster-whisper-base';
|
|
18
19
|
const languageNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl
|
|
19
20
|
? new Intl.DisplayNames(['en'], { type: 'language' })
|
|
@@ -27,7 +28,7 @@ const languageName = (code) => {
|
|
|
27
28
|
return code;
|
|
28
29
|
}
|
|
29
30
|
};
|
|
30
|
-
/** The languages to offer for a
|
|
31
|
+
/** The languages to offer for a dictation model, A–Z by name. */
|
|
31
32
|
const languagesFor = (model) => [...new Set(model?.supported_languages?.length ? model.supported_languages : COMMON_LANGUAGES)]
|
|
32
33
|
.map((code) => [code, languageName(code)])
|
|
33
34
|
.sort((x, y) => x[1].localeCompare(y[1]));
|
|
@@ -59,16 +60,17 @@ export function SettingsView() {
|
|
|
59
60
|
live = false;
|
|
60
61
|
};
|
|
61
62
|
}, [client]);
|
|
62
|
-
// The
|
|
63
|
-
// default, else the engine's. Its languages are the ones worth
|
|
63
|
+
// The dictation model actually in use: the visitor's choice, else the
|
|
64
|
+
// partner's default, else the engine's. Its languages are the ones worth
|
|
65
|
+
// offering.
|
|
64
66
|
const voiceItems = voices.state === 'ready' ? voices.items : [];
|
|
65
67
|
const defaultSttId = partnerConfig?.default_stt_model || FALLBACK_STT_MODEL;
|
|
66
68
|
const activeVoice = voiceItems.find((m) => m.id === (preferences.sttModel || defaultSttId));
|
|
67
69
|
const languages = languagesFor(activeVoice);
|
|
68
70
|
const language = preferences.sttLanguage ?? '';
|
|
69
71
|
const languageOrphan = language !== '' && !languages.some(([code]) => code === language);
|
|
70
|
-
const voiceName = activeVoice ? label(activeVoice) : 'the
|
|
71
|
-
return (_jsxs("div", { className: "t2v-chat-settings aui-modal-settings bg-popover absolute inset-0 flex flex-col gap-6 overflow-y-auto p-4 text-sm", children: [_jsx(Picker, { title: "AI model", help: "Answers your next message. Switching keeps this conversation.", value: preferences.model ?? '', onChange: (model) => updatePreferences({ model: model || undefined }), load: models, defaultId: partnerConfig?.default_llm_model }), _jsx(Picker, { title: "
|
|
72
|
+
const voiceName = activeVoice ? label(activeVoice) : 'the dictation model';
|
|
73
|
+
return (_jsxs("div", { className: "t2v-chat-settings aui-modal-settings bg-popover absolute inset-0 flex flex-col gap-6 overflow-y-auto p-4 text-sm", children: [_jsx(Picker, { title: "AI model", help: "Answers your next message. Switching keeps this conversation.", value: preferences.model ?? '', onChange: (model) => updatePreferences({ model: model || undefined }), load: models, defaultId: partnerConfig?.default_llm_model }), _jsx(Picker, { title: "Dictation model", help: "Transcribes what you say when you use the mic.", value: preferences.sttModel ?? '', onChange: (sttModel) => {
|
|
72
74
|
// A language the new model cannot transcribe goes back to auto-detect.
|
|
73
75
|
const next = voiceItems.find((m) => m.id === (sttModel || defaultSttId));
|
|
74
76
|
const keep = !language || languagesFor(next).some(([code]) => code === language);
|
|
@@ -80,7 +82,7 @@ export function SettingsView() {
|
|
|
80
82
|
? languages.length === 1
|
|
81
83
|
? `${voiceName} transcribes ${languages[0][1]} only.`
|
|
82
84
|
: `The ${languages.length} languages ${voiceName} can transcribe.`
|
|
83
|
-
: 'A hint for the
|
|
85
|
+
: 'A hint for the dictation model.', children: (id) => (_jsxs("select", { id: id, className: selectClass, value: language, onChange: (e) => updatePreferences({ sttLanguage: e.target.value || undefined }), children: [_jsx("option", { value: "", children: "Detect automatically" }), languageOrphan ? (_jsxs("option", { value: language, children: [languageName(language), " (not supported by ", voiceName, ")"] })) : null, languages.map(([code, name]) => (_jsx("option", { value: code, children: name }, code)))] })) }), launcher.visitorColourway && _jsx(ColourwayField, { fallback: launcher.colourway })] }));
|
|
84
86
|
}
|
|
85
87
|
/** The launcher's colour, when the integrator lets the visitor pick it. */
|
|
86
88
|
function ColourwayField({ fallback }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/chat/views/settings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-button.d.ts","sourceRoot":"","sources":["../../src/chat/voice-button.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAA4C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EAGX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"voice-button.d.ts","sourceRoot":"","sources":["../../src/chat/voice-button.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAA4C,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EAGX,MAAM,aAAa,CAAC;AAKrB,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,EAC9C,MAAM,EAAE,aAAa,GAAG,IAAI,GAC3B,OAAO,CAET;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,IAAI,IAAI,CA0B1C;AA6BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAG9F;AAcD,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAS5C,CAAC"}
|
|
@@ -16,6 +16,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
16
16
|
*/
|
|
17
17
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
18
18
|
import { LoaderCircleIcon, XIcon } from 'lucide-react';
|
|
19
|
+
import { VOICE_PREFERENCE_URL } from '../constants.js';
|
|
19
20
|
import { ApprovalCard } from '../ui/components/ApprovalCard.js';
|
|
20
21
|
import { BrandWaveform } from './composer-extras.js';
|
|
21
22
|
import { cn } from './lib/cn.js';
|
|
@@ -67,6 +68,8 @@ const ERROR_MESSAGES = {
|
|
|
67
68
|
insufficient_credit: 'You’re out of credits. Upgrade your plan to keep going.',
|
|
68
69
|
credit_check_unavailable: 'Couldn’t check your credit just now. Try again shortly.',
|
|
69
70
|
service_unconfigured: 'Voice isn’t available right now.',
|
|
71
|
+
// No voice model this app allows can take the call (the engine's rule).
|
|
72
|
+
voice_model_unavailable: 'Voice isn’t available right now.',
|
|
70
73
|
service_unavailable: 'Voice isn’t available right now. Try again shortly.',
|
|
71
74
|
voice_at_capacity: 'Voice is busy right now. Try again shortly.',
|
|
72
75
|
voice_ticket_invalid: 'The call took too long to connect. Try again.',
|
|
@@ -90,6 +93,8 @@ const ENDED_MESSAGES = {
|
|
|
90
93
|
};
|
|
91
94
|
/** How long the "call ended" note stays up. An error stays until it is dismissed or a new call starts. */
|
|
92
95
|
const ENDED_NOTE_MS = 4000;
|
|
96
|
+
/** How long the engine's note on the voice model stays up once the call is live. */
|
|
97
|
+
const NOTE_MS = 6000;
|
|
93
98
|
export const VoiceButton = (props) => {
|
|
94
99
|
const ctx = useOptionalChatContext();
|
|
95
100
|
const client = props.client ?? ctx?.client;
|
|
@@ -112,9 +117,15 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
112
117
|
const [approval, setApproval] = useState(null);
|
|
113
118
|
const [working, setWorking] = useState(false);
|
|
114
119
|
const [endedNote, setEndedNote] = useState(null);
|
|
120
|
+
// The engine's note on the voice model the call runs on ("Using Gemini Live —
|
|
121
|
+
// …"), shown at the start of the call.
|
|
122
|
+
const [note, setNote] = useState(null);
|
|
123
|
+
// What an ElevenLabs agent opens the call with; null on a Gemini Live call.
|
|
124
|
+
const [greeting, setGreeting] = useState(null);
|
|
115
125
|
// Whether the end-user has spoken on this call. Until they do, the popover
|
|
116
|
-
// says "Say hello!"
|
|
117
|
-
// in silence not knowing the
|
|
126
|
+
// says "Say hello!" (or shows the agent's greeting): a Gemini Live bot does
|
|
127
|
+
// not greet, so a first-time user otherwise sits in silence not knowing the
|
|
128
|
+
// call is waiting on them.
|
|
118
129
|
const [heard, setHeard] = useState(false);
|
|
119
130
|
// Read by the listeners, so changing the prop does not re-subscribe.
|
|
120
131
|
const earconRef = useRef(earcon);
|
|
@@ -131,12 +142,23 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
131
142
|
setError(null);
|
|
132
143
|
setEndedNote(null);
|
|
133
144
|
}
|
|
134
|
-
if (next === 'connecting')
|
|
145
|
+
if (next === 'connecting') {
|
|
135
146
|
setHeard(false);
|
|
147
|
+
setGreeting(null);
|
|
148
|
+
}
|
|
149
|
+
if (next === 'ended' || next === 'error')
|
|
150
|
+
setNote(null);
|
|
136
151
|
if (next === 'listening' && earconRef.current)
|
|
137
152
|
playListeningEarcon();
|
|
138
153
|
}),
|
|
139
|
-
voice.on('error',
|
|
154
|
+
voice.on('error', (failure) => {
|
|
155
|
+
setError(failure);
|
|
156
|
+
// The note is sent before the token, the microphone and the connect, so
|
|
157
|
+
// a start that then fails must not go on showing it beside the error.
|
|
158
|
+
setNote(null);
|
|
159
|
+
}),
|
|
160
|
+
voice.on('note', setNote),
|
|
161
|
+
voice.on('callStarted', (call) => setGreeting(call.greeting)),
|
|
140
162
|
voice.on('approvalChange', setApproval),
|
|
141
163
|
voice.on('agentState', (agent) => {
|
|
142
164
|
setWorking(agent === 'working');
|
|
@@ -163,7 +185,20 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
163
185
|
const timer = setTimeout(() => setEndedNote(null), ENDED_NOTE_MS);
|
|
164
186
|
return () => clearTimeout(timer);
|
|
165
187
|
}, [endedNote]);
|
|
188
|
+
// The note is for the start of the call. It stays up through connecting (the
|
|
189
|
+
// microphone prompt and the connection can be slow), then goes NOTE_MS after
|
|
190
|
+
// the call is live.
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (!note || state !== 'listening')
|
|
193
|
+
return;
|
|
194
|
+
const timer = setTimeout(() => setNote(null), NOTE_MS);
|
|
195
|
+
return () => clearTimeout(timer);
|
|
196
|
+
}, [note, state]);
|
|
166
197
|
const on = state === 'connecting' || state === 'listening';
|
|
198
|
+
// While a voice call is on: an anonymous user has an account to make first,
|
|
199
|
+
// and a signed-out visitor has none, so only a signed-in end-user is sent to
|
|
200
|
+
// their Profile to change the voice.
|
|
201
|
+
const showChangeVoice = on && client.auth?.isAuthenticated?.() === true && client.auth?.isAnonymous?.() !== true;
|
|
167
202
|
const toggle = useCallback(() => {
|
|
168
203
|
if (voice.state === 'connecting' || voice.state === 'listening') {
|
|
169
204
|
void voice.stop();
|
|
@@ -175,6 +210,8 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
175
210
|
});
|
|
176
211
|
}, [voice, chat]);
|
|
177
212
|
const preload = useCallback(() => voice.preload(), [voice]);
|
|
213
|
+
// The call is live and waiting on the end-user to speak first.
|
|
214
|
+
const waiting = state === 'listening' && !working && !heard;
|
|
178
215
|
const status = state === 'connecting'
|
|
179
216
|
? 'Connecting…'
|
|
180
217
|
: state === 'listening'
|
|
@@ -182,7 +219,7 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
182
219
|
? 'Working…'
|
|
183
220
|
: heard
|
|
184
221
|
? 'Listening'
|
|
185
|
-
: 'Say hello!'
|
|
222
|
+
: greeting || 'Say hello!'
|
|
186
223
|
: state === 'ended' && !error
|
|
187
224
|
? endedNote
|
|
188
225
|
: null;
|
|
@@ -191,9 +228,11 @@ const VoiceControl = ({ client, standalone, className, label = 'Talk to Talk2Vie
|
|
|
191
228
|
_jsx(BrandWaveform, { mode: working ? 'busy' : 'live', className: "h-[20px] w-[22px]" })) : (
|
|
192
229
|
// The dictation mark at rest, the same face the composer's dictate button wears.
|
|
193
230
|
_jsx(BrandWaveform, { mode: "rest", className: "h-[20px] w-[22px]" }));
|
|
194
|
-
return (_jsxs("div", { className: cn('t2v-voice', standalone && 't2v-chat', className), "data-on": on ? '' : undefined, children: [error || approval || status ? (_jsxs("div", { className: "t2v-voice-popover", children: [error ? (_jsxs("div", { role: "alert", className: "t2v-voice-error", children: [_jsx("span", { children: voiceErrorMessage(error, { anonymous: client.auth?.isAnonymous?.() ?? false }) }), _jsx("button", { type: "button", className: "t2v-voice-dismiss", "aria-label": "Dismiss", onClick: () => setError(null), children: _jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) })] })) : null, approval ? (_jsx("div", { className: "t2v-voice-approval", children: _jsx(ApprovalCard
|
|
231
|
+
return (_jsxs("div", { className: cn('t2v-voice', standalone && 't2v-chat', className), "data-on": on ? '' : undefined, children: [error || approval || status || note ? (_jsxs("div", { className: "t2v-voice-popover", children: [error ? (_jsxs("div", { role: "alert", className: "t2v-voice-error", children: [_jsx("span", { children: voiceErrorMessage(error, { anonymous: client.auth?.isAnonymous?.() ?? false }) }), _jsx("button", { type: "button", className: "t2v-voice-dismiss", "aria-label": "Dismiss", onClick: () => setError(null), children: _jsx(XIcon, { className: "size-4", "aria-hidden": "true" }) })] })) : null, approval ? (_jsx("div", { className: "t2v-voice-approval", children: _jsx(ApprovalCard
|
|
195
232
|
// A new card per call: a half-edited argument must not carry over.
|
|
196
|
-
, { toolName: approval.toolName, toolCallId: approval.toolCallId, args: approval.arguments, description: approval.description, onDecision: (decision) => approval.decide(decision) }, approval.toolCallId) })) : null,
|
|
233
|
+
, { toolName: approval.toolName, toolCallId: approval.toolCallId, args: approval.arguments, description: approval.description, onDecision: (decision) => approval.decide(decision) }, approval.toolCallId) })) : null, note ? (
|
|
234
|
+
// Hidden from screen readers, like the status: the note's live region below reads it out.
|
|
235
|
+
_jsx("div", { "aria-hidden": "true", className: "t2v-voice-note", children: note })) : null, status && !error ? (_jsx("div", { "aria-hidden": "true", className: "t2v-voice-status", "data-hint": waiting ? '' : undefined, "data-greeting": waiting && greeting ? '' : undefined, children: status })) : null, showChangeVoice ? (_jsx("a", { className: "t2v-voice-change", href: VOICE_PREFERENCE_URL, target: "_blank", rel: "noopener noreferrer", children: "Change voice" })) : null] })) : null, _jsx("span", { role: "status", className: "t2v-voice-sr", children: error ? '' : (status ?? '') }), _jsx("span", { role: "status", className: "t2v-voice-sr", children: note ?? '' }), _jsx("button", { type: "button", className: "t2v-voice-button", onClick: toggle,
|
|
197
236
|
// Fetch the voice code while the pointer is on its way to a click.
|
|
198
237
|
onPointerEnter: preload, onFocus: preload, "aria-label": label, title: on ? 'End the call' : label, "aria-pressed": on, "aria-busy": state === 'connecting' || undefined, "data-state": state, "data-busy": working ? 'true' : undefined, children: icon })] }));
|
|
199
238
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-button.js","sourceRoot":"","sources":["../../src/chat/voice-button.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"voice-button.js","sourceRoot":"","sources":["../../src/chat/voice-button.tsx"],"names":[],"mappings":"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"}
|