@mcp-b/react-components 0.21.0 → 0.22.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.
Files changed (165) hide show
  1. package/dist/{AgentChat-Dvkn8lce.d.ts → AgentChat-Bm1qYbOo.d.ts} +2 -2
  2. package/dist/{AgentChatStartScreen-CvXJBr4y.d.ts → AgentChatStartScreen-DDZ25aax.d.ts} +4 -1
  3. package/dist/{Button-yRInko9u.d.ts → Button-SBIz6Lqi.d.ts} +2 -1
  4. package/dist/{CodeBlock-ygtuzqJd.js → CodeBlock-Cp67Njo3.js} +1 -1
  5. package/dist/{CodeBlock-Bbls1CnA.d.ts → CodeBlock-yMpGqScn.d.ts} +1 -1
  6. package/dist/Dialog-BD8NBKaE.d.ts +122 -0
  7. package/dist/{FileTree-CdgfccsM.js → FileTree-DW60q1w7.js} +1 -1
  8. package/dist/IconButton-CFKhu6OR.d.ts +35 -0
  9. package/dist/{Message-DzuteocT.js → Message-_-bEYLAO.js} +9 -16
  10. package/dist/{ModelSelector-CEd8M9eK.js → ModelSelector-Brvj9Cab.js} +1 -1
  11. package/dist/{PromptInput-Cq-8RoXD.d.ts → PromptInput-BjoPWaaG.d.ts} +15 -2
  12. package/dist/{ThinkChatActivity-FY1VWXgh.d.ts → ThinkChatActivity-2BobmuvR.d.ts} +1 -1
  13. package/dist/{Workspace-CWtust-2.d.ts → Workspace-CIycQ4xE.d.ts} +1 -1
  14. package/dist/{WorkspaceExplorer-DGigwsgH.d.ts → WorkspaceExplorer-BCipn7Vd.d.ts} +1 -1
  15. package/dist/{WorkspaceFile-D8Un_xge.d.ts → WorkspaceFile-DMtRMwVv.d.ts} +1 -1
  16. package/dist/{WorkspaceFileView-Bxx4wEzJ.js → WorkspaceFileView-rUEN2iox.js} +4 -4
  17. package/dist/assets/think-browser-host.png +0 -0
  18. package/dist/components/ActionGuide.d.ts +85 -0
  19. package/dist/components/ActionGuide.js +94 -0
  20. package/dist/components/Activity.js +1 -1
  21. package/dist/components/AgentActivity.js +3 -11
  22. package/dist/components/AgentActivityPreview.js +15 -14
  23. package/dist/components/AgentAttention.d.ts +1 -1
  24. package/dist/components/AgentChat.d.ts +1 -1
  25. package/dist/components/AgentChat.js +33 -13
  26. package/dist/components/AgentChatStartScreen.d.ts +1 -1
  27. package/dist/components/AgentChatStartScreen.js +21 -15
  28. package/dist/components/AgentConnection.d.ts +1 -1
  29. package/dist/components/AgentConnection.js +2 -2
  30. package/dist/components/AgentMessageParts.js +1 -1
  31. package/dist/components/AgentToolDetail.js +1 -1
  32. package/dist/components/AlertDialog.d.ts +2 -1
  33. package/dist/components/AlertDialog.js +8 -2
  34. package/dist/components/AppIcon.d.ts +58 -0
  35. package/dist/components/AppIcon.js +51 -0
  36. package/dist/components/AppTopBar.js +9 -10
  37. package/dist/components/Approval.js +1 -1
  38. package/dist/components/Artifact.d.ts +3 -7
  39. package/dist/components/Artifact.js +12 -18
  40. package/dist/components/Avatar.d.ts +7 -2
  41. package/dist/components/Avatar.js +4 -2
  42. package/dist/components/BrowserLiveView.js +1 -1
  43. package/dist/components/BrowserReplay.js +4 -5
  44. package/dist/components/BrowserRunPanel.js +1 -1
  45. package/dist/components/Button.d.ts +1 -1
  46. package/dist/components/ChainOfThought.d.ts +1 -1
  47. package/dist/components/ChainOfThought.js +1 -1
  48. package/dist/components/ChatGptSignInScreen.js +2 -2
  49. package/dist/components/Checkbox.js +1 -1
  50. package/dist/components/Checkpoint.js +1 -1
  51. package/dist/components/CodeBlock.d.ts +1 -1
  52. package/dist/components/CodeBlock.js +1 -1
  53. package/dist/components/CodexModelSelector.js +1 -1
  54. package/dist/components/Commit.d.ts +1 -1
  55. package/dist/components/Commit.js +3 -3
  56. package/dist/components/ContextMenu.js +1 -1
  57. package/dist/components/Conversation.d.ts +2 -2
  58. package/dist/components/Conversation.js +4 -5
  59. package/dist/components/Dialog.d.ts +1 -117
  60. package/dist/components/Dialog.js +9 -1
  61. package/dist/components/EnvironmentVariables.d.ts +1 -1
  62. package/dist/components/EnvironmentVariables.js +2 -2
  63. package/dist/components/FileTree.js +1 -1
  64. package/dist/components/IconButton.d.ts +1 -31
  65. package/dist/components/IconButton.js +2 -1
  66. package/dist/components/McpConnectionRequest.d.ts +1 -1
  67. package/dist/components/McpConnectionRequest.js +1 -1
  68. package/dist/components/McpPluginCatalog.d.ts +86 -0
  69. package/dist/components/McpPluginCatalog.js +364 -0
  70. package/dist/components/McpServerPicker.d.ts +2 -2
  71. package/dist/components/McpServerPicker.js +7 -13
  72. package/dist/components/MediaPreviewCard.js +1 -1
  73. package/dist/components/Menubar.js +1 -1
  74. package/dist/components/Message.d.ts +4 -8
  75. package/dist/components/Message.js +1 -1
  76. package/dist/components/MessageScroller.d.ts +1 -1
  77. package/dist/components/MessageScroller.js +1 -1
  78. package/dist/components/ModelSelector.d.ts +2 -2
  79. package/dist/components/ModelSelector.js +1 -1
  80. package/dist/components/Plan.js +1 -1
  81. package/dist/components/PricingPlanCard.d.ts +1 -1
  82. package/dist/components/PricingPlanCard.js +10 -12
  83. package/dist/components/PromptInput.d.ts +2 -2
  84. package/dist/components/PromptInput.js +27 -10
  85. package/dist/components/Queue.d.ts +1 -1
  86. package/dist/components/Queue.js +2 -2
  87. package/dist/components/Reasoning.js +4 -9
  88. package/dist/components/ResponsiveSidebarShell.js +2 -1
  89. package/dist/components/SearchField.js +1 -1
  90. package/dist/components/Select.js +1 -1
  91. package/dist/components/Sources.js +1 -1
  92. package/dist/components/Stepper.js +1 -1
  93. package/dist/components/SubagentRunIndicator.js +1 -1
  94. package/dist/components/SubagentRunSelector.js +1 -1
  95. package/dist/components/Task.js +1 -1
  96. package/dist/components/Terminal.d.ts +3 -3
  97. package/dist/components/Terminal.js +7 -8
  98. package/dist/components/TestResults.js +1 -1
  99. package/dist/components/ThemeModeControl.js +1 -1
  100. package/dist/components/ThinkChat.d.ts +5 -5
  101. package/dist/components/ThinkChatActivity.d.ts +1 -1
  102. package/dist/components/ThinkChatActivity.js +1 -1
  103. package/dist/components/ThinkChatToolPanels.js +1 -1
  104. package/dist/components/ThinkExecutionDetail.js +1 -1
  105. package/dist/components/ThinkExecutionStatus.js +1 -1
  106. package/dist/components/ThinkExecutionWorkbench.js +14 -21
  107. package/dist/components/ThinkFullApp.d.ts +8 -4
  108. package/dist/components/ThinkFullApp.js +17 -2
  109. package/dist/components/ThinkRoutineBrowser.js +2 -2
  110. package/dist/components/ThinkRoutineForm.js +3 -3
  111. package/dist/components/ThinkRoutineLibrary.js +2 -2
  112. package/dist/components/ThinkRoutineRuns.js +1 -1
  113. package/dist/components/ThinkThreadPicker.js +2 -2
  114. package/dist/components/Toast.d.ts +12 -2
  115. package/dist/components/Toast.js +14 -4
  116. package/dist/components/Tooltip.d.ts +6 -4
  117. package/dist/components/Tooltip.js +11 -4
  118. package/dist/components/WebPreview.d.ts +13 -6
  119. package/dist/components/WebPreview.js +55 -50
  120. package/dist/components/Workspace.d.ts +1 -1
  121. package/dist/components/WorkspaceBrowser.d.ts +1 -1
  122. package/dist/components/WorkspaceBrowser.js +1 -1
  123. package/dist/components/WorkspaceExplorer.d.ts +3 -3
  124. package/dist/components/WorkspaceExplorer.js +1 -1
  125. package/dist/components/WorkspaceFile.d.ts +1 -1
  126. package/dist/components/WorkspaceFileView.d.ts +1 -1
  127. package/dist/components/WorkspaceFileView.js +1 -1
  128. package/dist/components/WorkspaceHeader.js +1 -1
  129. package/dist/components/icons.d.ts +2 -2
  130. package/dist/components/icons.js +2 -2
  131. package/dist/{copy-button-BrvQ7z4W.d.ts → copy-button-EBv_B9F6.d.ts} +2 -2
  132. package/dist/{copy-button-vo1paUSi.js → copy-button-TWq8nZhc.js} +8 -8
  133. package/dist/{icons-DyOM0EJs.js → icons-ua6f_GH3.js} +3 -2
  134. package/dist/{icons-DkRtZmvT.d.ts → icons-wP1yFUXF.d.ts} +6 -1
  135. package/dist/mcp-server-catalog-DycejaJ5.d.ts +1077 -0
  136. package/dist/styles/action-guide.css +128 -0
  137. package/dist/styles/agent-activity-preview-overlay.css +13 -1
  138. package/dist/styles/agent-activity-preview.css +3 -34
  139. package/dist/styles/agent-chat.css +110 -75
  140. package/dist/styles/alert-dialog.css +0 -18
  141. package/dist/styles/app-icon.css +122 -0
  142. package/dist/styles/app-top-bar.css +0 -1
  143. package/dist/styles/avatar.css +13 -0
  144. package/dist/styles/base.css +0 -1
  145. package/dist/styles/button.css +14 -0
  146. package/dist/styles/description-list.css +2 -2
  147. package/dist/styles/dialog.css +6 -6
  148. package/dist/styles/index.css +3 -0
  149. package/dist/styles/mcp-plugin-catalog.css +296 -0
  150. package/dist/styles/mcp-server-picker.css +0 -26
  151. package/dist/styles/message.css +7 -0
  152. package/dist/styles/prompt-input.css +26 -14
  153. package/dist/styles/recipes.css +15 -0
  154. package/dist/styles/responsive-sidebar-shell.css +14 -8
  155. package/dist/styles/search-field.css +9 -0
  156. package/dist/styles/think-full-app.css +22 -2
  157. package/dist/styles/think-thread-picker.css +1 -1
  158. package/dist/styles/toast.css +0 -21
  159. package/dist/styles/web-preview.css +5 -0
  160. package/dist/utils/favicon.d.ts +10 -0
  161. package/dist/utils/favicon.js +18 -0
  162. package/dist/utils/mcp-server-catalog.d.ts +2 -1078
  163. package/dist/utils/mcp-server-catalog.js +3 -11
  164. package/dist/utils/structured-code.d.ts +1 -1
  165. package/package.json +2 -2
@@ -1,12 +1,13 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../class-names-BiMDVpUo.js";
2
- import { $ as WrenchIcon, C as FolderIcon, J as StopIcon, K as SpinnerIcon, L as PaperclipIcon, M as MicrophoneIcon, P as MonitorIcon, Q as WarningIcon, S as FileIcon, V as PlusIcon, a as ArrowUpIcon, d as ChevronDownIcon, et as XIcon, q as SquareIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { $ as WarningIcon, C as FileIcon, F as MonitorIcon, H as PlusIcon, J as SquareIcon, N as MicrophoneIcon, R as PaperclipIcon, Y as StopIcon, a as ArrowUpIcon, d as CheckIcon, et as WrenchIcon, f as ChevronDownIcon, q as SpinnerIcon, tt as XIcon, w as FolderIcon } from "../icons-ua6f_GH3.js";
4
4
  import { Tooltip } from "./Tooltip.js";
5
+ import { IconButton } from "./IconButton.js";
5
6
  import { t as AttachmentPreview } from "../attachment-preview-DIs50Q0h.js";
6
7
  import { n as clamp, r as formatClock } from "../format-S6uWyoSb.js";
7
- import { Menu } from "./Menu.js";
8
8
  import { Combobox } from "./Combobox.js";
9
9
  import { Kbd } from "./Kbd.js";
10
+ import { Menu } from "./Menu.js";
10
11
  import { Select } from "./Select.js";
11
12
  import { Tabs } from "./Tabs.js";
12
13
  import { ThinkExecutionApproval, ThinkPendingApproval, getPausedExecution } from "./ThinkPendingApproval.js";
@@ -313,10 +314,12 @@ function PromptInputAttachment({ file, className, ref, ...props }) {
313
314
  children: [isImage ? /* @__PURE__ */ jsx(AttachmentPreview, {
314
315
  url: file.url,
315
316
  filename: file.filename,
316
- children: /* @__PURE__ */ jsx("button", {
317
- type: "button",
317
+ children: /* @__PURE__ */ jsx(Button, {
318
318
  className: "prompt-input__attachment-zoom",
319
319
  "aria-label": `Preview ${name}`,
320
+ color: "neutral",
321
+ size: "sm",
322
+ variant: "ghost",
320
323
  children: /* @__PURE__ */ jsx("img", {
321
324
  className: "prompt-input__attachment-thumb",
322
325
  src: file.url,
@@ -326,12 +329,14 @@ function PromptInputAttachment({ file, className, ref, ...props }) {
326
329
  }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FileIcon, { className: "prompt-input__attachment-icon" }), /* @__PURE__ */ jsx("span", {
327
330
  className: "prompt-input__attachment-name sigvelo-truncate",
328
331
  children: name
329
- })] }), /* @__PURE__ */ jsx("button", {
330
- type: "button",
332
+ })] }), /* @__PURE__ */ jsx(IconButton, {
331
333
  className: "prompt-input__attachment-remove",
332
- "aria-label": `Remove ${name}`,
334
+ color: "neutral",
335
+ label: `Remove ${name}`,
336
+ size: "xs",
337
+ variant: "ghost",
333
338
  onClick: () => attachments.remove(file.id),
334
- children: /* @__PURE__ */ jsx(XIcon, { size: 12 })
339
+ children: /* @__PURE__ */ jsx(XIcon, {})
335
340
  })]
336
341
  });
337
342
  }
@@ -366,6 +371,16 @@ function PromptInputFooter({ className, children, ref, ...props }) {
366
371
  children
367
372
  });
368
373
  }
374
+ /** Supporting controls or queued work tucked behind a PromptInput edge. */
375
+ function PromptInputTray({ side, className, ref, ...props }) {
376
+ return /* @__PURE__ */ jsx("div", {
377
+ ref,
378
+ "data-slot": "prompt-input-tray",
379
+ "data-side": side,
380
+ className: cx("prompt-input__tray", className),
381
+ ...props
382
+ });
383
+ }
369
384
  function PromptInputTools({ className, children, ref, ...props }) {
370
385
  return /* @__PURE__ */ jsx("div", {
371
386
  ref,
@@ -1276,7 +1291,9 @@ async function resolveSubmittedFile(file) {
1276
1291
  }
1277
1292
  async function blobUrlToDataUrl(url) {
1278
1293
  try {
1279
- const blob = await (await fetch(url)).blob();
1294
+ const response = await fetch(url);
1295
+ if (!response.ok) return null;
1296
+ const blob = await response.blob();
1280
1297
  return await new Promise((resolve) => {
1281
1298
  const reader = new FileReader();
1282
1299
  reader.onloadend = () => resolve(typeof reader.result === "string" ? reader.result : null);
@@ -1328,4 +1345,4 @@ function createId() {
1328
1345
  return globalThis.crypto?.randomUUID?.() ?? `prompt-input-${Date.now()}-${Math.random()}`;
1329
1346
  }
1330
1347
  //#endregion
1331
- export { PromptInput, PromptInputActionAddAttachments, PromptInputActionAddScreenshot, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuItem, PromptInputActionMenuTrigger, PromptInputApproval, PromptInputAttachment, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommand, PromptInputCommandComposer, PromptInputCommandEmpty, PromptInputCommandGroup, PromptInputCommandGroupLabel, PromptInputCommandInput, PromptInputCommandItem, PromptInputCommandList, PromptInputCommandSeparator, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputHoverCard, PromptInputHoverCardContent, PromptInputHoverCardTrigger, PromptInputPermissionSelector, PromptInputProvider, PromptInputReferences, PromptInputSelect, PromptInputSubmit, PromptInputTab, PromptInputTabBody, PromptInputTabItem, PromptInputTabLabel, PromptInputTabsList, PromptInputTextarea, PromptInputTools, getApprovalRequestId, getApprovalStateKey, getPendingToolApprovals, usePromptInputAttachments, usePromptInputController, useProviderAttachments };
1348
+ export { PromptInput, PromptInputActionAddAttachments, PromptInputActionAddScreenshot, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuItem, PromptInputActionMenuTrigger, PromptInputApproval, PromptInputAttachment, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommand, PromptInputCommandComposer, PromptInputCommandEmpty, PromptInputCommandGroup, PromptInputCommandGroupLabel, PromptInputCommandInput, PromptInputCommandItem, PromptInputCommandList, PromptInputCommandSeparator, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputHoverCard, PromptInputHoverCardContent, PromptInputHoverCardTrigger, PromptInputPermissionSelector, PromptInputProvider, PromptInputReferences, PromptInputSelect, PromptInputSubmit, PromptInputTab, PromptInputTabBody, PromptInputTabItem, PromptInputTabLabel, PromptInputTabsList, PromptInputTextarea, PromptInputTools, PromptInputTray, getApprovalRequestId, getApprovalStateKey, getPendingToolApprovals, usePromptInputAttachments, usePromptInputController, useProviderAttachments };
@@ -1,5 +1,5 @@
1
+ import { r as ButtonProps } from "../Button-SBIz6Lqi.js";
1
2
  import { t as Collapsible } from "../Collapsible-N64ASIQr.js";
2
- import { r as ButtonProps } from "../Button-yRInko9u.js";
3
3
  import { ScrollArea } from "./ScrollArea.js";
4
4
  import * as React from "react";
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { Collapsible } from "./Collapsible.js";
3
- import { S as FileIcon, _ as DotIcon, p as ChevronRightIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
4
2
  import { Button } from "./Button.js";
3
+ import { Collapsible } from "./Collapsible.js";
4
+ import { C as FileIcon, d as CheckIcon, m as ChevronRightIcon, v as DotIcon } from "../icons-ua6f_GH3.js";
5
5
  import { Badge } from "./Badge.js";
6
6
  import { ScrollArea } from "./ScrollArea.js";
7
7
  import "react";
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "./Collapsible.js";
3
- import { K as SpinnerIcon } from "../icons-DyOM0EJs.js";
3
+ import { q as SpinnerIcon } from "../icons-ua6f_GH3.js";
4
4
  import { ActivityContent, ActivityText, ActivityTrigger } from "./Activity.js";
5
- import { f as MessageResponse } from "../Message-DzuteocT.js";
5
+ import { f as MessageResponse } from "../Message-_-bEYLAO.js";
6
6
  import * as React from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  //#region src/components/Reasoning.tsx
@@ -36,11 +36,10 @@ function Reasoning({ className, isStreaming = false, duration, open, defaultOpen
36
36
  const previousStreamingRef = React.useRef(isStreaming);
37
37
  const startTimeRef = React.useRef(isStreaming ? Date.now() : null);
38
38
  const hasEverStreamedRef = React.useRef(isStreaming);
39
- const [hasAutoClosed, setHasAutoClosed] = React.useState(false);
40
39
  const isControlled = open !== void 0;
41
40
  const currentOpen = isControlled ? open : internalOpen;
42
41
  const preventAutoOpen = defaultOpen === false;
43
- const resolvedDuration = duration ?? internalDuration;
42
+ const resolvedDuration = duration ?? (isStreaming || startTimeRef.current !== null ? void 0 : internalDuration);
44
43
  const setOpenState = React.useCallback((next) => {
45
44
  if (next === currentOpen) return;
46
45
  if (!isControlled) setInternalOpen(next);
@@ -53,8 +52,6 @@ function Reasoning({ className, isStreaming = false, duration, open, defaultOpen
53
52
  React.useEffect(() => {
54
53
  if (isStreaming) {
55
54
  hasEverStreamedRef.current = true;
56
- setHasAutoClosed(false);
57
- if (duration === void 0) setInternalDuration(void 0);
58
55
  if (startTimeRef.current === null) startTimeRef.current = Date.now();
59
56
  return;
60
57
  }
@@ -66,10 +63,9 @@ function Reasoning({ className, isStreaming = false, duration, open, defaultOpen
66
63
  React.useEffect(() => {
67
64
  const wasStreaming = previousStreamingRef.current;
68
65
  if (isStreaming && !currentOpen && !preventAutoOpen) setOpenState(true);
69
- if (!isStreaming && wasStreaming && hasEverStreamedRef.current && currentOpen && !hasAutoClosed) {
66
+ if (!isStreaming && wasStreaming && hasEverStreamedRef.current && currentOpen) {
70
67
  const closeTimer = window.setTimeout(() => {
71
68
  setOpenState(false);
72
- setHasAutoClosed(true);
73
69
  }, AUTO_CLOSE_DELAY_MS);
74
70
  previousStreamingRef.current = isStreaming;
75
71
  return () => window.clearTimeout(closeTimer);
@@ -77,7 +73,6 @@ function Reasoning({ className, isStreaming = false, duration, open, defaultOpen
77
73
  previousStreamingRef.current = isStreaming;
78
74
  }, [
79
75
  currentOpen,
80
- hasAutoClosed,
81
76
  isStreaming,
82
77
  preventAutoOpen,
83
78
  setOpenState
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { G as SidebarIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { K as SidebarIcon } from "../icons-ua6f_GH3.js";
4
4
  import { t as capitalize } from "../format-S6uWyoSb.js";
5
5
  import { n as mergeRefs } from "../merge-refs-DF_7w2x_.js";
6
6
  import { AppTopBar } from "./AppTopBar.js";
@@ -118,6 +118,7 @@ function ResponsiveSidebarShell({ sidebar, topBar, sidebarLabel, sidebarOpen, de
118
118
  /* @__PURE__ */ jsx("div", {
119
119
  ref: mainRef,
120
120
  className: "responsive-sidebar-shell__main",
121
+ "data-recipe": "application-plane",
121
122
  tabIndex: -1,
122
123
  children
123
124
  }),
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../class-names-BiMDVpUo.js";
2
- import { W as SearchIcon } from "../icons-DyOM0EJs.js";
2
+ import { G as SearchIcon } from "../icons-ua6f_GH3.js";
3
3
  import { Field } from "./Field.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/SearchField.tsx
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../class-names-BiMDVpUo.js";
2
- import { a as ArrowUpIcon, n as ArrowDownIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
2
+ import { a as ArrowUpIcon, d as CheckIcon, n as ArrowDownIcon } from "../icons-ua6f_GH3.js";
3
3
  import "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Select as Select$1 } from "@base-ui/react/select";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "./Collapsible.js";
3
- import { O as LinkIcon, p as ChevronRightIcon } from "../icons-DyOM0EJs.js";
3
+ import { k as LinkIcon, m as ChevronRightIcon } from "../icons-ua6f_GH3.js";
4
4
  import "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/Sources.tsx
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
2
+ import { d as CheckIcon, q as SpinnerIcon } from "../icons-ua6f_GH3.js";
3
3
  import { Tabs } from "./Tabs.js";
4
4
  import * as React from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { J as StopIcon, K as SpinnerIcon, Q as WarningIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
2
+ import { $ as WarningIcon, Y as StopIcon, d as CheckIcon, q as SpinnerIcon } from "../icons-ua6f_GH3.js";
3
3
  import "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/SubagentRunIndicator.tsx
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
3
2
  import { buttonVariants } from "./Button.js";
3
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
4
  import { Tooltip } from "./Tooltip.js";
5
5
  import { NaniteMark } from "./NaniteScene.js";
6
6
  import { SubagentRunIndicator, getSubagentRunName, getSubagentRunTooltip } from "./SubagentRunIndicator.js";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "./Collapsible.js";
3
- import { S as FileIcon, W as SearchIcon, p as ChevronRightIcon } from "../icons-DyOM0EJs.js";
3
+ import { C as FileIcon, G as SearchIcon, m as ChevronRightIcon } from "../icons-ua6f_GH3.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/Task.tsx
@@ -1,5 +1,5 @@
1
- import { r as ButtonProps } from "../Button-yRInko9u.js";
2
- import { t as CopyButtonProps } from "../copy-button-BrvQ7z4W.js";
1
+ import { n as IconButtonProps } from "../IconButton-CFKhu6OR.js";
2
+ import { t as CopyButtonProps } from "../copy-button-EBv_B9F6.js";
3
3
  import * as React from "react";
4
4
 
5
5
  //#region src/components/Terminal.d.ts
@@ -103,7 +103,7 @@ declare function TerminalCopyButton({
103
103
  onClick,
104
104
  ...props
105
105
  }: TerminalCopyButtonProps): React.JSX.Element;
106
- interface TerminalClearButtonProps extends Omit<ButtonProps, "children" | "variant" | "size" | "color" | "onClick"> {
106
+ interface TerminalClearButtonProps extends Omit<IconButtonProps, "children" | "label" | "tooltip" | "variant" | "size" | "color" | "onClick"> {
107
107
  label?: string;
108
108
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
109
109
  }
@@ -1,8 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { X as TerminalIcon, et as XIcon } from "../icons-DyOM0EJs.js";
3
- import { Button } from "./Button.js";
4
- import { Tooltip } from "./Tooltip.js";
5
- import { t as CopyButton } from "../copy-button-vo1paUSi.js";
2
+ import { Z as TerminalIcon, tt as XIcon } from "../icons-ua6f_GH3.js";
3
+ import { IconButton } from "./IconButton.js";
4
+ import { t as CopyButton } from "../copy-button-TWq8nZhc.js";
6
5
  import { Badge } from "./Badge.js";
7
6
  import { ScrollArea } from "./ScrollArea.js";
8
7
  import * as React from "react";
@@ -217,16 +216,16 @@ function TerminalClearButton({ className, label = "Clear terminal", onClick, ...
217
216
  onClear?.();
218
217
  onClick?.(e);
219
218
  }, [onClear, onClick]);
220
- return /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, { render: /* @__PURE__ */ jsx(Button, {
219
+ return /* @__PURE__ */ jsx(IconButton, {
220
+ label,
221
221
  variant: "ghost",
222
+ color: "neutral",
222
223
  size: "sm",
223
- iconOnly: true,
224
- "aria-label": label,
225
224
  className: cx("terminal__clear", className),
226
225
  ...props,
227
226
  onClick: handleClick,
228
227
  children: /* @__PURE__ */ jsx(XIcon, {})
229
- }) }), /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, { children: /* @__PURE__ */ jsx(Tooltip.Popup, { children: label }) }) })] });
228
+ });
230
229
  }
231
230
  const ANSI_REGEX = /\u001b\[[0-9;?]*[a-zA-Z]/g;
232
231
  function stripAnsi(input) {
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "./Collapsible.js";
3
- import { K as SpinnerIcon, et as XIcon, p as ChevronRightIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
3
+ import { d as CheckIcon, m as ChevronRightIcon, q as SpinnerIcon, tt as XIcon } from "../icons-ua6f_GH3.js";
4
4
  import { Progress } from "./Progress.js";
5
5
  import { Badge } from "./Badge.js";
6
6
  import * as React from "react";
@@ -1,4 +1,4 @@
1
- import { F as MoonIcon, P as MonitorIcon, Y as SunIcon } from "../icons-DyOM0EJs.js";
1
+ import { F as MonitorIcon, I as MoonIcon, X as SunIcon } from "../icons-ua6f_GH3.js";
2
2
  import { Radio, RadioGroup } from "./RadioGroup.js";
3
3
  import { useTheme } from "./ThemeProvider.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,16 +1,16 @@
1
1
  import { i as AgentMessageRenderPartContext } from "../AgentMessageParts-CyD2UB3V.js";
2
- import { r as AgentChatProps } from "../AgentChat-Dvkn8lce.js";
2
+ import { r as AgentChatProps } from "../AgentChat-Bm1qYbOo.js";
3
3
  import { i as useOptionalAgentToolRuns, n as AgentToolRunsProvider, r as AgentToolRunsProviderProps, t as AgentToolEventsValue } from "../AgentToolRunsContext-BVe4stgw.js";
4
4
  import { S as isThinkChatActivityPart } from "../ThinkChatToolParts-CSzVwMXf.js";
5
5
  import { u as describeThinkChatActivityPart } from "../ThinkChatActivitySummary-kr5fE0wg.js";
6
- import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../ThinkChatActivity-FY1VWXgh.js";
6
+ import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../ThinkChatActivity-2BobmuvR.js";
7
7
  import { n as ThinkChatValue } from "../ThinkChatContext-DrsZqdaO.js";
8
8
  import { n as ThinkRecoveryNoticeProps, t as ThinkRecoveryNotice } from "../ThinkRecoveryNotice-DFIcG9UX.js";
9
9
  import { n as BrowserLiveViewProps, t as BrowserLiveView } from "../BrowserLiveView-BV5qgFgI.js";
10
10
  import { n as BrowserReplayProps, t as BrowserReplay } from "../BrowserReplay-xWvRjRAC.js";
11
- import { d as inferWorkspaceLanguage, i as WorkspaceFileState } from "../WorkspaceFile-D8Un_xge.js";
12
- import { a as WorkspaceSource, c as workspaceBinaryFileQueryOptions, d as workspaceFileStatQueryOptions, f as workspaceInfoQueryOptions, i as WorkspaceQueryKey, l as workspaceDirectoryQueryOptions, m as workspaceTextFileQueryOptions, n as WorkspaceFileReadTarget, o as WorkspaceState, p as workspaceQueryKey, r as WorkspaceInfo, s as useWorkspace, t as UseWorkspaceOptions, u as workspaceFileAssetQueryOptions } from "../Workspace-CWtust-2.js";
13
- import { n as WorkspaceExplorerProps, t as WorkspaceExplorer } from "../WorkspaceExplorer-DGigwsgH.js";
11
+ import { d as inferWorkspaceLanguage, i as WorkspaceFileState } from "../WorkspaceFile-DMtRMwVv.js";
12
+ import { a as WorkspaceSource, c as workspaceBinaryFileQueryOptions, d as workspaceFileStatQueryOptions, f as workspaceInfoQueryOptions, i as WorkspaceQueryKey, l as workspaceDirectoryQueryOptions, m as workspaceTextFileQueryOptions, n as WorkspaceFileReadTarget, o as WorkspaceState, p as workspaceQueryKey, r as WorkspaceInfo, s as useWorkspace, t as UseWorkspaceOptions, u as workspaceFileAssetQueryOptions } from "../Workspace-CIycQ4xE.js";
13
+ import { n as WorkspaceExplorerProps, t as WorkspaceExplorer } from "../WorkspaceExplorer-BCipn7Vd.js";
14
14
  import * as React from "react";
15
15
  import { UIMessage } from "ai";
16
16
  import { UseAgentOptions } from "agents/react";
@@ -1,4 +1,4 @@
1
1
  import { S as isThinkChatActivityPart } from "../ThinkChatToolParts-CSzVwMXf.js";
2
2
  import { u as describeThinkChatActivityPart } from "../ThinkChatActivitySummary-kr5fE0wg.js";
3
- import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../ThinkChatActivity-FY1VWXgh.js";
3
+ import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../ThinkChatActivity-2BobmuvR.js";
4
4
  export { ThinkChatActivity, ThinkChatActivityProps, ThinkChatActivityRendererOptions, ThinkChatToolRenderer, ThinkChatToolRenderers, createThinkChatActivityRenderer, describeThinkChatActivityPart, isThinkChatActivityPart, renderThinkChatActivityPart };
@@ -1,6 +1,6 @@
1
1
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityText, ActivityTrigger } from "./Activity.js";
2
2
  import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
3
- import { f as MessageResponse } from "../Message-DzuteocT.js";
3
+ import { f as MessageResponse } from "../Message-_-bEYLAO.js";
4
4
  import { isBrowserToolPart, isExecuteToolPart, isFetchToolPart, isPartWorking, isSessionContextToolPart, isSkillToolPart, isThinkChatActivityPart, isWorkspaceToolPart } from "./ThinkChatToolParts.js";
5
5
  import { useOptionalAgentToolRuns } from "./AgentToolRunsContext.js";
6
6
  import { SubagentRunList } from "./SubagentRunList.js";
@@ -1,7 +1,7 @@
1
1
  import { ActivityOutput, ActivityPanel } from "./Activity.js";
2
2
  import { displayUrl, isSessionContextToolFailure } from "./ThinkChatToolParts.js";
3
3
  import { Tabs } from "./Tabs.js";
4
- import { t as CodeBlock } from "../CodeBlock-ygtuzqJd.js";
4
+ import { t as CodeBlock } from "../CodeBlock-Cp67Njo3.js";
5
5
  import { BrowserLiveView } from "./BrowserLiveView.js";
6
6
  import { inferWorkspaceLanguage } from "./WorkspaceFile.js";
7
7
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { D as InfoIcon, S as FileIcon, U as RefreshIcon, X as TerminalIcon, et as XIcon, n as ArrowDownIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
2
+ import { C as FileIcon, O as InfoIcon, W as RefreshIcon, Z as TerminalIcon, d as CheckIcon, n as ArrowDownIcon, tt as XIcon } from "../icons-ua6f_GH3.js";
3
3
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityOutput, ActivityPanel, ActivityTrigger } from "./Activity.js";
4
4
  import { formatThinkExecutionRunProgress, formatThinkExecutionStatus, formatThinkExecutionTimestamp, getThinkExecutionRunError, getThinkExecutionRunId, getThinkExecutionRunProgressedAt, getThinkExecutionRunProgressedLabel, getThinkExecutionRunStatus, getThinkExecutionRunTitle, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
5
5
  import { ThinkExecutionStatus } from "./ThinkExecutionStatus.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { D as InfoIcon, K as SpinnerIcon, R as PauseIcon, et as XIcon, u as CheckIcon } from "../icons-DyOM0EJs.js";
2
+ import { O as InfoIcon, d as CheckIcon, q as SpinnerIcon, tt as XIcon, z as PauseIcon } from "../icons-ua6f_GH3.js";
3
3
  import { Tooltip } from "./Tooltip.js";
4
4
  import { formatThinkExecutionStatus, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone } from "./ThinkExecutionRun.js";
5
5
  import "react";
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { U as RefreshIcon, y as EllipsisIcon } from "../icons-DyOM0EJs.js";
2
+ import { buttonVariants } from "./Button.js";
3
+ import { W as RefreshIcon, b as EllipsisIcon } from "../icons-ua6f_GH3.js";
3
4
  import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
- import { Button, buttonVariants } from "./Button.js";
5
- import { Tooltip } from "./Tooltip.js";
5
+ import { IconButton } from "./IconButton.js";
6
6
  import { EmptyState } from "./EmptyState.js";
7
7
  import { Menu } from "./Menu.js";
8
8
  import { AppTopBar } from "./AppTopBar.js";
@@ -32,24 +32,17 @@ function RunActions({ busy, onAction, run, source }) {
32
32
  const statusTone = getThinkExecutionRunStatusTone(run);
33
33
  const kind = isThinkSubmissionRun(run) ? "submission" : "workflow";
34
34
  const action = (key, callback) => () => onAction(key, callback);
35
- return /* @__PURE__ */ jsxs(Menu.Root, { children: [/* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, { render: /* @__PURE__ */ jsx(Menu.Trigger, {
36
- unstyled: true,
37
- render: /* @__PURE__ */ jsx(Button, {
38
- type: "button",
39
- variant: "ghost",
40
- color: "neutral",
41
- size: "sm",
42
- iconOnly: true,
43
- className: "think-execution-workbench__run-actions",
44
- "aria-label": `Actions for ${kind} ${id}`,
45
- disabled: busy,
46
- children: /* @__PURE__ */ jsx(EllipsisIcon, {})
47
- })
48
- }) }), /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
49
- side: "top",
50
- sideOffset: 6,
51
- children: /* @__PURE__ */ jsx(Tooltip.Popup, { children: "Run actions" })
52
- }) })] }), /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
35
+ return /* @__PURE__ */ jsxs(Menu.Root, { children: [/* @__PURE__ */ jsx(IconButton, {
36
+ label: `Actions for ${kind} ${id}`,
37
+ tooltip: "Run actions",
38
+ render: /* @__PURE__ */ jsx(Menu.Trigger, { unstyled: true }),
39
+ variant: "ghost",
40
+ color: "neutral",
41
+ size: "sm",
42
+ className: "think-execution-workbench__run-actions",
43
+ disabled: busy,
44
+ children: /* @__PURE__ */ jsx(EllipsisIcon, {})
45
+ }), /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
53
46
  align: "end",
54
47
  children: /* @__PURE__ */ jsx(Menu.Popup, { children: isThinkSubmissionRun(run) ? /* @__PURE__ */ jsxs(Fragment, { children: [
55
48
  isSubmissionCancelable(run.status) ? /* @__PURE__ */ jsx(Menu.Item, {
@@ -1,8 +1,9 @@
1
1
  import { l as WorkspaceNavigationAdapter } from "../WorkspaceLink-O-EBKUJ8.js";
2
- import { r as WorkspaceFileAssetResolver } from "../WorkspaceFile-D8Un_xge.js";
3
- import { a as WorkspaceSource } from "../Workspace-CWtust-2.js";
2
+ import { r as WorkspaceFileAssetResolver } from "../WorkspaceFile-DMtRMwVv.js";
3
+ import { a as WorkspaceSource } from "../Workspace-CIycQ4xE.js";
4
4
  import { ThinkChatMessagesProps } from "./ThinkChat.js";
5
5
  import { t as ThinkAgent } from "../think-agent-Cip5KAPj.js";
6
+ import { McpPluginCatalogProps } from "./McpPluginCatalog.js";
6
7
  import { t as ThinkExecutionRun } from "../ThinkExecutionRun-ChhWhOoU.js";
7
8
  import { ThinkExecutionWorkbenchProps } from "./ThinkExecutionWorkbench.js";
8
9
  import { ThinkFullAppView } from "./ThinkFullAppViewSwitch.js";
@@ -16,7 +17,7 @@ import { useAgent } from "agents/react";
16
17
  //#region src/components/ThinkFullApp.d.ts
17
18
  type ThinkFullAppMobileView = "chat" | "workbench";
18
19
  type ThinkFullAppAgent<State = unknown> = ThinkAgent<State>;
19
- type ThinkFullAppWorkbenchView = "files" | "execution" | (string & {});
20
+ type ThinkFullAppWorkbenchView = "files" | "execution" | "plugins" | (string & {});
20
21
  interface ThinkFullAppWorkspaceConfig {
21
22
  source: WorkspaceSource;
22
23
  /**
@@ -49,6 +50,8 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
49
50
  chat: ReturnType<typeof useAgentChat<State, MessageT>>;
50
51
  /** Atomic workspace source, navigation, media, and header configuration. */
51
52
  workspace?: ThinkFullAppWorkspaceConfig;
53
+ /** Plugin directory backed by the host's live Agents MCP state and connection callbacks. */
54
+ plugins?: McpPluginCatalogProps;
52
55
  /** Product-specific actions rendered in the application top bar. */
53
56
  appBarActions?: React.ReactNode;
54
57
  /** Product-specific navigation rendered after the built-in sidebar control. */
@@ -76,7 +79,7 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
76
79
  renderExecutionRunLink: ThinkExecutionWorkbenchProps["renderRunLink"];
77
80
  /** Message rendering labels and approval overrides for ThinkChat. */
78
81
  messages?: ThinkChatMessagesProps<MessageT>;
79
- /** Extra workbench panels appended after the built-in Files and Execution panels. */
82
+ /** Extra workbench panels appended after the enabled built-in panels. */
80
83
  workbenchPanels?: readonly ThinkFullAppPanel<AgentT, State, MessageT>[];
81
84
  /** Show retained Agent Tool runs from the parent connection. Defaults to true. */
82
85
  showAgentTools?: boolean;
@@ -126,6 +129,7 @@ declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = u
126
129
  onMobileViewChange,
127
130
  onThreadSidebarOpenChange,
128
131
  onWorkbenchViewChange,
132
+ plugins,
129
133
  ref,
130
134
  renderAgentToolRunLink,
131
135
  renderExecutionRunLink,
@@ -1,12 +1,14 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { S as FileIcon, X as TerminalIcon, d as ChevronDownIcon } from "../icons-DyOM0EJs.js";
3
2
  import { Button } from "./Button.js";
3
+ import { C as FileIcon, Z as TerminalIcon, c as BoxIcon, f as ChevronDownIcon } from "../icons-ua6f_GH3.js";
4
4
  import { a as WorkspaceNavigationRestorationBoundary, i as WorkspaceNavigationFocusRestorer, n as WorkspaceNavigationProvider } from "../WorkspaceLink-BYYeTQLf.js";
5
5
  import { n as mergeRefs } from "../merge-refs-DF_7w2x_.js";
6
6
  import { AppTopBar } from "./AppTopBar.js";
7
7
  import { c as resolveThinkApprovalProps, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../ThinkChat-E_HrfH76.js";
8
8
  import { useWorkspace } from "./Workspace.js";
9
9
  import { WorkspaceExplorer } from "./WorkspaceExplorer.js";
10
+ import { ScrollArea } from "./ScrollArea.js";
11
+ import { McpPluginCatalog } from "./McpPluginCatalog.js";
10
12
  import { n as runViewTransition } from "../view-transitions-DyUP0lSg.js";
11
13
  import { ResizableSidePanel } from "./ResizableSidePanel.js";
12
14
  import { ThinkExecutionWorkbench } from "./ThinkExecutionWorkbench.js";
@@ -38,8 +40,14 @@ function WorkspacePanel({ config }) {
38
40
  actions: config.actions
39
41
  });
40
42
  }
43
+ function PluginsPanel({ config }) {
44
+ return /* @__PURE__ */ jsxs(ScrollArea.Root, {
45
+ className: "think-full-app__workbench",
46
+ children: [/* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx(McpPluginCatalog, { ...config }) }), /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })]
47
+ });
48
+ }
41
49
  /** Combines ThinkChat with an optional resizable workbench shell. */
42
- function ThinkFullApp({ agent, appBarActions, appBarLeading, appBarTitle, chat, className, defaultMobileView, defaultWorkbenchView, defaultThreadSidebarOpen, hideAppBarInWorkbench = false, messages, mobileView, onMobileViewChange, onThreadSidebarOpenChange, onWorkbenchViewChange, ref, renderAgentToolRunLink, renderExecutionRunLink, selectedExecutionRun, showAgentTools = true, showExecutionWorkbench = true, showMobileViewSwitch = true, sourceKey, style, threadSidebar, threadSidebarOpen, threadStatusSummary, workbenchPanels, workbenchView, workspace, ...props }) {
50
+ function ThinkFullApp({ agent, appBarActions, appBarLeading, appBarTitle, chat, className, defaultMobileView, defaultWorkbenchView, defaultThreadSidebarOpen, hideAppBarInWorkbench = false, messages, mobileView, onMobileViewChange, onThreadSidebarOpenChange, onWorkbenchViewChange, plugins, ref, renderAgentToolRunLink, renderExecutionRunLink, selectedExecutionRun, showAgentTools = true, showExecutionWorkbench = true, showMobileViewSwitch = true, sourceKey, style, threadSidebar, threadSidebarOpen, threadStatusSummary, workbenchPanels, workbenchView, workspace, ...props }) {
43
51
  const appRef = React.useRef(null);
44
52
  const viewScopeRef = React.useRef(null);
45
53
  const workbenchPanelRef = React.useRef(null);
@@ -116,6 +124,12 @@ function ThinkFullApp({ agent, appBarActions, appBarLeading, appBarTitle, chat,
116
124
  renderRunLink: renderExecutionRunLink
117
125
  })
118
126
  });
127
+ if (plugins) availableWorkbenchPanels.push({
128
+ id: "plugins",
129
+ label: "Plugins",
130
+ icon: /* @__PURE__ */ jsx(BoxIcon, {}),
131
+ render: () => /* @__PURE__ */ jsx(PluginsPanel, { config: plugins })
132
+ });
119
133
  if (workbenchPanels) availableWorkbenchPanels.push(...workbenchPanels);
120
134
  const activePanel = availableWorkbenchPanels.find((panel) => panel.id === requestedWorkbenchView) ?? availableWorkbenchPanels[0];
121
135
  const activeWorkbenchView = activePanel?.id;
@@ -219,6 +233,7 @@ function ThinkFullApp({ agent, appBarActions, appBarLeading, appBarTitle, chat,
219
233
  /* @__PURE__ */ jsxs("div", {
220
234
  ref: viewScopeRef,
221
235
  className: "think-full-app__view-scope",
236
+ "data-recipe": "application-plane",
222
237
  children: [/* @__PURE__ */ jsx("section", {
223
238
  className: "think-full-app__chat-surface",
224
239
  "data-workspace-restoration-scope": "chat",
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { V as PlusIcon } from "../icons-DyOM0EJs.js";
3
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
2
  import { buttonVariants } from "./Button.js";
3
+ import { H as PlusIcon } from "../icons-ua6f_GH3.js";
4
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
5
5
  import { Tooltip } from "./Tooltip.js";
6
6
  import { t as capitalize } from "../format-S6uWyoSb.js";
7
7
  import { SearchField } from "./SearchField.js";
@@ -1,11 +1,11 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon } from "../icons-DyOM0EJs.js";
3
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
2
  import { Button, buttonVariants } from "./Button.js";
3
+ import { q as SpinnerIcon } from "../icons-ua6f_GH3.js";
4
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
5
+ import { Select } from "./Select.js";
5
6
  import { Field } from "./Field.js";
6
7
  import { Form } from "./Form.js";
7
8
  import { Textarea } from "./Textarea.js";
8
- import { Select } from "./Select.js";
9
9
  import * as React from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
11
11
  //#region src/components/ThinkRoutineForm.tsx
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { B as PlayIcon, K as SpinnerIcon, Q as WarningIcon, d as ChevronDownIcon, y as EllipsisIcon } from "../icons-DyOM0EJs.js";
3
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
2
  import { Button, buttonVariants } from "./Button.js";
3
+ import { $ as WarningIcon, V as PlayIcon, b as EllipsisIcon, f as ChevronDownIcon, q as SpinnerIcon } from "../icons-ua6f_GH3.js";
4
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
5
5
  import { Menu } from "./Menu.js";
6
6
  import { AppTopBar } from "./AppTopBar.js";
7
7
  import { AlertDialog } from "./AlertDialog.js";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
3
2
  import { buttonVariants } from "./Button.js";
3
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
4
  import { EmptyState } from "./EmptyState.js";
5
5
  import { Badge } from "./Badge.js";
6
6
  import { formatThinkExecutionShortTimestamp, getThinkExecutionRunId, getThinkExecutionRunStatus, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon, Q as WarningIcon, V as PlusIcon, _ as DotIcon, t as ArchiveIcon } from "../icons-DyOM0EJs.js";
3
- import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
4
2
  import { Button, buttonVariants } from "./Button.js";
3
+ import { $ as WarningIcon, H as PlusIcon, q as SpinnerIcon, t as ArchiveIcon, v as DotIcon } from "../icons-ua6f_GH3.js";
4
+ import { t as NavigationLink } from "../navigation-link-Cob7KBlM.js";
5
5
  import { EmptyState } from "./EmptyState.js";
6
6
  import { SearchField } from "./SearchField.js";
7
7
  import { AlertDialog } from "./AlertDialog.js";
@@ -33,7 +33,15 @@ interface ToastActionProps extends React.ComponentPropsWithoutRef<typeof Toast$1
33
33
  /**
34
34
  * Props for the Toast.Close component.
35
35
  */
36
- interface ToastCloseProps extends React.ComponentPropsWithoutRef<typeof Toast$1.Close> {}
36
+ type BaseToastCloseProps = React.ComponentPropsWithoutRef<typeof Toast$1.Close>;
37
+ interface ToastCloseProps extends Omit<BaseToastCloseProps, "aria-label" | "children" | "className" | "nativeButton" | "render"> {
38
+ /** Additional class names for close-button layout. */
39
+ className?: string;
40
+ /** Accessible name for the icon-only close button. */
41
+ label?: string;
42
+ /** Decorative close glyph. Defaults to the design-system close icon. */
43
+ children?: React.ReactNode;
44
+ }
37
45
  /**
38
46
  * Container for displaying toasts.
39
47
  */
@@ -100,6 +108,8 @@ declare function ToastAction({
100
108
  */
101
109
  declare function ToastClose({
102
110
  className,
111
+ label,
112
+ children,
103
113
  ref,
104
114
  ...props
105
115
  }: ToastCloseProps & {
@@ -133,7 +143,7 @@ declare function ToastClose({
133
143
  * <Toast.Title>{toast.title}</Toast.Title>
134
144
  * <Toast.Description>{toast.description}</Toast.Description>
135
145
  * </Toast.Content>
136
- * <Toast.Close>Dismiss</Toast.Close>
146
+ * <Toast.Close />
137
147
  * </Toast.Root>
138
148
  * ))}
139
149
  * </Toast.Viewport>