@burdenoff/fe-libs 2026.906.5 → 2026.906.6
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/api.d.ts +34 -0
- package/dist/shared/assistant/api.d.ts.map +1 -1
- package/dist/shared/assistant/api.js +39 -14
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +254 -254
- package/dist/shared-assistant.js +87 -87
- package/package.json +1 -1
|
@@ -41,6 +41,40 @@ export declare function waitForAssistantServiceReady(sandboxId: string, workspac
|
|
|
41
41
|
export declare function createAssistantSession(sandboxId: string, workspaceId: string, mode: AssistantMode, authContext: AssistantSandboxAuthContext): Promise<{
|
|
42
42
|
sessionId: string;
|
|
43
43
|
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Our own assistant sandboxes in this workspace that are for a DIFFERENT mode.
|
|
46
|
+
*
|
|
47
|
+
* ★★ Pure and exported so the ownership rules below are testable without a
|
|
48
|
+
* network. Getting these wrong stops somebody else's container.
|
|
49
|
+
*/
|
|
50
|
+
export declare function selectSupersededAssistantSandboxes(sandboxes: readonly ExistingAssistantSandbox[], product: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Free the workspace's sandbox slot before provisioning a different mode.
|
|
53
|
+
*
|
|
54
|
+
* ★★ THE BUG THIS FIXES. Sandbox reuse keys on mode and image tag, so "Ask" and
|
|
55
|
+
* "Take action" need DIFFERENT containers — but a Free workspace holds exactly
|
|
56
|
+
* ONE concurrent sandbox, and nothing ever released it. Every session provisions
|
|
57
|
+
* a read-only Ask sandbox, the panel heartbeat then extends its TTL for as long
|
|
58
|
+
* as the panel is open, and switching to "Take action" asks for a second
|
|
59
|
+
* container against a quota of one. It fails, and the failure surfaces as
|
|
60
|
+
* "You've reached your sandbox limit on the current plan" — which reads like a
|
|
61
|
+
* billing problem and is actually us holding our own slot.
|
|
62
|
+
*
|
|
63
|
+
* So: before provisioning, stop the assistant sandboxes that can no longer be
|
|
64
|
+
* reused. This is not an optimisation, it is the difference between "Take
|
|
65
|
+
* action" working and not working on the plan almost every workspace is on.
|
|
66
|
+
*
|
|
67
|
+
* ★ Best-effort by design. A failure to stop is not a failure to answer: the
|
|
68
|
+
* provision that follows may still succeed (a paid workspace has room), and if
|
|
69
|
+
* it does not, the quota error is the right thing for the user to see. Throwing
|
|
70
|
+
* here would replace a specific, actionable error with a vaguer one.
|
|
71
|
+
*
|
|
72
|
+
* ★ Consequence worth stating: with a one-slot quota, a second tab in the other
|
|
73
|
+
* mode loses its sandbox. That is forced by the quota rather than chosen here —
|
|
74
|
+
* the alternative is that the second mode never works at all — and the tab
|
|
75
|
+
* recovers by provisioning again on its next turn.
|
|
76
|
+
*/
|
|
77
|
+
export declare function releaseSupersededAssistantSandboxes(workspaceId: string, product: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): Promise<string[]>;
|
|
44
78
|
/**
|
|
45
79
|
* Terminalize a sandbox whose Cloudflare data plane was reaped while its DB
|
|
46
80
|
* record remained RUNNING. Invoked only for Cloudflare's exact connection-
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8BH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,YAAY,EACb,MAAM,SAAS,CAAC;AA+CjB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,2BAA2B,EACxC,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAAa,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkBxB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,wBAAwB,EAAE,EACrC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,EACxD,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAAa,GAClD,MAAM,GAAG,IAAI,CAoCf;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,IAAI,CACf,2BAA2B,EAC3B,aAAa,GAAG,gBAAgB,CACjC,GACA,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCxC;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,MAAM,CAAC,CA+EjB;AAyCD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,EACxC,SAAS,SAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,EACxC,SAAS,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAWhC;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,SAAS,wBAAwB,EAAE,EAC9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,2BAA2B,GACvC,MAAM,EAAE,CAsBV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC,CAyCnB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACjD,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK1B;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,WAAW,EAAE,2BAA2B;AACxC,yFAAyF;AACzF,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAC1C,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBjC;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,EACxC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiBhC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqB9B;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CAc/B;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,2BAA2B,CAAC,CAkBtC;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACzC,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -181,7 +181,32 @@ async function k(e, t, n, r = 9e4) {
|
|
|
181
181
|
async function A(e, t, n, r) {
|
|
182
182
|
return { sessionId: (await b(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
|
|
183
183
|
}
|
|
184
|
-
|
|
184
|
+
function j(e, t, n, r, i) {
|
|
185
|
+
let a = p(n, r);
|
|
186
|
+
return e.filter((e) => e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.assistantProduct === t && (!i.userId || e.createdBy === i.userId) && !(h(e) === n && e.metadata?.imageTag === a)).map((e) => e.id);
|
|
187
|
+
}
|
|
188
|
+
async function M(n, r, i, o, s) {
|
|
189
|
+
let c;
|
|
190
|
+
try {
|
|
191
|
+
c = j((await t({
|
|
192
|
+
query: a,
|
|
193
|
+
operationName: "GetActiveSandboxes",
|
|
194
|
+
variables: { context: e(n, s) },
|
|
195
|
+
workspaceId: n,
|
|
196
|
+
authContext: s
|
|
197
|
+
})).getActiveSandboxes ?? [], r, i, o, s);
|
|
198
|
+
} catch {
|
|
199
|
+
return [];
|
|
200
|
+
}
|
|
201
|
+
return (await Promise.all(c.map(async (e) => {
|
|
202
|
+
try {
|
|
203
|
+
return await N(e, n, s), e;
|
|
204
|
+
} catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}))).filter((e) => e !== null);
|
|
208
|
+
}
|
|
209
|
+
async function N(n, r, i) {
|
|
185
210
|
await t({
|
|
186
211
|
query: l,
|
|
187
212
|
operationName: "StopAssistantSandbox",
|
|
@@ -193,7 +218,7 @@ async function j(n, r, i) {
|
|
|
193
218
|
authContext: i
|
|
194
219
|
});
|
|
195
220
|
}
|
|
196
|
-
function
|
|
221
|
+
function P(e) {
|
|
197
222
|
let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
|
|
198
223
|
mode: t,
|
|
199
224
|
prompt: n,
|
|
@@ -201,8 +226,8 @@ function M(e) {
|
|
|
201
226
|
};
|
|
202
227
|
return i && i.length > 0 && (a.parts = i), a;
|
|
203
228
|
}
|
|
204
|
-
async function
|
|
205
|
-
let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST",
|
|
229
|
+
async function F(e, t, n, r, i, a, o, s) {
|
|
230
|
+
let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", P({
|
|
206
231
|
mode: i,
|
|
207
232
|
prompt: r,
|
|
208
233
|
pageContext: a,
|
|
@@ -210,13 +235,13 @@ async function N(e, t, n, r, i, a, o, s) {
|
|
|
210
235
|
}), o);
|
|
211
236
|
return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
|
|
212
237
|
}
|
|
213
|
-
async function
|
|
238
|
+
async function I(e, t, n, r, i) {
|
|
214
239
|
let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
|
|
215
240
|
i?.sinceMs && g("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
|
|
216
241
|
let o = await b(e, t, a, "GET", void 0, r);
|
|
217
242
|
return typeof o.now == "number" && v("sinceParam"), o.messages ?? [];
|
|
218
243
|
}
|
|
219
|
-
async function
|
|
244
|
+
async function L(e, t, n, r) {
|
|
220
245
|
if (g("sse") === "unsupported") return null;
|
|
221
246
|
try {
|
|
222
247
|
let i = await b(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
|
|
@@ -228,7 +253,7 @@ async function F(e, t, n, r) {
|
|
|
228
253
|
return y("sse"), null;
|
|
229
254
|
}
|
|
230
255
|
}
|
|
231
|
-
async function
|
|
256
|
+
async function R(n, r, a, o) {
|
|
232
257
|
await t({
|
|
233
258
|
query: i,
|
|
234
259
|
operationName: "ExtendSandboxTtl",
|
|
@@ -241,20 +266,20 @@ async function I(n, r, a, o) {
|
|
|
241
266
|
authContext: o
|
|
242
267
|
});
|
|
243
268
|
}
|
|
244
|
-
async function
|
|
269
|
+
async function z(e, t, n, r) {
|
|
245
270
|
await b(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
|
|
246
271
|
}
|
|
247
|
-
async function
|
|
272
|
+
async function B(e, t, n, r) {
|
|
248
273
|
return ((await b(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
|
|
249
274
|
}
|
|
250
|
-
async function
|
|
275
|
+
async function V(e, t, n, r) {
|
|
251
276
|
let i = await b(e, t, `/sessions/${n}`, "GET", void 0, r);
|
|
252
277
|
return {
|
|
253
278
|
id: i.session?.id ?? n,
|
|
254
279
|
mode: i.mode ?? "unknown"
|
|
255
280
|
};
|
|
256
281
|
}
|
|
257
|
-
async function
|
|
282
|
+
async function H(e, t, n, r, i) {
|
|
258
283
|
let a = (await b(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i)).artifact;
|
|
259
284
|
if (!a) throw Error("Artifact download returned an empty response");
|
|
260
285
|
return {
|
|
@@ -263,7 +288,7 @@ async function B(e, t, n, r, i) {
|
|
|
263
288
|
contentBase64: a.contentBase64
|
|
264
289
|
};
|
|
265
290
|
}
|
|
266
|
-
async function
|
|
291
|
+
async function U(e, r) {
|
|
267
292
|
return (await t({
|
|
268
293
|
query: n,
|
|
269
294
|
operationName: "CheckAiCredits",
|
|
@@ -272,7 +297,7 @@ async function V(e, r) {
|
|
|
272
297
|
authContext: r
|
|
273
298
|
})).checkAiCredits;
|
|
274
299
|
}
|
|
275
|
-
async function
|
|
300
|
+
async function W(e, n, r, i, a, o) {
|
|
276
301
|
let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
|
|
277
302
|
s + l === 0 || !i || await t({
|
|
278
303
|
query: c,
|
|
@@ -289,4 +314,4 @@ async function H(e, n, r, i, a, o) {
|
|
|
289
314
|
});
|
|
290
315
|
}
|
|
291
316
|
//#endregion
|
|
292
|
-
export { w as buildAssistantSandboxEnv,
|
|
317
|
+
export { w as buildAssistantSandboxEnv, P as buildPromptRequestBody, U as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, H as downloadAssistantArtifact, R as extendAssistantSandboxTTL, x as findExistingSandbox, B as getAssistantArtifacts, I as getAssistantMessages, V as getAssistantSession, L as getAssistantStreamAccess, C as modeRequiresConfirmWrites, M as releaseSupersededAssistantSandboxes, W as reportAssistantAiTokenUsage, S as selectExistingAssistantSandbox, j as selectSupersededAssistantSandboxes, F as sendAssistantPromptAsync, z as sendHeartbeat, N as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAmEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA+nDxD,CAAC"}
|
|
@@ -2,69 +2,69 @@ import { useI18n as e } from "../../providers/shell/I18nProvider.js";
|
|
|
2
2
|
import { useAuthToken as t } from "../../providers/shell/AuthTokenProvider.js";
|
|
3
3
|
import "../../../shared-providers-shell.js";
|
|
4
4
|
import { isQuotaExhaustedError as n } from "../quota.js";
|
|
5
|
-
import { createAssistantSandbox as r, createAssistantSession as i, extendAssistantSandboxTTL as a, findExistingSandbox as o, getAssistantArtifacts as s, getAssistantMessages as c, getAssistantSession as l,
|
|
6
|
-
import { getAssistantMedia as p, sanitize as
|
|
5
|
+
import { createAssistantSandbox as r, createAssistantSession as i, extendAssistantSandboxTTL as a, findExistingSandbox as o, getAssistantArtifacts as s, getAssistantMessages as c, getAssistantSession as l, releaseSupersededAssistantSandboxes as u, sendAssistantPromptAsync as ee, waitForAssistantServiceReady as d, waitForSandboxRunning as f } from "../api.js";
|
|
6
|
+
import { getAssistantMedia as p, sanitize as te } from "../progress.js";
|
|
7
7
|
import { isVoiceTurn as m, voiceMarker as h, voiceSessionIdOf as g } from "../voice/turnVisibility.js";
|
|
8
|
-
import { buildContinuedFromVoiceNote as _, buildVoiceTranscriptMarkdown as
|
|
9
|
-
import { pollDelayMs as
|
|
8
|
+
import { buildContinuedFromVoiceNote as _, buildVoiceTranscriptMarkdown as ne, voiceTranscriptFilename as v } from "../voice/voiceTranscript.js";
|
|
9
|
+
import { pollDelayMs as re } from "../voice/assistantPollSchedule.js";
|
|
10
10
|
import { toCaptionText as y } from "../voice/captionText.js";
|
|
11
|
-
import { resolveAssistantLanguage as
|
|
12
|
-
import { resolveLanguagePair as
|
|
13
|
-
import { findPendingWrite as
|
|
14
|
-
import { useAssistantProduct as
|
|
15
|
-
import { useAssistantTr as
|
|
16
|
-
import { buildPromptParts as
|
|
17
|
-
import { useAssistantStore as
|
|
18
|
-
import { isTurnInFlight as
|
|
19
|
-
import { parseToolActivity as
|
|
20
|
-
import { useVoiceSession as
|
|
21
|
-
import { getOrganizationId as
|
|
22
|
-
import { createReadinessTracker as
|
|
23
|
-
import { AssistantSpokenTurnsNotice as
|
|
24
|
-
import { VoiceTranscriptDrawer as
|
|
25
|
-
import { downloadFile as
|
|
26
|
-
import { AssistantEmptyState as
|
|
27
|
-
import { AssistantMessageList as
|
|
28
|
-
import { AssistantVoiceSession as
|
|
29
|
-
import { useAssistantApiAccess as
|
|
30
|
-
import { useConversationTurns as
|
|
31
|
-
import { isMultimodalBodyRejection as
|
|
32
|
-
import { dispatchAssistantQuotaExhausted as
|
|
33
|
-
import { useAssistantAttachments as
|
|
34
|
-
import { AssistantComposer as
|
|
35
|
-
import { isProdRuntime as
|
|
36
|
-
import { AssistantApiCallsConsentDialog as
|
|
37
|
-
import { useCallback as
|
|
38
|
-
import { jsx as
|
|
11
|
+
import { resolveAssistantLanguage as ie } from "../voice/languages.js";
|
|
12
|
+
import { resolveLanguagePair as b } from "../voice/languagePair.js";
|
|
13
|
+
import { findPendingWrite as ae } from "../pendingWrite.js";
|
|
14
|
+
import { useAssistantProduct as oe } from "../product.js";
|
|
15
|
+
import { useAssistantTr as se } from "../i18n.js";
|
|
16
|
+
import { buildPromptParts as ce, buildPromptWithAttachments as le, countInlineImageCandidates as ue, countInlinedImageParts as de, getSendableAttachments as fe, toMessageAttachment as pe } from "../attachments.js";
|
|
17
|
+
import { useAssistantStore as x } from "../store.js";
|
|
18
|
+
import { isTurnInFlight as me } from "../turnState.js";
|
|
19
|
+
import { parseToolActivity as he } from "./AssistantToolActivity.js";
|
|
20
|
+
import { useVoiceSession as ge } from "./useVoiceSession.js";
|
|
21
|
+
import { getOrganizationId as _e, getWorkspaceId as ve } from "../context.js";
|
|
22
|
+
import { createReadinessTracker as ye } from "../sandboxReadiness.js";
|
|
23
|
+
import { AssistantSpokenTurnsNotice as be } from "./AssistantSpokenTurnsNotice.js";
|
|
24
|
+
import { VoiceTranscriptDrawer as xe } from "./voice/VoiceTranscriptDrawer.js";
|
|
25
|
+
import { downloadFile as Se } from "../exportConversation.js";
|
|
26
|
+
import { AssistantEmptyState as Ce } from "./AssistantEmptyState.js";
|
|
27
|
+
import { AssistantMessageList as we } from "./AssistantMessageList.js";
|
|
28
|
+
import { AssistantVoiceSession as Te } from "./voice/AssistantVoiceSession.js";
|
|
29
|
+
import { useAssistantApiAccess as Ee } from "../useAssistantApiAccess.js";
|
|
30
|
+
import { useConversationTurns as De } from "../useConversationTurns.js";
|
|
31
|
+
import { isMultimodalBodyRejection as Oe, isRecoverableAssistantError as ke } from "../transportErrors.js";
|
|
32
|
+
import { dispatchAssistantQuotaExhausted as Ae, notifyAiCreditsUpdated as je } from "../aiCredits.js";
|
|
33
|
+
import { useAssistantAttachments as Me } from "../useAssistantAttachments.js";
|
|
34
|
+
import { AssistantComposer as Ne } from "./composer/AssistantComposer.js";
|
|
35
|
+
import { isProdRuntime as Pe } from "../env.js";
|
|
36
|
+
import { AssistantApiCallsConsentDialog as Fe } from "./AssistantApiCallsConsentDialog.js";
|
|
37
|
+
import { useCallback as S, useEffect as C, useMemo as w, useRef as T, useState as Ie } from "react";
|
|
38
|
+
import { jsx as E, jsxs as Le } from "react/jsx-runtime";
|
|
39
39
|
//#region src/shared/assistant/ui/AssistantChatArea.tsx
|
|
40
|
-
var
|
|
40
|
+
var Re = {
|
|
41
41
|
general: 18e4,
|
|
42
42
|
assistant: 18e4,
|
|
43
43
|
"api-calls": 18e4,
|
|
44
44
|
"vibe-plugins": 6e5
|
|
45
|
-
},
|
|
46
|
-
function
|
|
45
|
+
}, ze = 18e4, Be = 600, Ve = 2e4;
|
|
46
|
+
function He() {
|
|
47
47
|
return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function Ue(e) {
|
|
50
50
|
return e.info?.time?.created ?? 0;
|
|
51
51
|
}
|
|
52
|
-
function
|
|
52
|
+
function D(e) {
|
|
53
53
|
return (e ?? []).filter((e) => e.type === "text" && typeof e.text == "string").map((e) => e.text?.trim() ?? "").filter(Boolean).join("\n");
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function O(e) {
|
|
56
56
|
return (e ?? []).filter((e) => e.type === "tool" && e.tool).map((e) => {
|
|
57
57
|
let t = e.state?.status ?? "running", n = e.tool ?? "tool";
|
|
58
58
|
return t === "completed" ? `Completed: ${n}` : t === "failed" ? `Failed: ${n}` : `Running: ${n}`;
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
|
-
function
|
|
62
|
-
let n = e.filter((e) => e.info?.role === "assistant" &&
|
|
61
|
+
function We(e, t) {
|
|
62
|
+
let n = e.filter((e) => e.info?.role === "assistant" && Ue(e) > t).sort((e, t) => Ue(e) - Ue(t));
|
|
63
63
|
if (n.length === 0) return {
|
|
64
64
|
content: "Thinking...",
|
|
65
65
|
done: !1
|
|
66
66
|
};
|
|
67
|
-
let r = n[n.length - 1], i =
|
|
67
|
+
let r = n[n.length - 1], i = D(r.parts), a = p(r.parts), o = O(r.parts), s = ae(r.parts), c = [
|
|
68
68
|
i,
|
|
69
69
|
...a,
|
|
70
70
|
...o
|
|
@@ -78,7 +78,7 @@ function He(e, t) {
|
|
|
78
78
|
...s ? { pendingWrite: s } : {}
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
-
function
|
|
81
|
+
function Ge(e) {
|
|
82
82
|
switch (e) {
|
|
83
83
|
case "provisioning": return "Starting assistant environment...";
|
|
84
84
|
case "connecting": return "Connecting to assistant...";
|
|
@@ -86,25 +86,25 @@ function Ue(e) {
|
|
|
86
86
|
default: return "";
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
var
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
]),
|
|
95
|
-
|
|
96
|
-
|
|
89
|
+
var k = ({ visible: p = !0, writeAccess: ae = "unknown" }) => {
|
|
90
|
+
let D = se(), { product: O, modes: k, gatherPageContext: Ke, buildPrompt: qe, reportTokenUsage: Je } = oe(), { getAccessToken: A, getWorkspaceToken: Ye, userId: Xe } = t(), { locale: Ze } = e(), Qe = x((e) => e.assistantLanguage), $e = x((e) => e.replyLanguage), et = w(() => b(Qe, $e, Ze), [
|
|
91
|
+
Qe,
|
|
92
|
+
$e,
|
|
93
|
+
Ze
|
|
94
|
+
]), tt = et.reply.english, nt = et.replyIsExplicit, rt = et.reply.code, { conversations: it, activeConversationId: j, mode: M, processingByConversationId: at, setMode: ot, setConversationMode: N, setActiveConversation: st, createConversation: P, addMessage: F, updateMessage: ct, patchMessage: I, mergeMessageMetadata: lt, setConversationProcessing: L, setBackendSessionId: ut, clearBackendSessionId: R, setSandbox: z, clearSandbox: dt, acknowledgeApiCalls: ft } = x(), pt = it.find((e) => e.id === j), B = De(pt), V = B.all, H = j ? at[j] : void 0, U = me(H?.status), mt = U ? H?.messageId ?? null : null, ht = H?.status === "error" ? H.messageId : null, { canUseApiCalls: W, loading: gt } = Ee(_e()), _t = w(() => k.filter((e) => !e.requiresAdmin || W), [k, W]), [vt, yt] = Ie(null), [bt, G] = Ie(!1), xt = T({}), K = T(ye()), St = T(/* @__PURE__ */ new Set()), q = w(() => k.find((e) => e.id === M), [k, M]);
|
|
95
|
+
C(() => {
|
|
96
|
+
gt || (!q || q.requiresAdmin && !W) && M !== "assistant" && ot("assistant");
|
|
97
97
|
}, [
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
M,
|
|
99
|
+
q,
|
|
100
100
|
W,
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
gt,
|
|
102
|
+
ot
|
|
103
103
|
]);
|
|
104
|
-
let
|
|
105
|
-
L(e, n, t, null), r ?
|
|
106
|
-
}, [L,
|
|
107
|
-
let c =
|
|
104
|
+
let J = S((e, t, n, r) => {
|
|
105
|
+
L(e, n, t, null), r ? ct(e, t, r) : ct(e, t, Ge(n));
|
|
106
|
+
}, [L, ct]), Ct = S(async (e, t, n, a, s) => {
|
|
107
|
+
let c = x.getState().sandboxesByMode[n]?.sandboxId ?? null, ee = async (e) => {
|
|
108
108
|
if (K.current.isFresh(e)) return !0;
|
|
109
109
|
try {
|
|
110
110
|
return await f(e, a, s, 3e5), await d(e, a, s, 9e4), K.current.markVerified(e), !0;
|
|
@@ -112,339 +112,339 @@ var A = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
|
|
|
112
112
|
return K.current.invalidate(e), !1;
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
|
-
if (c && (z(n, c, "provisioning"),
|
|
116
|
-
|
|
117
|
-
let r = await o(a,
|
|
118
|
-
r && (z(n, r, "provisioning"),
|
|
115
|
+
if (c && (z(n, c, "provisioning"), J(e, t, "provisioning", "Reusing assistant environment..."), await ee(c) || (z(n, null, "provisioning"), c = null)), !c) {
|
|
116
|
+
J(e, t, "provisioning", "Looking for existing environment...");
|
|
117
|
+
let r = await o(a, O, n, Pe(), s);
|
|
118
|
+
r && (z(n, r, "provisioning"), J(e, t, "provisioning", "Reusing assistant environment..."), await ee(r) ? c = r : z(n, null, "provisioning"));
|
|
119
119
|
}
|
|
120
120
|
if (!c) {
|
|
121
|
-
if (n === "api-calls" && !
|
|
122
|
-
|
|
121
|
+
if (n === "api-calls" && !A()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
|
|
122
|
+
J(e, t, "provisioning", "Starting assistant environment..."), z(n, null, "provisioning"), await u(a, O, n, Pe(), s), c = await r(O, n, a, Pe(), Be, s), z(n, c, "provisioning"), await f(c, a, s, 3e5), await d(c, a, s, 9e4);
|
|
123
123
|
}
|
|
124
124
|
z(n, c, "running");
|
|
125
|
-
let p =
|
|
125
|
+
let p = x.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
|
|
126
126
|
if (p) try {
|
|
127
127
|
let e = await l(c, a, p, s);
|
|
128
128
|
if (e.mode !== n) throw Error(`Session mode mismatch: expected ${n}, received ${e.mode}`);
|
|
129
129
|
} catch {
|
|
130
130
|
R(e), p = null;
|
|
131
131
|
}
|
|
132
|
-
return p || (
|
|
132
|
+
return p || (J(e, t, "connecting", "Preparing session..."), p = (await i(c, a, n, s)).sessionId, ut(e, p)), {
|
|
133
133
|
sandboxId: c,
|
|
134
134
|
sessionId: p
|
|
135
135
|
};
|
|
136
136
|
}, [
|
|
137
137
|
R,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
A,
|
|
139
|
+
O,
|
|
140
|
+
ut,
|
|
141
141
|
z,
|
|
142
|
-
|
|
143
|
-
]),
|
|
144
|
-
let i = r.voiceSessionId !== void 0, o =
|
|
145
|
-
if (l && (
|
|
146
|
-
let
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
let
|
|
150
|
-
accessToken:
|
|
151
|
-
workspaceToken:
|
|
152
|
-
userId:
|
|
153
|
-
organizationId:
|
|
154
|
-
},
|
|
155
|
-
id:
|
|
142
|
+
J
|
|
143
|
+
]), Y = S(async (e, t = [], r = {}) => {
|
|
144
|
+
let i = r.voiceSessionId !== void 0, o = x.getState(), l = o.activeConversationId ?? j;
|
|
145
|
+
if (l && (me(o.processingByConversationId[l]?.status) || St.current.has(l))) return;
|
|
146
|
+
let u = o.mode, d = j, f = d ? x.getState().conversations.find((e) => e.id === d) : void 0;
|
|
147
|
+
if (d ? f && f.mode !== u && (f.messages.length > 0 || f.backendSessionId) ? d = P(void 0, u) : f && f.mode !== u && N(d, u) : d = P(void 0, u), !d) return;
|
|
148
|
+
xt.current[d] = t;
|
|
149
|
+
let p = ve(), m = {
|
|
150
|
+
accessToken: A(),
|
|
151
|
+
workspaceToken: Ye(),
|
|
152
|
+
userId: Xe,
|
|
153
|
+
organizationId: _e()
|
|
154
|
+
}, g = {
|
|
155
|
+
id: He(),
|
|
156
156
|
role: "user",
|
|
157
157
|
content: e,
|
|
158
158
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
159
159
|
metadata: {
|
|
160
|
-
...t.length ? { attachments: t.map(
|
|
160
|
+
...t.length ? { attachments: t.map(pe) } : {},
|
|
161
161
|
...h(r.voiceSessionId)
|
|
162
162
|
}
|
|
163
163
|
};
|
|
164
|
-
F(
|
|
165
|
-
let
|
|
166
|
-
F(
|
|
167
|
-
id:
|
|
164
|
+
F(d, g);
|
|
165
|
+
let _ = He();
|
|
166
|
+
F(d, {
|
|
167
|
+
id: _,
|
|
168
168
|
role: "assistant",
|
|
169
169
|
content: "",
|
|
170
170
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
171
171
|
metadata: {
|
|
172
|
-
lang:
|
|
172
|
+
lang: rt,
|
|
173
173
|
...h(r.voiceSessionId)
|
|
174
174
|
}
|
|
175
|
-
}), L(
|
|
176
|
-
let
|
|
177
|
-
I(
|
|
175
|
+
}), L(d, "provisioning", _, null);
|
|
176
|
+
let ne = (e, t, n, i, a = rt) => {
|
|
177
|
+
I(d, _, { content: te(e) }), lt(d, _, {
|
|
178
178
|
lang: a,
|
|
179
179
|
...t?.length ? { artifacts: t } : {},
|
|
180
|
-
...t?.length || n || i ? { mode:
|
|
180
|
+
...t?.length || n || i ? { mode: u } : {},
|
|
181
181
|
...n ? { sessionId: n } : {},
|
|
182
182
|
...i ? { sandboxId: i } : {},
|
|
183
183
|
...h(r.voiceSessionId)
|
|
184
184
|
});
|
|
185
|
-
},
|
|
185
|
+
}, v = async (n = 1) => {
|
|
186
186
|
let r = !1;
|
|
187
187
|
try {
|
|
188
|
-
let { sandboxId: n, sessionId: o } = await Ct(
|
|
189
|
-
|
|
190
|
-
let
|
|
191
|
-
r =
|
|
188
|
+
let { sandboxId: n, sessionId: o } = await Ct(d, _, u, p, m), l = (await c(n, p, o, m, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, Ue(t)), 0);
|
|
189
|
+
J(d, _, "streaming", "Thinking...");
|
|
190
|
+
let f = le(e, t), h = qe?.(u, f, tt, nt, i) ?? f, g = ce(h, t), v = de(g), y = v > 0, ie = Ke?.();
|
|
191
|
+
r = ue(t) > v;
|
|
192
192
|
try {
|
|
193
|
-
await
|
|
193
|
+
await ee(n, p, o, h, u, ie, m, g?.length ? { parts: g } : void 0);
|
|
194
194
|
} catch (e) {
|
|
195
|
-
if (!
|
|
196
|
-
await
|
|
195
|
+
if (!g || !Oe(e)) throw e;
|
|
196
|
+
await ee(n, p, o, h, u, ie, m, void 0), r ||= y;
|
|
197
197
|
}
|
|
198
|
-
let
|
|
199
|
-
for (; Date.now() <
|
|
198
|
+
let b = We([], l), ae = Date.now() + (Re[u] ?? ze), oe = Date.now(), se = Date.now();
|
|
199
|
+
for (; Date.now() < ae && (b = We(await c(n, p, o, m, {
|
|
200
200
|
limit: 50,
|
|
201
201
|
sinceMs: l
|
|
202
|
-
}), l), I(
|
|
203
|
-
if (!
|
|
204
|
-
let
|
|
205
|
-
if (
|
|
206
|
-
...
|
|
207
|
-
content: `${
|
|
208
|
-
}), r && (
|
|
209
|
-
...
|
|
210
|
-
content: `${
|
|
211
|
-
}),
|
|
212
|
-
I(
|
|
202
|
+
}), l), I(d, _, { content: te(b.content) }), b.pendingWrite && lt(d, _, { pendingWrite: b.pendingWrite }), !b.done);) Date.now() - oe > 3e4 && (await a(n, p, 600, m).catch(() => void 0), oe = Date.now()), await new Promise((e) => setTimeout(e, re(Date.now() - se)));
|
|
203
|
+
if (!b.done && u !== "vibe-plugins") throw Error("Assistant response timed out while streaming progress");
|
|
204
|
+
let fe = u === "vibe-plugins" ? await s(n, p, o, m).then((e) => e).catch(() => []) : void 0;
|
|
205
|
+
if (b.done || (b = {
|
|
206
|
+
...b,
|
|
207
|
+
content: `${b.content}\n\n_Still building in the background — any artifacts below will finish shortly. Re-open this conversation to pick up the completed plugin._`
|
|
208
|
+
}), r && (b = {
|
|
209
|
+
...b,
|
|
210
|
+
content: `${b.content}\n\n${D("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._")}`
|
|
211
|
+
}), ne(b.content, fe, o, n), b.tokens) {
|
|
212
|
+
I(d, _, { tokens: b.tokens });
|
|
213
213
|
try {
|
|
214
|
-
await
|
|
215
|
-
workspaceId:
|
|
214
|
+
await Je?.({
|
|
215
|
+
workspaceId: p,
|
|
216
216
|
sessionId: o,
|
|
217
|
-
messageId:
|
|
218
|
-
model:
|
|
219
|
-
tokens:
|
|
220
|
-
}),
|
|
217
|
+
messageId: b.messageId,
|
|
218
|
+
model: b.model,
|
|
219
|
+
tokens: b.tokens
|
|
220
|
+
}), je(O);
|
|
221
221
|
} catch {}
|
|
222
222
|
}
|
|
223
|
-
L(
|
|
223
|
+
L(d, "complete", _, null);
|
|
224
224
|
} catch (e) {
|
|
225
|
-
if (n === 1 &&
|
|
225
|
+
if (n === 1 && ke(e)) return R(d), dt(u), v(2);
|
|
226
226
|
throw e;
|
|
227
227
|
}
|
|
228
|
-
},
|
|
229
|
-
|
|
228
|
+
}, y = d;
|
|
229
|
+
St.current.add(y);
|
|
230
230
|
try {
|
|
231
|
-
if (!
|
|
232
|
-
await
|
|
231
|
+
if (!p) throw Error("Assistant backend is unavailable without an active workspace context.");
|
|
232
|
+
await v();
|
|
233
233
|
} catch (e) {
|
|
234
|
-
if (K.current.invalidate(
|
|
235
|
-
|
|
234
|
+
if (K.current.invalidate(x.getState().sandboxesByMode[u]?.sandboxId ?? null), n(e)) {
|
|
235
|
+
Ae(O, "sandbox"), ne("You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant.", void 0, void 0, void 0, "en"), L(d, "error", _, null);
|
|
236
236
|
return;
|
|
237
237
|
}
|
|
238
238
|
let t = e instanceof Error ? e.message : "Something went wrong";
|
|
239
|
-
L(
|
|
239
|
+
L(d, "error", _, t), I(d, _, { content: `Sorry, an error occurred: ${t}. Please try again.` }), lt(d, _, {
|
|
240
240
|
lang: "en",
|
|
241
241
|
...h(r.voiceSessionId)
|
|
242
242
|
});
|
|
243
243
|
} finally {
|
|
244
|
-
|
|
244
|
+
St.current.delete(y);
|
|
245
245
|
}
|
|
246
246
|
}, [
|
|
247
|
-
|
|
247
|
+
j,
|
|
248
248
|
F,
|
|
249
|
-
|
|
249
|
+
qe,
|
|
250
250
|
R,
|
|
251
|
-
|
|
252
|
-
|
|
251
|
+
dt,
|
|
252
|
+
it,
|
|
253
253
|
P,
|
|
254
254
|
Ct,
|
|
255
|
-
We,
|
|
256
|
-
j,
|
|
257
|
-
qe,
|
|
258
|
-
I,
|
|
259
|
-
k,
|
|
260
255
|
Ke,
|
|
261
|
-
|
|
256
|
+
A,
|
|
257
|
+
Ye,
|
|
258
|
+
I,
|
|
259
|
+
O,
|
|
260
|
+
Je,
|
|
261
|
+
nt,
|
|
262
|
+
rt,
|
|
262
263
|
tt,
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
at,
|
|
264
|
+
ut,
|
|
265
|
+
N,
|
|
266
266
|
L,
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
]), wt =
|
|
271
|
-
|
|
272
|
-
}, [
|
|
273
|
-
let e = [...B.chat].reverse().find((e) => e.role === "user"), t =
|
|
274
|
-
e &&
|
|
267
|
+
D,
|
|
268
|
+
J,
|
|
269
|
+
Xe
|
|
270
|
+
]), wt = S((e) => {
|
|
271
|
+
Y(e);
|
|
272
|
+
}, [Y]), Tt = S(() => {
|
|
273
|
+
let e = [...B.chat].reverse().find((e) => e.role === "user"), t = j ? xt.current[j] ?? [] : [];
|
|
274
|
+
e && Y(e.content, t);
|
|
275
275
|
}, [
|
|
276
276
|
V,
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
]),
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}, [
|
|
283
|
-
let
|
|
277
|
+
Y,
|
|
278
|
+
j
|
|
279
|
+
]), Et = T(Y);
|
|
280
|
+
C(() => {
|
|
281
|
+
Et.current = Y;
|
|
282
|
+
}, [Y]);
|
|
283
|
+
let Dt = w(() => {
|
|
284
284
|
if (U) return null;
|
|
285
285
|
for (let e = V.length - 1; e >= 0; --e) {
|
|
286
286
|
let t = V[e];
|
|
287
287
|
if (t?.role !== "assistant" || !m(t)) continue;
|
|
288
|
-
let n =
|
|
288
|
+
let n = he(t.content).text.trim();
|
|
289
289
|
return n ? {
|
|
290
290
|
id: t.id,
|
|
291
291
|
text: n
|
|
292
292
|
} : null;
|
|
293
293
|
}
|
|
294
294
|
return null;
|
|
295
|
-
}, [V, U]),
|
|
295
|
+
}, [V, U]), Ot = w(() => Dt ? y(Dt.text) : null, [Dt]), kt = B.chat, X = w(() => B.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
|
|
296
296
|
id: e.id,
|
|
297
297
|
role: e.role,
|
|
298
|
-
text:
|
|
298
|
+
text: he(e.content).text.trim(),
|
|
299
299
|
sessionId: g(e),
|
|
300
300
|
timestamp: e.timestamp
|
|
301
|
-
})).filter((e) => e.text.length > 0), [B.voice]),
|
|
301
|
+
})).filter((e) => e.text.length > 0), [B.voice]), At = S(() => {
|
|
302
302
|
if (X.length === 0) return;
|
|
303
303
|
let e = /* @__PURE__ */ new Date();
|
|
304
|
-
|
|
305
|
-
title:
|
|
306
|
-
savedAt:
|
|
307
|
-
session:
|
|
308
|
-
earlier:
|
|
309
|
-
you:
|
|
310
|
-
assistant:
|
|
311
|
-
}, e),
|
|
304
|
+
Se(ne(X, {
|
|
305
|
+
title: D("voiceSession.transcript", "Voice conversation"),
|
|
306
|
+
savedAt: D("voiceSession.savedAt", "Saved"),
|
|
307
|
+
session: D("voiceSession.sessionLabel", "Session"),
|
|
308
|
+
earlier: D("voiceSession.earlierLabel", "Earlier"),
|
|
309
|
+
you: D("voiceSession.speakerYou", "You"),
|
|
310
|
+
assistant: D("voiceSession.speakerAssistant", "Assistant")
|
|
311
|
+
}, e), v(O, e), "text/markdown");
|
|
312
312
|
}, [
|
|
313
|
-
|
|
313
|
+
O,
|
|
314
314
|
X,
|
|
315
|
-
|
|
316
|
-
]), Z =
|
|
315
|
+
D
|
|
316
|
+
]), Z = Me(), Q = T(Z);
|
|
317
317
|
Q.current = Z;
|
|
318
|
-
let $ =
|
|
319
|
-
onSubmit:
|
|
318
|
+
let $ = ge({
|
|
319
|
+
onSubmit: S((e, t) => {
|
|
320
320
|
let n = () => {
|
|
321
|
-
let n = Q.current, r =
|
|
322
|
-
|
|
321
|
+
let n = Q.current, r = fe(n.attachments);
|
|
322
|
+
Et.current(e, r, { voiceSessionId: t }), n.clear();
|
|
323
323
|
};
|
|
324
324
|
if (!Q.current.isBusy) {
|
|
325
325
|
n();
|
|
326
326
|
return;
|
|
327
327
|
}
|
|
328
328
|
let r = Date.now(), i = window.setInterval(() => {
|
|
329
|
-
Q.current.isBusy && Date.now() - r <
|
|
329
|
+
Q.current.isBusy && Date.now() - r < Ve || (window.clearInterval(i), n());
|
|
330
330
|
}, 200);
|
|
331
331
|
}, []),
|
|
332
|
-
latestReply:
|
|
333
|
-
language:
|
|
334
|
-
}),
|
|
335
|
-
let e =
|
|
332
|
+
latestReply: Dt,
|
|
333
|
+
language: ie(Qe, Ze).tag
|
|
334
|
+
}), jt = w(() => (pt?.messages ?? []).reduce((e, t) => Math.max(e, t.metadata?.continuedVoiceTurns ?? 0), 0), [pt?.messages]), Mt = X.length > jt, Nt = S(() => {
|
|
335
|
+
let e = x.getState().activeConversationId;
|
|
336
336
|
!e || X.length === 0 || (F(e, {
|
|
337
|
-
id:
|
|
337
|
+
id: He(),
|
|
338
338
|
role: "system",
|
|
339
|
-
content: _(X.slice(
|
|
340
|
-
intro:
|
|
341
|
-
nothing:
|
|
342
|
-
more: (e) =>
|
|
339
|
+
content: _(X.slice(jt), {
|
|
340
|
+
intro: D("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
|
|
341
|
+
nothing: D("voiceSession.continuedNothing", "Continued from a voice conversation."),
|
|
342
|
+
more: (e) => D("voiceSession.continuedMore", "…and {{count}} more", { count: e })
|
|
343
343
|
}),
|
|
344
344
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
345
345
|
metadata: { continuedVoiceTurns: X.length }
|
|
346
346
|
}), G(!1), $.end());
|
|
347
347
|
}, [
|
|
348
348
|
X,
|
|
349
|
-
|
|
349
|
+
jt,
|
|
350
350
|
F,
|
|
351
|
-
|
|
351
|
+
D,
|
|
352
352
|
$
|
|
353
|
-
]),
|
|
354
|
-
|
|
355
|
-
$.active && (
|
|
353
|
+
]), Pt = T(0);
|
|
354
|
+
C(() => {
|
|
355
|
+
$.active && (Pt.current = X.length);
|
|
356
356
|
}, [$.active]);
|
|
357
|
-
let
|
|
358
|
-
let e = X.length >
|
|
357
|
+
let Ft = S(() => {
|
|
358
|
+
let e = X.length > Pt.current;
|
|
359
359
|
$.end(), e && G(!0);
|
|
360
360
|
}, [X, $]);
|
|
361
|
-
|
|
361
|
+
C(() => {
|
|
362
362
|
!p && $.active && $.end();
|
|
363
|
-
}, [p, $]),
|
|
363
|
+
}, [p, $]), C(() => {
|
|
364
364
|
$.active || Q.current.clear();
|
|
365
|
-
}, [$.active]),
|
|
366
|
-
let e =
|
|
367
|
-
return e &&
|
|
365
|
+
}, [$.active]), C(() => {
|
|
366
|
+
let e = x.getState().consumePendingPrompt();
|
|
367
|
+
return e && Et.current(e), x.subscribe((e, t) => {
|
|
368
368
|
if (e.pendingPrompt && e.pendingPrompt !== t.pendingPrompt) {
|
|
369
|
-
let e =
|
|
370
|
-
e &&
|
|
369
|
+
let e = x.getState().consumePendingPrompt();
|
|
370
|
+
e && Et.current(e);
|
|
371
371
|
}
|
|
372
372
|
});
|
|
373
373
|
}, []);
|
|
374
|
-
let
|
|
375
|
-
let t =
|
|
374
|
+
let It = S((e) => {
|
|
375
|
+
let t = j ? x.getState().conversations.find((e) => e.id === j) : void 0;
|
|
376
376
|
if (t && (t.messages.length > 0 || t.backendSessionId)) {
|
|
377
377
|
if (t.mode !== e) {
|
|
378
|
-
let t =
|
|
379
|
-
t ?
|
|
378
|
+
let t = x.getState().conversations.find((t) => t.mode === e && t.messages.length === 0 && !t.backendSessionId && !x.getState().processingByConversationId[t.id]);
|
|
379
|
+
t ? st(t.id) : P(void 0, e);
|
|
380
380
|
}
|
|
381
|
-
} else
|
|
382
|
-
|
|
381
|
+
} else j && N(j, e);
|
|
382
|
+
ot(e);
|
|
383
383
|
}, [
|
|
384
|
-
|
|
384
|
+
j,
|
|
385
385
|
P,
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
]),
|
|
390
|
-
if (
|
|
391
|
-
|
|
386
|
+
st,
|
|
387
|
+
N,
|
|
388
|
+
ot
|
|
389
|
+
]), Lt = S((e) => {
|
|
390
|
+
if (k.find((t) => t.id === e)?.writeCapable && !x.getState().apiCallsAcknowledged) {
|
|
391
|
+
yt(e);
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
|
-
|
|
395
|
-
}, [
|
|
396
|
-
let e =
|
|
397
|
-
|
|
394
|
+
It(e);
|
|
395
|
+
}, [It, k]), Rt = S(() => {
|
|
396
|
+
let e = vt;
|
|
397
|
+
yt(null), ft(), e && It(e);
|
|
398
398
|
}, [
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
]),
|
|
403
|
-
|
|
399
|
+
vt,
|
|
400
|
+
ft,
|
|
401
|
+
It
|
|
402
|
+
]), zt = S(() => {
|
|
403
|
+
yt(null);
|
|
404
404
|
}, []);
|
|
405
|
-
return /* @__PURE__ */
|
|
405
|
+
return /* @__PURE__ */ Le("div", {
|
|
406
406
|
className: "relative flex flex-1 flex-col overflow-hidden",
|
|
407
407
|
children: [
|
|
408
|
-
/* @__PURE__ */
|
|
408
|
+
/* @__PURE__ */ Le("div", {
|
|
409
409
|
className: "contents",
|
|
410
410
|
inert: $.active || void 0,
|
|
411
411
|
children: [
|
|
412
|
-
X.length > 0 && !$.active ? /* @__PURE__ */
|
|
412
|
+
X.length > 0 && !$.active ? /* @__PURE__ */ E(be, {
|
|
413
413
|
count: X.length,
|
|
414
414
|
onOpenTranscript: () => G(!0)
|
|
415
415
|
}) : null,
|
|
416
|
-
|
|
417
|
-
mode:
|
|
416
|
+
kt.length === 0 ? /* @__PURE__ */ E(Ce, {
|
|
417
|
+
mode: M,
|
|
418
418
|
onSuggestionClick: wt
|
|
419
|
-
}) : /* @__PURE__ */
|
|
419
|
+
}) : /* @__PURE__ */ E("div", {
|
|
420
420
|
className: "flex min-h-0 flex-1 flex-col",
|
|
421
|
-
children: /* @__PURE__ */
|
|
422
|
-
messages:
|
|
423
|
-
streamingMessageId:
|
|
424
|
-
failedMessageId:
|
|
421
|
+
children: /* @__PURE__ */ E(we, {
|
|
422
|
+
messages: kt,
|
|
423
|
+
streamingMessageId: mt,
|
|
424
|
+
failedMessageId: ht,
|
|
425
425
|
onRetry: Tt
|
|
426
426
|
})
|
|
427
427
|
}),
|
|
428
|
-
/* @__PURE__ */
|
|
429
|
-
onStartVoiceSession: $.available &&
|
|
430
|
-
onSend: (e, t) => void
|
|
428
|
+
/* @__PURE__ */ E(Ne, {
|
|
429
|
+
onStartVoiceSession: $.available && M !== "api-calls" ? $.start : void 0,
|
|
430
|
+
onSend: (e, t) => void Y(e, t),
|
|
431
431
|
disabled: U,
|
|
432
|
-
placeholder:
|
|
433
|
-
mode:
|
|
434
|
-
writeAccessDenied:
|
|
435
|
-
availableModes:
|
|
436
|
-
onModeChange:
|
|
432
|
+
placeholder: M === "api-calls" ? D("chatArea.placeholderActions", "What would you like me to do?") : D("chatArea.placeholderGeneral", "Ask me anything…"),
|
|
433
|
+
mode: M,
|
|
434
|
+
writeAccessDenied: ae === "denied" && !!q?.writeCapable,
|
|
435
|
+
availableModes: _t,
|
|
436
|
+
onModeChange: Lt
|
|
437
437
|
})
|
|
438
438
|
]
|
|
439
439
|
}),
|
|
440
|
-
|
|
440
|
+
bt && !$.active ? /* @__PURE__ */ E(xe, {
|
|
441
441
|
turns: X,
|
|
442
442
|
onClose: () => G(!1),
|
|
443
|
-
onSave:
|
|
444
|
-
onContinueInChat:
|
|
443
|
+
onSave: At,
|
|
444
|
+
onContinueInChat: Mt ? Nt : void 0,
|
|
445
445
|
closeOnEscape: !0
|
|
446
446
|
}) : null,
|
|
447
|
-
$.active && /* @__PURE__ */
|
|
447
|
+
$.active && /* @__PURE__ */ E(Te, {
|
|
448
448
|
session: $.session,
|
|
449
449
|
notice: $.notice,
|
|
450
450
|
capturing: $.capturing,
|
|
@@ -458,20 +458,20 @@ var A = ({ visible: p = !0, writeAccess: x = "unknown" }) => {
|
|
|
458
458
|
onRetryAttachment: Z.retry,
|
|
459
459
|
canAttachMore: Z.canAddMore,
|
|
460
460
|
preparingAttachments: Z.preparingCount,
|
|
461
|
-
onSaveTranscript:
|
|
462
|
-
onContinueInChat:
|
|
461
|
+
onSaveTranscript: At,
|
|
462
|
+
onContinueInChat: Nt,
|
|
463
463
|
onInterrupt: $.interrupt,
|
|
464
|
-
spoken:
|
|
464
|
+
spoken: Ot,
|
|
465
465
|
onToggleMute: $.toggleMute,
|
|
466
|
-
onEnd:
|
|
466
|
+
onEnd: Ft
|
|
467
467
|
}),
|
|
468
|
-
/* @__PURE__ */
|
|
469
|
-
open:
|
|
470
|
-
onConfirm:
|
|
471
|
-
onCancel:
|
|
468
|
+
/* @__PURE__ */ E(Fe, {
|
|
469
|
+
open: vt !== null,
|
|
470
|
+
onConfirm: Rt,
|
|
471
|
+
onCancel: zt
|
|
472
472
|
})
|
|
473
473
|
]
|
|
474
474
|
});
|
|
475
475
|
};
|
|
476
476
|
//#endregion
|
|
477
|
-
export {
|
|
477
|
+
export { k as AssistantChatArea };
|
package/dist/shared-assistant.js
CHANGED
|
@@ -4,90 +4,90 @@ import { buildSandboxContextInput as i, executeSandboxGraphQL as a } from "./sha
|
|
|
4
4
|
import { CHECK_AI_CREDITS as o, CREATE_SANDBOX as s, EXTEND_SANDBOX_TTL as c, GET_ACTIVE_SANDBOXES as l, GET_SANDBOX as u, PROXY_SANDBOX_REQUEST as d, REPORT_AI_TOKEN_USAGE as f, STOP_ASSISTANT_SANDBOX as p, WAIT_FOR_SANDBOX_RUNNING as m } from "./shared/assistant/operations.js";
|
|
5
5
|
import { ASSISTANT_API_AUTH_STRATEGY as h, getImageForMode as g, getImageTagForMode as _, getResourcesForMode as v, getSandboxImageRegistry as y, resolveSandboxAssistantMode as b } from "./shared/assistant/images.js";
|
|
6
6
|
import { getCapability as x, isUnknownFieldError as S, markSupported as C, markUnsupported as w } from "./shared/assistant/capabilities.js";
|
|
7
|
-
import { buildAssistantSandboxEnv as T, buildPromptRequestBody as E, checkAssistantAiCredits as D, createAssistantSandbox as O, createAssistantSession as k, downloadAssistantArtifact as A, extendAssistantSandboxTTL as j, findExistingSandbox as M, getAssistantArtifacts as N, getAssistantMessages as P, getAssistantSession as F, getAssistantStreamAccess as I, modeRequiresConfirmWrites as L,
|
|
8
|
-
import { AssistantRuntimeManager as
|
|
9
|
-
import { buildProgress as
|
|
10
|
-
import { createSandboxAssistantTransport as
|
|
11
|
-
import { useSandboxAssistantTransport as
|
|
12
|
-
import { chatTurns as
|
|
13
|
-
import { browserSpeechEngine as
|
|
14
|
-
import { HOSTED_TTS_TIER as
|
|
15
|
-
import { HOSTED_TTS_MAX_CHARS as
|
|
16
|
-
import { createHostedTtsEngine as
|
|
17
|
-
import { createRoutingSpeechEngine as
|
|
18
|
-
import { configureSpeechEngine as
|
|
19
|
-
import { micIsInterrupt as
|
|
20
|
-
import { ENDPOINT_GRACE_MS as
|
|
21
|
-
import { SPEECH_LANG as
|
|
22
|
-
import { buildContinuedFromVoiceNote as
|
|
23
|
-
import { DEFAULT_SPEAKABLE_LABELS as
|
|
24
|
-
import { PREVIEW_LANGUAGES as
|
|
25
|
-
import { MINI_CAPTION_BUDGET as
|
|
26
|
-
import { POLL_FAST_MS as
|
|
27
|
-
import { toCaptionText as
|
|
28
|
-
import { ASSISTANT_LANGUAGES as
|
|
29
|
-
import { replyFollowsInput as
|
|
30
|
-
import { findPendingWrite as
|
|
31
|
-
import { AssistantProductProvider as
|
|
32
|
-
import { AssistantI18nProvider as
|
|
33
|
-
import { SPOKEN_LABEL_LANGUAGES as
|
|
34
|
-
import { detectScriptLocale as
|
|
35
|
-
import { IDLE_PLAYBACK as
|
|
36
|
-
import { MAX_INLINE_IMAGE_BASE64_BYTES as
|
|
37
|
-
import { BOILERPLATE_PAGE_SHARE as
|
|
38
|
-
import { ATTACHMENT_ACCEPT as
|
|
39
|
-
import { useAssistantStore as
|
|
40
|
-
import { isTurnInFlight as
|
|
41
|
-
import { AssistantToolActivity as
|
|
42
|
-
import { AssistantSpeechProvider as
|
|
43
|
-
import { useVoiceSession as
|
|
44
|
-
import { copyToClipboard as
|
|
45
|
-
import { getActorId as
|
|
46
|
-
import { ATTACHMENT_SOURCES as
|
|
47
|
-
import { SANDBOX_READY_TTL_MS as
|
|
48
|
-
import { AssistantAutoSpeakToggle as
|
|
49
|
-
import { AssistantMarkdownImage as
|
|
50
|
-
import { AssistantMarkdownRenderer as
|
|
51
|
-
import { AssistantMessageAttachments as
|
|
52
|
-
import { AssistantPendingWriteCard as
|
|
53
|
-
import { AssistantLanguageMenu as
|
|
54
|
-
import { AssistantReplyLanguageSelector as
|
|
55
|
-
import { AssistantSpeakButton as
|
|
56
|
-
import { AssistantSpokenTurnsNotice as
|
|
57
|
-
import { AssistantAttachmentButton as
|
|
58
|
-
import { AssistantAttachmentChips as
|
|
59
|
-
import { AssistantLanguageSelector as
|
|
60
|
-
import { ASSISTANT_MODE_META as
|
|
61
|
-
import { AssistantVoiceButton as
|
|
62
|
-
import { AUTO_VOICE as
|
|
63
|
-
import { AssistantVoiceOrb as
|
|
64
|
-
import { AssistantVoiceSessionButton as
|
|
65
|
-
import { CAPTION_SCROLL_ATTR as
|
|
66
|
-
import { VoiceConversationView as
|
|
67
|
-
import { VoiceWaveform as
|
|
68
|
-
import { VoiceMiniController as
|
|
69
|
-
import { VoiceStage as
|
|
70
|
-
import { VoiceTranscriptDrawer as
|
|
71
|
-
import { downloadFile as
|
|
72
|
-
import { AssistantMoreMenu as
|
|
73
|
-
import { AssistantHeader as
|
|
74
|
-
import { AssistantConversationList as
|
|
75
|
-
import { AssistantEmptyState as
|
|
76
|
-
import { AssistantMessageItem as
|
|
77
|
-
import { AssistantMessageList as
|
|
78
|
-
import { AssistantVoiceSession as
|
|
79
|
-
import { useAssistantApiAccess as
|
|
80
|
-
import { useConversationTurns as
|
|
81
|
-
import { isMultimodalBodyRejection as
|
|
82
|
-
import { aiCreditsUpdatedEventName as
|
|
83
|
-
import { useWorkspaceWriteAccess as
|
|
84
|
-
import { extractDocumentText as
|
|
85
|
-
import { useAssistantAttachments as
|
|
86
|
-
import { AssistantComposer as
|
|
87
|
-
import { isProdRuntime as
|
|
88
|
-
import { useAssistantHeartbeat as
|
|
89
|
-
import { useAssistantKeyboardShortcuts as
|
|
90
|
-
import { AssistantApiCallsConsentDialog as
|
|
91
|
-
import { AssistantChatArea as
|
|
92
|
-
import { AIAssistantPanel as
|
|
93
|
-
export {
|
|
7
|
+
import { buildAssistantSandboxEnv as T, buildPromptRequestBody as E, checkAssistantAiCredits as D, createAssistantSandbox as O, createAssistantSession as k, downloadAssistantArtifact as A, extendAssistantSandboxTTL as j, findExistingSandbox as M, getAssistantArtifacts as N, getAssistantMessages as P, getAssistantSession as F, getAssistantStreamAccess as I, modeRequiresConfirmWrites as L, releaseSupersededAssistantSandboxes as R, reportAssistantAiTokenUsage as z, selectExistingAssistantSandbox as B, selectSupersededAssistantSandboxes as V, sendAssistantPromptAsync as H, sendHeartbeat as U, stopReapedAssistantSandbox as W, waitForAssistantServiceReady as G, waitForSandboxRunning as K } from "./shared/assistant/api.js";
|
|
8
|
+
import { AssistantRuntimeManager as q } from "./shared/assistant/runtime.js";
|
|
9
|
+
import { buildProgress as J, getAssistantMedia as Y, getAssistantText as X, getRawMessageCreatedAt as Z, getToolProgress as Q, isReapedSandboxConnectionError as $, isRecoverable as ee, mapSessionToHistory as te, mergeMessagesById as ne, sanitize as re } from "./shared/assistant/progress.js";
|
|
10
|
+
import { createSandboxAssistantTransport as ie } from "./shared/assistant/createSandboxAssistantTransport.js";
|
|
11
|
+
import { useSandboxAssistantTransport as ae } from "./shared/assistant/useSandboxAssistantTransport.js";
|
|
12
|
+
import { chatTurns as oe, groupBySession as se, groupConsecutiveBySession as ce, isVoiceTurn as le, voiceMarker as ue, voiceSessionIdOf as de, voiceTurnsOnly as fe } from "./shared/assistant/voice/turnVisibility.js";
|
|
13
|
+
import { browserSpeechEngine as pe } from "./shared/assistant/speech/browserSpeechEngine.js";
|
|
14
|
+
import { HOSTED_TTS_TIER as me, HOSTED_VOICES as he, hostedLocaleFor as ge, hostedSupportsLanguage as _e } from "./shared/assistant/speech/hostedVoiceCatalogue.js";
|
|
15
|
+
import { HOSTED_TTS_MAX_CHARS as ve, SPEAKING_RATE_MAX as ye, SPEAKING_RATE_MAX_STREAMING as be, SPEAKING_RATE_MAX_SYNC as xe, SPEAKING_RATE_MIN as Se, base64ToBytes as Ce, buildRequest as we, classifyHttpFailure as Te, decodeAudioResponse as Ee, shouldDisableEngine as De, splitForVendor as Oe } from "./shared/assistant/speech/hostedTtsProtocol.js";
|
|
16
|
+
import { createHostedTtsEngine as ke } from "./shared/assistant/speech/hostedTtsSpeechEngine.js";
|
|
17
|
+
import { createRoutingSpeechEngine as Ae } from "./shared/assistant/speech/routingSpeechEngine.js";
|
|
18
|
+
import { configureSpeechEngine as je, createSpeechEngines as Me, getSpeechEngine as Ne, readSpeechEngineConfig as Pe, resetSpeechEngine as Fe } from "./shared/assistant/speech/createSpeechEngine.js";
|
|
19
|
+
import { micIsInterrupt as Ie, showsAssistantCaption as Le, showsUserCaption as Re, voiceStageState as ze, waveformIsActive as Be, waveformIsSettled as Ve } from "./shared/assistant/voice/voiceStageState.js";
|
|
20
|
+
import { ENDPOINT_GRACE_MS as He, INITIAL_SESSION as Ue, INTERRUPT_MAX_MS as We, INTERRUPT_MIN_MS as Ge, SILENCE_SUBMIT_MS as Ke, isCapturing as qe, isEcho as Je, isSubmittable as Ye, orbMode as Xe, planReplyConsumption as Ze, spokenSoFar as Qe, voiceSessionReducer as $e } from "./shared/assistant/voice/voiceSession.js";
|
|
21
|
+
import { SPEECH_LANG as et, VOICE_LIST_TIMEOUT_MS as tt, isSpeechBlocked as nt, languageDisplayName as rt, normalizeLangTag as it, primaryLanguageSubtag as at, selectVoiceForLocale as ot, speechGate as st, speechLangForLocale as ct, voiceAvailability as lt, voiceQualityRank as ut, voicesForLocale as dt } from "./shared/assistant/voice/speechVoices.js";
|
|
22
|
+
import { buildContinuedFromVoiceNote as ft, buildVoiceTranscriptMarkdown as pt, voiceTranscriptFilename as mt } from "./shared/assistant/voice/voiceTranscript.js";
|
|
23
|
+
import { DEFAULT_SPEAKABLE_LABELS as ht, MAX_SPEAKABLE_CHARS as gt, MAX_SPOKEN_TABLE_ROWS as _t, SPEECH_CHUNK_CHARS as vt, SPEECH_CHUNK_CJK_CHARS as yt, chunkForSpeech as bt, containsCjk as xt, speakableEmail as St, splitTableRow as Ct, toSpeakableText as wt } from "./shared/assistant/voice/speakableText.js";
|
|
24
|
+
import { PREVIEW_LANGUAGES as Tt, voicePreviewText as Et } from "./shared/assistant/voice/voicePreview.js";
|
|
25
|
+
import { MINI_CAPTION_BUDGET as Dt, showPreviousChunk as Ot } from "./shared/assistant/voice/miniCaptionBudget.js";
|
|
26
|
+
import { POLL_FAST_MS as kt, POLL_FAST_UNTIL_MS as At, POLL_SLOW_MS as jt, POLL_STEADY_MS as Mt, POLL_STEADY_UNTIL_MS as Nt, pollDelayMs as Pt } from "./shared/assistant/voice/assistantPollSchedule.js";
|
|
27
|
+
import { toCaptionText as Ft } from "./shared/assistant/voice/captionText.js";
|
|
28
|
+
import { ASSISTANT_LANGUAGES as It, DEFAULT_SPEECH_RATE as Lt, findAssistantLanguage as Rt, resolveAssistantLanguage as zt } from "./shared/assistant/voice/languages.js";
|
|
29
|
+
import { replyFollowsInput as Bt, resolveLanguagePair as Vt } from "./shared/assistant/voice/languagePair.js";
|
|
30
|
+
import { findPendingWrite as Ht, parseConfirmationRefusal as Ut } from "./shared/assistant/pendingWrite.js";
|
|
31
|
+
import { AssistantProductProvider as Wt, resolveModeConfig as Gt, useAssistantPageLabel as Kt, useAssistantProduct as qt, useAssistantProductOrNull as Jt, useAssistantStorageFolders as Yt } from "./shared/assistant/product.js";
|
|
32
|
+
import { AssistantI18nProvider as Xt, assistantTranslationKey as Zt, useAssistantI18nNamespace as Qt, useAssistantTr as $t } from "./shared/assistant/i18n.js";
|
|
33
|
+
import { SPOKEN_LABEL_LANGUAGES as en, speechLabelsFor as tn } from "./shared/assistant/voice/speechLabels.js";
|
|
34
|
+
import { detectScriptLocale as nn, resolveSpeechLocale as rn } from "./shared/assistant/voice/replyLanguage.js";
|
|
35
|
+
import { IDLE_PLAYBACK as an, isSpeakingMessage as on, requiresCancel as sn, speechPlaybackReducer as cn } from "./shared/assistant/voice/speechPlayback.js";
|
|
36
|
+
import { MAX_INLINE_IMAGE_BASE64_BYTES as ln, MAX_REQUEST_BODY_BYTES as un } from "./shared/assistant/gatewayLimits.js";
|
|
37
|
+
import { BOILERPLATE_PAGE_SHARE as dn, MAX_BOILERPLATE_LINE_CHARS as fn, MAX_EXTRACTED_CHARS as pn, MAX_PDF_PAGES_SCANNED as mn, MIN_PAGE_TEXT_CHARS as hn, MIN_TEXT_PAGE_SHARE as gn, columnLetterToIndex as _n, decodeXmlEntities as vn, docxXmlToText as yn, fitPdfPages as bn, formatPageRanges as xn, isMostlyImagePages as Sn, joinSheets as Cn, pageMarker as wn, parseSharedStrings as Tn, parseWorkbookSheets as En, pdfTextItemsToPage as Dn, sheetXmlToRows as On, summarisePageText as kn, truncatePagesForInline as An } from "./shared/assistant/documentText.js";
|
|
38
|
+
import { ATTACHMENT_ACCEPT as jn, AttachmentRejectedError as Mn, INLINE_IMAGE_MAX_DIM as Nn, INLINE_IMAGE_QUALITY as Pn, MAX_ATTACHMENTS as Fn, MAX_FILE_BYTES as In, MAX_INLINE_CHARS_PER_FILE as Ln, MAX_INLINE_CHARS_TOTAL as Rn, MAX_INLINE_IMAGE_BASE64_CHARS as zn, MAX_INLINE_IMAGE_PARTS as Bn, MAX_INLINE_TURN_BODY_BYTES as Vn, MAX_TURN_BODY_BYTES as Hn, PROMPT_ENVELOPE_RESERVE_BYTES as Un, TURN_BODY_HEADROOM_BYTES as Wn, buildAttachmentPromptBlock as Gn, buildPromptParts as Kn, buildPromptWithAttachments as qn, classifyAttachment as Jn, countInlineImageCandidates as Yn, countInlinedImageParts as Xn, detectDocumentFormat as Zn, estimateTurnBodyBytes as Qn, formatBytes as $n, getAttachmentSendBlocker as er, getExtension as tr, getSendableAttachments as nr, hasAttachmentWorkInFlight as rr, parseDataUrl as ir, toMessageAttachment as ar, truncateForInline as or, validateFile as sr } from "./shared/assistant/attachments.js";
|
|
39
|
+
import { useAssistantStore as cr } from "./shared/assistant/store.js";
|
|
40
|
+
import { isTurnInFlight as lr } from "./shared/assistant/turnState.js";
|
|
41
|
+
import { AssistantToolActivity as ur, parseToolActivity as dr } from "./shared/assistant/ui/AssistantToolActivity.js";
|
|
42
|
+
import { AssistantSpeechProvider as fr, useAssistantSpeech as pr } from "./shared/assistant/ui/AssistantSpeechProvider.js";
|
|
43
|
+
import { useVoiceSession as mr } from "./shared/assistant/ui/useVoiceSession.js";
|
|
44
|
+
import { copyToClipboard as hr } from "./shared/assistant/clipboard.js";
|
|
45
|
+
import { getActorId as gr, getOrganizationId as _r, getWorkspaceId as vr } from "./shared/assistant/context.js";
|
|
46
|
+
import { ATTACHMENT_SOURCES as yr, availableAttachmentSources as br, deviceHasCamera as xr } from "./shared/assistant/attachmentSources.js";
|
|
47
|
+
import { SANDBOX_READY_TTL_MS as Sr, createReadinessTracker as Cr, isRecentlyVerified as wr } from "./shared/assistant/sandboxReadiness.js";
|
|
48
|
+
import { AssistantAutoSpeakToggle as Tr } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
|
|
49
|
+
import { AssistantMarkdownImage as Er, imageHostLabel as Dr, isRemoteImageSrc as Or } from "./shared/assistant/ui/AssistantMarkdownImage.js";
|
|
50
|
+
import { AssistantMarkdownRenderer as kr, assistantUrlTransform as Ar } from "./shared/assistant/ui/AssistantMarkdownRenderer.js";
|
|
51
|
+
import { AssistantMessageAttachments as jr } from "./shared/assistant/ui/AssistantMessageAttachments.js";
|
|
52
|
+
import { AssistantPendingWriteCard as Mr } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
|
|
53
|
+
import { AssistantLanguageMenu as Nr } from "./shared/assistant/ui/AssistantLanguageMenu.js";
|
|
54
|
+
import { AssistantReplyLanguageSelector as Pr } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
|
|
55
|
+
import { AssistantSpeakButton as Fr } from "./shared/assistant/ui/AssistantSpeakButton.js";
|
|
56
|
+
import { AssistantSpokenTurnsNotice as Ir } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
|
|
57
|
+
import { AssistantAttachmentButton as Lr } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
|
|
58
|
+
import { AssistantAttachmentChips as Rr } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
|
|
59
|
+
import { AssistantLanguageSelector as zr, FOLLOW_APP_LOCALE as Br } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
|
|
60
|
+
import { ASSISTANT_MODE_META as Vr, AssistantModeSelector as Hr, nextModeIndex as Ur } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
|
|
61
|
+
import { AssistantVoiceButton as Wr } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
|
|
62
|
+
import { AUTO_VOICE as Gr, AssistantVoiceSelector as Kr } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
|
|
63
|
+
import { AssistantVoiceOrb as qr } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
|
|
64
|
+
import { AssistantVoiceSessionButton as Jr } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
|
|
65
|
+
import { CAPTION_SCROLL_ATTR as Yr, VoiceCaption as Xr } from "./shared/assistant/ui/voice/VoiceCaption.js";
|
|
66
|
+
import { VoiceConversationView as Zr } from "./shared/assistant/ui/voice/VoiceConversationView.js";
|
|
67
|
+
import { VoiceWaveform as Qr } from "./shared/assistant/ui/voice/VoiceWaveform.js";
|
|
68
|
+
import { VoiceMiniController as $r } from "./shared/assistant/ui/voice/VoiceMiniController.js";
|
|
69
|
+
import { VoiceStage as ei } from "./shared/assistant/ui/voice/VoiceStage.js";
|
|
70
|
+
import { VoiceTranscriptDrawer as ti } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
|
|
71
|
+
import { downloadFile as ni, exportConversation as ri } from "./shared/assistant/exportConversation.js";
|
|
72
|
+
import { AssistantMoreMenu as ii } from "./shared/assistant/ui/AssistantMoreMenu.js";
|
|
73
|
+
import { AssistantHeader as ai } from "./shared/assistant/ui/AssistantHeader.js";
|
|
74
|
+
import { AssistantConversationList as oi } from "./shared/assistant/ui/AssistantConversationList.js";
|
|
75
|
+
import { AssistantEmptyState as si } from "./shared/assistant/ui/AssistantEmptyState.js";
|
|
76
|
+
import { AssistantMessageItem as ci } from "./shared/assistant/ui/AssistantMessageItem.js";
|
|
77
|
+
import { AssistantMessageList as li } from "./shared/assistant/ui/AssistantMessageList.js";
|
|
78
|
+
import { AssistantVoiceSession as ui } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
|
|
79
|
+
import { useAssistantApiAccess as di } from "./shared/assistant/useAssistantApiAccess.js";
|
|
80
|
+
import { useConversationTurns as fi } from "./shared/assistant/useConversationTurns.js";
|
|
81
|
+
import { isMultimodalBodyRejection as pi, isRecoverableAssistantError as mi } from "./shared/assistant/transportErrors.js";
|
|
82
|
+
import { aiCreditsUpdatedEventName as hi, dispatchAssistantQuotaExhausted as gi, notifyAiCreditsUpdated as _i } from "./shared/assistant/aiCredits.js";
|
|
83
|
+
import { useWorkspaceWriteAccess as vi } from "./shared/assistant/useWorkspaceWriteAccess.js";
|
|
84
|
+
import { extractDocumentText as yi } from "./shared/assistant/documentExtract.js";
|
|
85
|
+
import { useAssistantAttachments as bi } from "./shared/assistant/useAssistantAttachments.js";
|
|
86
|
+
import { AssistantComposer as xi } from "./shared/assistant/ui/composer/AssistantComposer.js";
|
|
87
|
+
import { isProdRuntime as Si } from "./shared/assistant/env.js";
|
|
88
|
+
import { useAssistantHeartbeat as Ci } from "./shared/assistant/useAssistantHeartbeat.js";
|
|
89
|
+
import { useAssistantKeyboardShortcuts as wi } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
|
|
90
|
+
import { AssistantApiCallsConsentDialog as Ti } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
|
|
91
|
+
import { AssistantChatArea as Ei } from "./shared/assistant/ui/AssistantChatArea.js";
|
|
92
|
+
import { AIAssistantPanel as Di } from "./shared/assistant/ui/AIAssistantPanel.js";
|
|
93
|
+
export { Di as AIAssistantPanel, h as ASSISTANT_API_AUTH_STRATEGY, It as ASSISTANT_LANGUAGES, Vr as ASSISTANT_MODE_META, jn as ATTACHMENT_ACCEPT, yr as ATTACHMENT_SOURCES, Gr as AUTO_VOICE, Ti as AssistantApiCallsConsentDialog, Lr as AssistantAttachmentButton, Rr as AssistantAttachmentChips, Tr as AssistantAutoSpeakToggle, Ei as AssistantChatArea, xi as AssistantComposer, oi as AssistantConversationList, si as AssistantEmptyState, ai as AssistantHeader, Xt as AssistantI18nProvider, Nr as AssistantLanguageMenu, zr as AssistantLanguageSelector, Er as AssistantMarkdownImage, kr as AssistantMarkdownRenderer, jr as AssistantMessageAttachments, ci as AssistantMessageItem, li as AssistantMessageList, Hr as AssistantModeSelector, ii as AssistantMoreMenu, Mr as AssistantPendingWriteCard, Wt as AssistantProductProvider, Pr as AssistantReplyLanguageSelector, q as AssistantRuntimeManager, Fr as AssistantSpeakButton, fr as AssistantSpeechProvider, Ir as AssistantSpokenTurnsNotice, ur as AssistantToolActivity, Wr as AssistantVoiceButton, qr as AssistantVoiceOrb, Kr as AssistantVoiceSelector, ui as AssistantVoiceSession, Jr as AssistantVoiceSessionButton, Mn as AttachmentRejectedError, dn as BOILERPLATE_PAGE_SHARE, Yr as CAPTION_SCROLL_ATTR, o as CHECK_AI_CREDITS, s as CREATE_SANDBOX, ht as DEFAULT_SPEAKABLE_LABELS, Lt as DEFAULT_SPEECH_RATE, He as ENDPOINT_GRACE_MS, c as EXTEND_SANDBOX_TTL, Br as FOLLOW_APP_LOCALE, l as GET_ACTIVE_SANDBOXES, u as GET_SANDBOX, ve as HOSTED_TTS_MAX_CHARS, me as HOSTED_TTS_TIER, he as HOSTED_VOICES, an as IDLE_PLAYBACK, Ue as INITIAL_SESSION, Nn as INLINE_IMAGE_MAX_DIM, Pn as INLINE_IMAGE_QUALITY, We as INTERRUPT_MAX_MS, Ge as INTERRUPT_MIN_MS, Fn as MAX_ATTACHMENTS, fn as MAX_BOILERPLATE_LINE_CHARS, pn as MAX_EXTRACTED_CHARS, In as MAX_FILE_BYTES, Ln as MAX_INLINE_CHARS_PER_FILE, Rn as MAX_INLINE_CHARS_TOTAL, ln as MAX_INLINE_IMAGE_BASE64_BYTES, zn as MAX_INLINE_IMAGE_BASE64_CHARS, Bn as MAX_INLINE_IMAGE_PARTS, Vn as MAX_INLINE_TURN_BODY_BYTES, mn as MAX_PDF_PAGES_SCANNED, un as MAX_REQUEST_BODY_BYTES, gt as MAX_SPEAKABLE_CHARS, _t as MAX_SPOKEN_TABLE_ROWS, Hn as MAX_TURN_BODY_BYTES, Dt as MINI_CAPTION_BUDGET, hn as MIN_PAGE_TEXT_CHARS, gn as MIN_TEXT_PAGE_SHARE, kt as POLL_FAST_MS, At as POLL_FAST_UNTIL_MS, jt as POLL_SLOW_MS, Mt as POLL_STEADY_MS, Nt as POLL_STEADY_UNTIL_MS, Tt as PREVIEW_LANGUAGES, Un as PROMPT_ENVELOPE_RESERVE_BYTES, d as PROXY_SANDBOX_REQUEST, f as REPORT_AI_TOKEN_USAGE, Sr as SANDBOX_READY_TTL_MS, Ke as SILENCE_SUBMIT_MS, ye as SPEAKING_RATE_MAX, be as SPEAKING_RATE_MAX_STREAMING, xe as SPEAKING_RATE_MAX_SYNC, Se as SPEAKING_RATE_MIN, vt as SPEECH_CHUNK_CHARS, yt as SPEECH_CHUNK_CJK_CHARS, et as SPEECH_LANG, en as SPOKEN_LABEL_LANGUAGES, p as STOP_ASSISTANT_SANDBOX, Wn as TURN_BODY_HEADROOM_BYTES, tt as VOICE_LIST_TIMEOUT_MS, Xr as VoiceCaption, Zr as VoiceConversationView, $r as VoiceMiniController, ei as VoiceStage, ti as VoiceTranscriptDrawer, Qr as VoiceWaveform, m as WAIT_FOR_SANDBOX_RUNNING, hi as aiCreditsUpdatedEventName, Zt as assistantTranslationKey, Ar as assistantUrlTransform, br as availableAttachmentSources, Ce as base64ToBytes, pe as browserSpeechEngine, T as buildAssistantSandboxEnv, Gn as buildAttachmentPromptBlock, ft as buildContinuedFromVoiceNote, J as buildProgress, Kn as buildPromptParts, E as buildPromptRequestBody, qn as buildPromptWithAttachments, we as buildRequest, i as buildSandboxContextInput, pt as buildVoiceTranscriptMarkdown, oe as chatTurns, D as checkAssistantAiCredits, bt as chunkForSpeech, Jn as classifyAttachment, Te as classifyHttpFailure, t as classifyQuotaError, _n as columnLetterToIndex, je as configureSpeechEngine, xt as containsCjk, hr as copyToClipboard, Yn as countInlineImageCandidates, Xn as countInlinedImageParts, O as createAssistantSandbox, k as createAssistantSession, ke as createHostedTtsEngine, Cr as createReadinessTracker, Ae as createRoutingSpeechEngine, ie as createSandboxAssistantTransport, Me as createSpeechEngines, Ee as decodeAudioResponse, vn as decodeXmlEntities, Zn as detectDocumentFormat, nn as detectScriptLocale, xr as deviceHasCamera, gi as dispatchAssistantQuotaExhausted, yn as docxXmlToText, A as downloadAssistantArtifact, ni as downloadFile, Qn as estimateTurnBodyBytes, a as executeSandboxGraphQL, ri as exportConversation, j as extendAssistantSandboxTTL, yi as extractDocumentText, Rt as findAssistantLanguage, M as findExistingSandbox, Ht as findPendingWrite, bn as fitPdfPages, $n as formatBytes, xn as formatPageRanges, gr as getActorId, N as getAssistantArtifacts, Y as getAssistantMedia, P as getAssistantMessages, F as getAssistantSession, I as getAssistantStreamAccess, X as getAssistantText, er as getAttachmentSendBlocker, x as getCapability, tr as getExtension, g as getImageForMode, _ as getImageTagForMode, _r as getOrganizationId, Z as getRawMessageCreatedAt, v as getResourcesForMode, y as getSandboxImageRegistry, nr as getSendableAttachments, Ne as getSpeechEngine, Q as getToolProgress, vr as getWorkspaceId, se as groupBySession, ce as groupConsecutiveBySession, rr as hasAttachmentWorkInFlight, ge as hostedLocaleFor, _e as hostedSupportsLanguage, Dr as imageHostLabel, qe as isCapturing, Je as isEcho, Sn as isMostlyImagePages, pi as isMultimodalBodyRejection, Si as isProdRuntime, n as isQuotaExhaustedError, $ as isReapedSandboxConnectionError, wr as isRecentlyVerified, ee as isRecoverable, mi as isRecoverableAssistantError, Or as isRemoteImageSrc, on as isSpeakingMessage, nt as isSpeechBlocked, Ye as isSubmittable, lr as isTurnInFlight, S as isUnknownFieldError, le as isVoiceTurn, Cn as joinSheets, rt as languageDisplayName, te as mapSessionToHistory, C as markSupported, w as markUnsupported, ne as mergeMessagesById, Ie as micIsInterrupt, L as modeRequiresConfirmWrites, Ur as nextModeIndex, it as normalizeLangTag, _i as notifyAiCreditsUpdated, Xe as orbMode, wn as pageMarker, Ut as parseConfirmationRefusal, ir as parseDataUrl, Tn as parseSharedStrings, dr as parseToolActivity, En as parseWorkbookSheets, Dn as pdfTextItemsToPage, Ze as planReplyConsumption, Pt as pollDelayMs, at as primaryLanguageSubtag, r as quotaExhaustedEventName, Pe as readSpeechEngineConfig, R as releaseSupersededAssistantSandboxes, Bt as replyFollowsInput, z as reportAssistantAiTokenUsage, sn as requiresCancel, Fe as resetSpeechEngine, zt as resolveAssistantLanguage, Vt as resolveLanguagePair, Gt as resolveModeConfig, b as resolveSandboxAssistantMode, rn as resolveSpeechLocale, re as sanitize, B as selectExistingAssistantSandbox, V as selectSupersededAssistantSandboxes, ot as selectVoiceForLocale, H as sendAssistantPromptAsync, U as sendHeartbeat, On as sheetXmlToRows, De as shouldDisableEngine, Ot as showPreviousChunk, Le as showsAssistantCaption, Re as showsUserCaption, St as speakableEmail, st as speechGate, tn as speechLabelsFor, ct as speechLangForLocale, cn as speechPlaybackReducer, Oe as splitForVendor, Ct as splitTableRow, Qe as spokenSoFar, W as stopReapedAssistantSandbox, kn as summarisePageText, Ft as toCaptionText, ar as toMessageAttachment, wt as toSpeakableText, or as truncateForInline, An as truncatePagesForInline, di as useAssistantApiAccess, bi as useAssistantAttachments, Ci as useAssistantHeartbeat, Qt as useAssistantI18nNamespace, wi as useAssistantKeyboardShortcuts, Kt as useAssistantPageLabel, qt as useAssistantProduct, Jt as useAssistantProductOrNull, pr as useAssistantSpeech, Yt as useAssistantStorageFolders, cr as useAssistantStore, $t as useAssistantTr, fi as useConversationTurns, ae as useSandboxAssistantTransport, e as useVoiceInput, mr as useVoiceSession, vi as useWorkspaceWriteAccess, sr as validateFile, lt as voiceAvailability, ue as voiceMarker, Et as voicePreviewText, ut as voiceQualityRank, de as voiceSessionIdOf, $e as voiceSessionReducer, ze as voiceStageState, mt as voiceTranscriptFilename, fe as voiceTurnsOnly, dt as voicesForLocale, G as waitForAssistantServiceReady, K as waitForSandboxRunning, Be as waveformIsActive, Ve as waveformIsSettled };
|