@meetsmore-oss/use-ai-client 1.14.1 → 1.15.0

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.ts CHANGED
@@ -324,6 +324,18 @@ interface UseAIConfig {
324
324
  /** The WebSocket URL of the UseAI server */
325
325
  serverUrl: string;
326
326
  }
327
+ /**
328
+ * Toggles for optional chat UI features. Each feature defaults to enabled
329
+ * when its flag is omitted, so set a flag to false to opt out of that feature.
330
+ */
331
+ interface EnabledFeatures {
332
+ /**
333
+ * The "save as slash command" UI (hover save button + inline save editor)
334
+ * on user messages. Saved-command autocomplete via "/" is unaffected.
335
+ * @default true
336
+ */
337
+ slashCommands?: boolean;
338
+ }
327
339
 
328
340
  /**
329
341
  * Handler for AG-UI events from the server.
@@ -1584,6 +1596,13 @@ interface UseAIProviderProps extends UseAIConfig {
1584
1596
  * Defaults to LocalStorageCommandRepository if not provided.
1585
1597
  */
1586
1598
  commandRepository?: CommandRepository;
1599
+ /**
1600
+ * Opt-out toggles for optional chat UI features. Each feature defaults to
1601
+ * enabled, so only set a flag to false to hide it. For example, set
1602
+ * `{ slashCommands: false }` to hide the "save as slash command" UI while
1603
+ * keeping "/" autocomplete for existing saved commands.
1604
+ */
1605
+ enabledFeatures?: EnabledFeatures;
1587
1606
  /**
1588
1607
  * Whether to render the built-in chat UI (floating button + panel).
1589
1608
  * Set to false when using the `<UseAIChat>` component to control chat placement.
@@ -1695,7 +1714,7 @@ interface UseAIProviderProps extends UseAIConfig {
1695
1714
  * }
1696
1715
  * ```
1697
1716
  */
1698
- declare function UseAIProvider({ serverUrl, children, systemPrompt, CustomButton, CustomChat, chatRepository, forwardedPropsProvider, fileUploadConfig: fileUploadConfigProp, commandRepository, renderChat, theme: customTheme, strings: customStrings, visibleAgentIds, onOpenChange, submitMode, }: UseAIProviderProps): react_jsx_runtime.JSX.Element;
1717
+ declare function UseAIProvider({ serverUrl, children, systemPrompt, CustomButton, CustomChat, chatRepository, forwardedPropsProvider, fileUploadConfig: fileUploadConfigProp, commandRepository, enabledFeatures, renderChat, theme: customTheme, strings: customStrings, visibleAgentIds, onOpenChange, submitMode, }: UseAIProviderProps): react_jsx_runtime.JSX.Element;
1699
1718
  /**
1700
1719
  * Hook to access the UseAI context.
1701
1720
  * When used outside a UseAIProvider, returns a no-op context and logs a warning.
@@ -1744,6 +1763,13 @@ interface UseAIChatPanelProps {
1744
1763
  fileProcessing?: FileProcessingState | null;
1745
1764
  commands?: SavedCommand[];
1746
1765
  onSaveCommand?: (name: string, text: string) => Promise<string>;
1766
+ /**
1767
+ * Opt-out toggles for optional chat UI features. Each feature defaults to
1768
+ * enabled when omitted. `slashCommands` controls the "save as slash command"
1769
+ * UI (hover save button + inline editor); saved-command autocomplete is
1770
+ * unaffected.
1771
+ */
1772
+ enabledFeatures?: EnabledFeatures;
1747
1773
  onRenameCommand?: (id: string, newName: string) => Promise<void>;
1748
1774
  onDeleteCommand?: (id: string) => Promise<void>;
1749
1775
  /** Optional close button to render in header (for floating mode) */
@@ -1786,7 +1812,7 @@ interface UseAIChatPanelProps {
1786
1812
  * Chat panel content - fills its container.
1787
1813
  * Use directly for embedded mode, or wrap with UseAIFloatingChatWrapper for floating mode.
1788
1814
  */
1789
- declare function UseAIChatPanel({ onSendMessage, onAbort, messages, loading, connected, streamingText, streamingReasoning, currentChatId, onNewChat, onLoadChat, onDeleteChat, onListChats, onGetChat, suggestions, availableAgents, defaultAgent, selectedAgent, onAgentChange, fileUploadConfig, fileProcessing, commands, onSaveCommand, onRenameCommand, onDeleteCommand, closeButton, executingTool, feedbackEnabled, onFeedback, pendingApprovals, onApproveToolCall, onRejectToolCall, submitMode, }: UseAIChatPanelProps): react_jsx_runtime.JSX.Element;
1815
+ declare function UseAIChatPanel({ onSendMessage, onAbort, messages, loading, connected, streamingText, streamingReasoning, currentChatId, onNewChat, onLoadChat, onDeleteChat, onListChats, onGetChat, suggestions, availableAgents, defaultAgent, selectedAgent, onAgentChange, fileUploadConfig, fileProcessing, commands, onSaveCommand, enabledFeatures, onRenameCommand, onDeleteCommand, closeButton, executingTool, feedbackEnabled, onFeedback, pendingApprovals, onApproveToolCall, onRejectToolCall, submitMode, }: UseAIChatPanelProps): react_jsx_runtime.JSX.Element;
1790
1816
 
1791
1817
  /**
1792
1818
  * Props for the floating chat wrapper.
@@ -2612,4 +2638,4 @@ interface UseDropdownStateOptions {
2612
2638
  */
2613
2639
  declare function useDropdownState(options?: UseDropdownStateOptions): UseDropdownStateReturn;
2614
2640
 
2615
- export { type AgentContextValue, type Chat, type ChatContextValue, type ChatMetadata, type ChatPanelProps, type ChatRepository, CloseButton, type CommandContextValue, type CommandRepository, type CreateChatOptions, type CreateCommandOptions, DEFAULT_MAX_FILE_SIZE, type DefinedTool, type DropZoneProps, EmbedFileUploadBackend, type ExecutingToolDisplay, type FileAttachment, type FileProcessingState, type FileProcessingStatus, type FileTransformer, type FileTransformerContext, type FileTransformerMap, type FileUploadBackend, type FileUploadConfig, type FloatingButtonProps, type InlineSaveProps, type ListChatsOptions, type ListCommandsOptions, LocalStorageChatRepository, LocalStorageCommandRepository, type Message, type PendingToolApproval, type PersistedContentPart, type PersistedFileContent, type PersistedFileMetadata, type PersistedMessage, type PersistedMessageContent, type PersistedTextContent, type ProcessAttachmentsConfig, type PromptsContextValue, type RegisterToolsOptions, type SavedCommand, type SendMessageOptions, type SubmitMode, type ToolExecutionContext, type ToolOptions, type ToolRegistryContextValue, type ToolsDefinition, type TriggerWorkflowOptions, UseAIChat, UseAIChatPanel, type UseAIChatPanelProps, type UseAIChatPanelStrings, type UseAIChatPanelTheme, type UseAIChatProps, UseAIClient, type UseAIConfig, type UseAIContextValue, UseAIFloatingButton, UseAIFloatingChatWrapper, type UseAIOptions, UseAIProvider, type UseAIProviderProps, type UseAIResult, type UseAIStrings, type UseAITheme, type UseAIWorkflowResult, type UseAgentSelectionOptions, type UseAgentSelectionReturn, type UseChatManagementOptions, type UseChatManagementReturn, type UseCommandManagementOptions, type UseCommandManagementReturn, type UseDropdownStateOptions, type UseDropdownStateReturn, type UseFeedbackOptions, type UseFeedbackReturn, type UseFileUploadOptions, type UseFileUploadReturn, type UseMessageQueueOptions, type UseMessageQueueReturn, type UsePromptStateOptions, type UsePromptStateReturn, type UseServerEventsOptions, type UseServerEventsReturn, type UseSlashCommandsOptions, type UseSlashCommandsReturn, type UseToolSystemOptions, type UseToolSystemReturn, type WorkflowProgress, clearTransformationCache, convertToolsToDefinitions, defaultStrings, defaultTheme, defineTool, executeDefinedTool, findTransformerPattern, generateChatId, generateCommandId, generateMessageId, matchesMimeType, processAttachments, useAI, useAIContext, useAIWorkflow, useAgentSelection, useChatManagement, useCommandManagement, useDropdownState, useFeedback, useFileUpload, useMessageQueue, usePromptState, useServerEvents, useSlashCommands, useStableTools, useStrings, useTheme, useToolSystem, validateCommandName };
2641
+ export { type AgentContextValue, type Chat, type ChatContextValue, type ChatMetadata, type ChatPanelProps, type ChatRepository, CloseButton, type CommandContextValue, type CommandRepository, type CreateChatOptions, type CreateCommandOptions, DEFAULT_MAX_FILE_SIZE, type DefinedTool, type DropZoneProps, EmbedFileUploadBackend, type EnabledFeatures, type ExecutingToolDisplay, type FileAttachment, type FileProcessingState, type FileProcessingStatus, type FileTransformer, type FileTransformerContext, type FileTransformerMap, type FileUploadBackend, type FileUploadConfig, type FloatingButtonProps, type InlineSaveProps, type ListChatsOptions, type ListCommandsOptions, LocalStorageChatRepository, LocalStorageCommandRepository, type Message, type PendingToolApproval, type PersistedContentPart, type PersistedFileContent, type PersistedFileMetadata, type PersistedMessage, type PersistedMessageContent, type PersistedTextContent, type ProcessAttachmentsConfig, type PromptsContextValue, type RegisterToolsOptions, type SavedCommand, type SendMessageOptions, type SubmitMode, type ToolExecutionContext, type ToolOptions, type ToolRegistryContextValue, type ToolsDefinition, type TriggerWorkflowOptions, UseAIChat, UseAIChatPanel, type UseAIChatPanelProps, type UseAIChatPanelStrings, type UseAIChatPanelTheme, type UseAIChatProps, UseAIClient, type UseAIConfig, type UseAIContextValue, UseAIFloatingButton, UseAIFloatingChatWrapper, type UseAIOptions, UseAIProvider, type UseAIProviderProps, type UseAIResult, type UseAIStrings, type UseAITheme, type UseAIWorkflowResult, type UseAgentSelectionOptions, type UseAgentSelectionReturn, type UseChatManagementOptions, type UseChatManagementReturn, type UseCommandManagementOptions, type UseCommandManagementReturn, type UseDropdownStateOptions, type UseDropdownStateReturn, type UseFeedbackOptions, type UseFeedbackReturn, type UseFileUploadOptions, type UseFileUploadReturn, type UseMessageQueueOptions, type UseMessageQueueReturn, type UsePromptStateOptions, type UsePromptStateReturn, type UseServerEventsOptions, type UseServerEventsReturn, type UseSlashCommandsOptions, type UseSlashCommandsReturn, type UseToolSystemOptions, type UseToolSystemReturn, type WorkflowProgress, clearTransformationCache, convertToolsToDefinitions, defaultStrings, defaultTheme, defineTool, executeDefinedTool, findTransformerPattern, generateChatId, generateCommandId, generateMessageId, matchesMimeType, processAttachments, useAI, useAIContext, useAIWorkflow, useAgentSelection, useChatManagement, useCommandManagement, useDropdownState, useFeedback, useFileUpload, useMessageQueue, usePromptState, useServerEvents, useSlashCommands, useStableTools, useStrings, useTheme, useToolSystem, validateCommandName };
package/dist/index.js CHANGED
@@ -374,6 +374,12 @@ function shouldSubmitOnEnter(e, mode) {
374
374
  return e.metaKey || e.ctrlKey;
375
375
  }
376
376
 
377
+ // src/types.ts
378
+ import { EventType, ErrorCode, TOOL_APPROVAL_REQUEST } from "@meetsmore-oss/use-ai-core";
379
+ var DEFAULT_ENABLED_FEATURES = {
380
+ slashCommands: true
381
+ };
382
+
377
383
  // src/components/MarkdownContent.tsx
378
384
  import ReactMarkdown from "react-markdown";
379
385
  import remarkGfm from "remark-gfm";
@@ -2189,6 +2195,7 @@ function UseAIChatPanel({
2189
2195
  fileProcessing,
2190
2196
  commands = [],
2191
2197
  onSaveCommand,
2198
+ enabledFeatures,
2192
2199
  onRenameCommand,
2193
2200
  onDeleteCommand,
2194
2201
  closeButton,
@@ -2202,6 +2209,8 @@ function UseAIChatPanel({
2202
2209
  }) {
2203
2210
  const strings = useStrings();
2204
2211
  const theme = useTheme();
2212
+ const features = { ...DEFAULT_ENABLED_FEATURES, ...enabledFeatures };
2213
+ const slashCommandsEnabled = features.slashCommands;
2205
2214
  const displayMessages = mergeAssistantMessagesForDisplay(messages);
2206
2215
  const [input, setInput] = useState6("");
2207
2216
  const chatHistoryDropdown = useDropdownState();
@@ -2776,7 +2785,7 @@ function UseAIChatPanel({
2776
2785
  maxWidth: "80%"
2777
2786
  },
2778
2787
  children: [
2779
- message.role === "user" && hoveredMessageId === message.id && onSaveCommand && !slashCommands.isSavingCommand(message.id) && /* @__PURE__ */ jsx12(
2788
+ message.role === "user" && slashCommandsEnabled && hoveredMessageId === message.id && onSaveCommand && !slashCommands.isSavingCommand(message.id) && /* @__PURE__ */ jsx12(
2780
2789
  "button",
2781
2790
  {
2782
2791
  "data-testid": "save-command-button",
@@ -3380,6 +3389,7 @@ function UseAIChat({ floating = false, submitMode }) {
3380
3389
  fileProcessing: ctx.fileProcessing,
3381
3390
  commands: ctx.commands.list,
3382
3391
  onSaveCommand: ctx.commands.save,
3392
+ enabledFeatures: ctx.enabledFeatures,
3383
3393
  onRenameCommand: ctx.commands.rename,
3384
3394
  onDeleteCommand: ctx.commands.delete,
3385
3395
  executingTool: ctx.tools.executing,
@@ -3411,7 +3421,7 @@ function UseAIChat({ floating = false, submitMode }) {
3411
3421
 
3412
3422
  // src/client.ts
3413
3423
  import { io } from "socket.io-client";
3414
- import { EventType } from "@meetsmore-oss/use-ai-core";
3424
+ import { EventType as EventType2 } from "@meetsmore-oss/use-ai-core";
3415
3425
  import { v4 as uuidv42 } from "uuid";
3416
3426
  var UseAIClient = class {
3417
3427
  /**
@@ -3517,7 +3527,7 @@ var UseAIClient = class {
3517
3527
  });
3518
3528
  }
3519
3529
  handleEvent(event) {
3520
- if (event.type === EventType.RUN_STARTED) {
3530
+ if (event.type === EventType2.RUN_STARTED) {
3521
3531
  this._currentAssistantMessage = {
3522
3532
  id: uuidv42(),
3523
3533
  role: "assistant",
@@ -3529,31 +3539,31 @@ var UseAIClient = class {
3529
3539
  this._currentReasoningBlockText = "";
3530
3540
  this._currentMessageContent = "";
3531
3541
  }
3532
- if (event.type === EventType.TEXT_MESSAGE_START) {
3542
+ if (event.type === EventType2.TEXT_MESSAGE_START) {
3533
3543
  const e = event;
3534
3544
  this._currentMessageId = e.messageId;
3535
3545
  this._currentMessageContent = "";
3536
- } else if (event.type === EventType.TEXT_MESSAGE_CONTENT) {
3546
+ } else if (event.type === EventType2.TEXT_MESSAGE_CONTENT) {
3537
3547
  const e = event;
3538
3548
  this._currentMessageContent += e.delta;
3539
- } else if (event.type === EventType.TEXT_MESSAGE_END) {
3549
+ } else if (event.type === EventType2.TEXT_MESSAGE_END) {
3540
3550
  if (this._currentAssistantMessage) {
3541
3551
  this._currentAssistantMessage.content = this._currentMessageContent;
3542
3552
  }
3543
3553
  this._currentMessageId = null;
3544
- } else if (event.type === EventType.TOOL_CALL_START) {
3554
+ } else if (event.type === EventType2.TOOL_CALL_START) {
3545
3555
  const e = event;
3546
3556
  this.currentToolCalls.set(e.toolCallId, {
3547
3557
  name: e.toolCallName,
3548
3558
  args: ""
3549
3559
  });
3550
- } else if (event.type === EventType.TOOL_CALL_ARGS) {
3560
+ } else if (event.type === EventType2.TOOL_CALL_ARGS) {
3551
3561
  const e = event;
3552
3562
  const toolCall = this.currentToolCalls.get(e.toolCallId);
3553
3563
  if (toolCall) {
3554
3564
  toolCall.args += e.delta;
3555
3565
  }
3556
- } else if (event.type === EventType.TOOL_CALL_END) {
3566
+ } else if (event.type === EventType2.TOOL_CALL_END) {
3557
3567
  const e = event;
3558
3568
  const toolCall = this.currentToolCalls.get(e.toolCallId);
3559
3569
  if (toolCall) {
@@ -3566,17 +3576,17 @@ var UseAIClient = class {
3566
3576
  }
3567
3577
  });
3568
3578
  }
3569
- } else if (event.type === EventType.REASONING_MESSAGE_START) {
3579
+ } else if (event.type === EventType2.REASONING_MESSAGE_START) {
3570
3580
  this._currentReasoningBlockText = "";
3571
- } else if (event.type === EventType.REASONING_MESSAGE_CONTENT) {
3581
+ } else if (event.type === EventType2.REASONING_MESSAGE_CONTENT) {
3572
3582
  const e = event;
3573
3583
  this._currentReasoningBlockText += e.delta;
3574
- } else if (event.type === EventType.REASONING_MESSAGE_END) {
3584
+ } else if (event.type === EventType2.REASONING_MESSAGE_END) {
3575
3585
  this._currentReasoningBlocks.push({
3576
3586
  text: this._currentReasoningBlockText
3577
3587
  });
3578
3588
  this._currentReasoningBlockText = "";
3579
- } else if (event.type === EventType.REASONING_ENCRYPTED_VALUE) {
3589
+ } else if (event.type === EventType2.REASONING_ENCRYPTED_VALUE) {
3580
3590
  const e = event;
3581
3591
  if (e.subtype === "message" && this._currentReasoningBlocks.length > 0) {
3582
3592
  const lastBlock = this._currentReasoningBlocks[this._currentReasoningBlocks.length - 1];
@@ -3587,7 +3597,7 @@ var UseAIClient = class {
3587
3597
  tc.encryptedValue = e.encryptedValue;
3588
3598
  }
3589
3599
  }
3590
- } else if (event.type === EventType.TOOL_CALL_RESULT) {
3600
+ } else if (event.type === EventType2.TOOL_CALL_RESULT) {
3591
3601
  const e = event;
3592
3602
  const alreadyTracked = this._pendingToolResults.some(
3593
3603
  (r) => "toolCallId" in r && r.toolCallId === e.toolCallId
@@ -3600,7 +3610,7 @@ var UseAIClient = class {
3600
3610
  toolCallId: e.toolCallId
3601
3611
  });
3602
3612
  }
3603
- } else if (event.type === EventType.STEP_FINISHED) {
3613
+ } else if (event.type === EventType2.STEP_FINISHED) {
3604
3614
  if (this._currentAssistantToolCalls.length > 0 && this._currentAssistantMessage) {
3605
3615
  const reasoningParts = this._currentReasoningBlocks.length > 0 ? [...this._currentReasoningBlocks] : void 0;
3606
3616
  const assistantMsg = {
@@ -3618,10 +3628,10 @@ var UseAIClient = class {
3618
3628
  this._currentReasoningBlocks = [];
3619
3629
  this._currentMessageContent = "";
3620
3630
  }
3621
- } else if (event.type === EventType.RUN_FINISHED) {
3631
+ } else if (event.type === EventType2.RUN_FINISHED) {
3622
3632
  this.finalizeRun({ aborted: false });
3623
3633
  }
3624
- if (event.type === EventType.RUN_FINISHED || event.type === EventType.RUN_ERROR) {
3634
+ if (event.type === EventType2.RUN_FINISHED || event.type === EventType2.RUN_ERROR) {
3625
3635
  this._currentRunId = null;
3626
3636
  }
3627
3637
  this.eventHandlers.forEach((handler) => handler(event));
@@ -3914,7 +3924,7 @@ var UseAIClient = class {
3914
3924
  */
3915
3925
  onTextMessage(handler) {
3916
3926
  return this.onEvent("text-message-handler", (event) => {
3917
- if (event.type === EventType.TEXT_MESSAGE_END && this._currentMessageContent) {
3927
+ if (event.type === EventType2.TEXT_MESSAGE_END && this._currentMessageContent) {
3918
3928
  handler(this._currentMessageContent);
3919
3929
  }
3920
3930
  });
@@ -3928,7 +3938,7 @@ var UseAIClient = class {
3928
3938
  */
3929
3939
  onToolCall(handler) {
3930
3940
  return this.onEvent("tool-call-handler", (event) => {
3931
- if (event.type === EventType.TOOL_CALL_END) {
3941
+ if (event.type === EventType2.TOOL_CALL_END) {
3932
3942
  const e = event;
3933
3943
  const toolCall = this.currentToolCalls.get(e.toolCallId);
3934
3944
  if (toolCall) {
@@ -5381,11 +5391,6 @@ function useFeedback({
5381
5391
 
5382
5392
  // src/hooks/useServerEvents.ts
5383
5393
  import { useState as useState13, useCallback as useCallback11, useRef as useRef10 } from "react";
5384
-
5385
- // src/types.ts
5386
- import { EventType as EventType2, ErrorCode, TOOL_APPROVAL_REQUEST } from "@meetsmore-oss/use-ai-core";
5387
-
5388
- // src/hooks/useServerEvents.ts
5389
5394
  function useServerEvents({
5390
5395
  toolSystem,
5391
5396
  saveAIResponse,
@@ -5439,21 +5444,21 @@ function useServerEvents({
5439
5444
  const handleServerEvent = useCallback11(async (client, event) => {
5440
5445
  const ts = toolSystemRef.current;
5441
5446
  const strs = stringsRef.current;
5442
- if (event.type === EventType2.RUN_STARTED) {
5447
+ if (event.type === EventType.RUN_STARTED) {
5443
5448
  messageCountAtRunStartRef.current = client.messages.length;
5444
5449
  runIdAtRunStartRef.current = client.currentRunId ?? void 0;
5445
5450
  hasTextFromPriorStepRef.current = false;
5446
5451
  setStreamingReasoning("");
5447
- } else if (event.type === EventType2.REASONING_MESSAGE_START) {
5452
+ } else if (event.type === EventType.REASONING_MESSAGE_START) {
5448
5453
  setStreamingReasoning((prev) => prev ? prev + "\n\n" : prev);
5449
- } else if (event.type === EventType2.REASONING_MESSAGE_CONTENT) {
5454
+ } else if (event.type === EventType.REASONING_MESSAGE_CONTENT) {
5450
5455
  const reasoningEvent = event;
5451
5456
  setStreamingReasoning((prev) => prev + reasoningEvent.delta);
5452
- } else if (event.type === EventType2.TEXT_MESSAGE_START) {
5457
+ } else if (event.type === EventType.TEXT_MESSAGE_START) {
5453
5458
  if (hasTextFromPriorStepRef.current) {
5454
5459
  setStreamingText((prev) => prev + "\n\n");
5455
5460
  }
5456
- } else if (event.type === EventType2.TOOL_CALL_START) {
5461
+ } else if (event.type === EventType.TOOL_CALL_START) {
5457
5462
  const e = event;
5458
5463
  const tool = ts.aggregatedToolsRef.current[e.toolCallName];
5459
5464
  const title = e.annotations?.title ?? tool?._options?.annotations?.title ?? null;
@@ -5462,7 +5467,7 @@ function useServerEvents({
5462
5467
  executingToolFallbackRef.current = fallbacks[Math.floor(Math.random() * fallbacks.length)];
5463
5468
  }
5464
5469
  setExecutingTool({ toolCallId: e.toolCallId, title });
5465
- } else if (event.type === EventType2.TOOL_CALL_END) {
5470
+ } else if (event.type === EventType.TOOL_CALL_END) {
5466
5471
  const toolCallEnd = event;
5467
5472
  const toolCallId = toolCallEnd.toolCallId;
5468
5473
  setExecutingTool((prev) => prev?.toolCallId === toolCallId ? null : prev);
@@ -5487,16 +5492,16 @@ function useServerEvents({
5487
5492
  } else if (event.type === TOOL_APPROVAL_REQUEST) {
5488
5493
  const e = event;
5489
5494
  ts.handleApprovalRequest(e);
5490
- } else if (event.type === EventType2.TEXT_MESSAGE_CONTENT) {
5495
+ } else if (event.type === EventType.TEXT_MESSAGE_CONTENT) {
5491
5496
  const contentEvent = event;
5492
5497
  hasTextFromPriorStepRef.current = true;
5493
5498
  setStreamingText((prev) => prev + contentEvent.delta);
5494
- } else if (event.type === EventType2.TEXT_MESSAGE_END) {
5495
- } else if (event.type === EventType2.RUN_FINISHED) {
5499
+ } else if (event.type === EventType.TEXT_MESSAGE_END) {
5500
+ } else if (event.type === EventType.RUN_FINISHED) {
5496
5501
  const finishedEvent = event;
5497
5502
  await persistFinalResponse(client, { aborted: false, traceId: finishedEvent.runId });
5498
5503
  resetRunUiState();
5499
- } else if (event.type === EventType2.RUN_ERROR) {
5504
+ } else if (event.type === EventType.RUN_ERROR) {
5500
5505
  const errorEvent = event;
5501
5506
  const errorCode = errorEvent.message;
5502
5507
  if (errorCode === ErrorCode.ABORTED) {
@@ -5697,6 +5702,7 @@ function UseAIProvider({
5697
5702
  forwardedPropsProvider,
5698
5703
  fileUploadConfig: fileUploadConfigProp,
5699
5704
  commandRepository,
5705
+ enabledFeatures,
5700
5706
  renderChat = true,
5701
5707
  theme: customTheme,
5702
5708
  strings: customStrings,
@@ -5949,6 +5955,7 @@ function UseAIProvider({
5949
5955
  rename: renameCommand,
5950
5956
  delete: deleteCommand
5951
5957
  },
5958
+ enabledFeatures,
5952
5959
  ui: {
5953
5960
  isOpen: isChatOpen,
5954
5961
  setOpen: handleSetChatOpen
@@ -5992,6 +5999,7 @@ function UseAIProvider({
5992
5999
  fileProcessing: fileProcessingState,
5993
6000
  commands,
5994
6001
  onSaveCommand: saveCommand,
6002
+ enabledFeatures,
5995
6003
  onRenameCommand: renameCommand,
5996
6004
  onDeleteCommand: deleteCommand,
5997
6005
  executingTool: serverEvents.executingTool,
@@ -6225,7 +6233,7 @@ function useAI(options = {}) {
6225
6233
  }, [enabled, client]);
6226
6234
  const handleAGUIEvent = useCallback14(async (event) => {
6227
6235
  switch (event.type) {
6228
- case EventType2.TEXT_MESSAGE_END: {
6236
+ case EventType.TEXT_MESSAGE_END: {
6229
6237
  const content = client?.currentMessageContent;
6230
6238
  if (content) {
6231
6239
  setResponse(content);
@@ -6233,7 +6241,7 @@ function useAI(options = {}) {
6233
6241
  }
6234
6242
  break;
6235
6243
  }
6236
- case EventType2.RUN_ERROR: {
6244
+ case EventType.RUN_ERROR: {
6237
6245
  const errorEvent = event;
6238
6246
  const error2 = new Error(errorEvent.message);
6239
6247
  setError(error2);