site-operator 0.2.8 → 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
|
@@ -34,6 +34,22 @@ export declare type Action = NavigationAction | {
|
|
|
34
34
|
targetId: string;
|
|
35
35
|
/** Optional reason for the click */
|
|
36
36
|
reason?: string;
|
|
37
|
+
} | {
|
|
38
|
+
/** Sets a value to an input element (e.g., text, number) */
|
|
39
|
+
type: "setValue";
|
|
40
|
+
/** Identifier for the target input element */
|
|
41
|
+
targetId: string;
|
|
42
|
+
/** The value to set (string or number) */
|
|
43
|
+
value: string | number;
|
|
44
|
+
/** Optional reason for setting the value */
|
|
45
|
+
reason?: string;
|
|
46
|
+
} | {
|
|
47
|
+
/** Sequence of actions to be performed in order */
|
|
48
|
+
type: "plan";
|
|
49
|
+
/** Ordered list of actions to execute */
|
|
50
|
+
steps: Action[];
|
|
51
|
+
/** Description of the plan's overall goal */
|
|
52
|
+
goal?: string;
|
|
37
53
|
} | {
|
|
38
54
|
/** Generic action type for extension */
|
|
39
55
|
type: string;
|
|
@@ -46,6 +62,7 @@ export declare class AgentChat extends LitElement {
|
|
|
46
62
|
get controller(): ChatController;
|
|
47
63
|
protected firstUpdated(): void;
|
|
48
64
|
connectedCallback(): void;
|
|
65
|
+
private _injectFonts;
|
|
49
66
|
disconnectedCallback(): void;
|
|
50
67
|
backendUrl: string;
|
|
51
68
|
appName: string;
|
|
@@ -341,6 +358,10 @@ export declare class ChatController implements ReactiveController {
|
|
|
341
358
|
* Refresca el listado de conversaciones desde el servidor.
|
|
342
359
|
*/
|
|
343
360
|
refreshConversations(): Promise<void>;
|
|
361
|
+
/**
|
|
362
|
+
* Obtiene el listado de conversaciones desde el servidor.
|
|
363
|
+
*/
|
|
364
|
+
getConversations(): Promise<ConversationSummary[]>;
|
|
344
365
|
/**
|
|
345
366
|
* Manejador interno para cambios de estado.
|
|
346
367
|
* Llama a requestUpdate() en el host para forzar el renderizado.
|
|
@@ -498,11 +519,17 @@ declare class ChatService extends EventTarget {
|
|
|
498
519
|
sendMessage(content: string, role?: "developer" | "user" | "assistant" | "system" | "tool" | "activity"): Promise<void>;
|
|
499
520
|
_ensureConversation(): Promise<void>;
|
|
500
521
|
addPlaceholderMessage(): void;
|
|
522
|
+
cleanupThinkingPlaceholder(): void;
|
|
501
523
|
prepareMessageForStreaming(newId: string): void;
|
|
502
524
|
appendMessageContent(id: string, content: string): void;
|
|
503
525
|
setMessages(messages: Message[]): void;
|
|
504
526
|
addA2UIMessage(event: ActivitySnapshotEvent): void;
|
|
505
527
|
startNewThread(): Promise<void>;
|
|
528
|
+
/**
|
|
529
|
+
* Obtiene el listado de conversaciones desde el servidor.
|
|
530
|
+
* @returns Promesa con el listado de conversaciones.
|
|
531
|
+
*/
|
|
532
|
+
getConversations(): Promise<ConversationSummary[]>;
|
|
506
533
|
/**
|
|
507
534
|
* Refresca la lista de conversaciones desde el servicio de conversaciones.
|
|
508
535
|
*/
|
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,9 +1167,32 @@ 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
|
+
}
|
|
1184
|
+
let o = M;
|
|
1185
|
+
if (o.role === "activity" && o.activityType === "a2ui" && o.content) {
|
|
1186
|
+
if (this.isServerToClientMessage(o.content)) O.push(this.normalizeServerMessage(o.content));
|
|
1187
|
+
else {
|
|
1188
|
+
let M = o.content, F = Array.isArray(M) ? M : [M];
|
|
1189
|
+
for (let o of F) this.isServerToClientMessage(o) && O.push(this.normalizeServerMessage(o));
|
|
1190
|
+
}
|
|
1191
|
+
continue;
|
|
1192
|
+
}
|
|
1147
1193
|
M.role === "assistant" && M.toolCalls && O.push(...this.mapMessage(M));
|
|
1148
1194
|
}
|
|
1149
|
-
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);
|
|
1150
1196
|
}
|
|
1151
1197
|
processMessage(o) {
|
|
1152
1198
|
this.processMessages([o]);
|
|
@@ -1168,8 +1214,8 @@ const styles$4 = i$1`
|
|
|
1168
1214
|
}
|
|
1169
1215
|
}
|
|
1170
1216
|
return o;
|
|
1171
|
-
}).flat(), G = [...U, ...W];
|
|
1172
|
-
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);
|
|
1173
1219
|
let K = Array.from(this.processor.getSurfaces().entries());
|
|
1174
1220
|
console.log("A2UIService: Estado del procesador tras procesado:", K.map(([o, O]) => ({
|
|
1175
1221
|
id: o,
|
|
@@ -1187,6 +1233,42 @@ const styles$4 = i$1`
|
|
|
1187
1233
|
M && F.add(M);
|
|
1188
1234
|
}), Array.from(F);
|
|
1189
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
|
+
}
|
|
1190
1272
|
}();
|
|
1191
1273
|
var ChatMessage = class extends i {
|
|
1192
1274
|
constructor(...o) {
|
|
@@ -1209,11 +1291,12 @@ var ChatMessage = class extends i {
|
|
|
1209
1291
|
}
|
|
1210
1292
|
render() {
|
|
1211
1293
|
let o = this.message.role === "user";
|
|
1212
|
-
if (
|
|
1294
|
+
if (a2uiService.isA2UIMessage(this.message)) {
|
|
1213
1295
|
a2uiService.processMessages([this.message]);
|
|
1214
1296
|
let o = Array.from(a2uiService.processor.getSurfaces().entries()), O = a2uiService.processor;
|
|
1215
1297
|
if (o.length > 0) return b`
|
|
1216
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>`}
|
|
1217
1300
|
<div class="content-wrapper">
|
|
1218
1301
|
${o.map(([o, M]) => b`
|
|
1219
1302
|
<a2ui-theme-provider
|
|
@@ -1264,7 +1347,7 @@ var ChatThread = class extends i {
|
|
|
1264
1347
|
}
|
|
1265
1348
|
static #e = this.styles = styles$4;
|
|
1266
1349
|
updated(o) {
|
|
1267
|
-
o.has("messages") && this.scrollToBottom();
|
|
1350
|
+
o.has("messages") && (a2uiService.processMessages(this.messages), this.scrollToBottom());
|
|
1268
1351
|
}
|
|
1269
1352
|
async scrollToBottom() {
|
|
1270
1353
|
await this.updateComplete, (this.shadowRoot?.querySelector("agent-chat-message:last-of-type"))?.scrollIntoView({
|
|
@@ -1280,7 +1363,7 @@ var ChatThread = class extends i {
|
|
|
1280
1363
|
</div>
|
|
1281
1364
|
` : b`
|
|
1282
1365
|
<div class="messages-list">
|
|
1283
|
-
${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`
|
|
1284
1367
|
<agent-chat-message
|
|
1285
1368
|
.message=${o}
|
|
1286
1369
|
.isLast=${O === M.length - 1}
|
|
@@ -3055,9 +3138,18 @@ var ChatPortalService = class o extends EventTarget {
|
|
|
3055
3138
|
this._visibleTargetIds = new Set(o), this.dispatchEvent(new CustomEvent("targets-updated", { detail: o }));
|
|
3056
3139
|
}
|
|
3057
3140
|
async executePlan(o) {
|
|
3058
|
-
if (o.type === "
|
|
3141
|
+
if (o.type === "plan") {
|
|
3142
|
+
let O = o.steps;
|
|
3143
|
+
console.log(`ChatPortalService: Executing multi-step plan with ${O.length} steps.`);
|
|
3144
|
+
for (let o of O) {
|
|
3145
|
+
let O = await this.executePlan(o);
|
|
3146
|
+
if (O.status === "error") return O;
|
|
3147
|
+
}
|
|
3148
|
+
return { status: "ok" };
|
|
3149
|
+
}
|
|
3150
|
+
if (o.type === "click" || o.type === "setValue") {
|
|
3059
3151
|
let O = o.targetId;
|
|
3060
|
-
if (console.log(`ChatPortalService: Waiting for
|
|
3152
|
+
if (console.log(`ChatPortalService: Waiting for target "${O}" for action "${o.type}"...`), !await this._waitForTarget(O)) return {
|
|
3061
3153
|
status: "error",
|
|
3062
3154
|
details: `Target "${O}" not found or not visible after timeout.`
|
|
3063
3155
|
};
|
|
@@ -3090,13 +3182,13 @@ var ChatSubscriber = class {
|
|
|
3090
3182
|
this.service = o;
|
|
3091
3183
|
}
|
|
3092
3184
|
onRunFinishedEvent(o) {
|
|
3093
|
-
inspectorService.addEvent("onRunFinishedEvent", o.event);
|
|
3185
|
+
inspectorService.addEvent("onRunFinishedEvent", o.event), this.service.cleanupThinkingPlaceholder();
|
|
3094
3186
|
}
|
|
3095
3187
|
onRunStartedEvent(o) {
|
|
3096
3188
|
inspectorService.addEvent("onRunStartedEvent", o.event), this.service.addPlaceholderMessage();
|
|
3097
3189
|
}
|
|
3098
3190
|
onRunErrorEvent(o) {
|
|
3099
|
-
inspectorService.addEvent("onRunErrorEvent", o.event), console.error("ChatSubscriber: Run Error", o.event);
|
|
3191
|
+
inspectorService.addEvent("onRunErrorEvent", o.event), console.error("ChatSubscriber: Run Error", o.event), this.service.cleanupThinkingPlaceholder();
|
|
3100
3192
|
}
|
|
3101
3193
|
onStepStartedEvent(o) {
|
|
3102
3194
|
inspectorService.addEvent("onStepStartedEvent", o.event);
|
|
@@ -3117,7 +3209,14 @@ var ChatSubscriber = class {
|
|
|
3117
3209
|
}
|
|
3118
3210
|
onMessagesSnapshotEvent(o) {
|
|
3119
3211
|
inspectorService.addEvent("onMessagesSnapshotEvent", o.event);
|
|
3120
|
-
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) => ({
|
|
3121
3220
|
...o,
|
|
3122
3221
|
createdAt: o.createdAt || Date.now()
|
|
3123
3222
|
}));
|
|
@@ -3153,6 +3252,21 @@ var ChatSubscriber = class {
|
|
|
3153
3252
|
});
|
|
3154
3253
|
console.log("ChatSubscriber: click_element result", O);
|
|
3155
3254
|
}
|
|
3255
|
+
if (o.toolCallName === "set_value") {
|
|
3256
|
+
console.log("ChatSubscriber: Received set_value tool call", o.toolCallArgs);
|
|
3257
|
+
let O = await chatPortalService.executePlan({
|
|
3258
|
+
type: "setValue",
|
|
3259
|
+
targetId: o.toolCallArgs.target_id,
|
|
3260
|
+
value: o.toolCallArgs.value,
|
|
3261
|
+
reason: o.toolCallArgs.reason
|
|
3262
|
+
});
|
|
3263
|
+
console.log("ChatSubscriber: set_value result", O);
|
|
3264
|
+
}
|
|
3265
|
+
if (o.toolCallName === "execute_ui_plan" || o.toolCallName === "executePlan") {
|
|
3266
|
+
console.log("ChatSubscriber: Received UI plan tool call", o.toolCallArgs);
|
|
3267
|
+
let O = await chatPortalService.executePlan(o.toolCallArgs);
|
|
3268
|
+
console.log("ChatSubscriber: UI plan result", O);
|
|
3269
|
+
}
|
|
3156
3270
|
}
|
|
3157
3271
|
onToolCallResultEvent(o) {
|
|
3158
3272
|
inspectorService.addEvent("onToolCallResultEvent", o.event);
|
|
@@ -3164,7 +3278,12 @@ var ChatSubscriber = class {
|
|
|
3164
3278
|
inspectorService.addEvent("onStateDeltaEvent", o.event);
|
|
3165
3279
|
}
|
|
3166
3280
|
onActivitySnapshotEvent(o) {
|
|
3167
|
-
inspectorService.addEvent("onActivitySnapshotEvent", o.event), o.event.activityType
|
|
3281
|
+
inspectorService.addEvent("onActivitySnapshotEvent", o.event), o.event.activityType === "a2ui" ? a2uiService.processSnapshot(o.event) : [
|
|
3282
|
+
"navigation",
|
|
3283
|
+
"click",
|
|
3284
|
+
"setValue",
|
|
3285
|
+
"plan"
|
|
3286
|
+
].includes(o.event.activityType) && chatPortalService.executePlan(o.event.content);
|
|
3168
3287
|
}
|
|
3169
3288
|
onActivityDeltaEvent(o) {
|
|
3170
3289
|
inspectorService.addEvent("onActivityDeltaEvent", o.event);
|
|
@@ -3361,12 +3480,9 @@ const chatService = new class extends EventTarget {
|
|
|
3361
3480
|
};
|
|
3362
3481
|
break;
|
|
3363
3482
|
}
|
|
3364
|
-
this.notify();
|
|
3483
|
+
this.agent.addMessage(U), this.notify();
|
|
3365
3484
|
try {
|
|
3366
|
-
this.agent?.threadId == threadIdPlaceHolder && await this._ensureConversation(), this.agent.
|
|
3367
|
-
appContext: this._appContext,
|
|
3368
|
-
appState: this._appState
|
|
3369
|
-
}, 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);
|
|
3370
3486
|
} catch (o) {
|
|
3371
3487
|
console.error("Failed to send message", o);
|
|
3372
3488
|
} finally {
|
|
@@ -3389,7 +3505,12 @@ const chatService = new class extends EventTarget {
|
|
|
3389
3505
|
createdAt: Date.now(),
|
|
3390
3506
|
isThinking: !0
|
|
3391
3507
|
};
|
|
3392
|
-
this.agent.messages = [...this.agent.messages, o], this.notify();
|
|
3508
|
+
this.agent.messages = [...this.agent.messages || [], o], this.notify();
|
|
3509
|
+
}
|
|
3510
|
+
cleanupThinkingPlaceholder() {
|
|
3511
|
+
if (!this.agent) return;
|
|
3512
|
+
let o = this.agent.messages.filter((o) => o.id !== "thinking-placeholder");
|
|
3513
|
+
o.length !== this.agent.messages.length && (this.agent.messages = o, this.notify());
|
|
3393
3514
|
}
|
|
3394
3515
|
prepareMessageForStreaming(o) {
|
|
3395
3516
|
if (!this.agent) throw Error("Agent not initialized");
|
|
@@ -3429,7 +3550,10 @@ const chatService = new class extends EventTarget {
|
|
|
3429
3550
|
this.agent.messages = [...F, M], this.notify();
|
|
3430
3551
|
}
|
|
3431
3552
|
async startNewThread() {
|
|
3432
|
-
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();
|
|
3554
|
+
}
|
|
3555
|
+
async getConversations() {
|
|
3556
|
+
return await this.refreshConversations(), this._conversations;
|
|
3433
3557
|
}
|
|
3434
3558
|
async refreshConversations() {
|
|
3435
3559
|
try {
|
|
@@ -3479,7 +3603,7 @@ var ChatController = class {
|
|
|
3479
3603
|
return chatService.sendMessage(o, O);
|
|
3480
3604
|
}
|
|
3481
3605
|
startNewThread() {
|
|
3482
|
-
return chatService.startNewThread();
|
|
3606
|
+
return console.log("Starting new thread"), chatService.startNewThread();
|
|
3483
3607
|
}
|
|
3484
3608
|
loadConversation(o) {
|
|
3485
3609
|
return chatService.loadConversation(o);
|
|
@@ -3508,6 +3632,9 @@ var ChatController = class {
|
|
|
3508
3632
|
refreshConversations() {
|
|
3509
3633
|
return chatService.refreshConversations();
|
|
3510
3634
|
}
|
|
3635
|
+
getConversations() {
|
|
3636
|
+
return chatService.getConversations();
|
|
3637
|
+
}
|
|
3511
3638
|
}, FetchInterceptorService = class {
|
|
3512
3639
|
constructor() {
|
|
3513
3640
|
this.originalFetch = window.fetch.bind(window), this._isEnabled = !1;
|
|
@@ -3521,7 +3648,7 @@ var ChatController = class {
|
|
|
3521
3648
|
window.fetch = async function(O, M) {
|
|
3522
3649
|
try {
|
|
3523
3650
|
let F = new Headers(M?.headers || {});
|
|
3524
|
-
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, {
|
|
3525
3652
|
...M,
|
|
3526
3653
|
headers: F
|
|
3527
3654
|
});
|
|
@@ -3547,7 +3674,15 @@ var AgentChat = class extends i {
|
|
|
3547
3674
|
this.dispatchEvent(new CustomEvent("controller-ready", { detail: this._chatController }));
|
|
3548
3675
|
}
|
|
3549
3676
|
connectedCallback() {
|
|
3550
|
-
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
|
+
});
|
|
3551
3686
|
}
|
|
3552
3687
|
disconnectedCallback() {
|
|
3553
3688
|
this.removeEventListener("a2uiaction", this._handleA2UIAction), super.disconnectedCallback();
|
|
@@ -3645,29 +3780,30 @@ var AgentChat = class extends i {
|
|
|
3645
3780
|
this.setAppContext(o.detail);
|
|
3646
3781
|
}
|
|
3647
3782
|
_handleA2UIAction(o) {
|
|
3648
|
-
let { action: O } = o.detail;
|
|
3649
|
-
if (O)
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
|
|
3653
|
-
|
|
3654
|
-
|
|
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;
|
|
3655
3790
|
}
|
|
3791
|
+
this._handleGenericUrlAction(O, F);
|
|
3656
3792
|
}
|
|
3657
|
-
_handleAuthDecision(o) {
|
|
3658
|
-
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) => [
|
|
3659
3795
|
"url",
|
|
3660
3796
|
"href",
|
|
3661
3797
|
"link",
|
|
3662
3798
|
"uri"
|
|
3663
|
-
].includes(o.key?.toLowerCase()))?.value
|
|
3664
|
-
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") {
|
|
3665
3801
|
console.log("AgentChat: User denied the request."), this._chatController.sendMessage(`User selected "Deny" for action "${o.name}".`, "tool");
|
|
3666
3802
|
return;
|
|
3667
3803
|
}
|
|
3668
|
-
if (
|
|
3669
|
-
console.log(`AgentChat: User selected "Approve". Opening auth URL: ${
|
|
3670
|
-
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");
|
|
3671
3807
|
if (O) {
|
|
3672
3808
|
let M = setInterval(() => {
|
|
3673
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"));
|
|
@@ -3675,14 +3811,14 @@ var AgentChat = class extends i {
|
|
|
3675
3811
|
} else console.error("AgentChat: Failed to open auth tab.");
|
|
3676
3812
|
} else console.log("AgentChat: User approved (no URL provided)."), this._chatController.sendMessage(`User selected "Approve" for action "${o.name}".`, "tool");
|
|
3677
3813
|
}
|
|
3678
|
-
_handleGenericUrlAction(o) {
|
|
3679
|
-
let
|
|
3814
|
+
_handleGenericUrlAction(o, O) {
|
|
3815
|
+
let M = o.context?.find((o) => [
|
|
3680
3816
|
"url",
|
|
3681
3817
|
"href",
|
|
3682
3818
|
"link",
|
|
3683
3819
|
"uri"
|
|
3684
|
-
].includes(o.key?.toLowerCase())),
|
|
3685
|
-
|
|
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);
|
|
3686
3822
|
}
|
|
3687
3823
|
_handleStateUpdate(o) {
|
|
3688
3824
|
this.setAppState(o.detail);
|