@solidxai/core-ui 0.1.20 → 0.1.21-beta.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/components/common/FileReaderExt.d.ts.map +1 -1
- package/dist/components/common/FileReaderExt.js +22 -11
- package/dist/components/common/FileReaderExt.js.map +1 -1
- package/dist/components/common/FileReaderExt.tsx +27 -14
- package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
- package/dist/components/common/SocialMediaLogin.js +1 -1
- package/dist/components/common/SocialMediaLogin.js.map +1 -1
- package/dist/components/common/SocialMediaLogin.tsx +50 -19
- package/dist/components/common/solid-export.css +75 -0
- package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +71 -0
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +14 -0
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +13 -0
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -3
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -3
- package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +2 -2
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +2 -2
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -4
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -3
- package/dist/components/core/solid-agent/SolidAgentChat.d.ts +3 -1
- package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentChat.js +150 -22
- package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentChat.tsx +76 -15
- package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +2 -0
- package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentEmbedded.js +4 -4
- package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +7 -1
- package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentHost.js +79 -1
- package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -1
- package/dist/components/core/solid-agent/SolidAgentHost.tsx +69 -2
- package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -1
- package/dist/components/core/solid-agent/agentEvents.js +1 -3
- package/dist/components/core/solid-agent/agentEvents.js.map +1 -1
- package/dist/components/core/solid-agent/agentEvents.ts +5 -3
- package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts +88 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts.map +1 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.js +26 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.js.map +1 -0
- package/dist/components/core/solid-agent/client/agentPublicEvents.ts +66 -0
- package/dist/components/core/solid-agent/client/agentRuntime.d.ts +18 -3
- package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
- package/dist/components/core/solid-agent/client/agentRuntime.js +173 -31
- package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
- package/dist/components/core/solid-agent/client/agentRuntime.ts +126 -16
- package/dist/components/core/solid-agent/client/agentSocket.d.ts +3 -0
- package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
- package/dist/components/core/solid-agent/client/agentSocket.js +19 -1
- package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
- package/dist/components/core/solid-agent/client/agentSocket.ts +11 -1
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts +9 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts.map +1 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.js +53 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.js.map +1 -0
- package/dist/components/core/solid-agent/client/beforeUserMessageSend.ts +26 -0
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +4 -3
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
- package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +4 -2
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +29 -0
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +45 -2
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +49 -2
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +1 -0
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +2 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -1
- package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +15 -1
- package/dist/components/core/solid-agent/types.d.ts +13 -0
- package/dist/components/core/solid-agent/types.d.ts.map +1 -1
- package/dist/components/core/solid-agent/types.js.map +1 -1
- package/dist/components/core/solid-agent/types.ts +8 -0
- package/dist/components/core/solid-agent/useAgentChat.d.ts +1 -1
- package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -1
- package/dist/components/core/solid-agent/useAgentChat.js +7 -4
- package/dist/components/core/solid-agent/useAgentChat.js.map +1 -1
- package/dist/components/core/solid-agent/useAgentChat.ts +9 -5
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -1
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +12 -4
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
- package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +18 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts +4 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts.map +1 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js +30 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js.map +1 -0
- package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx +41 -0
- package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +39 -0
- package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts +2 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.js +3 -2
- package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +3 -0
- package/dist/helpers/adminViewRefresh.d.ts +13 -0
- package/dist/helpers/adminViewRefresh.d.ts.map +1 -0
- package/dist/helpers/adminViewRefresh.js +14 -0
- package/dist/helpers/adminViewRefresh.js.map +1 -0
- package/dist/helpers/adminViewRefresh.ts +26 -0
- package/dist/helpers/eventBus.d.ts +1 -0
- package/dist/helpers/eventBus.d.ts.map +1 -1
- package/dist/helpers/eventBus.js +1 -0
- package/dist/helpers/eventBus.js.map +1 -1
- package/dist/helpers/eventBus.ts +1 -0
- package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
- package/dist/helpers/fileTypeIcon.js +4 -1
- package/dist/helpers/fileTypeIcon.js.map +1 -1
- package/dist/helpers/fileTypeIcon.tsx +15 -0
- package/dist/helpers/registry.d.ts.map +1 -1
- package/dist/helpers/registry.js +2 -0
- package/dist/helpers/registry.js.map +1 -1
- package/dist/helpers/registry.ts +2 -0
- package/dist/helpers/routePaths.d.ts +13 -0
- package/dist/helpers/routePaths.d.ts.map +1 -1
- package/dist/helpers/routePaths.js +39 -0
- package/dist/helpers/routePaths.js.map +1 -1
- package/dist/helpers/routePaths.ts +48 -0
- package/dist/redux/features/agentSlice.d.ts +2 -1
- package/dist/redux/features/agentSlice.d.ts.map +1 -1
- package/dist/redux/features/agentSlice.js +2 -2
- package/dist/redux/features/agentSlice.js.map +1 -1
- package/dist/redux/features/agentSlice.ts +8 -3
- package/dist/resources/solid-custom.css +42 -0
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/pages/admin/core/AgentHubModuleField.css +15 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts +22 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts.map +1 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.js +42 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.js.map +1 -0
- package/dist/routes/pages/admin/core/AgentHubModuleField.tsx +54 -0
- package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +3 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.js +3 -3
- package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +7 -3
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +37 -29
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +12 -6
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +22 -15
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +17 -7
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +21 -15
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
- package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +16 -9
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +149 -37
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -1
- package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +283 -73
- package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/CardPage.js +9 -1
- package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/CardPage.tsx +9 -1
- package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/KanbanPage.js +9 -1
- package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
- package/dist/routes/pages/admin/core/KanbanPage.tsx +9 -1
- package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.js +10 -1
- package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
- package/dist/routes/pages/admin/core/ListPage.tsx +10 -1
- package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/TreePage.js +9 -1
- package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
- package/dist/routes/pages/admin/core/TreePage.tsx +9 -1
- package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -1
- package/dist/routes/pages/embed/AgentEmbedPage.js +67 -4
- package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -1
- package/dist/routes/pages/embed/AgentEmbedPage.tsx +61 -4
- package/package.json +1 -1
|
@@ -49,7 +49,10 @@ import { eventBus } from "../../../../helpers/eventBus";
|
|
|
49
49
|
import { getAgentChatWidgetCatalog } from "../../../../helpers/registry";
|
|
50
50
|
import { agentConnectionChanged, agentEventReceived, agentHistoryLoaded, agentThreadReset, agentUserMessageAdded, } from "../../../../redux/features/agentSlice";
|
|
51
51
|
import { historyToItems, normalizeAgentFrame } from "../agentEvents";
|
|
52
|
+
import { parseWidgetContent } from "../thread/inlineWidget";
|
|
52
53
|
import { SOLID_AGENT_EVENTS } from "../sdk/solidAgent";
|
|
54
|
+
import { emitBeforeUserMessageSend } from "./beforeUserMessageSend";
|
|
55
|
+
import { emitAgentPublicEvent } from "./agentPublicEvents";
|
|
53
56
|
import { AgentEventTypes } from "../types";
|
|
54
57
|
import { resolveAttachmentMedia } from "./agentAttachmentMedia";
|
|
55
58
|
import { clearAllAgentAuth } from "./agentAuth";
|
|
@@ -144,6 +147,24 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
144
147
|
writable: true,
|
|
145
148
|
value: void 0
|
|
146
149
|
});
|
|
150
|
+
Object.defineProperty(this, "responseStarted", {
|
|
151
|
+
enumerable: true,
|
|
152
|
+
configurable: true,
|
|
153
|
+
writable: true,
|
|
154
|
+
value: false
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(this, "hadPriorSession", {
|
|
157
|
+
enumerable: true,
|
|
158
|
+
configurable: true,
|
|
159
|
+
writable: true,
|
|
160
|
+
value: false
|
|
161
|
+
});
|
|
162
|
+
Object.defineProperty(this, "preparationControllers", {
|
|
163
|
+
enumerable: true,
|
|
164
|
+
configurable: true,
|
|
165
|
+
writable: true,
|
|
166
|
+
value: new Set()
|
|
167
|
+
});
|
|
147
168
|
Object.defineProperty(this, "historySessionId", {
|
|
148
169
|
enumerable: true,
|
|
149
170
|
configurable: true,
|
|
@@ -176,7 +197,12 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
176
197
|
});
|
|
177
198
|
this.sessionKey = sessionKey(agentRuntime, agentUrl);
|
|
178
199
|
this.socket = new AgentSocket(agentUrl, persistSession ? readSessionId(this.sessionKey) : null, agentRuntime === "agentHub", agentRuntime === "agentHub" ? getAgentChatWidgetCatalog() : []);
|
|
179
|
-
this.
|
|
200
|
+
this.hadPriorSession = !!this.socket.currentSessionId;
|
|
201
|
+
this.unsubscribers.push(this.socket.onEvent(function (frame) { return _this.handleFrame(frame); }), this.socket.onStatus(function (status) { return _this.dispatch(agentConnectionChanged(status)); }), this.socket.onStatus(function (status) { return _this.publish("onConnectionStateChanged", { state: status }); }), this.socket.onSent(function (action) {
|
|
202
|
+
var _a;
|
|
203
|
+
if (action.action === "message")
|
|
204
|
+
_this.publish("onAfterUserMessageSend", { sessionId: action.session_id, source: (_a = action.source) !== null && _a !== void 0 ? _a : "composer", deliveryStage: "sent" });
|
|
205
|
+
}));
|
|
180
206
|
this.socket.connect();
|
|
181
207
|
}
|
|
182
208
|
/**
|
|
@@ -186,35 +212,96 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
186
212
|
enumerable: false,
|
|
187
213
|
configurable: true,
|
|
188
214
|
writable: true,
|
|
189
|
-
value: function (text, context, attachments, inputs) {
|
|
190
|
-
var _a;
|
|
215
|
+
value: function (text, context, attachments, inputs, beforeSend, source, widgetReply) {
|
|
216
|
+
var _a, _b, _c;
|
|
191
217
|
if (attachments === void 0) { attachments = []; }
|
|
218
|
+
if (source === void 0) { source = "composer"; }
|
|
192
219
|
return __awaiter(this, void 0, void 0, function () {
|
|
193
|
-
var content, uploaded,
|
|
194
|
-
return __generator(this, function (
|
|
195
|
-
switch (
|
|
220
|
+
var content, controller, messageContext, contributedInputContext, request, contributions, _d, _e, _f, _i, contributions_1, contribution, incoming, error_1, uploaded, _g, displayAttachments;
|
|
221
|
+
return __generator(this, function (_h) {
|
|
222
|
+
switch (_h.label) {
|
|
196
223
|
case 0:
|
|
197
|
-
content = text
|
|
198
|
-
if (!content && !attachments.length)
|
|
224
|
+
content = text;
|
|
225
|
+
if (!content.trim() && !attachments.length)
|
|
199
226
|
return [2 /*return*/];
|
|
200
|
-
|
|
201
|
-
|
|
227
|
+
controller = new AbortController();
|
|
228
|
+
this.preparationControllers.add(controller);
|
|
229
|
+
_h.label = 1;
|
|
202
230
|
case 1:
|
|
203
|
-
|
|
204
|
-
|
|
231
|
+
_h.trys.push([1, 7, 8, 9]);
|
|
232
|
+
request = {
|
|
233
|
+
text: content,
|
|
234
|
+
source: source,
|
|
235
|
+
attachments: attachments.map(function (_a) {
|
|
236
|
+
var meta = _a.meta;
|
|
237
|
+
return ({ name: meta.name, mimeType: meta.mimeType, size: meta.size });
|
|
238
|
+
}),
|
|
239
|
+
};
|
|
240
|
+
if (!(this.agentRuntime === "solidx")) return [3 /*break*/, 3];
|
|
241
|
+
return [4 /*yield*/, emitBeforeUserMessageSend(request, controller.signal)];
|
|
205
242
|
case 2:
|
|
206
|
-
|
|
207
|
-
|
|
243
|
+
_d = _h.sent();
|
|
244
|
+
return [3 /*break*/, 4];
|
|
208
245
|
case 3:
|
|
209
|
-
|
|
246
|
+
_d = [];
|
|
247
|
+
_h.label = 4;
|
|
248
|
+
case 4:
|
|
249
|
+
contributions = _d;
|
|
250
|
+
if (!beforeSend) return [3 /*break*/, 6];
|
|
251
|
+
_f = (_e = contributions).push;
|
|
252
|
+
return [4 /*yield*/, beforeSend(request, controller.signal)];
|
|
253
|
+
case 5:
|
|
254
|
+
_f.apply(_e, [_h.sent()]);
|
|
255
|
+
_h.label = 6;
|
|
256
|
+
case 6:
|
|
257
|
+
for (_i = 0, contributions_1 = contributions; _i < contributions_1.length; _i++) {
|
|
258
|
+
contribution = contributions_1[_i];
|
|
259
|
+
if (contribution && typeof contribution === "object" && "schemaVersion" in contribution
|
|
260
|
+
&& contribution.schemaVersion === 1 && "namespaces" in contribution) {
|
|
261
|
+
incoming = contribution;
|
|
262
|
+
messageContext = {
|
|
263
|
+
schemaVersion: 1,
|
|
264
|
+
namespaces: __assign(__assign({}, ((_a = messageContext === null || messageContext === void 0 ? void 0 : messageContext.namespaces) !== null && _a !== void 0 ? _a : {})), incoming.namespaces),
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
else if (contribution && typeof contribution === "object") {
|
|
268
|
+
contributedInputContext = __assign(__assign({}, (contributedInputContext !== null && contributedInputContext !== void 0 ? contributedInputContext : {})), contribution);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return [3 /*break*/, 9];
|
|
272
|
+
case 7:
|
|
273
|
+
error_1 = _h.sent();
|
|
274
|
+
this.publish("onUserMessageFailed", { stage: "context", code: "context_preparation_failed", retryable: true });
|
|
275
|
+
throw error_1;
|
|
276
|
+
case 8:
|
|
277
|
+
this.preparationControllers.delete(controller);
|
|
278
|
+
return [7 /*endfinally*/];
|
|
279
|
+
case 9:
|
|
280
|
+
if (controller.signal.aborted)
|
|
281
|
+
throw new Error("Message preparation was cancelled.");
|
|
282
|
+
if (!attachments.length) return [3 /*break*/, 11];
|
|
283
|
+
return [4 /*yield*/, uploadAgentAttachments(this.agentUrl, attachments.map(function (item) { return item.file; }))];
|
|
284
|
+
case 10:
|
|
285
|
+
_g = _h.sent();
|
|
286
|
+
return [3 /*break*/, 12];
|
|
287
|
+
case 11:
|
|
288
|
+
_g = [];
|
|
289
|
+
_h.label = 12;
|
|
290
|
+
case 12:
|
|
291
|
+
uploaded = _g;
|
|
210
292
|
if (uploaded.length !== attachments.length) {
|
|
293
|
+
this.publish("onUserMessageFailed", { stage: "upload", code: "attachment_upload_failed", retryable: true });
|
|
211
294
|
throw new Error("SolidX did not confirm every uploaded file. Please retry.");
|
|
212
295
|
}
|
|
296
|
+
this.publish("onUserMessageQueued", { source: source, hasAttachments: attachments.length > 0,
|
|
297
|
+
contextNamespaces: messageContext ? Object.keys(messageContext.namespaces) : [] });
|
|
298
|
+
this.responseStarted = false;
|
|
213
299
|
if (context)
|
|
214
300
|
this.lastContext = context;
|
|
215
301
|
displayAttachments = attachments.map(function (item, index) { return (__assign(__assign({}, item.meta), (uploaded[index] ? { mediaId: uploaded[index].id } : {}))); });
|
|
216
|
-
this.dispatch(agentUserMessageAdded({ text: content, attachments: displayAttachments }));
|
|
217
|
-
this.socket.send(__assign(__assign({ action: "message", session_id: (
|
|
302
|
+
this.dispatch(agentUserMessageAdded({ text: content, attachments: displayAttachments, messageContext: messageContext }));
|
|
303
|
+
this.socket.send(__assign(__assign(__assign(__assign({ action: "message", session_id: (_b = this.socket.currentSessionId) !== null && _b !== void 0 ? _b : "", content: content, source: source, context: contributedInputContext
|
|
304
|
+
? __assign(__assign({}, ((_c = context !== null && context !== void 0 ? context : this.lastContext) !== null && _c !== void 0 ? _c : {})), contributedInputContext) : context !== null && context !== void 0 ? context : this.lastContext }, (messageContext ? { message_context: messageContext } : {})), (this.agentRuntime === "agentHub" && inputs ? { inputs: inputs } : {})), (attachments.length ? { attachments: uploaded } : {})), (widgetReply ? { widget_reply: widgetReply } : {})));
|
|
218
305
|
return [2 /*return*/];
|
|
219
306
|
}
|
|
220
307
|
});
|
|
@@ -226,18 +313,23 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
226
313
|
enumerable: false,
|
|
227
314
|
configurable: true,
|
|
228
315
|
writable: true,
|
|
229
|
-
value: function (widgetId, widget, value) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
316
|
+
value: function (widgetId, widget, value, beforeSend) {
|
|
317
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
318
|
+
var text;
|
|
319
|
+
return __generator(this, function (_a) {
|
|
320
|
+
switch (_a.label) {
|
|
321
|
+
case 0:
|
|
322
|
+
text = typeof value === "string" ? value : Array.isArray(value) ? value.join(", ") : JSON.stringify(value);
|
|
323
|
+
return [4 /*yield*/, this.sendMessage(text, this.lastContext, [], undefined, beforeSend, "widget", { widgetId: widgetId, value: value })];
|
|
324
|
+
case 1:
|
|
325
|
+
_a.sent();
|
|
326
|
+
// The text message uses the shared preparation path. Keep the structured widget
|
|
327
|
+
// value as a separate event for consumers that handle widget replies.
|
|
328
|
+
eventBus.emit(SOLID_AGENT_EVENTS.widgetAction, { widgetId: widgetId, widget: widget, value: value, agentType: this.agentRuntime });
|
|
329
|
+
return [2 /*return*/];
|
|
330
|
+
}
|
|
331
|
+
});
|
|
239
332
|
});
|
|
240
|
-
eventBus.emit(SOLID_AGENT_EVENTS.widgetAction, { widgetId: widgetId, widget: widget, value: value, agentType: this.agentRuntime });
|
|
241
333
|
}
|
|
242
334
|
});
|
|
243
335
|
Object.defineProperty(AgentRuntime.prototype, "cancel", {
|
|
@@ -246,8 +338,10 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
246
338
|
writable: true,
|
|
247
339
|
value: function () {
|
|
248
340
|
var sessionId = this.socket.currentSessionId;
|
|
249
|
-
if (sessionId)
|
|
341
|
+
if (sessionId) {
|
|
342
|
+
this.publish("onCancelRequested", { sessionId: sessionId });
|
|
250
343
|
this.socket.send({ action: "cancel", session_id: sessionId });
|
|
344
|
+
}
|
|
251
345
|
}
|
|
252
346
|
});
|
|
253
347
|
Object.defineProperty(AgentRuntime.prototype, "newChat", {
|
|
@@ -255,6 +349,8 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
255
349
|
configurable: true,
|
|
256
350
|
writable: true,
|
|
257
351
|
value: function () {
|
|
352
|
+
this.publish("onNewChatRequested", { sessionId: this.socket.currentSessionId });
|
|
353
|
+
this.hadPriorSession = false;
|
|
258
354
|
this.resetHistoryLoads();
|
|
259
355
|
if (this.persistSession)
|
|
260
356
|
writeSessionId(this.sessionKey, null);
|
|
@@ -268,6 +364,7 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
268
364
|
configurable: true,
|
|
269
365
|
writable: true,
|
|
270
366
|
value: function (sessionId) {
|
|
367
|
+
this.hadPriorSession = true;
|
|
271
368
|
this.resetHistoryLoads();
|
|
272
369
|
if (this.persistSession)
|
|
273
370
|
writeSessionId(this.sessionKey, sessionId);
|
|
@@ -313,6 +410,8 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
313
410
|
configurable: true,
|
|
314
411
|
writable: true,
|
|
315
412
|
value: function () {
|
|
413
|
+
this.preparationControllers.forEach(function (controller) { return controller.abort(); });
|
|
414
|
+
this.preparationControllers.clear();
|
|
316
415
|
this.resetHistoryLoads();
|
|
317
416
|
this.unsubscribers.forEach(function (off) { return off(); });
|
|
318
417
|
if (this.frame != null)
|
|
@@ -379,11 +478,46 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
379
478
|
writable: true,
|
|
380
479
|
value: function (frame) {
|
|
381
480
|
var _this = this;
|
|
382
|
-
var _a;
|
|
481
|
+
var _a, _b, _c, _d, _e;
|
|
383
482
|
var event = normalizeAgentFrame(frame);
|
|
483
|
+
if (event.eventType === AgentEventTypes.sessionStarted) {
|
|
484
|
+
var sessionId = (_b = (_a = frame.session_id) !== null && _a !== void 0 ? _a : event.eventData.session_id) !== null && _b !== void 0 ? _b : null;
|
|
485
|
+
this.publish(this.hadPriorSession ? "onSessionResumed" : "onSessionStarted", { sessionId: sessionId });
|
|
486
|
+
this.hadPriorSession = true;
|
|
487
|
+
}
|
|
488
|
+
else if (event.eventType === AgentEventTypes.sessionEnded)
|
|
489
|
+
this.publish("onSessionEnded", { sessionId: this.socket.currentSessionId, reason: (_c = event.eventData.reason) !== null && _c !== void 0 ? _c : "ended" });
|
|
490
|
+
else if (event.eventType === AgentEventTypes.agentStarted)
|
|
491
|
+
this.publish("onAgentTurnStarted", { sessionId: this.socket.currentSessionId });
|
|
492
|
+
else if ((event.eventType === AgentEventTypes.llmToken || event.eventType === AgentEventTypes.llmComplete)
|
|
493
|
+
&& !event.eventData.widget && !this.responseStarted) {
|
|
494
|
+
this.responseStarted = true;
|
|
495
|
+
this.publish("onAgentResponseStarted", { sessionId: this.socket.currentSessionId });
|
|
496
|
+
}
|
|
497
|
+
else if (event.eventType === AgentEventTypes.turnComplete || event.eventType === AgentEventTypes.turnCompleteLegacy) {
|
|
498
|
+
this.publish("onAgentResponseCompleted", { sessionId: this.socket.currentSessionId });
|
|
499
|
+
var completedContent = (_d = event.eventData.content) !== null && _d !== void 0 ? _d : event.frame.content;
|
|
500
|
+
var inline = parseWidgetContent(completedContent);
|
|
501
|
+
if ((inline === null || inline === void 0 ? void 0 : inline.widget) === "navigation-intent" && inline.data.schemaVersion === 1
|
|
502
|
+
&& inline.data.kind === "navigation" && typeof inline.data.domain === "string"
|
|
503
|
+
&& inline.data.payload && typeof inline.data.payload === "object" && !Array.isArray(inline.data.payload)) {
|
|
504
|
+
this.publish("onAgentNavigationRequested", __assign(__assign({ schemaVersion: 1, kind: "navigation", domain: inline.data.domain, payload: inline.data.payload }, (typeof inline.data.message === "string" ? { message: inline.data.message } : {})), { sessionId: this.socket.currentSessionId }));
|
|
505
|
+
}
|
|
506
|
+
this.publish("onAgentTurnCompleted", { sessionId: this.socket.currentSessionId, outcome: "completed" });
|
|
507
|
+
}
|
|
508
|
+
else if (event.eventType === AgentEventTypes.agentError || event.eventType === AgentEventTypes.error) {
|
|
509
|
+
this.publish("onError", { stage: "runtime", code: "agent_error", retryable: false });
|
|
510
|
+
}
|
|
511
|
+
else if (event.eventType === "HumanRequestCreated") {
|
|
512
|
+
var approval = event.eventData.kind === "approval";
|
|
513
|
+
this.publish(approval ? "onApprovalRequested" : "onHumanInputRequested", __assign({ sessionId: this.socket.currentSessionId, requestId: event.eventData.request_id }, (typeof event.eventData.question === "string" ? { displayPayload: event.eventData.question.slice(0, 1024) } : {})));
|
|
514
|
+
}
|
|
515
|
+
else if (event.eventType === AgentEventTypes.executionCancelled || event.eventType === AgentEventTypes.executionCancelledLegacy) {
|
|
516
|
+
this.publish("onTurnCancelled", { sessionId: this.socket.currentSessionId });
|
|
517
|
+
}
|
|
384
518
|
// Stream text is batched per animation frame unless it carries a widget of its own.
|
|
385
519
|
if (event.eventType === AgentEventTypes.llmToken && !event.eventData.widget) {
|
|
386
|
-
this.pendingDelta += (
|
|
520
|
+
this.pendingDelta += (_e = event.eventData.delta) !== null && _e !== void 0 ? _e : "";
|
|
387
521
|
if (this.frame == null)
|
|
388
522
|
this.frame = requestAnimationFrame(function () { return _this.flushTokens(); });
|
|
389
523
|
return;
|
|
@@ -394,6 +528,14 @@ var AgentRuntime = /** @class */ (function () {
|
|
|
394
528
|
this.emitSdkEvents(event);
|
|
395
529
|
}
|
|
396
530
|
});
|
|
531
|
+
Object.defineProperty(AgentRuntime.prototype, "publish", {
|
|
532
|
+
enumerable: false,
|
|
533
|
+
configurable: true,
|
|
534
|
+
writable: true,
|
|
535
|
+
value: function (event, payload) {
|
|
536
|
+
emitAgentPublicEvent(event, payload, this.agentRuntime);
|
|
537
|
+
}
|
|
538
|
+
});
|
|
397
539
|
Object.defineProperty(AgentRuntime.prototype, "emitSdkEvents", {
|
|
398
540
|
enumerable: false,
|
|
399
541
|
configurable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentRuntime.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentRuntime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACH,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,GAExB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAA4G,MAAM,UAAU,CAAC;AACrJ,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC,2GAA2G;AAC3G,SAAS,UAAU,CAAC,YAA8B,EAAE,QAAgB;IAChE,IAAI,YAAY,KAAK,QAAQ;QAAE,OAAO,wBAAwB,CAAC;IAC/D,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAe,YAAY,gBAAa,CAAC,CAAC,CAAC,sBAAe,YAAY,cAAI,OAAO,gBAAa,CAAC;AAClI,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAC9B,IAAI;QACA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACpC;IAAC,WAAM;QACJ,OAAO,IAAI,CAAC;KACf;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,EAAiB;IAClD,IAAI;QACA,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACrE;IAAC,WAAM;QACJ,2EAA2E;KAC9E;AACL,CAAC;AAED;IAaI,sBACa,QAAgB,EACjB,QAAkB,EAClB,QAAuB,EACtB,YAAyC,EAC1C,cAAqB;QALjC,iBAeC;QAXY,6BAAA,EAAA,uBAAyC;QAC1C,+BAAA,EAAA,qBAAqB;QAJ7B;;;;mBAAS,QAAQ;WAAQ;QACzB;;;;mBAAQ,QAAQ;WAAU;QAC1B;;;;mBAAQ,QAAQ;WAAe;QAC/B;;;;mBAAS,YAAY;WAA6B;QAClD;;;;mBAAQ,cAAc;WAAO;QAjBxB;;;;;WAAoB;QACrB;;;;mBAAe,EAAE;WAAC;QAClB;;;;mBAAuB,IAAI;WAAC;QAC5B;;;;mBAAmC,EAAE;WAAC;QACtC;;;;;WAAsC;QACtC;;;;mBAAkC,IAAI;WAAC;QACvC;;;;mBAAoB,CAAC;WAAC;QACtB;;;;mBAAsB,IAAI,GAAG,EAAkB;WAAC;QAChD;;;;mBAAqB,IAAI,GAAG,EAAU;WAAC;QAE9B;;;;;WAAmB;QAShC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,KAAK,UAAU,EACvH,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,IAAI,CACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAvB,CAAuB,CAAC,EACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAC,MAAM,IAAK,OAAA,KAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,EAA7C,CAA6C,CAAC,CAClF,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;;;;;eACH,UAAkB,IAAY,EAAE,OAAsB,EAAE,WAAmC,EAAE,MAAgC;;YAArE,4BAAA,EAAA,gBAAmC;;;;;;4BACjF,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;4BAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM;gCAAE,sBAAO;iCAC3B,WAAW,CAAC,MAAM,EAAlB,wBAAkB;4BAC7B,qBAAM,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,IAAI,EAAT,CAAS,CAAC,CAAC,EAAA;;4BAAjF,KAAA,SAAiF,CAAA;;;4BACjF,KAAA,EAAE,CAAA;;;4BAFF,QAAQ,KAEN;4BACR,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;gCACxC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;6BAChF;4BACD,IAAI,OAAO;gCAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;4BAClC,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,uBACrD,IAAI,CAAC,IAAI,GACT,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC7D,EAH0D,CAG1D,CAAC,CAAC;4BACJ,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;4BACzF,IAAI,CAAC,MAAM,CAAC,IAAI,qBACZ,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,mCAAI,EAAE,EAC9C,OAAO,SAAA,EACP,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC,WAAW,IACjC,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC9D,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1D,CAAC;;;;;SACN;;IAED,sGAAsG;;;;;eACtG,UAAc,QAAgB,EAAE,MAAc,EAAE,KAAc;;YAC1D,IAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACjH,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACb,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,mCAAI,EAAE;gBAC9C,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,YAAY,EAAE,EAAE,QAAQ,UAAA,EAAE,KAAK,OAAA,EAAE;aACpC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,QAAQ,UAAA,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9G,CAAC;;;;;;eAED;YACI,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC/C,IAAI,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,CAAC;;;;;;eAED;YACI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,cAAc;gBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC/D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7B,CAAC;;;;;;eAED,UAAO,SAAiB;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,cAAc;gBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;;;;;;eAED;;;;;;4BACU,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;4BAC9B,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,CAAA,IAAI,CAAC,KAAK,CAAC,cAAc;gCAAE,sBAAO;4BAC9D,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,EAAA;;4BAArE,SAAqE,CAAC;;;;;SACzE;;;;;;eAED;YACI,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;;;;;;eAED;YACI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,EAAE,EAAL,CAAK,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;gBAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;;;;;;eAED,UAA0B,gBAAwB,EAAE,IAAY;;;;;;;4BACtD,GAAG,GAAG,UAAG,gBAAgB,cAAI,IAAI,CAAE,CAAC;4BAC1C,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;gCAAE,sBAAO;4BAC5E,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;4BAC1C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;;;;4BAE3B,qBAAM,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAA;;4BAAzE,MAAM,GAAG,SAAgE;4BAC/E,IAAI,CAAC,MAAM;gCAAE,sBAAO;4BAEd,QAAQ,GAAG,cAAc,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC;iCACzC,IAAI,CAAC,cAAc,EAAnB,wBAAmB;4BAAG,qBAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAA;;4BAAtC,KAAA,SAAsC,CAAA;;;4BAAG,KAAA,QAAQ,CAAA;;;4BAA/E,KAAK,KAA0E;4BACrF,IAAI,UAAU,KAAK,IAAI,CAAC,iBAAiB,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,EAAE,0CAAE,gBAAgB,MAAK,gBAAgB;gCAAE,sBAAO;4BAC5G,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,KAAK,OAAA,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC,CAAC;4BAC/E,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;;;;;4BAIjC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU;gCAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;;;SAElG;;;;;;eAED,UAAoB,KAAqB;YAAzC,iBAaC;;YAZG,IAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAEzC,oFAAoF;YACpF,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE;gBACzE,IAAI,CAAC,YAAY,IAAI,MAAA,KAAK,CAAC,SAAS,CAAC,KAAK,mCAAI,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;oBAAE,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,cAAM,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;gBACrF,OAAO;aACV;YACD,6DAA6D;YAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;;;;;;eAED,UAAsB,KAAqB;;YACvC,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,cAAc,EAAE;gBACpD,IAAM,SAAS,GAAG,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,UAAU,mCAAI,KAAK,CAAC,SAAS,CAAC,UAAU,mCAAI,IAAI,CAAC;gBAC/E,IAAI,IAAI,CAAC,cAAc;oBAAE,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBACpE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,SAAS,WAAA,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAC9F,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAM,SAAS,GAAG,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,kBAAkB,mCAAI,KAAK,CAAC,SAAS,CAAC,kBAAkB,mCAAI,SAAS,CAAC;gBACpG,IAAI,SAAS,KAAK,IAAI,CAAC,gBAAgB,EAAE;oBACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;iBACrC;gBACD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS;oBAAE,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;aAC3F;iBAAM,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,YAAY,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,kBAAkB,EAAE;gBACnH,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;oBAC3C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;oBACvC,SAAS,EAAE,IAAI,CAAC,YAAY;oBAC5B,OAAO,EAAE,MAAA,KAAK,CAAC,SAAS,CAAC,OAAO,mCAAI,KAAK,CAAC,KAAK,CAAC,OAAO;iBAC1D,CAAC,CAAC;aACN;QACL,CAAC;;;;;;eAED;YACI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;gBACpB,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YACD,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,OAAA,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5H,CAAC;;IACL,mBAAC;AAAD,CAAC,AAnLD,IAmLC;;AAED,IAAI,OAAO,GAAwB,IAAI,CAAC;AAExC,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,QAAkB,EAAE,QAAuB;IAC5F,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC7D,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;IACnB,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IAC/B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;IACnB,OAAO,GAAG,IAAI,CAAC;IACf,iBAAiB,EAAE,CAAC;AACxB,CAAC","sourcesContent":["import { eventBus } from \"../../../../helpers/eventBus\";\nimport { getAgentChatWidgetCatalog } from \"../../../../helpers/registry\";\nimport {\n agentConnectionChanged,\n agentEventReceived,\n agentHistoryLoaded,\n agentThreadReset,\n agentUserMessageAdded,\n type AgentState,\n} from \"../../../../redux/features/agentSlice\";\nimport { historyToItems, normalizeAgentFrame } from \"../agentEvents\";\nimport { SOLID_AGENT_EVENTS } from \"../sdk/solidAgent\";\nimport { AgentEventTypes, type AgentRuntimeType, type AgentAttachment, type AgentChatEvent, type AgentContext, type AgentWireFrame } from \"../types\";\nimport { resolveAttachmentMedia } from \"./agentAttachmentMedia\";\nimport { clearAllAgentAuth } from \"./agentAuth\";\nimport { fetchSessionHistory, uploadAgentAttachments } from \"./agentRest\";\nimport { AgentSocket } from \"./agentSocket\";\nimport { agentIdOf } from \"./agentUrls\";\n\n/**\n * A live connection to one agent backend. The \"solidx\" runtime is shared by the floating window and\n * any embedded chat of that type (ensureAgentRuntime); other types get their own runtime per\n * embedded chat (see useAgentChat). Owns the AgentSocket, normalises frames to `{ eventType, eventData }`, batches LlmToken\n * deltas to one dispatch per animation frame, loads history on session start, and emits the\n * public SDK events on the event bus.\n */\n\ntype Dispatch = (action: any) => any;\ntype GetAgentState = () => AgentState | undefined;\n\n/** Keep the original SolidX storage key; Agent Hub keeps one per agent (its agent URL names the agent). */\nfunction sessionKey(agentRuntime: AgentRuntimeType, agentUrl: string) {\n if (agentRuntime === \"solidx\") return \"solid-agent.session_id\";\n const agentId = agentIdOf(agentUrl);\n return agentId === undefined ? `solid-agent.${agentRuntime}.session_id` : `solid-agent.${agentRuntime}.${agentId}.session_id`;\n}\n\nfunction readSessionId(key: string): string | null {\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeSessionId(key: string, id: string | null) {\n try {\n id ? localStorage.setItem(key, id) : localStorage.removeItem(key);\n } catch {\n // Storage blocked (private mode); the session just won't survive a reload.\n }\n}\n\nexport class AgentRuntime {\n readonly socket: AgentSocket;\n private pendingDelta = \"\";\n private frame: number | null = null;\n private unsubscribers: Array<() => void> = [];\n private lastContext: AgentContext | undefined;\n private historySessionId: string | null = null;\n private historyGeneration = 0;\n private loadingHistoryPages = new Map<string, number>();\n private loadedHistoryPages = new Set<string>();\n\n private readonly sessionKey: string;\n\n constructor(\n readonly agentUrl: string,\n private dispatch: Dispatch,\n private getState: GetAgentState,\n readonly agentRuntime: AgentRuntimeType = \"solidx\",\n private persistSession = true,\n ) {\n this.sessionKey = sessionKey(agentRuntime, agentUrl);\n this.socket = new AgentSocket(agentUrl, persistSession ? readSessionId(this.sessionKey) : null, agentRuntime === \"agentHub\",\n agentRuntime === \"agentHub\" ? getAgentChatWidgetCatalog() : []);\n this.unsubscribers.push(\n this.socket.onEvent((frame) => this.handleFrame(frame)),\n this.socket.onStatus((status) => this.dispatch(agentConnectionChanged(status))),\n );\n this.socket.connect();\n }\n\n /**\n * Uploads files into SolidX media storage first, then sends their IDs with the socket message.\n */\n async sendMessage(text: string, context?: AgentContext, attachments: AgentAttachment[] = [], inputs?: Record<string, unknown>) {\n const content = text.trim();\n if (!content && !attachments.length) return;\n const uploaded = attachments.length\n ? await uploadAgentAttachments(this.agentUrl, attachments.map((item) => item.file))\n : [];\n if (uploaded.length !== attachments.length) {\n throw new Error(\"SolidX did not confirm every uploaded file. Please retry.\");\n }\n if (context) this.lastContext = context;\n const displayAttachments = attachments.map((item, index) => ({\n ...item.meta,\n ...(uploaded[index] ? { mediaId: uploaded[index].id } : {}),\n }));\n this.dispatch(agentUserMessageAdded({ text: content, attachments: displayAttachments }));\n this.socket.send({\n action: \"message\",\n session_id: this.socket.currentSessionId ?? \"\",\n content,\n context: context ?? this.lastContext,\n ...(this.agentRuntime === \"agentHub\" && inputs ? { inputs } : {}),\n ...(attachments.length ? { attachments: uploaded } : {}),\n });\n }\n\n /** Answers a widget. Sent as text too, so agents without widget_reply support still understand it. */\n replyToWidget(widgetId: string, widget: string, value: unknown) {\n const text = typeof value === \"string\" ? value : Array.isArray(value) ? value.join(\", \") : JSON.stringify(value);\n this.dispatch(agentUserMessageAdded({ text }));\n this.socket.send({\n action: \"message\",\n session_id: this.socket.currentSessionId ?? \"\",\n content: text,\n context: this.lastContext,\n widget_reply: { widgetId, value },\n });\n eventBus.emit(SOLID_AGENT_EVENTS.widgetAction, { widgetId, widget, value, agentType: this.agentRuntime });\n }\n\n cancel() {\n const sessionId = this.socket.currentSessionId;\n if (sessionId) this.socket.send({ action: \"cancel\", session_id: sessionId });\n }\n\n newChat() {\n this.resetHistoryLoads();\n if (this.persistSession) writeSessionId(this.sessionKey, null);\n this.lastContext = undefined;\n this.dispatch(agentThreadReset());\n this.socket.newSession();\n }\n\n resume(sessionId: string) {\n this.resetHistoryLoads();\n if (this.persistSession) writeSessionId(this.sessionKey, sessionId);\n this.dispatch(agentThreadReset());\n this.socket.resume(sessionId);\n }\n\n async loadOlder() {\n const state = this.getState();\n if (!state?.historySessionId || !state.hasMoreHistory) return;\n await this.loadHistory(state.historySessionId, state.historyPage + 1);\n }\n\n private resetHistoryLoads() {\n this.historyGeneration += 1;\n this.historySessionId = null;\n this.loadingHistoryPages.clear();\n this.loadedHistoryPages.clear();\n }\n\n dispose() {\n this.resetHistoryLoads();\n this.unsubscribers.forEach((off) => off());\n if (this.frame != null) cancelAnimationFrame(this.frame);\n this.socket.close();\n }\n\n private async loadHistory(historySessionId: string, page: number) {\n const key = `${historySessionId}:${page}`;\n if (this.loadingHistoryPages.has(key) || this.loadedHistoryPages.has(key)) return;\n const generation = this.historyGeneration;\n this.loadingHistoryPages.set(key, generation);\n try {\n const result = await fetchSessionHistory(this.agentUrl, historySessionId, page);\n if (!result) return;\n // Attached files are stored in Solid media storage; resolve their URLs before showing.\n const rawItems = historyToItems(result.messages ?? []);\n const items = this.persistSession ? await resolveAttachmentMedia(rawItems) : rawItems;\n if (generation !== this.historyGeneration || this.getState()?.historySessionId !== historySessionId) return;\n this.dispatch(agentHistoryLoaded({ items, hasMore: !!result.has_more, page }));\n this.loadedHistoryPages.add(key);\n } catch {\n // History is a convenience; the live session still works without it.\n } finally {\n if (this.loadingHistoryPages.get(key) === generation) this.loadingHistoryPages.delete(key);\n }\n }\n\n private handleFrame(frame: AgentWireFrame) {\n const event = normalizeAgentFrame(frame);\n\n // Stream text is batched per animation frame unless it carries a widget of its own.\n if (event.eventType === AgentEventTypes.llmToken && !event.eventData.widget) {\n this.pendingDelta += event.eventData.delta ?? \"\";\n if (this.frame == null) this.frame = requestAnimationFrame(() => this.flushTokens());\n return;\n }\n // Keep order: any buffered text lands before the next event.\n this.flushTokens();\n this.dispatch(agentEventReceived(event));\n this.emitSdkEvents(event);\n }\n\n private emitSdkEvents(event: AgentChatEvent) {\n if (event.eventType === AgentEventTypes.sessionStarted) {\n const sessionId = event.frame.session_id ?? event.eventData.session_id ?? null;\n if (this.persistSession) writeSessionId(this.sessionKey, sessionId);\n eventBus.emit(SOLID_AGENT_EVENTS.sessionChanged, { sessionId, agentType: this.agentRuntime });\n const state = this.getState();\n const historyId = event.frame.history_session_id ?? event.eventData.history_session_id ?? sessionId;\n if (historyId !== this.historySessionId) {\n this.resetHistoryLoads();\n this.historySessionId = historyId;\n }\n if (state && state.items.length === 0 && historyId) void this.loadHistory(historyId, 1);\n } else if (event.eventType === AgentEventTypes.turnComplete || event.eventType === AgentEventTypes.turnCompleteLegacy) {\n eventBus.emit(SOLID_AGENT_EVENTS.turnComplete, {\n sessionId: this.socket.currentSessionId,\n agentType: this.agentRuntime,\n content: event.eventData.content ?? event.frame.content,\n });\n }\n }\n\n private flushTokens() {\n if (this.frame != null) {\n cancelAnimationFrame(this.frame);\n this.frame = null;\n }\n if (!this.pendingDelta) return;\n const delta = this.pendingDelta;\n this.pendingDelta = \"\";\n this.dispatch(agentEventReceived(normalizeAgentFrame({ event_type: AgentEventTypes.llmToken, event_data: { delta } })));\n }\n}\n\nlet runtime: AgentRuntime | null = null;\n\n/** Returns the shared \"solidx\" runtime, creating (or re-pointing) it for `agentUrl`. */\nexport function ensureAgentRuntime(agentUrl: string, dispatch: Dispatch, getState: GetAgentState): AgentRuntime {\n if (runtime && runtime.agentUrl === agentUrl) return runtime;\n runtime?.dispose();\n runtime = new AgentRuntime(agentUrl, dispatch, getState);\n return runtime;\n}\n\nexport function getAgentRuntime(): AgentRuntime | null {\n return runtime;\n}\n\n/** Closes the connection and forgets this tab's agent logins (e.g. on logout). */\nexport function disposeAgentRuntime() {\n runtime?.dispose();\n runtime = null;\n clearAllAgentAuth();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agentRuntime.js","sourceRoot":"","sources":["../../../../../src/components/core/solid-agent/client/agentRuntime.ts"],"names":[],"mappings":"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","sourcesContent":["import { eventBus } from \"../../../../helpers/eventBus\";\nimport { getAgentChatWidgetCatalog } from \"../../../../helpers/registry\";\nimport {\n agentConnectionChanged,\n agentEventReceived,\n agentHistoryLoaded,\n agentThreadReset,\n agentUserMessageAdded,\n type AgentState,\n} from \"../../../../redux/features/agentSlice\";\nimport { historyToItems, normalizeAgentFrame } from \"../agentEvents\";\nimport { parseWidgetContent } from \"../thread/inlineWidget\";\nimport { SOLID_AGENT_EVENTS } from \"../sdk/solidAgent\";\nimport { emitBeforeUserMessageSend, type BeforeUserMessageSendContribution } from \"./beforeUserMessageSend\";\nimport { emitAgentPublicEvent, type AgentPublicEventName, type AgentPublicEventPayloads } from \"./agentPublicEvents\";\nimport { AgentEventTypes, type AgentRuntimeType, type AgentAttachment, type AgentChatEvent, type AgentContext, type AgentMessageContext, type AgentWireFrame } from \"../types\";\nimport { resolveAttachmentMedia } from \"./agentAttachmentMedia\";\nimport { clearAllAgentAuth } from \"./agentAuth\";\nimport { fetchSessionHistory, uploadAgentAttachments } from \"./agentRest\";\nimport { AgentSocket } from \"./agentSocket\";\nimport { agentIdOf } from \"./agentUrls\";\n\n/**\n * A live connection to one agent backend. The \"solidx\" runtime is shared by the floating window and\n * any embedded chat of that type (ensureAgentRuntime); other types get their own runtime per\n * embedded chat (see useAgentChat). Owns the AgentSocket, normalises frames to `{ eventType, eventData }`, batches LlmToken\n * deltas to one dispatch per animation frame, loads history on session start, and emits the\n * public SDK events on the event bus.\n */\n\ntype Dispatch = (action: any) => any;\ntype GetAgentState = () => AgentState | undefined;\n\n/** Keep the original SolidX storage key; Agent Hub keeps one per agent (its agent URL names the agent). */\nfunction sessionKey(agentRuntime: AgentRuntimeType, agentUrl: string) {\n if (agentRuntime === \"solidx\") return \"solid-agent.session_id\";\n const agentId = agentIdOf(agentUrl);\n return agentId === undefined ? `solid-agent.${agentRuntime}.session_id` : `solid-agent.${agentRuntime}.${agentId}.session_id`;\n}\n\nfunction readSessionId(key: string): string | null {\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeSessionId(key: string, id: string | null) {\n try {\n id ? localStorage.setItem(key, id) : localStorage.removeItem(key);\n } catch {\n // Storage blocked (private mode); the session just won't survive a reload.\n }\n}\n\nexport class AgentRuntime {\n readonly socket: AgentSocket;\n private pendingDelta = \"\";\n private frame: number | null = null;\n private unsubscribers: Array<() => void> = [];\n private lastContext: AgentContext | undefined;\n private responseStarted = false;\n private hadPriorSession = false;\n private preparationControllers = new Set<AbortController>();\n private historySessionId: string | null = null;\n private historyGeneration = 0;\n private loadingHistoryPages = new Map<string, number>();\n private loadedHistoryPages = new Set<string>();\n\n private readonly sessionKey: string;\n\n constructor(\n readonly agentUrl: string,\n private dispatch: Dispatch,\n private getState: GetAgentState,\n readonly agentRuntime: AgentRuntimeType = \"solidx\",\n private persistSession = true,\n ) {\n this.sessionKey = sessionKey(agentRuntime, agentUrl);\n this.socket = new AgentSocket(agentUrl, persistSession ? readSessionId(this.sessionKey) : null, agentRuntime === \"agentHub\",\n agentRuntime === \"agentHub\" ? getAgentChatWidgetCatalog() : []);\n this.hadPriorSession = !!this.socket.currentSessionId;\n this.unsubscribers.push(\n this.socket.onEvent((frame) => this.handleFrame(frame)),\n this.socket.onStatus((status) => this.dispatch(agentConnectionChanged(status))),\n this.socket.onStatus((status) => this.publish(\"onConnectionStateChanged\", { state: status })),\n this.socket.onSent((action) => {\n if (action.action === \"message\") this.publish(\"onAfterUserMessageSend\", { sessionId: action.session_id, source: action.source ?? \"composer\", deliveryStage: \"sent\" });\n }),\n );\n this.socket.connect();\n }\n\n /**\n * Uploads files into SolidX media storage first, then sends their IDs with the socket message.\n */\n async sendMessage(\n text: string,\n context?: AgentContext,\n attachments: AgentAttachment[] = [],\n inputs?: Record<string, unknown>,\n beforeSend?: (request: { text: string; source: \"composer\" | \"sdk\" | \"prefill\" | \"widget\"; attachments: Array<{ name: string; mimeType: string; size: number }> }, signal: AbortSignal) => Promise<AgentMessageContext | AgentContext | undefined>,\n source: \"composer\" | \"sdk\" | \"prefill\" | \"widget\" = \"composer\",\n widgetReply?: { widgetId: string; value: unknown },\n ) {\n const content = text;\n if (!content.trim() && !attachments.length) return;\n const controller = new AbortController();\n this.preparationControllers.add(controller);\n let messageContext: AgentMessageContext | undefined;\n let contributedInputContext: AgentContext | undefined;\n try {\n const request = {\n text: content,\n source,\n attachments: attachments.map(({ meta }) => ({ name: meta.name, mimeType: meta.mimeType, size: meta.size })),\n };\n const contributions: BeforeUserMessageSendContribution[] = this.agentRuntime === \"solidx\"\n ? await emitBeforeUserMessageSend(request, controller.signal)\n : [];\n if (beforeSend) contributions.push(await beforeSend(request, controller.signal));\n for (const contribution of contributions) {\n if (contribution && typeof contribution === \"object\" && \"schemaVersion\" in contribution\n && contribution.schemaVersion === 1 && \"namespaces\" in contribution) {\n const incoming = contribution as AgentMessageContext;\n messageContext = {\n schemaVersion: 1,\n namespaces: { ...(messageContext?.namespaces ?? {}), ...incoming.namespaces },\n };\n } else if (contribution && typeof contribution === \"object\") {\n contributedInputContext = { ...(contributedInputContext ?? {}), ...contribution };\n }\n }\n } catch (error) {\n this.publish(\"onUserMessageFailed\", { stage: \"context\", code: \"context_preparation_failed\", retryable: true });\n throw error;\n } finally {\n this.preparationControllers.delete(controller);\n }\n if (controller.signal.aborted) throw new Error(\"Message preparation was cancelled.\");\n const uploaded = attachments.length\n ? await uploadAgentAttachments(this.agentUrl, attachments.map((item) => item.file))\n : [];\n if (uploaded.length !== attachments.length) {\n this.publish(\"onUserMessageFailed\", { stage: \"upload\", code: \"attachment_upload_failed\", retryable: true });\n throw new Error(\"SolidX did not confirm every uploaded file. Please retry.\");\n }\n this.publish(\"onUserMessageQueued\", { source, hasAttachments: attachments.length > 0,\n contextNamespaces: messageContext ? Object.keys(messageContext.namespaces) : [] });\n this.responseStarted = false;\n if (context) this.lastContext = context;\n const displayAttachments = attachments.map((item, index) => ({\n ...item.meta,\n ...(uploaded[index] ? { mediaId: uploaded[index].id } : {}),\n }));\n this.dispatch(agentUserMessageAdded({ text: content, attachments: displayAttachments, messageContext }));\n this.socket.send({\n action: \"message\",\n session_id: this.socket.currentSessionId ?? \"\",\n content,\n source,\n context: contributedInputContext\n ? { ...(context ?? this.lastContext ?? {}), ...contributedInputContext }\n : context ?? this.lastContext,\n ...(messageContext ? { message_context: messageContext } : {}),\n ...(this.agentRuntime === \"agentHub\" && inputs ? { inputs } : {}),\n ...(attachments.length ? { attachments: uploaded } : {}),\n ...(widgetReply ? { widget_reply: widgetReply } : {}),\n });\n }\n\n /** Answers a widget. Sent as text too, so agents without widget_reply support still understand it. */\n async replyToWidget(widgetId: string, widget: string, value: unknown,\n beforeSend?: Parameters<AgentRuntime[\"sendMessage\"]>[4]) {\n const text = typeof value === \"string\" ? value : Array.isArray(value) ? value.join(\", \") : JSON.stringify(value);\n await this.sendMessage(text, this.lastContext, [], undefined, beforeSend, \"widget\", { widgetId, value });\n // The text message uses the shared preparation path. Keep the structured widget\n // value as a separate event for consumers that handle widget replies.\n eventBus.emit(SOLID_AGENT_EVENTS.widgetAction, { widgetId, widget, value, agentType: this.agentRuntime });\n }\n\n cancel() {\n const sessionId = this.socket.currentSessionId;\n if (sessionId) {\n this.publish(\"onCancelRequested\", { sessionId });\n this.socket.send({ action: \"cancel\", session_id: sessionId });\n }\n }\n\n newChat() {\n this.publish(\"onNewChatRequested\", { sessionId: this.socket.currentSessionId });\n this.hadPriorSession = false;\n this.resetHistoryLoads();\n if (this.persistSession) writeSessionId(this.sessionKey, null);\n this.lastContext = undefined;\n this.dispatch(agentThreadReset());\n this.socket.newSession();\n }\n\n resume(sessionId: string) {\n this.hadPriorSession = true;\n this.resetHistoryLoads();\n if (this.persistSession) writeSessionId(this.sessionKey, sessionId);\n this.dispatch(agentThreadReset());\n this.socket.resume(sessionId);\n }\n\n async loadOlder() {\n const state = this.getState();\n if (!state?.historySessionId || !state.hasMoreHistory) return;\n await this.loadHistory(state.historySessionId, state.historyPage + 1);\n }\n\n private resetHistoryLoads() {\n this.historyGeneration += 1;\n this.historySessionId = null;\n this.loadingHistoryPages.clear();\n this.loadedHistoryPages.clear();\n }\n\n dispose() {\n this.preparationControllers.forEach((controller) => controller.abort());\n this.preparationControllers.clear();\n this.resetHistoryLoads();\n this.unsubscribers.forEach((off) => off());\n if (this.frame != null) cancelAnimationFrame(this.frame);\n this.socket.close();\n }\n\n private async loadHistory(historySessionId: string, page: number) {\n const key = `${historySessionId}:${page}`;\n if (this.loadingHistoryPages.has(key) || this.loadedHistoryPages.has(key)) return;\n const generation = this.historyGeneration;\n this.loadingHistoryPages.set(key, generation);\n try {\n const result = await fetchSessionHistory(this.agentUrl, historySessionId, page);\n if (!result) return;\n // Attached files are stored in Solid media storage; resolve their URLs before showing.\n const rawItems = historyToItems(result.messages ?? []);\n const items = this.persistSession ? await resolveAttachmentMedia(rawItems) : rawItems;\n if (generation !== this.historyGeneration || this.getState()?.historySessionId !== historySessionId) return;\n this.dispatch(agentHistoryLoaded({ items, hasMore: !!result.has_more, page }));\n this.loadedHistoryPages.add(key);\n } catch {\n // History is a convenience; the live session still works without it.\n } finally {\n if (this.loadingHistoryPages.get(key) === generation) this.loadingHistoryPages.delete(key);\n }\n }\n\n private handleFrame(frame: AgentWireFrame) {\n const event = normalizeAgentFrame(frame);\n if (event.eventType === AgentEventTypes.sessionStarted) {\n const sessionId = frame.session_id ?? event.eventData.session_id ?? null;\n this.publish(this.hadPriorSession ? \"onSessionResumed\" : \"onSessionStarted\", { sessionId });\n this.hadPriorSession = true;\n }\n else if (event.eventType === AgentEventTypes.sessionEnded) this.publish(\"onSessionEnded\", { sessionId: this.socket.currentSessionId, reason: event.eventData.reason ?? \"ended\" });\n else if (event.eventType === AgentEventTypes.agentStarted) this.publish(\"onAgentTurnStarted\", { sessionId: this.socket.currentSessionId });\n else if ((event.eventType === AgentEventTypes.llmToken || event.eventType === AgentEventTypes.llmComplete)\n && !event.eventData.widget && !this.responseStarted) {\n this.responseStarted = true;\n this.publish(\"onAgentResponseStarted\", { sessionId: this.socket.currentSessionId });\n }\n else if (event.eventType === AgentEventTypes.turnComplete || event.eventType === AgentEventTypes.turnCompleteLegacy) {\n this.publish(\"onAgentResponseCompleted\", { sessionId: this.socket.currentSessionId });\n const completedContent = event.eventData.content ?? event.frame.content;\n const inline = parseWidgetContent(completedContent);\n if (inline?.widget === \"navigation-intent\" && inline.data.schemaVersion === 1\n && inline.data.kind === \"navigation\" && typeof inline.data.domain === \"string\"\n && inline.data.payload && typeof inline.data.payload === \"object\" && !Array.isArray(inline.data.payload)) {\n this.publish(\"onAgentNavigationRequested\", {\n schemaVersion: 1,\n kind: \"navigation\",\n domain: inline.data.domain,\n payload: inline.data.payload as Record<string, unknown>,\n ...(typeof inline.data.message === \"string\" ? { message: inline.data.message } : {}),\n sessionId: this.socket.currentSessionId,\n });\n }\n this.publish(\"onAgentTurnCompleted\", { sessionId: this.socket.currentSessionId, outcome: \"completed\" });\n } else if (event.eventType === AgentEventTypes.agentError || event.eventType === AgentEventTypes.error) {\n this.publish(\"onError\", { stage: \"runtime\", code: \"agent_error\", retryable: false });\n } else if (event.eventType === \"HumanRequestCreated\") {\n const approval = event.eventData.kind === \"approval\";\n this.publish(approval ? \"onApprovalRequested\" : \"onHumanInputRequested\", {\n sessionId: this.socket.currentSessionId,\n requestId: event.eventData.request_id,\n ...(typeof event.eventData.question === \"string\" ? { displayPayload: event.eventData.question.slice(0, 1024) } : {}),\n });\n } else if (event.eventType === AgentEventTypes.executionCancelled || event.eventType === AgentEventTypes.executionCancelledLegacy) {\n this.publish(\"onTurnCancelled\", { sessionId: this.socket.currentSessionId });\n }\n\n // Stream text is batched per animation frame unless it carries a widget of its own.\n if (event.eventType === AgentEventTypes.llmToken && !event.eventData.widget) {\n this.pendingDelta += event.eventData.delta ?? \"\";\n if (this.frame == null) this.frame = requestAnimationFrame(() => this.flushTokens());\n return;\n }\n // Keep order: any buffered text lands before the next event.\n this.flushTokens();\n this.dispatch(agentEventReceived(event));\n this.emitSdkEvents(event);\n }\n\n private publish<E extends AgentPublicEventName>(event: E, payload: AgentPublicEventPayloads[E]) {\n emitAgentPublicEvent(event, payload, this.agentRuntime);\n }\n\n private emitSdkEvents(event: AgentChatEvent) {\n if (event.eventType === AgentEventTypes.sessionStarted) {\n const sessionId = event.frame.session_id ?? event.eventData.session_id ?? null;\n if (this.persistSession) writeSessionId(this.sessionKey, sessionId);\n eventBus.emit(SOLID_AGENT_EVENTS.sessionChanged, { sessionId, agentType: this.agentRuntime });\n const state = this.getState();\n const historyId = event.frame.history_session_id ?? event.eventData.history_session_id ?? sessionId;\n if (historyId !== this.historySessionId) {\n this.resetHistoryLoads();\n this.historySessionId = historyId;\n }\n if (state && state.items.length === 0 && historyId) void this.loadHistory(historyId, 1);\n } else if (event.eventType === AgentEventTypes.turnComplete || event.eventType === AgentEventTypes.turnCompleteLegacy) {\n eventBus.emit(SOLID_AGENT_EVENTS.turnComplete, {\n sessionId: this.socket.currentSessionId,\n agentType: this.agentRuntime,\n content: event.eventData.content ?? event.frame.content,\n });\n }\n }\n\n private flushTokens() {\n if (this.frame != null) {\n cancelAnimationFrame(this.frame);\n this.frame = null;\n }\n if (!this.pendingDelta) return;\n const delta = this.pendingDelta;\n this.pendingDelta = \"\";\n this.dispatch(agentEventReceived(normalizeAgentFrame({ event_type: AgentEventTypes.llmToken, event_data: { delta } })));\n }\n}\n\nlet runtime: AgentRuntime | null = null;\n\n/** Returns the shared \"solidx\" runtime, creating (or re-pointing) it for `agentUrl`. */\nexport function ensureAgentRuntime(agentUrl: string, dispatch: Dispatch, getState: GetAgentState): AgentRuntime {\n if (runtime && runtime.agentUrl === agentUrl) return runtime;\n runtime?.dispose();\n runtime = new AgentRuntime(agentUrl, dispatch, getState);\n return runtime;\n}\n\nexport function getAgentRuntime(): AgentRuntime | null {\n return runtime;\n}\n\n/** Closes the connection and forgets this tab's agent logins (e.g. on logout). */\nexport function disposeAgentRuntime() {\n runtime?.dispose();\n runtime = null;\n clearAllAgentAuth();\n}\n"]}
|