site-operator 0.2.9 → 0.3.0
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
CHANGED
package/dist/site-operator.es.js
CHANGED
|
@@ -925,6 +925,8 @@ const styles$4 = i$1`
|
|
|
925
925
|
color: var(--agent-text-foreground, #09090b);
|
|
926
926
|
line-height: 1.5;
|
|
927
927
|
white-space: pre-wrap;
|
|
928
|
+
overflow-wrap: anywhere;
|
|
929
|
+
word-break: break-word;
|
|
928
930
|
}
|
|
929
931
|
|
|
930
932
|
:host([role="user"]) .bubble {
|
|
@@ -1000,6 +1002,22 @@ const styles$4 = i$1`
|
|
|
1000
1002
|
constructor() {
|
|
1001
1003
|
this.processor = v0_8.Data.createSignalA2uiMessageProcessor();
|
|
1002
1004
|
}
|
|
1005
|
+
resolveValue(o, O) {
|
|
1006
|
+
if (O) {
|
|
1007
|
+
if (O.literalString !== void 0) return O.literalString;
|
|
1008
|
+
if (O.literalNumber !== void 0) return O.literalNumber;
|
|
1009
|
+
if (O.literalBoolean !== void 0) return O.literalBoolean;
|
|
1010
|
+
if (O.literalArray !== void 0) return O.literalArray;
|
|
1011
|
+
if (O.path) {
|
|
1012
|
+
let M = this.processor.getSurfaces().get(o);
|
|
1013
|
+
if (M) {
|
|
1014
|
+
let o = O.path.startsWith("/") ? O.path.substring(1) : O.path, F = M.dataModel.get(o);
|
|
1015
|
+
if (F !== void 0) return F;
|
|
1016
|
+
}
|
|
1017
|
+
console.warn(`A2UIService: Could not resolve path ${O.path} for surface ${o}`);
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1003
1021
|
mapMessage(o) {
|
|
1004
1022
|
if (o.role !== "assistant" || !o.toolCalls) throw Error("Unsupported message type for A2UI processing");
|
|
1005
1023
|
let O = [];
|
|
@@ -1074,11 +1092,11 @@ const styles$4 = i$1`
|
|
|
1074
1092
|
return typeof o.path == "string" && (M.path = o.path), M;
|
|
1075
1093
|
}
|
|
1076
1094
|
normalizeDataModelUpdate(o) {
|
|
1077
|
-
let O = {
|
|
1078
|
-
surfaceId:
|
|
1095
|
+
let O = o.surfaceId || o.surface_id, M = {
|
|
1096
|
+
surfaceId: O,
|
|
1079
1097
|
contents: this.normalizeValueMapArray(o.contents)
|
|
1080
1098
|
};
|
|
1081
|
-
return typeof o.path == "string" && (
|
|
1099
|
+
return typeof o.path == "string" && (M.path = o.path), console.log(`A2UIService: Normalized DataModelUpdate for ${O}`, M), M;
|
|
1082
1100
|
}
|
|
1083
1101
|
mapDeleteSurface(o) {
|
|
1084
1102
|
let O = this.getSurfaceId(o);
|
|
@@ -1093,18 +1111,23 @@ const styles$4 = i$1`
|
|
|
1093
1111
|
return typeof O == "string" && O.trim() ? O : typeof O == "number" ? String(O) : null;
|
|
1094
1112
|
}
|
|
1095
1113
|
normalizeValueMapArray(o) {
|
|
1096
|
-
return Array.isArray(o) ? o.filter((o) => o && typeof o == "object" && "key" in o).map((o) => this.normalizeValueMapEntry(o)) : [];
|
|
1114
|
+
return Array.isArray(o) ? o.filter((o) => o && typeof o == "object" && ("key" in o || "path" in o)).map((o) => this.normalizeValueMapEntry(o)) : [];
|
|
1097
1115
|
}
|
|
1098
1116
|
normalizeValueMapEntry(o) {
|
|
1099
1117
|
let O = { ...o };
|
|
1100
|
-
"value_string" in o && (O.valueString = o.value_string), "valueString" in o && (O.valueString = o.valueString), "value_number" in o && (O.valueNumber = o.value_number), "valueNumber" in o && (O.valueNumber = o.valueNumber), "value_boolean" in o && (O.valueBoolean = o.value_boolean), "valueBoolean" in o && (O.valueBoolean = o.valueBoolean)
|
|
1118
|
+
if ("value_string" in o && (O.valueString = o.value_string), "valueString" in o && (O.valueString = o.valueString), "value_number" in o && (O.valueNumber = o.value_number), "valueNumber" in o && (O.valueNumber = o.valueNumber), "value_boolean" in o && (O.valueBoolean = o.value_boolean), "valueBoolean" in o && (O.valueBoolean = o.valueBoolean), !("key" in O) && "path" in o && (O.key = o.path), !("valueString" in O) && !("valueNumber" in O) && !("valueBoolean" in O) && "value" in o) {
|
|
1119
|
+
let M = o.value;
|
|
1120
|
+
typeof M == "string" ? O.valueString = M : typeof M == "number" ? O.valueNumber = M : typeof M == "boolean" && (O.valueBoolean = M);
|
|
1121
|
+
}
|
|
1101
1122
|
let M = o.valueMap ?? o.value_map;
|
|
1102
|
-
|
|
1123
|
+
M !== void 0 && (O.valueMap = this.normalizeValueMapArray(M)), delete O.value_string, delete O.value_number, delete O.value_boolean, delete O.value_map, typeof O.key != "string" && (O.key = String(O.key ?? ""));
|
|
1124
|
+
let F = O.key;
|
|
1125
|
+
return F.startsWith("/") && (O.key = F.substring(1)), O;
|
|
1103
1126
|
}
|
|
1104
1127
|
isServerToClientMessage(o) {
|
|
1105
1128
|
if (!o || typeof o != "object") return !1;
|
|
1106
|
-
let O = o;
|
|
1107
|
-
return "beginRendering" in O || "begin_rendering" in O || "surfaceUpdate" in O || "surface_update" in O || "dataModelUpdate" in O || "data_model_update" in O || "deleteSurface" in O || "delete_surface" in O;
|
|
1129
|
+
let O = o, M = O.content, F = typeof M == "object" && !!M && ("beginRendering" in M || "surfaceUpdate" in M);
|
|
1130
|
+
return "beginRendering" in O || "begin_rendering" in O || "surfaceUpdate" in O || "surface_update" in O || "dataModelUpdate" in O || "data_model_update" in O || "deleteSurface" in O || "delete_surface" in O || F;
|
|
1108
1131
|
}
|
|
1109
1132
|
normalizeServerMessage(o) {
|
|
1110
1133
|
let O = o;
|
|
@@ -1144,6 +1167,20 @@ const styles$4 = i$1`
|
|
|
1144
1167
|
O.push(this.normalizeServerMessage(M));
|
|
1145
1168
|
continue;
|
|
1146
1169
|
}
|
|
1170
|
+
if (M.role === "tool" && typeof M.content == "string") {
|
|
1171
|
+
try {
|
|
1172
|
+
let o = JSON.parse(M.content);
|
|
1173
|
+
if (o.role === "activity" && o.activity_type === "a2ui" && o.content) {
|
|
1174
|
+
let M = o.content;
|
|
1175
|
+
if (this.isServerToClientMessage(M)) O.push(this.normalizeServerMessage(M));
|
|
1176
|
+
else {
|
|
1177
|
+
let o = Array.isArray(M) ? M : [M];
|
|
1178
|
+
for (let M of o) this.isServerToClientMessage(M) && O.push(this.normalizeServerMessage(M));
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
} catch {}
|
|
1182
|
+
continue;
|
|
1183
|
+
}
|
|
1147
1184
|
let o = M;
|
|
1148
1185
|
if (o.role === "activity" && o.activityType === "a2ui" && o.content) {
|
|
1149
1186
|
if (this.isServerToClientMessage(o.content)) O.push(this.normalizeServerMessage(o.content));
|
|
@@ -1155,7 +1192,7 @@ const styles$4 = i$1`
|
|
|
1155
1192
|
}
|
|
1156
1193
|
M.role === "assistant" && M.toolCalls && O.push(...this.mapMessage(M));
|
|
1157
1194
|
}
|
|
1158
|
-
if (O.length !== 0) return this.processor.processMessages(O);
|
|
1195
|
+
if (O.length !== 0) return console.log("A2UIService: Processing mapped messages:", JSON.stringify(O, null, 2)), this.processor.processMessages(O);
|
|
1159
1196
|
}
|
|
1160
1197
|
processMessage(o) {
|
|
1161
1198
|
this.processMessages([o]);
|
|
@@ -1177,8 +1214,8 @@ const styles$4 = i$1`
|
|
|
1177
1214
|
}
|
|
1178
1215
|
}
|
|
1179
1216
|
return o;
|
|
1180
|
-
}).flat(), G = [...U, ...W];
|
|
1181
|
-
console.log("A2UIService: Processing messages (fixed)", G), this.processor.processMessages(G);
|
|
1217
|
+
}).flat(), G = [...U, ...W].map((o) => this.normalizeServerMessage(o));
|
|
1218
|
+
console.log("A2UIService: Processing messages (fixed & normalized)", JSON.stringify(G, null, 2)), this.processor.processMessages(G);
|
|
1182
1219
|
let K = Array.from(this.processor.getSurfaces().entries());
|
|
1183
1220
|
console.log("A2UIService: Estado del procesador tras procesado:", K.map(([o, O]) => ({
|
|
1184
1221
|
id: o,
|
|
@@ -1196,6 +1233,42 @@ const styles$4 = i$1`
|
|
|
1196
1233
|
M && F.add(M);
|
|
1197
1234
|
}), Array.from(F);
|
|
1198
1235
|
}
|
|
1236
|
+
isBeginRenderingOnly(o) {
|
|
1237
|
+
let O = this.getA2UIPayloads(o);
|
|
1238
|
+
return O.length === 0 ? !1 : O.every((o) => {
|
|
1239
|
+
let O = !!o.beginRendering, M = !!o.surfaceUpdate || !!o.dataModelUpdate || !!o.deleteSurface;
|
|
1240
|
+
return O && !M;
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
isA2UIMessage(o) {
|
|
1244
|
+
if (o.role === "activity" && o.activityType === "a2ui" || o.role === "assistant" && o.toolCalls && o.toolCalls.some((o) => o.function?.name.startsWith("a2ui_"))) return !0;
|
|
1245
|
+
if (o.role === "tool" && typeof o.content == "string") try {
|
|
1246
|
+
let O = JSON.parse(o.content);
|
|
1247
|
+
return O.role === "activity" && O.activity_type === "a2ui";
|
|
1248
|
+
} catch {
|
|
1249
|
+
return !1;
|
|
1250
|
+
}
|
|
1251
|
+
return !1;
|
|
1252
|
+
}
|
|
1253
|
+
getA2UIPayloads(o) {
|
|
1254
|
+
let O = [];
|
|
1255
|
+
if (o.role === "assistant" && o.toolCalls) O.push(...this.mapMessage(o));
|
|
1256
|
+
else if (o.role === "activity" && o.activityType === "a2ui" && o.content) {
|
|
1257
|
+
let M = o.content;
|
|
1258
|
+
(Array.isArray(M) ? M : [M]).forEach((o) => {
|
|
1259
|
+
this.isServerToClientMessage(o) && O.push(this.normalizeServerMessage(o));
|
|
1260
|
+
});
|
|
1261
|
+
} else if (o.role === "tool" && typeof o.content == "string") try {
|
|
1262
|
+
let M = JSON.parse(o.content);
|
|
1263
|
+
if (M.role === "activity" && M.activity_type === "a2ui" && M.content) {
|
|
1264
|
+
let o = M.content;
|
|
1265
|
+
(Array.isArray(o) ? o : [o]).forEach((o) => {
|
|
1266
|
+
this.isServerToClientMessage(o) && O.push(this.normalizeServerMessage(o));
|
|
1267
|
+
});
|
|
1268
|
+
}
|
|
1269
|
+
} catch {}
|
|
1270
|
+
return O;
|
|
1271
|
+
}
|
|
1199
1272
|
}();
|
|
1200
1273
|
var ChatMessage = class extends i {
|
|
1201
1274
|
constructor(...o) {
|
|
@@ -1217,12 +1290,13 @@ var ChatMessage = class extends i {
|
|
|
1217
1290
|
}));
|
|
1218
1291
|
}
|
|
1219
1292
|
render() {
|
|
1220
|
-
let o = this.message.role === "user"
|
|
1221
|
-
if (
|
|
1293
|
+
let o = this.message.role === "user";
|
|
1294
|
+
if (a2uiService.isA2UIMessage(this.message)) {
|
|
1222
1295
|
a2uiService.processMessages([this.message]);
|
|
1223
1296
|
let o = Array.from(a2uiService.processor.getSurfaces().entries()), O = a2uiService.processor;
|
|
1224
1297
|
if (o.length > 0) return b`
|
|
1225
1298
|
<div class="message-container activity">
|
|
1299
|
+
${this.agentAvatar ? b`<img src="${this.agentAvatar}" class="avatar-img" alt="AI">` : b`<div class="avatar">C</div>`}
|
|
1226
1300
|
<div class="content-wrapper">
|
|
1227
1301
|
${o.map(([o, M]) => b`
|
|
1228
1302
|
<a2ui-theme-provider
|
|
@@ -1273,7 +1347,7 @@ var ChatThread = class extends i {
|
|
|
1273
1347
|
}
|
|
1274
1348
|
static #e = this.styles = styles$4;
|
|
1275
1349
|
updated(o) {
|
|
1276
|
-
o.has("messages") && this.scrollToBottom();
|
|
1350
|
+
o.has("messages") && (a2uiService.processMessages(this.messages), this.scrollToBottom());
|
|
1277
1351
|
}
|
|
1278
1352
|
async scrollToBottom() {
|
|
1279
1353
|
await this.updateComplete, (this.shadowRoot?.querySelector("agent-chat-message:last-of-type"))?.scrollIntoView({
|
|
@@ -1289,7 +1363,7 @@ var ChatThread = class extends i {
|
|
|
1289
1363
|
</div>
|
|
1290
1364
|
` : b`
|
|
1291
1365
|
<div class="messages-list">
|
|
1292
|
-
${this.messages.filter((o) => o
|
|
1366
|
+
${this.messages.filter((o) => a2uiService.isA2UIMessage(o) ? (console.log("A2UIService: isA2UIMessage", o), !a2uiService.isBeginRenderingOnly(o)) : !0).map((o, O, M) => b`
|
|
1293
1367
|
<agent-chat-message
|
|
1294
1368
|
.message=${o}
|
|
1295
1369
|
.isLast=${O === M.length - 1}
|
|
@@ -3135,7 +3209,14 @@ var ChatSubscriber = class {
|
|
|
3135
3209
|
}
|
|
3136
3210
|
onMessagesSnapshotEvent(o) {
|
|
3137
3211
|
inspectorService.addEvent("onMessagesSnapshotEvent", o.event);
|
|
3138
|
-
let O = o.event.messages.
|
|
3212
|
+
let O = o.event.messages.filter((o) => {
|
|
3213
|
+
if (o.role === "tool") return !1;
|
|
3214
|
+
if (o.role === "assistant" && o.toolCalls && o.toolCalls.length > 0) {
|
|
3215
|
+
let O = o.toolCalls.some((o) => o.function?.name?.startsWith("a2ui_")), M = typeof o.content == "string" && o.content.trim().length > 0;
|
|
3216
|
+
if (!O && !M) return !1;
|
|
3217
|
+
}
|
|
3218
|
+
return !0;
|
|
3219
|
+
}).map((o) => ({
|
|
3139
3220
|
...o,
|
|
3140
3221
|
createdAt: o.createdAt || Date.now()
|
|
3141
3222
|
}));
|
|
@@ -3197,7 +3278,7 @@ var ChatSubscriber = class {
|
|
|
3197
3278
|
inspectorService.addEvent("onStateDeltaEvent", o.event);
|
|
3198
3279
|
}
|
|
3199
3280
|
onActivitySnapshotEvent(o) {
|
|
3200
|
-
inspectorService.addEvent("onActivitySnapshotEvent", o.event), o.event.activityType
|
|
3281
|
+
inspectorService.addEvent("onActivitySnapshotEvent", o.event), o.event.activityType === "a2ui" ? a2uiService.processSnapshot(o.event) : [
|
|
3201
3282
|
"navigation",
|
|
3202
3283
|
"click",
|
|
3203
3284
|
"setValue",
|
|
@@ -3399,9 +3480,9 @@ const chatService = new class extends EventTarget {
|
|
|
3399
3480
|
};
|
|
3400
3481
|
break;
|
|
3401
3482
|
}
|
|
3402
|
-
this.notify();
|
|
3483
|
+
this.agent.addMessage(U), this.notify();
|
|
3403
3484
|
try {
|
|
3404
|
-
this.agent?.threadId == threadIdPlaceHolder && await this._ensureConversation(), this.agent.
|
|
3485
|
+
this.agent?.threadId == threadIdPlaceHolder && await this._ensureConversation(), this.agent.state = { appState: this._appState }, await this.agent.runAgent({ tools: [] }, this.subscriber);
|
|
3405
3486
|
} catch (o) {
|
|
3406
3487
|
console.error("Failed to send message", o);
|
|
3407
3488
|
} finally {
|
|
@@ -3469,7 +3550,7 @@ const chatService = new class extends EventTarget {
|
|
|
3469
3550
|
this.agent.messages = [...F, M], this.notify();
|
|
3470
3551
|
}
|
|
3471
3552
|
async startNewThread() {
|
|
3472
|
-
localStorage.removeItem(STORAGE_THREAD_ID_KEY), this.agent && (this.agent.threadId = threadIdPlaceHolder, this.agent.messages = [], this.agent.isRunning = !1), this._suggestedPrompts.length > 0 && (this._showPrompts = !0), this.notify();
|
|
3553
|
+
localStorage.removeItem(STORAGE_THREAD_ID_KEY), console.log("ChatService: startNewThread"), this.agent && (this.agent.threadId = threadIdPlaceHolder, this.agent.messages = [], this.agent.isRunning = !1), this._suggestedPrompts.length > 0 && (this._showPrompts = !0), this.notify();
|
|
3473
3554
|
}
|
|
3474
3555
|
async getConversations() {
|
|
3475
3556
|
return await this.refreshConversations(), this._conversations;
|
|
@@ -3522,7 +3603,7 @@ var ChatController = class {
|
|
|
3522
3603
|
return chatService.sendMessage(o, O);
|
|
3523
3604
|
}
|
|
3524
3605
|
startNewThread() {
|
|
3525
|
-
return chatService.startNewThread();
|
|
3606
|
+
return console.log("Starting new thread"), chatService.startNewThread();
|
|
3526
3607
|
}
|
|
3527
3608
|
loadConversation(o) {
|
|
3528
3609
|
return chatService.loadConversation(o);
|
|
@@ -3567,7 +3648,7 @@ var ChatController = class {
|
|
|
3567
3648
|
window.fetch = async function(O, M) {
|
|
3568
3649
|
try {
|
|
3569
3650
|
let F = new Headers(M?.headers || {});
|
|
3570
|
-
return F.has("Authorization") || F.append("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhmcDRfR0tObWNBMHl3UUNrZ1BXVkJjTHZmRDVfZXZKOWg3bUhGbExBVWMiLCJ0eXAiOiJKV1QifQ.
|
|
3651
|
+
return F.has("Authorization") || F.append("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6InhmcDRfR0tObWNBMHl3UUNrZ1BXVkJjTHZmRDVfZXZKOWg3bUhGbExBVWMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJpc3MiOiJodHRwczovL3NrY290ZXN0LmIyY2xvZ2luLmNvbS8wZGI2ZGJjMy02OTA4LTQ1MTctYTdmMi04MWVhNjg1YTI1ZTIvdjIuMC8iLCJleHAiOjE3Njk3MTc5MjAsIm5iZiI6MTc2OTcxNzAyMCwibmFtZSI6IlZpYW5hIFZlbGFzcXVleiwgSm9zZSBTdGV2ZW4iLCJpZHBfYWNjZXNzX3Rva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNkltdDVZM2h1ZGs5TlRtOVJZblpuU2psd1JuTnVMVGs0V1VsQlJVSjNjM1U0VTJjMmIzUmxjVjh3UldjaUxDSmhiR2NpT2lKU1V6STFOaUlzSW5nMWRDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0lzSW10cFpDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0o5LmV5SmhkV1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TURBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzh3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFV2SWl3aWFXRjBJam94TnpZNU5qazFORFkwTENKdVltWWlPakUzTmprMk9UVTBOalFzSW1WNGNDSTZNVGMyT1RZNU9UZ3hPU3dpWVdOamRDSTZNQ3dpWVdOeUlqb2lNU0lzSW1GamNuTWlPbHNpY0RFaVhTd2lZV2x2SWpvaVFWcFJRV0V2T0dKQlFVRkJURWcxV0U1bFVrNXVTMDFxTm1WNlNHb3hjbUZYVWtzNGFqQTBTMGRLVVZVek5tdE9jamR3TldNMFdFNWxlbEpqWlc1WFUzazFWbUppVFdWUlp6UnVVRXBtVGtwS2JtWkNkVEJQZDIxSmRtbFhWazEwZEhGMUswVjVSR3BEWWxBNFppOXlVMUI2YVZCUUsyeEZZbEpYYXk5RGJUWXdkRzFHWldwUVoxQmhNamh0ZWtabWJtNUdjVzVhUzJGNFQwZFNMM2wwWkZOMGVVaFJLMkk1Um01emVqQlNUbmRKV2xGS2VqTnViVzEzVWpWUFlUVjZjV1pWVVRWVVJYaFhTekY2SWl3aVlXMXlJanBiSW5CM1pDSXNJbTFtWVNKZExDSmhjSEJmWkdsemNHeGhlVzVoYldVaU9pSkVZV3hwTFZCeVpDSXNJbUZ3Y0dsa0lqb2laR1prTURrNVlqQXRaV05pT1MwME0yVTFMV0kzWWpjdE5USTVObUk0TUdFME5qSXdJaXdpWVhCd2FXUmhZM0lpT2lJeElpd2labUZ0YVd4NVgyNWhiV1VpT2lKV2FXRnVZU0JXWld4aGMzRjFaWG9pTENKbmFYWmxibDl1WVcxbElqb2lTbTl6WlNCVGRHVjJaVzRpTENKcFpIUjVjQ0k2SW5WelpYSWlMQ0pwY0dGa1pISWlPaUl6T0M0NUxqSXlNQzR4TXpJaUxDSnVZVzFsSWpvaVZtbGhibUVnVm1Wc1lYTnhkV1Y2TENCS2IzTmxJRk4wWlhabGJpSXNJbTlwWkNJNkltVXdNbU0wTmpaakxXVTVaRGd0TkdGa01pMDVaVGhrTFdReFltUTJObUV6TkRNd01pSXNJbTl1Y0hKbGJWOXphV1FpT2lKVExURXROUzB5TVMweU5EZzVPVGM1T1RRd0xUSTFOVEl3TVRnM016RXRNVGN3TWpjeE9UTTFPUzB5TVRrNE1DSXNJbkJzWVhSbUlqb2lPQ0lzSW5CMWFXUWlPaUl4TURBek1qQXdNVUV4UWpCQ016azBJaXdpY21naU9pSXhMa0ZVVVVGUmFEaHVRMDh0UWpGclYwSnlSV3d6WWtWMmJVWlJUVUZCUVVGQlFVRkJRWGRCUVVGQlFVRkJRVUZDVVVGUmF6QkJRUzRpTENKelkzQWlPaUpOWVdsc0xsSmxZV1FnVFdGcGJDNVRaVzVrSUc5d1pXNXBaQ0J3Y205bWFXeGxJRlZ6WlhJdVVtVmhaQ0JsYldGcGJDSXNJbk5wWkNJNklqQXdNVE0yT0dSaExUTTVORFV0WkdSaU55MW1ZVGd6TFRjek16ZzFNVGMxTnpZNU1DSXNJbk5wWjI1cGJsOXpkR0YwWlNJNld5SnJiWE5wSWwwc0luTjFZaUk2SW5GaFNsbFhNelEzT0RWcFdFUktVbDlyYVZCa1NuSm5VWGhoVGs5d1RsaHRhVmhFV0dVM1NVTktaMWtpTENKMFpXNWhiblJmY21WbmFXOXVYM05qYjNCbElqb2lVMEVpTENKMGFXUWlPaUl3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFVpTENKMWJtbHhkV1ZmYm1GdFpTSTZJbXAyYVdGdVlVQnphMkZ1WkdsaExtTnZiUzVqYnlJc0luVndiaUk2SW1wMmFXRnVZVUJ6YTJGdVpHbGhMbU52YlM1amJ5SXNJblYwYVNJNklrMUlWVnAzTjJSRmJHc3RkRkZGZEcxMmJGVlBRVUVpTENKMlpYSWlPaUl4TGpBaUxDSjNhV1J6SWpwYkltSTNPV1ppWmpSa0xUTmxaamt0TkRZNE9TMDRNVFF6TFRjMllqRTVOR1U0TlRVd09TSmRMQ0o0YlhOZllXTmtJam94TnpVeU5UZzVNVEk0TENKNGJYTmZZV04wWDJaamRDSTZJak1nT1NJc0luaHRjMTltZEdRaU9pSk1halZqUjJ3Mk5YZzNXREJqTWtkMGJtcE5VbXBpY0VRd1IzVmlNbFJRWkZGRVoyRjRSV1JQT0VGSlFtUllUbnBpTTFZd1lVTXhhMk15TVhvaUxDSjRiWE5mYVdSeVpXd2lPaUl4TUNBeElpd2llRzF6WDNOMElqcDdJbk4xWWlJNkluTjBRbTVOTjFweE5ESnNNVkpHTW5STFJEQllRVkptWVU1RFVVRnZhRlp0WDFCVlYySmlhMFpmVVRnaWZTd2llRzF6WDNOMVlsOW1ZM1FpT2lJeklERTRJaXdpZUcxelgzUmpaSFFpT2pFek9UTTJNRE16TkRFc0luaHRjMTkwYm5SZlptTjBJam9pTXlBNEluMC5mSU1udzdwOTlvNzNxY2QtVW9DZ1ZFRVotODI2cTNZNVZaMG1DYWVrdW9pNnR3SmpUdHQyY0JyVFJqQ3ZadE5JOF9FNFNGY0hZQ3hSTm9pY1MzUkd4aGwwdFNvRndCaHNwUDFpREg0SHNrRjFkVWRTTi1XNmNIZDJKMnJFc19GLTJsQkNaR0Z4dTdkTEFpdXR4b2t1amlIUE96MS12MDRfOS01ZWswUUVITVUtcEVfNHlabnNWVERfaFc4ZC04UUVEOVNlN0dWRFFWcUZac1RSMDRSRlFGSGhuN19Sd0hwc2ptYWp1LUFVUlpaVy1KZEpzM1hHT1Flam41NTZMSUpJT01WdzN4T0wtSkVaQlQxRTlKR3NyTjFFSVhJbGJzOVUtNHZfT21JQURZVXlFWnBzV3pIeXpMTHRxUFFjRDhvTEpLZUFYYU1Kbml0czlHVjY0NFBIUUEiLCJzdWIiOiI4ODIwZDZiNi03MjViLTQwNDQtYWRjYi1hM2UxOGEzOGU0ZmMiLCJnaXZlbl9uYW1lIjoiSm9zZSBTdGV2ZW4iLCJmYW1pbHlfbmFtZSI6IlZpYW5hIFZlbGFzcXVleiIsImVtYWlsIjoianZpYW5hQHNrYW5kaWEuY29tLmNvIiwibm9uY2UiOiIwMTljMGExNi01ZGQ0LTdiNTktYjlkOS00MTBhOGRjMzdjM2YiLCJhenAiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJ2ZXIiOiIxLjAiLCJpYXQiOjE3Njk3MTcwMjB9.nfO771YIggoRk1Q6VrhEhGL8hSgu_O6_yLgp9MHwPbb2oUuUlclKXq1xdstjs7ERBi8mQtqlmEb2b0JCM5BV-2WIe41RlIErQgACBdoFUPLnBWnOLnffl6Y-Ce88WjoRfSAtj6GUn09aD53ocUkU_t4ca2ozpcpQGgrJxx2QxZpRp7uTB0Wxdt5KzLTpc05JpJe4AdKxLImrKgqMaR2R2IRn8zhZmlLQR2TfEPqPW-tbCVLdWLn2XJx6mWtcKtgCC0O9fNz2WeyyOnxLFV9pEjWm93cUXX9VEBhwmyKD0vReU9fnUwJqL3s09hg3hUMptZr4FjrJsXaoxaxbZhitrg"), o.originalFetch(O, {
|
|
3571
3652
|
...M,
|
|
3572
3653
|
headers: F
|
|
3573
3654
|
});
|
|
@@ -3593,7 +3674,15 @@ var AgentChat = class extends i {
|
|
|
3593
3674
|
this.dispatchEvent(new CustomEvent("controller-ready", { detail: this._chatController }));
|
|
3594
3675
|
}
|
|
3595
3676
|
connectedCallback() {
|
|
3596
|
-
super.connectedCallback(), this.addEventListener("a2uiaction", this._handleA2UIAction);
|
|
3677
|
+
super.connectedCallback(), this._injectFonts(), this.addEventListener("a2uiaction", this._handleA2UIAction);
|
|
3678
|
+
}
|
|
3679
|
+
_injectFonts() {
|
|
3680
|
+
["https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200", "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"].forEach((o) => {
|
|
3681
|
+
if (!document.querySelector(`link[href="${o}"]`)) {
|
|
3682
|
+
let O = document.createElement("link");
|
|
3683
|
+
O.rel = "stylesheet", O.href = o, document.head.appendChild(O);
|
|
3684
|
+
}
|
|
3685
|
+
});
|
|
3597
3686
|
}
|
|
3598
3687
|
disconnectedCallback() {
|
|
3599
3688
|
this.removeEventListener("a2uiaction", this._handleA2UIAction), super.disconnectedCallback();
|
|
@@ -3691,29 +3780,30 @@ var AgentChat = class extends i {
|
|
|
3691
3780
|
this.setAppContext(o.detail);
|
|
3692
3781
|
}
|
|
3693
3782
|
_handleA2UIAction(o) {
|
|
3694
|
-
let { action: O } = o.detail;
|
|
3695
|
-
if (O)
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
|
|
3699
|
-
|
|
3700
|
-
|
|
3783
|
+
let { action: O, surfaceId: M } = o.detail;
|
|
3784
|
+
if (!O) return;
|
|
3785
|
+
console.log("AgentChat: A2UI Action received:", O, "Surface:", M);
|
|
3786
|
+
let F = M || Array.from(a2uiService.processor.getSurfaces().keys())[0] || "root";
|
|
3787
|
+
if (O.name === "decision") {
|
|
3788
|
+
this._handleAuthDecision(O, F);
|
|
3789
|
+
return;
|
|
3701
3790
|
}
|
|
3791
|
+
this._handleGenericUrlAction(O, F);
|
|
3702
3792
|
}
|
|
3703
|
-
_handleAuthDecision(o) {
|
|
3704
|
-
let
|
|
3793
|
+
_handleAuthDecision(o, O) {
|
|
3794
|
+
let M = o.context || [], F = M.find((o) => o.key === "userDecision"), U = a2uiService.resolveValue(O, F?.value), W = M.find((o) => [
|
|
3705
3795
|
"url",
|
|
3706
3796
|
"href",
|
|
3707
3797
|
"link",
|
|
3708
3798
|
"uri"
|
|
3709
|
-
].includes(o.key?.toLowerCase()))?.value
|
|
3710
|
-
if (console.log(`AgentChat: Specialized decision handler: ${
|
|
3799
|
+
].includes(o.key?.toLowerCase())), G = a2uiService.resolveValue(O, W?.value);
|
|
3800
|
+
if (console.log(`AgentChat: Specialized decision handler: ${U}`, o), U === "deny") {
|
|
3711
3801
|
console.log("AgentChat: User denied the request."), this._chatController.sendMessage(`User selected "Deny" for action "${o.name}".`, "tool");
|
|
3712
3802
|
return;
|
|
3713
3803
|
}
|
|
3714
|
-
if (
|
|
3715
|
-
console.log(`AgentChat: User selected "Approve". Opening auth URL: ${
|
|
3716
|
-
let O = window.open(
|
|
3804
|
+
if (U === "approve") if (G) {
|
|
3805
|
+
console.log(`AgentChat: User selected "Approve". Opening auth URL: ${G}`);
|
|
3806
|
+
let O = window.open(G, "_blank");
|
|
3717
3807
|
if (O) {
|
|
3718
3808
|
let M = setInterval(() => {
|
|
3719
3809
|
O.closed && (clearInterval(M), console.log("AgentChat: Auth tab closed. Notifying approval."), this._chatController.sendMessage(`User approved the request "${o.name}" and completed authentication.`, "tool"));
|
|
@@ -3721,14 +3811,14 @@ var AgentChat = class extends i {
|
|
|
3721
3811
|
} else console.error("AgentChat: Failed to open auth tab.");
|
|
3722
3812
|
} else console.log("AgentChat: User approved (no URL provided)."), this._chatController.sendMessage(`User selected "Approve" for action "${o.name}".`, "tool");
|
|
3723
3813
|
}
|
|
3724
|
-
_handleGenericUrlAction(o) {
|
|
3725
|
-
let
|
|
3814
|
+
_handleGenericUrlAction(o, O) {
|
|
3815
|
+
let M = o.context?.find((o) => [
|
|
3726
3816
|
"url",
|
|
3727
3817
|
"href",
|
|
3728
3818
|
"link",
|
|
3729
3819
|
"uri"
|
|
3730
|
-
].includes(o.key?.toLowerCase())),
|
|
3731
|
-
|
|
3820
|
+
].includes(o.key?.toLowerCase())), F = a2uiService.resolveValue(O, M?.value);
|
|
3821
|
+
F ? (console.log(`AgentChat: Opening generic URL: ${F}`), window.open(F, "_blank")) : o.name === "openLink" ? console.warn("AgentChat: openLink action received but no URL could be resolved:", o) : console.warn("AgentChat: A2UI Action received without recognizable purpose:", o);
|
|
3732
3822
|
}
|
|
3733
3823
|
_handleStateUpdate(o) {
|
|
3734
3824
|
this.setAppState(o.detail);
|