@usecrow/ui 0.1.24 → 0.1.26

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.cjs CHANGED
@@ -73,10 +73,12 @@ function useChat({
73
73
  apiUrl = "",
74
74
  persistAnonymousConversations,
75
75
  welcomeMessage,
76
+ selectedModel: initialSelectedModel,
76
77
  onVerificationStatus,
77
78
  onConversationId,
78
79
  onWorkflowEvent,
79
80
  onToolCall,
81
+ onToolResult,
80
82
  onRestoredConversation
81
83
  }) {
82
84
  const effectiveWelcomeMessage = welcomeMessage || DEFAULT_WELCOME_MESSAGE;
@@ -91,9 +93,14 @@ function useChat({
91
93
  const [isLoading, setIsLoading] = React3.useState(false);
92
94
  const [activeToolCalls, setActiveToolCalls] = React3.useState([]);
93
95
  const [conversationId, setConversationId] = React3.useState(null);
94
- const [selectedModel, setSelectedModel] = React3.useState(DEFAULT_MODEL);
96
+ const [selectedModel, setSelectedModel] = React3.useState(initialSelectedModel || DEFAULT_MODEL);
95
97
  const abortControllerRef = React3.useRef(null);
96
98
  const hasCheckedPersistRef = React3.useRef(false);
99
+ React3.useEffect(() => {
100
+ if (initialSelectedModel) {
101
+ setSelectedModel((prev) => prev !== initialSelectedModel ? initialSelectedModel : prev);
102
+ }
103
+ }, [initialSelectedModel]);
97
104
  React3.useEffect(() => {
98
105
  if (messages.length === 1 && messages[0].id === "welcome" && !conversationId) {
99
106
  setMessages([
@@ -284,6 +291,11 @@ function useChat({
284
291
  );
285
292
  }
286
293
  break;
294
+ case "tool_result":
295
+ if (parsed.tool_name && parsed.result) {
296
+ onToolResult?.(parsed.tool_name, parsed.result);
297
+ }
298
+ break;
287
299
  case "client_tool_call":
288
300
  pendingClientTools.push({
289
301
  toolName: parsed.tool_name,
@@ -343,7 +355,7 @@ function useChat({
343
355
  abortControllerRef.current = null;
344
356
  }
345
357
  },
346
- [apiUrl, productId, conversationId, selectedModel, persistAnonymousConversations, onVerificationStatus, onConversationId, onWorkflowEvent, onToolCall]
358
+ [apiUrl, productId, conversationId, selectedModel, persistAnonymousConversations, onVerificationStatus, onConversationId, onWorkflowEvent, onToolCall, onToolResult]
347
359
  );
348
360
  const sendMessage = React3.useCallback(
349
361
  (content) => {
@@ -1128,6 +1140,9 @@ function useWidgetStyles({
1128
1140
  const [welcomeMessage, setWelcomeMessage] = React3.useState(
1129
1141
  styleCache.get(key)?.welcomeMessage ?? void 0
1130
1142
  );
1143
+ const [selectedModel, setSelectedModel] = React3.useState(
1144
+ styleCache.get(key)?.model ?? void 0
1145
+ );
1131
1146
  const hasFetchedRef = React3.useRef(false);
1132
1147
  const fetchStyles = async () => {
1133
1148
  if (skip) return;
@@ -1142,6 +1157,7 @@ function useWidgetStyles({
1142
1157
  setShowThinking(config.showThinking ?? true);
1143
1158
  setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1144
1159
  setWelcomeMessage(config.welcomeMessage ?? void 0);
1160
+ setSelectedModel(config.model ?? void 0);
1145
1161
  } catch (err) {
1146
1162
  console.error("[CrowWidget] Failed to fetch styles:", err);
1147
1163
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1159,6 +1175,7 @@ function useWidgetStyles({
1159
1175
  setShowThinking(cached.showThinking ?? true);
1160
1176
  setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1161
1177
  setWelcomeMessage(cached.welcomeMessage ?? void 0);
1178
+ setSelectedModel(cached.model ?? void 0);
1162
1179
  setIsLoading(false);
1163
1180
  return;
1164
1181
  }
@@ -1175,6 +1192,7 @@ function useWidgetStyles({
1175
1192
  showThinking,
1176
1193
  persistAnonymousConversations,
1177
1194
  welcomeMessage,
1195
+ selectedModel,
1178
1196
  refetch: fetchStyles
1179
1197
  };
1180
1198
  }
@@ -2761,7 +2779,8 @@ function CrowWidget({
2761
2779
  welcomeMessage: welcomeMessageProp,
2762
2780
  onReady,
2763
2781
  onIdentify,
2764
- tools
2782
+ tools,
2783
+ onToolResult
2765
2784
  }) {
2766
2785
  const {
2767
2786
  styles,
@@ -2770,7 +2789,8 @@ function CrowWidget({
2770
2789
  browserUseEnabled,
2771
2790
  showThinking: showThinkingFromAPI,
2772
2791
  persistAnonymousConversations,
2773
- welcomeMessage: welcomeMessageFromAPI
2792
+ welcomeMessage: welcomeMessageFromAPI,
2793
+ selectedModel: selectedModelFromAPI
2774
2794
  } = useWidgetStyles({
2775
2795
  productId,
2776
2796
  apiUrl,
@@ -2779,6 +2799,7 @@ function CrowWidget({
2779
2799
  });
2780
2800
  const agentName = agentNameProp ?? agentNameFromAPI;
2781
2801
  const welcomeMessage = welcomeMessageProp ?? welcomeMessageFromAPI;
2802
+ const selectedModel = selectedModelFromAPI ?? DEFAULT_MODEL;
2782
2803
  const showThinking = showThinkingProp ?? showThinkingFromAPI;
2783
2804
  const [autoTools, setAutoTools] = React3.useState({});
2784
2805
  const cssVars = stylesToCssVars(styles);
@@ -2801,7 +2822,7 @@ function CrowWidget({
2801
2822
  productId,
2802
2823
  apiUrl,
2803
2824
  conversationId: null,
2804
- selectedModel: DEFAULT_MODEL
2825
+ selectedModel
2805
2826
  });
2806
2827
  const conversations = useConversations({ productId, apiUrl });
2807
2828
  const [shouldRestoreHistory, setShouldRestoreHistory] = React3.useState(false);
@@ -2811,6 +2832,7 @@ function CrowWidget({
2811
2832
  apiUrl,
2812
2833
  persistAnonymousConversations,
2813
2834
  welcomeMessage,
2835
+ selectedModel,
2814
2836
  onVerificationStatus: (isVerified) => {
2815
2837
  setIsVerifiedUser(isVerified);
2816
2838
  },
@@ -2836,6 +2858,7 @@ function CrowWidget({
2836
2858
  break;
2837
2859
  }
2838
2860
  },
2861
+ onToolResult,
2839
2862
  onToolCall: async (event) => {
2840
2863
  if (event.type === "client_call" && event.toolName && event.toolCallId) {
2841
2864
  try {
@@ -3275,7 +3298,8 @@ function CrowCopilot({
3275
3298
  styles: propStyles,
3276
3299
  previewMode = false,
3277
3300
  className,
3278
- onReady
3301
+ onReady,
3302
+ onToolResult
3279
3303
  }) {
3280
3304
  const {
3281
3305
  styles,
@@ -3316,6 +3340,7 @@ function CrowCopilot({
3316
3340
  },
3317
3341
  onConversationId: () => {
3318
3342
  },
3343
+ onToolResult,
3319
3344
  onToolCall: (event) => {
3320
3345
  if (event.type === "client_call" && event.toolName) {
3321
3346
  console.log(