@pluno/product-agent-web 0.1.218 → 0.1.219

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,6 +1,6 @@
1
- function h(i) {
1
+ function h(s) {
2
2
  return {
3
- key: i,
3
+ key: s,
4
4
  status: "not_requested",
5
5
  data: null,
6
6
  error: null,
@@ -8,9 +8,9 @@ function h(i) {
8
8
  updatedAt: null
9
9
  };
10
10
  }
11
- class b {
12
- constructor(e, t, s = (n, r) => r) {
13
- this.loader = t, this.merge = s, this.state = h(e);
11
+ class A {
12
+ constructor(e, t, i = (n, r) => r) {
13
+ this.loader = t, this.merge = i, this.state = h(e);
14
14
  }
15
15
  loader;
16
16
  merge;
@@ -52,16 +52,16 @@ class b {
52
52
  for (; this.trailingLoad; ) {
53
53
  const e = this.trailingLoad;
54
54
  this.trailingLoad = null;
55
- const t = this.state.key, s = this.state.requestId + 1;
55
+ const t = this.state.key, i = this.state.requestId + 1;
56
56
  this.state = {
57
57
  ...this.state,
58
58
  status: e.mode === "append" ? "loading_more" : this.state.data === null ? "loading" : "refreshing",
59
59
  error: null,
60
- requestId: s
60
+ requestId: i
61
61
  }, this.publish();
62
62
  try {
63
63
  const n = await this.loader({ key: t, cursor: e.cursor });
64
- if (t !== this.state.key || s !== this.state.requestId) continue;
64
+ if (t !== this.state.key || i !== this.state.requestId) continue;
65
65
  this.state = {
66
66
  ...this.state,
67
67
  status: "ready",
@@ -70,7 +70,7 @@ class b {
70
70
  updatedAt: Date.now()
71
71
  }, this.publish();
72
72
  } catch (n) {
73
- if (t !== this.state.key || s !== this.state.requestId) continue;
73
+ if (t !== this.state.key || i !== this.state.requestId) continue;
74
74
  this.state = {
75
75
  ...this.state,
76
76
  status: "error",
@@ -83,53 +83,53 @@ class b {
83
83
  for (const e of this.listeners) e(this.state);
84
84
  }
85
85
  }
86
- function p(i) {
86
+ function p(s) {
87
87
  const e = {}, t = [];
88
- for (const s of i.entities)
89
- e[s.id] || t.push(s.id), e[s.id] = s;
88
+ for (const i of s.entities)
89
+ e[i.id] || t.push(i.id), e[i.id] = i;
90
90
  return {
91
91
  entitiesById: e,
92
92
  ids: t,
93
- nextCursor: i.nextCursor
93
+ nextCursor: s.nextCursor
94
94
  };
95
95
  }
96
- function _(i, e, t) {
97
- if (t === "replace" || i === null) return e;
98
- const s = { ...i.entitiesById, ...e.entitiesById }, n = [...i.ids];
96
+ function P(s, e, t) {
97
+ if (t === "replace" || s === null) return e;
98
+ const i = { ...s.entitiesById, ...e.entitiesById }, n = [...s.ids];
99
99
  for (const r of e.ids)
100
- i.entitiesById[r] || n.push(r);
101
- return { entitiesById: s, ids: n, nextCursor: e.nextCursor };
100
+ s.entitiesById[r] || n.push(r);
101
+ return { entitiesById: i, ids: n, nextCursor: e.nextCursor };
102
102
  }
103
- function I(i) {
104
- return i ? i.ids.map((e) => i.entitiesById[e]).filter((e) => !!e) : [];
103
+ function _(s) {
104
+ return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
105
105
  }
106
- function L(i) {
107
- return i.visible ? i.minimized ? { state: "minimized" } : { state: i.open ? "visible_open" : "visible_closed" } : { state: "hidden" };
106
+ function Q(s) {
107
+ return s.visible ? s.minimized ? { state: "minimized" } : { state: s.open ? "visible_open" : "visible_closed" } : { state: "hidden" };
108
108
  }
109
- function q(i, e) {
110
- return e === "limit_exceeded" ? { allowed: !1, reason: "credits_exhausted", actions: ["upgrade", "earn_credits"] } : e === "subscription_required" || e === "subscription_inactive" || e === "payment_issue" || e === "subscription_invalid" || e === "payment_required" ? { allowed: !1, reason: "payment_issue", actions: ["upgrade"] } : i ?? { allowed: !0, reason: "allowed", actions: [] };
109
+ function $(s, e) {
110
+ return e === "limit_exceeded" ? { allowed: !1, reason: "credits_exhausted", actions: ["upgrade", "earn_credits"] } : e === "subscription_required" || e === "subscription_inactive" || e === "payment_issue" || e === "subscription_invalid" || e === "payment_required" ? { allowed: !1, reason: "payment_issue", actions: ["upgrade"] } : s ?? { allowed: !0, reason: "allowed", actions: [] };
111
111
  }
112
- function Q(i) {
113
- if (!i || typeof i != "object") return !1;
114
- const e = i.paidCreditFallbackModel;
112
+ function K(s) {
113
+ if (!s || typeof s != "object") return !1;
114
+ const e = s.paidCreditFallbackModel;
115
115
  return typeof e == "string" && e.length > 0;
116
116
  }
117
- function $(i) {
118
- return i ? i.submissionGate?.allowed === !1 ? { state: "action_required", reason: i.submissionGate.reason } : i.usingPaidCreditFallback === !0 ? { state: "paid_credit_fallback" } : i.creditLimit !== null && i.creditLimit > 0 && i.creditsRemaining !== null && i.creditsRemaining > 0 && i.creditsRemaining / i.creditLimit <= 0.2 ? { state: "low_credits" } : i.creditsUsed !== null ? { state: "usage" } : { state: "hidden" } : { state: "hidden" };
117
+ function z(s) {
118
+ return s ? s.submissionGate?.allowed === !1 ? { state: "action_required", reason: s.submissionGate.reason } : s.usingPaidCreditFallback === !0 ? { state: "paid_credit_fallback" } : s.creditLimit !== null && s.creditLimit > 0 && s.creditsRemaining !== null && s.creditsRemaining > 0 && s.creditsRemaining / s.creditLimit <= 0.2 ? { state: "low_credits" } : s.creditsUsed !== null ? { state: "usage" } : { state: "hidden" } : { state: "hidden" };
119
119
  }
120
- function K(i) {
121
- const e = i.hasDraftMessage || i.hasPreSubmittedAttachment;
122
- return i.hasRunningAssistantTurn && !e ? {
120
+ function B(s) {
121
+ const e = s.hasDraftMessage || s.hasPreSubmittedAttachment;
122
+ return s.hasRunningAssistantTurn && !e ? {
123
123
  action: "stop",
124
- disabled: !i.canStopRunningTurn
124
+ disabled: !s.canStopRunningTurn
125
125
  } : {
126
126
  action: "send",
127
- disabled: !e || !i.canSubmitMessage
127
+ disabled: !e || !s.canSubmitMessage
128
128
  };
129
129
  }
130
- class B {
131
- constructor(e, t, s = 20) {
132
- this.loadPage = t, this.limit = s, this.recentQuery = new b(
130
+ class F {
131
+ constructor(e, t, i = 20) {
132
+ this.loadPage = t, this.limit = i, this.recentQuery = new A(
133
133
  `${e}:recent`,
134
134
  async ({ cursor: n }) => p(
135
135
  await this.loadPage({ cursor: n, limit: this.limit, pinned: !1 }).then((r) => ({
@@ -137,8 +137,8 @@ class B {
137
137
  nextCursor: r.nextCursor
138
138
  }))
139
139
  ),
140
- _
141
- ), this.pinnedQuery = new b(
140
+ P
141
+ ), this.pinnedQuery = new A(
142
142
  `${e}:pinned`,
143
143
  async () => p({
144
144
  entities: await this.loadAllPinned(),
@@ -159,10 +159,10 @@ class B {
159
159
  completedRefreshSequence = 0;
160
160
  activityReconciliationScheduled = !1;
161
161
  getState() {
162
- const e = this.recentQuery.getState(), t = this.pinnedQuery.getState(), s = [
162
+ const e = this.recentQuery.getState(), t = this.pinnedQuery.getState(), i = [
163
163
  ...u(t.data),
164
164
  ...u(e.data)
165
- ], n = new Map(s.map((o) => [o.id, o])), r = Array.from(n.values()).map(
165
+ ], n = new Map(i.map((o) => [o.id, o])), r = Array.from(n.values()).map(
166
166
  (o) => this.applyOverrides(o, this.completedRefreshSequence)
167
167
  ), a = Array.from(this.optimisticEntities.values()).filter((o) => !n.has(o.id)).reverse(), l = e.data || t.data || a.length > 0 ? p({
168
168
  entities: [...a, ...r],
@@ -170,7 +170,7 @@ class B {
170
170
  }) : null;
171
171
  return {
172
172
  key: e.key.slice(0, -7),
173
- status: P(e, t),
173
+ status: T(e, t),
174
174
  data: l,
175
175
  error: e.error ?? t.error,
176
176
  requestId: Math.max(e.requestId, t.requestId),
@@ -216,20 +216,20 @@ class B {
216
216
  isActive: t,
217
217
  confirmAfterRefresh: this.completedRefreshSequence + 1,
218
218
  releaseAfterRefresh: this.completedRefreshSequence + 2
219
- }), this.updateEntity(e, (s) => ({ ...s, isActive: t }));
219
+ }), this.updateEntity(e, (i) => ({ ...i, isActive: t }));
220
220
  }
221
221
  setPinned(e, t) {
222
- const s = { pinned: t, confirmAfterRefresh: Number.POSITIVE_INFINITY };
223
- return this.pinnedOverrides.set(e, s), this.updateEntity(e, (n) => ({ ...n, isPinned: t })), s;
222
+ const i = { pinned: t, confirmAfterRefresh: Number.POSITIVE_INFINITY };
223
+ return this.pinnedOverrides.set(e, i), this.updateEntity(e, (n) => ({ ...n, isPinned: t })), i;
224
224
  }
225
225
  confirmPinned(e, t) {
226
226
  this.pinnedOverrides.get(e) === t && (t.confirmAfterRefresh = this.completedRefreshSequence + 1);
227
227
  }
228
- rollbackPinned(e, t, s) {
229
- this.pinnedOverrides.get(e) === t && (this.pinnedOverrides.delete(e), this.updateEntity(e, (n) => ({ ...n, isPinned: s })));
228
+ rollbackPinned(e, t, i) {
229
+ this.pinnedOverrides.get(e) === t && (this.pinnedOverrides.delete(e), this.updateEntity(e, (n) => ({ ...n, isPinned: i })));
230
230
  }
231
231
  setTitle(e, t) {
232
- this.titleOverrides.set(e, t), this.updateEntity(e, (s) => ({ ...s, customTitle: t }));
232
+ this.titleOverrides.set(e, t), this.updateEntity(e, (i) => ({ ...i, customTitle: t }));
233
233
  }
234
234
  confirmTitle(e) {
235
235
  this.titleOverrides.delete(e);
@@ -238,34 +238,34 @@ class B {
238
238
  const e = [
239
239
  ...u(this.pinnedQuery.getState().data),
240
240
  ...u(this.recentQuery.getState().data)
241
- ], t = new Set(e.map((s) => s.id));
242
- for (const s of this.optimisticEntities.keys())
243
- t.has(s) && this.optimisticEntities.delete(s);
244
- for (const s of e) this.applyOverrides(s, this.completedRefreshSequence);
241
+ ], t = new Set(e.map((i) => i.id));
242
+ for (const i of this.optimisticEntities.keys())
243
+ t.has(i) && this.optimisticEntities.delete(i);
244
+ for (const i of e) this.applyOverrides(i, this.completedRefreshSequence);
245
245
  this.publish();
246
246
  }
247
247
  async loadAllPinned() {
248
248
  const e = [];
249
249
  let t = null;
250
250
  do {
251
- const s = await this.loadPage({ cursor: t, limit: this.limit, pinned: !0 });
252
- e.push(...s.sessions), t = s.nextCursor;
251
+ const i = await this.loadPage({ cursor: t, limit: this.limit, pinned: !0 });
252
+ e.push(...i.sessions), t = i.nextCursor;
253
253
  } while (t);
254
254
  return e;
255
255
  }
256
256
  applyOverrides(e, t) {
257
- let s = e;
257
+ let i = e;
258
258
  const n = this.activityOverrides.get(e.id);
259
- n && (t >= n.confirmAfterRefresh && e.isActive === n.isActive ? this.activityOverrides.delete(e.id) : t >= n.releaseAfterRefresh ? this.activityOverrides.delete(e.id) : s = { ...s, isActive: n.isActive });
259
+ n && (t >= n.confirmAfterRefresh && e.isActive === n.isActive ? this.activityOverrides.delete(e.id) : t >= n.releaseAfterRefresh ? this.activityOverrides.delete(e.id) : i = { ...i, isActive: n.isActive });
260
260
  const r = this.pinnedOverrides.get(e.id);
261
- return r && (t >= r.confirmAfterRefresh && e.isPinned === !0 === r.pinned ? this.pinnedOverrides.delete(e.id) : s = { ...s, isPinned: r.pinned }), this.titleOverrides.has(e.id) && (s = { ...s, customTitle: this.titleOverrides.get(e.id) ?? null }), s;
261
+ return r && (t >= r.confirmAfterRefresh && e.isPinned === !0 === r.pinned ? this.pinnedOverrides.delete(e.id) : i = { ...i, isPinned: r.pinned }), this.titleOverrides.has(e.id) && (i = { ...i, customTitle: this.titleOverrides.get(e.id) ?? null }), i;
262
262
  }
263
263
  updateProjection() {
264
264
  this.publish();
265
265
  }
266
266
  updateEntity(e, t) {
267
- const s = this.optimisticEntities.get(e);
268
- s && this.optimisticEntities.set(e, t(s)), this.publish();
267
+ const i = this.optimisticEntities.get(e);
268
+ i && this.optimisticEntities.set(e, t(i)), this.publish();
269
269
  }
270
270
  hasUnconfirmedActivityOverride() {
271
271
  return Array.from(this.activityOverrides.values()).some(
@@ -276,16 +276,16 @@ class B {
276
276
  for (const e of this.listeners) e(this.getState());
277
277
  }
278
278
  }
279
- function u(i) {
280
- return i ? i.ids.map((e) => i.entitiesById[e]).filter((e) => !!e) : [];
279
+ function u(s) {
280
+ return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
281
281
  }
282
- function P(i, e) {
283
- return i.status === "error" || e.status === "error" ? "error" : i.status === "loading" || e.status === "loading" ? "loading" : i.status === "refreshing" || e.status === "refreshing" ? "refreshing" : i.status === "loading_more" ? "loading_more" : i.status === "ready" || e.status === "ready" ? "ready" : "not_requested";
282
+ function T(s, e) {
283
+ return s.status === "error" || e.status === "error" ? "error" : s.status === "loading" || e.status === "loading" ? "loading" : s.status === "refreshing" || e.status === "refreshing" ? "refreshing" : s.status === "loading_more" ? "loading_more" : s.status === "ready" || e.status === "ready" ? "ready" : "not_requested";
284
284
  }
285
- class z {
285
+ class U {
286
286
  constructor(e, t = null) {
287
287
  this.storage = e, t && (this.decisions = new Map(
288
- t.filter(y).map((s) => [this.getDecisionKey(s), s])
288
+ t.filter(v).map((i) => [this.getDecisionKey(i), i])
289
289
  ), this.initialized = !0);
290
290
  }
291
291
  storage;
@@ -297,62 +297,62 @@ class z {
297
297
  if (this.initialized) return;
298
298
  const e = await this.storage.load();
299
299
  this.decisions = new Map(
300
- e.filter(y).map((t) => [this.getDecisionKey(t), t])
300
+ e.filter(v).map((t) => [this.getDecisionKey(t), t])
301
301
  ), this.initialized = !0;
302
302
  }
303
303
  isEligible(e, t = Date.now()) {
304
- const s = this.scheduledEligibility.get(this.getExactKey(e));
305
- return s !== void 0 && s > t ? !1 : this.isDecisionEligible(this.decisions.get(this.getExactKey(e)), t) && this.isDecisionEligible(this.decisions.get(this.getCategoryKey(e)), t);
304
+ const i = this.scheduledEligibility.get(this.getExactKey(e));
305
+ return i !== void 0 && i > t ? !1 : this.isDecisionEligible(this.decisions.get(this.getExactKey(e)), t) && this.isDecisionEligible(this.decisions.get(this.getCategoryKey(e)), t);
306
306
  }
307
307
  getDecision(e) {
308
308
  return this.decisions.get(this.getExactKey(e)) ?? this.decisions.get(this.getCategoryKey(e)) ?? null;
309
309
  }
310
310
  getStatus(e, t = Date.now()) {
311
- const s = this.scheduledEligibility.get(this.getExactKey(e));
312
- if (s !== void 0 && s > t) return "scheduled";
311
+ const i = this.scheduledEligibility.get(this.getExactKey(e));
312
+ if (i !== void 0 && i > t) return "scheduled";
313
313
  const n = this.getDecision(e);
314
314
  return n ? n.action === "never" || n.action === "dont_show_again" ? "suppressed" : n.action === "dismiss" ? "resolved" : n.nextEligibleAt && Date.parse(n.nextEligibleAt) > t ? "snoozed" : "presentable" : "presentable";
315
315
  }
316
316
  scheduleEligibility(e, t) {
317
- const s = this.getExactKey(e), n = this.scheduledEligibility.get(s);
318
- return n !== void 0 ? n : (this.scheduledEligibility.set(s, t), t);
317
+ const i = this.getExactKey(e), n = this.scheduledEligibility.get(i);
318
+ return n !== void 0 ? n : (this.scheduledEligibility.set(i, t), t);
319
319
  }
320
320
  getNextEligibilityAt(e = Date.now()) {
321
321
  const t = [
322
- ...Array.from(this.scheduledEligibility.values()).filter((s) => s > e),
323
- ...Array.from(this.decisions.values()).map((s) => s.nextEligibleAt ? Date.parse(s.nextEligibleAt) : Number.NaN).filter((s) => Number.isFinite(s) && s > e)
322
+ ...Array.from(this.scheduledEligibility.values()).filter((i) => i > e),
323
+ ...Array.from(this.decisions.values()).map((i) => i.nextEligibleAt ? Date.parse(i.nextEligibleAt) : Number.NaN).filter((i) => Number.isFinite(i) && i > e)
324
324
  ];
325
325
  return t.length > 0 ? Math.min(...t) : null;
326
326
  }
327
- act(e, t, s = {}) {
328
- const n = this.actionQueue.then(() => this.applyAction(e, t, s));
327
+ act(e, t, i = {}) {
328
+ const n = this.actionQueue.then(() => this.applyAction(e, t, i));
329
329
  return this.actionQueue = n.then(() => {
330
330
  }, () => {
331
331
  }), n;
332
332
  }
333
- async applyAction(e, t, s) {
333
+ async applyAction(e, t, i) {
334
334
  if (!e.allowedActions.includes(t))
335
335
  throw new Error(`Interaction ${e.key} does not allow ${t}.`);
336
336
  if (!E(t))
337
337
  throw new Error(`Interaction action ${t} is not a persistence decision.`);
338
- const n = s.now ?? /* @__PURE__ */ new Date(), r = {
338
+ const n = i.now ?? /* @__PURE__ */ new Date(), r = {
339
339
  promptKey: e.key,
340
340
  category: e.category,
341
341
  action: t,
342
342
  scope: e.scope,
343
343
  decidedAt: n.toISOString(),
344
- nextEligibleAt: this.getNextEligibleAt(e, t, n, s.snoozeUntil)
344
+ nextEligibleAt: this.getNextEligibleAt(e, t, n, i.snoozeUntil)
345
345
  }, a = t === "dont_show_again" ? this.getCategoryKey(e) : this.getExactKey(e), l = new Map(this.decisions);
346
346
  return l.set(a, r), await this.storage.save([...l.values()]), this.decisions = l, r;
347
347
  }
348
348
  isDecisionEligible(e, t) {
349
349
  return e ? e.action === "dismiss" || e.action === "never" || e.action === "dont_show_again" ? !1 : !e.nextEligibleAt || Date.parse(e.nextEligibleAt) <= t : !0;
350
350
  }
351
- getNextEligibleAt(e, t, s, n) {
351
+ getNextEligibleAt(e, t, i, n) {
352
352
  if (t === "later")
353
- return new Date(s.getTime() + (e.laterDelayMs ?? 3600 * 1e3)).toISOString();
353
+ return new Date(i.getTime() + (e.laterDelayMs ?? 3600 * 1e3)).toISOString();
354
354
  if (t === "snooze") {
355
- if (!n || n.getTime() <= s.getTime())
355
+ if (!n || n.getTime() <= i.getTime())
356
356
  throw new Error("Snooze requires a future next-eligible time.");
357
357
  return n.toISOString();
358
358
  }
@@ -369,41 +369,41 @@ class z {
369
369
  return `${m(e.scope)}:category:${e.category}`;
370
370
  }
371
371
  }
372
- function F(i, e) {
372
+ function N(s, e) {
373
373
  return {
374
- load: async () => T(i, e),
375
- save: async (t) => i.setItem(e, JSON.stringify(t))
374
+ load: async () => M(s, e),
375
+ save: async (t) => s.setItem(e, JSON.stringify(t))
376
376
  };
377
377
  }
378
- function T(i, e) {
379
- const t = i.getItem(e);
378
+ function M(s, e) {
379
+ const t = s.getItem(e);
380
380
  if (!t) return [];
381
- const s = JSON.parse(t);
382
- return Array.isArray(s) ? s.filter(y) : [];
381
+ const i = JSON.parse(t);
382
+ return Array.isArray(i) ? i.filter(v) : [];
383
383
  }
384
- function m(i) {
385
- return `${i.level}:${i.key}`;
384
+ function m(s) {
385
+ return `${s.level}:${s.key}`;
386
386
  }
387
- function E(i) {
388
- return i === "dismiss" || i === "later" || i === "snooze" || i === "never" || i === "dont_show_again";
387
+ function E(s) {
388
+ return s === "dismiss" || s === "later" || s === "snooze" || s === "never" || s === "dont_show_again";
389
389
  }
390
- function y(i) {
391
- if (!i || typeof i != "object") return !1;
392
- const e = i;
390
+ function v(s) {
391
+ if (!s || typeof s != "object") return !1;
392
+ const e = s;
393
393
  return typeof e.promptKey == "string" && typeof e.category == "string" && typeof e.decidedAt == "string" && (e.nextEligibleAt === null || typeof e.nextEligibleAt == "string") && E(e.action) && !!(e.scope && typeof e.scope == "object" && typeof e.scope.level == "string" && typeof e.scope.key == "string");
394
394
  }
395
- const M = {
395
+ const D = {
396
396
  working: "⏳",
397
397
  completed: "✅",
398
398
  failed: "❗",
399
399
  stopped: "⏹️"
400
- }, D = /^(?:⌛|⏳|✅|❗|⏹️) Pluno(?:: )?/;
401
- function O(i, e) {
402
- if (!e) return g(i);
403
- const t = g(i), s = `${M[e]} Pluno`;
404
- return t ? `${s}: ${t}` : s;
400
+ }, O = /^(?:⌛|⏳|✅|❗|⏹️) Pluno(?:: )?/;
401
+ function k(s, e) {
402
+ if (!e) return g(s);
403
+ const t = g(s), i = `${D[e]} Pluno`;
404
+ return t ? `${i}: ${t}` : i;
405
405
  }
406
- class U {
406
+ class H {
407
407
  constructor(e) {
408
408
  this.titleDocument = e;
409
409
  }
@@ -420,16 +420,16 @@ class U {
420
420
  this.liveStatusVersion += 1, this.applyClear();
421
421
  }
422
422
  async syncStatus(e) {
423
- const t = this.liveStatusVersion, s = await e();
424
- s === void 0 || t !== this.liveStatusVersion || (s ? this.applyStatus(s) : this.applyClear());
423
+ const t = this.liveStatusVersion, i = await e();
424
+ i === void 0 || t !== this.liveStatusVersion || (i ? this.applyStatus(i) : this.applyClear());
425
425
  }
426
426
  applyStatus(e) {
427
427
  const t = this.titleDocument.getTitle();
428
428
  t !== this.lastAppliedTitle && (this.baseTitle = g(t)), this.status = e, this.stopObserving || (this.stopObserving = this.titleDocument.observeTitle(() => this.handleTitleChanged())), this.applyTitle();
429
429
  }
430
430
  applyClear() {
431
- const e = this.titleDocument.getTitle(), t = this.lastAppliedTitle !== null && e === this.lastAppliedTitle, s = this.lastAppliedTitle === null ? g(e) : e;
432
- this.status = null, this.lastAppliedTitle = null, this.stopObserving?.(), this.stopObserving = null, t ? this.titleDocument.setTitle(this.baseTitle) : s !== e && this.titleDocument.setTitle(s);
431
+ const e = this.titleDocument.getTitle(), t = this.lastAppliedTitle !== null && e === this.lastAppliedTitle, i = this.lastAppliedTitle === null ? g(e) : e;
432
+ this.status = null, this.lastAppliedTitle = null, this.stopObserving?.(), this.stopObserving = null, t ? this.titleDocument.setTitle(this.baseTitle) : i !== e && this.titleDocument.setTitle(i);
433
433
  }
434
434
  handleTitleChanged() {
435
435
  !this.status || this.titleDocument.getTitle() === this.lastAppliedTitle || this.applyTitle();
@@ -437,19 +437,19 @@ class U {
437
437
  applyTitle() {
438
438
  if (!this.status)
439
439
  return;
440
- const e = O(this.baseTitle, this.status);
440
+ const e = k(this.baseTitle, this.status);
441
441
  this.lastAppliedTitle = e, this.titleDocument.getTitle() !== e && this.titleDocument.setTitle(e);
442
442
  }
443
443
  }
444
- function N(i) {
444
+ function j(s) {
445
445
  return {
446
- getTitle: () => i.title,
446
+ getTitle: () => s.title,
447
447
  setTitle: (e) => {
448
- i.title = e;
448
+ s.title = e;
449
449
  },
450
450
  observeTitle: (e) => {
451
451
  const t = new MutationObserver(e);
452
- return t.observe(i.head, {
452
+ return t.observe(s.head, {
453
453
  childList: !0,
454
454
  subtree: !0,
455
455
  characterData: !0
@@ -457,15 +457,21 @@ function N(i) {
457
457
  }
458
458
  };
459
459
  }
460
- function g(i) {
461
- return i.replace(D, "");
460
+ function g(s) {
461
+ return s.replace(O, "");
462
+ }
463
+ const f = (s) => s === null || typeof s == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(s);
464
+ function R(s) {
465
+ if (!s || typeof s != "object") return !1;
466
+ const e = s;
467
+ return typeof e.observedAt == "string" && e.observedAt.length <= 40 && Number.isFinite(Date.parse(e.observedAt)) && f(e.sessionId) && f(e.responseItemId) && f(e.respondsToUserMessageId) && typeof e.panelVisible == "boolean" && typeof e.documentVisible == "boolean" && typeof e.loading == "boolean";
462
468
  }
463
469
  const S = 500;
464
- function k(i) {
465
- const e = i.replace(/\n\s*at\s[\s\S]*$/, "").replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/g, "[REDACTED]").replace(/\b(?:set-cookie|cookie)\s*[:=]\s*[^\n]+/gi, "cookie=[REDACTED]").replace(/\bdata:[^\s<>"']+/gi, "[DATA]").replace(/\b(?:https?:\/\/|www\.)[^\s<>"']+/gi, "[URL]").replace(/\b(?:Bearer|Basic)\s+[^\s,;"']+/gi, "[REDACTED]").replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?/g, "[REDACTED]").replace(/\b(?:sk|pk|ghp|gho|github_pat|xoxb|xoxp)[-_][A-Za-z0-9_-]{8,}/g, "[REDACTED]").replace(/\b((?:access|refresh|id|auth)[_-]?token|api[_-]?key|client[_-]?secret|password|passwd|pwd|secret|token|jwt|authorization|cookie|set-cookie)\b["']?\s*[:=]\s*(?:"[^"]*"|'[^']*'|[^\s,;}&]+)/gi, "$1=[REDACTED]").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[EMAIL]").replace(/(?:[A-Z]:[\\/]|\\\\|(?:~|\.\.?)?\/|[\w.-]+[\\/])[^\s<>"']+/gi, "[FILE]").replace(new RegExp("(?<![\\w.])(?:[\\w.-]+\\.[A-Z][A-Z0-9]{0,15}|\\.[A-Z][\\w.-]*)\\b", "gi"), "[FILE]").replace(/\s+/g, " ").trim();
470
+ function x(s) {
471
+ const e = s.replace(/\n\s*at\s[\s\S]*$/, "").replace(/-----BEGIN [^-]*PRIVATE KEY-----[\s\S]*?(?:-----END [^-]*PRIVATE KEY-----|$)/g, "[REDACTED]").replace(/\b(?:set-cookie|cookie)\s*[:=]\s*[^\n]+/gi, "cookie=[REDACTED]").replace(/\bdata:[^\s<>"']+/gi, "[DATA]").replace(/\b(?:https?:\/\/|www\.)[^\s<>"']+/gi, "[URL]").replace(/\b(?:Bearer|Basic)\s+[^\s,;"']+/gi, "[REDACTED]").replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?/g, "[REDACTED]").replace(/\b(?:sk|pk|ghp|gho|github_pat|xoxb|xoxp)[-_][A-Za-z0-9_-]{8,}/g, "[REDACTED]").replace(/\b((?:access|refresh|id|auth)[_-]?token|api[_-]?key|client[_-]?secret|password|passwd|pwd|secret|token|jwt|authorization|cookie|set-cookie)\b["']?\s*[:=]\s*(?:"[^"]*"|'[^']*'|[^\s,;}&]+)/gi, "$1=[REDACTED]").replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[EMAIL]").replace(/(?:[A-Z]:[\\/]|\\\\|(?:~|\.\.?)?\/|[\w.-]+[\\/])[^\s<>"']+/gi, "[FILE]").replace(new RegExp("(?<![\\w.])(?:[\\w.-]+\\.[A-Z][A-Z0-9]{0,15}|\\.[A-Z][\\w.-]*)\\b", "gi"), "[FILE]").replace(/\s+/g, " ").trim();
466
472
  return e.length > S ? `${e.slice(0, S - 1)}…` : e;
467
473
  }
468
- const x = {
474
+ const C = {
469
475
  "duplicate-message-item": "A canonical message rendered more than once.",
470
476
  "duplicate-canonical-item": "A canonical session item rendered more than once.",
471
477
  "duplicate-tool-call": "A tool call rendered more than once.",
@@ -478,35 +484,37 @@ const x = {
478
484
  "thinking-groups-without-user-message": "Multiple thinking groups appeared without a user message between them.",
479
485
  "thinking-without-progress": "Thinking remained visible without progress for five minutes."
480
486
  };
481
- function R(i) {
482
- return typeof i == "string" && i.startsWith("ui_invariant:") && Object.prototype.hasOwnProperty.call(x, i.slice(13));
487
+ function L(s) {
488
+ return typeof s == "string" && s.startsWith("ui_invariant:") && Object.prototype.hasOwnProperty.call(C, s.slice(13));
483
489
  }
484
- function A(i) {
490
+ function w(s) {
485
491
  return {
486
- ...i.id === void 0 ? {} : { id: i.id },
487
- name: i.name,
488
- mimeType: i.mimeType,
489
- sizeBytes: i.sizeBytes,
490
- ...i.sandboxPath === void 0 ? {} : { sandboxPath: i.sandboxPath },
491
- ...i.storageKey === void 0 ? {} : { storageKey: i.storageKey },
492
- ...i.fileUrl === void 0 ? {} : { fileUrl: i.fileUrl }
492
+ ...s.id === void 0 ? {} : { id: s.id },
493
+ name: s.name,
494
+ mimeType: s.mimeType,
495
+ sizeBytes: s.sizeBytes,
496
+ ...s.sandboxPath === void 0 ? {} : { sandboxPath: s.sandboxPath },
497
+ ...s.storageKey === void 0 ? {} : { storageKey: s.storageKey },
498
+ ...s.fileUrl === void 0 ? {} : { fileUrl: s.fileUrl }
493
499
  };
494
500
  }
495
- function H(i) {
496
- if (!i || typeof i != "object" || !("type" in i)) return !1;
497
- const e = i;
501
+ function V(s) {
502
+ if (!s || typeof s != "object" || !("type" in s)) return !1;
503
+ const e = s;
498
504
  switch (e.type) {
499
505
  case "runtime.connect":
500
506
  case "session.new":
501
507
  case "run.stop":
502
508
  case "run.retry":
503
509
  return !0;
510
+ case "runtime.report_response_visibility":
511
+ return R(e.observation);
504
512
  case "runtime.warmup":
505
513
  return e.reason === "panel_open" || e.reason === "extension_install" || e.reason === "composer_input";
506
514
  case "runtime.report_displayed_error":
507
515
  return (e.reason === "conversation_error" || e.reason === "attachment_error" || e.reason === "history_error" || e.reason === "action_error") && typeof e.errorFingerprint == "string" && /^fnv1a-[0-9a-f]{8}$/.test(e.errorFingerprint) && (e.displayedMessage === void 0 || typeof e.displayedMessage == "string" && e.displayedMessage.length <= 500);
508
516
  case "runtime.report_invalid_state_transition":
509
- return (e.reason === "submitted_turn_returned_to_welcome_without_new_chat" || e.reason === "new_messages_button_without_user_scroll" || R(e.reason)) && (e.clientMessageId === void 0 || typeof e.clientMessageId == "string");
517
+ return (e.reason === "submitted_turn_returned_to_welcome_without_new_chat" || e.reason === "new_messages_button_without_user_scroll" || L(e.reason)) && (e.clientMessageId === void 0 || typeof e.clientMessageId == "string");
510
518
  case "runtime.widget_lifecycle":
511
519
  return (e.action === "opened" || e.action === "closed" || e.action === "minimized") && typeof e.trigger == "string";
512
520
  case "session.load":
@@ -533,9 +541,9 @@ function H(i) {
533
541
  return !1;
534
542
  }
535
543
  }
536
- class j {
537
- constructor(e, t, s) {
538
- this.adapter = t, this.state = f(e), this.model = s;
544
+ class Z {
545
+ constructor(e, t, i) {
546
+ this.adapter = t, this.state = y(e), this.model = i;
539
547
  }
540
548
  adapter;
541
549
  listeners = {};
@@ -553,15 +561,15 @@ class j {
553
561
  operationQueue = Promise.resolve();
554
562
  destroyed = !1;
555
563
  on(e, t) {
556
- const s = this.listeners[e] ?? /* @__PURE__ */ new Set();
557
- return s.add(t), this.listeners[e] = s, () => s.delete(t);
564
+ const i = this.listeners[e] ?? /* @__PURE__ */ new Set();
565
+ return i.add(t), this.listeners[e] = i, () => i.delete(t);
558
566
  }
559
567
  getState() {
560
- return f(this.state);
568
+ return y(this.state);
561
569
  }
562
- updateProjection(e, t, s, n, r) {
570
+ updateProjection(e, t, i, n, r) {
563
571
  if (!this.destroyed) {
564
- this.state = f(e);
572
+ this.state = y(e);
565
573
  for (const [a, l] of this.unacknowledgedSubmissions) {
566
574
  if (e.user?.id !== l.userId || l.sessionId !== null && e.sessionId !== l.sessionId) {
567
575
  this.unacknowledgedSubmissions.delete(a);
@@ -571,7 +579,7 @@ class j {
571
579
  (c) => c.clientMessageId === a
572
580
  );
573
581
  if (o) {
574
- o.attachments = C(
582
+ o.attachments = q(
575
583
  l.message.attachments,
576
584
  o.attachments
577
585
  ), this.unacknowledgedSubmissions.delete(a);
@@ -579,8 +587,8 @@ class j {
579
587
  }
580
588
  l.sessionId ??= e.sessionId, this.state.messages.push(l.message), this.state.pendingMessageStatus = "sending", this.state.turnPhase ??= "sending", this.state.taskStatus ??= "working";
581
589
  }
582
- if (t !== void 0 && (this.model = t), s) {
583
- this.sessionHistoryState = w(s);
590
+ if (t !== void 0 && (this.model = t), i) {
591
+ this.sessionHistoryState = I(i);
584
592
  for (const a of this.sessionHistoryListeners)
585
593
  a(this.getSessionHistoryState());
586
594
  }
@@ -612,6 +620,10 @@ class j {
612
620
  recordWidgetLifecycle(e, t) {
613
621
  this.dispatch({ type: "runtime.widget_lifecycle", action: e, trigger: t });
614
622
  }
623
+ reportResponseVisibility(e) {
624
+ this.adapter.dispatch({ type: "runtime.report_response_visibility", observation: e }).catch(() => {
625
+ });
626
+ }
615
627
  reportInvalidStateTransition(e, t) {
616
628
  this.adapter.dispatch({
617
629
  type: "runtime.report_invalid_state_transition",
@@ -620,22 +632,22 @@ class j {
620
632
  }).catch(() => {
621
633
  });
622
634
  }
623
- reportDisplayedError(e, t, s) {
635
+ reportDisplayedError(e, t, i) {
624
636
  this.adapter.dispatch({
625
637
  type: "runtime.report_displayed_error",
626
638
  reason: e,
627
639
  errorFingerprint: t,
628
- ...s ? { displayedMessage: k(s) } : {}
640
+ ...i ? { displayedMessage: x(i) } : {}
629
641
  }).catch(() => {
630
642
  });
631
643
  }
632
644
  sendMessage(e, t = {}) {
633
- const s = e.trim(), n = t.attachments ?? [];
634
- if (!s && n.length === 0) return Promise.resolve(null);
645
+ const i = e.trim(), n = t.attachments ?? [];
646
+ if (!i && n.length === 0) return Promise.resolve(null);
635
647
  const r = t.clientMessageId ?? (t.proactiveSuggestionQuestion && this.stagedProactiveSuggestionClientMessageId ? this.stagedProactiveSuggestionClientMessageId : crypto.randomUUID()), a = t.submittedAt ?? Date.now(), l = this.state, o = {
636
648
  id: `local-${r}`,
637
649
  role: "user",
638
- content: s,
650
+ content: i,
639
651
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
640
652
  ...n.length > 0 ? { attachments: n } : {},
641
653
  clientMessageId: r
@@ -653,12 +665,12 @@ class j {
653
665
  isRetrying: !1,
654
666
  lastError: null
655
667
  }, this.emit("state", this.getState()), this.enqueueOperation(() => this.sendMessageNow(
656
- s,
668
+ i,
657
669
  { ...t, clientMessageId: r, submittedAt: a },
658
670
  l
659
671
  ));
660
672
  }
661
- async sendMessageNow(e, t, s) {
673
+ async sendMessageNow(e, t, i) {
662
674
  const n = e, r = t.clientMessageId;
663
675
  let a = t.attachments ?? [], l = !1;
664
676
  try {
@@ -668,7 +680,7 @@ class j {
668
680
  clientMessageId: r,
669
681
  proactiveSuggestionQuestion: t.proactiveSuggestionQuestion,
670
682
  // Preview URLs belong to the renderer's optimistic snapshot and are not valid runtime-command metadata.
671
- attachments: a.length > 0 ? a.map(A) : void 0,
683
+ attachments: a.length > 0 ? a.map(w) : void 0,
672
684
  submittedAt: t.submittedAt
673
685
  }), l = !0, a.length > 0) {
674
686
  if (!this.adapter.uploadAttachment)
@@ -679,9 +691,9 @@ class j {
679
691
  c.push(d);
680
692
  continue;
681
693
  }
682
- const v = d.id ? this.attachmentFiles.get(d.id) : void 0;
683
- if (!v) throw new Error(`Attachment bytes are unavailable for ${d.name}`);
684
- c.push(await this.adapter.uploadAttachment(v, d, { clientMessageId: r }));
694
+ const b = d.id ? this.attachmentFiles.get(d.id) : void 0;
695
+ if (!b) throw new Error(`Attachment bytes are unavailable for ${d.name}`);
696
+ c.push(await this.adapter.uploadAttachment(b, d, { clientMessageId: r }));
685
697
  }
686
698
  a = c;
687
699
  }
@@ -693,7 +705,7 @@ class j {
693
705
  invocation: t.invocation,
694
706
  proactiveSuggestionQuestion: t.proactiveSuggestionQuestion,
695
707
  ...t.automationOnboarding ? { automationOnboarding: !0 } : {},
696
- attachments: a.length > 0 ? a.map(A) : void 0
708
+ attachments: a.length > 0 ? a.map(w) : void 0
697
709
  });
698
710
  for (const c of t.attachments ?? [])
699
711
  c.id && this.attachmentFiles.delete(c.id);
@@ -704,10 +716,10 @@ class j {
704
716
  messages: this.state.messages.filter(
705
717
  (c) => c.id !== `local-${r}` && c.id !== `optimistic-user-message:${r}`
706
718
  ),
707
- pendingMessageStatus: s.pendingMessageStatus,
708
- turnPhase: s.turnPhase,
709
- isThinking: s.isThinking,
710
- taskStatus: s.taskStatus
719
+ pendingMessageStatus: i.pendingMessageStatus,
720
+ turnPhase: i.turnPhase,
721
+ isThinking: i.isThinking,
722
+ taskStatus: i.taskStatus
711
723
  }, this.emit("state", this.getState()), l && await this.adapter.dispatch({
712
724
  type: "conversation.fail_staged",
713
725
  clientMessageId: r,
@@ -746,12 +758,12 @@ class j {
746
758
  await this.dispatch({ type: "session.list", ...e });
747
759
  const t = this.sessionHistoryState.data;
748
760
  return {
749
- sessions: I(t),
761
+ sessions: _(t),
750
762
  nextCursor: t?.nextCursor ?? null
751
763
  };
752
764
  }
753
765
  getSessionHistoryState() {
754
- return w(this.sessionHistoryState);
766
+ return I(this.sessionHistoryState);
755
767
  }
756
768
  subscribeSessionHistory(e) {
757
769
  return this.sessionHistoryListeners.add(e), e(this.getSessionHistoryState()), () => this.sessionHistoryListeners.delete(e);
@@ -779,12 +791,12 @@ class j {
779
791
  subscribeInteractions(e) {
780
792
  return this.interactionListeners.add(e), e(this.getInteractions()), () => this.interactionListeners.delete(e);
781
793
  }
782
- actOnInteraction(e, t, s, n = {}) {
794
+ actOnInteraction(e, t, i, n = {}) {
783
795
  return this.dispatch({
784
796
  type: "interaction.act",
785
797
  interactionId: e,
786
798
  action: t,
787
- expectedRevision: s,
799
+ expectedRevision: i,
788
800
  ...n
789
801
  }).then(() => {
790
802
  });
@@ -805,11 +817,11 @@ class j {
805
817
  stageProactiveSuggestionQuestion(e) {
806
818
  const t = e.trim();
807
819
  if (!t) return Promise.resolve();
808
- const s = this.stagedProactiveSuggestionClientMessageId ?? crypto.randomUUID();
809
- return this.stagedProactiveSuggestionClientMessageId = s, this.dispatch({
820
+ const i = this.stagedProactiveSuggestionClientMessageId ?? crypto.randomUUID();
821
+ return this.stagedProactiveSuggestionClientMessageId = i, this.dispatch({
810
822
  type: "conversation.stage_proactive_suggestion",
811
823
  question: t,
812
- clientMessageId: s
824
+ clientMessageId: i
813
825
  }).then(() => {
814
826
  });
815
827
  }
@@ -826,73 +838,73 @@ class j {
826
838
  ), t;
827
839
  }
828
840
  emit(e, t) {
829
- const s = this.listeners[e];
830
- for (const n of s ?? []) n(t);
841
+ const i = this.listeners[e];
842
+ for (const n of i ?? []) n(t);
831
843
  }
832
844
  }
833
- function C(i, e) {
834
- if (!e || !i) return e;
845
+ function q(s, e) {
846
+ if (!e || !s) return e;
835
847
  const t = /* @__PURE__ */ new Map();
836
- for (const s of i) {
837
- const n = s.previewUrl;
838
- s.id && n && t.set(s.id, n);
848
+ for (const i of s) {
849
+ const n = i.previewUrl;
850
+ i.id && n && t.set(i.id, n);
839
851
  }
840
- return e.map((s) => {
841
- const n = s.id ? t.get(s.id) : void 0;
842
- return n ? { ...s, previewUrl: n } : s;
852
+ return e.map((i) => {
853
+ const n = i.id ? t.get(i.id) : void 0;
854
+ return n ? { ...i, previewUrl: n } : i;
843
855
  });
844
856
  }
845
- function f(i) {
857
+ function y(s) {
846
858
  return {
847
- ...i,
848
- starterPrompts: [...i.starterPrompts],
849
- appearance: i.appearance ? { ...i.appearance } : null,
850
- messages: i.messages.map((e) => {
859
+ ...s,
860
+ starterPrompts: [...s.starterPrompts],
861
+ appearance: s.appearance ? { ...s.appearance } : null,
862
+ messages: s.messages.map((e) => {
851
863
  const t = {
852
864
  ...e,
853
865
  attachments: e.attachments?.map((a) => ({ ...a }))
854
- }, s = e.assistantDraftItemId, n = e.clientMessageId, r = e.proactiveSuggestionClientMessageId;
866
+ }, i = e.assistantDraftItemId, n = e.clientMessageId, r = e.proactiveSuggestionClientMessageId;
855
867
  return r && Object.defineProperty(t, "proactiveSuggestionClientMessageId", {
856
868
  value: r,
857
869
  enumerable: !1
858
- }), s && Object.defineProperty(t, "assistantDraftItemId", {
859
- value: s,
870
+ }), i && Object.defineProperty(t, "assistantDraftItemId", {
871
+ value: i,
860
872
  enumerable: !1
861
873
  }), n && Object.defineProperty(t, "clientMessageId", {
862
874
  value: n,
863
875
  enumerable: !1
864
876
  }), t;
865
877
  }),
866
- activeScheduledFollowUps: i.activeScheduledFollowUps?.map((e) => ({ ...e })) ?? null
878
+ activeScheduledFollowUps: s.activeScheduledFollowUps?.map((e) => ({ ...e })) ?? null
867
879
  };
868
880
  }
869
- function w(i) {
881
+ function I(s) {
870
882
  return {
871
- ...i,
872
- data: i.data ? p({
873
- entities: I(i.data).map((e) => ({ ...e })),
874
- nextCursor: i.data.nextCursor
883
+ ...s,
884
+ data: s.data ? p({
885
+ entities: _(s.data).map((e) => ({ ...e })),
886
+ nextCursor: s.data.nextCursor
875
887
  }) : null
876
888
  };
877
889
  }
878
890
  export {
879
- z as ProductAgentInteractionManager,
880
- b as ProductAgentQueryController,
881
- j as ProductAgentRemoteRuntimeClient,
882
- B as ProductAgentSessionHistoryManager,
883
- U as ProductAgentTaskPageTitleController,
884
- F as createLocalStorageInteractionDecisionStorage,
891
+ U as ProductAgentInteractionManager,
892
+ A as ProductAgentQueryController,
893
+ Z as ProductAgentRemoteRuntimeClient,
894
+ F as ProductAgentSessionHistoryManager,
895
+ H as ProductAgentTaskPageTitleController,
896
+ N as createLocalStorageInteractionDecisionStorage,
885
897
  h as createProductAgentQueryState,
886
- N as createProductAgentTaskPageTitleDocument,
887
- O as formatProductAgentTaskPageTitle,
888
- Q as hasProductAgentPaidCreditFallback,
889
- H as isProductAgentRuntimeCommand,
890
- _ as mergeProductAgentEntityPages,
898
+ j as createProductAgentTaskPageTitleDocument,
899
+ k as formatProductAgentTaskPageTitle,
900
+ K as hasProductAgentPaidCreditFallback,
901
+ V as isProductAgentRuntimeCommand,
902
+ P as mergeProductAgentEntityPages,
891
903
  p as normalizeProductAgentEntityPage,
892
- T as readLocalStorageInteractionDecisions,
893
- q as reconcileProductAgentSubmissionGate,
894
- $ as resolveProductAgentBillingPresentation,
895
- K as resolveProductAgentComposerAction,
896
- L as resolveProductAgentWidgetPresentation,
897
- I as selectProductAgentQueryEntities
904
+ M as readLocalStorageInteractionDecisions,
905
+ $ as reconcileProductAgentSubmissionGate,
906
+ z as resolveProductAgentBillingPresentation,
907
+ B as resolveProductAgentComposerAction,
908
+ Q as resolveProductAgentWidgetPresentation,
909
+ _ as selectProductAgentQueryEntities
898
910
  };