@mcp-b/react-components 0.30.1 → 0.31.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 (90) hide show
  1. package/dist/{CodeBlock-B5I7wje1.js → CodeBlock-CM5gfmdq.js} +1 -1
  2. package/dist/{FileTree-DbQMpvxV.js → FileTree-4WP4Uc_m.js} +1 -1
  3. package/dist/{MenuDisclosureGroup-BUOZ42me.js → MenuDisclosureGroup-yJRq7YXa.js} +1 -1
  4. package/dist/{ModelSelector-DZcpUBgn.js → ModelSelector-DzdEs2fX.js} +1 -1
  5. package/dist/{ThinkChat-yid8e_Jb.js → ThinkChat-ldbrNiAx.js} +30 -17
  6. package/dist/{WorkspaceFileView-BeUpr6TU.js → WorkspaceFileView-BtzVKAed.js} +2 -2
  7. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  8. package/dist/components/agents-sdk/AgentActivityPreview.js +3 -3
  9. package/dist/components/agents-sdk/AgentChat.js +9 -9
  10. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  11. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  12. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  13. package/dist/components/agents-sdk/McpConnectionRequest.js +2 -2
  14. package/dist/components/agents-sdk/McpConnectorForm.js +1 -1
  15. package/dist/components/agents-sdk/McpPluginCatalog.js +3 -3
  16. package/dist/components/agents-sdk/McpServerPicker.js +3 -3
  17. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  18. package/dist/components/agents-sdk/PromptInputApproval.js +1 -1
  19. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  20. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  21. package/dist/components/agents-sdk/SubagentRunSelector.js +2 -2
  22. package/dist/components/agents-sdk/ThinkChat.d.ts +24 -1
  23. package/dist/components/agents-sdk/ThinkChat.js +1 -1
  24. package/dist/components/agents-sdk/ThinkChatActivity.js +1 -1
  25. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  26. package/dist/components/agents-sdk/ThinkExecutionDetail.js +1 -1
  27. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  28. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +3 -3
  29. package/dist/components/agents-sdk/ThinkFullApp.d.ts +16 -24
  30. package/dist/components/agents-sdk/ThinkFullApp.js +42 -54
  31. package/dist/components/agents-sdk/ThinkRecoveryNotice.js +1 -1
  32. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +2 -2
  33. package/dist/components/agents-sdk/ThinkRoutineForm.js +3 -3
  34. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +3 -3
  35. package/dist/components/agents-sdk/ThinkRoutineRuns.js +2 -2
  36. package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +5 -1
  37. package/dist/components/agents-sdk/ThinkThreadPicker.js +4 -6
  38. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  39. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  40. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  41. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  42. package/dist/components/agents-sdk/WorkspaceMountManager.js +2 -2
  43. package/dist/components/ai-sdk/Activity.js +1 -1
  44. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  45. package/dist/components/ai-sdk/Approval.js +1 -1
  46. package/dist/components/ai-sdk/Artifact.js +1 -1
  47. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  48. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  49. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  50. package/dist/components/ai-sdk/Conversation.js +1 -1
  51. package/dist/components/ai-sdk/Goal.js +1 -1
  52. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  53. package/dist/components/ai-sdk/Message.js +1 -1
  54. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  55. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  56. package/dist/components/ai-sdk/Plan.js +1 -1
  57. package/dist/components/ai-sdk/PromptInput.js +3 -3
  58. package/dist/components/ai-sdk/Queue.js +1 -1
  59. package/dist/components/ai-sdk/Reasoning.js +1 -1
  60. package/dist/components/ai-sdk/Sources.js +1 -1
  61. package/dist/components/ai-sdk/Task.js +1 -1
  62. package/dist/components/extension/ChatGptSignInScreen.js +2 -2
  63. package/dist/components/extension/CodexModelSelector.js +2 -2
  64. package/dist/components/extension/ConversationTabPicker.js +3 -3
  65. package/dist/components/foundations/Checkbox.js +1 -1
  66. package/dist/components/foundations/Collapsible.js +1 -1
  67. package/dist/components/foundations/ContextMenu.js +1 -1
  68. package/dist/components/foundations/Menubar.js +1 -1
  69. package/dist/components/foundations/SearchField.js +1 -1
  70. package/dist/components/foundations/Select.js +1 -1
  71. package/dist/components/foundations/Stepper.js +1 -1
  72. package/dist/components/foundations/Toast.js +1 -1
  73. package/dist/components/foundations/icons.js +1 -1
  74. package/dist/components/general-purpose/Commit.js +3 -3
  75. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  76. package/dist/components/general-purpose/FileTree.js +1 -1
  77. package/dist/components/general-purpose/PricingPlanCard.js +2 -2
  78. package/dist/components/general-purpose/PricingUsageCalculator.js +1 -1
  79. package/dist/components/general-purpose/ResponsiveSidebarShell.js +1 -1
  80. package/dist/components/general-purpose/SettingsFormDialog.js +2 -2
  81. package/dist/components/general-purpose/SetupChecklist.js +2 -2
  82. package/dist/components/general-purpose/Terminal.js +2 -2
  83. package/dist/components/general-purpose/TestResults.js +1 -1
  84. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  85. package/dist/components/general-purpose/WebPreview.js +2 -2
  86. package/dist/components/nanites/AgentConnection.js +2 -2
  87. package/dist/components/nanites/AgentToolDetail.js +2 -2
  88. package/dist/{copy-button-4YvddK4e.js → copy-button-CsNSSKYG.js} +1 -1
  89. package/package.json +2 -2
  90. package/dist/{icons-B4mGvCvc.js → icons-B1Qw05te.js} +1 -1
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "./class-names-BiMDVpUo.js";
2
2
  import { Select } from "./components/foundations/Select.js";
3
- import { t as CopyButton } from "./copy-button-4YvddK4e.js";
3
+ import { t as CopyButton } from "./copy-button-CsNSSKYG.js";
4
4
  import * as React from "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import { createHighlighter } from "shiki";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "./class-names-BiMDVpUo.js";
2
- import { C as FileIcon, T as FolderOpenIcon, m as ChevronRightIcon, w as FolderIcon } from "./icons-B4mGvCvc.js";
2
+ import { C as FileIcon, T as FolderOpenIcon, m as ChevronRightIcon, w as FolderIcon } from "./icons-B1Qw05te.js";
3
3
  import { t as NavigationLink } from "./navigation-link-kqMa81v5.js";
4
4
  import * as React from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "./class-names-BiMDVpUo.js";
2
- import { f as ChevronDownIcon } from "./icons-B4mGvCvc.js";
2
+ import { f as ChevronDownIcon } from "./icons-B1Qw05te.js";
3
3
  import { Menu } from "./components/foundations/Menu.js";
4
4
  import * as React from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -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 { G as SearchIcon, f as ChevronDownIcon } from "./icons-B1Qw05te.js";
3
3
  import { Button } from "./components/foundations/Button.js";
4
4
  import { Dialog } from "./components/foundations/Dialog.js";
5
5
  import { a as titleCase } from "./format-CmopcfqJ.js";
@@ -1,9 +1,9 @@
1
- import { J as SpinnerIcon } from "./icons-B4mGvCvc.js";
1
+ import { J as SpinnerIcon } from "./icons-B1Qw05te.js";
2
2
  import { TransitionSurface } from "./components/foundations/TransitionSurface.js";
3
3
  import { AgentChat } from "./components/agents-sdk/AgentChat.js";
4
4
  import { AgentToolRunsProvider, useOptionalAgentToolRuns } from "./components/agents-sdk/AgentToolRunsContext.js";
5
5
  import { SubagentRunList } from "./components/agents-sdk/SubagentRunList.js";
6
- import { ThinkChatContext, ThinkChatLiveContext, useThinkChatContext } from "./components/agents-sdk/ThinkChatContext.js";
6
+ import { ThinkChatContext, ThinkChatLiveContext, useOptionalThinkChatContext, useThinkChatContext } from "./components/agents-sdk/ThinkChatContext.js";
7
7
  import { ThinkChatActivity, createThinkChatActivityRenderer, renderThinkChatActivityPart } from "./components/agents-sdk/ThinkChatActivity.js";
8
8
  import { ThinkRecoveryNotice } from "./components/agents-sdk/ThinkRecoveryNotice.js";
9
9
  import { t as WorkspaceMessageResponse } from "./WorkspaceMessageResponse-BWbkIELl.js";
@@ -202,11 +202,10 @@ const ThinkChatApprovalsContext = React.createContext(null);
202
202
  * inside the log) or `excludeTools` + your own `renderPart` (standalone
203
203
  * card) — see README "App-specific tools" and the Custom Tool Panel story.
204
204
  */
205
- function ThinkChatMessages({ composerHeader, renderPart, excludeTools, renderAgentToolRunLink, toolRenderers, thinkStub, onExecutionSettled, pendingApprovals, notice, sessionCompaction, ...props }) {
206
- const chat = useThinkChatContext("ThinkChat.Messages");
205
+ function ThinkChatMessages({ composerHeader, draft, renderPart, excludeTools, renderAgentToolRunLink, toolRenderers, thinkStub, onExecutionSettled, pendingApprovals, notice, sessionCompaction, ...props }) {
206
+ const chat = useOptionalThinkChatContext();
207
207
  const agentTools = useOptionalAgentToolRuns();
208
208
  const approvals = React.useContext(ThinkChatApprovalsContext);
209
- const status = toAgentChatStatus(chat);
210
209
  const resolvedApprovals = resolveThinkApprovalProps({
211
210
  thinkStub,
212
211
  pendingApprovals,
@@ -241,7 +240,7 @@ function ThinkChatMessages({ composerHeader, renderPart, excludeTools, renderAge
241
240
  });
242
241
  return custom === void 0 ? renderBuiltIn() : custom;
243
242
  } : defaultRenderPart, [defaultRenderPart, renderPart]);
244
- const defaultNotice = /* @__PURE__ */ jsx(ThinkRecoveryNotice, { chat });
243
+ const defaultNotice = chat ? /* @__PURE__ */ jsx(ThinkRecoveryNotice, { chat }) : null;
245
244
  const [dismissedCompaction, setDismissedCompaction] = React.useState(null);
246
245
  const landedCompaction = sessionCompaction?.lastCompaction && sessionCompaction.lastCompaction !== dismissedCompaction ? sessionCompaction.lastCompaction : null;
247
246
  const sessionCompactionNotice = sessionCompaction?.compacting ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SpinnerIcon, {}), "Compacting context…"] }) : sessionCompaction?.sessionError ? /* @__PURE__ */ jsxs(TransitionSurface, {
@@ -256,7 +255,7 @@ function ThinkChatMessages({ composerHeader, renderPart, excludeTools, renderAge
256
255
  className: "think-recovery-notice",
257
256
  children: [compactionSizeText(landedCompaction), " Context usage updates after your next message."]
258
257
  }) : null;
259
- const recoveryActive = chat.isRecovering || chat.connectionError || chat.error;
258
+ const recoveryActive = chat && (chat.isRecovering || chat.connectionError || chat.error);
260
259
  const backgroundRuns = renderAgentToolRunLink ? agentTools?.unboundRuns : void 0;
261
260
  const resolvedComposerHeader = composerHeader || backgroundRuns?.length ? /* @__PURE__ */ jsxs(Fragment, { children: [composerHeader, backgroundRuns?.length && renderAgentToolRunLink ? /* @__PURE__ */ jsxs("div", {
262
261
  className: "subagent-run__tray",
@@ -270,11 +269,32 @@ function ThinkChatMessages({ composerHeader, renderPart, excludeTools, renderAge
270
269
  renderRunLink: renderAgentToolRunLink
271
270
  })]
272
271
  }) : null] }) : void 0;
272
+ const submit = ({ text, files, references }, send) => {
273
+ setDismissedCompaction(sessionCompaction?.lastCompaction ?? null);
274
+ const prompt = [...references?.map(({ trigger, value }) => trigger ? `${trigger}${value}` : value) ?? [], text.trim()].filter(Boolean).join(" ");
275
+ if (!prompt && !files.length) return;
276
+ return send({
277
+ text: prompt,
278
+ files
279
+ });
280
+ };
281
+ if (!chat) {
282
+ if (!draft) throw new Error("ThinkChat.Messages must be used inside <ThinkChat.Provider> or <ThinkChat.Root>, or given a `draft`.");
283
+ return /* @__PURE__ */ jsx(AgentChat, {
284
+ ...props,
285
+ renderPart: resolvedRenderPart,
286
+ messages: draft.messages ?? EMPTY_DRAFT_MESSAGES,
287
+ status: draft.status ?? "ready",
288
+ notice: notice ?? sessionCompactionNotice,
289
+ composerHeader: resolvedComposerHeader,
290
+ onSubmit: (message) => submit(message, draft.onSubmit)
291
+ });
292
+ }
273
293
  return /* @__PURE__ */ jsx(AgentChat, {
274
294
  ...props,
275
295
  renderPart: resolvedRenderPart,
276
296
  messages: chat.messages,
277
- status,
297
+ status: toAgentChatStatus(chat),
278
298
  onStop: chat.stop,
279
299
  onApprovalResponse: chat.addToolApprovalResponse,
280
300
  thinkStub: resolvedApprovals.thinkStub,
@@ -283,17 +303,10 @@ function ThinkChatMessages({ composerHeader, renderPart, excludeTools, renderAge
283
303
  notice: notice ?? (recoveryActive ? defaultNotice : sessionCompactionNotice),
284
304
  composerHeader: resolvedComposerHeader,
285
305
  onRegenerate: (messageId) => void chat.regenerate({ messageId }),
286
- onSubmit: ({ text, files, references }) => {
287
- setDismissedCompaction(sessionCompaction?.lastCompaction ?? null);
288
- const prompt = [...references?.map(({ trigger, value }) => trigger ? `${trigger}${value}` : value) ?? [], text.trim()].filter(Boolean).join(" ");
289
- if (!prompt && !files.length) return;
290
- return chat.sendMessage({
291
- text: prompt,
292
- files
293
- });
294
- }
306
+ onSubmit: (message) => submit(message, chat.sendMessage)
295
307
  });
296
308
  }
309
+ const EMPTY_DRAFT_MESSAGES = [];
297
310
  /**
298
311
  * The ambient chat value from `ThinkChat.Root`/`Provider` — for custom tool
299
312
  * panels, cards, or composer actions that need `messages`, `status`, or
@@ -1,6 +1,6 @@
1
- import { A as MaximizeIcon, d as CheckIcon, h as CodeIcon, r as ArrowLeftIcon, tt as WarningIcon, x as EyeIcon, y as DownloadIcon } from "./icons-B4mGvCvc.js";
1
+ import { A as MaximizeIcon, d as CheckIcon, h as CodeIcon, r as ArrowLeftIcon, tt as WarningIcon, x as EyeIcon, y as DownloadIcon } from "./icons-B1Qw05te.js";
2
2
  import { r as formatClock } from "./format-CmopcfqJ.js";
3
- import { a as CodeBlockCopyButton, i as CodeBlockContent, r as CodeBlockContainer, t as CodeBlock } from "./CodeBlock-B5I7wje1.js";
3
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, r as CodeBlockContainer, t as CodeBlock } from "./CodeBlock-CM5gfmdq.js";
4
4
  import { inferWorkspaceLanguage, inferWorkspaceMedia, isWorkspaceMarkdownPath, isWorkspaceSkillPath, parseWorkspaceSkill } from "./components/agents-sdk/WorkspaceFile.js";
5
5
  import { c as useWorkspaceNavigationContext, s as useWorkspaceNavigationRestoration } from "./WorkspaceLink-DZeLe_jN.js";
6
6
  import { n as createWorkspaceRehypePlugins, t as WorkspaceMessageResponse } from "./WorkspaceMessageResponse-BWbkIELl.js";
@@ -1,5 +1,5 @@
1
1
  import { inferFaviconUrl } from "../../utils/favicon.js";
2
- import { $ as TerminalIcon, B as PencilIcon, C as FileIcon, F as MonitorIcon, G as SearchIcon, O as InfoIcon, k as LinkIcon, nt as WrenchIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
2
+ import { $ as TerminalIcon, B as PencilIcon, C as FileIcon, F as MonitorIcon, G as SearchIcon, O as InfoIcon, k as LinkIcon, nt as WrenchIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
3
3
  import * as React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/agents-sdk/AgentActivity.tsx
@@ -1,10 +1,10 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { C as FileIcon, J as SpinnerIcon, j as McpIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
3
- import { ActivityHeader } from "../ai-sdk/Activity.js";
4
- import { Button } from "../foundations/Button.js";
2
+ import { C as FileIcon, J as SpinnerIcon, j as McpIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
5
3
  import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
4
+ import { ActivityHeader } from "../ai-sdk/Activity.js";
6
5
  import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
7
6
  import { AppIcon } from "../foundations/AppIcon.js";
7
+ import { Button } from "../foundations/Button.js";
8
8
  import "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
10
10
  //#region src/components/agents-sdk/AgentActivityPreview.tsx
@@ -1,25 +1,25 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
+ import { B as PencilIcon, H as PlusIcon, J as SpinnerIcon, L as MoveToFrontIcon, U as QueueIcon, W as RefreshIcon, et as TrashIcon, t as ArchiveIcon } from "../../icons-B1Qw05te.js";
2
3
  import { ExpansionStateProvider } from "../ai-sdk/ExpansionState.js";
3
- import { B as PencilIcon, H as PlusIcon, J as SpinnerIcon, L as MoveToFrontIcon, U as QueueIcon, W as RefreshIcon, et as TrashIcon, t as ArchiveIcon } from "../../icons-B4mGvCvc.js";
4
4
  import { Button } from "../foundations/Button.js";
5
- import { AgentChatMessageEditor } from "../ai-sdk/AgentChatMessageEditor.js";
6
5
  import { IconButton } from "../foundations/IconButton.js";
7
- import { Menu } from "../foundations/Menu.js";
8
- import { PromptInput, PromptInputActionAddAttachments, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommandComposer, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputPermissionSelector, PromptInputReferences, PromptInputSubmit, PromptInputTextarea, PromptInputTools, PromptInputTray, usePromptInputAttachments } from "../ai-sdk/PromptInput.js";
9
- import { AgentChatStartScreen } from "../ai-sdk/AgentChatStartScreen.js";
10
6
  import { Message, MessageAction, MessageActions } from "../ai-sdk/Message.js";
11
7
  import { AgentMessageParts } from "../ai-sdk/AgentMessageParts.js";
12
- import { Marker, MarkerContent } from "../foundations/Marker.js";
13
- import { t as CopyButton } from "../../copy-button-4YvddK4e.js";
14
8
  import { Context, ContextContent, ContextContentBody, ContextContentHeader, ContextTrigger, getContextUsage, getContextUsedTokens } from "../ai-sdk/Context.js";
15
- import { VirtualMessageScroller } from "../ai-sdk/MessageScrollerVirtual.js";
16
9
  import { EmptyState } from "../foundations/EmptyState.js";
10
+ import { VirtualMessageScroller } from "../ai-sdk/MessageScrollerVirtual.js";
11
+ import { Menu } from "../foundations/Menu.js";
12
+ import { PromptInput, PromptInputActionAddAttachments, PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger, PromptInputAttachments, PromptInputBody, PromptInputButton, PromptInputCommandComposer, PromptInputContextSelector, PromptInputDictation, PromptInputFooter, PromptInputHeader, PromptInputPermissionSelector, PromptInputReferences, PromptInputSubmit, PromptInputTextarea, PromptInputTools, PromptInputTray, usePromptInputAttachments } from "../ai-sdk/PromptInput.js";
13
+ import { AgentChatStartScreen } from "../ai-sdk/AgentChatStartScreen.js";
14
+ import { AgentChatMessageEditor } from "../ai-sdk/AgentChatMessageEditor.js";
15
+ import { Marker, MarkerContent } from "../foundations/Marker.js";
17
16
  import { TransitionSurface } from "../foundations/TransitionSurface.js";
18
17
  import { PromptInputApproval, getApprovalRequestId, getApprovalStateKey, getPendingToolApprovals } from "./PromptInputApproval.js";
18
+ import { t as CopyButton } from "../../copy-button-CsNSSKYG.js";
19
19
  import * as React from "react";
20
20
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
- import { isTextUIPart } from "ai";
22
21
  import { isCompactionMessage } from "agents/experimental/memory/utils";
22
+ import { isTextUIPart } from "ai";
23
23
  //#region src/components/agents-sdk/AgentChat.tsx
24
24
  /**
25
25
  * Agents exports this helper from `agents/sessions` after cloudflare/agents#1896;
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { A as MaximizeIcon, J as SpinnerIcon } from "../../icons-B4mGvCvc.js";
2
+ import { A as MaximizeIcon, J as SpinnerIcon } from "../../icons-B1Qw05te.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Dialog } from "../foundations/Dialog.js";
5
5
  import { TransitionSurface } from "../foundations/TransitionSurface.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { V as PlayIcon, z as PauseIcon } from "../../icons-B4mGvCvc.js";
2
+ import { V as PlayIcon, z as PauseIcon } from "../../icons-B1Qw05te.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
4
  import { r as formatClock } from "../../format-CmopcfqJ.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, rt as XIcon } from "../../icons-B4mGvCvc.js";
2
+ import { J as SpinnerIcon, rt as XIcon } from "../../icons-B1Qw05te.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Tabs } from "../foundations/Tabs.js";
5
5
  import { BrowserLiveView } from "./BrowserLiveView.js";
@@ -1,9 +1,9 @@
1
1
  import { getMcpServerEntry, getMcpServerRuntimeState } from "../../utils/mcp-server-catalog.js";
2
2
  import { t as cx } from "../../class-names-BiMDVpUo.js";
3
- import { J as SpinnerIcon, d as CheckIcon, j as McpIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
3
+ import { J as SpinnerIcon, d as CheckIcon, j as McpIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
4
4
  import { Button } from "../foundations/Button.js";
5
- import { AgentAttention, AgentAttentionActions, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
6
5
  import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
6
+ import { AgentAttention, AgentAttentionActions, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
7
7
  import { DescriptionList } from "../foundations/DescriptionList.js";
8
8
  import { n as getMcpServerConnectionKind } from "../../mcp-server-U71zhxFF.js";
9
9
  import * as React from "react";
@@ -1,9 +1,9 @@
1
1
  import { CUSTOM_MCP_SERVER_CARD } from "../../utils/mcp-server-catalog.js";
2
2
  import { t as cx } from "../../class-names-BiMDVpUo.js";
3
3
  import { Button } from "../foundations/Button.js";
4
+ import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
4
5
  import { Field } from "../foundations/Field.js";
5
6
  import { Form } from "../foundations/Form.js";
6
- import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
7
7
  import { Fieldset } from "../foundations/Fieldset.js";
8
8
  import * as React from "react";
9
9
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,13 +1,13 @@
1
1
  import { getMcpServerEntry } from "../../utils/mcp-server-catalog.js";
2
2
  import { t as cx } from "../../class-names-BiMDVpUo.js";
3
- import { H as PlusIcon, J as SpinnerIcon, b as EllipsisIcon, o as ArrowUpRightIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
3
+ import { H as PlusIcon, J as SpinnerIcon, b as EllipsisIcon, o as ArrowUpRightIcon, rt as XIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
4
+ import { AppIcon } from "../foundations/AppIcon.js";
4
5
  import { Button } from "../foundations/Button.js";
5
- import { AgentAttention, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
6
6
  import { IconButton } from "../foundations/IconButton.js";
7
7
  import { Dialog } from "../foundations/Dialog.js";
8
8
  import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
9
9
  import { Separator } from "../foundations/Separator.js";
10
- import { AppIcon } from "../foundations/AppIcon.js";
10
+ import { AgentAttention, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
11
11
  import { n as getMcpServerConnectionKind, t as McpServerIcon } from "../../mcp-server-U71zhxFF.js";
12
12
  import { SearchField } from "../foundations/SearchField.js";
13
13
  import * as React from "react";
@@ -1,14 +1,14 @@
1
1
  import { getMcpServerEntry, getMcpServerRuntimeState } from "../../utils/mcp-server-catalog.js";
2
2
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
3
- import { J as SpinnerIcon, P as MinusIcon, d as CheckIcon, tt as WarningIcon } from "../../icons-B4mGvCvc.js";
3
+ import { J as SpinnerIcon, P as MinusIcon, d as CheckIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
4
4
  import { buttonVariants } from "../foundations/Button.js";
5
- import { Menu } from "../foundations/Menu.js";
6
5
  import { Dialog } from "../foundations/Dialog.js";
7
6
  import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
7
+ import { Menu } from "../foundations/Menu.js";
8
8
  import { PromptInputActionMenu, PromptInputActionMenuContent, PromptInputActionMenuTrigger } from "../ai-sdk/PromptInput.js";
9
9
  import { n as getMcpServerConnectionKind, t as McpServerIcon } from "../../mcp-server-U71zhxFF.js";
10
10
  import { McpConnectorForm } from "./McpConnectorForm.js";
11
- import { t as MenuDisclosureGroup } from "../../MenuDisclosureGroup-BUOZ42me.js";
11
+ import { t as MenuDisclosureGroup } from "../../MenuDisclosureGroup-yJRq7YXa.js";
12
12
  import * as React from "react";
13
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
14
14
  //#region src/components/agents-sdk/McpServerPicker.tsx
@@ -1,2 +1,2 @@
1
- import { _ as getCloudflareModelProvider, a as ModelSelectorEmpty, b as normalizeCloudflareModelSelectorModels, c as ModelSelectorItem, d as ModelSelectorLogoGroup, f as ModelSelectorName, g as formatCloudflareModelProvider, h as ModelSelectorTrigger, i as ModelSelectorDialog, l as ModelSelectorList, m as ModelSelectorSource, n as ModelSelector, o as ModelSelectorGroup, p as ModelSelectorSeparator, r as ModelSelectorContent, s as ModelSelectorInput, t as CloudflareModelSelector, u as ModelSelectorLogo, v as isCloudflareRunnableModelId, x as readCloudflareModelId, y as listCloudflareModelSelectorOptions } from "../../ModelSelector-DZcpUBgn.js";
1
+ import { _ as getCloudflareModelProvider, a as ModelSelectorEmpty, b as normalizeCloudflareModelSelectorModels, c as ModelSelectorItem, d as ModelSelectorLogoGroup, f as ModelSelectorName, g as formatCloudflareModelProvider, h as ModelSelectorTrigger, i as ModelSelectorDialog, l as ModelSelectorList, m as ModelSelectorSource, n as ModelSelector, o as ModelSelectorGroup, p as ModelSelectorSeparator, r as ModelSelectorContent, s as ModelSelectorInput, t as CloudflareModelSelector, u as ModelSelectorLogo, v as isCloudflareRunnableModelId, x as readCloudflareModelId, y as listCloudflareModelSelectorOptions } from "../../ModelSelector-DzdEs2fX.js";
2
2
  export { CloudflareModelSelector, ModelSelector, ModelSelectorContent, ModelSelectorDialog, ModelSelectorEmpty, ModelSelectorGroup, ModelSelectorInput, ModelSelectorItem, ModelSelectorList, ModelSelectorLogo, ModelSelectorLogoGroup, ModelSelectorName, ModelSelectorSeparator, ModelSelectorSource, ModelSelectorTrigger, formatCloudflareModelProvider, getCloudflareModelProvider, isCloudflareRunnableModelId, listCloudflareModelSelectorOptions, normalizeCloudflareModelSelectorModels, readCloudflareModelId };
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { ToolApproval } from "../ai-sdk/ToolApproval.js";
3
2
  import { ThinkExecutionApproval, ThinkPendingApproval, getPausedExecution } from "./ThinkPendingApproval.js";
3
+ import { ToolApproval } from "../ai-sdk/ToolApproval.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  import { isToolUIPart } from "ai";
@@ -1,4 +1,4 @@
1
- import { c as BoxIcon, j as McpIcon } from "../../icons-B4mGvCvc.js";
1
+ import { c as BoxIcon, j as McpIcon } from "../../icons-B1Qw05te.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 { J as SpinnerIcon, X as StopIcon, d as CheckIcon, tt as WarningIcon } from "../../icons-B1Qw05te.js";
3
3
  import "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/agents-sdk/SubagentRunIndicator.tsx
@@ -1,8 +1,8 @@
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-B1Qw05te.js";
3
+ import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
3
4
  import { buttonVariants } from "../foundations/Button.js";
4
5
  import { Tooltip } from "../foundations/Tooltip.js";
5
- import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
6
6
  import { SubagentRunIndicator, getSubagentRunName, getSubagentRunTooltip } from "./SubagentRunIndicator.js";
7
7
  import "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,5 @@
1
1
  import { i as AgentMessageRenderPartContext } from "../../AgentMessageParts-C7L-Mv9U.js";
2
+ import { ct as PromptInputMessage } from "../../PromptInput-DOyee1kM.js";
2
3
  import { r as AgentChatProps } from "../../AgentChat-CV-GuYA6.js";
3
4
  import { i as useOptionalAgentToolRuns, n as AgentToolRunsProvider, r as AgentToolRunsProviderProps, t as AgentToolEventsValue } from "../../AgentToolRunsContext-Cgve-Upx.js";
4
5
  import { n as BrowserLiveViewProps, t as BrowserLiveView } from "../../BrowserLiveView-tJTWkoyu.js";
@@ -46,8 +47,29 @@ interface ThinkChatRootProps<State = unknown> {
46
47
  sourceKey: string;
47
48
  children: React.ReactNode;
48
49
  }
50
+ /**
51
+ * The first-turn surface with no conversation behind it. Supply this instead of
52
+ * a chat provider when the composer's submission is what creates the
53
+ * conversation: connecting early is what leaves empty threads behind.
54
+ */
55
+ interface ThinkChatDraft<MessageT extends UIMessage = UIMessage> {
56
+ /** Client-only transcript rows, such as a locally rendered guide. */
57
+ messages?: readonly MessageT[];
58
+ /** Receives the first message, normalized the same way a live thread's is. */
59
+ onSubmit: (message: {
60
+ text: string;
61
+ files: PromptInputMessage["files"];
62
+ }) => void | Promise<void>;
63
+ /** Set while the app is creating the conversation, so the composer reads busy. */
64
+ status?: AgentChatProps<MessageT>["status"];
65
+ }
49
66
  interface ThinkChatMessagesProps<MessageT extends UIMessage = UIMessage> extends ThinkChatActivityRendererOptions<MessageT> {
50
67
  className?: string;
68
+ /**
69
+ * Renders without a chat provider, for the first turn of a conversation that
70
+ * does not exist yet. Everything else here behaves as it does on a live thread.
71
+ */
72
+ draft?: ThinkChatDraft<MessageT>;
51
73
  /** Disable the composer (e.g. while the agent is unreachable). */
52
74
  disabled?: boolean;
53
75
  /** Hide the composer while retaining the normal Think transcript rendering. */
@@ -179,6 +201,7 @@ declare function ThinkChatRoot<State = unknown, MessageT extends UIMessage = UIM
179
201
  */
180
202
  declare function ThinkChatMessages<State = unknown, MessageT extends UIMessage = UIMessage>({
181
203
  composerHeader,
204
+ draft,
182
205
  renderPart,
183
206
  excludeTools,
184
207
  renderAgentToolRunLink,
@@ -230,4 +253,4 @@ declare const ThinkChat: {
230
253
  createActivityRenderer: typeof createThinkChatActivityRenderer;
231
254
  };
232
255
  //#endregion
233
- export { type AgentToolEventsValue, AgentToolRunsProvider, type AgentToolRunsProviderProps, BrowserLiveView, type BrowserLiveViewProps, BrowserReplay, type BrowserReplayProps, ThinkChat, ThinkChatActivity, type ThinkChatActivityProps, type ThinkChatActivityRendererOptions, ThinkChatMessages, ThinkChatMessagesProps, ThinkChatProvider, ThinkChatProviderProps, ThinkChatRoot, ThinkChatRootProps, type ThinkChatToolRenderer, type ThinkChatToolRenderers, ThinkPendingExecutionApprovalsQueryKey, ThinkPendingExecutionApprovalsQueryOptions, ThinkRecoveryNotice, type ThinkRecoveryNoticeProps, type UseWorkspaceOptions, WorkspaceExplorer, type WorkspaceExplorerProps, type WorkspaceFileReadTarget, type WorkspaceFileState, type WorkspaceInfo, type WorkspaceQueryKey, type WorkspaceSource, type WorkspaceState, createThinkChatActivityRenderer, describeThinkChatActivityPart, inferWorkspaceLanguage, isThinkChatActivityPart, renderThinkChatActivityPart, thinkPendingExecutionApprovalsQueryOptions, useOptionalAgentToolRuns, useThinkChat, useThinkPendingExecutionApprovals, useWorkspace, workspaceBinaryFileQueryOptions, workspaceDirectoryQueryKey, workspaceDirectoryQueryOptions, workspaceDirectoryQueryPrefix, workspaceFileAssetQueryOptions, workspaceFileStatQueryOptions, workspaceInfoQueryOptions, workspaceQueryKey, workspaceTextFileQueryOptions };
256
+ export { type AgentToolEventsValue, AgentToolRunsProvider, type AgentToolRunsProviderProps, BrowserLiveView, type BrowserLiveViewProps, BrowserReplay, type BrowserReplayProps, ThinkChat, ThinkChatActivity, type ThinkChatActivityProps, type ThinkChatActivityRendererOptions, ThinkChatDraft, ThinkChatMessages, ThinkChatMessagesProps, ThinkChatProvider, ThinkChatProviderProps, ThinkChatRoot, ThinkChatRootProps, type ThinkChatToolRenderer, type ThinkChatToolRenderers, ThinkPendingExecutionApprovalsQueryKey, ThinkPendingExecutionApprovalsQueryOptions, ThinkRecoveryNotice, type ThinkRecoveryNoticeProps, type UseWorkspaceOptions, WorkspaceExplorer, type WorkspaceExplorerProps, type WorkspaceFileReadTarget, type WorkspaceFileState, type WorkspaceInfo, type WorkspaceQueryKey, type WorkspaceSource, type WorkspaceState, createThinkChatActivityRenderer, describeThinkChatActivityPart, inferWorkspaceLanguage, isThinkChatActivityPart, renderThinkChatActivityPart, thinkPendingExecutionApprovalsQueryOptions, useOptionalAgentToolRuns, useThinkChat, useThinkPendingExecutionApprovals, useWorkspace, workspaceBinaryFileQueryOptions, workspaceDirectoryQueryKey, workspaceDirectoryQueryOptions, workspaceDirectoryQueryPrefix, workspaceFileAssetQueryOptions, workspaceFileStatQueryOptions, workspaceInfoQueryOptions, workspaceQueryKey, workspaceTextFileQueryOptions };
@@ -6,7 +6,7 @@ import { isThinkChatActivityPart } from "./ThinkChatToolParts.js";
6
6
  import { describeThinkChatActivityPart } from "./ThinkChatActivitySummary.js";
7
7
  import { ThinkChatActivity, createThinkChatActivityRenderer, renderThinkChatActivityPart } from "./ThinkChatActivity.js";
8
8
  import { ThinkRecoveryNotice } from "./ThinkRecoveryNotice.js";
9
- import { a as thinkPendingExecutionApprovalsQueryOptions, i as ThinkChatRoot, n as ThinkChatMessages, o as useThinkChat, r as ThinkChatProvider, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../../ThinkChat-yid8e_Jb.js";
9
+ import { a as thinkPendingExecutionApprovalsQueryOptions, i as ThinkChatRoot, n as ThinkChatMessages, o as useThinkChat, r as ThinkChatProvider, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../../ThinkChat-ldbrNiAx.js";
10
10
  import { useWorkspace, workspaceBinaryFileQueryOptions, workspaceDirectoryQueryKey, workspaceDirectoryQueryOptions, workspaceDirectoryQueryPrefix, workspaceFileAssetQueryOptions, workspaceFileStatQueryOptions, workspaceInfoQueryOptions, workspaceQueryKey, workspaceTextFileQueryOptions } from "./Workspace.js";
11
11
  import { WorkspaceExplorer } from "./WorkspaceExplorer.js";
12
12
  export { AgentToolRunsProvider, BrowserLiveView, BrowserReplay, ThinkChat, ThinkChatActivity, ThinkChatMessages, ThinkChatProvider, ThinkChatRoot, ThinkRecoveryNotice, WorkspaceExplorer, createThinkChatActivityRenderer, describeThinkChatActivityPart, inferWorkspaceLanguage, isThinkChatActivityPart, renderThinkChatActivityPart, thinkPendingExecutionApprovalsQueryOptions, useOptionalAgentToolRuns, useThinkChat, useThinkPendingExecutionApprovals, useWorkspace, workspaceBinaryFileQueryOptions, workspaceDirectoryQueryKey, workspaceDirectoryQueryOptions, workspaceDirectoryQueryPrefix, workspaceFileAssetQueryOptions, workspaceFileStatQueryOptions, workspaceInfoQueryOptions, workspaceQueryKey, workspaceTextFileQueryOptions };
@@ -1,8 +1,8 @@
1
+ import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
1
2
  import { useExpansionState } from "../ai-sdk/ExpansionState.js";
2
3
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityText, ActivityTrigger } from "../ai-sdk/Activity.js";
3
4
  import { Button } from "../foundations/Button.js";
4
5
  import { MessageResponse } from "../ai-sdk/Message.js";
5
- import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
6
6
  import { useOptionalAgentToolRuns } from "./AgentToolRunsContext.js";
7
7
  import { SubagentRunList } from "./SubagentRunList.js";
8
8
  import { useOptionalThinkChatLive } from "./ThinkChatContext.js";
@@ -1,7 +1,7 @@
1
1
  import { ActivityOutput, ActivityPanel } from "../ai-sdk/Activity.js";
2
2
  import { Tabs } from "../foundations/Tabs.js";
3
- import { t as CodeBlock } from "../../CodeBlock-B5I7wje1.js";
4
3
  import { BrowserLiveView } from "./BrowserLiveView.js";
4
+ import { t as CodeBlock } from "../../CodeBlock-CM5gfmdq.js";
5
5
  import { inferWorkspaceLanguage } from "./WorkspaceFile.js";
6
6
  import { displayUrl, isSessionContextToolFailure } from "./ThinkChatToolParts.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 { $ 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 { $ as TerminalIcon, C as FileIcon, O as InfoIcon, W as RefreshIcon, d as CheckIcon, n as ArrowDownIcon, rt as XIcon } from "../../icons-B1Qw05te.js";
3
3
  import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityOutput, ActivityPanel, ActivityTrigger } from "../ai-sdk/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 { J as SpinnerIcon, O as InfoIcon, d as CheckIcon, rt as XIcon, z as PauseIcon } from "../../icons-B4mGvCvc.js";
2
+ import { J as SpinnerIcon, O as InfoIcon, d as CheckIcon, rt as XIcon, z as PauseIcon } from "../../icons-B1Qw05te.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,11 +1,11 @@
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 { W as RefreshIcon, b as EllipsisIcon } from "../../icons-B1Qw05te.js";
3
+ import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
3
4
  import { buttonVariants } from "../foundations/Button.js";
4
5
  import { IconButton } from "../foundations/IconButton.js";
5
- import { Menu } from "../foundations/Menu.js";
6
6
  import { i as formatErrorMessage } from "../../format-CmopcfqJ.js";
7
7
  import { EmptyState } from "../foundations/EmptyState.js";
8
- import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
8
+ import { Menu } from "../foundations/Menu.js";
9
9
  import { AppTopBar } from "../general-purpose/AppTopBar.js";
10
10
  import { getThinkExecutionRunAccessibleName, getThinkExecutionRunId, getThinkExecutionRunStatus, getThinkExecutionRunStatusTone, isSameThinkExecutionRun, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
11
11
  import { ThinkExecutionRunSummary } from "./ThinkExecutionStatus.js";
@@ -33,21 +33,26 @@ interface ThinkFullAppWorkspaceConfig {
33
33
  leading?: React.ReactNode;
34
34
  actions?: React.ReactNode;
35
35
  }
36
- interface ThinkFullAppPanelContext<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage> {
37
- agent: ReturnType<typeof useAgent<AgentT, State>>;
38
- chat: ReturnType<typeof useAgentChat<State, MessageT>>;
39
- workspace?: ThinkFullAppWorkspaceConfig;
40
- }
41
- interface ThinkFullAppPanel<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage> extends ThinkFullAppView {
36
+ interface ThinkFullAppPanel extends ThinkFullAppView {
42
37
  /** Unique panel id used by `workbenchView`; custom panels should not reuse built-in ids. */
43
38
  id: ThinkFullAppWorkbenchView;
44
- render: (context: ThinkFullAppPanelContext<AgentT, State, MessageT>) => React.ReactNode;
39
+ /** Panels are app-authored, so anything one needs is already in its scope. */
40
+ render: () => React.ReactNode;
45
41
  }
46
- interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage> extends React.HTMLAttributes<HTMLDivElement> {
42
+ /** The live conversation the chat lane, approvals, and executions belong to. */
43
+ interface ThinkFullAppConversation<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage> {
47
44
  /** The `useAgent` value from `agents/react`; its stub drives approvals and execution records. */
48
45
  agent: ReturnType<typeof useAgent<AgentT, State>>;
49
46
  /** The `useAgentChat` value from `@cloudflare/think/react` used by the chat surface. */
50
47
  chat: ReturnType<typeof useAgentChat<State, MessageT>>;
48
+ }
49
+ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage> extends React.HTMLAttributes<HTMLDivElement> {
50
+ /**
51
+ * Omit it and supply `messages.draft` for the first turn of a conversation
52
+ * that does not exist yet. The approvals, execution, and background-agent
53
+ * surfaces wait for a conversation to belong to; everything else is unchanged.
54
+ */
55
+ conversation?: ThinkFullAppConversation<AgentT, State, MessageT>;
51
56
  /** Atomic workspace source, navigation, media, and header configuration. */
52
57
  workspace?: ThinkFullAppWorkspaceConfig;
53
58
  /** Plugin directory backed by the host's live Agents MCP state and connection callbacks. */
@@ -62,8 +67,6 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
62
67
  threadStatusSummary?: ThinkThreadStatusSummary;
63
68
  /** Whether narrow layouts render the built-in chat/workbench switch. Defaults to true. */
64
69
  showMobileViewSwitch?: boolean;
65
- /** Whether desktop layouts render the built-in workbench switch. Defaults to true. */
66
- showWorkbenchViewSwitch?: boolean;
67
70
  /** Hide the thread app bar when a narrow workbench supplies its own navigation. */
68
71
  hideAppBarInWorkbench?: boolean;
69
72
  /** Whole native execution selected by the application route. */
@@ -80,7 +83,7 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
80
83
  /** Message rendering labels and approval overrides for ThinkChat. */
81
84
  messages?: ThinkChatMessagesProps<MessageT>;
82
85
  /** Extra workbench panels appended after the enabled built-in panels. */
83
- workbenchPanels?: readonly ThinkFullAppPanel<AgentT, State, MessageT>[];
86
+ workbenchPanels?: readonly ThinkFullAppPanel[];
84
87
  /** Returns an application-authored TanStack Router Link and enables retained Agent Tool runs. */
85
88
  renderAgentToolRunLink?: NonNullable<ThinkChatMessagesProps<MessageT>["renderAgentToolRunLink"]>;
86
89
  /**
@@ -109,23 +112,15 @@ interface ThinkFullAppProps<AgentT extends ThinkFullAppAgent<State>, State = unk
109
112
  defaultWorkbenchView?: ThinkFullAppWorkbenchView;
110
113
  /** Called when the shell toolbar asks to switch workbench lanes. */
111
114
  onWorkbenchViewChange?: (view: ThinkFullAppWorkbenchView) => void;
112
- /** Whether the desktop workbench panel is open. Omit for internal state. */
113
- workbenchOpen?: boolean;
114
- /** Initial desktop workbench state when `workbenchOpen` is uncontrolled. */
115
- defaultWorkbenchOpen?: boolean;
116
- /** Called when toolbar or resize input opens or closes the workbench. */
117
- onWorkbenchOpenChange?: (open: boolean) => void;
118
115
  }
119
116
  /** Combines ThinkChat with an optional resizable workbench shell. */
120
117
  declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage>({
121
- agent,
122
118
  appBarActions,
123
119
  appBarLeading,
124
120
  appBarTitle,
125
- chat,
126
121
  className,
122
+ conversation,
127
123
  defaultMobileView,
128
- defaultWorkbenchOpen,
129
124
  defaultWorkbenchView,
130
125
  defaultThreadSidebarOpen,
131
126
  hideAppBarInWorkbench,
@@ -134,21 +129,18 @@ declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = u
134
129
  onMobileViewChange,
135
130
  onThreadSidebarOpenChange,
136
131
  onWorkbenchViewChange,
137
- onWorkbenchOpenChange,
138
132
  plugins,
139
133
  ref,
140
134
  renderAgentToolRunLink,
141
135
  renderExecutionRunLink,
142
136
  selectedExecutionRun,
143
137
  showMobileViewSwitch,
144
- showWorkbenchViewSwitch,
145
138
  sourceKey,
146
139
  style,
147
140
  threadSidebar,
148
141
  threadSidebarOpen,
149
142
  threadStatusSummary,
150
143
  workbenchPanels,
151
- workbenchOpen,
152
144
  workbenchView,
153
145
  workspace,
154
146
  ...props
@@ -156,4 +148,4 @@ declare function ThinkFullApp<AgentT extends ThinkFullAppAgent<State>, State = u
156
148
  ref?: React.Ref<HTMLDivElement>;
157
149
  }): React.JSX.Element;
158
150
  //#endregion
159
- export { ThinkFullApp, ThinkFullAppAgent, ThinkFullAppMobileView, ThinkFullAppPanel, ThinkFullAppPanelContext, ThinkFullAppProps, ThinkFullAppWorkbenchView, ThinkFullAppWorkspaceConfig };
151
+ export { ThinkFullApp, ThinkFullAppAgent, ThinkFullAppConversation, ThinkFullAppMobileView, ThinkFullAppPanel, ThinkFullAppProps, ThinkFullAppWorkbenchView, ThinkFullAppWorkspaceConfig };