@mcp-b/react-components 0.21.0 → 0.23.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 (168) 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/ScrollArea.js +1 -0
  90. package/dist/components/SearchField.js +1 -1
  91. package/dist/components/Select.js +1 -1
  92. package/dist/components/Sources.js +1 -1
  93. package/dist/components/Stepper.js +1 -1
  94. package/dist/components/SubagentRunIndicator.js +1 -1
  95. package/dist/components/SubagentRunSelector.js +1 -1
  96. package/dist/components/Task.js +1 -1
  97. package/dist/components/Terminal.d.ts +3 -3
  98. package/dist/components/Terminal.js +7 -8
  99. package/dist/components/TestResults.js +1 -1
  100. package/dist/components/ThemeModeControl.js +1 -1
  101. package/dist/components/ThinkChat.d.ts +5 -5
  102. package/dist/components/ThinkChatActivity.d.ts +1 -1
  103. package/dist/components/ThinkChatActivity.js +1 -1
  104. package/dist/components/ThinkChatToolPanels.js +1 -1
  105. package/dist/components/ThinkExecutionDetail.js +1 -1
  106. package/dist/components/ThinkExecutionStatus.js +1 -1
  107. package/dist/components/ThinkExecutionWorkbench.js +14 -21
  108. package/dist/components/ThinkFullApp.d.ts +8 -4
  109. package/dist/components/ThinkFullApp.js +17 -2
  110. package/dist/components/ThinkRoutineBrowser.js +2 -2
  111. package/dist/components/ThinkRoutineForm.js +3 -3
  112. package/dist/components/ThinkRoutineLibrary.js +2 -2
  113. package/dist/components/ThinkRoutineRuns.js +1 -1
  114. package/dist/components/ThinkThreadPicker.js +2 -3
  115. package/dist/components/Toast.d.ts +12 -2
  116. package/dist/components/Toast.js +14 -4
  117. package/dist/components/Tooltip.d.ts +6 -4
  118. package/dist/components/Tooltip.js +11 -4
  119. package/dist/components/WebPreview.d.ts +13 -6
  120. package/dist/components/WebPreview.js +55 -50
  121. package/dist/components/Workspace.d.ts +1 -1
  122. package/dist/components/WorkspaceBrowser.d.ts +1 -1
  123. package/dist/components/WorkspaceBrowser.js +1 -1
  124. package/dist/components/WorkspaceExplorer.d.ts +3 -3
  125. package/dist/components/WorkspaceExplorer.js +1 -1
  126. package/dist/components/WorkspaceFile.d.ts +1 -1
  127. package/dist/components/WorkspaceFileView.d.ts +1 -1
  128. package/dist/components/WorkspaceFileView.js +1 -1
  129. package/dist/components/WorkspaceHeader.js +1 -1
  130. package/dist/components/icons.d.ts +2 -2
  131. package/dist/components/icons.js +2 -2
  132. package/dist/{copy-button-BrvQ7z4W.d.ts → copy-button-EBv_B9F6.d.ts} +2 -2
  133. package/dist/{copy-button-vo1paUSi.js → copy-button-TWq8nZhc.js} +8 -8
  134. package/dist/{icons-DyOM0EJs.js → icons-ua6f_GH3.js} +3 -2
  135. package/dist/{icons-DkRtZmvT.d.ts → icons-wP1yFUXF.d.ts} +6 -1
  136. package/dist/mcp-server-catalog-DycejaJ5.d.ts +1077 -0
  137. package/dist/styles/action-guide.css +128 -0
  138. package/dist/styles/agent-activity-preview-overlay.css +13 -1
  139. package/dist/styles/agent-activity-preview.css +3 -34
  140. package/dist/styles/agent-chat.css +110 -75
  141. package/dist/styles/alert-dialog.css +0 -18
  142. package/dist/styles/app-icon.css +122 -0
  143. package/dist/styles/app-top-bar.css +0 -1
  144. package/dist/styles/avatar.css +13 -0
  145. package/dist/styles/base.css +0 -1
  146. package/dist/styles/button.css +14 -0
  147. package/dist/styles/description-list.css +2 -2
  148. package/dist/styles/dialog.css +6 -6
  149. package/dist/styles/index.css +3 -0
  150. package/dist/styles/mcp-plugin-catalog.css +296 -0
  151. package/dist/styles/mcp-server-picker.css +0 -26
  152. package/dist/styles/message-scroller.css +5 -1
  153. package/dist/styles/message.css +7 -0
  154. package/dist/styles/prompt-input.css +26 -14
  155. package/dist/styles/recipes.css +27 -5
  156. package/dist/styles/responsive-sidebar-shell.css +14 -8
  157. package/dist/styles/search-field.css +9 -0
  158. package/dist/styles/think-full-app.css +22 -2
  159. package/dist/styles/think-thread-picker.css +1 -11
  160. package/dist/styles/toast.css +0 -21
  161. package/dist/styles/tokens.css +6 -0
  162. package/dist/styles/web-preview.css +5 -0
  163. package/dist/utils/favicon.d.ts +10 -0
  164. package/dist/utils/favicon.js +18 -0
  165. package/dist/utils/mcp-server-catalog.d.ts +2 -1078
  166. package/dist/utils/mcp-server-catalog.js +3 -11
  167. package/dist/utils/structured-code.d.ts +1 -1
  168. 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
  }),
@@ -37,6 +37,7 @@ function ScrollAreaViewport({ className, ref, ...props }) {
37
37
  return /* @__PURE__ */ jsx(ScrollArea$1.Viewport, {
38
38
  ref,
39
39
  "data-slot": "scroll-area-viewport",
40
+ "data-recipe": "scroll-fade-y",
40
41
  className: classes,
41
42
  ...props
42
43
  });
@@ -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";
@@ -188,7 +188,6 @@ function ThinkThreadPicker({ threads, renderThreadLink, onCreate, onDelete, clas
188
188
  className: "think-thread-picker__scroll",
189
189
  children: [/* @__PURE__ */ jsx(ScrollArea.Viewport, {
190
190
  className: "think-thread-picker__viewport",
191
- "data-recipe": "scroll-fade-y",
192
191
  "aria-label": "Thread list",
193
192
  children: visibleThreads.length ? /* @__PURE__ */ jsx("ul", {
194
193
  className: "think-thread-picker__list",