@pluno/product-agent-web 0.1.237 → 0.1.239
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/adapters/web/backendHttp.d.ts +0 -1
- package/dist/adapters/web/conversationPresentation.d.ts +1 -1
- package/dist/core/conversation/contracts.d.ts +3 -0
- package/dist/core/conversation/historyRefreshFailure.d.ts +8 -0
- package/dist/core/conversation/selectors.d.ts +1 -0
- package/dist/core/conversation/state.d.ts +1 -0
- package/dist/displayedErrors.d.ts +2 -1
- package/dist/httpDiagnostics.d.ts +3 -0
- package/dist/index.d.ts +4 -1
- package/dist/product-agent-runtime.cjs +1 -1
- package/dist/product-agent-runtime.js +233 -205
- package/dist/product-agent-sdk.js +1760 -1703
- package/dist/product-agent-widget.js +2488 -2443
- package/dist/renderDiagnostics.d.ts +3 -0
- package/dist/runtimeClient.d.ts +5 -2
- package/package.json +1 -1
|
@@ -93,34 +93,34 @@ function y(s) {
|
|
|
93
93
|
nextCursor: s.nextCursor
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
function
|
|
96
|
+
function F(s, e, t) {
|
|
97
97
|
if (t === "replace" || s === null) return e;
|
|
98
98
|
const i = { ...s.entitiesById, ...e.entitiesById }, n = [...s.ids];
|
|
99
99
|
for (const r of e.ids)
|
|
100
100
|
s.entitiesById[r] || n.push(r);
|
|
101
101
|
return { entitiesById: i, ids: n, nextCursor: e.nextCursor };
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function B(s) {
|
|
104
104
|
return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
|
|
105
105
|
}
|
|
106
|
-
function
|
|
106
|
+
function he(s) {
|
|
107
107
|
return s.visible ? s.minimized ? { state: "minimized" } : { state: s.open ? "visible_open" : "visible_closed" } : { state: "hidden" };
|
|
108
108
|
}
|
|
109
|
-
function
|
|
109
|
+
function ge(s, e) {
|
|
110
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
|
|
112
|
+
function fe(s) {
|
|
113
113
|
if (!s || typeof s != "object") return !1;
|
|
114
114
|
const e = s.paidCreditFallbackModel;
|
|
115
115
|
return typeof e == "string" && e.length > 0;
|
|
116
116
|
}
|
|
117
|
-
function
|
|
117
|
+
function me(s) {
|
|
118
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
|
|
120
|
+
function ye(s) {
|
|
121
121
|
return s.submissionAllowed && s.isAuthenticated && s.hasWorkspace && !s.isWebsiteBlocked && s.isCurrentPageResolved && !s.isSubmitting && !s.hasPendingMessage;
|
|
122
122
|
}
|
|
123
|
-
function
|
|
123
|
+
function ve(s) {
|
|
124
124
|
const e = s.hasDraftMessage || s.hasPreSubmittedAttachment;
|
|
125
125
|
return s.hasRunningAssistantTurn && !e ? {
|
|
126
126
|
action: "stop",
|
|
@@ -131,10 +131,10 @@ function ye(s) {
|
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
133
|
const Q = "Pluno is reconnecting. Try again in a moment.";
|
|
134
|
-
function
|
|
134
|
+
function G(s) {
|
|
135
135
|
return (s instanceof Error ? s.message : s) === Q;
|
|
136
136
|
}
|
|
137
|
-
class
|
|
137
|
+
class be {
|
|
138
138
|
constructor(e, t, i = 20) {
|
|
139
139
|
this.loadPage = t, this.limit = i, this.recentQuery = new O(
|
|
140
140
|
`${e}:recent`,
|
|
@@ -144,7 +144,7 @@ class ve {
|
|
|
144
144
|
nextCursor: r.nextCursor
|
|
145
145
|
}))
|
|
146
146
|
),
|
|
147
|
-
|
|
147
|
+
F
|
|
148
148
|
), this.pinnedQuery = new O(
|
|
149
149
|
`${e}:pinned`,
|
|
150
150
|
async () => y({
|
|
@@ -171,14 +171,14 @@ class ve {
|
|
|
171
171
|
...g(e.data)
|
|
172
172
|
], n = new Map(i.map((d) => [d.id, d])), r = Array.from(n.values()).map(
|
|
173
173
|
(d) => this.applyOverrides(d, this.completedRefreshSequence)
|
|
174
|
-
),
|
|
175
|
-
entities: [...
|
|
174
|
+
), o = Array.from(this.optimisticEntities.values()).filter((d) => !n.has(d.id)).reverse(), a = e.data || t.data || o.length > 0 ? y({
|
|
175
|
+
entities: [...o, ...r],
|
|
176
176
|
nextCursor: e.data?.nextCursor ?? null
|
|
177
177
|
}) : null;
|
|
178
178
|
return {
|
|
179
179
|
key: e.key.slice(0, -7),
|
|
180
|
-
status:
|
|
181
|
-
data:
|
|
180
|
+
status: H(e, t),
|
|
181
|
+
data: a,
|
|
182
182
|
error: e.error ?? t.error,
|
|
183
183
|
requestId: Math.max(e.requestId, t.requestId),
|
|
184
184
|
updatedAt: Math.max(e.updatedAt ?? 0, t.updatedAt ?? 0) || null
|
|
@@ -286,10 +286,10 @@ class ve {
|
|
|
286
286
|
function g(s) {
|
|
287
287
|
return s ? s.ids.map((e) => s.entitiesById[e]).filter((e) => !!e) : [];
|
|
288
288
|
}
|
|
289
|
-
function
|
|
289
|
+
function H(s, e) {
|
|
290
290
|
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";
|
|
291
291
|
}
|
|
292
|
-
function
|
|
292
|
+
function q(s) {
|
|
293
293
|
const e = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})(?:\.(\d{1,6}))?(?:Z|\+00:00)$/.exec(s);
|
|
294
294
|
if (!e) throw new Error("Display timestamps must retain the backend UTC precision.");
|
|
295
295
|
return `${e[1]}.${(e[2] ?? "").padEnd(6, "0")}`;
|
|
@@ -305,22 +305,22 @@ function b(s) {
|
|
|
305
305
|
function N(s) {
|
|
306
306
|
return s !== null && typeof s == "object" && !Object.isFrozen(s) && (Object.values(s).forEach(N), Object.freeze(s)), s;
|
|
307
307
|
}
|
|
308
|
-
function
|
|
308
|
+
function Z(s) {
|
|
309
309
|
if (!b(s)) throw new Error("Conversation inputs must be JSON-safe values.");
|
|
310
310
|
return JSON.parse(JSON.stringify(s));
|
|
311
311
|
}
|
|
312
|
-
function
|
|
312
|
+
function V(s, e) {
|
|
313
313
|
if (!e) return !1;
|
|
314
314
|
const t = s.executionByUserMessage[e];
|
|
315
315
|
if (t) return ["completed", "stopped", "failed"].includes(t.phase);
|
|
316
|
-
const i = Object.values(s.items).sort((r,
|
|
316
|
+
const i = Object.values(s.items).sort((r, o) => q(r.created_at).localeCompare(q(o.created_at)) || r.id.localeCompare(o.id));
|
|
317
317
|
let n = !1;
|
|
318
318
|
for (const r of i)
|
|
319
319
|
if (r.type === "user_message" && (n = r.id === e), !!n && (r.type === "stopped" || r.type === "error" || r.type === "final_response" && s.streams[r.id]?.state === "finished" && s.streams[r.id].revision >= r.data.revision))
|
|
320
320
|
return !0;
|
|
321
321
|
return !1;
|
|
322
322
|
}
|
|
323
|
-
class
|
|
323
|
+
class Ie {
|
|
324
324
|
constructor(e, t = null) {
|
|
325
325
|
this.storage = e, t && (this.decisions = new Map(
|
|
326
326
|
t.filter(T).map((i) => [this.getDecisionKey(i), i])
|
|
@@ -344,8 +344,8 @@ class be {
|
|
|
344
344
|
const i = JSON.stringify([t.conversation_id, t.id]), n = this.sources.get(i);
|
|
345
345
|
if (n && n.version >= t.version) continue;
|
|
346
346
|
if (n && n.payload.kind !== t.payload.kind) throw new Error("Interaction kind changed.");
|
|
347
|
-
const r = n?.payload.kind === "personal_channel" && n.lifecycle === "completed" ? "completed" : t.lifecycle,
|
|
348
|
-
this.sources.set(i, N(
|
|
347
|
+
const r = n?.payload.kind === "personal_channel" && n.lifecycle === "completed" ? "completed" : t.lifecycle, o = n?.payload.kind === "sharing" && t.payload.kind === "sharing" ? { ...t.payload, variant: n.payload.variant } : t.payload;
|
|
348
|
+
this.sources.set(i, N(Z({ ...t, lifecycle: r, payload: o }))), t.payload.kind === "integration_auth" && this.invalidateAuth(t.payload.request_id);
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
/** @internal */
|
|
@@ -357,38 +357,38 @@ class be {
|
|
|
357
357
|
if (!this.conversationReader) return;
|
|
358
358
|
const t = { share: null, integrations: [], channel: null }, i = e ? this.conversationReader(e) : null;
|
|
359
359
|
if (!i) return t;
|
|
360
|
-
const n = [...this.sources.values()].filter((r) => r.conversation_id === e).sort((r,
|
|
360
|
+
const n = [...this.sources.values()].filter((r) => r.conversation_id === e).sort((r, o) => r.version - o.version || r.id.localeCompare(o.id));
|
|
361
361
|
for (const r of n) {
|
|
362
|
-
const
|
|
363
|
-
if (
|
|
364
|
-
if (t.share = null, !
|
|
365
|
-
const
|
|
362
|
+
const o = r.payload;
|
|
363
|
+
if (o.kind === "sharing") {
|
|
364
|
+
if (t.share = null, !o.eligible || r.lifecycle !== "pending" || r.invocation !== "user" || !["main_web_chat", "automation", "extension_sidepanel", "extension_widget"].includes(r.entry_surface ?? "")) continue;
|
|
365
|
+
const a = r.user_message_id ? i.items[r.user_message_id] : null;
|
|
366
366
|
t.share = {
|
|
367
367
|
revision: r.version,
|
|
368
368
|
candidate: {
|
|
369
369
|
id: r.id,
|
|
370
|
-
variant:
|
|
371
|
-
userPrompt:
|
|
370
|
+
variant: o.variant,
|
|
371
|
+
userPrompt: a?.type === "user_message" ? a.data.content : "",
|
|
372
372
|
assistantAnswer: ""
|
|
373
373
|
},
|
|
374
|
-
terminal: !
|
|
374
|
+
terminal: !o.wait_for_terminal || V(i, r.user_message_id)
|
|
375
375
|
};
|
|
376
|
-
} else
|
|
376
|
+
} else o.kind === "integration_auth" ? t.integrations.push({
|
|
377
377
|
revision: r.version,
|
|
378
378
|
request: {
|
|
379
379
|
type: "pipedream_auth_required",
|
|
380
|
-
authRequestId:
|
|
381
|
-
appSlug:
|
|
382
|
-
appName:
|
|
383
|
-
appLogo:
|
|
384
|
-
expiresAt:
|
|
380
|
+
authRequestId: o.request_id,
|
|
381
|
+
appSlug: o.app_slug,
|
|
382
|
+
appName: o.app_name,
|
|
383
|
+
appLogo: o.app_logo ?? void 0,
|
|
384
|
+
expiresAt: o.expires_at
|
|
385
385
|
},
|
|
386
|
-
lifecycle: r.lifecycle === "pending" && Date.parse(
|
|
386
|
+
lifecycle: r.lifecycle === "pending" && Date.parse(o.expires_at) <= Date.now() ? "expired" : r.lifecycle
|
|
387
387
|
}) : t.channel = { revision: r.version, request: {
|
|
388
388
|
type: "personal_channel_connection_required",
|
|
389
|
-
requestId:
|
|
390
|
-
channel:
|
|
391
|
-
managementUrl:
|
|
389
|
+
requestId: o.request_id,
|
|
390
|
+
channel: o.channel,
|
|
391
|
+
managementUrl: o.management_url
|
|
392
392
|
}, lifecycle: r.lifecycle };
|
|
393
393
|
}
|
|
394
394
|
return t;
|
|
@@ -437,7 +437,7 @@ class be {
|
|
|
437
437
|
async applyAction(e, t, i) {
|
|
438
438
|
if (!e.allowedActions.includes(t))
|
|
439
439
|
throw new Error(`Interaction ${e.key} does not allow ${t}.`);
|
|
440
|
-
if (
|
|
440
|
+
if (!$(t))
|
|
441
441
|
throw new Error(`Interaction action ${t} is not a persistence decision.`);
|
|
442
442
|
const n = i.now ?? /* @__PURE__ */ new Date(), r = {
|
|
443
443
|
promptKey: e.key,
|
|
@@ -446,8 +446,8 @@ class be {
|
|
|
446
446
|
scope: e.scope,
|
|
447
447
|
decidedAt: n.toISOString(),
|
|
448
448
|
nextEligibleAt: this.getNextEligibleAt(e, t, n, i.snoozeUntil)
|
|
449
|
-
},
|
|
450
|
-
return
|
|
449
|
+
}, o = t === "dont_show_again" ? this.getCategoryKey(e) : this.getExactKey(e), a = new Map(this.decisions);
|
|
450
|
+
return a.set(o, r), await this.storage.save([...a.values()]), this.decisions = a, r;
|
|
451
451
|
}
|
|
452
452
|
isDecisionEligible(e, t) {
|
|
453
453
|
return e ? e.action === "dismiss" || e.action === "never" || e.action === "dont_show_again" ? !1 : !e.nextEligibleAt || Date.parse(e.nextEligibleAt) <= t : !0;
|
|
@@ -463,48 +463,48 @@ class be {
|
|
|
463
463
|
return null;
|
|
464
464
|
}
|
|
465
465
|
getDecisionKey(e) {
|
|
466
|
-
const t =
|
|
466
|
+
const t = _(e.scope);
|
|
467
467
|
return e.action === "dont_show_again" ? `${t}:category:${e.category}` : `${t}:interaction:${e.promptKey}`;
|
|
468
468
|
}
|
|
469
469
|
getExactKey(e) {
|
|
470
|
-
return `${
|
|
470
|
+
return `${_(e.scope)}:interaction:${e.key}`;
|
|
471
471
|
}
|
|
472
472
|
getCategoryKey(e) {
|
|
473
|
-
return `${
|
|
473
|
+
return `${_(e.scope)}:category:${e.category}`;
|
|
474
474
|
}
|
|
475
475
|
}
|
|
476
476
|
function _e(s, e) {
|
|
477
477
|
return {
|
|
478
|
-
load: async () =>
|
|
478
|
+
load: async () => J(s, e),
|
|
479
479
|
save: async (t) => s.setItem(e, JSON.stringify(t))
|
|
480
480
|
};
|
|
481
481
|
}
|
|
482
|
-
function
|
|
482
|
+
function J(s, e) {
|
|
483
483
|
const t = s.getItem(e);
|
|
484
484
|
if (!t) return [];
|
|
485
485
|
const i = JSON.parse(t);
|
|
486
486
|
return Array.isArray(i) ? i.filter(T) : [];
|
|
487
487
|
}
|
|
488
|
-
function
|
|
488
|
+
function _(s) {
|
|
489
489
|
return `${s.level}:${s.key}`;
|
|
490
490
|
}
|
|
491
|
-
function
|
|
491
|
+
function $(s) {
|
|
492
492
|
return s === "dismiss" || s === "later" || s === "snooze" || s === "never" || s === "dont_show_again";
|
|
493
493
|
}
|
|
494
494
|
function T(s) {
|
|
495
495
|
if (!s || typeof s != "object") return !1;
|
|
496
496
|
const e = s;
|
|
497
|
-
return typeof e.promptKey == "string" && typeof e.category == "string" && typeof e.decidedAt == "string" && (e.nextEligibleAt === null || typeof e.nextEligibleAt == "string") &&
|
|
497
|
+
return typeof e.promptKey == "string" && typeof e.category == "string" && typeof e.decidedAt == "string" && (e.nextEligibleAt === null || typeof e.nextEligibleAt == "string") && $(e.action) && !!(e.scope && typeof e.scope == "object" && typeof e.scope.level == "string" && typeof e.scope.key == "string");
|
|
498
498
|
}
|
|
499
|
-
const
|
|
499
|
+
const W = {
|
|
500
500
|
working: "⏳",
|
|
501
501
|
completed: "✅",
|
|
502
502
|
failed: "❗",
|
|
503
503
|
stopped: "⏹️"
|
|
504
|
-
},
|
|
505
|
-
function
|
|
506
|
-
if (!e) return
|
|
507
|
-
const t =
|
|
504
|
+
}, Y = /^(?:⌛|⏳|✅|❗|⏹️) Pluno(?:: )?/;
|
|
505
|
+
function X(s, e) {
|
|
506
|
+
if (!e) return I(s);
|
|
507
|
+
const t = I(s), i = `${W[e]} Pluno`;
|
|
508
508
|
return t ? `${i}: ${t}` : i;
|
|
509
509
|
}
|
|
510
510
|
class Se {
|
|
@@ -529,10 +529,10 @@ class Se {
|
|
|
529
529
|
}
|
|
530
530
|
applyStatus(e) {
|
|
531
531
|
const t = this.titleDocument.getTitle();
|
|
532
|
-
t !== this.lastAppliedTitle && (this.baseTitle =
|
|
532
|
+
t !== this.lastAppliedTitle && (this.baseTitle = I(t)), this.status = e, this.stopObserving || (this.stopObserving = this.titleDocument.observeTitle(() => this.handleTitleChanged())), this.applyTitle();
|
|
533
533
|
}
|
|
534
534
|
applyClear() {
|
|
535
|
-
const e = this.titleDocument.getTitle(), t = this.lastAppliedTitle !== null && e === this.lastAppliedTitle, i = this.lastAppliedTitle === null ?
|
|
535
|
+
const e = this.titleDocument.getTitle(), t = this.lastAppliedTitle !== null && e === this.lastAppliedTitle, i = this.lastAppliedTitle === null ? I(e) : e;
|
|
536
536
|
this.status = null, this.lastAppliedTitle = null, this.stopObserving?.(), this.stopObserving = null, t ? this.titleDocument.setTitle(this.baseTitle) : i !== e && this.titleDocument.setTitle(i);
|
|
537
537
|
}
|
|
538
538
|
handleTitleChanged() {
|
|
@@ -541,11 +541,11 @@ class Se {
|
|
|
541
541
|
applyTitle() {
|
|
542
542
|
if (!this.status)
|
|
543
543
|
return;
|
|
544
|
-
const e =
|
|
544
|
+
const e = X(this.baseTitle, this.status);
|
|
545
545
|
this.lastAppliedTitle = e, this.titleDocument.getTitle() !== e && this.titleDocument.setTitle(e);
|
|
546
546
|
}
|
|
547
547
|
}
|
|
548
|
-
function
|
|
548
|
+
function Ae(s) {
|
|
549
549
|
return {
|
|
550
550
|
getTitle: () => s.title,
|
|
551
551
|
setTitle: (e) => {
|
|
@@ -561,10 +561,41 @@ function Ie(s) {
|
|
|
561
561
|
}
|
|
562
562
|
};
|
|
563
563
|
}
|
|
564
|
-
function
|
|
565
|
-
return s.replace(
|
|
564
|
+
function I(s) {
|
|
565
|
+
return s.replace(Y, "");
|
|
566
|
+
}
|
|
567
|
+
const p = (s) => typeof s == "string" && /^[a-zA-Z0-9:_.-]{1,160}$/.test(s) ? s : null;
|
|
568
|
+
function ee(s) {
|
|
569
|
+
if (!s || typeof s != "object") return !1;
|
|
570
|
+
const e = s, t = (n) => Number.isSafeInteger(n) && n >= 0, i = (n) => n && typeof n == "object" && Object.keys(n).every((r) => ["sequence", "at", "type", "changed", "generation", "sessionId", "scopeId", "requestId", "effectId", "clientScopeId", "reason", "effectKind", "eventType", "itemCount", "removedCount", "projectionReady"].includes(r)) && t(n.sequence) && t(n.at) && p(n.type) !== null && typeof n.changed == "boolean" && [n.generation, n.itemCount, n.removedCount].every((r) => r === null || t(r)) && [n.sessionId, n.scopeId, n.requestId, n.effectId, n.clientScopeId, n.reason, n.effectKind, n.eventType].every((r) => r === null || p(r) !== null) && (n.projectionReady === null || typeof n.projectionReady == "boolean");
|
|
571
|
+
return Object.keys(e).every((n) => ["ownerId", "revision", "dropped", "lastIntent", "lastSelection", "transitions"].includes(n)) && p(e.ownerId) !== null && t(e.revision) && t(e.dropped) && (e.lastIntent == null || i(e.lastIntent)) && (e.lastSelection === null || i(e.lastSelection)) && Array.isArray(e.transitions) && e.transitions.length <= 16 && e.transitions.every(i);
|
|
572
|
+
}
|
|
573
|
+
function U(s) {
|
|
574
|
+
if (!s || typeof s != "object") return !1;
|
|
575
|
+
const e = s;
|
|
576
|
+
return Object.keys(e).every((t) => ["sessionId", "episodeId", "consecutiveFailures", "transportCode", "requestId", "durationMs"].includes(t)) && typeof e.sessionId == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(e.sessionId) && typeof e.episodeId == "string" && /^[a-zA-Z0-9:_-]{1,500}$/.test(e.episodeId) && (e.transportCode === void 0 || typeof e.transportCode == "string" && /^[a-z0-9_]{1,80}$/.test(e.transportCode)) && (e.requestId === void 0 || typeof e.requestId == "string" && /^[a-zA-Z0-9_-]{1,160}$/.test(e.requestId)) && (e.durationMs === void 0 || typeof e.durationMs == "number" && Number.isFinite(e.durationMs) && e.durationMs >= 0) && Number.isSafeInteger(e.consecutiveFailures) && e.consecutiveFailures >= 1;
|
|
577
|
+
}
|
|
578
|
+
const R = ["messageKeys", "canonicalItemKeys", "terminalResponseKeys", "toolCallKeys", "activeResponseKeys"], P = (s) => typeof s == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(s), v = (s) => s === null || P(s), te = (s) => typeof s == "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|\+00:00)$/.test(s) && Number.isFinite(Date.parse(s));
|
|
579
|
+
function L(s) {
|
|
580
|
+
if (!s || typeof s != "object") return !1;
|
|
581
|
+
const e = s;
|
|
582
|
+
return Object.keys(s).every((t) => ["sessionId", "itemId", "userMessageId", "createdAt", "runId", "retryable"].includes(t)) && v(e.sessionId) && P(e.itemId) && v(e.userMessageId) && (e.retryable === void 0 || typeof e.retryable == "boolean") && v(e.runId) && (e.createdAt === null || te(e.createdAt));
|
|
583
|
+
}
|
|
584
|
+
function se(s) {
|
|
585
|
+
if (!s || typeof s != "object") return !1;
|
|
586
|
+
const e = s, t = (i) => Number.isSafeInteger(i) && i >= 0;
|
|
587
|
+
return Object.keys(e).every((i) => ["capturedAt", "selectionKey", "userId", "loading", "draft", "thinking", "connected", "hasError", "phase", "queryStatus", "queryRequestId", "queryUpdatedAt", "renderSource", "selectionFencePending", "guardCreatedAt", "owner"].includes(i)) && t(e.capturedAt) && [e.queryUpdatedAt, e.guardCreatedAt].every((i) => i === null || t(i)) && [e.selectionKey, e.userId, e.phase, e.queryStatus, e.queryRequestId].every((i) => i === null || p(i) !== null) && [e.loading, e.draft, e.thinking, e.connected, e.hasError, e.selectionFencePending].every((i) => typeof i == "boolean") && ["state", "account", "interactions", "local", "sidepanel_layout"].includes(e.renderSource) && (e.owner === void 0 || ee(e.owner));
|
|
588
|
+
}
|
|
589
|
+
function K(s) {
|
|
590
|
+
if (!s || typeof s != "object" || Object.keys(s).some((i) => i !== "before" && i !== "current")) return !1;
|
|
591
|
+
const e = (i) => {
|
|
592
|
+
if (!i || typeof i != "object") return !1;
|
|
593
|
+
const n = i;
|
|
594
|
+
return Object.keys(i).every((r) => [...R, "sessionId", "runtimeItemCount", "welcome", "truncated", "thinkingSequence", "context"].includes(r)) && (n.context === void 0 || se(n.context)) && (n.thinkingSequence === void 0 || Array.isArray(n.thinkingSequence) && n.thinkingSequence.length <= 20 && n.thinkingSequence.every((r) => r === "user" || r === "thinking")) && v(n.sessionId) && Number.isSafeInteger(n.runtimeItemCount) && n.runtimeItemCount >= 0 && typeof n.welcome == "boolean" && typeof n.truncated == "boolean" && R.every((r) => Array.isArray(n[r]) && n[r].length <= 20 && n[r].every(P));
|
|
595
|
+
}, t = s;
|
|
596
|
+
return (t.before === null || e(t.before)) && e(t.current);
|
|
566
597
|
}
|
|
567
|
-
function
|
|
598
|
+
function ie(s) {
|
|
568
599
|
if (s.details !== void 0 && !b(s.details))
|
|
569
600
|
throw new TypeError("Product Agent transported error details must be JSON-safe.");
|
|
570
601
|
return {
|
|
@@ -574,23 +605,22 @@ function X(s) {
|
|
|
574
605
|
...s.details === void 0 ? {} : { details: s.details }
|
|
575
606
|
};
|
|
576
607
|
}
|
|
577
|
-
function
|
|
578
|
-
const t = s !== null && typeof s == "object" ? s : null, i = typeof s == "string" ? s : t && "message" in t && typeof t.message == "string" ? t.message : "", n = t && "code" in t && typeof t.code == "string" && t.code.trim() ? t.code : e, r = t && "details" in t ? t.details : null
|
|
579
|
-
|
|
608
|
+
function S(s, e = "runtime_error") {
|
|
609
|
+
const t = s !== null && typeof s == "object" ? s : null, i = typeof s == "string" ? s : t && "message" in t && typeof t.message == "string" ? t.message : "", n = t && "code" in t && typeof t.code == "string" && t.code.trim() ? t.code : e, r = t && "details" in t ? t.details : null, o = r && typeof r == "object" ? r : {}, a = {
|
|
610
|
+
...typeof o.securitySettingsUrl == "string" ? { securitySettingsUrl: o.securitySettingsUrl } : {},
|
|
611
|
+
...typeof o.transportCode == "string" && /^[a-z0-9_]{1,80}$/.test(o.transportCode) ? { transportCode: o.transportCode } : {},
|
|
612
|
+
...typeof o.requestId == "string" && /^[a-zA-Z0-9_-]{1,160}$/.test(o.requestId) ? { requestId: o.requestId } : {},
|
|
613
|
+
...typeof o.durationMs == "number" && Number.isFinite(o.durationMs) && o.durationMs >= 0 ? { durationMs: o.durationMs } : {},
|
|
614
|
+
...typeof o.successfulRequests == "number" && Number.isSafeInteger(o.successfulRequests) && o.successfulRequests >= 0 ? { successfulRequests: o.successfulRequests } : {}
|
|
615
|
+
};
|
|
616
|
+
return ie({
|
|
580
617
|
code: n,
|
|
581
618
|
message: i.trim() && i.trim() !== "[object Object]" ? i : "The Product Agent operation failed. Try again.",
|
|
582
619
|
retryable: !!(t && "retryable" in t && t.retryable === !0),
|
|
583
|
-
|
|
584
|
-
...r && typeof r == "object" && "securitySettingsUrl" in r && typeof r.securitySettingsUrl == "string" ? { details: { securitySettingsUrl: r.securitySettingsUrl } } : {}
|
|
620
|
+
...Object.keys(a).length ? { details: a } : {}
|
|
585
621
|
});
|
|
586
622
|
}
|
|
587
|
-
|
|
588
|
-
function ee(s) {
|
|
589
|
-
if (!s || typeof s != "object") return !1;
|
|
590
|
-
const e = s, t = (n) => Number.isSafeInteger(n) && n >= 0, i = (n) => n && typeof n == "object" && Object.keys(n).every((r) => ["sequence", "at", "type", "changed", "generation", "sessionId", "scopeId", "requestId", "effectId", "clientScopeId", "reason", "effectKind", "eventType", "itemCount", "removedCount", "projectionReady"].includes(r)) && t(n.sequence) && t(n.at) && p(n.type) !== null && typeof n.changed == "boolean" && [n.generation, n.itemCount, n.removedCount].every((r) => r === null || t(r)) && [n.sessionId, n.scopeId, n.requestId, n.effectId, n.clientScopeId, n.reason, n.effectKind, n.eventType].every((r) => r === null || p(r) !== null) && (n.projectionReady === null || typeof n.projectionReady == "boolean");
|
|
591
|
-
return Object.keys(e).every((n) => ["ownerId", "revision", "dropped", "lastIntent", "lastSelection", "transitions"].includes(n)) && p(e.ownerId) !== null && t(e.revision) && t(e.dropped) && (e.lastIntent == null || i(e.lastIntent)) && (e.lastSelection === null || i(e.lastSelection)) && Array.isArray(e.transitions) && e.transitions.length <= 16 && e.transitions.every(i);
|
|
592
|
-
}
|
|
593
|
-
function U(s) {
|
|
623
|
+
function z(s) {
|
|
594
624
|
if (!s || typeof s != "object") return !1;
|
|
595
625
|
const e = s, t = (i) => Number.isSafeInteger(i) && i >= 0;
|
|
596
626
|
return Object.keys(e).every((i) => [
|
|
@@ -602,6 +632,9 @@ function U(s) {
|
|
|
602
632
|
"owner",
|
|
603
633
|
"elapsedMs",
|
|
604
634
|
"attempt",
|
|
635
|
+
"category",
|
|
636
|
+
"responseHeadersMs",
|
|
637
|
+
"responseBodyMs",
|
|
605
638
|
"queryRequestId",
|
|
606
639
|
"ownerId",
|
|
607
640
|
"authorityGeneration",
|
|
@@ -609,9 +642,9 @@ function U(s) {
|
|
|
609
642
|
"release",
|
|
610
643
|
"upstreamRequestId",
|
|
611
644
|
"upstreamTraceId"
|
|
612
|
-
].includes(i)) && p(e.requestId) !== null && ["GET", "POST", "PUT", "PATCH", "DELETE"].includes(e.method) && ["/api/product-agent/conversations/:sessionId/snapshot", "/api/product-agent/:namespace/commands", "/api/product-agent/:namespace/:operation"].includes(e.route) && (e.status === null || t(e.status) && e.status >= 100 && e.status <= 599) && (e.abortTrigger === null || ["deadline", "transport_disposed", "owner_disposed", "authority_retired", "observation_released", "request_replaced", "caller_cancelled", "unexpected_abort"].includes(e.abortTrigger)) && ["http_deadline", "http_transport", "conversation_query", "browser", "http_response"].includes(e.owner) && t(e.elapsedMs) && t(e.attempt) && e.attempt >= 1 && e.attempt <= 10 && [e.queryRequestId, e.ownerId, e.sessionId].every((i) => i === null || p(i) !== null) && (e.authorityGeneration === null || t(e.authorityGeneration)) && typeof e.release == "string" && /^[a-zA-Z0-9._-]{1,80}$/.test(e.release) && [e.upstreamRequestId, e.upstreamTraceId].every((i) => i === null || typeof i == "string" && /^[a-zA-Z0-9_:;=./-]{1,160}$/.test(i));
|
|
645
|
+
].includes(i)) && p(e.requestId) !== null && ["GET", "POST", "PUT", "PATCH", "DELETE"].includes(e.method) && ["/api/product-agent/conversations/:sessionId/snapshot", "/api/product-agent/:namespace/commands", "/api/product-agent/:namespace/:operation"].includes(e.route) && (e.status === null || t(e.status) && e.status >= 100 && e.status <= 599) && (e.abortTrigger === null || ["deadline", "transport_disposed", "owner_disposed", "authority_retired", "observation_released", "request_replaced", "caller_cancelled", "unexpected_abort"].includes(e.abortTrigger)) && ["http_deadline", "http_transport", "conversation_query", "browser", "http_response"].includes(e.owner) && (e.category === void 0 || /^[a-z0-9_]{1,80}$/.test(e.category)) && [e.responseHeadersMs, e.responseBodyMs].every((i) => i == null || t(i)) && t(e.elapsedMs) && t(e.attempt) && e.attempt >= 1 && e.attempt <= 10 && [e.queryRequestId, e.ownerId, e.sessionId].every((i) => i === null || p(i) !== null) && (e.authorityGeneration === null || t(e.authorityGeneration)) && typeof e.release == "string" && /^[a-zA-Z0-9._-]{1,80}$/.test(e.release) && [e.upstreamRequestId, e.upstreamTraceId].every((i) => i === null || typeof i == "string" && /^[a-zA-Z0-9_:;=./-]{1,160}$/.test(i));
|
|
613
646
|
}
|
|
614
|
-
const
|
|
647
|
+
const ne = [
|
|
615
648
|
"submit",
|
|
616
649
|
"stop",
|
|
617
650
|
"staging_ipc",
|
|
@@ -647,87 +680,67 @@ const te = [
|
|
|
647
680
|
"stopping_painted",
|
|
648
681
|
"progress_painted",
|
|
649
682
|
"stopped_painted"
|
|
650
|
-
],
|
|
651
|
-
let
|
|
652
|
-
const
|
|
683
|
+
], re = Math.random().toString(36).slice(2);
|
|
684
|
+
let oe = 0;
|
|
685
|
+
const C = () => `timing:${re}:${++oe}`, f = (s) => typeof s == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(s);
|
|
653
686
|
function E(s) {
|
|
654
687
|
if (!s || typeof s != "object") return !1;
|
|
655
688
|
const e = s;
|
|
656
|
-
return Object.keys(e).every((t) => ["entrySurface", "operation", "layer", "stage", "status", "spanId", "requestId", "clientMessageId", "sessionId", "occurredAt", "durationMs"].includes(t)) && (e.entrySurface === void 0 || ["extension_sidepanel", "extension_widget", "main_web_chat", "embedded_widget", "embedded_custom_ui", "automation", "mcp", "whatsapp"].includes(e.entrySurface)) && ["send", "stop"].includes(e.operation) && ["renderer", "sdk", "extension", "http"].includes(e.layer) &&
|
|
689
|
+
return Object.keys(e).every((t) => ["entrySurface", "operation", "layer", "stage", "status", "spanId", "requestId", "clientMessageId", "sessionId", "occurredAt", "durationMs"].includes(t)) && (e.entrySurface === void 0 || ["extension_sidepanel", "extension_widget", "main_web_chat", "embedded_widget", "embedded_custom_ui", "automation", "mcp", "whatsapp"].includes(e.entrySurface)) && ["send", "stop"].includes(e.operation) && ["renderer", "sdk", "extension", "http"].includes(e.layer) && ne.includes(e.stage) && ["started", "completed", "failed", "observed"].includes(e.status) && f(e.spanId) && f(e.requestId) && (e.clientMessageId === null || f(e.clientMessageId)) && (e.sessionId === null || f(e.sessionId)) && typeof e.occurredAt == "string" && e.occurredAt.length <= 40 && Number.isFinite(Date.parse(e.occurredAt)) && Number.isSafeInteger(e.durationMs) && e.durationMs >= 0;
|
|
657
690
|
}
|
|
658
|
-
function
|
|
691
|
+
function k(s, e) {
|
|
659
692
|
if (!s) return {
|
|
660
693
|
mark: (n) => {
|
|
661
694
|
},
|
|
662
695
|
measure: (n, r) => r()
|
|
663
696
|
};
|
|
664
|
-
const t = performance.now(), i = (n, r,
|
|
697
|
+
const t = performance.now(), i = (n, r, o, a) => {
|
|
665
698
|
const d = {
|
|
666
699
|
...e,
|
|
667
700
|
stage: n,
|
|
668
701
|
status: r,
|
|
669
|
-
spanId:
|
|
702
|
+
spanId: a,
|
|
670
703
|
occurredAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
671
|
-
durationMs: Math.max(0, Math.round(performance.now() -
|
|
704
|
+
durationMs: Math.max(0, Math.round(performance.now() - o))
|
|
672
705
|
};
|
|
673
706
|
s && E(d) && Promise.resolve().then(() => s(d)).catch(() => {
|
|
674
707
|
});
|
|
675
708
|
};
|
|
676
709
|
return {
|
|
677
|
-
mark: (n) => i(n, "observed", t,
|
|
710
|
+
mark: (n) => i(n, "observed", t, C()),
|
|
678
711
|
measure(n, r) {
|
|
679
|
-
const
|
|
680
|
-
return i(n, "started",
|
|
681
|
-
(d) => (i(n, "completed",
|
|
712
|
+
const o = performance.now(), a = C();
|
|
713
|
+
return i(n, "started", o, a), r().then(
|
|
714
|
+
(d) => (i(n, "completed", o, a), d),
|
|
682
715
|
(d) => {
|
|
683
|
-
throw i(n, "failed",
|
|
716
|
+
throw i(n, "failed", o, a), d;
|
|
684
717
|
}
|
|
685
718
|
);
|
|
686
719
|
}
|
|
687
720
|
};
|
|
688
721
|
}
|
|
689
|
-
const D = ["messageKeys", "canonicalItemKeys", "terminalResponseKeys", "toolCallKeys", "activeResponseKeys"], P = (s) => typeof s == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(s), v = (s) => s === null || P(s), ne = (s) => typeof s == "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,6})?(?:Z|\+00:00)$/.test(s) && Number.isFinite(Date.parse(s));
|
|
690
|
-
function K(s) {
|
|
691
|
-
if (!s || typeof s != "object") return !1;
|
|
692
|
-
const e = s;
|
|
693
|
-
return Object.keys(s).every((t) => ["sessionId", "itemId", "userMessageId", "createdAt", "runId", "retryable"].includes(t)) && v(e.sessionId) && P(e.itemId) && v(e.userMessageId) && (e.retryable === void 0 || typeof e.retryable == "boolean") && v(e.runId) && (e.createdAt === null || ne(e.createdAt));
|
|
694
|
-
}
|
|
695
|
-
function re(s) {
|
|
696
|
-
if (!s || typeof s != "object") return !1;
|
|
697
|
-
const e = s, t = (i) => Number.isSafeInteger(i) && i >= 0;
|
|
698
|
-
return Object.keys(e).every((i) => ["capturedAt", "selectionKey", "userId", "loading", "draft", "thinking", "connected", "hasError", "phase", "queryStatus", "queryRequestId", "queryUpdatedAt", "renderSource", "selectionFencePending", "guardCreatedAt", "owner"].includes(i)) && t(e.capturedAt) && [e.queryUpdatedAt, e.guardCreatedAt].every((i) => i === null || t(i)) && [e.selectionKey, e.userId, e.phase, e.queryStatus, e.queryRequestId].every((i) => i === null || p(i) !== null) && [e.loading, e.draft, e.thinking, e.connected, e.hasError, e.selectionFencePending].every((i) => typeof i == "boolean") && ["state", "account", "interactions", "local", "sidepanel_layout"].includes(e.renderSource) && (e.owner === void 0 || ee(e.owner));
|
|
699
|
-
}
|
|
700
|
-
function $(s) {
|
|
701
|
-
if (!s || typeof s != "object" || Object.keys(s).some((i) => i !== "before" && i !== "current")) return !1;
|
|
702
|
-
const e = (i) => {
|
|
703
|
-
if (!i || typeof i != "object") return !1;
|
|
704
|
-
const n = i;
|
|
705
|
-
return Object.keys(i).every((r) => [...D, "sessionId", "runtimeItemCount", "welcome", "truncated", "thinkingSequence", "context"].includes(r)) && (n.context === void 0 || re(n.context)) && (n.thinkingSequence === void 0 || Array.isArray(n.thinkingSequence) && n.thinkingSequence.length <= 20 && n.thinkingSequence.every((r) => r === "user" || r === "thinking")) && v(n.sessionId) && Number.isSafeInteger(n.runtimeItemCount) && n.runtimeItemCount >= 0 && typeof n.welcome == "boolean" && typeof n.truncated == "boolean" && D.every((r) => Array.isArray(n[r]) && n[r].length <= 20 && n[r].every(P));
|
|
706
|
-
}, t = s;
|
|
707
|
-
return (t.before === null || e(t.before)) && e(t.current);
|
|
708
|
-
}
|
|
709
722
|
const A = (s) => s === null || typeof s == "string" && /^[a-zA-Z0-9:_-]{1,160}$/.test(s);
|
|
710
|
-
function
|
|
723
|
+
function ae(s) {
|
|
711
724
|
if (!s || typeof s != "object") return !1;
|
|
712
725
|
const e = s;
|
|
713
726
|
return typeof e.observedAt == "string" && e.observedAt.length <= 40 && Number.isFinite(Date.parse(e.observedAt)) && A(e.sessionId) && A(e.responseItemId) && A(e.respondsToUserMessageId) && typeof e.panelVisible == "boolean" && typeof e.documentVisible == "boolean" && typeof e.loading == "boolean";
|
|
714
727
|
}
|
|
715
|
-
const
|
|
716
|
-
function
|
|
728
|
+
const D = 500;
|
|
729
|
+
function de(s) {
|
|
717
730
|
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();
|
|
718
|
-
return e.length >
|
|
731
|
+
return e.length > D ? `${e.slice(0, D - 1)}…` : e;
|
|
719
732
|
}
|
|
720
|
-
function
|
|
733
|
+
function ce(s, e, t = "stopped", i) {
|
|
721
734
|
const n = new Set(i ?? [
|
|
722
735
|
s.assistantDraftRespondsToUserMessageId,
|
|
723
736
|
s.activeResponseUserMessageId,
|
|
724
|
-
s.messages.filter((
|
|
725
|
-
].filter((
|
|
726
|
-
for (const
|
|
727
|
-
r.some((d) => d.respondsToUserMessageId ===
|
|
728
|
-
const
|
|
729
|
-
...
|
|
730
|
-
...r.filter((d) => d.id === `local-interrupted:${
|
|
737
|
+
s.messages.filter((a) => a.role === "user").slice(-1)[0]?.id
|
|
738
|
+
].filter((a) => !!a)), r = s.messages.filter((a) => !(a.dataType === "run_status" && a.loading && n.has(a.respondsToUserMessageId ?? ""))).map((a) => n.has(a.respondsToUserMessageId ?? "") ? { ...a, loading: !1 } : a);
|
|
739
|
+
for (const a of n)
|
|
740
|
+
r.some((d) => d.respondsToUserMessageId === a && (d.dataType === "run_status" || d.dataType === "run_error" || d.role === "assistant" && d.phase !== "commentary")) || r.some((d) => d.role === "user" && d.id === a) && r.push({ id: `local-interrupted:${a}`, role: "system", dataType: "run_status", provisional: t === "stopping", content: t === "stopping" ? "Stopping…" : "Run stopped by user.", createdAt: e, respondsToUserMessageId: a });
|
|
741
|
+
const o = s.segments?.map((a) => ({ ...a, outcomeIds: [
|
|
742
|
+
...a.outcomeIds,
|
|
743
|
+
...r.filter((d) => d.id === `local-interrupted:${a.userMessageId}` && !a.outcomeIds.includes(d.id)).map((d) => d.id)
|
|
731
744
|
] }));
|
|
732
745
|
return {
|
|
733
746
|
...s,
|
|
@@ -736,7 +749,7 @@ function de(s, e, t = "stopped", i) {
|
|
|
736
749
|
isRetrying: !1,
|
|
737
750
|
pendingMessageStatus: null,
|
|
738
751
|
turnPhase: null,
|
|
739
|
-
segments:
|
|
752
|
+
segments: o,
|
|
740
753
|
activity: { phase: t, activeItemId: null },
|
|
741
754
|
isLoadingSession: s.isLoadingSession && r.length === 0,
|
|
742
755
|
taskStatus: t === "stopped" ? "stopped" : null,
|
|
@@ -744,7 +757,7 @@ function de(s, e, t = "stopped", i) {
|
|
|
744
757
|
lastErrorCode: null
|
|
745
758
|
};
|
|
746
759
|
}
|
|
747
|
-
const
|
|
760
|
+
const le = {
|
|
748
761
|
"stop-without-rendered-message": "Stop is enabled while no message is rendered or the welcome screen is still visible.",
|
|
749
762
|
"in-progress-stop-unavailable": "An in-progress response has no visible enabled interrupt control.",
|
|
750
763
|
"stop-did-not-interrupt": "The stopped response remained in progress after an interrupt click.",
|
|
@@ -760,8 +773,8 @@ const ce = {
|
|
|
760
773
|
"thinking-groups-without-user-message": "Multiple thinking groups appeared without a user message between them.",
|
|
761
774
|
"thinking-without-progress": "Thinking remained visible without progress for five minutes."
|
|
762
775
|
};
|
|
763
|
-
function
|
|
764
|
-
return typeof s == "string" && s.startsWith("ui_invariant:") && Object.prototype.hasOwnProperty.call(
|
|
776
|
+
function ue(s) {
|
|
777
|
+
return typeof s == "string" && s.startsWith("ui_invariant:") && Object.prototype.hasOwnProperty.call(le, s.slice(13));
|
|
765
778
|
}
|
|
766
779
|
function x(s) {
|
|
767
780
|
return {
|
|
@@ -774,7 +787,7 @@ function x(s) {
|
|
|
774
787
|
...s.fileUrl === void 0 ? {} : { fileUrl: s.fileUrl }
|
|
775
788
|
};
|
|
776
789
|
}
|
|
777
|
-
function
|
|
790
|
+
function we(s) {
|
|
778
791
|
if (!s || typeof s != "object" || !("type" in s)) return !1;
|
|
779
792
|
const e = s;
|
|
780
793
|
switch (e.type) {
|
|
@@ -785,15 +798,15 @@ function Ae(s) {
|
|
|
785
798
|
case "run.stop":
|
|
786
799
|
return e.clientMessageIds === void 0 || Array.isArray(e.clientMessageIds) && e.clientMessageIds.length <= 100 && e.clientMessageIds.every((t) => typeof t == "string" && t.length > 0 && t.length <= 160);
|
|
787
800
|
case "runtime.report_response_visibility":
|
|
788
|
-
return
|
|
801
|
+
return ae(e.observation);
|
|
789
802
|
case "runtime.warmup":
|
|
790
803
|
return e.reason === "panel_open" || e.reason === "extension_install" || e.reason === "composer_input";
|
|
791
804
|
case "runtime.report_operation_timing":
|
|
792
805
|
return E(e.timing);
|
|
793
806
|
case "runtime.report_displayed_error":
|
|
794
|
-
return (e.httpRequest === void 0 ||
|
|
807
|
+
return (e.httpRequest === void 0 || z(e.httpRequest)) && (e.historyRefreshFailure === void 0 || U(e.historyRefreshFailure)) && (e.renderedError === void 0 || L(e.renderedError)) && (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);
|
|
795
808
|
case "runtime.report_invalid_state_transition":
|
|
796
|
-
return (e.uiInvariant === void 0 ||
|
|
809
|
+
return (e.uiInvariant === void 0 || K(e.uiInvariant)) && (e.reason === "submitted_turn_returned_to_welcome_without_new_chat" || e.reason === "new_messages_button_without_user_scroll" || ue(e.reason)) && (e.clientMessageId === void 0 || typeof e.clientMessageId == "string");
|
|
797
810
|
case "runtime.widget_lifecycle":
|
|
798
811
|
return (e.action === "opened" || e.action === "closed" || e.action === "minimized") && typeof e.trigger == "string";
|
|
799
812
|
case "session.load":
|
|
@@ -821,7 +834,7 @@ function Ae(s) {
|
|
|
821
834
|
return !1;
|
|
822
835
|
}
|
|
823
836
|
}
|
|
824
|
-
class
|
|
837
|
+
class Te {
|
|
825
838
|
constructor(e, t, i) {
|
|
826
839
|
this.adapter = t, this.state = w(e), this.model = i;
|
|
827
840
|
}
|
|
@@ -843,6 +856,7 @@ class we {
|
|
|
843
856
|
submissionGeneration = 0;
|
|
844
857
|
pendingStop = null;
|
|
845
858
|
stopError = null;
|
|
859
|
+
stopPreviews = /* @__PURE__ */ new Set();
|
|
846
860
|
operationQueue = Promise.resolve();
|
|
847
861
|
destroyed = !1;
|
|
848
862
|
on(e, t) {
|
|
@@ -851,34 +865,41 @@ class we {
|
|
|
851
865
|
}
|
|
852
866
|
getState() {
|
|
853
867
|
const e = w(this.state);
|
|
854
|
-
for (const [
|
|
855
|
-
e.messages.some((
|
|
856
|
-
|
|
868
|
+
for (const [n, r] of this.submissionPreviews)
|
|
869
|
+
e.messages.some((o) => o.id === n) || (e.messages.push({ ...r.message, attachments: r.message.attachments?.map((o) => ({ ...o })) }), e.segments && (e.segments = [...e.segments, { id: n, userMessageId: n, activityIds: [], outcomeIds: [], collapsed: !1 }]), e.isLoadingSession = !1, r.pending && (e.activeResponseUserMessageId = n, e.pendingMessageStatus = "sending", e.turnPhase = "sending", e.activity = { phase: "submitting", activeItemId: null }), r.error && (e.lastError = r.error, e.lastErrorCode = "message_delivery_failed"));
|
|
870
|
+
this.stopError && (e.lastError = this.stopError, e.lastErrorCode = "stop_failed");
|
|
871
|
+
const t = [...this.stopPreviews];
|
|
872
|
+
if (!t.length) return e;
|
|
873
|
+
const i = ce(e, "", "stopping", t);
|
|
874
|
+
return e.activeResponseUserMessageId && !this.stopPreviews.has(e.activeResponseUserMessageId) ? { ...e, messages: i.messages, segments: i.segments } : i;
|
|
857
875
|
}
|
|
858
876
|
updateProjection(e, t, i, n, r) {
|
|
859
877
|
if (this.destroyed) return;
|
|
860
|
-
const
|
|
861
|
-
(
|
|
862
|
-
for (const
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
878
|
+
const o = this.getState();
|
|
879
|
+
(o.user?.id !== e.user?.id || o.selectionKey !== void 0 && o.selectionKey !== e.selectionKey || o.selectionKey === void 0 && o.sessionId !== null && o.sessionId !== e.sessionId) && (this.cancelPendingSubmissions(), this.submissionPreviews.clear());
|
|
880
|
+
for (const a of e.messages)
|
|
881
|
+
a.role === "user" && this.submissionPreviews.delete(a.id);
|
|
882
|
+
this.state = w(e);
|
|
883
|
+
for (const a of this.stopPreviews)
|
|
884
|
+
e.messages.some((d) => d.respondsToUserMessageId === a && !d.provisional && d.loading !== !0 && (d.dataType === "run_status" || d.dataType === "run_error" || d.role === "assistant" && d.phase !== "commentary" && (d.streamState === void 0 || ["finished", "stopped", "failed"].includes(d.streamState)))) && this.stopPreviews.delete(a);
|
|
885
|
+
if (o.user?.id === e.user?.id)
|
|
886
|
+
for (const a of this.state.messages) {
|
|
887
|
+
if (a.role !== "user" || !a.attachments?.length) continue;
|
|
888
|
+
const d = o.messages.find((c) => c.role === "user" && c.id === a.id);
|
|
889
|
+
o.sessionId !== e.sessionId && !(o.sessionId === null && d) || (a.attachments = pe(d?.attachments, a.attachments));
|
|
869
890
|
}
|
|
870
891
|
if (t !== void 0 && (this.model = t), i && JSON.stringify(i) !== JSON.stringify(this.sessionHistoryState)) {
|
|
871
892
|
this.sessionHistoryState = j(i);
|
|
872
|
-
for (const
|
|
873
|
-
|
|
893
|
+
for (const a of this.sessionHistoryListeners)
|
|
894
|
+
a(this.getSessionHistoryState());
|
|
874
895
|
}
|
|
875
896
|
if (n && JSON.stringify(n) !== JSON.stringify(this.interactions)) {
|
|
876
|
-
this.interactions = n.map((
|
|
877
|
-
for (const
|
|
897
|
+
this.interactions = n.map((a) => ({ ...a }));
|
|
898
|
+
for (const a of this.interactionListeners) a(this.getInteractions());
|
|
878
899
|
}
|
|
879
900
|
if (r !== void 0 && JSON.stringify(r) !== JSON.stringify(this.account)) {
|
|
880
901
|
this.account = r ? { ...r } : null;
|
|
881
|
-
for (const
|
|
902
|
+
for (const a of this.accountListeners) a(this.getAccount());
|
|
882
903
|
}
|
|
883
904
|
this.emit("state", this.getState());
|
|
884
905
|
}
|
|
@@ -887,7 +908,7 @@ class we {
|
|
|
887
908
|
}
|
|
888
909
|
destroy() {
|
|
889
910
|
if (!this.destroyed) {
|
|
890
|
-
this.destroyed = !0, this.pendingStop = null, this.pendingTransfers.clear(), this.submissionPreviews.clear(), this.attachmentFiles.clear(), this.sessionHistoryListeners.clear(), this.interactionListeners.clear(), this.accountListeners.clear();
|
|
911
|
+
this.destroyed = !0, this.pendingStop = null, this.stopPreviews.clear(), this.pendingTransfers.clear(), this.submissionPreviews.clear(), this.attachmentFiles.clear(), this.sessionHistoryListeners.clear(), this.interactionListeners.clear(), this.accountListeners.clear();
|
|
891
912
|
for (const e of Object.values(this.listeners)) e?.clear();
|
|
892
913
|
this.adapter.onDisconnect?.();
|
|
893
914
|
}
|
|
@@ -908,7 +929,7 @@ class we {
|
|
|
908
929
|
});
|
|
909
930
|
}
|
|
910
931
|
reportInvalidStateTransition(e, t, i) {
|
|
911
|
-
i !== void 0 &&
|
|
932
|
+
i !== void 0 && !K(i) || this.adapter.dispatch({
|
|
912
933
|
type: "runtime.report_invalid_state_transition",
|
|
913
934
|
reason: e,
|
|
914
935
|
clientMessageId: t,
|
|
@@ -916,15 +937,16 @@ class we {
|
|
|
916
937
|
}).catch(() => {
|
|
917
938
|
});
|
|
918
939
|
}
|
|
919
|
-
reportDisplayedError(e, t, i, n) {
|
|
920
|
-
const
|
|
921
|
-
n !== void 0 && !
|
|
940
|
+
reportDisplayedError(e, t, i, n, r) {
|
|
941
|
+
const o = e === "conversation_error" && !n ? this.getState().conversationDiagnostics?.httpRequest : void 0;
|
|
942
|
+
n !== void 0 && !L(n) || r !== void 0 && !U(r) || this.adapter.dispatch({
|
|
922
943
|
type: "runtime.report_displayed_error",
|
|
923
944
|
reason: e,
|
|
924
945
|
errorFingerprint: t,
|
|
925
946
|
...n ? { renderedError: n } : {},
|
|
926
|
-
...
|
|
927
|
-
...
|
|
947
|
+
...r ? { historyRefreshFailure: r } : {},
|
|
948
|
+
...z(o) ? { httpRequest: o } : {},
|
|
949
|
+
...i ? { displayedMessage: de(i) } : {}
|
|
928
950
|
}).catch(() => {
|
|
929
951
|
});
|
|
930
952
|
}
|
|
@@ -932,7 +954,7 @@ class we {
|
|
|
932
954
|
const i = e.trim(), n = t.attachments ?? [];
|
|
933
955
|
if (!i && n.length === 0) return Promise.resolve(null);
|
|
934
956
|
this.pendingStop = null, this.stopError = null;
|
|
935
|
-
const r = t.clientMessageId ?? (t.proactiveSuggestionQuestion && this.stagedProactiveSuggestionClientMessageId ? this.stagedProactiveSuggestionClientMessageId : crypto.randomUUID()),
|
|
957
|
+
const r = t.clientMessageId ?? (t.proactiveSuggestionQuestion && this.stagedProactiveSuggestionClientMessageId ? this.stagedProactiveSuggestionClientMessageId : crypto.randomUUID()), o = t.submittedAt ?? Date.now(), a = this.submissionGeneration;
|
|
936
958
|
this.pendingTransfers.set(r, n.flatMap((c) => c.id ? [c.id] : [])), this.submissionPreviews.set(r, { pending: !0, message: {
|
|
937
959
|
id: r,
|
|
938
960
|
role: "user",
|
|
@@ -940,13 +962,13 @@ class we {
|
|
|
940
962
|
createdAt: "",
|
|
941
963
|
attachments: n.map((c) => ({ ...c }))
|
|
942
964
|
} });
|
|
943
|
-
const d = this.sendMessageNow(i, { ...t, clientMessageId: r, submittedAt:
|
|
965
|
+
const d = this.sendMessageNow(i, { ...t, clientMessageId: r, submittedAt: o }, a);
|
|
944
966
|
return this.emit("state", this.getState()), d.finally(() => {
|
|
945
967
|
this.pendingTransfers.delete(r);
|
|
946
968
|
});
|
|
947
969
|
}
|
|
948
970
|
async sendMessageNow(e, t, i) {
|
|
949
|
-
const n = e, r = t.clientMessageId,
|
|
971
|
+
const n = e, r = t.clientMessageId, o = k((c) => {
|
|
950
972
|
i === this.submissionGeneration && this.reportOperationTiming(c);
|
|
951
973
|
}, {
|
|
952
974
|
operation: "send",
|
|
@@ -955,11 +977,11 @@ class we {
|
|
|
955
977
|
clientMessageId: r,
|
|
956
978
|
sessionId: this.state.sessionId
|
|
957
979
|
});
|
|
958
|
-
|
|
959
|
-
let
|
|
980
|
+
o.mark("submit");
|
|
981
|
+
let a = t.attachments ?? [], d = !1;
|
|
960
982
|
if (i !== this.submissionGeneration) return null;
|
|
961
983
|
try {
|
|
962
|
-
if (!await
|
|
984
|
+
if (!await o.measure("staging_ipc", async () => {
|
|
963
985
|
const l = await this.enqueueOperation(async () => this.destroyed || i !== this.submissionGeneration ? null : { result: this.adapter.dispatch({
|
|
964
986
|
type: "conversation.stage",
|
|
965
987
|
initiatedBy: t.initiatedBy,
|
|
@@ -969,27 +991,27 @@ class we {
|
|
|
969
991
|
clientMessageId: r,
|
|
970
992
|
proactiveSuggestionQuestion: t.proactiveSuggestionQuestion,
|
|
971
993
|
// Preview URLs belong to the renderer's optimistic snapshot and are not valid runtime-command metadata.
|
|
972
|
-
attachments:
|
|
994
|
+
attachments: a.length > 0 ? a.map(x) : void 0,
|
|
973
995
|
submittedAt: t.submittedAt
|
|
974
996
|
}) });
|
|
975
997
|
return l ? (await l.result, l) : null;
|
|
976
998
|
}) || i !== this.submissionGeneration) return null;
|
|
977
|
-
if (d = !0,
|
|
999
|
+
if (d = !0, a.length > 0) {
|
|
978
1000
|
if (!this.adapter.uploadAttachment)
|
|
979
1001
|
throw new Error("The runtime does not support attachments.");
|
|
980
1002
|
const l = [];
|
|
981
|
-
for (const u of
|
|
1003
|
+
for (const u of a) {
|
|
982
1004
|
if (u.sandboxPath || u.storageKey) {
|
|
983
1005
|
l.push(u);
|
|
984
1006
|
continue;
|
|
985
1007
|
}
|
|
986
1008
|
const M = u.id ? this.attachmentFiles.get(u.id) : void 0;
|
|
987
1009
|
if (!M) throw new Error(`Attachment bytes are unavailable for ${u.name}`);
|
|
988
|
-
if (l.push(await
|
|
1010
|
+
if (l.push(await o.measure("attachment_transfer", () => this.adapter.uploadAttachment(M, u, { clientMessageId: r }))), i !== this.submissionGeneration) return null;
|
|
989
1011
|
}
|
|
990
|
-
|
|
1012
|
+
a = l;
|
|
991
1013
|
}
|
|
992
|
-
const h = await
|
|
1014
|
+
const h = await o.measure("send_ipc", () => this.adapter.dispatch({
|
|
993
1015
|
type: "conversation.send",
|
|
994
1016
|
content: n,
|
|
995
1017
|
clientMessageId: r,
|
|
@@ -997,7 +1019,7 @@ class we {
|
|
|
997
1019
|
invocation: t.invocation,
|
|
998
1020
|
proactiveSuggestionQuestion: t.proactiveSuggestionQuestion,
|
|
999
1021
|
...t.automationOnboarding ? { automationOnboarding: !0 } : {},
|
|
1000
|
-
attachments:
|
|
1022
|
+
attachments: a.length > 0 ? a.map(x) : void 0
|
|
1001
1023
|
}));
|
|
1002
1024
|
if (i !== this.submissionGeneration) return null;
|
|
1003
1025
|
for (const l of t.attachments ?? [])
|
|
@@ -1005,14 +1027,14 @@ class we {
|
|
|
1005
1027
|
return r === this.stagedProactiveSuggestionClientMessageId && (this.stagedProactiveSuggestionClientMessageId = null), h?.clientMessageId ?? r;
|
|
1006
1028
|
} catch (c) {
|
|
1007
1029
|
if (i !== this.submissionGeneration) return null;
|
|
1008
|
-
if (
|
|
1030
|
+
if (G(c))
|
|
1009
1031
|
for (const l of t.attachments ?? [])
|
|
1010
1032
|
l.id && this.attachmentFiles.delete(l.id);
|
|
1011
1033
|
const h = this.submissionPreviews.get(r);
|
|
1012
|
-
throw h && (h.pending = !1, h.error =
|
|
1034
|
+
throw h && (h.pending = !1, h.error = S(c).message, this.emit("state", this.getState())), d && await this.adapter.dispatch({
|
|
1013
1035
|
type: "conversation.fail_staged",
|
|
1014
1036
|
clientMessageId: r,
|
|
1015
|
-
message:
|
|
1037
|
+
message: S(c).message
|
|
1016
1038
|
}), c;
|
|
1017
1039
|
}
|
|
1018
1040
|
}
|
|
@@ -1037,11 +1059,11 @@ class we {
|
|
|
1037
1059
|
}
|
|
1038
1060
|
stop() {
|
|
1039
1061
|
if (this.pendingStop) return this.pendingStop.promise;
|
|
1040
|
-
const e = this.getState(), t = this.cancelPendingSubmissions(), i = [...new Set([
|
|
1062
|
+
const e = this.getState(), t = this.cancelPendingSubmissions(!1), i = [...new Set([
|
|
1041
1063
|
...t,
|
|
1042
1064
|
e.activeResponseUserMessageId,
|
|
1043
|
-
e.messages.filter((
|
|
1044
|
-
].filter((
|
|
1065
|
+
e.messages.filter((d) => d.role === "user").slice(-1)[0]?.id
|
|
1066
|
+
].filter((d) => !!d))], n = k((d) => this.reportOperationTiming(d), {
|
|
1045
1067
|
operation: "stop",
|
|
1046
1068
|
layer: "renderer",
|
|
1047
1069
|
requestId: crypto.randomUUID(),
|
|
@@ -1050,11 +1072,17 @@ class we {
|
|
|
1050
1072
|
});
|
|
1051
1073
|
n.mark("stop");
|
|
1052
1074
|
const r = { userMessageIds: i, promise: Promise.resolve() };
|
|
1053
|
-
this.pendingStop = r
|
|
1054
|
-
|
|
1055
|
-
|
|
1075
|
+
this.pendingStop = r;
|
|
1076
|
+
for (const d of i) this.stopPreviews.add(d);
|
|
1077
|
+
const o = this.submissionGeneration;
|
|
1078
|
+
r.promise = n.measure("stop_ipc", () => this.adapter.dispatch({ type: "run.stop", ...t.length ? { clientMessageIds: t } : {} })).then(() => {
|
|
1079
|
+
}, (d) => {
|
|
1080
|
+
if (o === this.submissionGeneration) {
|
|
1081
|
+
for (const c of i) this.stopPreviews.delete(c);
|
|
1082
|
+
this.stopError = S(d).message;
|
|
1083
|
+
}
|
|
1056
1084
|
}).finally(() => {
|
|
1057
|
-
this.pendingStop === r && (this.pendingStop = null, this.emit("state", this.getState()));
|
|
1085
|
+
this.destroyed || o !== this.submissionGeneration || (this.pendingStop === r && (this.pendingStop = null), this.emit("state", this.getState()));
|
|
1058
1086
|
}), this.emit("state", this.getState());
|
|
1059
1087
|
const a = r.promise;
|
|
1060
1088
|
return this.operationQueue = a.then(() => {
|
|
@@ -1062,15 +1090,15 @@ class we {
|
|
|
1062
1090
|
}), a.then(() => {
|
|
1063
1091
|
});
|
|
1064
1092
|
}
|
|
1065
|
-
cancelPendingSubmissions() {
|
|
1066
|
-
this.pendingStop = null, this.stopError = null;
|
|
1067
|
-
const
|
|
1093
|
+
cancelPendingSubmissions(e = !0) {
|
|
1094
|
+
this.pendingStop = null, e && this.stopPreviews.clear(), this.stopError = null;
|
|
1095
|
+
const t = [...this.pendingTransfers.keys()];
|
|
1068
1096
|
this.submissionGeneration++;
|
|
1069
|
-
for (const
|
|
1070
|
-
for (const
|
|
1097
|
+
for (const i of this.pendingTransfers.values())
|
|
1098
|
+
for (const n of i) this.attachmentFiles.delete(n);
|
|
1071
1099
|
this.pendingTransfers.clear();
|
|
1072
|
-
for (const
|
|
1073
|
-
return this.operationQueue = Promise.resolve(),
|
|
1100
|
+
for (const i of this.submissionPreviews.values()) i.pending = !1;
|
|
1101
|
+
return this.operationQueue = Promise.resolve(), t;
|
|
1074
1102
|
}
|
|
1075
1103
|
startNewSession(e = {}) {
|
|
1076
1104
|
return this.cancelPendingSubmissions(), this.submissionPreviews.clear(), this.emit("state", this.getState()), e.notifyTransport === !1 ? Promise.resolve() : this.dispatch({ type: "session.new" }).then(() => {
|
|
@@ -1165,7 +1193,7 @@ class we {
|
|
|
1165
1193
|
for (const n of i ?? []) n(t);
|
|
1166
1194
|
}
|
|
1167
1195
|
}
|
|
1168
|
-
function
|
|
1196
|
+
function pe(s, e) {
|
|
1169
1197
|
if (!e || !s) return e;
|
|
1170
1198
|
const t = /* @__PURE__ */ new Map();
|
|
1171
1199
|
for (const i of s) {
|
|
@@ -1185,7 +1213,7 @@ function w(s) {
|
|
|
1185
1213
|
messages: s.messages.map((e) => {
|
|
1186
1214
|
const t = {
|
|
1187
1215
|
...e,
|
|
1188
|
-
attachments: e.attachments?.map((
|
|
1216
|
+
attachments: e.attachments?.map((o) => ({ ...o }))
|
|
1189
1217
|
}, i = e.assistantDraftItemId, n = e.clientMessageId, r = e.proactiveSuggestionClientMessageId;
|
|
1190
1218
|
return r && Object.defineProperty(t, "proactiveSuggestionClientMessageId", {
|
|
1191
1219
|
value: r,
|
|
@@ -1205,32 +1233,32 @@ function j(s) {
|
|
|
1205
1233
|
return {
|
|
1206
1234
|
...s,
|
|
1207
1235
|
data: s.data ? y({
|
|
1208
|
-
entities:
|
|
1236
|
+
entities: B(s.data).map((e) => ({ ...e })),
|
|
1209
1237
|
nextCursor: s.data.nextCursor
|
|
1210
1238
|
}) : null
|
|
1211
1239
|
};
|
|
1212
1240
|
}
|
|
1213
1241
|
export {
|
|
1214
1242
|
Q as PRODUCT_AGENT_AUTH_RECONNECTING_ERROR_MESSAGE,
|
|
1215
|
-
|
|
1243
|
+
Ie as ProductAgentInteractionManager,
|
|
1216
1244
|
O as ProductAgentQueryController,
|
|
1217
|
-
|
|
1218
|
-
|
|
1245
|
+
Te as ProductAgentRemoteRuntimeClient,
|
|
1246
|
+
be as ProductAgentSessionHistoryManager,
|
|
1219
1247
|
Se as ProductAgentTaskPageTitleController,
|
|
1220
|
-
|
|
1248
|
+
ye as canSubmitPersonalProductAgentMessage,
|
|
1221
1249
|
_e as createLocalStorageInteractionDecisionStorage,
|
|
1222
1250
|
m as createProductAgentQueryState,
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1251
|
+
Ae as createProductAgentTaskPageTitleDocument,
|
|
1252
|
+
X as formatProductAgentTaskPageTitle,
|
|
1253
|
+
fe as hasProductAgentPaidCreditFallback,
|
|
1254
|
+
G as isProductAgentAuthReconnectError,
|
|
1255
|
+
we as isProductAgentRuntimeCommand,
|
|
1256
|
+
F as mergeProductAgentEntityPages,
|
|
1229
1257
|
y as normalizeProductAgentEntityPage,
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1258
|
+
J as readLocalStorageInteractionDecisions,
|
|
1259
|
+
ge as reconcileProductAgentSubmissionGate,
|
|
1260
|
+
me as resolveProductAgentBillingPresentation,
|
|
1261
|
+
ve as resolveProductAgentComposerAction,
|
|
1262
|
+
he as resolveProductAgentWidgetPresentation,
|
|
1263
|
+
B as selectProductAgentQueryEntities
|
|
1236
1264
|
};
|