@parhelia/core 0.4.12872 → 0.4.12875
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/config/config.js +9 -2
- package/dist/config/config.js.map +1 -1
- package/dist/editor/ContentTree.js +11 -2
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/client/EditorShell.js +8 -3
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +5 -0
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +44 -30
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.d.ts +6 -0
- package/dist/editor/client/itemsRepository.js +3 -0
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/reviews/commentTargetPicker.d.ts +4 -0
- package/dist/editor/reviews/commentTargetPicker.js +4 -0
- package/dist/editor/reviews/commentTargetPicker.js.map +1 -1
- package/dist/editor/services/analyticsService.d.ts +131 -0
- package/dist/editor/services/analyticsService.js +17 -0
- package/dist/editor/services/analyticsService.js.map +1 -0
- package/dist/editor/settings/panels/McpAccessPanel.d.ts +3 -3
- package/dist/editor/settings/panels/McpAccessPanel.js +18 -38
- package/dist/editor/settings/panels/McpAccessPanel.js.map +1 -1
- package/dist/editor/settings/panels/McpGrantList.d.ts +8 -0
- package/dist/editor/settings/panels/McpGrantList.js +21 -0
- package/dist/editor/settings/panels/McpGrantList.js.map +1 -0
- package/dist/editor/settings/panels/McpServerPanel.d.ts +7 -0
- package/dist/editor/settings/panels/McpServerPanel.js +84 -0
- package/dist/editor/settings/panels/McpServerPanel.js.map +1 -0
- package/dist/editor/settings/panels/index.d.ts +1 -0
- package/dist/editor/settings/panels/index.js +1 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/sidebar/analytics/PagePerformance.d.ts +6 -0
- package/dist/editor/sidebar/analytics/PagePerformance.js +142 -0
- package/dist/editor/sidebar/analytics/PagePerformance.js.map +1 -0
- package/dist/editor/sidebar/analytics/analyticsFormat.d.ts +10 -0
- package/dist/editor/sidebar/analytics/analyticsFormat.js +57 -0
- package/dist/editor/sidebar/analytics/analyticsFormat.js.map +1 -0
- package/dist/editor/treeRelevantFields.d.ts +16 -0
- package/dist/editor/treeRelevantFields.js +37 -0
- package/dist/editor/treeRelevantFields.js.map +1 -0
- package/dist/editor/ui/PublishDialog.d.ts +5 -1
- package/dist/editor/ui/PublishDialog.js +98 -17
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/WorkboxItemsTable.d.ts +17 -2
- package/dist/editor/ui/WorkboxItemsTable.js +26 -12
- package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
- package/dist/editor/ui/publishReadiness.d.ts +11 -1
- package/dist/editor/ui/publishReadiness.js +34 -30
- package/dist/editor/ui/publishReadiness.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/coalescedReload.d.ts +19 -0
- package/dist/lib/coalescedReload.js +53 -0
- package/dist/lib/coalescedReload.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export type AnalyticsStatus = "ok" | "not-configured" | "no-url" | "no-data" | "error";
|
|
2
|
+
export type AnalyticsDateWindow = {
|
|
3
|
+
startDate: string;
|
|
4
|
+
endDate: string;
|
|
5
|
+
};
|
|
6
|
+
export type AnalyticsWindowInfo = {
|
|
7
|
+
days: number;
|
|
8
|
+
current: AnalyticsDateWindow;
|
|
9
|
+
previous: AnalyticsDateWindow;
|
|
10
|
+
lastCompleteDay: string;
|
|
11
|
+
timeZone: string;
|
|
12
|
+
timeZoneResolved: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type AnalyticsMetric = {
|
|
15
|
+
key: string;
|
|
16
|
+
label: string;
|
|
17
|
+
definition: string;
|
|
18
|
+
source?: string;
|
|
19
|
+
denominator?: string;
|
|
20
|
+
unit: "count" | "seconds" | "ratio" | "position";
|
|
21
|
+
current?: number;
|
|
22
|
+
previous?: number;
|
|
23
|
+
changePercent?: number;
|
|
24
|
+
};
|
|
25
|
+
export type AnalyticsBreakdownRow = {
|
|
26
|
+
label: string;
|
|
27
|
+
views: number;
|
|
28
|
+
users: number;
|
|
29
|
+
};
|
|
30
|
+
export type AnalyticsNamedCount = {
|
|
31
|
+
name: string;
|
|
32
|
+
current: number;
|
|
33
|
+
previous?: number;
|
|
34
|
+
};
|
|
35
|
+
export type AnalyticsTrendPoint = {
|
|
36
|
+
date: string;
|
|
37
|
+
views: number;
|
|
38
|
+
users: number;
|
|
39
|
+
};
|
|
40
|
+
export type AnalyticsQualityFlags = {
|
|
41
|
+
thresholded: boolean;
|
|
42
|
+
sampled: boolean;
|
|
43
|
+
rowsGroupedIntoOther: boolean;
|
|
44
|
+
emptyReason?: string;
|
|
45
|
+
notes: string[];
|
|
46
|
+
};
|
|
47
|
+
export type SearchQueryRow = {
|
|
48
|
+
query: string;
|
|
49
|
+
clicks: number;
|
|
50
|
+
impressions: number;
|
|
51
|
+
ctr: number;
|
|
52
|
+
position: number;
|
|
53
|
+
};
|
|
54
|
+
export type SearchConsoleReport = {
|
|
55
|
+
status: AnalyticsStatus;
|
|
56
|
+
message?: string;
|
|
57
|
+
property?: string;
|
|
58
|
+
current?: AnalyticsDateWindow;
|
|
59
|
+
previous?: AnalyticsDateWindow;
|
|
60
|
+
totals: AnalyticsMetric[];
|
|
61
|
+
topQueries: SearchQueryRow[];
|
|
62
|
+
searchConsoleUrl?: string;
|
|
63
|
+
};
|
|
64
|
+
export type ClaritySignal = {
|
|
65
|
+
key: string;
|
|
66
|
+
label: string;
|
|
67
|
+
definition: string;
|
|
68
|
+
sessionsPercent?: number;
|
|
69
|
+
sessions?: number;
|
|
70
|
+
count?: number;
|
|
71
|
+
};
|
|
72
|
+
export type ClarityPageReport = {
|
|
73
|
+
status: AnalyticsStatus;
|
|
74
|
+
message?: string;
|
|
75
|
+
projectId: string;
|
|
76
|
+
days: number;
|
|
77
|
+
fetchedAtUtc: string;
|
|
78
|
+
url?: string;
|
|
79
|
+
otherUrlVariants: number;
|
|
80
|
+
sessions?: number;
|
|
81
|
+
averageScrollDepthPercent?: number;
|
|
82
|
+
activeTimeSeconds?: number;
|
|
83
|
+
totalTimeSeconds?: number;
|
|
84
|
+
signals: ClaritySignal[];
|
|
85
|
+
notes: string[];
|
|
86
|
+
heatmapUrl?: string;
|
|
87
|
+
recordingsUrl?: string;
|
|
88
|
+
};
|
|
89
|
+
export type PageAnalyticsReport = {
|
|
90
|
+
status: AnalyticsStatus;
|
|
91
|
+
message?: string;
|
|
92
|
+
page?: {
|
|
93
|
+
itemId: string;
|
|
94
|
+
itemName?: string;
|
|
95
|
+
language: string;
|
|
96
|
+
siteName?: string;
|
|
97
|
+
host?: string;
|
|
98
|
+
pageUrls: string[];
|
|
99
|
+
pagePaths: string[];
|
|
100
|
+
};
|
|
101
|
+
window?: AnalyticsWindowInfo;
|
|
102
|
+
headline: AnalyticsMetric[];
|
|
103
|
+
sessionContext: AnalyticsMetric[];
|
|
104
|
+
keyEvents: AnalyticsNamedCount[];
|
|
105
|
+
trend: AnalyticsTrendPoint[];
|
|
106
|
+
channels: AnalyticsBreakdownRow[];
|
|
107
|
+
devices: AnalyticsBreakdownRow[];
|
|
108
|
+
countries: AnalyticsBreakdownRow[];
|
|
109
|
+
scroll90Events?: number;
|
|
110
|
+
outboundClicks: AnalyticsNamedCount[];
|
|
111
|
+
publishEvents: {
|
|
112
|
+
date: string;
|
|
113
|
+
userName?: string;
|
|
114
|
+
}[];
|
|
115
|
+
quality: AnalyticsQualityFlags;
|
|
116
|
+
ga4ReportUrl?: string;
|
|
117
|
+
search?: SearchConsoleReport;
|
|
118
|
+
clarity?: ClarityPageReport;
|
|
119
|
+
generatedAtUtc: string;
|
|
120
|
+
};
|
|
121
|
+
export type AnalyticsConnectionTestResult = {
|
|
122
|
+
siteName: string;
|
|
123
|
+
credentialOk: boolean;
|
|
124
|
+
credentialMessage?: string;
|
|
125
|
+
ga4Status?: AnalyticsStatus;
|
|
126
|
+
ga4Message?: string;
|
|
127
|
+
searchConsoleStatus?: AnalyticsStatus;
|
|
128
|
+
searchConsoleMessage?: string;
|
|
129
|
+
};
|
|
130
|
+
export declare function getPageAnalytics(itemId: string, language: string, siteName?: string, signal?: AbortSignal): Promise<PageAnalyticsReport>;
|
|
131
|
+
export declare function testAnalyticsConnection(siteName: string): Promise<AnalyticsConnectionTestResult>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { get } from "./serviceHelper";
|
|
2
|
+
export async function getPageAnalytics(itemId, language, siteName, signal) {
|
|
3
|
+
const params = new URLSearchParams({ itemId, language });
|
|
4
|
+
if (siteName)
|
|
5
|
+
params.set("site", siteName);
|
|
6
|
+
const result = await get(`/parhelia/analytics/page?${params.toString()}`, undefined, signal);
|
|
7
|
+
if (result.type !== "success" || !result.data)
|
|
8
|
+
throw new Error(result.summary || "Analytics could not be loaded.");
|
|
9
|
+
return result.data;
|
|
10
|
+
}
|
|
11
|
+
export async function testAnalyticsConnection(siteName) {
|
|
12
|
+
const result = await get(`/parhelia/analytics/test?site=${encodeURIComponent(siteName)}`);
|
|
13
|
+
if (result.type !== "success" || !result.data)
|
|
14
|
+
throw new Error(result.summary || "The connection test failed.");
|
|
15
|
+
return result.data;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=analyticsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsService.js","sourceRoot":"","sources":["../../../src/editor/services/analyticsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AA6HtC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,QAAgB,EAChB,QAAiB,EACjB,MAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,4BAA4B,MAAM,CAAC,QAAQ,EAAE,EAAE,EAC/C,SAAS,EACT,MAAM,CACP,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI;QAC3C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,iCAAiC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAChE,CAAC;IACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI;QAC3C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,6BAA6B,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* "MCP Access" settings: the MCP server address for clients
|
|
3
|
-
* (with revoke)
|
|
4
|
-
*
|
|
2
|
+
* Personal "MCP Access" settings: the MCP server address for clients and the user's own connected
|
|
3
|
+
* clients (with revoke). Server configuration and everyone's connections live in the System group's
|
|
4
|
+
* "MCP Server" panel.
|
|
5
5
|
*/
|
|
6
6
|
export declare function McpAccessPanel(): import("react").JSX.Element;
|
|
7
7
|
export default McpAccessPanel;
|
|
@@ -1,48 +1,35 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
-
import { AlertCircle, KeyRound, PlugZap, RefreshCw
|
|
3
|
+
import { AlertCircle, KeyRound, PlugZap, RefreshCw } from "lucide-react";
|
|
4
4
|
import { Button } from "../../../components/ui/button";
|
|
5
|
-
import { Alert, AlertDescription } from "../../../components/ui/alert";
|
|
6
5
|
import { CopyButton } from "../../../components/ui/copy-button";
|
|
7
|
-
import {
|
|
6
|
+
import { useEditContext } from "../../client/editContext";
|
|
8
7
|
import { mcpAccessService, } from "../../services/mcpAccessService";
|
|
9
8
|
import { SettingsCard as Card } from "../SettingsCard";
|
|
10
9
|
import { SettingsPanelLayout } from "../SettingsPanelLayout";
|
|
11
10
|
import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
|
|
12
|
-
import {
|
|
13
|
-
const scopeLabels = {
|
|
14
|
-
"parhelia:read": "Read",
|
|
15
|
-
"parhelia:write": "Change",
|
|
16
|
-
"parhelia:agents": "Agents",
|
|
17
|
-
};
|
|
18
|
-
function formatDate(value) {
|
|
19
|
-
if (!value)
|
|
20
|
-
return "never";
|
|
21
|
-
const date = new Date(value);
|
|
22
|
-
return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
|
|
23
|
-
}
|
|
11
|
+
import { McpGrantList } from "./McpGrantList";
|
|
24
12
|
const getErrorMessage = (error, fallback) => error instanceof Error ? error.message : fallback;
|
|
25
13
|
/**
|
|
26
|
-
* "MCP Access" settings: the MCP server address for clients
|
|
27
|
-
* (with revoke)
|
|
28
|
-
*
|
|
14
|
+
* Personal "MCP Access" settings: the MCP server address for clients and the user's own connected
|
|
15
|
+
* clients (with revoke). Server configuration and everyone's connections live in the System group's
|
|
16
|
+
* "MCP Server" panel.
|
|
29
17
|
*/
|
|
30
18
|
export function McpAccessPanel() {
|
|
19
|
+
const editContext = useEditContext();
|
|
20
|
+
const isAdmin = editContext?.userInfo?.user?.isAdministrator ?? false;
|
|
31
21
|
const setSettingsHeaderActions = useRequiredSettingsHeaderActions();
|
|
32
22
|
const [status, setStatus] = useState(null);
|
|
33
23
|
const [grants, setGrants] = useState([]);
|
|
34
|
-
const [showAll, setShowAll] = useState(false);
|
|
35
24
|
const [loading, setLoading] = useState(true);
|
|
36
25
|
const [error, setError] = useState(null);
|
|
37
|
-
const [showSettings, setShowSettings] = useState(false);
|
|
38
|
-
const isAdmin = !!status?.settingsItemId;
|
|
39
26
|
const load = useCallback(async () => {
|
|
40
27
|
setLoading(true);
|
|
41
28
|
setError(null);
|
|
42
29
|
try {
|
|
43
30
|
const [nextStatus, nextGrants] = await Promise.all([
|
|
44
31
|
mcpAccessService.getStatus(),
|
|
45
|
-
mcpAccessService.getGrants(
|
|
32
|
+
mcpAccessService.getGrants(),
|
|
46
33
|
]);
|
|
47
34
|
setStatus(nextStatus);
|
|
48
35
|
setGrants(nextGrants);
|
|
@@ -53,11 +40,11 @@ export function McpAccessPanel() {
|
|
|
53
40
|
finally {
|
|
54
41
|
setLoading(false);
|
|
55
42
|
}
|
|
56
|
-
}, [
|
|
43
|
+
}, []);
|
|
57
44
|
useEffect(() => {
|
|
58
45
|
void load();
|
|
59
46
|
}, [load]);
|
|
60
|
-
const headerActions = useMemo(() => (
|
|
47
|
+
const headerActions = useMemo(() => (_jsx(Button, { size: "sm", variant: "outline", onClick: () => void load(), disabled: loading, title: "Refresh", children: _jsx(RefreshCw, { className: loading ? "h-4 w-4 animate-spin" : "h-4 w-4", strokeWidth: 1 }) })), [load, loading]);
|
|
61
48
|
useEffect(() => {
|
|
62
49
|
if (!setSettingsHeaderActions)
|
|
63
50
|
return;
|
|
@@ -73,24 +60,17 @@ export function McpAccessPanel() {
|
|
|
73
60
|
setError(getErrorMessage(e, "Failed to revoke the connection"));
|
|
74
61
|
}
|
|
75
62
|
};
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
setError(getErrorMessage(e, "Failed to delete the client"));
|
|
83
|
-
}
|
|
63
|
+
const openServerSettings = () => {
|
|
64
|
+
editContext?.switchWorkspace("settings", {
|
|
65
|
+
skipConfirmation: true,
|
|
66
|
+
urlParams: { ccpanel: "mcp-server" },
|
|
67
|
+
});
|
|
84
68
|
};
|
|
85
69
|
const serverUrl = status?.serverUrl ?? "";
|
|
86
70
|
const claudeCommand = serverUrl ? `claude mcp add --transport http parhelia ${serverUrl}` : "";
|
|
87
|
-
|
|
71
|
+
return (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "space-y-4", "data-testid": "mcp-access-panel", children: [error && (_jsxs("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red flex items-start gap-2 rounded border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { children: error })] })), status && (_jsx(Card, { icon: _jsx(PlugZap, { strokeWidth: 1 }), title: "Connect an MCP client", description: status.enabled
|
|
88
72
|
? "Add this server to Claude Code, Cursor or another MCP client and sign in when the client asks."
|
|
89
|
-
: "The MCP server is
|
|
90
|
-
if (showSettings && isAdmin) {
|
|
91
|
-
return _jsx(McpAccessSettingsView, { onSaved: () => void load() });
|
|
92
|
-
}
|
|
93
|
-
return mainContent;
|
|
73
|
+
: "The MCP server is not enabled on this instance.", children: status.enabled && serverUrl ? (_jsxs("div", { className: "space-y-3 text-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "bg-neutral-grey-5 rounded px-2 py-1 break-all", "data-testid": "mcp-server-url", children: serverUrl }), _jsx(CopyButton, { textToCopy: serverUrl, iconOnly: true })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "bg-neutral-grey-5 rounded px-2 py-1 break-all", children: claudeCommand }), _jsx(CopyButton, { textToCopy: claudeCommand, iconOnly: true })] }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Register the server under the name \"parhelia\" so tool names stay within Claude's limits. The client opens a browser to ask for your approval." })] })) : (_jsx("p", { className: "text-neutral-grey-50 text-sm", children: isAdmin ? (_jsx(Button, { size: "sm", variant: "link", className: "h-auto p-0", onClick: openServerSettings, "data-testid": "mcp-access-open-server-settings", children: "Set it up under System \u203A MCP Server." })) : ("Ask an administrator to enable it.") })) })), _jsx(Card, { icon: _jsx(KeyRound, { strokeWidth: 1 }), title: "Your connections", description: "MCP clients you allowed to act with your Sitecore permissions. Revoking stops them immediately, including agents they started.", children: _jsx(McpGrantList, { grants: grants, loading: loading, onRevoke: (grant) => void revoke(grant) }) })] }) }));
|
|
94
74
|
}
|
|
95
75
|
export default McpAccessPanel;
|
|
96
76
|
//# sourceMappingURL=McpAccessPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpAccessPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpAccessPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"McpAccessPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpAccessPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpGrant } from "../../services/mcpAccessService";
|
|
2
|
+
/** The MCP connections (grants) of the "MCP Access" and "MCP Server" panels, each with a revoke button. */
|
|
3
|
+
export declare function McpGrantList({ grants, loading, showUserName, onRevoke, }: {
|
|
4
|
+
grants: McpGrant[];
|
|
5
|
+
loading: boolean;
|
|
6
|
+
showUserName?: boolean;
|
|
7
|
+
onRevoke: (grant: McpGrant) => void;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { DeleteButton } from "../../../components/ui/delete-button";
|
|
3
|
+
const scopeLabels = {
|
|
4
|
+
"parhelia:read": "Read",
|
|
5
|
+
"parhelia:write": "Change",
|
|
6
|
+
"parhelia:agents": "Agents",
|
|
7
|
+
};
|
|
8
|
+
function formatDate(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return "never";
|
|
11
|
+
const date = new Date(value);
|
|
12
|
+
return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
|
|
13
|
+
}
|
|
14
|
+
/** The MCP connections (grants) of the "MCP Access" and "MCP Server" panels, each with a revoke button. */
|
|
15
|
+
export function McpGrantList({ grants, loading, showUserName = false, onRevoke, }) {
|
|
16
|
+
if (grants.length === 0 && !loading) {
|
|
17
|
+
return (_jsx("p", { className: "text-neutral-grey-50 text-sm", "data-testid": "mcp-grants-empty", children: "No connected clients." }));
|
|
18
|
+
}
|
|
19
|
+
return (_jsx("ul", { className: "divide-border-default divide-y", "data-testid": "mcp-grants", children: grants.map((grant) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-2", "data-testid": "mcp-grant", children: [_jsxs("div", { className: "min-w-0 text-sm", children: [_jsx("div", { className: "truncate font-medium", children: grant.clientName }), _jsxs("div", { className: "text-neutral-grey-50 truncate text-xs", children: [grant.scopes.map((scope) => scopeLabels[scope] ?? scope).join(", "), grant.askBeforeWrites ? " · asks before changes" : "", showUserName ? ` · ${grant.userName}` : "", ` · last used ${formatDate(grant.lastUsedAt)}`] })] }), _jsx(DeleteButton, { label: `Revoke ${grant.clientName}`, title: "Revoke", onClick: () => onRevoke(grant), "data-testid": "mcp-grant-revoke" })] }, grant.grantId))) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=McpGrantList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpGrantList.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpGrantList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGpE,MAAM,WAAW,GAA2B;IAC1C,eAAe,EAAE,MAAM;IACvB,gBAAgB,EAAE,QAAQ;IAC1B,iBAAiB,EAAE,QAAQ;CAC5B,CAAC;AAEF,SAAS,UAAU,CAAC,KAAqB;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtE,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,EACN,OAAO,EACP,YAAY,GAAG,KAAK,EACpB,QAAQ,GAMT;IACC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CACL,YAAG,SAAS,EAAC,8BAA8B,iBAAa,kBAAkB,sCAEtE,CACL,CAAC;IACJ,CAAC;IAED,OAAO,CACL,aAAI,SAAS,EAAC,gCAAgC,iBAAa,YAAY,YACpE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,cAAwB,SAAS,EAAC,8CAA8C,iBAAa,WAAW,aACtG,eAAK,SAAS,EAAC,iBAAiB,aAC9B,cAAK,SAAS,EAAC,sBAAsB,YAAE,KAAK,CAAC,UAAU,GAAO,EAC9D,eAAK,SAAS,EAAC,uCAAuC,aACnD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EACnE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EACrD,YAAY,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAC1C,gBAAgB,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAC3C,IACF,EACN,KAAC,YAAY,IACX,KAAK,EAAE,UAAU,KAAK,CAAC,UAAU,EAAE,EACnC,KAAK,EAAC,QAAQ,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAClB,kBAAkB,GAC9B,KAfK,KAAK,CAAC,OAAO,CAgBjB,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Administrator "MCP Server" settings (System group): whether the server runs, its configuration
|
|
3
|
+
* problems, every user's connections, the registered clients, and a settings form for the
|
|
4
|
+
* MCP Access settings item. Users connect their own clients in the personal "MCP Access" panel.
|
|
5
|
+
*/
|
|
6
|
+
export declare function McpServerPanel(): import("react").JSX.Element;
|
|
7
|
+
export default McpServerPanel;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { AlertCircle, KeyRound, RefreshCw, ServerCog, Settings } from "lucide-react";
|
|
4
|
+
import { Button } from "../../../components/ui/button";
|
|
5
|
+
import { Alert, AlertDescription } from "../../../components/ui/alert";
|
|
6
|
+
import { CopyButton } from "../../../components/ui/copy-button";
|
|
7
|
+
import { DeleteButton } from "../../../components/ui/delete-button";
|
|
8
|
+
import { mcpAccessService, } from "../../services/mcpAccessService";
|
|
9
|
+
import { SettingsCard as Card } from "../SettingsCard";
|
|
10
|
+
import { SettingsPanelLayout } from "../SettingsPanelLayout";
|
|
11
|
+
import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
|
|
12
|
+
import { McpAccessSettingsView } from "./McpAccessSettingsView";
|
|
13
|
+
import { McpGrantList } from "./McpGrantList";
|
|
14
|
+
const getErrorMessage = (error, fallback) => error instanceof Error ? error.message : fallback;
|
|
15
|
+
/**
|
|
16
|
+
* Administrator "MCP Server" settings (System group): whether the server runs, its configuration
|
|
17
|
+
* problems, every user's connections, the registered clients, and a settings form for the
|
|
18
|
+
* MCP Access settings item. Users connect their own clients in the personal "MCP Access" panel.
|
|
19
|
+
*/
|
|
20
|
+
export function McpServerPanel() {
|
|
21
|
+
const setSettingsHeaderActions = useRequiredSettingsHeaderActions();
|
|
22
|
+
const [status, setStatus] = useState(null);
|
|
23
|
+
const [grants, setGrants] = useState([]);
|
|
24
|
+
const [loading, setLoading] = useState(true);
|
|
25
|
+
const [error, setError] = useState(null);
|
|
26
|
+
const [showSettings, setShowSettings] = useState(false);
|
|
27
|
+
// The status only carries the settings item for administrators, and only when the item exists.
|
|
28
|
+
const canEditSettings = !!status?.settingsItemId;
|
|
29
|
+
const load = useCallback(async () => {
|
|
30
|
+
setLoading(true);
|
|
31
|
+
setError(null);
|
|
32
|
+
try {
|
|
33
|
+
const [nextStatus, nextGrants] = await Promise.all([
|
|
34
|
+
mcpAccessService.getStatus(),
|
|
35
|
+
mcpAccessService.getGrants(true),
|
|
36
|
+
]);
|
|
37
|
+
setStatus(nextStatus);
|
|
38
|
+
setGrants(nextGrants);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
setError(getErrorMessage(e, "Failed to load the MCP server status"));
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
setLoading(false);
|
|
45
|
+
}
|
|
46
|
+
}, []);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
void load();
|
|
49
|
+
}, [load]);
|
|
50
|
+
const headerActions = useMemo(() => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { size: "sm", variant: "outline", onClick: () => void load(), disabled: loading, title: "Refresh", children: _jsx(RefreshCw, { className: loading ? "h-4 w-4 animate-spin" : "h-4 w-4", strokeWidth: 1 }) }), canEditSettings && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => setShowSettings((value) => !value), "data-testid": "mcp-server-settings-toggle", children: [_jsx(Settings, { className: "mr-1 h-4 w-4", strokeWidth: 1 }), showSettings ? "Back to overview" : "Settings"] }))] })), [canEditSettings, load, loading, showSettings]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!setSettingsHeaderActions)
|
|
53
|
+
return;
|
|
54
|
+
setSettingsHeaderActions(headerActions);
|
|
55
|
+
return () => setSettingsHeaderActions(null);
|
|
56
|
+
}, [headerActions, setSettingsHeaderActions]);
|
|
57
|
+
const revoke = async (grant) => {
|
|
58
|
+
try {
|
|
59
|
+
await mcpAccessService.revokeGrant(grant.grantId);
|
|
60
|
+
await load();
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
setError(getErrorMessage(e, "Failed to revoke the connection"));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const deleteClient = async (clientKey) => {
|
|
67
|
+
try {
|
|
68
|
+
await mcpAccessService.deleteClient(clientKey);
|
|
69
|
+
await load();
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
setError(getErrorMessage(e, "Failed to delete the client"));
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
if (showSettings && canEditSettings) {
|
|
76
|
+
return _jsx(McpAccessSettingsView, { onSaved: () => void load() });
|
|
77
|
+
}
|
|
78
|
+
const serverUrl = status?.serverUrl ?? "";
|
|
79
|
+
return (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "space-y-4", "data-testid": "mcp-server-panel", children: [error && (_jsxs("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red flex items-start gap-2 rounded border p-3 text-sm", children: [_jsx(AlertCircle, { className: "mt-0.5 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { children: error })] })), status && (_jsxs(Card, { icon: _jsx(ServerCog, { strokeWidth: 1 }), title: "Server", description: status.enabled
|
|
80
|
+
? "The MCP server is running. Users connect their clients under Personal › MCP Access."
|
|
81
|
+
: "The MCP server is switched off on this instance.", children: [status.enabled && serverUrl ? (_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("code", { className: "bg-neutral-grey-5 rounded px-2 py-1 break-all", "data-testid": "mcp-server-url", children: serverUrl }), _jsx(CopyButton, { textToCopy: serverUrl, iconOnly: true })] })) : (canEditSettings && (_jsx("p", { className: "text-neutral-grey-50 text-sm", children: _jsx(Button, { size: "sm", variant: "link", className: "h-auto p-0", onClick: () => setShowSettings(true), children: "Open the settings to enable it." }) }))), status.problems.length > 0 && (_jsx(Alert, { variant: "warning", className: "mt-3", "data-testid": "mcp-server-problems", children: _jsx(AlertDescription, { children: _jsx("ul", { className: "list-disc space-y-1 pl-4", children: status.problems.map((problem) => (_jsx("li", { children: problem }, problem))) }) }) }))] })), _jsx(Card, { icon: _jsx(KeyRound, { strokeWidth: 1 }), title: "All connections", description: "MCP clients that users allowed to act with their Sitecore permissions. Revoking stops a client immediately, including agents it started.", children: _jsx(McpGrantList, { grants: grants, loading: loading, showUserName: true, onRevoke: (grant) => void revoke(grant) }) }), status?.clients && status.clients.length > 0 && (_jsx(Card, { icon: _jsx(Settings, { strokeWidth: 1 }), title: "Registered clients", description: "Clients known to the authorization server. Deleting a client revokes all its connections.", defaultCollapsed: "yes", collapsible: "yes", children: _jsx("ul", { className: "divide-border-default divide-y", children: status.clients.map((client) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-2", children: [_jsxs("div", { className: "min-w-0 text-sm", children: [_jsx("div", { className: "truncate font-medium", children: client.clientName }), _jsxs("div", { className: "text-neutral-grey-50 truncate text-xs", children: [client.kind, " \u00B7 ", client.clientId] })] }), client.clientKey && (_jsx(DeleteButton, { label: `Delete ${client.clientName}`, title: "Delete client", onClick: () => void deleteClient(client.clientKey) }))] }, `${client.kind}:${client.clientId}`))) }) }))] }) }));
|
|
82
|
+
}
|
|
83
|
+
export default McpServerPanel;
|
|
84
|
+
//# sourceMappingURL=McpServerPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpServerPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/McpServerPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export { ProvidersPanel } from "./ProvidersPanel";
|
|
7
7
|
export { McpToolsPanel } from "./McpToolsPanel";
|
|
8
8
|
export { McpAccessPanel } from "./McpAccessPanel";
|
|
9
|
+
export { McpServerPanel } from "./McpServerPanel";
|
|
9
10
|
export { ModelsPanel } from "./ModelsPanel";
|
|
10
11
|
export { AgentsPanel } from "./AgentsPanel";
|
|
11
12
|
export { JavaScriptToolsPanel } from "./JavaScriptToolsPanel";
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export { ProvidersPanel } from "./ProvidersPanel";
|
|
7
7
|
export { McpToolsPanel } from "./McpToolsPanel";
|
|
8
8
|
export { McpAccessPanel } from "./McpAccessPanel";
|
|
9
|
+
export { McpServerPanel } from "./McpServerPanel";
|
|
9
10
|
export { ModelsPanel } from "./ModelsPanel";
|
|
10
11
|
export { AgentsPanel } from "./AgentsPanel";
|
|
11
12
|
export { JavaScriptToolsPanel } from "./JavaScriptToolsPanel";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "How much is this page used?" — GA4 metrics for the current item, site and language, plus
|
|
3
|
+
* Search Console when configured. Every number shows its definition and window; "no data" is
|
|
4
|
+
* never shown as zero.
|
|
5
|
+
*/
|
|
6
|
+
export declare function PagePerformance(): import("react").JSX.Element | null;
|