@mcp-b/react-components 0.39.0 → 0.41.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 (188) hide show
  1. package/dist/{AgentChat-CVO7xyLC.d.ts → AgentChat-DVr2giwD.d.ts} +1 -1
  2. package/dist/{AgentToolRunsContext-BCVqCtJ1.d.ts → AgentToolRunsContext-daY67hFM.d.ts} +12 -0
  3. package/dist/AppTopBar-ZdgmB_Lu.d.ts +97 -0
  4. package/dist/{CodeBlock-DO4Hdu1R.js → CodeBlock-BjELA-_s.js} +1 -1
  5. package/dist/{FileTree-DbQMpvxV.js → FileTree-DMYRdT6R.js} +1 -1
  6. package/dist/McpConnectorForm-MRm1r59e.d.ts +39 -0
  7. package/dist/{Message-DBsHHhcM.d.ts → Message-D_vCVEGB.d.ts} +20 -1
  8. package/dist/{ThinkChatActivity-D6-_5Phw.d.ts → ThinkChatActivity-DyGHj01E.d.ts} +1 -1
  9. package/dist/{ThinkExecutionRun-lYYgyeE1.d.ts → ThinkExecutionRun-k8bpyXqt.d.ts} +3 -3
  10. package/dist/Toolbar-CBOseBQr.d.ts +152 -0
  11. package/dist/{WorkspaceFileView-D0r7xnq5.js → WorkspaceFileView-D0yFwoDr.js} +3 -3
  12. package/dist/{WorkspaceMessageResponse-Cy28WGSz.d.ts → WorkspaceMessageResponse-D66ty4FO.d.ts} +1 -1
  13. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  14. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  15. package/dist/components/agents-sdk/AgentChat.js +41 -18
  16. package/dist/components/agents-sdk/AgentToolRunsContext.d.ts +1 -1
  17. package/dist/components/agents-sdk/AgentToolRunsContext.js +12 -0
  18. package/dist/components/agents-sdk/BrowserLiveScreen.d.ts +135 -0
  19. package/dist/components/agents-sdk/BrowserLiveScreen.js +637 -0
  20. package/dist/components/agents-sdk/BrowserLiveView.d.ts +2 -2
  21. package/dist/components/agents-sdk/BrowserLiveView.js +6 -9
  22. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  23. package/dist/components/agents-sdk/BrowserRunPanel.d.ts +72 -25
  24. package/dist/components/agents-sdk/BrowserRunPanel.js +111 -70
  25. package/dist/components/agents-sdk/ManagerOffice.d.ts +156 -0
  26. package/dist/components/agents-sdk/ManagerOffice.js +662 -0
  27. package/dist/components/agents-sdk/McpConnectionRequest.js +3 -3
  28. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -38
  29. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +8 -2
  30. package/dist/components/agents-sdk/McpPluginCatalog.js +79 -61
  31. package/dist/components/agents-sdk/McpServerPicker.d.ts +1 -1
  32. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  33. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  34. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  35. package/dist/components/agents-sdk/SubagentRunDetails.d.ts +1 -9
  36. package/dist/components/agents-sdk/SubagentRunDetails.js +1 -9
  37. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  38. package/dist/components/agents-sdk/SubagentRunSelector.d.ts +4 -2
  39. package/dist/components/agents-sdk/SubagentRunSelector.js +7 -6
  40. package/dist/components/agents-sdk/ThinkChat.d.ts +4 -4
  41. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  42. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  43. package/dist/components/agents-sdk/ThinkExecutionDetail.d.ts +1 -1
  44. package/dist/components/agents-sdk/ThinkExecutionDetail.js +43 -43
  45. package/dist/components/agents-sdk/ThinkExecutionRun.d.ts +2 -2
  46. package/dist/components/agents-sdk/ThinkExecutionRun.js +5 -6
  47. package/dist/components/agents-sdk/ThinkExecutionStatus.d.ts +1 -1
  48. package/dist/components/agents-sdk/ThinkExecutionStatus.js +8 -12
  49. package/dist/components/agents-sdk/ThinkExecutionWorkbench.d.ts +8 -1
  50. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +43 -38
  51. package/dist/components/agents-sdk/ThinkFullApp.d.ts +18 -6
  52. package/dist/components/agents-sdk/ThinkFullApp.js +112 -144
  53. package/dist/components/agents-sdk/ThinkRoutine.d.ts +1 -1
  54. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +1 -1
  55. package/dist/components/agents-sdk/ThinkRoutineDetail.js +4 -15
  56. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  57. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +69 -89
  58. package/dist/components/agents-sdk/ThinkRoutineRuns.d.ts +1 -1
  59. package/dist/components/agents-sdk/ThinkRoutineRuns.js +3 -10
  60. package/dist/components/agents-sdk/ThinkThreadPicker.js +1 -1
  61. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  62. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  63. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  64. package/dist/components/agents-sdk/WorkspaceHeader.js +2 -1
  65. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +1 -1
  66. package/dist/components/agents-sdk/WorkspaceMountManager.js +11 -11
  67. package/dist/components/ai-sdk/Activity.js +1 -1
  68. package/dist/components/ai-sdk/AgentAttention.d.ts +1 -1
  69. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  70. package/dist/components/ai-sdk/Approval.js +1 -1
  71. package/dist/components/ai-sdk/Artifact.js +1 -1
  72. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  73. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  74. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  75. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  76. package/dist/components/ai-sdk/Conversation.js +1 -1
  77. package/dist/components/ai-sdk/Goal.js +1 -1
  78. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  79. package/dist/components/ai-sdk/Message.d.ts +2 -2
  80. package/dist/components/ai-sdk/Message.js +25 -3
  81. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  82. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  83. package/dist/components/ai-sdk/Plan.js +1 -1
  84. package/dist/components/ai-sdk/PromptInput.js +1 -1
  85. package/dist/components/ai-sdk/Queue.d.ts +4 -4
  86. package/dist/components/ai-sdk/Queue.js +6 -15
  87. package/dist/components/ai-sdk/Reasoning.js +1 -1
  88. package/dist/components/ai-sdk/Sources.js +1 -1
  89. package/dist/components/ai-sdk/Task.d.ts +2 -2
  90. package/dist/components/ai-sdk/Task.js +2 -2
  91. package/dist/components/extension/ChatGptSignInScreen.d.ts +21 -10
  92. package/dist/components/extension/ChatGptSignInScreen.js +42 -34
  93. package/dist/components/extension/CodexModelSelector.js +1 -1
  94. package/dist/components/extension/ConversationTabPicker.js +1 -1
  95. package/dist/components/foundations/Avatar.d.ts +1 -10
  96. package/dist/components/foundations/Avatar.js +1 -10
  97. package/dist/components/foundations/Checkbox.js +1 -1
  98. package/dist/components/foundations/CheckboxGroup.js +1 -0
  99. package/dist/components/foundations/ContextMenu.js +1 -1
  100. package/dist/components/foundations/LinkButton.d.ts +12 -10
  101. package/dist/components/foundations/LinkButton.js +15 -11
  102. package/dist/components/foundations/Menubar.js +1 -1
  103. package/dist/components/foundations/SearchField.js +1 -1
  104. package/dist/components/foundations/Select.js +1 -1
  105. package/dist/components/foundations/Stepper.js +1 -1
  106. package/dist/components/foundations/Toast.js +1 -1
  107. package/dist/components/foundations/Toolbar.d.ts +1 -151
  108. package/dist/components/foundations/icons.d.ts +2 -2
  109. package/dist/components/foundations/icons.js +2 -2
  110. package/dist/components/general-purpose/AppTopBar.d.ts +1 -90
  111. package/dist/components/general-purpose/AppTopBar.js +2 -1
  112. package/dist/components/general-purpose/Commit.d.ts +2 -2
  113. package/dist/components/general-purpose/Commit.js +5 -13
  114. package/dist/components/general-purpose/EnvironmentVariables.d.ts +2 -2
  115. package/dist/components/general-purpose/EnvironmentVariables.js +4 -7
  116. package/dist/components/general-purpose/FileTree.js +1 -1
  117. package/dist/components/general-purpose/PricingBillingToggle.js +4 -9
  118. package/dist/components/general-purpose/PricingPlanCard.js +15 -14
  119. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +95 -2
  120. package/dist/components/general-purpose/ResponsiveSidebarShell.js +90 -34
  121. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  122. package/dist/components/general-purpose/Terminal.d.ts +1 -1
  123. package/dist/components/general-purpose/Terminal.js +4 -12
  124. package/dist/components/general-purpose/TestResults.d.ts +1 -1
  125. package/dist/components/general-purpose/TestResults.js +8 -21
  126. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  127. package/dist/components/general-purpose/WebPreview.d.ts +1 -1
  128. package/dist/components/general-purpose/WebPreview.js +4 -12
  129. package/dist/components/nanites/AgentConnection.js +2 -2
  130. package/dist/components/nanites/AgentToolDetail.d.ts +1 -1
  131. package/dist/components/nanites/AgentToolDetail.js +7 -7
  132. package/dist/components/nanites/NaniteScene.js +11 -11
  133. package/dist/{copy-button-4YvddK4e.js → copy-button-lys9N_aI.js} +1 -1
  134. package/dist/{icons-BGZ916hb.d.ts → icons-0corjfxR.d.ts} +6 -16
  135. package/dist/{icons-B4mGvCvc.js → icons-CVFSeTJn.js} +3 -5
  136. package/dist/styles/agent-attention.css +5 -5
  137. package/dist/styles/agent-chat.css +47 -12
  138. package/dist/styles/agent-tool-detail.css +2 -12
  139. package/dist/styles/app-icon.css +12 -18
  140. package/dist/styles/app-top-bar.css +32 -6
  141. package/dist/styles/avatar.css +6 -22
  142. package/dist/styles/base.css +2 -8
  143. package/dist/styles/browser-live-screen.css +38 -0
  144. package/dist/styles/browser-live-view.css +12 -4
  145. package/dist/styles/browser-run-panel.css +20 -16
  146. package/dist/styles/chatgpt-sign-in-screen.css +11 -5
  147. package/dist/styles/commit.css +24 -1
  148. package/dist/styles/environment-variables.css +3 -0
  149. package/dist/styles/index.css +5 -4
  150. package/dist/styles/manager-office.css +486 -0
  151. package/dist/styles/mcp-plugin-catalog.css +39 -35
  152. package/dist/styles/mcp-server-picker.css +1 -1
  153. package/dist/styles/message.css +41 -18
  154. package/dist/styles/nanite-scene.css +9 -9
  155. package/dist/styles/pricing-page.css +12 -8
  156. package/dist/styles/prompt-input.css +8 -13
  157. package/dist/styles/recipes.css +1 -57
  158. package/dist/styles/responsive-sidebar-shell.css +70 -20
  159. package/dist/styles/subagent-run.css +20 -3
  160. package/dist/styles/terminal.css +19 -0
  161. package/dist/styles/test-results.css +10 -1
  162. package/dist/styles/think-execution-status.css +8 -24
  163. package/dist/styles/think-execution-workbench.css +98 -105
  164. package/dist/styles/think-full-app.css +81 -185
  165. package/dist/styles/think-routine-library.css +0 -40
  166. package/dist/styles/think-thread-picker.css +8 -3
  167. package/dist/styles/transition-surface.css +7 -8
  168. package/dist/styles/utilities.css +42 -0
  169. package/dist/styles/web-preview.css +28 -5
  170. package/dist/styles/workspace-explorer.css +4 -23
  171. package/dist/styles/workspace-mount-manager.css +22 -0
  172. package/package.json +37 -35
  173. package/dist/ResponsiveSidebarShell-DWjULskY.d.ts +0 -68
  174. package/dist/components/agents-sdk/AgentActivityPreview.d.ts +0 -46
  175. package/dist/components/agents-sdk/AgentActivityPreview.js +0 -93
  176. package/dist/components/agents-sdk/ThinkThreadShell.d.ts +0 -38
  177. package/dist/components/agents-sdk/ThinkThreadShell.js +0 -27
  178. package/dist/components/foundations/Badge.d.ts +0 -62
  179. package/dist/components/foundations/Badge.js +0 -55
  180. package/dist/components/foundations/StatusPill.d.ts +0 -43
  181. package/dist/components/foundations/StatusPill.js +0 -35
  182. package/dist/components/general-purpose/Shell.d.ts +0 -149
  183. package/dist/components/general-purpose/Shell.js +0 -116
  184. package/dist/styles/agent-activity-preview-overlay.css +0 -169
  185. package/dist/styles/agent-activity-preview.css +0 -209
  186. package/dist/styles/badge.css +0 -120
  187. package/dist/styles/shell.css +0 -122
  188. package/dist/styles/status-pill.css +0 -39
@@ -1,14 +1,14 @@
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 { K as SpinnerIcon, L as PauseIcon, T as InfoIcon, d as CheckIcon, tt as XIcon } from "../../icons-CVFSeTJn.js";
3
3
  import { Tooltip } from "../foundations/Tooltip.js";
4
- import { formatThinkExecutionRunProgress, formatThinkExecutionStatus, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, getThinkExecutionRunSubtitle, getThinkExecutionRunTitle } from "./ThinkExecutionRun.js";
4
+ import { formatThinkExecutionRunProgress, formatThinkExecutionStatus, getThinkExecutionRunKindLabel, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, getThinkExecutionRunTitle } from "./ThinkExecutionRun.js";
5
5
  import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/components/agents-sdk/ThinkExecutionStatus.tsx
8
8
  function statusIcon(tone) {
9
9
  if (tone === "success") return /* @__PURE__ */ jsx(CheckIcon, {});
10
10
  if (tone === "danger") return /* @__PURE__ */ jsx(XIcon, {});
11
- if (tone === "warning") return /* @__PURE__ */ jsx(PauseIcon, {});
11
+ if (tone === "paused") return /* @__PURE__ */ jsx(PauseIcon, {});
12
12
  if (tone === "primary") return /* @__PURE__ */ jsx(SpinnerIcon, {});
13
13
  return /* @__PURE__ */ jsx(InfoIcon, {});
14
14
  }
@@ -34,7 +34,6 @@ function ThinkExecutionStatus({ className, label, run, ref, ...props }) {
34
34
  }
35
35
  /** Shared identity, status, and progress summary for a whole Think execution record. */
36
36
  function ThinkExecutionRunSummary({ className, run, ref, ...props }) {
37
- const subtitle = getThinkExecutionRunSubtitle(run);
38
37
  return /* @__PURE__ */ jsxs("span", {
39
38
  ref,
40
39
  "data-slot": "think-execution-run-summary",
@@ -42,15 +41,12 @@ function ThinkExecutionRunSummary({ className, run, ref, ...props }) {
42
41
  ...props,
43
42
  children: [/* @__PURE__ */ jsx(ThinkExecutionStatus, { run }), /* @__PURE__ */ jsxs("span", {
44
43
  className: "think-execution-run-summary__copy",
45
- children: [/* @__PURE__ */ jsxs("span", {
46
- className: "think-execution-run-summary__heading",
47
- children: [/* @__PURE__ */ jsx("span", {
48
- className: "think-execution-run-summary__title sigvelo-truncate",
49
- children: getThinkExecutionRunTitle(run)
50
- }), subtitle ? /* @__PURE__ */ jsx("code", { children: subtitle }) : null]
44
+ children: [/* @__PURE__ */ jsx("span", {
45
+ className: "think-execution-run-summary__title sigvelo-truncate",
46
+ children: getThinkExecutionRunTitle(run)
51
47
  }), /* @__PURE__ */ jsx("span", {
52
- className: "think-execution-run-summary__progress",
53
- children: formatThinkExecutionRunProgress(run)
48
+ className: "think-execution-run-summary__meta sigvelo-truncate",
49
+ children: `${getThinkExecutionRunKindLabel(run)} · ${formatThinkExecutionStatus(getThinkExecutionRunStatus(run))} · ${formatThinkExecutionRunProgress(run)}`
54
50
  })]
55
51
  })]
56
52
  });
@@ -1,4 +1,4 @@
1
- import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-lYYgyeE1.js";
1
+ import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-k8bpyXqt.js";
2
2
  import * as React from "react";
3
3
  import { DataTag, UnusedSkipTokenOptions } from "@tanstack/react-query";
4
4
  import { Think, ThinkSubmissionInspection } from "@cloudflare/think";
@@ -21,6 +21,12 @@ interface ThinkExecutionWorkbenchProps extends Omit<React.HTMLAttributes<HTMLDiv
21
21
  selectedRun: ThinkExecutionRun | null;
22
22
  /** Returns an application-authored TanStack Router Link for the run. */
23
23
  renderRunLink: (run: ThinkExecutionRun) => React.ReactElement;
24
+ /**
25
+ * Returns an application-authored TanStack Router Link back to the run
26
+ * list. A selected run replaces the list — the workspace drill-in pattern —
27
+ * so this link is the way back out.
28
+ */
29
+ renderRunsLink: () => React.ReactElement;
24
30
  }
25
31
  interface ThinkExecutionRunsData {
26
32
  submissions: readonly ThinkSubmissionInspection[];
@@ -48,6 +54,7 @@ declare function ThinkExecutionWorkbench({
48
54
  pageSize,
49
55
  ref,
50
56
  renderRunLink,
57
+ renderRunsLink,
51
58
  selectedRun,
52
59
  source,
53
60
  sourceKey,
@@ -1,15 +1,15 @@
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 { $ as WarningIcon, H as RefreshIcon, r as ArrowLeftIcon, y as EllipsisIcon } from "../../icons-CVFSeTJn.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";
6
6
  import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
7
7
  import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
8
8
  import { EmptyState } from "../foundations/EmptyState.js";
9
- import { getThinkExecutionRunAccessibleName, getThinkExecutionRunId, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, isSameThinkExecutionRun, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
9
+ import { AppTopBar } from "../general-purpose/AppTopBar.js";
10
+ import { getThinkExecutionRunAccessibleName, getThinkExecutionRunId, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
10
11
  import { ThinkExecutionRunSummary } from "./ThinkExecutionStatus.js";
11
12
  import { ThinkExecutionDetail } from "./ThinkExecutionDetail.js";
12
- import { AppTopBar } from "../general-purpose/AppTopBar.js";
13
13
  import * as React from "react";
14
14
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
15
  import { queryOptions, useMutation, useSuspenseQuery } from "@tanstack/react-query";
@@ -117,7 +117,7 @@ function thinkExecutionRunsQueryOptions(source, sourceKey, pageSize = executionP
117
117
  * not normalize execution records or own workflow authoring. Its first
118
118
  * uncached list read suspends to the consuming route's Suspense boundary.
119
119
  */
120
- function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPanelPageSize, ref, renderRunLink, selectedRun, source, sourceKey, title = "Execution", ...props }) {
120
+ function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPanelPageSize, ref, renderRunLink, renderRunsLink, selectedRun, source, sourceKey, title = "Execution", ...props }) {
121
121
  const runsId = React.useId();
122
122
  const runsOptions = thinkExecutionRunsQueryOptions(source, sourceKey, pageSize);
123
123
  const runsQueryKey = thinkExecutionRunsScopeQueryKey(sourceKey);
@@ -146,14 +146,24 @@ function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPa
146
146
  children: [
147
147
  /* @__PURE__ */ jsxs(AppTopBar.Root, {
148
148
  className: "think-execution-workbench__header",
149
+ titleAlign: "start",
149
150
  "aria-label": "Run controls",
150
151
  children: [
151
- /* @__PURE__ */ jsx(AppTopBar.Leading, { children: backButton }),
152
+ /* @__PURE__ */ jsx(AppTopBar.Leading, { children: selectedRun ? /* @__PURE__ */ jsx(AppTopBar.Link, {
153
+ label: "Back to runs",
154
+ render: renderRunsLink(),
155
+ children: /* @__PURE__ */ jsx(ArrowLeftIcon, { "aria-hidden": "true" })
156
+ }) : backButton }),
152
157
  /* @__PURE__ */ jsx(AppTopBar.Title, { children: /* @__PURE__ */ jsx("h2", {
153
158
  className: "think-execution-workbench__title",
154
159
  children: title
155
160
  }) }),
156
- /* @__PURE__ */ jsx(AppTopBar.Trailing, { children: /* @__PURE__ */ jsx(AppTopBar.Button, {
161
+ /* @__PURE__ */ jsxs(AppTopBar.Trailing, { children: [selectedRun ? /* @__PURE__ */ jsx(RunActions, {
162
+ busy: actionIsPending,
163
+ run: selectedRun,
164
+ source,
165
+ onAction: runAction
166
+ }) : null, /* @__PURE__ */ jsx(AppTopBar.Button, {
157
167
  label: "Refresh runs",
158
168
  disabled: busyAction !== null,
159
169
  onClick: () => {
@@ -161,18 +171,22 @@ function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPa
161
171
  runsQuery.refetch();
162
172
  },
163
173
  children: /* @__PURE__ */ jsx(RefreshIcon, {})
164
- }) })
174
+ })] })
165
175
  ]
166
176
  }),
167
- error ? /* @__PURE__ */ jsx("div", {
177
+ error ? /* @__PURE__ */ jsxs("div", {
168
178
  className: "think-execution-workbench__error",
169
179
  role: "alert",
170
- children: formatErrorMessage(error)
180
+ children: [/* @__PURE__ */ jsx(WarningIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsx("span", { children: formatErrorMessage(error) })]
171
181
  }) : null,
172
- /* @__PURE__ */ jsxs("div", {
182
+ /* @__PURE__ */ jsx("div", {
173
183
  className: "think-execution-workbench__content",
174
184
  "aria-busy": busyAction !== null,
175
- children: [/* @__PURE__ */ jsxs("section", {
185
+ children: selectedRun ? /* @__PURE__ */ jsx("section", {
186
+ className: "think-execution-workbench__detail",
187
+ "aria-label": "Run detail",
188
+ children: /* @__PURE__ */ jsx(ThinkExecutionDetail, { run: selectedRun })
189
+ }) : /* @__PURE__ */ jsxs("section", {
176
190
  className: "think-execution-workbench__run-list",
177
191
  "aria-labelledby": runsId,
178
192
  children: [/* @__PURE__ */ jsx("div", {
@@ -190,35 +204,26 @@ function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPa
190
204
  children: runs.map((run) => {
191
205
  const id = getThinkExecutionRunId(run);
192
206
  const kind = isThinkSubmissionRun(run) ? "submission" : "workflow";
193
- const selected = isSameThinkExecutionRun(selectedRun, run);
194
- return /* @__PURE__ */ jsxs("li", {
195
- "data-selected": selected || void 0,
196
- children: [/* @__PURE__ */ jsx(NavigationLink, {
197
- render: renderRunLink(run),
198
- "data-slot": "button",
199
- className: buttonVariants({
200
- variant: "ghost",
201
- color: "neutral",
202
- size: "sm",
203
- className: "think-execution-workbench__run"
204
- }),
205
- "aria-label": getThinkExecutionRunAccessibleName(run),
206
- "aria-current": selected ? "page" : void 0,
207
- children: /* @__PURE__ */ jsx(ThinkExecutionRunSummary, { run })
208
- }), /* @__PURE__ */ jsx(RunActions, {
209
- busy: actionIsPending,
210
- run,
211
- source,
212
- onAction: runAction
213
- })]
214
- }, `${kind}:${id}`);
207
+ return /* @__PURE__ */ jsxs("li", { children: [/* @__PURE__ */ jsx(NavigationLink, {
208
+ render: renderRunLink(run),
209
+ "data-slot": "button",
210
+ className: buttonVariants({
211
+ variant: "ghost",
212
+ color: "neutral",
213
+ size: "sm",
214
+ className: "think-execution-workbench__run"
215
+ }),
216
+ "aria-label": getThinkExecutionRunAccessibleName(run),
217
+ children: /* @__PURE__ */ jsx(ThinkExecutionRunSummary, { run })
218
+ }), /* @__PURE__ */ jsx(RunActions, {
219
+ busy: actionIsPending,
220
+ run,
221
+ source,
222
+ onAction: runAction
223
+ })] }, `${kind}:${id}`);
215
224
  })
216
225
  })]
217
- }), /* @__PURE__ */ jsx("section", {
218
- className: "think-execution-workbench__detail",
219
- "aria-label": "Run detail",
220
- children: /* @__PURE__ */ jsx(ThinkExecutionDetail, { run: selectedRun })
221
- })]
226
+ })
222
227
  })
223
228
  ]
224
229
  });
@@ -1,12 +1,12 @@
1
1
  import { l as WorkspaceNavigationAdapter } from "../../WorkspaceLink-Bh9-Jo1r.js";
2
- import { n as AgentToolEventsValue } from "../../AgentToolRunsContext-BCVqCtJ1.js";
2
+ import { n as AgentToolEventsValue } from "../../AgentToolRunsContext-daY67hFM.js";
3
3
  import { McpPluginCatalogProps } from "./McpPluginCatalog.js";
4
4
  import { ThinkChatMessagesProps } from "./ThinkChat.js";
5
- import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-lYYgyeE1.js";
5
+ import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-k8bpyXqt.js";
6
6
  import { ThinkExecutionWorkbenchProps } from "./ThinkExecutionWorkbench.js";
7
+ import { ResponsiveSidebarShell } from "../general-purpose/ResponsiveSidebarShell.js";
7
8
  import { ThinkFullAppView } from "./ThinkFullAppViewSwitch.js";
8
9
  import { ThinkThreadStatusSummary } from "./ThinkThreadPicker.js";
9
- import { ThinkThreadShell } from "./ThinkThreadShell.js";
10
10
  import { r as WorkspaceFileAssetResolver } from "../../WorkspaceFile-BLaFmMrt.js";
11
11
  import { WorkspaceSource } from "./Workspace.js";
12
12
  import { t as ThinkAgent } from "../../think-agent-Cip5KAPj.js";
@@ -67,8 +67,10 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
67
67
  plugins?: McpPluginCatalogProps;
68
68
  /** Product-specific actions rendered in the application top bar. */
69
69
  appBarActions?: React.ReactNode;
70
- /** Product-specific navigation rendered after the built-in sidebar control. */
70
+ /** Product-specific navigation that owns the leading slot at every width. */
71
71
  appBarLeading?: React.ReactNode;
72
+ /** Product-specific compact navigation; the wide layout keeps its sidebar toggle. */
73
+ compactAppBarLeading?: React.ReactNode;
72
74
  /** Active conversation or page title rendered in the application top bar. */
73
75
  appBarTitle?: React.ReactNode;
74
76
  /** Aggregate thread activity rendered beside the compact thread-title disclosure. */
@@ -88,8 +90,16 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
88
90
  * has its own source identity.
89
91
  */
90
92
  sourceKey: string;
91
- /** Returns an application-authored TanStack Router Link and enables the Execution workbench. */
93
+ /**
94
+ * Returns an application-authored TanStack Router Link for a run. Together
95
+ * with `renderExecutionRunsLink` this enables the Execution workbench.
96
+ */
92
97
  renderExecutionRunLink?: ThinkExecutionWorkbenchProps["renderRunLink"];
98
+ /**
99
+ * Returns an application-authored TanStack Router Link back to the run
100
+ * list — the way out of a selected run, which replaces the list in place.
101
+ */
102
+ renderExecutionRunsLink?: ThinkExecutionWorkbenchProps["renderRunsLink"];
93
103
  /** Message rendering labels and approval overrides for ThinkChat. */
94
104
  messages?: ThinkChatMessagesProps<MessageT>;
95
105
  /** Extra workbench panels appended after the enabled built-in panels. */
@@ -100,7 +110,7 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
100
110
  * Optional parent-owned thread picker/sidebar rendered beside the selected child app.
101
111
  * Use the render form to close the compact drawer after selecting a thread.
102
112
  */
103
- threadSidebar?: React.ComponentProps<typeof ThinkThreadShell>["sidebar"];
113
+ threadSidebar?: React.ComponentProps<typeof ResponsiveSidebarShell>["sidebar"];
104
114
  /** Whether the thread sidebar is open. Omit for internal state. */
105
115
  threadSidebarOpen?: boolean;
106
116
  /** Initial thread sidebar state when `threadSidebarOpen` is uncontrolled. */
@@ -134,6 +144,7 @@ declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = u
134
144
  appBarActions,
135
145
  appBarLeading,
136
146
  appBarTitle,
147
+ compactAppBarLeading,
137
148
  className,
138
149
  conversation,
139
150
  defaultMobileView,
@@ -151,6 +162,7 @@ declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = u
151
162
  ref,
152
163
  renderAgentToolRunLink,
153
164
  renderExecutionRunLink,
165
+ renderExecutionRunsLink,
154
166
  selectedExecutionRun,
155
167
  showMobileViewSwitch,
156
168
  showWorkbenchViewSwitch,
@@ -1,28 +1,24 @@
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";
3
- import { Button } from "../foundations/Button.js";
2
+ import { K as SpinnerIcon, S as FileIcon, Z as TerminalIcon, c as BoxIcon } from "../../icons-CVFSeTJn.js";
4
3
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
5
- import { ScrollArea } from "../foundations/ScrollArea.js";
6
4
  import { EmptyState } from "../foundations/EmptyState.js";
5
+ import { ResizableSidePanel } from "../general-purpose/ResizableSidePanel.js";
6
+ import { ResponsiveSidebarShell } from "../general-purpose/ResponsiveSidebarShell.js";
7
7
  import { McpPluginCatalog } from "./McpPluginCatalog.js";
8
8
  import { a as WorkspaceNavigationRestorationBoundary, i as WorkspaceNavigationFocusRestorer, n as WorkspaceNavigationProvider } from "../../WorkspaceLink-DtH66bAY.js";
9
9
  import { c as resolveThinkApprovalProps, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../../ThinkChat-BES_3Mb-.js";
10
- import { AppTopBar } from "../general-purpose/AppTopBar.js";
11
10
  import { ThinkExecutionWorkbench } from "./ThinkExecutionWorkbench.js";
12
- import { ResizableSidePanel } from "../general-purpose/ResizableSidePanel.js";
13
11
  import { ThinkFullAppViewSwitch } from "./ThinkFullAppViewSwitch.js";
14
12
  import { ThinkThreadStatusIndicators } from "./ThinkThreadPicker.js";
15
- import { ThinkThreadShell } from "./ThinkThreadShell.js";
16
13
  import { useWorkspace } from "./Workspace.js";
17
14
  import { WorkspaceExplorer } from "./WorkspaceExplorer.js";
18
15
  import * as React from "react";
19
- import { jsx, jsxs } from "react/jsx-runtime";
16
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
20
17
  //#region src/components/agents-sdk/ThinkFullApp.tsx
21
- const workbenchPanelDefaultWidth = 340;
22
- const workbenchPanelMinWidth = 300;
23
- const workbenchPanelMaxWidth = 600;
24
- const workbenchPanelKeyboardStep = 24;
25
- const workbenchPanelCollapseThreshold = 240;
18
+ const conversationDefaultWidth = 393;
19
+ const conversationMinWidth = 320;
20
+ const conversationMaxWidth = 640;
21
+ const conversationKeyboardStep = 24;
26
22
  function WorkspacePanel({ config }) {
27
23
  const selectedPath = config.navigation.current.destination.kind === "file" ? config.navigation.current.destination.path : null;
28
24
  return /* @__PURE__ */ jsx(WorkspaceExplorer, {
@@ -40,12 +36,6 @@ function WorkspacePanel({ config }) {
40
36
  actions: config.actions
41
37
  });
42
38
  }
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(ScrollArea.Content, { children: /* @__PURE__ */ jsx(McpPluginCatalog, { ...config }) }) }), /* @__PURE__ */ jsx(ScrollArea.Scrollbar, { children: /* @__PURE__ */ jsx(ScrollArea.Thumb, {}) })]
47
- });
48
- }
49
39
  /**
50
40
  * Approval discovery and background-agent events need a live connection, so they
51
41
  * live here rather than in the shell, which also renders before there is one.
@@ -82,7 +72,7 @@ function ThinkFullAppThreadChat({ agent, agentTools, chat, messages, renderAgent
82
72
  });
83
73
  }
84
74
  /** Combines ThinkChat with an optional resizable workbench shell. */
85
- function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, conversation, defaultMobileView, defaultWorkbenchOpen, defaultWorkbenchView, defaultThreadSidebarOpen, hideAppBarInWorkbench = false, messages, mobileView, onMobileViewChange, onThreadSidebarOpenChange, onWorkbenchOpenChange, onWorkbenchViewChange, plugins, ref, renderAgentToolRunLink, renderExecutionRunLink, selectedExecutionRun = null, showMobileViewSwitch = true, showWorkbenchViewSwitch = true, sourceKey, style, threadSidebar, threadSidebarOpen, threadStatusSummary, workbenchOpen, workbenchPanels, workbenchView, workspace, ...props }) {
75
+ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, compactAppBarLeading, className, conversation, defaultMobileView, defaultWorkbenchOpen, defaultWorkbenchView, defaultThreadSidebarOpen, hideAppBarInWorkbench = false, messages, mobileView, onMobileViewChange, onThreadSidebarOpenChange, onWorkbenchOpenChange, onWorkbenchViewChange, plugins, ref, renderAgentToolRunLink, renderExecutionRunLink, renderExecutionRunsLink, selectedExecutionRun = null, showMobileViewSwitch = true, showWorkbenchViewSwitch = true, sourceKey, style, threadSidebar, threadSidebarOpen, threadStatusSummary, workbenchOpen, workbenchPanels, workbenchView, workspace, ...props }) {
86
76
  const agent = conversation?.agent;
87
77
  const appRef = React.useRef(null);
88
78
  const workbenchPanelRef = React.useRef(null);
@@ -115,7 +105,7 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
115
105
  icon: /* @__PURE__ */ jsx(FileIcon, {}),
116
106
  render: () => /* @__PURE__ */ jsx(WorkspacePanel, { config: workspace })
117
107
  });
118
- if (renderExecutionRunLink && agent) availableWorkbenchPanels.push({
108
+ if (renderExecutionRunLink && renderExecutionRunsLink && agent) availableWorkbenchPanels.push({
119
109
  id: "execution",
120
110
  label: "Execution",
121
111
  icon: /* @__PURE__ */ jsx(TerminalIcon, {}),
@@ -133,7 +123,8 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
133
123
  sourceKey,
134
124
  title: "Execution",
135
125
  selectedRun: selectedExecutionRun,
136
- renderRunLink: renderExecutionRunLink
126
+ renderRunLink: renderExecutionRunLink,
127
+ renderRunsLink: renderExecutionRunsLink
137
128
  })
138
129
  })
139
130
  });
@@ -141,7 +132,7 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
141
132
  id: "plugins",
142
133
  label: "Plugins",
143
134
  icon: /* @__PURE__ */ jsx(BoxIcon, {}),
144
- render: () => /* @__PURE__ */ jsx(PluginsPanel, { config: plugins })
135
+ render: () => /* @__PURE__ */ jsx(McpPluginCatalog, { ...plugins })
145
136
  });
146
137
  if (workbenchPanels) availableWorkbenchPanels.push(...workbenchPanels);
147
138
  const selectedPanel = availableWorkbenchPanels.find((panel) => panel.id === requestedWorkbenchView) ?? availableWorkbenchPanels[0];
@@ -152,8 +143,9 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
152
143
  const activeMobileView = hasWorkbench ? requestedMobileView : "chat";
153
144
  const shouldShowWorkbenchViewSwitch = showWorkbenchViewSwitch && availableWorkbenchPanels.length > 0;
154
145
  const workbenchViews = availableWorkbenchPanels;
155
- const shouldRenderInlineAppBar = !threadSidebar && (Boolean(appBarActions || appBarLeading || appBarTitle || threadSidebar) || hasAvailableWorkbench);
156
- const hasAppBarRow = shouldRenderInlineAppBar;
146
+ const hasApplicationChrome = Boolean(appBarActions || appBarLeading || compactAppBarLeading || appBarTitle || threadSidebar);
147
+ const shouldShowMobileViewSwitch = Boolean(selectedPanel) && showMobileViewSwitch;
148
+ const hasAppBarRow = hasApplicationChrome || shouldShowWorkbenchViewSwitch || shouldShowMobileViewSwitch;
157
149
  React.useLayoutEffect(() => {
158
150
  const pendingFocus = pendingPanelFocusRef.current;
159
151
  if (!pendingFocus || pendingFocus.id !== activeWorkbenchView) return;
@@ -170,135 +162,95 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
170
162
  } : null;
171
163
  React.startTransition(() => setWorkbenchView(next));
172
164
  };
173
- const renderAppTopBar = (sidebarControls) => /* @__PURE__ */ jsxs(AppTopBar.Root, {
174
- className: "think-full-app__app-bar",
175
- "aria-label": "Workbench controls",
176
- "data-mobile-view": activeMobileView,
177
- children: [
178
- /* @__PURE__ */ jsxs(AppTopBar.Leading, { children: [sidebarControls?.sidebarToggle, appBarLeading] }),
179
- appBarTitle || sidebarControls ? /* @__PURE__ */ jsxs(AppTopBar.Title, { children: [appBarTitle ? /* @__PURE__ */ jsx("span", {
180
- className: "think-full-app__app-title",
181
- children: appBarTitle
182
- }) : null, sidebarControls ? /* @__PURE__ */ jsxs(Button, {
183
- type: "button",
184
- variant: "ghost",
185
- color: "neutral",
186
- size: "sm",
187
- className: "think-full-app__thread-trigger",
188
- "aria-label": "Threads",
189
- "aria-controls": sidebarControls.sidebarId,
190
- "aria-expanded": sidebarControls.sidebarOpen,
191
- onClick: (event) => sidebarControls.toggleSidebar(event.currentTarget),
192
- children: [
193
- /* @__PURE__ */ jsx("span", {
194
- className: "think-full-app__thread-trigger-title sigvelo-truncate",
195
- children: appBarTitle ?? "Threads"
196
- }),
197
- threadStatusSummary ? /* @__PURE__ */ jsx(ThinkThreadStatusIndicators, { summary: threadStatusSummary }) : null,
198
- /* @__PURE__ */ jsx(ChevronDownIcon, { "aria-hidden": "true" })
199
- ]
200
- }) : null] }) : null,
201
- /* @__PURE__ */ jsxs(AppTopBar.Trailing, { children: [
202
- appBarActions,
203
- shouldShowWorkbenchViewSwitch && selectedPanel ? /* @__PURE__ */ jsx(ThinkFullAppViewSwitch, {
204
- className: "think-full-app__workbench-view-switch",
205
- views: workbenchViews,
206
- value: activeWorkbenchView,
207
- allowEmpty: true,
208
- onValueChange: (next) => {
209
- updateAppView(() => {
210
- if (!next) {
211
- setWorkbenchOpen(false);
212
- return;
213
- }
214
- updateWorkbenchPanel(next);
215
- setWorkbenchOpen(true);
216
- });
217
- },
218
- "aria-label": "Workbench views"
219
- }) : null,
220
- selectedPanel && showMobileViewSwitch ? /* @__PURE__ */ jsx(ThinkFullAppViewSwitch, {
221
- className: "think-full-app__mobile-view-switch",
222
- views: workbenchViews,
223
- value: activeMobileView === "workbench" ? activeWorkbenchView : void 0,
224
- allowEmpty: true,
225
- onValueChange: (next) => {
226
- updateAppView(() => {
227
- if (!next) {
228
- setMobileView("chat");
229
- return;
230
- }
231
- setWorkbenchView(next);
232
- setMobileView("workbench");
233
- });
234
- },
235
- "aria-label": "App views"
236
- }) : null
237
- ] })
238
- ]
239
- });
165
+ const appBarTrailing = appBarActions || shouldShowWorkbenchViewSwitch || shouldShowMobileViewSwitch ? /* @__PURE__ */ jsxs(Fragment, { children: [
166
+ appBarActions,
167
+ shouldShowWorkbenchViewSwitch ? /* @__PURE__ */ jsx(ThinkFullAppViewSwitch, {
168
+ className: "think-full-app__workbench-view-switch",
169
+ views: workbenchViews,
170
+ value: activeWorkbenchView,
171
+ allowEmpty: true,
172
+ onValueChange: (next) => {
173
+ updateAppView(() => {
174
+ if (!next) {
175
+ setWorkbenchOpen(false);
176
+ return;
177
+ }
178
+ updateWorkbenchPanel(next);
179
+ setWorkbenchOpen(true);
180
+ });
181
+ },
182
+ "aria-label": "Workbench views"
183
+ }) : null,
184
+ shouldShowMobileViewSwitch ? /* @__PURE__ */ jsx(ThinkFullAppViewSwitch, {
185
+ className: "think-full-app__mobile-view-switch",
186
+ views: workbenchViews,
187
+ value: activeMobileView === "workbench" ? activeWorkbenchView : void 0,
188
+ allowEmpty: true,
189
+ onValueChange: (next) => {
190
+ updateAppView(() => {
191
+ if (!next) {
192
+ setMobileView("chat");
193
+ return;
194
+ }
195
+ setWorkbenchView(next);
196
+ setMobileView("workbench");
197
+ });
198
+ },
199
+ "aria-label": "App views"
200
+ }) : null
201
+ ] }) : void 0;
240
202
  const appContent = /* @__PURE__ */ jsxs(ResizableSidePanel.Root, {
241
203
  ref: mergeRefs(appRef, ref),
242
204
  className: cx("think-full-app", className),
243
205
  label: "workbench",
244
- side: "end",
245
- defaultSize: workbenchPanelDefaultWidth,
246
- minSize: workbenchPanelMinWidth,
247
- maxSize: workbenchPanelMaxWidth,
248
- keyboardStep: workbenchPanelKeyboardStep,
249
- collapseThreshold: workbenchPanelCollapseThreshold,
250
- onCollapse: () => setWorkbenchOpen(false),
251
- "data-has-thread-sidebar": threadSidebar ? "true" : "false",
206
+ side: "start",
207
+ defaultSize: conversationDefaultWidth,
208
+ minSize: conversationMinWidth,
209
+ maxSize: conversationMaxWidth,
210
+ keyboardStep: conversationKeyboardStep,
252
211
  "data-has-workbench": hasWorkbench ? "true" : "false",
253
- "data-has-workbench-topbar": hasAppBarRow ? "true" : "false",
254
212
  "data-mobile-view": activeMobileView,
255
213
  style,
256
214
  ...props,
257
- children: [
258
- shouldRenderInlineAppBar ? renderAppTopBar() : null,
259
- /* @__PURE__ */ jsxs("div", {
260
- className: "think-full-app__view-scope",
261
- "data-recipe": "application-plane",
262
- "data-mobile-view": activeMobileView,
263
- children: [/* @__PURE__ */ jsx("section", {
264
- className: "think-full-app__chat-surface",
265
- "data-workspace-restoration-scope": "chat",
266
- "aria-label": "Chat",
215
+ children: [/* @__PURE__ */ jsxs("div", {
216
+ className: "think-full-app__view-scope",
217
+ "data-mobile-view": activeMobileView,
218
+ children: [/* @__PURE__ */ jsx("section", {
219
+ className: "think-full-app__chat-surface",
220
+ "data-workspace-restoration-scope": "chat",
221
+ "aria-label": "Chat",
222
+ children: /* @__PURE__ */ jsx("div", {
223
+ className: "think-full-app__chat",
267
224
  children: /* @__PURE__ */ jsx("div", {
268
- className: "think-full-app__chat",
269
- children: /* @__PURE__ */ jsx("div", {
270
- className: "think-full-app__chat-inner",
271
- children: conversation ? /* @__PURE__ */ jsx(ThinkFullAppThreadChat, {
272
- ...conversation,
273
- messages,
274
- renderAgentToolRunLink,
275
- sourceKey
276
- }) : /* @__PURE__ */ jsx(ThinkChat.Messages, {
277
- ...messages,
278
- renderAgentToolRunLink
279
- })
225
+ className: "think-full-app__chat-inner",
226
+ children: conversation ? /* @__PURE__ */ jsx(ThinkFullAppThreadChat, {
227
+ ...conversation,
228
+ messages,
229
+ renderAgentToolRunLink,
230
+ sourceKey
231
+ }) : /* @__PURE__ */ jsx(ThinkChat.Messages, {
232
+ ...messages,
233
+ renderAgentToolRunLink
280
234
  })
281
235
  })
282
- }), activePanel ? /* @__PURE__ */ jsx("aside", {
283
- className: "think-full-app__aside",
284
- "aria-label": "Workbench",
285
- children: /* @__PURE__ */ jsx("div", {
286
- className: "think-full-app__workbench-slot",
287
- children: /* @__PURE__ */ jsx(React.ViewTransition, {
288
- default: "sigvelo-layout-transition",
289
- children: /* @__PURE__ */ jsx("div", {
290
- ref: workbenchPanelRef,
291
- className: "think-full-app__workbench-panel",
292
- "data-view": activeWorkbenchView,
293
- tabIndex: -1,
294
- children: activePanel.render()
295
- })
236
+ })
237
+ }), hasAvailableWorkbench ? /* @__PURE__ */ jsx("aside", {
238
+ className: "think-full-app__aside",
239
+ "aria-label": "Workbench",
240
+ children: activePanel ? /* @__PURE__ */ jsx("div", {
241
+ className: "think-full-app__workbench-slot",
242
+ children: /* @__PURE__ */ jsx(React.ViewTransition, {
243
+ default: "sigvelo-layout-transition",
244
+ children: /* @__PURE__ */ jsx("div", {
245
+ ref: workbenchPanelRef,
246
+ className: "think-full-app__workbench-panel",
247
+ tabIndex: -1,
248
+ children: activePanel.render()
296
249
  })
297
250
  })
298
- }) : null]
299
- }),
300
- activePanel ? /* @__PURE__ */ jsx(ResizableSidePanel.Handle, { className: "think-full-app__resizer" }) : null
301
- ]
251
+ }) : null
252
+ }) : null]
253
+ }), activePanel ? /* @__PURE__ */ jsx(ResizableSidePanel.Handle, { className: "think-full-app__resizer" }) : null]
302
254
  });
303
255
  const app = workspace ? /* @__PURE__ */ jsx(WorkspaceNavigationProvider, {
304
256
  root: workspace.root ?? "/",
@@ -313,14 +265,30 @@ function ThinkFullApp({ appBarActions, appBarLeading, appBarTitle, className, co
313
265
  scope: "chat"
314
266
  }), appContent] })
315
267
  }) : appContent;
316
- if (!threadSidebar) return app;
317
- return /* @__PURE__ */ jsx(ThinkThreadShell, {
268
+ return /* @__PURE__ */ jsx(ResponsiveSidebarShell, {
269
+ className: "think-full-app-shell",
318
270
  sidebar: threadSidebar,
271
+ sidebarLabel: "threads",
319
272
  sidebarOpen: threadSidebarOpen,
320
273
  defaultSidebarOpen: defaultThreadSidebarOpen,
321
274
  onSidebarOpenChange: onThreadSidebarOpenChange,
322
- "data-hide-app-bar-in-workbench": hideAppBarInWorkbench ? "" : void 0,
323
- topBar: (controls) => renderAppTopBar(controls),
275
+ showMainLabel: "Show selected thread",
276
+ topBarHidden: !hasAppBarRow,
277
+ topBarProps: {
278
+ className: "think-full-app__app-bar",
279
+ "aria-label": "Workbench controls",
280
+ "data-app-chrome": hasApplicationChrome || shouldShowWorkbenchViewSwitch ? "true" : "false",
281
+ "data-mobile-view": activeMobileView,
282
+ "data-hide-in-workbench": hideAppBarInWorkbench ? "" : void 0
283
+ },
284
+ topBarLeading: appBarLeading,
285
+ compactTopBarLeading: compactAppBarLeading,
286
+ topBarTitle: appBarTitle,
287
+ compactTitleTrigger: threadSidebar ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
288
+ className: "sigvelo-truncate",
289
+ children: appBarTitle ?? "Threads"
290
+ }), threadStatusSummary ? /* @__PURE__ */ jsx(ThinkThreadStatusIndicators, { summary: threadStatusSummary }) : null] }) : void 0,
291
+ topBarTrailing: appBarTrailing,
324
292
  children: app
325
293
  });
326
294
  }
@@ -1,4 +1,4 @@
1
- import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-lYYgyeE1.js";
1
+ import { t as ThinkExecutionRun } from "../../ThinkExecutionRun-k8bpyXqt.js";
2
2
  import { ThinkScheduledTask } from "@cloudflare/think";
3
3
  import { Schedule } from "agents";
4
4
 
@@ -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 { B as PlusIcon } from "../../icons-CVFSeTJn.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";