@assistant-ui/react 0.5.1 → 0.5.2

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.d.mts CHANGED
@@ -204,17 +204,33 @@ declare abstract class BaseAssistantRuntime<TThreadRuntime extends ReactThreadRu
204
204
  private subscriptionHandler;
205
205
  }
206
206
 
207
+ type TextContentPartProps = {
208
+ part: TextContentPart;
209
+ status: ContentPartStatus;
210
+ };
211
+ type TextContentPartComponent = ComponentType<TextContentPartProps>;
212
+ type ImageContentPartProps = {
213
+ part: ImageContentPart;
214
+ status: ContentPartStatus;
215
+ };
216
+ type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
217
+ type UIContentPartProps = {
218
+ part: UIContentPart;
219
+ status: ContentPartStatus;
220
+ };
221
+ type UIContentPartComponent = ComponentType<UIContentPartProps>;
222
+ type ToolCallContentPartProps<TArgs extends Record<string, unknown> = any, TResult = unknown> = {
223
+ part: ToolCallContentPart<TArgs, TResult>;
224
+ status: ToolContentPartStatus;
225
+ addResult: (result: any) => void;
226
+ };
227
+ type ToolCallContentPartComponent<TArgs extends Record<string, unknown> = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
228
+
207
229
  type LocalRuntimeOptions = {
208
230
  initialMessages?: readonly CoreMessage[] | undefined;
209
231
  maxToolRoundtrips?: number;
210
232
  };
211
- declare class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {
212
- private readonly _proxyConfigProvider;
213
- constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions);
214
- set adapter(adapter: ChatModelAdapter);
215
- registerModelConfigProvider(provider: ModelConfigProvider): () => void;
216
- switchToThread(threadId: string | null): LocalThreadRuntime;
217
- }
233
+
218
234
  declare class LocalThreadRuntime implements ThreadRuntime {
219
235
  private configProvider;
220
236
  adapter: ChatModelAdapter;
@@ -242,32 +258,18 @@ declare class LocalThreadRuntime implements ThreadRuntime {
242
258
  addToolResult({ messageId, toolCallId, result }: AddToolResultOptions): void;
243
259
  }
244
260
 
261
+ declare class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {
262
+ private readonly _proxyConfigProvider;
263
+ constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions);
264
+ set adapter(adapter: ChatModelAdapter);
265
+ registerModelConfigProvider(provider: ModelConfigProvider): () => void;
266
+ switchToThread(threadId: string | null): LocalThreadRuntime;
267
+ }
268
+
245
269
  declare const useLocalRuntime: (adapter: ChatModelAdapter, options?: LocalRuntimeOptions) => LocalRuntime;
246
270
 
247
271
  declare function toLanguageModelMessages(message: readonly CoreMessage[] | readonly ThreadMessage[]): LanguageModelV1Message[];
248
272
 
249
- type TextContentPartProps = {
250
- part: TextContentPart;
251
- status: ContentPartStatus;
252
- };
253
- type TextContentPartComponent = ComponentType<TextContentPartProps>;
254
- type ImageContentPartProps = {
255
- part: ImageContentPart;
256
- status: ContentPartStatus;
257
- };
258
- type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
259
- type UIContentPartProps = {
260
- part: UIContentPart;
261
- status: ContentPartStatus;
262
- };
263
- type UIContentPartComponent = ComponentType<UIContentPartProps>;
264
- type ToolCallContentPartProps<TArgs extends Record<string, unknown> = any, TResult = unknown> = {
265
- part: ToolCallContentPart<TArgs, TResult>;
266
- status: ToolContentPartStatus;
267
- addResult: (result: any) => void;
268
- };
269
- type ToolCallContentPartComponent<TArgs extends Record<string, unknown> = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
270
-
271
273
  type fromLanguageModelMessagesOptions = {
272
274
  mergeRoundtrips: boolean;
273
275
  };
package/dist/index.d.ts CHANGED
@@ -204,17 +204,33 @@ declare abstract class BaseAssistantRuntime<TThreadRuntime extends ReactThreadRu
204
204
  private subscriptionHandler;
205
205
  }
206
206
 
207
+ type TextContentPartProps = {
208
+ part: TextContentPart;
209
+ status: ContentPartStatus;
210
+ };
211
+ type TextContentPartComponent = ComponentType<TextContentPartProps>;
212
+ type ImageContentPartProps = {
213
+ part: ImageContentPart;
214
+ status: ContentPartStatus;
215
+ };
216
+ type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
217
+ type UIContentPartProps = {
218
+ part: UIContentPart;
219
+ status: ContentPartStatus;
220
+ };
221
+ type UIContentPartComponent = ComponentType<UIContentPartProps>;
222
+ type ToolCallContentPartProps<TArgs extends Record<string, unknown> = any, TResult = unknown> = {
223
+ part: ToolCallContentPart<TArgs, TResult>;
224
+ status: ToolContentPartStatus;
225
+ addResult: (result: any) => void;
226
+ };
227
+ type ToolCallContentPartComponent<TArgs extends Record<string, unknown> = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
228
+
207
229
  type LocalRuntimeOptions = {
208
230
  initialMessages?: readonly CoreMessage[] | undefined;
209
231
  maxToolRoundtrips?: number;
210
232
  };
211
- declare class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {
212
- private readonly _proxyConfigProvider;
213
- constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions);
214
- set adapter(adapter: ChatModelAdapter);
215
- registerModelConfigProvider(provider: ModelConfigProvider): () => void;
216
- switchToThread(threadId: string | null): LocalThreadRuntime;
217
- }
233
+
218
234
  declare class LocalThreadRuntime implements ThreadRuntime {
219
235
  private configProvider;
220
236
  adapter: ChatModelAdapter;
@@ -242,32 +258,18 @@ declare class LocalThreadRuntime implements ThreadRuntime {
242
258
  addToolResult({ messageId, toolCallId, result }: AddToolResultOptions): void;
243
259
  }
244
260
 
261
+ declare class LocalRuntime extends BaseAssistantRuntime<LocalThreadRuntime> {
262
+ private readonly _proxyConfigProvider;
263
+ constructor(adapter: ChatModelAdapter, options?: LocalRuntimeOptions);
264
+ set adapter(adapter: ChatModelAdapter);
265
+ registerModelConfigProvider(provider: ModelConfigProvider): () => void;
266
+ switchToThread(threadId: string | null): LocalThreadRuntime;
267
+ }
268
+
245
269
  declare const useLocalRuntime: (adapter: ChatModelAdapter, options?: LocalRuntimeOptions) => LocalRuntime;
246
270
 
247
271
  declare function toLanguageModelMessages(message: readonly CoreMessage[] | readonly ThreadMessage[]): LanguageModelV1Message[];
248
272
 
249
- type TextContentPartProps = {
250
- part: TextContentPart;
251
- status: ContentPartStatus;
252
- };
253
- type TextContentPartComponent = ComponentType<TextContentPartProps>;
254
- type ImageContentPartProps = {
255
- part: ImageContentPart;
256
- status: ContentPartStatus;
257
- };
258
- type ImageContentPartComponent = ComponentType<ImageContentPartProps>;
259
- type UIContentPartProps = {
260
- part: UIContentPart;
261
- status: ContentPartStatus;
262
- };
263
- type UIContentPartComponent = ComponentType<UIContentPartProps>;
264
- type ToolCallContentPartProps<TArgs extends Record<string, unknown> = any, TResult = unknown> = {
265
- part: ToolCallContentPart<TArgs, TResult>;
266
- status: ToolContentPartStatus;
267
- addResult: (result: any) => void;
268
- };
269
- type ToolCallContentPartComponent<TArgs extends Record<string, unknown> = any, TResult = any> = ComponentType<ToolCallContentPartProps<TArgs, TResult>>;
270
-
271
273
  type fromLanguageModelMessagesOptions = {
272
274
  mergeRoundtrips: boolean;
273
275
  };
package/dist/index.js CHANGED
@@ -1267,7 +1267,7 @@ var COMPLETE_STATUS = {
1267
1267
  };
1268
1268
  var toContentPartStatus = (message, partIndex, part) => {
1269
1269
  if (message.role !== "assistant") return COMPLETE_STATUS;
1270
- const isLastPart = partIndex === message.content.length - 1;
1270
+ const isLastPart = partIndex === Math.max(0, message.content.length - 1);
1271
1271
  if (part.type !== "tool-call") {
1272
1272
  if ("reason" in message.status && message.status.reason === "tool-calls" && isLastPart)
1273
1273
  throw new Error(
@@ -1280,9 +1280,16 @@ var toContentPartStatus = (message, partIndex, part) => {
1280
1280
  }
1281
1281
  return message.status;
1282
1282
  };
1283
+ var EMPTY_CONTENT = Object.freeze({ type: "text", text: "" });
1283
1284
  var syncContentPart = ({ message }, useContentPart, partIndex) => {
1284
- const part = message.content[partIndex];
1285
- if (!part) return;
1285
+ let part = message.content[partIndex];
1286
+ if (!part) {
1287
+ if (message.content.length === 0 && partIndex === 0) {
1288
+ part = EMPTY_CONTENT;
1289
+ } else {
1290
+ return;
1291
+ }
1292
+ }
1286
1293
  const status = toContentPartStatus(message, partIndex, part);
1287
1294
  const currentState = useContentPart.getState();
1288
1295
  if (currentState.part === part && currentState.status === status) return;
@@ -1408,7 +1415,7 @@ var ContentPartPrimitiveText = (0, import_react36.forwardRef)(({ smooth = true,
1408
1415
  part: { text }
1409
1416
  } = useContentPartText();
1410
1417
  const smoothText = useSmooth(text, smooth);
1411
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_primitive4.Primitive.span, { "data-status": status, ...rest, ref: forwardedRef, children: smoothText });
1418
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_primitive4.Primitive.span, { "data-status": status.type, ...rest, ref: forwardedRef, children: smoothText });
1412
1419
  });
1413
1420
  ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
1414
1421
 
@@ -1514,7 +1521,7 @@ var MessagePrimitiveContent = ({
1514
1521
  components
1515
1522
  }) => {
1516
1523
  const { useMessage } = useMessageContext();
1517
- const contentLength = useMessage((s) => s.message.content.length);
1524
+ const contentLength = useMessage((s) => s.message.content.length) || 1;
1518
1525
  return new Array(contentLength).fill(null).map((_, idx) => {
1519
1526
  const partIndex = idx;
1520
1527
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
@@ -1811,7 +1818,7 @@ var useThreadViewportAutoScroll = ({
1811
1818
  const div = divRef.current;
1812
1819
  if (!div) return;
1813
1820
  const isAtBottom = useViewport.getState().isAtBottom;
1814
- const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight;
1821
+ const newIsAtBottom = div.scrollHeight - div.scrollTop <= div.clientHeight + 1;
1815
1822
  if (!newIsAtBottom && lastScrollTop.current < div.scrollTop) {
1816
1823
  } else {
1817
1824
  if (newIsAtBottom) {
@@ -2047,26 +2054,6 @@ var ThreadPrimitiveSuggestion = createActionButton(
2047
2054
  // src/runtimes/local/useLocalRuntime.tsx
2048
2055
  var import_react54 = require("react");
2049
2056
 
2050
- // src/utils/idUtils.tsx
2051
- var import_non_secure = require("nanoid/non-secure");
2052
- var generateId = (0, import_non_secure.customAlphabet)(
2053
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
2054
- 7
2055
- );
2056
- var optimisticPrefix = "__optimistic__";
2057
- var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
2058
-
2059
- // src/internal.ts
2060
- var internal_exports = {};
2061
- __export(internal_exports, {
2062
- BaseAssistantRuntime: () => BaseAssistantRuntime,
2063
- MessageRepository: () => MessageRepository,
2064
- ProxyConfigProvider: () => ProxyConfigProvider,
2065
- TooltipIconButton: () => TooltipIconButton,
2066
- generateId: () => generateId,
2067
- useSmooth: () => useSmooth
2068
- });
2069
-
2070
2057
  // src/runtimes/core/BaseAssistantRuntime.tsx
2071
2058
  var BaseAssistantRuntime = class {
2072
2059
  constructor(_thread) {
@@ -2090,99 +2077,25 @@ var BaseAssistantRuntime = class {
2090
2077
  };
2091
2078
  };
2092
2079
 
2093
- // src/ui/base/tooltip-icon-button.tsx
2094
- var import_react52 = require("react");
2095
-
2096
- // src/ui/base/tooltip.tsx
2097
- var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
2098
-
2099
- // src/ui/utils/withDefaults.tsx
2100
- var import_react50 = require("react");
2101
- var import_classnames = __toESM(require("classnames"));
2102
- var import_jsx_runtime25 = require("react/jsx-runtime");
2103
- var withDefaultProps = ({
2104
- className,
2105
- ...defaultProps
2106
- }) => ({ className: classNameProp, ...props }) => {
2107
- return {
2108
- className: (0, import_classnames.default)(className, classNameProp),
2109
- ...defaultProps,
2110
- ...props
2111
- };
2112
- };
2113
- var withDefaults = (Component, defaultProps) => {
2114
- const getProps = withDefaultProps(defaultProps);
2115
- const WithDefaults = (0, import_react50.forwardRef)(
2116
- (props, ref) => {
2117
- const ComponentAsAny = Component;
2118
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ComponentAsAny, { ...getProps(props), ref });
2119
- }
2120
- );
2121
- WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
2122
- return WithDefaults;
2123
- };
2124
-
2125
- // src/ui/base/tooltip.tsx
2126
- var import_jsx_runtime26 = require("react/jsx-runtime");
2127
- var Tooltip = (props) => {
2128
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipPrimitive.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipPrimitive.Root, { ...props }) });
2129
- };
2130
- Tooltip.displayName = "Tooltip";
2131
- var TooltipTrigger = TooltipPrimitive.Trigger;
2132
- var TooltipContent = withDefaults(TooltipPrimitive.Content, {
2133
- sideOffset: 4,
2134
- className: "aui-tooltip-content"
2080
+ // src/internal.ts
2081
+ var internal_exports = {};
2082
+ __export(internal_exports, {
2083
+ BaseAssistantRuntime: () => BaseAssistantRuntime,
2084
+ MessageRepository: () => MessageRepository,
2085
+ ProxyConfigProvider: () => ProxyConfigProvider,
2086
+ TooltipIconButton: () => TooltipIconButton,
2087
+ generateId: () => generateId,
2088
+ useSmooth: () => useSmooth
2135
2089
  });
2136
- TooltipContent.displayName = "TooltipContent";
2137
2090
 
2138
- // src/ui/base/button.tsx
2139
- var import_class_variance_authority = require("class-variance-authority");
2140
- var import_react_primitive11 = require("@radix-ui/react-primitive");
2141
- var import_react51 = require("react");
2142
- var import_jsx_runtime27 = require("react/jsx-runtime");
2143
- var buttonVariants = (0, import_class_variance_authority.cva)("aui-button", {
2144
- variants: {
2145
- variant: {
2146
- default: "aui-button-primary",
2147
- outline: "aui-button-outline",
2148
- ghost: "aui-button-ghost"
2149
- },
2150
- size: {
2151
- default: "aui-button-medium",
2152
- icon: "aui-button-icon"
2153
- }
2154
- },
2155
- defaultVariants: {
2156
- variant: "default",
2157
- size: "default"
2158
- }
2159
- });
2160
- var Button = (0, import_react51.forwardRef)(
2161
- ({ className, variant, size, ...props }, ref) => {
2162
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2163
- import_react_primitive11.Primitive.button,
2164
- {
2165
- className: buttonVariants({ variant, size, className }),
2166
- ...props,
2167
- ref
2168
- }
2169
- );
2170
- }
2091
+ // src/utils/idUtils.tsx
2092
+ var import_non_secure = require("nanoid/non-secure");
2093
+ var generateId = (0, import_non_secure.customAlphabet)(
2094
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
2095
+ 7
2171
2096
  );
2172
- Button.displayName = "Button";
2173
-
2174
- // src/ui/base/tooltip-icon-button.tsx
2175
- var import_jsx_runtime28 = require("react/jsx-runtime");
2176
- var TooltipIconButton = (0, import_react52.forwardRef)(({ children, tooltip, side = "bottom", ...rest }, ref) => {
2177
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Tooltip, { children: [
2178
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
2179
- children,
2180
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "aui-sr-only", children: tooltip })
2181
- ] }) }),
2182
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { side, children: tooltip })
2183
- ] });
2184
- });
2185
- TooltipIconButton.displayName = "TooltipIconButton";
2097
+ var optimisticPrefix = "__optimistic__";
2098
+ var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
2186
2099
 
2187
2100
  // src/runtimes/edge/converters/fromCoreMessage.ts
2188
2101
  var fromCoreMessages = (message) => {
@@ -2395,6 +2308,100 @@ var MessageRepository = class {
2395
2308
  }
2396
2309
  };
2397
2310
 
2311
+ // src/ui/base/tooltip-icon-button.tsx
2312
+ var import_react52 = require("react");
2313
+
2314
+ // src/ui/base/tooltip.tsx
2315
+ var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"));
2316
+
2317
+ // src/ui/utils/withDefaults.tsx
2318
+ var import_react50 = require("react");
2319
+ var import_classnames = __toESM(require("classnames"));
2320
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2321
+ var withDefaultProps = ({
2322
+ className,
2323
+ ...defaultProps
2324
+ }) => ({ className: classNameProp, ...props }) => {
2325
+ return {
2326
+ className: (0, import_classnames.default)(className, classNameProp),
2327
+ ...defaultProps,
2328
+ ...props
2329
+ };
2330
+ };
2331
+ var withDefaults = (Component, defaultProps) => {
2332
+ const getProps = withDefaultProps(defaultProps);
2333
+ const WithDefaults = (0, import_react50.forwardRef)(
2334
+ (props, ref) => {
2335
+ const ComponentAsAny = Component;
2336
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ComponentAsAny, { ...getProps(props), ref });
2337
+ }
2338
+ );
2339
+ WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
2340
+ return WithDefaults;
2341
+ };
2342
+
2343
+ // src/ui/base/tooltip.tsx
2344
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2345
+ var Tooltip = (props) => {
2346
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipPrimitive.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipPrimitive.Root, { ...props }) });
2347
+ };
2348
+ Tooltip.displayName = "Tooltip";
2349
+ var TooltipTrigger = TooltipPrimitive.Trigger;
2350
+ var TooltipContent = withDefaults(TooltipPrimitive.Content, {
2351
+ sideOffset: 4,
2352
+ className: "aui-tooltip-content"
2353
+ });
2354
+ TooltipContent.displayName = "TooltipContent";
2355
+
2356
+ // src/ui/base/button.tsx
2357
+ var import_class_variance_authority = require("class-variance-authority");
2358
+ var import_react_primitive11 = require("@radix-ui/react-primitive");
2359
+ var import_react51 = require("react");
2360
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2361
+ var buttonVariants = (0, import_class_variance_authority.cva)("aui-button", {
2362
+ variants: {
2363
+ variant: {
2364
+ default: "aui-button-primary",
2365
+ outline: "aui-button-outline",
2366
+ ghost: "aui-button-ghost"
2367
+ },
2368
+ size: {
2369
+ default: "aui-button-medium",
2370
+ icon: "aui-button-icon"
2371
+ }
2372
+ },
2373
+ defaultVariants: {
2374
+ variant: "default",
2375
+ size: "default"
2376
+ }
2377
+ });
2378
+ var Button = (0, import_react51.forwardRef)(
2379
+ ({ className, variant, size, ...props }, ref) => {
2380
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2381
+ import_react_primitive11.Primitive.button,
2382
+ {
2383
+ className: buttonVariants({ variant, size, className }),
2384
+ ...props,
2385
+ ref
2386
+ }
2387
+ );
2388
+ }
2389
+ );
2390
+ Button.displayName = "Button";
2391
+
2392
+ // src/ui/base/tooltip-icon-button.tsx
2393
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2394
+ var TooltipIconButton = (0, import_react52.forwardRef)(({ children, tooltip, side = "bottom", ...rest }, ref) => {
2395
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Tooltip, { children: [
2396
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
2397
+ children,
2398
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "aui-sr-only", children: tooltip })
2399
+ ] }) }),
2400
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { side, children: tooltip })
2401
+ ] });
2402
+ });
2403
+ TooltipIconButton.displayName = "TooltipIconButton";
2404
+
2398
2405
  // src/runtimes/edge/converters/toLanguageModelMessages.ts
2399
2406
  var assistantMessageSplitter = () => {
2400
2407
  const stash = [];
@@ -3427,31 +3434,10 @@ var useEdgeRuntime = ({
3427
3434
  return useLocalRuntime(adapter, { initialMessages });
3428
3435
  };
3429
3436
 
3430
- // src/runtimes/local/LocalRuntime.tsx
3437
+ // src/runtimes/local/shouldContinue.tsx
3431
3438
  var shouldContinue = (result) => result.status?.type === "requires-action" && result.status.reason === "tool-calls" && result.content.every((c) => c.type !== "tool-call" || !!c.result);
3432
- var LocalRuntime = class extends BaseAssistantRuntime {
3433
- _proxyConfigProvider;
3434
- constructor(adapter, options) {
3435
- const proxyConfigProvider = new ProxyConfigProvider();
3436
- super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));
3437
- this._proxyConfigProvider = proxyConfigProvider;
3438
- }
3439
- set adapter(adapter) {
3440
- this.thread.adapter = adapter;
3441
- }
3442
- registerModelConfigProvider(provider) {
3443
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
3444
- }
3445
- switchToThread(threadId) {
3446
- if (threadId) {
3447
- throw new Error("LocalRuntime does not yet support switching threads");
3448
- }
3449
- return this.thread = new LocalThreadRuntime(
3450
- this._proxyConfigProvider,
3451
- this.thread.adapter
3452
- );
3453
- }
3454
- };
3439
+
3440
+ // src/runtimes/local/LocalThreadRuntime.tsx
3455
3441
  var CAPABILITIES = Object.freeze({
3456
3442
  edit: true,
3457
3443
  reload: true,
@@ -3511,7 +3497,7 @@ var LocalThreadRuntime = class {
3511
3497
  id,
3512
3498
  role: "assistant",
3513
3499
  status: { type: "running" },
3514
- content: [{ type: "text", text: "" }],
3500
+ content: [],
3515
3501
  createdAt: /* @__PURE__ */ new Date()
3516
3502
  };
3517
3503
  do {
@@ -3623,6 +3609,31 @@ var LocalThreadRuntime = class {
3623
3609
  }
3624
3610
  };
3625
3611
 
3612
+ // src/runtimes/local/LocalRuntime.tsx
3613
+ var LocalRuntime = class extends BaseAssistantRuntime {
3614
+ _proxyConfigProvider;
3615
+ constructor(adapter, options) {
3616
+ const proxyConfigProvider = new ProxyConfigProvider();
3617
+ super(new LocalThreadRuntime(proxyConfigProvider, adapter, options));
3618
+ this._proxyConfigProvider = proxyConfigProvider;
3619
+ }
3620
+ set adapter(adapter) {
3621
+ this.thread.adapter = adapter;
3622
+ }
3623
+ registerModelConfigProvider(provider) {
3624
+ return this._proxyConfigProvider.registerModelConfigProvider(provider);
3625
+ }
3626
+ switchToThread(threadId) {
3627
+ if (threadId) {
3628
+ throw new Error("LocalRuntime does not yet support switching threads");
3629
+ }
3630
+ return this.thread = new LocalThreadRuntime(
3631
+ this._proxyConfigProvider,
3632
+ this.thread.adapter
3633
+ );
3634
+ }
3635
+ };
3636
+
3626
3637
  // src/runtimes/local/useLocalRuntime.tsx
3627
3638
  var useLocalRuntime = (adapter, options) => {
3628
3639
  const [runtime] = (0, import_react54.useState)(() => new LocalRuntime(adapter, options));