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
@@ -62,6 +62,7 @@ export declare class AgentChat extends LitElement {
62
62
  get controller(): ChatController;
63
63
  protected firstUpdated(): void;
64
64
  connectedCallback(): void;
65
+ private _injectFonts;
65
66
  disconnectedCallback(): void;
66
67
  backendUrl: string;
67
68
  appName: string;
@@ -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: o.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" && (O.path = o.path), O;
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
- return 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 ?? "")), O;
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", O = this.message.role === "activity";
1221
- if (this.message.role === "assistant" && Array.isArray(this.message.toolCalls) && this.message.toolCalls.length > 0 || O && this.message.activityType === "a2ui") {
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.role === "assistant" || o.role === "user" || o.role === "activity" && o.activityType === "a2ui").map((o, O, M) => b`
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.map((o) => ({
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 == "a2ui" && o.event.content.surfaceUpdate ? this.service.addA2UIMessage(o.event) : o.event.activityType == "a2ui" && o.event.content.beginRendering ? a2uiService.processMessages([o.event.content]) : [
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.addMessage(U), this.agent.state = { appState: this._appState }, await this.agent.runAgent({ tools: [] }, this.subscriber);
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.eyJhdWQiOiIwZWZhNWFhNy04OWRiLTQ5MTYtYmZlNC0wNTM3MjhlZWY2M2QiLCJpc3MiOiJodHRwczovL3NrY290ZXN0LmIyY2xvZ2luLmNvbS8wZGI2ZGJjMy02OTA4LTQ1MTctYTdmMi04MWVhNjg1YTI1ZTIvdjIuMC8iLCJleHAiOjE3NjkxMjA3OTgsIm5iZiI6MTc2OTExOTg5OCwibmFtZSI6IlZpYW5hIFZlbGFzcXVleiwgSm9zZSBTdGV2ZW4iLCJpZHBfYWNjZXNzX3Rva2VuIjoiZXlKMGVYQWlPaUpLVjFRaUxDSnViMjVqWlNJNkltNTFURzV6ZVc1WFFYSTFOa2hNYTFCblRXMUViWFF0UW14YVVsWjBXRFV0TUdSbVlYVk1WRTgxY3pnaUxDSmhiR2NpT2lKU1V6STFOaUlzSW5nMWRDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0lzSW10cFpDSTZJbEJqV0RrNFIxZzBNakJVTVZnMmMwSkVhM3BvVVcxeFozZE5WU0o5LmV5SmhkV1FpT2lJd01EQXdNREF3TXkwd01EQXdMVEF3TURBdFl6QXdNQzB3TURBd01EQXdNREF3TURBaUxDSnBjM01pT2lKb2RIUndjem92TDNOMGN5NTNhVzVrYjNkekxtNWxkQzh3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFV2SWl3aWFXRjBJam94TnpZNU1EazNORGt5TENKdVltWWlPakUzTmprd09UYzBPVElzSW1WNGNDSTZNVGMyT1RFd01UZzRNU3dpWVdOamRDSTZNQ3dpWVdOeUlqb2lNU0lzSW1GamNuTWlPbHNpY0RFaVhTd2lZV2x2SWpvaVFXVlJRVWN2T0dKQlFVRkJUVTQ0YmpFdllqWk9kMVZTTmpGMFpGSlZXSGhNUzJOak5WQnNVREpyYUdvcmVEbDFlWFZXTkVGYU5WRjZUSEo1U0dSTlVVeGpOSHBpVFV0UE9GQTJXRGREVEZVd1luVjFUMGczTml0WlVIUTBOamx1Unk5Q1ZEVjZiMDF5WkRkbmFXTnlXVk12VW5ac1VYaHVTWHBETkc5bE9HMXFTSFUyUkdodmVUUm1RakJGWlcwNGVTdFdLMGhRVEdoSWRraElhVlZUVFdFMWRYRlhaRlJvVTJrNE1WVndlakZzYUUxWFJVaFlZMGhaUjFORGRESkhVR0puWVRoUFNtSjRaVEJNVm5kaFpWTm9MMVZPYkdkU1VHdEdURlZLWlZwWWFURkNVVFJzVldjNU1YSXdTM1ZIY1dNeGMxTkZaSEp4SzJoWlVtTlZNMWRNUkRJd1VqVTJSRVl2WkhkbU1WVjZUVVZqUkRFMlZVa3hZelpXVjBjdlQweElSRzFyUVRkUFMzTkVOMFpGWkZWVlZXdERSbEU5SWl3aVlXMXlJanBiSW5CM1pDSXNJbTFtWVNKZExDSmhjSEJmWkdsemNHeGhlVzVoYldVaU9pSkVZV3hwTFZCeVpDSXNJbUZ3Y0dsa0lqb2laR1prTURrNVlqQXRaV05pT1MwME0yVTFMV0kzWWpjdE5USTVObUk0TUdFME5qSXdJaXdpWVhCd2FXUmhZM0lpT2lJeElpd2labUZ0YVd4NVgyNWhiV1VpT2lKV2FXRnVZU0JXWld4aGMzRjFaWG9pTENKbmFYWmxibDl1WVcxbElqb2lTbTl6WlNCVGRHVjJaVzRpTENKcFpIUjVjQ0k2SW5WelpYSWlMQ0pwY0dGa1pISWlPaUl6T0M0NUxqSXlNQzR4TXpJaUxDSnVZVzFsSWpvaVZtbGhibUVnVm1Wc1lYTnhkV1Y2TENCS2IzTmxJRk4wWlhabGJpSXNJbTlwWkNJNkltVXdNbU0wTmpaakxXVTVaRGd0TkdGa01pMDVaVGhrTFdReFltUTJObUV6TkRNd01pSXNJbTl1Y0hKbGJWOXphV1FpT2lKVExURXROUzB5TVMweU5EZzVPVGM1T1RRd0xUSTFOVEl3TVRnM016RXRNVGN3TWpjeE9UTTFPUzB5TVRrNE1DSXNJbkJzWVhSbUlqb2lPQ0lzSW5CMWFXUWlPaUl4TURBek1qQXdNVUV4UWpCQ016azBJaXdpY21naU9pSXhMa0ZVVVVGUmFEaHVRMDh0UWpGclYwSnlSV3d6WWtWMmJVWlJUVUZCUVVGQlFVRkJRWGRCUVVGQlFVRkJRVUZDVVVGUmF6QkJRUzRpTENKelkzQWlPaUpOWVdsc0xsSmxZV1FnVFdGcGJDNVRaVzVrSUc5d1pXNXBaQ0J3Y205bWFXeGxJRlZ6WlhJdVVtVmhaQ0JsYldGcGJDSXNJbk5wWkNJNklqQXdNVEkxTnpaaExXTmhOVFF0TVdVeVl5MWlZbVEwTFdFNU4yVTBNekUzT1dNeE15SXNJbk5wWjI1cGJsOXpkR0YwWlNJNld5SnJiWE5wSWwwc0luTjFZaUk2SW5GaFNsbFhNelEzT0RWcFdFUktVbDlyYVZCa1NuSm5VWGhoVGs5d1RsaHRhVmhFV0dVM1NVTktaMWtpTENKMFpXNWhiblJmY21WbmFXOXVYM05qYjNCbElqb2lVMEVpTENKMGFXUWlPaUl3T0RJM01XWTBNaTA0TVdWbUxUUTFaRFl0T0RGaFl5MDBPVGMzTm1NMFltVTJNVFVpTENKMWJtbHhkV1ZmYm1GdFpTSTZJbXAyYVdGdVlVQnphMkZ1WkdsaExtTnZiUzVqYnlJc0luVndiaUk2SW1wMmFXRnVZVUJ6YTJGdVpHbGhMbU52YlM1amJ5SXNJblYwYVNJNkluSlVaMVpmZUVWTVJHdFBSMmx3Y210R01tZDVRVUVpTENKMlpYSWlPaUl4TGpBaUxDSjNhV1J6SWpwYkltSTNPV1ppWmpSa0xUTmxaamt0TkRZNE9TMDRNVFF6TFRjMllqRTVOR1U0TlRVd09TSmRMQ0o0YlhOZllXTmtJam94TnpVeU5UZzVNVEk0TENKNGJYTmZZV04wWDJaamRDSTZJak1nT1NJc0luaHRjMTltZEdRaU9pSXRkalJ3UW10NmRXRlFYMjVSUmpkVVZVWnlRVkZtYkdSNlIzTlpjRWxwT1dnMGFrdDZhbU5SVFZaQlFtUllUbXhaV0U0d1RGZFNlbUpZVFNJc0luaHRjMTlwWkhKbGJDSTZJakVnTWpBaUxDSjRiWE5mYzNRaU9uc2ljM1ZpSWpvaWMzUkNiazAzV25FME1td3hVa1l5ZEV0RU1GaEJVbVpoVGtOUlFXOW9WbTFmVUZWWFltSnJSbDlST0NKOUxDSjRiWE5mYzNWaVgyWmpkQ0k2SWpFd0lETWlMQ0o0YlhOZmRHTmtkQ0k2TVRNNU16WXdNek0wTVN3aWVHMXpYM1J1ZEY5bVkzUWlPaUkySURNaWZRLkEyZl9aRHNVcmp3UFh1NFVRMkYxN2tLNzVXTE1lN3lWX09YNHFKYk1zNTQxQmFmdk1GU3pOQnJILVJsR1FTdjEybjlrRm0yTGJ6bzdoMnJzR0JiRWsyOFQzdmtlTW95TVNPVFdfaldELUFHSVZOVVdaYnc3emVZWHVZYmEydUtfblR5cGpwQVNoV3hBNlJkMUV5QUhGZjVQakIxOTlYRGgySkp2bWJfZzVHazhJY2VEZ3QzcEVRRWF0QUdzZzVZRjN0ZlctLTdGT05EY3NTQjJjS2pMdXJwUl8tUG90LVF6TV9CaV9CeHhBZU1tNlAtb2JGRzB4WGRlRnFkUW9lS2pIVFEzN2EzeE9MMkZ2TFg4ZUhjN2x1SWstUkFBQnlmOXhhMnlxS0NkWGFiQkVSejRzeWhCRkpuMzdCeDc1cUlsZk1rQUlTX2NlemZZYndnSEJJWmZEZyIsInN1YiI6Ijg4MjBkNmI2LTcyNWItNDA0NC1hZGNiLWEzZTE4YTM4ZTRmYyIsImdpdmVuX25hbWUiOiJKb3NlIFN0ZXZlbiIsImZhbWlseV9uYW1lIjoiVmlhbmEgVmVsYXNxdWV6IiwiZW1haWwiOiJqdmlhbmFAc2thbmRpYS5jb20uY28iLCJub25jZSI6IjAxOWJlNjcyLTA4NWYtNzkxNi04MmZjLTk0MTA4OTRjODMyNSIsImF6cCI6IjBlZmE1YWE3LTg5ZGItNDkxNi1iZmU0LTA1MzcyOGVlZjYzZCIsInZlciI6IjEuMCIsImlhdCI6MTc2OTExOTg5OH0.TrBEO5lXpR34n7aA7J5LniTPw36mpwR51latCn7whw0s496hSXf7NJl-822mSGlmhShjQXiiIZCodQa-3nh2A4V1ecGDeCdqh_m-BCqlSsEO8LPEQ3-F-tm74J4iiO6NUm7FDQf3tK0jfxHlpFZJaP45T22389B3xVsPmnvDezHxsltOjtFJtv2sN2csF3CgNiJVvQv6xaX_cs7R4PpTxELCVOyUdjJ3NthE7kMKFvFQgz8Okq_buR7-O8ylRq35Ixxqp8He3nCJ3OWuZEj3xGLBCocGwlc8Vwt4_03Fu94UoU_XHmMD9RsjDA4nJY-o43Dkeldyj_1O5Deo7fhjtg"), o.originalFetch(O, {
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
- if (console.log("AgentChat: A2UI Action received:", O), O.name === "decision") {
3697
- this._handleAuthDecision(O);
3698
- return;
3699
- }
3700
- this._handleGenericUrlAction(O);
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 O = o.context || [], M = O.find((o) => o.key === "userDecision")?.value?.literalString, F = O.find((o) => [
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?.literalString;
3710
- if (console.log(`AgentChat: Specialized decision handler: ${M}`, o), M === "deny") {
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 (M === "approve") if (F) {
3715
- console.log(`AgentChat: User selected "Approve". Opening auth URL: ${F}`);
3716
- let O = window.open(F, "_blank");
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 O = o.context?.find((o) => [
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())), M = O?.value?.literalString || O?.value?.path;
3731
- M ? (console.log(`AgentChat: Opening generic URL: ${M}`), window.open(M, "_blank")) : console.warn("AgentChat: A2UI Action received without recognizable purpose:", o);
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);