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