@harnessio/ai-chat-core 0.0.11 → 0.0.13

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
@@ -1,7 +1,7 @@
1
1
  var J = Object.defineProperty;
2
2
  var z = (i, s, t) => s in i ? J(i, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[s] = t;
3
3
  var c = (i, s, t) => z(i, typeof s != "symbol" ? s + "" : s, t);
4
- import k, { createContext as q, useContext as Q, useState as x, useEffect as w, useReducer as W, useCallback as T, useMemo as V } from "react";
4
+ import k, { createContext as q, useContext as Q, useState as b, useEffect as w, useReducer as W, useCallback as C, useMemo as V } from "react";
5
5
  class G {
6
6
  constructor() {
7
7
  c(this, "plugins", /* @__PURE__ */ new Map());
@@ -475,10 +475,10 @@ class v 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
  });
@@ -623,6 +623,24 @@ class v extends y {
623
623
  ];
624
624
  this.updateMessages(r);
625
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
+ }
626
644
  clear() {
627
645
  this.updateMessages([]);
628
646
  }
@@ -780,22 +798,22 @@ class st extends y {
780
798
  });
781
799
  let o, u;
782
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;
783
- for (const l of o) {
784
- if (this._threadStates.has(l.id))
801
+ for (const d of o) {
802
+ if (this._threadStates.has(d.id))
785
803
  continue;
786
804
  const g = new v({
787
805
  streamAdapter: this.config.streamAdapter,
788
806
  capabilityExecutionManager: this.config.capabilityExecutionManager
789
807
  }), h = new M(g);
790
- this._threads.set(l.id, h), this._threadStates.set(l.id, l);
791
- const d = new I({
792
- state: l,
808
+ this._threads.set(d.id, h), this._threadStates.set(d.id, d);
809
+ const l = new I({
810
+ state: d,
793
811
  onSwitchTo: this.switchToThread.bind(this),
794
812
  onRename: this.renameThread.bind(this),
795
813
  onDelete: this.deleteThread.bind(this)
796
814
  });
797
- this._threadItems.set(l.id, d), h.subscribe(() => {
798
- this.syncThreadStateFromRuntime(l.id, h), this.notifySubscribers();
815
+ this._threadItems.set(d.id, l), h.subscribe(() => {
816
+ this.syncThreadStateFromRuntime(d.id, h), this.notifySubscribers();
799
817
  });
800
818
  }
801
819
  } catch (a) {
@@ -848,7 +866,7 @@ class st extends y {
848
866
  this.notifySubscribers();
849
867
  }
850
868
  }
851
- class yt extends y {
869
+ class bt extends y {
852
870
  constructor(t) {
853
871
  super();
854
872
  c(this, "threads");
@@ -922,7 +940,7 @@ class yt extends y {
922
940
  }
923
941
  }
924
942
  }
925
- var R = { exports: {} }, _ = {};
943
+ var R = { exports: {} }, x = {};
926
944
  /*
927
945
  object-assign
928
946
  (c) Sindre Sorhus
@@ -952,23 +970,23 @@ function rt() {
952
970
  });
953
971
  if (u.join("") !== "0123456789")
954
972
  return !1;
955
- var l = {};
973
+ var d = {};
956
974
  return "abcdefghijklmnopqrst".split("").forEach(function(g) {
957
- l[g] = g;
958
- }), Object.keys(Object.assign({}, l)).join("") === "abcdefghijklmnopqrst";
975
+ d[g] = g;
976
+ }), Object.keys(Object.assign({}, d)).join("") === "abcdefghijklmnopqrst";
959
977
  } catch {
960
978
  return !1;
961
979
  }
962
980
  }
963
981
  return E = n() ? Object.assign : function(r, a) {
964
- for (var o, u = e(r), l, g = 1; g < arguments.length; g++) {
982
+ for (var o, u = e(r), d, g = 1; g < arguments.length; g++) {
965
983
  o = Object(arguments[g]);
966
984
  for (var h in o)
967
985
  s.call(o, h) && (u[h] = o[h]);
968
986
  if (i) {
969
- l = i(o);
970
- for (var d = 0; d < l.length; d++)
971
- t.call(o, l[d]) && (u[l[d]] = o[l[d]]);
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]]);
972
990
  }
973
991
  }
974
992
  return u;
@@ -984,43 +1002,43 @@ function rt() {
984
1002
  */
985
1003
  var j;
986
1004
  function nt() {
987
- if (j) return _;
1005
+ if (j) return x;
988
1006
  j = 1, rt();
989
1007
  var i = k, s = 60103;
990
- if (_.Fragment = 60107, typeof Symbol == "function" && Symbol.for) {
1008
+ if (x.Fragment = 60107, typeof Symbol == "function" && Symbol.for) {
991
1009
  var t = Symbol.for;
992
- s = t("react.element"), _.Fragment = t("react.fragment");
1010
+ s = t("react.element"), x.Fragment = t("react.fragment");
993
1011
  }
994
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 };
995
- function a(o, u, l) {
996
- var g, h = {}, d = null, f = null;
997
- l !== void 0 && (d = "" + l), u.key !== void 0 && (d = "" + u.key), u.ref !== void 0 && (f = u.ref);
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);
998
1016
  for (g in u) n.call(u, g) && !r.hasOwnProperty(g) && (h[g] = u[g]);
999
1017
  if (o && o.defaultProps) for (g in u = o.defaultProps, u) h[g] === void 0 && (h[g] = u[g]);
1000
- return { $$typeof: s, type: o, key: d, ref: f, props: h, _owner: e.current };
1018
+ return { $$typeof: s, type: o, key: l, ref: p, props: h, _owner: e.current };
1001
1019
  }
1002
- return _.jsx = a, _.jsxs = a, _;
1020
+ return x.jsx = a, x.jsxs = a, x;
1003
1021
  }
1004
1022
  var O;
1005
1023
  function it() {
1006
1024
  return O || (O = 1, R.exports = nt()), R.exports;
1007
1025
  }
1008
1026
  var S = it();
1009
- const $ = q(null);
1010
- function mt({ runtime: i, children: s }) {
1011
- return /* @__PURE__ */ S.jsx($.Provider, { value: i, children: s });
1027
+ const U = q(null);
1028
+ function yt({ runtime: i, children: s }) {
1029
+ return /* @__PURE__ */ S.jsx(U.Provider, { value: i, children: s });
1012
1030
  }
1013
1031
  function at() {
1014
- const i = Q($);
1032
+ const i = Q(U);
1015
1033
  if (!i)
1016
1034
  throw new Error("useAssistantRuntimeContext must be used within AssistantRuntimeProvider");
1017
1035
  return i;
1018
1036
  }
1019
- function p() {
1037
+ function f() {
1020
1038
  return at();
1021
1039
  }
1022
1040
  function _t() {
1023
- const i = p();
1041
+ const i = f();
1024
1042
  return {
1025
1043
  switchToThread: (s) => i.threads.switchToThread(s),
1026
1044
  switchToNewThread: () => i.threads.switchToNewThread(),
@@ -1038,13 +1056,16 @@ function _t() {
1038
1056
  };
1039
1057
  }
1040
1058
  function xt() {
1041
- const i = p(), [s, t] = x(i.threads.getState());
1059
+ const i = f(), [s, t] = b(i.threads.getState());
1042
1060
  return w(() => i.threads.subscribe(() => {
1043
1061
  t(i.threads.getState());
1044
1062
  }), [i]), s;
1045
1063
  }
1046
1064
  function ot() {
1047
- return p().threads.getMainThread();
1065
+ const s = f().threads.getMainThread(), [, t] = b({});
1066
+ return w(() => s.subscribe(() => {
1067
+ t({});
1068
+ }), [s]), s;
1048
1069
  }
1049
1070
  var P = { exports: {} }, A = {};
1050
1071
  /**
@@ -1061,40 +1082,40 @@ function ut() {
1061
1082
  if (D) return A;
1062
1083
  D = 1;
1063
1084
  var i = k;
1064
- function s(h, d) {
1065
- return h === d && (h !== 0 || 1 / h === 1 / d) || h !== h && d !== d;
1085
+ function s(h, l) {
1086
+ return h === l && (h !== 0 || 1 / h === 1 / l) || h !== h && l !== l;
1066
1087
  }
1067
1088
  var t = typeof Object.is == "function" ? Object.is : s, e = i.useState, n = i.useEffect, r = i.useLayoutEffect, a = i.useDebugValue;
1068
- function o(h, d) {
1069
- var f = d(), m = e({ inst: { value: f, getSnapshot: d } }), b = m[0].inst, C = m[1];
1089
+ function o(h, l) {
1090
+ var p = l(), _ = e({ inst: { value: p, getSnapshot: l } }), m = _[0].inst, T = _[1];
1070
1091
  return r(
1071
1092
  function() {
1072
- b.value = f, b.getSnapshot = d, u(b) && C({ inst: b });
1093
+ m.value = p, m.getSnapshot = l, u(m) && T({ inst: m });
1073
1094
  },
1074
- [h, f, d]
1095
+ [h, p, l]
1075
1096
  ), n(
1076
1097
  function() {
1077
- return u(b) && C({ inst: b }), h(function() {
1078
- u(b) && C({ inst: b });
1098
+ return u(m) && T({ inst: m }), h(function() {
1099
+ u(m) && T({ inst: m });
1079
1100
  });
1080
1101
  },
1081
1102
  [h]
1082
- ), a(f), f;
1103
+ ), a(p), p;
1083
1104
  }
1084
1105
  function u(h) {
1085
- var d = h.getSnapshot;
1106
+ var l = h.getSnapshot;
1086
1107
  h = h.value;
1087
1108
  try {
1088
- var f = d();
1089
- return !t(h, f);
1109
+ var p = l();
1110
+ return !t(h, p);
1090
1111
  } catch {
1091
1112
  return !0;
1092
1113
  }
1093
1114
  }
1094
- function l(h, d) {
1095
- return d();
1115
+ function d(h, l) {
1116
+ return l();
1096
1117
  }
1097
- var g = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? l : o;
1118
+ var g = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? d : o;
1098
1119
  return A.useSyncExternalStore = i.useSyncExternalStore !== void 0 ? i.useSyncExternalStore : g, A;
1099
1120
  }
1100
1121
  var B;
@@ -1103,7 +1124,7 @@ function ct() {
1103
1124
  }
1104
1125
  var ht = ct();
1105
1126
  function St() {
1106
- const i = p();
1127
+ const i = f();
1107
1128
  return ht.useSyncExternalStore(
1108
1129
  (s) => i.subscribe(() => {
1109
1130
  s();
@@ -1113,7 +1134,7 @@ function St() {
1113
1134
  );
1114
1135
  }
1115
1136
  function wt() {
1116
- const i = ot(), [s, t] = x(""), [e, n] = x(!1);
1137
+ const i = ot(), [s, t] = b(""), [e, n] = b(!1);
1117
1138
  return {
1118
1139
  text: s,
1119
1140
  setText: t,
@@ -1134,9 +1155,9 @@ function wt() {
1134
1155
  append: (a) => t((o) => o + a)
1135
1156
  };
1136
1157
  }
1137
- function U(i, s) {
1158
+ function $(i, s) {
1138
1159
  var r, a, o, u;
1139
- const e = p().pluginRegistry.getBestRendererForType(i);
1160
+ const e = f().pluginRegistry.getBestRendererForType(i);
1140
1161
  if (!e)
1141
1162
  return {
1142
1163
  component: null,
@@ -1154,8 +1175,8 @@ function U(i, s) {
1154
1175
  supportsFullscreen: ((u = e.capabilities) == null ? void 0 : u.supportsFullscreen) ?? !1
1155
1176
  };
1156
1177
  }
1157
- function Tt() {
1158
- const i = p(), [s, t] = x(i.contentFocus.state);
1178
+ function Ct() {
1179
+ const i = f(), [s, t] = b(i.contentFocus.state);
1159
1180
  return w(() => i.contentFocus.subscribe(() => {
1160
1181
  t(i.contentFocus.state);
1161
1182
  }), [i]), {
@@ -1169,7 +1190,7 @@ function Tt() {
1169
1190
  };
1170
1191
  }
1171
1192
  function dt(i) {
1172
- const s = p();
1193
+ const s = f();
1173
1194
  w(() => (i.execute && s.capabilityRegistry.registerHandler(i.name, { execute: i.execute }), i.render && s.capabilityRegistry.registerRenderer(i.name, {
1174
1195
  component: i.render
1175
1196
  }), () => {
@@ -1177,7 +1198,7 @@ function dt(i) {
1177
1198
  }), [i.name, s]);
1178
1199
  }
1179
1200
  function lt(i) {
1180
- const s = p(), [t, e] = x(
1201
+ const s = f(), [t, e] = b(
1181
1202
  () => s.capabilityExecutionManager.getExecution(i)
1182
1203
  ), [, n] = W((r) => r + 1, 0);
1183
1204
  return w(() => {
@@ -1191,36 +1212,36 @@ function lt(i) {
1191
1212
  }, [i, s]), t;
1192
1213
  }
1193
1214
  const H = q(void 0);
1194
- function Ct({ children: i }) {
1195
- const [s, t] = x({}), e = T((u, l) => {
1215
+ function Tt({ children: i }) {
1216
+ const [s, t] = b({}), e = C((u, d) => {
1196
1217
  t((g) => {
1197
- if (l === null) {
1198
- const { [u]: h, ...d } = g;
1199
- return d;
1218
+ if (d === null) {
1219
+ const { [u]: h, ...l } = g;
1220
+ return l;
1200
1221
  }
1201
1222
  return {
1202
1223
  ...g,
1203
- [u]: { id: u, ...l }
1224
+ [u]: { id: u, ...d }
1204
1225
  };
1205
1226
  });
1206
- }, []), n = T((u) => {
1207
- t((l) => {
1208
- const { [u]: g, ...h } = l;
1227
+ }, []), n = C((u) => {
1228
+ t((d) => {
1229
+ const { [u]: g, ...h } = d;
1209
1230
  return h;
1210
1231
  });
1211
- }, []), r = T(() => Object.values(s).reduce(
1212
- (u, l) => {
1213
- const g = Object.entries(l.data).reduce(
1214
- (h, [d, f]) => ({
1232
+ }, []), r = C(() => Object.values(s).reduce(
1233
+ (u, d) => {
1234
+ const g = Object.entries(d.data).reduce(
1235
+ (h, [l, p]) => ({
1215
1236
  ...h,
1216
- [d]: typeof f == "string" ? f : JSON.stringify(f)
1237
+ [l]: typeof p == "string" ? p : JSON.stringify(p)
1217
1238
  }),
1218
1239
  {}
1219
1240
  );
1220
1241
  return { ...u, ...g };
1221
1242
  },
1222
1243
  {}
1223
- ), [s]), a = T(() => {
1244
+ ), [s]), a = C(() => {
1224
1245
  t({});
1225
1246
  }, []), o = V(
1226
1247
  () => ({
@@ -1246,8 +1267,8 @@ function It(i) {
1246
1267
  t(e);
1247
1268
  }), [e, n.displayName, JSON.stringify(n.data), n.priority, n.icon]);
1248
1269
  }
1249
- function ft({ message: i, content: s }) {
1250
- const t = p(), e = s, n = lt(e.capabilityId), r = t.capabilityRegistry.getRenderer(e.capabilityName);
1270
+ function pt({ message: i, content: s }) {
1271
+ const t = f(), e = s, n = lt(e.capabilityId), r = t.capabilityRegistry.getRenderer(e.capabilityName);
1251
1272
  if (!r || !n)
1252
1273
  return null;
1253
1274
  const a = r.component;
@@ -1264,9 +1285,9 @@ function ft({ message: i, content: s }) {
1264
1285
  );
1265
1286
  }
1266
1287
  function Mt({ message: i, content: s }) {
1267
- const { component: t } = U(s.type);
1288
+ const { component: t } = $(s.type);
1268
1289
  if (s.type === "capability")
1269
- return /* @__PURE__ */ S.jsx(ft, { message: i, content: s });
1290
+ return /* @__PURE__ */ S.jsx(pt, { message: i, content: s });
1270
1291
  if (!t)
1271
1292
  return null;
1272
1293
  const e = t;
@@ -1280,7 +1301,7 @@ function vt({
1280
1301
  onNavigate: n,
1281
1302
  onSwitchContext: r
1282
1303
  }) {
1283
- const { auxiliaryComponent: a } = U(s.type, t);
1304
+ const { auxiliaryComponent: a } = $(s.type, t);
1284
1305
  if (!a)
1285
1306
  return null;
1286
1307
  const o = a;
@@ -1324,10 +1345,10 @@ class Et {
1324
1345
  const { done: o, value: u } = await e.read();
1325
1346
  if (o || t != null && t.aborted) break;
1326
1347
  r += n.decode(u, { stream: !0 });
1327
- const l = r.split(`
1348
+ const d = r.split(`
1328
1349
  `);
1329
- r = l.pop() || "";
1330
- for (const g of l) {
1350
+ r = d.pop() || "";
1351
+ for (const g of d) {
1331
1352
  const h = g.trim();
1332
1353
  if (!h) {
1333
1354
  a = null;
@@ -1339,17 +1360,17 @@ class Et {
1339
1360
  continue;
1340
1361
  }
1341
1362
  if (h.startsWith("data:")) {
1342
- const d = h.substring(5).trim();
1343
- if (d === "eof" || h === "eof")
1363
+ const l = h.substring(5).trim();
1364
+ if (l === "eof" || h === "eof")
1344
1365
  break;
1345
1366
  try {
1346
- const f = JSON.parse(d);
1367
+ const p = JSON.parse(l);
1347
1368
  if (a && this.shouldProcessEvent(a)) {
1348
- const m = this.convertEvent({
1369
+ const _ = this.convertEvent({
1349
1370
  event: a,
1350
- data: f
1371
+ data: p
1351
1372
  });
1352
- m && (yield m);
1373
+ _ && (yield _);
1353
1374
  }
1354
1375
  } catch {
1355
1376
  }
@@ -1364,14 +1385,14 @@ class Et {
1364
1385
  }
1365
1386
  }
1366
1387
  export {
1367
- yt as AssistantRuntime,
1368
- mt as AssistantRuntimeProvider,
1388
+ bt as AssistantRuntime,
1389
+ yt as AssistantRuntimeProvider,
1369
1390
  vt as AuxiliaryRenderer,
1370
1391
  Et as BaseSSEStreamAdapter,
1371
1392
  K as CapabilityExecutionManager,
1372
1393
  Y as CapabilityRegistry,
1373
- ft as CapabilityRendererComp,
1374
- Ct as ChatContextProvider,
1394
+ pt as CapabilityRendererComp,
1395
+ Tt as ChatContextProvider,
1375
1396
  et as ComposerRuntime,
1376
1397
  Mt as ContentRenderer,
1377
1398
  G as PluginRegistry,
@@ -1380,13 +1401,13 @@ export {
1380
1401
  M as ThreadRuntime,
1381
1402
  v as ThreadRuntimeCore,
1382
1403
  Rt as makeCapability,
1383
- p as useAssistantRuntime,
1404
+ f as useAssistantRuntime,
1384
1405
  dt as useCapability,
1385
1406
  lt as useCapabilityExecution,
1386
1407
  gt as useChatContext,
1387
1408
  wt as useComposer,
1388
- Tt as useContentFocus,
1389
- U as useContentRenderer,
1409
+ Ct as useContentFocus,
1410
+ $ as useContentRenderer,
1390
1411
  ot as useCurrentThread,
1391
1412
  St as useMessages,
1392
1413
  It as usePageContext,
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 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 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 { useEffect, useState } from 'react'\n\nimport { ThreadRuntime } from '../../runtime/ThreadRuntime/ThreadRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCurrentThread(): ThreadRuntime {\n const runtime = useAssistantRuntime()\n const thread = runtime.threads.getMainThread()\n\n const [, forceUpdate] = useState({})\n\n useEffect(() => {\n const unsubscribe = thread.subscribe(() => {\n forceUpdate({})\n })\n\n return unsubscribe\n }, [thread])\n\n return thread\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","forceUpdate","React","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","value","_useState","inst","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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harnessio/ai-chat-core",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "private": false,