@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.
- package/dist/index.d.ts +20 -0
- package/dist/product-agent-runtime.cjs +1 -1
- package/dist/product-agent-runtime.js +218 -206
- package/dist/product-agent-sdk.js +1107 -1050
- package/dist/product-agent-widget.js +2874 -2804
- package/dist/public/operationRoutes.d.ts +2 -0
- package/dist/responseDiagnostics.d.ts +10 -0
- package/dist/runtimeClient.d.ts +6 -1
- package/dist/uiFlightRecorder.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function h(
|
|
1
|
+
function h(s) {
|
|
2
2
|
return {
|
|
3
|
-
key:
|
|
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
|
|
12
|
-
constructor(e, t,
|
|
13
|
-
this.loader = t, this.merge =
|
|
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,
|
|
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:
|
|
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 ||
|
|
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 ||
|
|
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(
|
|
86
|
+
function p(s) {
|
|
87
87
|
const e = {}, t = [];
|
|
88
|
-
for (const
|
|
89
|
-
e[
|
|
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:
|
|
93
|
+
nextCursor: s.nextCursor
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
function
|
|
97
|
-
if (t === "replace" ||
|
|
98
|
-
const
|
|
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
|
-
|
|
101
|
-
return { entitiesById:
|
|
100
|
+
s.entitiesById[r] || n.push(r);
|
|
101
|
+
return { entitiesById: i, ids: n, nextCursor: e.nextCursor };
|
|
102
102
|
}
|
|
103
|
-
function
|
|
104
|
-
return
|
|
103
|
+
function _(s) {
|
|
104
|
+
return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
|
|
105
105
|
}
|
|
106
|
-
function
|
|
107
|
-
return
|
|
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
|
|
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"] } :
|
|
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
|
|
113
|
-
if (!
|
|
114
|
-
const e =
|
|
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
|
|
118
|
-
return
|
|
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
|
|
121
|
-
const e =
|
|
122
|
-
return
|
|
120
|
+
function B(s) {
|
|
121
|
+
const e = s.hasDraftMessage || s.hasPreSubmittedAttachment;
|
|
122
|
+
return s.hasRunningAssistantTurn && !e ? {
|
|
123
123
|
action: "stop",
|
|
124
|
-
disabled: !
|
|
124
|
+
disabled: !s.canStopRunningTurn
|
|
125
125
|
} : {
|
|
126
126
|
action: "send",
|
|
127
|
-
disabled: !e || !
|
|
127
|
+
disabled: !e || !s.canSubmitMessage
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
|
-
class
|
|
131
|
-
constructor(e, t,
|
|
132
|
-
this.loadPage = t, this.limit =
|
|
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
|
|
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(),
|
|
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(
|
|
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:
|
|
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, (
|
|
219
|
+
}), this.updateEntity(e, (i) => ({ ...i, isActive: t }));
|
|
220
220
|
}
|
|
221
221
|
setPinned(e, t) {
|
|
222
|
-
const
|
|
223
|
-
return this.pinnedOverrides.set(e,
|
|
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,
|
|
229
|
-
this.pinnedOverrides.get(e) === t && (this.pinnedOverrides.delete(e), this.updateEntity(e, (n) => ({ ...n, isPinned:
|
|
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, (
|
|
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((
|
|
242
|
-
for (const
|
|
243
|
-
t.has(
|
|
244
|
-
for (const
|
|
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
|
|
252
|
-
e.push(...
|
|
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
|
|
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) :
|
|
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) :
|
|
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
|
|
268
|
-
|
|
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(
|
|
280
|
-
return
|
|
279
|
+
function u(s) {
|
|
280
|
+
return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
|
|
281
281
|
}
|
|
282
|
-
function
|
|
283
|
-
return
|
|
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
|
|
285
|
+
class U {
|
|
286
286
|
constructor(e, t = null) {
|
|
287
287
|
this.storage = e, t && (this.decisions = new Map(
|
|
288
|
-
t.filter(
|
|
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(
|
|
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
|
|
305
|
-
return
|
|
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
|
|
312
|
-
if (
|
|
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
|
|
318
|
-
return n !== void 0 ? n : (this.scheduledEligibility.set(
|
|
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((
|
|
323
|
-
...Array.from(this.decisions.values()).map((
|
|
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,
|
|
328
|
-
const n = this.actionQueue.then(() => this.applyAction(e, t,
|
|
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,
|
|
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 =
|
|
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,
|
|
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,
|
|
351
|
+
getNextEligibleAt(e, t, i, n) {
|
|
352
352
|
if (t === "later")
|
|
353
|
-
return new Date(
|
|
353
|
+
return new Date(i.getTime() + (e.laterDelayMs ?? 3600 * 1e3)).toISOString();
|
|
354
354
|
if (t === "snooze") {
|
|
355
|
-
if (!n || n.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
|
|
372
|
+
function N(s, e) {
|
|
373
373
|
return {
|
|
374
|
-
load: async () =>
|
|
375
|
-
save: async (t) =>
|
|
374
|
+
load: async () => M(s, e),
|
|
375
|
+
save: async (t) => s.setItem(e, JSON.stringify(t))
|
|
376
376
|
};
|
|
377
377
|
}
|
|
378
|
-
function
|
|
379
|
-
const t =
|
|
378
|
+
function M(s, e) {
|
|
379
|
+
const t = s.getItem(e);
|
|
380
380
|
if (!t) return [];
|
|
381
|
-
const
|
|
382
|
-
return Array.isArray(
|
|
381
|
+
const i = JSON.parse(t);
|
|
382
|
+
return Array.isArray(i) ? i.filter(v) : [];
|
|
383
383
|
}
|
|
384
|
-
function m(
|
|
385
|
-
return `${
|
|
384
|
+
function m(s) {
|
|
385
|
+
return `${s.level}:${s.key}`;
|
|
386
386
|
}
|
|
387
|
-
function E(
|
|
388
|
-
return
|
|
387
|
+
function E(s) {
|
|
388
|
+
return s === "dismiss" || s === "later" || s === "snooze" || s === "never" || s === "dont_show_again";
|
|
389
389
|
}
|
|
390
|
-
function
|
|
391
|
-
if (!
|
|
392
|
-
const e =
|
|
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
|
|
395
|
+
const D = {
|
|
396
396
|
working: "⏳",
|
|
397
397
|
completed: "✅",
|
|
398
398
|
failed: "❗",
|
|
399
399
|
stopped: "⏹️"
|
|
400
|
-
},
|
|
401
|
-
function
|
|
402
|
-
if (!e) return g(
|
|
403
|
-
const t = g(
|
|
404
|
-
return t ? `${
|
|
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
|
|
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,
|
|
424
|
-
|
|
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,
|
|
432
|
-
this.status = null, this.lastAppliedTitle = null, this.stopObserving?.(), this.stopObserving = null, t ? this.titleDocument.setTitle(this.baseTitle) :
|
|
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 =
|
|
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
|
|
444
|
+
function j(s) {
|
|
445
445
|
return {
|
|
446
|
-
getTitle: () =>
|
|
446
|
+
getTitle: () => s.title,
|
|
447
447
|
setTitle: (e) => {
|
|
448
|
-
|
|
448
|
+
s.title = e;
|
|
449
449
|
},
|
|
450
450
|
observeTitle: (e) => {
|
|
451
451
|
const t = new MutationObserver(e);
|
|
452
|
-
return t.observe(
|
|
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(
|
|
461
|
-
return
|
|
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
|
|
465
|
-
const e =
|
|
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
|
|
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
|
|
482
|
-
return typeof
|
|
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
|
|
490
|
+
function w(s) {
|
|
485
491
|
return {
|
|
486
|
-
...
|
|
487
|
-
name:
|
|
488
|
-
mimeType:
|
|
489
|
-
sizeBytes:
|
|
490
|
-
...
|
|
491
|
-
...
|
|
492
|
-
...
|
|
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
|
|
496
|
-
if (!
|
|
497
|
-
const e =
|
|
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" ||
|
|
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
|
|
537
|
-
constructor(e, t,
|
|
538
|
-
this.adapter = t, this.state =
|
|
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
|
|
557
|
-
return
|
|
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
|
|
568
|
+
return y(this.state);
|
|
561
569
|
}
|
|
562
|
-
updateProjection(e, t,
|
|
570
|
+
updateProjection(e, t, i, n, r) {
|
|
563
571
|
if (!this.destroyed) {
|
|
564
|
-
this.state =
|
|
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 =
|
|
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),
|
|
583
|
-
this.sessionHistoryState =
|
|
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,
|
|
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
|
-
...
|
|
640
|
+
...i ? { displayedMessage: x(i) } : {}
|
|
629
641
|
}).catch(() => {
|
|
630
642
|
});
|
|
631
643
|
}
|
|
632
644
|
sendMessage(e, t = {}) {
|
|
633
|
-
const
|
|
634
|
-
if (!
|
|
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:
|
|
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
|
-
|
|
668
|
+
i,
|
|
657
669
|
{ ...t, clientMessageId: r, submittedAt: a },
|
|
658
670
|
l
|
|
659
671
|
));
|
|
660
672
|
}
|
|
661
|
-
async sendMessageNow(e, t,
|
|
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(
|
|
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
|
|
683
|
-
if (!
|
|
684
|
-
c.push(await this.adapter.uploadAttachment(
|
|
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(
|
|
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:
|
|
708
|
-
turnPhase:
|
|
709
|
-
isThinking:
|
|
710
|
-
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:
|
|
761
|
+
sessions: _(t),
|
|
750
762
|
nextCursor: t?.nextCursor ?? null
|
|
751
763
|
};
|
|
752
764
|
}
|
|
753
765
|
getSessionHistoryState() {
|
|
754
|
-
return
|
|
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,
|
|
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:
|
|
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
|
|
809
|
-
return this.stagedProactiveSuggestionClientMessageId =
|
|
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:
|
|
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
|
|
830
|
-
for (const n of
|
|
841
|
+
const i = this.listeners[e];
|
|
842
|
+
for (const n of i ?? []) n(t);
|
|
831
843
|
}
|
|
832
844
|
}
|
|
833
|
-
function
|
|
834
|
-
if (!e || !
|
|
845
|
+
function q(s, e) {
|
|
846
|
+
if (!e || !s) return e;
|
|
835
847
|
const t = /* @__PURE__ */ new Map();
|
|
836
|
-
for (const
|
|
837
|
-
const n =
|
|
838
|
-
|
|
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((
|
|
841
|
-
const n =
|
|
842
|
-
return n ? { ...
|
|
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
|
|
857
|
+
function y(s) {
|
|
846
858
|
return {
|
|
847
|
-
...
|
|
848
|
-
starterPrompts: [...
|
|
849
|
-
appearance:
|
|
850
|
-
messages:
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
859
|
-
value:
|
|
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:
|
|
878
|
+
activeScheduledFollowUps: s.activeScheduledFollowUps?.map((e) => ({ ...e })) ?? null
|
|
867
879
|
};
|
|
868
880
|
}
|
|
869
|
-
function
|
|
881
|
+
function I(s) {
|
|
870
882
|
return {
|
|
871
|
-
...
|
|
872
|
-
data:
|
|
873
|
-
entities:
|
|
874
|
-
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
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
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
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
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
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
904
|
+
M as readLocalStorageInteractionDecisions,
|
|
905
|
+
$ as reconcileProductAgentSubmissionGate,
|
|
906
|
+
z as resolveProductAgentBillingPresentation,
|
|
907
|
+
B as resolveProductAgentComposerAction,
|
|
908
|
+
Q as resolveProductAgentWidgetPresentation,
|
|
909
|
+
_ as selectProductAgentQueryEntities
|
|
898
910
|
};
|