besser-agentic-framework-ui 0.2.0 → 0.2.1

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.
@@ -25,7 +25,6 @@ var m = {
25
25
  AGENT_REPLY_AUDIO: "agent_reply_audio",
26
26
  AGENT_REPLY_GUI: "agent_reply_gui",
27
27
  AGENT_REPLY_GUI_UPDATE: "agent_reply_gui_update",
28
- USER_UPDATE_UI: "user_update_ui",
29
28
  USER_GUI_EVENT: "user_gui_event",
30
29
  FETCH_USER_MESSAGES: "fetch_user_messages"
31
30
  }, h = {
@@ -545,14 +544,19 @@ function se({ el: e, id: t, onInteract: n }) {
545
544
  }
546
545
  function ce({ el: e, id: t, className: n, onInteract: r }) {
547
546
  let [i, a] = s(typeof e.default_value == "number" ? e.default_value : 0), [o, c] = s(0), l = e.max_value ?? 5;
548
- return /* @__PURE__ */ f("div", {
547
+ return /* @__PURE__ */ p("div", {
549
548
  id: t,
550
549
  className: n,
551
550
  style: {
552
551
  display: "flex",
553
552
  gap: "2px"
554
553
  },
555
- children: Array.from({ length: l }, (e, t) => t + 1).map((n) => /* @__PURE__ */ f("button", {
554
+ children: [/* @__PURE__ */ f("input", {
555
+ type: "hidden",
556
+ name: e.name,
557
+ "data-value-type": "number",
558
+ value: String(i)
559
+ }), Array.from({ length: l }, (e, t) => t + 1).map((n) => /* @__PURE__ */ f("button", {
556
560
  type: "button",
557
561
  "aria-label": `${n} star${n === 1 ? "" : "s"}`,
558
562
  style: {
@@ -579,7 +583,7 @@ function ce({ el: e, id: t, className: n, onInteract: r }) {
579
583
  onMouseEnter: () => !e.disabled && c(n),
580
584
  onMouseLeave: () => c(0),
581
585
  children: "★"
582
- }, n))
586
+ }, n))]
583
587
  });
584
588
  }
585
589
  function le({ el: e, id: t, className: n, onInteract: r }) {
@@ -714,7 +718,7 @@ function ue({ el: e, id: t, className: n, onInteract: r }) {
714
718
  }, n))
715
719
  });
716
720
  }
717
- function B({ el: e, id: t, className: n, onInteract: r }) {
721
+ function de({ el: e, id: t, className: n, onInteract: r }) {
718
722
  let [i, a] = s(""), [o, c] = s(""), l = {
719
723
  padding: "6px 10px",
720
724
  border: "1px solid #cbd5e1",
@@ -771,10 +775,10 @@ function B({ el: e, id: t, className: n, onInteract: r }) {
771
775
  ]
772
776
  });
773
777
  }
774
- function V({ el: e, id: t, className: n, onInteract: r }) {
775
- let i = e.options ?? [], [a, o] = s(() => typeof e.default_value == "string" && e.default_value ? e.default_value.split(",").map((e) => e.trim()).filter(Boolean) : []), c = (n) => {
778
+ function fe({ el: e, id: t, className: n, onInteract: r }) {
779
+ let i = e.options ?? [], [a, c] = s(() => typeof e.default_value == "string" && e.default_value ? e.default_value.split(",").map((e) => e.trim()).filter(Boolean) : []), l = o(null), u = (n) => {
776
780
  let i = a.includes(n) ? a.filter((e) => e !== n) : [...a, n];
777
- o(i), r?.(JSON.stringify({
781
+ c(i), l.current && (l.current.value = JSON.stringify(i)), r?.(JSON.stringify({
778
782
  elementId: t ?? e.name,
779
783
  name: e.name,
780
784
  fieldType: e.field_type,
@@ -791,76 +795,131 @@ function V({ el: e, id: t, className: n, onInteract: r }) {
791
795
  flexDirection: "column",
792
796
  gap: "6px"
793
797
  },
794
- children: [a.length > 0 && /* @__PURE__ */ f("div", {
795
- style: {
796
- display: "flex",
797
- flexWrap: "wrap",
798
- gap: "4px"
799
- },
800
- children: a.map((t) => /* @__PURE__ */ p("span", {
801
- className: "gui-chip",
798
+ children: [
799
+ /* @__PURE__ */ f("input", {
800
+ type: "hidden",
801
+ ref: l,
802
+ name: e.name,
803
+ "data-value-type": "json",
804
+ defaultValue: JSON.stringify(a)
805
+ }),
806
+ a.length > 0 && /* @__PURE__ */ f("div", {
802
807
  style: {
803
- display: "inline-flex",
804
- alignItems: "center",
805
- gap: "4px",
806
- padding: "2px 8px",
807
- background: "#eff6ff",
808
- color: "#1d4ed8",
809
- borderRadius: "12px",
810
- fontSize: "0.82em"
808
+ display: "flex",
809
+ flexWrap: "wrap",
810
+ gap: "4px"
811
811
  },
812
- children: [i.find((e) => e.value === t)?.label ?? t, /* @__PURE__ */ f("button", {
813
- type: "button",
814
- onClick: () => c(t),
815
- disabled: e.disabled,
812
+ children: a.map((t) => /* @__PURE__ */ p("span", {
813
+ className: "gui-chip",
816
814
  style: {
817
- background: "none",
818
- border: "none",
819
- cursor: "pointer",
820
- color: "inherit",
821
- padding: 0,
822
- lineHeight: 1
815
+ display: "inline-flex",
816
+ alignItems: "center",
817
+ gap: "4px",
818
+ padding: "2px 8px",
819
+ background: "#eff6ff",
820
+ color: "#1d4ed8",
821
+ borderRadius: "12px",
822
+ fontSize: "0.82em"
823
823
  },
824
- children: "×"
825
- })]
826
- }, t))
827
- }), /* @__PURE__ */ f("div", {
828
- className: "gui-ms-list",
829
- style: {
830
- border: "1px solid #cbd5e1",
831
- borderRadius: "4px",
832
- overflow: "hidden"
833
- },
834
- children: i.map((t, n) => {
835
- let r = a.includes(t.value);
836
- return /* @__PURE__ */ p("div", {
837
- className: `gui-ms-item${r ? " gui-ms-item--selected" : ""}`,
838
- onClick: () => !e.disabled && c(t.value),
839
- style: {
840
- padding: "6px 10px",
841
- cursor: e.disabled ? "default" : "pointer",
842
- background: r ? "#dbeafe" : n % 2 == 0 ? "#fff" : "#f8fafc",
843
- color: r ? "#1d4ed8" : "#374151",
844
- fontWeight: r ? 500 : 400,
845
- borderBottom: n < i.length - 1 ? "1px solid #e2e8f0" : "none",
846
- userSelect: "none",
847
- display: "flex",
848
- justifyContent: "space-between",
849
- alignItems: "center"
850
- },
851
- children: [/* @__PURE__ */ f("span", { children: t.label }), r && /* @__PURE__ */ f("span", {
824
+ children: [i.find((e) => e.value === t)?.label ?? t, /* @__PURE__ */ f("button", {
825
+ type: "button",
826
+ onClick: () => u(t),
827
+ disabled: e.disabled,
852
828
  style: {
853
- color: "#2563eb",
854
- fontWeight: 700
829
+ background: "none",
830
+ border: "none",
831
+ cursor: "pointer",
832
+ color: "inherit",
833
+ padding: 0,
834
+ lineHeight: 1
855
835
  },
856
- children: "✓"
836
+ children: "×"
857
837
  })]
858
- }, n);
838
+ }, t))
839
+ }),
840
+ /* @__PURE__ */ f("div", {
841
+ className: "gui-ms-list",
842
+ style: {
843
+ border: "1px solid #cbd5e1",
844
+ borderRadius: "4px",
845
+ overflow: "hidden"
846
+ },
847
+ children: i.map((t, n) => {
848
+ let r = a.includes(t.value);
849
+ return /* @__PURE__ */ p("div", {
850
+ className: `gui-ms-item${r ? " gui-ms-item--selected" : ""}`,
851
+ onClick: () => !e.disabled && u(t.value),
852
+ style: {
853
+ padding: "6px 10px",
854
+ cursor: e.disabled ? "default" : "pointer",
855
+ background: r ? "#dbeafe" : n % 2 == 0 ? "#fff" : "#f8fafc",
856
+ color: r ? "#1d4ed8" : "#374151",
857
+ fontWeight: r ? 500 : 400,
858
+ borderBottom: n < i.length - 1 ? "1px solid #e2e8f0" : "none",
859
+ userSelect: "none",
860
+ display: "flex",
861
+ justifyContent: "space-between",
862
+ alignItems: "center"
863
+ },
864
+ children: [/* @__PURE__ */ f("span", { children: t.label }), r && /* @__PURE__ */ f("span", {
865
+ style: {
866
+ color: "#2563eb",
867
+ fontWeight: 700
868
+ },
869
+ children: "✓"
870
+ })]
871
+ }, n);
872
+ })
859
873
  })
860
- })]
874
+ ]
861
875
  });
862
876
  }
863
- var H = {
877
+ function B({ el: e, id: t, className: n, onInteract: r }) {
878
+ let i = e.options ?? [], [a, c] = s(() => Object.fromEntries(i.map((e) => [e.value, !1]))), l = o(null), u = e.disabled ?? !1, d = (n, i) => {
879
+ let o = {
880
+ ...a,
881
+ [n]: i
882
+ };
883
+ c(o), l.current && (l.current.value = JSON.stringify(o)), r?.(JSON.stringify({
884
+ elementId: t ?? e.name,
885
+ name: e.name,
886
+ fieldType: e.field_type,
887
+ label: e.label || void 0,
888
+ action: "onChange",
889
+ value: o
890
+ }));
891
+ };
892
+ return /* @__PURE__ */ p("div", {
893
+ id: t,
894
+ className: n,
895
+ style: {
896
+ display: "flex",
897
+ flexDirection: "column",
898
+ gap: "6px"
899
+ },
900
+ children: [/* @__PURE__ */ f("input", {
901
+ type: "hidden",
902
+ ref: l,
903
+ name: e.name,
904
+ "data-value-type": "json",
905
+ defaultValue: JSON.stringify(a)
906
+ }), i.map((e, t) => /* @__PURE__ */ p("label", {
907
+ style: {
908
+ display: "flex",
909
+ alignItems: "center",
910
+ gap: "6px",
911
+ cursor: u ? "default" : "pointer"
912
+ },
913
+ children: [/* @__PURE__ */ f("input", {
914
+ type: "checkbox",
915
+ checked: a[e.value] ?? !1,
916
+ disabled: u,
917
+ onChange: (t) => d(e.value, t.target.checked)
918
+ }), e.label]
919
+ }, t))]
920
+ });
921
+ }
922
+ var V = {
864
923
  Text: "text",
865
924
  Password: "password",
866
925
  Email: "email",
@@ -876,7 +935,7 @@ var H = {
876
935
  Range: "range",
877
936
  Checkbox: "checkbox"
878
937
  };
879
- function de({ el: e, onInteract: t }) {
938
+ function pe({ el: e, onInteract: t }) {
880
939
  let n = e.custom_attributes ?? {}, r = e.label ?? n["data-label"] ?? void 0, i = e.placeholder ?? n["data-placeholder"] ?? e.description ?? e.name, a = e.required ?? n["data-required"] === "true", o = e.min_value ?? (n["data-min"] == null ? void 0 : Number(n["data-min"])), s = e.max_value ?? (n["data-max"] == null ? void 0 : Number(n["data-max"])), c = e.step ?? (n["data-step"] == null ? void 0 : Number(n["data-step"])), l = e.default_value;
881
940
  l == null && n["data-default-checked"] != null && (l = String(n["data-default-checked"]).toLowerCase() === "true");
882
941
  let u = e.options ?? [];
@@ -966,7 +1025,7 @@ function de({ el: e, onInteract: t }) {
966
1025
  children: e.label
967
1026
  }, t))]
968
1027
  }));
969
- case "MultiSelect": return w(/* @__PURE__ */ f(V, {
1028
+ case "MultiSelect": return w(/* @__PURE__ */ f(fe, {
970
1029
  el: m,
971
1030
  id: g,
972
1031
  className: _,
@@ -996,30 +1055,11 @@ function de({ el: e, onInteract: t }) {
996
1055
  }), t.label]
997
1056
  }, n))
998
1057
  }));
999
- case "CheckboxGroup": return w(/* @__PURE__ */ f("div", {
1000
- style: {
1001
- display: "flex",
1002
- flexDirection: "column",
1003
- gap: "6px"
1004
- },
1005
- children: u.map((t, n) => /* @__PURE__ */ p("label", {
1006
- style: {
1007
- display: "flex",
1008
- alignItems: "center",
1009
- gap: "6px",
1010
- cursor: b ? "default" : "pointer"
1011
- },
1012
- children: [/* @__PURE__ */ f("input", {
1013
- type: "checkbox",
1014
- name: `${e.name}[]`,
1015
- value: t.value,
1016
- disabled: b,
1017
- onChange: (e) => C({
1018
- option: t.value,
1019
- checked: e.target.checked
1020
- })
1021
- }), t.label]
1022
- }, n))
1058
+ case "CheckboxGroup": return w(/* @__PURE__ */ f(B, {
1059
+ el: m,
1060
+ id: g,
1061
+ className: _,
1062
+ onInteract: t
1023
1063
  }));
1024
1064
  case "Toggle": return /* @__PURE__ */ f(oe, {
1025
1065
  el: m,
@@ -1065,7 +1105,7 @@ function de({ el: e, onInteract: t }) {
1065
1105
  className: _,
1066
1106
  onInteract: t
1067
1107
  }));
1068
- case "DateRange": return w(/* @__PURE__ */ f(B, {
1108
+ case "DateRange": return w(/* @__PURE__ */ f(de, {
1069
1109
  el: m,
1070
1110
  id: g,
1071
1111
  className: _,
@@ -1167,7 +1207,7 @@ function de({ el: e, onInteract: t }) {
1167
1207
  onChange: (e) => C(e.target.files?.[0]?.name)
1168
1208
  }));
1169
1209
  default: return w(/* @__PURE__ */ f("input", {
1170
- type: H[v] ?? v.toLowerCase(),
1210
+ type: V[v] ?? v.toLowerCase(),
1171
1211
  id: g,
1172
1212
  name: e.name,
1173
1213
  className: _,
@@ -1184,7 +1224,7 @@ function de({ el: e, onInteract: t }) {
1184
1224
  }));
1185
1225
  }
1186
1226
  }
1187
- function fe({ el: e, id: t, className: r, style: i }) {
1227
+ function me({ el: e, id: t, className: r, style: i }) {
1188
1228
  let a = n(D);
1189
1229
  return a ? /* @__PURE__ */ p("div", {
1190
1230
  id: t,
@@ -1247,7 +1287,7 @@ function fe({ el: e, id: t, className: r, style: i }) {
1247
1287
  children: "Chat widget not connected"
1248
1288
  });
1249
1289
  }
1250
- function U(e, t, n, r = !1) {
1290
+ function H(e, t, n, r = !1) {
1251
1291
  let i = F(e.styling), a = e.component_id ?? void 0, o = (e.css_classes ?? []).join(" ") || void 0;
1252
1292
  switch (e.type) {
1253
1293
  case "Text": {
@@ -1294,27 +1334,33 @@ function U(e, t, n, r = !1) {
1294
1334
  },
1295
1335
  children: e.label
1296
1336
  }, e.name);
1297
- case "Button": return /* @__PURE__ */ f("button", {
1298
- id: a,
1299
- className: o,
1300
- style: {
1301
- appearance: "none",
1302
- fontFamily: "inherit",
1303
- lineHeight: "inherit",
1304
- ...i
1305
- },
1306
- type: "button",
1307
- onClick: () => {
1308
- e.actionType?.toLowerCase() === "navigate" && e.url && n?.(e.url) || t?.(JSON.stringify({
1309
- elementId: a ?? e.name,
1310
- name: e.name,
1311
- label: e.label || void 0,
1312
- actionType: e.actionType || void 0,
1313
- action: "onClick"
1314
- }));
1315
- },
1316
- children: e.label
1317
- }, e.name);
1337
+ case "Button": {
1338
+ let r = e.buttonType?.toLowerCase() ?? "";
1339
+ return /* @__PURE__ */ f("button", {
1340
+ id: a,
1341
+ className: [
1342
+ "gui-form-btn",
1343
+ r === "outlined button" ? "gui-form-btn--outlined" : r === "flat button" ? "gui-form-btn--flat" : r === "floating action button" ? "gui-form-btn--fab" : "gui-form-btn--submit",
1344
+ o
1345
+ ].filter(Boolean).join(" "),
1346
+ style: {
1347
+ fontFamily: "inherit",
1348
+ lineHeight: "inherit",
1349
+ ...i
1350
+ },
1351
+ type: "button",
1352
+ onClick: () => {
1353
+ e.actionType?.toLowerCase() === "navigate" && e.url && n?.(e.url) || t?.(JSON.stringify({
1354
+ elementId: a ?? e.name,
1355
+ name: e.name,
1356
+ label: e.label || void 0,
1357
+ actionType: e.actionType || void 0,
1358
+ action: "onClick"
1359
+ }));
1360
+ },
1361
+ children: e.label
1362
+ }, e.name);
1363
+ }
1318
1364
  case "Image": return /* @__PURE__ */ f("img", {
1319
1365
  id: a,
1320
1366
  className: o,
@@ -1325,11 +1371,11 @@ function U(e, t, n, r = !1) {
1325
1371
  e.target.style.display = "none";
1326
1372
  }
1327
1373
  }, e.name);
1328
- case "InputField": return /* @__PURE__ */ f(de, {
1374
+ case "InputField": return /* @__PURE__ */ f(pe, {
1329
1375
  el: e,
1330
1376
  onInteract: t
1331
1377
  }, e.name);
1332
- case "Form": return /* @__PURE__ */ f("form", {
1378
+ case "Form": return /* @__PURE__ */ p("form", {
1333
1379
  id: a,
1334
1380
  className: o,
1335
1381
  style: {
@@ -1340,15 +1386,48 @@ function U(e, t, n, r = !1) {
1340
1386
  },
1341
1387
  onSubmit: (n) => {
1342
1388
  n.preventDefault();
1343
- let r = Object.fromEntries(new FormData(n.currentTarget));
1344
- t?.(JSON.stringify({
1389
+ let r = n.currentTarget, i = {};
1390
+ for (let [e, t] of new FormData(r).entries()) {
1391
+ let n = r.querySelector(`[name="${e}"][data-value-type="json"]`), a = r.querySelector(`[name="${e}"][data-value-type="number"]`);
1392
+ if (n && typeof t == "string") try {
1393
+ i[e] = JSON.parse(t);
1394
+ } catch {
1395
+ i[e] = t;
1396
+ }
1397
+ else a && typeof t == "string" ? i[e] = Number(t) : i[e] = t;
1398
+ }
1399
+ r.querySelectorAll("input[type=\"checkbox\"]").forEach((e) => {
1400
+ e.name && (i[e.name] = e.checked);
1401
+ }), r.querySelectorAll("input[type=\"radio\"]").forEach((e) => {
1402
+ e.name && !(e.name in i) && (i[e.name] = "");
1403
+ }), t?.(JSON.stringify({
1345
1404
  elementId: a ?? e.name,
1346
1405
  name: e.name,
1347
1406
  action: "onSubmit",
1348
- value: r
1407
+ value: i
1349
1408
  }));
1350
1409
  },
1351
- children: (e.inputFields ?? []).map((e) => U(e, t, n, r))
1410
+ children: [(e.inputFields ?? []).map((e) => H(e, t, n, r)), /* @__PURE__ */ p("div", {
1411
+ style: {
1412
+ display: "flex",
1413
+ gap: "8px",
1414
+ marginTop: "4px"
1415
+ },
1416
+ children: [/* @__PURE__ */ f("button", {
1417
+ type: "submit",
1418
+ className: "gui-form-btn gui-form-btn--submit",
1419
+ children: e.submit_label ?? "Submit"
1420
+ }), e.show_cancel && /* @__PURE__ */ f("button", {
1421
+ type: "button",
1422
+ className: "gui-form-btn gui-form-btn--cancel",
1423
+ onClick: () => t?.(JSON.stringify({
1424
+ elementId: a ?? e.name,
1425
+ name: e.name,
1426
+ action: "onCancel"
1427
+ })),
1428
+ children: e.cancel_label ?? "Cancel"
1429
+ })]
1430
+ })]
1352
1431
  }, e.name);
1353
1432
  case "Menu": return /* @__PURE__ */ f(e.tag_name && e.tag_name === "nav" ? "nav" : "div", {
1354
1433
  id: a,
@@ -1449,7 +1528,7 @@ function U(e, t, n, r = !1) {
1449
1528
  id: a,
1450
1529
  className: o,
1451
1530
  style: c,
1452
- children: (e.view_elements ?? []).map((e) => U(e, t, n, r))
1531
+ children: (e.view_elements ?? []).map((e) => H(e, t, n, r))
1453
1532
  }, e.name);
1454
1533
  }
1455
1534
  case "LineChart":
@@ -1516,7 +1595,7 @@ function U(e, t, n, r = !1) {
1516
1595
  })
1517
1596
  ]
1518
1597
  }, e.name);
1519
- case "AgentComponent": return /* @__PURE__ */ f(fe, {
1598
+ case "AgentComponent": return /* @__PURE__ */ f(me, {
1520
1599
  el: e,
1521
1600
  id: a,
1522
1601
  className: o,
@@ -1525,96 +1604,112 @@ function U(e, t, n, r = !1) {
1525
1604
  default: return null;
1526
1605
  }
1527
1606
  }
1528
- function W({ content: e, onInteract: n, chatProps: o, chatMode: c = !1 }) {
1529
- let l = "gui-s" + i().replace(/[^a-zA-Z0-9]/g, ""), u = a(() => {
1607
+ function U({ content: e, onInteract: n, messageId: o, chatProps: c, chatMode: l = !1 }) {
1608
+ let u = "gui-s" + i().replace(/[^a-zA-Z0-9]/g, ""), d = a(() => {
1530
1609
  try {
1531
1610
  let t = typeof e == "string" ? e : JSON.stringify(e);
1532
1611
  return JSON.parse(t);
1533
1612
  } catch {
1534
1613
  return null;
1535
1614
  }
1536
- }, [e]), d = a(() => (u?.modules ?? []).flatMap((e) => e.screens), [u]), [m, h] = s(0), g = t((e) => {
1537
- let t = d.findIndex((t) => t.name === e);
1538
- if (t >= 0) return h(t), !0;
1539
- let n = d.findIndex((t) => t.route_path === e);
1540
- if (n >= 0) return h(n), !0;
1615
+ }, [e]), m = a(() => (d?.modules ?? []).flatMap((e) => e.screens), [d]), h = t((e) => {
1616
+ if (n) {
1617
+ if (!o) {
1618
+ n(e);
1619
+ return;
1620
+ }
1621
+ try {
1622
+ let t = JSON.parse(e);
1623
+ n(JSON.stringify({
1624
+ ...t,
1625
+ messageId: o
1626
+ }));
1627
+ } catch {
1628
+ n(e);
1629
+ }
1630
+ }
1631
+ }, [n, o]), [g, _] = s(0), v = t((e) => {
1632
+ let t = m.findIndex((t) => t.name === e);
1633
+ if (t >= 0) return _(t), !0;
1634
+ let n = m.findIndex((t) => t.route_path === e);
1635
+ if (n >= 0) return _(n), !0;
1541
1636
  if (e === "/" || e === "") {
1542
- let e = d.findIndex((e) => e.is_main_page);
1543
- return h(e >= 0 ? e : 0), !0;
1637
+ let e = m.findIndex((e) => e.is_main_page);
1638
+ return _(e >= 0 ? e : 0), !0;
1544
1639
  }
1545
1640
  return !1;
1546
- }, [d]);
1641
+ }, [m]);
1547
1642
  r(() => {
1548
- let e = d.findIndex((e) => e.is_main_page);
1549
- h(e >= 0 ? e : 0);
1550
- }, [d]);
1551
- let _ = a(() => u?.style_entries ? te(u.style_entries, l, c) : "", [
1643
+ let e = m.findIndex((e) => e.is_main_page);
1644
+ _(e >= 0 ? e : 0);
1645
+ }, [m]);
1646
+ let y = a(() => d?.style_entries ? te(d.style_entries, u, l) : "", [
1647
+ d,
1552
1648
  u,
1553
- l,
1554
- c
1649
+ l
1555
1650
  ]);
1556
1651
  if (r(() => {
1557
- if (!_) return;
1652
+ if (!y) return;
1558
1653
  let e = document.createElement("style");
1559
- return e.setAttribute("data-gui-scope", l), e.textContent = _, document.head.appendChild(e), () => {
1654
+ return e.setAttribute("data-gui-scope", u), e.textContent = y, document.head.appendChild(e), () => {
1560
1655
  document.head.removeChild(e);
1561
1656
  };
1562
- }, [_, l]), !u) return /* @__PURE__ */ f("p", {
1657
+ }, [y, u]), !d) return /* @__PURE__ */ f("p", {
1563
1658
  className: "msg-text--muted",
1564
1659
  children: "[Invalid UI definition]"
1565
1660
  });
1566
- let v = d[m];
1567
- if (!v) return /* @__PURE__ */ f("p", {
1661
+ let b = m[g];
1662
+ if (!b) return /* @__PURE__ */ f("p", {
1568
1663
  className: "msg-text--muted",
1569
1664
  children: "[No screens defined]"
1570
1665
  });
1571
- let y = u.modules.length > 1, b = d.length > 1;
1666
+ let x = d.modules.length > 1, S = m.length > 1;
1572
1667
  return /* @__PURE__ */ f(D.Provider, {
1573
- value: o ?? null,
1668
+ value: c ?? null,
1574
1669
  children: /* @__PURE__ */ p("div", {
1575
- className: `gui-renderer${c ? " gui-renderer--chat" : ""}`,
1576
- children: [(y || b) && /* @__PURE__ */ f("div", {
1670
+ className: `gui-renderer${l ? " gui-renderer--chat" : ""}`,
1671
+ children: [(x || S) && /* @__PURE__ */ f("div", {
1577
1672
  className: "gui-renderer__tabs",
1578
1673
  role: "tablist",
1579
- children: d.map((e, t) => /* @__PURE__ */ p("button", {
1674
+ children: m.map((e, t) => /* @__PURE__ */ p("button", {
1580
1675
  role: "tab",
1581
- "aria-selected": t === m,
1582
- className: `gui-renderer__tab${t === m ? " gui-renderer__tab--active" : ""}`,
1583
- onClick: () => h(t),
1676
+ "aria-selected": t === g,
1677
+ className: `gui-renderer__tab${t === g ? " gui-renderer__tab--active" : ""}`,
1678
+ onClick: () => _(t),
1584
1679
  children: [e.name, e.is_main_page && /* @__PURE__ */ f("span", {
1585
1680
  className: "gui-renderer__tab-badge",
1586
1681
  children: "home"
1587
1682
  })]
1588
1683
  }, t))
1589
1684
  }), /* @__PURE__ */ f("div", {
1590
- className: `gui-renderer__screen ${l}`,
1591
- children: (v.view_elements ?? []).map((e) => U(e, n, g, c))
1685
+ className: `gui-renderer__screen ${u}`,
1686
+ children: (b.view_elements ?? []).map((e) => H(e, h, v, l))
1592
1687
  })]
1593
1688
  })
1594
1689
  });
1595
1690
  }
1596
1691
  //#endregion
1597
1692
  //#region src/components/ReasoningTrace.tsx
1598
- var pe = new Set([
1693
+ var he = new Set([
1599
1694
  h.TASK_ADDED,
1600
1695
  h.TASK_COMPLETED,
1601
1696
  h.TASK_SKIPPED
1602
- ]), me = new Set([
1697
+ ]), ge = new Set([
1603
1698
  "add_tasks",
1604
1699
  "complete_task",
1605
1700
  "skip_task"
1606
1701
  ]);
1607
- function he(e) {
1702
+ function _e(e) {
1608
1703
  if (e.kind !== h.LLM_TOOL_CALLS) return !1;
1609
1704
  let t = e.details?.tool_calls ?? [];
1610
- return t.length === 0 ? !1 : t.every((e) => e.name !== void 0 && me.has(e.name));
1705
+ return t.length === 0 ? !1 : t.every((e) => e.name !== void 0 && ge.has(e.name));
1611
1706
  }
1612
- function G({ trace: e }) {
1707
+ function W({ trace: e }) {
1613
1708
  let [t, n] = s(e.inProgress);
1614
1709
  r(() => {
1615
1710
  e.inProgress || n(!1);
1616
1711
  }, [e.inProgress]);
1617
- let i = e.inProgress || t, a = e.steps.filter((e) => !(e.kind === h.REASONING_STARTED || e.kind === h.REASONING_FINISHED || pe.has(e.kind) || he(e))), o = new Set(a.map((e) => e.step)).size;
1712
+ let i = e.inProgress || t, a = e.steps.filter((e) => !(e.kind === h.REASONING_STARTED || e.kind === h.REASONING_FINISHED || he.has(e.kind) || _e(e))), o = new Set(a.map((e) => e.step)).size;
1618
1713
  return /* @__PURE__ */ p("div", {
1619
1714
  className: `reasoning-trace${e.inProgress ? " reasoning-trace--live" : ""}`,
1620
1715
  children: [/* @__PURE__ */ p("button", {
@@ -1643,18 +1738,18 @@ function G({ trace: e }) {
1643
1738
  className: `reasoning-trace__body-wrapper${i ? " reasoning-trace__body-wrapper--open" : ""}`,
1644
1739
  children: /* @__PURE__ */ p("div", {
1645
1740
  className: "reasoning-trace__body-inner",
1646
- children: [/* @__PURE__ */ f(ve, { steps: a }), e.tasks.length > 0 && /* @__PURE__ */ f(ge, { tasks: e.tasks })]
1741
+ children: [/* @__PURE__ */ f(be, { steps: a }), e.tasks.length > 0 && /* @__PURE__ */ f(ve, { tasks: e.tasks })]
1647
1742
  })
1648
1743
  })]
1649
1744
  });
1650
1745
  }
1651
- var K = {
1746
+ var G = {
1652
1747
  [g.PENDING]: "pending",
1653
1748
  [g.IN_PROGRESS]: "in progress",
1654
1749
  [g.COMPLETED]: "completed",
1655
1750
  [g.SKIPPED]: "skipped"
1656
1751
  };
1657
- function ge({ tasks: e }) {
1752
+ function ve({ tasks: e }) {
1658
1753
  let t = e.reduce((e, t) => (e[t.status] = (e[t.status] ?? 0) + 1, e), {}), n = t[g.COMPLETED] ?? 0, r = t[g.SKIPPED] ?? 0, i = (t[g.PENDING] ?? 0) + (t[g.IN_PROGRESS] ?? 0);
1659
1754
  return /* @__PURE__ */ p("div", {
1660
1755
  className: "task-panel",
@@ -1686,8 +1781,8 @@ function ge({ tasks: e }) {
1686
1781
  className: `task-panel__item task-panel__item--${e.status}`,
1687
1782
  children: [/* @__PURE__ */ f("span", {
1688
1783
  className: `task-panel__box task-panel__box--${e.status}`,
1689
- title: K[e.status] ?? e.status,
1690
- "aria-label": K[e.status] ?? e.status
1784
+ title: G[e.status] ?? e.status,
1785
+ "aria-label": G[e.status] ?? e.status
1691
1786
  }), /* @__PURE__ */ p("span", {
1692
1787
  className: "task-panel__text",
1693
1788
  children: [
@@ -1710,7 +1805,7 @@ function ge({ tasks: e }) {
1710
1805
  })]
1711
1806
  });
1712
1807
  }
1713
- function _e(e) {
1808
+ function ye(e) {
1714
1809
  let t = [], n = 0;
1715
1810
  for (; n < e.length;) if (e[n].kind === h.TOOL_RESULT) {
1716
1811
  let r = n;
@@ -1731,7 +1826,7 @@ function _e(e) {
1731
1826
  }), n++;
1732
1827
  return t;
1733
1828
  }
1734
- function ve({ steps: e }) {
1829
+ function be({ steps: e }) {
1735
1830
  let t = [];
1736
1831
  for (let n of e) {
1737
1832
  let e = t[t.length - 1];
@@ -1750,12 +1845,12 @@ function ve({ steps: e }) {
1750
1845
  children: ["STEP ", t]
1751
1846
  }), /* @__PURE__ */ f("ol", {
1752
1847
  className: "reasoning-trace__step-list",
1753
- children: _e(e.events).map((e, t) => e.type === "tool_result_group" ? /* @__PURE__ */ f(ye, { steps: e.steps }, t) : /* @__PURE__ */ f(J, { step: e.step }, t))
1848
+ children: ye(e.events).map((e, t) => e.type === "tool_result_group" ? /* @__PURE__ */ f(Se, { steps: e.steps }, t) : /* @__PURE__ */ f(K, { step: e.step }, t))
1754
1849
  })]
1755
1850
  }, t))
1756
1851
  });
1757
1852
  }
1758
- var q = {
1853
+ var xe = {
1759
1854
  [h.LLM_TEXT]: "💬",
1760
1855
  [h.LLM_TOOL_CALLS]: "🛠️",
1761
1856
  [h.TOOL_RESULT]: "📥",
@@ -1765,7 +1860,7 @@ var q = {
1765
1860
  [h.PUSHBACK]: "↩️",
1766
1861
  [h.MAX_STEPS]: "⏱️"
1767
1862
  };
1768
- function ye({ steps: e }) {
1863
+ function Se({ steps: e }) {
1769
1864
  let [t, n] = s(!1);
1770
1865
  return /* @__PURE__ */ p("li", {
1771
1866
  className: "reasoning-trace__step",
@@ -1801,12 +1896,12 @@ function ye({ steps: e }) {
1801
1896
  ]
1802
1897
  }), t && /* @__PURE__ */ f("ol", {
1803
1898
  className: "reasoning-trace__step-list reasoning-trace__step-list--nested",
1804
- children: e.map((e, t) => /* @__PURE__ */ f(J, { step: e }, t))
1899
+ children: e.map((e, t) => /* @__PURE__ */ f(K, { step: e }, t))
1805
1900
  })]
1806
1901
  });
1807
1902
  }
1808
- function J({ step: e }) {
1809
- let [t, n] = s(!1), r = q[e.kind] ?? "🔹", i = e.details && Object.keys(e.details).length > 0;
1903
+ function K({ step: e }) {
1904
+ let [t, n] = s(!1), r = xe[e.kind] ?? "🔹", i = e.details && Object.keys(e.details).length > 0;
1810
1905
  return /* @__PURE__ */ p("li", {
1811
1906
  className: "reasoning-trace__step",
1812
1907
  children: [/* @__PURE__ */ p("button", {
@@ -1831,29 +1926,29 @@ function J({ step: e }) {
1831
1926
  }
1832
1927
  //#endregion
1833
1928
  //#region src/components/MessageBubble.tsx
1834
- function Y({ message: e, onOptionSelect: t, onUIInteract: n }) {
1835
- let { action: r, message: i, isUser: a, timestamp: o } = e, s = o ?? null;
1836
- if (!a && r === "reasoning_trace") {
1837
- let e = i;
1929
+ function q({ message: e, onOptionSelect: t, onUIInteract: n }) {
1930
+ let { id: r, action: i, message: a, isUser: o, timestamp: s } = e, c = s ?? null;
1931
+ if (!o && i === "reasoning_trace") {
1932
+ let e = a;
1838
1933
  return x(e) ? null : /* @__PURE__ */ p("div", {
1839
1934
  className: "message message--agent message--reasoning",
1840
- children: [s && /* @__PURE__ */ f("span", {
1935
+ children: [c && /* @__PURE__ */ f("span", {
1841
1936
  className: "message__timestamp",
1842
- children: s
1937
+ children: c
1843
1938
  }), /* @__PURE__ */ f("div", {
1844
1939
  className: "message__body",
1845
- children: /* @__PURE__ */ f(G, { trace: e })
1940
+ children: /* @__PURE__ */ f(W, { trace: e })
1846
1941
  })]
1847
1942
  });
1848
1943
  }
1849
- if (a) {
1850
- if (r === m.USER_VOICE) {
1851
- let e = typeof i == "string" ? i : i.data;
1944
+ if (o) {
1945
+ if (i === m.USER_VOICE) {
1946
+ let e = typeof a == "string" ? a : a.data;
1852
1947
  return /* @__PURE__ */ p("div", {
1853
1948
  className: "message message--user",
1854
- children: [s && /* @__PURE__ */ f("span", {
1949
+ children: [c && /* @__PURE__ */ f("span", {
1855
1950
  className: "message__timestamp message__timestamp--user",
1856
- children: s
1951
+ children: c
1857
1952
  }), /* @__PURE__ */ f("div", {
1858
1953
  className: "message__body",
1859
1954
  children: /* @__PURE__ */ f("div", {
@@ -1863,47 +1958,57 @@ function Y({ message: e, onOptionSelect: t, onUIInteract: n }) {
1863
1958
  })]
1864
1959
  });
1865
1960
  }
1866
- return r === m.USER_FILE ? /* @__PURE__ */ p("div", {
1961
+ return i === m.USER_FILE ? /* @__PURE__ */ p("div", {
1867
1962
  className: "message message--user",
1868
- children: [s && /* @__PURE__ */ f("span", {
1963
+ children: [c && /* @__PURE__ */ f("span", {
1869
1964
  className: "message__timestamp message__timestamp--user",
1870
- children: s
1965
+ children: c
1871
1966
  }), /* @__PURE__ */ f("div", {
1872
1967
  className: "message__body",
1873
1968
  children: /* @__PURE__ */ f("div", {
1874
1969
  className: "message__bubble message__bubble--user message__bubble--media",
1875
- children: /* @__PURE__ */ f(X, { content: i })
1970
+ children: /* @__PURE__ */ f(J, { content: a })
1876
1971
  })
1877
1972
  })]
1878
1973
  }) : /* @__PURE__ */ p("div", {
1879
1974
  className: "message message--user",
1880
- children: [s && /* @__PURE__ */ f("span", {
1975
+ children: [c && /* @__PURE__ */ f("span", {
1881
1976
  className: "message__timestamp message__timestamp--user",
1882
- children: s
1977
+ children: c
1883
1978
  }), /* @__PURE__ */ f("div", {
1884
1979
  className: "message__body",
1885
1980
  children: /* @__PURE__ */ f("div", {
1886
1981
  className: "message__bubble message__bubble--user",
1887
- children: typeof i == "string" ? i : JSON.stringify(i)
1982
+ children: typeof a == "string" ? a : JSON.stringify(a)
1888
1983
  })
1889
1984
  })]
1890
1985
  });
1891
1986
  }
1987
+ let l, u;
1988
+ if (i === m.AGENT_REPLY_GUI) try {
1989
+ let e = typeof a == "string" ? JSON.parse(a) : a;
1990
+ e?.width && (l = {
1991
+ width: e.width,
1992
+ maxWidth: e.width
1993
+ }, u = { width: "100%" });
1994
+ } catch {}
1892
1995
  return /* @__PURE__ */ p("div", {
1893
1996
  className: "message message--agent",
1894
- children: [s && /* @__PURE__ */ f("span", {
1997
+ style: l,
1998
+ children: [c && /* @__PURE__ */ f("span", {
1895
1999
  className: "message__timestamp",
1896
- children: s
2000
+ children: c
1897
2001
  }), /* @__PURE__ */ f("div", {
1898
2002
  className: "message__body",
2003
+ style: u,
1899
2004
  children: /* @__PURE__ */ f("div", {
1900
2005
  className: "message__bubble message__bubble--agent",
1901
- children: be(r, i, t, n)
2006
+ children: Ce(i, a, t, n, r)
1902
2007
  })
1903
2008
  })]
1904
2009
  });
1905
2010
  }
1906
- function be(e, t, n, r) {
2011
+ function Ce(e, t, n, r, i) {
1907
2012
  switch (e) {
1908
2013
  case m.AGENT_REPLY_STR: {
1909
2014
  let e = String(t), n = E(e);
@@ -1950,20 +2055,21 @@ function be(e, t, n, r) {
1950
2055
  FORCE_BODY: !0
1951
2056
  }) }
1952
2057
  });
1953
- case m.AGENT_REPLY_FILE: return /* @__PURE__ */ f(X, { content: t });
1954
- case m.AGENT_REPLY_IMAGE: return /* @__PURE__ */ f(xe, { content: t });
1955
- case m.AGENT_REPLY_DF: return /* @__PURE__ */ f(Se, { content: t });
1956
- case m.AGENT_REPLY_PLOTLY: return /* @__PURE__ */ f(Ce, { content: t });
1957
- case m.AGENT_REPLY_OPTIONS: return /* @__PURE__ */ f(we, {
2058
+ case m.AGENT_REPLY_FILE: return /* @__PURE__ */ f(J, { content: t });
2059
+ case m.AGENT_REPLY_IMAGE: return /* @__PURE__ */ f(we, { content: t });
2060
+ case m.AGENT_REPLY_DF: return /* @__PURE__ */ f(Te, { content: t });
2061
+ case m.AGENT_REPLY_PLOTLY: return /* @__PURE__ */ f(Ee, { content: t });
2062
+ case m.AGENT_REPLY_OPTIONS: return /* @__PURE__ */ f(De, {
1958
2063
  content: t,
1959
2064
  onSelect: n
1960
2065
  });
1961
- case m.AGENT_REPLY_LOCATION: return /* @__PURE__ */ f(Te, { content: t });
1962
- case m.AGENT_REPLY_RAG: return /* @__PURE__ */ f(Ee, { content: t });
1963
- case m.AGENT_REPLY_AUDIO: return /* @__PURE__ */ f(De, { content: t });
1964
- case m.AGENT_REPLY_GUI: return /* @__PURE__ */ f(W, {
2066
+ case m.AGENT_REPLY_LOCATION: return /* @__PURE__ */ f(Oe, { content: t });
2067
+ case m.AGENT_REPLY_RAG: return /* @__PURE__ */ f(ke, { content: t });
2068
+ case m.AGENT_REPLY_AUDIO: return /* @__PURE__ */ f(Ae, { content: t });
2069
+ case m.AGENT_REPLY_GUI: return /* @__PURE__ */ f(U, {
1965
2070
  content: t,
1966
2071
  onInteract: r,
2072
+ messageId: i,
1967
2073
  chatMode: !0
1968
2074
  });
1969
2075
  default: return /* @__PURE__ */ p("p", {
@@ -1976,7 +2082,7 @@ function be(e, t, n, r) {
1976
2082
  });
1977
2083
  }
1978
2084
  }
1979
- function X({ content: e }) {
2085
+ function J({ content: e }) {
1980
2086
  let t = e, n = t.data ?? t.base64 ?? "";
1981
2087
  function r() {
1982
2088
  try {
@@ -1994,7 +2100,7 @@ function X({ content: e }) {
1994
2100
  children: ["📄 ", t.name ?? "Download file"]
1995
2101
  });
1996
2102
  }
1997
- function xe({ content: e }) {
2103
+ function we({ content: e }) {
1998
2104
  let t, n;
1999
2105
  if (typeof e == "string") t = e, n = "image/png";
2000
2106
  else {
@@ -2015,7 +2121,7 @@ function xe({ content: e }) {
2015
2121
  children: "Image unavailable"
2016
2122
  });
2017
2123
  }
2018
- function Se({ content: e }) {
2124
+ function Te({ content: e }) {
2019
2125
  let [t, n] = s(null), [r, i] = s(!0), a = [], o = [];
2020
2126
  if (Array.isArray(e) && e.length > 0) a = Object.keys(e[0]), o = e.map((e) => a.map((t) => e[t]));
2021
2127
  else if (typeof e == "object" && e) {
@@ -2056,7 +2162,7 @@ function Se({ content: e }) {
2056
2162
  })
2057
2163
  });
2058
2164
  }
2059
- function Ce({ content: e }) {
2165
+ function Ee({ content: e }) {
2060
2166
  let t = o(null);
2061
2167
  return r(() => {
2062
2168
  let n = t.current;
@@ -2086,7 +2192,7 @@ function Ce({ content: e }) {
2086
2192
  className: "msg-plotly"
2087
2193
  });
2088
2194
  }
2089
- function we({ content: e, onSelect: t }) {
2195
+ function De({ content: e, onSelect: t }) {
2090
2196
  let n;
2091
2197
  return n = Array.isArray(e) ? e.map(String) : typeof e == "object" && e ? Object.values(e).map(String) : [], /* @__PURE__ */ f("div", {
2092
2198
  className: "msg-options",
@@ -2097,7 +2203,7 @@ function we({ content: e, onSelect: t }) {
2097
2203
  }, n))
2098
2204
  });
2099
2205
  }
2100
- function Te({ content: e }) {
2206
+ function Oe({ content: e }) {
2101
2207
  let { latitude: t, longitude: n, zoom: r = 15 } = e, i = 360 / 2 ** (r + 1), a = `https://www.openstreetmap.org/export/embed.html?bbox=${`${n - i},${t - i},${n + i},${t + i}`}&layer=mapnik&marker=${t},${n}`, o = `https://www.openstreetmap.org/?mlat=${t}&mlon=${n}#map=${r}/${t}/${n}`;
2102
2208
  return /* @__PURE__ */ p("div", {
2103
2209
  className: "msg-location",
@@ -2122,7 +2228,7 @@ function Te({ content: e }) {
2122
2228
  })]
2123
2229
  });
2124
2230
  }
2125
- function Ee({ content: e }) {
2231
+ function ke({ content: e }) {
2126
2232
  let [t, n] = s(!1), r = e, i = r.docs ?? r.documents ?? [];
2127
2233
  return /* @__PURE__ */ p("div", {
2128
2234
  className: "msg-rag",
@@ -2225,45 +2331,78 @@ function Ee({ content: e }) {
2225
2331
  })]
2226
2332
  });
2227
2333
  }
2228
- function Z({ data: e, mimeType: t = "audio/wav" }) {
2229
- let [n, i] = s(null);
2334
+ function Y(e, t, n) {
2335
+ for (let r = 0; r < n.length; r++) e.setUint8(t + r, n.charCodeAt(r));
2336
+ return t + n.length;
2337
+ }
2338
+ function X(e, t, n, r) {
2339
+ let i = r.length > 1 ? r[0] : 1, a = r.length > 1 ? r[r.length - 1] : r[0], o, s, c;
2340
+ if (n === "int16") o = e, s = 16, c = 1;
2341
+ else {
2342
+ let t;
2343
+ if (n === "float32") t = new Float32Array(e);
2344
+ else if (n === "float64") {
2345
+ let n = new Float64Array(e);
2346
+ t = new Float32Array(n.length);
2347
+ for (let e = 0; e < n.length; e++) t[e] = n[e];
2348
+ } else if (n === "int32") {
2349
+ let n = new Int32Array(e);
2350
+ t = new Float32Array(n.length);
2351
+ for (let e = 0; e < n.length; e++) t[e] = n[e] / 2147483648;
2352
+ } else t = new Float32Array(e);
2353
+ if (i > 1) {
2354
+ let e = new Float32Array(i * a);
2355
+ for (let n = 0; n < a; n++) for (let r = 0; r < i; r++) e[n * i + r] = t[r * a + n];
2356
+ o = e.buffer;
2357
+ } else o = t.buffer;
2358
+ s = 32, c = 3;
2359
+ }
2360
+ let l = o.byteLength, u = new ArrayBuffer(44 + l), d = new DataView(u), f = 0;
2361
+ return f = Y(d, f, "RIFF"), d.setUint32(f, 36 + l, !0), f += 4, f = Y(d, f, "WAVE"), f = Y(d, f, "fmt "), d.setUint32(f, 16, !0), f += 4, d.setUint16(f, c, !0), f += 2, d.setUint16(f, i, !0), f += 2, d.setUint32(f, t, !0), f += 4, d.setUint32(f, t * i * s / 8, !0), f += 4, d.setUint16(f, i * s / 8, !0), f += 2, d.setUint16(f, s, !0), f += 2, f = Y(d, f, "data"), d.setUint32(f, l, !0), f += 4, new Uint8Array(u, f).set(new Uint8Array(o)), new Blob([u], { type: "audio/wav" });
2362
+ }
2363
+ function Z({ data: e, sampleRate: t, dtype: n, shape: i }) {
2364
+ let [a, o] = s(null);
2230
2365
  return r(() => {
2231
- let n = null;
2366
+ let r = null;
2232
2367
  try {
2233
- let r = atob(e), a = new Uint8Array(r.length);
2234
- for (let e = 0; e < r.length; e++) a[e] = r.charCodeAt(e);
2235
- let o = new Blob([a], { type: t });
2236
- n = URL.createObjectURL(o), i(n);
2368
+ let a = atob(e), s = new Uint8Array(a.length);
2369
+ for (let e = 0; e < a.length; e++) s[e] = a.charCodeAt(e);
2370
+ let c;
2371
+ c = t && n && i ? X(s.buffer, t, n, i) : new Blob([s], { type: "audio/wav" }), r = URL.createObjectURL(c), o(r);
2237
2372
  } catch {
2238
- i(null);
2373
+ o(null);
2239
2374
  }
2240
2375
  return () => {
2241
- n && URL.revokeObjectURL(n);
2376
+ r && URL.revokeObjectURL(r);
2242
2377
  };
2243
- }, [e, t]), n ? /* @__PURE__ */ f("audio", {
2378
+ }, [
2379
+ e,
2380
+ t,
2381
+ n,
2382
+ JSON.stringify(i)
2383
+ ]), a ? /* @__PURE__ */ f("audio", {
2244
2384
  controls: !0,
2245
- src: n,
2385
+ src: a,
2246
2386
  className: "msg-audio__player"
2247
2387
  }) : /* @__PURE__ */ f("span", {
2248
2388
  className: "msg-text--muted",
2249
2389
  children: "Audio unavailable"
2250
2390
  });
2251
2391
  }
2252
- function De({ content: e }) {
2253
- let t = typeof e == "string" ? { data: e } : e;
2254
- return /* @__PURE__ */ p("div", {
2392
+ function Ae({ content: e }) {
2393
+ if (typeof e != "object" || !e) return /* @__PURE__ */ f("span", {
2394
+ className: "msg-text--muted",
2395
+ children: "Audio unavailable"
2396
+ });
2397
+ let t = e, n = t.metadata ?? {};
2398
+ return /* @__PURE__ */ f("div", {
2255
2399
  className: "msg-audio",
2256
- children: [/* @__PURE__ */ f(Z, {
2257
- data: t.data,
2258
- mimeType: t.type ?? "audio/wav"
2259
- }), t.sample_rate != null && /* @__PURE__ */ p("span", {
2260
- className: "msg-audio__meta",
2261
- children: [
2262
- t.sample_rate,
2263
- " Hz",
2264
- t.dtype ? ` · ${t.dtype}` : ""
2265
- ]
2266
- })]
2400
+ children: /* @__PURE__ */ f(Z, {
2401
+ data: t.audio_data_base64,
2402
+ sampleRate: n.sample_rate,
2403
+ dtype: n.dtype,
2404
+ shape: n.shape
2405
+ })
2267
2406
  });
2268
2407
  }
2269
2408
  //#endregion
@@ -2361,7 +2500,7 @@ function $({ messages: e, setMessages: n, status: i, send: a }) {
2361
2500
  }]), a(m.USER_MESSAGE, e);
2362
2501
  }
2363
2502
  function j(e) {
2364
- a(m.USER_UPDATE_UI, e);
2503
+ a(m.USER_GUI_EVENT, e);
2365
2504
  }
2366
2505
  function M(e) {
2367
2506
  let t = Array.from(e.target.files ?? []);
@@ -2390,7 +2529,7 @@ function $({ messages: e, setMessages: n, status: i, send: a }) {
2390
2529
  children: [e.length === 0 && /* @__PURE__ */ f("div", {
2391
2530
  className: "chat-area__empty",
2392
2531
  children: i === "connecting" ? "Connecting to agent…" : i === "connected" ? "Send a message to start the conversation" : i === "error" ? "Connection error — check the agent URL" : "Disconnected"
2393
- }), e.map((e) => /* @__PURE__ */ f(Y, {
2532
+ }), e.map((e) => /* @__PURE__ */ f(q, {
2394
2533
  message: e,
2395
2534
  onOptionSelect: A,
2396
2535
  onUIInteract: j
@@ -2534,7 +2673,7 @@ function $({ messages: e, setMessages: n, status: i, send: a }) {
2534
2673
  }
2535
2674
  //#endregion
2536
2675
  //#region src/hooks/useWebSocket.ts
2537
- function Oe(e, n) {
2676
+ function je(e, n) {
2538
2677
  let [i, a] = s("disconnected"), c = o(null), l = o(n);
2539
2678
  return l.current = n, r(() => {
2540
2679
  if (!e) {
@@ -2576,4 +2715,4 @@ function Oe(e, n) {
2576
2715
  };
2577
2716
  }
2578
2717
  //#endregion
2579
- export { $ as ChatArea, W as GUIRenderer, Y as MessageBubble, m as PayloadAction, _ as REASONING_TRACE_ACTION, h as ReasoningStepKind, G as ReasoningTrace, g as TaskStatus, E as detectContentKind, x as isEmptyTrace, y as isReasoningEnd, v as isReasoningStart, T as looksLikeCode, C as looksLikeMarkdown, Oe as useWebSocket, b as visibleSteps };
2718
+ export { $ as ChatArea, U as GUIRenderer, q as MessageBubble, m as PayloadAction, _ as REASONING_TRACE_ACTION, h as ReasoningStepKind, W as ReasoningTrace, g as TaskStatus, E as detectContentKind, x as isEmptyTrace, y as isReasoningEnd, v as isReasoningStart, T as looksLikeCode, C as looksLikeMarkdown, je as useWebSocket, b as visibleSteps };
@@ -9,10 +9,11 @@ interface ChatWidgetProps {
9
9
  interface GUIRendererProps {
10
10
  content: unknown;
11
11
  onInteract?: (eventJson: string) => void;
12
+ messageId?: string;
12
13
  chatProps?: ChatWidgetProps;
13
14
  /** When true, backgrounds and explicit text colors are stripped so the GUI
14
15
  * blends with the surrounding chat interface typography and color scheme. */
15
16
  chatMode?: boolean;
16
17
  }
17
- export declare function GUIRenderer({ content, onInteract, chatProps, chatMode }: GUIRendererProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function GUIRenderer({ content, onInteract, messageId, chatProps, chatMode }: GUIRendererProps): import("react/jsx-runtime").JSX.Element;
18
19
  export {};
package/dist/style.css CHANGED
@@ -1,2 +1,2 @@
1
- .baf-chat{--bg:#f8f9fa;--surface:#fff;--border:#e2e8f0;--code-bg:#f1f5f9;--text-primary:#1a202c;--text-secondary:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-bg:#2563eb14;--error:#ef4444;--error-bg:#ef44441a}@media (prefers-color-scheme:dark){html:not([data-theme=light]) .baf-chat{--bg:#0f172a;--surface:#1e293b;--border:#334155;--code-bg:#1a2535;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--accent-bg:#3b82f61a;--error:#f87171;--error-bg:#f871711a}}[data-theme=dark] .baf-chat{--bg:#0f172a;--surface:#1e293b;--border:#334155;--code-bg:#1a2535;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--accent-bg:#3b82f61a;--error:#f87171;--error-bg:#f871711a}[data-theme=light] .baf-chat{--bg:#f8f9fa;--surface:#fff;--border:#e2e8f0;--code-bg:#f1f5f9;--text-primary:#1a202c;--text-secondary:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-bg:#2563eb14;--error:#ef4444;--error-bg:#ef44441a}.baf-chat *,.baf-chat :before,.baf-chat :after{box-sizing:border-box;margin:0;padding:0}.btn{cursor:pointer;border:none;border-radius:8px;padding:9px 18px;font-family:inherit;font-size:.9rem;font-weight:500;transition:background .15s,opacity .15s,color .15s}.btn--primary{background:var(--accent);color:#fff}.btn--primary:hover:not(:disabled){background:var(--accent-hover)}.btn--primary:disabled{opacity:.45;cursor:not-allowed}.btn--secondary{background:var(--border);color:var(--text-primary)}.btn--secondary:hover{filter:brightness(.93)}.btn--ghost{color:var(--text-secondary);background:0 0;padding:8px 12px}.btn--ghost:hover{background:var(--border);color:var(--text-primary)}.btn--icon{flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;padding:0;display:inline-flex}.gui-agent-widget{min-height:300px}.gui-agent-widget .chat-area{min-height:0}.gui-agent-widget .chat-area__messages{max-height:420px}.gui-agent-layout__content{flex:1;padding:16px;overflow:auto}.gui-agent-layout__placeholder{height:100%;color:var(--text-secondary);justify-content:center;align-items:center;font-size:.95rem;display:flex}.agent-selector{background:var(--bg);flex-direction:column;align-items:center;min-height:100vh;padding:64px 24px 40px;display:flex;position:relative}.agent-selector__topbar{position:absolute;top:16px;right:16px}.agent-selector__header{text-align:center;margin-bottom:48px}.agent-selector__title{color:var(--text-primary);margin-bottom:8px;font-size:2rem;font-weight:700}.agent-selector__subtitle{color:var(--text-secondary);font-size:1rem}.agent-selector__username-bar{align-items:center;gap:12px;width:100%;max-width:360px;margin-top:20px;display:flex}.agent-selector__username-label{color:var(--text-secondary);white-space:nowrap;font-size:.875rem;font-weight:500}.agent-selector__username-input{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:8px;outline:none;flex:1;padding:8px 12px;font-size:.9rem;transition:border-color .15s}.agent-selector__username-input:focus{border-color:var(--accent)}.agent-selector__grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;width:100%;max-width:900px;display:grid}.agent-card{background:var(--surface);border:1px solid var(--border);cursor:pointer;text-align:left;width:100%;color:var(--text-primary);border-radius:12px;align-items:center;gap:14px;padding:20px;font-family:inherit;transition:box-shadow .2s,border-color .2s;display:flex;position:relative}.agent-card:hover{border-color:var(--accent);box-shadow:0 4px 16px #00000012}.agent-card--add{color:var(--text-secondary);background:0 0;border-style:dashed;flex-direction:column;justify-content:center;gap:6px;font-size:.95rem}.agent-card--add:hover{color:var(--accent)}.agent-card__icon{flex-shrink:0;font-size:1.8rem}.agent-card__plus{font-size:2rem;line-height:1}.agent-card__info{flex:1;min-width:0}.agent-card__name{margin-bottom:4px;font-size:1rem;font-weight:600}.agent-card__url{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:monospace;font-size:.8rem;overflow:hidden}.agent-card__remove{width:24px;height:24px;color:var(--text-secondary);cursor:pointer;opacity:0;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:1.2rem;line-height:1;transition:opacity .15s,background .15s,color .15s;display:flex;position:absolute;top:8px;right:8px}.agent-card:hover .agent-card__remove{opacity:1}.agent-card__remove:hover{background:var(--error-bg);color:var(--error)}.agent-card__mode-badge{letter-spacing:.02em;border-radius:999px;flex-shrink:0;margin-right:4px;padding:2px 7px;font-size:.72rem;font-weight:600}.agent-card__mode-badge--chat{color:#0369a1;background:#e0f2fe}.agent-card__mode-badge--gui{color:#7c3aed;background:#f3e8ff}.agent-selector__toolbar{justify-content:space-between;align-items:center;gap:12px;width:100%;max-width:900px;margin-bottom:16px;display:flex}.agent-selector__toolbar-actions{gap:10px;display:flex}.view-toggle{border:1px solid var(--border);border-radius:8px;display:flex;overflow:hidden}.view-toggle__btn{background:var(--surface);width:38px;height:36px;color:var(--text-secondary);cursor:pointer;border:none;justify-content:center;align-items:center;transition:background .15s,color .15s;display:flex}.view-toggle__btn+.view-toggle__btn{border-left:1px solid var(--border)}.view-toggle__btn--active{background:var(--accent);color:#fff}.view-toggle__btn:not(.view-toggle__btn--active):hover{background:var(--border);color:var(--text-primary)}.agent-selector__list{flex-direction:column;gap:12px;width:100%;max-width:900px;display:flex}.agent-selector__list .agent-card{width:100%}.agent-selector__list .agent-card--add{flex-direction:row;gap:10px;padding:16px 20px}.agent-card--edit{cursor:default;align-items:flex-start}.agent-card--edit:hover{border-color:var(--border);box-shadow:none}.agent-card--edit.agent-card--drag-over{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg)}.agent-card--edit.agent-card--dragging{opacity:.45}.agent-card--edit .agent-card__remove{opacity:1}.agent-card__drag-handle{width:28px;height:28px;color:var(--text-secondary);cursor:grab;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-top:4px;transition:background .15s,color .15s;display:flex}.agent-card__drag-handle:hover{background:var(--border);color:var(--text-primary)}.agent-card__drag-handle:active{cursor:grabbing}.agent-card__edit-fields{flex-direction:column;flex:1;gap:10px;min-width:0;padding-right:28px;display:flex}.agent-card__edit-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;flex-direction:column;gap:4px;font-size:.75rem;font-weight:600;display:flex}.agent-card__edit-label .modal__error{text-transform:none;letter-spacing:normal;font-weight:400}.agent-card__edit-input{border:1px solid var(--border);text-transform:none;letter-spacing:normal;background:var(--bg);color:var(--text-primary);border-radius:7px;outline:none;padding:8px 10px;font-family:inherit;font-size:.88rem;font-weight:400;transition:border-color .15s}.agent-card__edit-input:focus{border-color:var(--accent)}.mode-toggle{border:1px solid var(--border);border-radius:8px;gap:0;margin-top:2px;display:flex;overflow:hidden}.mode-toggle__btn{background:var(--bg);color:var(--text-secondary);cursor:pointer;border:none;flex:1;padding:8px 12px;font-family:inherit;font-size:.88rem;font-weight:500;transition:background .15s,color .15s}.mode-toggle__btn+.mode-toggle__btn{border-left:1px solid var(--border)}.mode-toggle__btn--active{background:var(--accent);color:#fff}.mode-toggle__btn:not(.mode-toggle__btn--active):hover{background:var(--border);color:var(--text-primary)}.mode-toggle--sm .mode-toggle__btn{padding:6px 10px;font-size:.8rem}.modal__hint{color:var(--text-secondary);margin:0;font-size:.8rem;line-height:1.45}.modal-overlay{z-index:100;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:16px;width:100%;max-width:440px;padding:32px;box-shadow:0 20px 60px #00000026}.modal__title{color:var(--text-primary);margin-bottom:24px;font-size:1.25rem;font-weight:700}.modal__form{flex-direction:column;gap:16px;display:flex}.modal__label{color:var(--text-secondary);flex-direction:column;gap:6px;font-size:.88rem;font-weight:500;display:flex}.modal__input{border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:8px;outline:none;padding:10px 14px;font-family:inherit;font-size:.95rem;transition:border-color .15s}.modal__input:focus{border-color:var(--accent)}.modal__input--error{border-color:var(--error)!important}.modal__error{color:var(--error);margin-top:2px;font-size:.82rem}.modal__actions{justify-content:flex-end;gap:10px;margin-top:8px;display:flex}.chat-layout{background:var(--bg);flex-direction:column;height:100vh;display:flex}.chat-layout__header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:12px;padding:10px 16px;display:flex}.chat-layout__agent-info{flex-direction:column;flex:1;min-width:0;display:flex}.chat-layout__agent-name{color:var(--text-primary);font-size:1rem;font-weight:600}.chat-layout__agent-url{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-family:monospace;font-size:.78rem;overflow:hidden}.chat-layout__body{flex:1;display:flex;overflow:hidden}.status-badge{flex-shrink:0;align-items:center;gap:7px;font-size:.85rem;font-weight:500;display:flex}.status-badge__dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.session-sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:240px;display:flex}.session-sidebar__header{border-bottom:1px solid var(--border);flex-direction:column;gap:10px;padding:14px 16px;display:flex}.session-sidebar__title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);font-size:.8rem;font-weight:600}.session-sidebar__new{flex-direction:column;gap:6px;display:flex}.session-sidebar__name-input{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:6px;outline:none;padding:6px 10px;font-size:.825rem;transition:border-color .15s}.session-sidebar__name-input:focus{border-color:var(--accent)}.session-sidebar__start-btn{width:100%;padding:6px 10px;font-size:.825rem}.session-sidebar__empty{color:var(--text-secondary);flex:1;justify-content:center;align-items:center;font-size:.875rem;display:flex}.session-sidebar__body{flex-direction:column;flex:1;padding:6px 0;display:flex;overflow-y:auto}.session-sidebar__status{color:var(--text-secondary);text-align:center;padding:12px 16px;font-size:.825rem}.session-sidebar__status--error{color:#ef4444}.session-item{border-left:3px solid #0000;flex-direction:row;align-items:center;transition:background .15s,border-color .15s;display:flex}.session-item:hover{background:var(--border)}.session-item--active{border-left-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.session-item__content{all:unset;cursor:pointer;flex-direction:column;flex:1;gap:2px;min-width:0;padding:8px 16px;display:flex}.session-item__delete{all:unset;width:28px;height:28px;color:var(--text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-right:8px;transition:background .15s,color .15s;display:flex}.session-item__delete:hover{color:#ef4444;background:#ef444426}.session-item__id{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-family:monospace;font-size:.75rem;overflow:hidden}.session-item__meta{color:var(--text-secondary);font-size:.7rem}.agent-card__username{color:var(--text-secondary);margin-top:2px;font-size:.75rem}.start-session{background:var(--bg);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}.start-session__name-input{background:var(--surface);border:1px solid var(--border);width:280px;color:var(--text);text-align:center;border-radius:8px;outline:none;padding:10px 14px;font-size:.9rem;transition:border-color .15s}.start-session__name-input:focus{border-color:var(--accent)}.start-session__btn{padding:14px 36px;font-size:1rem}.chat-area{background:var(--bg);flex-direction:column;flex:1;display:flex;overflow:hidden}.chat-area__messages{flex-direction:column;flex:1;gap:16px;padding:24px 1%;display:flex;overflow-y:auto}.chat-area__empty{color:var(--text-secondary);text-align:center;margin:auto;font-size:.95rem}.chat-area__input-row{background:0 0;border-top:none;align-items:flex-end;gap:10px;padding:14px 10%;display:flex}.chat-area__textarea{resize:none;border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:10px;outline:none;flex:1;min-height:42px;max-height:160px;padding:10px 14px;font-family:inherit;font-size:.95rem;line-height:1.5;transition:border-color .15s;overflow-y:auto}.chat-area__textarea:focus{border-color:var(--accent)}.chat-area__textarea:disabled{opacity:.5;cursor:not-allowed}.chat-area__send-btn{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:42px;height:42px;padding:0;font-size:1.2rem;line-height:1;display:flex}.chat-area__composer{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.chat-area__input-line{align-items:flex-end;display:flex}.chat-area__input-line .chat-area__textarea{flex:1}.chat-area__attachments{flex-wrap:wrap;gap:6px;padding:0 2px;display:flex}.attachment-chip{background:var(--code-bg);border:1px solid var(--border);border-radius:20px;align-items:center;gap:5px;max-width:220px;padding:4px 8px;font-size:.82rem;display:inline-flex}.attachment-chip__icon{flex-shrink:0}.attachment-chip__name{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);overflow:hidden}.attachment-chip__remove{all:unset;cursor:pointer;color:var(--text-secondary);border-radius:50%;flex-shrink:0;padding:1px 2px;font-size:.75rem;line-height:1;transition:color .1s}.attachment-chip__remove:hover{color:#ef4444}.chat-area__icon-btn{width:42px;height:42px;color:var(--text-secondary);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:1.5rem;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.chat-area__icon-btn:hover:not(:disabled){background:var(--border);color:var(--text-primary)}.chat-area__icon-btn:disabled{opacity:.4;cursor:not-allowed}.chat-area__mic-btn{color:var(--text-secondary)}.chat-area__mic-btn--recording{color:#ef4444;background:#ef444414;border-color:#ef4444;animation:1.2s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{box-shadow:0 0 #ef444459}50%{box-shadow:0 0 0 6px #ef444400}}.attach-menu-anchor{flex-shrink:0;position:relative}.attach-menu{background:var(--surface);border:1px solid var(--border);z-index:100;border-radius:10px;min-width:160px;position:absolute;bottom:calc(100% + 8px);right:0;overflow:hidden;box-shadow:0 4px 16px #0000001f}.attach-menu__item{all:unset;width:100%;color:var(--text-primary);cursor:pointer;box-sizing:border-box;align-items:center;gap:10px;padding:10px 14px;font-size:.9rem;transition:background .12s;display:flex}.attach-menu__item:hover{background:var(--border)}.attach-menu__item-icon{font-size:1rem}.message{gap:10px;max-width:78%;display:flex}.message--user{flex-direction:row-reverse;align-self:flex-end}.message--agent{align-self:flex-start}.message__avatar{display:none}.message__body{flex-direction:column;display:flex}.message__timestamp{color:var(--text-secondary);white-space:nowrap;opacity:0;pointer-events:none;flex-shrink:0;align-self:center;font-size:.72rem;transition:opacity .2s,transform .2s;transform:translate(-8px)}.message__timestamp--user{transform:translate(8px)}.message:hover .message__timestamp{opacity:1;transform:translate(0)}.message__bubble{word-break:break-word;font-size:.95rem;line-height:1.55}.message__bubble--user{background:var(--accent);color:#fff;border-radius:16px 16px 4px;padding:10px 14px}.message__bubble--agent{color:var(--text-primary);background:0 0;border:none;padding:2px 0}.msg-text{margin:0}.msg-text--muted{color:var(--text-secondary);font-style:italic}.msg-markdown{line-height:1.6}.msg-markdown p{margin:0 0 6px}.msg-markdown p:last-child{margin-bottom:0}.msg-markdown h1,.msg-markdown h2,.msg-markdown h3{margin:8px 0 4px;font-size:1em}.msg-markdown ul,.msg-markdown ol{margin:4px 0;padding-left:20px}.msg-markdown li{margin:2px 0}.msg-markdown code{background:var(--code-bg);border-radius:4px;padding:1px 5px;font-family:monospace;font-size:.87em}.msg-markdown pre{background:var(--code-bg);border-radius:6px;margin:6px 0;padding:10px 12px;overflow-x:auto}.msg-markdown pre code{background:0 0;padding:0;font-size:.85em}.msg-markdown blockquote{border-left:3px solid var(--border);color:var(--text-secondary);margin:4px 0;padding-left:10px}.msg-markdown table{border-collapse:collapse;width:100%;font-size:.88em}.msg-markdown th,.msg-markdown td{border:1px solid var(--border);text-align:left;padding:4px 8px}.msg-markdown th{background:var(--code-bg)}.msg-markdown a{color:var(--accent)}.msg-html{line-height:1.55}.msg-html a{color:var(--accent)}.msg-file-btn{background:var(--accent-bg);border:1px solid var(--accent);color:var(--accent);cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:9px 16px;font-family:inherit;font-size:.9rem;font-weight:500;transition:background .15s,color .15s;display:inline-flex}.msg-file-btn:hover{background:var(--accent);color:#fff}.msg-image img{border-radius:8px;max-width:100%;max-height:360px;display:block}.msg-table-wrapper{max-width:100%;overflow-x:auto}.msg-table{border-collapse:collapse;width:100%;font-size:.84rem}.msg-table th,.msg-table td{border:1px solid var(--border);text-align:left;white-space:nowrap;padding:6px 10px}.msg-table th{background:var(--code-bg);font-weight:600}.msg-table__th{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.msg-table__th:hover{background:color-mix(in srgb, var(--accent) 10%, var(--code-bg))}.msg-table__th--sorted{color:var(--accent)}.msg-table__sort-icon{opacity:.6;margin-left:4px;font-size:.75em;display:inline-block}.msg-table__th--sorted .msg-table__sort-icon{opacity:1}.msg-table tr:nth-child(2n){background:var(--code-bg)}.msg-plotly{border-radius:8px;width:100%;min-height:360px;overflow:hidden}.msg-code{background:var(--code-bg);color:var(--text-primary);border-radius:6px;margin-top:6px;padding:10px 12px;font-family:monospace;font-size:.82rem;overflow-x:auto}.msg-options{flex-wrap:wrap;gap:8px;display:flex}.msg-option-btn{border:1px solid var(--accent);color:var(--accent);cursor:pointer;background:0 0;border-radius:20px;padding:7px 14px;font-family:inherit;font-size:.9rem;transition:background .15s,color .15s}.msg-option-btn:hover{background:var(--accent);color:#fff}.msg-location{flex-direction:column;gap:8px;display:flex}.msg-location__map{border:1px solid var(--border);border-radius:8px;width:100%;height:300px;display:block}.msg-location__link{color:var(--accent);font-size:.88rem}.msg-audio{flex-direction:column;gap:6px;display:flex}.msg-audio__player{width:100%;min-width:260px;accent-color:var(--accent)}.msg-audio__meta{color:var(--text-secondary);font-size:.78rem}.message__bubble--media{box-shadow:none!important;background:0 0!important;border:none!important;padding:4px 0!important}.msg-rag__answer{margin:0 0 10px;line-height:1.6}.msg-rag__details{border:1px solid var(--border);border-radius:8px;overflow:hidden}.msg-rag__summary{cursor:pointer;width:100%;color:var(--text-secondary);background:var(--code-bg);text-align:left;-webkit-user-select:none;user-select:none;border:none;align-items:center;gap:6px;padding:8px 12px;font-size:.85rem;font-weight:500;display:flex}.msg-rag__summary-arrow{font-size:.65rem;transition:transform .25s;display:inline-block}.msg-rag__summary--open .msg-rag__summary-arrow{transform:rotate(90deg)}.msg-rag__body-wrapper{grid-template-rows:0fr;transition:grid-template-rows .3s;display:grid}.msg-rag__body-wrapper--open{grid-template-rows:1fr}.msg-rag__body-inner{overflow:hidden}.msg-rag__details-body{flex-direction:column;gap:10px;padding:12px;display:flex}.msg-rag__rag-answer-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;font-size:.78rem;font-weight:700}.msg-rag__llm-row{align-items:center;gap:8px;display:flex}.msg-rag__llm-label{color:var(--text-secondary);font-size:.8rem}.msg-rag__llm-badge{background:var(--code-bg);border:1px solid var(--border);color:var(--accent);border-radius:4px;padding:1px 6px;font-size:.78rem}.msg-rag__context-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;font-weight:600}.msg-rag__docs{flex-direction:column;gap:8px;display:flex}.msg-rag__doc-card{border:1px solid var(--border);border-radius:6px;font-size:.85rem;overflow:hidden}.msg-rag__doc-header{color:var(--text-secondary);background:var(--code-bg);border-bottom:1px solid var(--border);padding:5px 10px;font-size:.78rem;font-weight:600}.msg-rag__doc-row{border-bottom:1px solid var(--border);gap:8px;padding:5px 10px;line-height:1.5;display:flex}.msg-rag__doc-row:last-child{border-bottom:none}.msg-rag__doc-key{width:58px;color:var(--text-secondary);flex-shrink:0;padding-top:1px;font-size:.78rem;font-weight:600}.msg-rag__doc-value{word-break:break-word;flex:1}.msg-rag__doc-content{white-space:pre-wrap}.gui-renderer{background:#fff;flex-direction:column;max-width:100%;font-size:.9rem;display:flex;overflow:hidden}.gui-renderer__header{background:var(--code-bg);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:10px;padding:8px 14px;display:flex}.gui-renderer__title{color:var(--text-primary);font-size:.82rem;font-weight:600}.gui-renderer__description{color:var(--text-secondary);font-size:.78rem}.gui-renderer__tabs{background:var(--code-bg);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;padding:6px 10px 0;display:flex}.gui-renderer__tab{color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #0000;border-bottom:none;border-radius:6px 6px 0 0;align-items:center;gap:5px;padding:5px 12px;font-size:.8rem;transition:background .15s,color .15s;display:flex}.gui-renderer__tab:hover{background:var(--border);color:var(--text-primary)}.gui-renderer__tab--active{border-color:var(--border);color:var(--accent);background:#fff;font-weight:600}.gui-renderer__tab-badge{background:var(--accent);color:#fff;border-radius:4px;padding:1px 5px;font-size:.68rem}.gui-renderer__screen{color:#1a202c;background:#fff;min-width:280px;min-height:200px;padding:0;overflow-x:auto}.gui-renderer--chat{background:0 0;border:none;border-radius:0}.gui-renderer--chat .gui-renderer__screen{color:inherit;background:0 0;min-width:0;min-height:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:.95rem;line-height:1.55}.gui-renderer--chat .gui-renderer__header{border-bottom:1px solid var(--border);background:0 0;margin-bottom:8px;padding:0 0 6px}.gui-renderer--chat .gui-renderer__tabs{border-bottom:1px solid var(--border);background:0 0;margin-bottom:8px}.gui-renderer--chat input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=color]):not([type=file]),.gui-renderer--chat textarea,.gui-renderer--chat select{background:var(--surface)!important;color:var(--text-primary)!important;border-color:var(--border)!important}.gui-renderer--chat label,.gui-renderer--chat label>span{color:var(--text-primary)!important}.gui-renderer--chat .gui-ms-list{background:var(--surface)!important;border-color:var(--border)!important}.gui-renderer--chat .gui-ms-item{background:var(--surface)!important;color:var(--text-primary)!important;border-color:var(--border)!important}.gui-renderer--chat .gui-ms-item--selected,.gui-renderer--chat .gui-chip{background:var(--accent-bg,#1e3a5f)!important;color:var(--accent)!important}.gui-renderer--chat .gui-tags-container{background:var(--surface)!important;border-color:var(--border)!important}.gui-chart-placeholder{background:var(--code-bg);border:1px dashed var(--border);min-height:120px;color:var(--text-secondary);border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:.85rem;display:flex}.gui-chart-placeholder__icon{font-size:2rem;line-height:1}.gui-chart-placeholder__title{color:var(--text-primary);font-size:.9rem;font-weight:600}.gui-chart-placeholder__type{color:var(--text-secondary);font-size:.75rem}.gui-chart-placeholder__series{color:var(--text-secondary);font-size:.75rem;font-style:italic}.gui-metric-card{border:1px solid var(--border);background:#fff;border-radius:8px;flex-direction:column;gap:4px;padding:16px;display:flex}.gui-metric-card__title{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem}.gui-metric-card__value{font-size:2em;font-weight:700;line-height:1.1}.gui-metric-card__format{color:var(--text-secondary);font-size:.75rem}.gui-agent-component{border:1px dashed var(--border);color:var(--text-secondary);border-radius:8px;align-items:center;gap:8px;padding:12px 14px;font-size:.85rem;display:flex}.message--reasoning .message__body{width:100%;margin:4px 0}.reasoning-trace{border:1px dashed var(--border);color:var(--text-secondary);background:#7d7d7d0d;border-radius:8px;font-size:.82rem;overflow:hidden}.reasoning-trace--live{background:#6366f10f;border-style:solid;border-color:#6366f159}.reasoning-trace__summary{cursor:pointer;width:100%;font:inherit;color:var(--text-secondary);text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:8px 12px;display:flex}.reasoning-trace__summary:disabled{cursor:default}.reasoning-trace__summary:not(:disabled):hover{background:#7d7d7d0f}.reasoning-trace__icon{font-size:.95rem}.reasoning-trace--live .reasoning-trace__icon{animation:1.4s ease-in-out infinite reasoning-pulse}@keyframes reasoning-pulse{0%,to{opacity:1}50%{opacity:.45}}.reasoning-trace__label{flex:1;font-style:italic;font-weight:500}.reasoning-trace__chevron{font-size:.65rem;transition:transform .25s}.reasoning-trace__summary--open .reasoning-trace__chevron{transform:rotate(90deg)}.reasoning-trace__body-wrapper{grid-template-rows:0fr;transition:grid-template-rows .3s;display:grid}.reasoning-trace__body-wrapper--open{grid-template-rows:1fr}.reasoning-trace__body-inner{overflow:hidden}.reasoning-trace__steps{flex-direction:column;gap:10px;padding:0 12px 10px;display:flex}.reasoning-trace__step-group{flex-direction:column;gap:2px;display:flex}.reasoning-trace__step-header{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);opacity:.6;border-left:2px solid var(--border);font-variant-numeric:tabular-nums;padding:2px 0 2px 8px;font-size:.65rem;font-weight:700}.reasoning-trace__step-list{flex-direction:column;gap:2px;margin:0;padding:0 0 0 10px;list-style:none;display:flex}.reasoning-trace__step{flex-direction:column;display:flex}.reasoning-trace__step-line{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:baseline;gap:8px;padding:3px 6px;display:flex}.reasoning-trace__step-line:disabled{cursor:default}.reasoning-trace__step-line:not(:disabled):hover{background:#7d7d7d14}.reasoning-trace__step-icon{flex-shrink:0;font-size:.85rem}.reasoning-trace__step-summary{word-break:break-word;flex:1;font-size:.82rem;font-style:italic}.reasoning-trace__step-list--nested{border-left:2px solid #7d7d7d33;margin-top:2px;padding-left:20px}.reasoning-trace__step-details{white-space:pre-wrap;word-break:break-word;background:#0000000a;border-radius:6px;max-height:240px;margin:4px 0 6px 32px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;overflow:auto}.task-panel{border:1px solid var(--border);background:#7d7d7d0f;border-radius:6px;margin:4px 12px 12px;padding:10px 12px}.task-panel__header{align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.task-panel__title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);font-size:.7rem;font-weight:700}.task-panel__counts{color:var(--text-secondary);gap:6px;font-size:.72rem;display:flex}.task-panel__count{background:#7d7d7d1a;border-radius:4px;padding:1px 6px}.task-panel__count--completed{color:#16a34a}.task-panel__count--skipped{color:#ea580c}.task-panel__count--pending{opacity:.7}.task-panel__list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.task-panel__item{word-break:break-word;align-items:flex-start;gap:8px;font-size:.82rem;line-height:1.35;display:flex}.task-panel__text{flex:1;display:inline}.task-panel__item--completed .task-panel__description{color:var(--text-secondary);-webkit-text-decoration:line-through #16a34a66;text-decoration:line-through #16a34a66}.task-panel__item--skipped .task-panel__description{color:var(--text-secondary);-webkit-text-decoration:line-through #ea580c66;text-decoration:line-through #ea580c66}.task-panel__box{border:1.5px solid var(--border);background:0 0;border-radius:3px;flex-shrink:0;width:12px;height:12px;display:inline-block;position:relative;top:1px}.task-panel__box--pending,.task-panel__box--in_progress{border-color:var(--border);background:0 0}.task-panel__box--in_progress{background:#6366f126;border-color:#6366f1}.task-panel__box--completed{background:#16a34a;border-color:#16a34a}.task-panel__box--completed:after{content:"✓";color:#fff;justify-content:center;align-items:center;font-size:9px;font-weight:800;line-height:1;display:flex;position:absolute;inset:0}.task-panel__box--skipped{background:#ea580c;border-color:#ea580c}.task-panel__box--skipped:after{content:"⊘";color:#fff;justify-content:center;align-items:center;font-size:10px;font-weight:700;line-height:1;display:flex;position:absolute;inset:0}.task-panel__id{font-variant-numeric:tabular-nums;opacity:.55;margin-right:6px;font-size:.7rem}.task-panel__description{word-break:break-word}.task-panel__result{color:var(--text-secondary);opacity:.85;margin-top:2px;font-size:.74rem;font-style:italic;display:block}
1
+ .baf-chat{--bg:#f8f9fa;--surface:#fff;--border:#e2e8f0;--code-bg:#f1f5f9;--text-primary:#1a202c;--text-secondary:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-bg:#2563eb14;--error:#ef4444;--error-bg:#ef44441a}@media (prefers-color-scheme:dark){html:not([data-theme=light]) .baf-chat{--bg:#0f172a;--surface:#1e293b;--border:#334155;--code-bg:#1a2535;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--accent-bg:#3b82f61a;--error:#f87171;--error-bg:#f871711a}}[data-theme=dark] .baf-chat{--bg:#0f172a;--surface:#1e293b;--border:#334155;--code-bg:#1a2535;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--accent-bg:#3b82f61a;--error:#f87171;--error-bg:#f871711a}[data-theme=light] .baf-chat{--bg:#f8f9fa;--surface:#fff;--border:#e2e8f0;--code-bg:#f1f5f9;--text-primary:#1a202c;--text-secondary:#64748b;--accent:#2563eb;--accent-hover:#1d4ed8;--accent-bg:#2563eb14;--error:#ef4444;--error-bg:#ef44441a}.baf-chat *,.baf-chat :before,.baf-chat :after{box-sizing:border-box;margin:0;padding:0}.btn{cursor:pointer;border:none;border-radius:8px;padding:9px 18px;font-family:inherit;font-size:.9rem;font-weight:500;transition:background .15s,opacity .15s,color .15s}.btn--primary{background:var(--accent);color:#fff}.btn--primary:hover:not(:disabled){background:var(--accent-hover)}.btn--primary:disabled{opacity:.45;cursor:not-allowed}.btn--secondary{background:var(--border);color:var(--text-primary)}.btn--secondary:hover{filter:brightness(.93)}.btn--ghost{color:var(--text-secondary);background:0 0;padding:8px 12px}.btn--ghost:hover{background:var(--border);color:var(--text-primary)}.btn--icon{flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;padding:0;display:inline-flex}.gui-agent-widget{min-height:300px}.gui-agent-widget .chat-area{min-height:0}.gui-agent-widget .chat-area__messages{max-height:420px}.gui-agent-layout__content{flex:1;padding:16px;overflow:auto}.gui-agent-layout__placeholder{height:100%;color:var(--text-secondary);justify-content:center;align-items:center;font-size:.95rem;display:flex}.agent-selector{background:var(--bg);flex-direction:column;align-items:center;min-height:100vh;padding:64px 24px 40px;display:flex;position:relative}.agent-selector__topbar{position:absolute;top:16px;right:16px}.agent-selector__header{text-align:center;margin-bottom:48px}.agent-selector__title{color:var(--text-primary);margin-bottom:8px;font-size:2rem;font-weight:700}.agent-selector__subtitle{color:var(--text-secondary);font-size:1rem}.agent-selector__username-bar{align-items:center;gap:12px;width:100%;max-width:360px;margin-top:20px;display:flex}.agent-selector__username-label{color:var(--text-secondary);white-space:nowrap;font-size:.875rem;font-weight:500}.agent-selector__username-input{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:8px;outline:none;flex:1;padding:8px 12px;font-size:.9rem;transition:border-color .15s}.agent-selector__username-input:focus{border-color:var(--accent)}.agent-selector__grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;width:100%;max-width:900px;display:grid}.agent-card{background:var(--surface);border:1px solid var(--border);cursor:pointer;text-align:left;width:100%;color:var(--text-primary);border-radius:12px;align-items:center;gap:14px;padding:20px;font-family:inherit;transition:box-shadow .2s,border-color .2s;display:flex;position:relative}.agent-card:hover{border-color:var(--accent);box-shadow:0 4px 16px #00000012}.agent-card--add{color:var(--text-secondary);background:0 0;border-style:dashed;flex-direction:column;justify-content:center;gap:6px;font-size:.95rem}.agent-card--add:hover{color:var(--accent)}.agent-card__icon{flex-shrink:0;font-size:1.8rem}.agent-card__plus{font-size:2rem;line-height:1}.agent-card__info{flex:1;min-width:0}.agent-card__name{margin-bottom:4px;font-size:1rem;font-weight:600}.agent-card__url{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:monospace;font-size:.8rem;overflow:hidden}.agent-card__remove{width:24px;height:24px;color:var(--text-secondary);cursor:pointer;opacity:0;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;font-size:1.2rem;line-height:1;transition:opacity .15s,background .15s,color .15s;display:flex;position:absolute;top:8px;right:8px}.agent-card:hover .agent-card__remove{opacity:1}.agent-card__remove:hover{background:var(--error-bg);color:var(--error)}.agent-card__mode-badge{letter-spacing:.02em;border-radius:999px;flex-shrink:0;margin-right:4px;padding:2px 7px;font-size:.72rem;font-weight:600}.agent-card__mode-badge--chat{color:#0369a1;background:#e0f2fe}.agent-card__mode-badge--gui{color:#7c3aed;background:#f3e8ff}.agent-selector__toolbar{justify-content:space-between;align-items:center;gap:12px;width:100%;max-width:900px;margin-bottom:16px;display:flex}.agent-selector__toolbar-actions{gap:10px;display:flex}.view-toggle{border:1px solid var(--border);border-radius:8px;display:flex;overflow:hidden}.view-toggle__btn{background:var(--surface);width:38px;height:36px;color:var(--text-secondary);cursor:pointer;border:none;justify-content:center;align-items:center;transition:background .15s,color .15s;display:flex}.view-toggle__btn+.view-toggle__btn{border-left:1px solid var(--border)}.view-toggle__btn--active{background:var(--accent);color:#fff}.view-toggle__btn:not(.view-toggle__btn--active):hover{background:var(--border);color:var(--text-primary)}.agent-selector__list{flex-direction:column;gap:12px;width:100%;max-width:900px;display:flex}.agent-selector__list .agent-card{width:100%}.agent-selector__list .agent-card--add{flex-direction:row;gap:10px;padding:16px 20px}.agent-card--edit{cursor:default;align-items:flex-start}.agent-card--edit:hover{border-color:var(--border);box-shadow:none}.agent-card--edit.agent-card--drag-over{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-bg)}.agent-card--edit.agent-card--dragging{opacity:.45}.agent-card--edit .agent-card__remove{opacity:1}.agent-card__drag-handle{width:28px;height:28px;color:var(--text-secondary);cursor:grab;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-top:4px;transition:background .15s,color .15s;display:flex}.agent-card__drag-handle:hover{background:var(--border);color:var(--text-primary)}.agent-card__drag-handle:active{cursor:grabbing}.agent-card__edit-fields{flex-direction:column;flex:1;gap:10px;min-width:0;padding-right:28px;display:flex}.agent-card__edit-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;flex-direction:column;gap:4px;font-size:.75rem;font-weight:600;display:flex}.agent-card__edit-label .modal__error{text-transform:none;letter-spacing:normal;font-weight:400}.agent-card__edit-input{border:1px solid var(--border);text-transform:none;letter-spacing:normal;background:var(--bg);color:var(--text-primary);border-radius:7px;outline:none;padding:8px 10px;font-family:inherit;font-size:.88rem;font-weight:400;transition:border-color .15s}.agent-card__edit-input:focus{border-color:var(--accent)}.mode-toggle{border:1px solid var(--border);border-radius:8px;gap:0;margin-top:2px;display:flex;overflow:hidden}.mode-toggle__btn{background:var(--bg);color:var(--text-secondary);cursor:pointer;border:none;flex:1;padding:8px 12px;font-family:inherit;font-size:.88rem;font-weight:500;transition:background .15s,color .15s}.mode-toggle__btn+.mode-toggle__btn{border-left:1px solid var(--border)}.mode-toggle__btn--active{background:var(--accent);color:#fff}.mode-toggle__btn:not(.mode-toggle__btn--active):hover{background:var(--border);color:var(--text-primary)}.mode-toggle--sm .mode-toggle__btn{padding:6px 10px;font-size:.8rem}.modal__hint{color:var(--text-secondary);margin:0;font-size:.8rem;line-height:1.45}.modal-overlay{z-index:100;background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:16px;width:100%;max-width:440px;padding:32px;box-shadow:0 20px 60px #00000026}.modal__title{color:var(--text-primary);margin-bottom:24px;font-size:1.25rem;font-weight:700}.modal__form{flex-direction:column;gap:16px;display:flex}.modal__label{color:var(--text-secondary);flex-direction:column;gap:6px;font-size:.88rem;font-weight:500;display:flex}.modal__input{border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:8px;outline:none;padding:10px 14px;font-family:inherit;font-size:.95rem;transition:border-color .15s}.modal__input:focus{border-color:var(--accent)}.modal__input--error{border-color:var(--error)!important}.modal__error{color:var(--error);margin-top:2px;font-size:.82rem}.modal__actions{justify-content:flex-end;gap:10px;margin-top:8px;display:flex}.chat-layout{background:var(--bg);flex-direction:column;height:100vh;display:flex}.chat-layout__header{background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:12px;padding:10px 16px;display:flex}.chat-layout__agent-info{flex-direction:column;flex:1;min-width:0;display:flex}.chat-layout__agent-name{color:var(--text-primary);font-size:1rem;font-weight:600}.chat-layout__agent-url{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-family:monospace;font-size:.78rem;overflow:hidden}.chat-layout__body{flex:1;display:flex;overflow:hidden}.status-badge{flex-shrink:0;align-items:center;gap:7px;font-size:.85rem;font-weight:500;display:flex}.status-badge__dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.session-sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;width:240px;display:flex}.session-sidebar__header{border-bottom:1px solid var(--border);flex-direction:column;gap:10px;padding:14px 16px;display:flex}.session-sidebar__title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);font-size:.8rem;font-weight:600}.session-sidebar__new{flex-direction:column;gap:6px;display:flex}.session-sidebar__name-input{background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:6px;outline:none;padding:6px 10px;font-size:.825rem;transition:border-color .15s}.session-sidebar__name-input:focus{border-color:var(--accent)}.session-sidebar__start-btn{width:100%;padding:6px 10px;font-size:.825rem}.session-sidebar__empty{color:var(--text-secondary);flex:1;justify-content:center;align-items:center;font-size:.875rem;display:flex}.session-sidebar__body{flex-direction:column;flex:1;padding:6px 0;display:flex;overflow-y:auto}.session-sidebar__status{color:var(--text-secondary);text-align:center;padding:12px 16px;font-size:.825rem}.session-sidebar__status--error{color:#ef4444}.session-item{border-left:3px solid #0000;flex-direction:row;align-items:center;transition:background .15s,border-color .15s;display:flex}.session-item:hover{background:var(--border)}.session-item--active{border-left-color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent)}.session-item__content{all:unset;cursor:pointer;flex-direction:column;flex:1;gap:2px;min-width:0;padding:8px 16px;display:flex}.session-item__delete{all:unset;width:28px;height:28px;color:var(--text-secondary);cursor:pointer;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;margin-right:8px;transition:background .15s,color .15s;display:flex}.session-item__delete:hover{color:#ef4444;background:#ef444426}.session-item__id{color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-family:monospace;font-size:.75rem;overflow:hidden}.session-item__meta{color:var(--text-secondary);font-size:.7rem}.agent-card__username{color:var(--text-secondary);margin-top:2px;font-size:.75rem}.start-session{background:var(--bg);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}.start-session__name-input{background:var(--surface);border:1px solid var(--border);width:280px;color:var(--text);text-align:center;border-radius:8px;outline:none;padding:10px 14px;font-size:.9rem;transition:border-color .15s}.start-session__name-input:focus{border-color:var(--accent)}.start-session__btn{padding:14px 36px;font-size:1rem}.chat-area{background:var(--bg);flex-direction:column;flex:1;display:flex;overflow:hidden}.chat-area__messages{flex-direction:column;flex:1;gap:16px;padding:24px 1%;display:flex;overflow-y:auto}.chat-area__empty{color:var(--text-secondary);text-align:center;margin:auto;font-size:.95rem}.chat-area__input-row{background:0 0;border-top:none;align-items:flex-end;gap:10px;padding:14px 10%;display:flex}.chat-area__textarea{resize:none;border:1px solid var(--border);background:var(--bg);color:var(--text-primary);border-radius:10px;outline:none;flex:1;min-height:42px;max-height:160px;padding:10px 14px;font-family:inherit;font-size:.95rem;line-height:1.5;transition:border-color .15s;overflow-y:auto}.chat-area__textarea:focus{border-color:var(--accent)}.chat-area__textarea:disabled{opacity:.5;cursor:not-allowed}.chat-area__send-btn{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:42px;height:42px;padding:0;font-size:1.2rem;line-height:1;display:flex}.chat-area__composer{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.chat-area__input-line{align-items:flex-end;display:flex}.chat-area__input-line .chat-area__textarea{flex:1}.chat-area__attachments{flex-wrap:wrap;gap:6px;padding:0 2px;display:flex}.attachment-chip{background:var(--code-bg);border:1px solid var(--border);border-radius:20px;align-items:center;gap:5px;max-width:220px;padding:4px 8px;font-size:.82rem;display:inline-flex}.attachment-chip__icon{flex-shrink:0}.attachment-chip__name{text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary);overflow:hidden}.attachment-chip__remove{all:unset;cursor:pointer;color:var(--text-secondary);border-radius:50%;flex-shrink:0;padding:1px 2px;font-size:.75rem;line-height:1;transition:color .1s}.attachment-chip__remove:hover{color:#ef4444}.chat-area__icon-btn{width:42px;height:42px;color:var(--text-secondary);border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:1.5rem;font-weight:400;line-height:1;transition:background .15s,color .15s;display:flex}.chat-area__icon-btn:hover:not(:disabled){background:var(--border);color:var(--text-primary)}.chat-area__icon-btn:disabled{opacity:.4;cursor:not-allowed}.chat-area__mic-btn{color:var(--text-secondary)}.chat-area__mic-btn--recording{color:#ef4444;background:#ef444414;border-color:#ef4444;animation:1.2s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{box-shadow:0 0 #ef444459}50%{box-shadow:0 0 0 6px #ef444400}}.attach-menu-anchor{flex-shrink:0;position:relative}.attach-menu{background:var(--surface);border:1px solid var(--border);z-index:100;border-radius:10px;min-width:160px;position:absolute;bottom:calc(100% + 8px);right:0;overflow:hidden;box-shadow:0 4px 16px #0000001f}.attach-menu__item{all:unset;width:100%;color:var(--text-primary);cursor:pointer;box-sizing:border-box;align-items:center;gap:10px;padding:10px 14px;font-size:.9rem;transition:background .12s;display:flex}.attach-menu__item:hover{background:var(--border)}.attach-menu__item-icon{font-size:1rem}.message{gap:10px;max-width:78%;display:flex}.message--user{flex-direction:row-reverse;align-self:flex-end}.message--agent{align-self:flex-start}.message__avatar{display:none}.message__body{flex-direction:column;display:flex}.message__timestamp{color:var(--text-secondary);white-space:nowrap;opacity:0;pointer-events:none;flex-shrink:0;align-self:center;font-size:.72rem;transition:opacity .2s,transform .2s;transform:translate(-8px)}.message__timestamp--user{transform:translate(8px)}.message:hover .message__timestamp{opacity:1;transform:translate(0)}.message__bubble{word-break:break-word;font-size:.95rem;line-height:1.55}.message__bubble--user{background:var(--accent);color:#fff;border-radius:16px 16px 4px;padding:10px 14px}.message__bubble--agent{color:var(--text-primary);background:0 0;border:none;padding:2px 0}.msg-text{margin:0}.msg-text--muted{color:var(--text-secondary);font-style:italic}.msg-markdown{line-height:1.6}.msg-markdown p{margin:0 0 6px}.msg-markdown p:last-child{margin-bottom:0}.msg-markdown h1,.msg-markdown h2,.msg-markdown h3{margin:8px 0 4px;font-size:1em}.msg-markdown ul,.msg-markdown ol{margin:4px 0;padding-left:20px}.msg-markdown li{margin:2px 0}.msg-markdown code{background:var(--code-bg);border-radius:4px;padding:1px 5px;font-family:monospace;font-size:.87em}.msg-markdown pre{background:var(--code-bg);border-radius:6px;margin:6px 0;padding:10px 12px;overflow-x:auto}.msg-markdown pre code{background:0 0;padding:0;font-size:.85em}.msg-markdown blockquote{border-left:3px solid var(--border);color:var(--text-secondary);margin:4px 0;padding-left:10px}.msg-markdown table{border-collapse:collapse;width:100%;font-size:.88em}.msg-markdown th,.msg-markdown td{border:1px solid var(--border);text-align:left;padding:4px 8px}.msg-markdown th{background:var(--code-bg)}.msg-markdown a{color:var(--accent)}.msg-html{line-height:1.55}.msg-html a{color:var(--accent)}.msg-file-btn{background:var(--accent-bg);border:1px solid var(--accent);color:var(--accent);cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:9px 16px;font-family:inherit;font-size:.9rem;font-weight:500;transition:background .15s,color .15s;display:inline-flex}.msg-file-btn:hover{background:var(--accent);color:#fff}.msg-image img{border-radius:8px;max-width:100%;max-height:360px;display:block}.msg-table-wrapper{max-width:100%;overflow-x:auto}.msg-table{border-collapse:collapse;width:100%;font-size:.84rem}.msg-table th,.msg-table td{border:1px solid var(--border);text-align:left;white-space:nowrap;padding:6px 10px}.msg-table th{background:var(--code-bg);font-weight:600}.msg-table__th{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.msg-table__th:hover{background:color-mix(in srgb, var(--accent) 10%, var(--code-bg))}.msg-table__th--sorted{color:var(--accent)}.msg-table__sort-icon{opacity:.6;margin-left:4px;font-size:.75em;display:inline-block}.msg-table__th--sorted .msg-table__sort-icon{opacity:1}.msg-table tr:nth-child(2n){background:var(--code-bg)}.msg-plotly{border-radius:8px;width:100%;min-height:360px;overflow:hidden}.msg-code{background:var(--code-bg);color:var(--text-primary);border-radius:6px;margin-top:6px;padding:10px 12px;font-family:monospace;font-size:.82rem;overflow-x:auto}.msg-options{flex-wrap:wrap;gap:8px;display:flex}.msg-option-btn{border:1px solid var(--accent);color:var(--accent);cursor:pointer;background:0 0;border-radius:20px;padding:7px 14px;font-family:inherit;font-size:.9rem;transition:background .15s,color .15s}.msg-option-btn:hover{background:var(--accent);color:#fff}.msg-location{flex-direction:column;gap:8px;display:flex}.msg-location__map{border:1px solid var(--border);border-radius:8px;width:100%;height:300px;display:block}.msg-location__link{color:var(--accent);font-size:.88rem}.msg-audio{flex-direction:column;gap:6px;display:flex}.msg-audio__player{width:100%;min-width:260px;accent-color:var(--accent)}.msg-audio__meta{color:var(--text-secondary);font-size:.78rem}.message__bubble--media{box-shadow:none!important;background:0 0!important;border:none!important;padding:4px 0!important}.msg-rag__answer{margin:0 0 10px;line-height:1.6}.msg-rag__details{border:1px solid var(--border);border-radius:8px;overflow:hidden}.msg-rag__summary{cursor:pointer;width:100%;color:var(--text-secondary);background:var(--code-bg);text-align:left;-webkit-user-select:none;user-select:none;border:none;align-items:center;gap:6px;padding:8px 12px;font-size:.85rem;font-weight:500;display:flex}.msg-rag__summary-arrow{font-size:.65rem;transition:transform .25s;display:inline-block}.msg-rag__summary--open .msg-rag__summary-arrow{transform:rotate(90deg)}.msg-rag__body-wrapper{grid-template-rows:0fr;transition:grid-template-rows .3s;display:grid}.msg-rag__body-wrapper--open{grid-template-rows:1fr}.msg-rag__body-inner{overflow:hidden}.msg-rag__details-body{flex-direction:column;gap:10px;padding:12px;display:flex}.msg-rag__rag-answer-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;font-size:.78rem;font-weight:700}.msg-rag__llm-row{align-items:center;gap:8px;display:flex}.msg-rag__llm-label{color:var(--text-secondary);font-size:.8rem}.msg-rag__llm-badge{background:var(--code-bg);border:1px solid var(--border);color:var(--accent);border-radius:4px;padding:1px 6px;font-size:.78rem}.msg-rag__context-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;font-weight:600}.msg-rag__docs{flex-direction:column;gap:8px;display:flex}.msg-rag__doc-card{border:1px solid var(--border);border-radius:6px;font-size:.85rem;overflow:hidden}.msg-rag__doc-header{color:var(--text-secondary);background:var(--code-bg);border-bottom:1px solid var(--border);padding:5px 10px;font-size:.78rem;font-weight:600}.msg-rag__doc-row{border-bottom:1px solid var(--border);gap:8px;padding:5px 10px;line-height:1.5;display:flex}.msg-rag__doc-row:last-child{border-bottom:none}.msg-rag__doc-key{width:58px;color:var(--text-secondary);flex-shrink:0;padding-top:1px;font-size:.78rem;font-weight:600}.msg-rag__doc-value{word-break:break-word;flex:1}.msg-rag__doc-content{white-space:pre-wrap}.gui-renderer{background:#fff;flex-direction:column;max-width:100%;font-size:.9rem;display:flex;overflow:hidden}.gui-renderer__header{background:var(--code-bg);border-bottom:1px solid var(--border);flex-shrink:0;align-items:center;gap:10px;padding:8px 14px;display:flex}.gui-renderer__title{color:var(--text-primary);font-size:.82rem;font-weight:600}.gui-renderer__description{color:var(--text-secondary);font-size:.78rem}.gui-renderer__tabs{background:var(--code-bg);border-bottom:1px solid var(--border);flex-wrap:wrap;gap:2px;padding:6px 10px 0;display:flex}.gui-renderer__tab{color:var(--text-secondary);cursor:pointer;background:0 0;border:1px solid #0000;border-bottom:none;border-radius:6px 6px 0 0;align-items:center;gap:5px;padding:5px 12px;font-size:.8rem;transition:background .15s,color .15s;display:flex}.gui-renderer__tab:hover{background:var(--border);color:var(--text-primary)}.gui-renderer__tab--active{border-color:var(--border);color:var(--accent);background:#fff;font-weight:600}.gui-renderer__tab-badge{background:var(--accent);color:#fff;border-radius:4px;padding:1px 5px;font-size:.68rem}.gui-renderer__screen{color:#1a202c;background:#fff;min-width:280px;min-height:200px;padding:0;overflow-x:auto}.gui-renderer--chat{background:0 0;border:none;border-radius:0}.gui-renderer--chat .gui-renderer__screen{color:inherit;background:0 0;min-width:0;min-height:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:.95rem;line-height:1.55}.gui-renderer--chat .gui-renderer__header{border-bottom:1px solid var(--border);background:0 0;margin-bottom:8px;padding:0 0 6px}.gui-renderer--chat .gui-renderer__tabs{border-bottom:1px solid var(--border);background:0 0;margin-bottom:8px}.gui-renderer--chat input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=color]):not([type=file]),.gui-renderer--chat textarea,.gui-renderer--chat select{background:var(--surface)!important;color:var(--text-primary)!important;border-color:var(--border)!important}.gui-renderer--chat label,.gui-renderer--chat label>span{color:var(--text-primary)!important}.gui-renderer--chat .gui-ms-list{background:var(--surface)!important;border-color:var(--border)!important}.gui-renderer--chat .gui-ms-item{background:var(--surface)!important;color:var(--text-primary)!important;border-color:var(--border)!important}.gui-renderer--chat .gui-ms-item--selected,.gui-renderer--chat .gui-chip{background:var(--accent-bg,#1e3a5f)!important;color:var(--accent)!important}.gui-renderer--chat .gui-tags-container{background:var(--surface)!important;border-color:var(--border)!important}.gui-chart-placeholder{background:var(--code-bg);border:1px dashed var(--border);min-height:120px;color:var(--text-secondary);border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:16px;font-size:.85rem;display:flex}.gui-chart-placeholder__icon{font-size:2rem;line-height:1}.gui-chart-placeholder__title{color:var(--text-primary);font-size:.9rem;font-weight:600}.gui-chart-placeholder__type{color:var(--text-secondary);font-size:.75rem}.gui-chart-placeholder__series{color:var(--text-secondary);font-size:.75rem;font-style:italic}.gui-metric-card{border:1px solid var(--border);background:#fff;border-radius:8px;flex-direction:column;gap:4px;padding:16px;display:flex}.gui-metric-card__title{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem}.gui-metric-card__value{font-size:2em;font-weight:700;line-height:1.1}.gui-metric-card__format{color:var(--text-secondary);font-size:.75rem}.gui-agent-component{border:1px dashed var(--border);color:var(--text-secondary);border-radius:8px;align-items:center;gap:8px;padding:12px 14px;font-size:.85rem;display:flex}.gui-form-btn{cursor:pointer;appearance:none;white-space:nowrap;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;padding:8px 20px;font-family:inherit;font-size:.875rem;font-weight:500;transition:background .15s,border-color .15s,box-shadow .15s,opacity .15s;display:inline-flex}.gui-form-btn--submit{background:var(--accent);color:#fff;border-color:var(--accent)}.gui-form-btn--submit:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover);box-shadow:0 2px 8px #2563eb47}.gui-form-btn--submit:active:not(:disabled){box-shadow:none;opacity:.9}.gui-form-btn--submit:disabled{opacity:.45;cursor:not-allowed}.gui-form-btn--cancel{color:var(--text-secondary);border-color:var(--border);background:0 0}.gui-form-btn--cancel:hover:not(:disabled){background:var(--border);color:var(--text-primary)}.gui-form-btn--outlined{color:var(--accent);border-color:var(--accent);background:0 0}.gui-form-btn--outlined:hover:not(:disabled){background:var(--accent-bg)}.gui-form-btn--outlined:disabled{opacity:.45;cursor:not-allowed}.gui-form-btn--flat{color:var(--accent);background:0 0;border-color:#0000;padding:8px 16px}.gui-form-btn--flat:hover:not(:disabled){background:var(--accent-bg)}.gui-form-btn--flat:disabled{opacity:.45;cursor:not-allowed}.gui-form-btn--fab{background:var(--accent);color:#fff;border-color:var(--accent);border-radius:50%;width:56px;height:56px;padding:0;box-shadow:0 4px 12px #2563eb59}.gui-form-btn--fab:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover);box-shadow:0 6px 16px #2563eb66}.gui-form-btn--fab:active:not(:disabled){box-shadow:0 2px 6px #2563eb4d}.gui-form-btn--fab:disabled{opacity:.45;cursor:not-allowed}.gui-renderer input[type=file]::file-selector-button{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;margin-right:10px;padding:5px 12px;font-family:inherit;font-size:.82rem;font-weight:500;transition:background .15s,box-shadow .15s}.gui-renderer input[type=file]::file-selector-button:hover{background:var(--accent-hover);box-shadow:0 2px 6px #2563eb40}.message--reasoning .message__body{width:100%;margin:4px 0}.reasoning-trace{border:1px dashed var(--border);color:var(--text-secondary);background:#7d7d7d0d;border-radius:8px;font-size:.82rem;overflow:hidden}.reasoning-trace--live{background:#6366f10f;border-style:solid;border-color:#6366f159}.reasoning-trace__summary{cursor:pointer;width:100%;font:inherit;color:var(--text-secondary);text-align:left;background:0 0;border:none;align-items:center;gap:8px;padding:8px 12px;display:flex}.reasoning-trace__summary:disabled{cursor:default}.reasoning-trace__summary:not(:disabled):hover{background:#7d7d7d0f}.reasoning-trace__icon{font-size:.95rem}.reasoning-trace--live .reasoning-trace__icon{animation:1.4s ease-in-out infinite reasoning-pulse}@keyframes reasoning-pulse{0%,to{opacity:1}50%{opacity:.45}}.reasoning-trace__label{flex:1;font-style:italic;font-weight:500}.reasoning-trace__chevron{font-size:.65rem;transition:transform .25s}.reasoning-trace__summary--open .reasoning-trace__chevron{transform:rotate(90deg)}.reasoning-trace__body-wrapper{grid-template-rows:0fr;transition:grid-template-rows .3s;display:grid}.reasoning-trace__body-wrapper--open{grid-template-rows:1fr}.reasoning-trace__body-inner{overflow:hidden}.reasoning-trace__steps{flex-direction:column;gap:10px;padding:0 12px 10px;display:flex}.reasoning-trace__step-group{flex-direction:column;gap:2px;display:flex}.reasoning-trace__step-header{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);opacity:.6;border-left:2px solid var(--border);font-variant-numeric:tabular-nums;padding:2px 0 2px 8px;font-size:.65rem;font-weight:700}.reasoning-trace__step-list{flex-direction:column;gap:2px;margin:0;padding:0 0 0 10px;list-style:none;display:flex}.reasoning-trace__step{flex-direction:column;display:flex}.reasoning-trace__step-line{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:baseline;gap:8px;padding:3px 6px;display:flex}.reasoning-trace__step-line:disabled{cursor:default}.reasoning-trace__step-line:not(:disabled):hover{background:#7d7d7d14}.reasoning-trace__step-icon{flex-shrink:0;font-size:.85rem}.reasoning-trace__step-summary{word-break:break-word;flex:1;font-size:.82rem;font-style:italic}.reasoning-trace__step-list--nested{border-left:2px solid #7d7d7d33;margin-top:2px;padding-left:20px}.reasoning-trace__step-details{white-space:pre-wrap;word-break:break-word;background:#0000000a;border-radius:6px;max-height:240px;margin:4px 0 6px 32px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;overflow:auto}.task-panel{border:1px solid var(--border);background:#7d7d7d0f;border-radius:6px;margin:4px 12px 12px;padding:10px 12px}.task-panel__header{align-items:baseline;gap:10px;margin-bottom:8px;display:flex}.task-panel__title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);font-size:.7rem;font-weight:700}.task-panel__counts{color:var(--text-secondary);gap:6px;font-size:.72rem;display:flex}.task-panel__count{background:#7d7d7d1a;border-radius:4px;padding:1px 6px}.task-panel__count--completed{color:#16a34a}.task-panel__count--skipped{color:#ea580c}.task-panel__count--pending{opacity:.7}.task-panel__list{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.task-panel__item{word-break:break-word;align-items:flex-start;gap:8px;font-size:.82rem;line-height:1.35;display:flex}.task-panel__text{flex:1;display:inline}.task-panel__item--completed .task-panel__description{color:var(--text-secondary);-webkit-text-decoration:line-through #16a34a66;text-decoration:line-through #16a34a66}.task-panel__item--skipped .task-panel__description{color:var(--text-secondary);-webkit-text-decoration:line-through #ea580c66;text-decoration:line-through #ea580c66}.task-panel__box{border:1.5px solid var(--border);background:0 0;border-radius:3px;flex-shrink:0;width:12px;height:12px;display:inline-block;position:relative;top:1px}.task-panel__box--pending,.task-panel__box--in_progress{border-color:var(--border);background:0 0}.task-panel__box--in_progress{background:#6366f126;border-color:#6366f1}.task-panel__box--completed{background:#16a34a;border-color:#16a34a}.task-panel__box--completed:after{content:"✓";color:#fff;justify-content:center;align-items:center;font-size:9px;font-weight:800;line-height:1;display:flex;position:absolute;inset:0}.task-panel__box--skipped{background:#ea580c;border-color:#ea580c}.task-panel__box--skipped:after{content:"⊘";color:#fff;justify-content:center;align-items:center;font-size:10px;font-weight:700;line-height:1;display:flex;position:absolute;inset:0}.task-panel__id{font-variant-numeric:tabular-nums;opacity:.55;margin-right:6px;font-size:.7rem}.task-panel__description{word-break:break-word}.task-panel__result{color:var(--text-secondary);opacity:.85;margin-top:2px;font-size:.74rem;font-style:italic;display:block}
2
2
  /*$vite$:1*/
@@ -19,7 +19,6 @@ export declare const PayloadAction: {
19
19
  readonly AGENT_REPLY_AUDIO: "agent_reply_audio";
20
20
  readonly AGENT_REPLY_GUI: "agent_reply_gui";
21
21
  readonly AGENT_REPLY_GUI_UPDATE: "agent_reply_gui_update";
22
- readonly USER_UPDATE_UI: "user_update_ui";
23
22
  readonly USER_GUI_EVENT: "user_gui_event";
24
23
  readonly FETCH_USER_MESSAGES: "fetch_user_messages";
25
24
  };
@@ -29,4 +28,5 @@ export interface Payload {
29
28
  message: unknown;
30
29
  history?: boolean;
31
30
  timestamp?: string;
31
+ message_id?: string;
32
32
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "besser-agentic-framework-ui",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "React chat UI components for the BESSER Agentic Framework",
5
5
  "license": "MIT",
6
6
  "repository": {