@harnessio/ai-chat-core 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -146,7 +146,7 @@ class K {
|
|
|
146
146
|
this.executions.clear(), this.executionQueue = [], this.runningByName.clear();
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
class
|
|
149
|
+
class b {
|
|
150
150
|
constructor() {
|
|
151
151
|
c(this, "_subscriptions", /* @__PURE__ */ new Set());
|
|
152
152
|
}
|
|
@@ -163,7 +163,7 @@ class y {
|
|
|
163
163
|
return this._subscriptions.size;
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
-
class X extends
|
|
166
|
+
class X extends b {
|
|
167
167
|
constructor() {
|
|
168
168
|
super(...arguments);
|
|
169
169
|
c(this, "_state", {
|
|
@@ -266,7 +266,7 @@ function L() {
|
|
|
266
266
|
function F() {
|
|
267
267
|
return `thread-${Date.now()}-${++tt}`;
|
|
268
268
|
}
|
|
269
|
-
class I extends
|
|
269
|
+
class I extends b {
|
|
270
270
|
constructor(t) {
|
|
271
271
|
super();
|
|
272
272
|
c(this, "_state");
|
|
@@ -294,7 +294,7 @@ class I extends y {
|
|
|
294
294
|
return super.subscribe(t);
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
|
-
class et extends
|
|
297
|
+
class et extends b {
|
|
298
298
|
constructor() {
|
|
299
299
|
super(...arguments);
|
|
300
300
|
c(this, "_text", "");
|
|
@@ -322,7 +322,7 @@ class et extends y {
|
|
|
322
322
|
this._isSubmitting = t, this.notifySubscribers();
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
|
-
class
|
|
325
|
+
class M extends b {
|
|
326
326
|
constructor(t) {
|
|
327
327
|
super();
|
|
328
328
|
c(this, "composer");
|
|
@@ -395,7 +395,7 @@ class v extends y {
|
|
|
395
395
|
return super.subscribe(t);
|
|
396
396
|
}
|
|
397
397
|
}
|
|
398
|
-
class
|
|
398
|
+
class v extends b {
|
|
399
399
|
constructor(t) {
|
|
400
400
|
super();
|
|
401
401
|
c(this, "_messages", []);
|
|
@@ -475,10 +475,10 @@ class M extends y {
|
|
|
475
475
|
this.updateMessageStatus(e, { type: "complete" });
|
|
476
476
|
} catch (r) {
|
|
477
477
|
if (r instanceof Error && r.name === "AbortError")
|
|
478
|
-
this.updateMessageStatus(e, { type: "cancelled" });
|
|
478
|
+
this.completeStreamingContent(e), this.updateMessageStatus(e, { type: "cancelled" });
|
|
479
479
|
else {
|
|
480
480
|
const a = r instanceof Error ? r.message : "Unknown error";
|
|
481
|
-
this.updateMessageStatus(e, {
|
|
481
|
+
this.completeStreamingContent(e), this.updateMessageStatus(e, {
|
|
482
482
|
type: "error",
|
|
483
483
|
error: a
|
|
484
484
|
});
|
|
@@ -556,20 +556,23 @@ class M extends y {
|
|
|
556
556
|
r = {
|
|
557
557
|
type: e.part.type,
|
|
558
558
|
data: [],
|
|
559
|
-
parentId: e.part.parentId
|
|
559
|
+
parentId: e.part.parentId,
|
|
560
|
+
status: { type: "streaming" }
|
|
560
561
|
};
|
|
561
562
|
break;
|
|
562
563
|
case "text":
|
|
563
564
|
r = {
|
|
564
565
|
type: e.part.type,
|
|
565
566
|
data: "",
|
|
566
|
-
parentId: e.part.parentId
|
|
567
|
+
parentId: e.part.parentId,
|
|
568
|
+
status: { type: "streaming" }
|
|
567
569
|
};
|
|
568
570
|
break;
|
|
569
571
|
default:
|
|
570
572
|
r = {
|
|
571
573
|
type: e.part.type,
|
|
572
|
-
parentId: e.part.parentId
|
|
574
|
+
parentId: e.part.parentId,
|
|
575
|
+
status: { type: "streaming" }
|
|
573
576
|
};
|
|
574
577
|
}
|
|
575
578
|
t.content = [...t.content, r], this._currentPart = {
|
|
@@ -592,6 +595,19 @@ class M extends y {
|
|
|
592
595
|
console.warn("Received part-finish without part-start");
|
|
593
596
|
return;
|
|
594
597
|
}
|
|
598
|
+
const t = this._messages.findIndex((e) => e.id === this._currentPart.messageId);
|
|
599
|
+
if (t !== -1) {
|
|
600
|
+
const e = this._messages[t], n = e.content[this._currentPart.contentIndex];
|
|
601
|
+
if (n) {
|
|
602
|
+
n.status = { type: "complete" };
|
|
603
|
+
const r = [
|
|
604
|
+
...this._messages.slice(0, t),
|
|
605
|
+
{ ...e, timestamp: Date.now() },
|
|
606
|
+
...this._messages.slice(t + 1)
|
|
607
|
+
];
|
|
608
|
+
this.updateMessages(r);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
595
611
|
this._currentPart = null;
|
|
596
612
|
}
|
|
597
613
|
updateMessageStatus(t, e) {
|
|
@@ -607,6 +623,24 @@ class M extends y {
|
|
|
607
623
|
];
|
|
608
624
|
this.updateMessages(r);
|
|
609
625
|
}
|
|
626
|
+
completeStreamingContent(t) {
|
|
627
|
+
const e = this._messages.findIndex((u) => u.id === t);
|
|
628
|
+
if (e === -1) return;
|
|
629
|
+
const n = this._messages[e];
|
|
630
|
+
if (!n.content.some((u) => {
|
|
631
|
+
var d;
|
|
632
|
+
return ((d = u.status) == null ? void 0 : d.type) === "streaming";
|
|
633
|
+
})) return;
|
|
634
|
+
const a = n.content.map((u) => {
|
|
635
|
+
var d;
|
|
636
|
+
return ((d = u.status) == null ? void 0 : d.type) === "streaming" ? { ...u, status: { type: "complete" } } : u;
|
|
637
|
+
}), o = [
|
|
638
|
+
...this._messages.slice(0, e),
|
|
639
|
+
{ ...n, content: a, timestamp: Date.now() },
|
|
640
|
+
...this._messages.slice(e + 1)
|
|
641
|
+
];
|
|
642
|
+
this.updateMessages(o);
|
|
643
|
+
}
|
|
610
644
|
clear() {
|
|
611
645
|
this.updateMessages([]);
|
|
612
646
|
}
|
|
@@ -623,7 +657,7 @@ class M extends y {
|
|
|
623
657
|
this._title = t, this.notifySubscribers();
|
|
624
658
|
}
|
|
625
659
|
}
|
|
626
|
-
class st extends
|
|
660
|
+
class st extends b {
|
|
627
661
|
constructor(t) {
|
|
628
662
|
super();
|
|
629
663
|
c(this, "_mainThreadId");
|
|
@@ -640,11 +674,11 @@ class st extends y {
|
|
|
640
674
|
c(this, "_abortController", null);
|
|
641
675
|
c(this, "main");
|
|
642
676
|
this.config = t, this._mainThreadId = F();
|
|
643
|
-
const e = new
|
|
677
|
+
const e = new v({
|
|
644
678
|
streamAdapter: t.streamAdapter,
|
|
645
679
|
capabilityExecutionManager: t.capabilityExecutionManager
|
|
646
680
|
});
|
|
647
|
-
this.main = new
|
|
681
|
+
this.main = new M(e), this._threads.set(this._mainThreadId, this.main);
|
|
648
682
|
const n = {
|
|
649
683
|
id: this._mainThreadId,
|
|
650
684
|
title: "New Chat",
|
|
@@ -716,10 +750,10 @@ class st extends y {
|
|
|
716
750
|
this.notifySubscribers();
|
|
717
751
|
}
|
|
718
752
|
async switchToNewThread() {
|
|
719
|
-
const t = F(), e = new
|
|
753
|
+
const t = F(), e = new v({
|
|
720
754
|
streamAdapter: this.config.streamAdapter,
|
|
721
755
|
capabilityExecutionManager: this.config.capabilityExecutionManager
|
|
722
|
-
}), n = new
|
|
756
|
+
}), n = new M(e);
|
|
723
757
|
this._threads.set(t, n);
|
|
724
758
|
const r = {
|
|
725
759
|
id: t,
|
|
@@ -764,22 +798,22 @@ class st extends y {
|
|
|
764
798
|
});
|
|
765
799
|
let o, u;
|
|
766
800
|
Array.isArray(a) ? (o = a, u = void 0) : (o = a.threads, u = a.pagination), u ? (this._totalPages = u.pageCount ?? 0, this._totalCount = u.total ?? 0, this._currentPage = u.pageNumber ?? this._currentPage, this._hasMore = u.pageNumber !== void 0 && u.pageCount !== void 0 && u.pageNumber < u.pageCount - 1) : this._hasMore = !1;
|
|
767
|
-
for (const
|
|
768
|
-
if (this._threadStates.has(
|
|
801
|
+
for (const d of o) {
|
|
802
|
+
if (this._threadStates.has(d.id))
|
|
769
803
|
continue;
|
|
770
|
-
const
|
|
804
|
+
const g = new v({
|
|
771
805
|
streamAdapter: this.config.streamAdapter,
|
|
772
806
|
capabilityExecutionManager: this.config.capabilityExecutionManager
|
|
773
|
-
}), h = new
|
|
774
|
-
this._threads.set(
|
|
775
|
-
const
|
|
776
|
-
state:
|
|
807
|
+
}), h = new M(g);
|
|
808
|
+
this._threads.set(d.id, h), this._threadStates.set(d.id, d);
|
|
809
|
+
const l = new I({
|
|
810
|
+
state: d,
|
|
777
811
|
onSwitchTo: this.switchToThread.bind(this),
|
|
778
812
|
onRename: this.renameThread.bind(this),
|
|
779
813
|
onDelete: this.deleteThread.bind(this)
|
|
780
814
|
});
|
|
781
|
-
this._threadItems.set(
|
|
782
|
-
this.syncThreadStateFromRuntime(
|
|
815
|
+
this._threadItems.set(d.id, l), h.subscribe(() => {
|
|
816
|
+
this.syncThreadStateFromRuntime(d.id, h), this.notifySubscribers();
|
|
783
817
|
});
|
|
784
818
|
}
|
|
785
819
|
} catch (a) {
|
|
@@ -832,7 +866,7 @@ class st extends y {
|
|
|
832
866
|
this.notifySubscribers();
|
|
833
867
|
}
|
|
834
868
|
}
|
|
835
|
-
class
|
|
869
|
+
class bt extends b {
|
|
836
870
|
constructor(t) {
|
|
837
871
|
super();
|
|
838
872
|
c(this, "threads");
|
|
@@ -931,28 +965,28 @@ function rt() {
|
|
|
931
965
|
return !1;
|
|
932
966
|
for (var a = {}, o = 0; o < 10; o++)
|
|
933
967
|
a["_" + String.fromCharCode(o)] = o;
|
|
934
|
-
var u = Object.getOwnPropertyNames(a).map(function(
|
|
935
|
-
return a[
|
|
968
|
+
var u = Object.getOwnPropertyNames(a).map(function(g) {
|
|
969
|
+
return a[g];
|
|
936
970
|
});
|
|
937
971
|
if (u.join("") !== "0123456789")
|
|
938
972
|
return !1;
|
|
939
|
-
var
|
|
940
|
-
return "abcdefghijklmnopqrst".split("").forEach(function(
|
|
941
|
-
|
|
942
|
-
}), Object.keys(Object.assign({},
|
|
973
|
+
var d = {};
|
|
974
|
+
return "abcdefghijklmnopqrst".split("").forEach(function(g) {
|
|
975
|
+
d[g] = g;
|
|
976
|
+
}), Object.keys(Object.assign({}, d)).join("") === "abcdefghijklmnopqrst";
|
|
943
977
|
} catch {
|
|
944
978
|
return !1;
|
|
945
979
|
}
|
|
946
980
|
}
|
|
947
981
|
return E = n() ? Object.assign : function(r, a) {
|
|
948
|
-
for (var o, u = e(r),
|
|
949
|
-
o = Object(arguments[
|
|
982
|
+
for (var o, u = e(r), d, g = 1; g < arguments.length; g++) {
|
|
983
|
+
o = Object(arguments[g]);
|
|
950
984
|
for (var h in o)
|
|
951
985
|
s.call(o, h) && (u[h] = o[h]);
|
|
952
986
|
if (i) {
|
|
953
|
-
|
|
954
|
-
for (var
|
|
955
|
-
t.call(o, l
|
|
987
|
+
d = i(o);
|
|
988
|
+
for (var l = 0; l < d.length; l++)
|
|
989
|
+
t.call(o, d[l]) && (u[d[l]] = o[d[l]]);
|
|
956
990
|
}
|
|
957
991
|
}
|
|
958
992
|
return u;
|
|
@@ -976,12 +1010,12 @@ function nt() {
|
|
|
976
1010
|
s = t("react.element"), _.Fragment = t("react.fragment");
|
|
977
1011
|
}
|
|
978
1012
|
var e = i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, n = Object.prototype.hasOwnProperty, r = { key: !0, ref: !0, __self: !0, __source: !0 };
|
|
979
|
-
function a(o, u,
|
|
980
|
-
var
|
|
981
|
-
|
|
982
|
-
for (
|
|
983
|
-
if (o && o.defaultProps) for (
|
|
984
|
-
return { $$typeof: s, type: o, key:
|
|
1013
|
+
function a(o, u, d) {
|
|
1014
|
+
var g, h = {}, l = null, p = null;
|
|
1015
|
+
d !== void 0 && (l = "" + d), u.key !== void 0 && (l = "" + u.key), u.ref !== void 0 && (p = u.ref);
|
|
1016
|
+
for (g in u) n.call(u, g) && !r.hasOwnProperty(g) && (h[g] = u[g]);
|
|
1017
|
+
if (o && o.defaultProps) for (g in u = o.defaultProps, u) h[g] === void 0 && (h[g] = u[g]);
|
|
1018
|
+
return { $$typeof: s, type: o, key: l, ref: p, props: h, _owner: e.current };
|
|
985
1019
|
}
|
|
986
1020
|
return _.jsx = a, _.jsxs = a, _;
|
|
987
1021
|
}
|
|
@@ -991,7 +1025,7 @@ function it() {
|
|
|
991
1025
|
}
|
|
992
1026
|
var S = it();
|
|
993
1027
|
const $ = q(null);
|
|
994
|
-
function
|
|
1028
|
+
function yt({ runtime: i, children: s }) {
|
|
995
1029
|
return /* @__PURE__ */ S.jsx($.Provider, { value: i, children: s });
|
|
996
1030
|
}
|
|
997
1031
|
function at() {
|
|
@@ -1000,11 +1034,11 @@ function at() {
|
|
|
1000
1034
|
throw new Error("useAssistantRuntimeContext must be used within AssistantRuntimeProvider");
|
|
1001
1035
|
return i;
|
|
1002
1036
|
}
|
|
1003
|
-
function
|
|
1037
|
+
function f() {
|
|
1004
1038
|
return at();
|
|
1005
1039
|
}
|
|
1006
1040
|
function _t() {
|
|
1007
|
-
const i =
|
|
1041
|
+
const i = f();
|
|
1008
1042
|
return {
|
|
1009
1043
|
switchToThread: (s) => i.threads.switchToThread(s),
|
|
1010
1044
|
switchToNewThread: () => i.threads.switchToNewThread(),
|
|
@@ -1022,13 +1056,13 @@ function _t() {
|
|
|
1022
1056
|
};
|
|
1023
1057
|
}
|
|
1024
1058
|
function xt() {
|
|
1025
|
-
const i =
|
|
1059
|
+
const i = f(), [s, t] = x(i.threads.getState());
|
|
1026
1060
|
return w(() => i.threads.subscribe(() => {
|
|
1027
1061
|
t(i.threads.getState());
|
|
1028
1062
|
}), [i]), s;
|
|
1029
1063
|
}
|
|
1030
1064
|
function ot() {
|
|
1031
|
-
return
|
|
1065
|
+
return f().threads.getMainThread();
|
|
1032
1066
|
}
|
|
1033
1067
|
var P = { exports: {} }, A = {};
|
|
1034
1068
|
/**
|
|
@@ -1045,41 +1079,41 @@ function ut() {
|
|
|
1045
1079
|
if (D) return A;
|
|
1046
1080
|
D = 1;
|
|
1047
1081
|
var i = k;
|
|
1048
|
-
function s(h,
|
|
1049
|
-
return h ===
|
|
1082
|
+
function s(h, l) {
|
|
1083
|
+
return h === l && (h !== 0 || 1 / h === 1 / l) || h !== h && l !== l;
|
|
1050
1084
|
}
|
|
1051
1085
|
var t = typeof Object.is == "function" ? Object.is : s, e = i.useState, n = i.useEffect, r = i.useLayoutEffect, a = i.useDebugValue;
|
|
1052
|
-
function o(h,
|
|
1053
|
-
var
|
|
1086
|
+
function o(h, l) {
|
|
1087
|
+
var p = l(), y = e({ inst: { value: p, getSnapshot: l } }), m = y[0].inst, C = y[1];
|
|
1054
1088
|
return r(
|
|
1055
1089
|
function() {
|
|
1056
|
-
|
|
1090
|
+
m.value = p, m.getSnapshot = l, u(m) && C({ inst: m });
|
|
1057
1091
|
},
|
|
1058
|
-
[h,
|
|
1092
|
+
[h, p, l]
|
|
1059
1093
|
), n(
|
|
1060
1094
|
function() {
|
|
1061
|
-
return u(
|
|
1062
|
-
u(
|
|
1095
|
+
return u(m) && C({ inst: m }), h(function() {
|
|
1096
|
+
u(m) && C({ inst: m });
|
|
1063
1097
|
});
|
|
1064
1098
|
},
|
|
1065
1099
|
[h]
|
|
1066
|
-
), a(
|
|
1100
|
+
), a(p), p;
|
|
1067
1101
|
}
|
|
1068
1102
|
function u(h) {
|
|
1069
|
-
var
|
|
1103
|
+
var l = h.getSnapshot;
|
|
1070
1104
|
h = h.value;
|
|
1071
1105
|
try {
|
|
1072
|
-
var
|
|
1073
|
-
return !t(h,
|
|
1106
|
+
var p = l();
|
|
1107
|
+
return !t(h, p);
|
|
1074
1108
|
} catch {
|
|
1075
1109
|
return !0;
|
|
1076
1110
|
}
|
|
1077
1111
|
}
|
|
1078
|
-
function
|
|
1079
|
-
return
|
|
1112
|
+
function d(h, l) {
|
|
1113
|
+
return l();
|
|
1080
1114
|
}
|
|
1081
|
-
var
|
|
1082
|
-
return A.useSyncExternalStore = i.useSyncExternalStore !== void 0 ? i.useSyncExternalStore :
|
|
1115
|
+
var g = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? d : o;
|
|
1116
|
+
return A.useSyncExternalStore = i.useSyncExternalStore !== void 0 ? i.useSyncExternalStore : g, A;
|
|
1083
1117
|
}
|
|
1084
1118
|
var B;
|
|
1085
1119
|
function ct() {
|
|
@@ -1087,7 +1121,7 @@ function ct() {
|
|
|
1087
1121
|
}
|
|
1088
1122
|
var ht = ct();
|
|
1089
1123
|
function St() {
|
|
1090
|
-
const i =
|
|
1124
|
+
const i = f();
|
|
1091
1125
|
return ht.useSyncExternalStore(
|
|
1092
1126
|
(s) => i.subscribe(() => {
|
|
1093
1127
|
s();
|
|
@@ -1120,7 +1154,7 @@ function wt() {
|
|
|
1120
1154
|
}
|
|
1121
1155
|
function U(i, s) {
|
|
1122
1156
|
var r, a, o, u;
|
|
1123
|
-
const e =
|
|
1157
|
+
const e = f().pluginRegistry.getBestRendererForType(i);
|
|
1124
1158
|
if (!e)
|
|
1125
1159
|
return {
|
|
1126
1160
|
component: null,
|
|
@@ -1139,7 +1173,7 @@ function U(i, s) {
|
|
|
1139
1173
|
};
|
|
1140
1174
|
}
|
|
1141
1175
|
function Tt() {
|
|
1142
|
-
const i =
|
|
1176
|
+
const i = f(), [s, t] = x(i.contentFocus.state);
|
|
1143
1177
|
return w(() => i.contentFocus.subscribe(() => {
|
|
1144
1178
|
t(i.contentFocus.state);
|
|
1145
1179
|
}), [i]), {
|
|
@@ -1153,7 +1187,7 @@ function Tt() {
|
|
|
1153
1187
|
};
|
|
1154
1188
|
}
|
|
1155
1189
|
function dt(i) {
|
|
1156
|
-
const s =
|
|
1190
|
+
const s = f();
|
|
1157
1191
|
w(() => (i.execute && s.capabilityRegistry.registerHandler(i.name, { execute: i.execute }), i.render && s.capabilityRegistry.registerRenderer(i.name, {
|
|
1158
1192
|
component: i.render
|
|
1159
1193
|
}), () => {
|
|
@@ -1161,7 +1195,7 @@ function dt(i) {
|
|
|
1161
1195
|
}), [i.name, s]);
|
|
1162
1196
|
}
|
|
1163
1197
|
function lt(i) {
|
|
1164
|
-
const s =
|
|
1198
|
+
const s = f(), [t, e] = x(
|
|
1165
1199
|
() => s.capabilityExecutionManager.getExecution(i)
|
|
1166
1200
|
), [, n] = W((r) => r + 1, 0);
|
|
1167
1201
|
return w(() => {
|
|
@@ -1176,32 +1210,32 @@ function lt(i) {
|
|
|
1176
1210
|
}
|
|
1177
1211
|
const H = q(void 0);
|
|
1178
1212
|
function Ct({ children: i }) {
|
|
1179
|
-
const [s, t] = x({}), e = T((u,
|
|
1180
|
-
t((
|
|
1181
|
-
if (
|
|
1182
|
-
const { [u]: h, ...
|
|
1183
|
-
return
|
|
1213
|
+
const [s, t] = x({}), e = T((u, d) => {
|
|
1214
|
+
t((g) => {
|
|
1215
|
+
if (d === null) {
|
|
1216
|
+
const { [u]: h, ...l } = g;
|
|
1217
|
+
return l;
|
|
1184
1218
|
}
|
|
1185
1219
|
return {
|
|
1186
|
-
...
|
|
1187
|
-
[u]: { id: u, ...
|
|
1220
|
+
...g,
|
|
1221
|
+
[u]: { id: u, ...d }
|
|
1188
1222
|
};
|
|
1189
1223
|
});
|
|
1190
1224
|
}, []), n = T((u) => {
|
|
1191
|
-
t((
|
|
1192
|
-
const { [u]:
|
|
1225
|
+
t((d) => {
|
|
1226
|
+
const { [u]: g, ...h } = d;
|
|
1193
1227
|
return h;
|
|
1194
1228
|
});
|
|
1195
1229
|
}, []), r = T(() => Object.values(s).reduce(
|
|
1196
|
-
(u,
|
|
1197
|
-
const
|
|
1198
|
-
(h, [
|
|
1230
|
+
(u, d) => {
|
|
1231
|
+
const g = Object.entries(d.data).reduce(
|
|
1232
|
+
(h, [l, p]) => ({
|
|
1199
1233
|
...h,
|
|
1200
|
-
[
|
|
1234
|
+
[l]: typeof p == "string" ? p : JSON.stringify(p)
|
|
1201
1235
|
}),
|
|
1202
1236
|
{}
|
|
1203
1237
|
);
|
|
1204
|
-
return { ...u, ...
|
|
1238
|
+
return { ...u, ...g };
|
|
1205
1239
|
},
|
|
1206
1240
|
{}
|
|
1207
1241
|
), [s]), a = T(() => {
|
|
@@ -1218,20 +1252,20 @@ function Ct({ children: i }) {
|
|
|
1218
1252
|
);
|
|
1219
1253
|
return /* @__PURE__ */ S.jsx(H.Provider, { value: o, children: i });
|
|
1220
1254
|
}
|
|
1221
|
-
function
|
|
1255
|
+
function gt() {
|
|
1222
1256
|
const i = Q(H);
|
|
1223
1257
|
if (!i)
|
|
1224
1258
|
throw new Error("useChatContext must be used within a ChatContextProvider");
|
|
1225
1259
|
return i;
|
|
1226
1260
|
}
|
|
1227
1261
|
function It(i) {
|
|
1228
|
-
const { setContext: s, removeContext: t } =
|
|
1262
|
+
const { setContext: s, removeContext: t } = gt(), { id: e = "currentPage", ...n } = i;
|
|
1229
1263
|
w(() => (s(e, n), () => {
|
|
1230
1264
|
t(e);
|
|
1231
1265
|
}), [e, n.displayName, JSON.stringify(n.data), n.priority, n.icon]);
|
|
1232
1266
|
}
|
|
1233
|
-
function
|
|
1234
|
-
const t =
|
|
1267
|
+
function pt({ message: i, content: s }) {
|
|
1268
|
+
const t = f(), e = s, n = lt(e.capabilityId), r = t.capabilityRegistry.getRenderer(e.capabilityName);
|
|
1235
1269
|
if (!r || !n)
|
|
1236
1270
|
return null;
|
|
1237
1271
|
const a = r.component;
|
|
@@ -1247,16 +1281,16 @@ function gt({ message: i, content: s }) {
|
|
|
1247
1281
|
}
|
|
1248
1282
|
);
|
|
1249
1283
|
}
|
|
1250
|
-
function
|
|
1284
|
+
function Mt({ message: i, content: s }) {
|
|
1251
1285
|
const { component: t } = U(s.type);
|
|
1252
1286
|
if (s.type === "capability")
|
|
1253
|
-
return /* @__PURE__ */ S.jsx(
|
|
1287
|
+
return /* @__PURE__ */ S.jsx(pt, { message: i, content: s });
|
|
1254
1288
|
if (!t)
|
|
1255
1289
|
return null;
|
|
1256
1290
|
const e = t;
|
|
1257
1291
|
return /* @__PURE__ */ S.jsx(e, { content: s, message: i });
|
|
1258
1292
|
}
|
|
1259
|
-
function
|
|
1293
|
+
function vt({
|
|
1260
1294
|
message: i,
|
|
1261
1295
|
content: s,
|
|
1262
1296
|
context: t,
|
|
@@ -1308,11 +1342,11 @@ class Et {
|
|
|
1308
1342
|
const { done: o, value: u } = await e.read();
|
|
1309
1343
|
if (o || t != null && t.aborted) break;
|
|
1310
1344
|
r += n.decode(u, { stream: !0 });
|
|
1311
|
-
const
|
|
1345
|
+
const d = r.split(`
|
|
1312
1346
|
`);
|
|
1313
|
-
r =
|
|
1314
|
-
for (const
|
|
1315
|
-
const h =
|
|
1347
|
+
r = d.pop() || "";
|
|
1348
|
+
for (const g of d) {
|
|
1349
|
+
const h = g.trim();
|
|
1316
1350
|
if (!h) {
|
|
1317
1351
|
a = null;
|
|
1318
1352
|
continue;
|
|
@@ -1323,17 +1357,17 @@ class Et {
|
|
|
1323
1357
|
continue;
|
|
1324
1358
|
}
|
|
1325
1359
|
if (h.startsWith("data:")) {
|
|
1326
|
-
const
|
|
1327
|
-
if (
|
|
1360
|
+
const l = h.substring(5).trim();
|
|
1361
|
+
if (l === "eof" || h === "eof")
|
|
1328
1362
|
break;
|
|
1329
1363
|
try {
|
|
1330
|
-
const
|
|
1364
|
+
const p = JSON.parse(l);
|
|
1331
1365
|
if (a && this.shouldProcessEvent(a)) {
|
|
1332
|
-
const
|
|
1366
|
+
const y = this.convertEvent({
|
|
1333
1367
|
event: a,
|
|
1334
|
-
data:
|
|
1368
|
+
data: p
|
|
1335
1369
|
});
|
|
1336
|
-
|
|
1370
|
+
y && (yield y);
|
|
1337
1371
|
}
|
|
1338
1372
|
} catch {
|
|
1339
1373
|
}
|
|
@@ -1348,26 +1382,26 @@ class Et {
|
|
|
1348
1382
|
}
|
|
1349
1383
|
}
|
|
1350
1384
|
export {
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1385
|
+
bt as AssistantRuntime,
|
|
1386
|
+
yt as AssistantRuntimeProvider,
|
|
1387
|
+
vt as AuxiliaryRenderer,
|
|
1354
1388
|
Et as BaseSSEStreamAdapter,
|
|
1355
1389
|
K as CapabilityExecutionManager,
|
|
1356
1390
|
Y as CapabilityRegistry,
|
|
1357
|
-
|
|
1391
|
+
pt as CapabilityRendererComp,
|
|
1358
1392
|
Ct as ChatContextProvider,
|
|
1359
1393
|
et as ComposerRuntime,
|
|
1360
|
-
|
|
1394
|
+
Mt as ContentRenderer,
|
|
1361
1395
|
G as PluginRegistry,
|
|
1362
1396
|
I as ThreadListItemRuntime,
|
|
1363
1397
|
st as ThreadListRuntime,
|
|
1364
|
-
|
|
1365
|
-
|
|
1398
|
+
M as ThreadRuntime,
|
|
1399
|
+
v as ThreadRuntimeCore,
|
|
1366
1400
|
Rt as makeCapability,
|
|
1367
|
-
|
|
1401
|
+
f as useAssistantRuntime,
|
|
1368
1402
|
dt as useCapability,
|
|
1369
1403
|
lt as useCapabilityExecution,
|
|
1370
|
-
|
|
1404
|
+
gt as useChatContext,
|
|
1371
1405
|
wt as useComposer,
|
|
1372
1406
|
Tt as useContentFocus,
|
|
1373
1407
|
U as useContentRenderer,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/PluginRegistry.ts","../src/core/CapabilityRegistry.ts","../src/core/CapabilityExecutionManager.ts","../src/utils/Subscribable.ts","../src/runtime/ContentFocusRuntime/ContentFocusRuntime.ts","../src/utils/idGenerator.ts","../src/runtime/ThreadListItemRuntime/ThreadListItemRuntime.ts","../src/runtime/ComposerRuntime/ComposerRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntimeCore.ts","../src/runtime/ThreadListRuntime/ThreadListRuntime.tsx","../src/runtime/AssistantRuntime/AssistantRuntime.tsx","../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/jsx-runtime.js","../src/react/providers/AssistantRuntimeProvider.tsx","../src/react/hooks/useAssistantRuntime.ts","../src/react/hooks/useThreadList.ts","../src/react/hooks/useCurrentThread.ts","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/shim/index.js","../src/react/hooks/useMessages.ts","../src/react/hooks/useComposer.ts","../src/react/hooks/useContentRenderer.ts","../src/react/hooks/useContentFocus.ts","../src/react/hooks/useCapability.ts","../src/react/hooks/useCapabilityExecution.ts","../src/react/providers/ChatContextProvider.tsx","../src/react/hooks/usePageContext.ts","../src/react/components/CapabilityRenderer.tsx","../src/react/components/ContentRenderer.tsx","../src/react/components/AuxiliaryRenderer.tsx","../src/react/utils/makeCapability.tsx","../src/utils/BaseSSEStreamAdapter.ts"],"sourcesContent":["import { ChatPlugin, MessageRenderer } from '../types/plugin'\n\nexport class PluginRegistry {\n private plugins = new Map<string, ChatPlugin>()\n private renderersByType = new Map<string, MessageRenderer[]>()\n\n public registerPlugin(plugin: ChatPlugin): void {\n if (this.plugins.has(plugin.id)) {\n // handle duplicate plugin registration\n // show a warning / error\n }\n\n this.plugins.set(plugin.id, plugin)\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n renderers.push(renderer)\n renderers.sort((a, b) => (b?.priority ?? 0) - (a?.priority ?? 0))\n this.renderersByType.set(renderer.type, renderers)\n })\n }\n\n public unregisterPlugin(pluginId: string): boolean {\n const plugin = this.plugins.get(pluginId)\n if (!plugin) {\n return false\n }\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n const filteredRenderers = renderers.filter(r => !plugin.renderers.includes(r))\n\n if (filteredRenderers.length === 0) {\n this.renderersByType.delete(renderer.type)\n } else {\n this.renderersByType.set(renderer.type, filteredRenderers)\n }\n })\n\n return this.plugins.delete(pluginId)\n }\n\n public getPlugin(pluginId: string): ChatPlugin | undefined {\n return this.plugins.get(pluginId)\n }\n\n public getAllPlugins(): ChatPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public getRenderersByType(type: string): MessageRenderer[] {\n return this.renderersByType.get(type) || []\n }\n\n public getBestRendererForType(type: string): MessageRenderer | undefined {\n const renderers = this.getRenderersByType(type)\n return renderers[0]\n }\n\n public clear(): void {\n this.plugins.clear()\n this.renderersByType.clear()\n }\n}\n","import { CapabilityHandler, CapabilityRenderer } from '../types/capability'\n\nexport class CapabilityRegistry {\n private handlers = new Map<string, CapabilityHandler>()\n private renderers = new Map<string, CapabilityRenderer>()\n\n public registerHandler(name: string, handler: CapabilityHandler): void {\n this.handlers.set(name, handler)\n }\n\n public registerRenderer(name: string, renderer: CapabilityRenderer): void {\n this.renderers.set(name, renderer)\n }\n\n public unregister(name: string): void {\n this.handlers.delete(name)\n this.renderers.delete(name)\n }\n\n public getHandler(name: string): CapabilityHandler | undefined {\n return this.handlers.get(name)\n }\n\n public getRenderer(name: string): CapabilityRenderer | undefined {\n return this.renderers.get(name)\n }\n\n public getStrategy() {\n return 'queue'\n }\n\n public hasHandler(name: string): boolean {\n return this.handlers.has(name)\n }\n\n public hasRenderer(name: string): boolean {\n return this.renderers.has(name)\n }\n\n public clear(): void {\n this.handlers.clear()\n this.renderers.clear()\n }\n\n public getAllCapabilityNames(): string[] {\n return Array.from(new Set([...this.handlers.keys(), ...this.renderers.keys()]))\n }\n}\n","import { CapabilityExecution, CapabilityHandler } from '../types/capability'\n\nexport class CapabilityExecutionManager {\n private executions = new Map<string, CapabilityExecution>()\n private executionQueue: string[] = []\n private isProcessing = false\n private runningByName = new Map<string, string[]>()\n private subscribers = new Set<(executionId: string) => void>()\n private getHandler: (name: string) => CapabilityHandler | undefined\n\n constructor(getHandler: (name: string) => CapabilityHandler | undefined) {\n this.getHandler = getHandler\n }\n\n public async executeCapability<TArgs, TResult>(\n name: string,\n id: string,\n args: TArgs,\n messageId: string,\n strategy = 'queue'\n ): Promise<void> {\n const handler = this.getHandler(name)\n if (!handler) {\n console.warn(`No handler registered for capability: ${name}`)\n return\n }\n\n const execution: CapabilityExecution<TArgs, TResult> = {\n id,\n name,\n args,\n status: { type: 'queued' },\n timestamp: Date.now(),\n messageId\n }\n\n this.executions.set(id, execution)\n this.notifySubscribers(id)\n\n switch (strategy) {\n case 'queue':\n default:\n this.executionQueue.push(id)\n break\n }\n\n if (!this.isProcessing) {\n this.processQueue()\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessing || this.executionQueue.length === 0) {\n return\n }\n\n this.isProcessing = true\n\n while (this.executionQueue.length > 0) {\n const executionId = this.executionQueue.shift()!\n const execution = this.executions.get(executionId)\n\n if (!execution) continue\n\n const handler = this.getHandler(execution.name)\n if (!handler) continue\n\n execution.status = { type: 'running' }\n this.notifySubscribers(executionId)\n\n const running = this.runningByName.get(execution.name) || []\n running.push(executionId)\n this.runningByName.set(execution.name, running)\n\n try {\n const result = await handler.execute(execution.args, {\n messageId: execution.messageId,\n capabilityId: executionId\n })\n\n execution.status = { type: 'complete', result }\n execution.result = result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n execution.status = { type: 'error', error: errorMessage }\n execution.error = errorMessage\n } finally {\n const running = this.runningByName.get(execution.name) || []\n const index = running.indexOf(executionId)\n if (index > -1) {\n running.splice(index, 1)\n }\n if (running.length === 0) {\n this.runningByName.delete(execution.name)\n } else {\n this.runningByName.set(execution.name, running)\n }\n\n this.notifySubscribers(executionId)\n }\n }\n\n this.isProcessing = false\n }\n\n public getExecution(id: string): CapabilityExecution | undefined {\n return this.executions.get(id)\n }\n\n public getExecutionsByMessage(messageId: string): CapabilityExecution[] {\n return Array.from(this.executions.values()).filter(e => e.messageId === messageId)\n }\n\n public subscribe(callback: (executionId: string) => void): () => void {\n this.subscribers.add(callback)\n return () => this.subscribers.delete(callback)\n }\n\n private notifySubscribers(executionId: string): void {\n this.subscribers.forEach(callback => callback(executionId))\n }\n\n public clear(): void {\n this.executions.clear()\n this.executionQueue = []\n this.runningByName.clear()\n }\n}\n","export type Unsubscribe = () => void\n\nexport abstract class BaseSubscribable {\n private _subscriptions = new Set<() => void>()\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback)\n return () => {\n this._subscriptions.delete(callback)\n }\n }\n\n protected notifySubscribers(): void {\n for (const callback of this._subscriptions) {\n callback()\n }\n }\n\n protected getSubscriberCount(): number {\n return this._subscriptions.size\n }\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport type FocusContext = 'detail'\n\nexport interface ContentFocusState {\n isActive: boolean\n context: FocusContext | null\n focusedContent: MessageContent | null\n focusedMessage: Message | null\n focusedMessageId: string | null\n focusedContentIndex: number | null\n}\n\nexport class ContentFocusRuntime extends BaseSubscribable {\n private _state: ContentFocusState = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n\n public get state(): ContentFocusState {\n return this._state\n }\n\n public get isActive(): boolean {\n return this._state.isActive\n }\n\n public get context(): FocusContext | null {\n return this._state.context\n }\n\n public get focusedContent(): MessageContent | null {\n return this._state.focusedContent\n }\n\n public get focusedMessage(): Message | null {\n return this._state.focusedMessage\n }\n\n public get focusedMessageId(): string | null {\n return this._state.focusedMessageId\n }\n\n public get focusedContentIndex(): number | null {\n return this._state.focusedContentIndex\n }\n\n public focus(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n this._state = {\n isActive: true,\n context,\n focusedContent: content,\n focusedMessage: message,\n focusedMessageId: message.id,\n focusedContentIndex: contentIndex\n }\n this.notifySubscribers()\n }\n\n public blur(): void {\n this._state = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n this.notifySubscribers()\n }\n\n public toggle(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n if (\n this._state.isActive &&\n this._state.focusedMessageId === message.id &&\n this._state.focusedContentIndex === contentIndex &&\n this._state.context === context\n ) {\n this.blur()\n } else {\n this.focus(content, message, contentIndex, context)\n }\n }\n\n public switchContext(context: FocusContext): void {\n if (this._state.isActive && this._state.focusedContent) {\n this._state = {\n ...this._state,\n context\n }\n this.notifySubscribers()\n }\n }\n\n public focusNext(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex + 1 < currentMsg.content.length) {\n const nextContent = currentMsg.content[currentContentIndex + 1]\n this.focus(nextContent, currentMsg, currentContentIndex + 1, this._state.context || 'detail')\n return\n }\n\n // Try first content in next message\n if (currentMsgIndex + 1 < messages.length) {\n const nextMsg = messages[currentMsgIndex + 1]\n if (nextMsg.content.length > 0) {\n this.focus(nextMsg.content[0], nextMsg, 0, this._state.context || 'detail')\n }\n }\n }\n\n public focusPrevious(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex > 0) {\n const prevContent = currentMsg.content[currentContentIndex - 1]\n this.focus(prevContent, currentMsg, currentContentIndex - 1, this._state.context || 'detail')\n return\n }\n\n // Try last content in previous message\n if (currentMsgIndex > 0) {\n const prevMsg = messages[currentMsgIndex - 1]\n if (prevMsg.content.length > 0) {\n const lastIndex = prevMsg.content.length - 1\n this.focus(prevMsg.content[lastIndex], prevMsg, lastIndex, this._state.context || 'detail')\n }\n }\n }\n}\n","let messageIdCounter = 0\nlet threadIdCounter = 0\n\nexport function generateMessageId(): string {\n return `msg-${Date.now()}-${++messageIdCounter}`\n}\n\nexport function generateThreadId(): string {\n return `thread-${Date.now()}-${++threadIdCounter}`\n}\n\nexport function generateId(prefix = 'id'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n}\n","import { ThreadListItemState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\n\nexport interface ThreadListItemRuntimeConfig {\n state: ThreadListItemState\n onSwitchTo: (threadId: string) => Promise<void>\n onRename: (threadId: string, title: string) => Promise<void>\n onDelete: (threadId: string) => Promise<void>\n}\n\nexport class ThreadListItemRuntime extends BaseSubscribable {\n private _state: ThreadListItemState\n\n constructor(private config: ThreadListItemRuntimeConfig) {\n super()\n this._state = config.state\n }\n\n public get state(): ThreadListItemState {\n return this._state\n }\n\n public getState(): ThreadListItemState {\n return this._state\n }\n\n public updateState(state: ThreadListItemState): void {\n this._state = state\n this.notifySubscribers()\n }\n\n public async switchTo(): Promise<void> {\n await this.config.onSwitchTo(this._state.id)\n }\n\n public async rename(newTitle: string): Promise<void> {\n await this.config.onRename(this._state.id, newTitle)\n }\n\n public async delete(): Promise<void> {\n await this.config.onDelete(this._state.id)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ComposerState {\n text: string\n isSubmitting: boolean\n}\n\nexport class ComposerRuntime extends BaseSubscribable {\n private _text: string = ''\n private _isSubmitting: boolean = false\n\n public get text(): string {\n return this._text\n }\n\n public get isSubmitting(): boolean {\n return this._isSubmitting\n }\n\n public getState(): ComposerState {\n return {\n text: this._text,\n isSubmitting: this._isSubmitting\n }\n }\n\n public setText(text: string): void {\n this._text = text\n this.notifySubscribers()\n }\n\n public clear(): void {\n this._text = ''\n this.notifySubscribers()\n }\n\n public setSubmitting(isSubmitting: boolean): void {\n this._isSubmitting = isSubmitting\n this.notifySubscribers()\n }\n}\n\nexport default ComposerRuntime\n","import { AppendMessage, Message, TextContent } from '../../types/message'\nimport { RuntimeCapabilities, ThreadState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\nimport ComposerRuntime from '../ComposerRuntime/ComposerRuntime'\nimport { ThreadRuntimeCore } from './ThreadRuntimeCore'\n\nexport class ThreadRuntime extends BaseSubscribable {\n public readonly composer: ComposerRuntime\n\n constructor(private _core: ThreadRuntimeCore) {\n super()\n this.composer = new ComposerRuntime()\n\n // Subscribe to core changes and propagate\n this._core.subscribe(() => {\n this.notifySubscribers()\n })\n }\n\n public get messages(): readonly Message[] {\n return this._core.messages\n }\n\n public get isRunning(): boolean {\n return this._core.isRunning\n }\n\n public get isDisabled(): boolean {\n return this._core.isDisabled\n }\n\n public get capabilities(): RuntimeCapabilities {\n return this._core.capabilities\n }\n\n public get conversationId(): string | undefined {\n return this._core.conversationId\n }\n\n public get title(): string | undefined {\n return this._core.title\n }\n\n public getState(): ThreadState {\n return {\n threadId: 'main', // Will be set by ThreadListRuntime\n isDisabled: this._core.isDisabled,\n isRunning: this._core.isRunning,\n capabilities: this._core.capabilities,\n conversationId: this._core.conversationId,\n title: this._core.title\n }\n }\n\n public append(message: AppendMessage): void {\n this._core.append(message)\n }\n\n public async send(text: string): Promise<void> {\n if (!text.trim()) return\n\n this.composer.setSubmitting(true)\n\n try {\n this.composer.clear()\n await this._core.startRun({\n role: 'user',\n content: [{ type: 'text', data: text } as TextContent]\n })\n } catch (e) {\n // TODO: Handle error\n } finally {\n this.composer.setSubmitting(false)\n }\n }\n\n public cancelRun(): void {\n this._core.cancelRun()\n }\n\n public clear(): void {\n this._core.clear()\n }\n\n public reset(messages: Message[] = []): void {\n this._core.reset(messages)\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._core.setConversationId(conversationId)\n }\n\n public setTitle(title: string | undefined): void {\n this._core.setTitle(title)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { CapabilityContent } from '../../types'\nimport { StreamAdapter, StreamEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, MessageStatus } from '../../types/message'\nimport { RuntimeCapabilities } from '../../types/thread'\nimport { generateMessageId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ThreadRuntimeCoreConfig {\n streamAdapter: StreamAdapter\n initialMessages?: Message[]\n onMessagesChange?: (messages: Message[]) => void\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadRuntimeCore extends BaseSubscribable {\n private _messages: Message[] = []\n private _isRunning = false\n private _isDisabled = false\n private _abortController: AbortController | null = null\n private _conversationId?: string\n private _title?: string\n\n // Track current part being accumulated\n private _currentPart: {\n messageId: string\n contentIndex: number\n type: string\n parentId?: string\n } | null = null\n\n constructor(private config: ThreadRuntimeCoreConfig) {\n super()\n if (config.initialMessages) {\n this._messages = [...config.initialMessages]\n }\n }\n\n public get messages(): readonly Message[] {\n return this._messages\n }\n\n public get isRunning(): boolean {\n return this._isRunning\n }\n\n public get isDisabled(): boolean {\n return this._isDisabled\n }\n\n public get conversationId(): string | undefined {\n return this._conversationId\n }\n\n public get title(): string | undefined {\n return this._title\n }\n\n public get capabilities(): RuntimeCapabilities {\n return {\n cancel: true,\n edit: false,\n reload: false,\n speech: false,\n attachments: false,\n feedback: false\n }\n }\n\n private updateMessages(messages: Message[]): void {\n this._messages = messages\n this.config.onMessagesChange?.(this._messages)\n this.notifySubscribers()\n }\n\n public append(message: AppendMessage): void {\n const newMessage: Message = {\n id: message.id || generateMessageId(),\n parentId: message.parentId,\n role: message.role,\n content: message.content,\n status: message.status || { type: 'complete' },\n timestamp: message.timestamp || Date.now(),\n metadata: message.metadata\n }\n\n this.updateMessages([...this._messages, newMessage])\n }\n\n public async startRun(userMessage: AppendMessage): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this.append(userMessage)\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null // Reset current part\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null // Clean up\n this.notifySubscribers()\n }\n }\n\n private handleStreamEvent(messageId: string, event: StreamEvent): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Handle core events with type guards\n if (event.type === 'part-start') {\n this.handlePartStart(message, event as Extract<StreamEvent, { type: 'part-start' }>)\n } else if (event.type === 'text-delta' || event.type === 'assistant_thought') {\n this.handleTextDelta(message, event as Extract<StreamEvent, { type: 'text-delta' }>)\n } else if (event.type === 'part-finish') {\n this.handlePartFinish()\n } else if (event.type === 'metadata') {\n const metadataEvent = event as Extract<StreamEvent, { type: 'metadata' }>\n message.metadata = {\n ...message.metadata,\n conversationId: metadataEvent.conversationId,\n interactionId: metadataEvent.interactionId\n }\n\n if (metadataEvent.conversationId && !this._conversationId) {\n this._conversationId = metadataEvent.conversationId\n }\n\n if (metadataEvent.title && !this._title) {\n this._title = metadataEvent.title\n }\n } else if (event.type === 'capability_execution') {\n const capabilityEvent = event as Extract<StreamEvent, { type: 'capability_execution' }>\n message.content = [\n ...message.content,\n {\n type: 'capability',\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName,\n args: capabilityEvent.args\n } as CapabilityContent\n ]\n\n // Execute capability if manager is available\n if (this.config.capabilityExecutionManager) {\n this.config.capabilityExecutionManager.executeCapability(\n capabilityEvent.capabilityName,\n capabilityEvent.capabilityId,\n capabilityEvent.args,\n messageId,\n capabilityEvent.strategy\n )\n }\n } else if (event.type === 'error') {\n const errorEvent = event as Extract<StreamEvent, { type: 'error' }>\n message.content = [\n ...message.content,\n {\n type: 'error',\n data: errorEvent.error\n }\n ]\n } else {\n // Handle custom events\n const customEvent = event as Extract<StreamEvent, { data?: any }>\n message.content = [\n ...message.content,\n {\n type: customEvent.type,\n data: customEvent.data,\n parentId: customEvent.parentId\n }\n ]\n }\n\n // Update message with new reference\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private handlePartStart(message: Message, event: Extract<StreamEvent, { type: 'part-start' }>): void {\n const contentIndex = message.content.length\n\n // Create initial content based on type\n let initialContent: MessageContent\n\n switch (event.part.type) {\n case 'assistant_thought':\n // Initialize as array for assistant thoughts\n initialContent = {\n type: event.part.type,\n data: [],\n parentId: event.part.parentId\n } as any\n break\n\n case 'text':\n // Initialize as empty string for text\n initialContent = {\n type: event.part.type,\n data: '',\n parentId: event.part.parentId\n } as any\n break\n\n default:\n initialContent = {\n type: event.part.type,\n parentId: event.part.parentId\n } as any\n }\n\n // Add to message with new reference\n message.content = [...message.content, initialContent]\n\n // Track current part\n this._currentPart = {\n messageId: message.id,\n contentIndex,\n type: event.part.type,\n parentId: event.part.parentId\n }\n }\n\n private handleTextDelta(message: Message, event: Extract<StreamEvent, { type: 'text-delta' }>): void {\n if (!this._currentPart) {\n console.warn('Received text-delta without part-start')\n return\n }\n\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content.type === 'assistant_thought') {\n // For assistant thoughts, push each delta as a new array item\n if (!Array.isArray(content.data)) {\n content.data = []\n }\n if (event.delta.trim()) {\n content.data.push(event.delta.trim())\n }\n } else {\n // For text and other types, concatenate into a single string\n content.data = (content.data || '') + event.delta\n }\n }\n\n private handlePartFinish(): void {\n if (!this._currentPart) {\n console.warn('Received part-finish without part-start')\n return\n }\n\n // Part is complete, clear tracking\n this._currentPart = null\n }\n\n private updateMessageStatus(messageId: string, status: MessageStatus): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n {\n ...this._messages[messageIndex],\n status\n },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n public clear(): void {\n this.updateMessages([])\n }\n\n public cancelRun(): void {\n if (!this._isRunning || !this._abortController) {\n return\n }\n\n this._abortController.abort()\n }\n\n public reset(messages: Message[] = []): void {\n this.updateMessages([...messages])\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._conversationId = conversationId\n this.notifySubscribers()\n }\n\n public setTitle(title: string | undefined): void {\n this._title = title\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { StreamAdapter, ThreadListAdapter, ThreadListPaginatedResponse } from '../../types/adapters'\nimport { ThreadListItemState } from '../../types/thread'\nimport { generateThreadId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ThreadListItemRuntime } from '../ThreadListItemRuntime/ThreadListItemRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\nimport { ThreadRuntimeCore } from '../ThreadRuntime/ThreadRuntimeCore'\n\nexport interface ThreadListState {\n mainThreadId: string\n threads: readonly string[]\n isLoading: boolean\n isLoadingMore: boolean\n threadItems: Record<string, ThreadListItemState>\n pagination?: {\n currentPage: number\n totalPages: number\n totalCount: number\n hasMore: boolean\n }\n searchQuery?: string\n}\n\nexport interface ThreadListRuntimeConfig {\n streamAdapter: StreamAdapter\n threadListAdapter?: ThreadListAdapter\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadListRuntime extends BaseSubscribable {\n private _mainThreadId: string\n private _threads = new Map<string, ThreadRuntime>()\n private _threadItems = new Map<string, ThreadListItemRuntime>()\n private _threadStates = new Map<string, ThreadListItemState>()\n private _isLoading = false\n private _isLoadingMore = false\n private _currentPage = 0\n private _totalPages = 0\n private _totalCount = 0\n private _hasMore = true\n private _searchQuery: string | undefined\n private _abortController: AbortController | null = null\n public readonly main: ThreadRuntime\n\n constructor(private config: ThreadListRuntimeConfig) {\n super()\n\n // Create main thread\n this._mainThreadId = generateThreadId()\n const mainCore = new ThreadRuntimeCore({\n streamAdapter: config.streamAdapter,\n capabilityExecutionManager: config.capabilityExecutionManager\n })\n this.main = new ThreadRuntime(mainCore)\n this._threads.set(this._mainThreadId, this.main)\n\n // Create main thread state\n const mainState: ThreadListItemState = {\n id: this._mainThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: true,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(this._mainThreadId, mainState)\n\n // Create main thread item\n const mainItem = new ThreadListItemRuntime({\n state: mainState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(this._mainThreadId, mainItem)\n }\n\n public get isLoading(): boolean {\n return this._isLoading\n }\n\n public get isLoadingMore(): boolean {\n return this._isLoadingMore\n }\n\n /**\n * Get the currently active main thread\n */\n public getMainThread(): ThreadRuntime {\n const mainThread = this._threads.get(this._mainThreadId)\n if (!mainThread) {\n return this.main\n }\n return mainThread\n }\n\n public getState(): ThreadListState {\n const threads: string[] = []\n const threadItems: Record<string, ThreadListItemState> = {}\n\n for (const [id, state] of this._threadStates) {\n threadItems[id] = state\n if (state.status.type === 'regular') {\n threads.push(id)\n }\n }\n\n return {\n mainThreadId: this._mainThreadId,\n threads,\n isLoading: this._isLoading,\n isLoadingMore: this._isLoadingMore,\n threadItems,\n pagination: {\n currentPage: this._currentPage,\n totalPages: this._totalPages,\n totalCount: this._totalCount,\n hasMore: this._hasMore\n },\n searchQuery: this._searchQuery\n }\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n const thread = this._threads.get(threadId)\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`)\n }\n\n // Update old main thread\n const oldMainState = this._threadStates.get(this._mainThreadId)\n if (oldMainState) {\n oldMainState.isMain = false\n this._threadStates.set(this._mainThreadId, oldMainState)\n this._threadItems.get(this._mainThreadId)?.updateState(oldMainState)\n }\n\n // Update new main thread\n this._mainThreadId = threadId\n const newMainState = this._threadStates.get(threadId)\n if (newMainState) {\n newMainState.isMain = true\n this._threadStates.set(threadId, newMainState)\n this._threadItems.get(threadId)?.updateState(newMainState)\n\n // Update thread's conversationId and title\n thread.setConversationId(newMainState.conversationId)\n thread.setTitle(newMainState.title)\n }\n\n // Load thread messages if adapter exists\n if (this.config.threadListAdapter && newMainState?.conversationId) {\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const messages = await this.config.threadListAdapter.loadThread(threadId)\n thread.reset(messages)\n } catch (error) {\n console.error('Failed to load thread:', error)\n } finally {\n this._isLoading = false\n }\n }\n\n this.notifySubscribers()\n }\n\n public async switchToNewThread(): Promise<void> {\n const newThreadId = generateThreadId()\n const newCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const newThread = new ThreadRuntime(newCore)\n\n this._threads.set(newThreadId, newThread)\n\n // Create new thread state\n const newState: ThreadListItemState = {\n id: newThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: false,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(newThreadId, newState)\n\n // Create new thread item\n const newItem = new ThreadListItemRuntime({\n state: newState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(newThreadId, newItem)\n\n // Subscribe to new thread changes\n newThread.subscribe(() => {\n this.syncThreadStateFromRuntime(newThreadId, newThread)\n this.notifySubscribers()\n })\n\n // Create thread via adapter if exists\n if (this.config.threadListAdapter) {\n try {\n const createdState = await this.config.threadListAdapter.createThread()\n newState.conversationId = createdState.conversationId\n this._threadStates.set(newThreadId, newState)\n newItem.updateState(newState)\n } catch (error) {\n console.error('Failed to create thread:', error)\n }\n }\n\n await this.switchToThread(newThreadId)\n }\n\n public async loadThreads(query?: string, reset: boolean = false): Promise<void> {\n if (!this.config.threadListAdapter) {\n console.warn('No threadListAdapter configured')\n return\n }\n\n if (this._abortController) {\n this._abortController.abort()\n }\n this._abortController = new AbortController()\n\n const isNewSearch = query !== this._searchQuery\n const shouldReset = reset || isNewSearch\n\n if (shouldReset) {\n this._currentPage = 0\n this._searchQuery = query\n this._hasMore = true\n this._threadStates.clear()\n this._threads.clear()\n this._threadItems.clear()\n }\n\n if (!shouldReset && !this._hasMore) {\n return\n }\n\n if (shouldReset) {\n this._isLoading = true\n } else {\n this._isLoadingMore = true\n }\n this.notifySubscribers()\n\n try {\n const result = await this.config.threadListAdapter.loadThreads({\n query: this._searchQuery,\n page: this._currentPage,\n size: 50\n })\n\n // Handle both response types for backwards compatibility\n let threads: ThreadListItemState[]\n let pagination: ThreadListPaginatedResponse['pagination']\n\n if (Array.isArray(result)) {\n threads = result\n pagination = undefined\n } else {\n threads = result.threads\n pagination = result.pagination\n }\n\n // Update pagination state\n if (pagination) {\n this._totalPages = pagination.pageCount ?? 0\n this._totalCount = pagination.total ?? 0\n this._currentPage = pagination.pageNumber ?? this._currentPage\n this._hasMore =\n pagination.pageNumber !== undefined &&\n pagination.pageCount !== undefined &&\n pagination.pageNumber < pagination.pageCount - 1\n } else {\n this._hasMore = false\n }\n\n // Add new threads to state\n for (const state of threads) {\n if (this._threadStates.has(state.id)) {\n continue\n }\n\n const threadCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const thread = new ThreadRuntime(threadCore)\n this._threads.set(state.id, thread)\n this._threadStates.set(state.id, state)\n\n const threadItem = new ThreadListItemRuntime({\n state,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(state.id, threadItem)\n\n thread.subscribe(() => {\n this.syncThreadStateFromRuntime(state.id, thread)\n this.notifySubscribers()\n })\n }\n } catch (error) {\n if (error instanceof Error && error.name !== 'AbortError') {\n console.error('Failed to load threads:', error)\n }\n } finally {\n this._isLoading = false\n this._isLoadingMore = false\n this._abortController = null\n this.notifySubscribers()\n }\n }\n\n public async loadMoreThreads(): Promise<void> {\n if (this._isLoading || this._isLoadingMore || !this._hasMore) {\n return\n }\n\n this._currentPage += 1\n await this.loadThreads(this._searchQuery, false)\n }\n\n public async searchThreads(query: string): Promise<void> {\n await this.loadThreads(query, true)\n }\n\n /**\n * Syncs conversationId and title from thread runtime to thread state\n */\n private syncThreadStateFromRuntime(threadId: string, thread: ThreadRuntime): void {\n const currentState = this._threadStates.get(threadId)\n if (currentState) {\n const hasChanges = currentState.conversationId !== thread.conversationId || currentState.title !== thread.title\n\n if (hasChanges) {\n currentState.conversationId = thread.conversationId\n currentState.title = thread.title || currentState.title\n currentState.updatedAt = Date.now()\n this._threadStates.set(threadId, currentState)\n this._threadItems.get(threadId)?.updateState(currentState)\n }\n }\n }\n\n private async renameThread(threadId: string, newTitle: string): Promise<void> {\n const state = this._threadStates.get(threadId)\n if (!state) return\n\n state.title = newTitle\n state.updatedAt = Date.now()\n this._threadStates.set(threadId, state)\n this._threadItems.get(threadId)?.updateState(state)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.updateThread(threadId, { title: newTitle })\n } catch (error) {\n console.error('Failed to rename thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n\n private async deleteThread(threadId: string): Promise<void> {\n if (threadId === this._mainThreadId && this._threads.size === 1) {\n throw new Error('Cannot delete the last thread')\n }\n\n // If deleting main thread, switch to another thread first\n if (threadId === this._mainThreadId) {\n const otherThreadId = Array.from(this._threads.keys()).find(id => id !== threadId)\n if (otherThreadId) {\n await this.switchToThread(otherThreadId)\n }\n }\n\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.deleteThread(threadId)\n } catch (error) {\n console.error('Failed to delete thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager, CapabilityRegistry } from '../../core'\nimport { PluginRegistry } from '../../core/PluginRegistry'\nimport { Message } from '../../types/message'\nimport { ChatPlugin } from '../../types/plugin'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ContentFocusRuntime } from '../ContentFocusRuntime/ContentFocusRuntime'\nimport { ThreadListRuntime, ThreadListRuntimeConfig } from '../ThreadListRuntime/ThreadListRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\n\nexport interface AssistantRuntimeConfig extends ThreadListRuntimeConfig {\n plugins?: ChatPlugin[]\n}\n\nexport class AssistantRuntime extends BaseSubscribable {\n public readonly threads: ThreadListRuntime\n public readonly pluginRegistry: PluginRegistry\n public readonly capabilityRegistry: CapabilityRegistry\n public readonly capabilityExecutionManager: CapabilityExecutionManager\n private _contentFocusRuntime: ContentFocusRuntime\n private _currentThreadUnsubscribe?: () => void\n\n constructor(config: AssistantRuntimeConfig) {\n super()\n\n // Initialize plugin registry\n this.pluginRegistry = new PluginRegistry()\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n this.pluginRegistry.registerPlugin(plugin)\n })\n }\n\n // Initialize capability registry\n this.capabilityRegistry = new CapabilityRegistry()\n this.capabilityExecutionManager = new CapabilityExecutionManager(name => this.capabilityRegistry.getHandler(name))\n\n // Initialize thread list\n this.threads = new ThreadListRuntime({\n streamAdapter: config.streamAdapter,\n threadListAdapter: config.threadListAdapter,\n capabilityExecutionManager: this.capabilityExecutionManager\n })\n\n this._contentFocusRuntime = new ContentFocusRuntime()\n\n // Subscribe to content focus changes\n this._contentFocusRuntime.subscribe(() => {\n this.notifySubscribers()\n })\n\n // Subscribe to thread list changes (including thread switches)\n this.threads.subscribe(() => {\n // Re-subscribe to the new main thread when it changes\n this.subscribeToCurrentThread()\n this.notifySubscribers()\n })\n\n // Initial subscription to main thread\n this.subscribeToCurrentThread()\n }\n\n public get thread(): ThreadRuntime {\n return this.threads.getMainThread()\n }\n\n public get contentFocus(): ContentFocusRuntime {\n return this._contentFocusRuntime\n }\n\n /**\n * Register a plugin\n */\n public registerPlugin(plugin: ChatPlugin): void {\n this.pluginRegistry.registerPlugin(plugin)\n\n plugin.init?.({\n streamingEnabled: true,\n feedbackEnabled: false,\n detailPanelEnabled: true\n })\n }\n\n /**\n * Unregister a plugin\n */\n public unregisterPlugin(pluginId: string): boolean {\n return this.pluginRegistry.unregisterPlugin(pluginId)\n }\n\n /**\n * Subscribe to the current main thread\n * Called when thread switches to ensure we listen to the right thread\n */\n private subscribeToCurrentThread(): void {\n // Unsubscribe from previous thread\n if (this._currentThreadUnsubscribe) {\n this._currentThreadUnsubscribe()\n }\n\n // Subscribe to new main thread\n this._currentThreadUnsubscribe = this.thread.subscribe(() => {\n this.handleMessagesChange(this.thread.messages)\n this.notifySubscribers()\n })\n }\n\n private handleMessagesChange(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Only auto-focus when a new assistant message completes\n const lastMessage = messages[messages.length - 1]\n\n if (lastMessage.role === 'assistant' && lastMessage.status.type === 'complete') {\n this.autoFocusLastContent(messages)\n }\n }\n\n private autoFocusLastContent(messages: readonly Message[]): void {\n if (messages.length === 0) return\n if (this._contentFocusRuntime.isActive) return // Don't override existing focus\n\n // Find last assistant message\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message.role !== 'assistant') continue\n\n // Find last content with focus capability\n for (let j = message.content.length - 1; j >= 0; j--) {\n const content = message.content[j]\n const renderer = this.pluginRegistry.getRenderersByType(content.type)\n\n if (renderer.length > 0 && renderer[0].capabilities?.supportsFocus) {\n this._contentFocusRuntime.focus(content, message, j, 'detail')\n return\n }\n }\n }\n }\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\n\nconst AssistantRuntimeContext = createContext<AssistantRuntime | null>(null)\n\nexport interface AssistantRuntimeProviderProps {\n runtime: AssistantRuntime\n children: ReactNode\n}\n\nexport function AssistantRuntimeProvider({ runtime, children }: AssistantRuntimeProviderProps): JSX.Element {\n return <AssistantRuntimeContext.Provider value={runtime}>{children}</AssistantRuntimeContext.Provider>\n}\n\nexport function useAssistantRuntimeContext(): AssistantRuntime {\n const runtime = useContext(AssistantRuntimeContext)\n if (!runtime) {\n throw new Error('useAssistantRuntimeContext must be used within AssistantRuntimeProvider')\n }\n return runtime\n}\n","import { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\nimport { useAssistantRuntimeContext } from '../providers/AssistantRuntimeProvider'\n\nexport function useAssistantRuntime(): AssistantRuntime {\n return useAssistantRuntimeContext()\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadListState } from '../../runtime/ThreadListRuntime/ThreadListRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useThreadList() {\n const runtime = useAssistantRuntime()\n\n return {\n switchToThread: (threadId: string) => runtime.threads.switchToThread(threadId),\n switchToNewThread: () => runtime.threads.switchToNewThread(),\n loadThreads: (query?: string, reset?: boolean) => runtime.threads.loadThreads(query, reset),\n loadMoreThreads: () => runtime.threads.loadMoreThreads(),\n searchThreads: (query: string) => runtime.threads.searchThreads(query),\n renameThread: (threadId: string, title: string) => runtime.threads['renameThread']?.(threadId, title),\n deleteThread: (threadId: string) => runtime.threads['deleteThread']?.(threadId)\n }\n}\n\nexport function useThreadListState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ThreadListState>(runtime.threads.getState())\n\n useEffect(() => {\n const unsubscribe = runtime.threads.subscribe(() => {\n setState(runtime.threads.getState())\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { ThreadRuntime } from '../../runtime/ThreadRuntime/ThreadRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCurrentThread(): ThreadRuntime {\n const mainThread = useAssistantRuntime().threads.getMainThread()\n return mainThread\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useSyncExternalStore } from 'use-sync-external-store/shim'\n\nimport { Message } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useMessages(): readonly Message[] {\n const runtime = useAssistantRuntime()\n\n return useSyncExternalStore(\n callback => {\n // Subscribe to runtime, which notifies when thread switches\n // or when the current thread's messages change\n return runtime.subscribe(() => {\n callback()\n })\n },\n\n () => {\n // Always get messages from the current main thread\n return runtime.thread.messages\n },\n () => runtime.thread.messages\n )\n}\n","import { useState } from 'react'\n\nimport { useCurrentThread } from './useCurrentThread'\n\nexport function useComposer() {\n const thread = useCurrentThread()\n const [text, setText] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const send = async (e?: React.FormEvent) => {\n e?.preventDefault()\n\n if (!text.trim() || isSubmitting) return\n\n const messageText = text\n setText('')\n setIsSubmitting(true)\n\n try {\n await thread.send(messageText)\n } catch (error) {\n console.error('Failed to send message:', error)\n setText(messageText)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n return {\n text,\n setText,\n isSubmitting,\n send,\n clear: () => setText(''),\n append: (value: string) => setText(prev => prev + value)\n }\n}\n","import { FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentRenderer(contentType: string, context?: FocusContext) {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n\n if (!renderer) {\n return {\n component: null,\n auxiliaryComponent: null,\n supportsFocus: false,\n supportsPreview: false,\n supportsFullscreen: false\n }\n }\n\n // Get auxiliary component for specific context\n const auxiliaryComponent = context ? renderer.auxiliary?.[context] : null\n\n return {\n component: renderer.component,\n auxiliaryComponent,\n supportsFocus: renderer.capabilities?.supportsFocus ?? false,\n supportsPreview: renderer.capabilities?.supportsPreview ?? false,\n supportsFullscreen: renderer.capabilities?.supportsFullscreen ?? false\n }\n}\n\nexport function useHasAuxiliaryView(contentType: string, context: FocusContext): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return !!renderer?.auxiliary?.[context]\n}\n\nexport function useSupportsFocus(contentType: string): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return renderer?.capabilities?.supportsFocus ?? false\n}\n","import { useEffect, useState } from 'react'\n\nimport { ContentFocusState, FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentFocus() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return {\n ...state,\n focus: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.focus(content, message, contentIndex, context),\n blur: () => runtime.contentFocus.blur(),\n toggle: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.toggle(content, message, contentIndex, context),\n switchContext: (context: FocusContext) => runtime.contentFocus.switchContext(context),\n focusNext: () => runtime.contentFocus.focusNext(runtime.thread.messages),\n focusPrevious: () => runtime.contentFocus.focusPrevious(runtime.thread.messages)\n }\n}\n\nexport function useContentFocusState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect } from 'react'\n\nimport { CapabilityConfig } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n // Register handler\n if (config.execute) {\n runtime.capabilityRegistry.registerHandler(config.name, { execute: config.execute })\n }\n\n // Register renderer\n if (config.render) {\n runtime.capabilityRegistry.registerRenderer(config.name, {\n component: config.render\n })\n }\n\n // Cleanup on unmount\n return () => {\n runtime.capabilityRegistry.unregister(config.name)\n }\n }, [config.name, runtime])\n}\n","import { useEffect, useReducer, useState } from 'react'\n\nimport { CapabilityExecution } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapabilityExecution(capabilityId: string): CapabilityExecution | undefined {\n const runtime = useAssistantRuntime()\n const [execution, setExecution] = useState<CapabilityExecution | undefined>(() =>\n runtime.capabilityExecutionManager.getExecution(capabilityId)\n )\n const [, forceUpdate] = useReducer(x => x + 1, 0)\n\n useEffect(() => {\n // Get initial state\n const initialExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(initialExecution)\n\n // Subscribe to updates\n const unsubscribe = runtime.capabilityExecutionManager.subscribe(id => {\n if (id === capabilityId) {\n const updatedExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(updatedExecution)\n forceUpdate()\n }\n })\n\n return unsubscribe\n }, [capabilityId, runtime])\n\n return execution\n}\n","import { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react'\n\nimport { ChatContextItem, ChatContextMap, ChatContextValue } from '../../types/context'\n\nconst ChatContext = createContext<ChatContextValue | undefined>(undefined)\n\nexport interface ChatContextProviderProps {\n children: ReactNode\n}\n\nexport function ChatContextProvider({ children }: ChatContextProviderProps): JSX.Element {\n const [contexts, setContexts] = useState<ChatContextMap>({})\n\n const setContext = useCallback((id: string, context: Omit<ChatContextItem, 'id'> | null) => {\n setContexts(prev => {\n if (context === null) {\n const { [id]: _, ...rest } = prev\n return rest\n }\n return {\n ...prev,\n [id]: { id, ...context }\n }\n })\n }, [])\n\n const removeContext = useCallback((id: string) => {\n setContexts(prev => {\n const { [id]: _, ...rest } = prev\n return rest\n })\n }, [])\n\n const getContextData = useCallback(() => {\n return Object.values(contexts).reduce(\n (acc, context) => {\n // Stringify non-string values for backend compatibility\n const stringifiedData = Object.entries(context.data).reduce(\n (dataAcc, [key, value]) => {\n return {\n ...dataAcc,\n [key]: typeof value === 'string' ? value : JSON.stringify(value)\n }\n },\n {} as Record<string, unknown>\n )\n return { ...acc, ...stringifiedData }\n },\n {} as Record<string, unknown>\n )\n }, [contexts])\n\n const clearContexts = useCallback(() => {\n setContexts({})\n }, [])\n\n const value = useMemo(\n () => ({\n contexts,\n setContext,\n removeContext,\n getContextData,\n clearContexts\n }),\n [contexts, setContext, removeContext, getContextData, clearContexts]\n )\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport function useChatContext(): ChatContextValue {\n const context = useContext(ChatContext)\n if (!context) {\n throw new Error('useChatContext must be used within a ChatContextProvider')\n }\n return context\n}\n","import { useEffect } from 'react'\n\nimport { ChatContextItem } from '../../types/context'\nimport { useChatContext } from '../providers/ChatContextProvider'\n\nexport interface UsePageContextOptions extends Omit<ChatContextItem, 'id'> {\n /**\n * Optional ID for the context. Defaults to 'currentPage'.\n * Use a custom ID if you need multiple page contexts or want to namespace your context.\n */\n id?: string\n}\n\n/**\n * Hook for pages to easily register their context with the chat system.\n * Automatically cleans up the context when the component unmounts.\n *\n * @param options - Context configuration\n *\n * @example\n * ```tsx\n * function ConnectorListPage() {\n * usePageContext({\n * displayName: 'Connectors',\n * data: {\n * currentPage: { page_id: 'connectors' }\n * },\n * priority: 0\n * })\n *\n * // Rest of component...\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom ID\n * function PipelineStudio({ pipelineId, pipelineName }) {\n * usePageContext({\n * id: 'currentPipeline',\n * displayName: `Pipeline: ${pipelineName}`,\n * data: {\n * selectedPipeline: { id: pipelineId, name: pipelineName }\n * },\n * priority: 1\n * })\n * }\n * ```\n */\nexport function usePageContext(options: UsePageContextOptions): void {\n const { setContext, removeContext } = useChatContext()\n const { id = 'currentPage', ...contextData } = options\n\n useEffect(() => {\n setContext(id, contextData)\n\n return () => {\n removeContext(id)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, contextData.displayName, JSON.stringify(contextData.data), contextData.priority, contextData.icon])\n}\n","import { CapabilityContent } from '../../types/capability'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from '../hooks/useAssistantRuntime'\nimport { useCapabilityExecution } from '../hooks/useCapabilityExecution'\n\nexport interface CapabilityRendererProps {\n message: Message\n content: MessageContent\n}\n\nexport function CapabilityRendererComp({ message, content }: CapabilityRendererProps) {\n const runtime = useAssistantRuntime()\n const capabilityContent = content as CapabilityContent\n const execution = useCapabilityExecution(capabilityContent.capabilityId)\n\n const renderer = runtime.capabilityRegistry.getRenderer(capabilityContent.capabilityName)\n\n if (!renderer || !execution) {\n return null\n }\n\n const Component = renderer.component\n\n return (\n <Component\n capabilityName={execution.name}\n capabilityId={execution.id}\n args={execution.args}\n result={execution.result}\n status={execution.status}\n message={message}\n />\n )\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { useContentRenderer } from '../hooks/useContentRenderer'\nimport { CapabilityRendererComp } from './CapabilityRenderer'\n\nexport function ContentRenderer({ message, content }: { message: Message; content: MessageContent }) {\n const { component } = useContentRenderer(content.type)\n\n if (content.type === 'capability') {\n return <CapabilityRendererComp message={message} content={content} />\n }\n\n if (!component) {\n return null\n }\n\n const Component = component\n return <Component content={content} message={message} />\n}\n","import { AuxiliaryRendererProps } from '../../types/plugin'\nimport { useContentRenderer } from '../hooks'\n\nexport function AuxiliaryRenderer({\n message,\n content,\n context,\n onClose,\n onNavigate,\n onSwitchContext\n}: AuxiliaryRendererProps) {\n const { auxiliaryComponent } = useContentRenderer(content.type, context)\n\n if (!auxiliaryComponent) {\n return null\n }\n\n const Component = auxiliaryComponent\n return (\n <Component\n content={content}\n message={message}\n context={context}\n onClose={onClose}\n onNavigate={onNavigate}\n onSwitchContext={onSwitchContext}\n />\n )\n}\n","import { FC } from 'react'\n\nimport { CapabilityConfig } from '../../types'\nimport { useCapability } from '../hooks/useCapability'\n\nexport function makeCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): FC {\n const Capability: FC = () => {\n useCapability(config)\n return null\n }\n\n Capability.displayName = `Capability(${config.name})`\n\n return Capability\n}\n","import { StreamAdapter, StreamChunk } from '../types/adapters'\nimport { Message } from '../types/message'\n\nexport interface SSEEvent {\n event: string\n data: any\n}\n\nexport abstract class BaseSSEStreamAdapter<TAllowedEvents extends readonly string[] = readonly string[]>\n implements StreamAdapter\n{\n protected abstract prepareRequest(params: { messages: Message[]; conversationId?: string; signal?: AbortSignal }): {\n url: string\n options: RequestInit\n }\n\n protected abstract convertEvent(event: SSEEvent & { event: TAllowedEvents[number] }): StreamChunk | null\n\n protected getAllowedEvents(): TAllowedEvents | null {\n return null\n }\n\n protected shouldProcessEvent(eventType: string): boolean {\n const allowedEvents = this.getAllowedEvents()\n if (!allowedEvents) return true\n return allowedEvents.includes(eventType)\n }\n\n async *stream(params: {\n messages: Message[]\n conversationId?: string\n signal?: AbortSignal\n }): AsyncGenerator<StreamChunk, void, unknown> {\n const { signal } = params\n const { url, options } = this.prepareRequest(params)\n\n const response = await fetch(url, { ...options, signal })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n yield* this.parseSSEStream(response.body, signal)\n }\n\n private async *parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n ): AsyncGenerator<StreamChunk, void, unknown> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent: string | null = null\n\n try {\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read()\n\n if (done) break\n if (signal?.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (!trimmedLine) {\n currentEvent = null\n continue\n }\n\n if (trimmedLine === ': ping') {\n continue\n }\n\n if (trimmedLine.startsWith('event:')) {\n currentEvent = trimmedLine.substring(6).trim()\n continue\n }\n\n if (trimmedLine.startsWith('data:')) {\n const dataStr = trimmedLine.substring(5).trim()\n\n if (dataStr === 'eof' || trimmedLine === 'eof') {\n break\n }\n\n try {\n const data = JSON.parse(dataStr)\n\n if (currentEvent && this.shouldProcessEvent(currentEvent)) {\n const chunk = this.convertEvent({\n event: currentEvent as TAllowedEvents[number],\n data\n })\n if (chunk) {\n yield chunk\n }\n }\n } catch (e) {\n // handle error\n }\n\n currentEvent = null\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n"],"names":["PluginRegistry","__publicField","plugin","renderer","renderers","a","b","pluginId","filteredRenderers","r","type","CapabilityRegistry","name","handler","CapabilityExecutionManager","getHandler","id","args","messageId","strategy","execution","executionId","running","result","error","errorMessage","index","e","callback","BaseSubscribable","ContentFocusRuntime","content","message","contentIndex","context","messages","currentMsgIndex","m","currentMsg","currentContentIndex","nextContent","nextMsg","prevContent","prevMsg","lastIndex","messageIdCounter","threadIdCounter","generateMessageId","generateThreadId","ThreadListItemRuntime","config","state","newTitle","ComposerRuntime","text","isSubmitting","ThreadRuntime","_core","conversationId","title","ThreadRuntimeCore","_b","_a","newMessage","userMessage","assistantMessageId","assistantMessage","stream","event","messageIndex","metadataEvent","capabilityEvent","errorEvent","customEvent","updatedMessages","initialContent","status","ThreadListRuntime","mainCore","mainState","mainItem","mainThread","threads","threadItems","threadId","thread","oldMainState","newMainState","newThreadId","newCore","newThread","newState","newItem","createdState","query","reset","isNewSearch","shouldReset","pagination","threadCore","threadItem","currentState","otherThreadId","AssistantRuntime","lastMessage","i","j","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","n","test3","letter","objectAssign","target","source","from","to","symbols","s","key","require$$0","f","require$$1","g","reactJsxRuntime_production_min","h","p","q","c","k","d","l","jsxRuntimeModule","AssistantRuntimeContext","createContext","AssistantRuntimeProvider","runtime","children","useAssistantRuntimeContext","useContext","useAssistantRuntime","useThreadList","useThreadListState","setState","useState","useEffect","useCurrentThread","React","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","value","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","shimModule","useMessages","useSyncExternalStore","useComposer","setText","setIsSubmitting","messageText","prev","useContentRenderer","contentType","auxiliaryComponent","_c","_d","useContentFocus","useCapability","useCapabilityExecution","capabilityId","setExecution","useReducer","initialExecution","updatedExecution","ChatContext","ChatContextProvider","contexts","setContexts","setContext","useCallback","_","rest","removeContext","getContextData","acc","stringifiedData","dataAcc","clearContexts","useMemo","jsx","useChatContext","usePageContext","options","contextData","CapabilityRendererComp","capabilityContent","Component","ContentRenderer","component","AuxiliaryRenderer","onClose","onNavigate","onSwitchContext","makeCapability","Capability","BaseSSEStreamAdapter","eventType","allowedEvents","params","signal","url","response","body","reader","decoder","buffer","currentEvent","done","lines","line","trimmedLine","dataStr","data","chunk"],"mappings":"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","x_google_ignoreList":[12,13,14,19,20]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/core/PluginRegistry.ts","../src/core/CapabilityRegistry.ts","../src/core/CapabilityExecutionManager.ts","../src/utils/Subscribable.ts","../src/runtime/ContentFocusRuntime/ContentFocusRuntime.ts","../src/utils/idGenerator.ts","../src/runtime/ThreadListItemRuntime/ThreadListItemRuntime.ts","../src/runtime/ComposerRuntime/ComposerRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntimeCore.ts","../src/runtime/ThreadListRuntime/ThreadListRuntime.tsx","../src/runtime/AssistantRuntime/AssistantRuntime.tsx","../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/jsx-runtime.js","../src/react/providers/AssistantRuntimeProvider.tsx","../src/react/hooks/useAssistantRuntime.ts","../src/react/hooks/useThreadList.ts","../src/react/hooks/useCurrentThread.ts","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/shim/index.js","../src/react/hooks/useMessages.ts","../src/react/hooks/useComposer.ts","../src/react/hooks/useContentRenderer.ts","../src/react/hooks/useContentFocus.ts","../src/react/hooks/useCapability.ts","../src/react/hooks/useCapabilityExecution.ts","../src/react/providers/ChatContextProvider.tsx","../src/react/hooks/usePageContext.ts","../src/react/components/CapabilityRenderer.tsx","../src/react/components/ContentRenderer.tsx","../src/react/components/AuxiliaryRenderer.tsx","../src/react/utils/makeCapability.tsx","../src/utils/BaseSSEStreamAdapter.ts"],"sourcesContent":["import { ChatPlugin, MessageRenderer } from '../types/plugin'\n\nexport class PluginRegistry {\n private plugins = new Map<string, ChatPlugin>()\n private renderersByType = new Map<string, MessageRenderer[]>()\n\n public registerPlugin(plugin: ChatPlugin): void {\n if (this.plugins.has(plugin.id)) {\n // handle duplicate plugin registration\n // show a warning / error\n }\n\n this.plugins.set(plugin.id, plugin)\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n renderers.push(renderer)\n renderers.sort((a, b) => (b?.priority ?? 0) - (a?.priority ?? 0))\n this.renderersByType.set(renderer.type, renderers)\n })\n }\n\n public unregisterPlugin(pluginId: string): boolean {\n const plugin = this.plugins.get(pluginId)\n if (!plugin) {\n return false\n }\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n const filteredRenderers = renderers.filter(r => !plugin.renderers.includes(r))\n\n if (filteredRenderers.length === 0) {\n this.renderersByType.delete(renderer.type)\n } else {\n this.renderersByType.set(renderer.type, filteredRenderers)\n }\n })\n\n return this.plugins.delete(pluginId)\n }\n\n public getPlugin(pluginId: string): ChatPlugin | undefined {\n return this.plugins.get(pluginId)\n }\n\n public getAllPlugins(): ChatPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public getRenderersByType(type: string): MessageRenderer[] {\n return this.renderersByType.get(type) || []\n }\n\n public getBestRendererForType(type: string): MessageRenderer | undefined {\n const renderers = this.getRenderersByType(type)\n return renderers[0]\n }\n\n public clear(): void {\n this.plugins.clear()\n this.renderersByType.clear()\n }\n}\n","import { CapabilityHandler, CapabilityRenderer } from '../types/capability'\n\nexport class CapabilityRegistry {\n private handlers = new Map<string, CapabilityHandler>()\n private renderers = new Map<string, CapabilityRenderer>()\n\n public registerHandler(name: string, handler: CapabilityHandler): void {\n this.handlers.set(name, handler)\n }\n\n public registerRenderer(name: string, renderer: CapabilityRenderer): void {\n this.renderers.set(name, renderer)\n }\n\n public unregister(name: string): void {\n this.handlers.delete(name)\n this.renderers.delete(name)\n }\n\n public getHandler(name: string): CapabilityHandler | undefined {\n return this.handlers.get(name)\n }\n\n public getRenderer(name: string): CapabilityRenderer | undefined {\n return this.renderers.get(name)\n }\n\n public getStrategy() {\n return 'queue'\n }\n\n public hasHandler(name: string): boolean {\n return this.handlers.has(name)\n }\n\n public hasRenderer(name: string): boolean {\n return this.renderers.has(name)\n }\n\n public clear(): void {\n this.handlers.clear()\n this.renderers.clear()\n }\n\n public getAllCapabilityNames(): string[] {\n return Array.from(new Set([...this.handlers.keys(), ...this.renderers.keys()]))\n }\n}\n","import { CapabilityExecution, CapabilityHandler } from '../types/capability'\n\nexport class CapabilityExecutionManager {\n private executions = new Map<string, CapabilityExecution>()\n private executionQueue: string[] = []\n private isProcessing = false\n private runningByName = new Map<string, string[]>()\n private subscribers = new Set<(executionId: string) => void>()\n private getHandler: (name: string) => CapabilityHandler | undefined\n\n constructor(getHandler: (name: string) => CapabilityHandler | undefined) {\n this.getHandler = getHandler\n }\n\n public async executeCapability<TArgs, TResult>(\n name: string,\n id: string,\n args: TArgs,\n messageId: string,\n strategy = 'queue'\n ): Promise<void> {\n const handler = this.getHandler(name)\n if (!handler) {\n console.warn(`No handler registered for capability: ${name}`)\n return\n }\n\n const execution: CapabilityExecution<TArgs, TResult> = {\n id,\n name,\n args,\n status: { type: 'queued' },\n timestamp: Date.now(),\n messageId\n }\n\n this.executions.set(id, execution)\n this.notifySubscribers(id)\n\n switch (strategy) {\n case 'queue':\n default:\n this.executionQueue.push(id)\n break\n }\n\n if (!this.isProcessing) {\n this.processQueue()\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessing || this.executionQueue.length === 0) {\n return\n }\n\n this.isProcessing = true\n\n while (this.executionQueue.length > 0) {\n const executionId = this.executionQueue.shift()!\n const execution = this.executions.get(executionId)\n\n if (!execution) continue\n\n const handler = this.getHandler(execution.name)\n if (!handler) continue\n\n execution.status = { type: 'running' }\n this.notifySubscribers(executionId)\n\n const running = this.runningByName.get(execution.name) || []\n running.push(executionId)\n this.runningByName.set(execution.name, running)\n\n try {\n const result = await handler.execute(execution.args, {\n messageId: execution.messageId,\n capabilityId: executionId\n })\n\n execution.status = { type: 'complete', result }\n execution.result = result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n execution.status = { type: 'error', error: errorMessage }\n execution.error = errorMessage\n } finally {\n const running = this.runningByName.get(execution.name) || []\n const index = running.indexOf(executionId)\n if (index > -1) {\n running.splice(index, 1)\n }\n if (running.length === 0) {\n this.runningByName.delete(execution.name)\n } else {\n this.runningByName.set(execution.name, running)\n }\n\n this.notifySubscribers(executionId)\n }\n }\n\n this.isProcessing = false\n }\n\n public getExecution(id: string): CapabilityExecution | undefined {\n return this.executions.get(id)\n }\n\n public getExecutionsByMessage(messageId: string): CapabilityExecution[] {\n return Array.from(this.executions.values()).filter(e => e.messageId === messageId)\n }\n\n public subscribe(callback: (executionId: string) => void): () => void {\n this.subscribers.add(callback)\n return () => this.subscribers.delete(callback)\n }\n\n private notifySubscribers(executionId: string): void {\n this.subscribers.forEach(callback => callback(executionId))\n }\n\n public clear(): void {\n this.executions.clear()\n this.executionQueue = []\n this.runningByName.clear()\n }\n}\n","export type Unsubscribe = () => void\n\nexport abstract class BaseSubscribable {\n private _subscriptions = new Set<() => void>()\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback)\n return () => {\n this._subscriptions.delete(callback)\n }\n }\n\n protected notifySubscribers(): void {\n for (const callback of this._subscriptions) {\n callback()\n }\n }\n\n protected getSubscriberCount(): number {\n return this._subscriptions.size\n }\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport type FocusContext = 'detail'\n\nexport interface ContentFocusState {\n isActive: boolean\n context: FocusContext | null\n focusedContent: MessageContent | null\n focusedMessage: Message | null\n focusedMessageId: string | null\n focusedContentIndex: number | null\n}\n\nexport class ContentFocusRuntime extends BaseSubscribable {\n private _state: ContentFocusState = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n\n public get state(): ContentFocusState {\n return this._state\n }\n\n public get isActive(): boolean {\n return this._state.isActive\n }\n\n public get context(): FocusContext | null {\n return this._state.context\n }\n\n public get focusedContent(): MessageContent | null {\n return this._state.focusedContent\n }\n\n public get focusedMessage(): Message | null {\n return this._state.focusedMessage\n }\n\n public get focusedMessageId(): string | null {\n return this._state.focusedMessageId\n }\n\n public get focusedContentIndex(): number | null {\n return this._state.focusedContentIndex\n }\n\n public focus(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n this._state = {\n isActive: true,\n context,\n focusedContent: content,\n focusedMessage: message,\n focusedMessageId: message.id,\n focusedContentIndex: contentIndex\n }\n this.notifySubscribers()\n }\n\n public blur(): void {\n this._state = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n this.notifySubscribers()\n }\n\n public toggle(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n if (\n this._state.isActive &&\n this._state.focusedMessageId === message.id &&\n this._state.focusedContentIndex === contentIndex &&\n this._state.context === context\n ) {\n this.blur()\n } else {\n this.focus(content, message, contentIndex, context)\n }\n }\n\n public switchContext(context: FocusContext): void {\n if (this._state.isActive && this._state.focusedContent) {\n this._state = {\n ...this._state,\n context\n }\n this.notifySubscribers()\n }\n }\n\n public focusNext(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex + 1 < currentMsg.content.length) {\n const nextContent = currentMsg.content[currentContentIndex + 1]\n this.focus(nextContent, currentMsg, currentContentIndex + 1, this._state.context || 'detail')\n return\n }\n\n // Try first content in next message\n if (currentMsgIndex + 1 < messages.length) {\n const nextMsg = messages[currentMsgIndex + 1]\n if (nextMsg.content.length > 0) {\n this.focus(nextMsg.content[0], nextMsg, 0, this._state.context || 'detail')\n }\n }\n }\n\n public focusPrevious(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex > 0) {\n const prevContent = currentMsg.content[currentContentIndex - 1]\n this.focus(prevContent, currentMsg, currentContentIndex - 1, this._state.context || 'detail')\n return\n }\n\n // Try last content in previous message\n if (currentMsgIndex > 0) {\n const prevMsg = messages[currentMsgIndex - 1]\n if (prevMsg.content.length > 0) {\n const lastIndex = prevMsg.content.length - 1\n this.focus(prevMsg.content[lastIndex], prevMsg, lastIndex, this._state.context || 'detail')\n }\n }\n }\n}\n","let messageIdCounter = 0\nlet threadIdCounter = 0\n\nexport function generateMessageId(): string {\n return `msg-${Date.now()}-${++messageIdCounter}`\n}\n\nexport function generateThreadId(): string {\n return `thread-${Date.now()}-${++threadIdCounter}`\n}\n\nexport function generateId(prefix = 'id'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n}\n","import { ThreadListItemState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\n\nexport interface ThreadListItemRuntimeConfig {\n state: ThreadListItemState\n onSwitchTo: (threadId: string) => Promise<void>\n onRename: (threadId: string, title: string) => Promise<void>\n onDelete: (threadId: string) => Promise<void>\n}\n\nexport class ThreadListItemRuntime extends BaseSubscribable {\n private _state: ThreadListItemState\n\n constructor(private config: ThreadListItemRuntimeConfig) {\n super()\n this._state = config.state\n }\n\n public get state(): ThreadListItemState {\n return this._state\n }\n\n public getState(): ThreadListItemState {\n return this._state\n }\n\n public updateState(state: ThreadListItemState): void {\n this._state = state\n this.notifySubscribers()\n }\n\n public async switchTo(): Promise<void> {\n await this.config.onSwitchTo(this._state.id)\n }\n\n public async rename(newTitle: string): Promise<void> {\n await this.config.onRename(this._state.id, newTitle)\n }\n\n public async delete(): Promise<void> {\n await this.config.onDelete(this._state.id)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ComposerState {\n text: string\n isSubmitting: boolean\n}\n\nexport class ComposerRuntime extends BaseSubscribable {\n private _text: string = ''\n private _isSubmitting: boolean = false\n\n public get text(): string {\n return this._text\n }\n\n public get isSubmitting(): boolean {\n return this._isSubmitting\n }\n\n public getState(): ComposerState {\n return {\n text: this._text,\n isSubmitting: this._isSubmitting\n }\n }\n\n public setText(text: string): void {\n this._text = text\n this.notifySubscribers()\n }\n\n public clear(): void {\n this._text = ''\n this.notifySubscribers()\n }\n\n public setSubmitting(isSubmitting: boolean): void {\n this._isSubmitting = isSubmitting\n this.notifySubscribers()\n }\n}\n\nexport default ComposerRuntime\n","import { AppendMessage, Message, TextContent } from '../../types/message'\nimport { RuntimeCapabilities, ThreadState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\nimport ComposerRuntime from '../ComposerRuntime/ComposerRuntime'\nimport { ThreadRuntimeCore } from './ThreadRuntimeCore'\n\nexport class ThreadRuntime extends BaseSubscribable {\n public readonly composer: ComposerRuntime\n\n constructor(private _core: ThreadRuntimeCore) {\n super()\n this.composer = new ComposerRuntime()\n\n // Subscribe to core changes and propagate\n this._core.subscribe(() => {\n this.notifySubscribers()\n })\n }\n\n public get messages(): readonly Message[] {\n return this._core.messages\n }\n\n public get isRunning(): boolean {\n return this._core.isRunning\n }\n\n public get isDisabled(): boolean {\n return this._core.isDisabled\n }\n\n public get capabilities(): RuntimeCapabilities {\n return this._core.capabilities\n }\n\n public get conversationId(): string | undefined {\n return this._core.conversationId\n }\n\n public get title(): string | undefined {\n return this._core.title\n }\n\n public getState(): ThreadState {\n return {\n threadId: 'main', // Will be set by ThreadListRuntime\n isDisabled: this._core.isDisabled,\n isRunning: this._core.isRunning,\n capabilities: this._core.capabilities,\n conversationId: this._core.conversationId,\n title: this._core.title\n }\n }\n\n public append(message: AppendMessage): void {\n this._core.append(message)\n }\n\n public async send(text: string): Promise<void> {\n if (!text.trim()) return\n\n this.composer.setSubmitting(true)\n\n try {\n this.composer.clear()\n await this._core.startRun({\n role: 'user',\n content: [{ type: 'text', data: text } as TextContent]\n })\n } catch (e) {\n // TODO: Handle error\n } finally {\n this.composer.setSubmitting(false)\n }\n }\n\n public cancelRun(): void {\n this._core.cancelRun()\n }\n\n public clear(): void {\n this._core.clear()\n }\n\n public reset(messages: Message[] = []): void {\n this._core.reset(messages)\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._core.setConversationId(conversationId)\n }\n\n public setTitle(title: string | undefined): void {\n this._core.setTitle(title)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { CapabilityContent } from '../../types'\nimport { StreamAdapter, StreamEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, MessageStatus } from '../../types/message'\nimport { RuntimeCapabilities } from '../../types/thread'\nimport { generateMessageId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ThreadRuntimeCoreConfig {\n streamAdapter: StreamAdapter\n initialMessages?: Message[]\n onMessagesChange?: (messages: Message[]) => void\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadRuntimeCore extends BaseSubscribable {\n private _messages: Message[] = []\n private _isRunning = false\n private _isDisabled = false\n private _abortController: AbortController | null = null\n private _conversationId?: string\n private _title?: string\n\n // Track current part being accumulated\n private _currentPart: {\n messageId: string\n contentIndex: number\n type: string\n parentId?: string\n } | null = null\n\n constructor(private config: ThreadRuntimeCoreConfig) {\n super()\n if (config.initialMessages) {\n this._messages = [...config.initialMessages]\n }\n }\n\n public get messages(): readonly Message[] {\n return this._messages\n }\n\n public get isRunning(): boolean {\n return this._isRunning\n }\n\n public get isDisabled(): boolean {\n return this._isDisabled\n }\n\n public get conversationId(): string | undefined {\n return this._conversationId\n }\n\n public get title(): string | undefined {\n return this._title\n }\n\n public get capabilities(): RuntimeCapabilities {\n return {\n cancel: true,\n edit: false,\n reload: false,\n speech: false,\n attachments: false,\n feedback: false\n }\n }\n\n private updateMessages(messages: Message[]): void {\n this._messages = messages\n this.config.onMessagesChange?.(this._messages)\n this.notifySubscribers()\n }\n\n public append(message: AppendMessage): void {\n const newMessage: Message = {\n id: message.id || generateMessageId(),\n parentId: message.parentId,\n role: message.role,\n content: message.content,\n status: message.status || { type: 'complete' },\n timestamp: message.timestamp || Date.now(),\n metadata: message.metadata\n }\n\n this.updateMessages([...this._messages, newMessage])\n }\n\n public async startRun(userMessage: AppendMessage): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this.append(userMessage)\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null // Reset current part\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null // Clean up\n this.notifySubscribers()\n }\n }\n\n private handleStreamEvent(messageId: string, event: StreamEvent): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Handle core events with type guards\n if (event.type === 'part-start') {\n this.handlePartStart(message, event as Extract<StreamEvent, { type: 'part-start' }>)\n } else if (event.type === 'text-delta' || event.type === 'assistant_thought') {\n this.handleTextDelta(message, event as Extract<StreamEvent, { type: 'text-delta' }>)\n } else if (event.type === 'part-finish') {\n this.handlePartFinish()\n } else if (event.type === 'metadata') {\n const metadataEvent = event as Extract<StreamEvent, { type: 'metadata' }>\n message.metadata = {\n ...message.metadata,\n conversationId: metadataEvent.conversationId,\n interactionId: metadataEvent.interactionId\n }\n\n if (metadataEvent.conversationId && !this._conversationId) {\n this._conversationId = metadataEvent.conversationId\n }\n\n if (metadataEvent.title && !this._title) {\n this._title = metadataEvent.title\n }\n } else if (event.type === 'capability_execution') {\n const capabilityEvent = event as Extract<StreamEvent, { type: 'capability_execution' }>\n message.content = [\n ...message.content,\n {\n type: 'capability',\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName,\n args: capabilityEvent.args\n } as CapabilityContent\n ]\n\n // Execute capability if manager is available\n if (this.config.capabilityExecutionManager) {\n this.config.capabilityExecutionManager.executeCapability(\n capabilityEvent.capabilityName,\n capabilityEvent.capabilityId,\n capabilityEvent.args,\n messageId,\n capabilityEvent.strategy\n )\n }\n } else if (event.type === 'error') {\n const errorEvent = event as Extract<StreamEvent, { type: 'error' }>\n message.content = [\n ...message.content,\n {\n type: 'error',\n data: errorEvent.error\n }\n ]\n } else {\n // Handle custom events\n const customEvent = event as Extract<StreamEvent, { data?: any }>\n message.content = [\n ...message.content,\n {\n type: customEvent.type,\n data: customEvent.data,\n parentId: customEvent.parentId\n }\n ]\n }\n\n // Update message with new reference\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private handlePartStart(message: Message, event: Extract<StreamEvent, { type: 'part-start' }>): void {\n const contentIndex = message.content.length\n\n // Create initial content based on type\n let initialContent: MessageContent\n\n switch (event.part.type) {\n case 'assistant_thought':\n // Initialize as array for assistant thoughts\n initialContent = {\n type: event.part.type,\n data: [],\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n case 'text':\n // Initialize as empty string for text\n initialContent = {\n type: event.part.type,\n data: '',\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n default:\n initialContent = {\n type: event.part.type,\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n }\n\n // Add to message with new reference\n message.content = [...message.content, initialContent]\n\n // Track current part\n this._currentPart = {\n messageId: message.id,\n contentIndex,\n type: event.part.type,\n parentId: event.part.parentId\n }\n }\n\n private handleTextDelta(message: Message, event: Extract<StreamEvent, { type: 'text-delta' }>): void {\n if (!this._currentPart) {\n console.warn('Received text-delta without part-start')\n return\n }\n\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content.type === 'assistant_thought') {\n // For assistant thoughts, push each delta as a new array item\n if (!Array.isArray(content.data)) {\n content.data = []\n }\n if (event.delta.trim()) {\n content.data.push(event.delta.trim())\n }\n } else {\n // For text and other types, concatenate into a single string\n content.data = (content.data || '') + event.delta\n }\n }\n\n private handlePartFinish(): void {\n if (!this._currentPart) {\n console.warn('Received part-finish without part-start')\n return\n }\n\n // Find the message and content\n const messageIndex = this._messages.findIndex(m => m.id === this._currentPart!.messageId)\n if (messageIndex !== -1) {\n const message = this._messages[messageIndex]\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content) {\n // Mark this content as complete\n content.status = { type: 'complete' }\n\n // Update message to trigger re-render\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n this.updateMessages(updatedMessages)\n }\n }\n\n // Part is complete, clear tracking\n this._currentPart = null\n }\n\n private updateMessageStatus(messageId: string, status: MessageStatus): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n {\n ...this._messages[messageIndex],\n status\n },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private completeStreamingContent(messageId: string): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Check if any content is streaming\n const hasStreamingContent = message.content.some(content => content.status?.type === 'streaming')\n\n if (!hasStreamingContent) return\n\n // Update all streaming content to complete\n const updatedContent = message.content.map(content => {\n if (content.status?.type === 'streaming') {\n return { ...content, status: { type: 'complete' } as const }\n }\n return content\n })\n\n // Update the message with completed content\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, content: updatedContent, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n public clear(): void {\n this.updateMessages([])\n }\n\n public cancelRun(): void {\n if (!this._isRunning || !this._abortController) {\n return\n }\n\n this._abortController.abort()\n }\n\n public reset(messages: Message[] = []): void {\n this.updateMessages([...messages])\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._conversationId = conversationId\n this.notifySubscribers()\n }\n\n public setTitle(title: string | undefined): void {\n this._title = title\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { StreamAdapter, ThreadListAdapter, ThreadListPaginatedResponse } from '../../types/adapters'\nimport { ThreadListItemState } from '../../types/thread'\nimport { generateThreadId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ThreadListItemRuntime } from '../ThreadListItemRuntime/ThreadListItemRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\nimport { ThreadRuntimeCore } from '../ThreadRuntime/ThreadRuntimeCore'\n\nexport interface ThreadListState {\n mainThreadId: string\n threads: readonly string[]\n isLoading: boolean\n isLoadingMore: boolean\n threadItems: Record<string, ThreadListItemState>\n pagination?: {\n currentPage: number\n totalPages: number\n totalCount: number\n hasMore: boolean\n }\n searchQuery?: string\n}\n\nexport interface ThreadListRuntimeConfig {\n streamAdapter: StreamAdapter\n threadListAdapter?: ThreadListAdapter\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadListRuntime extends BaseSubscribable {\n private _mainThreadId: string\n private _threads = new Map<string, ThreadRuntime>()\n private _threadItems = new Map<string, ThreadListItemRuntime>()\n private _threadStates = new Map<string, ThreadListItemState>()\n private _isLoading = false\n private _isLoadingMore = false\n private _currentPage = 0\n private _totalPages = 0\n private _totalCount = 0\n private _hasMore = true\n private _searchQuery: string | undefined\n private _abortController: AbortController | null = null\n public readonly main: ThreadRuntime\n\n constructor(private config: ThreadListRuntimeConfig) {\n super()\n\n // Create main thread\n this._mainThreadId = generateThreadId()\n const mainCore = new ThreadRuntimeCore({\n streamAdapter: config.streamAdapter,\n capabilityExecutionManager: config.capabilityExecutionManager\n })\n this.main = new ThreadRuntime(mainCore)\n this._threads.set(this._mainThreadId, this.main)\n\n // Create main thread state\n const mainState: ThreadListItemState = {\n id: this._mainThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: true,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(this._mainThreadId, mainState)\n\n // Create main thread item\n const mainItem = new ThreadListItemRuntime({\n state: mainState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(this._mainThreadId, mainItem)\n }\n\n public get isLoading(): boolean {\n return this._isLoading\n }\n\n public get isLoadingMore(): boolean {\n return this._isLoadingMore\n }\n\n /**\n * Get the currently active main thread\n */\n public getMainThread(): ThreadRuntime {\n const mainThread = this._threads.get(this._mainThreadId)\n if (!mainThread) {\n return this.main\n }\n return mainThread\n }\n\n public getState(): ThreadListState {\n const threads: string[] = []\n const threadItems: Record<string, ThreadListItemState> = {}\n\n for (const [id, state] of this._threadStates) {\n threadItems[id] = state\n if (state.status.type === 'regular') {\n threads.push(id)\n }\n }\n\n return {\n mainThreadId: this._mainThreadId,\n threads,\n isLoading: this._isLoading,\n isLoadingMore: this._isLoadingMore,\n threadItems,\n pagination: {\n currentPage: this._currentPage,\n totalPages: this._totalPages,\n totalCount: this._totalCount,\n hasMore: this._hasMore\n },\n searchQuery: this._searchQuery\n }\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n const thread = this._threads.get(threadId)\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`)\n }\n\n // Update old main thread\n const oldMainState = this._threadStates.get(this._mainThreadId)\n if (oldMainState) {\n oldMainState.isMain = false\n this._threadStates.set(this._mainThreadId, oldMainState)\n this._threadItems.get(this._mainThreadId)?.updateState(oldMainState)\n }\n\n // Update new main thread\n this._mainThreadId = threadId\n const newMainState = this._threadStates.get(threadId)\n if (newMainState) {\n newMainState.isMain = true\n this._threadStates.set(threadId, newMainState)\n this._threadItems.get(threadId)?.updateState(newMainState)\n\n // Update thread's conversationId and title\n thread.setConversationId(newMainState.conversationId)\n thread.setTitle(newMainState.title)\n }\n\n // Load thread messages if adapter exists\n if (this.config.threadListAdapter && newMainState?.conversationId) {\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const messages = await this.config.threadListAdapter.loadThread(threadId)\n thread.reset(messages)\n } catch (error) {\n console.error('Failed to load thread:', error)\n } finally {\n this._isLoading = false\n }\n }\n\n this.notifySubscribers()\n }\n\n public async switchToNewThread(): Promise<void> {\n const newThreadId = generateThreadId()\n const newCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const newThread = new ThreadRuntime(newCore)\n\n this._threads.set(newThreadId, newThread)\n\n // Create new thread state\n const newState: ThreadListItemState = {\n id: newThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: false,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(newThreadId, newState)\n\n // Create new thread item\n const newItem = new ThreadListItemRuntime({\n state: newState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(newThreadId, newItem)\n\n // Subscribe to new thread changes\n newThread.subscribe(() => {\n this.syncThreadStateFromRuntime(newThreadId, newThread)\n this.notifySubscribers()\n })\n\n // Create thread via adapter if exists\n if (this.config.threadListAdapter) {\n try {\n const createdState = await this.config.threadListAdapter.createThread()\n newState.conversationId = createdState.conversationId\n this._threadStates.set(newThreadId, newState)\n newItem.updateState(newState)\n } catch (error) {\n console.error('Failed to create thread:', error)\n }\n }\n\n await this.switchToThread(newThreadId)\n }\n\n public async loadThreads(query?: string, reset: boolean = false): Promise<void> {\n if (!this.config.threadListAdapter) {\n console.warn('No threadListAdapter configured')\n return\n }\n\n if (this._abortController) {\n this._abortController.abort()\n }\n this._abortController = new AbortController()\n\n const isNewSearch = query !== this._searchQuery\n const shouldReset = reset || isNewSearch\n\n if (shouldReset) {\n this._currentPage = 0\n this._searchQuery = query\n this._hasMore = true\n this._threadStates.clear()\n this._threads.clear()\n this._threadItems.clear()\n }\n\n if (!shouldReset && !this._hasMore) {\n return\n }\n\n if (shouldReset) {\n this._isLoading = true\n } else {\n this._isLoadingMore = true\n }\n this.notifySubscribers()\n\n try {\n const result = await this.config.threadListAdapter.loadThreads({\n query: this._searchQuery,\n page: this._currentPage,\n size: 50\n })\n\n // Handle both response types for backwards compatibility\n let threads: ThreadListItemState[]\n let pagination: ThreadListPaginatedResponse['pagination']\n\n if (Array.isArray(result)) {\n threads = result\n pagination = undefined\n } else {\n threads = result.threads\n pagination = result.pagination\n }\n\n // Update pagination state\n if (pagination) {\n this._totalPages = pagination.pageCount ?? 0\n this._totalCount = pagination.total ?? 0\n this._currentPage = pagination.pageNumber ?? this._currentPage\n this._hasMore =\n pagination.pageNumber !== undefined &&\n pagination.pageCount !== undefined &&\n pagination.pageNumber < pagination.pageCount - 1\n } else {\n this._hasMore = false\n }\n\n // Add new threads to state\n for (const state of threads) {\n if (this._threadStates.has(state.id)) {\n continue\n }\n\n const threadCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const thread = new ThreadRuntime(threadCore)\n this._threads.set(state.id, thread)\n this._threadStates.set(state.id, state)\n\n const threadItem = new ThreadListItemRuntime({\n state,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(state.id, threadItem)\n\n thread.subscribe(() => {\n this.syncThreadStateFromRuntime(state.id, thread)\n this.notifySubscribers()\n })\n }\n } catch (error) {\n if (error instanceof Error && error.name !== 'AbortError') {\n console.error('Failed to load threads:', error)\n }\n } finally {\n this._isLoading = false\n this._isLoadingMore = false\n this._abortController = null\n this.notifySubscribers()\n }\n }\n\n public async loadMoreThreads(): Promise<void> {\n if (this._isLoading || this._isLoadingMore || !this._hasMore) {\n return\n }\n\n this._currentPage += 1\n await this.loadThreads(this._searchQuery, false)\n }\n\n public async searchThreads(query: string): Promise<void> {\n await this.loadThreads(query, true)\n }\n\n /**\n * Syncs conversationId and title from thread runtime to thread state\n */\n private syncThreadStateFromRuntime(threadId: string, thread: ThreadRuntime): void {\n const currentState = this._threadStates.get(threadId)\n if (currentState) {\n const hasChanges = currentState.conversationId !== thread.conversationId || currentState.title !== thread.title\n\n if (hasChanges) {\n currentState.conversationId = thread.conversationId\n currentState.title = thread.title || currentState.title\n currentState.updatedAt = Date.now()\n this._threadStates.set(threadId, currentState)\n this._threadItems.get(threadId)?.updateState(currentState)\n }\n }\n }\n\n private async renameThread(threadId: string, newTitle: string): Promise<void> {\n const state = this._threadStates.get(threadId)\n if (!state) return\n\n state.title = newTitle\n state.updatedAt = Date.now()\n this._threadStates.set(threadId, state)\n this._threadItems.get(threadId)?.updateState(state)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.updateThread(threadId, { title: newTitle })\n } catch (error) {\n console.error('Failed to rename thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n\n private async deleteThread(threadId: string): Promise<void> {\n if (threadId === this._mainThreadId && this._threads.size === 1) {\n throw new Error('Cannot delete the last thread')\n }\n\n // If deleting main thread, switch to another thread first\n if (threadId === this._mainThreadId) {\n const otherThreadId = Array.from(this._threads.keys()).find(id => id !== threadId)\n if (otherThreadId) {\n await this.switchToThread(otherThreadId)\n }\n }\n\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.deleteThread(threadId)\n } catch (error) {\n console.error('Failed to delete thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager, CapabilityRegistry } from '../../core'\nimport { PluginRegistry } from '../../core/PluginRegistry'\nimport { Message } from '../../types/message'\nimport { ChatPlugin } from '../../types/plugin'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ContentFocusRuntime } from '../ContentFocusRuntime/ContentFocusRuntime'\nimport { ThreadListRuntime, ThreadListRuntimeConfig } from '../ThreadListRuntime/ThreadListRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\n\nexport interface AssistantRuntimeConfig extends ThreadListRuntimeConfig {\n plugins?: ChatPlugin[]\n}\n\nexport class AssistantRuntime extends BaseSubscribable {\n public readonly threads: ThreadListRuntime\n public readonly pluginRegistry: PluginRegistry\n public readonly capabilityRegistry: CapabilityRegistry\n public readonly capabilityExecutionManager: CapabilityExecutionManager\n private _contentFocusRuntime: ContentFocusRuntime\n private _currentThreadUnsubscribe?: () => void\n\n constructor(config: AssistantRuntimeConfig) {\n super()\n\n // Initialize plugin registry\n this.pluginRegistry = new PluginRegistry()\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n this.pluginRegistry.registerPlugin(plugin)\n })\n }\n\n // Initialize capability registry\n this.capabilityRegistry = new CapabilityRegistry()\n this.capabilityExecutionManager = new CapabilityExecutionManager(name => this.capabilityRegistry.getHandler(name))\n\n // Initialize thread list\n this.threads = new ThreadListRuntime({\n streamAdapter: config.streamAdapter,\n threadListAdapter: config.threadListAdapter,\n capabilityExecutionManager: this.capabilityExecutionManager\n })\n\n this._contentFocusRuntime = new ContentFocusRuntime()\n\n // Subscribe to content focus changes\n this._contentFocusRuntime.subscribe(() => {\n this.notifySubscribers()\n })\n\n // Subscribe to thread list changes (including thread switches)\n this.threads.subscribe(() => {\n // Re-subscribe to the new main thread when it changes\n this.subscribeToCurrentThread()\n this.notifySubscribers()\n })\n\n // Initial subscription to main thread\n this.subscribeToCurrentThread()\n }\n\n public get thread(): ThreadRuntime {\n return this.threads.getMainThread()\n }\n\n public get contentFocus(): ContentFocusRuntime {\n return this._contentFocusRuntime\n }\n\n /**\n * Register a plugin\n */\n public registerPlugin(plugin: ChatPlugin): void {\n this.pluginRegistry.registerPlugin(plugin)\n\n plugin.init?.({\n streamingEnabled: true,\n feedbackEnabled: false,\n detailPanelEnabled: true\n })\n }\n\n /**\n * Unregister a plugin\n */\n public unregisterPlugin(pluginId: string): boolean {\n return this.pluginRegistry.unregisterPlugin(pluginId)\n }\n\n /**\n * Subscribe to the current main thread\n * Called when thread switches to ensure we listen to the right thread\n */\n private subscribeToCurrentThread(): void {\n // Unsubscribe from previous thread\n if (this._currentThreadUnsubscribe) {\n this._currentThreadUnsubscribe()\n }\n\n // Subscribe to new main thread\n this._currentThreadUnsubscribe = this.thread.subscribe(() => {\n this.handleMessagesChange(this.thread.messages)\n this.notifySubscribers()\n })\n }\n\n private handleMessagesChange(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Only auto-focus when a new assistant message completes\n const lastMessage = messages[messages.length - 1]\n\n if (lastMessage.role === 'assistant' && lastMessage.status.type === 'complete') {\n this.autoFocusLastContent(messages)\n }\n }\n\n private autoFocusLastContent(messages: readonly Message[]): void {\n if (messages.length === 0) return\n if (this._contentFocusRuntime.isActive) return // Don't override existing focus\n\n // Find last assistant message\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message.role !== 'assistant') continue\n\n // Find last content with focus capability\n for (let j = message.content.length - 1; j >= 0; j--) {\n const content = message.content[j]\n const renderer = this.pluginRegistry.getRenderersByType(content.type)\n\n if (renderer.length > 0 && renderer[0].capabilities?.supportsFocus) {\n this._contentFocusRuntime.focus(content, message, j, 'detail')\n return\n }\n }\n }\n }\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\n\nconst AssistantRuntimeContext = createContext<AssistantRuntime | null>(null)\n\nexport interface AssistantRuntimeProviderProps {\n runtime: AssistantRuntime\n children: ReactNode\n}\n\nexport function AssistantRuntimeProvider({ runtime, children }: AssistantRuntimeProviderProps): JSX.Element {\n return <AssistantRuntimeContext.Provider value={runtime}>{children}</AssistantRuntimeContext.Provider>\n}\n\nexport function useAssistantRuntimeContext(): AssistantRuntime {\n const runtime = useContext(AssistantRuntimeContext)\n if (!runtime) {\n throw new Error('useAssistantRuntimeContext must be used within AssistantRuntimeProvider')\n }\n return runtime\n}\n","import { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\nimport { useAssistantRuntimeContext } from '../providers/AssistantRuntimeProvider'\n\nexport function useAssistantRuntime(): AssistantRuntime {\n return useAssistantRuntimeContext()\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadListState } from '../../runtime/ThreadListRuntime/ThreadListRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useThreadList() {\n const runtime = useAssistantRuntime()\n\n return {\n switchToThread: (threadId: string) => runtime.threads.switchToThread(threadId),\n switchToNewThread: () => runtime.threads.switchToNewThread(),\n loadThreads: (query?: string, reset?: boolean) => runtime.threads.loadThreads(query, reset),\n loadMoreThreads: () => runtime.threads.loadMoreThreads(),\n searchThreads: (query: string) => runtime.threads.searchThreads(query),\n renameThread: (threadId: string, title: string) => runtime.threads['renameThread']?.(threadId, title),\n deleteThread: (threadId: string) => runtime.threads['deleteThread']?.(threadId)\n }\n}\n\nexport function useThreadListState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ThreadListState>(runtime.threads.getState())\n\n useEffect(() => {\n const unsubscribe = runtime.threads.subscribe(() => {\n setState(runtime.threads.getState())\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { ThreadRuntime } from '../../runtime/ThreadRuntime/ThreadRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCurrentThread(): ThreadRuntime {\n const mainThread = useAssistantRuntime().threads.getMainThread()\n return mainThread\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useSyncExternalStore } from 'use-sync-external-store/shim'\n\nimport { Message } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useMessages(): readonly Message[] {\n const runtime = useAssistantRuntime()\n\n return useSyncExternalStore(\n callback => {\n // Subscribe to runtime, which notifies when thread switches\n // or when the current thread's messages change\n return runtime.subscribe(() => {\n callback()\n })\n },\n\n () => {\n // Always get messages from the current main thread\n return runtime.thread.messages\n },\n () => runtime.thread.messages\n )\n}\n","import { useState } from 'react'\n\nimport { useCurrentThread } from './useCurrentThread'\n\nexport function useComposer() {\n const thread = useCurrentThread()\n const [text, setText] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const send = async (e?: React.FormEvent) => {\n e?.preventDefault()\n\n if (!text.trim() || isSubmitting) return\n\n const messageText = text\n setText('')\n setIsSubmitting(true)\n\n try {\n await thread.send(messageText)\n } catch (error) {\n console.error('Failed to send message:', error)\n setText(messageText)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n return {\n text,\n setText,\n isSubmitting,\n send,\n clear: () => setText(''),\n append: (value: string) => setText(prev => prev + value)\n }\n}\n","import { FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentRenderer(contentType: string, context?: FocusContext) {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n\n if (!renderer) {\n return {\n component: null,\n auxiliaryComponent: null,\n supportsFocus: false,\n supportsPreview: false,\n supportsFullscreen: false\n }\n }\n\n // Get auxiliary component for specific context\n const auxiliaryComponent = context ? renderer.auxiliary?.[context] : null\n\n return {\n component: renderer.component,\n auxiliaryComponent,\n supportsFocus: renderer.capabilities?.supportsFocus ?? false,\n supportsPreview: renderer.capabilities?.supportsPreview ?? false,\n supportsFullscreen: renderer.capabilities?.supportsFullscreen ?? false\n }\n}\n\nexport function useHasAuxiliaryView(contentType: string, context: FocusContext): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return !!renderer?.auxiliary?.[context]\n}\n\nexport function useSupportsFocus(contentType: string): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return renderer?.capabilities?.supportsFocus ?? false\n}\n","import { useEffect, useState } from 'react'\n\nimport { ContentFocusState, FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentFocus() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return {\n ...state,\n focus: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.focus(content, message, contentIndex, context),\n blur: () => runtime.contentFocus.blur(),\n toggle: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.toggle(content, message, contentIndex, context),\n switchContext: (context: FocusContext) => runtime.contentFocus.switchContext(context),\n focusNext: () => runtime.contentFocus.focusNext(runtime.thread.messages),\n focusPrevious: () => runtime.contentFocus.focusPrevious(runtime.thread.messages)\n }\n}\n\nexport function useContentFocusState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect } from 'react'\n\nimport { CapabilityConfig } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n // Register handler\n if (config.execute) {\n runtime.capabilityRegistry.registerHandler(config.name, { execute: config.execute })\n }\n\n // Register renderer\n if (config.render) {\n runtime.capabilityRegistry.registerRenderer(config.name, {\n component: config.render\n })\n }\n\n // Cleanup on unmount\n return () => {\n runtime.capabilityRegistry.unregister(config.name)\n }\n }, [config.name, runtime])\n}\n","import { useEffect, useReducer, useState } from 'react'\n\nimport { CapabilityExecution } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapabilityExecution(capabilityId: string): CapabilityExecution | undefined {\n const runtime = useAssistantRuntime()\n const [execution, setExecution] = useState<CapabilityExecution | undefined>(() =>\n runtime.capabilityExecutionManager.getExecution(capabilityId)\n )\n const [, forceUpdate] = useReducer(x => x + 1, 0)\n\n useEffect(() => {\n // Get initial state\n const initialExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(initialExecution)\n\n // Subscribe to updates\n const unsubscribe = runtime.capabilityExecutionManager.subscribe(id => {\n if (id === capabilityId) {\n const updatedExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(updatedExecution)\n forceUpdate()\n }\n })\n\n return unsubscribe\n }, [capabilityId, runtime])\n\n return execution\n}\n","import { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react'\n\nimport { ChatContextItem, ChatContextMap, ChatContextValue } from '../../types/context'\n\nconst ChatContext = createContext<ChatContextValue | undefined>(undefined)\n\nexport interface ChatContextProviderProps {\n children: ReactNode\n}\n\nexport function ChatContextProvider({ children }: ChatContextProviderProps): JSX.Element {\n const [contexts, setContexts] = useState<ChatContextMap>({})\n\n const setContext = useCallback((id: string, context: Omit<ChatContextItem, 'id'> | null) => {\n setContexts(prev => {\n if (context === null) {\n const { [id]: _, ...rest } = prev\n return rest\n }\n return {\n ...prev,\n [id]: { id, ...context }\n }\n })\n }, [])\n\n const removeContext = useCallback((id: string) => {\n setContexts(prev => {\n const { [id]: _, ...rest } = prev\n return rest\n })\n }, [])\n\n const getContextData = useCallback(() => {\n return Object.values(contexts).reduce(\n (acc, context) => {\n // Stringify non-string values for backend compatibility\n const stringifiedData = Object.entries(context.data).reduce(\n (dataAcc, [key, value]) => {\n return {\n ...dataAcc,\n [key]: typeof value === 'string' ? value : JSON.stringify(value)\n }\n },\n {} as Record<string, unknown>\n )\n return { ...acc, ...stringifiedData }\n },\n {} as Record<string, unknown>\n )\n }, [contexts])\n\n const clearContexts = useCallback(() => {\n setContexts({})\n }, [])\n\n const value = useMemo(\n () => ({\n contexts,\n setContext,\n removeContext,\n getContextData,\n clearContexts\n }),\n [contexts, setContext, removeContext, getContextData, clearContexts]\n )\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport function useChatContext(): ChatContextValue {\n const context = useContext(ChatContext)\n if (!context) {\n throw new Error('useChatContext must be used within a ChatContextProvider')\n }\n return context\n}\n","import { useEffect } from 'react'\n\nimport { ChatContextItem } from '../../types/context'\nimport { useChatContext } from '../providers/ChatContextProvider'\n\nexport interface UsePageContextOptions extends Omit<ChatContextItem, 'id'> {\n /**\n * Optional ID for the context. Defaults to 'currentPage'.\n * Use a custom ID if you need multiple page contexts or want to namespace your context.\n */\n id?: string\n}\n\n/**\n * Hook for pages to easily register their context with the chat system.\n * Automatically cleans up the context when the component unmounts.\n *\n * @param options - Context configuration\n *\n * @example\n * ```tsx\n * function ConnectorListPage() {\n * usePageContext({\n * displayName: 'Connectors',\n * data: {\n * currentPage: { page_id: 'connectors' }\n * },\n * priority: 0\n * })\n *\n * // Rest of component...\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom ID\n * function PipelineStudio({ pipelineId, pipelineName }) {\n * usePageContext({\n * id: 'currentPipeline',\n * displayName: `Pipeline: ${pipelineName}`,\n * data: {\n * selectedPipeline: { id: pipelineId, name: pipelineName }\n * },\n * priority: 1\n * })\n * }\n * ```\n */\nexport function usePageContext(options: UsePageContextOptions): void {\n const { setContext, removeContext } = useChatContext()\n const { id = 'currentPage', ...contextData } = options\n\n useEffect(() => {\n setContext(id, contextData)\n\n return () => {\n removeContext(id)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, contextData.displayName, JSON.stringify(contextData.data), contextData.priority, contextData.icon])\n}\n","import { CapabilityContent } from '../../types/capability'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from '../hooks/useAssistantRuntime'\nimport { useCapabilityExecution } from '../hooks/useCapabilityExecution'\n\nexport interface CapabilityRendererProps {\n message: Message\n content: MessageContent\n}\n\nexport function CapabilityRendererComp({ message, content }: CapabilityRendererProps) {\n const runtime = useAssistantRuntime()\n const capabilityContent = content as CapabilityContent\n const execution = useCapabilityExecution(capabilityContent.capabilityId)\n\n const renderer = runtime.capabilityRegistry.getRenderer(capabilityContent.capabilityName)\n\n if (!renderer || !execution) {\n return null\n }\n\n const Component = renderer.component\n\n return (\n <Component\n capabilityName={execution.name}\n capabilityId={execution.id}\n args={execution.args}\n result={execution.result}\n status={execution.status}\n message={message}\n />\n )\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { useContentRenderer } from '../hooks/useContentRenderer'\nimport { CapabilityRendererComp } from './CapabilityRenderer'\n\nexport function ContentRenderer({ message, content }: { message: Message; content: MessageContent }) {\n const { component } = useContentRenderer(content.type)\n\n if (content.type === 'capability') {\n return <CapabilityRendererComp message={message} content={content} />\n }\n\n if (!component) {\n return null\n }\n\n const Component = component\n return <Component content={content} message={message} />\n}\n","import { AuxiliaryRendererProps } from '../../types/plugin'\nimport { useContentRenderer } from '../hooks'\n\nexport function AuxiliaryRenderer({\n message,\n content,\n context,\n onClose,\n onNavigate,\n onSwitchContext\n}: AuxiliaryRendererProps) {\n const { auxiliaryComponent } = useContentRenderer(content.type, context)\n\n if (!auxiliaryComponent) {\n return null\n }\n\n const Component = auxiliaryComponent\n return (\n <Component\n content={content}\n message={message}\n context={context}\n onClose={onClose}\n onNavigate={onNavigate}\n onSwitchContext={onSwitchContext}\n />\n )\n}\n","import { FC } from 'react'\n\nimport { CapabilityConfig } from '../../types'\nimport { useCapability } from '../hooks/useCapability'\n\nexport function makeCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): FC {\n const Capability: FC = () => {\n useCapability(config)\n return null\n }\n\n Capability.displayName = `Capability(${config.name})`\n\n return Capability\n}\n","import { StreamAdapter, StreamChunk } from '../types/adapters'\nimport { Message } from '../types/message'\n\nexport interface SSEEvent {\n event: string\n data: any\n}\n\nexport abstract class BaseSSEStreamAdapter<TAllowedEvents extends readonly string[] = readonly string[]>\n implements StreamAdapter\n{\n protected abstract prepareRequest(params: { messages: Message[]; conversationId?: string; signal?: AbortSignal }): {\n url: string\n options: RequestInit\n }\n\n protected abstract convertEvent(event: SSEEvent & { event: TAllowedEvents[number] }): StreamChunk | null\n\n protected getAllowedEvents(): TAllowedEvents | null {\n return null\n }\n\n protected shouldProcessEvent(eventType: string): boolean {\n const allowedEvents = this.getAllowedEvents()\n if (!allowedEvents) return true\n return allowedEvents.includes(eventType)\n }\n\n async *stream(params: {\n messages: Message[]\n conversationId?: string\n signal?: AbortSignal\n }): AsyncGenerator<StreamChunk, void, unknown> {\n const { signal } = params\n const { url, options } = this.prepareRequest(params)\n\n const response = await fetch(url, { ...options, signal })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n yield* this.parseSSEStream(response.body, signal)\n }\n\n private async *parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n ): AsyncGenerator<StreamChunk, void, unknown> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent: string | null = null\n\n try {\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read()\n\n if (done) break\n if (signal?.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (!trimmedLine) {\n currentEvent = null\n continue\n }\n\n if (trimmedLine === ': ping') {\n continue\n }\n\n if (trimmedLine.startsWith('event:')) {\n currentEvent = trimmedLine.substring(6).trim()\n continue\n }\n\n if (trimmedLine.startsWith('data:')) {\n const dataStr = trimmedLine.substring(5).trim()\n\n if (dataStr === 'eof' || trimmedLine === 'eof') {\n break\n }\n\n try {\n const data = JSON.parse(dataStr)\n\n if (currentEvent && this.shouldProcessEvent(currentEvent)) {\n const chunk = this.convertEvent({\n event: currentEvent as TAllowedEvents[number],\n data\n })\n if (chunk) {\n yield chunk\n }\n }\n } catch (e) {\n // handle error\n }\n\n currentEvent = null\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n"],"names":["PluginRegistry","__publicField","plugin","renderer","renderers","a","b","pluginId","filteredRenderers","r","type","CapabilityRegistry","name","handler","CapabilityExecutionManager","getHandler","id","args","messageId","strategy","execution","executionId","running","result","error","errorMessage","index","e","callback","BaseSubscribable","ContentFocusRuntime","content","message","contentIndex","context","messages","currentMsgIndex","m","currentMsg","currentContentIndex","nextContent","nextMsg","prevContent","prevMsg","lastIndex","messageIdCounter","threadIdCounter","generateMessageId","generateThreadId","ThreadListItemRuntime","config","state","newTitle","ComposerRuntime","text","isSubmitting","ThreadRuntime","_core","conversationId","title","ThreadRuntimeCore","_b","_a","newMessage","userMessage","assistantMessageId","assistantMessage","stream","event","messageIndex","metadataEvent","capabilityEvent","errorEvent","customEvent","updatedMessages","initialContent","status","updatedContent","ThreadListRuntime","mainCore","mainState","mainItem","mainThread","threads","threadItems","threadId","thread","oldMainState","newMainState","newThreadId","newCore","newThread","newState","newItem","createdState","query","reset","isNewSearch","shouldReset","pagination","threadCore","threadItem","currentState","otherThreadId","AssistantRuntime","lastMessage","i","j","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","order2","n","test3","letter","objectAssign","target","source","from","to","symbols","s","key","require$$0","f","require$$1","g","reactJsxRuntime_production_min","h","p","q","c","k","d","l","jsxRuntimeModule","AssistantRuntimeContext","createContext","AssistantRuntimeProvider","runtime","children","useAssistantRuntimeContext","useContext","useAssistantRuntime","useThreadList","useThreadListState","setState","useState","useEffect","useCurrentThread","React","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","value","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","shimModule","useMessages","useSyncExternalStore","useComposer","setText","setIsSubmitting","messageText","prev","useContentRenderer","contentType","auxiliaryComponent","_c","_d","useContentFocus","useCapability","useCapabilityExecution","capabilityId","setExecution","useReducer","initialExecution","updatedExecution","ChatContext","ChatContextProvider","contexts","setContexts","setContext","useCallback","_","rest","removeContext","getContextData","acc","stringifiedData","dataAcc","clearContexts","useMemo","jsx","useChatContext","usePageContext","options","contextData","CapabilityRendererComp","capabilityContent","Component","ContentRenderer","component","AuxiliaryRenderer","onClose","onNavigate","onSwitchContext","makeCapability","Capability","BaseSSEStreamAdapter","eventType","allowedEvents","params","signal","url","response","body","reader","decoder","buffer","currentEvent","done","lines","line","trimmedLine","dataStr","data","chunk"],"mappings":"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","x_google_ignoreList":[12,13,14,19,20]}
|
|
@@ -33,6 +33,7 @@ export declare class ThreadRuntimeCore extends BaseSubscribable {
|
|
|
33
33
|
private handleTextDelta;
|
|
34
34
|
private handlePartFinish;
|
|
35
35
|
private updateMessageStatus;
|
|
36
|
+
private completeStreamingContent;
|
|
36
37
|
clear(): void;
|
|
37
38
|
cancelRun(): void;
|
|
38
39
|
reset(messages?: Message[]): void;
|
package/dist/types/message.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ export type MessageStatus = {
|
|
|
11
11
|
} | {
|
|
12
12
|
type: 'cancelled';
|
|
13
13
|
};
|
|
14
|
+
export type ContentStatus = {
|
|
15
|
+
type: 'streaming';
|
|
16
|
+
} | {
|
|
17
|
+
type: 'complete';
|
|
18
|
+
} | {
|
|
19
|
+
type: 'error';
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
14
22
|
export interface MessageMetadata {
|
|
15
23
|
interactionId?: string;
|
|
16
24
|
conversationId?: string;
|
|
@@ -48,6 +56,7 @@ export interface MessageContent<T = any> {
|
|
|
48
56
|
type: string;
|
|
49
57
|
parentId?: string;
|
|
50
58
|
data?: T;
|
|
59
|
+
status?: ContentStatus;
|
|
51
60
|
}
|
|
52
61
|
export type AppendMessage = Omit<Message, 'id' | 'timestamp' | 'status'> & {
|
|
53
62
|
id?: string;
|