@burdenoff/fe-libs 2026.1029.1 → 2026.1029.3
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/turnTimeline.js +1 -1
- package/dist/shared/assistant/turnTimingReporter.d.ts +11 -0
- package/dist/shared/assistant/turnTimingReporter.js +73 -56
- package/dist/shared/assistant/ui/AssistantChatArea.js +129 -129
- package/dist/shared/assistant/ui/AssistantSpeechProvider.js +134 -129
- package/dist/shared/assistant/ui/useVoiceSession.js +201 -177
- package/dist/shared/assistant/voice/voiceSession.d.ts +7 -0
- package/dist/shared/assistant/voice/voiceSession.js +10 -1
- package/dist/shared/components/assistantWidget/AssistantWidget.js +177 -176
- package/dist/shared/components/assistantWidget/assistantWidgetPosition.d.ts +32 -0
- package/dist/shared/components/assistantWidget/assistantWidgetPosition.js +4 -0
- package/dist/shared-assistant.js +210 -210
- package/package.json +1 -1
|
@@ -131,6 +131,17 @@ export interface TurnTimingReportingOptions {
|
|
|
131
131
|
/** How this panel sends a batch — reading workspace and credentials when it does. */
|
|
132
132
|
send: TurnTimingSender;
|
|
133
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Register timing-only cleanup for a turn stopped on pagehide. The callback
|
|
136
|
+
* finishes its timeline and returns its id; the reporter reads that snapshot
|
|
137
|
+
* synchronously before flushing, regardless of Window listener order. Also
|
|
138
|
+
* call the returned `settle` before clearing the owner's id in its own exit
|
|
139
|
+
* handler. Normal notifications remain asynchronous. Unregister on unmount.
|
|
140
|
+
*/
|
|
141
|
+
export declare function registerTurnTimingPageExit(finish: () => string | undefined): {
|
|
142
|
+
settle: () => void;
|
|
143
|
+
unregister: () => void;
|
|
144
|
+
};
|
|
134
145
|
/**
|
|
135
146
|
* Report this page's finished turns. The first call starts the page-wide
|
|
136
147
|
* reporter, which runs for the page load (see the header); each panel lends it
|
|
@@ -2,10 +2,10 @@ import { graphqlFetch as e } from "../graphql/fetch.js";
|
|
|
2
2
|
import "../../shared-graphql.js";
|
|
3
3
|
import { REPORT_MY_ASSISTANT_TURN_TIMINGS as t } from "./operations.js";
|
|
4
4
|
import { getCapability as n, isUnknownFieldError as r, markSupported as i, markUnsupported as a } from "./capabilities.js";
|
|
5
|
-
import { subscribeTurnTimelines as o, turnClockMs as s } from "./turnTimeline.js";
|
|
6
|
-
import { buildAbandonedTurnReport as
|
|
5
|
+
import { subscribeTurnTimelines as o, turnClockMs as s, turnTimeline as c } from "./turnTimeline.js";
|
|
6
|
+
import { buildAbandonedTurnReport as l, buildTurnTimingReport as u, isFinishedTurn as d } from "./turnTimingReport.js";
|
|
7
7
|
//#region src/shared/assistant/turnTimingReporter.ts
|
|
8
|
-
var
|
|
8
|
+
var f = {
|
|
9
9
|
flushAt: 5,
|
|
10
10
|
flushAfterMs: 15e3,
|
|
11
11
|
maxQueued: 50,
|
|
@@ -15,7 +15,7 @@ var d = {
|
|
|
15
15
|
rememberedTurns: 200,
|
|
16
16
|
maxRunningTurns: 20
|
|
17
17
|
};
|
|
18
|
-
function
|
|
18
|
+
function p() {
|
|
19
19
|
try {
|
|
20
20
|
let e = globalThis.crypto === void 0 ? null : globalThis.crypto;
|
|
21
21
|
if (!e) return null;
|
|
@@ -29,22 +29,22 @@ function f() {
|
|
|
29
29
|
return null;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
var
|
|
32
|
+
var m = (e, t) => {
|
|
33
33
|
let n = setTimeout(e, t);
|
|
34
34
|
return () => clearTimeout(n);
|
|
35
35
|
};
|
|
36
|
-
function
|
|
37
|
-
let t =
|
|
36
|
+
function h(e) {
|
|
37
|
+
let t = f, n = e.schedule ?? m, r = e.now ?? Date.now, i = e.turnClock ?? s, a = e.nonce ?? p, o = () => {
|
|
38
38
|
try {
|
|
39
39
|
return e.isPageHidden?.() === !0;
|
|
40
40
|
} catch {
|
|
41
41
|
return !1;
|
|
42
42
|
}
|
|
43
|
-
},
|
|
44
|
-
for (
|
|
45
|
-
let e =
|
|
43
|
+
}, c = /* @__PURE__ */ new Set(), h = /* @__PURE__ */ new Map(), g = /* @__PURE__ */ new Map(), _ = [], v = null, y = !1, b = !1, x = 0, S = !1, C = !1, w = !1, T = (e) => {
|
|
44
|
+
for (c.add(e); c.size > t.rememberedTurns;) {
|
|
45
|
+
let e = c.values().next().value;
|
|
46
46
|
if (e === void 0) break;
|
|
47
|
-
|
|
47
|
+
c.delete(e);
|
|
48
48
|
}
|
|
49
49
|
}, E = () => {
|
|
50
50
|
let e = v;
|
|
@@ -102,7 +102,7 @@ function m(e) {
|
|
|
102
102
|
let e = i();
|
|
103
103
|
for (let [t, n] of [...g]) {
|
|
104
104
|
g.delete(t), T(t);
|
|
105
|
-
let r =
|
|
105
|
+
let r = l(n, e);
|
|
106
106
|
r && _.push(r);
|
|
107
107
|
}
|
|
108
108
|
_.length > t.maxQueued && _.splice(0, _.length - t.maxQueued);
|
|
@@ -134,7 +134,7 @@ function m(e) {
|
|
|
134
134
|
}
|
|
135
135
|
function F(e, n, r) {
|
|
136
136
|
T(e);
|
|
137
|
-
let i =
|
|
137
|
+
let i = u(n);
|
|
138
138
|
i && (_.push(i), _.length > t.maxQueued && _.splice(0, _.length - t.maxQueued), r && (o() ? P({
|
|
139
139
|
final: !0,
|
|
140
140
|
keepalive: !0,
|
|
@@ -155,8 +155,8 @@ function m(e) {
|
|
|
155
155
|
return {
|
|
156
156
|
observe: (e) => {
|
|
157
157
|
try {
|
|
158
|
-
if (S ||
|
|
159
|
-
if (!
|
|
158
|
+
if (S || c.has(e.turnId)) return;
|
|
159
|
+
if (!d(e)) {
|
|
160
160
|
L(e);
|
|
161
161
|
return;
|
|
162
162
|
}
|
|
@@ -194,23 +194,23 @@ function m(e) {
|
|
|
194
194
|
})
|
|
195
195
|
};
|
|
196
196
|
}
|
|
197
|
-
var
|
|
197
|
+
var g = new Set([
|
|
198
198
|
"GRAPHQL_VALIDATION_FAILED",
|
|
199
199
|
"BAD_USER_INPUT",
|
|
200
200
|
"FORBIDDEN"
|
|
201
201
|
]);
|
|
202
|
-
function
|
|
202
|
+
function _(e) {
|
|
203
203
|
if (typeof e.message == "string" && r(e.message)) return !0;
|
|
204
204
|
let t = e.extensions?.code;
|
|
205
|
-
return typeof t == "string" &&
|
|
205
|
+
return typeof t == "string" && g.has(t);
|
|
206
206
|
}
|
|
207
|
-
function
|
|
207
|
+
function v(e) {
|
|
208
208
|
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
209
209
|
}
|
|
210
|
-
function
|
|
211
|
-
if (!
|
|
210
|
+
function y(e) {
|
|
211
|
+
if (!v(e)) return null;
|
|
212
212
|
let t = e.reportMyAssistantTurnTimings;
|
|
213
|
-
if (!
|
|
213
|
+
if (!v(t)) return null;
|
|
214
214
|
let { enabled: n, accepted: r, rejected: i, duplicate: a, rateLimited: o } = t;
|
|
215
215
|
return typeof n != "boolean" || typeof r != "number" || typeof i != "number" || typeof a != "boolean" || typeof o != "boolean" ? null : {
|
|
216
216
|
enabled: n,
|
|
@@ -220,12 +220,12 @@ function v(e) {
|
|
|
220
220
|
rateLimited: o
|
|
221
221
|
};
|
|
222
222
|
}
|
|
223
|
-
function
|
|
224
|
-
return !
|
|
223
|
+
function b(e) {
|
|
224
|
+
return !v(e) || !Array.isArray(e.errors) ? [] : e.errors.filter(v);
|
|
225
225
|
}
|
|
226
|
-
var
|
|
227
|
-
async function
|
|
228
|
-
if (!i.workspaceId) return
|
|
226
|
+
var x = { kind: "dropped" }, S = { kind: "unsupported" };
|
|
227
|
+
async function C(n, i, a = e) {
|
|
228
|
+
if (!i.workspaceId) return x;
|
|
229
229
|
try {
|
|
230
230
|
let e = await a({
|
|
231
231
|
gateway: "workspace",
|
|
@@ -244,78 +244,95 @@ async function S(n, i, a = e) {
|
|
|
244
244
|
extraHeaders: { "x-request-id": `bf-assistant-${n.nonce}` },
|
|
245
245
|
...n.keepalive ? { keepalive: !0 } : {}
|
|
246
246
|
});
|
|
247
|
-
if (
|
|
248
|
-
let r =
|
|
247
|
+
if (b(e).some(_)) return S;
|
|
248
|
+
let r = y(e.data);
|
|
249
249
|
return r ? {
|
|
250
250
|
kind: "receipt",
|
|
251
251
|
receipt: r
|
|
252
|
-
} :
|
|
252
|
+
} : x;
|
|
253
253
|
} catch (e) {
|
|
254
|
-
return r(e) ||
|
|
254
|
+
return r(e) || b(e).some(_) ? S : x;
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
|
-
var
|
|
258
|
-
function
|
|
257
|
+
var w = [], T = null, E = null, D = /* @__PURE__ */ new Set();
|
|
258
|
+
function O(e) {
|
|
259
|
+
let t = () => {
|
|
260
|
+
try {
|
|
261
|
+
let t = e(), n = t ? c(t) : void 0;
|
|
262
|
+
n && d(n) && E?.reporter.observe(n);
|
|
263
|
+
} catch {}
|
|
264
|
+
};
|
|
265
|
+
return D.add(t), {
|
|
266
|
+
settle: t,
|
|
267
|
+
unregister: () => {
|
|
268
|
+
D.delete(t);
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function k() {
|
|
259
273
|
return typeof document < "u" && document?.visibilityState === "hidden";
|
|
260
274
|
}
|
|
261
|
-
function
|
|
275
|
+
function A(e) {
|
|
262
276
|
let t = typeof window > "u" ? null : window, n = typeof document > "u" ? null : document, r = () => e.flush({
|
|
263
277
|
final: !0,
|
|
264
278
|
keepalive: !0,
|
|
265
279
|
abandonRunning: !0
|
|
266
280
|
}), i = () => {
|
|
281
|
+
for (let e of [...D]) e();
|
|
282
|
+
r();
|
|
283
|
+
}, a = () => {
|
|
267
284
|
n?.visibilityState === "hidden" && e.flush({
|
|
268
285
|
final: !0,
|
|
269
286
|
keepalive: !0,
|
|
270
287
|
keepAwaitingAudio: !0
|
|
271
288
|
});
|
|
272
289
|
};
|
|
273
|
-
return t?.addEventListener?.("pagehide",
|
|
274
|
-
t?.removeEventListener?.("pagehide",
|
|
290
|
+
return t?.addEventListener?.("pagehide", i), n?.addEventListener?.("freeze", r), n?.addEventListener?.("visibilitychange", a), () => {
|
|
291
|
+
t?.removeEventListener?.("pagehide", i), n?.removeEventListener?.("freeze", r), n?.removeEventListener?.("visibilitychange", a);
|
|
275
292
|
};
|
|
276
293
|
}
|
|
277
|
-
function
|
|
278
|
-
return
|
|
294
|
+
function j() {
|
|
295
|
+
return w[w.length - 1]?.send ?? T;
|
|
279
296
|
}
|
|
280
|
-
function
|
|
297
|
+
function M() {
|
|
281
298
|
let e = () => void 0, t = () => void 0, n = !1, r = {
|
|
282
|
-
reporter:
|
|
299
|
+
reporter: h({
|
|
283
300
|
send: (e) => {
|
|
284
|
-
let t =
|
|
285
|
-
return t ? t(e) : Promise.resolve(
|
|
301
|
+
let t = j();
|
|
302
|
+
return t ? t(e) : Promise.resolve(x);
|
|
286
303
|
},
|
|
287
304
|
onSupported: () => i("turnTimings"),
|
|
288
|
-
isPageHidden:
|
|
305
|
+
isPageHidden: k,
|
|
289
306
|
onUnsupported: () => {
|
|
290
|
-
a("turnTimings"),
|
|
307
|
+
a("turnTimings"), E === r && (E = null), r.release();
|
|
291
308
|
}
|
|
292
309
|
}),
|
|
293
310
|
release: () => {
|
|
294
311
|
n || (n = !0, e(), t());
|
|
295
312
|
}
|
|
296
313
|
};
|
|
297
|
-
return e = o((e) => r.reporter.observe(e)), t =
|
|
314
|
+
return e = o((e) => r.reporter.observe(e)), t = A(r.reporter), r;
|
|
298
315
|
}
|
|
299
|
-
var
|
|
300
|
-
function
|
|
316
|
+
var N = () => void 0;
|
|
317
|
+
function P(e) {
|
|
301
318
|
try {
|
|
302
|
-
if (n("turnTimings") === "unsupported") return
|
|
319
|
+
if (n("turnTimings") === "unsupported") return N;
|
|
303
320
|
let t = { send: e.send };
|
|
304
|
-
|
|
321
|
+
w.push(t), E ||= M();
|
|
305
322
|
let r = !1;
|
|
306
323
|
return () => {
|
|
307
324
|
if (r) return;
|
|
308
325
|
r = !0;
|
|
309
|
-
let e =
|
|
310
|
-
e >= 0 &&
|
|
326
|
+
let e = w.indexOf(t);
|
|
327
|
+
e >= 0 && w.splice(e, 1), T = t.send;
|
|
311
328
|
};
|
|
312
329
|
} catch {
|
|
313
|
-
return
|
|
330
|
+
return N;
|
|
314
331
|
}
|
|
315
332
|
}
|
|
316
|
-
function
|
|
317
|
-
let e =
|
|
318
|
-
|
|
333
|
+
function F() {
|
|
334
|
+
let e = E;
|
|
335
|
+
E = null, w.length = 0, T = null, e && (e.release(), e.reporter.dispose());
|
|
319
336
|
}
|
|
320
337
|
//#endregion
|
|
321
|
-
export {
|
|
338
|
+
export { f as TURN_TIMING_REPORTING, p as createTurnTimingNonce, h as createTurnTimingReporter, O as registerTurnTimingPageExit, F as resetTurnTimingReporting, C as sendAssistantTurnTimings, P as startTurnTimingReporting };
|