@mcp-b/react-components 0.46.3 → 0.46.5
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/{McpConnectorForm-BETdVBRk.d.ts → McpConnectorForm-CeYNY0MI.d.ts} +1 -1
- package/dist/{McpPluginCatalog-C6ip9IvL.d.ts → McpPluginCatalog-3qWu8oK1.d.ts} +2 -2
- package/dist/{Workspace-jdVZ9S0a.d.ts → Workspace-BGhTdDTI.d.ts} +2 -3
- package/dist/assets/browser-control-cursor.png +0 -0
- package/dist/components/agents-sdk/ManagerOffice.d.ts +5 -17
- package/dist/components/agents-sdk/ManagerOffice.js +11 -1
- package/dist/components/agents-sdk/McpConnectionRequest.d.ts +1 -1
- package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -1
- package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -1
- package/dist/components/agents-sdk/McpServerPicker.d.ts +2 -2
- package/dist/components/agents-sdk/ThinkFullApp.d.ts +2 -2
- package/dist/components/agents-sdk/ThinkSidepanel.d.ts +9 -15
- package/dist/components/agents-sdk/ThinkSidepanel.js +1 -1
- package/dist/components/agents-sdk/Workspace.d.ts +1 -1
- package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
- package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +1 -1
- package/dist/components/extension/CodexModelSelector.d.ts +2 -2
- package/dist/components/extension/CodexModelSelector.js +1 -1
- package/dist/components/extension/ConversationTabPicker.d.ts +5 -5
- package/dist/components/extension/ConversationTabPicker.js +4 -4
- package/dist/components/general-purpose/SettingsFormDialog.d.ts +7 -7
- package/dist/components/general-purpose/SettingsFormDialog.js +3 -2
- package/dist/{mcp-server-catalog-Cbu483Zb.d.ts → mcp-server-catalog-C_g7C-9o.d.ts} +24 -0
- package/dist/styles/browser-control-overlay.css +46 -80
- package/dist/styles/extension-status.css +46 -0
- package/dist/styles/index.css +0 -1
- package/dist/utils/mcp-server-catalog.d.ts +1 -1
- package/dist/utils/mcp-server-catalog.js +69 -1
- package/package.json +3 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { d as McpServerSetupAuthFieldName, l as McpServerSetupAuth } from "./mcp-server-catalog-
|
|
1
|
+
import { d as McpServerSetupAuthFieldName, l as McpServerSetupAuth } from "./mcp-server-catalog-C_g7C-9o.js";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/components/agents-sdk/McpConnectorForm.d.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as McpServerCard } from "./mcp-server-catalog-
|
|
2
|
-
import { r as McpConnectorFormValues } from "./McpConnectorForm-
|
|
1
|
+
import { o as McpServerCard } from "./mcp-server-catalog-C_g7C-9o.js";
|
|
2
|
+
import { r as McpConnectorFormValues } from "./McpConnectorForm-CeYNY0MI.js";
|
|
3
3
|
import { l as DialogProps } from "./Dialog-B_FhRWaz.js";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { MCPServersState } from "agents";
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { a as WorkspaceMediaInfo, i as WorkspaceFileState, r as WorkspaceFileAssetResolver, t as WorkspaceFileAsset } from "./WorkspaceFile-Dq-GC0_T.js";
|
|
2
2
|
import { DataTag, QueryKey, UnusedSkipTokenOptions } from "@tanstack/react-query";
|
|
3
|
-
import { WorkspaceLike } from "@cloudflare/think";
|
|
4
3
|
import { FileInfo, Workspace } from "@cloudflare/shell";
|
|
5
4
|
|
|
6
5
|
//#region src/components/agents-sdk/Workspace.d.ts
|
|
7
6
|
/** Workspace summary, as returned by `Workspace.getWorkspaceInfo()` upstream. */
|
|
8
7
|
type WorkspaceInfo = Awaited<ReturnType<Workspace["getWorkspaceInfo"]>>;
|
|
9
|
-
/**
|
|
10
|
-
type WorkspaceSource = Workspace |
|
|
8
|
+
/** The exact read surface used by the workspace browser. */
|
|
9
|
+
type WorkspaceSource = Pick<Workspace, "readDir" | "readFile" | "readFileBytes" | "stat"> & Partial<Pick<Workspace, "getWorkspaceInfo">>;
|
|
11
10
|
interface UseWorkspaceOptions {
|
|
12
11
|
/** Must be referentially stable (memoize in the app). */
|
|
13
12
|
source: WorkspaceSource;
|
|
Binary file
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { n as ResponsiveSidebarShell } from "../../ResponsiveSidebarShell-BTVPxLJK.js";
|
|
2
|
+
import { ThinkRoutine } from "./ThinkRoutine.js";
|
|
2
3
|
import * as React from "react";
|
|
3
4
|
|
|
4
5
|
//#region src/components/agents-sdk/ManagerOffice.d.ts
|
|
@@ -44,20 +45,6 @@ interface ManagerOfficeWork {
|
|
|
44
45
|
/** Unix timestamp in milliseconds of the latest lifecycle transition. */
|
|
45
46
|
updatedAt: number;
|
|
46
47
|
}
|
|
47
|
-
interface ManagerOfficeRoutine {
|
|
48
|
-
/** Stable routine identity. */
|
|
49
|
-
id: string;
|
|
50
|
-
/** Human-readable recurring responsibility. */
|
|
51
|
-
name: string;
|
|
52
|
-
/** Human-readable schedule supplied by the host. */
|
|
53
|
-
schedule: string;
|
|
54
|
-
/** Whether future occurrences are enabled. */
|
|
55
|
-
enabled: boolean;
|
|
56
|
-
/** Completed runs among the bounded recent run history. */
|
|
57
|
-
completedRuns: number;
|
|
58
|
-
/** Terminal runs among the bounded recent run history. */
|
|
59
|
-
finishedRuns: number;
|
|
60
|
-
}
|
|
61
48
|
/** Which way work moves through a channel, from the employee's side. */
|
|
62
49
|
type ManagerOfficeChannelDirection = "input" | "output" | "both";
|
|
63
50
|
type ManagerOfficeChannelStatus = "connected" | "needs-auth" | "error";
|
|
@@ -117,7 +104,8 @@ interface ManagerOfficeConnectedEmployee extends ManagerOfficeEmployeeBase {
|
|
|
117
104
|
role: string;
|
|
118
105
|
handoffs: readonly ManagerOfficeHandoff[];
|
|
119
106
|
work: readonly ManagerOfficeWork[];
|
|
120
|
-
routines
|
|
107
|
+
/** Whole upstream-backed routines, including their native task, schedule, and runs. */
|
|
108
|
+
routines: readonly ThinkRoutine[];
|
|
121
109
|
/** Every service the employee reads from or acts on. Empty is meaningful. */
|
|
122
110
|
channels: readonly ManagerOfficeChannel[];
|
|
123
111
|
/** The live tab the manager can glance at from the office. */
|
|
@@ -151,7 +139,7 @@ type ManagerOfficeDestination = {
|
|
|
151
139
|
} | {
|
|
152
140
|
kind: "routine";
|
|
153
141
|
employee: ManagerOfficeConnectedEmployee;
|
|
154
|
-
routine:
|
|
142
|
+
routine: ThinkRoutine;
|
|
155
143
|
} | {
|
|
156
144
|
kind: "new-work";
|
|
157
145
|
employee: ManagerOfficeConnectedEmployee;
|
|
@@ -260,4 +248,4 @@ declare function ManagerOffice({
|
|
|
260
248
|
...props
|
|
261
249
|
}: ManagerOfficeProps): React.JSX.Element;
|
|
262
250
|
//#endregion
|
|
263
|
-
export { ManagerOffice, ManagerOfficeAnalyticsPoint, ManagerOfficeBrowserPreview, ManagerOfficeChannel, ManagerOfficeChannelDirection, ManagerOfficeChannelStatus, ManagerOfficeConnectedEmployee, ManagerOfficeDestination, ManagerOfficeDisconnectedEmployee, ManagerOfficeEmployee, ManagerOfficeEmployeeAnalytics, ManagerOfficeEmployeeStatus, ManagerOfficeHandoff, ManagerOfficeProps, ManagerOfficeReportSelection,
|
|
251
|
+
export { ManagerOffice, ManagerOfficeAnalyticsPoint, ManagerOfficeBrowserPreview, ManagerOfficeChannel, ManagerOfficeChannelDirection, ManagerOfficeChannelStatus, ManagerOfficeConnectedEmployee, ManagerOfficeDestination, ManagerOfficeDisconnectedEmployee, ManagerOfficeEmployee, ManagerOfficeEmployeeAnalytics, ManagerOfficeEmployeeStatus, ManagerOfficeHandoff, ManagerOfficeProps, ManagerOfficeReportSelection, ManagerOfficeSidebar, ManagerOfficeSidebarAlert, ManagerOfficeSidebarAlertProps, ManagerOfficeSidebarProps, ManagerOfficeView, ManagerOfficeWork, ManagerOfficeWorkStatus };
|
|
@@ -15,6 +15,7 @@ import { LinkButton } from "../foundations/LinkButton.js";
|
|
|
15
15
|
import "../foundations/icons.js";
|
|
16
16
|
import { AppTopBar } from "../general-purpose/AppTopBar.js";
|
|
17
17
|
import { ResponsiveSidebarShell } from "../general-purpose/ResponsiveSidebarShell.js";
|
|
18
|
+
import { getThinkExecutionRunStatus } from "./ThinkExecutionRun.js";
|
|
18
19
|
import * as React from "react";
|
|
19
20
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
20
21
|
//#region src/components/_internal/chrome-profile-colors.ts
|
|
@@ -354,6 +355,15 @@ function relativeTime(timestamp, now) {
|
|
|
354
355
|
if (elapsed < day) return `${Math.floor(elapsed / hour)}h`;
|
|
355
356
|
return `${Math.floor(elapsed / day)}d`;
|
|
356
357
|
}
|
|
358
|
+
function routineDetail(routine) {
|
|
359
|
+
const schedule = routine.enabled ? routine.task.schedule : `Paused · ${routine.task.schedule}`;
|
|
360
|
+
const finishedRuns = routine.runs.filter((run) => run.completedAt != null);
|
|
361
|
+
if (!finishedRuns.length) return schedule;
|
|
362
|
+
return `${schedule} · ${finishedRuns.filter((run) => {
|
|
363
|
+
const status = getThinkExecutionRunStatus(run);
|
|
364
|
+
return status === "completed" || status === "complete";
|
|
365
|
+
}).length} of ${finishedRuns.length} recent runs completed`;
|
|
366
|
+
}
|
|
357
367
|
function Timestamp({ now, timestamp }) {
|
|
358
368
|
const date = new Date(timestamp);
|
|
359
369
|
return /* @__PURE__ */ jsx("time", {
|
|
@@ -1598,7 +1608,7 @@ function EmployeeDetail({ employee, renderLink, now, profileColor }) {
|
|
|
1598
1608
|
children: routine.name
|
|
1599
1609
|
}), /* @__PURE__ */ jsx("small", {
|
|
1600
1610
|
className: "sigvelo-truncate",
|
|
1601
|
-
children: routine
|
|
1611
|
+
children: routineDetail(routine)
|
|
1602
1612
|
})]
|
|
1603
1613
|
}),
|
|
1604
1614
|
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "manager-office__row-chevron" })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as McpServerCard } from "../../mcp-server-catalog-
|
|
1
|
+
import { o as McpServerCard } from "../../mcp-server-catalog-C_g7C-9o.js";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { DynamicToolUIPart, ToolUIPart } from "ai";
|
|
4
4
|
import { MCPServersState } from "agents";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as McpConnectorFormProps, r as McpConnectorFormValues, t as McpConnectorForm } from "../../McpConnectorForm-
|
|
1
|
+
import { n as McpConnectorFormProps, r as McpConnectorFormValues, t as McpConnectorForm } from "../../McpConnectorForm-CeYNY0MI.js";
|
|
2
2
|
export { McpConnectorForm, McpConnectorFormProps, McpConnectorFormValues };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as McpPluginDetailsDialogProps, i as McpPluginDetailsDialog, n as McpPluginCatalogProps, r as McpPluginDetails, t as McpPluginCatalog } from "../../McpPluginCatalog-
|
|
1
|
+
import { a as McpPluginDetailsDialogProps, i as McpPluginDetailsDialog, n as McpPluginCatalogProps, r as McpPluginDetails, t as McpPluginCatalog } from "../../McpPluginCatalog-3qWu8oK1.js";
|
|
2
2
|
export { McpPluginCatalog, McpPluginCatalogProps, McpPluginDetails, McpPluginDetailsDialog, McpPluginDetailsDialogProps };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { s as MenuItemProps, t as Menu } from "../../Menu-yb6QXWA3.js";
|
|
2
|
-
import { o as McpServerCard } from "../../mcp-server-catalog-
|
|
3
|
-
import { n as McpConnectorFormProps } from "../../McpConnectorForm-
|
|
2
|
+
import { o as McpServerCard } from "../../mcp-server-catalog-C_g7C-9o.js";
|
|
3
|
+
import { n as McpConnectorFormProps } from "../../McpConnectorForm-CeYNY0MI.js";
|
|
4
4
|
import { l as DialogProps } from "../../Dialog-B_FhRWaz.js";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
import { MCPServersState } from "agents";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { l as WorkspaceNavigationAdapter } from "../../WorkspaceLink-Bh9-Jo1r.js";
|
|
2
2
|
import { n as AgentToolEventsValue } from "../../AgentToolRunsContext-jtmveaRE.js";
|
|
3
3
|
import { n as ResponsiveSidebarShell, t as AppBarSlots } from "../../ResponsiveSidebarShell-BTVPxLJK.js";
|
|
4
|
-
import { n as McpPluginCatalogProps } from "../../McpPluginCatalog-
|
|
4
|
+
import { n as McpPluginCatalogProps } from "../../McpPluginCatalog-3qWu8oK1.js";
|
|
5
5
|
import { ThinkChatMessagesProps } from "./ThinkChat.js";
|
|
6
6
|
import { ThinkThreadStatusSummary } from "./ThinkThreadPicker.js";
|
|
7
7
|
import { r as WorkspaceFileAssetResolver } from "../../WorkspaceFile-Dq-GC0_T.js";
|
|
8
|
-
import { v as WorkspaceSource } from "../../Workspace-
|
|
8
|
+
import { v as WorkspaceSource } from "../../Workspace-BGhTdDTI.js";
|
|
9
9
|
import { t as ThinkAgent } from "../../think-agent-Cip5KAPj.js";
|
|
10
10
|
import * as React from "react";
|
|
11
11
|
import { UIMessage } from "ai";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { ThinkRoutine } from "./ThinkRoutine.js";
|
|
1
2
|
import { ThinkChatDraft } from "./ThinkChat.js";
|
|
2
3
|
import { ThinkThreadItem } from "./ThinkThreadPicker.js";
|
|
3
4
|
import { ThinkFullAppAgent, ThinkFullAppConversation, ThinkFullAppProps } from "./ThinkFullApp.js";
|
|
4
|
-
import {
|
|
5
|
-
import { SetupChecklistEntry } from "../general-purpose/SetupChecklist.js";
|
|
5
|
+
import { SetupChecklistGroupProps } from "../general-purpose/SetupChecklist.js";
|
|
6
6
|
import * as React from "react";
|
|
7
7
|
import { UIMessage } from "ai";
|
|
8
8
|
import { AgentToolRunState } from "agents/agent-tools";
|
|
@@ -59,7 +59,7 @@ interface ThinkSidepanelConnection {
|
|
|
59
59
|
description?: string;
|
|
60
60
|
onSelect: () => void;
|
|
61
61
|
}
|
|
62
|
-
interface ThinkSidepanelStart {
|
|
62
|
+
interface ThinkSidepanelStart<Id extends string = string> {
|
|
63
63
|
onSubmit: ThinkChatDraft["onSubmit"];
|
|
64
64
|
suggestions?: readonly {
|
|
65
65
|
label: string;
|
|
@@ -72,10 +72,7 @@ interface ThinkSidepanelStart {
|
|
|
72
72
|
discord?: ThinkSidepanelConnection;
|
|
73
73
|
onAttachFolder?: () => void;
|
|
74
74
|
attachFolderBusy?: boolean;
|
|
75
|
-
personalization?:
|
|
76
|
-
entries: readonly SetupChecklistEntry[];
|
|
77
|
-
onSelect: (id: string) => void;
|
|
78
|
-
};
|
|
75
|
+
personalization?: Pick<SetupChecklistGroupProps<Id>, "entries" | "onSelect">;
|
|
79
76
|
}
|
|
80
77
|
interface ThinkSidepanelSchedules<TRoutine extends ThinkRoutine = ThinkRoutine> {
|
|
81
78
|
routines: readonly TRoutine[];
|
|
@@ -118,13 +115,10 @@ interface ThinkSidepanelIdentity {
|
|
|
118
115
|
onBind?: () => void | Promise<void>;
|
|
119
116
|
onUnbind?: () => void | Promise<void>;
|
|
120
117
|
}
|
|
121
|
-
interface ThinkSidepanelProps<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage, TRoutine extends ThinkRoutine = ThinkRoutine> extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
118
|
+
interface ThinkSidepanelProps<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage, TRoutine extends ThinkRoutine = ThinkRoutine, SetupId extends string = string> extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
|
|
122
119
|
sourceKey: string;
|
|
123
120
|
view: ThinkSidepanelView;
|
|
124
|
-
thread?:
|
|
125
|
-
id: string;
|
|
126
|
-
title: string;
|
|
127
|
-
};
|
|
121
|
+
thread?: ThinkThreadItem;
|
|
128
122
|
threads?: readonly ThinkThreadItem[];
|
|
129
123
|
conversation?: ThinkFullAppConversation<AgentT, State, MessageT>;
|
|
130
124
|
workspace?: ThinkFullAppProps<AgentT, State, MessageT>["workspace"];
|
|
@@ -147,7 +141,7 @@ interface ThinkSidepanelProps<AgentT extends ThinkFullAppAgent<State>, State = u
|
|
|
147
141
|
status?: ThinkSidepanelStatus;
|
|
148
142
|
connectingLabel?: string;
|
|
149
143
|
modelSetup?: ThinkSidepanelModelSetup;
|
|
150
|
-
start?: ThinkSidepanelStart
|
|
144
|
+
start?: ThinkSidepanelStart<SetupId>;
|
|
151
145
|
schedules?: ThinkSidepanelSchedules<TRoutine>;
|
|
152
146
|
agentRun?: ThinkSidepanelAgentRun;
|
|
153
147
|
/** Host-owned live view. The side panel only frames it. */
|
|
@@ -158,7 +152,7 @@ interface ThinkSidepanelProps<AgentT extends ThinkFullAppAgent<State>, State = u
|
|
|
158
152
|
* conversation plus workbench. Hosts hydrate conversation, workspace,
|
|
159
153
|
* plugins, and callables. Storybook is the place to iterate the chrome.
|
|
160
154
|
*/
|
|
161
|
-
declare function ThinkSidepanel<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage, TRoutine extends ThinkRoutine = ThinkRoutine>({
|
|
155
|
+
declare function ThinkSidepanel<AgentT extends ThinkFullAppAgent<State>, State = unknown, MessageT extends UIMessage = UIMessage, TRoutine extends ThinkRoutine = ThinkRoutine, SetupId extends string = string>({
|
|
162
156
|
agentRun,
|
|
163
157
|
appBarLeading,
|
|
164
158
|
brand,
|
|
@@ -186,6 +180,6 @@ declare function ThinkSidepanel<AgentT extends ThinkFullAppAgent<State>, State =
|
|
|
186
180
|
view,
|
|
187
181
|
workspace,
|
|
188
182
|
...props
|
|
189
|
-
}: ThinkSidepanelProps<AgentT, State, MessageT, TRoutine>): React.JSX.Element;
|
|
183
|
+
}: ThinkSidepanelProps<AgentT, State, MessageT, TRoutine, SetupId>): React.JSX.Element;
|
|
190
184
|
//#endregion
|
|
191
185
|
export { ThinkSidepanel, ThinkSidepanelAgentRun, ThinkSidepanelCompanion, ThinkSidepanelConnection, ThinkSidepanelDestination, ThinkSidepanelFollow, ThinkSidepanelIdentity, ThinkSidepanelModelSetup, ThinkSidepanelPasskeyVault, ThinkSidepanelProps, ThinkSidepanelSchedules, ThinkSidepanelStart, ThinkSidepanelStatus, ThinkSidepanelView };
|
|
@@ -18,8 +18,8 @@ import { AppTopBar } from "../general-purpose/AppTopBar.js";
|
|
|
18
18
|
import { t as SetupChecklistAction } from "../../SetupChecklist-DyPZWzK2.js";
|
|
19
19
|
import { NaniteMark } from "../nanites/NaniteScene.js";
|
|
20
20
|
import { SubagentRunLabel } from "./SubagentRunIndicator.js";
|
|
21
|
-
import { McpServerPickerAction, McpServerPickerItems } from "./McpServerPicker.js";
|
|
22
21
|
import { getThinkExecutionRunId } from "./ThinkExecutionRun.js";
|
|
22
|
+
import { McpServerPickerAction, McpServerPickerItems } from "./McpServerPicker.js";
|
|
23
23
|
import { ThinkThreadPicker, summarizeThinkThreads } from "./ThinkThreadPicker.js";
|
|
24
24
|
import { ThinkFullApp } from "./ThinkFullApp.js";
|
|
25
25
|
import { ThinkRoutineLibrary } from "./ThinkRoutineLibrary.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { A as workspaceQueryKey, C as workspaceBinaryFileQueryOptions, D as workspaceFileAssetQueryOptions, E as workspaceDirectoryQueryPrefix, O as workspaceFileStatQueryOptions, S as useWorkspace, T as workspaceDirectoryQueryOptions, _ as WorkspaceResolvedAsset, a as WorkspaceDirectoryQueryOptions, b as WorkspaceTextFileQueryKey, c as WorkspaceFileQueryKey, d as WorkspaceFileStatQueryOptions, f as WorkspaceFileVersion, g as WorkspaceQueryKey, h as WorkspaceInfoQueryOptions, i as WorkspaceDirectoryQueryKey, j as workspaceTextFileQueryOptions, k as workspaceInfoQueryOptions, l as WorkspaceFileReadTarget, m as WorkspaceInfoQueryKey, n as WorkspaceBinaryFileQueryKey, o as WorkspaceFileAssetQueryKey, p as WorkspaceInfo, r as WorkspaceBinaryFileQueryOptions, s as WorkspaceFileAssetQueryOptions, t as UseWorkspaceOptions, u as WorkspaceFileStatQueryKey, v as WorkspaceSource, w as workspaceDirectoryQueryKey, x as WorkspaceTextFileQueryOptions, y as WorkspaceState } from "../../Workspace-
|
|
1
|
+
import { A as workspaceQueryKey, C as workspaceBinaryFileQueryOptions, D as workspaceFileAssetQueryOptions, E as workspaceDirectoryQueryPrefix, O as workspaceFileStatQueryOptions, S as useWorkspace, T as workspaceDirectoryQueryOptions, _ as WorkspaceResolvedAsset, a as WorkspaceDirectoryQueryOptions, b as WorkspaceTextFileQueryKey, c as WorkspaceFileQueryKey, d as WorkspaceFileStatQueryOptions, f as WorkspaceFileVersion, g as WorkspaceQueryKey, h as WorkspaceInfoQueryOptions, i as WorkspaceDirectoryQueryKey, j as workspaceTextFileQueryOptions, k as workspaceInfoQueryOptions, l as WorkspaceFileReadTarget, m as WorkspaceInfoQueryKey, n as WorkspaceBinaryFileQueryKey, o as WorkspaceFileAssetQueryKey, p as WorkspaceInfo, r as WorkspaceBinaryFileQueryOptions, s as WorkspaceFileAssetQueryOptions, t as UseWorkspaceOptions, u as WorkspaceFileStatQueryKey, v as WorkspaceSource, w as workspaceDirectoryQueryKey, x as WorkspaceTextFileQueryOptions, y as WorkspaceState } from "../../Workspace-BGhTdDTI.js";
|
|
2
2
|
export { UseWorkspaceOptions, WorkspaceBinaryFileQueryKey, WorkspaceBinaryFileQueryOptions, WorkspaceDirectoryQueryKey, WorkspaceDirectoryQueryOptions, WorkspaceFileAssetQueryKey, WorkspaceFileAssetQueryOptions, WorkspaceFileQueryKey, WorkspaceFileReadTarget, WorkspaceFileStatQueryKey, WorkspaceFileStatQueryOptions, WorkspaceFileVersion, WorkspaceInfo, WorkspaceInfoQueryKey, WorkspaceInfoQueryOptions, WorkspaceQueryKey, WorkspaceResolvedAsset, WorkspaceSource, WorkspaceState, WorkspaceTextFileQueryKey, WorkspaceTextFileQueryOptions, useWorkspace, workspaceBinaryFileQueryOptions, workspaceDirectoryQueryKey, workspaceDirectoryQueryOptions, workspaceDirectoryQueryPrefix, workspaceFileAssetQueryOptions, workspaceFileStatQueryOptions, workspaceInfoQueryOptions, workspaceQueryKey, workspaceTextFileQueryOptions };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { l as WorkspaceNavigationAdapter } from "../../WorkspaceLink-Bh9-Jo1r.js";
|
|
2
|
-
import { y as WorkspaceState } from "../../Workspace-
|
|
2
|
+
import { y as WorkspaceState } from "../../Workspace-BGhTdDTI.js";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
|
|
5
5
|
//#region src/components/agents-sdk/WorkspaceExplorer.d.ts
|
|
@@ -11,8 +11,8 @@ interface CodexModelSelectorProps<ModelT extends CodexModel = CodexModel> {
|
|
|
11
11
|
readonly models: readonly ModelT[];
|
|
12
12
|
/** Current Codex catalog id. Use the selected entry's `model` field for inference. */
|
|
13
13
|
readonly selectedModelId?: ModelId<ModelT> | null;
|
|
14
|
-
/** Called only with an
|
|
15
|
-
readonly onSelectModel: (
|
|
14
|
+
/** Called only with an entry from the supplied Codex catalog. */
|
|
15
|
+
readonly onSelectModel: (model: ModelT) => void;
|
|
16
16
|
/** Current reasoning effort advertised by the selected model. */
|
|
17
17
|
readonly selectedEffortId?: ReasoningEffort<ModelT> | null;
|
|
18
18
|
readonly onSelectEffort?: (effortId: ReasoningEffort<ModelT>) => void;
|
|
@@ -28,7 +28,7 @@ function CodexModelSelector({ models, selectedModelId = null, onSelectModel, sel
|
|
|
28
28
|
function handleSelectModel(modelId) {
|
|
29
29
|
const model = visibleModels.find((option) => option.id === modelId);
|
|
30
30
|
if (!model) return;
|
|
31
|
-
onSelectModel(model
|
|
31
|
+
onSelectModel(model);
|
|
32
32
|
}
|
|
33
33
|
function handleSelectEffort(effortId) {
|
|
34
34
|
const effort = effortOptions.find((option) => option.reasoningEffort === effortId);
|
|
@@ -8,11 +8,11 @@ interface ConversationTabPickerItem {
|
|
|
8
8
|
url?: string;
|
|
9
9
|
iconSrc?: string;
|
|
10
10
|
}
|
|
11
|
-
interface ConversationTabPickerProps {
|
|
11
|
+
interface ConversationTabPickerProps<Tab extends ConversationTabPickerItem = ConversationTabPickerItem> {
|
|
12
12
|
/** Browser-enriched tabs already scoped to the current conversation. */
|
|
13
|
-
tabs: readonly
|
|
13
|
+
tabs: readonly Tab[];
|
|
14
14
|
/** Host-owned activation, such as Chrome tab/window focus. */
|
|
15
|
-
onSelect: (
|
|
15
|
+
onSelect: (tab: Tab) => void | Promise<void>;
|
|
16
16
|
/** Maximum avatars shown in the collapsed trigger. */
|
|
17
17
|
maxVisible?: number;
|
|
18
18
|
groupLabel?: React.ReactNode;
|
|
@@ -23,9 +23,9 @@ interface ConversationTabPickerProps {
|
|
|
23
23
|
* The browser adapter owns tab lookup and activation. This component owns URL
|
|
24
24
|
* labels, favicon fallbacks, menu state, and async activation feedback.
|
|
25
25
|
*/
|
|
26
|
-
declare function ConversationTabPicker({
|
|
26
|
+
declare function ConversationTabPicker<Tab extends ConversationTabPickerItem>({
|
|
27
27
|
tabs,
|
|
28
28
|
...props
|
|
29
|
-
}: ConversationTabPickerProps): React.JSX.Element | null;
|
|
29
|
+
}: ConversationTabPickerProps<Tab>): React.JSX.Element | null;
|
|
30
30
|
//#endregion
|
|
31
31
|
export { ConversationTabId, ConversationTabPicker, ConversationTabPickerItem, ConversationTabPickerProps };
|
|
@@ -54,11 +54,11 @@ function ConversationTabPickerMenu({ tabs, onSelect, maxVisible = 3, groupLabel
|
|
|
54
54
|
const pending = action && "pending" in action ? action.pending : null;
|
|
55
55
|
const error = action && "error" in action ? action.error : null;
|
|
56
56
|
const label = `${tabs.length} controlled ${tabs.length === 1 ? "tab" : "tabs"}`;
|
|
57
|
-
async function selectTab(
|
|
57
|
+
async function selectTab(tab) {
|
|
58
58
|
if (pending !== null) return;
|
|
59
|
-
setAction({ pending: id });
|
|
59
|
+
setAction({ pending: tab.id });
|
|
60
60
|
try {
|
|
61
|
-
await onSelect(
|
|
61
|
+
await onSelect(tab);
|
|
62
62
|
setAction(null);
|
|
63
63
|
setOpen(false);
|
|
64
64
|
} catch (cause) {
|
|
@@ -98,7 +98,7 @@ function ConversationTabPickerMenu({ tabs, onSelect, maxVisible = 3, groupLabel
|
|
|
98
98
|
closeOnClick: false,
|
|
99
99
|
"data-tab-id": tab.id,
|
|
100
100
|
disabled: pending !== null,
|
|
101
|
-
onClick: () => void selectTab(tab
|
|
101
|
+
onClick: () => void selectTab(tab),
|
|
102
102
|
children: [/* @__PURE__ */ jsx(TabAvatar, { tab }), /* @__PURE__ */ jsxs("span", {
|
|
103
103
|
className: "conversation-tab-picker__identity sigvelo-truncate-grow",
|
|
104
104
|
children: [/* @__PURE__ */ jsx("span", {
|
|
@@ -17,32 +17,32 @@ interface SettingsFormField {
|
|
|
17
17
|
required?: boolean;
|
|
18
18
|
readOnly?: boolean;
|
|
19
19
|
}
|
|
20
|
-
type SettingsFormValues = Readonly<Record<
|
|
21
|
-
interface SettingsFormDialogProps {
|
|
20
|
+
type SettingsFormValues<Fields extends readonly SettingsFormField[]> = Readonly<Record<Fields[number]["name"], string>>;
|
|
21
|
+
interface SettingsFormDialogProps<Fields extends readonly SettingsFormField[]> {
|
|
22
22
|
open: boolean;
|
|
23
23
|
onOpenChange: (open: boolean) => void;
|
|
24
24
|
title: React.ReactNode;
|
|
25
25
|
description: React.ReactNode;
|
|
26
|
-
fields:
|
|
27
|
-
initialValues?: Readonly<Record<
|
|
26
|
+
fields: Fields;
|
|
27
|
+
initialValues?: Readonly<Partial<Record<Fields[number]["name"], string | undefined>>>;
|
|
28
28
|
submitLabel: string;
|
|
29
29
|
submittingLabel?: string;
|
|
30
30
|
removeLabel?: string;
|
|
31
31
|
removingLabel?: string;
|
|
32
32
|
externalError?: string;
|
|
33
|
-
onSubmit: (values: SettingsFormValues) => void | Promise<void>;
|
|
33
|
+
onSubmit: (values: SettingsFormValues<Fields>) => void | Promise<void>;
|
|
34
34
|
onRemove?: () => void | Promise<void>;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* Uncontrolled, metadata-driven settings dialog with native validation and
|
|
38
38
|
* shared async submit/remove feedback. Product schemas remain in the host.
|
|
39
39
|
*/
|
|
40
|
-
declare function SettingsFormDialog({
|
|
40
|
+
declare function SettingsFormDialog<const Fields extends readonly SettingsFormField[]>({
|
|
41
41
|
open,
|
|
42
42
|
onOpenChange,
|
|
43
43
|
title,
|
|
44
44
|
description,
|
|
45
45
|
...contentProps
|
|
46
|
-
}: SettingsFormDialogProps): React.JSX.Element;
|
|
46
|
+
}: SettingsFormDialogProps<Fields>): React.JSX.Element;
|
|
47
47
|
//#endregion
|
|
48
48
|
export { SETTINGS_FORM_CHECKED, SettingsFormDialog, SettingsFormDialogProps, SettingsFormField, SettingsFormFieldType, SettingsFormValues };
|
|
@@ -24,6 +24,7 @@ function SettingsFormDialogContent({ fields, initialValues, submitLabel, submitt
|
|
|
24
24
|
const active = React.useRef(true);
|
|
25
25
|
const pending = submission === "submit" || submission === "remove";
|
|
26
26
|
const error = submission && typeof submission === "object" ? submission.error : null;
|
|
27
|
+
const initialValueByName = initialValues ?? {};
|
|
27
28
|
React.useEffect(() => {
|
|
28
29
|
active.current = true;
|
|
29
30
|
return () => {
|
|
@@ -62,7 +63,7 @@ function SettingsFormDialogContent({ fields, initialValues, submitLabel, submitt
|
|
|
62
63
|
name: field.name,
|
|
63
64
|
orientation: "horizontal",
|
|
64
65
|
children: [/* @__PURE__ */ jsx(Checkbox.Root, {
|
|
65
|
-
defaultChecked:
|
|
66
|
+
defaultChecked: initialValueByName[field.name] === SETTINGS_FORM_CHECKED,
|
|
66
67
|
disabled: field.readOnly,
|
|
67
68
|
children: /* @__PURE__ */ jsx(Checkbox.Indicator, {})
|
|
68
69
|
}), /* @__PURE__ */ jsxs(Field.Content, { children: [/* @__PURE__ */ jsx(Field.Label, { children: field.label }), field.description ? /* @__PURE__ */ jsx(Field.Description, { children: field.description }) : null] })]
|
|
@@ -72,7 +73,7 @@ function SettingsFormDialogContent({ fields, initialValues, submitLabel, submitt
|
|
|
72
73
|
/* @__PURE__ */ jsx(Field.Label, { children: field.label }),
|
|
73
74
|
/* @__PURE__ */ jsx(Field.Control, {
|
|
74
75
|
autoComplete: field.autoComplete,
|
|
75
|
-
defaultValue:
|
|
76
|
+
defaultValue: initialValueByName[field.name],
|
|
76
77
|
placeholder: field.placeholder,
|
|
77
78
|
readOnly: field.readOnly,
|
|
78
79
|
required: field.required,
|
|
@@ -420,6 +420,30 @@ declare const MANUAL_MCP_SERVER_CARDS: readonly [{
|
|
|
420
420
|
readonly url: "https://developers.asana.com/docs/connecting-mcp-clients-to-asanas-v2-server";
|
|
421
421
|
}];
|
|
422
422
|
};
|
|
423
|
+
}, {
|
|
424
|
+
readonly id: "github";
|
|
425
|
+
readonly name: "GitHub";
|
|
426
|
+
readonly url: "https://api.githubcopilot.com/mcp/";
|
|
427
|
+
readonly description: "Clone, push, and open pull requests as a connected GitHub account";
|
|
428
|
+
readonly category: "Manual";
|
|
429
|
+
readonly manualSetup: {
|
|
430
|
+
readonly auth: {
|
|
431
|
+
readonly type: "bearer";
|
|
432
|
+
readonly label: "Personal access token (classic)";
|
|
433
|
+
readonly fields: readonly [{
|
|
434
|
+
readonly name: "bearerToken";
|
|
435
|
+
readonly label: "Personal access token";
|
|
436
|
+
readonly inputType: "password";
|
|
437
|
+
readonly placeholder: "ghp_…";
|
|
438
|
+
readonly required: true;
|
|
439
|
+
}];
|
|
440
|
+
};
|
|
441
|
+
readonly description: "Paste a classic personal access token with all scopes from the agent's own GitHub account — the account is the access boundary. Git and the GitHub API both authenticate as this account.";
|
|
442
|
+
readonly links: readonly [{
|
|
443
|
+
readonly label: "Create a classic token";
|
|
444
|
+
readonly url: "https://github.com/settings/tokens";
|
|
445
|
+
}];
|
|
446
|
+
};
|
|
423
447
|
}, {
|
|
424
448
|
readonly id: "gmail";
|
|
425
449
|
readonly name: "Gmail";
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Browser-control chrome, mounted in a closed shadow root on someone else's
|
|
3
|
+
* page. This standalone design-system leaf is isolated by `:host { all:
|
|
4
|
+
* initial }`, so it shares no variable, scale, or primitive with the document
|
|
5
|
+
* stylesheet.
|
|
5
6
|
*
|
|
6
|
-
* Every length
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Every length is a literal on purpose. A --sigvelo-* reference here resolves
|
|
8
|
+
* to nothing and silently takes its whole declaration with it, and only on a
|
|
9
|
+
* real host page — the one place that is hardest to notice. Keep the values on
|
|
10
|
+
* the 4px grid by hand.
|
|
11
|
+
*
|
|
12
|
+
* System colors keep the chrome legible on an arbitrary page's palette and in
|
|
13
|
+
* forced-colors mode.
|
|
11
14
|
*/
|
|
12
15
|
|
|
13
16
|
:host {
|
|
14
17
|
--browser-control-accent: Highlight;
|
|
15
|
-
--browser-control-accent-text: HighlightText;
|
|
16
18
|
--browser-control-warning: Mark;
|
|
17
19
|
--browser-control-warning-text: MarkText;
|
|
18
20
|
--browser-control-shadow: color-mix(in srgb, CanvasText 28%, transparent);
|
|
@@ -31,50 +33,56 @@
|
|
|
31
33
|
z-index: 2147483647;
|
|
32
34
|
}
|
|
33
35
|
|
|
36
|
+
/*
|
|
37
|
+
* Only the waiting mode draws an edge. A tab under agent control is identified
|
|
38
|
+
* by its pointer; a border around the whole viewport reads as an error state
|
|
39
|
+
* and hides the page's own chrome. Waiting is the exception because the page
|
|
40
|
+
* is being handed back and the user has to notice.
|
|
41
|
+
*/
|
|
34
42
|
:host .frame {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
box-shadow:
|
|
44
|
+
inset 0 0 0 3px var(--browser-control-warning),
|
|
45
|
+
inset 0 0 24px color-mix(in srgb, var(--browser-control-warning) 32%, transparent);
|
|
38
46
|
box-sizing: border-box;
|
|
39
47
|
inset: 0;
|
|
40
48
|
pointer-events: none;
|
|
41
49
|
position: fixed;
|
|
42
50
|
}
|
|
43
51
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
/*
|
|
53
|
+
* The pointer artwork. The file is cropped to its alpha, and the alpha includes
|
|
54
|
+
* the soft white halo -- so the arrow's ink apex, which is what the eye reads as
|
|
55
|
+
* the point, sits 5px into a 40x41 image, or 3.41px once `contain` renders it
|
|
56
|
+
* 28px tall. The box is offset by that much and the pivot moved onto it, so the
|
|
57
|
+
* apex lands on the page's pointer and every rotation the planner emits turns
|
|
58
|
+
* about it. Shifting the background instead would do the same thing and clip the
|
|
59
|
+
* halo off the leading edge.
|
|
60
|
+
*
|
|
61
|
+
* Position comes from the Web Animations API during a move and from
|
|
62
|
+
* --think-cursor-x/y at rest; no transform transition, since a CSS transition
|
|
63
|
+
* and a script-driven animation would fight over the same property.
|
|
64
|
+
*/
|
|
50
65
|
:host .cursor {
|
|
51
|
-
|
|
66
|
+
background: url(../assets/browser-control-cursor.png) no-repeat 0 0 / contain;
|
|
67
|
+
/* Two shadows rather than one: a tight halo that separates the artwork from
|
|
68
|
+
whatever it is over, and a wide one that reads as the accent glow. */
|
|
69
|
+
filter: drop-shadow(0 0 6px color-mix(in srgb, var(--browser-control-accent) 90%, transparent))
|
|
70
|
+
drop-shadow(0 0 15px color-mix(in srgb, var(--browser-control-accent) 48%, transparent));
|
|
52
71
|
height: 28px;
|
|
53
|
-
left:
|
|
54
|
-
opacity: 0;
|
|
72
|
+
left: -3.41px;
|
|
55
73
|
pointer-events: none;
|
|
56
74
|
position: fixed;
|
|
57
|
-
top:
|
|
75
|
+
top: -3.41px;
|
|
58
76
|
transform: translate3d(var(--think-cursor-x, 16px), var(--think-cursor-y, 16px), 0);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
77
|
+
/* The ink apex, not the box corner and not the centre. The offset above puts
|
|
78
|
+
this point on the pointer, and the body swings around it. */
|
|
79
|
+
transform-origin: 3.41px 3.41px;
|
|
62
80
|
width: 28px;
|
|
63
81
|
}
|
|
64
82
|
|
|
65
|
-
:host .cursor.visible {
|
|
66
|
-
opacity: 1;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
:host .cursor path {
|
|
70
|
-
fill: var(--browser-control-accent);
|
|
71
|
-
stroke: var(--browser-control-accent-text);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
83
|
:host button {
|
|
75
84
|
appearance: none;
|
|
76
85
|
border-radius: 999px;
|
|
77
|
-
box-shadow: 0 2px 10px var(--browser-control-shadow);
|
|
78
86
|
cursor: pointer;
|
|
79
87
|
font:
|
|
80
88
|
600 12px/1.2 system-ui,
|
|
@@ -92,41 +100,6 @@
|
|
|
92
100
|
opacity: 0.72;
|
|
93
101
|
}
|
|
94
102
|
|
|
95
|
-
:host .takeover,
|
|
96
|
-
:host .owner {
|
|
97
|
-
background: var(--browser-control-accent);
|
|
98
|
-
border: solid 1px var(--browser-control-accent-text);
|
|
99
|
-
box-shadow: 0 2px 10px var(--browser-control-shadow);
|
|
100
|
-
color: var(--browser-control-accent-text);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
:host .takeover {
|
|
104
|
-
pointer-events: none;
|
|
105
|
-
position: fixed;
|
|
106
|
-
right: 10px;
|
|
107
|
-
top: 10px;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
:host .takeover.takeover-armed {
|
|
111
|
-
pointer-events: auto;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
:host .owner {
|
|
115
|
-
border-radius: 999px;
|
|
116
|
-
font:
|
|
117
|
-
600 12px/1.2 system-ui,
|
|
118
|
-
sans-serif;
|
|
119
|
-
left: 10px;
|
|
120
|
-
max-width: min(360px, 60vw);
|
|
121
|
-
overflow: hidden;
|
|
122
|
-
padding: 8px 12px;
|
|
123
|
-
pointer-events: none;
|
|
124
|
-
position: fixed;
|
|
125
|
-
text-overflow: ellipsis;
|
|
126
|
-
top: 10px;
|
|
127
|
-
white-space: nowrap;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
103
|
:host .banner {
|
|
131
104
|
align-items: center;
|
|
132
105
|
background: var(--browser-control-warning);
|
|
@@ -158,6 +131,7 @@
|
|
|
158
131
|
:host .banner .done,
|
|
159
132
|
:host .banner .cannot {
|
|
160
133
|
border: solid 1px currentcolor;
|
|
134
|
+
box-shadow: 0 2px 10px var(--browser-control-shadow);
|
|
161
135
|
color: inherit;
|
|
162
136
|
flex-shrink: 0;
|
|
163
137
|
}
|
|
@@ -171,12 +145,6 @@
|
|
|
171
145
|
box-shadow: none;
|
|
172
146
|
}
|
|
173
147
|
|
|
174
|
-
@media (prefers-reduced-motion: reduce) {
|
|
175
|
-
:host .cursor {
|
|
176
|
-
transition: none;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
148
|
@media print {
|
|
181
149
|
:host {
|
|
182
150
|
display: none !important;
|
|
@@ -184,10 +152,8 @@
|
|
|
184
152
|
}
|
|
185
153
|
|
|
186
154
|
@media (forced-colors: active) {
|
|
187
|
-
:host .frame,
|
|
188
|
-
:host .takeover,
|
|
189
|
-
:host .owner,
|
|
190
155
|
:host .banner {
|
|
191
|
-
|
|
156
|
+
background: Canvas;
|
|
157
|
+
color: CanvasText;
|
|
192
158
|
}
|
|
193
159
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Standalone extension interstitial. It intentionally does not load the token
|
|
3
|
+
* cascade; system colors follow the user's light, dark, and forced-color theme.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.extension-status-page {
|
|
7
|
+
background: Canvas;
|
|
8
|
+
color: CanvasText;
|
|
9
|
+
color-scheme: light dark;
|
|
10
|
+
display: grid;
|
|
11
|
+
font:
|
|
12
|
+
0.875rem/1.5 system-ui,
|
|
13
|
+
-apple-system,
|
|
14
|
+
BlinkMacSystemFont,
|
|
15
|
+
"Segoe UI",
|
|
16
|
+
Roboto,
|
|
17
|
+
sans-serif;
|
|
18
|
+
margin: 0;
|
|
19
|
+
min-block-size: 100dvb;
|
|
20
|
+
place-items: center;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.extension-status {
|
|
24
|
+
/* Mirrors --sigvelo-layout-gutter without loading the document token sheet. */
|
|
25
|
+
display: grid;
|
|
26
|
+
gap: 0.75rem;
|
|
27
|
+
justify-items: center;
|
|
28
|
+
max-inline-size: 30rem;
|
|
29
|
+
padding: 0.75rem;
|
|
30
|
+
text-align: center;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.extension-status h1 {
|
|
34
|
+
font-size: inherit;
|
|
35
|
+
font-weight: 600;
|
|
36
|
+
margin: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.extension-status p {
|
|
40
|
+
color: GrayText;
|
|
41
|
+
margin: 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.extension-status button {
|
|
45
|
+
font: inherit;
|
|
46
|
+
}
|
package/dist/styles/index.css
CHANGED
|
@@ -86,7 +86,6 @@
|
|
|
86
86
|
@import "./artifact.css" layer(components);
|
|
87
87
|
@import "./browser-live-view.css" layer(components);
|
|
88
88
|
@import "./browser-live-screen.css" layer(components);
|
|
89
|
-
@import "./browser-control-overlay.css" layer(components);
|
|
90
89
|
@import "./browser-run-panel.css" layer(components);
|
|
91
90
|
@import "./chain-of-thought.css" layer(components);
|
|
92
91
|
@import "./checkpoint.css" layer(components);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as MCP_SERVER_SETUP_AUTH, c as McpServerManualSetup, d as McpServerSetupAuthFieldName, f as McpServerSetupLink, h as getMcpServerRuntimeState, i as MANUAL_MCP_SERVER_CARDS, l as McpServerSetupAuth, m as getMcpServerIconSrc, n as DCR_MCP_SERVER_CARDS, o as McpServerCard, p as getMcpServerEntry, r as DEFAULT_MCP_SERVER_CARDS, s as McpServerCardIcon, t as CUSTOM_MCP_SERVER_CARD, u as McpServerSetupAuthField } from "../mcp-server-catalog-
|
|
1
|
+
import { a as MCP_SERVER_SETUP_AUTH, c as McpServerManualSetup, d as McpServerSetupAuthFieldName, f as McpServerSetupLink, h as getMcpServerRuntimeState, i as MANUAL_MCP_SERVER_CARDS, l as McpServerSetupAuth, m as getMcpServerIconSrc, n as DCR_MCP_SERVER_CARDS, o as McpServerCard, p as getMcpServerEntry, r as DEFAULT_MCP_SERVER_CARDS, s as McpServerCardIcon, t as CUSTOM_MCP_SERVER_CARD, u as McpServerSetupAuthField } from "../mcp-server-catalog-C_g7C-9o.js";
|
|
2
2
|
export { CUSTOM_MCP_SERVER_CARD, DCR_MCP_SERVER_CARDS, DEFAULT_MCP_SERVER_CARDS, MANUAL_MCP_SERVER_CARDS, MCP_SERVER_SETUP_AUTH, McpServerCard, McpServerCardIcon, McpServerManualSetup, McpServerSetupAuth, McpServerSetupAuthField, McpServerSetupAuthFieldName, McpServerSetupLink, getMcpServerEntry, getMcpServerIconSrc, getMcpServerRuntimeState };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { inferFaviconUrl } from "./favicon.js";
|
|
2
|
+
import { siAirtable, siAsana, siAtlassian, siCalendly, siCloudflare, siDatadog, siEgnyte, siGithub, siGitlab, siGrafana, siHubspot, siHuggingface, siLinear, siMiro, siNeon, siNotion, siPaypal, siPosthog, siPostman, siRailway, siSentry, siStripe, siSupabase, siWebflow, siWix, siZapier, siZoom } from "simple-icons";
|
|
2
3
|
//#region src/utils/mcp-server-catalog.ts
|
|
3
4
|
/**
|
|
4
5
|
* Read the complete state emitted by the pinned Agents runtime.
|
|
@@ -38,6 +39,40 @@ function normalizeMcpServerUrl(url) {
|
|
|
38
39
|
}
|
|
39
40
|
const DCR_CATEGORY = "Auto";
|
|
40
41
|
const MANUAL_CATEGORY = "Manual";
|
|
42
|
+
const SIMPLE_ICONS = Object.fromEntries([
|
|
43
|
+
siAirtable,
|
|
44
|
+
siAsana,
|
|
45
|
+
siAtlassian,
|
|
46
|
+
siCalendly,
|
|
47
|
+
siCloudflare,
|
|
48
|
+
siDatadog,
|
|
49
|
+
siEgnyte,
|
|
50
|
+
siGithub,
|
|
51
|
+
siGitlab,
|
|
52
|
+
siGrafana,
|
|
53
|
+
siHubspot,
|
|
54
|
+
siHuggingface,
|
|
55
|
+
siLinear,
|
|
56
|
+
siMiro,
|
|
57
|
+
siNeon,
|
|
58
|
+
siNotion,
|
|
59
|
+
siPaypal,
|
|
60
|
+
siPosthog,
|
|
61
|
+
siPostman,
|
|
62
|
+
siRailway,
|
|
63
|
+
siSentry,
|
|
64
|
+
siStripe,
|
|
65
|
+
siSupabase,
|
|
66
|
+
siWebflow,
|
|
67
|
+
siWix,
|
|
68
|
+
siZapier,
|
|
69
|
+
siZoom
|
|
70
|
+
].map((icon) => [icon.slug, icon.svg]));
|
|
71
|
+
function bundledSimpleIcon(server) {
|
|
72
|
+
const slug = server.id === "zoom-workspace" ? "zoom" : server.id.replaceAll("-", "");
|
|
73
|
+
const svg = SIMPLE_ICONS[slug];
|
|
74
|
+
return svg ? `data:image/svg+xml,${encodeURIComponent(svg)}` : void 0;
|
|
75
|
+
}
|
|
41
76
|
const MCP_SERVER_SETUP_AUTH = {
|
|
42
77
|
bearer: {
|
|
43
78
|
type: "bearer",
|
|
@@ -120,6 +155,8 @@ const CUSTOM_MCP_SERVER_CARD = {
|
|
|
120
155
|
function getMcpServerIconSrc(server) {
|
|
121
156
|
if (typeof server.icon === "string") return server.icon;
|
|
122
157
|
if (server.icon?.src) return server.icon.src;
|
|
158
|
+
const bundled = bundledSimpleIcon(server);
|
|
159
|
+
if (bundled) return bundled;
|
|
123
160
|
return inferFaviconUrl(server.url);
|
|
124
161
|
}
|
|
125
162
|
/** Remote MCP servers whose OAuth metadata exposes a registration_endpoint. */
|
|
@@ -425,6 +462,31 @@ const MANUAL_MCP_SERVER_CARDS = [
|
|
|
425
462
|
]
|
|
426
463
|
}
|
|
427
464
|
},
|
|
465
|
+
{
|
|
466
|
+
id: "github",
|
|
467
|
+
name: "GitHub",
|
|
468
|
+
url: "https://api.githubcopilot.com/mcp/",
|
|
469
|
+
description: "Clone, push, and open pull requests as a connected GitHub account",
|
|
470
|
+
category: MANUAL_CATEGORY,
|
|
471
|
+
manualSetup: {
|
|
472
|
+
auth: {
|
|
473
|
+
type: "bearer",
|
|
474
|
+
label: "Personal access token (classic)",
|
|
475
|
+
fields: [{
|
|
476
|
+
name: "bearerToken",
|
|
477
|
+
label: "Personal access token",
|
|
478
|
+
inputType: "password",
|
|
479
|
+
placeholder: "ghp_…",
|
|
480
|
+
required: true
|
|
481
|
+
}]
|
|
482
|
+
},
|
|
483
|
+
description: "Paste a classic personal access token with all scopes from the agent's own GitHub account — the account is the access boundary. Git and the GitHub API both authenticate as this account.",
|
|
484
|
+
links: [{
|
|
485
|
+
label: "Create a classic token",
|
|
486
|
+
url: "https://github.com/settings/tokens"
|
|
487
|
+
}]
|
|
488
|
+
}
|
|
489
|
+
},
|
|
428
490
|
{
|
|
429
491
|
id: "gmail",
|
|
430
492
|
name: "Gmail",
|
|
@@ -870,6 +932,12 @@ const DEFAULT_MCP_SERVER_CARDS = [
|
|
|
870
932
|
...DCR_MCP_SERVER_CARDS,
|
|
871
933
|
CUSTOM_MCP_SERVER_CARD,
|
|
872
934
|
...MANUAL_MCP_SERVER_CARDS
|
|
873
|
-
]
|
|
935
|
+
].map((server) => {
|
|
936
|
+
const icon = bundledSimpleIcon(server);
|
|
937
|
+
return icon ? {
|
|
938
|
+
...server,
|
|
939
|
+
icon
|
|
940
|
+
} : server;
|
|
941
|
+
});
|
|
874
942
|
//#endregion
|
|
875
943
|
export { CUSTOM_MCP_SERVER_CARD, DCR_MCP_SERVER_CARDS, DEFAULT_MCP_SERVER_CARDS, MANUAL_MCP_SERVER_CARDS, MCP_SERVER_SETUP_AUTH, getMcpServerEntry, getMcpServerIconSrc, getMcpServerRuntimeState };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-b/react-components",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.5",
|
|
4
4
|
"description": "MCP-B React components built on Base UI and shared design tokens, including Cloudflare Think chat primitives.",
|
|
5
5
|
"homepage": "https://design-system.sigvelo.com",
|
|
6
6
|
"bugs": {
|
|
@@ -50,10 +50,11 @@
|
|
|
50
50
|
"react-icons": "^5.7.0",
|
|
51
51
|
"rehype-slug": "^6.0.0",
|
|
52
52
|
"shiki": "^3.23.0",
|
|
53
|
+
"simple-icons": "16.28.0",
|
|
53
54
|
"streamdown": "^2.5.0",
|
|
54
55
|
"unist-util-visit": "^5.1.0",
|
|
55
56
|
"yet-another-react-lightbox": "^3.32.2",
|
|
56
|
-
"@mcp-b/design-tokens": "0.46.
|
|
57
|
+
"@mcp-b/design-tokens": "0.46.5"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@ai-sdk/react": "^3.0.249",
|