@assistant-ui/react 0.5.81 → 0.5.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,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