@parhelia/core 0.1.11151 → 0.1.11180
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/agents-view/AgentsInbox.d.ts +2 -1
- package/dist/agents-view/AgentsInbox.js +2 -2
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsView.js +30 -1
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/components/ui/card.d.ts +1 -1
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +1 -1
- package/dist/components/ui/paste-button.js +79 -22
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/config/config.js +83 -51
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +29 -4
- package/dist/editor/ContentTree.js +92 -22
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.d.ts +1 -0
- package/dist/editor/FieldActionsOverlay.js +17 -1
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldListField.js +1 -1
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +33 -24
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.js +2 -2
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/PictureEditor.js +1 -1
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +63 -26
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/Agents.js +7 -2
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/client/EditorShell.js +178 -79
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/OperationDialogContent.d.ts +13 -0
- package/dist/editor/client/OperationDialogContent.js +13 -0
- package/dist/editor/client/OperationDialogContent.js.map +1 -0
- package/dist/editor/client/editContext.d.ts +2 -0
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useGlobalEditorKeyDown.js +5 -2
- package/dist/editor/client/hooks/useGlobalEditorKeyDown.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +4 -0
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +2 -2
- package/dist/editor/client/hooks/useSocketMessageHandler.js +5 -7
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -0
- package/dist/editor/client/operations.js +332 -8
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.js +1 -1
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +0 -1
- package/dist/editor/commands/itemCommands.js +1 -16
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/undo.js +6 -2
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +56 -2
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +5 -4
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +5 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +118 -13
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +1 -1
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/services/editService.d.ts +20 -3
- package/dist/editor/services/editService.js +17 -17
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/indexService.d.ts +4 -1
- package/dist/editor/services/indexService.js +12 -0
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/services/serviceHelper.js +1 -0
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/settings/About.d.ts +1 -0
- package/dist/editor/settings/About.js +9 -0
- package/dist/editor/settings/About.js.map +1 -0
- package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
- package/dist/editor/settings/AllAgentsPanel.js +126 -0
- package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
- package/dist/editor/settings/IndexOverview.d.ts +1 -0
- package/dist/editor/settings/IndexOverview.js +471 -0
- package/dist/editor/settings/IndexOverview.js.map +1 -0
- package/dist/editor/settings/Info.d.ts +1 -0
- package/dist/editor/settings/Info.js +11 -0
- package/dist/editor/settings/Info.js.map +1 -0
- package/dist/editor/settings/LatestFeedback.d.ts +1 -0
- package/dist/editor/settings/LatestFeedback.js +136 -0
- package/dist/editor/settings/LatestFeedback.js.map +1 -0
- package/dist/editor/settings/QuotaInfo.d.ts +1 -0
- package/dist/editor/settings/QuotaInfo.js +102 -0
- package/dist/editor/settings/QuotaInfo.js.map +1 -0
- package/dist/editor/settings/SettingsMenu.d.ts +1 -0
- package/dist/editor/settings/SettingsMenu.js +74 -0
- package/dist/editor/settings/SettingsMenu.js.map +1 -0
- package/dist/editor/settings/SettingsView.d.ts +1 -0
- package/dist/editor/settings/SettingsView.js +85 -0
- package/dist/editor/settings/SettingsView.js.map +1 -0
- package/dist/editor/settings/Setup.d.ts +1 -0
- package/dist/editor/settings/Setup.js +211 -0
- package/dist/editor/settings/Setup.js.map +1 -0
- package/dist/editor/settings/Status.d.ts +1 -0
- package/dist/editor/settings/Status.js +85 -0
- package/dist/editor/settings/Status.js.map +1 -0
- package/dist/editor/settings/WebSocketMessages.d.ts +1 -0
- package/dist/editor/settings/WebSocketMessages.js +71 -0
- package/dist/editor/settings/WebSocketMessages.js.map +1 -0
- package/dist/editor/settings/panels/AgentsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/AgentsPanel.js +186 -0
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -0
- package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
- package/dist/editor/settings/panels/DatabasePanel.js +50 -0
- package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
- package/dist/editor/settings/panels/ItemConfigPanel.d.ts +13 -0
- package/dist/editor/settings/panels/ItemConfigPanel.js +52 -0
- package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ModelsPanel.js +269 -0
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProvidersPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ProvidersPanel.js +206 -0
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -0
- package/dist/editor/settings/panels/SearchConfigPanel.d.ts +6 -0
- package/dist/editor/settings/panels/SearchConfigPanel.js +134 -0
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/SettingsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/SettingsPanel.js +39 -0
- package/dist/editor/settings/panels/SettingsPanel.js.map +1 -0
- package/dist/editor/settings/panels/StatusPanel.d.ts +6 -0
- package/dist/editor/settings/panels/StatusPanel.js +141 -0
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -0
- package/dist/editor/settings/panels/ToolsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ToolsPanel.js +192 -0
- package/dist/editor/settings/panels/ToolsPanel.js.map +1 -0
- package/dist/editor/settings/panels/index.d.ts +14 -0
- package/dist/editor/settings/panels/index.js +15 -0
- package/dist/editor/settings/panels/index.js.map +1 -0
- package/dist/editor/settings/panels/useSidebarEditor.d.ts +15 -0
- package/dist/editor/settings/panels/useSidebarEditor.js +24 -0
- package/dist/editor/settings/panels/useSidebarEditor.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js +22 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +367 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
- package/dist/editor/settings/status/coreStatusChecks.d.ts +25 -0
- package/dist/editor/settings/status/coreStatusChecks.js +231 -0
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -0
- package/dist/editor/settings/status/index.d.ts +3 -0
- package/dist/editor/settings/status/index.js +3 -0
- package/dist/editor/settings/status/index.js.map +1 -0
- package/dist/editor/settings/status/useStartupChecks.d.ts +17 -0
- package/dist/editor/settings/status/useStartupChecks.js +54 -0
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -0
- package/dist/editor/sidebar/EditHistory.js +18 -14
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/MainContentTree.js +0 -1
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +4 -3
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +1 -1
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/Section.js +3 -3
- package/dist/editor/ui/Section.js.map +1 -1
- package/dist/editor/ui/SimpleMenu.js +13 -4
- package/dist/editor/ui/SimpleMenu.js.map +1 -1
- package/dist/editor/ui/SimpleToolbar.js +1 -1
- package/dist/editor/ui/SimpleToolbar.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.js +89 -27
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/SetupWizardPage.js +2 -2
- package/dist/setup/SetupWizardPage.js.map +1 -1
- package/dist/setup/services/setupWizardService.d.ts +132 -12
- package/dist/setup/services/setupWizardService.js +82 -6
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/index.d.ts +5 -4
- package/dist/setup/wizard/index.js +6 -4
- package/dist/setup/wizard/index.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.d.ts +10 -0
- package/dist/setup/wizard/steps/AddModelDialog.js +119 -0
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -0
- package/dist/setup/wizard/steps/ImportModelDialog.d.ts +10 -0
- package/dist/setup/wizard/steps/ImportModelDialog.js +351 -0
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -0
- package/dist/splash-screen/ModernSplashScreen.js +1 -1
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/styles.css +183 -10
- package/dist/types.d.ts +36 -1
- package/package.json +4 -4
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useEffect } from "react";
|
|
3
|
+
import { useEditContext } from "../client/editContext";
|
|
4
|
+
import { DatabasePanel } from "./panels/DatabasePanel";
|
|
5
|
+
import { AiSetupStep } from "./setup-steps/AiSetupStep";
|
|
6
|
+
import { IndexSetupStep } from "./setup-steps/IndexSetupStep";
|
|
7
|
+
import { ProvidersPanel } from "./panels/ProvidersPanel";
|
|
8
|
+
import { ModelsPanel } from "./panels/ModelsPanel";
|
|
9
|
+
import { AgentsPanel } from "./panels/AgentsPanel";
|
|
10
|
+
import { SearchConfigPanel } from "./panels/SearchConfigPanel";
|
|
11
|
+
import { SetupOverview } from "./setup-steps/SetupOverview";
|
|
12
|
+
import { Button } from "../../components/ui/button";
|
|
13
|
+
import { Database, Server, Brain, Bot, Sparkles, Search, Languages, ArrowLeft, Settings, } from "lucide-react";
|
|
14
|
+
export function Setup() {
|
|
15
|
+
const editContext = useEditContext();
|
|
16
|
+
const configuredSteps = editContext?.configuration?.setup?.steps;
|
|
17
|
+
const steps = useMemo(() => {
|
|
18
|
+
if (configuredSteps && configuredSteps.length > 0)
|
|
19
|
+
return configuredSteps;
|
|
20
|
+
return [
|
|
21
|
+
DatabasePanel,
|
|
22
|
+
ProvidersPanel,
|
|
23
|
+
ModelsPanel,
|
|
24
|
+
AgentsPanel,
|
|
25
|
+
AiSetupStep,
|
|
26
|
+
SearchConfigPanel,
|
|
27
|
+
IndexSetupStep,
|
|
28
|
+
];
|
|
29
|
+
}, [configuredSteps]);
|
|
30
|
+
// Initialize from URL hash if present, otherwise null (overview)
|
|
31
|
+
const [currentStepId, setCurrentStepId] = useState(() => {
|
|
32
|
+
if (typeof window !== "undefined") {
|
|
33
|
+
const hash = window.location.hash.replace("#", "");
|
|
34
|
+
return hash || null;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
});
|
|
38
|
+
// Sync URL hash with current step
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (typeof window !== "undefined") {
|
|
41
|
+
if (currentStepId) {
|
|
42
|
+
window.history.pushState({ step: currentStepId }, "", `#${currentStepId}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
window.history.pushState({ step: null }, "", window.location.pathname + window.location.search);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}, [currentStepId]);
|
|
49
|
+
// Handle browser back/forward buttons and hash changes
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const handleHashChange = () => {
|
|
52
|
+
const hash = window.location.hash.replace("#", "");
|
|
53
|
+
setCurrentStepId(hash || null);
|
|
54
|
+
};
|
|
55
|
+
window.addEventListener("popstate", handleHashChange);
|
|
56
|
+
window.addEventListener("hashchange", handleHashChange);
|
|
57
|
+
return () => {
|
|
58
|
+
window.removeEventListener("popstate", handleHashChange);
|
|
59
|
+
window.removeEventListener("hashchange", handleHashChange);
|
|
60
|
+
};
|
|
61
|
+
}, []);
|
|
62
|
+
// Prevent global keyboard navigation handler from interfering with ALT+LEFT/ALT+RIGHT
|
|
63
|
+
// when we're in the Setup view
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
const handleKeyDown = (event) => {
|
|
66
|
+
// Only handle ALT+LEFT/ALT+RIGHT when we're in Setup view
|
|
67
|
+
if (event.altKey &&
|
|
68
|
+
(event.key === "ArrowLeft" || event.key === "ArrowRight")) {
|
|
69
|
+
// Stop propagation to prevent the global keyboard navigation handler
|
|
70
|
+
// from intercepting this and causing double navigation
|
|
71
|
+
event.stopPropagation();
|
|
72
|
+
// Don't prevent default - let the browser handle it naturally
|
|
73
|
+
// This allows the browser's back/forward to work correctly
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
// Use capture phase to intercept before other handlers
|
|
77
|
+
window.addEventListener("keydown", handleKeyDown, true);
|
|
78
|
+
return () => window.removeEventListener("keydown", handleKeyDown, true);
|
|
79
|
+
}, []);
|
|
80
|
+
// Map steps to overview format
|
|
81
|
+
const stepMap = useMemo(() => {
|
|
82
|
+
const map = new Map();
|
|
83
|
+
// Core steps
|
|
84
|
+
map.set("database", DatabasePanel);
|
|
85
|
+
map.set("providers", ProvidersPanel);
|
|
86
|
+
map.set("models", ModelsPanel);
|
|
87
|
+
map.set("agents", AgentsPanel);
|
|
88
|
+
map.set("tools", AiSetupStep);
|
|
89
|
+
map.set("search", SearchConfigPanel);
|
|
90
|
+
map.set("index", IndexSetupStep);
|
|
91
|
+
// Check for LocalizationSetupStep in configured steps
|
|
92
|
+
if (configuredSteps) {
|
|
93
|
+
const LocalizationStep = configuredSteps.find((step) => step &&
|
|
94
|
+
typeof step === "function" &&
|
|
95
|
+
(step.name === "LocalizationSetupStep" ||
|
|
96
|
+
step.displayName === "LocalizationSetupStep" ||
|
|
97
|
+
step.toString().includes("LocalizationSetupStep")));
|
|
98
|
+
if (LocalizationStep) {
|
|
99
|
+
map.set("localization", LocalizationStep);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return map;
|
|
103
|
+
}, [configuredSteps]);
|
|
104
|
+
const overviewSteps = useMemo(() => {
|
|
105
|
+
const links = [
|
|
106
|
+
{
|
|
107
|
+
id: "database",
|
|
108
|
+
title: "Database Setup",
|
|
109
|
+
description: "Verify that all database migrations ran successfully",
|
|
110
|
+
icon: _jsx(Database, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
111
|
+
component: DatabasePanel,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
id: "providers",
|
|
115
|
+
title: "AI Providers",
|
|
116
|
+
description: "Configure AI providers (OpenAI, Azure OpenAI, OpenRouter)",
|
|
117
|
+
icon: _jsx(Server, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
118
|
+
component: ProvidersPanel,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: "models",
|
|
122
|
+
title: "AI Models",
|
|
123
|
+
description: "Install and configure AI models for chat and other tasks",
|
|
124
|
+
icon: _jsx(Brain, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
125
|
+
component: ModelsPanel,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: "agents",
|
|
129
|
+
title: "AI Agent Profiles",
|
|
130
|
+
description: "Install and configure AI agent profiles",
|
|
131
|
+
icon: _jsx(Bot, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
132
|
+
component: AgentsPanel,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
id: "tools",
|
|
136
|
+
title: "AI Tools Setup",
|
|
137
|
+
description: "Fix missing AI tools by ensuring required containers exist and generating tool items",
|
|
138
|
+
icon: _jsx(Sparkles, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
139
|
+
component: AiSetupStep,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: "search",
|
|
143
|
+
title: "Search Index Configuration",
|
|
144
|
+
description: "Configure search index and embeddings models",
|
|
145
|
+
icon: _jsx(Search, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
146
|
+
component: SearchConfigPanel,
|
|
147
|
+
},
|
|
148
|
+
];
|
|
149
|
+
// Add localization step if it exists in configured steps
|
|
150
|
+
// Check by component name or displayName
|
|
151
|
+
if (configuredSteps) {
|
|
152
|
+
const LocalizationStep = configuredSteps.find((step) => step &&
|
|
153
|
+
typeof step === "function" &&
|
|
154
|
+
(step.name === "LocalizationSetupStep" ||
|
|
155
|
+
step.displayName === "LocalizationSetupStep" ||
|
|
156
|
+
step.toString().includes("LocalizationSetupStep")));
|
|
157
|
+
if (LocalizationStep) {
|
|
158
|
+
links.push({
|
|
159
|
+
id: "localization",
|
|
160
|
+
title: "Localization Setup",
|
|
161
|
+
description: "Configure translation services and localization settings",
|
|
162
|
+
icon: _jsx(Languages, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
163
|
+
component: LocalizationStep,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Add settings step at the end
|
|
168
|
+
links.push({
|
|
169
|
+
id: "settings",
|
|
170
|
+
title: "Parhelia System Settings",
|
|
171
|
+
description: "Open and edit the Parhelia system settings item",
|
|
172
|
+
icon: _jsx(Settings, { strokeWidth: 1.5, className: "h-5 w-5" }),
|
|
173
|
+
component: DatabasePanel, // Dummy component, handled specially in handleNavigateToStep
|
|
174
|
+
});
|
|
175
|
+
return links;
|
|
176
|
+
}, [configuredSteps]);
|
|
177
|
+
const handleNavigateToStep = async (stepId) => {
|
|
178
|
+
// Special handling for settings step - navigate to item instead of showing step
|
|
179
|
+
if (stepId === "settings" && editContext) {
|
|
180
|
+
try {
|
|
181
|
+
const item = await editContext.loadItem("/sitecore/system/Parhelia/Settings");
|
|
182
|
+
if (item) {
|
|
183
|
+
editContext.switchView("content-tree");
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.warn("Failed to load Parhelia settings item: item is undefined");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error("Failed to load Parhelia settings item:", error);
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
setCurrentStepId(stepId);
|
|
195
|
+
};
|
|
196
|
+
const handleBackToOverview = () => {
|
|
197
|
+
setCurrentStepId(null);
|
|
198
|
+
};
|
|
199
|
+
// Show individual step
|
|
200
|
+
if (currentStepId) {
|
|
201
|
+
const StepComponent = stepMap.get(currentStepId);
|
|
202
|
+
if (!StepComponent) {
|
|
203
|
+
return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-gray-600", children: "Step not found" }), _jsx(Button, { onClick: handleBackToOverview, className: "mt-4", children: "Back to Overview" })] }) }));
|
|
204
|
+
}
|
|
205
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx("div", { className: "flex items-start justify-between border-b border-gray-200 bg-white px-4 py-3", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: handleBackToOverview, className: "mt-0.5", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Back to Overview"] }), _jsxs("div", { className: "flex flex-col", children: [_jsx("h2", { className: "text-2xl font-semibold text-gray-900", children: overviewSteps.find((s) => s.id === currentStepId)?.title ||
|
|
206
|
+
"Setup Step" }), overviewSteps.find((s) => s.id === currentStepId)?.description && (_jsx("p", { className: "text-sm text-gray-500", children: overviewSteps.find((s) => s.id === currentStepId)?.description }))] })] }) }), _jsx("div", { className: "flex-1 overflow-auto p-4", children: _jsx("div", { className: "mx-auto max-w-4xl", children: _jsx(StepComponent, {}) }) })] }));
|
|
207
|
+
}
|
|
208
|
+
// Show overview
|
|
209
|
+
return (_jsx(SetupOverview, { steps: overviewSteps, onNavigateToStep: handleNavigateToStep }));
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=Setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Setup.js","sourceRoot":"","sources":["../../../src/editor/settings/Setup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Status(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { usePathname, useSearchParams } from "next/navigation";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { SimpleMenu } from "../ui/SimpleMenu";
|
|
6
|
+
import { Splitter } from "../ui/Splitter";
|
|
7
|
+
import { Info } from "lucide-react";
|
|
8
|
+
export function Status() {
|
|
9
|
+
const editContext = useEditContext();
|
|
10
|
+
const config = editContext?.configuration;
|
|
11
|
+
const searchParams = useSearchParams();
|
|
12
|
+
const urlActiveItemKey = searchParams.get("ccpanel");
|
|
13
|
+
// Get the first available panel as default
|
|
14
|
+
const defaultActiveItemKey = config?.settings.groups?.flatMap((x) => x.panels)?.[0]?.id;
|
|
15
|
+
const [activeItemKey, setActiveItemKey] = useState(urlActiveItemKey || defaultActiveItemKey || null);
|
|
16
|
+
const pathname = usePathname();
|
|
17
|
+
const updateUrl = (key) => {
|
|
18
|
+
if (urlActiveItemKey === key)
|
|
19
|
+
return;
|
|
20
|
+
const current = new URLSearchParams(Array.from(searchParams.entries()));
|
|
21
|
+
if (key) {
|
|
22
|
+
current.set("ccpanel", key);
|
|
23
|
+
// Ensure view=settings is set when navigating within Settings
|
|
24
|
+
if (!current.has("view")) {
|
|
25
|
+
current.set("view", "settings");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
current.delete("ccpanel");
|
|
30
|
+
}
|
|
31
|
+
// Use window.history.pushState directly to avoid page reloads in static export mode
|
|
32
|
+
// This matches the pattern used in EditorShell.tsx
|
|
33
|
+
const newUrl = `${pathname}?${current.toString()}`;
|
|
34
|
+
window.history.pushState(null, "", newUrl);
|
|
35
|
+
};
|
|
36
|
+
// Keep active item in sync with URL param changes (e.g., programmatic navigation)
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (urlActiveItemKey && urlActiveItemKey !== activeItemKey) {
|
|
39
|
+
setActiveItemKey(urlActiveItemKey);
|
|
40
|
+
}
|
|
41
|
+
}, [urlActiveItemKey]);
|
|
42
|
+
// Set default active item when config loads and no active item is set
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!activeItemKey && defaultActiveItemKey) {
|
|
45
|
+
setActiveItemKey(defaultActiveItemKey);
|
|
46
|
+
}
|
|
47
|
+
}, [defaultActiveItemKey, activeItemKey]);
|
|
48
|
+
const items = config?.settings.groups.map((group) => {
|
|
49
|
+
return {
|
|
50
|
+
id: group.title,
|
|
51
|
+
label: group.title,
|
|
52
|
+
icon: group.icon,
|
|
53
|
+
items: group.panels.map((panel) => ({
|
|
54
|
+
id: panel.id,
|
|
55
|
+
label: panel.title,
|
|
56
|
+
icon: panel.icon,
|
|
57
|
+
})) || [],
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
// Find the currently selected panel content
|
|
61
|
+
const selectedPanel = config?.settings.groups
|
|
62
|
+
?.flatMap((x) => x.panels)
|
|
63
|
+
?.find((item) => item.id === activeItemKey);
|
|
64
|
+
if (!items) {
|
|
65
|
+
return (_jsx("div", { className: "flex h-full flex-col items-center justify-center", children: "Loading..." }));
|
|
66
|
+
}
|
|
67
|
+
const panels = [
|
|
68
|
+
{
|
|
69
|
+
name: "menu",
|
|
70
|
+
defaultSize: 300,
|
|
71
|
+
content: (_jsx("div", { className: "h-full border-r border-gray-200", children: _jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, onItemClick: (item) => {
|
|
72
|
+
setActiveItemKey(item.id);
|
|
73
|
+
// Only update URL when user explicitly clicks on an item
|
|
74
|
+
updateUrl(item.id);
|
|
75
|
+
} }) })),
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "content",
|
|
79
|
+
defaultSize: "auto",
|
|
80
|
+
content: (_jsx("div", { className: "absolute inset-0 flex flex-col bg-white select-text", children: selectedPanel ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "bg-theme-secondary flex flex-col gap-3 border-b border-gray-200 px-6 py-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [selectedPanel.icon ? (_jsx("span", { className: "text-gray-500 [&_svg]:h-5 [&_svg]:w-5", children: selectedPanel.icon })) : null, _jsx("h2", { className: "text-2xl font-semibold text-gray-900", children: selectedPanel.title })] }), selectedPanel.subtitle && (_jsx("p", { className: "text-sm text-gray-500", children: selectedPanel.subtitle }))] }), _jsx("div", { className: "flex-1 overflow-auto", children: selectedPanel.content })] })) : (_jsxs("div", { className: "flex h-full flex-col items-center justify-center text-gray-500", children: [_jsx(Info, { className: "mb-4 h-10 w-10" }), _jsx("p", { children: "Select a panel from the menu to view its content" })] })) })),
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
return (_jsx("div", { className: "h-full", children: _jsx(Splitter, { panels: panels, localStorageKey: "settings-splitter" }) }));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=Status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Status.js","sourceRoot":"","sources":["../../../src/editor/settings/Status.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function WebSocketMessages(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useRef } from "react";
|
|
3
|
+
import { formatTime } from "../utils";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { MessageSquare, ChevronUp, ChevronDown } from "lucide-react";
|
|
6
|
+
export function WebSocketMessages() {
|
|
7
|
+
const editContext = useEditContext();
|
|
8
|
+
const [expandedMessages, setExpandedMessages] = useState(new Set());
|
|
9
|
+
const [autoScroll, setAutoScroll] = useState(true);
|
|
10
|
+
const messagesEndRef = useRef(null);
|
|
11
|
+
const containerRef = useRef(null);
|
|
12
|
+
// Get messages from central store
|
|
13
|
+
const messages = editContext?.webSocketMessages || [];
|
|
14
|
+
// Auto-scroll to bottom when new messages arrive
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (autoScroll && messagesEndRef.current) {
|
|
17
|
+
messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
|
|
18
|
+
}
|
|
19
|
+
}, [messages, autoScroll]);
|
|
20
|
+
const toggleExpanded = (messageId) => {
|
|
21
|
+
setExpandedMessages((prev) => {
|
|
22
|
+
const newSet = new Set(prev);
|
|
23
|
+
if (newSet.has(messageId)) {
|
|
24
|
+
newSet.delete(messageId);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
newSet.add(messageId);
|
|
28
|
+
}
|
|
29
|
+
return newSet;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
const formatTimestamp = (isoString) => {
|
|
33
|
+
const date = new Date(isoString);
|
|
34
|
+
const base = formatTime(date);
|
|
35
|
+
return base + "." + date.getMilliseconds().toString().padStart(3, "0");
|
|
36
|
+
};
|
|
37
|
+
const getMessageTypeColor = (type) => {
|
|
38
|
+
const colors = {
|
|
39
|
+
"active-sessions": "bg-blue-100 text-blue-800",
|
|
40
|
+
"item-deleted": "bg-red-100 text-red-800",
|
|
41
|
+
"item-changed": "bg-yellow-100 text-yellow-800",
|
|
42
|
+
"item-version-added": "bg-green-100 text-green-800",
|
|
43
|
+
"load-item": "bg-teal-100 text-teal-800",
|
|
44
|
+
"edit-operation": "bg-purple-100 text-purple-800",
|
|
45
|
+
"executing-field-action": "bg-orange-100 text-orange-800",
|
|
46
|
+
"comment-updated": "bg-cyan-100 text-cyan-800",
|
|
47
|
+
"comment-deleted": "bg-red-100 text-red-800",
|
|
48
|
+
"suggested-edit-updated": "bg-indigo-100 text-indigo-800",
|
|
49
|
+
"suggested-edit-deleted": "bg-red-100 text-red-800",
|
|
50
|
+
"update-quota": "bg-gray-100 text-gray-800",
|
|
51
|
+
"agent:run:closed": "bg-red-100 text-red-800",
|
|
52
|
+
"agent:run:start": "bg-green-100 text-green-800",
|
|
53
|
+
"agent:name:updated": "bg-blue-100 text-blue-800",
|
|
54
|
+
};
|
|
55
|
+
return colors[type] || "bg-gray-100 text-gray-800";
|
|
56
|
+
};
|
|
57
|
+
const clearMessages = () => {
|
|
58
|
+
editContext?.clearWebSocketMessages();
|
|
59
|
+
};
|
|
60
|
+
const handleScroll = () => {
|
|
61
|
+
if (!containerRef.current)
|
|
62
|
+
return;
|
|
63
|
+
const { scrollTop, scrollHeight, clientHeight } = containerRef.current;
|
|
64
|
+
const isAtBottom = scrollHeight - scrollTop <= clientHeight + 10;
|
|
65
|
+
setAutoScroll(isAtBottom);
|
|
66
|
+
};
|
|
67
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-200 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MessageSquare, { className: "h-5 w-5" }), _jsx("span", { className: "rounded bg-gray-100 px-2 py-1 text-sm text-gray-800", children: messages.length })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("label", { className: "flex items-center gap-1 text-sm", children: [_jsx("input", { type: "checkbox", checked: autoScroll, onChange: (e) => setAutoScroll(e.target.checked), className: "rounded" }), "Auto-scroll"] }), _jsx("button", { onClick: clearMessages, className: "rounded bg-red-500 px-3 py-1 text-sm text-white hover:bg-red-600", children: "Clear" })] })] }), _jsxs("div", { ref: containerRef, className: "flex-1 space-y-2 overflow-y-auto p-4", onScroll: handleScroll, children: [messages.length === 0 ? (_jsx("div", { className: "py-8 text-center text-gray-500", children: "No WebSocket messages received yet" })) : (messages.map((message) => (_jsxs("div", { className: "rounded-lg border border-gray-200", children: [_jsxs("div", { className: "flex cursor-pointer items-center justify-between p-3 hover:bg-gray-50", onClick: () => toggleExpanded(message.id), children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [_jsx("span", { className: "font-mono text-xs text-gray-500", children: formatTimestamp(message.timestamp) }), _jsx("span", { className: `rounded px-2 py-1 text-xs font-medium ${getMessageTypeColor(message.type)}`, children: message.type }), _jsx("span", { className: "truncate text-sm text-gray-600", children: typeof message.payload === "object"
|
|
68
|
+
? Object.keys(message.payload).join(", ")
|
|
69
|
+
: String(message.payload) })] }), expandedMessages.has(message.id) ? (_jsx(ChevronUp, { className: "h-4 w-4 text-gray-400" })) : (_jsx(ChevronDown, { className: "h-4 w-4 text-gray-400" }))] }), expandedMessages.has(message.id) && (_jsx("div", { className: "border-t border-gray-200 bg-gray-50 p-3", children: _jsx("pre", { className: "overflow-x-auto font-mono text-xs break-words whitespace-pre-wrap", children: message.rawMessage }) }))] }, message.id)))), _jsx("div", { ref: messagesEndRef })] })] }));
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=WebSocketMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketMessages.js","sourceRoot":"","sources":["../../../src/editor/settings/WebSocketMessages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useState, useEffect, useMemo } from "react";
|
|
3
|
+
import { Button } from "../../../components/ui/button";
|
|
4
|
+
import { setupWizardService, } from "../../../setup/services/setupWizardService";
|
|
5
|
+
import { CheckCircle, AlertCircle, RefreshCw, Download, Settings, Bot, Shield, RotateCcw, } from "lucide-react";
|
|
6
|
+
import { Splitter } from "../../ui/Splitter";
|
|
7
|
+
import { ItemConfigPanel } from "./ItemConfigPanel";
|
|
8
|
+
/**
|
|
9
|
+
* Reset to Defaults action button for the agent config panel.
|
|
10
|
+
*/
|
|
11
|
+
function AgentResetDefaultsAction({ agentKey, disabled, onReset, }) {
|
|
12
|
+
const [resetting, setResetting] = useState(false);
|
|
13
|
+
const handleReset = useCallback(async () => {
|
|
14
|
+
try {
|
|
15
|
+
setResetting(true);
|
|
16
|
+
await setupWizardService.resetAgent({ agentKey });
|
|
17
|
+
onReset();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Error handling is managed by the parent
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
setResetting(false);
|
|
24
|
+
}
|
|
25
|
+
}, [agentKey, onReset]);
|
|
26
|
+
return (_jsx(Button, { variant: "outline", size: "sm", onClick: handleReset, disabled: disabled || resetting, children: resetting ? (_jsxs(_Fragment, { children: [_jsx(RefreshCw, { className: "h-3.5 w-3.5 animate-spin", strokeWidth: 1.5 }), "Resetting..."] })) : (_jsxs(_Fragment, { children: [_jsx(RotateCcw, { className: "h-3.5 w-3.5", strokeWidth: 1.5 }), "Reset to Defaults"] })) }));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Settings panel for AI Agent Profiles configuration.
|
|
30
|
+
* Install and configure AI agent profiles.
|
|
31
|
+
*/
|
|
32
|
+
export function AgentsPanel() {
|
|
33
|
+
const [state, setState] = useState("loading");
|
|
34
|
+
const [sourceAgents, setSourceAgents] = useState([]);
|
|
35
|
+
const [error, setError] = useState(null);
|
|
36
|
+
const [installing, setInstalling] = useState(null);
|
|
37
|
+
// Sidebar editor state - stores the installed agent ID, name, and key
|
|
38
|
+
const [selectedAgent, setSelectedAgent] = useState(null);
|
|
39
|
+
const handleOpenConfig = useCallback((installedId, agentName, agentKey) => {
|
|
40
|
+
setSelectedAgent({ id: installedId, name: agentName, key: agentKey });
|
|
41
|
+
}, []);
|
|
42
|
+
const handleCloseConfig = useCallback(() => {
|
|
43
|
+
setSelectedAgent(null);
|
|
44
|
+
}, []);
|
|
45
|
+
const loadData = useCallback(async () => {
|
|
46
|
+
try {
|
|
47
|
+
setState("loading");
|
|
48
|
+
setError(null);
|
|
49
|
+
const agents = await setupWizardService.getSourceAgents();
|
|
50
|
+
setSourceAgents(agents);
|
|
51
|
+
setState("success");
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
setState("error");
|
|
55
|
+
setError(e?.message || "Failed to load agents");
|
|
56
|
+
}
|
|
57
|
+
}, []);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
loadData();
|
|
60
|
+
}, [loadData]);
|
|
61
|
+
// Get the status of a source agent - now based on source agent's own status
|
|
62
|
+
const getAgentStatus = useCallback((sourceAgent) => {
|
|
63
|
+
// Source agents now have status set by backend based on whether they're installed
|
|
64
|
+
if (sourceAgent.status === "Installed")
|
|
65
|
+
return "installed";
|
|
66
|
+
return "available";
|
|
67
|
+
}, []);
|
|
68
|
+
// Get the installed agent ID for a source agent
|
|
69
|
+
// The backend now returns the installed agent's ID in the source agent when status is "Installed"
|
|
70
|
+
const getInstalledAgentId = useCallback((sourceAgent) => {
|
|
71
|
+
if (sourceAgent.status === "Installed") {
|
|
72
|
+
return sourceAgent.id;
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}, []);
|
|
76
|
+
// Install a single agent from source
|
|
77
|
+
const handleInstall = useCallback(async (agent) => {
|
|
78
|
+
try {
|
|
79
|
+
setInstalling(agent.key);
|
|
80
|
+
setError(null);
|
|
81
|
+
await setupWizardService.copyAgents({
|
|
82
|
+
sourceAgentKeys: [agent.key],
|
|
83
|
+
});
|
|
84
|
+
await loadData();
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
setError(e?.message || "Failed to install agent");
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
setInstalling(null);
|
|
91
|
+
}
|
|
92
|
+
}, [loadData]);
|
|
93
|
+
// Install all available agents
|
|
94
|
+
const handleInstallAll = useCallback(async () => {
|
|
95
|
+
const availableAgents = sourceAgents.filter((agent) => getAgentStatus(agent) === "available");
|
|
96
|
+
if (availableAgents.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
try {
|
|
99
|
+
setInstalling("all");
|
|
100
|
+
setError(null);
|
|
101
|
+
await setupWizardService.copyAgents({
|
|
102
|
+
sourceAgentKeys: availableAgents.map((a) => a.key),
|
|
103
|
+
});
|
|
104
|
+
await loadData();
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
setError(e?.message || "Failed to install agents");
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
setInstalling(null);
|
|
111
|
+
}
|
|
112
|
+
}, [sourceAgents, getAgentStatus, loadData]);
|
|
113
|
+
// Count agents by status
|
|
114
|
+
const statusCounts = useMemo(() => {
|
|
115
|
+
let available = 0;
|
|
116
|
+
let installed = 0;
|
|
117
|
+
let needsConfig = 0;
|
|
118
|
+
sourceAgents.forEach((agent) => {
|
|
119
|
+
const status = getAgentStatus(agent);
|
|
120
|
+
if (status === "available") {
|
|
121
|
+
available++;
|
|
122
|
+
}
|
|
123
|
+
else if (status === "installed") {
|
|
124
|
+
installed++;
|
|
125
|
+
if (agent.needsConfiguration) {
|
|
126
|
+
needsConfig++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return { available, installed, needsConfig };
|
|
131
|
+
}, [sourceAgents, getAgentStatus]);
|
|
132
|
+
const statusIcon = (stepState) => {
|
|
133
|
+
if (stepState === "success")
|
|
134
|
+
return _jsx(CheckCircle, { className: "h-4 w-4 text-green-600", strokeWidth: 1 });
|
|
135
|
+
if (stepState === "error")
|
|
136
|
+
return _jsx(AlertCircle, { className: "h-4 w-4 text-red-600", strokeWidth: 1 });
|
|
137
|
+
return (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin text-amber-600", strokeWidth: 1 }));
|
|
138
|
+
};
|
|
139
|
+
const getStatusBadge = (status, needsConfig) => {
|
|
140
|
+
if (status === "installed") {
|
|
141
|
+
if (needsConfig) {
|
|
142
|
+
return (_jsx("span", { className: "rounded bg-orange-100 px-2 py-0.5 text-xs font-medium text-orange-700", children: "Needs Config" }));
|
|
143
|
+
}
|
|
144
|
+
return (_jsx("span", { className: "rounded bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700", children: "Installed" }));
|
|
145
|
+
}
|
|
146
|
+
return (_jsx("span", { className: "rounded bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700", children: "Available" }));
|
|
147
|
+
};
|
|
148
|
+
// Build the agents list content
|
|
149
|
+
const agentsListContent = (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsx("div", { className: "mx-auto", children: _jsxs("div", { className: "flex h-full flex-col overflow-hidden", children: [_jsxs("div", { className: "shrink-0 space-y-4 pb-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [statusIcon(state), _jsxs("span", { className: "text-sm text-gray-700", children: [statusCounts.installed, " installed", statusCounts.needsConfig > 0 && (_jsxs("span", { className: "ml-1 text-orange-600", children: ["(", statusCounts.needsConfig, " need config)"] })), statusCounts.available > 0 && (_jsxs("span", { className: "ml-1 text-gray-500", children: ["\u2022 ", statusCounts.available, " available"] }))] })] }), _jsxs("div", { className: "flex gap-2", children: [statusCounts.available > 0 && (_jsxs(Button, { size: "sm", variant: "outline", onClick: handleInstallAll, disabled: installing !== null, children: [installing === "all" ? (_jsx(RefreshCw, { className: "mr-1 h-4 w-4 animate-spin" })) : (_jsx(Download, { className: "mr-1 h-4 w-4", strokeWidth: 1 })), "Install All (", statusCounts.available, ")"] })), _jsx(Button, { size: "sm", variant: "ghost", onClick: loadData, disabled: state === "loading", children: _jsx(RefreshCw, { className: `h-4 w-4 ${state === "loading" ? "animate-spin" : ""}`, strokeWidth: 1 }) })] })] }), error && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-2 text-xs whitespace-pre-wrap text-red-700", children: error }))] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: sourceAgents.length === 0 && state === "success" ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx(Bot, { className: "mb-4 h-12 w-12 text-gray-300", strokeWidth: 1 }), _jsx("p", { className: "text-sm text-gray-500", children: "No sample agents available" }), _jsx("p", { className: "text-xs text-gray-400", children: "Sample agents will appear here when configured" })] })) : (_jsx("div", { className: "space-y-3", children: sourceAgents.map((agent) => {
|
|
150
|
+
const status = getAgentStatus(agent);
|
|
151
|
+
const installedId = getInstalledAgentId(agent);
|
|
152
|
+
const isInstalling = installing === agent.key;
|
|
153
|
+
const isProcessing = isInstalling || installing === "all";
|
|
154
|
+
const isSelected = selectedAgent?.id === installedId;
|
|
155
|
+
return (_jsxs("div", { className: `flex items-start gap-3 rounded-lg border p-4 transition-shadow hover:shadow-sm ${isSelected
|
|
156
|
+
? "border-blue-400 bg-blue-50"
|
|
157
|
+
: "border-gray-200 bg-white"}`, children: [_jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-gray-100", children: _jsx(Bot, { className: "h-5 w-5 text-gray-600", strokeWidth: 1.5 }) }), _jsx("div", { className: "min-w-0 flex-1", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h4", { className: "font-medium text-gray-900", children: agent.name }), agent.isMandatory && (_jsxs("span", { className: "flex items-center gap-1 rounded bg-purple-100 px-1.5 py-0.5 text-xs font-medium text-purple-700", title: "This agent is required for core functionality", children: [_jsx(Shield, { className: "h-3 w-3", strokeWidth: 1.5 }), "Required"] })), getStatusBadge(status, agent.needsConfiguration)] }) }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [status === "available" && (_jsxs(Button, { size: "sm", onClick: () => handleInstall(agent), disabled: isProcessing, children: [isInstalling ? (_jsx(RefreshCw, { className: "mr-1 h-4 w-4 animate-spin" })) : (_jsx(Download, { className: "mr-1 h-4 w-4", strokeWidth: 1 })), "Install"] })), status === "installed" && installedId && (_jsxs(Button, { size: "sm", variant: isSelected ? "default" : "ghost", onClick: () => handleOpenConfig(installedId, agent.name, agent.key), className: "shrink-0", children: [_jsx(Settings, { className: "h-4 w-4", strokeWidth: 1.5 }), "Configure"] }))] })] }, agent.key));
|
|
158
|
+
}) })) })] }) }) }));
|
|
159
|
+
// Build splitter panels - only show config panel when an agent is selected
|
|
160
|
+
const panels = selectedAgent?.id
|
|
161
|
+
? [
|
|
162
|
+
{
|
|
163
|
+
name: "agents-list",
|
|
164
|
+
defaultSize: "auto",
|
|
165
|
+
content: agentsListContent,
|
|
166
|
+
className: "overflow-hidden",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: "agent-config",
|
|
170
|
+
defaultSize: 400,
|
|
171
|
+
content: (_jsx(ItemConfigPanel, { itemId: selectedAgent.id, title: `Configure: ${selectedAgent.name || "Agent"}`, onClose: handleCloseConfig, actions: _jsx(AgentResetDefaultsAction, { agentKey: selectedAgent.key, onReset: loadData }) }, selectedAgent.id)),
|
|
172
|
+
className: "overflow-hidden",
|
|
173
|
+
},
|
|
174
|
+
]
|
|
175
|
+
: [
|
|
176
|
+
{
|
|
177
|
+
name: "agents-list",
|
|
178
|
+
defaultSize: "auto",
|
|
179
|
+
content: agentsListContent,
|
|
180
|
+
className: "overflow-hidden",
|
|
181
|
+
},
|
|
182
|
+
];
|
|
183
|
+
return (_jsx(Splitter, { panels: panels, localStorageKey: "agents-panel-splitter", direction: "horizontal", className: "h-full" }));
|
|
184
|
+
}
|
|
185
|
+
export default AgentsPanel;
|
|
186
|
+
//# sourceMappingURL=AgentsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/AgentsPanel.tsx"],"names":[],"mappings":"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"}
|