@mcp-b/react-components 0.41.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.
- package/dist/{ThinkChatActivity-DyGHj01E.d.ts → ThinkChatActivity-CsDql-ER.d.ts} +3 -0
- package/dist/{WorkspaceFileView-D0yFwoDr.js → WorkspaceFileView-DwdXiKku.js} +15 -20
- package/dist/components/agents-sdk/AgentActivity.js +3 -2
- package/dist/components/agents-sdk/AgentChat.js +1 -0
- package/dist/components/agents-sdk/BrowserRunPanel.js +2 -1
- package/dist/components/agents-sdk/ManagerOffice.d.ts +39 -27
- package/dist/components/agents-sdk/ManagerOffice.js +80 -44
- package/dist/components/agents-sdk/McpPluginCatalog.js +4 -2
- package/dist/components/agents-sdk/ModelSelector.js +1 -1
- package/dist/components/agents-sdk/SubagentRunSelector.js +1 -1
- package/dist/components/agents-sdk/ThinkChat.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkChat.js +1 -1
- package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkChatActivity.js +19 -5
- package/dist/components/agents-sdk/ThinkChatToolPanels.js +6 -2
- package/dist/components/agents-sdk/ThinkExecutionDetail.js +3 -1
- package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -0
- package/dist/components/agents-sdk/ThinkFullApp.d.ts +40 -88
- package/dist/components/agents-sdk/ThinkFullApp.js +75 -124
- package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
- package/dist/components/agents-sdk/ThinkFullAppViewSwitch.js +1 -1
- package/dist/components/agents-sdk/ThinkRoutineDetail.js +1 -1
- package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +7 -6
- package/dist/components/agents-sdk/ThinkRoutineLibrary.js +57 -65
- package/dist/components/agents-sdk/ThinkThreadPicker.js +2 -1
- package/dist/components/agents-sdk/WorkspaceExplorer.js +2 -1
- package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
- package/dist/components/ai-sdk/MessageScroller.js +2 -1
- package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -0
- package/dist/components/ai-sdk/PromptInput.js +20 -14
- package/dist/components/extension/ChatGptSignInScreen.js +1 -0
- package/dist/components/foundations/ToggleGroup.d.ts +79 -1
- package/dist/components/foundations/ToggleGroup.js +1 -1
- package/dist/components/foundations/Toolbar.d.ts +151 -1
- package/dist/components/general-purpose/AppFrame.js +1 -0
- package/dist/components/general-purpose/AppTopBar.d.ts +96 -1
- package/dist/components/general-purpose/PricingBillingToggle.js +1 -1
- package/dist/components/general-purpose/PricingUsageCalculator.js +1 -1
- package/dist/components/general-purpose/ResizableSidePanel.d.ts +8 -0
- package/dist/components/general-purpose/ResizableSidePanel.js +3 -2
- package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +59 -49
- package/dist/components/general-purpose/ResponsiveSidebarShell.js +74 -74
- package/dist/components/general-purpose/WebPreview.d.ts +3 -0
- package/dist/components/general-purpose/WebPreview.js +2 -2
- package/dist/components/nanites/AgentToolDetail.js +4 -3
- package/dist/styles/accordion.css +1 -0
- package/dist/styles/action-guide.css +8 -7
- package/dist/styles/activity-header.css +13 -39
- package/dist/styles/activity.css +40 -55
- package/dist/styles/agent-attention.css +14 -14
- package/dist/styles/agent-chat.css +62 -45
- package/dist/styles/agent-connection.css +10 -4
- package/dist/styles/agent-tool-detail.css +4 -4
- package/dist/styles/alert-dialog.css +4 -4
- package/dist/styles/app-frame.css +1 -3
- package/dist/styles/app-top-bar.css +5 -9
- package/dist/styles/approval.css +1 -0
- package/dist/styles/artifact.css +6 -6
- package/dist/styles/attachment-preview.css +5 -4
- package/dist/styles/browser-replay.css +6 -6
- package/dist/styles/browser-run-panel.css +1 -0
- package/dist/styles/button.css +15 -6
- package/dist/styles/card.css +5 -5
- package/dist/styles/chatgpt-sign-in-screen.css +1 -1
- package/dist/styles/code-block.css +14 -13
- package/dist/styles/codex-model-selector.css +2 -0
- package/dist/styles/collapsible.css +1 -0
- package/dist/styles/commit.css +6 -6
- package/dist/styles/context.css +9 -9
- package/dist/styles/conversation-tab-picker.css +1 -1
- package/dist/styles/conversation.css +6 -8
- package/dist/styles/dialog.css +4 -4
- package/dist/styles/empty-state.css +3 -3
- package/dist/styles/environment-variables.css +9 -9
- package/dist/styles/field.css +2 -1
- package/dist/styles/fieldset.css +2 -2
- package/dist/styles/index.css +3 -3
- package/dist/styles/manager-office.css +23 -29
- package/dist/styles/mcp-plugin-catalog.css +11 -10
- package/dist/styles/mcp-server-picker.css +3 -3
- package/dist/styles/message-scroller.css +9 -11
- package/dist/styles/message.css +43 -20
- package/dist/styles/navigation-menu.css +1 -0
- package/dist/styles/plan.css +13 -12
- package/dist/styles/pricing-page.css +26 -23
- package/dist/styles/prompt-input.css +18 -5
- package/dist/styles/queue.css +1 -0
- package/dist/styles/reasoning.css +1 -9
- package/dist/styles/recipes.css +28 -1
- package/dist/styles/responsive-sidebar-shell.css +44 -16
- package/dist/styles/separator.css +5 -5
- package/dist/styles/sources.css +4 -4
- package/dist/styles/stepper.css +1 -0
- package/dist/styles/streamdown.css +31 -21
- package/dist/styles/tabs.css +1 -0
- package/dist/styles/task.css +5 -17
- package/dist/styles/terminal.css +10 -10
- package/dist/styles/test-results.css +6 -6
- package/dist/styles/think-execution-status.css +2 -2
- package/dist/styles/think-execution-workbench.css +12 -15
- package/dist/styles/think-full-app.css +26 -64
- package/dist/styles/think-routine-library.css +26 -55
- package/dist/styles/think-thread-picker.css +9 -9
- package/dist/styles/utilities.css +33 -0
- package/dist/styles/web-preview.css +20 -19
- package/dist/styles/workspace-explorer.css +18 -21
- package/dist/styles/workspace-mount-manager.css +2 -2
- package/dist/utils/favicon.d.ts +6 -1
- package/dist/utils/favicon.js +18 -1
- package/package.json +2 -2
- package/dist/AppTopBar-ZdgmB_Lu.d.ts +0 -97
- package/dist/ToggleGroup-BrQZOQn_.d.ts +0 -80
- package/dist/Toolbar-CBOseBQr.d.ts +0 -152
- package/dist/{ThinkChat-BES_3Mb-.js → ThinkChat-DkA4Wr71.js} +1 -1
|
@@ -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
|
/**
|
|
@@ -70,32 +70,27 @@ function useWorkspaceAssetUrl(asset, mimeType) {
|
|
|
70
70
|
});
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
|
|
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 { inferFaviconUrl } from "../../utils/favicon.js";
|
|
1
|
+
import { canRequestFavicon, inferFaviconUrl } from "../../utils/favicon.js";
|
|
2
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";
|
|
@@ -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
|
-
|
|
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,
|
|
@@ -681,6 +681,7 @@ function AgentChat({ className, messages, status = "ready", onSubmit, showCompos
|
|
|
681
681
|
ref,
|
|
682
682
|
variant: "fade",
|
|
683
683
|
className: cx("agent-chat", className),
|
|
684
|
+
"data-recipe": "fill-host",
|
|
684
685
|
"data-composer-hidden": showComposer ? void 0 : "",
|
|
685
686
|
children: [
|
|
686
687
|
/* @__PURE__ */ jsx("span", {
|
|
@@ -45,7 +45,8 @@ function BrowserRunPanelFrame({ body, bodyBusy, bodyTabValue, className, error,
|
|
|
45
45
|
...onOpenUrl ? { onUrlChange: onOpenUrl } : {},
|
|
46
46
|
role: "region",
|
|
47
47
|
"aria-label": typeof label === "string" ? label : "Browser",
|
|
48
|
-
...props
|
|
48
|
+
...props,
|
|
49
|
+
"data-recipe": "fill-host"
|
|
49
50
|
}),
|
|
50
51
|
children: [
|
|
51
52
|
tabs.length > 1 ? /* @__PURE__ */ jsx(WebPreviewNavigation, { children: /* @__PURE__ */ jsx(Tabs.List, {
|
|
@@ -102,39 +102,51 @@ interface ManagerOfficeDisconnectedEmployee extends ManagerOfficeEmployeeBase {
|
|
|
102
102
|
}
|
|
103
103
|
type ManagerOfficeEmployee = ManagerOfficeConnectedEmployee | ManagerOfficeDisconnectedEmployee;
|
|
104
104
|
type ManagerOfficeEmployeeStatus = ManagerOfficeEmployee["status"];
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Every place the office can send a manager, as one discriminated union — the
|
|
107
|
+
* same shape `WorkspaceNavigationAdapter.renderLink` uses. Consumers map it
|
|
108
|
+
* with one `switch` instead of implementing seven factories.
|
|
109
|
+
*/
|
|
110
|
+
type ManagerOfficeDestination = {
|
|
111
|
+
kind: "attention";
|
|
112
|
+
} | {
|
|
113
|
+
kind: "employee";
|
|
114
|
+
employee: ManagerOfficeEmployee;
|
|
115
|
+
} | {
|
|
116
|
+
kind: "handoff";
|
|
117
|
+
employee: ManagerOfficeConnectedEmployee;
|
|
118
|
+
handoff: ManagerOfficeHandoff;
|
|
119
|
+
} | {
|
|
120
|
+
kind: "work";
|
|
121
|
+
employee: ManagerOfficeConnectedEmployee;
|
|
122
|
+
work: ManagerOfficeWork;
|
|
123
|
+
} | {
|
|
124
|
+
kind: "routine";
|
|
125
|
+
employee: ManagerOfficeConnectedEmployee;
|
|
126
|
+
routine: ManagerOfficeRoutine;
|
|
127
|
+
} | {
|
|
128
|
+
kind: "new-work";
|
|
129
|
+
employee: ManagerOfficeConnectedEmployee;
|
|
130
|
+
} | {
|
|
131
|
+
kind: "workspace";
|
|
132
|
+
employee: ManagerOfficeConnectedEmployee;
|
|
133
|
+
};
|
|
121
134
|
interface ManagerOfficeProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
122
135
|
/** Current disposable navigation projection; durable selection remains app-owned. */
|
|
123
136
|
view: ManagerOfficeView;
|
|
124
137
|
/** Employees projected from their owning runtimes. */
|
|
125
138
|
employees: readonly ManagerOfficeEmployee[];
|
|
126
|
-
/**
|
|
127
|
-
|
|
128
|
-
/** Add/sign-out controls rendered in the office rail.
|
|
129
|
-
officeActions
|
|
139
|
+
/** Returns an app-owned route element for every office destination. */
|
|
140
|
+
renderLink: (destination: ManagerOfficeDestination) => React.ReactElement;
|
|
141
|
+
/** Add/sign-out controls rendered in the office rail. */
|
|
142
|
+
officeActions?: React.ReactNode;
|
|
130
143
|
/**
|
|
131
144
|
* Actions rendered for the selected connected employee. Compose interactive
|
|
132
|
-
* controls through `AppTopBar.Control` so they join the toolbar
|
|
133
|
-
* for none.
|
|
145
|
+
* controls through `AppTopBar.Control` so they join the toolbar.
|
|
134
146
|
*/
|
|
135
|
-
renderEmployeeActions
|
|
136
|
-
/** Action shown in the empty office.
|
|
137
|
-
emptyOfficeAction
|
|
147
|
+
renderEmployeeActions?: (employee: ManagerOfficeConnectedEmployee) => React.ReactNode;
|
|
148
|
+
/** Action shown in the empty office. */
|
|
149
|
+
emptyOfficeAction?: React.ReactNode;
|
|
138
150
|
}
|
|
139
151
|
/**
|
|
140
152
|
* Multi-employee manager office: aggregate handoffs, employee roster, and one
|
|
@@ -145,7 +157,7 @@ declare function ManagerOffice({
|
|
|
145
157
|
className,
|
|
146
158
|
emptyOfficeAction,
|
|
147
159
|
employees,
|
|
148
|
-
|
|
160
|
+
renderLink,
|
|
149
161
|
officeActions,
|
|
150
162
|
renderEmployeeActions,
|
|
151
163
|
style,
|
|
@@ -153,4 +165,4 @@ declare function ManagerOffice({
|
|
|
153
165
|
...props
|
|
154
166
|
}: ManagerOfficeProps): React.JSX.Element;
|
|
155
167
|
//#endregion
|
|
156
|
-
export { ManagerOffice, ManagerOfficeChannel, ManagerOfficeChannelDirection, ManagerOfficeChannelStatus, ManagerOfficeConnectedEmployee, ManagerOfficeDisconnectedEmployee, ManagerOfficeEmployee, ManagerOfficeEmployeeStatus, ManagerOfficeHandoff,
|
|
168
|
+
export { ManagerOffice, ManagerOfficeChannel, ManagerOfficeChannelDirection, ManagerOfficeChannelStatus, ManagerOfficeConnectedEmployee, ManagerOfficeDestination, ManagerOfficeDisconnectedEmployee, ManagerOfficeEmployee, ManagerOfficeEmployeeStatus, ManagerOfficeHandoff, ManagerOfficeProps, ManagerOfficeRoutine, ManagerOfficeView, ManagerOfficeWork, ManagerOfficeWorkStatus };
|
|
@@ -4,9 +4,9 @@ import { $ as WarningIcon, A as MessageSquareIcon, B as PlusIcon, C as FolderIco
|
|
|
4
4
|
import { Button } from "../foundations/Button.js";
|
|
5
5
|
import { AgentAttention, AgentAttentionActions, AgentAttentionBody, AgentAttentionHeader } from "../ai-sdk/AgentAttention.js";
|
|
6
6
|
import { Tooltip } from "../foundations/Tooltip.js";
|
|
7
|
-
import { EmptyState } from "../foundations/EmptyState.js";
|
|
8
7
|
import { Avatar } from "../foundations/Avatar.js";
|
|
9
8
|
import { AppIcon } from "../foundations/AppIcon.js";
|
|
9
|
+
import { EmptyState } from "../foundations/EmptyState.js";
|
|
10
10
|
import { LinkButton } from "../foundations/LinkButton.js";
|
|
11
11
|
import "../foundations/icons.js";
|
|
12
12
|
import { AppTopBar } from "../general-purpose/AppTopBar.js";
|
|
@@ -304,10 +304,10 @@ function ChannelRow({ channel }) {
|
|
|
304
304
|
* The action is a link into the owning work, because that is where the single
|
|
305
305
|
* approval surface lives; nothing is approved or dismissed from the roster.
|
|
306
306
|
*/
|
|
307
|
-
function HandoffCard({ employee, handoff,
|
|
307
|
+
function HandoffCard({ employee, handoff, renderLink, now, showEmployee }) {
|
|
308
308
|
return /* @__PURE__ */ jsxs(AgentAttention, {
|
|
309
309
|
tone: "attention",
|
|
310
|
-
className: "manager-office__handoff",
|
|
310
|
+
className: cx("manager-office__handoff", !handoff.request && "manager-office__handoff--bare"),
|
|
311
311
|
children: [
|
|
312
312
|
/* @__PURE__ */ jsx(AgentAttentionHeader, {
|
|
313
313
|
icon: /* @__PURE__ */ jsx(InfoIcon, {}),
|
|
@@ -322,9 +322,16 @@ function HandoffCard({ employee, handoff, navigation, now, showEmployee }) {
|
|
|
322
322
|
})
|
|
323
323
|
] })
|
|
324
324
|
}),
|
|
325
|
-
handoff.request ? /* @__PURE__ */ jsx(AgentAttentionBody, {
|
|
325
|
+
handoff.request ? /* @__PURE__ */ jsx(AgentAttentionBody, {
|
|
326
|
+
className: "manager-office__handoff-ask",
|
|
327
|
+
children: handoff.request
|
|
328
|
+
}) : null,
|
|
326
329
|
/* @__PURE__ */ jsx(AgentAttentionActions, { children: /* @__PURE__ */ jsxs(LinkButton, {
|
|
327
|
-
render:
|
|
330
|
+
render: renderLink({
|
|
331
|
+
kind: "handoff",
|
|
332
|
+
employee,
|
|
333
|
+
handoff
|
|
334
|
+
}),
|
|
328
335
|
size: "sm",
|
|
329
336
|
"aria-label": `Open ${handoff.workTitle} to ${handoff.reason.toLowerCase()}`,
|
|
330
337
|
children: [/* @__PURE__ */ jsx(MonitorIcon, {}), "Open browser"]
|
|
@@ -332,7 +339,7 @@ function HandoffCard({ employee, handoff, navigation, now, showEmployee }) {
|
|
|
332
339
|
]
|
|
333
340
|
});
|
|
334
341
|
}
|
|
335
|
-
function EmployeeSidebar({ closeSidebarOnCompact, employees,
|
|
342
|
+
function EmployeeSidebar({ closeSidebarOnCompact, employees, renderLink, officeActions, profileColors, view }) {
|
|
336
343
|
const rosterLabelId = React.useId();
|
|
337
344
|
const attentionCount = employees.reduce((total, employee) => total + employeeAttentionCount(employee), 0);
|
|
338
345
|
const selectedEmployeeId = view.kind === "employee" ? view.employeeId : null;
|
|
@@ -348,7 +355,7 @@ function EmployeeSidebar({ closeSidebarOnCompact, employees, navigation, officeA
|
|
|
348
355
|
})]
|
|
349
356
|
}),
|
|
350
357
|
/* @__PURE__ */ jsxs(LinkButton, {
|
|
351
|
-
render:
|
|
358
|
+
render: renderLink({ kind: "attention" }),
|
|
352
359
|
onClick: closeSidebarOnCompact,
|
|
353
360
|
variant: "ghost",
|
|
354
361
|
color: "neutral",
|
|
@@ -366,7 +373,10 @@ function EmployeeSidebar({ closeSidebarOnCompact, employees, navigation, officeA
|
|
|
366
373
|
className: "manager-office__employee-nav sigvelo-stack-list",
|
|
367
374
|
"aria-labelledby": rosterLabelId,
|
|
368
375
|
children: employees.map((employee) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(LinkButton, {
|
|
369
|
-
render:
|
|
376
|
+
render: renderLink({
|
|
377
|
+
kind: "employee",
|
|
378
|
+
employee
|
|
379
|
+
}),
|
|
370
380
|
onClick: closeSidebarOnCompact,
|
|
371
381
|
variant: "ghost",
|
|
372
382
|
color: "neutral",
|
|
@@ -400,39 +410,49 @@ function EmployeeSidebar({ closeSidebarOnCompact, employees, navigation, officeA
|
|
|
400
410
|
]
|
|
401
411
|
});
|
|
402
412
|
}
|
|
403
|
-
function AttentionView({ employees,
|
|
413
|
+
function AttentionView({ employees, renderLink, now }) {
|
|
404
414
|
const rows = employees.flatMap((employee) => isConnected(employee) ? employee.handoffs.map((handoff) => ({
|
|
405
415
|
employee,
|
|
406
416
|
handoff
|
|
407
417
|
})) : []);
|
|
408
|
-
if (!rows.length) return /* @__PURE__ */ jsx(
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
418
|
+
if (!rows.length) return /* @__PURE__ */ jsx("section", {
|
|
419
|
+
className: "manager-office__attention",
|
|
420
|
+
"data-recipe": "page",
|
|
421
|
+
"aria-label": "Needs you",
|
|
422
|
+
children: /* @__PURE__ */ jsx(EmptyState, {
|
|
423
|
+
icon: /* @__PURE__ */ jsx(CheckIcon, {}),
|
|
424
|
+
title: "No active handoffs",
|
|
425
|
+
description: "Employee connection state remains visible in the roster."
|
|
426
|
+
})
|
|
412
427
|
});
|
|
413
428
|
return /* @__PURE__ */ jsx("section", {
|
|
414
429
|
className: "manager-office__attention",
|
|
430
|
+
"data-recipe": "page",
|
|
415
431
|
"aria-label": "Needs you",
|
|
416
432
|
children: /* @__PURE__ */ jsx("ul", {
|
|
417
433
|
className: "manager-office__attention-list sigvelo-stack-list",
|
|
418
434
|
children: rows.map(({ employee, handoff }) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(HandoffCard, {
|
|
419
435
|
employee,
|
|
420
436
|
handoff,
|
|
421
|
-
|
|
437
|
+
renderLink,
|
|
422
438
|
now,
|
|
423
439
|
showEmployee: true
|
|
424
440
|
}) }, `${employee.id}:${handoff.id}`))
|
|
425
441
|
})
|
|
426
442
|
});
|
|
427
443
|
}
|
|
428
|
-
function EmployeeDetail({ employee,
|
|
429
|
-
if (!isConnected(employee)) return /* @__PURE__ */ jsx(
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
444
|
+
function EmployeeDetail({ employee, renderLink, now, profileColor }) {
|
|
445
|
+
if (!isConnected(employee)) return /* @__PURE__ */ jsx("div", {
|
|
446
|
+
"data-recipe": "page",
|
|
447
|
+
children: /* @__PURE__ */ jsx(EmptyState, {
|
|
448
|
+
icon: employee.status === "connecting" ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : /* @__PURE__ */ jsx(MonitorIcon, {}),
|
|
449
|
+
title: `${employee.name} is ${statusLabels[employee.status].toLowerCase()}`,
|
|
450
|
+
description: employee.statusDescription
|
|
451
|
+
})
|
|
433
452
|
});
|
|
434
453
|
return /* @__PURE__ */ jsxs("div", {
|
|
435
454
|
className: "manager-office__employee-detail",
|
|
455
|
+
"data-recipe": "page",
|
|
436
456
|
children: [
|
|
437
457
|
/* @__PURE__ */ jsxs("header", {
|
|
438
458
|
className: "manager-office__employee-header",
|
|
@@ -466,7 +486,7 @@ function EmployeeDetail({ employee, navigation, now, profileColor }) {
|
|
|
466
486
|
children: employee.handoffs.map((handoff) => /* @__PURE__ */ jsx(HandoffCard, {
|
|
467
487
|
employee,
|
|
468
488
|
handoff,
|
|
469
|
-
|
|
489
|
+
renderLink,
|
|
470
490
|
now,
|
|
471
491
|
showEmployee: false
|
|
472
492
|
}, handoff.id))
|
|
@@ -486,7 +506,11 @@ function EmployeeDetail({ employee, navigation, now, profileColor }) {
|
|
|
486
506
|
children: employee.work.length ? /* @__PURE__ */ jsx("ul", {
|
|
487
507
|
className: "manager-office__work-list sigvelo-stack-list",
|
|
488
508
|
children: employee.work.map((work) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(LinkButton, {
|
|
489
|
-
render:
|
|
509
|
+
render: renderLink({
|
|
510
|
+
kind: "work",
|
|
511
|
+
employee,
|
|
512
|
+
work
|
|
513
|
+
}),
|
|
490
514
|
variant: "ghost",
|
|
491
515
|
color: "neutral",
|
|
492
516
|
size: "sm",
|
|
@@ -542,7 +566,11 @@ function EmployeeDetail({ employee, navigation, now, profileColor }) {
|
|
|
542
566
|
children: employee.routines.length ? /* @__PURE__ */ jsx("ul", {
|
|
543
567
|
className: "manager-office__routine-list sigvelo-stack-list",
|
|
544
568
|
children: employee.routines.map((routine) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(LinkButton, {
|
|
545
|
-
render:
|
|
569
|
+
render: renderLink({
|
|
570
|
+
kind: "routine",
|
|
571
|
+
employee,
|
|
572
|
+
routine
|
|
573
|
+
}),
|
|
546
574
|
variant: "ghost",
|
|
547
575
|
color: "neutral",
|
|
548
576
|
size: "sm",
|
|
@@ -591,7 +619,7 @@ function EmployeeDetail({ employee, navigation, now, profileColor }) {
|
|
|
591
619
|
* employee dossier. The consuming app owns authentication, Agent connections,
|
|
592
620
|
* routing, and the selected employee's full work surface.
|
|
593
621
|
*/
|
|
594
|
-
function ManagerOffice({ className, emptyOfficeAction, employees,
|
|
622
|
+
function ManagerOffice({ className, emptyOfficeAction, employees, renderLink, officeActions, renderEmployeeActions, style, view, ...props }) {
|
|
595
623
|
const titleId = React.useId();
|
|
596
624
|
const [now, setNow] = React.useState(Date.now);
|
|
597
625
|
React.useEffect(() => {
|
|
@@ -609,29 +637,37 @@ function ManagerOffice({ className, emptyOfficeAction, employees, navigation, of
|
|
|
609
637
|
sidebar: ({ closeSidebarOnCompact }) => /* @__PURE__ */ jsx(EmployeeSidebar, {
|
|
610
638
|
closeSidebarOnCompact,
|
|
611
639
|
employees,
|
|
612
|
-
|
|
640
|
+
renderLink,
|
|
613
641
|
officeActions,
|
|
614
642
|
profileColors,
|
|
615
643
|
view
|
|
616
644
|
}),
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
/* @__PURE__ */
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
645
|
+
bar: {
|
|
646
|
+
label: "Manager office controls",
|
|
647
|
+
titleRender: /* @__PURE__ */ jsx("h1", { id: titleId }),
|
|
648
|
+
title,
|
|
649
|
+
actions: selectedEmployee && isConnected(selectedEmployee) ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
650
|
+
/* @__PURE__ */ jsx(AppTopBar.Link, {
|
|
651
|
+
label: `Start new work with ${selectedEmployee.name}`,
|
|
652
|
+
tooltip: "New work",
|
|
653
|
+
render: renderLink({
|
|
654
|
+
kind: "new-work",
|
|
655
|
+
employee: selectedEmployee
|
|
656
|
+
}),
|
|
657
|
+
children: /* @__PURE__ */ jsx(PencilIcon, {})
|
|
658
|
+
}),
|
|
659
|
+
/* @__PURE__ */ jsx(AppTopBar.Link, {
|
|
660
|
+
label: `Open ${selectedEmployee.name} workspace`,
|
|
661
|
+
tooltip: "Workspace",
|
|
662
|
+
render: renderLink({
|
|
663
|
+
kind: "workspace",
|
|
664
|
+
employee: selectedEmployee
|
|
665
|
+
}),
|
|
666
|
+
children: /* @__PURE__ */ jsx(FolderIcon, {})
|
|
667
|
+
}),
|
|
668
|
+
renderEmployeeActions?.(selectedEmployee)
|
|
669
|
+
] }) : void 0
|
|
670
|
+
},
|
|
635
671
|
...props,
|
|
636
672
|
children: /* @__PURE__ */ jsx("main", {
|
|
637
673
|
className: "manager-office__main",
|
|
@@ -643,11 +679,11 @@ function ManagerOffice({ className, emptyOfficeAction, employees, navigation, of
|
|
|
643
679
|
children: emptyOfficeAction
|
|
644
680
|
}) : view.kind === "attention" ? /* @__PURE__ */ jsx(AttentionView, {
|
|
645
681
|
employees,
|
|
646
|
-
|
|
682
|
+
renderLink,
|
|
647
683
|
now
|
|
648
684
|
}) : selectedEmployee ? /* @__PURE__ */ jsx(EmployeeDetail, {
|
|
649
685
|
employee: selectedEmployee,
|
|
650
|
-
|
|
686
|
+
renderLink,
|
|
651
687
|
now,
|
|
652
688
|
profileColor: profileColors.get(selectedEmployee.id)
|
|
653
689
|
}) : /* @__PURE__ */ jsx(EmptyState, {
|
|
@@ -8,8 +8,8 @@ import { Dialog } from "../foundations/Dialog.js";
|
|
|
8
8
|
import { i as formatErrorMessage } from "../../format-DB2mX9DA.js";
|
|
9
9
|
import { Separator } from "../foundations/Separator.js";
|
|
10
10
|
import { AppIcon } from "../foundations/AppIcon.js";
|
|
11
|
-
import { n as getMcpServerProjection, t as McpServerIcon } from "../../mcp-server-SD_S-IpB.js";
|
|
12
11
|
import { SearchField } from "../foundations/SearchField.js";
|
|
12
|
+
import { n as getMcpServerProjection, t as McpServerIcon } from "../../mcp-server-SD_S-IpB.js";
|
|
13
13
|
import { McpServerSetupDialog } from "./McpServerPicker.js";
|
|
14
14
|
import * as React from "react";
|
|
15
15
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -129,7 +129,9 @@ function McpPluginCatalog({ servers, mcp, detailsByServerId, featuredServerIds =
|
|
|
129
129
|
/** Reference-derived plugin detail surface without a parallel install state. */
|
|
130
130
|
function McpPluginDetailsDialog({ server, details, mcp, brandName = "your AI", brandLogo = /* @__PURE__ */ jsx("img", {
|
|
131
131
|
alt: "",
|
|
132
|
-
src: new URL("../../assets/think-browser-host.png", import.meta.url).href
|
|
132
|
+
src: new URL("../../assets/think-browser-host.png", import.meta.url).href,
|
|
133
|
+
width: 128,
|
|
134
|
+
height: 128
|
|
133
135
|
}), disclosure = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
134
136
|
/* @__PURE__ */ jsxs("p", { children: [/* @__PURE__ */ jsx("strong", { children: "You're in control." }), " This plugin is limited to the account and permissions you approve, and you can disconnect it at any time."] }),
|
|
135
137
|
/* @__PURE__ */ jsxs("p", { children: [/* @__PURE__ */ jsx("strong", { children: "Plugins may introduce elevated risk." }), " Only connect tools you trust. A compromised plugin could use its access to read or change data in the connected service."] }),
|
|
@@ -6,8 +6,8 @@ import { Dialog } from "../foundations/Dialog.js";
|
|
|
6
6
|
import { o as titleCase } from "../../format-DB2mX9DA.js";
|
|
7
7
|
import { Separator } from "../foundations/Separator.js";
|
|
8
8
|
import { ScrollArea } from "../foundations/ScrollArea.js";
|
|
9
|
-
import { EmptyState } from "../foundations/EmptyState.js";
|
|
10
9
|
import { t as ProviderLogo } from "../../provider-logos-zjZycgV6.js";
|
|
10
|
+
import { EmptyState } from "../foundations/EmptyState.js";
|
|
11
11
|
import * as React from "react";
|
|
12
12
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { createPortal } from "react-dom";
|
|
@@ -2,8 +2,8 @@ import { t as cx } from "../../class-names-BiMDVpUo.js";
|
|
|
2
2
|
import { buttonVariants } from "../foundations/Button.js";
|
|
3
3
|
import { Tooltip } from "../foundations/Tooltip.js";
|
|
4
4
|
import { t as NavigationLink } from "../../navigation-link-kqMa81v5.js";
|
|
5
|
-
import { SubagentRunIndicator, getSubagentRunName, getSubagentRunTooltip } from "./SubagentRunIndicator.js";
|
|
6
5
|
import { NaniteMark } from "../nanites/NaniteScene.js";
|
|
6
|
+
import { SubagentRunIndicator, getSubagentRunName, getSubagentRunTooltip } from "./SubagentRunIndicator.js";
|
|
7
7
|
import "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/components/agents-sdk/SubagentRunSelector.tsx
|
|
@@ -3,7 +3,7 @@ import { K as PromptInputMessage } from "../../PromptInput-BRX7FhjH.js";
|
|
|
3
3
|
import { r as AgentChatProps } from "../../AgentChat-DVr2giwD.js";
|
|
4
4
|
import { n as AgentToolEventsValue } from "../../AgentToolRunsContext-daY67hFM.js";
|
|
5
5
|
import { o as UseSessionCompactionResult } from "../../SessionCompaction-CmTJFpzj.js";
|
|
6
|
-
import { o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, t as ThinkChatActivity } from "../../ThinkChatActivity-
|
|
6
|
+
import { o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, t as ThinkChatActivity } from "../../ThinkChatActivity-CsDql-ER.js";
|
|
7
7
|
import { i as ThinkChatValue } from "../../ThinkChatContext-COIgzkYp.js";
|
|
8
8
|
import { t as ThinkRecoveryNotice } from "../../ThinkRecoveryNotice-DGWr94rk.js";
|
|
9
9
|
import { n as WorkspaceHtmlArtifactRenderer } from "../../WorkspaceMessageResponse-D66ty4FO.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as thinkPendingExecutionApprovalsQueryOptions, i as ThinkChatRoot, n as ThinkChatMessages, o as useThinkChat, r as ThinkChatProvider, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../../ThinkChat-
|
|
1
|
+
import { a as thinkPendingExecutionApprovalsQueryOptions, i as ThinkChatRoot, n as ThinkChatMessages, o as useThinkChat, r as ThinkChatProvider, s as useThinkPendingExecutionApprovals, t as ThinkChat } from "../../ThinkChat-DkA4Wr71.js";
|
|
2
2
|
export { ThinkChat, ThinkChatMessages, ThinkChatProvider, ThinkChatRoot, thinkPendingExecutionApprovalsQueryOptions, useThinkChat, useThinkPendingExecutionApprovals };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../../ThinkChatActivity-
|
|
1
|
+
import { a as ThinkChatToolRenderers, i as ThinkChatToolRenderer, n as ThinkChatActivityProps, o as createThinkChatActivityRenderer, r as ThinkChatActivityRendererOptions, s as renderThinkChatActivityPart, t as ThinkChatActivity } from "../../ThinkChatActivity-CsDql-ER.js";
|
|
2
2
|
export { ThinkChatActivity, ThinkChatActivityProps, ThinkChatActivityRendererOptions, ThinkChatToolRenderer, ThinkChatToolRenderers, createThinkChatActivityRenderer, renderThinkChatActivityPart };
|
|
@@ -2,9 +2,9 @@ import { useExpansionState } from "../ai-sdk/ExpansionState.js";
|
|
|
2
2
|
import { Activity, ActivityContent, ActivityItem, ActivityItemGroup, ActivityText, ActivityTrigger } from "../ai-sdk/Activity.js";
|
|
3
3
|
import { Button } from "../foundations/Button.js";
|
|
4
4
|
import { MessageResponse } from "../ai-sdk/Message.js";
|
|
5
|
-
import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
|
|
6
5
|
import { useOptionalAgentToolRuns } from "./AgentToolRunsContext.js";
|
|
7
6
|
import { SubagentRunList } from "./SubagentRunList.js";
|
|
7
|
+
import { AgentActivityFavicon, AgentActivityIcon } from "./AgentActivity.js";
|
|
8
8
|
import { useOptionalThinkChatLive } from "./ThinkChatContext.js";
|
|
9
9
|
import { isBrowserToolPart, isExecuteToolPart, isFetchToolPart, isPartWorking, isSessionContextToolPart, isSkillToolPart, isThinkChatActivityPart, isWorkspaceToolPart } from "./ThinkChatToolParts.js";
|
|
10
10
|
import { ThinkChatBrowserPanel, ThinkChatExecutePanel, ThinkChatFetchPanel, ThinkChatSessionContextPanel, ThinkChatSkillPanel, ThinkChatWorkspacePanel } from "./ThinkChatToolPanels.js";
|
|
@@ -32,7 +32,7 @@ function activityPartIcon(part) {
|
|
|
32
32
|
* thousands-of-tools run expandable.
|
|
33
33
|
*/
|
|
34
34
|
const VISIBLE_STEP_LIMIT = 100;
|
|
35
|
-
function ThinkChatActivity({ parts, defaultOpen, isStreaming, toolRenderers, stateKey }) {
|
|
35
|
+
function ThinkChatActivity({ parts, defaultOpen, isStreaming, toolRenderers, settledAction, stateKey }) {
|
|
36
36
|
const steps = parts.flatMap((part, index) => {
|
|
37
37
|
const description = describeThinkChatActivityPart(part, toolRenderers);
|
|
38
38
|
if (!description) return [];
|
|
@@ -59,8 +59,8 @@ function ThinkChatActivity({ parts, defaultOpen, isStreaming, toolRenderers, sta
|
|
|
59
59
|
stateKey: scope,
|
|
60
60
|
children: [/* @__PURE__ */ jsx(ActivityTrigger, {
|
|
61
61
|
icon: header.url ? /* @__PURE__ */ jsx(AgentActivityFavicon, { url: header.url }) : /* @__PURE__ */ jsx(AgentActivityIcon, { kind: header.iconKind }),
|
|
62
|
-
action: header.action,
|
|
63
|
-
detail: header.detail
|
|
62
|
+
action: !streaming && settledAction ? settledAction : header.action,
|
|
63
|
+
detail: !streaming && settledAction ? void 0 : header.detail
|
|
64
64
|
}), /* @__PURE__ */ jsxs(ActivityContent, { children: [hiddenStepCount > 0 ? /* @__PURE__ */ jsxs(Button, {
|
|
65
65
|
size: "sm",
|
|
66
66
|
variant: "ghost",
|
|
@@ -153,7 +153,18 @@ function ThinkChatActivityStep({ description, part, stateKey, toolRenderers }) {
|
|
|
153
153
|
children: text
|
|
154
154
|
});
|
|
155
155
|
}
|
|
156
|
-
function
|
|
156
|
+
function terminalActivityAction(message) {
|
|
157
|
+
const metadata = message.metadata;
|
|
158
|
+
if (typeof metadata !== "object" || metadata === null || !("durationMs" in metadata) || typeof metadata.durationMs !== "number" || !Number.isFinite(metadata.durationMs) || metadata.durationMs < 0) return;
|
|
159
|
+
const totalSeconds = Math.max(1, Math.round(metadata.durationMs / 1e3));
|
|
160
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
161
|
+
const seconds = totalSeconds % 60;
|
|
162
|
+
const duration = minutes ? seconds ? `${minutes}m ${seconds}s` : `${minutes}m` : `${totalSeconds}s`;
|
|
163
|
+
const status = "status" in metadata ? metadata.status : void 0;
|
|
164
|
+
if (status === "completed") return `Worked for ${duration}`;
|
|
165
|
+
if (status === "aborted") return `You stopped after ${duration}`;
|
|
166
|
+
}
|
|
167
|
+
function ThinkChatActivityGroup({ message, parts, renderAgentToolRunLink, isTrailing, settledAction, toolRenderers, stateKey }) {
|
|
157
168
|
const live = useOptionalThinkChatLive();
|
|
158
169
|
const streaming = isTrailing && (live ? live.isStreaming && live.lastMessageId === message.id : parts.some(isPartWorking));
|
|
159
170
|
const agentTools = useOptionalAgentToolRuns();
|
|
@@ -168,6 +179,7 @@ function ThinkChatActivityGroup({ message, parts, renderAgentToolRunLink, isTrai
|
|
|
168
179
|
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(ThinkChatActivity, {
|
|
169
180
|
parts,
|
|
170
181
|
isStreaming: streaming,
|
|
182
|
+
settledAction,
|
|
171
183
|
toolRenderers,
|
|
172
184
|
stateKey
|
|
173
185
|
}), runs.length && renderAgentToolRunLink ? /* @__PURE__ */ jsx(SubagentRunList, {
|
|
@@ -212,11 +224,13 @@ function createThinkChatActivityRenderer({ excludeTools, renderAgentToolRunLink,
|
|
|
212
224
|
if (partIndex !== start) return null;
|
|
213
225
|
let end = partIndex;
|
|
214
226
|
while (end + 1 < message.parts.length && runStarts[end + 1] === start) end++;
|
|
227
|
+
const isLastActivityRun = runStarts.findLast((runStart) => runStart !== -1) === start;
|
|
215
228
|
return /* @__PURE__ */ jsx(ThinkChatActivityGroup, {
|
|
216
229
|
message,
|
|
217
230
|
parts: message.parts.slice(start, end + 1),
|
|
218
231
|
stateKey: `${message.id}:${start}`,
|
|
219
232
|
isTrailing: end === message.parts.length - 1,
|
|
233
|
+
settledAction: isLastActivityRun ? terminalActivityAction(message) : void 0,
|
|
220
234
|
toolRenderers,
|
|
221
235
|
renderAgentToolRunLink
|
|
222
236
|
});
|
|
@@ -386,12 +386,16 @@ function ThinkChatBrowserPanel({ part }) {
|
|
|
386
386
|
receivedAt: seenAt,
|
|
387
387
|
fallback: media.screenshot ? /* @__PURE__ */ jsx("img", {
|
|
388
388
|
src: media.screenshot,
|
|
389
|
-
alt: "Last browser state"
|
|
389
|
+
alt: "Last browser state",
|
|
390
|
+
width: 16,
|
|
391
|
+
height: 10
|
|
390
392
|
}) : void 0
|
|
391
393
|
}) : media.screenshot ? /* @__PURE__ */ jsx("img", {
|
|
392
394
|
className: "activity__browser-screenshot",
|
|
393
395
|
src: media.screenshot,
|
|
394
|
-
alt: "Browser screenshot"
|
|
396
|
+
alt: "Browser screenshot",
|
|
397
|
+
width: 16,
|
|
398
|
+
height: 10
|
|
395
399
|
}) : null;
|
|
396
400
|
const codeView = /* @__PURE__ */ jsx(ExecuteCodeView, {
|
|
397
401
|
code,
|
|
@@ -2,8 +2,8 @@ import { t as cx } from "../../class-names-BiMDVpUo.js";
|
|
|
2
2
|
import { S as FileIcon, T as InfoIcon } from "../../icons-CVFSeTJn.js";
|
|
3
3
|
import { Activity, ActivityContent, ActivityItemGroup, ActivityOutput, ActivityTrigger } from "../ai-sdk/Activity.js";
|
|
4
4
|
import { a as formatUnknownValue } from "../../format-DB2mX9DA.js";
|
|
5
|
-
import { EmptyState } from "../foundations/EmptyState.js";
|
|
6
5
|
import { DescriptionList } from "../foundations/DescriptionList.js";
|
|
6
|
+
import { EmptyState } from "../foundations/EmptyState.js";
|
|
7
7
|
import { formatThinkExecutionTimestamp, getThinkExecutionRunError, getThinkExecutionRunId, getThinkExecutionRunKindLabel, getThinkExecutionRunProgressedAt, getThinkExecutionRunProgressedLabel, getThinkExecutionRunTitle, isThinkSubmissionRun } from "./ThinkExecutionRun.js";
|
|
8
8
|
import { ThinkExecutionStatus } from "./ThinkExecutionStatus.js";
|
|
9
9
|
import "react";
|
|
@@ -17,6 +17,7 @@ function ThinkExecutionDetail({ className, emptyState = "Select a run to view it
|
|
|
17
17
|
if (!run) return /* @__PURE__ */ jsx("section", {
|
|
18
18
|
ref,
|
|
19
19
|
className: cx("think-execution-detail", "think-execution-detail--empty", className),
|
|
20
|
+
"data-recipe": "page",
|
|
20
21
|
role: "status",
|
|
21
22
|
...props,
|
|
22
23
|
children: /* @__PURE__ */ jsx(EmptyState, { description: emptyState })
|
|
@@ -27,6 +28,7 @@ function ThinkExecutionDetail({ className, emptyState = "Select a run to view it
|
|
|
27
28
|
return /* @__PURE__ */ jsxs("section", {
|
|
28
29
|
ref,
|
|
29
30
|
className: cx("think-execution-detail", className),
|
|
31
|
+
"data-recipe": "page",
|
|
30
32
|
...props,
|
|
31
33
|
children: [
|
|
32
34
|
/* @__PURE__ */ jsxs("header", {
|
|
@@ -142,6 +142,7 @@ function ThinkExecutionWorkbench({ backButton, className, pageSize = executionPa
|
|
|
142
142
|
return /* @__PURE__ */ jsxs("div", {
|
|
143
143
|
ref,
|
|
144
144
|
className: cx("think-execution-workbench", className),
|
|
145
|
+
"data-recipe": "fill-host",
|
|
145
146
|
...props,
|
|
146
147
|
children: [
|
|
147
148
|
/* @__PURE__ */ jsxs(AppTopBar.Root, {
|