@assistant-ui/react 0.5.82 → 0.5.84

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10; var _class11; var _class12; var _class13; var _class14; var _class15; var _class16;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10; var _class11; var _class12; var _class13; var _class14; var _class15; var _class16; var _class17; var _class18;
2
2
 
3
3
 
4
4
 
@@ -85,6 +85,10 @@ var { useToolUIs, useToolUIsStore } = createContextStoreHook(
85
85
  useAssistantContext,
86
86
  "useToolUIs"
87
87
  );
88
+ var { useThreadManager } = createContextStoreHook(
89
+ useAssistantContext,
90
+ "useThreadManager"
91
+ );
88
92
 
89
93
  // src/context/stores/AssistantToolUIs.ts
90
94
  var _zustand = require('zustand');
@@ -259,16 +263,29 @@ var useAssistantRuntimeStore2 = (runtime) => {
259
263
  var useAssistantToolUIsStore = () => {
260
264
  return _react.useMemo.call(void 0, () => makeAssistantToolUIsStore(), []);
261
265
  };
266
+ var useThreadManagerStore = (runtime) => {
267
+ const [store] = _react.useState.call(void 0,
268
+ () => _zustand.create.call(void 0, () => runtime.threadManager.getState())
269
+ );
270
+ _react.useEffect.call(void 0, () => {
271
+ const updateState = () => writableStore(store).setState(runtime.threadManager.getState(), true);
272
+ updateState();
273
+ return runtime.threadManager.subscribe(updateState);
274
+ }, [runtime, store]);
275
+ return store;
276
+ };
262
277
  var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
263
278
  const useAssistantRuntime2 = useAssistantRuntimeStore2(runtime);
264
279
  const useToolUIs2 = useAssistantToolUIsStore();
280
+ const useThreadManager2 = useThreadManagerStore(runtime);
265
281
  const context = _react.useMemo.call(void 0, () => {
266
282
  return {
267
283
  useToolUIs: useToolUIs2,
268
284
  useAssistantRuntime: useAssistantRuntime2,
269
- useAssistantActions: useAssistantRuntime2
285
+ useAssistantActions: useAssistantRuntime2,
286
+ useThreadManager: useThreadManager2
270
287
  };
271
- }, [useAssistantRuntime2, useToolUIs2]);
288
+ }, [useAssistantRuntime2, useToolUIs2, useThreadManager2]);
272
289
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AssistantContext.Provider, { value: context, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadRuntimeProvider, { runtime: runtime.thread, children }) });
273
290
  };
274
291
  var AssistantRuntimeProvider = _react.memo.call(void 0, AssistantRuntimeProviderImpl);
@@ -447,22 +464,20 @@ var useSwitchToNewThread = () => {
447
464
  var useAssistantTool = (tool) => {
448
465
  const assistantRuntime = useAssistantRuntime();
449
466
  const toolUIsStore = useToolUIsStore();
467
+ _react.useEffect.call(void 0, () => {
468
+ return tool.render ? toolUIsStore.getState().setToolUI(tool.toolName, tool.render) : void 0;
469
+ }, [toolUIsStore, tool.toolName, tool.render]);
450
470
  _react.useEffect.call(void 0, () => {
451
471
  const { toolName, render, ...rest } = tool;
452
472
  const config = {
453
473
  tools: {
454
- [tool.toolName]: rest
474
+ [toolName]: rest
455
475
  }
456
476
  };
457
- const unsub1 = assistantRuntime.registerModelConfigProvider({
477
+ return assistantRuntime.registerModelConfigProvider({
458
478
  getModelConfig: () => config
459
479
  });
460
- const unsub2 = render ? toolUIsStore.getState().setToolUI(toolName, render) : void 0;
461
- return () => {
462
- unsub1();
463
- _optionalChain([unsub2, 'optionalCall', _10 => _10()]);
464
- };
465
- }, [assistantRuntime, toolUIsStore, tool]);
480
+ }, [assistantRuntime, tool]);
466
481
  };
467
482
 
468
483
  // src/model-config/makeAssistantTool.tsx
@@ -481,9 +496,8 @@ var useAssistantToolUI = (tool) => {
481
496
  const toolUIsStore = useToolUIsStore();
482
497
  _react.useEffect.call(void 0, () => {
483
498
  if (!tool) return;
484
- const { toolName, render } = tool;
485
- return toolUIsStore.getState().setToolUI(toolName, render);
486
- }, [toolUIsStore, tool]);
499
+ return toolUIsStore.getState().setToolUI(tool.toolName, tool.render);
500
+ }, [toolUIsStore, _optionalChain([tool, 'optionalAccess', _10 => _10.toolName]), _optionalChain([tool, 'optionalAccess', _11 => _11.render])]);
487
501
  };
488
502
 
489
503
  // src/model-config/makeAssistantToolUI.tsx
@@ -510,6 +524,20 @@ var useAssistantInstructions = (instruction) => {
510
524
  }, [assistantRuntime, instruction]);
511
525
  };
512
526
 
527
+ // src/model-config/useInlineRender.tsx
528
+
529
+
530
+ var useInlineRender = (toolUI) => {
531
+ const [useToolUI] = _react.useState.call(void 0, () => _zustand.create.call(void 0, () => toolUI));
532
+ _react.useEffect.call(void 0, () => {
533
+ useToolUI.setState(toolUI);
534
+ });
535
+ return _react.useCallback.call(void 0, (args) => {
536
+ const toolUI2 = useToolUI();
537
+ return toolUI2(args);
538
+ }, []);
539
+ };
540
+
513
541
  // src/primitive-hooks/actionBar/useActionBarCopy.tsx
514
542
 
515
543
  var useActionBarCopy = ({
@@ -722,7 +750,7 @@ var useComposerAddAttachment = () => {
722
750
  input.accept = attachmentAccept;
723
751
  }
724
752
  input.onchange = (e) => {
725
- const file = _optionalChain([e, 'access', _11 => _11.target, 'access', _12 => _12.files, 'optionalAccess', _13 => _13[0]]);
753
+ const file = _optionalChain([e, 'access', _12 => _12.target, 'access', _13 => _13.files, 'optionalAccess', _14 => _14[0]]);
726
754
  if (!file) return;
727
755
  composerRuntime.addAttachment(file);
728
756
  };
@@ -798,7 +826,7 @@ var useMessageIf = (props) => {
798
826
  return false;
799
827
  if (props.hasContent === true && content.length === 0) return false;
800
828
  if (props.hasContent === false && content.length > 0) return false;
801
- if (props.submittedFeedback !== void 0 && (_nullishCoalesce(_optionalChain([submittedFeedback, 'optionalAccess', _14 => _14.type]), () => ( null))) !== props.submittedFeedback)
829
+ if (props.submittedFeedback !== void 0 && (_nullishCoalesce(_optionalChain([submittedFeedback, 'optionalAccess', _15 => _15.type]), () => ( null))) !== props.submittedFeedback)
802
830
  return false;
803
831
  return true;
804
832
  }
@@ -932,7 +960,7 @@ var ActionBarPrimitiveCopy = _react.forwardRef.call(void 0, ({ copiedDuration, o
932
960
  ref: forwardedRef,
933
961
  disabled: disabled || !callback,
934
962
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
935
- _optionalChain([callback, 'optionalCall', _15 => _15()]);
963
+ _optionalChain([callback, 'optionalCall', _16 => _16()]);
936
964
  })
937
965
  }
938
966
  );
@@ -964,7 +992,7 @@ var createActionButton = (displayName, useActionButton, forwardProps = []) => {
964
992
  ref: forwardedRef,
965
993
  disabled: primitiveProps.disabled || !callback,
966
994
  onClick: _primitive.composeEventHandlers.call(void 0, primitiveProps.onClick, () => {
967
- _optionalChain([callback, 'optionalCall', _16 => _16()]);
995
+ _optionalChain([callback, 'optionalCall', _17 => _17()]);
968
996
  })
969
997
  }
970
998
  );
@@ -1013,7 +1041,7 @@ var ActionBarPrimitiveStopSpeaking = _react.forwardRef.call(void 0, (props, ref)
1013
1041
  ...props,
1014
1042
  ref,
1015
1043
  onClick: _primitive.composeEventHandlers.call(void 0, props.onClick, () => {
1016
- _optionalChain([callback, 'optionalCall', _17 => _17()]);
1044
+ _optionalChain([callback, 'optionalCall', _18 => _18()]);
1017
1045
  })
1018
1046
  }
1019
1047
  );
@@ -1027,7 +1055,7 @@ ActionBarPrimitiveStopSpeaking.displayName = "ActionBarPrimitive.StopSpeaking";
1027
1055
 
1028
1056
  var ActionBarPrimitiveFeedbackPositive = _react.forwardRef.call(void 0, ({ onClick, disabled, ...props }, forwardedRef) => {
1029
1057
  const isSubmitted = useMessage(
1030
- (u) => _optionalChain([u, 'access', _18 => _18.submittedFeedback, 'optionalAccess', _19 => _19.type]) === "positive"
1058
+ (u) => _optionalChain([u, 'access', _19 => _19.submittedFeedback, 'optionalAccess', _20 => _20.type]) === "positive"
1031
1059
  );
1032
1060
  const callback = useActionBarFeedbackPositive();
1033
1061
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1039,7 +1067,7 @@ var ActionBarPrimitiveFeedbackPositive = _react.forwardRef.call(void 0, ({ onCli
1039
1067
  ref: forwardedRef,
1040
1068
  disabled: disabled || !callback,
1041
1069
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
1042
- _optionalChain([callback, 'optionalCall', _20 => _20()]);
1070
+ _optionalChain([callback, 'optionalCall', _21 => _21()]);
1043
1071
  })
1044
1072
  }
1045
1073
  );
@@ -1053,7 +1081,7 @@ ActionBarPrimitiveFeedbackPositive.displayName = "ActionBarPrimitive.FeedbackPos
1053
1081
 
1054
1082
  var ActionBarPrimitiveFeedbackNegative = _react.forwardRef.call(void 0, ({ onClick, disabled, ...props }, forwardedRef) => {
1055
1083
  const isSubmitted = useMessage(
1056
- (u) => _optionalChain([u, 'access', _21 => _21.submittedFeedback, 'optionalAccess', _22 => _22.type]) === "negative"
1084
+ (u) => _optionalChain([u, 'access', _22 => _22.submittedFeedback, 'optionalAccess', _23 => _23.type]) === "negative"
1057
1085
  );
1058
1086
  const callback = useActionBarFeedbackNegative();
1059
1087
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1065,7 +1093,7 @@ var ActionBarPrimitiveFeedbackNegative = _react.forwardRef.call(void 0, ({ onCli
1065
1093
  ref: forwardedRef,
1066
1094
  disabled: disabled || !callback,
1067
1095
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
1068
- _optionalChain([callback, 'optionalCall', _23 => _23()]);
1096
+ _optionalChain([callback, 'optionalCall', _24 => _24()]);
1069
1097
  })
1070
1098
  }
1071
1099
  );
@@ -1223,7 +1251,7 @@ var AttachmentContext = _react.createContext.call(void 0,
1223
1251
  );
1224
1252
  function useAttachmentContext(options) {
1225
1253
  const context = _react.useContext.call(void 0, AttachmentContext);
1226
- if (!_optionalChain([options, 'optionalAccess', _24 => _24.optional]) && !context)
1254
+ if (!_optionalChain([options, 'optionalAccess', _25 => _25.optional]) && !context)
1227
1255
  throw new Error(
1228
1256
  "This component must be used within a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component."
1229
1257
  );
@@ -1504,7 +1532,7 @@ var withSmoothContextProvider = (Component) => {
1504
1532
  };
1505
1533
  function useSmoothContext(options) {
1506
1534
  const context = _react.useContext.call(void 0, SmoothContext);
1507
- if (!_optionalChain([options, 'optionalAccess', _25 => _25.optional]) && !context)
1535
+ if (!_optionalChain([options, 'optionalAccess', _26 => _26.optional]) && !context)
1508
1536
  throw new Error(
1509
1537
  "This component must be used within a SmoothContextProvider."
1510
1538
  );
@@ -1725,7 +1753,7 @@ var BaseSubject = (_class2 = class {constructor() { _class2.prototype.__init5.ca
1725
1753
  if (this._connection) return;
1726
1754
  this._connection = this._connect();
1727
1755
  } else {
1728
- _optionalChain([this, 'access', _26 => _26._connection, 'optionalCall', _27 => _27()]);
1756
+ _optionalChain([this, 'access', _27 => _27._connection, 'optionalCall', _28 => _28()]);
1729
1757
  this._connection = void 0;
1730
1758
  }
1731
1759
  }
@@ -1830,36 +1858,36 @@ var EMPTY_ARRAY = Object.freeze([]);
1830
1858
  var getThreadComposerState = (runtime) => {
1831
1859
  return Object.freeze({
1832
1860
  type: "thread",
1833
- isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _28 => _28.isEditing]), () => ( false)),
1834
- canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _29 => _29.canCancel]), () => ( false)),
1835
- isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _30 => _30.isEmpty]), () => ( true)),
1836
- text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _31 => _31.text]), () => ( "")),
1837
- attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _32 => _32.attachments]), () => ( EMPTY_ARRAY)),
1838
- value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _33 => _33.text]), () => ( "")),
1839
- setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _34 => _34.setText, 'access', _35 => _35.bind, 'call', _36 => _36(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1840
- setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _37 => _37.setText, 'access', _38 => _38.bind, 'call', _39 => _39(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1861
+ isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _29 => _29.isEditing]), () => ( false)),
1862
+ canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _30 => _30.canCancel]), () => ( false)),
1863
+ isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _31 => _31.isEmpty]), () => ( true)),
1864
+ text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _32 => _32.text]), () => ( "")),
1865
+ attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _33 => _33.attachments]), () => ( EMPTY_ARRAY)),
1866
+ value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _34 => _34.text]), () => ( "")),
1867
+ setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _35 => _35.setText, 'access', _36 => _36.bind, 'call', _37 => _37(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1868
+ setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _38 => _38.setText, 'access', _39 => _39.bind, 'call', _40 => _40(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1841
1869
  // edit: beginEdit,
1842
- send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _40 => _40.send, 'access', _41 => _41.bind, 'call', _42 => _42(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1843
- cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _43 => _43.cancel, 'access', _44 => _44.bind, 'call', _45 => _45(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1844
- reset: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _46 => _46.reset, 'access', _47 => _47.bind, 'call', _48 => _48(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1845
- addAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _49 => _49.addAttachment, 'access', _50 => _50.bind, 'call', _51 => _51(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1846
- removeAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _52 => _52.removeAttachment, 'access', _53 => _53.bind, 'call', _54 => _54(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1870
+ send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _41 => _41.send, 'access', _42 => _42.bind, 'call', _43 => _43(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1871
+ cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _44 => _44.cancel, 'access', _45 => _45.bind, 'call', _46 => _46(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1872
+ reset: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _47 => _47.reset, 'access', _48 => _48.bind, 'call', _49 => _49(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1873
+ addAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _50 => _50.addAttachment, 'access', _51 => _51.bind, 'call', _52 => _52(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1874
+ removeAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _53 => _53.removeAttachment, 'access', _54 => _54.bind, 'call', _55 => _55(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1847
1875
  });
1848
1876
  };
1849
1877
  var getEditComposerState = (runtime, beginEdit) => {
1850
1878
  return Object.freeze({
1851
1879
  type: "edit",
1852
- isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _55 => _55.isEditing]), () => ( false)),
1853
- canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _56 => _56.canCancel]), () => ( false)),
1854
- isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _57 => _57.isEmpty]), () => ( true)),
1855
- text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _58 => _58.text]), () => ( "")),
1856
- attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _59 => _59.attachments]), () => ( EMPTY_ARRAY)),
1857
- value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _60 => _60.text]), () => ( "")),
1858
- setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _61 => _61.setText, 'access', _62 => _62.bind, 'call', _63 => _63(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1859
- setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _64 => _64.setText, 'access', _65 => _65.bind, 'call', _66 => _66(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1880
+ isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _56 => _56.isEditing]), () => ( false)),
1881
+ canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _57 => _57.canCancel]), () => ( false)),
1882
+ isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _58 => _58.isEmpty]), () => ( true)),
1883
+ text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _59 => _59.text]), () => ( "")),
1884
+ attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _60 => _60.attachments]), () => ( EMPTY_ARRAY)),
1885
+ value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _61 => _61.text]), () => ( "")),
1886
+ setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _62 => _62.setText, 'access', _63 => _63.bind, 'call', _64 => _64(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1887
+ setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _65 => _65.setText, 'access', _66 => _66.bind, 'call', _67 => _67(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1860
1888
  edit: beginEdit,
1861
- send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _67 => _67.send, 'access', _68 => _68.bind, 'call', _69 => _69(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1862
- cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _70 => _70.cancel, 'access', _71 => _71.bind, 'call', _72 => _72(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1889
+ send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _68 => _68.send, 'access', _69 => _69.bind, 'call', _70 => _70(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1890
+ cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _71 => _71.cancel, 'access', _72 => _72.bind, 'call', _73 => _73(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1863
1891
  });
1864
1892
  };
1865
1893
  var ComposerRuntimeImpl = class {
@@ -1975,7 +2003,7 @@ var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
1975
2003
  this._getState = stateBinding.getState.bind(stateBinding);
1976
2004
  }
1977
2005
  get attachments() {
1978
- return _nullishCoalesce(_optionalChain([this, 'access', _73 => _73.getState, 'call', _74 => _74(), 'optionalAccess', _75 => _75.attachments]), () => ( EMPTY_ARRAY));
2006
+ return _nullishCoalesce(_optionalChain([this, 'access', _74 => _74.getState, 'call', _75 => _75(), 'optionalAccess', _76 => _76.attachments]), () => ( EMPTY_ARRAY));
1979
2007
  }
1980
2008
  getState() {
1981
2009
  return this._getState();
@@ -2085,19 +2113,19 @@ var NestedSubscriptionSubject = class extends BaseSubject {
2085
2113
  this.notifySubscribers();
2086
2114
  };
2087
2115
  let lastState = this.binding.getState();
2088
- let innerUnsubscribe = _optionalChain([lastState, 'optionalAccess', _76 => _76.subscribe, 'call', _77 => _77(callback)]);
2116
+ let innerUnsubscribe = _optionalChain([lastState, 'optionalAccess', _77 => _77.subscribe, 'call', _78 => _78(callback)]);
2089
2117
  const onRuntimeUpdate = () => {
2090
2118
  const newState = this.binding.getState();
2091
2119
  if (newState === lastState) return;
2092
2120
  lastState = newState;
2093
- _optionalChain([innerUnsubscribe, 'optionalCall', _78 => _78()]);
2094
- innerUnsubscribe = _optionalChain([this, 'access', _79 => _79.binding, 'access', _80 => _80.getState, 'call', _81 => _81(), 'optionalAccess', _82 => _82.subscribe, 'call', _83 => _83(callback)]);
2121
+ _optionalChain([innerUnsubscribe, 'optionalCall', _79 => _79()]);
2122
+ innerUnsubscribe = _optionalChain([this, 'access', _80 => _80.binding, 'access', _81 => _81.getState, 'call', _82 => _82(), 'optionalAccess', _83 => _83.subscribe, 'call', _84 => _84(callback)]);
2095
2123
  callback();
2096
2124
  };
2097
2125
  const outerUnsubscribe = this.outerSubscribe(onRuntimeUpdate);
2098
2126
  return () => {
2099
- _optionalChain([outerUnsubscribe, 'optionalCall', _84 => _84()]);
2100
- _optionalChain([innerUnsubscribe, 'optionalCall', _85 => _85()]);
2127
+ _optionalChain([outerUnsubscribe, 'optionalCall', _85 => _85()]);
2128
+ _optionalChain([innerUnsubscribe, 'optionalCall', _86 => _86()]);
2101
2129
  };
2102
2130
  }
2103
2131
  };
@@ -2176,7 +2204,7 @@ var MessageRuntimeImpl = class {
2176
2204
  const state = this._core.getState();
2177
2205
  if (!state) throw new Error("Message is not available");
2178
2206
  const thread = this._threadBinding.getState();
2179
- if (_optionalChain([thread, 'access', _86 => _86.speech, 'optionalAccess', _87 => _87.messageId]) === state.id) {
2207
+ if (_optionalChain([thread, 'access', _87 => _87.speech, 'optionalAccess', _88 => _88.messageId]) === state.id) {
2180
2208
  this._threadBinding.getState().stopSpeaking();
2181
2209
  } else {
2182
2210
  throw new Error("Message is not being spoken");
@@ -2269,7 +2297,7 @@ var MessageRuntimeImpl = class {
2269
2297
  },
2270
2298
  getState: () => {
2271
2299
  const attachments = this.getState().attachments;
2272
- const attachment = _optionalChain([attachments, 'optionalAccess', _88 => _88[idx]]);
2300
+ const attachment = _optionalChain([attachments, 'optionalAccess', _89 => _89[idx]]);
2273
2301
  if (!attachment) return SKIP_UPDATE;
2274
2302
  return {
2275
2303
  ...attachment,
@@ -2352,7 +2380,7 @@ var MessageContentPartImpl = ({
2352
2380
  };
2353
2381
  var MessageContentPart = _react.memo.call(void 0,
2354
2382
  MessageContentPartImpl,
2355
- (prev, next) => prev.partIndex === next.partIndex && _optionalChain([prev, 'access', _89 => _89.components, 'optionalAccess', _90 => _90.Text]) === _optionalChain([next, 'access', _91 => _91.components, 'optionalAccess', _92 => _92.Text]) && _optionalChain([prev, 'access', _93 => _93.components, 'optionalAccess', _94 => _94.Image]) === _optionalChain([next, 'access', _95 => _95.components, 'optionalAccess', _96 => _96.Image]) && _optionalChain([prev, 'access', _97 => _97.components, 'optionalAccess', _98 => _98.UI]) === _optionalChain([next, 'access', _99 => _99.components, 'optionalAccess', _100 => _100.UI]) && _optionalChain([prev, 'access', _101 => _101.components, 'optionalAccess', _102 => _102.tools]) === _optionalChain([next, 'access', _103 => _103.components, 'optionalAccess', _104 => _104.tools])
2383
+ (prev, next) => prev.partIndex === next.partIndex && _optionalChain([prev, 'access', _90 => _90.components, 'optionalAccess', _91 => _91.Text]) === _optionalChain([next, 'access', _92 => _92.components, 'optionalAccess', _93 => _93.Text]) && _optionalChain([prev, 'access', _94 => _94.components, 'optionalAccess', _95 => _95.Image]) === _optionalChain([next, 'access', _96 => _96.components, 'optionalAccess', _97 => _97.Image]) && _optionalChain([prev, 'access', _98 => _98.components, 'optionalAccess', _99 => _99.UI]) === _optionalChain([next, 'access', _100 => _100.components, 'optionalAccess', _101 => _101.UI]) && _optionalChain([prev, 'access', _102 => _102.components, 'optionalAccess', _103 => _103.tools]) === _optionalChain([next, 'access', _104 => _104.components, 'optionalAccess', _105 => _105.tools])
2356
2384
  );
2357
2385
  var MessagePrimitiveContent = ({
2358
2386
  components
@@ -2418,11 +2446,11 @@ var getComponent = (components, attachment) => {
2418
2446
  const type = attachment.type;
2419
2447
  switch (type) {
2420
2448
  case "image":
2421
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _105 => _105.Image]), () => ( _optionalChain([components, 'optionalAccess', _106 => _106.Attachment])));
2449
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _106 => _106.Image]), () => ( _optionalChain([components, 'optionalAccess', _107 => _107.Attachment])));
2422
2450
  case "document":
2423
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _107 => _107.Document]), () => ( _optionalChain([components, 'optionalAccess', _108 => _108.Attachment])));
2451
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _108 => _108.Document]), () => ( _optionalChain([components, 'optionalAccess', _109 => _109.Attachment])));
2424
2452
  case "file":
2425
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _109 => _109.File]), () => ( _optionalChain([components, 'optionalAccess', _110 => _110.Attachment])));
2453
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _110 => _110.File]), () => ( _optionalChain([components, 'optionalAccess', _111 => _111.Attachment])));
2426
2454
  default:
2427
2455
  const _exhaustiveCheck = type;
2428
2456
  throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
@@ -2445,7 +2473,7 @@ var MessageAttachmentImpl = ({ components, attachmentIndex }) => {
2445
2473
  };
2446
2474
  var MessageAttachment = _react.memo.call(void 0,
2447
2475
  MessageAttachmentImpl,
2448
- (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _111 => _111.components, 'optionalAccess', _112 => _112.Image]) === _optionalChain([next, 'access', _113 => _113.components, 'optionalAccess', _114 => _114.Image]) && _optionalChain([prev, 'access', _115 => _115.components, 'optionalAccess', _116 => _116.Document]) === _optionalChain([next, 'access', _117 => _117.components, 'optionalAccess', _118 => _118.Document]) && _optionalChain([prev, 'access', _119 => _119.components, 'optionalAccess', _120 => _120.File]) === _optionalChain([next, 'access', _121 => _121.components, 'optionalAccess', _122 => _122.File]) && _optionalChain([prev, 'access', _123 => _123.components, 'optionalAccess', _124 => _124.Attachment]) === _optionalChain([next, 'access', _125 => _125.components, 'optionalAccess', _126 => _126.Attachment])
2476
+ (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _112 => _112.components, 'optionalAccess', _113 => _113.Image]) === _optionalChain([next, 'access', _114 => _114.components, 'optionalAccess', _115 => _115.Image]) && _optionalChain([prev, 'access', _116 => _116.components, 'optionalAccess', _117 => _117.Document]) === _optionalChain([next, 'access', _118 => _118.components, 'optionalAccess', _119 => _119.Document]) && _optionalChain([prev, 'access', _120 => _120.components, 'optionalAccess', _121 => _121.File]) === _optionalChain([next, 'access', _122 => _122.components, 'optionalAccess', _123 => _123.File]) && _optionalChain([prev, 'access', _124 => _124.components, 'optionalAccess', _125 => _125.Attachment]) === _optionalChain([next, 'access', _126 => _126.components, 'optionalAccess', _127 => _127.Attachment])
2449
2477
  );
2450
2478
  var MessagePrimitiveAttachments = ({ components }) => {
2451
2479
  const attachmentsCount = useMessage(({ message }) => {
@@ -2571,7 +2599,7 @@ var ComposerPrimitiveInput = _react.forwardRef.call(void 0,
2571
2599
  const { isRunning } = threadRuntime.getState();
2572
2600
  if (!isRunning) {
2573
2601
  e.preventDefault();
2574
- _optionalChain([textareaRef, 'access', _127 => _127.current, 'optionalAccess', _128 => _128.closest, 'call', _129 => _129("form"), 'optionalAccess', _130 => _130.requestSubmit, 'call', _131 => _131()]);
2602
+ _optionalChain([textareaRef, 'access', _128 => _128.current, 'optionalAccess', _129 => _129.closest, 'call', _130 => _130("form"), 'optionalAccess', _131 => _131.requestSubmit, 'call', _132 => _132()]);
2575
2603
  }
2576
2604
  }
2577
2605
  };
@@ -2645,11 +2673,11 @@ var getComponent2 = (components, attachment) => {
2645
2673
  const type = attachment.type;
2646
2674
  switch (type) {
2647
2675
  case "image":
2648
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _132 => _132.Image]), () => ( _optionalChain([components, 'optionalAccess', _133 => _133.Attachment])));
2676
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _133 => _133.Image]), () => ( _optionalChain([components, 'optionalAccess', _134 => _134.Attachment])));
2649
2677
  case "document":
2650
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _134 => _134.Document]), () => ( _optionalChain([components, 'optionalAccess', _135 => _135.Attachment])));
2678
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _135 => _135.Document]), () => ( _optionalChain([components, 'optionalAccess', _136 => _136.Attachment])));
2651
2679
  case "file":
2652
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _136 => _136.File]), () => ( _optionalChain([components, 'optionalAccess', _137 => _137.Attachment])));
2680
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _137 => _137.File]), () => ( _optionalChain([components, 'optionalAccess', _138 => _138.Attachment])));
2653
2681
  default:
2654
2682
  const _exhaustiveCheck = type;
2655
2683
  throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
@@ -2672,7 +2700,7 @@ var ComposerAttachmentImpl = ({ components, attachmentIndex }) => {
2672
2700
  };
2673
2701
  var ComposerAttachment = _react.memo.call(void 0,
2674
2702
  ComposerAttachmentImpl,
2675
- (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _138 => _138.components, 'optionalAccess', _139 => _139.Image]) === _optionalChain([next, 'access', _140 => _140.components, 'optionalAccess', _141 => _141.Image]) && _optionalChain([prev, 'access', _142 => _142.components, 'optionalAccess', _143 => _143.Document]) === _optionalChain([next, 'access', _144 => _144.components, 'optionalAccess', _145 => _145.Document]) && _optionalChain([prev, 'access', _146 => _146.components, 'optionalAccess', _147 => _147.File]) === _optionalChain([next, 'access', _148 => _148.components, 'optionalAccess', _149 => _149.File]) && _optionalChain([prev, 'access', _150 => _150.components, 'optionalAccess', _151 => _151.Attachment]) === _optionalChain([next, 'access', _152 => _152.components, 'optionalAccess', _153 => _153.Attachment])
2703
+ (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _139 => _139.components, 'optionalAccess', _140 => _140.Image]) === _optionalChain([next, 'access', _141 => _141.components, 'optionalAccess', _142 => _142.Image]) && _optionalChain([prev, 'access', _143 => _143.components, 'optionalAccess', _144 => _144.Document]) === _optionalChain([next, 'access', _145 => _145.components, 'optionalAccess', _146 => _146.Document]) && _optionalChain([prev, 'access', _147 => _147.components, 'optionalAccess', _148 => _148.File]) === _optionalChain([next, 'access', _149 => _149.components, 'optionalAccess', _150 => _150.File]) && _optionalChain([prev, 'access', _151 => _151.components, 'optionalAccess', _152 => _152.Attachment]) === _optionalChain([next, 'access', _153 => _153.components, 'optionalAccess', _154 => _154.Attachment])
2676
2704
  );
2677
2705
  var ComposerPrimitiveAttachments = ({ components }) => {
2678
2706
  const attachmentsCount = useComposer((s) => s.attachments.length);
@@ -3016,47 +3044,62 @@ var subscribeToMainThread = (runtime, callback) => {
3016
3044
  let first = true;
3017
3045
  let cleanup;
3018
3046
  const inner = () => {
3019
- _optionalChain([cleanup, 'optionalCall', _154 => _154()]);
3020
- cleanup = runtime.thread.subscribe(callback);
3047
+ _optionalChain([cleanup, 'optionalCall', _155 => _155()]);
3048
+ cleanup = runtime.threadManager.mainThread.subscribe(callback);
3021
3049
  if (!first) {
3022
3050
  callback();
3023
3051
  }
3024
3052
  first = false;
3025
3053
  };
3026
- const unsubscribe = runtime.subscribe(inner);
3054
+ const unsubscribe = runtime.threadManager.mainThread.subscribe(inner);
3027
3055
  inner();
3028
3056
  return () => {
3029
3057
  unsubscribe();
3030
- _optionalChain([cleanup, 'optionalCall', _155 => _155()]);
3058
+ _optionalChain([cleanup, 'optionalCall', _156 => _156()]);
3031
3059
  };
3032
3060
  };
3033
3061
 
3034
3062
  // src/runtimes/local/useLocalRuntime.tsx
3035
3063
 
3036
3064
 
3037
- // src/runtimes/core/BaseAssistantRuntimeCore.tsx
3038
- var BaseAssistantRuntimeCore = (_class5 = class {
3039
- constructor(_thread) {;_class5.prototype.__init9.call(this);_class5.prototype.__init10.call(this);
3040
- this._thread = _thread;
3041
- this._thread = _thread;
3065
+ // src/utils/ProxyConfigProvider.ts
3066
+ var ProxyConfigProvider = (_class5 = class {constructor() { _class5.prototype.__init9.call(this);_class5.prototype.__init10.call(this); }
3067
+ __init9() {this._providers = /* @__PURE__ */ new Set()}
3068
+ getModelConfig() {
3069
+ return _chunkC6UZOY5Ajs.mergeModelConfigs.call(void 0, this._providers);
3042
3070
  }
3043
- get thread() {
3044
- return this._thread;
3071
+ registerModelConfigProvider(provider) {
3072
+ this._providers.add(provider);
3073
+ const unsubscribe = _optionalChain([provider, 'access', _157 => _157.subscribe, 'optionalCall', _158 => _158(() => {
3074
+ this.notifySubscribers();
3075
+ })]);
3076
+ this.notifySubscribers();
3077
+ return () => {
3078
+ this._providers.delete(provider);
3079
+ _optionalChain([unsubscribe, 'optionalCall', _159 => _159()]);
3080
+ this.notifySubscribers();
3081
+ };
3045
3082
  }
3046
- set thread(thread) {
3047
- this._thread = thread;
3048
- this.subscriptionHandler();
3083
+ __init10() {this._subscribers = /* @__PURE__ */ new Set()}
3084
+ notifySubscribers() {
3085
+ for (const callback of this._subscribers) callback();
3049
3086
  }
3050
- __init9() {this._subscriptions = /* @__PURE__ */ new Set()}
3051
3087
  subscribe(callback) {
3052
- this._subscriptions.add(callback);
3053
- return () => this._subscriptions.delete(callback);
3088
+ this._subscribers.add(callback);
3089
+ return () => this._subscribers.delete(callback);
3054
3090
  }
3055
- __init10() {this.subscriptionHandler = () => {
3056
- for (const callback of this._subscriptions) callback();
3057
- }}
3058
3091
  }, _class5);
3059
3092
 
3093
+ // src/runtimes/core/BaseAssistantRuntimeCore.tsx
3094
+ var BaseAssistantRuntimeCore = (_class6 = class {
3095
+ __init11() {this._proxyConfigProvider = new ProxyConfigProvider()}
3096
+ constructor() {;_class6.prototype.__init11.call(this);
3097
+ }
3098
+ registerModelConfigProvider(provider) {
3099
+ return this._proxyConfigProvider.registerModelConfigProvider(provider);
3100
+ }
3101
+ }, _class6);
3102
+
3060
3103
  // src/internal.ts
3061
3104
  var internal_exports = {};
3062
3105
  _chunkPZ5AY32Cjs.__export.call(void 0, internal_exports, {
@@ -3075,12 +3118,12 @@ _chunkPZ5AY32Cjs.__export.call(void 0, internal_exports, {
3075
3118
 
3076
3119
  // src/runtimes/composer/BaseComposerRuntimeCore.tsx
3077
3120
  var isAttachmentComplete = (a) => a.status.type === "complete";
3078
- var BaseComposerRuntimeCore = (_class6 = class {constructor() { _class6.prototype.__init11.call(this);_class6.prototype.__init12.call(this);_class6.prototype.__init13.call(this);_class6.prototype.__init14.call(this); }
3079
- __init11() {this.isEditing = true}
3121
+ var BaseComposerRuntimeCore = (_class7 = class {constructor() { _class7.prototype.__init12.call(this);_class7.prototype.__init13.call(this);_class7.prototype.__init14.call(this);_class7.prototype.__init15.call(this); }
3122
+ __init12() {this.isEditing = true}
3080
3123
  getAttachmentAccept() {
3081
- return _nullishCoalesce(_optionalChain([this, 'access', _156 => _156.getAttachmentAdapter, 'call', _157 => _157(), 'optionalAccess', _158 => _158.accept]), () => ( "*"));
3124
+ return _nullishCoalesce(_optionalChain([this, 'access', _160 => _160.getAttachmentAdapter, 'call', _161 => _161(), 'optionalAccess', _162 => _162.accept]), () => ( "*"));
3082
3125
  }
3083
- __init12() {this._attachments = []}
3126
+ __init13() {this._attachments = []}
3084
3127
  set attachments(value) {
3085
3128
  this._attachments = value;
3086
3129
  this.notifySubscribers();
@@ -3091,7 +3134,7 @@ var BaseComposerRuntimeCore = (_class6 = class {constructor() { _class6.prototyp
3091
3134
  get isEmpty() {
3092
3135
  return !this.text.trim() && !this.attachments.length;
3093
3136
  }
3094
- __init13() {this._text = ""}
3137
+ __init14() {this._text = ""}
3095
3138
  get text() {
3096
3139
  return this._text;
3097
3140
  }
@@ -3110,7 +3153,7 @@ var BaseComposerRuntimeCore = (_class6 = class {constructor() { _class6.prototyp
3110
3153
  this.attachments.map(async (a) => {
3111
3154
  if (isAttachmentComplete(a)) return a;
3112
3155
  const result = await adapter.send(a);
3113
- if (_optionalChain([result, 'access', _159 => _159.status, 'optionalAccess', _160 => _160.type]) !== "complete") {
3156
+ if (_optionalChain([result, 'access', _163 => _163.status, 'optionalAccess', _164 => _164.type]) !== "complete") {
3114
3157
  result.status = { type: "complete" };
3115
3158
  }
3116
3159
  return result;
@@ -3144,7 +3187,7 @@ var BaseComposerRuntimeCore = (_class6 = class {constructor() { _class6.prototyp
3144
3187
  this._attachments = this._attachments.toSpliced(index, 1);
3145
3188
  this.notifySubscribers();
3146
3189
  }
3147
- __init14() {this._subscriptions = /* @__PURE__ */ new Set()}
3190
+ __init15() {this._subscriptions = /* @__PURE__ */ new Set()}
3148
3191
  notifySubscribers() {
3149
3192
  for (const callback of this._subscriptions) callback();
3150
3193
  }
@@ -3152,16 +3195,16 @@ var BaseComposerRuntimeCore = (_class6 = class {constructor() { _class6.prototyp
3152
3195
  this._subscriptions.add(callback);
3153
3196
  return () => this._subscriptions.delete(callback);
3154
3197
  }
3155
- }, _class6);
3198
+ }, _class7);
3156
3199
 
3157
3200
  // src/runtimes/composer/DefaultThreadComposerRuntimeCore.tsx
3158
- var DefaultThreadComposerRuntimeCore = (_class7 = class extends BaseComposerRuntimeCore {
3201
+ var DefaultThreadComposerRuntimeCore = (_class8 = class extends BaseComposerRuntimeCore {
3159
3202
  constructor(runtime) {
3160
- super();_class7.prototype.__init15.call(this);;
3203
+ super();_class8.prototype.__init16.call(this);;
3161
3204
  this.runtime = runtime;
3162
3205
  this.connect();
3163
3206
  }
3164
- __init15() {this._canCancel = false}
3207
+ __init16() {this._canCancel = false}
3165
3208
  get canCancel() {
3166
3209
  return this._canCancel;
3167
3210
  }
@@ -3169,7 +3212,7 @@ var DefaultThreadComposerRuntimeCore = (_class7 = class extends BaseComposerRunt
3169
3212
  return super.attachments;
3170
3213
  }
3171
3214
  getAttachmentAdapter() {
3172
- return _optionalChain([this, 'access', _161 => _161.runtime, 'access', _162 => _162.adapters, 'optionalAccess', _163 => _163.attachments]);
3215
+ return _optionalChain([this, 'access', _165 => _165.runtime, 'access', _166 => _166.adapters, 'optionalAccess', _167 => _167.attachments]);
3173
3216
  }
3174
3217
  connect() {
3175
3218
  return this.runtime.subscribe(() => {
@@ -3182,40 +3225,12 @@ var DefaultThreadComposerRuntimeCore = (_class7 = class extends BaseComposerRunt
3182
3225
  async handleSend(message) {
3183
3226
  this.runtime.append({
3184
3227
  ...message,
3185
- parentId: _nullishCoalesce(_optionalChain([this, 'access', _164 => _164.runtime, 'access', _165 => _165.messages, 'access', _166 => _166.at, 'call', _167 => _167(-1), 'optionalAccess', _168 => _168.id]), () => ( null))
3228
+ parentId: _nullishCoalesce(_optionalChain([this, 'access', _168 => _168.runtime, 'access', _169 => _169.messages, 'access', _170 => _170.at, 'call', _171 => _171(-1), 'optionalAccess', _172 => _172.id]), () => ( null))
3186
3229
  });
3187
3230
  }
3188
3231
  async cancel() {
3189
3232
  this.runtime.cancelRun();
3190
3233
  }
3191
- }, _class7);
3192
-
3193
- // src/utils/ProxyConfigProvider.ts
3194
- var ProxyConfigProvider = (_class8 = class {constructor() { _class8.prototype.__init16.call(this);_class8.prototype.__init17.call(this); }
3195
- __init16() {this._providers = /* @__PURE__ */ new Set()}
3196
- getModelConfig() {
3197
- return _chunkC6UZOY5Ajs.mergeModelConfigs.call(void 0, this._providers);
3198
- }
3199
- registerModelConfigProvider(provider) {
3200
- this._providers.add(provider);
3201
- const unsubscribe = _optionalChain([provider, 'access', _169 => _169.subscribe, 'optionalCall', _170 => _170(() => {
3202
- this.notifySubscribers();
3203
- })]);
3204
- this.notifySubscribers();
3205
- return () => {
3206
- this._providers.delete(provider);
3207
- _optionalChain([unsubscribe, 'optionalCall', _171 => _171()]);
3208
- this.notifySubscribers();
3209
- };
3210
- }
3211
- __init17() {this._subscribers = /* @__PURE__ */ new Set()}
3212
- notifySubscribers() {
3213
- for (const callback of this._subscribers) callback();
3214
- }
3215
- subscribe(callback) {
3216
- this._subscribers.add(callback);
3217
- return () => this._subscribers.delete(callback);
3218
- }
3219
3234
  }, _class8);
3220
3235
 
3221
3236
  // src/utils/idUtils.tsx
@@ -3283,11 +3298,11 @@ var findHead = (message) => {
3283
3298
  if ("current" in message) return message;
3284
3299
  return null;
3285
3300
  };
3286
- var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__init18.call(this);_class9.prototype.__init19.call(this);_class9.prototype.__init20.call(this); }
3287
- __init18() {this.messages = /* @__PURE__ */ new Map()}
3301
+ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__init17.call(this);_class9.prototype.__init18.call(this);_class9.prototype.__init19.call(this); }
3302
+ __init17() {this.messages = /* @__PURE__ */ new Map()}
3288
3303
  // message_id -> item
3289
- __init19() {this.head = null}
3290
- __init20() {this.root = {
3304
+ __init18() {this.head = null}
3305
+ __init19() {this.root = {
3291
3306
  children: [],
3292
3307
  next: null
3293
3308
  }}
@@ -3329,7 +3344,7 @@ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__in
3329
3344
  }
3330
3345
  }
3331
3346
  getMessages() {
3332
- const messages2 = new Array(_nullishCoalesce(_optionalChain([this, 'access', _172 => _172.head, 'optionalAccess', _173 => _173.level]), () => ( 0)));
3347
+ const messages2 = new Array(_nullishCoalesce(_optionalChain([this, 'access', _173 => _173.head, 'optionalAccess', _174 => _174.level]), () => ( 0)));
3333
3348
  for (let current = this.head; current; current = current.prev) {
3334
3349
  messages2[current.level] = current.current;
3335
3350
  }
@@ -3367,7 +3382,7 @@ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__in
3367
3382
  "MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
3368
3383
  );
3369
3384
  return {
3370
- parentId: _nullishCoalesce(_optionalChain([message, 'access', _174 => _174.prev, 'optionalAccess', _175 => _175.current, 'access', _176 => _176.id]), () => ( null)),
3385
+ parentId: _nullishCoalesce(_optionalChain([message, 'access', _175 => _175.prev, 'optionalAccess', _176 => _176.current, 'access', _177 => _177.id]), () => ( null)),
3371
3386
  message: message.current
3372
3387
  };
3373
3388
  }
@@ -3451,11 +3466,11 @@ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__in
3451
3466
  for (const [, message] of this.messages) {
3452
3467
  exportItems.push({
3453
3468
  message: message.current,
3454
- parentId: _nullishCoalesce(_optionalChain([message, 'access', _177 => _177.prev, 'optionalAccess', _178 => _178.current, 'access', _179 => _179.id]), () => ( null))
3469
+ parentId: _nullishCoalesce(_optionalChain([message, 'access', _178 => _178.prev, 'optionalAccess', _179 => _179.current, 'access', _180 => _180.id]), () => ( null))
3455
3470
  });
3456
3471
  }
3457
3472
  return {
3458
- headId: _nullishCoalesce(_optionalChain([this, 'access', _180 => _180.head, 'optionalAccess', _181 => _181.current, 'access', _182 => _182.id]), () => ( null)),
3473
+ headId: _nullishCoalesce(_optionalChain([this, 'access', _181 => _181.head, 'optionalAccess', _182 => _182.current, 'access', _183 => _183.id]), () => ( null)),
3459
3474
  messages: exportItems
3460
3475
  };
3461
3476
  }
@@ -3463,7 +3478,7 @@ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__in
3463
3478
  for (const { message, parentId } of messages2) {
3464
3479
  this.addOrUpdateMessage(parentId, message);
3465
3480
  }
3466
- this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages2, 'access', _183 => _183.at, 'call', _184 => _184(-1), 'optionalAccess', _185 => _185.message, 'access', _186 => _186.id]))), () => ( null)));
3481
+ this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages2, 'access', _184 => _184.at, 'call', _185 => _185(-1), 'optionalAccess', _186 => _186.message, 'access', _187 => _187.id]))), () => ( null)));
3467
3482
  }
3468
3483
  }, _class9);
3469
3484
 
@@ -3567,7 +3582,7 @@ TooltipIconButton.displayName = "TooltipIconButton";
3567
3582
  var toAppendMessage = (messages2, message) => {
3568
3583
  if (typeof message === "string") {
3569
3584
  return {
3570
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _187 => _187.at, 'call', _188 => _188(-1), 'optionalAccess', _189 => _189.id]), () => ( null)),
3585
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _188 => _188.at, 'call', _189 => _189(-1), 'optionalAccess', _190 => _190.id]), () => ( null)),
3571
3586
  role: "user",
3572
3587
  content: [{ type: "text", text: message }],
3573
3588
  attachments: []
@@ -3577,7 +3592,7 @@ var toAppendMessage = (messages2, message) => {
3577
3592
  return message;
3578
3593
  }
3579
3594
  return {
3580
- parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([messages2, 'access', _190 => _190.at, 'call', _191 => _191(-1), 'optionalAccess', _192 => _192.id]))), () => ( null)),
3595
+ parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([messages2, 'access', _191 => _191.at, 'call', _192 => _192(-1), 'optionalAccess', _193 => _193.id]))), () => ( null)),
3581
3596
  role: _nullishCoalesce(message.role, () => ( "user")),
3582
3597
  content: message.content,
3583
3598
  attachments: _nullishCoalesce(message.attachments, () => ( []))
@@ -3589,7 +3604,7 @@ var getThreadState = (runtime) => {
3589
3604
  threadId: runtime.threadId,
3590
3605
  capabilities: runtime.capabilities,
3591
3606
  isDisabled: runtime.isDisabled,
3592
- isRunning: _optionalChain([lastMessage, 'optionalAccess', _193 => _193.role]) !== "assistant" ? false : lastMessage.status.type === "running",
3607
+ isRunning: _optionalChain([lastMessage, 'optionalAccess', _194 => _194.role]) !== "assistant" ? false : lastMessage.status.type === "running",
3593
3608
  messages: runtime.messages,
3594
3609
  suggestions: runtime.suggestions,
3595
3610
  extras: runtime.extras,
@@ -3652,7 +3667,7 @@ var ThreadRuntimeImpl = (_class10 = class {
3652
3667
  return this._threadBinding.getState();
3653
3668
  }
3654
3669
 
3655
- constructor(threadBinding) {;_class10.prototype.__init21.call(this);
3670
+ constructor(threadBinding) {;_class10.prototype.__init20.call(this);
3656
3671
  const stateBinding = new LazyMemoizeSubject({
3657
3672
  path: threadBinding.path,
3658
3673
  getState: () => getThreadState(threadBinding.getState()),
@@ -3767,7 +3782,7 @@ var ThreadRuntimeImpl = (_class10 = class {
3767
3782
  if (!message) return void 0;
3768
3783
  return {
3769
3784
  message,
3770
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _194 => _194[idx - 1], 'optionalAccess', _195 => _195.id]), () => ( null))
3785
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _195 => _195[idx - 1], 'optionalAccess', _196 => _196.id]), () => ( null))
3771
3786
  };
3772
3787
  }
3773
3788
  );
@@ -3796,12 +3811,12 @@ var ThreadRuntimeImpl = (_class10 = class {
3796
3811
  return {
3797
3812
  ...message,
3798
3813
  message,
3799
- isLast: _optionalChain([messages2, 'access', _196 => _196.at, 'call', _197 => _197(-1), 'optionalAccess', _198 => _198.id]) === message.id,
3814
+ isLast: _optionalChain([messages2, 'access', _197 => _197.at, 'call', _198 => _198(-1), 'optionalAccess', _199 => _199.id]) === message.id,
3800
3815
  parentId,
3801
3816
  branches,
3802
3817
  branchNumber: branches.indexOf(message.id) + 1,
3803
3818
  branchCount: branches.length,
3804
- speech: _optionalChain([speechState, 'optionalAccess', _199 => _199.messageId]) === message.id ? speechState : void 0,
3819
+ speech: _optionalChain([speechState, 'optionalAccess', _200 => _200.messageId]) === message.id ? speechState : void 0,
3805
3820
  submittedFeedback
3806
3821
  };
3807
3822
  },
@@ -3810,7 +3825,7 @@ var ThreadRuntimeImpl = (_class10 = class {
3810
3825
  this._threadBinding
3811
3826
  );
3812
3827
  }
3813
- __init21() {this._eventListenerNestedSubscriptions = /* @__PURE__ */ new Map()}
3828
+ __init20() {this._eventListenerNestedSubscriptions = /* @__PURE__ */ new Map()}
3814
3829
  unstable_on(event, callback) {
3815
3830
  let subject = this._eventListenerNestedSubscriptions.get(event);
3816
3831
  if (!subject) {
@@ -3827,20 +3842,67 @@ var ThreadRuntimeImpl = (_class10 = class {
3827
3842
  }
3828
3843
  }, _class10);
3829
3844
 
3845
+ // src/api/ThreadManagerRuntime.ts
3846
+ var getThreadManagerState = (threadManager) => {
3847
+ return {
3848
+ threads: threadManager.threads,
3849
+ archivedThreads: threadManager.archivedThreads
3850
+ };
3851
+ };
3852
+ var THREAD_MANAGER_PATH = {
3853
+ ref: "threadManager"
3854
+ };
3855
+ var ThreadManagerRuntimeImpl = class {
3856
+ constructor(_core) {
3857
+ this._core = _core;
3858
+ const stateBinding = new LazyMemoizeSubject({
3859
+ path: THREAD_MANAGER_PATH,
3860
+ getState: () => getThreadManagerState(_core),
3861
+ subscribe: (callback) => _core.subscribe(callback)
3862
+ });
3863
+ this._getState = stateBinding.getState.bind(stateBinding);
3864
+ }
3865
+ get path() {
3866
+ return THREAD_MANAGER_PATH;
3867
+ }
3868
+
3869
+ getState() {
3870
+ return this._getState();
3871
+ }
3872
+ rename(threadId, newTitle) {
3873
+ return this._core.rename(threadId, newTitle);
3874
+ }
3875
+ archive(threadId) {
3876
+ return this._core.archive(threadId);
3877
+ }
3878
+ unarchive(threadId) {
3879
+ return this._core.unarchive(threadId);
3880
+ }
3881
+ delete(threadId) {
3882
+ return this._core.delete(threadId);
3883
+ }
3884
+ subscribe(callback) {
3885
+ return this._core.subscribe(callback);
3886
+ }
3887
+ };
3888
+
3830
3889
  // src/api/AssistantRuntime.ts
3831
3890
  var AssistantRuntimeImpl = class _AssistantRuntimeImpl {
3832
3891
  constructor(_core, _thread) {
3833
3892
  this._core = _core;
3834
3893
  this._thread = _thread;
3894
+ this.threadManager = new ThreadManagerRuntimeImpl(_core.threadManager);
3835
3895
  }
3896
+
3836
3897
  get thread() {
3837
3898
  return this._thread;
3838
3899
  }
3839
3900
  switchToNewThread() {
3840
- return this._core.switchToNewThread();
3901
+ return this._core.threadManager.switchToNewThread();
3841
3902
  }
3842
3903
  switchToThread(threadId) {
3843
- return this._core.switchToThread(threadId);
3904
+ if (threadId === null) return this.switchToNewThread();
3905
+ return this._core.threadManager.switchToThread(threadId);
3844
3906
  }
3845
3907
  registerModelConfigProvider(provider) {
3846
3908
  return this._core.registerModelConfigProvider(provider);
@@ -3848,8 +3910,9 @@ var AssistantRuntimeImpl = class _AssistantRuntimeImpl {
3848
3910
  /**
3849
3911
  * @deprecated Thread is now static and never gets updated. This will be removed in 0.6.0.
3850
3912
  */
3851
- subscribe(callback) {
3852
- return this._core.subscribe(callback);
3913
+ subscribe() {
3914
+ return () => {
3915
+ };
3853
3916
  }
3854
3917
  static createMainThreadRuntime(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
3855
3918
  return new CustomThreadRuntime(
@@ -3858,8 +3921,8 @@ var AssistantRuntimeImpl = class _AssistantRuntimeImpl {
3858
3921
  ref: "threads.main",
3859
3922
  threadSelector: { type: "main" }
3860
3923
  },
3861
- getState: () => _core.thread,
3862
- subscribe: (callback) => _core.subscribe(callback)
3924
+ getState: () => _core.threadManager.mainThread,
3925
+ subscribe: (callback) => _core.threadManager.subscribe(callback)
3863
3926
  })
3864
3927
  );
3865
3928
  }
@@ -3937,7 +4000,7 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
3937
4000
  });
3938
4001
  if (mergeSteps) {
3939
4002
  const previousMessage = messages2[messages2.length - 1];
3940
- if (_optionalChain([previousMessage, 'optionalAccess', _200 => _200.role]) === "assistant") {
4003
+ if (_optionalChain([previousMessage, 'optionalAccess', _201 => _201.role]) === "assistant") {
3941
4004
  previousMessage.content.push(...newContent);
3942
4005
  break;
3943
4006
  }
@@ -3950,7 +4013,7 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
3950
4013
  }
3951
4014
  case "tool": {
3952
4015
  const previousMessage = messages2[messages2.length - 1];
3953
- if (_optionalChain([previousMessage, 'optionalAccess', _201 => _201.role]) !== "assistant")
4016
+ if (_optionalChain([previousMessage, 'optionalAccess', _202 => _202.role]) !== "assistant")
3954
4017
  throw new Error(
3955
4018
  "A tool message must be preceded by an assistant message."
3956
4019
  );
@@ -4080,7 +4143,7 @@ function assistantDecoderStream() {
4080
4143
  case "c" /* ToolCallDelta */: {
4081
4144
  const { toolCallId, argsTextDelta } = value;
4082
4145
  const toolName = toolCallNames.get(toolCallId);
4083
- if (_optionalChain([currentToolCall, 'optionalAccess', _202 => _202.id]) === toolCallId) {
4146
+ if (_optionalChain([currentToolCall, 'optionalAccess', _203 => _203.id]) === toolCallId) {
4084
4147
  currentToolCall.argsText += argsTextDelta;
4085
4148
  }
4086
4149
  controller.enqueue({
@@ -4224,7 +4287,7 @@ var useEdgeRuntime = (options) => {
4224
4287
  };
4225
4288
 
4226
4289
  // src/runtimes/local/shouldContinue.tsx
4227
- var shouldContinue = (result) => _optionalChain([result, 'access', _203 => _203.status, 'optionalAccess', _204 => _204.type]) === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
4290
+ var shouldContinue = (result) => _optionalChain([result, 'access', _204 => _204.status, 'optionalAccess', _205 => _205.type]) === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
4228
4291
 
4229
4292
  // src/runtimes/composer/DefaultEditComposerRuntimeCore.tsx
4230
4293
  var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
@@ -4244,7 +4307,7 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
4244
4307
  return true;
4245
4308
  }
4246
4309
  getAttachmentAdapter() {
4247
- return _optionalChain([this, 'access', _205 => _205.runtime, 'access', _206 => _206.adapters, 'optionalAccess', _207 => _207.attachments]);
4310
+ return _optionalChain([this, 'access', _206 => _206.runtime, 'access', _207 => _207.adapters, 'optionalAccess', _208 => _208.attachments]);
4248
4311
  }
4249
4312
 
4250
4313
 
@@ -4269,22 +4332,19 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
4269
4332
 
4270
4333
  // src/runtimes/core/BaseThreadRuntimeCore.tsx
4271
4334
  var BaseThreadRuntimeCore = (_class11 = class {
4272
- constructor(configProvider) {;_class11.prototype.__init22.call(this);_class11.prototype.__init23.call(this);_class11.prototype.__init24.call(this);_class11.prototype.__init25.call(this);_class11.prototype.__init26.call(this);_class11.prototype.__init27.call(this);
4335
+ constructor(configProvider) {;_class11.prototype.__init21.call(this);_class11.prototype.__init22.call(this);_class11.prototype.__init23.call(this);_class11.prototype.__init24.call(this);_class11.prototype.__init25.call(this);_class11.prototype.__init26.call(this);
4273
4336
  this.configProvider = configProvider;
4274
- _optionalChain([this, 'access', _208 => _208.configProvider, 'access', _209 => _209.subscribe, 'optionalCall', _210 => _210(() => {
4275
- this._notifyEventSubscribers("model-config-update");
4276
- })]);
4277
4337
  }
4278
- __init22() {this._subscriptions = /* @__PURE__ */ new Set()}
4279
- __init23() {this.repository = new MessageRepository()}
4338
+ __init21() {this._subscriptions = /* @__PURE__ */ new Set()}
4339
+ __init22() {this.repository = new MessageRepository()}
4280
4340
  get messages() {
4281
4341
  return this.repository.getMessages();
4282
4342
  }
4283
- __init24() {this.composer = new DefaultThreadComposerRuntimeCore(this)}
4343
+ __init23() {this.composer = new DefaultThreadComposerRuntimeCore(this)}
4284
4344
  getModelConfig() {
4285
4345
  return this.configProvider.getModelConfig();
4286
4346
  }
4287
- __init25() {this._editComposers = /* @__PURE__ */ new Map()}
4347
+ __init24() {this._editComposers = /* @__PURE__ */ new Map()}
4288
4348
  getEditComposer(messageId) {
4289
4349
  return this._editComposers.get(messageId);
4290
4350
  }
@@ -4323,12 +4383,12 @@ var BaseThreadRuntimeCore = (_class11 = class {
4323
4383
  this._subscriptions.add(callback);
4324
4384
  return () => this._subscriptions.delete(callback);
4325
4385
  }
4326
- __init26() {this._submittedFeedback = {}}
4386
+ __init25() {this._submittedFeedback = {}}
4327
4387
  getSubmittedFeedback(messageId) {
4328
4388
  return this._submittedFeedback[messageId];
4329
4389
  }
4330
4390
  submitFeedback({ messageId, type }) {
4331
- const adapter = _optionalChain([this, 'access', _211 => _211.adapters, 'optionalAccess', _212 => _212.feedback]);
4391
+ const adapter = _optionalChain([this, 'access', _209 => _209.adapters, 'optionalAccess', _210 => _210.feedback]);
4332
4392
  if (!adapter) throw new Error("Feedback adapter not configured");
4333
4393
  const { message } = this.repository.getMessage(messageId);
4334
4394
  adapter.submit({ message, type });
@@ -4338,10 +4398,10 @@ var BaseThreadRuntimeCore = (_class11 = class {
4338
4398
 
4339
4399
 
4340
4400
  speak(messageId) {
4341
- const adapter = _optionalChain([this, 'access', _213 => _213.adapters, 'optionalAccess', _214 => _214.speech]);
4401
+ const adapter = _optionalChain([this, 'access', _211 => _211.adapters, 'optionalAccess', _212 => _212.speech]);
4342
4402
  if (!adapter) throw new Error("Speech adapter not configured");
4343
4403
  const { message } = this.repository.getMessage(messageId);
4344
- _optionalChain([this, 'access', _215 => _215._stopSpeaking, 'optionalCall', _216 => _216()]);
4404
+ _optionalChain([this, 'access', _213 => _213._stopSpeaking, 'optionalCall', _214 => _214()]);
4345
4405
  const utterance = adapter.speak(getThreadMessageText(message));
4346
4406
  const unsub = utterance.subscribe(() => {
4347
4407
  if (utterance.status.type === "ended") {
@@ -4373,8 +4433,12 @@ var BaseThreadRuntimeCore = (_class11 = class {
4373
4433
  this.repository.import(data);
4374
4434
  this._notifySubscribers();
4375
4435
  }
4376
- __init27() {this._eventSubscribers = /* @__PURE__ */ new Map()}
4436
+ __init26() {this._eventSubscribers = /* @__PURE__ */ new Map()}
4377
4437
  unstable_on(event, callback) {
4438
+ if (event === "model-config-update") {
4439
+ return _nullishCoalesce(_optionalChain([this, 'access', _215 => _215.configProvider, 'access', _216 => _216.subscribe, 'optionalCall', _217 => _217(callback)]), () => ( (() => {
4440
+ })));
4441
+ }
4378
4442
  const subscribers = this._eventSubscribers.get(event);
4379
4443
  if (!subscribers) {
4380
4444
  this._eventSubscribers.set(event, /* @__PURE__ */ new Set([callback]));
@@ -4390,21 +4454,12 @@ var BaseThreadRuntimeCore = (_class11 = class {
4390
4454
 
4391
4455
  // src/runtimes/local/LocalThreadRuntimeCore.tsx
4392
4456
  var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4393
- constructor(configProvider, adapter, { initialMessages, ...options }) {
4394
- super(configProvider);_class12.prototype.__init28.call(this);_class12.prototype.__init29.call(this);_class12.prototype.__init30.call(this);_class12.prototype.__init31.call(this);;
4395
- this.adapter = adapter;
4396
- this.threadId = generateId();
4397
- this.options = options;
4398
- if (initialMessages) {
4399
- let parentId = null;
4400
- const messages2 = fromCoreMessages(initialMessages);
4401
- for (const message of messages2) {
4402
- this.repository.addOrUpdateMessage(parentId, message);
4403
- parentId = message.id;
4404
- }
4405
- }
4457
+ constructor(configProvider, threadId, options) {
4458
+ super(configProvider);_class12.prototype.__init27.call(this);_class12.prototype.__init28.call(this);_class12.prototype.__init29.call(this);_class12.prototype.__init30.call(this);;
4459
+ this.threadId = threadId;
4460
+ this._options = options;
4406
4461
  }
4407
- __init28() {this.capabilities = {
4462
+ __init27() {this.capabilities = {
4408
4463
  switchToBranch: true,
4409
4464
  edit: true,
4410
4465
  reload: true,
@@ -4414,34 +4469,31 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4414
4469
  attachments: false,
4415
4470
  feedback: false
4416
4471
  }}
4417
- __init29() {this.abortController = null}
4418
-
4419
- __init30() {this.isDisabled = false}
4420
- __init31() {this.suggestions = []}
4472
+ __init28() {this.abortController = null}
4473
+ __init29() {this.isDisabled = false}
4474
+ __init30() {this.suggestions = []}
4421
4475
  get adapters() {
4422
- return this.options.adapters;
4476
+ return this._options.adapters;
4423
4477
  }
4424
4478
 
4425
- get options() {
4426
- return this._options;
4427
- }
4428
4479
  get extras() {
4429
4480
  return void 0;
4430
4481
  }
4431
- set options({ initialMessages, ...options }) {
4482
+ setOptions(options) {
4483
+ if (this._options === options) return;
4432
4484
  this._options = options;
4433
4485
  let hasUpdates = false;
4434
- const canSpeak = _optionalChain([options, 'access', _217 => _217.adapters, 'optionalAccess', _218 => _218.speech]) !== void 0;
4486
+ const canSpeak = _optionalChain([options, 'access', _218 => _218.adapters, 'optionalAccess', _219 => _219.speech]) !== void 0;
4435
4487
  if (this.capabilities.speech !== canSpeak) {
4436
4488
  this.capabilities.speech = canSpeak;
4437
4489
  hasUpdates = true;
4438
4490
  }
4439
- const canAttach = _optionalChain([options, 'access', _219 => _219.adapters, 'optionalAccess', _220 => _220.attachments]) !== void 0;
4491
+ const canAttach = _optionalChain([options, 'access', _220 => _220.adapters, 'optionalAccess', _221 => _221.attachments]) !== void 0;
4440
4492
  if (this.capabilities.attachments !== canAttach) {
4441
4493
  this.capabilities.attachments = canAttach;
4442
4494
  hasUpdates = true;
4443
4495
  }
4444
- const canFeedback = _optionalChain([options, 'access', _221 => _221.adapters, 'optionalAccess', _222 => _222.feedback]) !== void 0;
4496
+ const canFeedback = _optionalChain([options, 'access', _222 => _222.adapters, 'optionalAccess', _223 => _223.feedback]) !== void 0;
4445
4497
  if (this.capabilities.feedback !== canFeedback) {
4446
4498
  this.capabilities.feedback = canFeedback;
4447
4499
  hasUpdates = true;
@@ -4477,13 +4529,13 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4477
4529
  }
4478
4530
  async performRoundtrip(parentId, message) {
4479
4531
  const messages2 = this.repository.getMessages();
4480
- _optionalChain([this, 'access', _223 => _223.abortController, 'optionalAccess', _224 => _224.abort, 'call', _225 => _225()]);
4532
+ _optionalChain([this, 'access', _224 => _224.abortController, 'optionalAccess', _225 => _225.abort, 'call', _226 => _226()]);
4481
4533
  this.abortController = new AbortController();
4482
4534
  const initialContent = message.content;
4483
- const initialSteps = _optionalChain([message, 'access', _226 => _226.metadata, 'optionalAccess', _227 => _227.steps]);
4484
- const initalCustom = _optionalChain([message, 'access', _228 => _228.metadata, 'optionalAccess', _229 => _229.custom]);
4535
+ const initialSteps = _optionalChain([message, 'access', _227 => _227.metadata, 'optionalAccess', _228 => _228.steps]);
4536
+ const initalCustom = _optionalChain([message, 'access', _229 => _229.metadata, 'optionalAccess', _230 => _230.custom]);
4485
4537
  const updateMessage = (m) => {
4486
- const newSteps = _optionalChain([m, 'access', _230 => _230.metadata, 'optionalAccess', _231 => _231.steps]) || _optionalChain([m, 'access', _232 => _232.metadata, 'optionalAccess', _233 => _233.roundtrips]);
4538
+ const newSteps = _optionalChain([m, 'access', _231 => _231.metadata, 'optionalAccess', _232 => _232.steps]) || _optionalChain([m, 'access', _233 => _233.metadata, 'optionalAccess', _234 => _234.roundtrips]);
4487
4539
  const steps2 = newSteps ? [..._nullishCoalesce(initialSteps, () => ( [])), ...newSteps] : void 0;
4488
4540
  message = {
4489
4541
  ...message,
@@ -4495,7 +4547,7 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4495
4547
  metadata: {
4496
4548
  ...message.metadata,
4497
4549
  ...steps2 ? { roundtrips: steps2, steps: steps2 } : void 0,
4498
- ..._optionalChain([m, 'access', _234 => _234.metadata, 'optionalAccess', _235 => _235.custom]) ? {
4550
+ ..._optionalChain([m, 'access', _235 => _235.metadata, 'optionalAccess', _236 => _236.custom]) ? {
4499
4551
  custom: { ..._nullishCoalesce(initalCustom, () => ( {})), ...m.metadata.custom }
4500
4552
  } : void 0
4501
4553
  }
@@ -4504,8 +4556,8 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4504
4556
  this.repository.addOrUpdateMessage(parentId, message);
4505
4557
  this._notifySubscribers();
4506
4558
  };
4507
- const maxSteps = this.options.maxSteps ? this.options.maxSteps : (_nullishCoalesce(this.options.maxToolRoundtrips, () => ( 1))) + 1;
4508
- const steps = _nullishCoalesce(_optionalChain([message, 'access', _236 => _236.metadata, 'optionalAccess', _237 => _237.steps, 'optionalAccess', _238 => _238.length]), () => ( 0));
4559
+ const maxSteps = this._options.maxSteps ? this._options.maxSteps : (_nullishCoalesce(this._options.maxToolRoundtrips, () => ( 1))) + 1;
4560
+ const steps = _nullishCoalesce(_optionalChain([message, 'access', _237 => _237.metadata, 'optionalAccess', _238 => _238.steps, 'optionalAccess', _239 => _239.length]), () => ( 0));
4509
4561
  if (steps >= maxSteps) {
4510
4562
  updateMessage({
4511
4563
  status: {
@@ -4522,7 +4574,7 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4522
4574
  });
4523
4575
  }
4524
4576
  try {
4525
- const promiseOrGenerator = this.adapter.run({
4577
+ const promiseOrGenerator = this.adapters.chatModel.run({
4526
4578
  messages: messages2,
4527
4579
  abortSignal: this.abortController.signal,
4528
4580
  config: this.getModelConfig(),
@@ -4557,7 +4609,7 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4557
4609
  return message;
4558
4610
  }
4559
4611
  cancelRun() {
4560
- _optionalChain([this, 'access', _239 => _239.abortController, 'optionalAccess', _240 => _240.abort, 'call', _241 => _241()]);
4612
+ _optionalChain([this, 'access', _240 => _240.abortController, 'optionalAccess', _241 => _241.abort, 'call', _242 => _242()]);
4561
4613
  this.abortController = null;
4562
4614
  }
4563
4615
  addToolResult({
@@ -4595,44 +4647,154 @@ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4595
4647
  }
4596
4648
  }, _class12);
4597
4649
 
4598
- // src/runtimes/local/LocalRuntimeCore.tsx
4599
- var LocalRuntimeCore = class extends BaseAssistantRuntimeCore {
4650
+ // src/runtimes/local/LocalThreadManagerRuntimeCore.tsx
4651
+ var LocalThreadManagerRuntimeCore = (_class13 = class {
4652
+ constructor(_threadFactory) {;_class13.prototype.__init31.call(this);_class13.prototype.__init32.call(this);_class13.prototype.__init33.call(this);_class13.prototype.__init34.call(this);
4653
+ this._threadFactory = _threadFactory;
4654
+ this._mainThread = this._threadFactory(generateId(), { messages: [] });
4655
+ }
4656
+ __init31() {this._threadData = /* @__PURE__ */ new Map()}
4657
+ __init32() {this._threads = []}
4658
+ __init33() {this._archivedThreads = []}
4659
+ get threads() {
4660
+ return this._threads;
4661
+ }
4662
+ get archivedThreads() {
4663
+ return this._archivedThreads;
4664
+ }
4600
4665
 
4601
- constructor(adapter, options) {
4602
- const proxyConfigProvider = new ProxyConfigProvider();
4603
- super(new LocalThreadRuntimeCore(proxyConfigProvider, adapter, options));
4604
- this._proxyConfigProvider = proxyConfigProvider;
4666
+ get mainThread() {
4667
+ return this._mainThread;
4605
4668
  }
4606
- registerModelConfigProvider(provider) {
4607
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
4669
+ switchToThread(threadId) {
4670
+ if (this._mainThread.threadId === threadId) return;
4671
+ const data = this._threadData.get(threadId);
4672
+ if (!data) throw new Error("Thread not found");
4673
+ const thread = this._threadFactory(threadId, data.data);
4674
+ this._performThreadSwitch(thread);
4608
4675
  }
4609
4676
  switchToNewThread() {
4610
- const { initialMessages, ...options } = this.thread.options;
4611
- this.thread = new LocalThreadRuntimeCore(
4612
- this._proxyConfigProvider,
4613
- this.thread.adapter,
4614
- options
4615
- );
4616
- this.thread._notifyEventSubscribers("switched-to");
4677
+ if (!this._mainThread) return;
4678
+ const thread = this._threadFactory(generateId(), { messages: [] });
4679
+ this._performThreadSwitch(thread);
4680
+ }
4681
+ _performThreadSwitch(newThreadCore) {
4682
+ if (this._mainThread) {
4683
+ const data = this._threadData.get(this._mainThread.threadId);
4684
+ if (!data) throw new Error("Thread not found");
4685
+ const exprt = this._mainThread.export();
4686
+ data.data = exprt;
4687
+ }
4688
+ this._mainThread._notifyEventSubscribers("switched-away");
4689
+ this._mainThread = newThreadCore;
4690
+ newThreadCore._notifyEventSubscribers("switched-to");
4691
+ this._notifySubscribers();
4617
4692
  }
4618
- switchToThread(threadId) {
4619
- if (threadId !== null) {
4620
- throw new Error("LocalRuntime does not yet support switching threads");
4693
+ _performMoveOp(threadId, operation) {
4694
+ const data = this._threadData.get(threadId);
4695
+ if (!data) throw new Error("Thread not found");
4696
+ if (operation === "archive" && data.isArchived) return;
4697
+ if (operation === "unarchive" && !data.isArchived) return;
4698
+ if (operation === "archive") {
4699
+ data.isArchived = true;
4700
+ this._archivedThreads = [...this._archivedThreads, data.metadata];
4701
+ }
4702
+ if (operation === "unarchive") {
4703
+ data.isArchived = false;
4704
+ this._threads = [...this._threads, data.metadata];
4705
+ }
4706
+ if (operation === "delete") {
4707
+ this._threadData.delete(threadId);
4708
+ }
4709
+ if (operation === "archive" || operation === "delete" && data.isArchived) {
4710
+ this._archivedThreads = this._archivedThreads.filter(
4711
+ (t) => t.threadId !== threadId
4712
+ );
4713
+ }
4714
+ if (operation === "unarchive" || operation === "delete" && !data.isArchived) {
4715
+ this._threads = this._threads.filter((t) => t.threadId !== threadId);
4621
4716
  }
4622
- this.switchToNewThread();
4717
+ this._notifySubscribers();
4718
+ }
4719
+ async rename(threadId, newTitle) {
4720
+ const data = this._threadData.get(threadId);
4721
+ if (!data) throw new Error("Thread not found");
4722
+ data.metadata = {
4723
+ ...data.metadata,
4724
+ title: newTitle
4725
+ };
4726
+ const threadList = data.isArchived ? this.archivedThreads : this.threads;
4727
+ const idx = threadList.findIndex((t) => t.threadId === threadId);
4728
+ const updatedThreadList = threadList.toSpliced(idx, 1, data.metadata);
4729
+ if (data.isArchived) {
4730
+ this._archivedThreads = updatedThreadList;
4731
+ } else {
4732
+ this._threads = updatedThreadList;
4733
+ }
4734
+ this._notifySubscribers();
4735
+ }
4736
+ async archive(threadId) {
4737
+ this._performMoveOp(threadId, "archive");
4738
+ }
4739
+ async unarchive(threadId) {
4740
+ this._performMoveOp(threadId, "unarchive");
4741
+ }
4742
+ async delete(threadId) {
4743
+ this._performMoveOp(threadId, "delete");
4744
+ }
4745
+ __init34() {this._subscriptions = /* @__PURE__ */ new Set()}
4746
+ subscribe(callback) {
4747
+ this._subscriptions.add(callback);
4748
+ return () => this._subscriptions.delete(callback);
4749
+ }
4750
+ _notifySubscribers() {
4751
+ for (const callback of this._subscriptions) callback();
4752
+ }
4753
+ }, _class13);
4754
+
4755
+ // src/runtimes/local/LocalRuntimeCore.tsx
4756
+ var getExportFromInitialMessages = (initialMessages) => {
4757
+ const messages2 = fromCoreMessages(initialMessages);
4758
+ return {
4759
+ messages: messages2.map((m, idx) => ({
4760
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _243 => _243[idx - 1], 'optionalAccess', _244 => _244.id]), () => ( null)),
4761
+ message: m
4762
+ }))
4763
+ };
4764
+ };
4765
+ var LocalRuntimeCore = class extends BaseAssistantRuntimeCore {
4766
+
4767
+
4768
+ constructor(options, initialMessages) {
4769
+ super();
4770
+ this._options = options;
4771
+ this.threadManager = new LocalThreadManagerRuntimeCore((threadId, data) => {
4772
+ const thread = new LocalThreadRuntimeCore(
4773
+ this._proxyConfigProvider,
4774
+ threadId,
4775
+ this._options
4776
+ );
4777
+ thread.import(data);
4778
+ return thread;
4779
+ });
4780
+ if (initialMessages) {
4781
+ this.threadManager.mainThread.import(
4782
+ getExportFromInitialMessages(initialMessages)
4783
+ );
4784
+ }
4785
+ }
4786
+ setOptions(options) {
4787
+ this._options = options;
4788
+ this.threadManager.mainThread.setOptions(options);
4623
4789
  }
4624
4790
  reset({
4625
4791
  initialMessages
4626
4792
  } = {}) {
4627
- this.switchToThread(null);
4793
+ this.threadManager.switchToNewThread();
4628
4794
  if (!initialMessages) return;
4629
- const messages2 = fromCoreMessages(initialMessages);
4630
- this.thread.import({
4631
- messages: messages2.map((m, idx) => ({
4632
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _242 => _242[idx - 1], 'optionalAccess', _243 => _243.id]), () => ( null)),
4633
- message: m
4634
- }))
4635
- });
4795
+ this.threadManager.mainThread.import(
4796
+ getExportFromInitialMessages(initialMessages)
4797
+ );
4636
4798
  }
4637
4799
  };
4638
4800
 
@@ -4653,10 +4815,16 @@ var LocalRuntimeImpl = class _LocalRuntimeImpl extends AssistantRuntimeImpl {
4653
4815
  }
4654
4816
  };
4655
4817
  var useLocalRuntime = (adapter, options = {}) => {
4656
- const [runtime] = _react.useState.call(void 0, () => new LocalRuntimeCore(adapter, options));
4657
- _react.useInsertionEffect.call(void 0, () => {
4658
- runtime.thread.adapter = adapter;
4659
- runtime.thread.options = options;
4818
+ const opt = {
4819
+ ...options,
4820
+ adapters: {
4821
+ ...options.adapters,
4822
+ chatModel: adapter
4823
+ }
4824
+ };
4825
+ const [runtime] = _react.useState.call(void 0, () => new LocalRuntimeCore(opt));
4826
+ _react.useEffect.call(void 0, () => {
4827
+ runtime.setOptions(opt);
4660
4828
  });
4661
4829
  return _react.useMemo.call(void 0, () => LocalRuntimeImpl.create(runtime), [runtime]);
4662
4830
  };
@@ -4664,6 +4832,92 @@ var useLocalRuntime = (adapter, options = {}) => {
4664
4832
  // src/runtimes/external-store/useExternalStoreRuntime.tsx
4665
4833
 
4666
4834
 
4835
+ // src/runtimes/external-store/ExternalStoreThreadManagementAdapter.tsx
4836
+ var EMPTY_ARRAY2 = Object.freeze([]);
4837
+ var DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
4838
+ var ExternalStoreThreadManagerRuntimeCore = (_class14 = class {
4839
+ constructor(adapter = {}, threadFactory) {;_class14.prototype.__init35.call(this);
4840
+ this.adapter = adapter;
4841
+ this.threadFactory = threadFactory;
4842
+ this._mainThread = this.threadFactory(DEFAULT_THREAD_ID);
4843
+ }
4844
+ get threads() {
4845
+ return _nullishCoalesce(this.adapter.threads, () => ( EMPTY_ARRAY2));
4846
+ }
4847
+ get archivedThreads() {
4848
+ return _nullishCoalesce(this.adapter.archivedThreads, () => ( EMPTY_ARRAY2));
4849
+ }
4850
+
4851
+ get mainThread() {
4852
+ return this._mainThread;
4853
+ }
4854
+ setAdapter(adapter) {
4855
+ const previousAdapter = this.adapter;
4856
+ this.adapter = adapter;
4857
+ const newThreadId = _nullishCoalesce(adapter.threadId, () => ( DEFAULT_THREAD_ID));
4858
+ const newThreads = _nullishCoalesce(adapter.threads, () => ( EMPTY_ARRAY2));
4859
+ const newArchivedThreads = _nullishCoalesce(adapter.archivedThreads, () => ( EMPTY_ARRAY2));
4860
+ if (previousAdapter.threadId === newThreadId && previousAdapter.threads === newThreads && previousAdapter.archivedThreads === newArchivedThreads) {
4861
+ return;
4862
+ }
4863
+ if (previousAdapter.threadId !== newThreadId) {
4864
+ this._mainThread._notifyEventSubscribers("switched-away");
4865
+ this._mainThread = this.threadFactory(newThreadId);
4866
+ this._mainThread._notifyEventSubscribers("switched-to");
4867
+ }
4868
+ this._notifySubscribers();
4869
+ }
4870
+ switchToThread(threadId) {
4871
+ if (_optionalChain([this, 'access', _245 => _245._mainThread, 'optionalAccess', _246 => _246.threadId]) === threadId) return;
4872
+ const onSwitchToThread = this.adapter.onSwitchToThread;
4873
+ if (!onSwitchToThread)
4874
+ throw new Error(
4875
+ "External store adapter does not support switching to thread"
4876
+ );
4877
+ onSwitchToThread(threadId);
4878
+ }
4879
+ switchToNewThread() {
4880
+ const onSwitchToNewThread = this.adapter.onSwitchToNewThread;
4881
+ if (!onSwitchToNewThread)
4882
+ throw new Error(
4883
+ "External store adapter does not support switching to new thread"
4884
+ );
4885
+ onSwitchToNewThread();
4886
+ }
4887
+ async rename(threadId, newTitle) {
4888
+ const onRename = this.adapter.onRename;
4889
+ if (!onRename)
4890
+ throw new Error("External store adapter does not support renaming");
4891
+ onRename(threadId, newTitle);
4892
+ }
4893
+ async archive(threadId) {
4894
+ const onArchive = this.adapter.onArchive;
4895
+ if (!onArchive)
4896
+ throw new Error("External store adapter does not support archiving");
4897
+ onArchive(threadId);
4898
+ }
4899
+ async unarchive(threadId) {
4900
+ const onUnarchive = this.adapter.onUnarchive;
4901
+ if (!onUnarchive)
4902
+ throw new Error("External store adapter does not support unarchiving");
4903
+ onUnarchive(threadId);
4904
+ }
4905
+ async delete(threadId) {
4906
+ const onDelete = this.adapter.onDelete;
4907
+ if (!onDelete)
4908
+ throw new Error("External store adapter does not support deleting");
4909
+ onDelete(threadId);
4910
+ }
4911
+ __init35() {this._subscriptions = /* @__PURE__ */ new Set()}
4912
+ subscribe(callback) {
4913
+ this._subscriptions.add(callback);
4914
+ return () => this._subscriptions.delete(callback);
4915
+ }
4916
+ _notifySubscribers() {
4917
+ for (const callback of this._subscriptions) callback();
4918
+ }
4919
+ }, _class14);
4920
+
4667
4921
  // src/runtimes/external-store/getExternalStoreMessage.tsx
4668
4922
  var symbolInnerMessage = Symbol("innerMessage");
4669
4923
  var getExternalStoreMessage = (message) => {
@@ -4671,8 +4925,8 @@ var getExternalStoreMessage = (message) => {
4671
4925
  };
4672
4926
 
4673
4927
  // src/runtimes/external-store/ThreadMessageConverter.ts
4674
- var ThreadMessageConverter = (_class13 = class {constructor() { _class13.prototype.__init32.call(this); }
4675
- __init32() {this.cache = /* @__PURE__ */ new WeakMap()}
4928
+ var ThreadMessageConverter = (_class15 = class {constructor() { _class15.prototype.__init36.call(this); }
4929
+ __init36() {this.cache = /* @__PURE__ */ new WeakMap()}
4676
4930
  convertMessages(messages2, converter) {
4677
4931
  return messages2.map((m, idx) => {
4678
4932
  const cached = this.cache.get(m);
@@ -4681,7 +4935,7 @@ var ThreadMessageConverter = (_class13 = class {constructor() { _class13.prototy
4681
4935
  return newMessage;
4682
4936
  });
4683
4937
  }
4684
- }, _class13);
4938
+ }, _class15);
4685
4939
 
4686
4940
  // src/runtimes/external-store/auto-status.tsx
4687
4941
  var AUTO_STATUS_RUNNING = Object.freeze({ type: "running" });
@@ -4767,13 +5021,13 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
4767
5021
  };
4768
5022
 
4769
5023
  // src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx
4770
- var EMPTY_ARRAY2 = Object.freeze([]);
5024
+ var EMPTY_ARRAY3 = Object.freeze([]);
4771
5025
  var hasUpcomingMessage = (isRunning, messages2) => {
4772
- return isRunning && _optionalChain([messages2, 'access', _244 => _244[messages2.length - 1], 'optionalAccess', _245 => _245.role]) !== "assistant";
5026
+ return isRunning && _optionalChain([messages2, 'access', _247 => _247[messages2.length - 1], 'optionalAccess', _248 => _248.role]) !== "assistant";
4773
5027
  };
4774
- var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntimeCore {
4775
- __init33() {this.assistantOptimisticId = null}
4776
- __init34() {this._capabilities = {
5028
+ var ExternalStoreThreadRuntimeCore = (_class16 = class extends BaseThreadRuntimeCore {
5029
+ __init37() {this.assistantOptimisticId = null}
5030
+ __init38() {this._capabilities = {
4777
5031
  switchToBranch: false,
4778
5032
  edit: false,
4779
5033
  reload: false,
@@ -4795,41 +5049,38 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4795
5049
  get adapters() {
4796
5050
  return this._store.adapters;
4797
5051
  }
4798
- __init35() {this.suggestions = []}
4799
- __init36() {this.extras = void 0}
4800
- __init37() {this._converter = new ThreadMessageConverter()}
5052
+ __init39() {this.suggestions = []}
5053
+ __init40() {this.extras = void 0}
5054
+ __init41() {this._converter = new ThreadMessageConverter()}
4801
5055
 
4802
5056
  beginEdit(messageId) {
4803
- if (!this.store.onEdit)
5057
+ if (!this._store.onEdit)
4804
5058
  throw new Error("Runtime does not support editing.");
4805
5059
  super.beginEdit(messageId);
4806
5060
  }
4807
- constructor(configProvider, store) {
4808
- super(configProvider);_class14.prototype.__init33.call(this);_class14.prototype.__init34.call(this);_class14.prototype.__init35.call(this);_class14.prototype.__init36.call(this);_class14.prototype.__init37.call(this);_class14.prototype.__init38.call(this);;
4809
- this.store = store;
5061
+ constructor(configProvider, threadId, store) {
5062
+ super(configProvider);_class16.prototype.__init37.call(this);_class16.prototype.__init38.call(this);_class16.prototype.__init39.call(this);_class16.prototype.__init40.call(this);_class16.prototype.__init41.call(this);_class16.prototype.__init42.call(this);;
5063
+ this.threadId = threadId;
5064
+ this.setStore(store);
4810
5065
  }
4811
- get store() {
4812
- return this._store;
4813
- }
4814
- set store(store) {
5066
+ setStore(store) {
4815
5067
  if (this._store === store) return;
4816
- this.threadId = _nullishCoalesce(_nullishCoalesce(store.threadId, () => ( this.threadId)), () => ( generateId()));
4817
5068
  const isRunning = _nullishCoalesce(store.isRunning, () => ( false));
4818
5069
  this.isDisabled = _nullishCoalesce(store.isDisabled, () => ( false));
4819
5070
  const oldStore = this._store;
4820
5071
  this._store = store;
4821
5072
  this.extras = store.extras;
4822
- this.suggestions = _nullishCoalesce(store.suggestions, () => ( EMPTY_ARRAY2));
5073
+ this.suggestions = _nullishCoalesce(store.suggestions, () => ( EMPTY_ARRAY3));
4823
5074
  this._capabilities = {
4824
5075
  switchToBranch: this._store.setMessages !== void 0,
4825
5076
  edit: this._store.onEdit !== void 0,
4826
5077
  reload: this._store.onReload !== void 0,
4827
5078
  cancel: this._store.onCancel !== void 0,
4828
- speech: _optionalChain([this, 'access', _249 => _249._store, 'access', _250 => _250.adapters, 'optionalAccess', _251 => _251.speech]) !== void 0,
4829
- unstable_copy: _optionalChain([this, 'access', _252 => _252._store, 'access', _253 => _253.unstable_capabilities, 'optionalAccess', _254 => _254.copy]) !== false,
5079
+ speech: _optionalChain([this, 'access', _252 => _252._store, 'access', _253 => _253.adapters, 'optionalAccess', _254 => _254.speech]) !== void 0,
5080
+ unstable_copy: _optionalChain([this, 'access', _255 => _255._store, 'access', _256 => _256.unstable_capabilities, 'optionalAccess', _257 => _257.copy]) !== false,
4830
5081
  // default true
4831
- attachments: !!_optionalChain([this, 'access', _255 => _255.store, 'access', _256 => _256.adapters, 'optionalAccess', _257 => _257.attachments]),
4832
- feedback: !!_optionalChain([this, 'access', _258 => _258.store, 'access', _259 => _259.adapters, 'optionalAccess', _260 => _260.feedback])
5082
+ attachments: !!_optionalChain([this, 'access', _258 => _258._store, 'access', _259 => _259.adapters, 'optionalAccess', _260 => _260.attachments]),
5083
+ feedback: !!_optionalChain([this, 'access', _261 => _261._store, 'access', _262 => _262.adapters, 'optionalAccess', _263 => _263.feedback])
4833
5084
  };
4834
5085
  if (oldStore) {
4835
5086
  if (oldStore.convertMessage !== store.convertMessage) {
@@ -4856,7 +5107,7 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4856
5107
  for (let i = 0; i < messages2.length; i++) {
4857
5108
  const message = messages2[i];
4858
5109
  const parent = messages2[i - 1];
4859
- this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess', _261 => _261.id]), () => ( null)), message);
5110
+ this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess', _264 => _264.id]), () => ( null)), message);
4860
5111
  }
4861
5112
  if (this.assistantOptimisticId) {
4862
5113
  this.repository.deleteMessage(this.assistantOptimisticId);
@@ -4864,7 +5115,7 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4864
5115
  }
4865
5116
  if (hasUpcomingMessage(isRunning, messages2)) {
4866
5117
  this.assistantOptimisticId = this.repository.appendOptimisticMessage(
4867
- _nullishCoalesce(_optionalChain([messages2, 'access', _262 => _262.at, 'call', _263 => _263(-1), 'optionalAccess', _264 => _264.id]), () => ( null)),
5118
+ _nullishCoalesce(_optionalChain([messages2, 'access', _265 => _265.at, 'call', _266 => _266(-1), 'optionalAccess', _267 => _267.id]), () => ( null)),
4868
5119
  {
4869
5120
  role: "assistant",
4870
5121
  content: []
@@ -4872,7 +5123,7 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4872
5123
  );
4873
5124
  }
4874
5125
  this.repository.resetHead(
4875
- _nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages2, 'access', _265 => _265.at, 'call', _266 => _266(-1), 'optionalAccess', _267 => _267.id]))), () => ( null))
5126
+ _nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages2, 'access', _268 => _268.at, 'call', _269 => _269(-1), 'optionalAccess', _270 => _270.id]))), () => ( null))
4876
5127
  );
4877
5128
  this._messages = this.repository.getMessages();
4878
5129
  this._notifySubscribers();
@@ -4884,7 +5135,7 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4884
5135
  this.updateMessages(this.repository.getMessages());
4885
5136
  }
4886
5137
  async append(message) {
4887
- if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access', _268 => _268.messages, 'access', _269 => _269.at, 'call', _270 => _270(-1), 'optionalAccess', _271 => _271.id]), () => ( null)))) {
5138
+ if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access', _271 => _271.messages, 'access', _272 => _272.at, 'call', _273 => _273(-1), 'optionalAccess', _274 => _274.id]), () => ( null)))) {
4888
5139
  if (!this._store.onEdit)
4889
5140
  throw new Error("Runtime does not support editing messages.");
4890
5141
  await this._store.onEdit(message);
@@ -4907,7 +5158,7 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4907
5158
  }
4908
5159
  let messages2 = this.repository.getMessages();
4909
5160
  const previousMessage = messages2[messages2.length - 1];
4910
- if (_optionalChain([previousMessage, 'optionalAccess', _272 => _272.role]) === "user" && previousMessage.id === _optionalChain([messages2, 'access', _273 => _273.at, 'call', _274 => _274(-1), 'optionalAccess', _275 => _275.id])) {
5161
+ if (_optionalChain([previousMessage, 'optionalAccess', _275 => _275.role]) === "user" && previousMessage.id === _optionalChain([messages2, 'access', _276 => _276.at, 'call', _277 => _277(-1), 'optionalAccess', _278 => _278.id])) {
4911
5162
  this.repository.deleteMessage(previousMessage.id);
4912
5163
  if (!this.composer.text.trim()) {
4913
5164
  this.composer.setText(getThreadMessageText(previousMessage));
@@ -4925,57 +5176,41 @@ var ExternalStoreThreadRuntimeCore = (_class14 = class extends BaseThreadRuntime
4925
5176
  throw new Error("Runtime does not support tool results.");
4926
5177
  this._store.onAddToolResult(options);
4927
5178
  }
4928
- __init38() {this.updateMessages = (messages2) => {
4929
- _optionalChain([this, 'access', _276 => _276._store, 'access', _277 => _277.setMessages, 'optionalCall', _278 => _278(
5179
+ __init42() {this.updateMessages = (messages2) => {
5180
+ _optionalChain([this, 'access', _279 => _279._store, 'access', _280 => _280.setMessages, 'optionalCall', _281 => _281(
4930
5181
  messages2.flatMap(getExternalStoreMessage).filter((m) => m != null)
4931
5182
  )]);
4932
5183
  }}
4933
- }, _class14);
5184
+ }, _class16);
4934
5185
 
4935
5186
  // src/runtimes/external-store/ExternalStoreRuntimeCore.tsx
5187
+ var getThreadManagerAdapter = (store) => {
5188
+ return {
5189
+ threadId: store.threadId,
5190
+ onSwitchToNewThread: store.onSwitchToNewThread,
5191
+ onSwitchToThread: store.onSwitchToThread,
5192
+ ..._optionalChain([store, 'access', _282 => _282.adapters, 'optionalAccess', _283 => _283.threadManager])
5193
+ };
5194
+ };
4936
5195
  var ExternalStoreRuntimeCore = class extends BaseAssistantRuntimeCore {
4937
5196
 
5197
+
4938
5198
  constructor(store) {
4939
- const provider = new ProxyConfigProvider();
4940
- super(new ExternalStoreThreadRuntimeCore(provider, store));
4941
- this._proxyConfigProvider = provider;
4942
- }
4943
- getModelConfig() {
4944
- return this._proxyConfigProvider.getModelConfig();
4945
- }
4946
- registerModelConfigProvider(provider) {
4947
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
4948
- }
4949
- async switchToNewThread() {
4950
- if (!this.thread.store.onSwitchToNewThread)
4951
- throw new Error("Runtime does not support switching to new threads.");
4952
- this.thread = new ExternalStoreThreadRuntimeCore(
4953
- this._proxyConfigProvider,
4954
- {
4955
- ...this.thread.store,
4956
- messages: []
4957
- }
4958
- );
4959
- await this.thread.store.onSwitchToNewThread();
4960
- this.thread._notifyEventSubscribers("switched-to");
4961
- }
4962
- async switchToThread(threadId) {
4963
- if (threadId !== null) {
4964
- if (!this.thread.store.onSwitchToThread)
4965
- throw new Error("Runtime does not support switching threads.");
4966
- this.thread = new ExternalStoreThreadRuntimeCore(
5199
+ super();
5200
+ this._store = store;
5201
+ this.threadManager = new ExternalStoreThreadManagerRuntimeCore(
5202
+ getThreadManagerAdapter(store),
5203
+ (threadId) => new ExternalStoreThreadRuntimeCore(
4967
5204
  this._proxyConfigProvider,
4968
- {
4969
- ...this.thread.store,
4970
- messages: []
4971
- // ignore messages until rerender
4972
- }
4973
- );
4974
- await this.thread.store.onSwitchToThread(threadId);
4975
- this.thread._notifyEventSubscribers("switched-to");
4976
- } else {
4977
- this.switchToNewThread();
4978
- }
5205
+ threadId,
5206
+ this._store
5207
+ )
5208
+ );
5209
+ }
5210
+ setStore(store) {
5211
+ this._store = store;
5212
+ this.threadManager.setAdapter(getThreadManagerAdapter(store));
5213
+ this.threadManager.mainThread.setStore(store);
4979
5214
  }
4980
5215
  };
4981
5216
 
@@ -4983,7 +5218,7 @@ var ExternalStoreRuntimeCore = class extends BaseAssistantRuntimeCore {
4983
5218
  var useExternalStoreRuntime = (store) => {
4984
5219
  const [runtime] = _react.useState.call(void 0, () => new ExternalStoreRuntimeCore(store));
4985
5220
  _react.useEffect.call(void 0, () => {
4986
- runtime.thread.store = store;
5221
+ runtime.setStore(store);
4987
5222
  });
4988
5223
  return _react.useMemo.call(void 0,
4989
5224
  () => AssistantRuntimeImpl.create(runtime, ThreadRuntimeImpl),
@@ -5212,8 +5447,8 @@ var WebSpeechSynthesisAdapter = class {
5212
5447
  };
5213
5448
 
5214
5449
  // src/runtimes/attachment/SimpleImageAttachmentAdapter.ts
5215
- var SimpleImageAttachmentAdapter = (_class15 = class {constructor() { _class15.prototype.__init39.call(this); }
5216
- __init39() {this.accept = "image/*"}
5450
+ var SimpleImageAttachmentAdapter = (_class17 = class {constructor() { _class17.prototype.__init43.call(this); }
5451
+ __init43() {this.accept = "image/*"}
5217
5452
  async add(state) {
5218
5453
  return {
5219
5454
  id: state.file.name,
@@ -5238,7 +5473,7 @@ var SimpleImageAttachmentAdapter = (_class15 = class {constructor() { _class15.p
5238
5473
  }
5239
5474
  async remove() {
5240
5475
  }
5241
- }, _class15);
5476
+ }, _class17);
5242
5477
  var getFileDataURL = (file) => new Promise((resolve, reject) => {
5243
5478
  const reader = new FileReader();
5244
5479
  reader.onload = () => resolve(reader.result);
@@ -5247,8 +5482,8 @@ var getFileDataURL = (file) => new Promise((resolve, reject) => {
5247
5482
  });
5248
5483
 
5249
5484
  // src/runtimes/attachment/SimpleTextAttachmentAdapter.ts
5250
- var SimpleTextAttachmentAdapter = (_class16 = class {constructor() { _class16.prototype.__init40.call(this); }
5251
- __init40() {this.accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css"}
5485
+ var SimpleTextAttachmentAdapter = (_class18 = class {constructor() { _class18.prototype.__init44.call(this); }
5486
+ __init44() {this.accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css"}
5252
5487
  async add(state) {
5253
5488
  return {
5254
5489
  id: state.file.name,
@@ -5275,7 +5510,7 @@ ${await getFileText(attachment.file)}
5275
5510
  }
5276
5511
  async remove() {
5277
5512
  }
5278
- }, _class16);
5513
+ }, _class18);
5279
5514
  var getFileText = (file) => new Promise((resolve, reject) => {
5280
5515
  const reader = new FileReader();
5281
5516
  reader.onload = () => resolve(reader.result);
@@ -5376,7 +5611,7 @@ var ThreadConfigProvider = ({
5376
5611
  }) => {
5377
5612
  const hasAssistant = !!useAssistantRuntime({ optional: true });
5378
5613
  const configProvider = config && Object.keys(_nullishCoalesce(config, () => ( {}))).length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
5379
- if (!_optionalChain([config, 'optionalAccess', _279 => _279.runtime])) return configProvider;
5614
+ if (!_optionalChain([config, 'optionalAccess', _284 => _284.runtime])) return configProvider;
5380
5615
  if (hasAssistant) {
5381
5616
  throw new Error(
5382
5617
  "You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
@@ -5704,7 +5939,7 @@ var AssistantMessageContent = _react.forwardRef.call(void 0, ({ components: comp
5704
5939
  {
5705
5940
  components: {
5706
5941
  ...componentsProp,
5707
- Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess', _280 => _280.Text]), () => ( components.Text)), () => ( content_part_default.Text)),
5942
+ Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess', _285 => _285.Text]), () => ( components.Text)), () => ( content_part_default.Text)),
5708
5943
  tools: toolsComponents
5709
5944
  }
5710
5945
  }
@@ -5815,7 +6050,7 @@ var useAttachmentSrc = () => {
5815
6050
  const { file, src } = useAttachment((a) => {
5816
6051
  if (a.type !== "image") return {};
5817
6052
  if (a.file) return { file: a.file };
5818
- const src2 = _optionalChain([a, 'access', _281 => _281.content, 'optionalAccess', _282 => _282.filter, 'call', _283 => _283((c) => c.type === "image"), 'access', _284 => _284[0], 'optionalAccess', _285 => _285.image]);
6053
+ const src2 = _optionalChain([a, 'access', _286 => _286.content, 'optionalAccess', _287 => _287.filter, 'call', _288 => _288((c) => c.type === "image"), 'access', _289 => _289[0], 'optionalAccess', _290 => _290.image]);
5819
6054
  if (!src2) return {};
5820
6055
  return { src: src2 };
5821
6056
  });
@@ -5959,7 +6194,7 @@ var ComposerAttachments = ({ components }) => {
5959
6194
  {
5960
6195
  components: {
5961
6196
  ...components,
5962
- Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _286 => _286.Attachment]), () => ( attachment_default))
6197
+ Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _291 => _291.Attachment]), () => ( attachment_default))
5963
6198
  }
5964
6199
  }
5965
6200
  ) });
@@ -6068,8 +6303,13 @@ var ThreadWelcomeMessageStyled = withDefaults("p", {
6068
6303
  className: "aui-thread-welcome-message"
6069
6304
  });
6070
6305
  var ThreadWelcomeMessage = _react.forwardRef.call(void 0, ({ message: messageProp, ...rest }, ref) => {
6071
- const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
6072
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeMessageStyled, { ...rest, ref, children: _nullishCoalesce(messageProp, () => ( message)) });
6306
+ const {
6307
+ welcome: { message } = {},
6308
+ strings: {
6309
+ welcome: { message: defaultMessage = "How can I help you today?" } = {}
6310
+ } = {}
6311
+ } = useThreadConfig();
6312
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeMessageStyled, { ...rest, ref, children: _nullishCoalesce(_nullishCoalesce(messageProp, () => ( message)), () => ( defaultMessage)) });
6073
6313
  });
6074
6314
  ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
6075
6315
  var ThreadWelcomeSuggestionContainer = withDefaults("div", {
@@ -6087,7 +6327,7 @@ var ThreadWelcomeSuggestions = () => {
6087
6327
  const suggestions2 = useThread((t) => t.suggestions);
6088
6328
  const { welcome: { suggestions } = {} } = useThreadConfig();
6089
6329
  const finalSuggestions = suggestions2.length ? suggestions2 : suggestions;
6090
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([finalSuggestions, 'optionalAccess', _287 => _287.map, 'call', _288 => _288((suggestion, idx) => {
6330
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([finalSuggestions, 'optionalAccess', _292 => _292.map, 'call', _293 => _293((suggestion, idx) => {
6091
6331
  const key = `${suggestion.prompt}-${idx}`;
6092
6332
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestion, { suggestion }, key);
6093
6333
  })]) });
@@ -6165,7 +6405,7 @@ var UserMessageContent = _react.forwardRef.call(void 0, ({ components, ...props
6165
6405
  {
6166
6406
  components: {
6167
6407
  ...components,
6168
- Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _289 => _289.Text]), () => ( content_part_default.Text))
6408
+ Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _294 => _294.Text]), () => ( content_part_default.Text))
6169
6409
  }
6170
6410
  }
6171
6411
  ) });
@@ -6182,7 +6422,7 @@ var UserMessageAttachments = ({
6182
6422
  {
6183
6423
  components: {
6184
6424
  ...components,
6185
- Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _290 => _290.Attachment]), () => ( attachment_default))
6425
+ Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _295 => _295.Attachment]), () => ( attachment_default))
6186
6426
  }
6187
6427
  }
6188
6428
  ) }) });
@@ -6285,10 +6525,10 @@ var ThreadMessages = ({ components, unstable_flexGrowDiv: flexGrowDiv = true, ..
6285
6525
  thread_exports.Messages,
6286
6526
  {
6287
6527
  components: {
6288
- UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _291 => _291.UserMessage]), () => ( user_message_default)),
6289
- EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _292 => _292.EditComposer]), () => ( edit_composer_default)),
6290
- AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _293 => _293.AssistantMessage]), () => ( assistant_message_default)),
6291
- SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _294 => _294.SystemMessage]), () => ( SystemMessage))
6528
+ UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _296 => _296.UserMessage]), () => ( user_message_default)),
6529
+ EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _297 => _297.EditComposer]), () => ( edit_composer_default)),
6530
+ AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _298 => _298.AssistantMessage]), () => ( assistant_message_default)),
6531
+ SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _299 => _299.SystemMessage]), () => ( SystemMessage))
6292
6532
  },
6293
6533
  ...rest
6294
6534
  }
@@ -6299,7 +6539,7 @@ var ThreadMessages = ({ components, unstable_flexGrowDiv: flexGrowDiv = true, ..
6299
6539
  ThreadMessages.displayName = "ThreadMessages";
6300
6540
  var ThreadFollowupSuggestions = () => {
6301
6541
  const suggestions = useThread((t) => t.suggestions);
6302
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, thread_exports.If, { empty: false, running: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aui-thread-followup-suggestions", children: _optionalChain([suggestions, 'optionalAccess', _295 => _295.map, 'call', _296 => _296((suggestion, idx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6542
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, thread_exports.If, { empty: false, running: false, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aui-thread-followup-suggestions", children: _optionalChain([suggestions, 'optionalAccess', _300 => _300.map, 'call', _301 => _301((suggestion, idx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6303
6543
  thread_exports.Suggestion,
6304
6544
  {
6305
6545
  className: "aui-thread-followup-suggestion",
@@ -6533,5 +6773,7 @@ var assistant_modal_default = Object.assign(AssistantModal, exports12);
6533
6773
 
6534
6774
 
6535
6775
 
6536
- exports.ActionBarPrimitive = actionBar_exports; exports.AssistantActionBar = assistant_action_bar_default; exports.AssistantMessage = assistant_message_default; exports.AssistantModal = assistant_modal_default; exports.AssistantModalPrimitive = assistantModal_exports; exports.AssistantRuntimeProvider = AssistantRuntimeProvider; exports.AttachmentPrimitive = attachment_exports; exports.AttachmentUI = attachment_default; exports.BranchPicker = branch_picker_default; exports.BranchPickerPrimitive = branchPicker_exports; exports.Composer = composer_default; exports.ComposerAttachment = attachment_default; exports.ComposerPrimitive = composer_exports; exports.CompositeAttachmentAdapter = CompositeAttachmentAdapter; exports.ContentPart = content_part_default; exports.ContentPartPrimitive = contentPart_exports; exports.EdgeChatAdapter = EdgeChatAdapter; exports.EditComposer = edit_composer_default; exports.INTERNAL = internal_exports; exports.MessagePrimitive = message_exports; exports.SimpleImageAttachmentAdapter = SimpleImageAttachmentAdapter; exports.SimpleTextAttachmentAdapter = SimpleTextAttachmentAdapter; exports.TextContentPartProvider = TextContentPartProvider; exports.Thread = thread_default; exports.ThreadConfigProvider = ThreadConfigProvider; exports.ThreadPrimitive = thread_exports; exports.ThreadWelcome = thread_welcome_default; exports.UserActionBar = user_action_bar_default; exports.UserMessage = user_message_default; exports.UserMessageAttachment = attachment_default; exports.WebSpeechSynthesisAdapter = WebSpeechSynthesisAdapter; exports.fromCoreMessage = fromCoreMessage; exports.fromCoreMessages = fromCoreMessages; exports.fromLanguageModelMessages = fromLanguageModelMessages; exports.fromLanguageModelTools = fromLanguageModelTools; exports.getExternalStoreMessage = getExternalStoreMessage; exports.makeAssistantTool = makeAssistantTool; exports.makeAssistantToolUI = makeAssistantToolUI; exports.streamUtils = streamUtils; exports.subscribeToMainThread = subscribeToMainThread; exports.toCoreMessage = _chunkC6UZOY5Ajs.toCoreMessage; exports.toCoreMessages = _chunkC6UZOY5Ajs.toCoreMessages; exports.toLanguageModelMessages = _chunkC6UZOY5Ajs.toLanguageModelMessages; exports.toLanguageModelTools = _chunkC6UZOY5Ajs.toLanguageModelTools; exports.useActionBarCopy = useActionBarCopy; exports.useActionBarEdit = useActionBarEdit; exports.useActionBarFeedbackNegative = useActionBarFeedbackNegative; exports.useActionBarFeedbackPositive = useActionBarFeedbackPositive; exports.useActionBarReload = useActionBarReload; exports.useActionBarSpeak = useActionBarSpeak; exports.useActionBarStopSpeaking = useActionBarStopSpeaking; exports.useAppendMessage = useAppendMessage; exports.useAssistantActions = useAssistantActions; exports.useAssistantActionsStore = useAssistantActionsStore; exports.useAssistantContext = useAssistantContext; exports.useAssistantInstructions = useAssistantInstructions; exports.useAssistantRuntime = useAssistantRuntime; exports.useAssistantRuntimeStore = useAssistantRuntimeStore; exports.useAssistantTool = useAssistantTool; exports.useAssistantToolUI = useAssistantToolUI; exports.useBranchPickerCount = useBranchPickerCount; exports.useBranchPickerNext = useBranchPickerNext; exports.useBranchPickerNumber = useBranchPickerNumber; exports.useBranchPickerPrevious = useBranchPickerPrevious; exports.useComposer = useComposer; exports.useComposerAddAttachment = useComposerAddAttachment; exports.useComposerCancel = useComposerCancel; exports.useComposerContext = useComposerContext; exports.useComposerIf = useComposerIf; exports.useComposerRuntime = useComposerRuntime; exports.useComposerSend = useComposerSend; exports.useComposerStore = useComposerStore; exports.useContentPart = useContentPart; exports.useContentPartContext = useContentPartContext; exports.useContentPartDisplay = useContentPartDisplay; exports.useContentPartImage = useContentPartImage; exports.useContentPartRuntime = useContentPartRuntime; exports.useContentPartStore = useContentPartStore; exports.useContentPartText = useContentPartText; exports.useDangerousInBrowserRuntime = useDangerousInBrowserRuntime; exports.useEdgeRuntime = useEdgeRuntime; exports.useEditComposer = useEditComposer; exports.useEditComposerStore = useEditComposerStore; exports.useExternalMessageConverter = useExternalMessageConverter; exports.useExternalStoreRuntime = useExternalStoreRuntime; exports.useLocalRuntime = useLocalRuntime; exports.useMessage = useMessage; exports.useMessageContext = useMessageContext; exports.useMessageIf = useMessageIf; exports.useMessageRuntime = useMessageRuntime; exports.useMessageStore = useMessageStore; exports.useMessageUtils = useMessageUtils; exports.useMessageUtilsStore = useMessageUtilsStore; exports.useSwitchToNewThread = useSwitchToNewThread; exports.useThread = useThread; exports.useThreadActions = useThreadActions; exports.useThreadActionsStore = useThreadActionsStore; exports.useThreadComposer = useThreadComposer; exports.useThreadComposerStore = useThreadComposerStore; exports.useThreadConfig = useThreadConfig; exports.useThreadContext = useThreadContext; exports.useThreadEmpty = useThreadEmpty; exports.useThreadIf = useThreadIf; exports.useThreadMessages = useThreadMessages; exports.useThreadMessagesStore = useThreadMessagesStore; exports.useThreadModelConfig = useThreadModelConfig; exports.useThreadRuntime = useThreadRuntime; exports.useThreadRuntimeStore = useThreadRuntimeStore; exports.useThreadScrollToBottom = useThreadScrollToBottom; exports.useThreadStore = useThreadStore; exports.useThreadSuggestion = useThreadSuggestion; exports.useThreadViewport = useThreadViewport; exports.useThreadViewportStore = useThreadViewportStore; exports.useToolUIs = useToolUIs; exports.useToolUIsStore = useToolUIsStore;
6776
+
6777
+
6778
+ exports.ActionBarPrimitive = actionBar_exports; exports.AssistantActionBar = assistant_action_bar_default; exports.AssistantMessage = assistant_message_default; exports.AssistantModal = assistant_modal_default; exports.AssistantModalPrimitive = assistantModal_exports; exports.AssistantRuntimeProvider = AssistantRuntimeProvider; exports.AttachmentPrimitive = attachment_exports; exports.AttachmentUI = attachment_default; exports.BranchPicker = branch_picker_default; exports.BranchPickerPrimitive = branchPicker_exports; exports.Composer = composer_default; exports.ComposerAttachment = attachment_default; exports.ComposerPrimitive = composer_exports; exports.CompositeAttachmentAdapter = CompositeAttachmentAdapter; exports.ContentPart = content_part_default; exports.ContentPartPrimitive = contentPart_exports; exports.EdgeChatAdapter = EdgeChatAdapter; exports.EditComposer = edit_composer_default; exports.INTERNAL = internal_exports; exports.MessagePrimitive = message_exports; exports.SimpleImageAttachmentAdapter = SimpleImageAttachmentAdapter; exports.SimpleTextAttachmentAdapter = SimpleTextAttachmentAdapter; exports.TextContentPartProvider = TextContentPartProvider; exports.Thread = thread_default; exports.ThreadConfigProvider = ThreadConfigProvider; exports.ThreadPrimitive = thread_exports; exports.ThreadWelcome = thread_welcome_default; exports.UserActionBar = user_action_bar_default; exports.UserMessage = user_message_default; exports.UserMessageAttachment = attachment_default; exports.WebSpeechSynthesisAdapter = WebSpeechSynthesisAdapter; exports.fromCoreMessage = fromCoreMessage; exports.fromCoreMessages = fromCoreMessages; exports.fromLanguageModelMessages = fromLanguageModelMessages; exports.fromLanguageModelTools = fromLanguageModelTools; exports.getExternalStoreMessage = getExternalStoreMessage; exports.makeAssistantTool = makeAssistantTool; exports.makeAssistantToolUI = makeAssistantToolUI; exports.streamUtils = streamUtils; exports.subscribeToMainThread = subscribeToMainThread; exports.toCoreMessage = _chunkC6UZOY5Ajs.toCoreMessage; exports.toCoreMessages = _chunkC6UZOY5Ajs.toCoreMessages; exports.toLanguageModelMessages = _chunkC6UZOY5Ajs.toLanguageModelMessages; exports.toLanguageModelTools = _chunkC6UZOY5Ajs.toLanguageModelTools; exports.useActionBarCopy = useActionBarCopy; exports.useActionBarEdit = useActionBarEdit; exports.useActionBarFeedbackNegative = useActionBarFeedbackNegative; exports.useActionBarFeedbackPositive = useActionBarFeedbackPositive; exports.useActionBarReload = useActionBarReload; exports.useActionBarSpeak = useActionBarSpeak; exports.useActionBarStopSpeaking = useActionBarStopSpeaking; exports.useAppendMessage = useAppendMessage; exports.useAssistantActions = useAssistantActions; exports.useAssistantActionsStore = useAssistantActionsStore; exports.useAssistantContext = useAssistantContext; exports.useAssistantInstructions = useAssistantInstructions; exports.useAssistantRuntime = useAssistantRuntime; exports.useAssistantRuntimeStore = useAssistantRuntimeStore; exports.useAssistantTool = useAssistantTool; exports.useAssistantToolUI = useAssistantToolUI; exports.useBranchPickerCount = useBranchPickerCount; exports.useBranchPickerNext = useBranchPickerNext; exports.useBranchPickerNumber = useBranchPickerNumber; exports.useBranchPickerPrevious = useBranchPickerPrevious; exports.useComposer = useComposer; exports.useComposerAddAttachment = useComposerAddAttachment; exports.useComposerCancel = useComposerCancel; exports.useComposerContext = useComposerContext; exports.useComposerIf = useComposerIf; exports.useComposerRuntime = useComposerRuntime; exports.useComposerSend = useComposerSend; exports.useComposerStore = useComposerStore; exports.useContentPart = useContentPart; exports.useContentPartContext = useContentPartContext; exports.useContentPartDisplay = useContentPartDisplay; exports.useContentPartImage = useContentPartImage; exports.useContentPartRuntime = useContentPartRuntime; exports.useContentPartStore = useContentPartStore; exports.useContentPartText = useContentPartText; exports.useDangerousInBrowserRuntime = useDangerousInBrowserRuntime; exports.useEdgeRuntime = useEdgeRuntime; exports.useEditComposer = useEditComposer; exports.useEditComposerStore = useEditComposerStore; exports.useExternalMessageConverter = useExternalMessageConverter; exports.useExternalStoreRuntime = useExternalStoreRuntime; exports.useInlineRender = useInlineRender; exports.useLocalRuntime = useLocalRuntime; exports.useMessage = useMessage; exports.useMessageContext = useMessageContext; exports.useMessageIf = useMessageIf; exports.useMessageRuntime = useMessageRuntime; exports.useMessageStore = useMessageStore; exports.useMessageUtils = useMessageUtils; exports.useMessageUtilsStore = useMessageUtilsStore; exports.useSwitchToNewThread = useSwitchToNewThread; exports.useThread = useThread; exports.useThreadActions = useThreadActions; exports.useThreadActionsStore = useThreadActionsStore; exports.useThreadComposer = useThreadComposer; exports.useThreadComposerStore = useThreadComposerStore; exports.useThreadConfig = useThreadConfig; exports.useThreadContext = useThreadContext; exports.useThreadEmpty = useThreadEmpty; exports.useThreadIf = useThreadIf; exports.useThreadManager = useThreadManager; exports.useThreadMessages = useThreadMessages; exports.useThreadMessagesStore = useThreadMessagesStore; exports.useThreadModelConfig = useThreadModelConfig; exports.useThreadRuntime = useThreadRuntime; exports.useThreadRuntimeStore = useThreadRuntimeStore; exports.useThreadScrollToBottom = useThreadScrollToBottom; exports.useThreadStore = useThreadStore; exports.useThreadSuggestion = useThreadSuggestion; exports.useThreadViewport = useThreadViewport; exports.useThreadViewportStore = useThreadViewportStore; exports.useToolUIs = useToolUIs; exports.useToolUIsStore = useToolUIsStore;
6537
6779
  //# sourceMappingURL=index.js.map