@mcp-b/react-components 0.40.0 → 0.42.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 (228) 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/{CodeBlock-CWk1FVtm.js → CodeBlock-BjELA-_s.js} +1 -1
  4. package/dist/{FileTree-xqHYBw4g.js → FileTree-DMYRdT6R.js} +1 -1
  5. package/dist/McpConnectorForm-MRm1r59e.d.ts +39 -0
  6. package/dist/{Message-DBsHHhcM.d.ts → Message-D_vCVEGB.d.ts} +20 -1
  7. package/dist/{ThinkChatActivity-D6-_5Phw.d.ts → ThinkChatActivity-CsDql-ER.d.ts} +4 -1
  8. package/dist/{ThinkExecutionRun-lYYgyeE1.d.ts → ThinkExecutionRun-k8bpyXqt.d.ts} +3 -3
  9. package/dist/{WorkspaceFileView-Lab3om3F.js → WorkspaceFileView-DwdXiKku.js} +17 -22
  10. package/dist/{WorkspaceMessageResponse-Cy28WGSz.d.ts → WorkspaceMessageResponse-D66ty4FO.d.ts} +1 -1
  11. package/dist/components/agents-sdk/AgentActivity.js +4 -3
  12. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  13. package/dist/components/agents-sdk/AgentChat.js +42 -18
  14. package/dist/components/agents-sdk/AgentToolRunsContext.d.ts +1 -1
  15. package/dist/components/agents-sdk/AgentToolRunsContext.js +12 -0
  16. package/dist/components/agents-sdk/BrowserLiveScreen.d.ts +135 -0
  17. package/dist/components/agents-sdk/BrowserLiveScreen.js +637 -0
  18. package/dist/components/agents-sdk/BrowserLiveView.d.ts +2 -2
  19. package/dist/components/agents-sdk/BrowserLiveView.js +6 -9
  20. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  21. package/dist/components/agents-sdk/BrowserRunPanel.d.ts +1 -1
  22. package/dist/components/agents-sdk/BrowserRunPanel.js +8 -13
  23. package/dist/components/agents-sdk/ManagerOffice.d.ts +168 -0
  24. package/dist/components/agents-sdk/ManagerOffice.js +698 -0
  25. package/dist/components/agents-sdk/McpConnectionRequest.js +3 -3
  26. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -38
  27. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +8 -2
  28. package/dist/components/agents-sdk/McpPluginCatalog.js +82 -62
  29. package/dist/components/agents-sdk/McpServerPicker.d.ts +1 -1
  30. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  31. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  32. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  33. package/dist/components/agents-sdk/SubagentRunDetails.d.ts +1 -9
  34. package/dist/components/agents-sdk/SubagentRunDetails.js +1 -9
  35. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  36. package/dist/components/agents-sdk/SubagentRunSelector.d.ts +4 -2
  37. package/dist/components/agents-sdk/SubagentRunSelector.js +7 -6
  38. package/dist/components/agents-sdk/ThinkChat.d.ts +4 -4
  39. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  40. package/dist/components/agents-sdk/ThinkChatActivity.js +18 -4
  41. package/dist/components/agents-sdk/ThinkChatToolPanels.js +7 -3
  42. package/dist/components/agents-sdk/ThinkExecutionDetail.d.ts +1 -1
  43. package/dist/components/agents-sdk/ThinkExecutionDetail.js +45 -43
  44. package/dist/components/agents-sdk/ThinkExecutionRun.d.ts +2 -2
  45. package/dist/components/agents-sdk/ThinkExecutionRun.js +5 -6
  46. package/dist/components/agents-sdk/ThinkExecutionStatus.d.ts +1 -1
  47. package/dist/components/agents-sdk/ThinkExecutionStatus.js +8 -12
  48. package/dist/components/agents-sdk/ThinkExecutionWorkbench.d.ts +8 -1
  49. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +43 -37
  50. package/dist/components/agents-sdk/ThinkFullApp.d.ts +42 -78
  51. package/dist/components/agents-sdk/ThinkFullApp.js +121 -202
  52. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
  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.d.ts +7 -6
  58. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +112 -140
  59. package/dist/components/agents-sdk/ThinkRoutineRuns.d.ts +1 -1
  60. package/dist/components/agents-sdk/ThinkRoutineRuns.js +3 -10
  61. package/dist/components/agents-sdk/ThinkThreadPicker.js +2 -1
  62. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  63. package/dist/components/agents-sdk/WorkspaceExplorer.js +2 -1
  64. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  65. package/dist/components/agents-sdk/WorkspaceHeader.js +2 -1
  66. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +1 -1
  67. package/dist/components/agents-sdk/WorkspaceMountManager.js +11 -11
  68. package/dist/components/ai-sdk/Activity.js +1 -1
  69. package/dist/components/ai-sdk/AgentAttention.d.ts +1 -1
  70. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  71. package/dist/components/ai-sdk/Approval.js +1 -1
  72. package/dist/components/ai-sdk/Artifact.js +1 -1
  73. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  74. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  75. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  76. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  77. package/dist/components/ai-sdk/Conversation.js +1 -1
  78. package/dist/components/ai-sdk/Goal.js +1 -1
  79. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  80. package/dist/components/ai-sdk/Message.d.ts +2 -2
  81. package/dist/components/ai-sdk/Message.js +25 -3
  82. package/dist/components/ai-sdk/MessageScroller.js +3 -2
  83. package/dist/components/ai-sdk/MessageScrollerVirtual.js +2 -1
  84. package/dist/components/ai-sdk/Plan.js +1 -1
  85. package/dist/components/ai-sdk/PromptInput.js +21 -15
  86. package/dist/components/ai-sdk/Queue.d.ts +4 -4
  87. package/dist/components/ai-sdk/Queue.js +6 -15
  88. package/dist/components/ai-sdk/Reasoning.js +1 -1
  89. package/dist/components/ai-sdk/Sources.js +1 -1
  90. package/dist/components/ai-sdk/Task.d.ts +2 -2
  91. package/dist/components/ai-sdk/Task.js +2 -2
  92. package/dist/components/extension/ChatGptSignInScreen.js +2 -1
  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/ToggleGroup.d.ts +79 -1
  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/AppFrame.js +1 -0
  111. package/dist/components/general-purpose/AppTopBar.d.ts +6 -0
  112. package/dist/components/general-purpose/AppTopBar.js +2 -1
  113. package/dist/components/general-purpose/Commit.d.ts +2 -2
  114. package/dist/components/general-purpose/Commit.js +5 -13
  115. package/dist/components/general-purpose/EnvironmentVariables.d.ts +2 -2
  116. package/dist/components/general-purpose/EnvironmentVariables.js +4 -7
  117. package/dist/components/general-purpose/FileTree.js +1 -1
  118. package/dist/components/general-purpose/PricingBillingToggle.js +4 -9
  119. package/dist/components/general-purpose/PricingPlanCard.js +15 -14
  120. package/dist/components/general-purpose/ResizableSidePanel.d.ts +8 -0
  121. package/dist/components/general-purpose/ResizableSidePanel.js +3 -2
  122. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +105 -2
  123. package/dist/components/general-purpose/ResponsiveSidebarShell.js +112 -56
  124. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  125. package/dist/components/general-purpose/Terminal.d.ts +1 -1
  126. package/dist/components/general-purpose/Terminal.js +4 -12
  127. package/dist/components/general-purpose/TestResults.d.ts +1 -1
  128. package/dist/components/general-purpose/TestResults.js +8 -21
  129. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  130. package/dist/components/general-purpose/WebPreview.d.ts +4 -1
  131. package/dist/components/general-purpose/WebPreview.js +6 -14
  132. package/dist/components/nanites/AgentConnection.js +2 -2
  133. package/dist/components/nanites/AgentToolDetail.d.ts +1 -1
  134. package/dist/components/nanites/AgentToolDetail.js +6 -5
  135. package/dist/components/nanites/NaniteScene.js +11 -11
  136. package/dist/{copy-button-Bc7jsYv_.js → copy-button-lys9N_aI.js} +1 -1
  137. package/dist/{icons-DwgNir1Q.d.ts → icons-0corjfxR.d.ts} +1 -16
  138. package/dist/{icons-MmIXciMO.js → icons-CVFSeTJn.js} +2 -5
  139. package/dist/styles/accordion.css +1 -0
  140. package/dist/styles/action-guide.css +8 -7
  141. package/dist/styles/activity-header.css +13 -39
  142. package/dist/styles/activity.css +40 -55
  143. package/dist/styles/agent-attention.css +19 -19
  144. package/dist/styles/agent-chat.css +94 -42
  145. package/dist/styles/agent-connection.css +10 -4
  146. package/dist/styles/agent-tool-detail.css +5 -15
  147. package/dist/styles/alert-dialog.css +4 -4
  148. package/dist/styles/app-frame.css +1 -3
  149. package/dist/styles/app-icon.css +12 -18
  150. package/dist/styles/app-top-bar.css +31 -9
  151. package/dist/styles/approval.css +1 -0
  152. package/dist/styles/artifact.css +6 -6
  153. package/dist/styles/attachment-preview.css +5 -4
  154. package/dist/styles/avatar.css +6 -22
  155. package/dist/styles/base.css +2 -8
  156. package/dist/styles/browser-live-screen.css +38 -0
  157. package/dist/styles/browser-live-view.css +12 -4
  158. package/dist/styles/browser-replay.css +6 -6
  159. package/dist/styles/browser-run-panel.css +21 -18
  160. package/dist/styles/button.css +15 -6
  161. package/dist/styles/card.css +5 -5
  162. package/dist/styles/chatgpt-sign-in-screen.css +6 -6
  163. package/dist/styles/code-block.css +14 -13
  164. package/dist/styles/codex-model-selector.css +2 -0
  165. package/dist/styles/collapsible.css +1 -0
  166. package/dist/styles/commit.css +30 -7
  167. package/dist/styles/context.css +9 -9
  168. package/dist/styles/conversation-tab-picker.css +1 -1
  169. package/dist/styles/conversation.css +6 -8
  170. package/dist/styles/dialog.css +4 -4
  171. package/dist/styles/empty-state.css +3 -3
  172. package/dist/styles/environment-variables.css +12 -9
  173. package/dist/styles/field.css +2 -1
  174. package/dist/styles/fieldset.css +2 -2
  175. package/dist/styles/index.css +8 -7
  176. package/dist/styles/manager-office.css +480 -0
  177. package/dist/styles/mcp-plugin-catalog.css +44 -39
  178. package/dist/styles/mcp-server-picker.css +4 -4
  179. package/dist/styles/message-scroller.css +9 -11
  180. package/dist/styles/message.css +74 -28
  181. package/dist/styles/nanite-scene.css +9 -9
  182. package/dist/styles/navigation-menu.css +1 -0
  183. package/dist/styles/plan.css +13 -12
  184. package/dist/styles/pricing-page.css +37 -30
  185. package/dist/styles/prompt-input.css +26 -18
  186. package/dist/styles/queue.css +1 -0
  187. package/dist/styles/reasoning.css +1 -9
  188. package/dist/styles/recipes.css +29 -58
  189. package/dist/styles/responsive-sidebar-shell.css +107 -29
  190. package/dist/styles/separator.css +5 -5
  191. package/dist/styles/sources.css +4 -4
  192. package/dist/styles/stepper.css +1 -0
  193. package/dist/styles/streamdown.css +31 -21
  194. package/dist/styles/subagent-run.css +20 -3
  195. package/dist/styles/tabs.css +1 -0
  196. package/dist/styles/task.css +5 -17
  197. package/dist/styles/terminal.css +29 -10
  198. package/dist/styles/test-results.css +16 -7
  199. package/dist/styles/think-execution-status.css +10 -26
  200. package/dist/styles/think-execution-workbench.css +98 -108
  201. package/dist/styles/think-full-app.css +75 -225
  202. package/dist/styles/think-routine-library.css +26 -95
  203. package/dist/styles/think-thread-picker.css +17 -12
  204. package/dist/styles/transition-surface.css +7 -8
  205. package/dist/styles/utilities.css +75 -0
  206. package/dist/styles/web-preview.css +46 -22
  207. package/dist/styles/workspace-explorer.css +22 -44
  208. package/dist/styles/workspace-mount-manager.css +24 -2
  209. package/dist/utils/favicon.d.ts +6 -1
  210. package/dist/utils/favicon.js +18 -1
  211. package/package.json +37 -35
  212. package/dist/ResponsiveSidebarShell-DWjULskY.d.ts +0 -68
  213. package/dist/ToggleGroup-_pQMyHGM.d.ts +0 -80
  214. package/dist/components/agents-sdk/AgentActivityPreview.d.ts +0 -46
  215. package/dist/components/agents-sdk/AgentActivityPreview.js +0 -93
  216. package/dist/components/agents-sdk/ThinkThreadShell.d.ts +0 -38
  217. package/dist/components/agents-sdk/ThinkThreadShell.js +0 -27
  218. package/dist/components/foundations/Badge.d.ts +0 -62
  219. package/dist/components/foundations/Badge.js +0 -55
  220. package/dist/components/foundations/StatusPill.d.ts +0 -43
  221. package/dist/components/foundations/StatusPill.js +0 -35
  222. package/dist/components/general-purpose/Shell.d.ts +0 -149
  223. package/dist/components/general-purpose/Shell.js +0 -116
  224. package/dist/styles/agent-activity-preview-overlay.css +0 -169
  225. package/dist/styles/agent-activity-preview.css +0 -209
  226. package/dist/styles/badge.css +0 -120
  227. package/dist/styles/shell.css +0 -122
  228. package/dist/styles/status-pill.css +0 -39
@@ -167,7 +167,7 @@ interface AgentChatProps<MessageT extends UIMessage = UIMessage> {
167
167
  composerAddMenuItems?: React.ReactNode;
168
168
  /**
169
169
  * Transient status rendered between the transcript and the composer —
170
- * e.g. a "Reconnecting…" pill. `ThinkChat.Messages` fills this from the
170
+ * e.g. "Reconnecting…". `ThinkChat.Messages` fills this from the
171
171
  * hook's `isRecovering`/`connectionError` automatically.
172
172
  */
173
173
  notice?: React.ReactNode;
@@ -21,6 +21,18 @@ type AgentToolEventSource = Parameters<typeof useAgentToolEvents>[0]["agent"] &
21
21
  * once per socket connect, so a later mount misses existing runs — and share
22
22
  * the one value with every surface that reads runs (the chat shell and a
23
23
  * run-detail route read the same projection, never two subscriptions).
24
+ *
25
+ * The subscription's listener attaches in a passive effect, after paint. A
26
+ * host whose transport is in-process (the browser extension's port bridge)
27
+ * can complete the connect and deliver the replay before that effect runs —
28
+ * reliably so on a hot return from a drill-in. Upstream owns the fix:
29
+ * `useAgent` buffers `agent-tool-event` frames from socket construction and
30
+ * `useAgentToolEvents` drains them when its listener attaches (agents >
31
+ * 0.20.1; `_bufferAgentToolReplayFrame` is the seam for a non-`useAgent`
32
+ * socket). On older versions such hosts must buffer and re-dispatch
33
+ * themselves — think-browser-host's `useThinkAgentToolEvents` is that
34
+ * interim shim. Network transports are not affected in practice: the round
35
+ * trip loses to the effect flush.
24
36
  */
25
37
  declare function useSourceScopedAgentToolEvents<Part extends AgentToolRunPart = UIMessage["parts"][number]>(agent: AgentToolEventSource): {
26
38
  runsById: Record<string, import("agents").AgentToolRunState<Part>>;
@@ -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-Bc7jsYv_.js";
3
+ import { t as CopyButton } from "./copy-button-lys9N_aI.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-MmIXciMO.js";
2
+ import { C as FolderIcon, S as FileIcon, p as ChevronRightIcon, w as FolderOpenIcon } from "./icons-CVFSeTJn.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";
@@ -0,0 +1,39 @@
1
+ import { d as McpServerSetupAuthFieldName, l as McpServerSetupAuth } from "./mcp-server-catalog-CCj2ItkV.js";
2
+ import * as React from "react";
3
+
4
+ //#region src/components/agents-sdk/McpConnectorForm.d.ts
5
+ type CredentialFieldName = Exclude<McpServerSetupAuthFieldName, "redirectUrl">;
6
+ type McpConnectorFormValues = Readonly<Partial<Record<CredentialFieldName, string>> & {
7
+ readonly name: string;
8
+ readonly url: string;
9
+ }>;
10
+ type McpConnectorFormProps = Omit<React.FormHTMLAttributes<HTMLFormElement>, "onSubmit" | "status"> & {
11
+ /** Authentication metadata that decides which credential fields render. */readonly auth?: McpServerSetupAuth; /** Initial connector values. Publisher client credentials remain app-owned. */
12
+ readonly defaults?: Partial<McpConnectorFormValues>; /** Optional pattern used to validate the MCP name field. */
13
+ readonly namePattern?: string; /** Keep a catalog-owned MCP name and URL visible but immutable. */
14
+ readonly readOnlyServer?: boolean; /** Read-only redirect URL shown for manual OAuth client setup. */
15
+ readonly redirectUrl?: string; /** Inline connection status announced politely to assistive tech. */
16
+ readonly status?: React.ReactNode; /** Label for the submit button. */
17
+ readonly submitLabel?: string; /** Label shown while submit is pending. */
18
+ readonly submittingLabel?: string; /** Called with normalized connector values after native form validation passes. */
19
+ readonly onSubmit: (values: McpConnectorFormValues) => void | Promise<void>;
20
+ };
21
+ /** Collects MCP connector settings and optional credentials with native form validation. */
22
+ declare function McpConnectorForm({
23
+ auth,
24
+ className,
25
+ defaults,
26
+ namePattern,
27
+ readOnlyServer,
28
+ redirectUrl,
29
+ status,
30
+ submitLabel,
31
+ submittingLabel,
32
+ onSubmit,
33
+ ref,
34
+ ...props
35
+ }: McpConnectorFormProps & {
36
+ ref?: React.Ref<HTMLFormElement>;
37
+ }): React.JSX.Element;
38
+ //#endregion
39
+ export { McpConnectorFormProps as n, McpConnectorFormValues as r, McpConnectorForm as t };
@@ -55,6 +55,25 @@ declare function MessageContent({
55
55
  }: MessageContentProps & {
56
56
  ref?: React.Ref<HTMLDivElement>;
57
57
  }): React.JSX.Element;
58
+ interface MessageMetaProps extends React.HTMLAttributes<HTMLDivElement> {}
59
+ /** Quiet message metadata and actions shown on hover or keyboard focus. */
60
+ declare function MessageMeta({
61
+ className,
62
+ children,
63
+ ref,
64
+ ...props
65
+ }: MessageMetaProps & {
66
+ ref?: React.Ref<HTMLDivElement>;
67
+ }): React.JSX.Element;
68
+ interface MessageTimestampProps extends Omit<React.TimeHTMLAttributes<HTMLTimeElement>, "children" | "dateTime"> {
69
+ date: Date;
70
+ }
71
+ /** Machine-readable message time with a compact local-time label. */
72
+ declare function MessageTimestamp({
73
+ date,
74
+ className,
75
+ ...props
76
+ }: MessageTimestampProps): React.JSX.Element;
58
77
  type MessageResponseProps = StreamdownProps;
59
78
  declare const MessageResponse: React.MemoExoticComponent<({
60
79
  className,
@@ -225,4 +244,4 @@ declare function MessageBranchPage({
225
244
  ref?: React.Ref<HTMLSpanElement>;
226
245
  }): React.JSX.Element;
227
246
  //#endregion
228
- export { MessageResponse as C, MessageToolbarProps as D, MessageToolbar as E, MessageProps as S, MessageRole as T, MessageBranchProps as _, MessageActionsProps as a, MessageContent as b, MessageBranch as c, MessageBranchNext as d, MessageBranchNextProps as f, MessageBranchPreviousProps as g, MessageBranchPrevious as h, MessageActions as i, MessageBranchContent as l, MessageBranchPageProps as m, MessageAction as n, MessageAttachment as o, MessageBranchPage as p, MessageActionProps as r, MessageAttachmentProps as s, Message as t, MessageBranchContentProps as u, MessageBranchSelector as v, MessageResponseProps as w, MessageContentProps as x, MessageBranchSelectorProps as y };
247
+ export { MessageToolbar as A, MessageMetaProps as C, MessageRole as D, MessageResponseProps as E, MessageTimestamp as O, MessageMeta as S, MessageResponse as T, MessageBranchProps as _, MessageActionsProps as a, MessageContent as b, MessageBranch as c, MessageBranchNext as d, MessageBranchNextProps as f, MessageBranchPreviousProps as g, MessageBranchPrevious as h, MessageActions as i, MessageToolbarProps as j, MessageTimestampProps as k, MessageBranchContent as l, MessageBranchPageProps as m, MessageAction as n, MessageAttachment as o, MessageBranchPage as p, MessageActionProps as r, MessageAttachmentProps as s, Message as t, MessageBranchContentProps as u, MessageBranchSelector as v, MessageProps as w, MessageContentProps as x, MessageBranchSelectorProps as y };
@@ -1,5 +1,5 @@
1
1
  import { i as AgentMessageRenderPartContext } from "./AgentMessageParts-C7L-Mv9U.js";
2
- import { r as AgentChatProps } from "./AgentChat-CVO7xyLC.js";
2
+ import { r as AgentChatProps } from "./AgentChat-DVr2giwD.js";
3
3
  import { l as ThinkChatPart } from "./ThinkChatToolParts-D4qcnnxt.js";
4
4
  import { t as ThinkChatActivityDescription } from "./ThinkChatActivitySummary-BtBQgMg6.js";
5
5
  import * as React from "react";
@@ -40,6 +40,8 @@ interface ThinkChatActivityProps {
40
40
  isStreaming?: boolean;
41
41
  /** Per-tool action/panel overrides, keyed by tool name. */
42
42
  toolRenderers?: ThinkChatToolRenderers;
43
+ /** Replaces the summary action after the activity settles. */
44
+ settledAction?: string;
43
45
  /**
44
46
  * Uniquely identifies this run across the whole transcript for persisted
45
47
  * disclosure state (the activity renderer passes `${message.id}:${runStart}`).
@@ -54,6 +56,7 @@ declare function ThinkChatActivity({
54
56
  defaultOpen,
55
57
  isStreaming,
56
58
  toolRenderers,
59
+ settledAction,
57
60
  stateKey
58
61
  }: ThinkChatActivityProps): React.JSX.Element | null;
59
62
  /**
@@ -6,9 +6,10 @@ import { WorkflowInfo } from "agents/workflows";
6
6
  type ThinkExecutionRun = ThinkSubmissionInspection | WorkflowInfo;
7
7
  /** Narrows the direct upstream execution union without wrapping either record. */
8
8
  declare function isThinkSubmissionRun(run: ThinkExecutionRun): run is ThinkSubmissionInspection;
9
- type ThinkExecutionStatusTone = "success" | "danger" | "warning" | "primary" | "neutral";
9
+ type ThinkExecutionStatusTone = "success" | "danger" | "paused" | "primary" | "neutral";
10
10
  declare function getThinkExecutionRunId(run: ThinkExecutionRun): string;
11
11
  declare function getThinkExecutionRunTitle(run: ThinkExecutionRun): string;
12
+ declare function getThinkExecutionRunKindLabel(run: ThinkExecutionRun): "Submission" | "Workflow";
12
13
  declare function getThinkExecutionRunSubtitle(run: ThinkExecutionRun): string | undefined;
13
14
  declare function getThinkExecutionRunProgressedAt(run: ThinkExecutionRun): number | Date | undefined;
14
15
  declare function getThinkExecutionRunProgressedLabel(run: ThinkExecutionRun): "Started" | "Updated";
@@ -25,6 +26,5 @@ declare function formatThinkExecutionShortTimestamp(value: Date | number | null
25
26
  declare function formatThinkExecutionRunProgress(run: ThinkExecutionRun): string;
26
27
  declare function getThinkExecutionRunAccessibleName(run: ThinkExecutionRun): string;
27
28
  declare function getThinkExecutionRunError(run: ThinkExecutionRun): string | undefined;
28
- declare function isSameThinkExecutionRun(first: ThinkExecutionRun | null, second: ThinkExecutionRun): boolean;
29
29
  //#endregion
30
- export { isThinkSubmissionRun as _, formatThinkExecutionStatus as a, getThinkExecutionRunError as c, getThinkExecutionRunProgressedLabel as d, getThinkExecutionRunStatus as f, isSameThinkExecutionRun as g, getThinkExecutionRunTitle as h, formatThinkExecutionShortTimestamp as i, getThinkExecutionRunId as l, getThinkExecutionRunSubtitle as m, ThinkExecutionStatusTone as n, formatThinkExecutionTimestamp as o, getThinkExecutionRunStatusTone as p, formatThinkExecutionRunProgress as r, getThinkExecutionRunAccessibleName as s, ThinkExecutionRun as t, getThinkExecutionRunProgressedAt as u };
30
+ export { isThinkSubmissionRun as _, formatThinkExecutionStatus as a, getThinkExecutionRunError as c, getThinkExecutionRunProgressedAt as d, getThinkExecutionRunProgressedLabel as f, getThinkExecutionRunTitle as g, getThinkExecutionRunSubtitle as h, formatThinkExecutionShortTimestamp as i, getThinkExecutionRunId as l, getThinkExecutionRunStatusTone as m, ThinkExecutionStatusTone as n, formatThinkExecutionTimestamp as o, getThinkExecutionRunStatus as p, formatThinkExecutionRunProgress as r, getThinkExecutionRunAccessibleName as s, ThinkExecutionRun as t, getThinkExecutionRunKindLabel as u };
@@ -1,6 +1,6 @@
1
- import { d as CheckIcon, h as CodeIcon, j as MaximizeIcon, nt as WarningIcon, r as ArrowLeftIcon, x as EyeIcon, y as DownloadIcon } from "./icons-MmIXciMO.js";
1
+ import { $ as WarningIcon, O as MaximizeIcon, b as EyeIcon, d as CheckIcon, m as CodeIcon, r as ArrowLeftIcon, v as DownloadIcon } from "./icons-CVFSeTJn.js";
2
2
  import { r as formatClock } from "./format-DB2mX9DA.js";
3
- import { a as CodeBlockCopyButton, i as CodeBlockContent, r as CodeBlockContainer, t as CodeBlock } from "./CodeBlock-CWk1FVtm.js";
3
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, r as CodeBlockContainer, t as CodeBlock } from "./CodeBlock-BjELA-_s.js";
4
4
  import { AppTopBar } from "./components/general-purpose/AppTopBar.js";
5
5
  import { inferWorkspaceLanguage, inferWorkspaceMedia, isWorkspaceMarkdownPath, isWorkspaceSkillPath, parseWorkspaceSkill } from "./components/agents-sdk/WorkspaceFile.js";
6
6
  import { c as useWorkspaceNavigationContext, s as useWorkspaceNavigationRestoration } from "./WorkspaceLink-DtH66bAY.js";
@@ -70,32 +70,27 @@ function useWorkspaceAssetUrl(asset, mimeType) {
70
70
  });
71
71
  return;
72
72
  }
73
- let url = null;
74
- let downloadUrl = null;
75
- try {
76
- const previewBlob = new Blob([toBlobPart(asset.data)], { type: mimeType });
77
- url = URL.createObjectURL(previewBlob);
78
- downloadUrl = mimeType === SVG_MIME_TYPE ? URL.createObjectURL(new Blob([previewBlob], { type: "application/octet-stream" })) : url;
73
+ const previewBlob = new Blob([toBlobPart(asset.data)], { type: mimeType });
74
+ const previewUrl = URL.createObjectURL(previewBlob);
75
+ if (mimeType !== SVG_MIME_TYPE) {
79
76
  setObjectUrl({
80
77
  asset,
81
- url,
82
- downloadUrl,
78
+ url: previewUrl,
79
+ downloadUrl: previewUrl,
83
80
  error: null
84
81
  });
85
- } catch {
86
- if (url) URL.revokeObjectURL(url);
87
- if (downloadUrl && downloadUrl !== url) URL.revokeObjectURL(downloadUrl);
88
- setObjectUrl({
89
- asset,
90
- url: null,
91
- downloadUrl: null,
92
- error: "This file could not be prepared for preview."
93
- });
94
- return;
82
+ return () => URL.revokeObjectURL(previewUrl);
95
83
  }
84
+ const svgDownloadUrl = URL.createObjectURL(new Blob([previewBlob], { type: "application/octet-stream" }));
85
+ setObjectUrl({
86
+ asset,
87
+ url: previewUrl,
88
+ downloadUrl: svgDownloadUrl,
89
+ error: null
90
+ });
96
91
  return () => {
97
- if (url) URL.revokeObjectURL(url);
98
- if (downloadUrl && downloadUrl !== url) URL.revokeObjectURL(downloadUrl);
92
+ URL.revokeObjectURL(previewUrl);
93
+ URL.revokeObjectURL(svgDownloadUrl);
99
94
  };
100
95
  }, [asset, mimeType]);
101
96
  if (!asset) return {
@@ -1,4 +1,4 @@
1
- import { w as MessageResponseProps } from "./Message-DBsHHhcM.js";
1
+ import { E as MessageResponseProps } from "./Message-D_vCVEGB.js";
2
2
  import * as React from "react";
3
3
 
4
4
  //#region src/components/agents-sdk/WorkspaceMessageResponse.d.ts
@@ -1,5 +1,5 @@
1
- import { inferFaviconUrl } from "../../utils/favicon.js";
2
- import { A as LinkIcon, C as FileIcon, I as MonitorIcon, K as SearchIcon, O as InfoIcon, V as PencilIcon, et as TerminalIcon, nt as WarningIcon, rt as WrenchIcon } from "../../icons-MmIXciMO.js";
1
+ import { canRequestFavicon, inferFaviconUrl } from "../../utils/favicon.js";
2
+ import { $ as WarningIcon, D as LinkIcon, N as MonitorIcon, R as PencilIcon, S as FileIcon, T as InfoIcon, U as SearchIcon, Z as TerminalIcon, et as WrenchIcon } from "../../icons-CVFSeTJn.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
@@ -21,7 +21,8 @@ function AgentActivityIcon({ kind }) {
21
21
  function AgentActivityFavicon({ fallbackKind = "web", url }) {
22
22
  const src = inferFaviconUrl(url);
23
23
  const [failedSrc, setFailedSrc] = React.useState(null);
24
- if (!src || failedSrc === src) return /* @__PURE__ */ jsx(AgentActivityIcon, { kind: fallbackKind });
24
+ const failed = failedSrc === src;
25
+ if (!src || !canRequestFavicon(src) || failed) return /* @__PURE__ */ jsx(AgentActivityIcon, { kind: fallbackKind });
25
26
  return /* @__PURE__ */ jsx("img", {
26
27
  className: "activity__favicon",
27
28
  src,
@@ -1,2 +1,2 @@
1
- import { a as PermissionModeControl, i as AgentChatRenderMessageContext, n as AgentChatComposerDraft, o as compactingNotice, r as AgentChatProps, t as AgentChat } from "../../AgentChat-CVO7xyLC.js";
1
+ import { a as PermissionModeControl, i as AgentChatRenderMessageContext, n as AgentChatComposerDraft, o as compactingNotice, r as AgentChatProps, t as AgentChat } from "../../AgentChat-DVr2giwD.js";
2
2
  export { AgentChat, AgentChatComposerDraft, AgentChatProps, AgentChatRenderMessageContext, PermissionModeControl, compactingNotice };
@@ -1,16 +1,16 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { ExpansionStateProvider } from "../ai-sdk/ExpansionState.js";
3
- import { G as RefreshIcon, R as MoveToFrontIcon, U as PlusIcon, V as PencilIcon, W as QueueIcon, Y as SpinnerIcon, t as ArchiveIcon, tt as TrashIcon } from "../../icons-MmIXciMO.js";
3
+ import { B as PlusIcon, F as MoveToFrontIcon, H as RefreshIcon, K as SpinnerIcon, Q as TrashIcon, R as PencilIcon, V as QueueIcon, t as ArchiveIcon } from "../../icons-CVFSeTJn.js";
4
4
  import { Button } from "../foundations/Button.js";
5
5
  import { AgentChatMessageEditor } from "../ai-sdk/AgentChatMessageEditor.js";
6
6
  import { IconButton } from "../foundations/IconButton.js";
7
7
  import { Menu } from "../foundations/Menu.js";
8
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
9
  import { AgentChatStartScreen } from "../ai-sdk/AgentChatStartScreen.js";
10
- import { Message, MessageAction, MessageActions } from "../ai-sdk/Message.js";
10
+ import { Message, MessageAction, MessageActions, MessageMeta, MessageTimestamp } from "../ai-sdk/Message.js";
11
11
  import { AgentMessageParts } from "../ai-sdk/AgentMessageParts.js";
12
12
  import { Marker, MarkerContent } from "../foundations/Marker.js";
13
- import { t as CopyButton } from "../../copy-button-Bc7jsYv_.js";
13
+ import { t as CopyButton } from "../../copy-button-lys9N_aI.js";
14
14
  import { Context, ContextContent, ContextContentBody, ContextContentHeader, ContextTrigger, getContextUsage, getContextUsedTokens } from "../ai-sdk/Context.js";
15
15
  import { VirtualMessageScroller } from "../ai-sdk/MessageScrollerVirtual.js";
16
16
  import { QueueItem, QueueItemActions, QueueItemContent } from "../ai-sdk/Queue.js";
@@ -78,6 +78,14 @@ function observeAgentChatComposer(element) {
78
78
  observer.disconnect();
79
79
  };
80
80
  }
81
+ function getAgentChatMessageTime(message) {
82
+ const metadata = message.metadata;
83
+ if (!metadata || typeof metadata !== "object" || !("createdAt" in metadata)) return void 0;
84
+ const value = metadata.createdAt;
85
+ if (!(value instanceof Date) && typeof value !== "number" && typeof value !== "string") return;
86
+ const date = value instanceof Date ? value : new Date(value);
87
+ return Number.isNaN(date.getTime()) ? void 0 : date;
88
+ }
81
89
  const EMPTY_PENDING_APPROVALS = [];
82
90
  const EMPTY_SKIPPED_APPROVAL_IDS = [];
83
91
  function createApprovalSessionState(thinkStub) {
@@ -133,12 +141,13 @@ function AgentChatAssistantActions({ message, responseNumber, showCopy, showRetr
133
141
  label: `Copy response ${responseNumber}`,
134
142
  tooltip: "Copy response",
135
143
  text: copyText,
136
- size: "sm",
144
+ size: "xs",
137
145
  onCopy: () => onCopyStatus(`Response ${responseNumber} copied.`),
138
146
  onError: () => onCopyStatus(`Could not copy response ${responseNumber}. Try again.`)
139
147
  }) : null, hasRetry ? /* @__PURE__ */ jsx(MessageAction, {
140
148
  label: "Retry",
141
149
  tooltip: "Regenerate response",
150
+ size: "xs",
142
151
  onClick: () => onRegenerate(message.id),
143
152
  children: /* @__PURE__ */ jsx(RefreshIcon, { size: 14 })
144
153
  }) : null]
@@ -164,6 +173,8 @@ function isCompactedPart(message, partIndex) {
164
173
  * "Transcript rendering performance" in docs/think-chat.md.
165
174
  */
166
175
  function AgentChatTranscriptRowBodyImpl({ message, messageIndex, status, renderPart, renderMessageAfter, editing, canEdit, editDisabled, onEditAndResend, onStartEdit, onCancelEdit, onFinishEdit, editButtonRef, responseNumber, showAssistantActions, showCopy, showRetry, onRegenerate, onCopyStatus }) {
176
+ const messageTime = getAgentChatMessageTime(message);
177
+ const userText = getEditableUserText(message);
167
178
  return /* @__PURE__ */ jsx(Fragment, { children: isCompactionMessage(message) ? /* @__PURE__ */ jsx(Marker, {
168
179
  variant: "separator",
169
180
  children: /* @__PURE__ */ jsx(MarkerContent, { children: "Context compacted" })
@@ -193,20 +204,32 @@ function AgentChatTranscriptRowBodyImpl({ message, messageIndex, status, renderP
193
204
  message,
194
205
  messageIndex
195
206
  }),
196
- canEdit && getEditableUserText(message) !== void 0 ? /* @__PURE__ */ jsx(MessageActions, {
197
- "aria-label": "Message actions",
198
- "aria-hidden": editDisabled || void 0,
199
- className: "message__actions--inline",
200
- "data-unavailable": editDisabled || void 0,
201
- children: /* @__PURE__ */ jsx(MessageAction, {
202
- ref: editButtonRef,
203
- disabled: editDisabled,
204
- label: "Edit message",
205
- tooltip: "Edit and resend",
206
- onClick: () => onStartEdit(message.id),
207
- children: /* @__PURE__ */ jsx(PencilIcon, {})
208
- })
209
- }) : null,
207
+ message.role === "user" && (messageTime !== void 0 || userText !== void 0) ? /* @__PURE__ */ jsxs(MessageMeta, { children: [
208
+ messageTime ? /* @__PURE__ */ jsx(MessageTimestamp, { date: messageTime }) : null,
209
+ userText ? /* @__PURE__ */ jsx(CopyButton, {
210
+ className: "message__action",
211
+ label: `Copy message ${messageIndex + 1}`,
212
+ tooltip: "Copy message",
213
+ text: userText,
214
+ size: "xs",
215
+ onCopy: () => onCopyStatus(`Message ${messageIndex + 1} copied.`),
216
+ onError: () => onCopyStatus(`Could not copy message ${messageIndex + 1}. Try again.`)
217
+ }) : null,
218
+ canEdit && userText ? /* @__PURE__ */ jsx(MessageActions, {
219
+ "aria-label": "Message actions",
220
+ "aria-hidden": editDisabled || void 0,
221
+ "data-unavailable": editDisabled || void 0,
222
+ children: /* @__PURE__ */ jsx(MessageAction, {
223
+ ref: editButtonRef,
224
+ disabled: editDisabled,
225
+ label: "Edit message",
226
+ tooltip: "Edit and resend",
227
+ size: "xs",
228
+ onClick: () => onStartEdit(message.id),
229
+ children: /* @__PURE__ */ jsx(PencilIcon, {})
230
+ })
231
+ }) : null
232
+ ] }) : null,
210
233
  showAssistantActions ? /* @__PURE__ */ jsx(AgentChatAssistantActions, {
211
234
  message,
212
235
  responseNumber,
@@ -658,6 +681,7 @@ function AgentChat({ className, messages, status = "ready", onSubmit, showCompos
658
681
  ref,
659
682
  variant: "fade",
660
683
  className: cx("agent-chat", className),
684
+ "data-recipe": "fill-host",
661
685
  "data-composer-hidden": showComposer ? void 0 : "",
662
686
  children: [
663
687
  /* @__PURE__ */ jsx("span", {
@@ -1,2 +1,2 @@
1
- import { a as useOptionalAgentToolRuns, i as AgentToolRunsProviderProps, n as AgentToolEventsValue, o as useSourceScopedAgentToolEvents, r as AgentToolRunsProvider, t as AgentToolEventSource } from "../../AgentToolRunsContext-BCVqCtJ1.js";
1
+ import { a as useOptionalAgentToolRuns, i as AgentToolRunsProviderProps, n as AgentToolEventsValue, o as useSourceScopedAgentToolEvents, r as AgentToolRunsProvider, t as AgentToolEventSource } from "../../AgentToolRunsContext-daY67hFM.js";
2
2
  export { AgentToolEventSource, AgentToolEventsValue, AgentToolRunsProvider, AgentToolRunsProviderProps, useOptionalAgentToolRuns, useSourceScopedAgentToolEvents };
@@ -10,6 +10,18 @@ import { useAgentToolEvents } from "agents/react";
10
10
  * once per socket connect, so a later mount misses existing runs — and share
11
11
  * the one value with every surface that reads runs (the chat shell and a
12
12
  * run-detail route read the same projection, never two subscriptions).
13
+ *
14
+ * The subscription's listener attaches in a passive effect, after paint. A
15
+ * host whose transport is in-process (the browser extension's port bridge)
16
+ * can complete the connect and deliver the replay before that effect runs —
17
+ * reliably so on a hot return from a drill-in. Upstream owns the fix:
18
+ * `useAgent` buffers `agent-tool-event` frames from socket construction and
19
+ * `useAgentToolEvents` drains them when its listener attaches (agents >
20
+ * 0.20.1; `_bufferAgentToolReplayFrame` is the seam for a non-`useAgent`
21
+ * socket). On older versions such hosts must buffer and re-dispatch
22
+ * themselves — think-browser-host's `useThinkAgentToolEvents` is that
23
+ * interim shim. Network transports are not affected in practice: the round
24
+ * trip loses to the effect flush.
13
25
  */
14
26
  function useSourceScopedAgentToolEvents(agent) {
15
27
  const agentTools = useAgentToolEvents({ agent });
@@ -0,0 +1,135 @@
1
+ import { ReactNode } from "react";
2
+
3
+ //#region src/components/agents-sdk/BrowserLiveScreen.d.ts
4
+ /** One claimed tab, as the synced claim records describe it. */
5
+ type BrowserLiveScreenTab = {
6
+ tabId: number;
7
+ title?: string;
8
+ url?: string;
9
+ };
10
+ type BrowserLiveScreenSignal = {
11
+ viewerId: string;
12
+ payload: BrowserLiveScreenSignalPayload;
13
+ };
14
+ type BrowserLiveScreenSignalPayload = {
15
+ kind: "offer";
16
+ sdp: string;
17
+ } | {
18
+ kind: "answer";
19
+ sdp: string;
20
+ } | {
21
+ kind: "candidate";
22
+ candidate: RTCIceCandidateInit;
23
+ } | {
24
+ kind: "close";
25
+ };
26
+ type BrowserLiveScreenFrameMetadata = {
27
+ deviceWidth: number;
28
+ deviceHeight: number;
29
+ offsetTop: number;
30
+ };
31
+ type BrowserLiveScreenStatus = {
32
+ kind: "streaming";
33
+ tabId: number;
34
+ streamGeneration: number;
35
+ metadata: BrowserLiveScreenFrameMetadata;
36
+ pageUrl?: string;
37
+ pageTitle?: string;
38
+ } | {
39
+ kind: "idle";
40
+ } | {
41
+ kind: "error";
42
+ message: string;
43
+ };
44
+ type BrowserLiveScreenInputEvent = {
45
+ kind: "mouse";
46
+ type: "mousePressed" | "mouseReleased" | "mouseMoved" | "mouseWheel";
47
+ x: number;
48
+ y: number;
49
+ button?: "none" | "left" | "middle" | "right" | "back" | "forward";
50
+ buttons?: number;
51
+ clickCount?: number;
52
+ deltaX?: number;
53
+ deltaY?: number;
54
+ modifiers?: number;
55
+ } | {
56
+ kind: "key";
57
+ type: "keyDown" | "keyUp" | "rawKeyDown";
58
+ key?: string;
59
+ code?: string;
60
+ windowsVirtualKeyCode?: number;
61
+ text?: string;
62
+ modifiers?: number;
63
+ } | {
64
+ kind: "text";
65
+ text: string;
66
+ };
67
+ type BrowserLiveScreenInput = {
68
+ tabId: number;
69
+ streamGeneration: number;
70
+ events: BrowserLiveScreenInputEvent[];
71
+ };
72
+ type BrowserLiveScreenCommand = {
73
+ kind: "selectTab";
74
+ tabId: number;
75
+ } | {
76
+ kind: "navigate";
77
+ tabId: number;
78
+ action: "back" | "reload";
79
+ } | {
80
+ kind: "open";
81
+ tabId: number;
82
+ url: string;
83
+ };
84
+ interface BrowserLiveScreenProtocol {
85
+ /** Data-channel label understood by the employee machine. */
86
+ dataChannelLabel: string;
87
+ /** Parses one machine status message; return null for unrelated data. */
88
+ parseStatus(this: void, value: unknown): BrowserLiveScreenStatus | null;
89
+ /** Serializes an exact-tab remote-input envelope for the employee machine. */
90
+ serializeInput(this: void, input: BrowserLiveScreenInput): string;
91
+ /** Serializes one drawn-browser command for the employee machine. */
92
+ serializeCommand(this: void, command: BrowserLiveScreenCommand): string;
93
+ }
94
+ interface BrowserLiveScreenProps {
95
+ /** Sends one opaque WebRTC signaling payload through the host's existing transport. */
96
+ sendSignal(this: void, signal: BrowserLiveScreenSignal): Promise<void>;
97
+ /** Subscribes to signaling payloads arriving from the employee machine. */
98
+ subscribeSignals(this: void, listener: (signal: BrowserLiveScreenSignal) => void): () => void;
99
+ /** Adapts the host's existing data-channel wire format. */
100
+ protocol: BrowserLiveScreenProtocol;
101
+ /** ICE servers for this viewer's peer. Absent means STUN-free loopback,
102
+ * which is what the extension side panel is. */
103
+ getIceServers?(this: void): Promise<RTCIceServer[]>;
104
+ /** Accessible name and visible label for the drawn browser panel. */
105
+ label?: ReactNode;
106
+ /** Accessible name for the transparent remote-input surface. */
107
+ controlLabel?: string;
108
+ /**
109
+ * The employee's claimed tabs, from the synchronized claim records. They are
110
+ * the drawn tab strip: the browser chrome around the stream is synthesized
111
+ * from state, because Chrome's screencast carries only page pixels.
112
+ */
113
+ tabs?: readonly BrowserLiveScreenTab[];
114
+ /** Claimed tab the host wants visible when the data channel becomes usable. */
115
+ requestedTabId?: number;
116
+ }
117
+ /**
118
+ * A complete interactive viewer for an employee's claimed browser tabs.
119
+ *
120
+ * The host supplies only signaling transport, ICE configuration, and claimed
121
+ * tab summaries. This component owns the peer connection, remote-input
122
+ * mapping, reconnect lifecycle, synthesized browser chrome, and cleanup.
123
+ */
124
+ declare function BrowserLiveScreen({
125
+ sendSignal: sendHostSignal,
126
+ subscribeSignals,
127
+ protocol,
128
+ getIceServers,
129
+ label,
130
+ controlLabel,
131
+ tabs,
132
+ requestedTabId
133
+ }: BrowserLiveScreenProps): import("react").JSX.Element;
134
+ //#endregion
135
+ export { BrowserLiveScreen, BrowserLiveScreenCommand, BrowserLiveScreenFrameMetadata, BrowserLiveScreenInput, BrowserLiveScreenInputEvent, BrowserLiveScreenProps, BrowserLiveScreenProtocol, BrowserLiveScreenSignal, BrowserLiveScreenSignalPayload, BrowserLiveScreenStatus, BrowserLiveScreenTab };