@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.
Files changed (224) hide show
  1. package/dist/agents-view/AgentsInbox.d.ts +2 -1
  2. package/dist/agents-view/AgentsInbox.js +2 -2
  3. package/dist/agents-view/AgentsInbox.js.map +1 -1
  4. package/dist/agents-view/AgentsView.js +30 -1
  5. package/dist/agents-view/AgentsView.js.map +1 -1
  6. package/dist/components/ui/card.d.ts +1 -1
  7. package/dist/components/ui/card.js +1 -1
  8. package/dist/components/ui/card.js.map +1 -1
  9. package/dist/components/ui/paste-button.d.ts +1 -1
  10. package/dist/components/ui/paste-button.js +79 -22
  11. package/dist/components/ui/paste-button.js.map +1 -1
  12. package/dist/config/config.js +83 -51
  13. package/dist/config/config.js.map +1 -1
  14. package/dist/config/types.d.ts +29 -4
  15. package/dist/editor/ContentTree.js +92 -22
  16. package/dist/editor/ContentTree.js.map +1 -1
  17. package/dist/editor/FieldActionsOverlay.d.ts +1 -0
  18. package/dist/editor/FieldActionsOverlay.js +17 -1
  19. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  20. package/dist/editor/FieldListField.js +1 -1
  21. package/dist/editor/FieldListField.js.map +1 -1
  22. package/dist/editor/LinkEditorDialog.js +33 -24
  23. package/dist/editor/LinkEditorDialog.js.map +1 -1
  24. package/dist/editor/MainLayout.js +2 -2
  25. package/dist/editor/MainLayout.js.map +1 -1
  26. package/dist/editor/PictureEditor.js +1 -1
  27. package/dist/editor/PictureEditor.js.map +1 -1
  28. package/dist/editor/ai/AgentTerminal.js +63 -26
  29. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  30. package/dist/editor/ai/Agents.js +7 -2
  31. package/dist/editor/ai/Agents.js.map +1 -1
  32. package/dist/editor/client/EditorShell.js +178 -79
  33. package/dist/editor/client/EditorShell.js.map +1 -1
  34. package/dist/editor/client/OperationDialogContent.d.ts +13 -0
  35. package/dist/editor/client/OperationDialogContent.js +13 -0
  36. package/dist/editor/client/OperationDialogContent.js.map +1 -0
  37. package/dist/editor/client/editContext.d.ts +2 -0
  38. package/dist/editor/client/editContext.js.map +1 -1
  39. package/dist/editor/client/hooks/useGlobalEditorKeyDown.js +5 -2
  40. package/dist/editor/client/hooks/useGlobalEditorKeyDown.js.map +1 -1
  41. package/dist/editor/client/hooks/useQuota.d.ts +4 -0
  42. package/dist/editor/client/hooks/useQuota.js.map +1 -1
  43. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +2 -2
  44. package/dist/editor/client/hooks/useSocketMessageHandler.js +5 -7
  45. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  46. package/dist/editor/client/operations.d.ts +1 -0
  47. package/dist/editor/client/operations.js +332 -8
  48. package/dist/editor/client/operations.js.map +1 -1
  49. package/dist/editor/client/ui/EditorChrome.js +1 -1
  50. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  51. package/dist/editor/commands/itemCommands.d.ts +0 -1
  52. package/dist/editor/commands/itemCommands.js +1 -16
  53. package/dist/editor/commands/itemCommands.js.map +1 -1
  54. package/dist/editor/commands/undo.js +6 -2
  55. package/dist/editor/commands/undo.js.map +1 -1
  56. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
  57. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  58. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +56 -2
  59. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  60. package/dist/editor/page-editor-chrome/FrameMenu.js +5 -4
  61. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  62. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +5 -1
  63. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  64. package/dist/editor/page-viewer/PageViewerFrame.js +118 -13
  65. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  66. package/dist/editor/reviews/CreateReviewDialog.js +1 -1
  67. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  68. package/dist/editor/reviews/DecisionsMatrix.js +1 -1
  69. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  70. package/dist/editor/reviews/ReviewsList.js +1 -1
  71. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  72. package/dist/editor/services/editService.d.ts +20 -3
  73. package/dist/editor/services/editService.js +17 -17
  74. package/dist/editor/services/editService.js.map +1 -1
  75. package/dist/editor/services/indexService.d.ts +4 -1
  76. package/dist/editor/services/indexService.js +12 -0
  77. package/dist/editor/services/indexService.js.map +1 -1
  78. package/dist/editor/services/serviceHelper.js +1 -0
  79. package/dist/editor/services/serviceHelper.js.map +1 -1
  80. package/dist/editor/settings/About.d.ts +1 -0
  81. package/dist/editor/settings/About.js +9 -0
  82. package/dist/editor/settings/About.js.map +1 -0
  83. package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
  84. package/dist/editor/settings/AllAgentsPanel.js +126 -0
  85. package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
  86. package/dist/editor/settings/IndexOverview.d.ts +1 -0
  87. package/dist/editor/settings/IndexOverview.js +471 -0
  88. package/dist/editor/settings/IndexOverview.js.map +1 -0
  89. package/dist/editor/settings/Info.d.ts +1 -0
  90. package/dist/editor/settings/Info.js +11 -0
  91. package/dist/editor/settings/Info.js.map +1 -0
  92. package/dist/editor/settings/LatestFeedback.d.ts +1 -0
  93. package/dist/editor/settings/LatestFeedback.js +136 -0
  94. package/dist/editor/settings/LatestFeedback.js.map +1 -0
  95. package/dist/editor/settings/QuotaInfo.d.ts +1 -0
  96. package/dist/editor/settings/QuotaInfo.js +102 -0
  97. package/dist/editor/settings/QuotaInfo.js.map +1 -0
  98. package/dist/editor/settings/SettingsMenu.d.ts +1 -0
  99. package/dist/editor/settings/SettingsMenu.js +74 -0
  100. package/dist/editor/settings/SettingsMenu.js.map +1 -0
  101. package/dist/editor/settings/SettingsView.d.ts +1 -0
  102. package/dist/editor/settings/SettingsView.js +85 -0
  103. package/dist/editor/settings/SettingsView.js.map +1 -0
  104. package/dist/editor/settings/Setup.d.ts +1 -0
  105. package/dist/editor/settings/Setup.js +211 -0
  106. package/dist/editor/settings/Setup.js.map +1 -0
  107. package/dist/editor/settings/Status.d.ts +1 -0
  108. package/dist/editor/settings/Status.js +85 -0
  109. package/dist/editor/settings/Status.js.map +1 -0
  110. package/dist/editor/settings/WebSocketMessages.d.ts +1 -0
  111. package/dist/editor/settings/WebSocketMessages.js +71 -0
  112. package/dist/editor/settings/WebSocketMessages.js.map +1 -0
  113. package/dist/editor/settings/panels/AgentsPanel.d.ts +6 -0
  114. package/dist/editor/settings/panels/AgentsPanel.js +186 -0
  115. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -0
  116. package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
  117. package/dist/editor/settings/panels/DatabasePanel.js +50 -0
  118. package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
  119. package/dist/editor/settings/panels/ItemConfigPanel.d.ts +13 -0
  120. package/dist/editor/settings/panels/ItemConfigPanel.js +52 -0
  121. package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -0
  122. package/dist/editor/settings/panels/ModelsPanel.d.ts +6 -0
  123. package/dist/editor/settings/panels/ModelsPanel.js +269 -0
  124. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -0
  125. package/dist/editor/settings/panels/ProvidersPanel.d.ts +6 -0
  126. package/dist/editor/settings/panels/ProvidersPanel.js +206 -0
  127. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -0
  128. package/dist/editor/settings/panels/SearchConfigPanel.d.ts +6 -0
  129. package/dist/editor/settings/panels/SearchConfigPanel.js +134 -0
  130. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -0
  131. package/dist/editor/settings/panels/SettingsPanel.d.ts +6 -0
  132. package/dist/editor/settings/panels/SettingsPanel.js +39 -0
  133. package/dist/editor/settings/panels/SettingsPanel.js.map +1 -0
  134. package/dist/editor/settings/panels/StatusPanel.d.ts +6 -0
  135. package/dist/editor/settings/panels/StatusPanel.js +141 -0
  136. package/dist/editor/settings/panels/StatusPanel.js.map +1 -0
  137. package/dist/editor/settings/panels/ToolsPanel.d.ts +6 -0
  138. package/dist/editor/settings/panels/ToolsPanel.js +192 -0
  139. package/dist/editor/settings/panels/ToolsPanel.js.map +1 -0
  140. package/dist/editor/settings/panels/index.d.ts +14 -0
  141. package/dist/editor/settings/panels/index.js +15 -0
  142. package/dist/editor/settings/panels/index.js.map +1 -0
  143. package/dist/editor/settings/panels/useSidebarEditor.d.ts +15 -0
  144. package/dist/editor/settings/panels/useSidebarEditor.js +24 -0
  145. package/dist/editor/settings/panels/useSidebarEditor.js.map +1 -0
  146. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
  147. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
  148. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
  149. package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
  150. package/dist/editor/settings/setup-steps/AiSetupStep/index.js +22 -0
  151. package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
  152. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
  153. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
  154. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
  155. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
  156. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
  157. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
  158. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
  159. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
  160. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
  161. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
  162. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +367 -0
  163. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
  164. package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
  165. package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
  166. package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
  167. package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
  168. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
  169. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
  170. package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
  171. package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
  172. package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
  173. package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
  174. package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
  175. package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
  176. package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
  177. package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
  178. package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
  179. package/dist/editor/settings/status/coreStatusChecks.d.ts +25 -0
  180. package/dist/editor/settings/status/coreStatusChecks.js +231 -0
  181. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -0
  182. package/dist/editor/settings/status/index.d.ts +3 -0
  183. package/dist/editor/settings/status/index.js +3 -0
  184. package/dist/editor/settings/status/index.js.map +1 -0
  185. package/dist/editor/settings/status/useStartupChecks.d.ts +17 -0
  186. package/dist/editor/settings/status/useStartupChecks.js +54 -0
  187. package/dist/editor/settings/status/useStartupChecks.js.map +1 -0
  188. package/dist/editor/sidebar/EditHistory.js +18 -14
  189. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  190. package/dist/editor/sidebar/MainContentTree.js +0 -1
  191. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  192. package/dist/editor/sidebar/OperationItem.js +4 -3
  193. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  194. package/dist/editor/ui/PerfectTree.js +1 -1
  195. package/dist/editor/ui/PerfectTree.js.map +1 -1
  196. package/dist/editor/ui/Section.js +3 -3
  197. package/dist/editor/ui/Section.js.map +1 -1
  198. package/dist/editor/ui/SimpleMenu.js +13 -4
  199. package/dist/editor/ui/SimpleMenu.js.map +1 -1
  200. package/dist/editor/ui/SimpleToolbar.js +1 -1
  201. package/dist/editor/ui/SimpleToolbar.js.map +1 -1
  202. package/dist/editor/utils/keyboardNavigation.js +89 -27
  203. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  204. package/dist/revision.d.ts +2 -2
  205. package/dist/revision.js +2 -2
  206. package/dist/setup/SetupWizardPage.js +2 -2
  207. package/dist/setup/SetupWizardPage.js.map +1 -1
  208. package/dist/setup/services/setupWizardService.d.ts +132 -12
  209. package/dist/setup/services/setupWizardService.js +82 -6
  210. package/dist/setup/services/setupWizardService.js.map +1 -1
  211. package/dist/setup/wizard/index.d.ts +5 -4
  212. package/dist/setup/wizard/index.js +6 -4
  213. package/dist/setup/wizard/index.js.map +1 -1
  214. package/dist/setup/wizard/steps/AddModelDialog.d.ts +10 -0
  215. package/dist/setup/wizard/steps/AddModelDialog.js +119 -0
  216. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -0
  217. package/dist/setup/wizard/steps/ImportModelDialog.d.ts +10 -0
  218. package/dist/setup/wizard/steps/ImportModelDialog.js +351 -0
  219. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -0
  220. package/dist/splash-screen/ModernSplashScreen.js +1 -1
  221. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  222. package/dist/styles.css +183 -10
  223. package/dist/types.d.ts +36 -1
  224. package/package.json +4 -4
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel for Database status.
3
+ * Verifies that all DB migrations ran successfully.
4
+ */
5
+ export declare function DatabasePanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default DatabasePanel;
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useCallback, useState } from "react";
3
+ import { Card } from "../../../components/ui/card";
4
+ import { Button } from "../../../components/ui/button";
5
+ import { get } from "../../services/serviceHelper";
6
+ import { CheckCircle, AlertCircle, Database, RefreshCw } from "lucide-react";
7
+ /**
8
+ * Settings panel for Database status.
9
+ * Verifies that all DB migrations ran successfully.
10
+ */
11
+ export function DatabasePanel() {
12
+ const [dbState, setDbState] = useState("checking");
13
+ const [dbError, setDbError] = useState(null);
14
+ const statusIcon = useCallback((state) => {
15
+ if (state === "success")
16
+ return _jsx(CheckCircle, { className: "h-4 w-4 text-green-600", strokeWidth: 1 });
17
+ if (state === "error")
18
+ return _jsx(AlertCircle, { className: "h-4 w-4 text-red-600", strokeWidth: 1 });
19
+ return (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin text-amber-600", strokeWidth: 1 }));
20
+ }, []);
21
+ const checkDb = useCallback(async () => {
22
+ try {
23
+ setDbState("checking");
24
+ setDbError(null);
25
+ const res = await get("/parhelia/status");
26
+ const errors = res?.data?.messages?.filter((m) => m.severity === "error") || [];
27
+ if (errors.length > 0) {
28
+ setDbState("error");
29
+ setDbError(errors.map((x) => x.message).join("\n"));
30
+ }
31
+ else {
32
+ setDbState("success");
33
+ }
34
+ }
35
+ catch (e) {
36
+ setDbState("error");
37
+ setDbError(e?.message || "Failed to check DB status");
38
+ }
39
+ }, []);
40
+ React.useEffect(() => {
41
+ checkDb();
42
+ }, [checkDb]);
43
+ return (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsx("div", { className: "mx-auto", children: _jsxs(Card, { icon: _jsx(Database, { strokeWidth: 1, className: "h-5 w-5" }), title: "Database setup", description: "Verifies that all DB migrations ran successfully.", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [statusIcon(dbState), _jsx("span", { className: "text-sm text-gray-700", children: dbState === "success"
44
+ ? "All migrations are applied"
45
+ : dbState === "error"
46
+ ? "There are migration issues"
47
+ : "Checking..." })] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: checkDb, children: [_jsx(RefreshCw, { strokeWidth: 1, className: "h-4 w-4" }), "Recheck"] })] }), dbError && (_jsx("div", { className: "mt-2 rounded border border-red-200 bg-red-50 p-2 text-xs whitespace-pre-wrap text-red-700", children: dbError }))] }) }) }));
48
+ }
49
+ export default DatabasePanel;
50
+ //# sourceMappingURL=DatabasePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabasePanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/DatabasePanel.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ7E;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAY,UAAU,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,KAAgB,EAAE,EAAE;QAClD,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,wBAAwB,EAAC,WAAW,EAAE,CAAC,GAAI,CAAC;QAC5E,IAAI,KAAK,KAAK,OAAO;YACnB,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,sBAAsB,EAAC,WAAW,EAAE,CAAC,GAAI,CAAC;QAC1E,OAAO,CACL,KAAC,SAAS,IACR,SAAS,EAAC,qCAAqC,EAC/C,WAAW,EAAE,CAAC,GACd,CACH,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACrC,IAAI,CAAC;YACH,UAAU,CAAC,UAAU,CAAC,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAuB,kBAAkB,CAAC,CAAC;YAChE,MAAM,MAAM,GACV,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,UAAU,CAAC,OAAO,CAAC,CAAC;gBACpB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,UAAU,CAAC,CAAC,EAAE,OAAO,IAAI,2BAA2B,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACvC,cAAK,SAAS,EAAC,SAAS,YACtB,MAAC,IAAI,IACH,IAAI,EAAE,KAAC,QAAQ,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,EACtD,KAAK,EAAC,gBAAgB,EACtB,WAAW,EAAC,mDAAmD,aAE/D,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,yBAAyB,aACrC,UAAU,CAAC,OAAO,CAAC,EACpB,eAAM,SAAS,EAAC,uBAAuB,YACpC,OAAO,KAAK,SAAS;4CACpB,CAAC,CAAC,4BAA4B;4CAC9B,CAAC,CAAC,OAAO,KAAK,OAAO;gDACnB,CAAC,CAAC,4BAA4B;gDAC9B,CAAC,CAAC,aAAa,GACd,IACH,EACN,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,OAAO,aAClD,KAAC,SAAS,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,eAE1C,IACL,EACL,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,2FAA2F,YACvG,OAAO,GACJ,CACP,IACI,GACH,GACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ interface ItemConfigPanelProps {
3
+ itemId: string;
4
+ title: string;
5
+ onClose: () => void;
6
+ actions?: React.ReactNode;
7
+ }
8
+ /**
9
+ * Reusable inline configuration panel that displays an item editor in a sidebar.
10
+ * Used for configuring tools, models, providers, and agents.
11
+ */
12
+ export declare function ItemConfigPanel({ itemId, title, onClose, actions, }: ItemConfigPanelProps): import("react/jsx-runtime").JSX.Element;
13
+ export default ItemConfigPanel;
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect, useRef } from "react";
3
+ import { Button } from "../../../components/ui/button";
4
+ import { RefreshCw, AlertCircle, X } from "lucide-react";
5
+ import { useEditContext } from "../../client/editContext";
6
+ import { ItemEditor } from "../../views/ItemEditor";
7
+ /**
8
+ * Reusable inline configuration panel that displays an item editor in a sidebar.
9
+ * Used for configuring tools, models, providers, and agents.
10
+ */
11
+ export function ItemConfigPanel({ itemId, title, onClose, actions, }) {
12
+ const editContext = useEditContext();
13
+ const [loading, setLoading] = useState(true);
14
+ const [error, setError] = useState(null);
15
+ const [item, setItem] = useState(null);
16
+ // Use a ref to store the editContext so it doesn't trigger re-fetches
17
+ // when the context object reference changes
18
+ const editContextRef = useRef(null);
19
+ editContextRef.current = editContext;
20
+ // Load the item on mount or when itemId changes
21
+ useEffect(() => {
22
+ const fetchItem = async () => {
23
+ const ctx = editContextRef.current;
24
+ if (!ctx || !itemId)
25
+ return;
26
+ try {
27
+ setLoading(true);
28
+ setError(null);
29
+ // Build an ItemDescriptor for the item
30
+ const descriptor = {
31
+ id: itemId,
32
+ language: ctx.contentEditorItem?.language || "en",
33
+ version: 0, // Latest version
34
+ };
35
+ // Use itemsRepository.getItem to fetch without affecting main editor state
36
+ const loadedItem = await ctx.itemsRepository.getItem(descriptor);
37
+ setItem(loadedItem || null);
38
+ }
39
+ catch (e) {
40
+ const errorMessage = e instanceof Error ? e.message : "Failed to load item";
41
+ setError(errorMessage);
42
+ }
43
+ finally {
44
+ setLoading(false);
45
+ }
46
+ };
47
+ fetchItem();
48
+ }, [itemId]); // Only re-fetch when itemId changes, not when editContext changes
49
+ return (_jsxs("div", { className: "flex h-full flex-col overflow-hidden border-l border-gray-200 bg-white", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-200 px-4 py-3", children: [_jsx("h3", { className: "font-medium text-gray-900", children: title }), _jsxs("div", { className: "flex items-center gap-2", children: [actions, _jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, className: "h-7 w-7 p-0", children: _jsx(X, { className: "h-4 w-4", strokeWidth: 1.5 }) })] })] }), _jsx("div", { className: "relative flex-1 overflow-hidden", children: loading ? (_jsxs("div", { className: "flex items-center justify-center py-8", children: [_jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-400", strokeWidth: 1 }), _jsx("span", { className: "ml-2 text-sm text-gray-500", children: "Loading..." })] })) : error ? (_jsx("div", { className: "m-4 rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4", strokeWidth: 1.5 }), error] }) })) : item ? (_jsx(ItemEditor, { item: item })) : (_jsx("p", { className: "py-8 text-center text-sm text-gray-500", children: "Item not found." })) })] }));
50
+ }
51
+ export default ItemConfigPanel;
52
+ //# sourceMappingURL=ItemConfigPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ItemConfigPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/ItemConfigPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel for AI Models configuration.
3
+ * Install and configure AI models for chat and other tasks.
4
+ */
5
+ export declare function ModelsPanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default ModelsPanel;
@@ -0,0 +1,269 @@
1
+ import { jsx as _jsx, 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, Upload, Plus, ArrowRight, Settings, Cloud, } from "lucide-react";
6
+ import { AddModelDialog } from "../../../setup/wizard/steps/AddModelDialog";
7
+ import { ImportModelDialog } from "../../../setup/wizard/steps/ImportModelDialog";
8
+ import { Splitter } from "../../ui/Splitter";
9
+ import { ItemConfigPanel } from "./ItemConfigPanel";
10
+ /**
11
+ * Settings panel for AI Models configuration.
12
+ * Install and configure AI models for chat and other tasks.
13
+ */
14
+ export function ModelsPanel() {
15
+ const [state, setState] = useState("loading");
16
+ const [installedModels, setInstalledModels] = useState([]);
17
+ const [providers, setProviders] = useState([]);
18
+ const [error, setError] = useState(null);
19
+ const [updating, setUpdating] = useState(null);
20
+ // Dialog states
21
+ const [showAddDialog, setShowAddDialog] = useState(false);
22
+ const [showImportDialog, setShowImportDialog] = useState(false);
23
+ // Sidebar editor state
24
+ const [selectedModel, setSelectedModel] = useState(null);
25
+ // Bulk pricing update state
26
+ const [updatingAllPricing, setUpdatingAllPricing] = useState(false);
27
+ const [updatingModelPricing, setUpdatingModelPricing] = useState(null);
28
+ // Provider types (discovered from backend)
29
+ const [providerTypes, setProviderTypes] = useState([]);
30
+ const handleOpenConfig = useCallback((model) => {
31
+ setSelectedModel(model);
32
+ }, []);
33
+ const handleCloseConfig = useCallback(() => {
34
+ setSelectedModel(null);
35
+ }, []);
36
+ const loadData = useCallback(async () => {
37
+ try {
38
+ setState("loading");
39
+ setError(null);
40
+ const [installed, providersData, providerTypesData] = await Promise.all([
41
+ setupWizardService.getInstalledModels(),
42
+ setupWizardService.getProviders(),
43
+ setupWizardService.getProviderTypes(),
44
+ ]);
45
+ setInstalledModels(installed);
46
+ setProviders(providersData);
47
+ setProviderTypes(providerTypesData);
48
+ setState("success");
49
+ }
50
+ catch (e) {
51
+ setState("error");
52
+ setError(e?.message || "Failed to load models");
53
+ }
54
+ }, []);
55
+ // Get providers that support model import (any provider with a registered provider type)
56
+ const importableProviders = useMemo(() => {
57
+ const providerTypeIds = new Set(providerTypes.map((p) => p.providerId));
58
+ return providers.filter((p) => providerTypeIds.has(p.type));
59
+ }, [providers, providerTypes]);
60
+ // Get installed models that use importable providers (for pricing updates)
61
+ const importableInstalledModels = useMemo(() => {
62
+ const importableProviderIds = new Set(importableProviders.map((p) => p.id));
63
+ return installedModels.filter((m) => m.providerId && importableProviderIds.has(m.providerId));
64
+ }, [installedModels, importableProviders]);
65
+ // Group installed models by provider for efficient batch updates
66
+ const installedModelsByProvider = useMemo(() => {
67
+ const groups = {};
68
+ importableInstalledModels.forEach((model) => {
69
+ if (model.providerId) {
70
+ if (!groups[model.providerId]) {
71
+ groups[model.providerId] = [];
72
+ }
73
+ groups[model.providerId].push(model);
74
+ }
75
+ });
76
+ return groups;
77
+ }, [importableInstalledModels]);
78
+ // Update pricing for all installed models from importable providers
79
+ const handleUpdateAllPricing = useCallback(async () => {
80
+ if (importableInstalledModels.length === 0) {
81
+ setError("No models with supported providers installed to update");
82
+ return;
83
+ }
84
+ try {
85
+ setUpdatingAllPricing(true);
86
+ setError(null);
87
+ let totalUpdated = 0;
88
+ const allErrors = [];
89
+ // Process each provider's models
90
+ for (const [providerId, models] of Object.entries(installedModelsByProvider)) {
91
+ const modelNames = models
92
+ .map((m) => m.name)
93
+ .filter(Boolean);
94
+ if (modelNames.length === 0)
95
+ continue;
96
+ const result = await setupWizardService.upsertProviderModels({
97
+ providerId,
98
+ selectedModelIds: modelNames,
99
+ mode: "updatePricing",
100
+ });
101
+ totalUpdated += result.updatedCount;
102
+ allErrors.push(...result.errors);
103
+ }
104
+ await loadData();
105
+ if (allErrors.length > 0) {
106
+ setError(`Updated ${totalUpdated} models. Errors: ${allErrors.join(", ")}`);
107
+ }
108
+ }
109
+ catch (e) {
110
+ setError(e?.message || "Failed to update pricing");
111
+ }
112
+ finally {
113
+ setUpdatingAllPricing(false);
114
+ }
115
+ }, [importableInstalledModels, installedModelsByProvider, loadData]);
116
+ // Update pricing for a single model
117
+ const handleUpdateSingleModelPricing = useCallback(async (model) => {
118
+ if (!model.providerId || !model.name) {
119
+ setError("Model provider or name is missing");
120
+ return;
121
+ }
122
+ try {
123
+ setUpdatingModelPricing(model.id);
124
+ setError(null);
125
+ const result = await setupWizardService.upsertProviderModels({
126
+ providerId: model.providerId,
127
+ selectedModelIds: [model.name],
128
+ mode: "updatePricing",
129
+ });
130
+ await loadData();
131
+ if (result.errors.length > 0) {
132
+ setError(`Errors: ${result.errors.join(", ")}`);
133
+ }
134
+ }
135
+ catch (e) {
136
+ setError(e?.message || "Failed to update pricing");
137
+ }
138
+ finally {
139
+ setUpdatingModelPricing(null);
140
+ }
141
+ }, [loadData]);
142
+ const handleUpdate = useCallback(async (model) => {
143
+ if (!model.id || !model.key)
144
+ return;
145
+ try {
146
+ setUpdating(model.id);
147
+ setError(null);
148
+ await setupWizardService.updateModel({
149
+ modelId: model.id,
150
+ sourceModelKey: model.key,
151
+ });
152
+ await loadData();
153
+ }
154
+ catch (e) {
155
+ setError(e?.message || "Failed to update model");
156
+ }
157
+ finally {
158
+ setUpdating(null);
159
+ }
160
+ }, [loadData]);
161
+ useEffect(() => {
162
+ loadData();
163
+ }, [loadData]);
164
+ const handleNavigateToProviders = useCallback(() => {
165
+ if (typeof window !== "undefined") {
166
+ window.location.hash = "#providers";
167
+ }
168
+ }, []);
169
+ // Check if model uses an importable provider (OpenRouter or Novita)
170
+ const isImportableModel = useCallback((model) => {
171
+ if (!model.providerId)
172
+ return false;
173
+ return importableProviders.some((p) => p.id === model.providerId);
174
+ }, [importableProviders]);
175
+ // Group models by provider for display
176
+ const groupModelsByProvider = (models) => {
177
+ const groups = {};
178
+ models.forEach((model) => {
179
+ const providerId = model.providerId || "unknown";
180
+ const provider = providers.find((p) => p.id === providerId);
181
+ const providerName = model.providerName || provider?.name || "Unknown Provider";
182
+ if (!groups[providerId]) {
183
+ groups[providerId] = { providerName, models: [] };
184
+ }
185
+ groups[providerId].models.push(model);
186
+ });
187
+ // Sort models within each group by model type then name
188
+ Object.values(groups).forEach((group) => {
189
+ group.models.sort((a, b) => {
190
+ const typeOrder = (a.templateType || "").localeCompare(b.templateType || "");
191
+ if (typeOrder !== 0)
192
+ return typeOrder;
193
+ return (a.name || a.key || "").localeCompare(b.name || b.key || "");
194
+ });
195
+ });
196
+ return groups;
197
+ };
198
+ const modelsByProvider = groupModelsByProvider(installedModels);
199
+ // Helper to get model type display label
200
+ const getModelTypeLabel = (templateType) => {
201
+ switch (templateType) {
202
+ case "Ai Chat Model":
203
+ return "Chat";
204
+ case "Ai Embeddings Model":
205
+ return "Embeddings";
206
+ case "Ai Image Model":
207
+ return "Image";
208
+ default:
209
+ return templateType;
210
+ }
211
+ };
212
+ const statusIcon = (currentState) => {
213
+ if (currentState === "success")
214
+ return _jsx(CheckCircle, { className: "h-4 w-4 text-green-600", strokeWidth: 1 });
215
+ if (currentState === "error")
216
+ return _jsx(AlertCircle, { className: "h-4 w-4 text-red-600", strokeWidth: 1 });
217
+ return (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin text-amber-600", strokeWidth: 1 }));
218
+ };
219
+ // Build the models list content
220
+ const modelsListContent = (_jsx("div", { className: "flex h-full flex-col p-4", children: _jsx("div", { className: "mx-auto flex w-full flex-1 flex-col overflow-hidden", 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: [installedModels.length, " model", installedModels.length !== 1 ? "s" : "", " installed"] })] }), importableInstalledModels.length > 0 && (_jsxs(Button, { size: "sm", variant: "outline", onClick: handleUpdateAllPricing, disabled: updatingAllPricing, title: "Update pricing for all models from their provider APIs", children: [updatingAllPricing ? (_jsx(RefreshCw, { className: "mr-1 h-4 w-4 animate-spin" })) : (_jsx(RefreshCw, { className: "mr-1 h-4 w-4" })), "Update All Pricing"] }))] }), state !== "loading" && providers.length === 0 && (_jsx("div", { className: "rounded border border-yellow-200 bg-yellow-50 p-4", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(AlertCircle, { className: "mt-0.5 h-5 w-5 shrink-0 text-yellow-600" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "mb-1 text-sm font-medium text-yellow-800", children: "No providers configured" }), _jsx("p", { className: "mb-3 text-xs text-yellow-700", children: "You need to configure at least one provider before you can add models." }), _jsxs(Button, { size: "sm", variant: "outline", onClick: handleNavigateToProviders, className: "text-xs", children: ["Go to Providers", _jsx(ArrowRight, { className: "ml-1 h-3 w-3" })] })] })] }) })), providers.length > 0 && (_jsxs("div", { className: "flex gap-2", children: [importableProviders.length > 0 && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
221
+ setShowImportDialog(true);
222
+ setError(null);
223
+ }, children: [_jsx(Cloud, { strokeWidth: 1, className: "mr-1 h-4 w-4" }), "Import from Provider"] })), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
224
+ setShowAddDialog(true);
225
+ setError(null);
226
+ }, children: [_jsx(Plus, { strokeWidth: 1, className: "mr-1 h-4 w-4" }), "Add Manually"] })] })), 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: _jsx("div", { className: "space-y-4", children: Object.entries(modelsByProvider).map(([providerId, { providerName, models }]) => {
227
+ if (models.length === 0)
228
+ return null;
229
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [providerName, _jsxs("span", { className: "ml-2 text-xs font-normal text-gray-500", children: ["(", models.length, " model", models.length !== 1 ? "s" : "", ")"] })] }), _jsx("div", { className: "space-y-2", children: models.map((model) => {
230
+ const status = model.status;
231
+ const isSelected = selectedModel?.id === model.id;
232
+ return (_jsx("div", { className: `flex items-start gap-3 rounded border p-3 transition-shadow hover:shadow-sm ${isSelected
233
+ ? "border-blue-400 bg-blue-50"
234
+ : "border-gray-200 bg-white"}`, children: _jsxs("div", { className: "flex-1 space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: model.name || model.key }), _jsx("span", { className: "rounded bg-gray-100 px-1.5 py-0.5 text-xs text-gray-600", children: getModelTypeLabel(model.templateType || "Ai Chat Model") }), status === "Outdated" && (_jsx("span", { className: "rounded bg-amber-100 px-1.5 py-0.5 text-xs text-amber-700", children: "Update available" }))] }), _jsxs("div", { className: "flex gap-2", children: [status === "Outdated" && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => handleUpdate(model), disabled: updating === model.id, children: [updating === model.id ? (_jsx(RefreshCw, { strokeWidth: 1, className: "h-3 w-3 animate-spin" })) : (_jsx(Upload, { strokeWidth: 1, className: "h-3 w-3" })), "Update"] })), isImportableModel(model) && (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => handleUpdateSingleModelPricing(model), disabled: updatingModelPricing === model.id ||
235
+ updatingAllPricing, title: "Update pricing from provider API", children: updatingModelPricing === model.id ? (_jsx(RefreshCw, { strokeWidth: 1, className: "h-3 w-3 animate-spin" })) : (_jsx(RefreshCw, { strokeWidth: 1, className: "h-3 w-3" })) })), _jsxs(Button, { size: "sm", variant: isSelected ? "default" : "ghost", onClick: () => handleOpenConfig(model), className: "shrink-0", children: [_jsx(Settings, { className: "h-4 w-4", strokeWidth: 1.5 }), "Configure"] })] })] }), model.pricing && (_jsxs("div", { className: "text-xs text-gray-500", children: ["Input: $", model.pricing.inputCostPerMillionTokens?.toFixed(2) || "0.00", "/M, Output: $", model.pricing.outputCostPerMillionTokens?.toFixed(2) || "0.00", "/M", model.pricing
236
+ .cachedInputCostPerMillionTokens && (_jsxs("span", { className: "ml-2", children: ["Cached: $", model.pricing.cachedInputCostPerMillionTokens.toFixed(2), "/M"] }))] })), (model.maxContextWindowTokens ||
237
+ model.maxResponseTokens) && (_jsxs("div", { className: "text-xs text-gray-500", children: [model.maxContextWindowTokens && (_jsxs("span", { children: ["Context:", " ", model.maxContextWindowTokens.toLocaleString(), " ", "tokens"] })), model.maxContextWindowTokens &&
238
+ model.maxResponseTokens &&
239
+ " • ", model.maxResponseTokens && (_jsxs("span", { children: ["Max Response:", " ", model.maxResponseTokens.toLocaleString(), " ", "tokens"] }))] }))] }) }, model.key || model.id));
240
+ }) })] }, providerId));
241
+ }) }) }), _jsx(AddModelDialog, { open: showAddDialog, onOpenChange: setShowAddDialog, onSuccess: loadData, providers: providers, installedModels: installedModels }), _jsx(ImportModelDialog, { open: showImportDialog, onOpenChange: setShowImportDialog, onSuccess: loadData, importableProviders: importableProviders, providerTypes: providerTypes })] }) }) }));
242
+ // Build splitter panels - only show config panel when a model is selected
243
+ const panels = selectedModel?.id
244
+ ? [
245
+ {
246
+ name: "models-list",
247
+ defaultSize: "auto",
248
+ content: modelsListContent,
249
+ className: "overflow-hidden",
250
+ },
251
+ {
252
+ name: "model-config",
253
+ defaultSize: 400,
254
+ content: (_jsx(ItemConfigPanel, { itemId: selectedModel.id, title: `Configure: ${selectedModel.name || selectedModel.key || "Model"}`, onClose: handleCloseConfig }, selectedModel.id)),
255
+ className: "overflow-hidden",
256
+ },
257
+ ]
258
+ : [
259
+ {
260
+ name: "models-list",
261
+ defaultSize: "auto",
262
+ content: modelsListContent,
263
+ className: "overflow-hidden",
264
+ },
265
+ ];
266
+ return (_jsx(Splitter, { panels: panels, localStorageKey: "models-panel-splitter", direction: "horizontal", className: "h-full" }));
267
+ }
268
+ export default ModelsPanel;
269
+ //# sourceMappingURL=ModelsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/ModelsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel for AI Providers configuration.
3
+ * Configure AI providers (OpenAI, Azure OpenAI, OpenRouter).
4
+ */
5
+ export declare function ProvidersPanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default ProvidersPanel;