@burdenoff/fe-libs 2026.1030.3 → 2026.1030.4

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.
@@ -1,22 +1,23 @@
1
1
  import { PROFILE_STORAGE_CHANGE_EVENT as e } from "../../providers/shell/ProfileStorageManager.js";
2
- import { coalesceUpdatePatch as t, historyFilterKey as n, isValidUpdatePatch as r, normaliseHistoryTitle as i } from "./historyControls.js";
3
- import { isHistoryConversationBusy as a, setAssistantStorageFullHandler as o, setHistoryOpenFilterSource as s, setHistoryRenameSink as c, setHistoryStampSource as l } from "./stampRegistry.js";
4
- import { useAssistantStore as u } from "../store.js";
5
- import { getActorId as d, getWorkspaceId as f } from "../context.js";
2
+ import { throwIfAborted as t } from "../abortSignal.js";
3
+ import { coalesceUpdatePatch as n, historyFilterKey as r, isValidUpdatePatch as i, normaliseHistoryTitle as a } from "./historyControls.js";
4
+ import { isHistoryConversationBusy as o, setAssistantStorageFullHandler as s, setHistoryOpenFilterSource as c, setHistoryRenameSink as l, setHistoryStampSource as u } from "./stampRegistry.js";
5
+ import { useAssistantStore as d } from "../store.js";
6
+ import { getActorId as f, getWorkspaceId as ee } from "../context.js";
6
7
  import { isTurnInFlight as p } from "../turnState.js";
7
- import { AssistantHistoryControlsUnavailableError as ee, AssistantHistorySearchUnavailableError as m } from "./historyTransportErrors.js";
8
- import { ASSISTANT_HISTORY_QUOTA_RETRY_MS as te, ASSISTANT_HISTORY_SCHEMA_PAUSE_MS as ne, assistantHistoryBackoffMs as re, classifyAssistantHistoryError as h, planAssistantHistoryRetry as ie } from "./historyErrors.js";
8
+ import { AssistantHistoryControlsUnavailableError as m, AssistantHistorySearchUnavailableError as te } from "./historyTransportErrors.js";
9
+ import { ASSISTANT_HISTORY_QUOTA_RETRY_MS as ne, ASSISTANT_HISTORY_SCHEMA_PAUSE_MS as re, assistantHistoryBackoffMs as ie, classifyAssistantHistoryError as h, planAssistantHistoryRetry as ae } from "./historyErrors.js";
9
10
  import "./historySearchQuery.js";
10
- import { ASSISTANT_HISTORY_CONTROLS_RECHECK_MS as ae, createGatewayHistoryTransport as g } from "./historyApi.js";
11
- import { assistantHistoryScopeKey as _, completeAssistantHistoryScope as oe, isLegacyHistoryConvKey as se } from "./historyTypes.js";
12
- import { historyConvKeyOf as v, historyHeaderOf as y, historyScopeKeyOfStamp as b, materializeHistoryHeader as ce, selectHistoryEvictions as le } from "./historyList.js";
13
- import { fromHistoryEntry as ue, historyEntriesMatchKind as de, isHistoryClientId as fe, toHistoryEntries as pe } from "./historyMapping.js";
14
- import { applyHistoryPage as me, planHistoryEarlierLoad as he, planHistoryOpenLoad as ge } from "./historyMerge.js";
15
- import { assistantHistoryGenerationOf as _e, isCurrentAssistantHistoryGeneration as ve, useAssistantHistoryStatus as ye } from "./historyStatus.js";
16
- import { assistantHistoryStore as x, headerHasControls as be } from "./historyStore.js";
11
+ import { ASSISTANT_HISTORY_CONTROLS_RECHECK_MS as oe, createGatewayHistoryTransport as g } from "./historyApi.js";
12
+ import { assistantHistoryScopeKey as _, completeAssistantHistoryScope as se, isLegacyHistoryConvKey as ce } from "./historyTypes.js";
13
+ import { historyConvKeyOf as le, historyHeaderOf as v, historyScopeKeyOfStamp as y, materializeHistoryHeader as ue, selectHistoryEvictions as de } from "./historyList.js";
14
+ import { fromHistoryEntry as fe, historyEntriesMatchKind as pe, isHistoryClientId as me, toHistoryEntries as he } from "./historyMapping.js";
15
+ import { applyHistoryPage as ge, planHistoryEarlierLoad as _e, planHistoryOpenLoad as ve } from "./historyMerge.js";
16
+ import { assistantHistoryGenerationOf as ye, isCurrentAssistantHistoryGeneration as be, useAssistantHistoryStatus as xe } from "./historyStatus.js";
17
+ import { assistantHistoryStore as b, headerHasControls as Se } from "./historyStore.js";
17
18
  //#region src/shared/assistant/history/historyEngine.ts
18
- var xe = 1e3, Se = 3e4, Ce = 2e3, we = 15e3, Te = 5 * 6e4, Ee = 2e3, De = 100, Oe = 10, ke = 100, Ae = 5, je = 3, Me = 2, Ne = 10 * 6e4, Pe = [10, 0], Fe = 3e4, S = 1440 * 60 * 1e3;
19
- function C() {
19
+ var Ce = 1e3, we = 3e4, Te = 2e3, Ee = 15e3, De = 5 * 6e4, Oe = 2e3, ke = 100, Ae = 10, je = 100, Me = 5, Ne = 3, Pe = 2, Fe = 10 * 6e4, Ie = [10, 0], Le = 3e4, x = 1440 * 60 * 1e3;
20
+ function S() {
20
21
  let e = /* @__PURE__ */ new Map(), t = 0;
21
22
  return {
22
23
  now: () => Date.now(),
@@ -34,165 +35,165 @@ function C() {
34
35
  }
35
36
  };
36
37
  }
37
- function Ie() {
38
+ function Re() {
38
39
  let e = typeof navigator > "u" ? void 0 : navigator.locks;
39
40
  return !e || typeof e.request != "function" ? null : { request: (t, n) => new Promise((r, i) => {
40
41
  e.request(t, { ifAvailable: !0 }, (e) => n(e !== null).then(r, i)).catch(i);
41
42
  }) };
42
43
  }
43
- function w(e, t) {
44
+ function C(e, t) {
44
45
  try {
45
46
  return e();
46
47
  } catch {
47
48
  return t;
48
49
  }
49
50
  }
50
- var Le = (e, t) => {
51
+ var ze = (e, t) => {
51
52
  console.warn(`[assistant] history: ${e}`, t ?? "");
52
53
  };
53
- function Re(e) {
54
+ function Be(e) {
54
55
  if (!e.titleLocked) return e;
55
56
  let t = { ...e };
56
57
  return delete t.titleLocked, t;
57
58
  }
58
- var ze = (e) => e.entries.map((e) => e.clientMessageId);
59
- function T(g) {
60
- let { transport: x, storage: S, clock: C } = g, T = S.useStore, E = g.mainStore ?? u, D = g.status ?? ye, Be = g.locks === void 0 ? Ie() : g.locks, Ve = g.random ?? Math.random, He = () => w(g.readActorId ?? d, null), Ue = () => w(g.readWorkspaceId ?? f, ""), We = g.isConversationBusy ?? a, O = g.log ?? Le, k = /* @__PURE__ */ new Map(), A = null, j = null, M = null, N = 0, Ge = !1, Ke = !1, qe = !1, Je = null, Ye = !1, Xe = !1, Ze = 0, Qe = -Infinity, $e = null, et = !1, tt = /* @__PURE__ */ new Set(), nt = 0, rt = !1, P = null, it = -Infinity, F = null, I = null, at = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Map(), R = /* @__PURE__ */ new Map(), z = /* @__PURE__ */ new Map(), ot = /* @__PURE__ */ new Set(), st = [], B = () => C.now(), V = () => j ? _(j) : null, ct = () => B() < N, lt = () => A !== null && M === null && S.isBoundToActiveProfile(), H = () => lt() && j !== null && !ct() && !Ge, U = () => w(() => x.controlsAvailable(), !1), W = (e) => (ot.add(e), e.finally(() => ot.delete(e)).catch(() => void 0), e), G = (e, t, n, r = !1) => {
59
+ var Ve = (e) => e.entries.map((e) => e.clientMessageId);
60
+ function w(g) {
61
+ let { transport: b, storage: x, clock: S } = g, w = x.useStore, T = g.mainStore ?? d, E = g.status ?? xe, He = g.locks === void 0 ? Re() : g.locks, Ue = g.random ?? Math.random, We = () => C(g.readActorId ?? f, null), Ge = () => C(g.readWorkspaceId ?? ee, ""), Ke = g.isConversationBusy ?? o, D = g.log ?? ze, O = /* @__PURE__ */ new Map(), k = null, A = null, j = null, M = 0, qe = !1, Je = !1, Ye = !1, Xe = null, Ze = !1, Qe = !1, $e = 0, et = -Infinity, N = null, tt = !1, nt = /* @__PURE__ */ new Set(), rt = 0, it = !1, P = null, at = -Infinity, F = null, I = null, ot = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Map(), R = /* @__PURE__ */ new Map(), z = /* @__PURE__ */ new Map(), st = /* @__PURE__ */ new Set(), ct = [], B = () => S.now(), V = () => A ? _(A) : null, lt = () => B() < M, ut = () => k !== null && j === null && x.isBoundToActiveProfile(), H = () => ut() && A !== null && !lt() && !qe, U = () => C(() => b.controlsAvailable(), !1), W = (e) => (st.add(e), e.finally(() => st.delete(e)).catch(() => void 0), e), G = (e, t, n, r = !1) => {
61
62
  let i = B() + Math.max(0, t), a = z.get(e);
62
63
  if (a && !r && a.at <= i) return;
63
- a && C.clearTimeout(a.handle);
64
- let o = C.setTimeout(() => {
64
+ a && S.clearTimeout(a.handle);
65
+ let o = S.setTimeout(() => {
65
66
  z.get(e)?.handle === o && z.delete(e), n();
66
67
  }, Math.max(0, t));
67
68
  z.set(e, {
68
69
  handle: o,
69
70
  at: i
70
71
  });
71
- }, ut = (e) => {
72
+ }, dt = (e) => {
72
73
  let t = z.get(e);
73
- t && C.clearTimeout(t.handle), z.delete(e);
74
- }, K = () => _e(D.getState(), S.boundKey()), q = (e) => A !== null && S.isBoundToActiveProfile() && ve(e, D.getState(), S.boundKey()), J = (e) => E.getState().conversations.find((t) => t.id === e), Y = (e) => p(E.getState().processingByConversationId[e]?.status) || w(() => We(e), !0), dt = (e, t) => {
75
- let n = T.getState().scopes[e]?.headers[t];
74
+ t && S.clearTimeout(t.handle), z.delete(e);
75
+ }, K = () => ye(E.getState(), x.boundKey()), q = (e) => k !== null && x.isBoundToActiveProfile() && be(e, E.getState(), x.boundKey()), J = (e) => T.getState().conversations.find((t) => t.id === e), Y = (e) => p(T.getState().processingByConversationId[e]?.status) || C(() => Ke(e), !0), ft = (e, t) => {
76
+ let n = w.getState().scopes[e]?.headers[t];
76
77
  if (n) return n;
77
- let r = D.getState().olderHeaders;
78
+ let r = E.getState().olderHeaders;
78
79
  return (r?.scopeKey === e ? r.headers[t] : void 0) || ((F && F.gen.scopeKey === e && q(F.gen) ? F.headers[t] : void 0) ?? null);
79
- }, ft = (e) => {
80
- if (!S.isBoundToActiveProfile()) return;
80
+ }, pt = (e) => {
81
+ if (!x.isBoundToActiveProfile()) return;
81
82
  let t;
82
- for (let n of T.getState().outbox) n.type === "update" && n.convKey === e && n.patch.title !== void 0 && (t = n.patch.title);
83
+ for (let n of w.getState().outbox) n.type === "update" && n.convKey === e && n.patch.title !== void 0 && (t = n.patch.title);
83
84
  return t;
84
- }, pt = (e, t) => ft(e) === void 0 ? t : void 0, mt = () => {
85
- if (M) return M;
86
- if (S.isBoundToActiveProfile()) return Promise.resolve(!0);
87
- if (S.heldByNewerBuild() || S.activeProfileKey() === null) return Promise.resolve(!1);
88
- D.getState().noteUnsavedDelete(void 0);
89
- let e = W(S.rebind().then(() => S.isBoundToActiveProfile(), () => !1));
90
- return M = e, e.then(() => {
91
- M === e && (M = null);
85
+ }, mt = (e, t) => pt(e) === void 0 ? t : void 0, ht = () => {
86
+ if (j) return j;
87
+ if (x.isBoundToActiveProfile()) return Promise.resolve(!0);
88
+ if (x.heldByNewerBuild() || x.activeProfileKey() === null) return Promise.resolve(!1);
89
+ E.getState().noteUnsavedDelete(void 0);
90
+ let e = W(x.rebind().then(() => x.isBoundToActiveProfile(), () => !1));
91
+ return j = e, e.then(() => {
92
+ j === e && (j = null);
92
93
  }), e;
93
- }, ht = (e) => {
94
+ }, gt = (e) => {
94
95
  let t = e ? _(e) : null, n = t !== V();
95
- j = e, D.getState().setHistoryScope(A, A === null ? null : t), !(!n || A === null) && (Ge = !1, ut("auth"), Ze = 0, Qe = -Infinity, $e = null, I = null, P = null, it = -Infinity, L.clear(), W(mt().then((t) => {
96
- !t || j !== e || (gt(), _t(), $("scope"), Q());
96
+ A = e, E.getState().setHistoryScope(k, k === null ? null : t), !(!n || k === null) && (qe = !1, dt("auth"), $e = 0, et = -Infinity, N = null, I = null, P = null, at = -Infinity, L.clear(), W(ht().then((t) => {
97
+ !t || A !== e || (_t(), vt(), $("scope"), Q());
97
98
  })));
98
99
  }, X = () => {
99
- if (A === null) return;
100
- let e = oe(He(), Ue(), A);
100
+ if (k === null) return;
101
+ let e = se(We(), Ge(), k);
101
102
  if ((e ? _(e) : null) !== V()) {
102
- ht(e);
103
+ gt(e);
103
104
  return;
104
105
  }
105
- let t = S.activeProfileKey();
106
- if (t === null || t === S.boundKey()) {
107
- gt();
106
+ let t = x.activeProfileKey();
107
+ if (t === null || t === x.boundKey()) {
108
+ _t();
108
109
  return;
109
110
  }
110
- W(mt().then((e) => {
111
- e && (_t(), gt(), $("bind"), Q());
111
+ W(ht().then((e) => {
112
+ e && (vt(), _t(), $("bind"), Q());
112
113
  }));
113
114
  };
114
- function gt() {
115
+ function _t() {
115
116
  let e = V();
116
117
  if (e === null) return;
117
- let t = E.getState(), n = t.conversations.find((e) => e.id === t.activeConversationId);
118
- !n?.sync || b(n.sync) === e || Y(n.id) || t.setActiveConversation(null);
118
+ let t = T.getState(), n = t.conversations.find((e) => e.id === t.activeConversationId);
119
+ !n?.sync || y(n.sync) === e || Y(n.id) || t.setActiveConversation(null);
119
120
  }
120
- function _t() {
121
- if (!S.isBoundToActiveProfile()) return;
122
- let e = T.getState().tombstones, t = D.getState().olderHeaders;
123
- t && Object.keys(t.headers).some((t) => t in e) && D.getState().setOlderHeaders({
121
+ function vt() {
122
+ if (!x.isBoundToActiveProfile()) return;
123
+ let e = w.getState().tombstones, t = E.getState().olderHeaders;
124
+ t && Object.keys(t.headers).some((t) => t in e) && E.getState().setOlderHeaders({
124
125
  ...t,
125
126
  headers: Object.fromEntries(Object.entries(t.headers).filter(([t]) => !(t in e)))
126
127
  }), F && Object.keys(F.headers).some((t) => t in e) && (F = {
127
128
  gen: F.gen,
128
129
  headers: Object.fromEntries(Object.entries(F.headers).filter(([t]) => !(t in e)))
129
130
  });
130
- let n = E.getState(), r = n.conversations.filter((t) => {
131
+ let n = T.getState(), r = n.conversations.filter((t) => {
131
132
  let n = e[t.id];
132
- return t.sync !== void 0 && n !== void 0 && b(t.sync) === n.scopeKey;
133
+ return t.sync !== void 0 && n !== void 0 && y(t.sync) === n.scopeKey;
133
134
  }).map((e) => e.id);
134
135
  if (r.length === 0) return;
135
136
  let i = n.activeConversationId;
136
137
  n.removeConversationsSilently(r);
137
- for (let e of r) D.getState().noteRemoteDelete({
138
+ for (let e of r) E.getState().noteRemoteDelete({
138
139
  conversationId: e,
139
140
  wasActive: e === i,
140
141
  at: B()
141
142
  });
142
143
  }
143
- function vt(e, t, n) {
144
- let r = T.getState();
144
+ function yt(e, t, n) {
145
+ let r = w.getState();
145
146
  r.recordHistoryTombstone(e, {
146
147
  scopeKey: t,
147
148
  at: B(),
148
149
  confirmed: !0,
149
150
  serverId: n
150
- }), r.dropHistoryItems(e, () => !0, B()), _t();
151
+ }), r.dropHistoryItems(e, () => !0, B()), vt();
151
152
  }
152
153
  function Z(e) {
153
- D.getState().setHistoryPaused(ct() ? N : void 0, e.class);
154
+ E.getState().setHistoryPaused(lt() ? M : void 0, e.class);
154
155
  }
155
- function yt(e, t) {
156
- N = Math.max(N, B() + e), D.getState().setHistoryPaused(N, t.class), G("pause", N - B(), () => {
157
- D.getState().setHistoryPaused(void 0, t.class), $("resume"), Q();
156
+ function bt(e, t) {
157
+ M = Math.max(M, B() + e), E.getState().setHistoryPaused(M, t.class), G("pause", M - B(), () => {
158
+ E.getState().setHistoryPaused(void 0, t.class), $("resume"), Q();
158
159
  }, !0);
159
160
  }
160
- function bt(e) {
161
- Ge = !0, Z(e), G("auth", Te, () => {
162
- Ge = !1, $("auth-recheck"), Q();
161
+ function xt(e) {
162
+ qe = !0, Z(e), G("auth", De, () => {
163
+ qe = !1, $("auth-recheck"), Q();
163
164
  }, !0);
164
165
  }
165
- function xt(e) {
166
+ function St(e) {
166
167
  switch (e.class) {
167
- case "schema-unavailable": return yt(ne, e), !0;
168
- case "auth": return bt(e), !0;
168
+ case "schema-unavailable": return bt(re, e), !0;
169
+ case "auth": return xt(e), !0;
169
170
  case "scope-inactive": return Z(e), X(), !0;
170
171
  case "controls-unavailable": return Z(e), !0;
171
172
  default: return Z(e), !1;
172
173
  }
173
174
  }
174
- let St = (e) => e.product === A && He() === e.actorId, Ct = (e, t, n, r) => {
175
- if (A === null) return;
175
+ let Ct = (e) => e.product === k && We() === e.actorId, wt = (e, t, n, r) => {
176
+ if (k === null) return;
176
177
  let i = J(e), a = i?.sync;
177
- if (!i || !a || a.origin !== "created" && a.origin !== "remote" || !St(a)) return;
178
+ if (!i || !a || a.origin !== "created" && a.origin !== "remote" || !Ct(a)) return;
178
179
  if (r !== a.workspaceId) {
179
- E.getState().patchConversationSync(e, (e) => ({
180
+ T.getState().patchConversationSync(e, (e) => ({
180
181
  ...e,
181
182
  blocked: "scope"
182
183
  }));
183
184
  return;
184
185
  }
185
186
  let o = t.map((e) => i.messages.find((t) => t.id === e));
186
- if (o.length === 0 || !fe(e)) return;
187
+ if (o.length === 0 || !me(e)) return;
187
188
  let s = o.filter((e) => e !== void 0);
188
189
  if (s.length !== o.length) return;
189
- let c = pe(s, {
190
+ let c = he(s, {
190
191
  productId: a.product,
191
192
  clientConversationId: e,
192
193
  kind: n
193
194
  });
194
- if (!de(n, c)) {
195
- O("a committed turn does not have the shape the server stores; kept on this device", {
195
+ if (!pe(n, c)) {
196
+ D("a committed turn does not have the shape the server stores; kept on this device", {
196
197
  kind: n,
197
198
  roles: c.map((e) => e.role)
198
199
  });
@@ -201,43 +202,43 @@ function T(g) {
201
202
  let l = {
202
203
  id: `save:${e}:${t.join("+")}`,
203
204
  type: "save",
204
- scopeKey: b(a),
205
+ scopeKey: y(a),
205
206
  convKey: e,
206
207
  kind: n,
207
208
  entries: c,
208
209
  attempts: 0
209
210
  }, u = () => {
210
- if (!S.isBoundToActiveProfile() || !St(a)) return;
211
- let n = T.getState();
212
- e in n.tombstones || (n.enqueueHistoryItem(l), T.getState().outbox.some((e) => e.id === l.id) && (E.getState().markHistoryState(e, t, "pending"), Q()));
211
+ if (!x.isBoundToActiveProfile() || !Ct(a)) return;
212
+ let n = w.getState();
213
+ e in n.tombstones || (n.enqueueHistoryItem(l), w.getState().outbox.some((e) => e.id === l.id) && (T.getState().markHistoryState(e, t, "pending"), Q()));
213
214
  }, d = () => {
214
- lt() ? u() : W(mt().then((e) => e ? u() : void 0));
215
- }, f = E.getState().processingByConversationId[e];
215
+ ut() ? u() : W(ht().then((e) => e ? u() : void 0));
216
+ }, f = T.getState().processingByConversationId[e];
216
217
  if (n === "NOTE" && p(f?.status)) {
217
218
  R.set(e, [...R.get(e) ?? [], d]);
218
219
  return;
219
220
  }
220
221
  d();
221
222
  };
222
- function wt(e) {
223
+ function Tt(e) {
223
224
  for (let [t, n] of [...R]) p(e.processingByConversationId[t]?.status) || (R.delete(t), W(Promise.resolve().then(() => {
224
- if (A !== null) for (let e of n) e();
225
+ if (k !== null) for (let e of n) e();
225
226
  })));
226
227
  }
227
- let Tt = (e) => {
228
- let t = E.getState(), n = t.conversations.find((t) => t.id === e), r = n?.sync, i = V();
229
- if (n && !r || A === null || !S.isBoundToActiveProfile()) {
228
+ let Et = (e) => {
229
+ let t = T.getState(), n = t.conversations.find((t) => t.id === e), r = n?.sync, i = V();
230
+ if (n && !r || k === null || !x.isBoundToActiveProfile()) {
230
231
  n && t.deleteConversation(e);
231
232
  return;
232
233
  }
233
- let a = r ? b(r) : i;
234
+ let a = r ? y(r) : i;
234
235
  if (a === null) {
235
236
  n && t.deleteConversation(e);
236
237
  return;
237
238
  }
238
- let o = dt(a, e);
239
+ let o = ft(a, e);
239
240
  if (!n && !o) return;
240
- let s = r?.origin === "legacy" || o?.legacy === !0 || se(e), c = r?.serverId ?? o?.serverId ?? (se(e) ? e.slice(7) : void 0), l = T.getState(), u = B(), d = !s || c ? {
241
+ let s = r?.origin === "legacy" || o?.legacy === !0 || ce(e), c = r?.serverId ?? o?.serverId ?? (ce(e) ? e.slice(7) : void 0), l = w.getState(), u = B(), d = !s || c ? {
241
242
  id: `delete:${e}:${u}`,
242
243
  type: "delete",
243
244
  scopeKey: a,
@@ -246,143 +247,143 @@ function T(g) {
246
247
  ...c ? { serverId: c } : {},
247
248
  attempts: 0
248
249
  } : null;
249
- n && E.getState().deleteConversation(e), l.recordHistoryDelete(e, {
250
+ n && T.getState().deleteConversation(e), l.recordHistoryDelete(e, {
250
251
  scopeKey: a,
251
252
  at: u,
252
253
  confirmed: d === null,
253
254
  ...c ? { serverId: c } : {}
254
- }, d), d && S.persistFailing() && D.getState().noteUnsavedDelete({
255
+ }, d), d && x.persistFailing() && E.getState().noteUnsavedDelete({
255
256
  conversationId: e,
256
257
  at: u
257
258
  }), Q();
258
- }, Et = (e, n) => {
259
- let a = V();
260
- if (A === null || a === null || !j || !S.isBoundToActiveProfile()) return !1;
261
- let o = n.title === void 0 ? { ...n } : {
262
- ...n,
263
- title: i(n.title)
259
+ }, Dt = (e, t) => {
260
+ let r = V();
261
+ if (k === null || r === null || !A || !x.isBoundToActiveProfile()) return !1;
262
+ let o = t.title === void 0 ? { ...t } : {
263
+ ...t,
264
+ title: a(t.title)
264
265
  };
265
- if (!r(o)) return !1;
266
- let s = T.getState();
266
+ if (!i(o)) return !1;
267
+ let s = w.getState();
267
268
  if (e in s.tombstones) return !1;
268
269
  let c = J(e), l = c?.sync;
269
- if (c && !l || l && (b(l) !== a || !St(l))) return !1;
270
- let u = dt(a, e);
270
+ if (c && !l || l && (y(l) !== r || !Ct(l))) return !1;
271
+ let u = ft(r, e);
271
272
  if (!c && (!u || u.gone)) return !1;
272
- let d = l?.origin === "legacy" || u?.legacy === !0 || se(e), f = l?.serverId ?? u?.serverId ?? (se(e) ? e.slice(7) : void 0);
273
+ let d = l?.origin === "legacy" || u?.legacy === !0 || ce(e), f = l?.serverId ?? u?.serverId ?? (ce(e) ? e.slice(7) : void 0);
273
274
  if (d && !f) return !1;
274
- let p = s.outbox.some((t) => t.type === "save" && t.convKey === e && t.scopeKey === a);
275
- if (!d && !f && !u && !p) return !1;
276
- let ee = B(), m = null;
277
- for (let t of s.outbox) t.type === "update" && t.convKey === e && t.scopeKey === a && (m = t);
278
- let te = m && !tt.has(m.id) ? m : null, ne = te ? t(te.patch, o) : o;
279
- nt += 1;
275
+ let ee = s.outbox.some((t) => t.type === "save" && t.convKey === e && t.scopeKey === r);
276
+ if (!d && !f && !u && !ee) return !1;
277
+ let p = B(), m = null;
278
+ for (let t of s.outbox) t.type === "update" && t.convKey === e && t.scopeKey === r && (m = t);
279
+ let te = m && !nt.has(m.id) ? m : null, ne = te ? n(te.patch, o) : o;
280
+ rt += 1;
280
281
  let re = {
281
- id: `update:${e}:${ee}:${nt}`,
282
+ id: `update:${e}:${p}:${rt}`,
282
283
  type: "update",
283
- scopeKey: a,
284
+ scopeKey: r,
284
285
  convKey: e,
285
286
  legacy: d,
286
287
  ...f ? { serverId: f } : {},
287
288
  patch: ne,
288
- at: ee,
289
+ at: p,
289
290
  attempts: 0
290
291
  };
291
- return s.queueHistoryUpdate(re, te?.id ?? null, ee), T.getState().outbox.some((e) => e.id === re.id) ? (o.title !== void 0 && c && E.getState().patchConversationSync(e, Re, { title: o.title }), Q(), !0) : !1;
292
- }, Dt = (e) => e.type === "update" && (!U() || !kt(e)), Ot = (e, t) => T.getState().outbox.find((n) => n.convKey === e && n.scopeKey === t && !Dt(n)), kt = (e) => e.nextAttemptAt === void 0 || e.nextAttemptAt <= B(), Q = () => {
292
+ return s.queueHistoryUpdate(re, te?.id ?? null, p), w.getState().outbox.some((e) => e.id === re.id) ? (o.title !== void 0 && c && T.getState().patchConversationSync(e, Be, { title: o.title }), Q(), !0) : !1;
293
+ }, Ot = (e) => e.type === "update" && (!U() || !At(e)), kt = (e, t) => w.getState().outbox.find((n) => n.convKey === e && n.scopeKey === t && !Ot(n)), At = (e) => e.nextAttemptAt === void 0 || e.nextAttemptAt <= B(), Q = () => {
293
294
  if (!H()) return;
294
- if (Ke) {
295
- qe = !0, Je?.();
295
+ if (Je) {
296
+ Ye = !0, Xe?.();
296
297
  return;
297
298
  }
298
- Ke = !0, qe = !1;
299
+ Je = !0, Ye = !1;
299
300
  let e = V();
300
301
  W((async () => {
301
302
  if (e === null) return;
302
- let t = `bf-assistant-history:${S.boundKey() ?? ""}:${e}`;
303
- if (!Be) {
304
- await At(e);
303
+ let t = `bf-assistant-history:${x.boundKey() ?? ""}:${e}`;
304
+ if (!He) {
305
+ await jt(e);
305
306
  return;
306
307
  }
307
- await Be.request(t, async (t) => {
308
- t ? await At(e) : G("drain", we, Q);
308
+ await He.request(t, async (t) => {
309
+ t ? await jt(e) : G("drain", Ee, Q);
309
310
  });
310
- })().catch((e) => O("the save queue stopped unexpectedly", e)).finally(() => {
311
- Ke = !1, qe && Q();
311
+ })().catch((e) => D("the save queue stopped unexpectedly", e)).finally(() => {
312
+ Je = !1, Ye && Q();
312
313
  }));
313
314
  };
314
- async function At(e) {
315
+ async function jt(e) {
315
316
  let t = /* @__PURE__ */ new Map();
316
317
  for (; !(!H() || V() !== e);) {
317
- qe = !1;
318
+ Ye = !1;
318
319
  let n = null, r = /* @__PURE__ */ new Map();
319
- for (let t of T.getState().outbox) if (!(t.scopeKey !== e || r.has(t.convKey))) {
320
- if (Dt(t)) {
320
+ for (let t of w.getState().outbox) if (!(t.scopeKey !== e || r.has(t.convKey))) {
321
+ if (Ot(t)) {
321
322
  U() && t.nextAttemptAt !== void 0 && (n = n === null ? t.nextAttemptAt : Math.min(n, t.nextAttemptAt));
322
323
  continue;
323
324
  }
324
325
  r.set(t.convKey, t);
325
326
  }
326
327
  for (let [i, a] of r) if (!t.has(i)) {
327
- if (!kt(a)) {
328
+ if (!At(a)) {
328
329
  let e = a.nextAttemptAt ?? B();
329
330
  n = n === null ? e : Math.min(n, e);
330
331
  continue;
331
332
  }
332
- t.size >= Me || t.set(i, jt(i, e).finally(() => {
333
+ t.size >= Pe || t.set(i, Mt(i, e).finally(() => {
333
334
  t.delete(i);
334
335
  }));
335
336
  }
336
337
  if (n !== null && G("drain", n - B(), Q), t.size === 0) break;
337
338
  let i = new Promise((e) => {
338
- Je = e;
339
+ Xe = e;
339
340
  });
340
- await Promise.race([...t.values(), i]), Je = null;
341
+ await Promise.race([...t.values(), i]), Xe = null;
341
342
  }
342
343
  await Promise.all(t.values());
343
344
  }
344
- async function jt(e, t) {
345
+ async function Mt(e, t) {
345
346
  for (;;) {
346
347
  if (!H() || V() !== t) return;
347
- let n = Ot(e, t);
348
- if (!n || !kt(n) || (n.type === "save" ? await Mt(n) : n.type === "delete" ? await Pt(n) : await Ft(n)) === "stop") return;
348
+ let n = kt(e, t);
349
+ if (!n || !At(n) || (n.type === "save" ? await Nt(n) : n.type === "delete" ? await Ft(n) : await It(n)) === "stop") return;
349
350
  }
350
351
  }
351
- async function Mt(e) {
352
- if (e.convKey in T.getState().tombstones) return T.getState().completeHistoryItems([e.id], B()), "next";
353
- let t = j;
352
+ async function Nt(e) {
353
+ if (e.convKey in w.getState().tombstones) return w.getState().completeHistoryItems([e.id], B()), "next";
354
+ let t = A;
354
355
  if (!t || _(t) !== e.scopeKey) return "stop";
355
- let n = S.boundKey(), r;
356
+ let n = x.boundKey(), r;
356
357
  try {
357
- r = await x.save(t, {
358
+ r = await b.save(t, {
358
359
  clientConversationId: e.convKey,
359
360
  kind: e.kind,
360
361
  entries: e.entries
361
362
  });
362
363
  } catch (t) {
363
- return Lt(e, t, n);
364
+ return Rt(e, t, n);
364
365
  }
365
- return Nt(e, r, n), "next";
366
+ return Pt(e, r, n), "next";
366
367
  }
367
- function Nt(e, t, n) {
368
- if (S.boundKey() !== n) return;
369
- let r = T.getState(), i = r.outbox.some((t) => t.id === e.id);
368
+ function Pt(e, t, n) {
369
+ if (x.boundKey() !== n) return;
370
+ let r = w.getState(), i = r.outbox.some((t) => t.id === e.id);
370
371
  if (e.convKey in r.tombstones) {
371
372
  r.completeHistoryItems([e.id], B());
372
373
  return;
373
374
  }
374
375
  if (t.outcome === "CONVERSATION_DELETED") {
375
- vt(e.convKey, e.scopeKey, t.conversation.id), $("deleted");
376
+ yt(e.convKey, e.scopeKey, t.conversation.id), $("deleted");
376
377
  return;
377
378
  }
378
379
  if (r.completeHistoryItems([e.id], B()), !i) return;
379
- t.droppedMetadataKeys.length > 0 && O("the server did not keep some message details", t.droppedMetadataKeys), r.applyHistoryHeaders(e.scopeKey, { [e.convKey]: y(t.conversation) });
380
+ t.droppedMetadataKeys.length > 0 && D("the server did not keep some message details", t.droppedMetadataKeys), r.applyHistoryHeaders(e.scopeKey, { [e.convKey]: v(t.conversation) });
380
381
  let a = J(e.convKey);
381
- if (a?.sync && b(a.sync) === e.scopeKey) {
382
- let n = new Set(ze(e)), r = {};
382
+ if (a?.sync && y(a.sync) === e.scopeKey) {
383
+ let n = new Set(Ve(e)), r = {};
383
384
  for (let e of t.entries) e.clientMessageId && n.has(e.clientMessageId) && e.seq !== null && (r[e.clientMessageId] = e.seq);
384
385
  let i = Object.values(r);
385
- E.getState().markHistoryState(e.convKey, [...n], "saved", r), E.getState().patchConversationSync(e.convKey, (e) => {
386
+ T.getState().markHistoryState(e.convKey, [...n], "saved", r), T.getState().patchConversationSync(e.convKey, (e) => {
386
387
  let n = e.lastSeq ?? 0, r = i.length > 0 && Math.min(...i) === n + 1 ? Math.max(...i) : n;
387
388
  return {
388
389
  ...e,
@@ -391,21 +392,21 @@ function T(g) {
391
392
  lastSeq: r,
392
393
  ...e.blocked === "quota" ? { blocked: void 0 } : {}
393
394
  };
394
- }, { title: pt(e.convKey, t.conversation.title) });
395
+ }, { title: mt(e.convKey, t.conversation.title) });
395
396
  }
396
- G("pull-after-save", Ce, () => $("applied"), !0);
397
+ G("pull-after-save", Te, () => $("applied"), !0);
397
398
  }
398
- async function Pt(e) {
399
- let t = j;
399
+ async function Ft(e) {
400
+ let t = A;
400
401
  if (!t || _(t) !== e.scopeKey) return "stop";
401
- let n = e.legacy && e.serverId ? { conversationId: e.serverId } : { clientConversationId: e.convKey }, r = S.boundKey(), i;
402
+ let n = e.legacy && e.serverId ? { conversationId: e.serverId } : { clientConversationId: e.convKey }, r = x.boundKey(), i;
402
403
  try {
403
- i = await x.remove(t, n);
404
+ i = await b.remove(t, n);
404
405
  } catch (t) {
405
- return Lt(e, t, r);
406
+ return Rt(e, t, r);
406
407
  }
407
- if (S.boundKey() !== r) return "stop";
408
- let a = T.getState();
408
+ if (x.boundKey() !== r) return "stop";
409
+ let a = w.getState();
409
410
  a.completeHistoryItems([e.id], B());
410
411
  let o = i.conversation?.id ?? e.serverId;
411
412
  return a.recordHistoryTombstone(e.convKey, {
@@ -413,38 +414,38 @@ function T(g) {
413
414
  at: B(),
414
415
  confirmed: !0,
415
416
  ...o ? { serverId: o } : {}
416
- }), D.getState().unsavedDelete?.conversationId === e.convKey && D.getState().noteUnsavedDelete(void 0), "next";
417
+ }), E.getState().unsavedDelete?.conversationId === e.convKey && E.getState().noteUnsavedDelete(void 0), "next";
417
418
  }
418
- async function Ft(e) {
419
- if (e.convKey in T.getState().tombstones) return T.getState().completeHistoryItems([e.id], B()), "next";
420
- let t = j;
419
+ async function It(e) {
420
+ if (e.convKey in w.getState().tombstones) return w.getState().completeHistoryItems([e.id], B()), "next";
421
+ let t = A;
421
422
  if (!t || _(t) !== e.scopeKey) return "stop";
422
- let n = e.legacy && e.serverId ? { conversationId: e.serverId } : { clientConversationId: e.convKey }, r = S.boundKey(), i;
423
- tt.add(e.id);
423
+ let n = e.legacy && e.serverId ? { conversationId: e.serverId } : { clientConversationId: e.convKey }, r = x.boundKey(), i;
424
+ nt.add(e.id);
424
425
  try {
425
- i = await x.update(t, n, e.patch);
426
+ i = await b.update(t, n, e.patch);
426
427
  } catch (t) {
427
- if (S.boundKey() !== r) return "stop";
428
- if (t instanceof ee) return U() && T.getState().updateHistoryItem(e.id, (e) => ({
428
+ if (x.boundKey() !== r) return "stop";
429
+ if (t instanceof m) return U() && w.getState().updateHistoryItem(e.id, (e) => ({
429
430
  ...e,
430
- nextAttemptAt: B() + ae
431
+ nextAttemptAt: B() + oe
431
432
  })), "stop";
432
433
  let n = h(t);
433
- return n.class === "not-found" || n.class === "rejected" ? (T.getState().completeHistoryItems([e.id], B()), Z(n), O("the server did not take a conversation change; dropped", n), "next") : Lt(e, t, r);
434
+ return n.class === "not-found" || n.class === "rejected" ? (w.getState().completeHistoryItems([e.id], B()), Z(n), D("the server did not take a conversation change; dropped", n), "next") : Rt(e, t, r);
434
435
  } finally {
435
- tt.delete(e.id);
436
+ nt.delete(e.id);
436
437
  }
437
- return It(e, i, r), "next";
438
+ return Lt(e, i, r), "next";
438
439
  }
439
- function It(e, t, n) {
440
- if (S.boundKey() !== n) return;
441
- let r = T.getState();
440
+ function Lt(e, t, n) {
441
+ if (x.boundKey() !== n) return;
442
+ let r = w.getState();
442
443
  if (e.convKey in r.tombstones) {
443
444
  r.completeHistoryItems([e.id], B());
444
445
  return;
445
446
  }
446
447
  if (t.outcome === "CONVERSATION_DELETED") {
447
- vt(e.convKey, e.scopeKey, t.conversation.id), $("deleted");
448
+ yt(e.convKey, e.scopeKey, t.conversation.id), $("deleted");
448
449
  return;
449
450
  }
450
451
  let i = B();
@@ -453,8 +454,8 @@ function T(g) {
453
454
  ...e.patch.title === void 0 ? {} : { title: e.patch.title },
454
455
  ...e.patch.archived === void 0 ? {} : { archived: e.patch.archived }
455
456
  };
456
- e.patch.pinned === !0 && (t.title !== void 0 || t.archived !== void 0) ? (nt += 1, r.queueHistoryUpdate({
457
- id: `update:${e.convKey}:${i}:${nt}`,
457
+ e.patch.pinned === !0 && (t.title !== void 0 || t.archived !== void 0) ? (rt += 1, r.queueHistoryUpdate({
458
+ id: `update:${e.convKey}:${i}:${rt}`,
458
459
  type: "update",
459
460
  scopeKey: e.scopeKey,
460
461
  convKey: e.convKey,
@@ -463,40 +464,40 @@ function T(g) {
463
464
  patch: t,
464
465
  at: e.at,
465
466
  attempts: 0
466
- }, e.id, i)) : r.completeHistoryItems([e.id], i), D.getState().notePinLimit({
467
+ }, e.id, i)) : r.completeHistoryItems([e.id], i), E.getState().notePinLimit({
467
468
  conversationId: e.convKey,
468
469
  limit: 50,
469
470
  at: i
470
471
  });
471
472
  } else r.completeHistoryItems([e.id], i);
472
- T.getState().applyHistoryHeaders(e.scopeKey, { [e.convKey]: y(t.conversation) });
473
+ w.getState().applyHistoryHeaders(e.scopeKey, { [e.convKey]: v(t.conversation) });
473
474
  let a = J(e.convKey);
474
- a?.sync && b(a.sync) === e.scopeKey && E.getState().patchConversationSync(e.convKey, (e) => ({
475
+ a?.sync && y(a.sync) === e.scopeKey && T.getState().patchConversationSync(e.convKey, (e) => ({
475
476
  ...e,
476
477
  serverId: t.conversation.id,
477
478
  revision: Math.max(e.revision ?? 0, t.conversation.revision)
478
- }), { title: pt(e.convKey, t.conversation.title) }), G("pull-after-save", Ce, () => $("applied"), !0);
479
+ }), { title: mt(e.convKey, t.conversation.title) }), G("pull-after-save", Te, () => $("applied"), !0);
479
480
  }
480
- function Lt(e, t, n) {
481
+ function Rt(e, t, n) {
481
482
  let r = h(t);
482
- if (S.boundKey() !== n) return "stop";
483
- let i = ie(r, e, Ve), a = T.getState();
483
+ if (x.boundKey() !== n) return "stop";
484
+ let i = ae(r, e, Ue), a = w.getState();
484
485
  switch (i.action) {
485
- case "drop": return a.completeHistoryItems([e.id], B()), e.type === "save" && E.getState().patchConversationSync(e.convKey, (e) => ({
486
+ case "drop": return a.completeHistoryItems([e.id], B()), e.type === "save" && T.getState().patchConversationSync(e.convKey, (e) => ({
486
487
  ...e,
487
488
  blocked: "invalid"
488
- })), Z(r), O("the server refused a saved turn; it stays on this device", r), "next";
489
- case "pause": return xt(r), "stop";
489
+ })), Z(r), D("the server refused a saved turn; it stays on this device", r), "next";
490
+ case "pause": return St(r), "stop";
490
491
  case "park": return a.updateHistoryItem(e.id, (e) => ({
491
492
  ...e,
492
493
  attempts: e.attempts + 1,
493
494
  ...e.type === "save" ? { parked: "quota" } : {},
494
- nextAttemptAt: B() + Math.max(i.delayMs, te)
495
- })), e.type === "save" && E.getState().patchConversationSync(e.convKey, (e) => ({
495
+ nextAttemptAt: B() + Math.max(i.delayMs, ne)
496
+ })), e.type === "save" && T.getState().patchConversationSync(e.convKey, (e) => ({
496
497
  ...e,
497
498
  blocked: "quota"
498
499
  })), Z(r), "stop";
499
- case "hold": return xt(r), "stop";
500
+ case "hold": return St(r), "stop";
500
501
  case "retry": return a.updateHistoryItem(e.id, (e) => ({
501
502
  ...e,
502
503
  attempts: e.attempts + 1,
@@ -505,62 +506,62 @@ function T(g) {
505
506
  }
506
507
  }
507
508
  let $ = (e) => {
508
- if (H() && !((e === "focus" || e === "visibility") && B() - Qe < Se)) {
509
- if (Ye) {
510
- Xe = !0;
509
+ if (H() && !((e === "focus" || e === "visibility") && B() - et < we)) {
510
+ if (Ze) {
511
+ Qe = !0;
511
512
  return;
512
513
  }
513
- Ye = !0, Xe = !1, Qe = B(), W(Rt().catch((e) => O("a history pull stopped unexpectedly", e)).finally(() => {
514
- Ye = !1, A !== null && !U() && G("controls-recheck", ae, () => $("controls-recheck")), Xe && $("again");
514
+ Ze = !0, Qe = !1, et = B(), W(zt().catch((e) => D("a history pull stopped unexpectedly", e)).finally(() => {
515
+ Ze = !1, k !== null && !U() && G("controls-recheck", oe, () => $("controls-recheck")), Qe && $("again");
515
516
  }));
516
517
  }
517
518
  };
518
- async function Rt() {
519
- let e = j, t = K();
519
+ async function zt() {
520
+ let e = A, t = K();
520
521
  if (!e || !t) return;
521
- Vt(t.scopeKey);
522
+ Ht(t.scopeKey);
522
523
  let n = !1;
523
- for (let r = 0; r < Oe; r += 1) {
524
- let i = T.getState().scopes[t.scopeKey], a = i?.gen ?? 0, o;
524
+ for (let r = 0; r < Ae; r += 1) {
525
+ let i = w.getState().scopes[t.scopeKey], a = i?.gen ?? 0, o;
525
526
  try {
526
- o = await x.changes(e, {
527
- first: De,
527
+ o = await b.changes(e, {
528
+ first: ke,
528
529
  after: i?.cursor ?? null
529
530
  });
530
531
  } catch (e) {
531
- q(t) && Wt(e);
532
+ q(t) && Gt(e);
532
533
  return;
533
534
  }
534
535
  if (!q(t)) return;
535
- if (Ze = 0, o.resetRequired && !Bt(i)) {
536
+ if ($e = 0, o.resetRequired && !Vt(i)) {
536
537
  if (n) return;
537
538
  n = !0;
538
- let e = T.getState().resetHistoryScope(t.scopeKey, B());
539
+ let e = w.getState().resetHistoryScope(t.scopeKey, B());
539
540
  I = {
540
541
  scopeKey: t.scopeKey,
541
542
  gen: e,
542
- candidates: Ht(t.scopeKey),
543
+ candidates: Ut(t.scopeKey),
543
544
  seen: /* @__PURE__ */ new Set()
544
545
  }, r = -1;
545
546
  continue;
546
547
  }
547
- if (!zt(t.scopeKey, a, o)) return;
548
+ if (!Bt(t.scopeKey, a, o)) return;
548
549
  if (!o.pageInfo.hasNextPage) {
549
- Ut(t.scopeKey), cn(), Kt(t);
550
+ Wt(t.scopeKey), ln(), qt(t);
550
551
  return;
551
552
  }
552
553
  }
553
554
  G("pull-more", 0, () => $("more"));
554
555
  }
555
- function zt(e, t, n) {
556
- let r = T.getState(), i = {}, a = {}, o = [], s = r.scopes[e]?.cursorRev ?? 0;
556
+ function Bt(e, t, n) {
557
+ let r = w.getState(), i = {}, a = {}, o = [], s = r.scopes[e]?.cursorRev ?? 0;
557
558
  for (let t of n.nodes) {
558
- let n = v(t);
559
+ let n = le(t);
559
560
  if (s = Math.max(s, t.revision), t.deleted) {
560
561
  a[n] = { serverId: t.id };
561
562
  continue;
562
563
  }
563
- I?.scopeKey === e && I.seen.add(n), !(n in r.tombstones) && (i[n] = y(t), o.push({
564
+ I?.scopeKey === e && I.seen.add(n), !(n in r.tombstones) && (i[n] = v(t), o.push({
564
565
  convKey: n,
565
566
  serverId: t.id,
566
567
  revision: t.revision,
@@ -576,26 +577,26 @@ function T(g) {
576
577
  last: !n.pageInfo.hasNextPage,
577
578
  at: B()
578
579
  })) return !1;
579
- for (let e of Object.keys(a)) T.getState().dropHistoryItems(e, (e) => e.type === "delete", B());
580
- _t();
581
- let c = E.getState();
580
+ for (let e of Object.keys(a)) w.getState().dropHistoryItems(e, (e) => e.type === "delete", B());
581
+ vt();
582
+ let c = T.getState();
582
583
  for (let t of o) {
583
584
  let n = c.conversations.find((e) => e.id === t.convKey);
584
- !n?.sync || b(n.sync) !== e || E.getState().patchConversationSync(t.convKey, (e) => ({
585
+ !n?.sync || y(n.sync) !== e || T.getState().patchConversationSync(t.convKey, (e) => ({
585
586
  ...e,
586
587
  serverId: t.serverId,
587
588
  revision: Math.max(e.revision ?? 0, t.revision)
588
- }), { title: pt(t.convKey, t.title) });
589
+ }), { title: mt(t.convKey, t.title) });
589
590
  }
590
591
  return !0;
591
592
  }
592
- function Bt(e) {
593
+ function Vt(e) {
593
594
  if (e?.resetAt === void 0) return !1;
594
595
  let t = B() - e.resetAt;
595
596
  return t >= 0 && t < 864e5;
596
597
  }
597
- function Vt(e) {
598
- let t = T.getState().scopes[e], n = t?.gen ?? 0;
598
+ function Ht(e) {
599
+ let t = w.getState().scopes[e], n = t?.gen ?? 0;
599
600
  if (t?.rescanning && !(I?.scopeKey === e && I.gen === n)) {
600
601
  if (t.hasOlderHeaders) {
601
602
  I = null;
@@ -604,243 +605,243 @@ function T(g) {
604
605
  I = {
605
606
  scopeKey: e,
606
607
  gen: n,
607
- candidates: Ht(e),
608
+ candidates: Ut(e),
608
609
  seen: new Set(Object.keys(t.headers))
609
610
  };
610
611
  }
611
612
  }
612
- function Ht(e) {
613
- return new Set(E.getState().conversations.filter((t) => t.sync !== void 0 && !!t.sync.serverId && b(t.sync) === e).map((e) => e.id));
614
- }
615
613
  function Ut(e) {
614
+ return new Set(T.getState().conversations.filter((t) => t.sync !== void 0 && !!t.sync.serverId && y(t.sync) === e).map((e) => e.id));
615
+ }
616
+ function Wt(e) {
616
617
  let t = I;
617
- if (!t || t.scopeKey !== e || (I = null, (T.getState().scopes[e]?.gen ?? 0) !== t.gen)) return;
618
- let n = new Set(T.getState().outbox.map((e) => e.convKey)), r = E.getState(), i = r.conversations.filter((r) => t.candidates.has(r.id) && r.sync !== void 0 && b(r.sync) === e && !t.seen.has(r.id) && !n.has(r.id) && !Y(r.id)).map((e) => e.id);
618
+ if (!t || t.scopeKey !== e || (I = null, (w.getState().scopes[e]?.gen ?? 0) !== t.gen)) return;
619
+ let n = new Set(w.getState().outbox.map((e) => e.convKey)), r = T.getState(), i = r.conversations.filter((r) => t.candidates.has(r.id) && r.sync !== void 0 && y(r.sync) === e && !t.seen.has(r.id) && !n.has(r.id) && !Y(r.id)).map((e) => e.id);
619
620
  if (i.length === 0) return;
620
621
  let a = r.activeConversationId;
621
- r.removeConversationsSilently(i), a !== null && i.includes(a) && D.getState().noteRemoteDelete({
622
+ r.removeConversationsSilently(i), a !== null && i.includes(a) && E.getState().noteRemoteDelete({
622
623
  conversationId: a,
623
624
  wasActive: !0,
624
625
  at: B()
625
626
  });
626
627
  }
627
- function Wt(e) {
628
+ function Gt(e) {
628
629
  let t = h(e);
629
630
  if (t.class === "rejected") {
630
- yt(ne, t);
631
+ bt(re, t);
631
632
  return;
632
633
  }
633
- xt(t) || (Ze += 1, G("pull-retry", Math.max(re(Ze, Ve), t.retryAfterMs ?? 0), () => $("retry")));
634
- }
635
- function Gt(e) {
636
- let t = T.getState().scopes[e]?.headers ?? {};
637
- return Object.values(t).some((e) => !e.gone && !be(e));
634
+ St(t) || ($e += 1, G("pull-retry", Math.max(ie($e, Ue), t.retryAfterMs ?? 0), () => $("retry")));
638
635
  }
639
636
  function Kt(e) {
637
+ let t = w.getState().scopes[e]?.headers ?? {};
638
+ return Object.values(t).some((e) => !e.gone && !Se(e));
639
+ }
640
+ function qt(e) {
640
641
  if (P !== null || !U() || !q(e)) return;
641
- let t = T.getState().scopes[e.scopeKey]?.gen ?? 0;
642
- if (!Gt(e.scopeKey)) {
643
- T.getState().scopes[e.scopeKey] && T.getState().markHistoryScopeControls(e.scopeKey, t);
642
+ let t = w.getState().scopes[e.scopeKey]?.gen ?? 0;
643
+ if (!Kt(e.scopeKey)) {
644
+ w.getState().scopes[e.scopeKey] && w.getState().markHistoryScopeControls(e.scopeKey, t);
644
645
  return;
645
646
  }
646
- B() - it < Ne || (it = B(), P = {
647
+ B() - at < Fe || (at = B(), P = {
647
648
  gen: e,
648
649
  storeGen: t,
649
650
  cursor: null
650
- }, qt());
651
+ }, Jt());
651
652
  }
652
- function qt() {
653
- let e = P, t = j;
653
+ function Jt() {
654
+ let e = P, t = A;
654
655
  if (!e || !t || !H() || !q(e.gen)) {
655
656
  P = null;
656
657
  return;
657
658
  }
658
659
  let n = e.gen.scopeKey;
659
660
  W((async () => {
660
- for (let r = 0; r < Oe; r += 1) {
661
- let r = await x.changes(t, {
662
- first: De,
661
+ for (let r = 0; r < Ae; r += 1) {
662
+ let r = await b.changes(t, {
663
+ first: ke,
663
664
  after: e.cursor
664
665
  });
665
666
  if (P !== e || !q(e.gen)) return;
666
- if (!U() || (T.getState().scopes[n]?.gen ?? 0) !== e.storeGen) {
667
+ if (!U() || (w.getState().scopes[n]?.gen ?? 0) !== e.storeGen) {
667
668
  P = null;
668
669
  return;
669
670
  }
670
- let i = T.getState().tombstones, a = {};
671
+ let i = w.getState().tombstones, a = {};
671
672
  for (let e of r.nodes) {
672
- let t = v(e);
673
- e.deleted || t in i || (a[t] = y(e));
673
+ let t = le(e);
674
+ e.deleted || t in i || (a[t] = v(e));
674
675
  }
675
- if (Object.keys(a).length > 0 && T.getState().applyHistoryHeaders(n, a), e.cursor = r.pageInfo.endCursor ?? e.cursor, !r.pageInfo.hasNextPage) {
676
- P = null, T.getState().markHistoryScopeControls(n, e.storeGen), cn();
676
+ if (Object.keys(a).length > 0 && w.getState().applyHistoryHeaders(n, a), e.cursor = r.pageInfo.endCursor ?? e.cursor, !r.pageInfo.hasNextPage) {
677
+ P = null, w.getState().markHistoryScopeControls(n, e.storeGen), ln();
677
678
  return;
678
679
  }
679
680
  }
680
- G("controls-repull", 0, qt, !0);
681
+ G("controls-repull", 0, Jt, !0);
681
682
  })().catch((t) => {
682
- P === e && (P = null), q(e.gen) && Wt(t);
683
+ P === e && (P = null), q(e.gen) && Gt(t);
683
684
  }));
684
685
  }
685
- function Jt() {
686
- let e = j, t = K();
687
- rt || !H() || !e || !t || !U() || (rt = !0, W(x.conversations(e, {
686
+ function Yt() {
687
+ let e = A, t = K();
688
+ it || !H() || !e || !t || !U() || (it = !0, W(b.conversations(e, {
688
689
  first: 50,
689
690
  after: null,
690
691
  filter: { pinned: !0 }
691
692
  }).then((e) => {
692
693
  if (!q(t)) return;
693
- let n = T.getState().tombstones, r = {};
694
+ let n = w.getState().tombstones, r = {};
694
695
  for (let t of e.nodes) {
695
- let e = v(t);
696
- t.deleted || e in n || (r[e] = y(t));
696
+ let e = le(t);
697
+ t.deleted || e in n || (r[e] = v(t));
697
698
  }
698
- Object.keys(r).length > 0 && T.getState().applyHistoryHeaders(t.scopeKey, r);
699
+ Object.keys(r).length > 0 && w.getState().applyHistoryHeaders(t.scopeKey, r);
699
700
  }).catch((e) => {
700
- q(t) && xt(h(e));
701
+ q(t) && St(h(e));
701
702
  }).finally(() => {
702
- rt = !1;
703
+ it = !1;
703
704
  })));
704
705
  }
705
- function Yt(e) {
706
- if (D.getState().setControlsAvailable(e), A === null) return;
706
+ function Xt(e) {
707
+ if (E.getState().setControlsAvailable(e), k === null) return;
707
708
  if (!e) {
708
- G("controls-recheck", ae, () => $("controls-recheck"));
709
+ G("controls-recheck", oe, () => $("controls-recheck"));
709
710
  return;
710
711
  }
711
- ut("controls-recheck"), Q();
712
+ dt("controls-recheck"), Q();
712
713
  let t = K();
713
- t && Kt(t);
714
+ t && qt(t);
714
715
  }
715
- let Xt = (e) => {
716
- let t = j, r = K();
717
- if (!H() || !t || !r || et) return;
718
- et = !0;
719
- let i = e && U() ? e : void 0, a = n(i);
716
+ let Zt = (e) => {
717
+ let t = A, n = K();
718
+ if (!H() || !t || !n || tt) return;
719
+ tt = !0;
720
+ let i = e && U() ? e : void 0, a = r(i);
720
721
  W((async () => {
721
- let e = D.getState().olderHeaders, n = e?.scopeKey === r.scopeKey ? { ...e.headers } : {}, o = $e?.scopeKey === r.scopeKey && $e.filterKey === a ? $e.cursor : null, s = !0;
722
- for (let e = 0; e < Ae && s; e += 1) {
723
- let e = await x.conversations(t, {
724
- first: ke,
722
+ let e = E.getState().olderHeaders, r = e?.scopeKey === n.scopeKey ? { ...e.headers } : {}, o = N?.scopeKey === n.scopeKey && N.filterKey === a ? N.cursor : null, s = !0;
723
+ for (let e = 0; e < Me && s; e += 1) {
724
+ let e = await b.conversations(t, {
725
+ first: je,
725
726
  after: o,
726
727
  ...i ? { filter: i } : {}
727
728
  });
728
- if (!q(r)) return;
729
- let c = T.getState(), l = c.scopes[r.scopeKey]?.headers ?? {}, u = 0;
729
+ if (!q(n)) return;
730
+ let c = w.getState(), l = c.scopes[n.scopeKey]?.headers ?? {}, u = 0;
730
731
  for (let t of e.nodes) {
731
- let e = v(t);
732
- t.deleted || e in c.tombstones || e in l || e in n || (n[e] = y(t), u += 1);
732
+ let e = le(t);
733
+ t.deleted || e in c.tombstones || e in l || e in r || (r[e] = v(t), u += 1);
733
734
  }
734
- if (o = e.pageInfo.endCursor ?? o, s = e.pageInfo.hasNextPage, $e = {
735
- scopeKey: r.scopeKey,
735
+ if (o = e.pageInfo.endCursor ?? o, s = e.pageInfo.hasNextPage, N = {
736
+ scopeKey: n.scopeKey,
736
737
  filterKey: a,
737
738
  cursor: o
738
739
  }, u > 0) break;
739
740
  }
740
- let c = T.getState().tombstones, l = Object.fromEntries(Object.entries(n).filter(([e]) => !(e in c)));
741
- D.getState().setOlderHeaders({
742
- scopeKey: r.scopeKey,
741
+ let c = w.getState().tombstones, l = Object.fromEntries(Object.entries(r).filter(([e]) => !(e in c)));
742
+ E.getState().setOlderHeaders({
743
+ scopeKey: n.scopeKey,
743
744
  headers: l,
744
745
  hasMore: s,
745
746
  filterKey: a
746
747
  });
747
748
  })().catch((e) => {
748
- q(r) && Wt(e);
749
+ q(n) && Gt(e);
749
750
  }).finally(() => {
750
- et = !1;
751
+ tt = !1;
751
752
  }));
752
- }, Zt = async (e) => {
753
- let t = j, n = K();
754
- if (!H() || !t || !n) throw new m();
755
- let r = await x.conversations(t, {
753
+ }, Qt = async (e) => {
754
+ let n = A, r = K();
755
+ if (!H() || !n || !r) throw new te();
756
+ let i = await b.conversations(n, {
756
757
  first: 50,
757
758
  after: e.after,
758
759
  query: e.query,
759
760
  ...e.filter ? { filter: e.filter } : {}
760
761
  }, e.signal ? { signal: e.signal } : {});
761
- if (e.signal?.throwIfAborted(), !q(n)) throw new m();
762
- let i = T.getState().tombstones, a = [], o = {};
763
- for (let e of r.nodes) {
764
- let t = v(e);
765
- if (e.deleted || t in i) continue;
766
- let r = y(e);
767
- a.push({
762
+ if (t(e.signal), !q(r)) throw new te();
763
+ let a = w.getState().tombstones, o = [], s = {};
764
+ for (let e of i.nodes) {
765
+ let t = le(e);
766
+ if (e.deleted || t in a) continue;
767
+ let n = v(e);
768
+ o.push({
768
769
  convKey: t,
769
- header: r,
770
- scopeKey: n.scopeKey
771
- }), o[t] = r;
770
+ header: n,
771
+ scopeKey: r.scopeKey
772
+ }), s[t] = n;
772
773
  }
773
774
  return F = {
774
- gen: n,
775
+ gen: r,
775
776
  headers: {
776
777
  ...e.after !== null && F && q(F.gen) ? F.headers : {},
777
- ...o
778
+ ...s
778
779
  }
779
780
  }, {
780
- hits: a,
781
- hasMore: r.pageInfo.hasNextPage,
782
- endCursor: r.pageInfo.endCursor
781
+ hits: o,
782
+ hasMore: i.pageInfo.hasNextPage,
783
+ endCursor: i.pageInfo.endCursor
783
784
  };
784
- }, Qt = () => {
785
+ }, $t = () => {
785
786
  F = null;
786
- }, $t = (e, t = {}) => {
787
- let n = E.getState(), r = n.conversations.find((t) => t.id === e), i = V();
788
- if (A === null || i === null || !j) {
787
+ }, en = (e, t = {}) => {
788
+ let n = T.getState(), r = n.conversations.find((t) => t.id === e), i = V();
789
+ if (k === null || i === null || !A) {
789
790
  r && n.setActiveConversation(e);
790
791
  return;
791
792
  }
792
- if (!(S.isBoundToActiveProfile() && e in T.getState().tombstones)) {
793
+ if (!(x.isBoundToActiveProfile() && e in w.getState().tombstones)) {
793
794
  if (!r) {
794
- let a = dt(i, e);
795
+ let a = ft(i, e);
795
796
  if (!a || a.gone) return;
796
- T.getState().applyHistoryHeaders(i, { [e]: a });
797
- let o = ft(e);
798
- if (n.upsertRemoteConversation(ce(e, o === void 0 ? a : {
797
+ w.getState().applyHistoryHeaders(i, { [e]: a });
798
+ let o = pt(e);
799
+ if (n.upsertRemoteConversation(ue(e, o === void 0 ? a : {
799
800
  ...a,
800
801
  title: o
801
- }, j, {
802
+ }, A, {
802
803
  modes: t.modes ?? [],
803
804
  autoRouting: n.autoRouting,
804
805
  openedAt: new Date(B()).toISOString()
805
806
  })), r = J(e), !r) return;
806
807
  }
807
- r.sync && b(r.sync) !== i || (E.getState().setActiveConversation(e), r.sync && (E.getState().patchConversationSync(e, (e) => ({
808
+ r.sync && y(r.sync) !== i || (T.getState().setActiveConversation(e), r.sync && (T.getState().patchConversationSync(e, (e) => ({
808
809
  ...e,
809
810
  openedAt: new Date(B()).toISOString()
810
- })), en(e, "open")), cn());
811
+ })), tn(e, "open")), ln());
811
812
  }
812
- }, en = (e, t) => {
813
- let n = j, r = V();
814
- if (A === null || !n || r === null || at.has(e) || S.heldByNewerBuild()) return;
813
+ }, tn = (e, t) => {
814
+ let n = A, r = V();
815
+ if (k === null || !n || r === null || ot.has(e) || x.heldByNewerBuild()) return;
815
816
  if (!H()) {
816
- an(e, t);
817
+ on(e, t);
817
818
  return;
818
819
  }
819
820
  let i = J(e)?.sync;
820
- if (!i || b(i) !== r || e in T.getState().tombstones) return;
821
+ if (!i || y(i) !== r || e in w.getState().tombstones) return;
821
822
  if (Y(e)) {
822
- an(e, t);
823
+ on(e, t);
823
824
  return;
824
825
  }
825
- let a = dt(r, e), o = t === "earlier" ? he(i) : ge(i, a ? a.lastMessageSeq : null);
826
+ let a = ft(r, e), o = t === "earlier" ? _e(i) : ve(i, a ? a.lastMessageSeq : null);
826
827
  if (!o) return;
827
828
  let s = K();
828
- s && (at.add(e), D.getState().setConversationLoading(e, !0), D.getState().setConversationLoadError(e, !1), W(tn(e, n, i.origin === "legacy" ? { conversationId: i.serverId ?? e.slice(7) } : { clientConversationId: e }, o, s, t).catch((t) => rn(e, i, t, s)).finally(() => {
829
- at.delete(e), q(s) && D.getState().setConversationLoading(e, !1);
829
+ s && (ot.add(e), E.getState().setConversationLoading(e, !0), E.getState().setConversationLoadError(e, !1), W(nn(e, n, i.origin === "legacy" ? { conversationId: i.serverId ?? e.slice(7) } : { clientConversationId: e }, o, s, t).catch((t) => an(e, i, t, s)).finally(() => {
830
+ ot.delete(e), q(s) && E.getState().setConversationLoading(e, !1);
830
831
  })));
831
832
  };
832
- async function tn(e, t, n, r, i, a) {
833
+ async function nn(e, t, n, r, i, a) {
833
834
  let o = r.paging;
834
- for (let s = 0; s < je; s += 1) {
835
- let s = await x.entries(t, n, o);
835
+ for (let s = 0; s < Ne; s += 1) {
836
+ let s = await b.entries(t, n, o);
836
837
  if (!q(i)) return;
837
838
  if (s.conversation.deleted) {
838
- vt(e, i.scopeKey, s.conversation.id);
839
+ yt(e, i.scopeKey, s.conversation.id);
839
840
  return;
840
841
  }
841
- let c = nn(e, i.scopeKey, s, r);
842
+ let c = rn(e, i.scopeKey, s, r);
842
843
  if (c === "deferred") {
843
- an(e, a);
844
+ on(e, a);
844
845
  return;
845
846
  }
846
847
  if (c !== "applied" || r.kind !== "catch-up" || !s.pageInfo.hasNextPage) return;
@@ -852,172 +853,172 @@ function T(g) {
852
853
  };
853
854
  }
854
855
  }
855
- function nn(e, t, n, r) {
856
- if (e in T.getState().tombstones) return "skipped";
856
+ function rn(e, t, n, r) {
857
+ if (e in w.getState().tombstones) return "skipped";
857
858
  let i = J(e), a = i?.sync;
858
- if (!i || !a || b(a) !== t) return "skipped";
859
+ if (!i || !a || y(a) !== t) return "skipped";
859
860
  if (Y(e)) return "deferred";
860
- T.getState().applyHistoryHeaders(t, { [e]: y(n.conversation) });
861
- let o = n.nodes.map(ue), { messages: s, syncPatch: c } = me(a, i.messages, o, n, r);
862
- return E.getState().applyHistoryEntries(e, s, c), "applied";
861
+ w.getState().applyHistoryHeaders(t, { [e]: v(n.conversation) });
862
+ let o = n.nodes.map(fe), { messages: s, syncPatch: c } = ge(a, i.messages, o, n, r);
863
+ return T.getState().applyHistoryEntries(e, s, c), "applied";
863
864
  }
864
- function rn(e, t, n, r) {
865
+ function an(e, t, n, r) {
865
866
  if (!q(r)) return;
866
867
  let i = h(n);
867
868
  if (i.class === "not-found") {
868
869
  if (t.origin === "created") return;
869
- T.getState().markHistoryHeaderGone(r.scopeKey, e), D.getState().setConversationLoadError(e, !0), O("the server does not have a conversation the list showed", e);
870
+ w.getState().markHistoryHeaderGone(r.scopeKey, e), E.getState().setConversationLoadError(e, !0), D("the server does not have a conversation the list showed", e);
870
871
  return;
871
872
  }
872
- D.getState().setConversationLoadError(e, !0), i.class === "rejected" ? yt(ne, i) : xt(i);
873
+ E.getState().setConversationLoadError(e, !0), i.class === "rejected" ? bt(re, i) : St(i);
873
874
  }
874
- function an(e, t) {
875
- L.get(e) !== "open" && L.set(e, t), G("deferred-loads", Ee, on);
875
+ function on(e, t) {
876
+ L.get(e) !== "open" && L.set(e, t), G("deferred-loads", Oe, sn);
876
877
  }
877
- function on() {
878
+ function sn() {
878
879
  if (!H()) {
879
- L.size > 0 && A !== null && G("deferred-loads", Ee, on);
880
+ L.size > 0 && k !== null && G("deferred-loads", Oe, sn);
880
881
  return;
881
882
  }
882
- for (let [e, t] of [...L]) Y(e) || (L.delete(e), en(e, t));
883
- L.size > 0 && G("deferred-loads", Ee, on);
883
+ for (let [e, t] of [...L]) Y(e) || (L.delete(e), tn(e, t));
884
+ L.size > 0 && G("deferred-loads", Oe, sn);
884
885
  }
885
- function sn(e) {
886
- if (!S.isBoundToActiveProfile()) return [];
887
- let t = T.getState(), n = new Set(t.outbox.map((e) => e.convKey)), r = E.getState(), i = le({
886
+ function cn(e) {
887
+ if (!x.isBoundToActiveProfile()) return [];
888
+ let t = w.getState(), n = new Set(t.outbox.map((e) => e.convKey)), r = T.getState(), i = de({
888
889
  conversations: r.conversations,
889
890
  activeConversationId: r.activeConversationId,
890
891
  max: e,
891
892
  isProtected: (e) => {
892
893
  if (n.has(e.id) || Y(e.id) || !e.sync) return !0;
893
- let r = t.scopes[b(e.sync)]?.headers[e.id];
894
+ let r = t.scopes[y(e.sync)]?.headers[e.id];
894
895
  return !r || r.gone === !0;
895
896
  }
896
897
  });
897
898
  return i.length > 0 && r.evictConversations(i), i;
898
899
  }
899
- function cn() {
900
- sn(25);
900
+ function ln() {
901
+ cn(25);
901
902
  }
902
- function ln(e) {
903
- for (let t of Pe) if (sn(t).length !== 0 && !e()) return;
903
+ function un(e) {
904
+ for (let t of Ie) if (cn(t).length !== 0 && !e()) return;
904
905
  }
905
- function un() {
906
- if (S.isBoundToActiveProfile()) {
907
- for (let e of Pe) if (sn(e).length !== 0 && S.flush()) return;
908
- G("history-flush", Fe, dn);
906
+ function dn() {
907
+ if (x.isBoundToActiveProfile()) {
908
+ for (let e of Ie) if (cn(e).length !== 0 && x.flush()) return;
909
+ G("history-flush", Le, fn);
909
910
  }
910
911
  }
911
- function dn() {
912
- !S.isBoundToActiveProfile() || !S.persistFailing() || S.flush();
912
+ function fn() {
913
+ !x.isBoundToActiveProfile() || !x.persistFailing() || x.flush();
913
914
  }
914
- function fn(e) {
915
+ function pn(e) {
915
916
  if (e) {
916
- un();
917
+ dn();
917
918
  return;
918
919
  }
919
- ut("history-flush"), D.getState().unsavedDelete && D.getState().noteUnsavedDelete(void 0);
920
+ dt("history-flush"), E.getState().unsavedDelete && E.getState().noteUnsavedDelete(void 0);
920
921
  }
921
- function pn() {
922
- let e = A === null ? null : oe(He(), Ue(), A), t = e ? _(e) : null, n = S.isBoundToActiveProfile() ? T.getState().tombstones : {};
922
+ function mn() {
923
+ let e = k === null ? null : se(We(), Ge(), k), t = e ? _(e) : null, n = x.isBoundToActiveProfile() ? w.getState().tombstones : {};
923
924
  return (e) => !e.sync || t !== null && _(e.sync) === t && !(e.id in n);
924
925
  }
925
- function mn() {
926
+ function hn() {
926
927
  if (g.watchScope === !1) return;
927
928
  let t = () => {
928
- X(), G("scope-poll", xe, t, !0);
929
+ X(), G("scope-poll", Ce, t, !0);
929
930
  };
930
- if (G("scope-poll", xe, t, !0), typeof window > "u" || typeof window.addEventListener != "function") return;
931
+ if (G("scope-poll", Ce, t, !0), typeof window > "u" || typeof window.addEventListener != "function") return;
931
932
  let n = () => {
932
933
  X(), $("focus"), Q();
933
934
  }, r = () => {
934
935
  typeof document < "u" && document.visibilityState !== "visible" || (X(), $("visibility"), Q());
935
936
  }, i = () => {
936
- X(), dn(), vn(), $("online"), Q();
937
- }, a = () => X(), o = () => dn();
938
- window.addEventListener("focus", n), window.addEventListener("online", i), window.addEventListener("pagehide", o), window.addEventListener("popstate", a), window.addEventListener("storage", a), window.addEventListener(e, a), typeof document < "u" && document.addEventListener("visibilitychange", r), st.push(() => {
937
+ X(), fn(), yn(), $("online"), Q();
938
+ }, a = () => X(), o = () => fn();
939
+ window.addEventListener("focus", n), window.addEventListener("online", i), window.addEventListener("pagehide", o), window.addEventListener("popstate", a), window.addEventListener("storage", a), window.addEventListener(e, a), typeof document < "u" && document.addEventListener("visibilitychange", r), ct.push(() => {
939
940
  window.removeEventListener("focus", n), window.removeEventListener("online", i), window.removeEventListener("pagehide", o), window.removeEventListener("popstate", a), window.removeEventListener("storage", a), window.removeEventListener(e, a), typeof document < "u" && document.removeEventListener("visibilitychange", r);
940
941
  });
941
942
  }
942
- function hn(e) {
943
- A = e, l(() => A === null || S.heldByNewerBuild() ? null : oe(He(), Ue(), A)), o(ln), s(pn), c((e, t) => Et(e, { title: t })), S.setWriteListener(fn), D.getState().setControlsAvailable(U()), st.push(x.onControlsChange(Yt), T.subscribe((e, t) => {
944
- if (e.tombstones !== t.tombstones && _t(), e.outbox !== t.outbox) {
943
+ function gn(e) {
944
+ k = e, u(() => k === null || x.heldByNewerBuild() ? null : se(We(), Ge(), k)), s(un), c(mn), l((e, t) => Dt(e, { title: t })), x.setWriteListener(pn), E.getState().setControlsAvailable(U()), ct.push(b.onControlsChange(Xt), w.subscribe((e, t) => {
945
+ if (e.tombstones !== t.tombstones && vt(), e.outbox !== t.outbox) {
945
946
  let n = new Set(t.outbox.map((e) => e.id));
946
947
  e.outbox.some((e) => !n.has(e.id)) && Q();
947
948
  }
948
- }), E.subscribe((e, t) => {
949
+ }), T.subscribe((e, t) => {
949
950
  let n = e.activeConversationId, r = n !== null && p(t.processingByConversationId[n]?.status) && !p(e.processingByConversationId[n]?.status);
950
- (n !== t.activeConversationId || r) && (X(), gt()), R.size > 0 && e.processingByConversationId !== t.processingByConversationId && wt(e), L.size > 0 && e.processingByConversationId !== t.processingByConversationId && on();
951
- })), mn(), X();
952
- }
953
- function gn() {
954
- A = null, j = null, l(null), o(null), s(null), c(null), S.setWriteListener(null), D.getState().noteUnsavedDelete(void 0);
955
- for (let e of st) e();
956
- st = [];
957
- for (let e of [...z.keys()]) ut(e);
958
- L.clear(), R.clear(), P = null, it = -Infinity, F = null, Ge = !1, D.getState().setHistoryScope(null, null);
959
- }
960
- let _n = (e) => {
961
- k.set(e, (k.get(e) ?? 0) + 1), A === null ? hn(e) : A !== e && O("a second product asked for server history in the same page; the first keeps it", {
962
- active: A,
951
+ (n !== t.activeConversationId || r) && (X(), _t()), R.size > 0 && e.processingByConversationId !== t.processingByConversationId && Tt(e), L.size > 0 && e.processingByConversationId !== t.processingByConversationId && sn();
952
+ })), hn(), X();
953
+ }
954
+ function _n() {
955
+ k = null, A = null, u(null), s(null), c(null), l(null), x.setWriteListener(null), E.getState().noteUnsavedDelete(void 0);
956
+ for (let e of ct) e();
957
+ ct = [];
958
+ for (let e of [...z.keys()]) dt(e);
959
+ L.clear(), R.clear(), P = null, at = -Infinity, F = null, qe = !1, E.getState().setHistoryScope(null, null);
960
+ }
961
+ let vn = (e) => {
962
+ O.set(e, (O.get(e) ?? 0) + 1), k === null ? gn(e) : k !== e && D("a second product asked for server history in the same page; the first keeps it", {
963
+ active: k,
963
964
  asked: e
964
965
  });
965
966
  let t = !1;
966
967
  return () => {
967
968
  if (t) return;
968
969
  t = !0;
969
- let n = (k.get(e) ?? 1) - 1;
970
- if (n > 0 ? k.set(e, n) : k.delete(e), e !== A || k.has(e)) return;
971
- gn();
972
- let r = k.keys().next();
973
- r.done || hn(r.value);
970
+ let n = (O.get(e) ?? 1) - 1;
971
+ if (n > 0 ? O.set(e, n) : O.delete(e), e !== k || O.has(e)) return;
972
+ _n();
973
+ let r = O.keys().next();
974
+ r.done || gn(r.value);
974
975
  };
975
976
  };
976
- function vn() {
977
- if (!lt()) return;
978
- let e = T.getState();
977
+ function yn() {
978
+ if (!ut()) return;
979
+ let e = w.getState();
979
980
  for (let t of e.outbox) t.nextAttemptAt === void 0 || t.type === "save" && t.parked || e.updateHistoryItem(t.id, (e) => ({
980
981
  ...e,
981
982
  nextAttemptAt: void 0
982
983
  }));
983
984
  }
984
985
  return {
985
- enable: _n,
986
- setScope: ht,
986
+ enable: vn,
987
+ setScope: gt,
987
988
  refreshScope: X,
988
- recordCommittedEntries: Ct,
989
- deleteConversation: Tt,
990
- updateConversation: Et,
991
- openConversation: $t,
992
- loadEarlier: (e) => en(e, "earlier"),
993
- loadOlderHeaders: (e) => Xt(e),
994
- searchConversations: Zt,
995
- clearSearchResults: Qt,
989
+ recordCommittedEntries: wt,
990
+ deleteConversation: Et,
991
+ updateConversation: Dt,
992
+ openConversation: en,
993
+ loadEarlier: (e) => tn(e, "earlier"),
994
+ loadOlderHeaders: (e) => Zt(e),
995
+ searchConversations: Qt,
996
+ clearSearchResults: $t,
996
997
  notePanelOpened: () => {
997
- if (!lt()) return;
998
- let e = T.getState();
998
+ if (!ut()) return;
999
+ let e = w.getState();
999
1000
  for (let t of e.outbox) t.type !== "save" || !t.parked || e.updateHistoryItem(t.id, (e) => ({
1000
1001
  ...e,
1001
1002
  parked: void 0,
1002
1003
  nextAttemptAt: void 0,
1003
1004
  attempts: e.attempts + 1
1004
1005
  }));
1005
- w(() => x.recheckControls(), void 0), $("history-open"), Q(), Jt();
1006
+ C(() => b.recheckControls(), void 0), $("history-open"), Q(), Yt();
1006
1007
  },
1007
1008
  pull: $,
1008
1009
  drain: Q,
1009
1010
  async settled() {
1010
- for (let e = 0; e < 1e3 && ot.size > 0; e += 1) await Promise.allSettled([...ot]);
1011
+ for (let e = 0; e < 1e3 && st.size > 0; e += 1) await Promise.allSettled([...st]);
1011
1012
  },
1012
1013
  dispose() {
1013
- k.clear(), F = null, A !== null && gn();
1014
+ O.clear(), F = null, k !== null && _n();
1014
1015
  }
1015
1016
  };
1016
1017
  }
1017
- var E = T({
1018
+ var T = w({
1018
1019
  transport: g(),
1019
- storage: x,
1020
- clock: C()
1020
+ storage: b,
1021
+ clock: S()
1021
1022
  });
1022
1023
  //#endregion
1023
- export { S as ASSISTANT_HISTORY_RESET_TRUST_MS, E as assistantHistory, T as createAssistantHistoryEngine, C as createSystemHistoryClock };
1024
+ export { x as ASSISTANT_HISTORY_RESET_TRUST_MS, T as assistantHistory, w as createAssistantHistoryEngine, S as createSystemHistoryClock };