@burdenoff/fe-libs 2026.912.6 → 2026.913.2
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/index.d.ts +4 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/preview/useAssistantPreviewBridge.js +8 -8
- package/dist/shared/assistant/ui/AssistantAvatar.d.ts +26 -0
- package/dist/shared/assistant/ui/AssistantAvatar.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantAvatar.js +12 -0
- package/dist/shared/assistant/ui/AssistantChatArea.js +298 -298
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.js +19 -21
- package/dist/shared/assistant/ui/AssistantToolActivity.js +1 -1
- package/dist/shared/assistant/ui/composer/AssistantAttachmentChips.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantAttachmentChips.js +2 -2
- package/dist/shared/assistant/ui/composer/AssistantComposer.js +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +112 -102
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts +10 -0
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceMiniController.js +29 -28
- package/dist/shared/assistant/ui/voice/VoiceStage.d.ts +10 -0
- package/dist/shared/assistant/ui/voice/VoiceStage.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceStage.js +35 -34
- package/dist/shared/assistant/ui/voice/VoiceStatusText.d.ts +51 -0
- package/dist/shared/assistant/ui/voice/VoiceStatusText.d.ts.map +1 -0
- package/dist/shared/assistant/ui/voice/VoiceStatusText.js +42 -0
- package/dist/shared/assistant/ui/voice/VoiceWaveform.js +1 -1
- package/dist/shared/assistant/voice/rotationClock.d.ts +31 -0
- package/dist/shared/assistant/voice/rotationClock.d.ts.map +1 -0
- package/dist/shared/assistant/voice/rotationClock.js +27 -0
- package/dist/shared/assistant/voice/voiceStatus.d.ts +81 -0
- package/dist/shared/assistant/voice/voiceStatus.d.ts.map +1 -0
- package/dist/shared/assistant/voice/voiceStatus.js +33 -0
- package/dist/shared-assistant.js +88 -84
- package/package.json +1 -1
|
@@ -8,64 +8,64 @@ import { abortAssistantTurn as a, approvePendingWrite as o, createAssistantSandb
|
|
|
8
8
|
import { getAssistantMedia as h, sanitize as re } from "../progress.js";
|
|
9
9
|
import { streamBudgetMs as ie, withIncompleteTurnNotice as ae } from "../streamBudget.js";
|
|
10
10
|
import { isVoiceTurn as g, voiceMarker as _, voiceSessionIdOf as v } from "../voice/turnVisibility.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { parseToolActivity as
|
|
22
|
-
import { useVoiceSession as
|
|
23
|
-
import { getOrganizationId as
|
|
24
|
-
import { createReadinessTracker as
|
|
25
|
-
import { AssistantSpokenTurnsNotice as
|
|
26
|
-
import { VoiceTranscriptDrawer as
|
|
27
|
-
import { downloadFile as
|
|
28
|
-
import { AssistantEmptyState as
|
|
29
|
-
import { AssistantMessageList as
|
|
30
|
-
import { AssistantVoiceSession as
|
|
31
|
-
import { useAssistantApiAccess as
|
|
32
|
-
import { useConversationTurns as
|
|
33
|
-
import { isMultimodalBodyRejection as
|
|
34
|
-
import { dispatchAssistantQuotaExhausted as
|
|
35
|
-
import { useAssistantAttachments as
|
|
36
|
-
import { AssistantComposer as
|
|
37
|
-
import { isProdRuntime as
|
|
38
|
-
import { AssistantApiCallsConsentDialog as
|
|
39
|
-
import { useCallback as
|
|
40
|
-
import { jsx as
|
|
11
|
+
import { STAGE_COPY as y, isStageCopy as oe, stageText as b, statusStageCopy as se, thinkingPhrase as ce } from "../stageCopy.js";
|
|
12
|
+
import { buildContinuedFromVoiceNote as x, buildVoiceTranscriptMarkdown as le, voiceTranscriptFilename as ue } from "../voice/voiceTranscript.js";
|
|
13
|
+
import { pollDelayMs as de } from "../voice/assistantPollSchedule.js";
|
|
14
|
+
import { toCaptionText as fe } from "../voice/captionText.js";
|
|
15
|
+
import { resolveAssistantLanguage as pe } from "../voice/languages.js";
|
|
16
|
+
import { resolveLanguagePair as me } from "../voice/languagePair.js";
|
|
17
|
+
import { findPendingWrite as he } from "../pendingWrite.js";
|
|
18
|
+
import { buildPromptParts as ge, buildPromptWithAttachments as _e, countInlineImageCandidates as ve, countInlinedImageParts as ye, getSendableAttachments as be, toMessageAttachment as xe } from "../attachments.js";
|
|
19
|
+
import { useAssistantStore as S } from "../store.js";
|
|
20
|
+
import { isTurnInFlight as Se, planAbandonedTurn as Ce, planTurnAbort as we } from "../turnState.js";
|
|
21
|
+
import { parseToolActivity as Te } from "./AssistantToolActivity.js";
|
|
22
|
+
import { useVoiceSession as Ee } from "./useVoiceSession.js";
|
|
23
|
+
import { getOrganizationId as De, getWorkspaceId as Oe } from "../context.js";
|
|
24
|
+
import { createReadinessTracker as ke } from "../sandboxReadiness.js";
|
|
25
|
+
import { AssistantSpokenTurnsNotice as Ae } from "./AssistantSpokenTurnsNotice.js";
|
|
26
|
+
import { VoiceTranscriptDrawer as je } from "./voice/VoiceTranscriptDrawer.js";
|
|
27
|
+
import { downloadFile as Me } from "../exportConversation.js";
|
|
28
|
+
import { AssistantEmptyState as Ne } from "./AssistantEmptyState.js";
|
|
29
|
+
import { AssistantMessageList as Pe } from "./AssistantMessageList.js";
|
|
30
|
+
import { AssistantVoiceSession as Fe } from "./voice/AssistantVoiceSession.js";
|
|
31
|
+
import { useAssistantApiAccess as Ie } from "../useAssistantApiAccess.js";
|
|
32
|
+
import { useConversationTurns as Le } from "../useConversationTurns.js";
|
|
33
|
+
import { isMultimodalBodyRejection as Re, isRecoverableAssistantError as ze } from "../transportErrors.js";
|
|
34
|
+
import { dispatchAssistantQuotaExhausted as Be, notifyAiCreditsUpdated as Ve } from "../aiCredits.js";
|
|
35
|
+
import { useAssistantAttachments as He } from "../useAssistantAttachments.js";
|
|
36
|
+
import { AssistantComposer as Ue } from "./composer/AssistantComposer.js";
|
|
37
|
+
import { isProdRuntime as We } from "../env.js";
|
|
38
|
+
import { AssistantApiCallsConsentDialog as Ge } from "./AssistantApiCallsConsentDialog.js";
|
|
39
|
+
import { useCallback as C, useEffect as w, useMemo as T, useRef as E, useState as Ke } from "react";
|
|
40
|
+
import { jsx as D, jsxs as qe } from "react/jsx-runtime";
|
|
41
41
|
//#region src/shared/assistant/ui/AssistantChatArea.tsx
|
|
42
|
-
var
|
|
43
|
-
function
|
|
42
|
+
var Je = 600, Ye = 2e4;
|
|
43
|
+
function Xe() {
|
|
44
44
|
return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
45
45
|
}
|
|
46
|
-
function
|
|
46
|
+
function Ze(e) {
|
|
47
47
|
return e.info?.time?.created ?? 0;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
49
|
+
function O(e) {
|
|
50
50
|
return (e ?? []).filter((e) => e.type === "text" && typeof e.text == "string").map((e) => e.text?.trim() ?? "").filter(Boolean).join("\n");
|
|
51
51
|
}
|
|
52
|
-
function
|
|
52
|
+
function k(e) {
|
|
53
53
|
return (e ?? []).filter((e) => e.type === "tool" && e.tool).map((e) => {
|
|
54
54
|
let t = e.state?.status ?? "running", n = e.tool ?? "tool";
|
|
55
55
|
return t === "completed" ? `Completed: ${n}` : t === "failed" ? `Failed: ${n}` : `Running: ${n}`;
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
|
-
function
|
|
59
|
-
let n = e.filter((e) => e.info?.role === "assistant" &&
|
|
58
|
+
function Qe(e, t) {
|
|
59
|
+
let n = e.filter((e) => e.info?.role === "assistant" && Ze(e) > t).sort((e, t) => Ze(e) - Ze(t));
|
|
60
60
|
if (n.length === 0) return {
|
|
61
|
-
content:
|
|
61
|
+
content: y.thinking.fallback,
|
|
62
62
|
done: !1
|
|
63
63
|
};
|
|
64
|
-
let r = n[n.length - 1], i =
|
|
64
|
+
let r = n[n.length - 1], i = O(r.parts), a = h(r.parts), o = k(r.parts), s = he(r.parts), c = [
|
|
65
65
|
i,
|
|
66
66
|
...a,
|
|
67
67
|
...o
|
|
68
|
-
].filter(Boolean).join("\n\n") ||
|
|
68
|
+
].filter(Boolean).join("\n\n") || y.thinking.fallback, l = r.info?.providerID, u = r.info?.modelID;
|
|
69
69
|
return {
|
|
70
70
|
content: c,
|
|
71
71
|
done: !!r.info?.time?.completed && (!!i || a.length > 0 || o.length > 0),
|
|
@@ -75,118 +75,118 @@ function Ze(e, t) {
|
|
|
75
75
|
...s ? { pendingWrite: s } : {}
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
|
-
var
|
|
79
|
-
let
|
|
80
|
-
nt,
|
|
78
|
+
var A = ({ visible: h = !0, writeAccess: he = "unknown" }) => {
|
|
79
|
+
let O = r(), { product: k, modes: A, gatherPageContext: $e, buildPrompt: et, reportTokenUsage: tt } = n(), { getAccessToken: j, getWorkspaceToken: M, userId: N } = t(), { locale: nt } = e(), rt = S((e) => e.assistantLanguage), it = S((e) => e.replyLanguage), at = T(() => me(rt, it, nt), [
|
|
81
80
|
rt,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
T(() => {
|
|
85
|
-
|
|
81
|
+
it,
|
|
82
|
+
nt
|
|
83
|
+
]), ot = at.reply.english, st = at.replyIsExplicit, ct = at.reply.code, { conversations: lt, activeConversationId: P, mode: F, processingByConversationId: ut, setMode: I, setConversationMode: dt, setActiveConversation: ft, createConversation: L, addMessage: R, updateMessage: z, patchMessage: B, mergeMessageMetadata: pt, setConversationProcessing: V, clearConversationProcessing: mt, setBackendSessionId: ht, clearBackendSessionId: gt, setSandbox: H, clearSandbox: _t, acknowledgeApiCalls: vt } = S(), yt = lt.find((e) => e.id === P), U = Le(yt), bt = U.all, xt = P ? ut[P] : void 0, St = Se(xt?.status), Ct = St ? xt?.messageId ?? null : null, wt = xt?.status === "error" ? xt.messageId : null, { canUseApiCalls: Tt, loading: Et } = Ie(De()), Dt = T(() => A.filter((e) => !e.requiresAdmin || Tt), [A, Tt]), [Ot, kt] = Ke(null), [At, jt] = Ke(!1), Mt = E({}), Nt = E(ke()), Pt = E(/* @__PURE__ */ new Set()), Ft = T(() => A.find((e) => e.id === F), [A, F]);
|
|
84
|
+
w(() => {
|
|
85
|
+
Et || (!Ft || Ft.requiresAdmin && !Tt) && F !== "assistant" && I("assistant");
|
|
86
86
|
}, [
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
F,
|
|
88
|
+
Ft,
|
|
89
89
|
Tt,
|
|
90
90
|
Et,
|
|
91
|
-
|
|
91
|
+
I
|
|
92
92
|
]);
|
|
93
|
-
let
|
|
94
|
-
V(e, n, t, null), r ? z(e, t, r) : z(e, t,
|
|
93
|
+
let W = C((e, t, n, r) => {
|
|
94
|
+
V(e, n, t, null), r ? z(e, t, r) : z(e, t, se(O, n));
|
|
95
95
|
}, [
|
|
96
96
|
V,
|
|
97
97
|
z,
|
|
98
|
-
|
|
99
|
-
]),
|
|
100
|
-
let a =
|
|
101
|
-
if (
|
|
98
|
+
O
|
|
99
|
+
]), It = C(async (e, t, n, r, i) => {
|
|
100
|
+
let a = S.getState().sandboxesByMode[n]?.sandboxId ?? null, o = async (e) => {
|
|
101
|
+
if (Nt.current.isFresh(e)) return !0;
|
|
102
102
|
try {
|
|
103
|
-
return await m(e, r, i, 3e5), await p(e, r, i, 9e4),
|
|
103
|
+
return await m(e, r, i, 3e5), await p(e, r, i, 9e4), Nt.current.markVerified(e), !0;
|
|
104
104
|
} catch {
|
|
105
|
-
return
|
|
105
|
+
return Nt.current.invalidate(e), !1;
|
|
106
106
|
}
|
|
107
107
|
};
|
|
108
|
-
if (a && (H(n, a, "provisioning"),
|
|
109
|
-
|
|
110
|
-
let s = await u(r,
|
|
111
|
-
s && (H(n, s, "provisioning"),
|
|
108
|
+
if (a && (H(n, a, "provisioning"), W(e, t, "provisioning", b(O, y.reusingEnvironment)), await o(a) || (H(n, null, "provisioning"), a = null)), !a) {
|
|
109
|
+
W(e, t, "provisioning", b(O, y.lookingForEnvironment));
|
|
110
|
+
let s = await u(r, k, n, We(), i);
|
|
111
|
+
s && (H(n, s, "provisioning"), W(e, t, "provisioning", b(O, y.reusingEnvironment)), await o(s) ? a = s : H(n, null, "provisioning"));
|
|
112
112
|
}
|
|
113
113
|
if (!a) {
|
|
114
|
-
if (n === "api-calls" && !
|
|
115
|
-
|
|
114
|
+
if (n === "api-calls" && !j()) throw Error("API Calls mode requires an authenticated session. Please sign in again.");
|
|
115
|
+
W(e, t, "provisioning", b(O, y.startingEnvironment)), H(n, null, "provisioning"), await f(r, k, n, We(), i), a = await s(k, n, r, We(), Je, i), H(n, a, "provisioning"), await m(a, r, i, 3e5), await p(a, r, i, 9e4);
|
|
116
116
|
}
|
|
117
117
|
H(n, a, "running");
|
|
118
|
-
let l =
|
|
118
|
+
let l = S.getState().conversations.find((t) => t.id === e)?.backendSessionId ?? null;
|
|
119
119
|
if (l) try {
|
|
120
120
|
let e = await d(a, r, l, i);
|
|
121
121
|
if (e.mode !== n) throw Error(`Session mode mismatch: expected ${n}, received ${e.mode}`);
|
|
122
122
|
} catch {
|
|
123
123
|
gt(e), l = null;
|
|
124
124
|
}
|
|
125
|
-
return l || (
|
|
125
|
+
return l || (W(e, t, "connecting", b(O, y.preparingSession)), l = (await c(a, r, n, i)).sessionId, ht(e, l)), {
|
|
126
126
|
sandboxId: a,
|
|
127
127
|
sessionId: l
|
|
128
128
|
};
|
|
129
129
|
}, [
|
|
130
130
|
gt,
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
j,
|
|
132
|
+
k,
|
|
133
133
|
ht,
|
|
134
134
|
H,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
]), [
|
|
138
|
-
let e =
|
|
135
|
+
O,
|
|
136
|
+
W
|
|
137
|
+
]), [Lt, Rt] = Ke(null), G = E(/* @__PURE__ */ new Set()), zt = E(null), Bt = C(() => {
|
|
138
|
+
let e = S.getState(), t = e.activeConversationId;
|
|
139
139
|
if (!t) return;
|
|
140
|
-
let n = e.processingByConversationId[t], r =
|
|
141
|
-
if (!
|
|
140
|
+
let n = e.processingByConversationId[t], r = Se(n?.status) ? n?.messageId ?? null : null;
|
|
141
|
+
if (!we({
|
|
142
142
|
interruptedTurnId: r,
|
|
143
143
|
activeTurnId: r,
|
|
144
|
-
alreadyRequested: r ?
|
|
144
|
+
alreadyRequested: r ? G.current.has(r) : !1
|
|
145
145
|
}).send || !r) return;
|
|
146
|
-
|
|
147
|
-
let i = e.sandboxesByMode[e.mode]?.sandboxId, o =
|
|
146
|
+
G.current.add(r);
|
|
147
|
+
let i = e.sandboxesByMode[e.mode]?.sandboxId, o = Oe(), s = e.conversations.find((e) => e.id === t)?.backendSessionId;
|
|
148
148
|
!i || !o || !s || a(i, o, s, {
|
|
149
|
-
accessToken:
|
|
150
|
-
workspaceToken:
|
|
151
|
-
userId:
|
|
152
|
-
organizationId:
|
|
149
|
+
accessToken: j(),
|
|
150
|
+
workspaceToken: M(),
|
|
151
|
+
userId: N,
|
|
152
|
+
organizationId: De()
|
|
153
153
|
});
|
|
154
154
|
}, [
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
]),
|
|
159
|
-
let t =
|
|
155
|
+
N,
|
|
156
|
+
j,
|
|
157
|
+
M
|
|
158
|
+
]), Vt = C(async (e) => {
|
|
159
|
+
let t = S.getState(), n = t.sandboxesByMode[t.mode]?.sandboxId, r = Oe(), i = t.activeConversationId;
|
|
160
160
|
if (!(!n || !r || !i)) {
|
|
161
|
-
|
|
161
|
+
Rt(e);
|
|
162
162
|
try {
|
|
163
163
|
await o(n, r, e, {
|
|
164
|
-
accessToken:
|
|
165
|
-
workspaceToken:
|
|
166
|
-
userId:
|
|
167
|
-
organizationId:
|
|
164
|
+
accessToken: j(),
|
|
165
|
+
workspaceToken: M(),
|
|
166
|
+
userId: N,
|
|
167
|
+
organizationId: De()
|
|
168
168
|
});
|
|
169
169
|
} catch (e) {
|
|
170
|
-
|
|
171
|
-
id:
|
|
170
|
+
Rt(null), R(i, {
|
|
171
|
+
id: Xe(),
|
|
172
172
|
role: "system",
|
|
173
173
|
content: e instanceof Error ? e.message : "The change could not be approved.",
|
|
174
174
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
175
175
|
});
|
|
176
176
|
return;
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
Rt(null), q.current(O("pendingWrite.approvedPrompt", "I approved that change — go ahead."));
|
|
179
179
|
}
|
|
180
180
|
}, [
|
|
181
|
-
|
|
181
|
+
N,
|
|
182
182
|
R,
|
|
183
|
-
|
|
184
|
-
]),
|
|
185
|
-
let r = n.voiceSessionId !== void 0, a =
|
|
183
|
+
O
|
|
184
|
+
]), K = C(async (e, t = [], n = {}) => {
|
|
185
|
+
let r = n.voiceSessionId !== void 0, a = S.getState(), o = a.activeConversationId ?? P;
|
|
186
186
|
if (o) {
|
|
187
|
-
if (
|
|
187
|
+
if (Se(a.processingByConversationId[o]?.status)) {
|
|
188
188
|
let r = a.processingByConversationId[o]?.messageId ?? null;
|
|
189
|
-
r &&
|
|
189
|
+
r && G.current.has(r) && (zt.current = {
|
|
190
190
|
conversationId: o,
|
|
191
191
|
content: e,
|
|
192
192
|
attachments: t,
|
|
@@ -194,39 +194,39 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
|
|
|
194
194
|
});
|
|
195
195
|
return;
|
|
196
196
|
}
|
|
197
|
-
if (
|
|
197
|
+
if (Pt.current.has(o)) return;
|
|
198
198
|
}
|
|
199
|
-
let s = a.mode, c =
|
|
199
|
+
let s = a.mode, c = P, u = c ? S.getState().conversations.find((e) => e.id === c) : void 0;
|
|
200
200
|
if (c ? u && u.mode !== s && (u.messages.length > 0 || u.backendSessionId) ? c = L(void 0, s) : u && u.mode !== s && dt(c, s) : c = L(void 0, s), !c) return;
|
|
201
201
|
Mt.current[c] = t;
|
|
202
|
-
let d =
|
|
203
|
-
accessToken:
|
|
204
|
-
workspaceToken:
|
|
205
|
-
userId:
|
|
206
|
-
organizationId:
|
|
202
|
+
let d = Oe(), f = {
|
|
203
|
+
accessToken: j(),
|
|
204
|
+
workspaceToken: M(),
|
|
205
|
+
userId: N,
|
|
206
|
+
organizationId: De()
|
|
207
207
|
}, p = {
|
|
208
|
-
id:
|
|
208
|
+
id: Xe(),
|
|
209
209
|
role: "user",
|
|
210
210
|
content: e,
|
|
211
211
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
212
212
|
metadata: {
|
|
213
|
-
...t.length ? { attachments: t.map(
|
|
213
|
+
...t.length ? { attachments: t.map(xe) } : {},
|
|
214
214
|
..._(n.voiceSessionId)
|
|
215
215
|
}
|
|
216
216
|
};
|
|
217
217
|
R(c, p);
|
|
218
|
-
let m =
|
|
218
|
+
let m = Xe();
|
|
219
219
|
R(c, {
|
|
220
220
|
id: m,
|
|
221
221
|
role: "assistant",
|
|
222
222
|
content: "",
|
|
223
223
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
224
224
|
metadata: {
|
|
225
|
-
lang:
|
|
225
|
+
lang: ct,
|
|
226
226
|
..._(n.voiceSessionId)
|
|
227
227
|
}
|
|
228
228
|
}), V(c, "provisioning", m, null);
|
|
229
|
-
let h = (e, t, r, i, a =
|
|
229
|
+
let h = (e, t, r, i, a = ct) => {
|
|
230
230
|
B(c, m, { content: re(e) }), pt(c, m, {
|
|
231
231
|
lang: a,
|
|
232
232
|
...t?.length ? { artifacts: t } : {},
|
|
@@ -238,75 +238,75 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
|
|
|
238
238
|
}, g = async (n = 1) => {
|
|
239
239
|
let i = !1;
|
|
240
240
|
try {
|
|
241
|
-
let { sandboxId: n, sessionId: a } = await
|
|
242
|
-
|
|
243
|
-
let u =
|
|
244
|
-
i =
|
|
241
|
+
let { sandboxId: n, sessionId: a } = await It(c, m, s, d, f), o = (await te(n, d, a, f, { limit: 50 }).catch(() => [])).reduce((e, t) => Math.max(e, Ze(t)), 0);
|
|
242
|
+
W(c, m, "streaming", b(O, y.thinking));
|
|
243
|
+
let u = _e(e, t), p = et?.(s, u, ot, st, r) ?? u, g = ge(p, t), _ = ye(g), v = _ > 0, se = $e?.();
|
|
244
|
+
i = ve(t) > _;
|
|
245
245
|
try {
|
|
246
|
-
await ne(n, d, a, p, s,
|
|
246
|
+
await ne(n, d, a, p, s, se, f, g?.length ? { parts: g } : void 0);
|
|
247
247
|
} catch (e) {
|
|
248
|
-
if (!g || !
|
|
249
|
-
await ne(n, d, a, p, s,
|
|
248
|
+
if (!g || !Re(e)) throw e;
|
|
249
|
+
await ne(n, d, a, p, s, se, f, void 0), i ||= v;
|
|
250
250
|
}
|
|
251
|
-
let
|
|
251
|
+
let x = Qe([], o), le = Date.now() + ie(s), ue = Date.now(), fe = Date.now(), pe = () => Ce({
|
|
252
252
|
turnId: m,
|
|
253
|
-
abortRequested:
|
|
254
|
-
activeTurnId:
|
|
255
|
-
}),
|
|
256
|
-
let e =
|
|
257
|
-
|
|
253
|
+
abortRequested: G.current.has(m),
|
|
254
|
+
activeTurnId: S.getState().processingByConversationId[c]?.messageId ?? null
|
|
255
|
+
}), me = () => {
|
|
256
|
+
let e = S.getState().conversations.find((e) => e.id === c)?.messages.find((e) => e.id === m)?.content;
|
|
257
|
+
oe(O, e) && z(c, m, b(O, y.stopped));
|
|
258
258
|
};
|
|
259
|
-
for (; Date.now() <
|
|
260
|
-
let e =
|
|
259
|
+
for (; Date.now() < le;) {
|
|
260
|
+
let e = pe();
|
|
261
261
|
if (e.abandon) {
|
|
262
|
-
|
|
262
|
+
me(), e.clearProcessing && mt(c);
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
265
|
-
if (
|
|
265
|
+
if (x = Qe(await te(n, d, a, f, {
|
|
266
266
|
limit: 50,
|
|
267
267
|
sinceMs: o
|
|
268
|
-
}), o), B(c, m, { content:
|
|
269
|
-
Date.now() -
|
|
268
|
+
}), o), B(c, m, { content: oe(O, x.content) ? ce(O, Date.now() - fe) : re(x.content) }), x.pendingWrite && pt(c, m, { pendingWrite: x.pendingWrite }), x.done) break;
|
|
269
|
+
Date.now() - ue > 3e4 && (await l(n, d, 600, f).catch(() => void 0), ue = Date.now()), await new Promise((e) => setTimeout(e, de(Date.now() - fe)));
|
|
270
270
|
}
|
|
271
|
-
let
|
|
272
|
-
if (
|
|
273
|
-
...
|
|
274
|
-
content: ae(
|
|
275
|
-
}), i && (
|
|
276
|
-
...
|
|
277
|
-
content: `${
|
|
278
|
-
}), h(
|
|
279
|
-
B(c, m, { tokens:
|
|
271
|
+
let he = s === "vibe-plugins" ? await ee(n, d, a, f).then((e) => e).catch(() => []) : void 0;
|
|
272
|
+
if (x.done || (x = {
|
|
273
|
+
...x,
|
|
274
|
+
content: ae(x.content, s, O)
|
|
275
|
+
}), i && (x = {
|
|
276
|
+
...x,
|
|
277
|
+
content: `${x.content}\n\n${O("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._")}`
|
|
278
|
+
}), h(x.content, he, a, n), x.tokens) {
|
|
279
|
+
B(c, m, { tokens: x.tokens });
|
|
280
280
|
try {
|
|
281
|
-
await
|
|
281
|
+
await tt?.({
|
|
282
282
|
workspaceId: d,
|
|
283
283
|
sessionId: a,
|
|
284
|
-
messageId:
|
|
285
|
-
model:
|
|
286
|
-
tokens:
|
|
287
|
-
}),
|
|
284
|
+
messageId: x.messageId,
|
|
285
|
+
model: x.model,
|
|
286
|
+
tokens: x.tokens
|
|
287
|
+
}), Ve(k);
|
|
288
288
|
} catch {}
|
|
289
289
|
}
|
|
290
|
-
let
|
|
291
|
-
if (
|
|
292
|
-
|
|
290
|
+
let be = pe();
|
|
291
|
+
if (be.abandon) {
|
|
292
|
+
me(), be.clearProcessing && mt(c);
|
|
293
293
|
return;
|
|
294
294
|
}
|
|
295
295
|
V(c, "complete", m, null);
|
|
296
296
|
} catch (e) {
|
|
297
|
-
if (n === 1 &&
|
|
297
|
+
if (n === 1 && ze(e)) return gt(c), _t(s), g(2);
|
|
298
298
|
throw e;
|
|
299
299
|
}
|
|
300
300
|
}, v = c;
|
|
301
|
-
|
|
301
|
+
Pt.current.add(v);
|
|
302
302
|
try {
|
|
303
303
|
if (!d) throw Error("Assistant backend is unavailable without an active workspace context.");
|
|
304
304
|
await g();
|
|
305
305
|
} catch (e) {
|
|
306
|
-
|
|
306
|
+
Nt.current.invalidate(S.getState().sandboxesByMode[s]?.sandboxId ?? null);
|
|
307
307
|
let t = i(e);
|
|
308
308
|
if (t) {
|
|
309
|
-
t.refusal === "exhausted" &&
|
|
309
|
+
t.refusal === "exhausted" && Be(k, "sandbox");
|
|
310
310
|
let e = [t.quotaName, t.traceId ? `reference ${t.traceId}` : null].filter(Boolean).join(" · "), n = t.refusal === "exhausted" ? "You've reached your sandbox limit on the current plan. Upgrade to start the AI assistant." : "This workspace has no sandbox allowance provisioned, so the AI assistant cannot start. Upgrading will not help — ask an administrator to provision it.";
|
|
311
311
|
h(e ? `${n}\n\n${e}` : n, void 0, void 0, void 0, "en"), V(c, "error", m, null);
|
|
312
312
|
return;
|
|
@@ -317,239 +317,239 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
|
|
|
317
317
|
..._(n.voiceSessionId)
|
|
318
318
|
});
|
|
319
319
|
} finally {
|
|
320
|
-
|
|
321
|
-
let e =
|
|
322
|
-
|
|
320
|
+
Pt.current.delete(v);
|
|
321
|
+
let e = zt.current;
|
|
322
|
+
zt.current = null, e && e.conversationId === v && q.current(e.content, e.attachments, e.options);
|
|
323
323
|
}
|
|
324
324
|
}, [
|
|
325
|
-
|
|
325
|
+
P,
|
|
326
326
|
R,
|
|
327
|
-
|
|
327
|
+
et,
|
|
328
328
|
gt,
|
|
329
329
|
_t,
|
|
330
|
-
|
|
330
|
+
lt,
|
|
331
331
|
L,
|
|
332
|
-
|
|
333
|
-
|
|
332
|
+
It,
|
|
333
|
+
$e,
|
|
334
|
+
j,
|
|
334
335
|
M,
|
|
335
|
-
N,
|
|
336
336
|
B,
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
ot,
|
|
337
|
+
k,
|
|
338
|
+
tt,
|
|
340
339
|
st,
|
|
341
|
-
|
|
340
|
+
ct,
|
|
341
|
+
ot,
|
|
342
342
|
ht,
|
|
343
343
|
dt,
|
|
344
344
|
V,
|
|
345
345
|
mt,
|
|
346
|
-
|
|
347
|
-
|
|
346
|
+
O,
|
|
347
|
+
W,
|
|
348
348
|
z,
|
|
349
|
-
|
|
350
|
-
]),
|
|
351
|
-
|
|
352
|
-
}, [
|
|
353
|
-
let e = [...U.chat].reverse().find((e) => e.role === "user"), t =
|
|
354
|
-
e &&
|
|
349
|
+
N
|
|
350
|
+
]), Ht = C((e) => {
|
|
351
|
+
K(e);
|
|
352
|
+
}, [K]), Ut = C(() => {
|
|
353
|
+
let e = [...U.chat].reverse().find((e) => e.role === "user"), t = P ? Mt.current[P] ?? [] : [];
|
|
354
|
+
e && K(e.content, t);
|
|
355
355
|
}, [
|
|
356
356
|
bt,
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
]),
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
}, [
|
|
363
|
-
let
|
|
357
|
+
K,
|
|
358
|
+
P
|
|
359
|
+
]), q = E(K);
|
|
360
|
+
w(() => {
|
|
361
|
+
q.current = K;
|
|
362
|
+
}, [K]);
|
|
363
|
+
let J = T(() => {
|
|
364
364
|
if (St) return null;
|
|
365
365
|
for (let e = bt.length - 1; e >= 0; --e) {
|
|
366
366
|
let t = bt[e];
|
|
367
|
-
if (t?.role !== "assistant" || !g(t) ||
|
|
368
|
-
let n =
|
|
367
|
+
if (t?.role !== "assistant" || !g(t) || G.current.has(t.id)) continue;
|
|
368
|
+
let n = Te(t.content).text.trim();
|
|
369
369
|
return n ? {
|
|
370
370
|
id: t.id,
|
|
371
371
|
text: n
|
|
372
372
|
} : null;
|
|
373
373
|
}
|
|
374
374
|
return null;
|
|
375
|
-
}, [bt, St]),
|
|
375
|
+
}, [bt, St]), Wt = T(() => J ? fe(J.text) : null, [J]), Gt = U.chat, Y = T(() => U.voice.filter((e) => e.role === "user" || e.role === "assistant").map((e) => ({
|
|
376
376
|
id: e.id,
|
|
377
377
|
role: e.role,
|
|
378
|
-
text:
|
|
378
|
+
text: Te(e.content).text.trim(),
|
|
379
379
|
sessionId: v(e),
|
|
380
380
|
timestamp: e.timestamp
|
|
381
|
-
})).filter((e) => e.text.length > 0), [U.voice]),
|
|
382
|
-
if (
|
|
381
|
+
})).filter((e) => e.text.length > 0), [U.voice]), Kt = C(() => {
|
|
382
|
+
if (Y.length === 0) return;
|
|
383
383
|
let e = /* @__PURE__ */ new Date();
|
|
384
|
-
|
|
385
|
-
title:
|
|
386
|
-
savedAt:
|
|
387
|
-
session:
|
|
388
|
-
earlier:
|
|
389
|
-
you:
|
|
390
|
-
assistant:
|
|
391
|
-
}, e),
|
|
384
|
+
Me(le(Y, {
|
|
385
|
+
title: O("voiceSession.transcript", "Voice conversation"),
|
|
386
|
+
savedAt: O("voiceSession.savedAt", "Saved"),
|
|
387
|
+
session: O("voiceSession.sessionLabel", "Session"),
|
|
388
|
+
earlier: O("voiceSession.earlierLabel", "Earlier"),
|
|
389
|
+
you: O("voiceSession.speakerYou", "You"),
|
|
390
|
+
assistant: O("voiceSession.speakerAssistant", "Assistant")
|
|
391
|
+
}, e), ue(k, e), "text/markdown");
|
|
392
392
|
}, [
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
]),
|
|
397
|
-
|
|
398
|
-
let
|
|
399
|
-
onSubmit:
|
|
393
|
+
k,
|
|
394
|
+
Y,
|
|
395
|
+
O
|
|
396
|
+
]), X = He(), Z = E(X);
|
|
397
|
+
Z.current = X;
|
|
398
|
+
let Q = Ee({
|
|
399
|
+
onSubmit: C((e, t) => {
|
|
400
400
|
let n = () => {
|
|
401
|
-
let n =
|
|
402
|
-
|
|
401
|
+
let n = Z.current, r = be(n.attachments);
|
|
402
|
+
q.current(e, r, { voiceSessionId: t }), n.clear();
|
|
403
403
|
};
|
|
404
|
-
if (!
|
|
404
|
+
if (!Z.current.isBusy) {
|
|
405
405
|
n();
|
|
406
406
|
return;
|
|
407
407
|
}
|
|
408
408
|
let r = Date.now(), i = window.setInterval(() => {
|
|
409
|
-
|
|
409
|
+
Z.current.isBusy && Date.now() - r < Ye || (window.clearInterval(i), n());
|
|
410
410
|
}, 200);
|
|
411
411
|
}, []),
|
|
412
|
-
latestReply:
|
|
413
|
-
language:
|
|
414
|
-
}),
|
|
415
|
-
let e =
|
|
416
|
-
!e ||
|
|
417
|
-
id:
|
|
412
|
+
latestReply: J,
|
|
413
|
+
language: pe(rt, nt).tag
|
|
414
|
+
}), qt = T(() => (yt?.messages ?? []).reduce((e, t) => Math.max(e, t.metadata?.continuedVoiceTurns ?? 0), 0), [yt?.messages]), Jt = Y.length > qt, Yt = C(() => {
|
|
415
|
+
let e = S.getState().activeConversationId;
|
|
416
|
+
!e || Y.length === 0 || (R(e, {
|
|
417
|
+
id: Xe(),
|
|
418
418
|
role: "system",
|
|
419
|
-
content:
|
|
420
|
-
intro:
|
|
421
|
-
nothing:
|
|
422
|
-
more: (e) =>
|
|
419
|
+
content: x(Y.slice(qt), {
|
|
420
|
+
intro: O("voiceSession.continuedIntro", "Continued from a voice conversation. You asked about:"),
|
|
421
|
+
nothing: O("voiceSession.continuedNothing", "Continued from a voice conversation."),
|
|
422
|
+
more: (e) => O("voiceSession.continuedMore", "…and {{count}} more", { count: e })
|
|
423
423
|
}),
|
|
424
424
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
425
|
-
metadata: { continuedVoiceTurns:
|
|
426
|
-
}), jt(!1),
|
|
425
|
+
metadata: { continuedVoiceTurns: Y.length }
|
|
426
|
+
}), jt(!1), Q.end());
|
|
427
427
|
}, [
|
|
428
|
-
|
|
429
|
-
|
|
428
|
+
Y,
|
|
429
|
+
qt,
|
|
430
430
|
R,
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
]),
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
}, [
|
|
437
|
-
let
|
|
438
|
-
let e =
|
|
439
|
-
|
|
440
|
-
}, [
|
|
441
|
-
|
|
442
|
-
!h &&
|
|
443
|
-
}, [h,
|
|
444
|
-
|
|
445
|
-
}, [
|
|
446
|
-
let e =
|
|
447
|
-
return e &&
|
|
431
|
+
O,
|
|
432
|
+
Q
|
|
433
|
+
]), Xt = E(0);
|
|
434
|
+
w(() => {
|
|
435
|
+
Q.active && (Xt.current = Y.length);
|
|
436
|
+
}, [Q.active]);
|
|
437
|
+
let Zt = C(() => {
|
|
438
|
+
let e = Y.length > Xt.current;
|
|
439
|
+
Q.end(), e && jt(!0);
|
|
440
|
+
}, [Y, Q]);
|
|
441
|
+
w(() => {
|
|
442
|
+
!h && Q.active && Q.end();
|
|
443
|
+
}, [h, Q]), w(() => {
|
|
444
|
+
Q.active || (Z.current.clear(), zt.current = null);
|
|
445
|
+
}, [Q.active]), w(() => {
|
|
446
|
+
let e = S.getState().consumePendingPrompt();
|
|
447
|
+
return e && q.current(e), S.subscribe((e, t) => {
|
|
448
448
|
if (e.pendingPrompt && e.pendingPrompt !== t.pendingPrompt) {
|
|
449
|
-
let e =
|
|
450
|
-
e &&
|
|
449
|
+
let e = S.getState().consumePendingPrompt();
|
|
450
|
+
e && q.current(e);
|
|
451
451
|
}
|
|
452
452
|
});
|
|
453
453
|
}, []);
|
|
454
|
-
let
|
|
455
|
-
let t =
|
|
454
|
+
let $ = C((e) => {
|
|
455
|
+
let t = P ? S.getState().conversations.find((e) => e.id === P) : void 0;
|
|
456
456
|
if (t && (t.messages.length > 0 || t.backendSessionId)) {
|
|
457
457
|
if (t.mode !== e) {
|
|
458
|
-
let t =
|
|
458
|
+
let t = S.getState().conversations.find((t) => t.mode === e && t.messages.length === 0 && !t.backendSessionId && !S.getState().processingByConversationId[t.id]);
|
|
459
459
|
t ? ft(t.id) : L(void 0, e);
|
|
460
460
|
}
|
|
461
|
-
} else
|
|
462
|
-
|
|
461
|
+
} else P && dt(P, e);
|
|
462
|
+
I(e);
|
|
463
463
|
}, [
|
|
464
|
-
|
|
464
|
+
P,
|
|
465
465
|
L,
|
|
466
466
|
ft,
|
|
467
467
|
dt,
|
|
468
|
-
|
|
469
|
-
]), Qt =
|
|
470
|
-
if (
|
|
468
|
+
I
|
|
469
|
+
]), Qt = C((e) => {
|
|
470
|
+
if (A.find((t) => t.id === e)?.writeCapable && !S.getState().apiCallsAcknowledged) {
|
|
471
471
|
kt(e);
|
|
472
472
|
return;
|
|
473
473
|
}
|
|
474
|
-
|
|
475
|
-
}, [
|
|
474
|
+
$(e);
|
|
475
|
+
}, [$, A]), $t = C(() => {
|
|
476
476
|
let e = Ot;
|
|
477
|
-
kt(null), vt(), e &&
|
|
477
|
+
kt(null), vt(), e && $(e);
|
|
478
478
|
}, [
|
|
479
479
|
Ot,
|
|
480
480
|
vt,
|
|
481
|
-
|
|
482
|
-
]), en =
|
|
481
|
+
$
|
|
482
|
+
]), en = C(() => {
|
|
483
483
|
kt(null);
|
|
484
484
|
}, []);
|
|
485
|
-
return /* @__PURE__ */
|
|
485
|
+
return /* @__PURE__ */ qe("div", {
|
|
486
486
|
className: "relative flex flex-1 flex-col overflow-hidden",
|
|
487
487
|
children: [
|
|
488
|
-
/* @__PURE__ */
|
|
488
|
+
/* @__PURE__ */ qe("div", {
|
|
489
489
|
className: "contents",
|
|
490
|
-
inert:
|
|
490
|
+
inert: Q.active || void 0,
|
|
491
491
|
children: [
|
|
492
|
-
|
|
493
|
-
count:
|
|
492
|
+
Y.length > 0 && !Q.active ? /* @__PURE__ */ D(Ae, {
|
|
493
|
+
count: Y.length,
|
|
494
494
|
onOpenTranscript: () => jt(!0)
|
|
495
495
|
}) : null,
|
|
496
|
-
|
|
497
|
-
mode:
|
|
498
|
-
onSuggestionClick:
|
|
499
|
-
}) : /* @__PURE__ */
|
|
496
|
+
Gt.length === 0 ? /* @__PURE__ */ D(Ne, {
|
|
497
|
+
mode: F,
|
|
498
|
+
onSuggestionClick: Ht
|
|
499
|
+
}) : /* @__PURE__ */ D("div", {
|
|
500
500
|
className: "flex min-h-0 flex-1 flex-col",
|
|
501
|
-
children: /* @__PURE__ */
|
|
502
|
-
onApprovePendingWrite:
|
|
503
|
-
approvingWriteRef:
|
|
504
|
-
messages:
|
|
501
|
+
children: /* @__PURE__ */ D(Pe, {
|
|
502
|
+
onApprovePendingWrite: Vt,
|
|
503
|
+
approvingWriteRef: Lt,
|
|
504
|
+
messages: Gt,
|
|
505
505
|
streamingMessageId: Ct,
|
|
506
506
|
failedMessageId: wt,
|
|
507
|
-
onRetry:
|
|
507
|
+
onRetry: Ut
|
|
508
508
|
})
|
|
509
509
|
}),
|
|
510
|
-
/* @__PURE__ */
|
|
511
|
-
onStartVoiceSession:
|
|
512
|
-
onSend: (e, t) => void
|
|
510
|
+
/* @__PURE__ */ D(Ue, {
|
|
511
|
+
onStartVoiceSession: Q.available && F !== "api-calls" ? Q.start : void 0,
|
|
512
|
+
onSend: (e, t) => void K(e, t),
|
|
513
513
|
disabled: St,
|
|
514
|
-
placeholder:
|
|
515
|
-
mode:
|
|
516
|
-
writeAccessDenied:
|
|
514
|
+
placeholder: F === "api-calls" ? O("chatArea.placeholderActions", "What would you like me to do?") : O("chatArea.placeholderGeneral", "Ask me anything…"),
|
|
515
|
+
mode: F,
|
|
516
|
+
writeAccessDenied: he === "denied" && !!Ft?.writeCapable,
|
|
517
517
|
availableModes: Dt,
|
|
518
518
|
onModeChange: Qt
|
|
519
519
|
})
|
|
520
520
|
]
|
|
521
521
|
}),
|
|
522
|
-
At &&
|
|
523
|
-
turns:
|
|
522
|
+
At && !Q.active ? /* @__PURE__ */ D(je, {
|
|
523
|
+
turns: Y,
|
|
524
524
|
onClose: () => jt(!1),
|
|
525
|
-
onSave:
|
|
526
|
-
onContinueInChat:
|
|
525
|
+
onSave: Kt,
|
|
526
|
+
onContinueInChat: Jt ? Yt : void 0,
|
|
527
527
|
closeOnEscape: !0
|
|
528
528
|
}) : null,
|
|
529
|
-
|
|
530
|
-
session:
|
|
531
|
-
notice:
|
|
532
|
-
capturing:
|
|
533
|
-
interrupting:
|
|
534
|
-
awaitingEndpoint:
|
|
535
|
-
turns:
|
|
536
|
-
spokenChunks:
|
|
537
|
-
attachments:
|
|
538
|
-
onAttachFiles:
|
|
539
|
-
onRemoveAttachment:
|
|
540
|
-
onRetryAttachment:
|
|
541
|
-
canAttachMore:
|
|
542
|
-
preparingAttachments:
|
|
543
|
-
onSaveTranscript:
|
|
544
|
-
onContinueInChat:
|
|
529
|
+
Q.active && /* @__PURE__ */ D(Fe, {
|
|
530
|
+
session: Q.session,
|
|
531
|
+
notice: Q.notice,
|
|
532
|
+
capturing: Q.capturing,
|
|
533
|
+
interrupting: Q.interrupting,
|
|
534
|
+
awaitingEndpoint: Q.awaitingEndpoint,
|
|
535
|
+
turns: Y,
|
|
536
|
+
spokenChunks: Q.spokenChunks,
|
|
537
|
+
attachments: X.attachments,
|
|
538
|
+
onAttachFiles: X.addFiles,
|
|
539
|
+
onRemoveAttachment: X.remove,
|
|
540
|
+
onRetryAttachment: X.retry,
|
|
541
|
+
canAttachMore: X.canAddMore,
|
|
542
|
+
preparingAttachments: X.preparingCount,
|
|
543
|
+
onSaveTranscript: Kt,
|
|
544
|
+
onContinueInChat: Yt,
|
|
545
545
|
onInterrupt: () => {
|
|
546
|
-
|
|
546
|
+
Q.interrupt(), Bt();
|
|
547
547
|
},
|
|
548
|
-
spoken:
|
|
549
|
-
onToggleMute:
|
|
550
|
-
onEnd:
|
|
548
|
+
spoken: Wt,
|
|
549
|
+
onToggleMute: Q.toggleMute,
|
|
550
|
+
onEnd: Zt
|
|
551
551
|
}),
|
|
552
|
-
/* @__PURE__ */
|
|
552
|
+
/* @__PURE__ */ D(Ge, {
|
|
553
553
|
open: Ot !== null,
|
|
554
554
|
onConfirm: $t,
|
|
555
555
|
onCancel: en
|
|
@@ -558,4 +558,4 @@ var j = ({ visible: h = !0, writeAccess: b = "unknown" }) => {
|
|
|
558
558
|
});
|
|
559
559
|
};
|
|
560
560
|
//#endregion
|
|
561
|
-
export {
|
|
561
|
+
export { A as AssistantChatArea };
|