@assistant-ui/react 0.5.81 → 0.5.83

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; var _class17;
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
 
@@ -9,7 +9,7 @@
9
9
 
10
10
 
11
11
 
12
- var _chunkCYIFAX4Ujs = require('./chunk-CYIFAX4U.js');
12
+ var _chunkC6UZOY5Ajs = require('./chunk-C6UZOY5A.js');
13
13
 
14
14
 
15
15
  var _chunkPZ5AY32Cjs = require('./chunk-PZ5AY32C.js');
@@ -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');
@@ -155,6 +159,15 @@ var {
155
159
  useViewport: useThreadViewport,
156
160
  useViewportStore: useThreadViewportStore
157
161
  } = createContextStoreHook(useThreadContext, "useViewport");
162
+ function useThreadModelConfig(options) {
163
+ const [, rerender] = _react.useState.call(void 0, {});
164
+ const runtime = useThreadRuntime(options);
165
+ _react.useEffect.call(void 0, () => {
166
+ return _optionalChain([runtime, 'optionalAccess', _5 => _5.unstable_on, 'call', _6 => _6("model-config-update", () => rerender({}))]);
167
+ }, [runtime]);
168
+ if (!runtime) return null;
169
+ return _optionalChain([runtime, 'optionalAccess', _7 => _7.getModelConfig, 'call', _8 => _8()]);
170
+ }
158
171
 
159
172
  // src/context/stores/ThreadViewport.tsx
160
173
 
@@ -250,16 +263,29 @@ var useAssistantRuntimeStore2 = (runtime) => {
250
263
  var useAssistantToolUIsStore = () => {
251
264
  return _react.useMemo.call(void 0, () => makeAssistantToolUIsStore(), []);
252
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
+ };
253
277
  var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
254
278
  const useAssistantRuntime2 = useAssistantRuntimeStore2(runtime);
255
279
  const useToolUIs2 = useAssistantToolUIsStore();
280
+ const useThreadManager2 = useThreadManagerStore(runtime);
256
281
  const context = _react.useMemo.call(void 0, () => {
257
282
  return {
258
283
  useToolUIs: useToolUIs2,
259
284
  useAssistantRuntime: useAssistantRuntime2,
260
- useAssistantActions: useAssistantRuntime2
285
+ useAssistantActions: useAssistantRuntime2,
286
+ useThreadManager: useThreadManager2
261
287
  };
262
- }, [useAssistantRuntime2, useToolUIs2]);
288
+ }, [useAssistantRuntime2, useToolUIs2, useThreadManager2]);
263
289
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AssistantContext.Provider, { value: context, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadRuntimeProvider, { runtime: runtime.thread, children }) });
264
290
  };
265
291
  var AssistantRuntimeProvider = _react.memo.call(void 0, AssistantRuntimeProviderImpl);
@@ -294,6 +320,9 @@ var ContentPartRuntimeImpl = class {
294
320
  this.messageApi = messageApi;
295
321
  this.threadApi = threadApi;
296
322
  }
323
+ get path() {
324
+ return this.contentBinding.path;
325
+ }
297
326
  getState() {
298
327
  return this.contentBinding.getState();
299
328
  }
@@ -404,7 +433,7 @@ var { useComposer, useComposerStore } = createContextStoreHook(
404
433
  function useComposerRuntime(options) {
405
434
  const messageRuntime = useMessageRuntime({ optional: true });
406
435
  const threadRuntime = useThreadRuntime(options);
407
- return messageRuntime ? messageRuntime.composer : _nullishCoalesce(_optionalChain([threadRuntime, 'optionalAccess', _5 => _5.composer]), () => ( null));
436
+ return messageRuntime ? messageRuntime.composer : _nullishCoalesce(_optionalChain([threadRuntime, 'optionalAccess', _9 => _9.composer]), () => ( null));
408
437
  }
409
438
 
410
439
  // src/hooks/useAppendMessage.tsx
@@ -448,7 +477,7 @@ var useAssistantTool = (tool) => {
448
477
  const unsub2 = render ? toolUIsStore.getState().setToolUI(toolName, render) : void 0;
449
478
  return () => {
450
479
  unsub1();
451
- _optionalChain([unsub2, 'optionalCall', _6 => _6()]);
480
+ _optionalChain([unsub2, 'optionalCall', _10 => _10()]);
452
481
  };
453
482
  }, [assistantRuntime, toolUIsStore, tool]);
454
483
  };
@@ -500,64 +529,23 @@ var useAssistantInstructions = (instruction) => {
500
529
 
501
530
  // src/primitive-hooks/actionBar/useActionBarCopy.tsx
502
531
 
503
-
504
- // src/utils/combined/useCombinedStore.ts
505
-
506
-
507
- // src/utils/combined/createCombinedStore.ts
508
-
509
- var createCombinedStore = (stores) => {
510
- const subscribe = (callback) => {
511
- const unsubscribes = stores.map((store) => store.subscribe(callback));
512
- return () => {
513
- for (const unsub of unsubscribes) {
514
- unsub();
515
- }
516
- };
517
- };
518
- return (selector) => {
519
- const getSnapshot = () => selector(...stores.map((store) => store.getState()));
520
- return _react.useSyncExternalStore.call(void 0, subscribe, getSnapshot, getSnapshot);
521
- };
522
- };
523
-
524
- // src/utils/combined/useCombinedStore.ts
525
- var useCombinedStore = (stores, selector) => {
526
- const useCombined = _react.useMemo.call(void 0, () => createCombinedStore(stores), stores);
527
- return useCombined(selector);
528
- };
529
-
530
- // src/utils/getThreadMessageText.tsx
531
- var getThreadMessageText = (message) => {
532
- const textParts = message.content.filter(
533
- (part) => part.type === "text"
534
- );
535
- return textParts.map((part) => part.text).join("\n\n");
536
- };
537
-
538
- // src/primitive-hooks/actionBar/useActionBarCopy.tsx
539
532
  var useActionBarCopy = ({
540
533
  copiedDuration = 3e3
541
534
  } = {}) => {
542
535
  const messageRuntime = useMessageRuntime();
543
536
  const composerRuntime = useComposerRuntime();
544
- const messageUtilsStore = useMessageUtilsStore();
545
- const hasCopyableContent = useCombinedStore(
546
- [messageRuntime, composerRuntime],
547
- (message, c) => {
548
- return !c.isEditing && (message.role !== "assistant" || message.status.type !== "running") && message.content.some((c2) => c2.type === "text" && c2.text.length > 0);
549
- }
550
- );
537
+ const setIsCopied = useMessageUtils((s) => s.setIsCopied);
538
+ const hasCopyableContent = useMessage((message) => {
539
+ return (message.role !== "assistant" || message.status.type !== "running") && message.content.some((c) => c.type === "text" && c.text.length > 0);
540
+ });
551
541
  const callback = _react.useCallback.call(void 0, () => {
552
- const message = messageRuntime.getState();
553
- const { setIsCopied } = messageUtilsStore.getState();
554
542
  const { isEditing, text: composerValue } = composerRuntime.getState();
555
- const valueToCopy = isEditing ? composerValue : getThreadMessageText(message);
543
+ const valueToCopy = isEditing ? composerValue : messageRuntime.unstable_getCopyText();
556
544
  navigator.clipboard.writeText(valueToCopy).then(() => {
557
545
  setIsCopied(true);
558
546
  setTimeout(() => setIsCopied(false), copiedDuration);
559
547
  });
560
- }, [messageRuntime, messageUtilsStore, composerRuntime, copiedDuration]);
548
+ }, [messageRuntime, setIsCopied, composerRuntime, copiedDuration]);
561
549
  if (!hasCopyableContent) return null;
562
550
  return callback;
563
551
  };
@@ -576,6 +564,34 @@ var useActionBarEdit = () => {
576
564
 
577
565
  // src/primitive-hooks/actionBar/useActionBarReload.tsx
578
566
 
567
+
568
+ // src/utils/combined/useCombinedStore.ts
569
+
570
+
571
+ // src/utils/combined/createCombinedStore.ts
572
+
573
+ var createCombinedStore = (stores) => {
574
+ const subscribe = (callback) => {
575
+ const unsubscribes = stores.map((store) => store.subscribe(callback));
576
+ return () => {
577
+ for (const unsub of unsubscribes) {
578
+ unsub();
579
+ }
580
+ };
581
+ };
582
+ return (selector) => {
583
+ const getSnapshot = () => selector(...stores.map((store) => store.getState()));
584
+ return _react.useSyncExternalStore.call(void 0, subscribe, getSnapshot, getSnapshot);
585
+ };
586
+ };
587
+
588
+ // src/utils/combined/useCombinedStore.ts
589
+ var useCombinedStore = (stores, selector) => {
590
+ const useCombined = _react.useMemo.call(void 0, () => createCombinedStore(stores), stores);
591
+ return useCombined(selector);
592
+ };
593
+
594
+ // src/primitive-hooks/actionBar/useActionBarReload.tsx
579
595
  var useActionBarReload = () => {
580
596
  const messageRuntime = useMessageRuntime();
581
597
  const threadRuntime = useThreadRuntime();
@@ -723,7 +739,7 @@ var useComposerAddAttachment = () => {
723
739
  input.accept = attachmentAccept;
724
740
  }
725
741
  input.onchange = (e) => {
726
- const file = _optionalChain([e, 'access', _7 => _7.target, 'access', _8 => _8.files, 'optionalAccess', _9 => _9[0]]);
742
+ const file = _optionalChain([e, 'access', _11 => _11.target, 'access', _12 => _12.files, 'optionalAccess', _13 => _13[0]]);
727
743
  if (!file) return;
728
744
  composerRuntime.addAttachment(file);
729
745
  };
@@ -799,7 +815,7 @@ var useMessageIf = (props) => {
799
815
  return false;
800
816
  if (props.hasContent === true && content.length === 0) return false;
801
817
  if (props.hasContent === false && content.length > 0) return false;
802
- if (props.submittedFeedback !== void 0 && (_nullishCoalesce(_optionalChain([submittedFeedback, 'optionalAccess', _10 => _10.type]), () => ( null))) !== props.submittedFeedback)
818
+ if (props.submittedFeedback !== void 0 && (_nullishCoalesce(_optionalChain([submittedFeedback, 'optionalAccess', _14 => _14.type]), () => ( null))) !== props.submittedFeedback)
803
819
  return false;
804
820
  return true;
805
821
  }
@@ -933,7 +949,7 @@ var ActionBarPrimitiveCopy = _react.forwardRef.call(void 0, ({ copiedDuration, o
933
949
  ref: forwardedRef,
934
950
  disabled: disabled || !callback,
935
951
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
936
- _optionalChain([callback, 'optionalCall', _11 => _11()]);
952
+ _optionalChain([callback, 'optionalCall', _15 => _15()]);
937
953
  })
938
954
  }
939
955
  );
@@ -965,7 +981,7 @@ var createActionButton = (displayName, useActionButton, forwardProps = []) => {
965
981
  ref: forwardedRef,
966
982
  disabled: primitiveProps.disabled || !callback,
967
983
  onClick: _primitive.composeEventHandlers.call(void 0, primitiveProps.onClick, () => {
968
- _optionalChain([callback, 'optionalCall', _12 => _12()]);
984
+ _optionalChain([callback, 'optionalCall', _16 => _16()]);
969
985
  })
970
986
  }
971
987
  );
@@ -1014,7 +1030,7 @@ var ActionBarPrimitiveStopSpeaking = _react.forwardRef.call(void 0, (props, ref)
1014
1030
  ...props,
1015
1031
  ref,
1016
1032
  onClick: _primitive.composeEventHandlers.call(void 0, props.onClick, () => {
1017
- _optionalChain([callback, 'optionalCall', _13 => _13()]);
1033
+ _optionalChain([callback, 'optionalCall', _17 => _17()]);
1018
1034
  })
1019
1035
  }
1020
1036
  );
@@ -1028,7 +1044,7 @@ ActionBarPrimitiveStopSpeaking.displayName = "ActionBarPrimitive.StopSpeaking";
1028
1044
 
1029
1045
  var ActionBarPrimitiveFeedbackPositive = _react.forwardRef.call(void 0, ({ onClick, disabled, ...props }, forwardedRef) => {
1030
1046
  const isSubmitted = useMessage(
1031
- (u) => _optionalChain([u, 'access', _14 => _14.submittedFeedback, 'optionalAccess', _15 => _15.type]) === "positive"
1047
+ (u) => _optionalChain([u, 'access', _18 => _18.submittedFeedback, 'optionalAccess', _19 => _19.type]) === "positive"
1032
1048
  );
1033
1049
  const callback = useActionBarFeedbackPositive();
1034
1050
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1040,7 +1056,7 @@ var ActionBarPrimitiveFeedbackPositive = _react.forwardRef.call(void 0, ({ onCli
1040
1056
  ref: forwardedRef,
1041
1057
  disabled: disabled || !callback,
1042
1058
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
1043
- _optionalChain([callback, 'optionalCall', _16 => _16()]);
1059
+ _optionalChain([callback, 'optionalCall', _20 => _20()]);
1044
1060
  })
1045
1061
  }
1046
1062
  );
@@ -1054,7 +1070,7 @@ ActionBarPrimitiveFeedbackPositive.displayName = "ActionBarPrimitive.FeedbackPos
1054
1070
 
1055
1071
  var ActionBarPrimitiveFeedbackNegative = _react.forwardRef.call(void 0, ({ onClick, disabled, ...props }, forwardedRef) => {
1056
1072
  const isSubmitted = useMessage(
1057
- (u) => _optionalChain([u, 'access', _17 => _17.submittedFeedback, 'optionalAccess', _18 => _18.type]) === "negative"
1073
+ (u) => _optionalChain([u, 'access', _21 => _21.submittedFeedback, 'optionalAccess', _22 => _22.type]) === "negative"
1058
1074
  );
1059
1075
  const callback = useActionBarFeedbackNegative();
1060
1076
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1066,7 +1082,7 @@ var ActionBarPrimitiveFeedbackNegative = _react.forwardRef.call(void 0, ({ onCli
1066
1082
  ref: forwardedRef,
1067
1083
  disabled: disabled || !callback,
1068
1084
  onClick: _primitive.composeEventHandlers.call(void 0, onClick, () => {
1069
- _optionalChain([callback, 'optionalCall', _19 => _19()]);
1085
+ _optionalChain([callback, 'optionalCall', _23 => _23()]);
1070
1086
  })
1071
1087
  }
1072
1088
  );
@@ -1224,7 +1240,7 @@ var AttachmentContext = _react.createContext.call(void 0,
1224
1240
  );
1225
1241
  function useAttachmentContext(options) {
1226
1242
  const context = _react.useContext.call(void 0, AttachmentContext);
1227
- if (!_optionalChain([options, 'optionalAccess', _20 => _20.optional]) && !context)
1243
+ if (!_optionalChain([options, 'optionalAccess', _24 => _24.optional]) && !context)
1228
1244
  throw new Error(
1229
1245
  "This component must be used within a ComposerPrimitive.Attachments or MessagePrimitive.Attachments component."
1230
1246
  );
@@ -1505,7 +1521,7 @@ var withSmoothContextProvider = (Component) => {
1505
1521
  };
1506
1522
  function useSmoothContext(options) {
1507
1523
  const context = _react.useContext.call(void 0, SmoothContext);
1508
- if (!_optionalChain([options, 'optionalAccess', _21 => _21.optional]) && !context)
1524
+ if (!_optionalChain([options, 'optionalAccess', _25 => _25.optional]) && !context)
1509
1525
  throw new Error(
1510
1526
  "This component must be used within a SmoothContextProvider."
1511
1527
  );
@@ -1655,11 +1671,22 @@ var ContentPartPrimitiveInProgress = ({ children }) => {
1655
1671
  };
1656
1672
  ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
1657
1673
 
1674
+ // src/utils/getThreadMessageText.tsx
1675
+ var getThreadMessageText = (message) => {
1676
+ const textParts = message.content.filter(
1677
+ (part) => part.type === "text"
1678
+ );
1679
+ return textParts.map((part) => part.text).join("\n\n");
1680
+ };
1681
+
1658
1682
  // src/api/AttachmentRuntime.ts
1659
1683
  var AttachmentRuntimeImpl = class {
1660
1684
  constructor(_core) {
1661
1685
  this._core = _core;
1662
1686
  }
1687
+ get path() {
1688
+ return this._core.path;
1689
+ }
1663
1690
  getState() {
1664
1691
  return this._core.getState();
1665
1692
  }
@@ -1715,7 +1742,7 @@ var BaseSubject = (_class2 = class {constructor() { _class2.prototype.__init5.ca
1715
1742
  if (this._connection) return;
1716
1743
  this._connection = this._connect();
1717
1744
  } else {
1718
- _optionalChain([this, 'access', _22 => _22._connection, 'optionalCall', _23 => _23()]);
1745
+ _optionalChain([this, 'access', _26 => _26._connection, 'optionalCall', _27 => _27()]);
1719
1746
  this._connection = void 0;
1720
1747
  }
1721
1748
  }
@@ -1738,6 +1765,9 @@ var LazyMemoizeSubject = (_class3 = class extends BaseSubject {
1738
1765
  super();_class3.prototype.__init6.call(this);_class3.prototype.__init7.call(this);;
1739
1766
  this.binding = binding;
1740
1767
  }
1768
+ get path() {
1769
+ return this.binding.path;
1770
+ }
1741
1771
  __init6() {this._previousStateDirty = true}
1742
1772
 
1743
1773
  __init7() {this.getState = () => {
@@ -1784,6 +1814,9 @@ var ShallowMemoizeSubject = (_class4 = class extends BaseSubject {
1784
1814
  throw new Error("Entry not available in the store");
1785
1815
  this._previousState = state;
1786
1816
  }
1817
+ get path() {
1818
+ return this.binding.path;
1819
+ }
1787
1820
 
1788
1821
  __init8() {this.getState = () => {
1789
1822
  if (!this.isConnected) this._syncState();
@@ -1814,42 +1847,45 @@ var EMPTY_ARRAY = Object.freeze([]);
1814
1847
  var getThreadComposerState = (runtime) => {
1815
1848
  return Object.freeze({
1816
1849
  type: "thread",
1817
- isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _24 => _24.isEditing]), () => ( false)),
1818
- canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _25 => _25.canCancel]), () => ( false)),
1819
- isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _26 => _26.isEmpty]), () => ( true)),
1820
- text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _27 => _27.text]), () => ( "")),
1821
- attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _28 => _28.attachments]), () => ( EMPTY_ARRAY)),
1822
- value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _29 => _29.text]), () => ( "")),
1823
- setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _30 => _30.setText, 'access', _31 => _31.bind, 'call', _32 => _32(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1824
- setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _33 => _33.setText, 'access', _34 => _34.bind, 'call', _35 => _35(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1850
+ isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _28 => _28.isEditing]), () => ( false)),
1851
+ canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _29 => _29.canCancel]), () => ( false)),
1852
+ isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _30 => _30.isEmpty]), () => ( true)),
1853
+ text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _31 => _31.text]), () => ( "")),
1854
+ attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _32 => _32.attachments]), () => ( EMPTY_ARRAY)),
1855
+ value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _33 => _33.text]), () => ( "")),
1856
+ setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _34 => _34.setText, 'access', _35 => _35.bind, 'call', _36 => _36(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1857
+ setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _37 => _37.setText, 'access', _38 => _38.bind, 'call', _39 => _39(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1825
1858
  // edit: beginEdit,
1826
- send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _36 => _36.send, 'access', _37 => _37.bind, 'call', _38 => _38(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1827
- cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _39 => _39.cancel, 'access', _40 => _40.bind, 'call', _41 => _41(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1828
- reset: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _42 => _42.reset, 'access', _43 => _43.bind, 'call', _44 => _44(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1829
- addAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _45 => _45.addAttachment, 'access', _46 => _46.bind, 'call', _47 => _47(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1830
- removeAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _48 => _48.removeAttachment, 'access', _49 => _49.bind, 'call', _50 => _50(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1859
+ send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _40 => _40.send, 'access', _41 => _41.bind, 'call', _42 => _42(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1860
+ cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _43 => _43.cancel, 'access', _44 => _44.bind, 'call', _45 => _45(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1861
+ reset: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _46 => _46.reset, 'access', _47 => _47.bind, 'call', _48 => _48(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1862
+ addAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _49 => _49.addAttachment, 'access', _50 => _50.bind, 'call', _51 => _51(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1863
+ removeAttachment: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _52 => _52.removeAttachment, 'access', _53 => _53.bind, 'call', _54 => _54(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1831
1864
  });
1832
1865
  };
1833
1866
  var getEditComposerState = (runtime, beginEdit) => {
1834
1867
  return Object.freeze({
1835
1868
  type: "edit",
1836
- isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _51 => _51.isEditing]), () => ( false)),
1837
- canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _52 => _52.canCancel]), () => ( false)),
1838
- isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _53 => _53.isEmpty]), () => ( true)),
1839
- text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _54 => _54.text]), () => ( "")),
1840
- attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _55 => _55.attachments]), () => ( EMPTY_ARRAY)),
1841
- value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _56 => _56.text]), () => ( "")),
1842
- setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _57 => _57.setText, 'access', _58 => _58.bind, 'call', _59 => _59(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1843
- setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _60 => _60.setText, 'access', _61 => _61.bind, 'call', _62 => _62(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1869
+ isEditing: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _55 => _55.isEditing]), () => ( false)),
1870
+ canCancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _56 => _56.canCancel]), () => ( false)),
1871
+ isEmpty: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _57 => _57.isEmpty]), () => ( true)),
1872
+ text: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _58 => _58.text]), () => ( "")),
1873
+ attachments: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _59 => _59.attachments]), () => ( EMPTY_ARRAY)),
1874
+ value: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _60 => _60.text]), () => ( "")),
1875
+ setValue: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _61 => _61.setText, 'access', _62 => _62.bind, 'call', _63 => _63(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1876
+ setText: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _64 => _64.setText, 'access', _65 => _65.bind, 'call', _66 => _66(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1844
1877
  edit: beginEdit,
1845
- send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _63 => _63.send, 'access', _64 => _64.bind, 'call', _65 => _65(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1846
- cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _66 => _66.cancel, 'access', _67 => _67.bind, 'call', _68 => _68(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1878
+ send: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _67 => _67.send, 'access', _68 => _68.bind, 'call', _69 => _69(runtime)]), () => ( METHOD_NOT_SUPPORTED)),
1879
+ cancel: _nullishCoalesce(_optionalChain([runtime, 'optionalAccess', _70 => _70.cancel, 'access', _71 => _71.bind, 'call', _72 => _72(runtime)]), () => ( METHOD_NOT_SUPPORTED))
1847
1880
  });
1848
1881
  };
1849
1882
  var ComposerRuntimeImpl = class {
1850
1883
  constructor(_core) {
1851
1884
  this._core = _core;
1852
1885
  }
1886
+ get path() {
1887
+ return this._core.path;
1888
+ }
1853
1889
  /**
1854
1890
  * @deprecated Use `getState().isEditing` instead. This will be removed in 0.6.0.
1855
1891
  */
@@ -1935,23 +1971,28 @@ var ComposerRuntimeImpl = class {
1935
1971
  }
1936
1972
  };
1937
1973
  var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
1974
+ get path() {
1975
+ return this._core.path;
1976
+ }
1938
1977
  get type() {
1939
1978
  return "thread";
1940
1979
  }
1941
1980
 
1942
1981
  constructor(core) {
1943
1982
  const stateBinding = new LazyMemoizeSubject({
1983
+ path: core.path,
1944
1984
  getState: () => getThreadComposerState(core.getState()),
1945
1985
  subscribe: (callback) => core.subscribe(callback)
1946
1986
  });
1947
1987
  super({
1988
+ path: core.path,
1948
1989
  getState: () => core.getState(),
1949
1990
  subscribe: (callback) => stateBinding.subscribe(callback)
1950
1991
  });
1951
1992
  this._getState = stateBinding.getState.bind(stateBinding);
1952
1993
  }
1953
1994
  get attachments() {
1954
- return _nullishCoalesce(_optionalChain([this, 'access', _69 => _69.getState, 'call', _70 => _70(), 'optionalAccess', _71 => _71.attachments]), () => ( EMPTY_ARRAY));
1995
+ return _nullishCoalesce(_optionalChain([this, 'access', _73 => _73.getState, 'call', _74 => _74(), 'optionalAccess', _75 => _75.attachments]), () => ( EMPTY_ARRAY));
1955
1996
  }
1956
1997
  getState() {
1957
1998
  return this._getState();
@@ -1959,6 +2000,12 @@ var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
1959
2000
  getAttachmentByIndex(idx) {
1960
2001
  return new ThreadComposerAttachmentRuntimeImpl(
1961
2002
  new ShallowMemoizeSubject({
2003
+ path: {
2004
+ ...this.path,
2005
+ attachmentSource: "thread-composer",
2006
+ attachmentSelector: { type: "index", index: idx },
2007
+ ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`
2008
+ },
1962
2009
  getState: () => {
1963
2010
  const attachments = this.getState().attachments;
1964
2011
  const attachment = attachments[idx];
@@ -1978,16 +2025,21 @@ var ThreadComposerRuntimeImpl = class extends ComposerRuntimeImpl {
1978
2025
  var EditComposerRuntimeImpl = class extends ComposerRuntimeImpl {
1979
2026
  constructor(core, _beginEdit) {
1980
2027
  const stateBinding = new LazyMemoizeSubject({
2028
+ path: core.path,
1981
2029
  getState: () => getEditComposerState(core.getState(), this._beginEdit),
1982
2030
  subscribe: (callback) => core.subscribe(callback)
1983
2031
  });
1984
2032
  super({
2033
+ path: core.path,
1985
2034
  getState: () => core.getState(),
1986
2035
  subscribe: (callback) => stateBinding.subscribe(callback)
1987
2036
  });
1988
2037
  this._beginEdit = _beginEdit;
1989
2038
  this._getState = stateBinding.getState.bind(stateBinding);
1990
2039
  }
2040
+ get path() {
2041
+ return this._core.path;
2042
+ }
1991
2043
  get type() {
1992
2044
  return "edit";
1993
2045
  }
@@ -2007,6 +2059,12 @@ var EditComposerRuntimeImpl = class extends ComposerRuntimeImpl {
2007
2059
  getAttachmentByIndex(idx) {
2008
2060
  return new EditComposerAttachmentRuntimeImpl(
2009
2061
  new ShallowMemoizeSubject({
2062
+ path: {
2063
+ ...this.path,
2064
+ attachmentSource: "edit-composer",
2065
+ attachmentSelector: { type: "index", index: idx },
2066
+ ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`
2067
+ },
2010
2068
  getState: () => {
2011
2069
  const attachments = this.getState().attachments;
2012
2070
  const attachment = attachments[idx];
@@ -2030,6 +2088,9 @@ var NestedSubscriptionSubject = class extends BaseSubject {
2030
2088
  super();
2031
2089
  this.binding = binding;
2032
2090
  }
2091
+ get path() {
2092
+ return this.binding.path;
2093
+ }
2033
2094
  getState() {
2034
2095
  return this.binding.getState();
2035
2096
  }
@@ -2041,19 +2102,19 @@ var NestedSubscriptionSubject = class extends BaseSubject {
2041
2102
  this.notifySubscribers();
2042
2103
  };
2043
2104
  let lastState = this.binding.getState();
2044
- let innerUnsubscribe = _optionalChain([lastState, 'optionalAccess', _72 => _72.subscribe, 'call', _73 => _73(callback)]);
2105
+ let innerUnsubscribe = _optionalChain([lastState, 'optionalAccess', _76 => _76.subscribe, 'call', _77 => _77(callback)]);
2045
2106
  const onRuntimeUpdate = () => {
2046
2107
  const newState = this.binding.getState();
2047
2108
  if (newState === lastState) return;
2048
2109
  lastState = newState;
2049
- _optionalChain([innerUnsubscribe, 'optionalCall', _74 => _74()]);
2050
- innerUnsubscribe = _optionalChain([this, 'access', _75 => _75.binding, 'access', _76 => _76.getState, 'call', _77 => _77(), 'optionalAccess', _78 => _78.subscribe, 'call', _79 => _79(callback)]);
2110
+ _optionalChain([innerUnsubscribe, 'optionalCall', _78 => _78()]);
2111
+ innerUnsubscribe = _optionalChain([this, 'access', _79 => _79.binding, 'access', _80 => _80.getState, 'call', _81 => _81(), 'optionalAccess', _82 => _82.subscribe, 'call', _83 => _83(callback)]);
2051
2112
  callback();
2052
2113
  };
2053
2114
  const outerUnsubscribe = this.outerSubscribe(onRuntimeUpdate);
2054
2115
  return () => {
2055
- _optionalChain([outerUnsubscribe, 'optionalCall', _80 => _80()]);
2056
- _optionalChain([innerUnsubscribe, 'optionalCall', _81 => _81()]);
2116
+ _optionalChain([outerUnsubscribe, 'optionalCall', _84 => _84()]);
2117
+ _optionalChain([innerUnsubscribe, 'optionalCall', _85 => _85()]);
2057
2118
  };
2058
2119
  }
2059
2120
  };
@@ -2092,18 +2153,27 @@ var getContentPartState = (message, partIndex) => {
2092
2153
  const status = toContentPartStatus(message, partIndex, part);
2093
2154
  return Object.freeze({ ...part, part, status });
2094
2155
  };
2095
- var MessageRuntimeImpl = (_class5 = class {
2096
- constructor(_core, _threadBinding) {;_class5.prototype.__init9.call(this);
2156
+ var MessageRuntimeImpl = class {
2157
+ constructor(_core, _threadBinding) {
2097
2158
  this._core = _core;
2098
2159
  this._threadBinding = _threadBinding;
2160
+ this.composer = new EditComposerRuntimeImpl(
2161
+ new NestedSubscriptionSubject({
2162
+ path: {
2163
+ ...this.path,
2164
+ ref: this.path.ref + `${this.path.ref}.composer`,
2165
+ composerSource: "edit"
2166
+ },
2167
+ getState: () => this._threadBinding.getState().getEditComposer(this._core.getState().id),
2168
+ subscribe: (callback) => this._threadBinding.subscribe(callback)
2169
+ }),
2170
+ () => this._threadBinding.getState().beginEdit(this._core.getState().id)
2171
+ );
2099
2172
  }
2100
- __init9() {this.composer = new EditComposerRuntimeImpl(
2101
- new NestedSubscriptionSubject({
2102
- getState: () => this._threadBinding.getState().getEditComposer(this._core.getState().id),
2103
- subscribe: (callback) => this._threadBinding.subscribe(callback)
2104
- }),
2105
- () => this._threadBinding.getState().beginEdit(this._core.getState().id)
2106
- )}
2173
+ get path() {
2174
+ return this._core.path;
2175
+ }
2176
+
2107
2177
  getState() {
2108
2178
  return this._core.getState();
2109
2179
  }
@@ -2123,7 +2193,7 @@ var MessageRuntimeImpl = (_class5 = class {
2123
2193
  const state = this._core.getState();
2124
2194
  if (!state) throw new Error("Message is not available");
2125
2195
  const thread = this._threadBinding.getState();
2126
- if (_optionalChain([thread, 'access', _82 => _82.speech, 'optionalAccess', _83 => _83.messageId]) === state.id) {
2196
+ if (_optionalChain([thread, 'access', _86 => _86.speech, 'optionalAccess', _87 => _87.messageId]) === state.id) {
2127
2197
  this._threadBinding.getState().stopSpeaking();
2128
2198
  } else {
2129
2199
  throw new Error("Message is not being spoken");
@@ -2159,13 +2229,21 @@ var MessageRuntimeImpl = (_class5 = class {
2159
2229
  if (!targetBranch) throw new Error("Branch not found");
2160
2230
  this._threadBinding.getState().switchToBranch(targetBranch);
2161
2231
  }
2232
+ unstable_getCopyText() {
2233
+ return getThreadMessageText(this.getState());
2234
+ }
2162
2235
  subscribe(callback) {
2163
2236
  return this._core.subscribe(callback);
2164
2237
  }
2165
2238
  getContentPartByIndex(idx) {
2166
- if (idx < 0) throw new Error("Message index must be >= 0");
2239
+ if (idx < 0) throw new Error("Content part index must be >= 0");
2167
2240
  return new ContentPartRuntimeImpl(
2168
2241
  new ShallowMemoizeSubject({
2242
+ path: {
2243
+ ...this.path,
2244
+ ref: this.path.ref + `${this.path.ref}.content[${idx}]`,
2245
+ contentPartSelector: { type: "index", index: idx }
2246
+ },
2169
2247
  getState: () => {
2170
2248
  return getContentPartState(this.getState(), idx);
2171
2249
  },
@@ -2175,12 +2253,40 @@ var MessageRuntimeImpl = (_class5 = class {
2175
2253
  this._threadBinding
2176
2254
  );
2177
2255
  }
2256
+ getContentPartByToolCallId(toolCallId) {
2257
+ return new ContentPartRuntimeImpl(
2258
+ new ShallowMemoizeSubject({
2259
+ path: {
2260
+ ...this.path,
2261
+ ref: this.path.ref + `${this.path.ref}.content[toolCallId=${JSON.stringify(toolCallId)}]`,
2262
+ contentPartSelector: { type: "toolCallId", toolCallId }
2263
+ },
2264
+ getState: () => {
2265
+ const state = this._core.getState();
2266
+ const idx = state.content.findIndex(
2267
+ (part) => part.type === "tool-call" && part.toolCallId === toolCallId
2268
+ );
2269
+ if (idx === -1) return SKIP_UPDATE;
2270
+ return getContentPartState(state, idx);
2271
+ },
2272
+ subscribe: (callback) => this._core.subscribe(callback)
2273
+ }),
2274
+ this._core,
2275
+ this._threadBinding
2276
+ );
2277
+ }
2178
2278
  getAttachmentByIndex(idx) {
2179
2279
  return new MessageAttachmentRuntimeImpl(
2180
2280
  new ShallowMemoizeSubject({
2281
+ path: {
2282
+ ...this.path,
2283
+ ref: this.path.ref + `${this.path.ref}.attachments[${idx}]`,
2284
+ attachmentSource: "message",
2285
+ attachmentSelector: { type: "index", index: idx }
2286
+ },
2181
2287
  getState: () => {
2182
2288
  const attachments = this.getState().attachments;
2183
- const attachment = _optionalChain([attachments, 'optionalAccess', _84 => _84[idx]]);
2289
+ const attachment = _optionalChain([attachments, 'optionalAccess', _88 => _88[idx]]);
2184
2290
  if (!attachment) return SKIP_UPDATE;
2185
2291
  return {
2186
2292
  ...attachment,
@@ -2192,7 +2298,7 @@ var MessageRuntimeImpl = (_class5 = class {
2192
2298
  })
2193
2299
  );
2194
2300
  }
2195
- }, _class5);
2301
+ };
2196
2302
 
2197
2303
  // src/primitives/message/MessageContent.tsx
2198
2304
 
@@ -2263,7 +2369,7 @@ var MessageContentPartImpl = ({
2263
2369
  };
2264
2370
  var MessageContentPart = _react.memo.call(void 0,
2265
2371
  MessageContentPartImpl,
2266
- (prev, next) => prev.partIndex === next.partIndex && _optionalChain([prev, 'access', _85 => _85.components, 'optionalAccess', _86 => _86.Text]) === _optionalChain([next, 'access', _87 => _87.components, 'optionalAccess', _88 => _88.Text]) && _optionalChain([prev, 'access', _89 => _89.components, 'optionalAccess', _90 => _90.Image]) === _optionalChain([next, 'access', _91 => _91.components, 'optionalAccess', _92 => _92.Image]) && _optionalChain([prev, 'access', _93 => _93.components, 'optionalAccess', _94 => _94.UI]) === _optionalChain([next, 'access', _95 => _95.components, 'optionalAccess', _96 => _96.UI]) && _optionalChain([prev, 'access', _97 => _97.components, 'optionalAccess', _98 => _98.tools]) === _optionalChain([next, 'access', _99 => _99.components, 'optionalAccess', _100 => _100.tools])
2372
+ (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])
2267
2373
  );
2268
2374
  var MessagePrimitiveContent = ({
2269
2375
  components
@@ -2329,11 +2435,11 @@ var getComponent = (components, attachment) => {
2329
2435
  const type = attachment.type;
2330
2436
  switch (type) {
2331
2437
  case "image":
2332
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _101 => _101.Image]), () => ( _optionalChain([components, 'optionalAccess', _102 => _102.Attachment])));
2438
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _105 => _105.Image]), () => ( _optionalChain([components, 'optionalAccess', _106 => _106.Attachment])));
2333
2439
  case "document":
2334
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _103 => _103.Document]), () => ( _optionalChain([components, 'optionalAccess', _104 => _104.Attachment])));
2440
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _107 => _107.Document]), () => ( _optionalChain([components, 'optionalAccess', _108 => _108.Attachment])));
2335
2441
  case "file":
2336
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _105 => _105.File]), () => ( _optionalChain([components, 'optionalAccess', _106 => _106.Attachment])));
2442
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _109 => _109.File]), () => ( _optionalChain([components, 'optionalAccess', _110 => _110.Attachment])));
2337
2443
  default:
2338
2444
  const _exhaustiveCheck = type;
2339
2445
  throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
@@ -2356,7 +2462,7 @@ var MessageAttachmentImpl = ({ components, attachmentIndex }) => {
2356
2462
  };
2357
2463
  var MessageAttachment = _react.memo.call(void 0,
2358
2464
  MessageAttachmentImpl,
2359
- (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _107 => _107.components, 'optionalAccess', _108 => _108.Image]) === _optionalChain([next, 'access', _109 => _109.components, 'optionalAccess', _110 => _110.Image]) && _optionalChain([prev, 'access', _111 => _111.components, 'optionalAccess', _112 => _112.Document]) === _optionalChain([next, 'access', _113 => _113.components, 'optionalAccess', _114 => _114.Document]) && _optionalChain([prev, 'access', _115 => _115.components, 'optionalAccess', _116 => _116.File]) === _optionalChain([next, 'access', _117 => _117.components, 'optionalAccess', _118 => _118.File]) && _optionalChain([prev, 'access', _119 => _119.components, 'optionalAccess', _120 => _120.Attachment]) === _optionalChain([next, 'access', _121 => _121.components, 'optionalAccess', _122 => _122.Attachment])
2465
+ (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])
2360
2466
  );
2361
2467
  var MessagePrimitiveAttachments = ({ components }) => {
2362
2468
  const attachmentsCount = useMessage(({ message }) => {
@@ -2482,7 +2588,7 @@ var ComposerPrimitiveInput = _react.forwardRef.call(void 0,
2482
2588
  const { isRunning } = threadRuntime.getState();
2483
2589
  if (!isRunning) {
2484
2590
  e.preventDefault();
2485
- _optionalChain([textareaRef, 'access', _123 => _123.current, 'optionalAccess', _124 => _124.closest, 'call', _125 => _125("form"), 'optionalAccess', _126 => _126.requestSubmit, 'call', _127 => _127()]);
2591
+ _optionalChain([textareaRef, 'access', _127 => _127.current, 'optionalAccess', _128 => _128.closest, 'call', _129 => _129("form"), 'optionalAccess', _130 => _130.requestSubmit, 'call', _131 => _131()]);
2486
2592
  }
2487
2593
  }
2488
2594
  };
@@ -2556,11 +2662,11 @@ var getComponent2 = (components, attachment) => {
2556
2662
  const type = attachment.type;
2557
2663
  switch (type) {
2558
2664
  case "image":
2559
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _128 => _128.Image]), () => ( _optionalChain([components, 'optionalAccess', _129 => _129.Attachment])));
2665
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _132 => _132.Image]), () => ( _optionalChain([components, 'optionalAccess', _133 => _133.Attachment])));
2560
2666
  case "document":
2561
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _130 => _130.Document]), () => ( _optionalChain([components, 'optionalAccess', _131 => _131.Attachment])));
2667
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _134 => _134.Document]), () => ( _optionalChain([components, 'optionalAccess', _135 => _135.Attachment])));
2562
2668
  case "file":
2563
- return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _132 => _132.File]), () => ( _optionalChain([components, 'optionalAccess', _133 => _133.Attachment])));
2669
+ return _nullishCoalesce(_optionalChain([components, 'optionalAccess', _136 => _136.File]), () => ( _optionalChain([components, 'optionalAccess', _137 => _137.Attachment])));
2564
2670
  default:
2565
2671
  const _exhaustiveCheck = type;
2566
2672
  throw new Error(`Unknown attachment type: ${_exhaustiveCheck}`);
@@ -2583,7 +2689,7 @@ var ComposerAttachmentImpl = ({ components, attachmentIndex }) => {
2583
2689
  };
2584
2690
  var ComposerAttachment = _react.memo.call(void 0,
2585
2691
  ComposerAttachmentImpl,
2586
- (prev, next) => prev.attachmentIndex === next.attachmentIndex && _optionalChain([prev, 'access', _134 => _134.components, 'optionalAccess', _135 => _135.Image]) === _optionalChain([next, 'access', _136 => _136.components, 'optionalAccess', _137 => _137.Image]) && _optionalChain([prev, 'access', _138 => _138.components, 'optionalAccess', _139 => _139.Document]) === _optionalChain([next, 'access', _140 => _140.components, 'optionalAccess', _141 => _141.Document]) && _optionalChain([prev, 'access', _142 => _142.components, 'optionalAccess', _143 => _143.File]) === _optionalChain([next, 'access', _144 => _144.components, 'optionalAccess', _145 => _145.File]) && _optionalChain([prev, 'access', _146 => _146.components, 'optionalAccess', _147 => _147.Attachment]) === _optionalChain([next, 'access', _148 => _148.components, 'optionalAccess', _149 => _149.Attachment])
2692
+ (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])
2587
2693
  );
2588
2694
  var ComposerPrimitiveAttachments = ({ components }) => {
2589
2695
  const attachmentsCount = useComposer((s) => s.attachments.length);
@@ -2927,45 +3033,60 @@ var subscribeToMainThread = (runtime, callback) => {
2927
3033
  let first = true;
2928
3034
  let cleanup;
2929
3035
  const inner = () => {
2930
- _optionalChain([cleanup, 'optionalCall', _150 => _150()]);
2931
- cleanup = runtime.thread.subscribe(callback);
3036
+ _optionalChain([cleanup, 'optionalCall', _154 => _154()]);
3037
+ cleanup = runtime.threadManager.mainThread.subscribe(callback);
2932
3038
  if (!first) {
2933
3039
  callback();
2934
3040
  }
2935
3041
  first = false;
2936
3042
  };
2937
- const unsubscribe = runtime.subscribe(inner);
3043
+ const unsubscribe = runtime.threadManager.mainThread.subscribe(inner);
2938
3044
  inner();
2939
3045
  return () => {
2940
3046
  unsubscribe();
2941
- _optionalChain([cleanup, 'optionalCall', _151 => _151()]);
3047
+ _optionalChain([cleanup, 'optionalCall', _155 => _155()]);
2942
3048
  };
2943
3049
  };
2944
3050
 
2945
3051
  // src/runtimes/local/useLocalRuntime.tsx
2946
3052
 
2947
3053
 
2948
- // src/runtimes/core/BaseAssistantRuntimeCore.tsx
2949
- var BaseAssistantRuntimeCore = (_class6 = class {
2950
- constructor(_thread) {;_class6.prototype.__init10.call(this);_class6.prototype.__init11.call(this);
2951
- this._thread = _thread;
2952
- this._thread = _thread;
3054
+ // src/utils/ProxyConfigProvider.ts
3055
+ var ProxyConfigProvider = (_class5 = class {constructor() { _class5.prototype.__init9.call(this);_class5.prototype.__init10.call(this); }
3056
+ __init9() {this._providers = /* @__PURE__ */ new Set()}
3057
+ getModelConfig() {
3058
+ return _chunkC6UZOY5Ajs.mergeModelConfigs.call(void 0, this._providers);
2953
3059
  }
2954
- get thread() {
2955
- return this._thread;
3060
+ registerModelConfigProvider(provider) {
3061
+ this._providers.add(provider);
3062
+ const unsubscribe = _optionalChain([provider, 'access', _156 => _156.subscribe, 'optionalCall', _157 => _157(() => {
3063
+ this.notifySubscribers();
3064
+ })]);
3065
+ this.notifySubscribers();
3066
+ return () => {
3067
+ this._providers.delete(provider);
3068
+ _optionalChain([unsubscribe, 'optionalCall', _158 => _158()]);
3069
+ this.notifySubscribers();
3070
+ };
2956
3071
  }
2957
- set thread(thread) {
2958
- this._thread = thread;
2959
- this.subscriptionHandler();
3072
+ __init10() {this._subscribers = /* @__PURE__ */ new Set()}
3073
+ notifySubscribers() {
3074
+ for (const callback of this._subscribers) callback();
2960
3075
  }
2961
- __init10() {this._subscriptions = /* @__PURE__ */ new Set()}
2962
3076
  subscribe(callback) {
2963
- this._subscriptions.add(callback);
2964
- return () => this._subscriptions.delete(callback);
3077
+ this._subscribers.add(callback);
3078
+ return () => this._subscribers.delete(callback);
3079
+ }
3080
+ }, _class5);
3081
+
3082
+ // src/runtimes/core/BaseAssistantRuntimeCore.tsx
3083
+ var BaseAssistantRuntimeCore = (_class6 = class {
3084
+ __init11() {this._proxyConfigProvider = new ProxyConfigProvider()}
3085
+ constructor() {;_class6.prototype.__init11.call(this);
3086
+ }
3087
+ registerModelConfigProvider(provider) {
3088
+ return this._proxyConfigProvider.registerModelConfigProvider(provider);
2965
3089
  }
2966
- __init11() {this.subscriptionHandler = () => {
2967
- for (const callback of this._subscriptions) callback();
2968
- }}
2969
3090
  }, _class6);
2970
3091
 
2971
3092
  // src/internal.ts
@@ -2989,7 +3110,7 @@ var isAttachmentComplete = (a) => a.status.type === "complete";
2989
3110
  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); }
2990
3111
  __init12() {this.isEditing = true}
2991
3112
  getAttachmentAccept() {
2992
- return _nullishCoalesce(_optionalChain([this, 'access', _152 => _152.getAttachmentAdapter, 'call', _153 => _153(), 'optionalAccess', _154 => _154.accept]), () => ( "*"));
3113
+ return _nullishCoalesce(_optionalChain([this, 'access', _159 => _159.getAttachmentAdapter, 'call', _160 => _160(), 'optionalAccess', _161 => _161.accept]), () => ( "*"));
2993
3114
  }
2994
3115
  __init13() {this._attachments = []}
2995
3116
  set attachments(value) {
@@ -3021,7 +3142,7 @@ var BaseComposerRuntimeCore = (_class7 = class {constructor() { _class7.prototyp
3021
3142
  this.attachments.map(async (a) => {
3022
3143
  if (isAttachmentComplete(a)) return a;
3023
3144
  const result = await adapter.send(a);
3024
- if (_optionalChain([result, 'access', _155 => _155.status, 'optionalAccess', _156 => _156.type]) !== "complete") {
3145
+ if (_optionalChain([result, 'access', _162 => _162.status, 'optionalAccess', _163 => _163.type]) !== "complete") {
3025
3146
  result.status = { type: "complete" };
3026
3147
  }
3027
3148
  return result;
@@ -3080,7 +3201,7 @@ var DefaultThreadComposerRuntimeCore = (_class8 = class extends BaseComposerRunt
3080
3201
  return super.attachments;
3081
3202
  }
3082
3203
  getAttachmentAdapter() {
3083
- return _optionalChain([this, 'access', _157 => _157.runtime, 'access', _158 => _158.adapters, 'optionalAccess', _159 => _159.attachments]);
3204
+ return _optionalChain([this, 'access', _164 => _164.runtime, 'access', _165 => _165.adapters, 'optionalAccess', _166 => _166.attachments]);
3084
3205
  }
3085
3206
  connect() {
3086
3207
  return this.runtime.subscribe(() => {
@@ -3093,7 +3214,7 @@ var DefaultThreadComposerRuntimeCore = (_class8 = class extends BaseComposerRunt
3093
3214
  async handleSend(message) {
3094
3215
  this.runtime.append({
3095
3216
  ...message,
3096
- parentId: _nullishCoalesce(_optionalChain([this, 'access', _160 => _160.runtime, 'access', _161 => _161.messages, 'access', _162 => _162.at, 'call', _163 => _163(-1), 'optionalAccess', _164 => _164.id]), () => ( null))
3217
+ parentId: _nullishCoalesce(_optionalChain([this, 'access', _167 => _167.runtime, 'access', _168 => _168.messages, 'access', _169 => _169.at, 'call', _170 => _170(-1), 'optionalAccess', _171 => _171.id]), () => ( null))
3097
3218
  });
3098
3219
  }
3099
3220
  async cancel() {
@@ -3101,20 +3222,6 @@ var DefaultThreadComposerRuntimeCore = (_class8 = class extends BaseComposerRunt
3101
3222
  }
3102
3223
  }, _class8);
3103
3224
 
3104
- // src/utils/ProxyConfigProvider.ts
3105
- var ProxyConfigProvider = (_class9 = class {constructor() { _class9.prototype.__init17.call(this); }
3106
- __init17() {this._providers = /* @__PURE__ */ new Set()}
3107
- getModelConfig() {
3108
- return _chunkCYIFAX4Ujs.mergeModelConfigs.call(void 0, this._providers);
3109
- }
3110
- registerModelConfigProvider(provider) {
3111
- this._providers.add(provider);
3112
- return () => {
3113
- this._providers.delete(provider);
3114
- };
3115
- }
3116
- }, _class9);
3117
-
3118
3225
  // src/utils/idUtils.tsx
3119
3226
  var _nonsecure = require('nanoid/non-secure');
3120
3227
  var generateId = _nonsecure.customAlphabet.call(void 0,
@@ -3180,11 +3287,11 @@ var findHead = (message) => {
3180
3287
  if ("current" in message) return message;
3181
3288
  return null;
3182
3289
  };
3183
- var MessageRepository = (_class10 = class {constructor() { _class10.prototype.__init18.call(this);_class10.prototype.__init19.call(this);_class10.prototype.__init20.call(this); }
3184
- __init18() {this.messages = /* @__PURE__ */ new Map()}
3290
+ var MessageRepository = (_class9 = class {constructor() { _class9.prototype.__init17.call(this);_class9.prototype.__init18.call(this);_class9.prototype.__init19.call(this); }
3291
+ __init17() {this.messages = /* @__PURE__ */ new Map()}
3185
3292
  // message_id -> item
3186
- __init19() {this.head = null}
3187
- __init20() {this.root = {
3293
+ __init18() {this.head = null}
3294
+ __init19() {this.root = {
3188
3295
  children: [],
3189
3296
  next: null
3190
3297
  }}
@@ -3226,7 +3333,7 @@ var MessageRepository = (_class10 = class {constructor() { _class10.prototype.__
3226
3333
  }
3227
3334
  }
3228
3335
  getMessages() {
3229
- const messages2 = new Array(_nullishCoalesce(_optionalChain([this, 'access', _165 => _165.head, 'optionalAccess', _166 => _166.level]), () => ( 0)));
3336
+ const messages2 = new Array(_nullishCoalesce(_optionalChain([this, 'access', _172 => _172.head, 'optionalAccess', _173 => _173.level]), () => ( 0)));
3230
3337
  for (let current = this.head; current; current = current.prev) {
3231
3338
  messages2[current.level] = current.current;
3232
3339
  }
@@ -3264,7 +3371,7 @@ var MessageRepository = (_class10 = class {constructor() { _class10.prototype.__
3264
3371
  "MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
3265
3372
  );
3266
3373
  return {
3267
- parentId: _nullishCoalesce(_optionalChain([message, 'access', _167 => _167.prev, 'optionalAccess', _168 => _168.current, 'access', _169 => _169.id]), () => ( null)),
3374
+ parentId: _nullishCoalesce(_optionalChain([message, 'access', _174 => _174.prev, 'optionalAccess', _175 => _175.current, 'access', _176 => _176.id]), () => ( null)),
3268
3375
  message: message.current
3269
3376
  };
3270
3377
  }
@@ -3348,11 +3455,11 @@ var MessageRepository = (_class10 = class {constructor() { _class10.prototype.__
3348
3455
  for (const [, message] of this.messages) {
3349
3456
  exportItems.push({
3350
3457
  message: message.current,
3351
- parentId: _nullishCoalesce(_optionalChain([message, 'access', _170 => _170.prev, 'optionalAccess', _171 => _171.current, 'access', _172 => _172.id]), () => ( null))
3458
+ parentId: _nullishCoalesce(_optionalChain([message, 'access', _177 => _177.prev, 'optionalAccess', _178 => _178.current, 'access', _179 => _179.id]), () => ( null))
3352
3459
  });
3353
3460
  }
3354
3461
  return {
3355
- headId: _nullishCoalesce(_optionalChain([this, 'access', _173 => _173.head, 'optionalAccess', _174 => _174.current, 'access', _175 => _175.id]), () => ( null)),
3462
+ headId: _nullishCoalesce(_optionalChain([this, 'access', _180 => _180.head, 'optionalAccess', _181 => _181.current, 'access', _182 => _182.id]), () => ( null)),
3356
3463
  messages: exportItems
3357
3464
  };
3358
3465
  }
@@ -3360,9 +3467,9 @@ var MessageRepository = (_class10 = class {constructor() { _class10.prototype.__
3360
3467
  for (const { message, parentId } of messages2) {
3361
3468
  this.addOrUpdateMessage(parentId, message);
3362
3469
  }
3363
- this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages2, 'access', _176 => _176.at, 'call', _177 => _177(-1), 'optionalAccess', _178 => _178.message, 'access', _179 => _179.id]))), () => ( null)));
3470
+ this.resetHead(_nullishCoalesce(_nullishCoalesce(headId, () => ( _optionalChain([messages2, 'access', _183 => _183.at, 'call', _184 => _184(-1), 'optionalAccess', _185 => _185.message, 'access', _186 => _186.id]))), () => ( null)));
3364
3471
  }
3365
- }, _class10);
3472
+ }, _class9);
3366
3473
 
3367
3474
  // src/ui/base/tooltip-icon-button.tsx
3368
3475
 
@@ -3464,7 +3571,7 @@ TooltipIconButton.displayName = "TooltipIconButton";
3464
3571
  var toAppendMessage = (messages2, message) => {
3465
3572
  if (typeof message === "string") {
3466
3573
  return {
3467
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _180 => _180.at, 'call', _181 => _181(-1), 'optionalAccess', _182 => _182.id]), () => ( null)),
3574
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _187 => _187.at, 'call', _188 => _188(-1), 'optionalAccess', _189 => _189.id]), () => ( null)),
3468
3575
  role: "user",
3469
3576
  content: [{ type: "text", text: message }],
3470
3577
  attachments: []
@@ -3474,7 +3581,7 @@ var toAppendMessage = (messages2, message) => {
3474
3581
  return message;
3475
3582
  }
3476
3583
  return {
3477
- parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([messages2, 'access', _183 => _183.at, 'call', _184 => _184(-1), 'optionalAccess', _185 => _185.id]))), () => ( null)),
3584
+ parentId: _nullishCoalesce(_nullishCoalesce(message.parentId, () => ( _optionalChain([messages2, 'access', _190 => _190.at, 'call', _191 => _191(-1), 'optionalAccess', _192 => _192.id]))), () => ( null)),
3478
3585
  role: _nullishCoalesce(message.role, () => ( "user")),
3479
3586
  content: message.content,
3480
3587
  attachments: _nullishCoalesce(message.attachments, () => ( []))
@@ -3486,15 +3593,17 @@ var getThreadState = (runtime) => {
3486
3593
  threadId: runtime.threadId,
3487
3594
  capabilities: runtime.capabilities,
3488
3595
  isDisabled: runtime.isDisabled,
3489
- isRunning: _optionalChain([lastMessage, 'optionalAccess', _186 => _186.role]) !== "assistant" ? false : lastMessage.status.type === "running",
3596
+ isRunning: _optionalChain([lastMessage, 'optionalAccess', _193 => _193.role]) !== "assistant" ? false : lastMessage.status.type === "running",
3490
3597
  messages: runtime.messages,
3491
3598
  suggestions: runtime.suggestions,
3492
3599
  extras: runtime.extras,
3493
3600
  speech: runtime.speech
3494
3601
  });
3495
3602
  };
3496
- var ThreadRuntimeImpl = (_class11 = class {
3497
- // public path = "assistant.threads[main]"; // TODO
3603
+ var ThreadRuntimeImpl = (_class10 = class {
3604
+ get path() {
3605
+ return this._threadBinding.path;
3606
+ }
3498
3607
  /**
3499
3608
  * @deprecated Use `getState().threadId` instead. This will be removed in 0.6.0.
3500
3609
  */
@@ -3547,24 +3656,32 @@ var ThreadRuntimeImpl = (_class11 = class {
3547
3656
  return this._threadBinding.getState();
3548
3657
  }
3549
3658
 
3550
- constructor(threadBinding) {;_class11.prototype.__init21.call(this);_class11.prototype.__init22.call(this);
3659
+ constructor(threadBinding) {;_class10.prototype.__init20.call(this);
3551
3660
  const stateBinding = new LazyMemoizeSubject({
3661
+ path: threadBinding.path,
3552
3662
  getState: () => getThreadState(threadBinding.getState()),
3553
3663
  subscribe: (callback) => threadBinding.subscribe(callback)
3554
3664
  });
3555
3665
  this._threadBinding = {
3666
+ path: threadBinding.path,
3556
3667
  getState: () => threadBinding.getState(),
3557
3668
  getStateState: () => stateBinding.getState(),
3558
3669
  outerSubscribe: (callback) => threadBinding.outerSubscribe(callback),
3559
3670
  subscribe: (callback) => threadBinding.subscribe(callback)
3560
3671
  };
3672
+ this.composer = new ThreadComposerRuntimeImpl(
3673
+ new NestedSubscriptionSubject({
3674
+ path: {
3675
+ ...this.path,
3676
+ ref: this.path.ref + `${this.path.ref}.composer`,
3677
+ composerSource: "thread"
3678
+ },
3679
+ getState: () => this._threadBinding.getState().composer,
3680
+ subscribe: (callback) => this._threadBinding.subscribe(callback)
3681
+ })
3682
+ );
3561
3683
  }
3562
- __init21() {this.composer = new ThreadComposerRuntimeImpl(
3563
- new NestedSubscriptionSubject({
3564
- getState: () => this._threadBinding.getState().composer,
3565
- subscribe: (callback) => this._threadBinding.subscribe(callback)
3566
- })
3567
- )}
3684
+
3568
3685
  getState() {
3569
3686
  return this._threadBinding.getStateState();
3570
3687
  }
@@ -3642,37 +3759,67 @@ var ThreadRuntimeImpl = (_class11 = class {
3642
3759
  }
3643
3760
  getMesssageByIndex(idx) {
3644
3761
  if (idx < 0) throw new Error("Message index must be >= 0");
3762
+ return this._getMessageRuntime(
3763
+ {
3764
+ ...this.path,
3765
+ ref: this.path.ref + `${this.path.ref}.messages[${idx}]`,
3766
+ messageSelector: { type: "index", index: idx }
3767
+ },
3768
+ () => {
3769
+ const messages2 = this._threadBinding.getState().messages;
3770
+ const message = messages2[idx];
3771
+ if (!message) return void 0;
3772
+ return {
3773
+ message,
3774
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _194 => _194[idx - 1], 'optionalAccess', _195 => _195.id]), () => ( null))
3775
+ };
3776
+ }
3777
+ );
3778
+ }
3779
+ getMesssageById(messageId) {
3780
+ return this._getMessageRuntime(
3781
+ {
3782
+ ...this.path,
3783
+ ref: this.path.ref + `${this.path.ref}.messages[messageId=${JSON.stringify(messageId)}]`,
3784
+ messageSelector: { type: "messageId", messageId }
3785
+ },
3786
+ () => this._threadBinding.getState().getMessageById(messageId)
3787
+ );
3788
+ }
3789
+ _getMessageRuntime(path, callback) {
3645
3790
  return new MessageRuntimeImpl(
3646
3791
  new ShallowMemoizeSubject({
3792
+ path,
3647
3793
  getState: () => {
3648
- const { messages: messages2, speech: speechState } = this.getState();
3649
- const message = messages2[idx];
3650
- if (!message) return SKIP_UPDATE;
3794
+ const { message, parentId } = _nullishCoalesce(callback(), () => ( {}));
3795
+ const { messages: messages2, speech: speechState } = this._threadBinding.getState();
3796
+ if (!message || parentId === void 0) return SKIP_UPDATE;
3651
3797
  const thread = this._threadBinding.getState();
3652
3798
  const branches = thread.getBranches(message.id);
3653
3799
  const submittedFeedback = thread.getSubmittedFeedback(message.id);
3654
3800
  return {
3655
3801
  ...message,
3656
3802
  message,
3657
- isLast: idx === messages2.length - 1,
3658
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _187 => _187[idx - 1], 'optionalAccess', _188 => _188.id]), () => ( null)),
3803
+ isLast: _optionalChain([messages2, 'access', _196 => _196.at, 'call', _197 => _197(-1), 'optionalAccess', _198 => _198.id]) === message.id,
3804
+ parentId,
3659
3805
  branches,
3660
3806
  branchNumber: branches.indexOf(message.id) + 1,
3661
3807
  branchCount: branches.length,
3662
- speech: _optionalChain([speechState, 'optionalAccess', _189 => _189.messageId]) === message.id ? speechState : void 0,
3808
+ speech: _optionalChain([speechState, 'optionalAccess', _199 => _199.messageId]) === message.id ? speechState : void 0,
3663
3809
  submittedFeedback
3664
3810
  };
3665
3811
  },
3666
- subscribe: (callback) => this._threadBinding.subscribe(callback)
3812
+ subscribe: (callback2) => this._threadBinding.subscribe(callback2)
3667
3813
  }),
3668
3814
  this._threadBinding
3669
3815
  );
3670
3816
  }
3671
- __init22() {this._eventListenerNestedSubscriptions = /* @__PURE__ */ new Map()}
3817
+ __init20() {this._eventListenerNestedSubscriptions = /* @__PURE__ */ new Map()}
3672
3818
  unstable_on(event, callback) {
3673
3819
  let subject = this._eventListenerNestedSubscriptions.get(event);
3674
3820
  if (!subject) {
3675
3821
  subject = new NestedSubscriptionSubject({
3822
+ path: this.path,
3676
3823
  getState: () => ({
3677
3824
  subscribe: (callback2) => this._threadBinding.getState().unstable_on(event, callback2)
3678
3825
  }),
@@ -3682,45 +3829,96 @@ var ThreadRuntimeImpl = (_class11 = class {
3682
3829
  }
3683
3830
  return subject.subscribe(callback);
3684
3831
  }
3685
- }, _class11);
3832
+ }, _class10);
3833
+
3834
+ // src/api/ThreadManagerRuntime.ts
3835
+ var getThreadManagerState = (threadManager) => {
3836
+ return {
3837
+ threads: threadManager.threads,
3838
+ archivedThreads: threadManager.archivedThreads
3839
+ };
3840
+ };
3841
+ var THREAD_MANAGER_PATH = {
3842
+ ref: "threadManager"
3843
+ };
3844
+ var ThreadManagerRuntimeImpl = class {
3845
+ constructor(_core) {
3846
+ this._core = _core;
3847
+ const stateBinding = new LazyMemoizeSubject({
3848
+ path: THREAD_MANAGER_PATH,
3849
+ getState: () => getThreadManagerState(_core),
3850
+ subscribe: (callback) => _core.subscribe(callback)
3851
+ });
3852
+ this._getState = stateBinding.getState.bind(stateBinding);
3853
+ }
3854
+ get path() {
3855
+ return THREAD_MANAGER_PATH;
3856
+ }
3857
+
3858
+ getState() {
3859
+ return this._getState();
3860
+ }
3861
+ rename(threadId, newTitle) {
3862
+ return this._core.rename(threadId, newTitle);
3863
+ }
3864
+ archive(threadId) {
3865
+ return this._core.archive(threadId);
3866
+ }
3867
+ unarchive(threadId) {
3868
+ return this._core.unarchive(threadId);
3869
+ }
3870
+ delete(threadId) {
3871
+ return this._core.delete(threadId);
3872
+ }
3873
+ subscribe(callback) {
3874
+ return this._core.subscribe(callback);
3875
+ }
3876
+ };
3686
3877
 
3687
3878
  // src/api/AssistantRuntime.ts
3688
3879
  var AssistantRuntimeImpl = class _AssistantRuntimeImpl {
3689
3880
  constructor(_core, _thread) {
3690
3881
  this._core = _core;
3691
3882
  this._thread = _thread;
3883
+ this.threadManager = new ThreadManagerRuntimeImpl(_core.threadManager);
3692
3884
  }
3885
+
3693
3886
  get thread() {
3694
3887
  return this._thread;
3695
3888
  }
3696
3889
  switchToNewThread() {
3697
- return this._core.switchToNewThread();
3890
+ return this._core.threadManager.switchToNewThread();
3698
3891
  }
3699
3892
  switchToThread(threadId) {
3700
- return this._core.switchToThread(threadId);
3893
+ if (threadId === null) return this.switchToNewThread();
3894
+ return this._core.threadManager.switchToThread(threadId);
3701
3895
  }
3702
3896
  registerModelConfigProvider(provider) {
3703
3897
  return this._core.registerModelConfigProvider(provider);
3704
3898
  }
3705
- // TODO events for thread switching
3706
3899
  /**
3707
3900
  * @deprecated Thread is now static and never gets updated. This will be removed in 0.6.0.
3708
3901
  */
3709
- subscribe(callback) {
3710
- return this._core.subscribe(callback);
3902
+ subscribe() {
3903
+ return () => {
3904
+ };
3711
3905
  }
3712
- static createThreadRuntime(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
3906
+ static createMainThreadRuntime(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
3713
3907
  return new CustomThreadRuntime(
3714
3908
  new NestedSubscriptionSubject({
3715
- getState: () => _core.thread,
3716
- subscribe: (callback) => _core.subscribe(callback)
3909
+ path: {
3910
+ ref: "threads.main",
3911
+ threadSelector: { type: "main" }
3912
+ },
3913
+ getState: () => _core.threadManager.mainThread,
3914
+ subscribe: (callback) => _core.threadManager.subscribe(callback)
3717
3915
  })
3718
3916
  );
3719
3917
  }
3720
3918
  static create(_core, CustomThreadRuntime = ThreadRuntimeImpl) {
3721
3919
  return new _AssistantRuntimeImpl(
3722
3920
  _core,
3723
- _AssistantRuntimeImpl.createThreadRuntime(_core, CustomThreadRuntime)
3921
+ _AssistantRuntimeImpl.createMainThreadRuntime(_core, CustomThreadRuntime)
3724
3922
  );
3725
3923
  }
3726
3924
  };
@@ -3791,7 +3989,7 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
3791
3989
  });
3792
3990
  if (mergeSteps) {
3793
3991
  const previousMessage = messages2[messages2.length - 1];
3794
- if (_optionalChain([previousMessage, 'optionalAccess', _190 => _190.role]) === "assistant") {
3992
+ if (_optionalChain([previousMessage, 'optionalAccess', _200 => _200.role]) === "assistant") {
3795
3993
  previousMessage.content.push(...newContent);
3796
3994
  break;
3797
3995
  }
@@ -3804,7 +4002,7 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
3804
4002
  }
3805
4003
  case "tool": {
3806
4004
  const previousMessage = messages2[messages2.length - 1];
3807
- if (_optionalChain([previousMessage, 'optionalAccess', _191 => _191.role]) !== "assistant")
4005
+ if (_optionalChain([previousMessage, 'optionalAccess', _201 => _201.role]) !== "assistant")
3808
4006
  throw new Error(
3809
4007
  "A tool message must be preceded by an assistant message."
3810
4008
  );
@@ -3880,14 +4078,14 @@ function streamPartDecoderStream() {
3880
4078
  controller.enqueue(decodeStreamPart(chunk));
3881
4079
  }
3882
4080
  });
3883
- return new (0, _chunkCYIFAX4Ujs.PipeableTransformStream)((readable) => {
4081
+ return new (0, _chunkC6UZOY5Ajs.PipeableTransformStream)((readable) => {
3884
4082
  return readable.pipeThrough(new TextDecoderStream()).pipeThrough(chunkByLineStream()).pipeThrough(decodeStream);
3885
4083
  });
3886
4084
  }
3887
4085
 
3888
4086
  // src/runtimes/edge/streams/utils/index.ts
3889
4087
  var streamUtils = {
3890
- streamPartEncoderStream: _chunkCYIFAX4Ujs.streamPartEncoderStream,
4088
+ streamPartEncoderStream: _chunkC6UZOY5Ajs.streamPartEncoderStream,
3891
4089
  streamPartDecoderStream
3892
4090
  };
3893
4091
 
@@ -3934,7 +4132,7 @@ function assistantDecoderStream() {
3934
4132
  case "c" /* ToolCallDelta */: {
3935
4133
  const { toolCallId, argsTextDelta } = value;
3936
4134
  const toolName = toolCallNames.get(toolCallId);
3937
- if (_optionalChain([currentToolCall, 'optionalAccess', _192 => _192.id]) === toolCallId) {
4135
+ if (_optionalChain([currentToolCall, 'optionalAccess', _202 => _202.id]) === toolCallId) {
3938
4136
  currentToolCall.argsText += argsTextDelta;
3939
4137
  }
3940
4138
  controller.enqueue({
@@ -4035,8 +4233,8 @@ var EdgeChatAdapter = class {
4035
4233
  credentials: _nullishCoalesce(this.options.credentials, () => ( "same-origin")),
4036
4234
  body: JSON.stringify({
4037
4235
  system: config.system,
4038
- messages: _chunkCYIFAX4Ujs.toCoreMessages.call(void 0, messages2),
4039
- tools: config.tools ? _chunkCYIFAX4Ujs.toLanguageModelTools.call(void 0, config.tools) : [],
4236
+ messages: _chunkC6UZOY5Ajs.toCoreMessages.call(void 0, messages2),
4237
+ tools: config.tools ? _chunkC6UZOY5Ajs.toLanguageModelTools.call(void 0, config.tools) : [],
4040
4238
  ...config.callSettings,
4041
4239
  ...config.config,
4042
4240
  ...this.options.body
@@ -4046,7 +4244,7 @@ var EdgeChatAdapter = class {
4046
4244
  if (!result.ok) {
4047
4245
  throw new Error(`Status ${result.status}: ${await result.text()}`);
4048
4246
  }
4049
- const stream = result.body.pipeThrough(streamPartDecoderStream()).pipeThrough(assistantDecoderStream()).pipeThrough(_chunkCYIFAX4Ujs.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkCYIFAX4Ujs.runResultStream.call(void 0, ));
4247
+ const stream = result.body.pipeThrough(streamPartDecoderStream()).pipeThrough(assistantDecoderStream()).pipeThrough(_chunkC6UZOY5Ajs.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkC6UZOY5Ajs.runResultStream.call(void 0, ));
4050
4248
  let update;
4051
4249
  for await (update of asAsyncIterable(stream)) {
4052
4250
  yield update;
@@ -4078,7 +4276,7 @@ var useEdgeRuntime = (options) => {
4078
4276
  };
4079
4277
 
4080
4278
  // src/runtimes/local/shouldContinue.tsx
4081
- var shouldContinue = (result) => _optionalChain([result, 'access', _193 => _193.status, 'optionalAccess', _194 => _194.type]) === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
4279
+ 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);
4082
4280
 
4083
4281
  // src/runtimes/composer/DefaultEditComposerRuntimeCore.tsx
4084
4282
  var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
@@ -4098,7 +4296,7 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
4098
4296
  return true;
4099
4297
  }
4100
4298
  getAttachmentAdapter() {
4101
- return _optionalChain([this, 'access', _195 => _195.runtime, 'access', _196 => _196.adapters, 'optionalAccess', _197 => _197.attachments]);
4299
+ return _optionalChain([this, 'access', _205 => _205.runtime, 'access', _206 => _206.adapters, 'optionalAccess', _207 => _207.attachments]);
4102
4300
  }
4103
4301
 
4104
4302
 
@@ -4122,20 +4320,20 @@ var DefaultEditComposerRuntimeCore = class extends BaseComposerRuntimeCore {
4122
4320
  };
4123
4321
 
4124
4322
  // src/runtimes/core/BaseThreadRuntimeCore.tsx
4125
- var BaseThreadRuntimeCore = (_class12 = class {
4126
- constructor(configProvider) {;_class12.prototype.__init23.call(this);_class12.prototype.__init24.call(this);_class12.prototype.__init25.call(this);_class12.prototype.__init26.call(this);_class12.prototype.__init27.call(this);_class12.prototype.__init28.call(this);
4323
+ var BaseThreadRuntimeCore = (_class11 = class {
4324
+ 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);
4127
4325
  this.configProvider = configProvider;
4128
4326
  }
4129
- __init23() {this._subscriptions = /* @__PURE__ */ new Set()}
4130
- __init24() {this.repository = new MessageRepository()}
4327
+ __init21() {this._subscriptions = /* @__PURE__ */ new Set()}
4328
+ __init22() {this.repository = new MessageRepository()}
4131
4329
  get messages() {
4132
4330
  return this.repository.getMessages();
4133
4331
  }
4134
- __init25() {this.composer = new DefaultThreadComposerRuntimeCore(this)}
4332
+ __init23() {this.composer = new DefaultThreadComposerRuntimeCore(this)}
4135
4333
  getModelConfig() {
4136
4334
  return this.configProvider.getModelConfig();
4137
4335
  }
4138
- __init26() {this._editComposers = /* @__PURE__ */ new Map()}
4336
+ __init24() {this._editComposers = /* @__PURE__ */ new Map()}
4139
4337
  getEditComposer(messageId) {
4140
4338
  return this._editComposers.get(messageId);
4141
4339
  }
@@ -4152,6 +4350,9 @@ var BaseThreadRuntimeCore = (_class12 = class {
4152
4350
  );
4153
4351
  this._notifySubscribers();
4154
4352
  }
4353
+ getMessageById(messageId) {
4354
+ return this.repository.getMessage(messageId);
4355
+ }
4155
4356
  getBranches(messageId) {
4156
4357
  return this.repository.getBranches(messageId);
4157
4358
  }
@@ -4171,12 +4372,12 @@ var BaseThreadRuntimeCore = (_class12 = class {
4171
4372
  this._subscriptions.add(callback);
4172
4373
  return () => this._subscriptions.delete(callback);
4173
4374
  }
4174
- __init27() {this._submittedFeedback = {}}
4375
+ __init25() {this._submittedFeedback = {}}
4175
4376
  getSubmittedFeedback(messageId) {
4176
4377
  return this._submittedFeedback[messageId];
4177
4378
  }
4178
4379
  submitFeedback({ messageId, type }) {
4179
- const adapter = _optionalChain([this, 'access', _198 => _198.adapters, 'optionalAccess', _199 => _199.feedback]);
4380
+ const adapter = _optionalChain([this, 'access', _208 => _208.adapters, 'optionalAccess', _209 => _209.feedback]);
4180
4381
  if (!adapter) throw new Error("Feedback adapter not configured");
4181
4382
  const { message } = this.repository.getMessage(messageId);
4182
4383
  adapter.submit({ message, type });
@@ -4186,11 +4387,11 @@ var BaseThreadRuntimeCore = (_class12 = class {
4186
4387
 
4187
4388
 
4188
4389
  speak(messageId) {
4189
- const adapter = _optionalChain([this, 'access', _200 => _200.adapters, 'optionalAccess', _201 => _201.speech]);
4390
+ const adapter = _optionalChain([this, 'access', _210 => _210.adapters, 'optionalAccess', _211 => _211.speech]);
4190
4391
  if (!adapter) throw new Error("Speech adapter not configured");
4191
4392
  const { message } = this.repository.getMessage(messageId);
4192
- _optionalChain([this, 'access', _202 => _202._stopSpeaking, 'optionalCall', _203 => _203()]);
4193
- const utterance = adapter.speak(message);
4393
+ _optionalChain([this, 'access', _212 => _212._stopSpeaking, 'optionalCall', _213 => _213()]);
4394
+ const utterance = adapter.speak(getThreadMessageText(message));
4194
4395
  const unsub = utterance.subscribe(() => {
4195
4396
  if (utterance.status.type === "ended") {
4196
4397
  this._stopSpeaking = void 0;
@@ -4221,8 +4422,12 @@ var BaseThreadRuntimeCore = (_class12 = class {
4221
4422
  this.repository.import(data);
4222
4423
  this._notifySubscribers();
4223
4424
  }
4224
- __init28() {this._eventSubscribers = /* @__PURE__ */ new Map()}
4425
+ __init26() {this._eventSubscribers = /* @__PURE__ */ new Map()}
4225
4426
  unstable_on(event, callback) {
4427
+ if (event === "model-config-update") {
4428
+ return _nullishCoalesce(_optionalChain([this, 'access', _214 => _214.configProvider, 'access', _215 => _215.subscribe, 'optionalCall', _216 => _216(callback)]), () => ( (() => {
4429
+ })));
4430
+ }
4226
4431
  const subscribers = this._eventSubscribers.get(event);
4227
4432
  if (!subscribers) {
4228
4433
  this._eventSubscribers.set(event, /* @__PURE__ */ new Set([callback]));
@@ -4234,25 +4439,16 @@ var BaseThreadRuntimeCore = (_class12 = class {
4234
4439
  subscribers2.delete(callback);
4235
4440
  };
4236
4441
  }
4237
- }, _class12);
4442
+ }, _class11);
4238
4443
 
4239
4444
  // src/runtimes/local/LocalThreadRuntimeCore.tsx
4240
- var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4241
- constructor(configProvider, adapter, { initialMessages, ...options }) {
4242
- super(configProvider);_class13.prototype.__init29.call(this);_class13.prototype.__init30.call(this);_class13.prototype.__init31.call(this);_class13.prototype.__init32.call(this);;
4243
- this.adapter = adapter;
4244
- this.threadId = generateId();
4245
- this.options = options;
4246
- if (initialMessages) {
4247
- let parentId = null;
4248
- const messages2 = fromCoreMessages(initialMessages);
4249
- for (const message of messages2) {
4250
- this.repository.addOrUpdateMessage(parentId, message);
4251
- parentId = message.id;
4252
- }
4253
- }
4445
+ var LocalThreadRuntimeCore = (_class12 = class extends BaseThreadRuntimeCore {
4446
+ constructor(configProvider, threadId, options) {
4447
+ super(configProvider);_class12.prototype.__init27.call(this);_class12.prototype.__init28.call(this);_class12.prototype.__init29.call(this);_class12.prototype.__init30.call(this);;
4448
+ this.threadId = threadId;
4449
+ this._options = options;
4254
4450
  }
4255
- __init29() {this.capabilities = {
4451
+ __init27() {this.capabilities = {
4256
4452
  switchToBranch: true,
4257
4453
  edit: true,
4258
4454
  reload: true,
@@ -4262,34 +4458,31 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4262
4458
  attachments: false,
4263
4459
  feedback: false
4264
4460
  }}
4265
- __init30() {this.abortController = null}
4266
-
4267
- __init31() {this.isDisabled = false}
4268
- __init32() {this.suggestions = []}
4461
+ __init28() {this.abortController = null}
4462
+ __init29() {this.isDisabled = false}
4463
+ __init30() {this.suggestions = []}
4269
4464
  get adapters() {
4270
- return this.options.adapters;
4465
+ return this._options.adapters;
4271
4466
  }
4272
4467
 
4273
- get options() {
4274
- return this._options;
4275
- }
4276
4468
  get extras() {
4277
4469
  return void 0;
4278
4470
  }
4279
- set options({ initialMessages, ...options }) {
4471
+ setOptions(options) {
4472
+ if (this._options === options) return;
4280
4473
  this._options = options;
4281
4474
  let hasUpdates = false;
4282
- const canSpeak = _optionalChain([options, 'access', _204 => _204.adapters, 'optionalAccess', _205 => _205.speech]) !== void 0;
4475
+ const canSpeak = _optionalChain([options, 'access', _217 => _217.adapters, 'optionalAccess', _218 => _218.speech]) !== void 0;
4283
4476
  if (this.capabilities.speech !== canSpeak) {
4284
4477
  this.capabilities.speech = canSpeak;
4285
4478
  hasUpdates = true;
4286
4479
  }
4287
- const canAttach = _optionalChain([options, 'access', _206 => _206.adapters, 'optionalAccess', _207 => _207.attachments]) !== void 0;
4480
+ const canAttach = _optionalChain([options, 'access', _219 => _219.adapters, 'optionalAccess', _220 => _220.attachments]) !== void 0;
4288
4481
  if (this.capabilities.attachments !== canAttach) {
4289
4482
  this.capabilities.attachments = canAttach;
4290
4483
  hasUpdates = true;
4291
4484
  }
4292
- const canFeedback = _optionalChain([options, 'access', _208 => _208.adapters, 'optionalAccess', _209 => _209.feedback]) !== void 0;
4485
+ const canFeedback = _optionalChain([options, 'access', _221 => _221.adapters, 'optionalAccess', _222 => _222.feedback]) !== void 0;
4293
4486
  if (this.capabilities.feedback !== canFeedback) {
4294
4487
  this.capabilities.feedback = canFeedback;
4295
4488
  hasUpdates = true;
@@ -4325,13 +4518,13 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4325
4518
  }
4326
4519
  async performRoundtrip(parentId, message) {
4327
4520
  const messages2 = this.repository.getMessages();
4328
- _optionalChain([this, 'access', _210 => _210.abortController, 'optionalAccess', _211 => _211.abort, 'call', _212 => _212()]);
4521
+ _optionalChain([this, 'access', _223 => _223.abortController, 'optionalAccess', _224 => _224.abort, 'call', _225 => _225()]);
4329
4522
  this.abortController = new AbortController();
4330
4523
  const initialContent = message.content;
4331
- const initialSteps = _optionalChain([message, 'access', _213 => _213.metadata, 'optionalAccess', _214 => _214.steps]);
4332
- const initalCustom = _optionalChain([message, 'access', _215 => _215.metadata, 'optionalAccess', _216 => _216.custom]);
4524
+ const initialSteps = _optionalChain([message, 'access', _226 => _226.metadata, 'optionalAccess', _227 => _227.steps]);
4525
+ const initalCustom = _optionalChain([message, 'access', _228 => _228.metadata, 'optionalAccess', _229 => _229.custom]);
4333
4526
  const updateMessage = (m) => {
4334
- const newSteps = _optionalChain([m, 'access', _217 => _217.metadata, 'optionalAccess', _218 => _218.steps]) || _optionalChain([m, 'access', _219 => _219.metadata, 'optionalAccess', _220 => _220.roundtrips]);
4527
+ const newSteps = _optionalChain([m, 'access', _230 => _230.metadata, 'optionalAccess', _231 => _231.steps]) || _optionalChain([m, 'access', _232 => _232.metadata, 'optionalAccess', _233 => _233.roundtrips]);
4335
4528
  const steps2 = newSteps ? [..._nullishCoalesce(initialSteps, () => ( [])), ...newSteps] : void 0;
4336
4529
  message = {
4337
4530
  ...message,
@@ -4343,7 +4536,7 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4343
4536
  metadata: {
4344
4537
  ...message.metadata,
4345
4538
  ...steps2 ? { roundtrips: steps2, steps: steps2 } : void 0,
4346
- ..._optionalChain([m, 'access', _221 => _221.metadata, 'optionalAccess', _222 => _222.custom]) ? {
4539
+ ..._optionalChain([m, 'access', _234 => _234.metadata, 'optionalAccess', _235 => _235.custom]) ? {
4347
4540
  custom: { ..._nullishCoalesce(initalCustom, () => ( {})), ...m.metadata.custom }
4348
4541
  } : void 0
4349
4542
  }
@@ -4352,8 +4545,8 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4352
4545
  this.repository.addOrUpdateMessage(parentId, message);
4353
4546
  this._notifySubscribers();
4354
4547
  };
4355
- const maxSteps = this.options.maxSteps ? this.options.maxSteps : (_nullishCoalesce(this.options.maxToolRoundtrips, () => ( 1))) + 1;
4356
- const steps = _nullishCoalesce(_optionalChain([message, 'access', _223 => _223.metadata, 'optionalAccess', _224 => _224.steps, 'optionalAccess', _225 => _225.length]), () => ( 0));
4548
+ const maxSteps = this._options.maxSteps ? this._options.maxSteps : (_nullishCoalesce(this._options.maxToolRoundtrips, () => ( 1))) + 1;
4549
+ const steps = _nullishCoalesce(_optionalChain([message, 'access', _236 => _236.metadata, 'optionalAccess', _237 => _237.steps, 'optionalAccess', _238 => _238.length]), () => ( 0));
4357
4550
  if (steps >= maxSteps) {
4358
4551
  updateMessage({
4359
4552
  status: {
@@ -4370,7 +4563,7 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4370
4563
  });
4371
4564
  }
4372
4565
  try {
4373
- const promiseOrGenerator = this.adapter.run({
4566
+ const promiseOrGenerator = this.adapters.chatModel.run({
4374
4567
  messages: messages2,
4375
4568
  abortSignal: this.abortController.signal,
4376
4569
  config: this.getModelConfig(),
@@ -4405,7 +4598,7 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4405
4598
  return message;
4406
4599
  }
4407
4600
  cancelRun() {
4408
- _optionalChain([this, 'access', _226 => _226.abortController, 'optionalAccess', _227 => _227.abort, 'call', _228 => _228()]);
4601
+ _optionalChain([this, 'access', _239 => _239.abortController, 'optionalAccess', _240 => _240.abort, 'call', _241 => _241()]);
4409
4602
  this.abortController = null;
4410
4603
  }
4411
4604
  addToolResult({
@@ -4441,46 +4634,156 @@ var LocalThreadRuntimeCore = (_class13 = class extends BaseThreadRuntimeCore {
4441
4634
  this.performRoundtrip(parentId, message);
4442
4635
  }
4443
4636
  }
4444
- }, _class13);
4637
+ }, _class12);
4445
4638
 
4446
- // src/runtimes/local/LocalRuntimeCore.tsx
4447
- var LocalRuntimeCore = class extends BaseAssistantRuntimeCore {
4639
+ // src/runtimes/local/LocalThreadManagerRuntimeCore.tsx
4640
+ var LocalThreadManagerRuntimeCore = (_class13 = class {
4641
+ constructor(_threadFactory) {;_class13.prototype.__init31.call(this);_class13.prototype.__init32.call(this);_class13.prototype.__init33.call(this);_class13.prototype.__init34.call(this);
4642
+ this._threadFactory = _threadFactory;
4643
+ this._mainThread = this._threadFactory(generateId(), { messages: [] });
4644
+ }
4645
+ __init31() {this._threadData = /* @__PURE__ */ new Map()}
4646
+ __init32() {this._threads = []}
4647
+ __init33() {this._archivedThreads = []}
4648
+ get threads() {
4649
+ return this._threads;
4650
+ }
4651
+ get archivedThreads() {
4652
+ return this._archivedThreads;
4653
+ }
4448
4654
 
4449
- constructor(adapter, options) {
4450
- const proxyConfigProvider = new ProxyConfigProvider();
4451
- super(new LocalThreadRuntimeCore(proxyConfigProvider, adapter, options));
4452
- this._proxyConfigProvider = proxyConfigProvider;
4655
+ get mainThread() {
4656
+ return this._mainThread;
4453
4657
  }
4454
- registerModelConfigProvider(provider) {
4455
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
4658
+ switchToThread(threadId) {
4659
+ if (this._mainThread.threadId === threadId) return;
4660
+ const data = this._threadData.get(threadId);
4661
+ if (!data) throw new Error("Thread not found");
4662
+ const thread = this._threadFactory(threadId, data.data);
4663
+ this._performThreadSwitch(thread);
4456
4664
  }
4457
4665
  switchToNewThread() {
4458
- const { initialMessages, ...options } = this.thread.options;
4459
- this.thread = new LocalThreadRuntimeCore(
4460
- this._proxyConfigProvider,
4461
- this.thread.adapter,
4462
- options
4463
- );
4464
- this.thread._notifyEventSubscribers("switched-to");
4666
+ if (!this._mainThread) return;
4667
+ const thread = this._threadFactory(generateId(), { messages: [] });
4668
+ this._performThreadSwitch(thread);
4669
+ }
4670
+ _performThreadSwitch(newThreadCore) {
4671
+ if (this._mainThread) {
4672
+ const data = this._threadData.get(this._mainThread.threadId);
4673
+ if (!data) throw new Error("Thread not found");
4674
+ const exprt = this._mainThread.export();
4675
+ data.data = exprt;
4676
+ }
4677
+ this._mainThread._notifyEventSubscribers("switched-away");
4678
+ this._mainThread = newThreadCore;
4679
+ newThreadCore._notifyEventSubscribers("switched-to");
4680
+ this._notifySubscribers();
4465
4681
  }
4466
- switchToThread(threadId) {
4467
- if (threadId !== null) {
4468
- throw new Error("LocalRuntime does not yet support switching threads");
4682
+ _performMoveOp(threadId, operation) {
4683
+ const data = this._threadData.get(threadId);
4684
+ if (!data) throw new Error("Thread not found");
4685
+ if (operation === "archive" && data.isArchived) return;
4686
+ if (operation === "unarchive" && !data.isArchived) return;
4687
+ if (operation === "archive") {
4688
+ data.isArchived = true;
4689
+ this._archivedThreads = [...this._archivedThreads, data.metadata];
4690
+ }
4691
+ if (operation === "unarchive") {
4692
+ data.isArchived = false;
4693
+ this._threads = [...this._threads, data.metadata];
4694
+ }
4695
+ if (operation === "delete") {
4696
+ this._threadData.delete(threadId);
4697
+ }
4698
+ if (operation === "archive" || operation === "delete" && data.isArchived) {
4699
+ this._archivedThreads = this._archivedThreads.filter(
4700
+ (t) => t.threadId !== threadId
4701
+ );
4702
+ }
4703
+ if (operation === "unarchive" || operation === "delete" && !data.isArchived) {
4704
+ this._threads = this._threads.filter((t) => t.threadId !== threadId);
4469
4705
  }
4470
- this.switchToNewThread();
4706
+ this._notifySubscribers();
4707
+ }
4708
+ async rename(threadId, newTitle) {
4709
+ const data = this._threadData.get(threadId);
4710
+ if (!data) throw new Error("Thread not found");
4711
+ data.metadata = {
4712
+ ...data.metadata,
4713
+ title: newTitle
4714
+ };
4715
+ const threadList = data.isArchived ? this.archivedThreads : this.threads;
4716
+ const idx = threadList.findIndex((t) => t.threadId === threadId);
4717
+ const updatedThreadList = threadList.toSpliced(idx, 1, data.metadata);
4718
+ if (data.isArchived) {
4719
+ this._archivedThreads = updatedThreadList;
4720
+ } else {
4721
+ this._threads = updatedThreadList;
4722
+ }
4723
+ this._notifySubscribers();
4724
+ }
4725
+ async archive(threadId) {
4726
+ this._performMoveOp(threadId, "archive");
4727
+ }
4728
+ async unarchive(threadId) {
4729
+ this._performMoveOp(threadId, "unarchive");
4730
+ }
4731
+ async delete(threadId) {
4732
+ this._performMoveOp(threadId, "delete");
4733
+ }
4734
+ __init34() {this._subscriptions = /* @__PURE__ */ new Set()}
4735
+ subscribe(callback) {
4736
+ this._subscriptions.add(callback);
4737
+ return () => this._subscriptions.delete(callback);
4738
+ }
4739
+ _notifySubscribers() {
4740
+ for (const callback of this._subscriptions) callback();
4741
+ }
4742
+ }, _class13);
4743
+
4744
+ // src/runtimes/local/LocalRuntimeCore.tsx
4745
+ var getExportFromInitialMessages = (initialMessages) => {
4746
+ const messages2 = fromCoreMessages(initialMessages);
4747
+ return {
4748
+ messages: messages2.map((m, idx) => ({
4749
+ parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _242 => _242[idx - 1], 'optionalAccess', _243 => _243.id]), () => ( null)),
4750
+ message: m
4751
+ }))
4752
+ };
4753
+ };
4754
+ var LocalRuntimeCore = class extends BaseAssistantRuntimeCore {
4755
+
4756
+
4757
+ constructor(options, initialMessages) {
4758
+ super();
4759
+ this._options = options;
4760
+ this.threadManager = new LocalThreadManagerRuntimeCore((threadId, data) => {
4761
+ const thread = new LocalThreadRuntimeCore(
4762
+ this._proxyConfigProvider,
4763
+ threadId,
4764
+ this._options
4765
+ );
4766
+ thread.import(data);
4767
+ return thread;
4768
+ });
4769
+ if (initialMessages) {
4770
+ this.threadManager.mainThread.import(
4771
+ getExportFromInitialMessages(initialMessages)
4772
+ );
4773
+ }
4774
+ }
4775
+ setOptions(options) {
4776
+ this._options = options;
4777
+ this.threadManager.mainThread.setOptions(options);
4471
4778
  }
4472
4779
  reset({
4473
4780
  initialMessages
4474
4781
  } = {}) {
4475
- this.switchToThread(null);
4782
+ this.threadManager.switchToNewThread();
4476
4783
  if (!initialMessages) return;
4477
- const messages2 = fromCoreMessages(initialMessages);
4478
- this.thread.import({
4479
- messages: messages2.map((m, idx) => ({
4480
- parentId: _nullishCoalesce(_optionalChain([messages2, 'access', _229 => _229[idx - 1], 'optionalAccess', _230 => _230.id]), () => ( null)),
4481
- message: m
4482
- }))
4483
- });
4784
+ this.threadManager.mainThread.import(
4785
+ getExportFromInitialMessages(initialMessages)
4786
+ );
4484
4787
  }
4485
4788
  };
4486
4789
 
@@ -4496,15 +4799,21 @@ var LocalRuntimeImpl = class _LocalRuntimeImpl extends AssistantRuntimeImpl {
4496
4799
  static create(_core) {
4497
4800
  return new _LocalRuntimeImpl(
4498
4801
  _core,
4499
- AssistantRuntimeImpl.createThreadRuntime(_core, ThreadRuntimeImpl)
4802
+ AssistantRuntimeImpl.createMainThreadRuntime(_core, ThreadRuntimeImpl)
4500
4803
  );
4501
4804
  }
4502
4805
  };
4503
4806
  var useLocalRuntime = (adapter, options = {}) => {
4504
- const [runtime] = _react.useState.call(void 0, () => new LocalRuntimeCore(adapter, options));
4505
- _react.useInsertionEffect.call(void 0, () => {
4506
- runtime.thread.adapter = adapter;
4507
- runtime.thread.options = options;
4807
+ const opt = {
4808
+ ...options,
4809
+ adapters: {
4810
+ ...options.adapters,
4811
+ chatModel: adapter
4812
+ }
4813
+ };
4814
+ const [runtime] = _react.useState.call(void 0, () => new LocalRuntimeCore(opt));
4815
+ _react.useEffect.call(void 0, () => {
4816
+ runtime.setOptions(opt);
4508
4817
  });
4509
4818
  return _react.useMemo.call(void 0, () => LocalRuntimeImpl.create(runtime), [runtime]);
4510
4819
  };
@@ -4512,6 +4821,92 @@ var useLocalRuntime = (adapter, options = {}) => {
4512
4821
  // src/runtimes/external-store/useExternalStoreRuntime.tsx
4513
4822
 
4514
4823
 
4824
+ // src/runtimes/external-store/ExternalStoreThreadManagementAdapter.tsx
4825
+ var EMPTY_ARRAY2 = Object.freeze([]);
4826
+ var DEFAULT_THREAD_ID = "DEFAULT_THREAD_ID";
4827
+ var ExternalStoreThreadManagerRuntimeCore = (_class14 = class {
4828
+ constructor(adapter = {}, threadFactory) {;_class14.prototype.__init35.call(this);
4829
+ this.adapter = adapter;
4830
+ this.threadFactory = threadFactory;
4831
+ this._mainThread = this.threadFactory(DEFAULT_THREAD_ID);
4832
+ }
4833
+ get threads() {
4834
+ return _nullishCoalesce(this.adapter.threads, () => ( EMPTY_ARRAY2));
4835
+ }
4836
+ get archivedThreads() {
4837
+ return _nullishCoalesce(this.adapter.archivedThreads, () => ( EMPTY_ARRAY2));
4838
+ }
4839
+
4840
+ get mainThread() {
4841
+ return this._mainThread;
4842
+ }
4843
+ setAdapter(adapter) {
4844
+ const previousAdapter = this.adapter;
4845
+ this.adapter = adapter;
4846
+ const newThreadId = _nullishCoalesce(adapter.threadId, () => ( DEFAULT_THREAD_ID));
4847
+ const newThreads = _nullishCoalesce(adapter.threads, () => ( EMPTY_ARRAY2));
4848
+ const newArchivedThreads = _nullishCoalesce(adapter.archivedThreads, () => ( EMPTY_ARRAY2));
4849
+ if (previousAdapter.threadId === newThreadId && previousAdapter.threads === newThreads && previousAdapter.archivedThreads === newArchivedThreads) {
4850
+ return;
4851
+ }
4852
+ if (previousAdapter.threadId !== newThreadId) {
4853
+ this._mainThread._notifyEventSubscribers("switched-away");
4854
+ this._mainThread = this.threadFactory(newThreadId);
4855
+ this._mainThread._notifyEventSubscribers("switched-to");
4856
+ }
4857
+ this._notifySubscribers();
4858
+ }
4859
+ switchToThread(threadId) {
4860
+ if (_optionalChain([this, 'access', _244 => _244._mainThread, 'optionalAccess', _245 => _245.threadId]) === threadId) return;
4861
+ const onSwitchToThread = this.adapter.onSwitchToThread;
4862
+ if (!onSwitchToThread)
4863
+ throw new Error(
4864
+ "External store adapter does not support switching to thread"
4865
+ );
4866
+ onSwitchToThread(threadId);
4867
+ }
4868
+ switchToNewThread() {
4869
+ const onSwitchToNewThread = this.adapter.onSwitchToNewThread;
4870
+ if (!onSwitchToNewThread)
4871
+ throw new Error(
4872
+ "External store adapter does not support switching to new thread"
4873
+ );
4874
+ onSwitchToNewThread();
4875
+ }
4876
+ async rename(threadId, newTitle) {
4877
+ const onRename = this.adapter.onRename;
4878
+ if (!onRename)
4879
+ throw new Error("External store adapter does not support renaming");
4880
+ onRename(threadId, newTitle);
4881
+ }
4882
+ async archive(threadId) {
4883
+ const onArchive = this.adapter.onArchive;
4884
+ if (!onArchive)
4885
+ throw new Error("External store adapter does not support archiving");
4886
+ onArchive(threadId);
4887
+ }
4888
+ async unarchive(threadId) {
4889
+ const onUnarchive = this.adapter.onUnarchive;
4890
+ if (!onUnarchive)
4891
+ throw new Error("External store adapter does not support unarchiving");
4892
+ onUnarchive(threadId);
4893
+ }
4894
+ async delete(threadId) {
4895
+ const onDelete = this.adapter.onDelete;
4896
+ if (!onDelete)
4897
+ throw new Error("External store adapter does not support deleting");
4898
+ onDelete(threadId);
4899
+ }
4900
+ __init35() {this._subscriptions = /* @__PURE__ */ new Set()}
4901
+ subscribe(callback) {
4902
+ this._subscriptions.add(callback);
4903
+ return () => this._subscriptions.delete(callback);
4904
+ }
4905
+ _notifySubscribers() {
4906
+ for (const callback of this._subscriptions) callback();
4907
+ }
4908
+ }, _class14);
4909
+
4515
4910
  // src/runtimes/external-store/getExternalStoreMessage.tsx
4516
4911
  var symbolInnerMessage = Symbol("innerMessage");
4517
4912
  var getExternalStoreMessage = (message) => {
@@ -4519,8 +4914,8 @@ var getExternalStoreMessage = (message) => {
4519
4914
  };
4520
4915
 
4521
4916
  // src/runtimes/external-store/ThreadMessageConverter.ts
4522
- var ThreadMessageConverter = (_class14 = class {constructor() { _class14.prototype.__init33.call(this); }
4523
- __init33() {this.cache = /* @__PURE__ */ new WeakMap()}
4917
+ var ThreadMessageConverter = (_class15 = class {constructor() { _class15.prototype.__init36.call(this); }
4918
+ __init36() {this.cache = /* @__PURE__ */ new WeakMap()}
4524
4919
  convertMessages(messages2, converter) {
4525
4920
  return messages2.map((m, idx) => {
4526
4921
  const cached = this.cache.get(m);
@@ -4529,7 +4924,7 @@ var ThreadMessageConverter = (_class14 = class {constructor() { _class14.prototy
4529
4924
  return newMessage;
4530
4925
  });
4531
4926
  }
4532
- }, _class14);
4927
+ }, _class15);
4533
4928
 
4534
4929
  // src/runtimes/external-store/auto-status.tsx
4535
4930
  var AUTO_STATUS_RUNNING = Object.freeze({ type: "running" });
@@ -4615,13 +5010,13 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
4615
5010
  };
4616
5011
 
4617
5012
  // src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx
4618
- var EMPTY_ARRAY2 = Object.freeze([]);
5013
+ var EMPTY_ARRAY3 = Object.freeze([]);
4619
5014
  var hasUpcomingMessage = (isRunning, messages2) => {
4620
- return isRunning && _optionalChain([messages2, 'access', _231 => _231[messages2.length - 1], 'optionalAccess', _232 => _232.role]) !== "assistant";
5015
+ return isRunning && _optionalChain([messages2, 'access', _246 => _246[messages2.length - 1], 'optionalAccess', _247 => _247.role]) !== "assistant";
4621
5016
  };
4622
- var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntimeCore {
4623
- __init34() {this.assistantOptimisticId = null}
4624
- __init35() {this._capabilities = {
5017
+ var ExternalStoreThreadRuntimeCore = (_class16 = class extends BaseThreadRuntimeCore {
5018
+ __init37() {this.assistantOptimisticId = null}
5019
+ __init38() {this._capabilities = {
4625
5020
  switchToBranch: false,
4626
5021
  edit: false,
4627
5022
  reload: false,
@@ -4643,41 +5038,38 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4643
5038
  get adapters() {
4644
5039
  return this._store.adapters;
4645
5040
  }
4646
- __init36() {this.suggestions = []}
4647
- __init37() {this.extras = void 0}
4648
- __init38() {this._converter = new ThreadMessageConverter()}
5041
+ __init39() {this.suggestions = []}
5042
+ __init40() {this.extras = void 0}
5043
+ __init41() {this._converter = new ThreadMessageConverter()}
4649
5044
 
4650
5045
  beginEdit(messageId) {
4651
- if (!this.store.onEdit)
5046
+ if (!this._store.onEdit)
4652
5047
  throw new Error("Runtime does not support editing.");
4653
5048
  super.beginEdit(messageId);
4654
5049
  }
4655
- constructor(configProvider, store) {
4656
- super(configProvider);_class15.prototype.__init34.call(this);_class15.prototype.__init35.call(this);_class15.prototype.__init36.call(this);_class15.prototype.__init37.call(this);_class15.prototype.__init38.call(this);_class15.prototype.__init39.call(this);;
4657
- this.store = store;
4658
- }
4659
- get store() {
4660
- return this._store;
5050
+ constructor(configProvider, threadId, store) {
5051
+ 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);;
5052
+ this.threadId = threadId;
5053
+ this.setStore(store);
4661
5054
  }
4662
- set store(store) {
5055
+ setStore(store) {
4663
5056
  if (this._store === store) return;
4664
- this.threadId = _nullishCoalesce(_nullishCoalesce(store.threadId, () => ( this.threadId)), () => ( generateId()));
4665
5057
  const isRunning = _nullishCoalesce(store.isRunning, () => ( false));
4666
5058
  this.isDisabled = _nullishCoalesce(store.isDisabled, () => ( false));
4667
5059
  const oldStore = this._store;
4668
5060
  this._store = store;
4669
5061
  this.extras = store.extras;
4670
- this.suggestions = _nullishCoalesce(store.suggestions, () => ( EMPTY_ARRAY2));
5062
+ this.suggestions = _nullishCoalesce(store.suggestions, () => ( EMPTY_ARRAY3));
4671
5063
  this._capabilities = {
4672
5064
  switchToBranch: this._store.setMessages !== void 0,
4673
5065
  edit: this._store.onEdit !== void 0,
4674
5066
  reload: this._store.onReload !== void 0,
4675
5067
  cancel: this._store.onCancel !== void 0,
4676
- speech: _optionalChain([this, 'access', _236 => _236._store, 'access', _237 => _237.adapters, 'optionalAccess', _238 => _238.speech]) !== void 0,
4677
- unstable_copy: _optionalChain([this, 'access', _239 => _239._store, 'access', _240 => _240.unstable_capabilities, 'optionalAccess', _241 => _241.copy]) !== false,
5068
+ speech: _optionalChain([this, 'access', _251 => _251._store, 'access', _252 => _252.adapters, 'optionalAccess', _253 => _253.speech]) !== void 0,
5069
+ unstable_copy: _optionalChain([this, 'access', _254 => _254._store, 'access', _255 => _255.unstable_capabilities, 'optionalAccess', _256 => _256.copy]) !== false,
4678
5070
  // default true
4679
- attachments: !!_optionalChain([this, 'access', _242 => _242.store, 'access', _243 => _243.adapters, 'optionalAccess', _244 => _244.attachments]),
4680
- feedback: !!_optionalChain([this, 'access', _245 => _245.store, 'access', _246 => _246.adapters, 'optionalAccess', _247 => _247.feedback])
5071
+ attachments: !!_optionalChain([this, 'access', _257 => _257._store, 'access', _258 => _258.adapters, 'optionalAccess', _259 => _259.attachments]),
5072
+ feedback: !!_optionalChain([this, 'access', _260 => _260._store, 'access', _261 => _261.adapters, 'optionalAccess', _262 => _262.feedback])
4681
5073
  };
4682
5074
  if (oldStore) {
4683
5075
  if (oldStore.convertMessage !== store.convertMessage) {
@@ -4704,7 +5096,7 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4704
5096
  for (let i = 0; i < messages2.length; i++) {
4705
5097
  const message = messages2[i];
4706
5098
  const parent = messages2[i - 1];
4707
- this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess', _248 => _248.id]), () => ( null)), message);
5099
+ this.repository.addOrUpdateMessage(_nullishCoalesce(_optionalChain([parent, 'optionalAccess', _263 => _263.id]), () => ( null)), message);
4708
5100
  }
4709
5101
  if (this.assistantOptimisticId) {
4710
5102
  this.repository.deleteMessage(this.assistantOptimisticId);
@@ -4712,7 +5104,7 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4712
5104
  }
4713
5105
  if (hasUpcomingMessage(isRunning, messages2)) {
4714
5106
  this.assistantOptimisticId = this.repository.appendOptimisticMessage(
4715
- _nullishCoalesce(_optionalChain([messages2, 'access', _249 => _249.at, 'call', _250 => _250(-1), 'optionalAccess', _251 => _251.id]), () => ( null)),
5107
+ _nullishCoalesce(_optionalChain([messages2, 'access', _264 => _264.at, 'call', _265 => _265(-1), 'optionalAccess', _266 => _266.id]), () => ( null)),
4716
5108
  {
4717
5109
  role: "assistant",
4718
5110
  content: []
@@ -4720,7 +5112,7 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4720
5112
  );
4721
5113
  }
4722
5114
  this.repository.resetHead(
4723
- _nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages2, 'access', _252 => _252.at, 'call', _253 => _253(-1), 'optionalAccess', _254 => _254.id]))), () => ( null))
5115
+ _nullishCoalesce(_nullishCoalesce(this.assistantOptimisticId, () => ( _optionalChain([messages2, 'access', _267 => _267.at, 'call', _268 => _268(-1), 'optionalAccess', _269 => _269.id]))), () => ( null))
4724
5116
  );
4725
5117
  this._messages = this.repository.getMessages();
4726
5118
  this._notifySubscribers();
@@ -4732,7 +5124,7 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4732
5124
  this.updateMessages(this.repository.getMessages());
4733
5125
  }
4734
5126
  async append(message) {
4735
- if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access', _255 => _255.messages, 'access', _256 => _256.at, 'call', _257 => _257(-1), 'optionalAccess', _258 => _258.id]), () => ( null)))) {
5127
+ if (message.parentId !== (_nullishCoalesce(_optionalChain([this, 'access', _270 => _270.messages, 'access', _271 => _271.at, 'call', _272 => _272(-1), 'optionalAccess', _273 => _273.id]), () => ( null)))) {
4736
5128
  if (!this._store.onEdit)
4737
5129
  throw new Error("Runtime does not support editing messages.");
4738
5130
  await this._store.onEdit(message);
@@ -4755,7 +5147,7 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4755
5147
  }
4756
5148
  let messages2 = this.repository.getMessages();
4757
5149
  const previousMessage = messages2[messages2.length - 1];
4758
- if (_optionalChain([previousMessage, 'optionalAccess', _259 => _259.role]) === "user" && previousMessage.id === _optionalChain([messages2, 'access', _260 => _260.at, 'call', _261 => _261(-1), 'optionalAccess', _262 => _262.id])) {
5150
+ if (_optionalChain([previousMessage, 'optionalAccess', _274 => _274.role]) === "user" && previousMessage.id === _optionalChain([messages2, 'access', _275 => _275.at, 'call', _276 => _276(-1), 'optionalAccess', _277 => _277.id])) {
4759
5151
  this.repository.deleteMessage(previousMessage.id);
4760
5152
  if (!this.composer.text.trim()) {
4761
5153
  this.composer.setText(getThreadMessageText(previousMessage));
@@ -4773,57 +5165,41 @@ var ExternalStoreThreadRuntimeCore = (_class15 = class extends BaseThreadRuntime
4773
5165
  throw new Error("Runtime does not support tool results.");
4774
5166
  this._store.onAddToolResult(options);
4775
5167
  }
4776
- __init39() {this.updateMessages = (messages2) => {
4777
- _optionalChain([this, 'access', _263 => _263._store, 'access', _264 => _264.setMessages, 'optionalCall', _265 => _265(
5168
+ __init42() {this.updateMessages = (messages2) => {
5169
+ _optionalChain([this, 'access', _278 => _278._store, 'access', _279 => _279.setMessages, 'optionalCall', _280 => _280(
4778
5170
  messages2.flatMap(getExternalStoreMessage).filter((m) => m != null)
4779
5171
  )]);
4780
5172
  }}
4781
- }, _class15);
5173
+ }, _class16);
4782
5174
 
4783
5175
  // src/runtimes/external-store/ExternalStoreRuntimeCore.tsx
5176
+ var getThreadManagerAdapter = (store) => {
5177
+ return {
5178
+ threadId: store.threadId,
5179
+ onSwitchToNewThread: store.onSwitchToNewThread,
5180
+ onSwitchToThread: store.onSwitchToThread,
5181
+ ..._optionalChain([store, 'access', _281 => _281.adapters, 'optionalAccess', _282 => _282.threadManager])
5182
+ };
5183
+ };
4784
5184
  var ExternalStoreRuntimeCore = class extends BaseAssistantRuntimeCore {
4785
5185
 
5186
+
4786
5187
  constructor(store) {
4787
- const provider = new ProxyConfigProvider();
4788
- super(new ExternalStoreThreadRuntimeCore(provider, store));
4789
- this._proxyConfigProvider = provider;
4790
- }
4791
- getModelConfig() {
4792
- return this._proxyConfigProvider.getModelConfig();
4793
- }
4794
- registerModelConfigProvider(provider) {
4795
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
4796
- }
4797
- async switchToNewThread() {
4798
- if (!this.thread.store.onSwitchToNewThread)
4799
- throw new Error("Runtime does not support switching to new threads.");
4800
- this.thread = new ExternalStoreThreadRuntimeCore(
4801
- this._proxyConfigProvider,
4802
- {
4803
- ...this.thread.store,
4804
- messages: []
4805
- }
4806
- );
4807
- await this.thread.store.onSwitchToNewThread();
4808
- this.thread._notifyEventSubscribers("switched-to");
4809
- }
4810
- async switchToThread(threadId) {
4811
- if (threadId !== null) {
4812
- if (!this.thread.store.onSwitchToThread)
4813
- throw new Error("Runtime does not support switching threads.");
4814
- this.thread = new ExternalStoreThreadRuntimeCore(
5188
+ super();
5189
+ this._store = store;
5190
+ this.threadManager = new ExternalStoreThreadManagerRuntimeCore(
5191
+ getThreadManagerAdapter(store),
5192
+ (threadId) => new ExternalStoreThreadRuntimeCore(
4815
5193
  this._proxyConfigProvider,
4816
- {
4817
- ...this.thread.store,
4818
- messages: []
4819
- // ignore messages until rerender
4820
- }
4821
- );
4822
- await this.thread.store.onSwitchToThread(threadId);
4823
- this.thread._notifyEventSubscribers("switched-to");
4824
- } else {
4825
- this.switchToNewThread();
4826
- }
5194
+ threadId,
5195
+ this._store
5196
+ )
5197
+ );
5198
+ }
5199
+ setStore(store) {
5200
+ this._store = store;
5201
+ this.threadManager.setAdapter(getThreadManagerAdapter(store));
5202
+ this.threadManager.mainThread.setStore(store);
4827
5203
  }
4828
5204
  };
4829
5205
 
@@ -4831,7 +5207,7 @@ var ExternalStoreRuntimeCore = class extends BaseAssistantRuntimeCore {
4831
5207
  var useExternalStoreRuntime = (store) => {
4832
5208
  const [runtime] = _react.useState.call(void 0, () => new ExternalStoreRuntimeCore(store));
4833
5209
  _react.useEffect.call(void 0, () => {
4834
- runtime.thread.store = store;
5210
+ runtime.setStore(store);
4835
5211
  });
4836
5212
  return _react.useMemo.call(void 0,
4837
5213
  () => AssistantRuntimeImpl.create(runtime, ThreadRuntimeImpl),
@@ -4994,18 +5370,18 @@ var DangerousInBrowserAdapter = class {
4994
5370
  this.options = options;
4995
5371
  }
4996
5372
  async *run({ messages: messages2, abortSignal, config }) {
4997
- const res = await _chunkCYIFAX4Ujs.getEdgeRuntimeStream.call(void 0, {
5373
+ const res = await _chunkC6UZOY5Ajs.getEdgeRuntimeStream.call(void 0, {
4998
5374
  options: this.options,
4999
5375
  abortSignal,
5000
5376
  requestData: {
5001
5377
  system: config.system,
5002
- messages: _chunkCYIFAX4Ujs.toCoreMessages.call(void 0, messages2),
5003
- tools: config.tools ? _chunkCYIFAX4Ujs.toLanguageModelTools.call(void 0, config.tools) : [],
5378
+ messages: _chunkC6UZOY5Ajs.toCoreMessages.call(void 0, messages2),
5379
+ tools: config.tools ? _chunkC6UZOY5Ajs.toLanguageModelTools.call(void 0, config.tools) : [],
5004
5380
  ...config.callSettings,
5005
5381
  ...config.config
5006
5382
  }
5007
5383
  });
5008
- const stream = res.pipeThrough(_chunkCYIFAX4Ujs.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkCYIFAX4Ujs.runResultStream.call(void 0, ));
5384
+ const stream = res.pipeThrough(_chunkC6UZOY5Ajs.toolResultStream.call(void 0, config.tools, abortSignal)).pipeThrough(_chunkC6UZOY5Ajs.runResultStream.call(void 0, ));
5009
5385
  for await (const update of asAsyncIterable(stream)) {
5010
5386
  yield update;
5011
5387
  }
@@ -5021,8 +5397,7 @@ var useDangerousInBrowserRuntime = (options) => {
5021
5397
 
5022
5398
  // src/runtimes/speech/WebSpeechSynthesisAdapter.ts
5023
5399
  var WebSpeechSynthesisAdapter = class {
5024
- speak(message) {
5025
- const text = getThreadMessageText(message);
5400
+ speak(text) {
5026
5401
  const utterance = new SpeechSynthesisUtterance(text);
5027
5402
  const subscribers = /* @__PURE__ */ new Set();
5028
5403
  const handleEnd = (reason, error) => {
@@ -5061,8 +5436,8 @@ var WebSpeechSynthesisAdapter = class {
5061
5436
  };
5062
5437
 
5063
5438
  // src/runtimes/attachment/SimpleImageAttachmentAdapter.ts
5064
- var SimpleImageAttachmentAdapter = (_class16 = class {constructor() { _class16.prototype.__init40.call(this); }
5065
- __init40() {this.accept = "image/*"}
5439
+ var SimpleImageAttachmentAdapter = (_class17 = class {constructor() { _class17.prototype.__init43.call(this); }
5440
+ __init43() {this.accept = "image/*"}
5066
5441
  async add(state) {
5067
5442
  return {
5068
5443
  id: state.file.name,
@@ -5087,7 +5462,7 @@ var SimpleImageAttachmentAdapter = (_class16 = class {constructor() { _class16.p
5087
5462
  }
5088
5463
  async remove() {
5089
5464
  }
5090
- }, _class16);
5465
+ }, _class17);
5091
5466
  var getFileDataURL = (file) => new Promise((resolve, reject) => {
5092
5467
  const reader = new FileReader();
5093
5468
  reader.onload = () => resolve(reader.result);
@@ -5096,8 +5471,8 @@ var getFileDataURL = (file) => new Promise((resolve, reject) => {
5096
5471
  });
5097
5472
 
5098
5473
  // src/runtimes/attachment/SimpleTextAttachmentAdapter.ts
5099
- var SimpleTextAttachmentAdapter = (_class17 = class {constructor() { _class17.prototype.__init41.call(this); }
5100
- __init41() {this.accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css"}
5474
+ var SimpleTextAttachmentAdapter = (_class18 = class {constructor() { _class18.prototype.__init44.call(this); }
5475
+ __init44() {this.accept = "text/plain,text/html,text/markdown,text/csv,text/xml,text/json,text/css"}
5101
5476
  async add(state) {
5102
5477
  return {
5103
5478
  id: state.file.name,
@@ -5124,7 +5499,7 @@ ${await getFileText(attachment.file)}
5124
5499
  }
5125
5500
  async remove() {
5126
5501
  }
5127
- }, _class17);
5502
+ }, _class18);
5128
5503
  var getFileText = (file) => new Promise((resolve, reject) => {
5129
5504
  const reader = new FileReader();
5130
5505
  reader.onload = () => resolve(reader.result);
@@ -5225,7 +5600,7 @@ var ThreadConfigProvider = ({
5225
5600
  }) => {
5226
5601
  const hasAssistant = !!useAssistantRuntime({ optional: true });
5227
5602
  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 });
5228
- if (!_optionalChain([config, 'optionalAccess', _266 => _266.runtime])) return configProvider;
5603
+ if (!_optionalChain([config, 'optionalAccess', _283 => _283.runtime])) return configProvider;
5229
5604
  if (hasAssistant) {
5230
5605
  throw new Error(
5231
5606
  "You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
@@ -5553,7 +5928,7 @@ var AssistantMessageContent = _react.forwardRef.call(void 0, ({ components: comp
5553
5928
  {
5554
5929
  components: {
5555
5930
  ...componentsProp,
5556
- Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess', _267 => _267.Text]), () => ( components.Text)), () => ( content_part_default.Text)),
5931
+ Text: _nullishCoalesce(_nullishCoalesce(_optionalChain([componentsProp, 'optionalAccess', _284 => _284.Text]), () => ( components.Text)), () => ( content_part_default.Text)),
5557
5932
  tools: toolsComponents
5558
5933
  }
5559
5934
  }
@@ -5664,7 +6039,7 @@ var useAttachmentSrc = () => {
5664
6039
  const { file, src } = useAttachment((a) => {
5665
6040
  if (a.type !== "image") return {};
5666
6041
  if (a.file) return { file: a.file };
5667
- const src2 = _optionalChain([a, 'access', _268 => _268.content, 'optionalAccess', _269 => _269.filter, 'call', _270 => _270((c) => c.type === "image"), 'access', _271 => _271[0], 'optionalAccess', _272 => _272.image]);
6042
+ const src2 = _optionalChain([a, 'access', _285 => _285.content, 'optionalAccess', _286 => _286.filter, 'call', _287 => _287((c) => c.type === "image"), 'access', _288 => _288[0], 'optionalAccess', _289 => _289.image]);
5668
6043
  if (!src2) return {};
5669
6044
  return { src: src2 };
5670
6045
  });
@@ -5808,7 +6183,7 @@ var ComposerAttachments = ({ components }) => {
5808
6183
  {
5809
6184
  components: {
5810
6185
  ...components,
5811
- Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _273 => _273.Attachment]), () => ( attachment_default))
6186
+ Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _290 => _290.Attachment]), () => ( attachment_default))
5812
6187
  }
5813
6188
  }
5814
6189
  ) });
@@ -5917,8 +6292,13 @@ var ThreadWelcomeMessageStyled = withDefaults("p", {
5917
6292
  className: "aui-thread-welcome-message"
5918
6293
  });
5919
6294
  var ThreadWelcomeMessage = _react.forwardRef.call(void 0, ({ message: messageProp, ...rest }, ref) => {
5920
- const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
5921
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeMessageStyled, { ...rest, ref, children: _nullishCoalesce(messageProp, () => ( message)) });
6295
+ const {
6296
+ welcome: { message } = {},
6297
+ strings: {
6298
+ welcome: { message: defaultMessage = "How can I help you today?" } = {}
6299
+ } = {}
6300
+ } = useThreadConfig();
6301
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeMessageStyled, { ...rest, ref, children: _nullishCoalesce(_nullishCoalesce(messageProp, () => ( message)), () => ( defaultMessage)) });
5922
6302
  });
5923
6303
  ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
5924
6304
  var ThreadWelcomeSuggestionContainer = withDefaults("div", {
@@ -5936,7 +6316,7 @@ var ThreadWelcomeSuggestions = () => {
5936
6316
  const suggestions2 = useThread((t) => t.suggestions);
5937
6317
  const { welcome: { suggestions } = {} } = useThreadConfig();
5938
6318
  const finalSuggestions = suggestions2.length ? suggestions2 : suggestions;
5939
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([finalSuggestions, 'optionalAccess', _274 => _274.map, 'call', _275 => _275((suggestion, idx) => {
6319
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestionContainer, { children: _optionalChain([finalSuggestions, 'optionalAccess', _291 => _291.map, 'call', _292 => _292((suggestion, idx) => {
5940
6320
  const key = `${suggestion.prompt}-${idx}`;
5941
6321
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ThreadWelcomeSuggestion, { suggestion }, key);
5942
6322
  })]) });
@@ -6014,7 +6394,7 @@ var UserMessageContent = _react.forwardRef.call(void 0, ({ components, ...props
6014
6394
  {
6015
6395
  components: {
6016
6396
  ...components,
6017
- Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _276 => _276.Text]), () => ( content_part_default.Text))
6397
+ Text: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _293 => _293.Text]), () => ( content_part_default.Text))
6018
6398
  }
6019
6399
  }
6020
6400
  ) });
@@ -6031,7 +6411,7 @@ var UserMessageAttachments = ({
6031
6411
  {
6032
6412
  components: {
6033
6413
  ...components,
6034
- Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _277 => _277.Attachment]), () => ( attachment_default))
6414
+ Attachment: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _294 => _294.Attachment]), () => ( attachment_default))
6035
6415
  }
6036
6416
  }
6037
6417
  ) }) });
@@ -6134,10 +6514,10 @@ var ThreadMessages = ({ components, unstable_flexGrowDiv: flexGrowDiv = true, ..
6134
6514
  thread_exports.Messages,
6135
6515
  {
6136
6516
  components: {
6137
- UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _278 => _278.UserMessage]), () => ( user_message_default)),
6138
- EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _279 => _279.EditComposer]), () => ( edit_composer_default)),
6139
- AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _280 => _280.AssistantMessage]), () => ( assistant_message_default)),
6140
- SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _281 => _281.SystemMessage]), () => ( SystemMessage))
6517
+ UserMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _295 => _295.UserMessage]), () => ( user_message_default)),
6518
+ EditComposer: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _296 => _296.EditComposer]), () => ( edit_composer_default)),
6519
+ AssistantMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _297 => _297.AssistantMessage]), () => ( assistant_message_default)),
6520
+ SystemMessage: _nullishCoalesce(_optionalChain([components, 'optionalAccess', _298 => _298.SystemMessage]), () => ( SystemMessage))
6141
6521
  },
6142
6522
  ...rest
6143
6523
  }
@@ -6148,7 +6528,7 @@ var ThreadMessages = ({ components, unstable_flexGrowDiv: flexGrowDiv = true, ..
6148
6528
  ThreadMessages.displayName = "ThreadMessages";
6149
6529
  var ThreadFollowupSuggestions = () => {
6150
6530
  const suggestions = useThread((t) => t.suggestions);
6151
- 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', _282 => _282.map, 'call', _283 => _283((suggestion, idx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6531
+ 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', _299 => _299.map, 'call', _300 => _300((suggestion, idx) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
6152
6532
  thread_exports.Suggestion,
6153
6533
  {
6154
6534
  className: "aui-thread-followup-suggestion",
@@ -6381,5 +6761,7 @@ var assistant_modal_default = Object.assign(AssistantModal, exports12);
6381
6761
 
6382
6762
 
6383
6763
 
6384
- 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 = _chunkCYIFAX4Ujs.toCoreMessage; exports.toCoreMessages = _chunkCYIFAX4Ujs.toCoreMessages; exports.toLanguageModelMessages = _chunkCYIFAX4Ujs.toLanguageModelMessages; exports.toLanguageModelTools = _chunkCYIFAX4Ujs.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.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;
6764
+
6765
+
6766
+ 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.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;
6385
6767
  //# sourceMappingURL=index.js.map