@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.
Files changed (180) hide show
  1. package/dist/components/common/FileReaderExt.d.ts.map +1 -1
  2. package/dist/components/common/FileReaderExt.js +22 -11
  3. package/dist/components/common/FileReaderExt.js.map +1 -1
  4. package/dist/components/common/FileReaderExt.tsx +27 -14
  5. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  6. package/dist/components/common/SocialMediaLogin.js +1 -1
  7. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  8. package/dist/components/common/SocialMediaLogin.tsx +50 -19
  9. package/dist/components/common/solid-export.css +75 -0
  10. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +71 -0
  11. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  12. package/dist/components/core/form/SolidFormView.js +14 -0
  13. package/dist/components/core/form/SolidFormView.js.map +1 -1
  14. package/dist/components/core/form/SolidFormView.tsx +13 -0
  15. package/dist/components/core/form/fields/SolidMediaMultipleField.js +3 -3
  16. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  17. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +3 -3
  18. package/dist/components/core/form/fields/SolidMediaSingleField.js +2 -2
  19. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  20. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +2 -2
  21. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +2 -2
  22. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  23. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -4
  24. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
  25. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  26. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -3
  27. package/dist/components/core/solid-agent/SolidAgentChat.d.ts +3 -1
  28. package/dist/components/core/solid-agent/SolidAgentChat.d.ts.map +1 -1
  29. package/dist/components/core/solid-agent/SolidAgentChat.js +150 -22
  30. package/dist/components/core/solid-agent/SolidAgentChat.js.map +1 -1
  31. package/dist/components/core/solid-agent/SolidAgentChat.tsx +76 -15
  32. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts +2 -0
  33. package/dist/components/core/solid-agent/SolidAgentEmbedded.d.ts.map +1 -1
  34. package/dist/components/core/solid-agent/SolidAgentEmbedded.js +4 -4
  35. package/dist/components/core/solid-agent/SolidAgentEmbedded.js.map +1 -1
  36. package/dist/components/core/solid-agent/SolidAgentEmbedded.tsx +7 -1
  37. package/dist/components/core/solid-agent/SolidAgentHost.d.ts.map +1 -1
  38. package/dist/components/core/solid-agent/SolidAgentHost.js +79 -1
  39. package/dist/components/core/solid-agent/SolidAgentHost.js.map +1 -1
  40. package/dist/components/core/solid-agent/SolidAgentHost.tsx +69 -2
  41. package/dist/components/core/solid-agent/agentEvents.d.ts.map +1 -1
  42. package/dist/components/core/solid-agent/agentEvents.js +1 -3
  43. package/dist/components/core/solid-agent/agentEvents.js.map +1 -1
  44. package/dist/components/core/solid-agent/agentEvents.ts +5 -3
  45. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts +88 -0
  46. package/dist/components/core/solid-agent/client/agentPublicEvents.d.ts.map +1 -0
  47. package/dist/components/core/solid-agent/client/agentPublicEvents.js +26 -0
  48. package/dist/components/core/solid-agent/client/agentPublicEvents.js.map +1 -0
  49. package/dist/components/core/solid-agent/client/agentPublicEvents.ts +66 -0
  50. package/dist/components/core/solid-agent/client/agentRuntime.d.ts +18 -3
  51. package/dist/components/core/solid-agent/client/agentRuntime.d.ts.map +1 -1
  52. package/dist/components/core/solid-agent/client/agentRuntime.js +173 -31
  53. package/dist/components/core/solid-agent/client/agentRuntime.js.map +1 -1
  54. package/dist/components/core/solid-agent/client/agentRuntime.ts +126 -16
  55. package/dist/components/core/solid-agent/client/agentSocket.d.ts +3 -0
  56. package/dist/components/core/solid-agent/client/agentSocket.d.ts.map +1 -1
  57. package/dist/components/core/solid-agent/client/agentSocket.js +19 -1
  58. package/dist/components/core/solid-agent/client/agentSocket.js.map +1 -1
  59. package/dist/components/core/solid-agent/client/agentSocket.ts +11 -1
  60. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts +9 -0
  61. package/dist/components/core/solid-agent/client/beforeUserMessageSend.d.ts.map +1 -0
  62. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js +53 -0
  63. package/dist/components/core/solid-agent/client/beforeUserMessageSend.js.map +1 -0
  64. package/dist/components/core/solid-agent/client/beforeUserMessageSend.ts +26 -0
  65. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.d.ts.map +1 -1
  66. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js +4 -3
  67. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.js.map +1 -1
  68. package/dist/components/core/solid-agent/embed/AgentEmbeddingPanel.tsx +4 -2
  69. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts +29 -0
  70. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.d.ts.map +1 -1
  71. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js +45 -2
  72. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.js.map +1 -1
  73. package/dist/components/core/solid-agent/embed/agentEmbedProtocol.ts +49 -2
  74. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts +1 -0
  75. package/dist/components/core/solid-agent/embed/agentEmbedSamples.d.ts.map +1 -1
  76. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js +2 -1
  77. package/dist/components/core/solid-agent/embed/agentEmbedSamples.js.map +1 -1
  78. package/dist/components/core/solid-agent/embed/agentEmbedSamples.ts +15 -1
  79. package/dist/components/core/solid-agent/types.d.ts +13 -0
  80. package/dist/components/core/solid-agent/types.d.ts.map +1 -1
  81. package/dist/components/core/solid-agent/types.js.map +1 -1
  82. package/dist/components/core/solid-agent/types.ts +8 -0
  83. package/dist/components/core/solid-agent/useAgentChat.d.ts +1 -1
  84. package/dist/components/core/solid-agent/useAgentChat.d.ts.map +1 -1
  85. package/dist/components/core/solid-agent/useAgentChat.js +7 -4
  86. package/dist/components/core/solid-agent/useAgentChat.js.map +1 -1
  87. package/dist/components/core/solid-agent/useAgentChat.ts +9 -5
  88. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.d.ts.map +1 -1
  89. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js +12 -4
  90. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.js.map +1 -1
  91. package/dist/components/core/solid-agent/widgets/DefaultUserMessageChatWidget.tsx +18 -0
  92. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts +4 -0
  93. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.d.ts.map +1 -0
  94. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js +30 -0
  95. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.js.map +1 -0
  96. package/dist/components/core/solid-agent/widgets/SolidNavigationIntentChatWidget.tsx +41 -0
  97. package/dist/components/core/solid-agent/widgets/solidChatWidgets.module.css +39 -0
  98. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts +2 -1
  99. package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
  100. package/dist/components/shad-cn-ui/SolidCodeEditor.js +3 -2
  101. package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
  102. package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +3 -0
  103. package/dist/helpers/adminViewRefresh.d.ts +13 -0
  104. package/dist/helpers/adminViewRefresh.d.ts.map +1 -0
  105. package/dist/helpers/adminViewRefresh.js +14 -0
  106. package/dist/helpers/adminViewRefresh.js.map +1 -0
  107. package/dist/helpers/adminViewRefresh.ts +26 -0
  108. package/dist/helpers/eventBus.d.ts +1 -0
  109. package/dist/helpers/eventBus.d.ts.map +1 -1
  110. package/dist/helpers/eventBus.js +1 -0
  111. package/dist/helpers/eventBus.js.map +1 -1
  112. package/dist/helpers/eventBus.ts +1 -0
  113. package/dist/helpers/fileTypeIcon.d.ts.map +1 -1
  114. package/dist/helpers/fileTypeIcon.js +4 -1
  115. package/dist/helpers/fileTypeIcon.js.map +1 -1
  116. package/dist/helpers/fileTypeIcon.tsx +15 -0
  117. package/dist/helpers/registry.d.ts.map +1 -1
  118. package/dist/helpers/registry.js +2 -0
  119. package/dist/helpers/registry.js.map +1 -1
  120. package/dist/helpers/registry.ts +2 -0
  121. package/dist/helpers/routePaths.d.ts +13 -0
  122. package/dist/helpers/routePaths.d.ts.map +1 -1
  123. package/dist/helpers/routePaths.js +39 -0
  124. package/dist/helpers/routePaths.js.map +1 -1
  125. package/dist/helpers/routePaths.ts +48 -0
  126. package/dist/redux/features/agentSlice.d.ts +2 -1
  127. package/dist/redux/features/agentSlice.d.ts.map +1 -1
  128. package/dist/redux/features/agentSlice.js +2 -2
  129. package/dist/redux/features/agentSlice.js.map +1 -1
  130. package/dist/redux/features/agentSlice.ts +8 -3
  131. package/dist/resources/solid-custom.css +42 -0
  132. package/dist/resources/solid-tailwind-generated.css +1 -1
  133. package/dist/routes/pages/admin/core/AgentHubModuleField.css +15 -0
  134. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts +22 -0
  135. package/dist/routes/pages/admin/core/AgentHubModuleField.d.ts.map +1 -0
  136. package/dist/routes/pages/admin/core/AgentHubModuleField.js +42 -0
  137. package/dist/routes/pages/admin/core/AgentHubModuleField.js.map +1 -0
  138. package/dist/routes/pages/admin/core/AgentHubModuleField.tsx +54 -0
  139. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts +3 -1
  140. package/dist/routes/pages/admin/core/AgentHubTagsField.d.ts.map +1 -1
  141. package/dist/routes/pages/admin/core/AgentHubTagsField.js +3 -3
  142. package/dist/routes/pages/admin/core/AgentHubTagsField.js.map +1 -1
  143. package/dist/routes/pages/admin/core/AgentHubTagsField.tsx +7 -3
  144. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.d.ts.map +1 -1
  145. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js +37 -29
  146. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.js.map +1 -1
  147. package/dist/routes/pages/admin/core/AgentRegistryEditorPage.tsx +12 -6
  148. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.d.ts.map +1 -1
  149. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js +22 -15
  150. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.js.map +1 -1
  151. package/dist/routes/pages/admin/core/AgentSkillRegistryEditorPage.tsx +17 -7
  152. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.d.ts.map +1 -1
  153. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js +21 -15
  154. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.js.map +1 -1
  155. package/dist/routes/pages/admin/core/AgentToolRegistryEditorPage.tsx +16 -9
  156. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.d.ts.map +1 -1
  157. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js +149 -37
  158. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.js.map +1 -1
  159. package/dist/routes/pages/admin/core/ArchivedChatterMessagesPage.tsx +283 -73
  160. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  161. package/dist/routes/pages/admin/core/CardPage.js +9 -1
  162. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  163. package/dist/routes/pages/admin/core/CardPage.tsx +9 -1
  164. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  165. package/dist/routes/pages/admin/core/KanbanPage.js +9 -1
  166. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  167. package/dist/routes/pages/admin/core/KanbanPage.tsx +9 -1
  168. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  169. package/dist/routes/pages/admin/core/ListPage.js +10 -1
  170. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  171. package/dist/routes/pages/admin/core/ListPage.tsx +10 -1
  172. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
  173. package/dist/routes/pages/admin/core/TreePage.js +9 -1
  174. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  175. package/dist/routes/pages/admin/core/TreePage.tsx +9 -1
  176. package/dist/routes/pages/embed/AgentEmbedPage.d.ts.map +1 -1
  177. package/dist/routes/pages/embed/AgentEmbedPage.js +67 -4
  178. package/dist/routes/pages/embed/AgentEmbedPage.js.map +1 -1
  179. package/dist/routes/pages/embed/AgentEmbedPage.tsx +61 -4
  180. 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.unsubscribers.push(this.socket.onEvent(function (frame) { return _this.handleFrame(frame); }), this.socket.onStatus(function (status) { return _this.dispatch(agentConnectionChanged(status)); }));
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, _b, displayAttachments;
194
- return __generator(this, function (_c) {
195
- switch (_c.label) {
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.trim();
198
- if (!content && !attachments.length)
224
+ content = text;
225
+ if (!content.trim() && !attachments.length)
199
226
  return [2 /*return*/];
200
- if (!attachments.length) return [3 /*break*/, 2];
201
- return [4 /*yield*/, uploadAgentAttachments(this.agentUrl, attachments.map(function (item) { return item.file; }))];
227
+ controller = new AbortController();
228
+ this.preparationControllers.add(controller);
229
+ _h.label = 1;
202
230
  case 1:
203
- _b = _c.sent();
204
- return [3 /*break*/, 3];
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
- _b = [];
207
- _c.label = 3;
243
+ _d = _h.sent();
244
+ return [3 /*break*/, 4];
208
245
  case 3:
209
- uploaded = _b;
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: (_a = this.socket.currentSessionId) !== null && _a !== void 0 ? _a : "", content: content, context: context !== null && context !== void 0 ? context : this.lastContext }, (this.agentRuntime === "agentHub" && inputs ? { inputs: inputs } : {})), (attachments.length ? { attachments: uploaded } : {})));
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
- var _a;
231
- var text = typeof value === "string" ? value : Array.isArray(value) ? value.join(", ") : JSON.stringify(value);
232
- this.dispatch(agentUserMessageAdded({ text: text }));
233
- this.socket.send({
234
- action: "message",
235
- session_id: (_a = this.socket.currentSessionId) !== null && _a !== void 0 ? _a : "",
236
- content: text,
237
- context: this.lastContext,
238
- widget_reply: { widgetId: widgetId, value: value },
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 += (_a = event.eventData.delta) !== null && _a !== void 0 ? _a : "";
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":"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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 { 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"]}