@burdenoff/fe-libs 2026.914.3 → 2026.915.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.
- package/dist/shared/assistant/i18nManifest.d.ts +335 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -0
- package/dist/shared/assistant/i18nManifest.js +210 -0
- package/dist/shared/assistant/index.d.ts +2 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/modeCopy.d.ts +27 -0
- package/dist/shared/assistant/modeCopy.d.ts.map +1 -0
- package/dist/shared/assistant/modeCopy.js +9 -0
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.js +1 -1
- package/dist/shared/assistant/ui/AssistantPendingWriteCard.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantPendingWriteCard.js +1 -1
- package/dist/shared/assistant/ui/composer/AssistantModeSelector.d.ts +7 -3
- package/dist/shared/assistant/ui/composer/AssistantModeSelector.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantModeSelector.js +30 -29
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +1 -1
- package/dist/shared-assistant.js +83 -81
- package/package.json +1 -1
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { AssistantModeConfig } from './conversation';
|
|
2
|
+
/**
|
|
3
|
+
* Every translation key the shared assistant can request, with its English
|
|
4
|
+
* default (BOFF-7293).
|
|
5
|
+
*
|
|
6
|
+
* ★★ WHY THIS EXISTS. Each product seeds the assistant's copy under its own
|
|
7
|
+
* namespace (`<product>.assistant.<key>`, see `i18n.tsx`), and the i18n seeder
|
|
8
|
+
* marks every key ABSENT from a product's bundle as DEPRECATED — which
|
|
9
|
+
* `exportTranslations` then silently omits. Nothing enumerated the keys, so
|
|
10
|
+
* each product's bundle was hand-extracted from whatever its assistant looked
|
|
11
|
+
* like at the time. Measured through `exportTranslations` on 2026-09-14, against
|
|
12
|
+
* the 171 literal keys the assistant requested that day (173 here, after the
|
|
13
|
+
* `message.copyShort` and `pendingWrite.subtitleReply` splits): HealthyBowl
|
|
14
|
+
* served 94, VibeControls 15, FluidGrids and BigConsole none. A bundle built
|
|
15
|
+
* from a partial list does not merely leave the rest English; it DEPRECATES
|
|
16
|
+
* keys that were live. This is the list.
|
|
17
|
+
*
|
|
18
|
+
* Two halves, so neither can drift:
|
|
19
|
+
*
|
|
20
|
+
* - `ASSISTANT_I18N_LITERAL_COPY` — every `tr("<key>", "<English>")` call
|
|
21
|
+
* written out in the source. Those strings live inline in JSX, so there is no
|
|
22
|
+
* table to import; `i18nManifest.test.ts` parses every module under
|
|
23
|
+
* `shared/assistant`, and every other module in `src` that names
|
|
24
|
+
* `useAssistantTr` or `AssistantTr`, and fails on a key missing here, a
|
|
25
|
+
* default that differs, or an entry no call requests.
|
|
26
|
+
* - `ASSISTANT_I18N_COMPUTED_COPY` — keys the UI resolves through a variable:
|
|
27
|
+
* the turn stages and thinking phrases, the voice status labels, the note that
|
|
28
|
+
* closes an unfinished turn, the attachment sources. It is READ from the same
|
|
29
|
+
* tables the components render from, so a new stage, phrase or source is in
|
|
30
|
+
* the manifest with no edit here.
|
|
31
|
+
*
|
|
32
|
+
* ★★ PRODUCT COPY STAYS OUT. What a product passes in is the product's to
|
|
33
|
+
* translate:
|
|
34
|
+
*
|
|
35
|
+
* - A mode's `label` is rendered through `mode.<id>`, but its English is the
|
|
36
|
+
* PRODUCT's label, not the shared "Ask". It is deliberately not in the
|
|
37
|
+
* manifest: a seeded English value WINS over the label at render time, so
|
|
38
|
+
* seeding the shared fallback would put "Ask" on both of a product's `general`
|
|
39
|
+
* and `assistant` pills — the exact defect `AssistantModeSelector` fixed. Use
|
|
40
|
+
* `assistantModeI18nCopy(modes)`, which takes the words from the product.
|
|
41
|
+
* - A mode's `description` and `suggestions`, and the page label from
|
|
42
|
+
* `describeCurrentPage()`, are rendered exactly as passed and never reach
|
|
43
|
+
* `tr()`. Translate them in the product before passing them.
|
|
44
|
+
*
|
|
45
|
+
* HOW A PRODUCT'S EXTRACTOR USES IT
|
|
46
|
+
*
|
|
47
|
+
* import { assistantI18nSeedCopy } from
|
|
48
|
+
* "@burdenoff/fe-libs/shared/assistant/i18nManifest";
|
|
49
|
+
* import { MY_ASSISTANT_MODES } from "…"; // the array given to AssistantProductProvider
|
|
50
|
+
*
|
|
51
|
+
* const assistantEn = assistantI18nSeedCopy({
|
|
52
|
+
* namespace: "healthybowl", // the provider's `product`
|
|
53
|
+
* modes: MY_ASSISTANT_MODES,
|
|
54
|
+
* // The product's own English for shared keys, by relative key. It wins.
|
|
55
|
+
* overrides: { "header.title": "HealthyBowl AI" },
|
|
56
|
+
* });
|
|
57
|
+
* // { "healthybowl.assistant.header.title": "HealthyBowl AI",
|
|
58
|
+
* // "healthybowl.assistant.panel.ariaLabel": "AI Assistant", …,
|
|
59
|
+
* // "healthybowl.assistant.mode.general": "Ask" }
|
|
60
|
+
*
|
|
61
|
+
* Merge that into the product's English source alongside its own keys, nest
|
|
62
|
+
* the dotted keys the way the bundle builder expects, and seed. Then:
|
|
63
|
+
*
|
|
64
|
+
* - Build from the fe-libs version the app PINS, not a local checkout. Keys
|
|
65
|
+
* come and go between releases, and the seeder deprecates what is absent.
|
|
66
|
+
* - ★★ A product's existing English for a shared key is KEPT. Where its source
|
|
67
|
+
* already holds one of these keys with different words, that is usually a
|
|
68
|
+
* deliberate customisation: HealthyBowl's `header.title` is "HealthyBowl AI",
|
|
69
|
+
* and its `apiCalls.consentBody` names "your HealthyBowl data — creating
|
|
70
|
+
* crops, logging harvests". Pass those as `overrides`. Taking this English
|
|
71
|
+
* instead would rename HB's header to "AI Assistant" in English while its
|
|
72
|
+
* es/zh/hi/ta/ar translations of the same key still say HealthyBowl.
|
|
73
|
+
* Only a stale copy of an OLD fe-libs default — the product never chose those
|
|
74
|
+
* words, fe-libs has since reworded them — is replaced by this English, and
|
|
75
|
+
* only after review, because every existing translation of that key still
|
|
76
|
+
* says the old words. Keep the product's other keys too: omitting them
|
|
77
|
+
* deprecates them.
|
|
78
|
+
* - `overrides` accepts only keys this seed holds, each with non-empty English.
|
|
79
|
+
* A misspelt key would otherwise leave the shared English in place and add a
|
|
80
|
+
* key nothing requests — the customisation lost with no error — so it throws.
|
|
81
|
+
* - Every key must end up `status: ACTIVE`; a published translation of a
|
|
82
|
+
* DEPRECATED key is still omitted from the export.
|
|
83
|
+
* - `{{name}}` placeholders are interpolated by `useAssistantTr` and must
|
|
84
|
+
* survive translation verbatim.
|
|
85
|
+
* - No key here is both a leaf and a parent (`a.b` and `a.b.c`), which a nested
|
|
86
|
+
* translation dictionary could not hold; the test pins that too.
|
|
87
|
+
*
|
|
88
|
+
* ★★ IMPORT THE DEEP PATH, as above — not the barrel. The barrel re-exports
|
|
89
|
+
* this module too (its completeness test requires every module to be), and the
|
|
90
|
+
* re-export survives the build, but importing the barrel evaluates the entire
|
|
91
|
+
* assistant. Outside a browser that THROWS: the markdown renderer's bundled
|
|
92
|
+
* entity decoder calls `document.createElement` at load, so an extractor script
|
|
93
|
+
* importing `@burdenoff/fe-libs/shared/assistant` dies with `document is not
|
|
94
|
+
* defined` (measured against the built `dist`, 2026-09-14). This module's own
|
|
95
|
+
* runtime graph is thirteen modules: data tables, plus `i18n.tsx` for
|
|
96
|
+
* `assistantTranslationKey` and the I18n and product providers that module
|
|
97
|
+
* brings. Its one package is `react`, which every app already has, and it
|
|
98
|
+
* loads under plain `bun`; the test walks the graph so no UI module or other
|
|
99
|
+
* package joins it unnoticed.
|
|
100
|
+
*
|
|
101
|
+
* ★ `assistantTranslationKey` stays in `i18n.tsx` rather than a pure module.
|
|
102
|
+
* The build (`preserveModules`) does not keep a re-export in the re-exporting
|
|
103
|
+
* module, so moving it would drop it from the published
|
|
104
|
+
* `@burdenoff/fe-libs/shared/assistant/i18n` path, which microfe-healthybowl's
|
|
105
|
+
* key-compatibility test imports it from (measured against a scratch build,
|
|
106
|
+
* 2026-09-14).
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* Every literal `tr()` call's key and English default.
|
|
110
|
+
*
|
|
111
|
+
* ★ Sorted by key. `i18nManifest.test.ts` is the authority on its contents:
|
|
112
|
+
* add a `tr()` call and the test names the entry to add here, with its default.
|
|
113
|
+
*/
|
|
114
|
+
export declare const ASSISTANT_I18N_LITERAL_COPY: {
|
|
115
|
+
readonly "apiCalls.consentBody": "In Take action mode the assistant can read AND change your data — creating records, logging activity, updating details, and more, on your behalf.";
|
|
116
|
+
readonly "apiCalls.consentBody2": "It will describe what it is about to do and ask you to confirm before making a change. Only continue if you want the assistant to take actions for you.";
|
|
117
|
+
readonly "apiCalls.consentCancel": "Stay in Ask";
|
|
118
|
+
readonly "apiCalls.consentConfirm": "Enable Take action";
|
|
119
|
+
readonly "apiCalls.consentTitle": "Switch to Take action mode?";
|
|
120
|
+
readonly "attachments.blockedMany": "{{count}} attachments didn't upload. Retry or remove them before sending.";
|
|
121
|
+
readonly "attachments.blockedOne": "{{name}} didn't upload. Retry or remove it before sending.";
|
|
122
|
+
readonly "attachments.empty": "That file is empty.";
|
|
123
|
+
readonly "attachments.failed": "Upload failed";
|
|
124
|
+
readonly "attachments.imagesNotSent": "_Your photo was too large to include with this message, so the answer above is from the text and the file link only. Try a smaller or more tightly cropped photo._";
|
|
125
|
+
readonly "attachments.listLabel": "Attached files";
|
|
126
|
+
readonly "attachments.messageLabel": "Files sent with this message";
|
|
127
|
+
readonly "attachments.open": "Open {{name}}";
|
|
128
|
+
readonly "attachments.preparing": "Reading file…";
|
|
129
|
+
readonly "attachments.remove": "Remove {{name}}";
|
|
130
|
+
readonly "attachments.retry": "Retry uploading {{name}}";
|
|
131
|
+
readonly "attachments.retrying": "Retrying {{attempt}} of {{max}}";
|
|
132
|
+
readonly "attachments.tooLarge": "That file is larger than 10 MB.";
|
|
133
|
+
readonly "attachments.tooMany": "You can attach up to {{max}} files per message.";
|
|
134
|
+
readonly "attachments.unreadable": "That file could not be read.";
|
|
135
|
+
readonly "attachments.unsupportedImage": "This device can't read that image format, so it can't be resized to send. Save it as JPEG and try again.";
|
|
136
|
+
readonly "attachments.uploading": "Uploading…";
|
|
137
|
+
readonly "attachments.waking": "File service is starting up — retry {{attempt}} of {{max}}";
|
|
138
|
+
readonly "chatArea.placeholderActions": "What would you like me to do?";
|
|
139
|
+
readonly "chatArea.placeholderGeneral": "Ask me anything…";
|
|
140
|
+
readonly "chatInput.ariaLabel": "Message input";
|
|
141
|
+
readonly "chatInput.send": "Send message";
|
|
142
|
+
readonly "composer.attach": "Attach files or photos";
|
|
143
|
+
readonly "composer.attachFull": "Attachment limit reached ({{max}})";
|
|
144
|
+
readonly "composer.attachSource": "Attach from";
|
|
145
|
+
readonly "composer.connectSource": "Connect a source";
|
|
146
|
+
readonly "composer.dropHere": "Drop files to attach";
|
|
147
|
+
readonly "composer.hint": "Enter to send · Shift+Enter for newline · drag or paste files to attach";
|
|
148
|
+
readonly "composer.placeholder": "Ask me anything…";
|
|
149
|
+
readonly "composer.voiceStart": "Dictate a message";
|
|
150
|
+
readonly "composer.voiceStarting": "Starting the microphone — tap to cancel";
|
|
151
|
+
readonly "composer.voiceStop": "Stop dictation";
|
|
152
|
+
readonly "composer.writeAccessDenied": "Changes may not save — your role in this workspace does not currently allow edits. You can still plan and review an action.";
|
|
153
|
+
readonly "conversationList.voiceOnly": "Spoken conversation";
|
|
154
|
+
readonly "conversations.collapse": "Collapse history";
|
|
155
|
+
readonly "conversations.collapseLabel": "Collapse";
|
|
156
|
+
readonly "conversations.delete": "Delete conversation";
|
|
157
|
+
readonly "conversations.empty": "No conversations yet";
|
|
158
|
+
readonly "conversations.new": "New conversation";
|
|
159
|
+
readonly "conversations.rename": "Rename conversation";
|
|
160
|
+
readonly "conversations.renameLabel": "Conversation title";
|
|
161
|
+
readonly "conversations.saveTitle": "Save title";
|
|
162
|
+
readonly "conversations.startNew": "Start a new conversation";
|
|
163
|
+
readonly "conversations.title": "History";
|
|
164
|
+
readonly "empty.subtitle": "You're viewing {{page}}. Ask about it, or pick a suggestion below.";
|
|
165
|
+
readonly "empty.subtitleNoPage": "Ask me anything, or pick a suggestion below.";
|
|
166
|
+
readonly "empty.title": "How can I help?";
|
|
167
|
+
readonly "export.json": "Export as JSON";
|
|
168
|
+
readonly "export.markdown": "Export as Markdown";
|
|
169
|
+
readonly "header.autoRead": "Auto-read replies";
|
|
170
|
+
readonly "header.autoSpeakOff": "Stop reading replies aloud";
|
|
171
|
+
readonly "header.autoSpeakOn": "Read replies aloud automatically";
|
|
172
|
+
readonly "header.close": "Close assistant";
|
|
173
|
+
readonly "header.context": "Context: {{page}}";
|
|
174
|
+
readonly "header.dock": "Dock to side panel";
|
|
175
|
+
readonly "header.float": "Float chat window";
|
|
176
|
+
readonly "header.history": "Conversation history";
|
|
177
|
+
readonly "header.more": "More options";
|
|
178
|
+
readonly "header.newConversation": "New conversation";
|
|
179
|
+
readonly "header.preview": "Preview";
|
|
180
|
+
readonly "header.ready": "Ready";
|
|
181
|
+
readonly "header.title": "AI Assistant";
|
|
182
|
+
readonly "language.inputLabel": "Language";
|
|
183
|
+
readonly "language.replyLabel": "Assistant replies in";
|
|
184
|
+
readonly "language.replyMatch": "Match my language";
|
|
185
|
+
readonly "markdown.closePreview": "Close image preview";
|
|
186
|
+
readonly "markdown.copied": "Copied";
|
|
187
|
+
readonly "markdown.copy": "Copy";
|
|
188
|
+
readonly "markdown.copyCode": "Copy code";
|
|
189
|
+
readonly "markdown.enlargeImage": "Enlarge image";
|
|
190
|
+
readonly "markdown.enlargeImageNamed": "Enlarge image: {{alt}}";
|
|
191
|
+
readonly "markdown.imagePreview": "Image preview";
|
|
192
|
+
readonly "markdown.imagePreviewNamed": "Image preview: {{alt}}";
|
|
193
|
+
readonly "markdown.imageUnavailable": "Image unavailable";
|
|
194
|
+
readonly "markdown.showRemoteImage": "Show remote image";
|
|
195
|
+
readonly "markdown.showRemoteImageNamed": "Show image from {{host}}";
|
|
196
|
+
readonly "message.copied": "Copied";
|
|
197
|
+
readonly "message.copy": "Copy message";
|
|
198
|
+
readonly "message.copyShort": "Copy";
|
|
199
|
+
readonly "message.downloads": "Downloads";
|
|
200
|
+
readonly "message.retry": "Retry";
|
|
201
|
+
readonly "message.speak": "Read this reply aloud";
|
|
202
|
+
readonly "message.speakShort": "Listen";
|
|
203
|
+
readonly "message.stopSpeaking": "Stop reading aloud";
|
|
204
|
+
readonly "message.stopSpeakingShort": "Stop";
|
|
205
|
+
readonly "messageList.ariaLabel": "Conversation messages";
|
|
206
|
+
readonly "modeSelector.ariaLabel": "Select assistant mode";
|
|
207
|
+
readonly "panel.ariaLabel": "AI Assistant";
|
|
208
|
+
readonly "pendingWrite.approve": "Approve this change";
|
|
209
|
+
readonly "pendingWrite.approvedPrompt": "I approved that change — go ahead.";
|
|
210
|
+
readonly "pendingWrite.approving": "Approving…";
|
|
211
|
+
readonly "pendingWrite.aria": "Change awaiting your approval";
|
|
212
|
+
readonly "pendingWrite.noValues": "No field values were included with this request.";
|
|
213
|
+
readonly "pendingWrite.subtitle": "The assistant asked to make this change and was stopped. Approve it, or say what to change.";
|
|
214
|
+
readonly "pendingWrite.subtitleReply": "The assistant asked to make this change and was stopped. Reply to approve or decline.";
|
|
215
|
+
readonly "pendingWrite.title": "Nothing has changed yet";
|
|
216
|
+
readonly "preview.close": "Close preview";
|
|
217
|
+
readonly "preview.failed": "The preview could not be displayed.";
|
|
218
|
+
readonly "preview.title": "Preview";
|
|
219
|
+
readonly "speech.codeBlock": "Code block";
|
|
220
|
+
readonly "speech.emailAt": "at";
|
|
221
|
+
readonly "speech.emailDot": "dot";
|
|
222
|
+
readonly "speech.image": "image";
|
|
223
|
+
readonly "speech.largeTable": "Table with {{rows}} rows and {{columns}} columns";
|
|
224
|
+
readonly "speech.link": "link";
|
|
225
|
+
readonly "speech.nestedItem": "Sub-item {{ordinal}}";
|
|
226
|
+
readonly "speech.noVoiceForReply": "This reply is in {{language}}, and no {{language}} voice is installed on this device.";
|
|
227
|
+
readonly "speech.noVoicesOnDevice": "This device has no speech voices installed. Add one in your device speech or accessibility settings.";
|
|
228
|
+
readonly "speech.truncated": "The rest of this message is not read aloud";
|
|
229
|
+
readonly "spokenTurns.many": "{{count}} spoken turns are kept out of this thread";
|
|
230
|
+
readonly "spokenTurns.one": "1 spoken turn is kept out of this thread";
|
|
231
|
+
readonly "spokenTurns.view": "View transcript";
|
|
232
|
+
readonly "tool.details": "Details";
|
|
233
|
+
readonly "tool.done": "Done";
|
|
234
|
+
readonly "tool.failed": "Some steps failed";
|
|
235
|
+
readonly "tool.working": "Working on it…";
|
|
236
|
+
readonly "voice.denied": "Microphone access is blocked. Allow it in your browser settings to dictate.";
|
|
237
|
+
readonly "voice.failed": "Dictation stopped unexpectedly.";
|
|
238
|
+
readonly "voice.languageFollowApp": "Same as interface";
|
|
239
|
+
readonly "voice.languageLabel": "Language you speak to the assistant";
|
|
240
|
+
readonly "voice.languageNotSupported": "This browser cannot recognise spoken {{language}}. Try a different browser, or type instead.";
|
|
241
|
+
readonly "voice.listening": "Listening… speak now, tap the square to stop";
|
|
242
|
+
readonly "voice.network": "Speech recognition is offline right now.";
|
|
243
|
+
readonly "voice.noMic": "No microphone was found.";
|
|
244
|
+
readonly "voice.preview": "Hear this voice";
|
|
245
|
+
readonly "voice.previewShort": "Preview";
|
|
246
|
+
readonly "voice.starting": "Starting the microphone…";
|
|
247
|
+
readonly "voice.voiceAuto": "Best available";
|
|
248
|
+
readonly "voice.voiceLabel": "Voice that reads replies";
|
|
249
|
+
readonly "voiceSession.collapse": "Shrink to the compact controller";
|
|
250
|
+
readonly "voiceSession.connecting": "Starting the microphone…";
|
|
251
|
+
readonly "voiceSession.continueInChat": "Continue in chat";
|
|
252
|
+
readonly "voiceSession.continuedIntro": "Continued from a voice conversation. You asked about:";
|
|
253
|
+
readonly "voiceSession.continuedMore": "…and {{count}} more";
|
|
254
|
+
readonly "voiceSession.continuedNothing": "Continued from a voice conversation.";
|
|
255
|
+
readonly "voiceSession.earlierLabel": "Earlier";
|
|
256
|
+
readonly "voiceSession.end": "End the voice conversation";
|
|
257
|
+
readonly "voiceSession.endShort": "End";
|
|
258
|
+
readonly "voiceSession.endpointGrace": "Still listening — take your time";
|
|
259
|
+
readonly "voiceSession.expand": "Expand the conversation to full screen";
|
|
260
|
+
readonly "voiceSession.expandPanel": "Show the conversation in the panel";
|
|
261
|
+
readonly "voiceSession.interrupt": "Stop the assistant and speak";
|
|
262
|
+
readonly "voiceSession.interrupting": "Stopped — go ahead";
|
|
263
|
+
readonly "voiceSession.listening": "Listening…";
|
|
264
|
+
readonly "voiceSession.micDenied": "Microphone access is blocked. Allow it in your browser settings to talk.";
|
|
265
|
+
readonly "voiceSession.mute": "Turn the microphone off";
|
|
266
|
+
readonly "voiceSession.muted": "Microphone off";
|
|
267
|
+
readonly "voiceSession.newSession": "New voice session";
|
|
268
|
+
readonly "voiceSession.noSpeechSupport": "This browser cannot listen. Try a different browser, or type instead.";
|
|
269
|
+
readonly "voiceSession.noVoiceSupport": "This device has no voice that can speak this language.";
|
|
270
|
+
readonly "voiceSession.noticeNetwork": "Speech recognition lost its connection. Check your network — it will retry.";
|
|
271
|
+
readonly "voiceSession.noticeNotCapturing": "The microphone did not start. Check that this site is allowed to use it, then try again.";
|
|
272
|
+
readonly "voiceSession.noticeNothingHeard": "Nothing heard yet. Check your microphone is not muted or in use by another app.";
|
|
273
|
+
readonly "voiceSession.noticeRecognitionFailed": "Speech recognition stopped unexpectedly. It will retry — if it keeps happening, reload the page.";
|
|
274
|
+
readonly "voiceSession.save": "Save transcript";
|
|
275
|
+
readonly "voiceSession.savedAt": "Saved";
|
|
276
|
+
readonly "voiceSession.sessionLabel": "Session";
|
|
277
|
+
readonly "voiceSession.speakerAssistant": "Assistant";
|
|
278
|
+
readonly "voiceSession.speakerYou": "You";
|
|
279
|
+
readonly "voiceSession.speaking": "Speaking — tap to stop";
|
|
280
|
+
readonly "voiceSession.start": "Start a voice conversation";
|
|
281
|
+
readonly "voiceSession.title": "Voice conversation";
|
|
282
|
+
readonly "voiceSession.transcript": "Voice conversation";
|
|
283
|
+
readonly "voiceSession.transcriptClose": "Close the transcript";
|
|
284
|
+
readonly "voiceSession.transcriptEmpty": "Nothing spoken yet in this session.";
|
|
285
|
+
readonly "voiceSession.transcriptHint": "Spoken turns in this conversation — kept out of your typed chat.";
|
|
286
|
+
readonly "voiceSession.transcriptTitle": "Voice transcript";
|
|
287
|
+
readonly "voiceSession.unmute": "Turn the microphone on";
|
|
288
|
+
};
|
|
289
|
+
/** A relative key written out in a `tr()` call. */
|
|
290
|
+
export type AssistantI18nLiteralKey = keyof typeof ASSISTANT_I18N_LITERAL_COPY;
|
|
291
|
+
/**
|
|
292
|
+
* Keys the UI resolves through a variable, read from the tables it renders
|
|
293
|
+
* from.
|
|
294
|
+
*/
|
|
295
|
+
export declare const ASSISTANT_I18N_COMPUTED_COPY: Readonly<Record<string, string>>;
|
|
296
|
+
/**
|
|
297
|
+
* The manifest: every relative key whose English fe-libs owns, literal and
|
|
298
|
+
* computed. Mode labels are the product's — see `assistantModeI18nCopy` — and
|
|
299
|
+
* so is any shared key a product has customised: see `overrides` on
|
|
300
|
+
* `assistantI18nSeedCopy`.
|
|
301
|
+
*/
|
|
302
|
+
export declare const ASSISTANT_I18N_MANIFEST: Readonly<Record<string, string>>;
|
|
303
|
+
/** The part of a mode that decides its pill's key and English. */
|
|
304
|
+
export type AssistantModeCopySource = Pick<AssistantModeConfig, "id" | "label">;
|
|
305
|
+
/**
|
|
306
|
+
* `mode.<id>` for each mode a product offers, in the product's own words.
|
|
307
|
+
*
|
|
308
|
+
* Mirrors the pill, which asks for `mode.<id>` with the product's `label` as
|
|
309
|
+
* the English, or the shared name when the label is empty.
|
|
310
|
+
* Modes the product does not offer are never requested, so they are not here.
|
|
311
|
+
*/
|
|
312
|
+
export declare function assistantModeI18nCopy(modes: readonly AssistantModeCopySource[]): Record<string, string>;
|
|
313
|
+
/**
|
|
314
|
+
* Everything a product seeds for the shared assistant, as FULL keys under its
|
|
315
|
+
* namespace: the manifest, its own mode labels, and its own English for any
|
|
316
|
+
* shared key it has customised.
|
|
317
|
+
*
|
|
318
|
+
* `namespace` is the id given to `AssistantProductProvider` /
|
|
319
|
+
* `AssistantI18nProvider`; the keys are built by `assistantTranslationKey`, the
|
|
320
|
+
* same function `useAssistantTr` looks them up with.
|
|
321
|
+
*
|
|
322
|
+
* `overrides` is applied last, by RELATIVE key, so the product's words win —
|
|
323
|
+
* see the recipe in the module docblock for which words those are. Each
|
|
324
|
+
* replaces exactly its own key: HealthyBowl's `header.title` leaves
|
|
325
|
+
* `panel.ariaLabel`, whose English is also "AI Assistant", untouched.
|
|
326
|
+
*
|
|
327
|
+
* @throws when an override names a key this seed does not hold, or gives it
|
|
328
|
+
* blank English — a blank value would render as nothing, not as a fallback.
|
|
329
|
+
*/
|
|
330
|
+
export declare function assistantI18nSeedCopy(args: {
|
|
331
|
+
namespace: string;
|
|
332
|
+
modes: readonly AssistantModeCopySource[];
|
|
333
|
+
overrides?: Readonly<Record<string, string>>;
|
|
334
|
+
}): Record<string, string>;
|
|
335
|
+
//# sourceMappingURL=i18nManifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18nManifest.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/i18nManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAQ1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuMG,CAAC;AAE5C,mDAAmD;AACnD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,2BAA2B,CAAC;AAW/E;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBtE,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIjE,CAAC;AAEL,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,uBAAuB,EAAE,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9C,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCzB"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { assistantTranslationKey as e } from "./i18n.js";
|
|
2
|
+
import { incompleteTurnNotice as t } from "./streamBudget.js";
|
|
3
|
+
import { STAGE_COPY as n, THINKING_PHRASES as r } from "./stageCopy.js";
|
|
4
|
+
import { VOICE_MUTED_LABEL as i, VOICE_THINKING_LABEL as a } from "./voice/voiceStatus.js";
|
|
5
|
+
import { ATTACHMENT_SOURCES as o } from "./attachmentSources.js";
|
|
6
|
+
import { ASSISTANT_MODE_FALLBACK_LABELS as s, ASSISTANT_MODE_IDS as c } from "./modeCopy.js";
|
|
7
|
+
//#region src/shared/assistant/i18nManifest.ts
|
|
8
|
+
var l = {
|
|
9
|
+
"apiCalls.consentBody": "In Take action mode the assistant can read AND change your data — creating records, logging activity, updating details, and more, on your behalf.",
|
|
10
|
+
"apiCalls.consentBody2": "It will describe what it is about to do and ask you to confirm before making a change. Only continue if you want the assistant to take actions for you.",
|
|
11
|
+
"apiCalls.consentCancel": "Stay in Ask",
|
|
12
|
+
"apiCalls.consentConfirm": "Enable Take action",
|
|
13
|
+
"apiCalls.consentTitle": "Switch to Take action mode?",
|
|
14
|
+
"attachments.blockedMany": "{{count}} attachments didn't upload. Retry or remove them before sending.",
|
|
15
|
+
"attachments.blockedOne": "{{name}} didn't upload. Retry or remove it before sending.",
|
|
16
|
+
"attachments.empty": "That file is empty.",
|
|
17
|
+
"attachments.failed": "Upload failed",
|
|
18
|
+
"attachments.imagesNotSent": "_Your photo was too large to include with this message, so the answer above is from the text and the file link only. Try a smaller or more tightly cropped photo._",
|
|
19
|
+
"attachments.listLabel": "Attached files",
|
|
20
|
+
"attachments.messageLabel": "Files sent with this message",
|
|
21
|
+
"attachments.open": "Open {{name}}",
|
|
22
|
+
"attachments.preparing": "Reading file…",
|
|
23
|
+
"attachments.remove": "Remove {{name}}",
|
|
24
|
+
"attachments.retry": "Retry uploading {{name}}",
|
|
25
|
+
"attachments.retrying": "Retrying {{attempt}} of {{max}}",
|
|
26
|
+
"attachments.tooLarge": "That file is larger than 10 MB.",
|
|
27
|
+
"attachments.tooMany": "You can attach up to {{max}} files per message.",
|
|
28
|
+
"attachments.unreadable": "That file could not be read.",
|
|
29
|
+
"attachments.unsupportedImage": "This device can't read that image format, so it can't be resized to send. Save it as JPEG and try again.",
|
|
30
|
+
"attachments.uploading": "Uploading…",
|
|
31
|
+
"attachments.waking": "File service is starting up — retry {{attempt}} of {{max}}",
|
|
32
|
+
"chatArea.placeholderActions": "What would you like me to do?",
|
|
33
|
+
"chatArea.placeholderGeneral": "Ask me anything…",
|
|
34
|
+
"chatInput.ariaLabel": "Message input",
|
|
35
|
+
"chatInput.send": "Send message",
|
|
36
|
+
"composer.attach": "Attach files or photos",
|
|
37
|
+
"composer.attachFull": "Attachment limit reached ({{max}})",
|
|
38
|
+
"composer.attachSource": "Attach from",
|
|
39
|
+
"composer.connectSource": "Connect a source",
|
|
40
|
+
"composer.dropHere": "Drop files to attach",
|
|
41
|
+
"composer.hint": "Enter to send · Shift+Enter for newline · drag or paste files to attach",
|
|
42
|
+
"composer.placeholder": "Ask me anything…",
|
|
43
|
+
"composer.voiceStart": "Dictate a message",
|
|
44
|
+
"composer.voiceStarting": "Starting the microphone — tap to cancel",
|
|
45
|
+
"composer.voiceStop": "Stop dictation",
|
|
46
|
+
"composer.writeAccessDenied": "Changes may not save — your role in this workspace does not currently allow edits. You can still plan and review an action.",
|
|
47
|
+
"conversationList.voiceOnly": "Spoken conversation",
|
|
48
|
+
"conversations.collapse": "Collapse history",
|
|
49
|
+
"conversations.collapseLabel": "Collapse",
|
|
50
|
+
"conversations.delete": "Delete conversation",
|
|
51
|
+
"conversations.empty": "No conversations yet",
|
|
52
|
+
"conversations.new": "New conversation",
|
|
53
|
+
"conversations.rename": "Rename conversation",
|
|
54
|
+
"conversations.renameLabel": "Conversation title",
|
|
55
|
+
"conversations.saveTitle": "Save title",
|
|
56
|
+
"conversations.startNew": "Start a new conversation",
|
|
57
|
+
"conversations.title": "History",
|
|
58
|
+
"empty.subtitle": "You're viewing {{page}}. Ask about it, or pick a suggestion below.",
|
|
59
|
+
"empty.subtitleNoPage": "Ask me anything, or pick a suggestion below.",
|
|
60
|
+
"empty.title": "How can I help?",
|
|
61
|
+
"export.json": "Export as JSON",
|
|
62
|
+
"export.markdown": "Export as Markdown",
|
|
63
|
+
"header.autoRead": "Auto-read replies",
|
|
64
|
+
"header.autoSpeakOff": "Stop reading replies aloud",
|
|
65
|
+
"header.autoSpeakOn": "Read replies aloud automatically",
|
|
66
|
+
"header.close": "Close assistant",
|
|
67
|
+
"header.context": "Context: {{page}}",
|
|
68
|
+
"header.dock": "Dock to side panel",
|
|
69
|
+
"header.float": "Float chat window",
|
|
70
|
+
"header.history": "Conversation history",
|
|
71
|
+
"header.more": "More options",
|
|
72
|
+
"header.newConversation": "New conversation",
|
|
73
|
+
"header.preview": "Preview",
|
|
74
|
+
"header.ready": "Ready",
|
|
75
|
+
"header.title": "AI Assistant",
|
|
76
|
+
"language.inputLabel": "Language",
|
|
77
|
+
"language.replyLabel": "Assistant replies in",
|
|
78
|
+
"language.replyMatch": "Match my language",
|
|
79
|
+
"markdown.closePreview": "Close image preview",
|
|
80
|
+
"markdown.copied": "Copied",
|
|
81
|
+
"markdown.copy": "Copy",
|
|
82
|
+
"markdown.copyCode": "Copy code",
|
|
83
|
+
"markdown.enlargeImage": "Enlarge image",
|
|
84
|
+
"markdown.enlargeImageNamed": "Enlarge image: {{alt}}",
|
|
85
|
+
"markdown.imagePreview": "Image preview",
|
|
86
|
+
"markdown.imagePreviewNamed": "Image preview: {{alt}}",
|
|
87
|
+
"markdown.imageUnavailable": "Image unavailable",
|
|
88
|
+
"markdown.showRemoteImage": "Show remote image",
|
|
89
|
+
"markdown.showRemoteImageNamed": "Show image from {{host}}",
|
|
90
|
+
"message.copied": "Copied",
|
|
91
|
+
"message.copy": "Copy message",
|
|
92
|
+
"message.copyShort": "Copy",
|
|
93
|
+
"message.downloads": "Downloads",
|
|
94
|
+
"message.retry": "Retry",
|
|
95
|
+
"message.speak": "Read this reply aloud",
|
|
96
|
+
"message.speakShort": "Listen",
|
|
97
|
+
"message.stopSpeaking": "Stop reading aloud",
|
|
98
|
+
"message.stopSpeakingShort": "Stop",
|
|
99
|
+
"messageList.ariaLabel": "Conversation messages",
|
|
100
|
+
"modeSelector.ariaLabel": "Select assistant mode",
|
|
101
|
+
"panel.ariaLabel": "AI Assistant",
|
|
102
|
+
"pendingWrite.approve": "Approve this change",
|
|
103
|
+
"pendingWrite.approvedPrompt": "I approved that change — go ahead.",
|
|
104
|
+
"pendingWrite.approving": "Approving…",
|
|
105
|
+
"pendingWrite.aria": "Change awaiting your approval",
|
|
106
|
+
"pendingWrite.noValues": "No field values were included with this request.",
|
|
107
|
+
"pendingWrite.subtitle": "The assistant asked to make this change and was stopped. Approve it, or say what to change.",
|
|
108
|
+
"pendingWrite.subtitleReply": "The assistant asked to make this change and was stopped. Reply to approve or decline.",
|
|
109
|
+
"pendingWrite.title": "Nothing has changed yet",
|
|
110
|
+
"preview.close": "Close preview",
|
|
111
|
+
"preview.failed": "The preview could not be displayed.",
|
|
112
|
+
"preview.title": "Preview",
|
|
113
|
+
"speech.codeBlock": "Code block",
|
|
114
|
+
"speech.emailAt": "at",
|
|
115
|
+
"speech.emailDot": "dot",
|
|
116
|
+
"speech.image": "image",
|
|
117
|
+
"speech.largeTable": "Table with {{rows}} rows and {{columns}} columns",
|
|
118
|
+
"speech.link": "link",
|
|
119
|
+
"speech.nestedItem": "Sub-item {{ordinal}}",
|
|
120
|
+
"speech.noVoiceForReply": "This reply is in {{language}}, and no {{language}} voice is installed on this device.",
|
|
121
|
+
"speech.noVoicesOnDevice": "This device has no speech voices installed. Add one in your device speech or accessibility settings.",
|
|
122
|
+
"speech.truncated": "The rest of this message is not read aloud",
|
|
123
|
+
"spokenTurns.many": "{{count}} spoken turns are kept out of this thread",
|
|
124
|
+
"spokenTurns.one": "1 spoken turn is kept out of this thread",
|
|
125
|
+
"spokenTurns.view": "View transcript",
|
|
126
|
+
"tool.details": "Details",
|
|
127
|
+
"tool.done": "Done",
|
|
128
|
+
"tool.failed": "Some steps failed",
|
|
129
|
+
"tool.working": "Working on it…",
|
|
130
|
+
"voice.denied": "Microphone access is blocked. Allow it in your browser settings to dictate.",
|
|
131
|
+
"voice.failed": "Dictation stopped unexpectedly.",
|
|
132
|
+
"voice.languageFollowApp": "Same as interface",
|
|
133
|
+
"voice.languageLabel": "Language you speak to the assistant",
|
|
134
|
+
"voice.languageNotSupported": "This browser cannot recognise spoken {{language}}. Try a different browser, or type instead.",
|
|
135
|
+
"voice.listening": "Listening… speak now, tap the square to stop",
|
|
136
|
+
"voice.network": "Speech recognition is offline right now.",
|
|
137
|
+
"voice.noMic": "No microphone was found.",
|
|
138
|
+
"voice.preview": "Hear this voice",
|
|
139
|
+
"voice.previewShort": "Preview",
|
|
140
|
+
"voice.starting": "Starting the microphone…",
|
|
141
|
+
"voice.voiceAuto": "Best available",
|
|
142
|
+
"voice.voiceLabel": "Voice that reads replies",
|
|
143
|
+
"voiceSession.collapse": "Shrink to the compact controller",
|
|
144
|
+
"voiceSession.connecting": "Starting the microphone…",
|
|
145
|
+
"voiceSession.continueInChat": "Continue in chat",
|
|
146
|
+
"voiceSession.continuedIntro": "Continued from a voice conversation. You asked about:",
|
|
147
|
+
"voiceSession.continuedMore": "…and {{count}} more",
|
|
148
|
+
"voiceSession.continuedNothing": "Continued from a voice conversation.",
|
|
149
|
+
"voiceSession.earlierLabel": "Earlier",
|
|
150
|
+
"voiceSession.end": "End the voice conversation",
|
|
151
|
+
"voiceSession.endShort": "End",
|
|
152
|
+
"voiceSession.endpointGrace": "Still listening — take your time",
|
|
153
|
+
"voiceSession.expand": "Expand the conversation to full screen",
|
|
154
|
+
"voiceSession.expandPanel": "Show the conversation in the panel",
|
|
155
|
+
"voiceSession.interrupt": "Stop the assistant and speak",
|
|
156
|
+
"voiceSession.interrupting": "Stopped — go ahead",
|
|
157
|
+
"voiceSession.listening": "Listening…",
|
|
158
|
+
"voiceSession.micDenied": "Microphone access is blocked. Allow it in your browser settings to talk.",
|
|
159
|
+
"voiceSession.mute": "Turn the microphone off",
|
|
160
|
+
"voiceSession.muted": "Microphone off",
|
|
161
|
+
"voiceSession.newSession": "New voice session",
|
|
162
|
+
"voiceSession.noSpeechSupport": "This browser cannot listen. Try a different browser, or type instead.",
|
|
163
|
+
"voiceSession.noVoiceSupport": "This device has no voice that can speak this language.",
|
|
164
|
+
"voiceSession.noticeNetwork": "Speech recognition lost its connection. Check your network — it will retry.",
|
|
165
|
+
"voiceSession.noticeNotCapturing": "The microphone did not start. Check that this site is allowed to use it, then try again.",
|
|
166
|
+
"voiceSession.noticeNothingHeard": "Nothing heard yet. Check your microphone is not muted or in use by another app.",
|
|
167
|
+
"voiceSession.noticeRecognitionFailed": "Speech recognition stopped unexpectedly. It will retry — if it keeps happening, reload the page.",
|
|
168
|
+
"voiceSession.save": "Save transcript",
|
|
169
|
+
"voiceSession.savedAt": "Saved",
|
|
170
|
+
"voiceSession.sessionLabel": "Session",
|
|
171
|
+
"voiceSession.speakerAssistant": "Assistant",
|
|
172
|
+
"voiceSession.speakerYou": "You",
|
|
173
|
+
"voiceSession.speaking": "Speaking — tap to stop",
|
|
174
|
+
"voiceSession.start": "Start a voice conversation",
|
|
175
|
+
"voiceSession.title": "Voice conversation",
|
|
176
|
+
"voiceSession.transcript": "Voice conversation",
|
|
177
|
+
"voiceSession.transcriptClose": "Close the transcript",
|
|
178
|
+
"voiceSession.transcriptEmpty": "Nothing spoken yet in this session.",
|
|
179
|
+
"voiceSession.transcriptHint": "Spoken turns in this conversation — kept out of your typed chat.",
|
|
180
|
+
"voiceSession.transcriptTitle": "Voice transcript",
|
|
181
|
+
"voiceSession.unmute": "Turn the microphone on"
|
|
182
|
+
}, u = (e) => Object.fromEntries(e.map((e) => [e.key, e.fallback])), d = Object.freeze({
|
|
183
|
+
...u(Object.values(n)),
|
|
184
|
+
...u(r),
|
|
185
|
+
...u([a, i]),
|
|
186
|
+
...u(c.map(t)),
|
|
187
|
+
...Object.fromEntries(o.map((e) => [e.labelKey, e.labelFallback]))
|
|
188
|
+
}), f = Object.freeze({
|
|
189
|
+
...l,
|
|
190
|
+
...d
|
|
191
|
+
});
|
|
192
|
+
function p(e) {
|
|
193
|
+
return Object.fromEntries(e.map((e) => [`mode.${e.id}`, e.label || s[e.id]]));
|
|
194
|
+
}
|
|
195
|
+
function m(t) {
|
|
196
|
+
let n = {
|
|
197
|
+
...f,
|
|
198
|
+
...p(t.modes)
|
|
199
|
+
}, r = Object.entries(t.overrides ?? {}), i = r.filter(([e]) => !Object.hasOwn(n, e)).map(([e]) => e);
|
|
200
|
+
if (i.length > 0) throw Error(`assistantI18nSeedCopy: no shared assistant key ${i.join(", ")} to override. Check the spelling, or that the key is a mode this product offers; a key fe-libs no longer requests belongs with the product's own keys.`);
|
|
201
|
+
let a = r.filter(([, e]) => e.trim() === "").map(([e]) => e);
|
|
202
|
+
if (a.length > 0) throw Error(`assistantI18nSeedCopy: blank English for ${a.join(", ")}. Omit the override to keep the shared English.`);
|
|
203
|
+
let o = {
|
|
204
|
+
...n,
|
|
205
|
+
...Object.fromEntries(r)
|
|
206
|
+
};
|
|
207
|
+
return Object.fromEntries(Object.entries(o).map(([n, r]) => [e(t.namespace, n), r]));
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
export { d as ASSISTANT_I18N_COMPUTED_COPY, l as ASSISTANT_I18N_LITERAL_COPY, f as ASSISTANT_I18N_MANIFEST, m as assistantI18nSeedCopy, p as assistantModeI18nCopy };
|
|
@@ -64,6 +64,8 @@ export * from './operations';
|
|
|
64
64
|
export * from './capabilities';
|
|
65
65
|
export * from './speech/hostedTtsProtocol';
|
|
66
66
|
export * from './i18n';
|
|
67
|
+
export * from './i18nManifest';
|
|
68
|
+
export * from './modeCopy';
|
|
67
69
|
export * from './voice/speechLabels';
|
|
68
70
|
export * from './voice/replyLanguage';
|
|
69
71
|
export * from './voice/speechPlayback';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AAGxB,cAAc,wBAAwB,CAAC;AAKvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAK/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,cAAc,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AAGxB,cAAc,wBAAwB,CAAC;AAKvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAK/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,cAAc,QAAQ,CAAC;AAIvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAE3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,0CAA0C,CAAC;AACzD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AAGzC,cAAc,WAAW,CAAC;AAE1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAErC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAElC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAE1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,OAAO,CAAC;AACtB,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AssistantMode } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The shared English name of each mode: what a mode pill shows when the
|
|
4
|
+
* product's own `label` is empty.
|
|
5
|
+
*
|
|
6
|
+
* ★ Its own module, apart from `ASSISTANT_MODE_META`, because that table
|
|
7
|
+
* carries icon components. The i18n manifest (`i18nManifest.ts`) needs these
|
|
8
|
+
* words and the complete list of modes, and a product's extractor script loads
|
|
9
|
+
* the manifest outside any React tree — so neither may live behind a component
|
|
10
|
+
* import.
|
|
11
|
+
*
|
|
12
|
+
* ★ `satisfies Record<AssistantMode, string>` makes the table exactly the mode
|
|
13
|
+
* union: a new mode without a name here, or a name for a mode that no longer
|
|
14
|
+
* exists, fails the typecheck.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ASSISTANT_MODE_FALLBACK_LABELS: {
|
|
17
|
+
readonly general: "Ask";
|
|
18
|
+
readonly assistant: "Ask";
|
|
19
|
+
readonly "api-calls": "Take action";
|
|
20
|
+
readonly "vibe-plugins": "Build";
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Every mode id, read off the table above so the list cannot fall behind the
|
|
24
|
+
* union.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ASSISTANT_MODE_IDS: readonly AssistantMode[];
|
|
27
|
+
//# sourceMappingURL=modeCopy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modeCopy.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/modeCopy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,8BAA8B;;;;;CAKO,CAAC;AAEnD;;;GAGG;AAGH,eAAO,MAAM,kBAAkB,EAE1B,SAAS,aAAa,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBnD,OAAO,KAAK,EACV,+BAA+B,EAG/B,OAAO,EACR,MAAM,iBAAiB,CAAC;AAIzB,UAAU,KAAK;IACb,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"AssistantMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwBnD,OAAO,KAAK,EACV,+BAA+B,EAG/B,OAAO,EACR,MAAM,iBAAiB,CAAC;AAIzB,UAAU,KAAK;IACb,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CA0U1C,CAAC"}
|
|
@@ -166,7 +166,7 @@ var O = ({ onApprovePendingWrite: E, approvingWriteRef: O = null, message: k, pr
|
|
|
166
166
|
className: "flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-text-muted transition-colors hover:bg-bg-elevated hover:text-text-secondary",
|
|
167
167
|
"aria-label": F("message.copy", "Copy message"),
|
|
168
168
|
"data-testid": "assistant-message-copy",
|
|
169
|
-
children: H ? /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(v, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ S("span", { children: F("message.copied", "Copied") })] }) : /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(y, { className: "size-3" }), /* @__PURE__ */ S("span", { children: F("message.
|
|
169
|
+
children: H ? /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(v, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ S("span", { children: F("message.copied", "Copied") })] }) : /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(y, { className: "size-3" }), /* @__PURE__ */ S("span", { children: F("message.copyShort", "Copy") })] })
|
|
170
170
|
}),
|
|
171
171
|
X && z.isSupported && (() => {
|
|
172
172
|
let e = z.blockedFor(k.id) ?? z.disabledReason, t = !!e && !!N, n = t ? `speak-reason-${k.id}` : void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantPendingWriteCard.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantPendingWriteCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,UAAU,KAAK;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"AssistantPendingWriteCard.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantPendingWriteCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,UAAU,KAAK;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,KAAK,CAkG/C,CAAC"}
|
|
@@ -22,7 +22,7 @@ var i = ({ pendingWrite: i, onApprove: a, approving: o = !1 }) => {
|
|
|
22
22
|
children: s("pendingWrite.title", "Nothing has changed yet")
|
|
23
23
|
}), /* @__PURE__ */ n("p", {
|
|
24
24
|
className: "text-[11px] leading-relaxed text-text-secondary",
|
|
25
|
-
children: s("pendingWrite.subtitle",
|
|
25
|
+
children: c ? s("pendingWrite.subtitle", "The assistant asked to make this change and was stopped. Approve it, or say what to change.") : s("pendingWrite.subtitleReply", "The assistant asked to make this change and was stopped. Reply to approve or decline.")
|
|
26
26
|
})]
|
|
27
27
|
})]
|
|
28
28
|
}),
|
|
@@ -10,9 +10,13 @@ interface Props {
|
|
|
10
10
|
disabled?: boolean;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Per-mode presentation metadata
|
|
14
|
-
*
|
|
15
|
-
* transport-level value ('general' / 'api-calls' / 'vibe-plugins').
|
|
13
|
+
* Per-mode presentation metadata: the icon, and the shared English name used
|
|
14
|
+
* when a product's `label` is empty ('Ask' / 'Take action'), while the mode ID
|
|
15
|
+
* stays the transport-level value ('general' / 'api-calls' / 'vibe-plugins').
|
|
16
|
+
*
|
|
17
|
+
* ★ `i18nKey` is NOT the key the pill requests — that is `mode.<id>`, below.
|
|
18
|
+
* Nothing passes `i18nKey` to a translator; it is kept only because this table
|
|
19
|
+
* is published. Seed from `i18nManifest.ts`, never from this field.
|
|
16
20
|
*/
|
|
17
21
|
export declare const ASSISTANT_MODE_META: Record<AssistantMode, {
|
|
18
22
|
i18nKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantModeSelector.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantModeSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAsB,MAAM,OAAO,CAAC;AACzE,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantModeSelector.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantModeSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,EAAE,EAAsB,MAAM,OAAO,CAAC;AACzE,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,UAAU,KAAK;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,iFAAiF;IACjF,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAsBxD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAgBf;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAkI3C,CAAC"}
|
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
import { useAssistantTr as e } from "../../i18n.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { ASSISTANT_MODE_FALLBACK_LABELS as t } from "../../modeCopy.js";
|
|
3
|
+
import { useCallback as n, useRef as r } from "react";
|
|
4
|
+
import { ShieldCheck as i, Sparkles as a, Zap as o } from "lucide-react";
|
|
5
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
6
|
//#region src/shared/assistant/ui/composer/AssistantModeSelector.tsx
|
|
6
|
-
var
|
|
7
|
+
var l = {
|
|
7
8
|
general: {
|
|
8
9
|
i18nKey: "mode.ask",
|
|
9
|
-
fallback:
|
|
10
|
-
icon:
|
|
10
|
+
fallback: t.general,
|
|
11
|
+
icon: a
|
|
11
12
|
},
|
|
12
13
|
assistant: {
|
|
13
14
|
i18nKey: "mode.ask",
|
|
14
|
-
fallback:
|
|
15
|
-
icon:
|
|
15
|
+
fallback: t.assistant,
|
|
16
|
+
icon: a
|
|
16
17
|
},
|
|
17
18
|
"api-calls": {
|
|
18
19
|
i18nKey: "mode.takeAction",
|
|
19
|
-
fallback: "
|
|
20
|
-
icon:
|
|
20
|
+
fallback: t["api-calls"],
|
|
21
|
+
icon: i
|
|
21
22
|
},
|
|
22
23
|
"vibe-plugins": {
|
|
23
24
|
i18nKey: "mode.build",
|
|
24
|
-
fallback: "
|
|
25
|
-
icon:
|
|
25
|
+
fallback: t["vibe-plugins"],
|
|
26
|
+
icon: o
|
|
26
27
|
}
|
|
27
28
|
};
|
|
28
|
-
function
|
|
29
|
+
function u(e, t, n) {
|
|
29
30
|
switch (e) {
|
|
30
31
|
case "Home": return 0;
|
|
31
32
|
case "End": return n;
|
|
@@ -36,21 +37,21 @@ function l(e, t, n) {
|
|
|
36
37
|
default: return null;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
var
|
|
40
|
-
let d = e(), f =
|
|
41
|
-
if (
|
|
42
|
-
let
|
|
43
|
-
if (
|
|
40
|
+
var d = ({ mode: t, availableModes: i, onModeChange: a, disabled: o = !1 }) => {
|
|
41
|
+
let d = e(), f = r(null), p = n((e) => {
|
|
42
|
+
if (o) return;
|
|
43
|
+
let n = e.target?.closest("[data-mode-id]")?.dataset.modeId, r = n ? i.findIndex((e) => e.id === n) : -1, s = r >= 0 ? r : i.findIndex((e) => e.id === t), c = u(e.key, s, i.length - 1);
|
|
44
|
+
if (c === null) return;
|
|
44
45
|
e.preventDefault();
|
|
45
|
-
let
|
|
46
|
-
|
|
46
|
+
let l = i[c];
|
|
47
|
+
l && (f.current?.querySelector(`[data-mode-id="${l.id}"]`)?.focus(), l.id !== t && a(l.id));
|
|
47
48
|
}, [
|
|
48
49
|
i,
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
o,
|
|
51
|
+
t,
|
|
51
52
|
a
|
|
52
53
|
]);
|
|
53
|
-
return i.length < 2 ? null : /* @__PURE__ */
|
|
54
|
+
return i.length < 2 ? null : /* @__PURE__ */ s("div", {
|
|
54
55
|
ref: f,
|
|
55
56
|
role: "radiogroup",
|
|
56
57
|
"aria-label": d("modeSelector.ariaLabel", "Select assistant mode"),
|
|
@@ -58,24 +59,24 @@ var u = ({ mode: r, availableModes: i, onModeChange: a, disabled: u = !1 }) => {
|
|
|
58
59
|
className: "inline-flex max-w-full items-center gap-1 overflow-x-auto rounded-full border border-border-subtle bg-bg-elevated p-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
59
60
|
"data-testid": "assistant-mode-selector",
|
|
60
61
|
children: i.map((e) => {
|
|
61
|
-
let
|
|
62
|
-
return /* @__PURE__ */
|
|
62
|
+
let n = l[e.id], r = n.icon, i = e.id === t;
|
|
63
|
+
return /* @__PURE__ */ c("button", {
|
|
63
64
|
type: "button",
|
|
64
65
|
role: "radio",
|
|
65
66
|
"aria-checked": i,
|
|
66
67
|
tabIndex: i ? 0 : -1,
|
|
67
|
-
disabled:
|
|
68
|
+
disabled: o,
|
|
68
69
|
onClick: () => a(e.id),
|
|
69
70
|
"data-mode-id": e.id,
|
|
70
71
|
className: `flex shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full px-3 py-1.5 text-[13px] font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong disabled:opacity-50 ${i ? "bg-action-primary-bg text-action-primary-text shadow-sm" : "text-text-secondary hover:bg-bg-surface hover:text-text-primary"}`,
|
|
71
72
|
"data-testid": `assistant-mode-option-${e.id}`,
|
|
72
|
-
children: [/* @__PURE__ */
|
|
73
|
+
children: [/* @__PURE__ */ s(r, {
|
|
73
74
|
className: "size-3.5",
|
|
74
75
|
"aria-hidden": "true"
|
|
75
|
-
}), /* @__PURE__ */
|
|
76
|
+
}), /* @__PURE__ */ s("span", { children: d(`mode.${e.id}`, e.label || n.fallback) })]
|
|
76
77
|
}, e.id);
|
|
77
78
|
})
|
|
78
79
|
});
|
|
79
80
|
};
|
|
80
81
|
//#endregion
|
|
81
|
-
export {
|
|
82
|
+
export { l as ASSISTANT_MODE_META, d as AssistantModeSelector, u as nextModeIndex };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgB7D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgB7D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAukB3C,CAAC"}
|
|
@@ -165,7 +165,7 @@ var _ = ({ session: _, turns: y = [], onSaveTranscript: b, onContinueInChat: x,
|
|
|
165
165
|
onClick: () => W((e) => !e),
|
|
166
166
|
className: `absolute ${B ? "bottom-6 right-6 size-14" : V ? "right-2 top-2 size-8" : "bottom-3 right-3 size-11"} flex items-center justify-center rounded-full bg-bg-elevated text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong`,
|
|
167
167
|
"aria-pressed": U,
|
|
168
|
-
"aria-label": N("voiceSession.
|
|
168
|
+
"aria-label": N("voiceSession.transcriptTitle", "Voice transcript"),
|
|
169
169
|
"data-testid": "assistant-voice-transcript-toggle",
|
|
170
170
|
children: /* @__PURE__ */ h(ae, { className: B ? "size-6" : V ? "size-4" : "size-5" })
|
|
171
171
|
}),
|
package/dist/shared-assistant.js
CHANGED
|
@@ -37,84 +37,86 @@ import { toCaptionText as Nn } from "./shared/assistant/voice/captionText.js";
|
|
|
37
37
|
import { ASSISTANT_LANGUAGES as Pn, DEFAULT_SPEECH_RATE as Fn, findAssistantLanguage as In, resolveAssistantLanguage as Ln } from "./shared/assistant/voice/languages.js";
|
|
38
38
|
import { replyFollowsInput as Rn, resolveLanguagePair as zn } from "./shared/assistant/voice/languagePair.js";
|
|
39
39
|
import { findPendingWrite as Bn, parseConfirmationRefusal as Vn } from "./shared/assistant/pendingWrite.js";
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
45
|
-
import {
|
|
46
|
-
import {
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
49
|
-
import {
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
54
|
-
import {
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
59
|
-
import {
|
|
60
|
-
import {
|
|
61
|
-
import {
|
|
62
|
-
import {
|
|
63
|
-
import {
|
|
64
|
-
import {
|
|
65
|
-
import {
|
|
66
|
-
import {
|
|
67
|
-
import {
|
|
68
|
-
import {
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
75
|
-
import {
|
|
76
|
-
import {
|
|
77
|
-
import {
|
|
78
|
-
import {
|
|
79
|
-
import {
|
|
80
|
-
import {
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import {
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import {
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import {
|
|
112
|
-
import {
|
|
113
|
-
import {
|
|
114
|
-
import {
|
|
115
|
-
import {
|
|
116
|
-
import {
|
|
117
|
-
import {
|
|
118
|
-
import {
|
|
119
|
-
import {
|
|
120
|
-
export { Co as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, Pn as ASSISTANT_LANGUAGES, Ma as ASSISTANT_MODE_META, Bi as ASSISTANT_OVERLAY_ATTR, Vi as ASSISTANT_PANEL_ATTR, yr as ATTACHMENT_ACCEPT, wi as ATTACHMENT_SOURCES, Ia as AUTO_VOICE, xo as AssistantApiCallsConsentDialog, Xi as AssistantAttachmentButton, Zi as AssistantAttachmentChips, Ai as AssistantAutoSpeakToggle, _i as AssistantAvatar, So as AssistantChatArea, _o as AssistantComposer, zi as AssistantConnectSourceItem, Li as AssistantConnectSourceProvider, $a as AssistantConversationList, eo as AssistantEmptyState, xa as AssistantEntityPreview, Qa as AssistantHeader, s as AssistantI18nProvider, Ni as AssistantLanguageMenu, Aa as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, ji as AssistantMessageAttachments, ro as AssistantMessageItem, io as AssistantMessageList, Na as AssistantModeSelector, Za as AssistantMoreMenu, g as AssistantNavigateProvider, Mi as AssistantPendingWriteCard, ka as AssistantPreviewOverlay, Qi as AssistantPreviewProvider, t as AssistantProductProvider, Pi as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, Fi as AssistantSpeakButton, vi as AssistantSpeechProvider, Ii as AssistantSpokenTurnsNotice, ba as AssistantStepRail, pi as AssistantToolActivity, to as AssistantTurnActivity, Fa as AssistantVoiceButton, Ra as AssistantVoiceOrb, La as AssistantVoiceSelector, ao as AssistantVoiceSession, za as AssistantVoiceSessionButton, br as AttachmentRejectedError, $n as BOILERPLATE_PAGE_SHARE, Ba as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, pn as DEFAULT_SPEAKABLE_LABELS, Fn as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, Zt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, ja as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, qe as HOSTED_DISABLE_MS, Je as HOSTED_TTS_MAX_CHARS, Ue as HOSTED_TTS_TIER, We as HOSTED_VOICES, st as HOSTED_VOICE_RANK, pa as IDLE_ACTIVE_TAB, Kn as IDLE_PLAYBACK, ia as IDLE_PREVIEW, ea as IDLE_PREVIEW_STATE, Kt as IDLE_ROTATION_CLOCK, Qt as INITIAL_SESSION, xr as INLINE_IMAGE_MAX_DIM, Sr as INLINE_IMAGE_QUALITY, $t as INTERRUPT_MAX_MS, en as INTERRUPT_MIN_MS, Cr as MAX_ATTACHMENTS, er as MAX_BOILERPLATE_LINE_CHARS, tr as MAX_EXTRACTED_CHARS, wr as MAX_FILE_BYTES, Tr as MAX_INLINE_CHARS_PER_FILE, Er as MAX_INLINE_CHARS_TOTAL, Zn as MAX_INLINE_IMAGE_BASE64_BYTES, Dr as MAX_INLINE_IMAGE_BASE64_CHARS, Or as MAX_INLINE_IMAGE_PARTS, kr as MAX_INLINE_TURN_BODY_BYTES, nr as MAX_PDF_PAGES_SCANNED, Qn as MAX_REQUEST_BODY_BYTES, mn as MAX_SPEAKABLE_CHARS, hn as MAX_SPOKEN_TABLE_ROWS, Ar as MAX_TURN_BODY_BYTES, Tn as MINI_CAPTION_BUDGET, rr as MIN_PAGE_TEXT_CHARS, ir as MIN_TEXT_PAGE_SHARE, aa as NO_OWNER, Hi as NO_PANEL_OVERLAY, Pt as PHRASE_ROTATE_MS, Dn as POLL_FAST_MS, On as POLL_FAST_UNTIL_MS, kn as POLL_SLOW_MS, An as POLL_STEADY_MS, jn as POLL_STEADY_UNTIL_MS, Cn as PREVIEW_LANGUAGES, jr as PROMPT_ENVELOPE_RESERVE_BYTES, Mr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, Ca as REDUCED_MOTION_ATTRIBUTE, wa as REDUCED_MOTION_QUERY, P as REPORT_AI_TOKEN_USAGE, Di as SANDBOX_READY_TTL_MS, tn as SILENCE_SUBMIT_MS, Ye as SPEAKING_RATE_MAX, Xe as SPEAKING_RATE_MAX_STREAMING, Ze as SPEAKING_RATE_MAX_SYNC, Qe as SPEAKING_RATE_MIN, gn as SPEECH_CHUNK_CHARS, _n as SPEECH_CHUNK_CJK_CHARS, ct as SPEECH_LANG, Hn as SPOKEN_LABEL_LANGUAGES, Ft as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, It as THINKING_PHRASES, Nr as TURN_BODY_HEADROOM_BYTES, no as TurnActivityLine, lt as VOICE_LIST_TIMEOUT_MS, Vt as VOICE_MUTED_LABEL, Ht as VOICE_THINKING_LABEL, Va as VoiceCaption, Ha as VoiceConversationView, Ka as VoiceMiniController, qa as VoiceStage, Wa as VoiceStatusLine, Ga as VoiceStatusText, Ja as VoiceTranscriptDrawer, Ua as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Ui as activePanelOverlay, qt as advanceRotationClock, uo as aiCreditsUpdatedEventName, oa as applyPreviewEvent, J as approvePendingWrite, Wi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Ti as availableAttachmentSources, $e as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, fi as buildAssistantProgress, Y as buildAssistantSandboxEnv, Pr as buildAttachmentPromptBlock, un as buildContinuedFromVoiceNote, ve as buildProgress, Fr as buildPromptParts, X as buildPromptRequestBody, Ir as buildPromptWithAttachments, et as buildRequest, E as buildSandboxContextInput, dn as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, vn as chunkForSpeech, b as classifyAssistantHref, Lr as classifyAttachment, tt as classifyHttpFailure, S as classifyQuotaError, ar as columnLetterToIndex, Ut as composeVoiceStatus, St as configureSpeechEngine, yn as containsCjk, d as copyToClipboard, Rr as countInlineImageCandidates, zr as countInlinedImageParts, hi as countSpokenTurns, sa as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, ot as createHostedTtsEngine, Oi as createReadinessTracker, xt as createRoutingSpeechEngine, da as createRunIdentityCache, Oe as createSandboxAssistantTransport, Ct as createSpeechEngines, ca as currentPreviewOwner, nt as decodeAudioResponse, or as decodeXmlEntities, C as describeQuotaError, Br as detectDocumentFormat, Wn as detectScriptLocale, Ei as deviceHasCamera, rt as disableDurationMs, fo as dispatchAssistantQuotaExhausted, sr as docxXmlToText, ee as downloadAssistantArtifact, Ya as downloadFile, si as elapsedSince, Gi as escapeDismisses, Vr as estimateTurnBodyBytes, D as executeSandboxGraphQL, Xa as exportConversation, te as extendAssistantSandboxTTL, ho as extractDocumentText, In as findAssistantLanguage, ne as findExistingSandbox, Bn as findPendingWrite, cr as fitPdfPages, Ki as focusIsInsidePanel, Hr as formatBytes, lr as formatPageRanges, xi as getActorId, re as getAssistantArtifacts, oi as getAssistantDisplayContent, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, Ur as getAttachmentSendBlocker, U as getCapability, Wr as getExtension, R as getImageForMode, z as getImageTagForMode, Si as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Gr as getSendableAttachments, wt as getSpeechEngine, Se as getToolProgress, Ci as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Kr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, ta as isBlankProse, nn as isCapturing, rn as isEcho, ut as isHostedVoice, ni as isLegacyFiller, ri as isLegacyStopped, ur as isMostlyImagePages, co as isMultimodalBodyRejection, vo as isProdRuntime, qr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, ki as isRecentlyVerified, we as isRecoverable, lo as isRecoverableAssistantError, m as isRemoteImageSrc, na as isRunningStatus, qn as isSpeakingMessage, dt as isSpeechBlocked, ii as isStageCopy, an as isSubmittable, $r as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, dr as joinSheets, ft as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, Ot as micIsInterrupt, se as modeRequiresConfirmWrites, ci as msUntilNextPhrase, ma as nextActiveTab, Pa as nextModeIndex, qi as nextPanelOverlays, ra as nextPreviewEvents, pt as normalizeLangTag, po as notifyAiCreditsUpdated, on as orbMode, fr as pageMarker, Ji as panelOwnsEscape, Vn as parseConfirmationRefusal, Jr as parseDataUrl, pr as parseSharedStrings, mi as parseToolActivity, mr as parseWorkbookSheets, hr as pdfTextItemsToPage, ha as pinActiveTab, ei as planAbandonedTurn, sn as planReplyConsumption, ti as planTurnAbort, Mn as pollDelayMs, mt as primaryLanguageSubtag, Jn as publishedChunks, T as quotaExhaustedEventName, Ta as readReducedMotion, Tt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, Rn as replyFollowsInput, le as reportAssistantAiTokenUsage, Yn as requiresCancel, Et as resetSpeechEngine, Ln as resolveAssistantLanguage, zn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, Gn as resolveSpeechLocale, Jt as rotationElapsedMs, la as runBelongsTo, fa as runIdentities, ua as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, ht as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, gr as sheetXmlToRows, it as shouldDisableEngine, ga as shouldPinOnMove, _a as shouldPinOnSelect, En as showPreviousChunk, kt as showsAssistantCaption, At as showsUserCaption, bn as speakableEmail, gt as speechGate, Un as speechLabelsFor, _t as speechLangForLocale, Xn as speechPlaybackReducer, at as splitForVendor, xn as splitTableRow, cn as spokenSoFar, gi as spokenTurnText, Lt as stageText, li as startPhraseTicker, Yt as startRotationTicker, Rt as statusStageCopy, va as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, ai as stripLegacyFillerPrefix, Ea as subscribeReducedMotion, Dt as subscribeSpeechEngine, _r as summarisePageText, Xt as syncRotationClock, ya as tabForArrowKey, zt as thinkingPhrase, Bt as thinkingPhraseEntry, Nn as toCaptionText, Yr as toMessageAttachment, Sn as toSpeakableText, Xr as truncateForInline, vr as truncatePagesForInline, ui as turnActivityCopy, di as turnActivityStage, oo as useAssistantApiAccess, go as useAssistantAttachments, Ri as useAssistantConnectSource, yo as useAssistantHeartbeat, l as useAssistantI18nNamespace, bo as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, $i as useAssistantPreview, Oa as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, yi as useAssistantSpeech, o as useAssistantStorageFolders, Qr as useAssistantStore, u as useAssistantTr, so as useConversationTurns, Yi as useDropdownEscape, Sa as useOverlayFocus, Da as usePrefersReducedMotion, ke as useSandboxAssistantTransport, e as useVoiceInput, bi as useVoiceSession, mo as useWorkspaceWriteAccess, Zr as validateFile, vt as voiceAvailability, ze as voiceMarker, wn as voicePreviewText, yt as voiceQualityRank, Be as voiceSessionIdOf, ln as voiceSessionReducer, jt as voiceStageState, Wt as voiceStatusParts, Gt as voiceStatusSuffix, fn as voiceTranscriptFilename, Ve as voiceTurnsOnly, bt as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, Mt as waveformIsActive, Nt as waveformIsSettled, Pe as withIncompleteTurnNotice };
|
|
40
|
+
import { MAX_INLINE_IMAGE_BASE64_BYTES as Hn, MAX_REQUEST_BODY_BYTES as Un } from "./shared/assistant/gatewayLimits.js";
|
|
41
|
+
import { BOILERPLATE_PAGE_SHARE as Wn, MAX_BOILERPLATE_LINE_CHARS as Gn, MAX_EXTRACTED_CHARS as Kn, MAX_PDF_PAGES_SCANNED as qn, MIN_PAGE_TEXT_CHARS as Jn, MIN_TEXT_PAGE_SHARE as Yn, columnLetterToIndex as Xn, decodeXmlEntities as Zn, docxXmlToText as Qn, fitPdfPages as $n, formatPageRanges as er, isMostlyImagePages as tr, joinSheets as nr, pageMarker as rr, parseSharedStrings as ir, parseWorkbookSheets as ar, pdfTextItemsToPage as or, sheetXmlToRows as sr, summarisePageText as cr, truncatePagesForInline as lr } from "./shared/assistant/documentText.js";
|
|
42
|
+
import { ATTACHMENT_ACCEPT as ur, AttachmentRejectedError as dr, INLINE_IMAGE_MAX_DIM as fr, INLINE_IMAGE_QUALITY as pr, MAX_ATTACHMENTS as mr, MAX_FILE_BYTES as hr, MAX_INLINE_CHARS_PER_FILE as gr, MAX_INLINE_CHARS_TOTAL as _r, MAX_INLINE_IMAGE_BASE64_CHARS as vr, MAX_INLINE_IMAGE_PARTS as yr, MAX_INLINE_TURN_BODY_BYTES as br, MAX_TURN_BODY_BYTES as xr, PROMPT_ENVELOPE_RESERVE_BYTES as Sr, PROVIDER_READABLE_FILE_MEDIA_TYPES as Cr, TURN_BODY_HEADROOM_BYTES as wr, buildAttachmentPromptBlock as Tr, buildPromptParts as Er, buildPromptWithAttachments as Dr, classifyAttachment as Or, countInlineImageCandidates as kr, countInlinedImageParts as Ar, detectDocumentFormat as jr, estimateTurnBodyBytes as Mr, formatBytes as Nr, getAttachmentSendBlocker as Pr, getExtension as Fr, getSendableAttachments as Ir, hasAttachmentWorkInFlight as Lr, isProviderReadableFilePart as Rr, parseDataUrl as zr, toMessageAttachment as Br, truncateForInline as Vr, validateFile as Hr } from "./shared/assistant/attachments.js";
|
|
43
|
+
import { ATTACHMENT_SOURCES as Ur, availableAttachmentSources as Wr, deviceHasCamera as Gr } from "./shared/assistant/attachmentSources.js";
|
|
44
|
+
import { ASSISTANT_MODE_FALLBACK_LABELS as Kr, ASSISTANT_MODE_IDS as qr } from "./shared/assistant/modeCopy.js";
|
|
45
|
+
import { ASSISTANT_I18N_COMPUTED_COPY as Jr, ASSISTANT_I18N_LITERAL_COPY as Yr, ASSISTANT_I18N_MANIFEST as Xr, assistantI18nSeedCopy as Zr, assistantModeI18nCopy as Qr } from "./shared/assistant/i18nManifest.js";
|
|
46
|
+
import { SPOKEN_LABEL_LANGUAGES as $r, speechLabelsFor as ei } from "./shared/assistant/voice/speechLabels.js";
|
|
47
|
+
import { detectScriptLocale as ti, resolveSpeechLocale as ni } from "./shared/assistant/voice/replyLanguage.js";
|
|
48
|
+
import { IDLE_PLAYBACK as ri, isSpeakingMessage as ii, publishedChunks as ai, requiresCancel as oi, speechPlaybackReducer as si } from "./shared/assistant/voice/speechPlayback.js";
|
|
49
|
+
import { useAssistantStore as ci } from "./shared/assistant/store.js";
|
|
50
|
+
import { isTurnInFlight as li, planAbandonedTurn as ui, planTurnAbort as di } from "./shared/assistant/turnState.js";
|
|
51
|
+
import { isLegacyFiller as fi, isLegacyStopped as pi, isStageCopy as mi, stripLegacyFillerPrefix as hi } from "./shared/assistant/legacyFiller.js";
|
|
52
|
+
import { getAssistantDisplayContent as gi } from "./shared/assistant/displayContent.js";
|
|
53
|
+
import { elapsedSince as _i, msUntilNextPhrase as vi, startPhraseTicker as yi, turnActivityCopy as bi, turnActivityStage as xi } from "./shared/assistant/turnActivity.js";
|
|
54
|
+
import { buildAssistantProgress as Si } from "./shared/assistant/turnProgress.js";
|
|
55
|
+
import { AssistantToolActivity as Ci, parseToolActivity as wi } from "./shared/assistant/ui/AssistantToolActivity.js";
|
|
56
|
+
import { countSpokenTurns as Ti, spokenTurnText as Ei } from "./shared/assistant/spokenTurns.js";
|
|
57
|
+
import { AssistantAvatar as Di } from "./shared/assistant/ui/AssistantAvatar.js";
|
|
58
|
+
import { AssistantSpeechProvider as Oi, useAssistantSpeech as ki } from "./shared/assistant/ui/AssistantSpeechProvider.js";
|
|
59
|
+
import { useVoiceSession as Ai } from "./shared/assistant/ui/useVoiceSession.js";
|
|
60
|
+
import { getActorId as ji, getOrganizationId as Mi, getWorkspaceId as Ni } from "./shared/assistant/context.js";
|
|
61
|
+
import { SANDBOX_READY_TTL_MS as Pi, createReadinessTracker as Fi, isRecentlyVerified as Ii } from "./shared/assistant/sandboxReadiness.js";
|
|
62
|
+
import { AssistantAutoSpeakToggle as Li } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
|
|
63
|
+
import { AssistantMessageAttachments as Ri } from "./shared/assistant/ui/AssistantMessageAttachments.js";
|
|
64
|
+
import { AssistantPendingWriteCard as zi } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
|
|
65
|
+
import { AssistantLanguageMenu as Bi } from "./shared/assistant/ui/AssistantLanguageMenu.js";
|
|
66
|
+
import { AssistantReplyLanguageSelector as Vi } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
|
|
67
|
+
import { AssistantSpeakButton as Hi } from "./shared/assistant/ui/AssistantSpeakButton.js";
|
|
68
|
+
import { AssistantSpokenTurnsNotice as Ui } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
|
|
69
|
+
import { AssistantConnectSourceProvider as Wi, useAssistantConnectSource as Gi } from "./shared/assistant/ui/composer/connectSource.js";
|
|
70
|
+
import { AssistantConnectSourceItem as Ki } from "./shared/assistant/ui/composer/AssistantConnectSourceItem.js";
|
|
71
|
+
import { ASSISTANT_OVERLAY_ATTR as qi, ASSISTANT_PANEL_ATTR as Ji, NO_PANEL_OVERLAY as Yi, activePanelOverlay as Xi, assistantPanelOwnsEscape as Zi, escapeDismisses as Qi, focusIsInsidePanel as $i, nextPanelOverlays as ea, panelOwnsEscape as ta } from "./shared/assistant/ui/panelOverlays.js";
|
|
72
|
+
import { useDropdownEscape as na } from "./shared/assistant/ui/useDropdownEscape.js";
|
|
73
|
+
import { AssistantAttachmentButton as ra } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
|
|
74
|
+
import { AssistantAttachmentChips as ia } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
|
|
75
|
+
import { AssistantPreviewProvider as aa, useAssistantPreview as oa } from "./shared/assistant/preview/context.js";
|
|
76
|
+
import { IDLE_PREVIEW_STATE as sa, isBlankProse as ca, isRunningStatus as la, nextPreviewEvents as ua } from "./shared/assistant/preview/previewTransitions.js";
|
|
77
|
+
import { IDLE_PREVIEW as da, NO_OWNER as fa, applyPreviewEvent as pa, createAssistantPreviewSurface as ma, currentPreviewOwner as ha, runBelongsTo as ga, sameOwner as _a } from "./shared/assistant/preview/surfaceState.js";
|
|
78
|
+
import { createRunIdentityCache as va, runIdentities as ya } from "./shared/assistant/preview/runIdentity.js";
|
|
79
|
+
import { IDLE_ACTIVE_TAB as ba, nextActiveTab as xa, pinActiveTab as Sa, shouldPinOnMove as Ca, shouldPinOnSelect as wa, stepsFromToolActivity as Ta, tabForArrowKey as Ea } from "./shared/assistant/preview/entity/entityPreviewState.js";
|
|
80
|
+
import { AssistantStepRail as Da } from "./shared/assistant/preview/entity/AssistantStepRail.js";
|
|
81
|
+
import { AssistantEntityPreview as Oa } from "./shared/assistant/preview/entity/AssistantEntityPreview.js";
|
|
82
|
+
import { useOverlayFocus as ka } from "./shared/assistant/ui/useOverlayFocus.js";
|
|
83
|
+
import { REDUCED_MOTION_ATTRIBUTE as Aa, REDUCED_MOTION_QUERY as ja, readReducedMotion as Ma, subscribeReducedMotion as Na, usePrefersReducedMotion as Pa } from "./shared/assistant/ui/usePrefersReducedMotion.js";
|
|
84
|
+
import { useAssistantPreviewBridge as Fa } from "./shared/assistant/preview/useAssistantPreviewBridge.js";
|
|
85
|
+
import { AssistantPreviewOverlay as Ia } from "./shared/assistant/preview/AssistantPreviewOverlay.js";
|
|
86
|
+
import { AssistantLanguageSelector as La, FOLLOW_APP_LOCALE as Ra } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
|
|
87
|
+
import { ASSISTANT_MODE_META as za, AssistantModeSelector as Ba, nextModeIndex as Va } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
|
|
88
|
+
import { AssistantVoiceButton as Ha } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
|
|
89
|
+
import { AUTO_VOICE as Ua, AssistantVoiceSelector as Wa } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
|
|
90
|
+
import { AssistantVoiceOrb as Ga } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
|
|
91
|
+
import { AssistantVoiceSessionButton as Ka } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
|
|
92
|
+
import { CAPTION_SCROLL_ATTR as qa, VoiceCaption as Ja } from "./shared/assistant/ui/voice/VoiceCaption.js";
|
|
93
|
+
import { VoiceConversationView as Ya } from "./shared/assistant/ui/voice/VoiceConversationView.js";
|
|
94
|
+
import { VoiceWaveform as Xa } from "./shared/assistant/ui/voice/VoiceWaveform.js";
|
|
95
|
+
import { VoiceStatusLine as Za, VoiceStatusText as Qa } from "./shared/assistant/ui/voice/VoiceStatusText.js";
|
|
96
|
+
import { VoiceMiniController as $a } from "./shared/assistant/ui/voice/VoiceMiniController.js";
|
|
97
|
+
import { VoiceStage as eo } from "./shared/assistant/ui/voice/VoiceStage.js";
|
|
98
|
+
import { VoiceTranscriptDrawer as to } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
|
|
99
|
+
import { downloadFile as no, exportConversation as ro } from "./shared/assistant/exportConversation.js";
|
|
100
|
+
import { AssistantMoreMenu as io } from "./shared/assistant/ui/AssistantMoreMenu.js";
|
|
101
|
+
import { AssistantHeader as ao } from "./shared/assistant/ui/AssistantHeader.js";
|
|
102
|
+
import { AssistantConversationList as oo } from "./shared/assistant/ui/AssistantConversationList.js";
|
|
103
|
+
import { AssistantEmptyState as so } from "./shared/assistant/ui/AssistantEmptyState.js";
|
|
104
|
+
import { AssistantTurnActivity as co, TurnActivityLine as lo } from "./shared/assistant/ui/AssistantTurnActivity.js";
|
|
105
|
+
import { AssistantMessageItem as uo } from "./shared/assistant/ui/AssistantMessageItem.js";
|
|
106
|
+
import { AssistantMessageList as fo } from "./shared/assistant/ui/AssistantMessageList.js";
|
|
107
|
+
import { AssistantVoiceSession as po } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
|
|
108
|
+
import { useAssistantApiAccess as mo } from "./shared/assistant/useAssistantApiAccess.js";
|
|
109
|
+
import { useConversationTurns as ho } from "./shared/assistant/useConversationTurns.js";
|
|
110
|
+
import { isMultimodalBodyRejection as go, isRecoverableAssistantError as _o } from "./shared/assistant/transportErrors.js";
|
|
111
|
+
import { aiCreditsUpdatedEventName as vo, dispatchAssistantQuotaExhausted as yo, notifyAiCreditsUpdated as bo } from "./shared/assistant/aiCredits.js";
|
|
112
|
+
import { useWorkspaceWriteAccess as xo } from "./shared/assistant/useWorkspaceWriteAccess.js";
|
|
113
|
+
import { extractDocumentText as So } from "./shared/assistant/documentExtract.js";
|
|
114
|
+
import { useAssistantAttachments as Co } from "./shared/assistant/useAssistantAttachments.js";
|
|
115
|
+
import { AssistantComposer as wo } from "./shared/assistant/ui/composer/AssistantComposer.js";
|
|
116
|
+
import { isProdRuntime as To } from "./shared/assistant/env.js";
|
|
117
|
+
import { useAssistantHeartbeat as Eo } from "./shared/assistant/useAssistantHeartbeat.js";
|
|
118
|
+
import { useAssistantKeyboardShortcuts as Do } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
|
|
119
|
+
import { AssistantApiCallsConsentDialog as Oo } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
|
|
120
|
+
import { AssistantChatArea as ko } from "./shared/assistant/ui/AssistantChatArea.js";
|
|
121
|
+
import { AIAssistantPanel as Ao } from "./shared/assistant/ui/AIAssistantPanel.js";
|
|
122
|
+
export { Ao as AIAssistantPanel, L as ASSISTANT_API_AUTH_STRATEGY, Jr as ASSISTANT_I18N_COMPUTED_COPY, Yr as ASSISTANT_I18N_LITERAL_COPY, Xr as ASSISTANT_I18N_MANIFEST, Pn as ASSISTANT_LANGUAGES, Kr as ASSISTANT_MODE_FALLBACK_LABELS, qr as ASSISTANT_MODE_IDS, za as ASSISTANT_MODE_META, qi as ASSISTANT_OVERLAY_ATTR, Ji as ASSISTANT_PANEL_ATTR, ur as ATTACHMENT_ACCEPT, Ur as ATTACHMENT_SOURCES, Ua as AUTO_VOICE, Oo as AssistantApiCallsConsentDialog, ra as AssistantAttachmentButton, ia as AssistantAttachmentChips, Li as AssistantAutoSpeakToggle, Di as AssistantAvatar, ko as AssistantChatArea, wo as AssistantComposer, Ki as AssistantConnectSourceItem, Wi as AssistantConnectSourceProvider, oo as AssistantConversationList, so as AssistantEmptyState, Oa as AssistantEntityPreview, ao as AssistantHeader, s as AssistantI18nProvider, Bi as AssistantLanguageMenu, La as AssistantLanguageSelector, f as AssistantMarkdownImage, h as AssistantMarkdownRenderer, Ri as AssistantMessageAttachments, uo as AssistantMessageItem, fo as AssistantMessageList, Ba as AssistantModeSelector, io as AssistantMoreMenu, g as AssistantNavigateProvider, zi as AssistantPendingWriteCard, Ia as AssistantPreviewOverlay, aa as AssistantPreviewProvider, t as AssistantProductProvider, Vi as AssistantReplyLanguageSelector, _e as AssistantRuntimeManager, Hi as AssistantSpeakButton, Oi as AssistantSpeechProvider, Ui as AssistantSpokenTurnsNotice, Da as AssistantStepRail, Ci as AssistantToolActivity, co as AssistantTurnActivity, Ha as AssistantVoiceButton, Ga as AssistantVoiceOrb, Wa as AssistantVoiceSelector, po as AssistantVoiceSession, Ka as AssistantVoiceSessionButton, dr as AttachmentRejectedError, Wn as BOILERPLATE_PAGE_SHARE, qa as CAPTION_SCROLL_ATTR, O as CHECK_AI_CREDITS, k as CREATE_SANDBOX, pn as DEFAULT_SPEAKABLE_LABELS, Fn as DEFAULT_SPEECH_RATE, Ae as DEFAULT_STREAM_BUDGET_MS, Zt as ENDPOINT_GRACE_MS, A as EXTEND_SANDBOX_TTL, Ra as FOLLOW_APP_LOCALE, j as GET_ACTIVE_SANDBOXES, M as GET_SANDBOX, qe as HOSTED_DISABLE_MS, Je as HOSTED_TTS_MAX_CHARS, Ue as HOSTED_TTS_TIER, We as HOSTED_VOICES, st as HOSTED_VOICE_RANK, ba as IDLE_ACTIVE_TAB, ri as IDLE_PLAYBACK, da as IDLE_PREVIEW, sa as IDLE_PREVIEW_STATE, Kt as IDLE_ROTATION_CLOCK, Qt as INITIAL_SESSION, fr as INLINE_IMAGE_MAX_DIM, pr as INLINE_IMAGE_QUALITY, $t as INTERRUPT_MAX_MS, en as INTERRUPT_MIN_MS, mr as MAX_ATTACHMENTS, Gn as MAX_BOILERPLATE_LINE_CHARS, Kn as MAX_EXTRACTED_CHARS, hr as MAX_FILE_BYTES, gr as MAX_INLINE_CHARS_PER_FILE, _r as MAX_INLINE_CHARS_TOTAL, Hn as MAX_INLINE_IMAGE_BASE64_BYTES, vr as MAX_INLINE_IMAGE_BASE64_CHARS, yr as MAX_INLINE_IMAGE_PARTS, br as MAX_INLINE_TURN_BODY_BYTES, qn as MAX_PDF_PAGES_SCANNED, Un as MAX_REQUEST_BODY_BYTES, mn as MAX_SPEAKABLE_CHARS, hn as MAX_SPOKEN_TABLE_ROWS, xr as MAX_TURN_BODY_BYTES, Tn as MINI_CAPTION_BUDGET, Jn as MIN_PAGE_TEXT_CHARS, Yn as MIN_TEXT_PAGE_SHARE, fa as NO_OWNER, Yi as NO_PANEL_OVERLAY, Pt as PHRASE_ROTATE_MS, Dn as POLL_FAST_MS, On as POLL_FAST_UNTIL_MS, kn as POLL_SLOW_MS, An as POLL_STEADY_MS, jn as POLL_STEADY_UNTIL_MS, Cn as PREVIEW_LANGUAGES, Sr as PROMPT_ENVELOPE_RESERVE_BYTES, Cr as PROVIDER_READABLE_FILE_MEDIA_TYPES, N as PROXY_SANDBOX_REQUEST, Aa as REDUCED_MOTION_ATTRIBUTE, ja as REDUCED_MOTION_QUERY, P as REPORT_AI_TOKEN_USAGE, Pi as SANDBOX_READY_TTL_MS, tn as SILENCE_SUBMIT_MS, Ye as SPEAKING_RATE_MAX, Xe as SPEAKING_RATE_MAX_STREAMING, Ze as SPEAKING_RATE_MAX_SYNC, Qe as SPEAKING_RATE_MIN, gn as SPEECH_CHUNK_CHARS, _n as SPEECH_CHUNK_CJK_CHARS, ct as SPEECH_LANG, $r as SPOKEN_LABEL_LANGUAGES, Ft as STAGE_COPY, F as STOP_ASSISTANT_SANDBOX, je as STREAM_BUDGET_MS, It as THINKING_PHRASES, wr as TURN_BODY_HEADROOM_BYTES, lo as TurnActivityLine, lt as VOICE_LIST_TIMEOUT_MS, Vt as VOICE_MUTED_LABEL, Ht as VOICE_THINKING_LABEL, Ja as VoiceCaption, Ya as VoiceConversationView, $a as VoiceMiniController, eo as VoiceStage, Za as VoiceStatusLine, Qa as VoiceStatusText, to as VoiceTranscriptDrawer, Xa as VoiceWaveform, I as WAIT_FOR_SANDBOX_RUNNING, q as abortAssistantTurn, Xi as activePanelOverlay, qt as advanceRotationClock, vo as aiCreditsUpdatedEventName, pa as applyPreviewEvent, J as approvePendingWrite, Zr as assistantI18nSeedCopy, Qr as assistantModeI18nCopy, Zi as assistantPanelOwnsEscape, _ as assistantRoutePath, c as assistantTranslationKey, v as assistantUrlTransform, Wr as availableAttachmentSources, $e as base64ToBytes, y as browserShouldHandle, He as browserSpeechEngine, Si as buildAssistantProgress, Y as buildAssistantSandboxEnv, Tr as buildAttachmentPromptBlock, un as buildContinuedFromVoiceNote, ve as buildProgress, Er as buildPromptParts, X as buildPromptRequestBody, Dr as buildPromptWithAttachments, et as buildRequest, E as buildSandboxContextInput, dn as buildVoiceTranscriptMarkdown, Fe as chatTurns, Z as checkAssistantAiCredits, vn as chunkForSpeech, b as classifyAssistantHref, Or as classifyAttachment, tt as classifyHttpFailure, S as classifyQuotaError, Xn as columnLetterToIndex, Ut as composeVoiceStatus, St as configureSpeechEngine, yn as containsCjk, d as copyToClipboard, kr as countInlineImageCandidates, Ar as countInlinedImageParts, Ti as countSpokenTurns, ma as createAssistantPreviewSurface, Q as createAssistantSandbox, $ as createAssistantSession, ot as createHostedTtsEngine, Fi as createReadinessTracker, xt as createRoutingSpeechEngine, va as createRunIdentityCache, Oe as createSandboxAssistantTransport, Ct as createSpeechEngines, ha as currentPreviewOwner, nt as decodeAudioResponse, Zn as decodeXmlEntities, C as describeQuotaError, jr as detectDocumentFormat, ti as detectScriptLocale, Gr as deviceHasCamera, rt as disableDurationMs, yo as dispatchAssistantQuotaExhausted, Qn as docxXmlToText, ee as downloadAssistantArtifact, no as downloadFile, _i as elapsedSince, Qi as escapeDismisses, Mr as estimateTurnBodyBytes, D as executeSandboxGraphQL, ro as exportConversation, te as extendAssistantSandboxTTL, So as extractDocumentText, In as findAssistantLanguage, ne as findExistingSandbox, Bn as findPendingWrite, $n as fitPdfPages, $i as focusIsInsidePanel, Nr as formatBytes, er as formatPageRanges, ji as getActorId, re as getAssistantArtifacts, gi as getAssistantDisplayContent, ye as getAssistantMedia, ie as getAssistantMessages, ae as getAssistantSession, oe as getAssistantStreamAccess, be as getAssistantText, Pr as getAttachmentSendBlocker, U as getCapability, Fr as getExtension, R as getImageForMode, z as getImageTagForMode, Mi as getOrganizationId, xe as getRawMessageCreatedAt, B as getResourcesForMode, V as getSandboxImageRegistry, Ir as getSendableAttachments, wt as getSpeechEngine, Se as getToolProgress, Ni as getWorkspaceId, Ie as groupBySession, Le as groupConsecutiveBySession, Lr as hasAttachmentWorkInFlight, Ge as hostedLocaleFor, Ke as hostedSupportsLanguage, p as imageHostLabel, Me as incompleteTurnNotice, ca as isBlankProse, nn as isCapturing, rn as isEcho, ut as isHostedVoice, fi as isLegacyFiller, pi as isLegacyStopped, tr as isMostlyImagePages, go as isMultimodalBodyRejection, To as isProdRuntime, Rr as isProviderReadableFilePart, w as isQuotaExhaustedError, Ce as isReapedSandboxConnectionError, Ii as isRecentlyVerified, we as isRecoverable, _o as isRecoverableAssistantError, m as isRemoteImageSrc, la as isRunningStatus, ii as isSpeakingMessage, dt as isSpeechBlocked, mi as isStageCopy, an as isSubmittable, li as isTurnInFlight, W as isUnknownFieldError, Re as isVoiceTurn, nr as joinSheets, ft as languageDisplayName, Te as mapSessionToHistory, G as markSupported, K as markUnsupported, Ee as mergeMessagesById, Ot as micIsInterrupt, se as modeRequiresConfirmWrites, vi as msUntilNextPhrase, xa as nextActiveTab, Va as nextModeIndex, ea as nextPanelOverlays, ua as nextPreviewEvents, pt as normalizeLangTag, bo as notifyAiCreditsUpdated, on as orbMode, rr as pageMarker, ta as panelOwnsEscape, Vn as parseConfirmationRefusal, zr as parseDataUrl, ir as parseSharedStrings, wi as parseToolActivity, ar as parseWorkbookSheets, or as pdfTextItemsToPage, Sa as pinActiveTab, ui as planAbandonedTurn, sn as planReplyConsumption, di as planTurnAbort, Mn as pollDelayMs, mt as primaryLanguageSubtag, ai as publishedChunks, T as quotaExhaustedEventName, Ma as readReducedMotion, Tt as readSpeechEngineConfig, ce as releaseSupersededAssistantSandboxes, Rn as replyFollowsInput, le as reportAssistantAiTokenUsage, oi as requiresCancel, Et as resetSpeechEngine, Ln as resolveAssistantLanguage, zn as resolveLanguagePair, n as resolveModeConfig, H as resolveSandboxAssistantMode, ni as resolveSpeechLocale, Jt as rotationElapsedMs, ga as runBelongsTo, ya as runIdentities, _a as sameOwner, De as sanitize, ue as selectExistingAssistantSandbox, de as selectSupersededAssistantSandboxes, ht as selectVoiceForLocale, fe as sendAssistantPromptAsync, pe as sendHeartbeat, sr as sheetXmlToRows, it as shouldDisableEngine, Ca as shouldPinOnMove, wa as shouldPinOnSelect, En as showPreviousChunk, kt as showsAssistantCaption, At as showsUserCaption, bn as speakableEmail, gt as speechGate, ei as speechLabelsFor, _t as speechLangForLocale, si as speechPlaybackReducer, at as splitForVendor, xn as splitTableRow, cn as spokenSoFar, Ei as spokenTurnText, Lt as stageText, yi as startPhraseTicker, Yt as startRotationTicker, Rt as statusStageCopy, Ta as stepsFromToolActivity, me as stopReapedAssistantSandbox, Ne as streamBudgetMs, hi as stripLegacyFillerPrefix, Na as subscribeReducedMotion, Dt as subscribeSpeechEngine, cr as summarisePageText, Xt as syncRotationClock, Ea as tabForArrowKey, zt as thinkingPhrase, Bt as thinkingPhraseEntry, Nn as toCaptionText, Br as toMessageAttachment, Sn as toSpeakableText, Vr as truncateForInline, lr as truncatePagesForInline, bi as turnActivityCopy, xi as turnActivityStage, mo as useAssistantApiAccess, Co as useAssistantAttachments, Gi as useAssistantConnectSource, Eo as useAssistantHeartbeat, l as useAssistantI18nNamespace, Do as useAssistantKeyboardShortcuts, x as useAssistantNavigate, r as useAssistantPageLabel, oa as useAssistantPreview, Fa as useAssistantPreviewBridge, i as useAssistantProduct, a as useAssistantProductOrNull, ki as useAssistantSpeech, o as useAssistantStorageFolders, ci as useAssistantStore, u as useAssistantTr, ho as useConversationTurns, na as useDropdownEscape, ka as useOverlayFocus, Pa as usePrefersReducedMotion, ke as useSandboxAssistantTransport, e as useVoiceInput, Ai as useVoiceSession, xo as useWorkspaceWriteAccess, Hr as validateFile, vt as voiceAvailability, ze as voiceMarker, wn as voicePreviewText, yt as voiceQualityRank, Be as voiceSessionIdOf, ln as voiceSessionReducer, jt as voiceStageState, Wt as voiceStatusParts, Gt as voiceStatusSuffix, fn as voiceTranscriptFilename, Ve as voiceTurnsOnly, bt as voicesForLocale, he as waitForAssistantServiceReady, ge as waitForSandboxRunning, Mt as waveformIsActive, Nt as waveformIsSettled, Pe as withIncompleteTurnNotice };
|