@mcp-b/react-components 0.38.0 → 0.40.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 (89) hide show
  1. package/dist/{CodeBlock-DO4Hdu1R.js → CodeBlock-CWk1FVtm.js} +1 -1
  2. package/dist/{FileTree-DbQMpvxV.js → FileTree-xqHYBw4g.js} +1 -1
  3. package/dist/{WorkspaceFileView-DeGzWwhK.js → WorkspaceFileView-Lab3om3F.js} +2 -2
  4. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  5. package/dist/components/agents-sdk/AgentActivityPreview.js +1 -1
  6. package/dist/components/agents-sdk/AgentChat.js +7 -7
  7. package/dist/components/agents-sdk/BrowserLiveView.d.ts +73 -25
  8. package/dist/components/agents-sdk/BrowserLiveView.js +95 -65
  9. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  10. package/dist/components/agents-sdk/BrowserRunPanel.d.ts +72 -25
  11. package/dist/components/agents-sdk/BrowserRunPanel.js +109 -62
  12. package/dist/components/agents-sdk/McpConnectionRequest.js +1 -1
  13. package/dist/components/agents-sdk/McpPluginCatalog.js +1 -1
  14. package/dist/components/agents-sdk/McpServerPicker.js +1 -1
  15. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  16. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  17. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  18. package/dist/components/agents-sdk/SubagentRunSelector.js +1 -1
  19. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  20. package/dist/components/agents-sdk/ThinkExecutionDetail.js +1 -1
  21. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  22. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -1
  23. package/dist/components/agents-sdk/ThinkFullApp.js +8 -7
  24. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +1 -1
  25. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  26. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +1 -1
  27. package/dist/components/agents-sdk/ThinkThreadPicker.js +1 -1
  28. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  29. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  30. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  31. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  32. package/dist/components/agents-sdk/WorkspaceMountManager.js +1 -1
  33. package/dist/components/ai-sdk/Activity.js +1 -1
  34. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  35. package/dist/components/ai-sdk/Approval.js +1 -1
  36. package/dist/components/ai-sdk/Artifact.js +1 -1
  37. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  38. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  39. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  40. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  41. package/dist/components/ai-sdk/Conversation.js +1 -1
  42. package/dist/components/ai-sdk/Goal.js +1 -1
  43. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  44. package/dist/components/ai-sdk/Message.js +1 -1
  45. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  46. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  47. package/dist/components/ai-sdk/Plan.js +1 -1
  48. package/dist/components/ai-sdk/PromptInput.js +1 -1
  49. package/dist/components/ai-sdk/Queue.js +1 -1
  50. package/dist/components/ai-sdk/Reasoning.js +1 -1
  51. package/dist/components/ai-sdk/Sources.js +1 -1
  52. package/dist/components/ai-sdk/Task.js +1 -1
  53. package/dist/components/extension/ChatGptSignInScreen.d.ts +21 -10
  54. package/dist/components/extension/ChatGptSignInScreen.js +42 -34
  55. package/dist/components/extension/CodexModelSelector.js +1 -1
  56. package/dist/components/extension/ConversationTabPicker.js +1 -1
  57. package/dist/components/foundations/Checkbox.js +1 -1
  58. package/dist/components/foundations/ContextMenu.js +1 -1
  59. package/dist/components/foundations/EmptyState.d.ts +10 -0
  60. package/dist/components/foundations/EmptyState.js +10 -0
  61. package/dist/components/foundations/Menubar.js +1 -1
  62. package/dist/components/foundations/SearchField.js +1 -1
  63. package/dist/components/foundations/Select.js +1 -1
  64. package/dist/components/foundations/Stepper.js +1 -1
  65. package/dist/components/foundations/Toast.js +1 -1
  66. package/dist/components/foundations/icons.d.ts +2 -2
  67. package/dist/components/foundations/icons.js +2 -2
  68. package/dist/components/general-purpose/Commit.js +2 -2
  69. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  70. package/dist/components/general-purpose/FileTree.js +1 -1
  71. package/dist/components/general-purpose/PricingPlanCard.js +1 -1
  72. package/dist/components/general-purpose/ResponsiveSidebarShell.js +1 -1
  73. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  74. package/dist/components/general-purpose/Terminal.js +2 -2
  75. package/dist/components/general-purpose/TestResults.js +1 -1
  76. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  77. package/dist/components/general-purpose/WebPreview.js +1 -1
  78. package/dist/components/nanites/AgentConnection.js +2 -2
  79. package/dist/components/nanites/AgentToolDetail.js +1 -1
  80. package/dist/{copy-button-4YvddK4e.js → copy-button-Bc7jsYv_.js} +1 -1
  81. package/dist/{icons-BGZ916hb.d.ts → icons-DwgNir1Q.d.ts} +6 -1
  82. package/dist/{icons-B4mGvCvc.js → icons-MmIXciMO.js} +3 -2
  83. package/dist/styles/agent-chat.css +2 -2
  84. package/dist/styles/base.css +4 -0
  85. package/dist/styles/browser-live-view.css +45 -0
  86. package/dist/styles/browser-run-panel.css +3 -1
  87. package/dist/styles/chatgpt-sign-in-screen.css +6 -0
  88. package/dist/styles/think-full-app.css +14 -0
  89. package/package.json +2 -2
@@ -1,21 +1,21 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, rt as XIcon } from "../../icons-B4mGvCvc.js";
2
+ import { Y as SpinnerIcon, it as XIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Tabs } from "../foundations/Tabs.js";
5
5
  import { WebPreview, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewUrl } from "../general-purpose/WebPreview.js";
6
6
  import { BrowserLiveView } from "./BrowserLiveView.js";
7
7
  import * as React from "react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/components/agents-sdk/BrowserRunPanel.tsx
10
10
  function isInspectablePage(target) {
11
11
  const pageUrl = target.pageUrl;
12
12
  return Boolean(pageUrl && !pageUrl.startsWith("about:") && !pageUrl.startsWith("chrome:") && !pageUrl.startsWith("devtools:"));
13
13
  }
14
- function targetLabel(target) {
15
- return target.title || target.pageUrl || target.targetId;
14
+ function tabLabel(tab) {
15
+ return tab.title || tab.url || tab.id;
16
16
  }
17
- function targetGlyph(target) {
18
- return (target.title || target.pageUrl || target.targetId).trim().charAt(0).toUpperCase() || "•";
17
+ function tabGlyph(tab) {
18
+ return tabLabel(tab).trim().charAt(0).toUpperCase() || "•";
19
19
  }
20
20
  function pickTarget(targets, targetId) {
21
21
  return (targetId ? targets.find((target) => target.targetId === targetId) : void 0) ?? targets.find(isInspectablePage) ?? targets[0];
@@ -28,60 +28,33 @@ function BrowserRunPanelState({ children, role, tone = "neutral" }) {
28
28
  children
29
29
  });
30
30
  }
31
- /**
32
- * Right-side Browser Run panel for `ThinkFullApp.workbenchPanels`.
33
- *
34
- * The app owns `createBrowserRuntime()`, `connector.liveView()`, polling, and
35
- * session cleanup. This component only renders upstream `BrowserLiveView`
36
- * data and calls app-provided refresh/close callbacks.
37
- */
38
- function BrowserRunPanel({ liveView, onRefresh, onCloseSession, loading, error, label = "Browser", empty = "No live browser session", fallback, className, ref, ...props }) {
39
- const [requestedTargetId, setRequestedTargetId] = React.useState();
40
- const [receivedAt, setReceivedAt] = React.useState(() => Date.now());
41
- React.useEffect(() => {
42
- if (liveView) setReceivedAt(Date.now());
43
- }, [liveView]);
44
- const targets = liveView?.targets ?? [];
45
- const target = pickTarget(targets, requestedTargetId);
46
- const pageUrl = target?.pageUrl ?? "";
47
- const body = target && liveView ? /* @__PURE__ */ jsx(BrowserLiveView, {
48
- source: {
49
- url: target.url,
50
- targetId: target.targetId,
51
- expiresInMs: liveView.expiresInMs
52
- },
53
- receivedAt,
54
- pageTitle: target.title ?? target.pageUrl,
55
- fallback,
56
- className: "browser-run-panel__live-view"
57
- }) : loading ? /* @__PURE__ */ jsxs(BrowserRunPanelState, {
58
- role: "status",
59
- children: [/* @__PURE__ */ jsx(SpinnerIcon, {}), "Loading browser session"]
60
- }) : /* @__PURE__ */ jsx(BrowserRunPanelState, { children: empty });
31
+ /** The one rendering of the panel chrome, whichever mode filled its props in. */
32
+ function BrowserRunPanelFrame({ body, bodyBusy, bodyTabValue, className, error, label = "Browser", navigation, navigationEnd, onOpenUrl, onSelectTab, ref, selectedTabId, tabs, url, urlDisabled, urlLabel = "Browser page URL", urlPlaceholder, urlReadOnly, ...props }) {
61
33
  const bodyProps = {
62
34
  className: "web-preview__body browser-run-panel__body",
63
- "aria-busy": loading || void 0
35
+ "aria-busy": bodyBusy || void 0
64
36
  };
65
37
  return /* @__PURE__ */ jsxs(Tabs.Root, {
66
38
  className: cx("browser-run-panel", className),
67
- value: target?.targetId ?? null,
39
+ value: selectedTabId ?? null,
68
40
  onValueChange: (value) => {
69
- if (typeof value === "string") setRequestedTargetId(value);
41
+ if (typeof value === "string" && value !== selectedTabId) onSelectTab?.(value);
70
42
  },
71
43
  render: /* @__PURE__ */ jsx(WebPreview, {
72
44
  ref,
73
- url: pageUrl,
45
+ url,
46
+ ...onOpenUrl ? { onUrlChange: onOpenUrl } : {},
74
47
  role: "region",
75
48
  "aria-label": typeof label === "string" ? label : "Browser",
76
49
  ...props
77
50
  }),
78
51
  children: [
79
- targets.length > 1 ? /* @__PURE__ */ jsx(WebPreviewNavigation, { children: /* @__PURE__ */ jsxs(Tabs.List, {
52
+ tabs.length > 1 ? /* @__PURE__ */ jsx(WebPreviewNavigation, { children: /* @__PURE__ */ jsxs(Tabs.List, {
80
53
  className: "browser-run-panel__tabs",
81
54
  "aria-label": "Open browser pages",
82
55
  activateOnFocus: true,
83
- children: [targets.map((candidate) => /* @__PURE__ */ jsxs(Tabs.Tab, {
84
- value: candidate.targetId,
56
+ children: [tabs.map((tab) => /* @__PURE__ */ jsxs(Tabs.Tab, {
57
+ value: tab.id,
85
58
  className: "browser-run-panel__tab",
86
59
  render: /* @__PURE__ */ jsx(Button, {
87
60
  type: "button",
@@ -92,41 +65,33 @@ function BrowserRunPanel({ liveView, onRefresh, onCloseSession, loading, error,
92
65
  children: [/* @__PURE__ */ jsx("span", {
93
66
  className: "browser-run-panel__tab-glyph",
94
67
  "aria-hidden": "true",
95
- children: targetGlyph(candidate)
68
+ children: tabGlyph(tab)
96
69
  }), /* @__PURE__ */ jsx("span", {
97
70
  className: "browser-run-panel__tab-title sigvelo-truncate",
98
- children: targetLabel(candidate)
71
+ children: tabLabel(tab)
99
72
  })]
100
- }, candidate.targetId)), /* @__PURE__ */ jsx(Tabs.Indicator, {})]
73
+ }, tab.id)), /* @__PURE__ */ jsx(Tabs.Indicator, {})]
101
74
  }) }) : null,
102
75
  /* @__PURE__ */ jsxs(WebPreviewNavigation, {
103
76
  className: "browser-run-panel__address-bar",
104
77
  children: [
78
+ navigation,
105
79
  /* @__PURE__ */ jsx(WebPreviewUrl, {
106
- "aria-label": "Browser page URL",
107
- placeholder: "Waiting for browser session",
108
- readOnly: true
80
+ "aria-label": urlLabel,
81
+ placeholder: urlPlaceholder,
82
+ readOnly: urlReadOnly,
83
+ disabled: urlDisabled
109
84
  }),
110
- onRefresh ? /* @__PURE__ */ jsx(WebPreviewNavigationButton, {
111
- action: "reload",
112
- label: "Refresh browser view",
113
- disabled: loading,
114
- onClick: () => void onRefresh()
115
- }) : null,
116
- onCloseSession ? /* @__PURE__ */ jsx(WebPreviewNavigationButton, {
117
- label: "Close browser session",
118
- onClick: () => void onCloseSession(),
119
- children: /* @__PURE__ */ jsx(XIcon, {})
120
- }) : null
85
+ navigationEnd
121
86
  ]
122
87
  }),
123
88
  error ? /* @__PURE__ */ jsx(BrowserRunPanelState, {
124
89
  tone: "danger",
125
90
  children: error
126
91
  }) : null,
127
- targets.length > 1 && target ? /* @__PURE__ */ jsx(Tabs.Panel, {
92
+ bodyTabValue !== void 0 ? /* @__PURE__ */ jsx(Tabs.Panel, {
128
93
  ...bodyProps,
129
- value: target.targetId,
94
+ value: bodyTabValue,
130
95
  children: body
131
96
  }) : /* @__PURE__ */ jsx("div", {
132
97
  ...bodyProps,
@@ -135,5 +100,87 @@ function BrowserRunPanel({ liveView, onRefresh, onCloseSession, loading, error,
135
100
  ]
136
101
  });
137
102
  }
103
+ function HostedBrowserRunPanel({ liveView, onRefresh, onCloseSession, loading, error, label, empty = "No live browser session", fallback, ...props }) {
104
+ const [requestedTargetId, setRequestedTargetId] = React.useState();
105
+ const [receivedAt, setReceivedAt] = React.useState(() => Date.now());
106
+ React.useEffect(() => {
107
+ if (liveView) setReceivedAt(Date.now());
108
+ }, [liveView]);
109
+ const targets = liveView?.targets ?? [];
110
+ const target = pickTarget(targets, requestedTargetId);
111
+ const body = target && liveView ? /* @__PURE__ */ jsx(BrowserLiveView, {
112
+ source: {
113
+ url: target.url,
114
+ targetId: target.targetId,
115
+ expiresInMs: liveView.expiresInMs
116
+ },
117
+ receivedAt,
118
+ pageTitle: target.title ?? target.pageUrl,
119
+ fallback
120
+ }) : loading ? /* @__PURE__ */ jsxs(BrowserRunPanelState, {
121
+ role: "status",
122
+ children: [/* @__PURE__ */ jsx(SpinnerIcon, {}), "Loading browser session"]
123
+ }) : /* @__PURE__ */ jsx(BrowserRunPanelState, { children: empty });
124
+ return /* @__PURE__ */ jsx(BrowserRunPanelFrame, {
125
+ ...props,
126
+ body,
127
+ bodyBusy: loading,
128
+ bodyTabValue: targets.length > 1 && target ? target.targetId : void 0,
129
+ error,
130
+ label,
131
+ navigationEnd: /* @__PURE__ */ jsxs(Fragment, { children: [onRefresh ? /* @__PURE__ */ jsx(WebPreviewNavigationButton, {
132
+ action: "reload",
133
+ label: "Refresh browser view",
134
+ disabled: loading,
135
+ onClick: () => void onRefresh()
136
+ }) : null, onCloseSession ? /* @__PURE__ */ jsx(WebPreviewNavigationButton, {
137
+ label: "Close browser session",
138
+ onClick: () => void onCloseSession(),
139
+ children: /* @__PURE__ */ jsx(XIcon, {})
140
+ }) : null] }),
141
+ onSelectTab: setRequestedTargetId,
142
+ selectedTabId: target?.targetId ?? null,
143
+ tabs: targets.map((candidate) => ({
144
+ id: candidate.targetId,
145
+ ...candidate.title === void 0 ? {} : { title: candidate.title },
146
+ ...candidate.pageUrl === void 0 ? {} : { url: candidate.pageUrl }
147
+ })),
148
+ url: target?.pageUrl ?? "",
149
+ urlPlaceholder: "Waiting for browser session",
150
+ urlReadOnly: true
151
+ });
152
+ }
153
+ function StreamedBrowserRunPanel({ children, tabs = [], selectedTabId = null, onSelectTab, url = "", onOpenUrl, urlPlaceholder, urlDisabled, urlLabel, navigation, ...props }) {
154
+ return /* @__PURE__ */ jsx(BrowserRunPanelFrame, {
155
+ ...props,
156
+ body: children,
157
+ navigation,
158
+ onOpenUrl,
159
+ onSelectTab,
160
+ selectedTabId,
161
+ tabs,
162
+ url,
163
+ urlDisabled,
164
+ urlLabel,
165
+ urlPlaceholder,
166
+ urlReadOnly: onOpenUrl === void 0 || void 0
167
+ });
168
+ }
169
+ /**
170
+ * Browser panel chrome — drawn tab strip, address bar, framed body — for
171
+ * browser surfaces Chrome itself never paints.
172
+ *
173
+ * Two hosts fill it in. A Browser Run host passes upstream `BrowserLiveView`
174
+ * data from `connector.liveView()`, and the panel derives tabs, address, and
175
+ * an embedded live view itself, calling app-provided refresh/close callbacks.
176
+ * A streaming host instead passes `children` — its own live surface — with
177
+ * the tab strip, address bar, and navigation controlled from the host's own
178
+ * records, because a remote screencast carries only page pixels and every
179
+ * piece of chrome around it has to be synthesized from host state.
180
+ */
181
+ function BrowserRunPanel(props) {
182
+ if (props.children !== void 0) return /* @__PURE__ */ jsx(StreamedBrowserRunPanel, { ...props });
183
+ return /* @__PURE__ */ jsx(HostedBrowserRunPanel, { ...props });
184
+ }
138
185
  //#endregion
139
186
  export { BrowserRunPanel };
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, d as CheckIcon, j as McpIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { M as McpIcon, Y as SpinnerIcon, d as CheckIcon, nt as WarningIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { AgentAttention, AgentAttentionActions, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
5
5
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { H as PlusIcon, J as SpinnerIcon, b as EllipsisIcon, o as ArrowUpRightIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { U as PlusIcon, Y as SpinnerIcon, b as EllipsisIcon, it as XIcon, nt as WarningIcon, o as ArrowUpRightIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { AgentAttention, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
5
5
  import { IconButton } from "../foundations/IconButton.js";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, P as MinusIcon, d as CheckIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { F as MinusIcon, Y as SpinnerIcon, d as CheckIcon, nt as WarningIcon } from "../../icons-MmIXciMO.js";
3
3
  import { buttonVariants } from "../foundations/Button.js";
4
4
  import { Menu } from "../foundations/Menu.js";
5
5
  import { Dialog } from "../foundations/Dialog.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { G as SearchIcon, f as ChevronDownIcon } from "../../icons-B4mGvCvc.js";
2
+ import { K as SearchIcon, f as ChevronDownIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Autocomplete } from "../foundations/Autocomplete.js";
5
5
  import { Dialog } from "../foundations/Dialog.js";
@@ -1,4 +1,4 @@
1
- import { c as BoxIcon, j as McpIcon } from "../../icons-B4mGvCvc.js";
1
+ import { M as McpIcon, c as BoxIcon } from "../../icons-MmIXciMO.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/components/agents-sdk/PromptInputCommands.tsx
4
4
  /** Project whole upstream Agents MCP state into composer mention commands. */
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, X as StopIcon, d as CheckIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { Y as SpinnerIcon, Z as StopIcon, d as CheckIcon, nt as WarningIcon } from "../../icons-MmIXciMO.js";
3
3
  import "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/agents-sdk/SubagentRunIndicator.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { l as BrainIcon } from "../../icons-B4mGvCvc.js";
2
+ import { l as BrainIcon } from "../../icons-MmIXciMO.js";
3
3
  import { buttonVariants } from "../foundations/Button.js";
4
4
  import { Tooltip } from "../foundations/Tooltip.js";
5
5
  import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
@@ -1,7 +1,7 @@
1
1
  import { ActivityOutput, ActivityPanel } from "../ai-sdk/Activity.js";
2
2
  import { Tabs } from "../foundations/Tabs.js";
3
3
  import { a as formatUnknownValue } from "../../format-DB2mX9DA.js";
4
- import { t as CodeBlock } from "../../CodeBlock-DO4Hdu1R.js";
4
+ import { t as CodeBlock } from "../../CodeBlock-CWk1FVtm.js";
5
5
  import { BrowserLiveView } from "./BrowserLiveView.js";
6
6
  import { inferWorkspaceLanguage } from "./WorkspaceFile.js";
7
7
  import { displayUrl, isSessionContextToolFailure } from "./ThinkChatToolParts.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { $ as TerminalIcon, C as FileIcon, O as InfoIcon, W as RefreshIcon, d as CheckIcon, n as ArrowDownIcon, rt as XIcon } from "../../icons-B4mGvCvc.js";
2
+ import { C as FileIcon, G as RefreshIcon, O as InfoIcon, d as CheckIcon, et as TerminalIcon, it as XIcon, n as ArrowDownIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityOutput, ActivityPanel, ActivityTrigger } from "../ai-sdk/Activity.js";
4
4
  import { a as formatUnknownValue } from "../../format-DB2mX9DA.js";
5
5
  import { EmptyState } from "../foundations/EmptyState.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, O as InfoIcon, d as CheckIcon, rt as XIcon, z as PauseIcon } from "../../icons-B4mGvCvc.js";
2
+ import { B as PauseIcon, O as InfoIcon, Y as SpinnerIcon, d as CheckIcon, it as XIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Tooltip } from "../foundations/Tooltip.js";
4
4
  import { formatThinkExecutionRunProgress, formatThinkExecutionStatus, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, getThinkExecutionRunSubtitle, getThinkExecutionRunTitle } from "./ThinkExecutionRun.js";
5
5
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { W as RefreshIcon, b as EllipsisIcon } from "../../icons-B4mGvCvc.js";
2
+ import { G as RefreshIcon, b as EllipsisIcon } from "../../icons-MmIXciMO.js";
3
3
  import { buttonVariants } from "../foundations/Button.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
5
  import { Menu } from "../foundations/Menu.js";
@@ -1,8 +1,9 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { $ as TerminalIcon, C as FileIcon, J as SpinnerIcon, c as BoxIcon, f as ChevronDownIcon } from "../../icons-B4mGvCvc.js";
2
+ import { C as FileIcon, Y as SpinnerIcon, c as BoxIcon, et as TerminalIcon, f as ChevronDownIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
5
5
  import { ScrollArea } from "../foundations/ScrollArea.js";
6
+ import { EmptyState } from "../foundations/EmptyState.js";
6
7
  import { AppTopBar } from "../general-purpose/AppTopBar.js";
7
8
  import { ResizableSidePanel } from "../general-purpose/ResizableSidePanel.js";
8
9
  import { a as WorkspaceNavigationRestorationBoundary, i as WorkspaceNavigationFocusRestorer, n as WorkspaceNavigationProvider } from "../../WorkspaceLink-DtH66bAY.js";
@@ -119,13 +120,13 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
119
120
  label: "Execution",
120
121
  icon: /* @__PURE__ */ jsx(TerminalIcon, {}),
121
122
  render: () => /* @__PURE__ */ jsx(React.Suspense, {
122
- fallback: /* @__PURE__ */ jsxs("div", {
123
- className: "think-full-app__workbench",
123
+ fallback: /* @__PURE__ */ jsx("div", {
124
+ className: "think-full-app__workbench think-full-app__workbench--loading",
124
125
  role: "status",
125
- children: [/* @__PURE__ */ jsx(SpinnerIcon, {}), /* @__PURE__ */ jsx("span", {
126
- className: "sigvelo-visually-hidden",
127
- children: "Loading execution"
128
- })]
126
+ children: /* @__PURE__ */ jsx(EmptyState, {
127
+ icon: /* @__PURE__ */ jsx(SpinnerIcon, {}),
128
+ description: "Loading execution"
129
+ })
129
130
  }),
130
131
  children: /* @__PURE__ */ jsx(ThinkExecutionWorkbench, {
131
132
  source: agent.stub,
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { H as PlusIcon } from "../../icons-B4mGvCvc.js";
2
+ import { U as PlusIcon } from "../../icons-MmIXciMO.js";
3
3
  import { buttonVariants } from "../foundations/Button.js";
4
4
  import { Tooltip } from "../foundations/Tooltip.js";
5
5
  import { t as capitalize } from "../../format-DB2mX9DA.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon } from "../../icons-B4mGvCvc.js";
2
+ import { Y as SpinnerIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button, buttonVariants } from "../foundations/Button.js";
4
4
  import { Field } from "../foundations/Field.js";
5
5
  import { Form } from "../foundations/Form.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, V as PlayIcon, b as EllipsisIcon, f as ChevronDownIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { H as PlayIcon, Y as SpinnerIcon, b as EllipsisIcon, f as ChevronDownIcon, nt as WarningIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button, buttonVariants } from "../foundations/Button.js";
4
4
  import { Menu } from "../foundations/Menu.js";
5
5
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { H as PlusIcon, J as SpinnerIcon, t as ArchiveIcon, tt as WarningIcon, v as DotIcon } from "../../icons-B4mGvCvc.js";
2
+ import { U as PlusIcon, Y as SpinnerIcon, nt as WarningIcon, t as ArchiveIcon, v as DotIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button, buttonVariants } from "../foundations/Button.js";
4
4
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
5
5
  import { n as isPlainPrimaryLinkActivation, t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
@@ -1,5 +1,5 @@
1
1
  import { SearchField } from "../foundations/SearchField.js";
2
- import { i as FileTreeFolder, r as FileTreeFile, t as FileTree } from "../../FileTree-DbQMpvxV.js";
2
+ import { i as FileTreeFolder, r as FileTreeFile, t as FileTree } from "../../FileTree-xqHYBw4g.js";
3
3
  import { WorkspaceHeader } from "./WorkspaceHeader.js";
4
4
  import * as React from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -2,7 +2,7 @@ import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
3
3
  import { a as WorkspaceNavigationRestorationBoundary, n as WorkspaceNavigationProvider, o as useRequiredWorkspaceNavigationRestoration, r as resolveWorkspaceLink } from "../../WorkspaceLink-DtH66bAY.js";
4
4
  import { WorkspaceBrowser } from "./WorkspaceBrowser.js";
5
- import { t as WorkspaceFileView } from "../../WorkspaceFileView-DeGzWwhK.js";
5
+ import { t as WorkspaceFileView } from "../../WorkspaceFileView-Lab3om3F.js";
6
6
  import * as React from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  //#region src/components/agents-sdk/WorkspaceExplorer.tsx
@@ -1,2 +1,2 @@
1
- import { t as WorkspaceFileView } from "../../WorkspaceFileView-DeGzWwhK.js";
1
+ import { t as WorkspaceFileView } from "../../WorkspaceFileView-Lab3om3F.js";
2
2
  export { WorkspaceFileView };
@@ -1,4 +1,4 @@
1
- import { W as RefreshIcon } from "../../icons-B4mGvCvc.js";
1
+ import { G as RefreshIcon } from "../../icons-MmIXciMO.js";
2
2
  import { AppTopBar } from "../general-purpose/AppTopBar.js";
3
3
  import "react";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { R as PaperclipIcon } from "../../icons-B4mGvCvc.js";
1
+ import { z as PaperclipIcon } from "../../icons-MmIXciMO.js";
2
2
  import { Button } from "../foundations/Button.js";
3
3
  import { Popover } from "../foundations/Popover.js";
4
4
  import { Card, CardAction, CardFooter, CardHeader, CardTitle } from "../foundations/Card.js";
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
3
  import { useExpansionState } from "./ExpansionState.js";
4
- import { m as ChevronRightIcon } from "../../icons-B4mGvCvc.js";
4
+ import { m as ChevronRightIcon } from "../../icons-MmIXciMO.js";
5
5
  import * as React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/components/ai-sdk/Activity.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { rt as XIcon } from "../../icons-B4mGvCvc.js";
2
+ import { it as XIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
5
  import { PromptInputTray } from "./PromptInput.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { B as PencilIcon } from "../../icons-B4mGvCvc.js";
2
+ import { V as PencilIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Kbd } from "../foundations/Kbd.js";
5
5
  import { a as formatUnknownValue } from "../../format-DB2mX9DA.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { Y as SpinnerIcon, it as XIcon, nt as WarningIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button, buttonVariants } from "../foundations/Button.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
5
  import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
@@ -1,5 +1,5 @@
1
1
  import { Collapsible } from "../foundations/Collapsible.js";
2
- import { O as IconProps } from "../../icons-BGZ916hb.js";
2
+ import { O as IconProps } from "../../icons-DwgNir1Q.js";
3
3
  import * as React from "react";
4
4
 
5
5
  //#region src/components/ai-sdk/ChainOfThought.d.ts
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { J as SpinnerIcon, d as CheckIcon, m as ChevronRightIcon, v as DotIcon } from "../../icons-B4mGvCvc.js";
3
+ import { Y as SpinnerIcon, d as CheckIcon, m as ChevronRightIcon, v as DotIcon } from "../../icons-MmIXciMO.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ai-sdk/ChainOfThought.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { s as BookmarkIcon } from "../../icons-B4mGvCvc.js";
2
+ import { s as BookmarkIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Marker, MarkerIcon } from "../foundations/Marker.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,2 +1,2 @@
1
- import { a as CodeBlockCopyButton, c as CodeBlockLanguageSelector, d as CodeBlockLanguageSelectorTrigger, f as CodeBlockLanguageSelectorValue, i as CodeBlockContent, l as CodeBlockLanguageSelectorContent, m as CODE_BLOCK_LANGUAGES, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock, u as CodeBlockLanguageSelectorItem } from "../../CodeBlock-DO4Hdu1R.js";
1
+ import { a as CodeBlockCopyButton, c as CodeBlockLanguageSelector, d as CodeBlockLanguageSelectorTrigger, f as CodeBlockLanguageSelectorValue, i as CodeBlockContent, l as CodeBlockLanguageSelectorContent, m as CODE_BLOCK_LANGUAGES, n as CodeBlockActions, o as CodeBlockFilename, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock, u as CodeBlockLanguageSelectorItem } from "../../CodeBlock-CWk1FVtm.js";
2
2
  export { CODE_BLOCK_LANGUAGES, CodeBlock, CodeBlockActions, CodeBlockContainer, CodeBlockContent, CodeBlockCopyButton, CodeBlockFilename, CodeBlockHeader, CodeBlockLanguageSelector, CodeBlockLanguageSelectorContent, CodeBlockLanguageSelectorItem, CodeBlockLanguageSelectorTrigger, CodeBlockLanguageSelectorValue, CodeBlockTitle };
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon, y as DownloadIcon } from "../../icons-B4mGvCvc.js";
2
+ import { n as ArrowDownIcon, y as DownloadIcon } from "../../icons-MmIXciMO.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
4
  import { t as assignRef } from "../../merge-refs-DF_7w2x_.js";
5
5
  import { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport } from "./MessageScroller.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { Q as TargetIcon, V as PlayIcon, et as TrashIcon, z as PauseIcon } from "../../icons-B4mGvCvc.js";
2
+ import { $ as TargetIcon, B as PauseIcon, H as PlayIcon, tt as TrashIcon } from "../../icons-MmIXciMO.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
4
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { V as PlayIcon } from "../../icons-B4mGvCvc.js";
2
+ import { H as PlayIcon } from "../../icons-MmIXciMO.js";
3
3
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
4
4
  import { Card } from "../foundations/Card.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { C as FileIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-B4mGvCvc.js";
2
+ import { C as FileIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
5
  import { t as AttachmentPreview } from "../../attachment-preview-1CXJvrmb.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon } from "../../icons-B4mGvCvc.js";
2
+ import { n as ArrowDownIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as messageScrollerContract } from "../../message-scroller-C8cplcQO.js";
5
5
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon } from "../../icons-B4mGvCvc.js";
2
+ import { n as ArrowDownIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as messageScrollerContract } from "../../message-scroller-C8cplcQO.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { d as CheckIcon, i as ArrowRightIcon, v as DotIcon } from "../../icons-B4mGvCvc.js";
2
+ import { d as CheckIcon, i as ArrowRightIcon, v as DotIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Popover } from "../foundations/Popover.js";
4
4
  import { t as ProgressRing } from "../../progress-ring-BEocM1e3.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { C as FileIcon, F as MonitorIcon, H as PlusIcon, J as SpinnerIcon, N as MicrophoneIcon, R as PaperclipIcon, X as StopIcon, Y as SquareIcon, a as ArrowUpIcon, d as CheckIcon, f as ChevronDownIcon, nt as WrenchIcon, rt as XIcon, tt as WarningIcon, w as FolderIcon } from "../../icons-B4mGvCvc.js";
2
+ import { C as FileIcon, I as MonitorIcon, P as MicrophoneIcon, U as PlusIcon, X as SquareIcon, Y as SpinnerIcon, Z as StopIcon, a as ArrowUpIcon, d as CheckIcon, f as ChevronDownIcon, it as XIcon, nt as WarningIcon, rt as WrenchIcon, w as FolderIcon, z as PaperclipIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Tooltip } from "../foundations/Tooltip.js";
5
5
  import { IconButton } from "../foundations/IconButton.js";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { C as FileIcon, d as CheckIcon, m as ChevronRightIcon, v as DotIcon } from "../../icons-B4mGvCvc.js";
3
+ import { C as FileIcon, d as CheckIcon, m as ChevronRightIcon, v as DotIcon } from "../../icons-MmIXciMO.js";
4
4
  import { Button } from "../foundations/Button.js";
5
5
  import { Badge } from "../foundations/Badge.js";
6
6
  import { ScrollArea } from "../foundations/ScrollArea.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { J as SpinnerIcon } from "../../icons-B4mGvCvc.js";
2
+ import { Y as SpinnerIcon } from "../../icons-MmIXciMO.js";
3
3
  import { Activity, ActivityContent, ActivityText, ActivityTrigger } from "./Activity.js";
4
4
  import { MessageResponse } from "./Message.js";
5
5
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { k as LinkIcon, m as ChevronRightIcon } from "../../icons-B4mGvCvc.js";
3
+ import { A as LinkIcon, m as ChevronRightIcon } from "../../icons-MmIXciMO.js";
4
4
  import "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ai-sdk/Sources.tsx
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { C as FileIcon, G as SearchIcon, m as ChevronRightIcon } from "../../icons-B4mGvCvc.js";
3
+ import { C as FileIcon, K as SearchIcon, m as ChevronRightIcon } from "../../icons-MmIXciMO.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ai-sdk/Task.tsx