@parhelia/core 0.1.12554 → 0.1.12555
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/AgentCard.d.ts +4 -6
- package/dist/agents-view/AgentCard.js +24 -143
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsInbox.d.ts +1 -1
- package/dist/agents-view/AgentsInbox.js +92 -7
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsTitlebar.js +2 -3
- package/dist/agents-view/AgentsTitlebar.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +7 -6
- package/dist/agents-view/AgentsView.js +98 -187
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.d.ts +6 -2
- package/dist/agents-view/AgentsWorkspaceView.js +113 -266
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.d.ts +1 -2
- package/dist/agents-view/ProfileAgentsGroup.js +3 -4
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/ActionButton.d.ts +1 -1
- package/dist/components/ActionButton.js.map +1 -1
- package/dist/components/FilterInput.d.ts +1 -1
- package/dist/components/FilterInput.js +1 -1
- package/dist/components/FilterInput.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +4 -2
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/PlaceholderInput.js +3 -3
- package/dist/components/ui/PlaceholderInput.js.map +1 -1
- package/dist/components/ui/PlaceholderInputTypes.js +1 -1
- package/dist/components/ui/PlaceholderInputTypes.js.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +1 -1
- package/dist/components/ui/alert-dialog.js +10 -6
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/button.d.ts +4 -4
- package/dist/components/ui/button.js +1 -4
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts +1 -1
- package/dist/components/ui/context-menu.js +4 -12
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/copy-button.d.ts +1 -2
- package/dist/components/ui/copy-button.js +2 -2
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/dialog.js +126 -21
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/input.d.ts +1 -1
- package/dist/components/ui/input.js +3 -5
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +1 -2
- package/dist/components/ui/paste-button.js +2 -2
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/components/ui/popover.js +9 -1
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/select.js +1 -1
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/styled-dialog-title.js +1 -1
- package/dist/components/ui/styled-dialog-title.js.map +1 -1
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/components/ui/tabs.js +11 -4
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/config/config.d.ts +2 -4
- package/dist/config/config.js +70 -250
- package/dist/config/config.js.map +1 -1
- package/dist/config/types/workspace.d.ts +0 -6
- package/dist/config/types.d.ts +12 -63
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ComponentInfo.d.ts +4 -0
- package/dist/editor/ComponentInfo.js +41 -0
- package/dist/editor/ComponentInfo.js.map +1 -0
- package/dist/editor/ConfirmationDialog.js +4 -20
- package/dist/editor/ConfirmationDialog.js.map +1 -1
- package/dist/editor/ContentTree.d.ts +1 -2
- package/dist/editor/ContentTree.js +32 -93
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/Editor.js +22 -87
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/FieldHistory.js +36 -84
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldListField.js +9 -21
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +2 -23
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +2 -29
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/ImageEditor.js +2 -5
- package/dist/editor/ImageEditor.js.map +1 -1
- package/dist/editor/ItemInfo.js +1 -36
- package/dist/editor/ItemInfo.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +0 -3
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.d.ts +2 -0
- package/dist/editor/MainLayout.js +8 -65
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +5 -29
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/MobileLayout.js +12 -37
- package/dist/editor/MobileLayout.js.map +1 -1
- package/dist/editor/PictureCropper.js +45 -54
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/PictureEditor.js +15 -17
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/QuickItemSwitcher.js +21 -21
- package/dist/editor/QuickItemSwitcher.js.map +1 -1
- package/dist/editor/SetupWizard.js +12 -52
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/Titlebar.js +2 -7
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/ai/AgentCostDisplay.d.ts +0 -1
- package/dist/editor/ai/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/AgentDocumentList.js +14 -32
- package/dist/editor/ai/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/AgentGreeting.js +2 -3
- package/dist/editor/ai/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +1 -2
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentStatusBadge.d.ts +5 -0
- package/dist/editor/ai/AgentStatusBadge.js +65 -67
- package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.d.ts +2 -14
- package/dist/editor/ai/AgentTerminal.js +483 -2377
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +3 -8
- package/dist/editor/ai/AgentTerminalStatusBar.js +56 -460
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/Agents.js +113 -150
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/AiResponseMessage.d.ts +1 -10
- package/dist/editor/ai/AiResponseMessage.js +23 -238
- package/dist/editor/ai/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.d.ts +3 -2
- package/dist/editor/ai/ContextInfoBar.js +7 -64
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +11 -17
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/HelpTerminal.d.ts +5 -0
- package/dist/editor/ai/HelpTerminal.js +166 -0
- package/dist/editor/ai/HelpTerminal.js.map +1 -0
- package/dist/editor/ai/InlineAiDialog.d.ts +1 -1
- package/dist/editor/ai/InlineAiDialog.js +192 -514
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +12 -115
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/MediaImage.js +8 -40
- package/dist/editor/ai/MediaImage.js.map +1 -1
- package/dist/editor/ai/SpawnedAgentsPanel.js +12 -10
- package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
- package/dist/editor/ai/ToolCallDisplay.d.ts +2 -22
- package/dist/editor/ai/ToolCallDisplay.js +147 -518
- package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +8 -1
- package/dist/editor/ai/dialogs/AgentDialogHandler.js +42 -379
- package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.d.ts +1 -5
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +60 -628
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +0 -115
- package/dist/editor/ai/dialogs/agentDialogTypes.js +0 -2
- package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
- package/dist/editor/ai/types.d.ts +1 -3
- package/dist/editor/ai/useAgentStatus.d.ts +1 -2
- package/dist/editor/ai/useAgentStatus.js +99 -86
- package/dist/editor/ai/useAgentStatus.js.map +1 -1
- package/dist/editor/ai/useInlineAiPosition.js +5 -45
- package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +2 -4
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.d.ts +1 -4
- package/dist/editor/client/EditorShell.js +230 -730
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +19 -33
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/helpers.js +0 -6
- package/dist/editor/client/helpers.js.map +1 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js +2 -1
- package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +0 -10
- package/dist/editor/client/hooks/useEditorWebSocket.js +14 -209
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +0 -8
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +7 -68
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/itemsRepository.js +6 -10
- package/dist/editor/client/itemsRepository.js.map +1 -1
- package/dist/editor/client/operations.d.ts +3 -6
- package/dist/editor/client/operations.js +30 -208
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +31 -4
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/ui/DevModeIndicator.js +2 -2
- package/dist/editor/client/ui/DevModeIndicator.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.d.ts +6 -0
- package/dist/editor/client/ui/EditorChrome.js +72 -55
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/client/ui/FullscreenControls.js +3 -5
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/commands/commands.d.ts +1 -11
- package/dist/editor/commands/commands.js +1 -12
- package/dist/editor/commands/commands.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +55 -109
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/customCommandConverter.d.ts +1 -8
- package/dist/editor/commands/customCommandConverter.js +5 -35
- package/dist/editor/commands/customCommandConverter.js.map +1 -1
- package/dist/editor/commands/handlers/agentHandler.js +1 -2
- package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +0 -3
- package/dist/editor/commands/itemCommands.js +10 -93
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/undo.d.ts +15 -9
- package/dist/editor/commands/undo.js +0 -24
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/context-menu/InsertMenu.js +39 -83
- package/dist/editor/context-menu/InsertMenu.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +1 -1
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/RawEditor.js +1 -1
- package/dist/editor/field-types/ReactQuill.d.ts +125 -0
- package/dist/editor/field-types/ReactQuill.js +385 -0
- package/dist/editor/field-types/ReactQuill.js.map +1 -0
- package/dist/editor/field-types/RichTextEditor.js +5 -13
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +3 -37
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +1 -1
- package/dist/editor/field-types/TreeListEditor.js +2 -3
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.css +5 -23
- package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +0 -2
- package/dist/editor/field-types/richtext/components/ReactSlate.js +4 -28
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ToolbarButton.js +2 -4
- package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
- package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +0 -13
- package/dist/editor/field-types/richtext/contextMenuFactory.js +24 -181
- package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/types.d.ts +0 -2
- package/dist/editor/field-types/richtext/types.js.map +1 -1
- package/dist/editor/field-types/richtext/utils/plugins.js +0 -4
- package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js +2 -3
- package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -4
- package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/MediaSelector.js +1 -7
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +35 -40
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +1 -1
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/GenericToolbar.js +2 -4
- package/dist/editor/menubar/GenericToolbar.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +2 -2
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/PageSelector.js +147 -26
- package/dist/editor/menubar/PageSelector.js.map +1 -1
- package/dist/editor/menubar/Separator.js +1 -1
- package/dist/editor/menubar/VersionSelector.js +4 -2
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +12 -39
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +38 -16
- package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +3 -3
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/HelpButton.js +0 -1
- package/dist/editor/menubar/toolbar-sections/HelpButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +10 -6
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +220 -597
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +2 -13
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/CommentHighlighting.js +1 -42
- package/dist/editor/page-editor-chrome/CommentHighlighting.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/InlineEditor.js +48 -97
- package/dist/editor/page-editor-chrome/InlineEditor.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +17 -38
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +11 -17
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js +301 -301
- package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +11 -69
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +4 -2
- package/dist/editor/page-viewer/MiniMap.js +28 -91
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.d.ts +1 -3
- package/dist/editor/page-viewer/PageViewer.js +19 -92
- package/dist/editor/page-viewer/PageViewer.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.d.ts +1 -2
- package/dist/editor/page-viewer/PageViewerFrame.js +115 -348
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +49 -114
- package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
- package/dist/editor/page-viewer/pageViewContext.d.ts +0 -1
- package/dist/editor/page-viewer/pageViewContext.js +14 -51
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/pageModel.d.ts +1 -14
- package/dist/editor/reviews/Comment.js +12 -26
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +5 -7
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +4 -19
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +72 -89
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +177 -281
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +25 -96
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/DiffView.js +14 -7
- package/dist/editor/reviews/DiffView.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +4 -6
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +3 -25
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PagesPanel.js +15 -31
- package/dist/editor/reviews/PagesPanel.js.map +1 -1
- package/dist/editor/reviews/PreviewInfo.js +4 -1
- package/dist/editor/reviews/PreviewInfo.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.js +7 -13
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +2 -3
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +3 -7
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +3 -34
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +5 -31
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/commentAi.js +6 -25
- package/dist/editor/reviews/commentAi.js.map +1 -1
- package/dist/editor/reviews/reviewCommands.js +1 -4
- package/dist/editor/reviews/reviewCommands.js.map +1 -1
- package/dist/editor/reviews/useMultiReview.js +2 -2
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/reviews/useReviews.d.ts +2 -2
- package/dist/editor/reviews/useReviews.js +30 -12
- package/dist/editor/reviews/useReviews.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +5 -229
- package/dist/editor/services/agentService.js +39 -292
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +1 -57
- package/dist/editor/services/aiService.js +6 -79
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +3 -6
- package/dist/editor/services/contentService.js +12 -13
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +1 -52
- package/dist/editor/services/editService.js +2 -94
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/indexService.js +1 -1
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +6 -3
- package/dist/editor/services/reviewsService.js +11 -2
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.d.ts +1 -2
- package/dist/editor/services/serviceHelper.js +20 -112
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/services/systemService.d.ts +1 -2
- package/dist/editor/services/systemService.js +0 -3
- package/dist/editor/services/systemService.js.map +1 -1
- package/dist/editor/services-server/api.d.ts +2 -1
- package/dist/editor/services-server/api.js +6 -11
- package/dist/editor/services-server/api.js.map +1 -1
- package/dist/editor/services-server/graphQL.d.ts +29 -0
- package/dist/editor/services-server/graphQL.js +53 -0
- package/dist/editor/services-server/graphQL.js.map +1 -0
- package/dist/editor/settings/About.js +3 -317
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
- package/dist/editor/settings/AllAgentsPanel.js +139 -0
- package/dist/editor/settings/AllAgentsPanel.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.js +4 -210
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +23 -25
- package/dist/editor/settings/SettingsView.js.map +1 -1
- 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.js +6 -7
- package/dist/editor/settings/Status.js.map +1 -1
- package/dist/editor/settings/index/useIndexStatus.js +22 -20
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.d.ts +4 -0
- package/dist/editor/settings/panels/AgentsPanel.js +121 -95
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- 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/ModelsPanel.js +108 -329
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +59 -86
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +4 -4
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +2 -3
- package/dist/editor/settings/panels/index.js +2 -3
- package/dist/editor/settings/panels/index.js.map +1 -1
- 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 +21 -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/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.js +19 -124
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/settings/status/useStartupChecks.d.ts +1 -3
- package/dist/editor/settings/status/useStartupChecks.js +5 -9
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.d.ts +1 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js +1 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +1 -2
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.d.ts +1 -8
- package/dist/editor/sidebar/ComponentTree.js +69 -216
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/Debug.d.ts +1 -0
- package/dist/editor/sidebar/Debug.js +70 -0
- package/dist/editor/sidebar/Debug.js.map +1 -0
- package/dist/editor/sidebar/EditHistory.js +46 -22
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +8 -4
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/GraphQL.d.ts +2 -0
- package/dist/editor/sidebar/GraphQL.js +234 -0
- package/dist/editor/sidebar/GraphQL.js.map +1 -0
- package/dist/editor/sidebar/LeftToolbar.d.ts +1 -0
- package/dist/editor/sidebar/LeftToolbar.js +12 -0
- package/dist/editor/sidebar/LeftToolbar.js.map +1 -0
- package/dist/editor/sidebar/MainContentTree.js +3 -4
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/NavigationSidebar.d.ts +4 -0
- package/dist/editor/sidebar/NavigationSidebar.js +254 -0
- package/dist/editor/sidebar/NavigationSidebar.js.map +1 -0
- package/dist/editor/sidebar/OperationItem.js +7 -21
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.d.ts +1 -3
- package/dist/editor/sidebar/SidebarPanel.js +12 -44
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/SidebarStack.d.ts +1 -2
- package/dist/editor/sidebar/SidebarStack.js +3 -4
- package/dist/editor/sidebar/SidebarStack.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +12 -22
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +3 -53
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/sidebar/WorkspaceRail.d.ts +1 -0
- package/dist/editor/sidebar/WorkspaceRail.js +167 -56
- package/dist/editor/sidebar/WorkspaceRail.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.d.ts +1 -3
- package/dist/editor/tree-indicators/GutterColumns.js +5 -26
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/tree-indicators/GutterContext.d.ts +0 -4
- package/dist/editor/tree-indicators/GutterContext.js +0 -23
- package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
- package/dist/editor/tree-indicators/GutterSelector.d.ts +5 -0
- package/dist/editor/tree-indicators/GutterSelector.js +91 -0
- package/dist/editor/tree-indicators/GutterSelector.js.map +1 -0
- package/dist/editor/tree-indicators/index.d.ts +1 -0
- package/dist/editor/tree-indicators/index.js +1 -0
- package/dist/editor/tree-indicators/index.js.map +1 -1
- package/dist/editor/tree-indicators/types.d.ts +1 -12
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js +1 -1
- package/dist/editor/ui/CopyMoveTargetSelectorDialog.js.map +1 -1
- package/dist/editor/ui/Icons.js +1 -1
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemNameDialogNew.d.ts +0 -2
- package/dist/editor/ui/ItemNameDialogNew.js +17 -33
- package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
- package/dist/editor/ui/ItemSearch.js +11 -7
- package/dist/editor/ui/ItemSearch.js.map +1 -1
- package/dist/editor/ui/SimpleIconButton.js +1 -1
- package/dist/editor/ui/SimpleIconButton.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.d.ts +0 -1
- package/dist/editor/ui/SimpleTabs.js +25 -45
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.d.ts +0 -1
- package/dist/editor/ui/Splitter.js +86 -102
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +4 -4
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/TreeListSelector.d.ts +1 -6
- package/dist/editor/ui/TreeListSelector.js +2 -2
- package/dist/editor/ui/TreeListSelector.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.d.ts +20 -6
- package/dist/editor/utils/keyboardNavigation.js +140 -48
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/editor/utils.js +9 -19
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/views/CompareView.d.ts +1 -3
- package/dist/editor/views/CompareView.js +5 -7
- package/dist/editor/views/CompareView.js.map +1 -1
- package/dist/editor/views/EditView.js +1 -1
- package/dist/editor/views/EditView.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +34 -27
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +3 -7
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/editor/views/MediaFolderEditView.js +1 -1
- package/dist/editor/views/MediaFolderEditView.js.map +1 -1
- package/dist/editor/views/ParheliaView.js +6 -5
- package/dist/editor/views/ParheliaView.js.map +1 -1
- package/dist/editor/views/SingleEditView.d.ts +1 -2
- package/dist/editor/views/SingleEditView.js +8 -10
- package/dist/editor/views/SingleEditView.js.map +1 -1
- package/dist/editor/views/editorSlotContext.js +6 -35
- package/dist/editor/views/editorSlotContext.js.map +1 -1
- package/dist/index.d.ts +2 -16
- package/dist/index.js +0 -11
- package/dist/index.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.d.ts +13 -40
- package/dist/setup/services/setupWizardService.js +17 -32
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +3 -12
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +22 -39
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +32 -112
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +50 -33
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +6 -2
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +29 -12
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/ParheliaLogo.js +37 -87
- package/dist/splash-screen/ParheliaLogo.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +3 -3
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/tour/Tour.d.ts +1 -2
- package/dist/tour/Tour.js +75 -256
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +96 -222
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/types.d.ts +29 -63
- package/package.json +15 -19
- package/styles.css +10 -14
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import { getAllAgents, closeAgent, deleteAgent, } from "../services/agentService";
|
|
4
|
+
import { getAgentStatusConfig } from "../ai/AgentStatusBadge";
|
|
5
|
+
import { cn } from "../../lib/utils";
|
|
6
|
+
import { Trash, X, RefreshCw } from "lucide-react";
|
|
7
|
+
import { SimpleIconButton } from "../ui/SimpleIconButton";
|
|
8
|
+
import { useEditContext } from "../client/editContext";
|
|
9
|
+
import { Spinner } from "../ui/Spinner";
|
|
10
|
+
/**
|
|
11
|
+
* Settings panel that displays all non-closed agents across all users
|
|
12
|
+
* Admin-only feature for monitoring and managing agents
|
|
13
|
+
*/
|
|
14
|
+
export function AllAgentsPanel() {
|
|
15
|
+
const [agents, setAgents] = useState([]);
|
|
16
|
+
const [loading, setLoading] = useState(true);
|
|
17
|
+
const [error, setError] = useState(null);
|
|
18
|
+
const [refreshing, setRefreshing] = useState(false);
|
|
19
|
+
const [searchTerm, setSearchTerm] = useState("");
|
|
20
|
+
const editContext = useEditContext();
|
|
21
|
+
const loadAgents = async () => {
|
|
22
|
+
try {
|
|
23
|
+
setError(null);
|
|
24
|
+
const result = await getAllAgents(1000);
|
|
25
|
+
setAgents(result);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error("Failed to load agents:", err);
|
|
29
|
+
setError(err?.message ||
|
|
30
|
+
"Failed to load agents. Check if you have admin permissions.");
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
setLoading(false);
|
|
34
|
+
setRefreshing(false);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
loadAgents();
|
|
39
|
+
}, []);
|
|
40
|
+
const handleRefresh = async () => {
|
|
41
|
+
setRefreshing(true);
|
|
42
|
+
await loadAgents();
|
|
43
|
+
};
|
|
44
|
+
const handleCloseAgent = async (agentId, agentName) => {
|
|
45
|
+
editContext?.confirm({
|
|
46
|
+
header: "Close Agent",
|
|
47
|
+
message: `Are you sure you want to close agent "${agentName}"? This will stop its execution if running.`,
|
|
48
|
+
acceptLabel: "Close Agent",
|
|
49
|
+
accept: async () => {
|
|
50
|
+
try {
|
|
51
|
+
await closeAgent(agentId);
|
|
52
|
+
// Remove from list or reload
|
|
53
|
+
setAgents((prev) => prev.filter((a) => a.id !== agentId));
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error("Failed to close agent:", err);
|
|
57
|
+
alert(`Failed to close agent: ${err?.message || "Unknown error"}`);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
showCancel: true,
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
const handleDeleteAgent = async (agentId, agentName, event) => {
|
|
64
|
+
event.stopPropagation();
|
|
65
|
+
editContext?.confirm({
|
|
66
|
+
header: "Delete Agent",
|
|
67
|
+
message: `Are you sure you want to permanently delete agent "${agentName}"?`,
|
|
68
|
+
acceptLabel: "Delete",
|
|
69
|
+
accept: async () => {
|
|
70
|
+
try {
|
|
71
|
+
await deleteAgent(agentId);
|
|
72
|
+
setAgents((prev) => prev.filter((a) => a.id !== agentId));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error("Failed to delete agent:", err);
|
|
76
|
+
alert(`Failed to delete agent: ${err?.message || "Unknown error"}`);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
showCancel: true,
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
const formatDateTime = (dateString) => {
|
|
83
|
+
try {
|
|
84
|
+
const date = new Date(dateString);
|
|
85
|
+
return date.toLocaleString();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return dateString;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const filteredAgents = agents.filter((agent) => {
|
|
92
|
+
if (!searchTerm.trim())
|
|
93
|
+
return true;
|
|
94
|
+
const search = searchTerm.toLowerCase();
|
|
95
|
+
return (agent.name.toLowerCase().includes(search) ||
|
|
96
|
+
agent.userId?.toLowerCase().includes(search) ||
|
|
97
|
+
agent.id.toLowerCase().includes(search));
|
|
98
|
+
});
|
|
99
|
+
// Group agents by status
|
|
100
|
+
const groupedAgents = filteredAgents.reduce((acc, agent) => {
|
|
101
|
+
const statusConfig = getAgentStatusConfig(agent);
|
|
102
|
+
const statusLabel = statusConfig.label.replace("Status: ", "");
|
|
103
|
+
if (!acc[statusLabel]) {
|
|
104
|
+
acc[statusLabel] = [];
|
|
105
|
+
}
|
|
106
|
+
acc[statusLabel].push(agent);
|
|
107
|
+
return acc;
|
|
108
|
+
}, {});
|
|
109
|
+
// Sort groups by priority
|
|
110
|
+
const statusOrder = [
|
|
111
|
+
"Waiting for Approval",
|
|
112
|
+
"Running",
|
|
113
|
+
"Error",
|
|
114
|
+
"New",
|
|
115
|
+
"Completed",
|
|
116
|
+
];
|
|
117
|
+
const sortedGroups = Object.entries(groupedAgents).sort(([a], [b]) => {
|
|
118
|
+
const indexA = statusOrder.indexOf(a);
|
|
119
|
+
const indexB = statusOrder.indexOf(b);
|
|
120
|
+
if (indexA === -1)
|
|
121
|
+
return 1;
|
|
122
|
+
if (indexB === -1)
|
|
123
|
+
return -1;
|
|
124
|
+
return indexA - indexB;
|
|
125
|
+
});
|
|
126
|
+
if (loading) {
|
|
127
|
+
return (_jsxs("div", { className: "flex h-full items-center justify-center gap-2", children: [_jsx(Spinner, { size: "sm" }), _jsx("div", { className: "text-sm text-gray-500", children: "Loading agents..." })] }));
|
|
128
|
+
}
|
|
129
|
+
if (error) {
|
|
130
|
+
return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsxs("div", { className: "max-w-md text-center", children: [_jsx("div", { className: "mb-4 text-sm text-red-600", children: error }), _jsx("button", { onClick: handleRefresh, className: "rounded bg-blue-500 px-4 py-2 text-xs text-white hover:bg-blue-600", children: "Retry" })] }) }));
|
|
131
|
+
}
|
|
132
|
+
return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "border-b border-gray-200 bg-white p-4", children: [_jsxs("div", { className: "mb-3 flex items-center justify-between", children: [_jsx("div", { children: _jsxs("p", { className: "text-xs text-gray-500", children: ["Showing ", filteredAgents.length, " non-closed agent", filteredAgents.length !== 1 ? "s" : "", " across all users"] }) }), _jsx(SimpleIconButton, { onClick: handleRefresh, icon: _jsx(RefreshCw, { className: cn("size-4", refreshing && "animate-spin"), strokeWidth: 1.5 }), label: "Refresh", disabled: refreshing, className: "text-gray-600 hover:text-gray-800" })] }), _jsx("input", { type: "text", placeholder: "Search by name, user, or agent ID...", value: searchTerm, onChange: (e) => setSearchTerm(e.target.value), className: "w-full rounded border border-gray-200 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none" })] }), _jsx("div", { className: "flex-1 overflow-auto", children: filteredAgents.length === 0 ? (_jsx("div", { className: "flex h-full items-center justify-center text-sm text-gray-500", children: searchTerm.trim()
|
|
133
|
+
? "No agents match your search"
|
|
134
|
+
: "No non-closed agents found" })) : (_jsx("div", { className: "space-y-6 p-4", children: sortedGroups.map(([statusLabel, groupAgents]) => (_jsxs("div", { children: [_jsxs("h3", { className: "mb-2 text-xs font-semibold tracking-wide text-gray-500 uppercase", children: [statusLabel, " (", groupAgents.length, ")"] }), _jsx("div", { className: "space-y-2", children: groupAgents.map((agent) => {
|
|
135
|
+
const statusConfig = getAgentStatusConfig(agent);
|
|
136
|
+
return (_jsx("div", { className: "rounded-lg border border-gray-200 bg-white p-3 shadow-sm transition-shadow hover:shadow-md", children: _jsxs("div", { className: "flex items-start justify-between", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "mb-1 flex items-center gap-2", children: [_jsx("div", { className: cn("h-2 w-2 flex-shrink-0 rounded-full", statusConfig.color, statusConfig.shouldPulse && "animate-pulse"), title: statusConfig.label }), _jsx("h4", { className: "truncate font-medium text-gray-900", children: agent.name })] }), _jsxs("div", { className: "space-y-1 text-xs text-gray-600", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: "User:" }), _jsx("span", { children: agent.userId || "Unknown" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: "ID:" }), _jsx("span", { className: "font-mono text-xs", children: agent.id })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: "Updated:" }), _jsx("span", { children: formatDateTime(agent.updatedDate) })] }), agent.totalCost > 0 && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-medium", children: "Cost:" }), _jsxs("span", { children: ["$", agent.totalCost.toFixed(4)] })] }))] })] }), _jsxs("div", { className: "ml-3 flex gap-1", children: [_jsx(SimpleIconButton, { onClick: () => handleCloseAgent(agent.id, agent.name), icon: _jsx(X, { className: "size-3", strokeWidth: 1.5 }), label: "Close Agent", className: "text-gray-600 opacity-60 hover:text-gray-800 hover:opacity-100" }), _jsx(SimpleIconButton, { onClick: (e) => handleDeleteAgent(agent.id, agent.name, e), icon: _jsx(Trash, { className: "size-3", strokeWidth: 1.5 }), label: "Delete Agent", className: "text-red-600 opacity-60 hover:text-red-700 hover:opacity-100" })] })] }) }, agent.id));
|
|
137
|
+
}) })] }, statusLabel))) })) })] }));
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=AllAgentsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AllAgentsPanel.js","sourceRoot":"","sources":["../../../src/editor/settings/AllAgentsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function LatestFeedback(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { useEditContext } from "../client/editContext";
|
|
4
|
+
import { getLatestComments } from "../services/reviewsService";
|
|
5
|
+
import { getLatestSuggestedEdits } from "../services/suggestedEditsService";
|
|
6
|
+
import { Lightbulb, MessageSquare } from "lucide-react";
|
|
7
|
+
import { LanguageSelector } from "../../components/ui/LanguageSelector";
|
|
8
|
+
export function LatestFeedback() {
|
|
9
|
+
const editContext = useEditContext();
|
|
10
|
+
const [items, setItems] = useState([]);
|
|
11
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const [selectedLanguage, setSelectedLanguage] = useState(undefined);
|
|
14
|
+
// Cutoff is now computed server-side. Keep memo in case we later want client hints.
|
|
15
|
+
const sinceIso = null;
|
|
16
|
+
const load = useCallback(async () => {
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
setIsLoading(true);
|
|
19
|
+
setError(null);
|
|
20
|
+
try {
|
|
21
|
+
const take = 50;
|
|
22
|
+
const [cRes, sRes] = await Promise.all([
|
|
23
|
+
getLatestComments(take, selectedLanguage),
|
|
24
|
+
getLatestSuggestedEdits(take, selectedLanguage),
|
|
25
|
+
]);
|
|
26
|
+
const comments = (cRes.data || []).map((c) => ({
|
|
27
|
+
...c,
|
|
28
|
+
kind: "comment",
|
|
29
|
+
}));
|
|
30
|
+
const suggestions = (sRes.data || []).map((s) => ({
|
|
31
|
+
...s,
|
|
32
|
+
kind: "suggestion",
|
|
33
|
+
}));
|
|
34
|
+
const merged = [...comments, ...suggestions].sort((a, b) => {
|
|
35
|
+
const ad = new Date(a.created || 0).getTime();
|
|
36
|
+
const bd = new Date(b.created || 0).getTime();
|
|
37
|
+
return bd - ad;
|
|
38
|
+
});
|
|
39
|
+
const latest = merged.slice(0, 50);
|
|
40
|
+
if (!cancelled)
|
|
41
|
+
setItems(latest);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (!cancelled)
|
|
45
|
+
setError(e?.message || "Failed to load latest items");
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
if (!cancelled)
|
|
49
|
+
setIsLoading(false);
|
|
50
|
+
}
|
|
51
|
+
return () => {
|
|
52
|
+
cancelled = true;
|
|
53
|
+
};
|
|
54
|
+
}, [sinceIso, selectedLanguage]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
let disposed;
|
|
57
|
+
(async () => {
|
|
58
|
+
disposed = await load();
|
|
59
|
+
})();
|
|
60
|
+
return () => {
|
|
61
|
+
try {
|
|
62
|
+
disposed?.();
|
|
63
|
+
}
|
|
64
|
+
catch { }
|
|
65
|
+
};
|
|
66
|
+
}, [load]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const typesToRefresh = new Set([
|
|
69
|
+
"comment-updated",
|
|
70
|
+
"comment-deleted",
|
|
71
|
+
"suggested-edit-updated",
|
|
72
|
+
"suggested-edit-deleted",
|
|
73
|
+
]);
|
|
74
|
+
const dispose = editContext?.addSocketMessageListener?.((message) => {
|
|
75
|
+
try {
|
|
76
|
+
if (typesToRefresh.has(message?.type)) {
|
|
77
|
+
void load();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch { }
|
|
81
|
+
});
|
|
82
|
+
return () => {
|
|
83
|
+
try {
|
|
84
|
+
dispose?.();
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
87
|
+
};
|
|
88
|
+
}, [editContext?.addSocketMessageListener, load]);
|
|
89
|
+
// Items are server-side filtered by language when selected
|
|
90
|
+
const onOpenItem = async (item) => {
|
|
91
|
+
try {
|
|
92
|
+
const mainId = item.kind === "comment" ? item.mainItemId : item.mainItemId;
|
|
93
|
+
const lang = item.kind === "comment" ? item.language : item.mainItemLanguage;
|
|
94
|
+
const ver = item.kind === "comment" ? item.version : item.mainItemVersion;
|
|
95
|
+
await editContext?.loadItem({ id: mainId, language: lang, version: ver });
|
|
96
|
+
editContext?.setSelectedComment(item.kind === "comment" ? item : undefined);
|
|
97
|
+
if (item.kind === "comment") {
|
|
98
|
+
editContext?.setScrollIntoView(item.itemId);
|
|
99
|
+
}
|
|
100
|
+
editContext?.openSidebar("feedback");
|
|
101
|
+
}
|
|
102
|
+
catch { }
|
|
103
|
+
};
|
|
104
|
+
const Row = ({ item }) => {
|
|
105
|
+
const isComment = item.kind === "comment";
|
|
106
|
+
const created = item.created
|
|
107
|
+
? new Date(item.created)
|
|
108
|
+
: undefined;
|
|
109
|
+
const dateText = created
|
|
110
|
+
? `${created.toLocaleDateString()} ${created.toLocaleTimeString()}`
|
|
111
|
+
: "";
|
|
112
|
+
const comment = isComment ? item : undefined;
|
|
113
|
+
const pageName = isComment
|
|
114
|
+
? comment?.mainItemName ||
|
|
115
|
+
(comment?.relatedItems || []).find((ri) => ri.itemId === comment?.mainItemId)?.itemName
|
|
116
|
+
: item.mainItemName;
|
|
117
|
+
const componentName = isComment
|
|
118
|
+
? comment?.itemName
|
|
119
|
+
: item.itemName;
|
|
120
|
+
const fieldName = isComment ? comment?.fieldName : undefined;
|
|
121
|
+
const user = item.authorDisplayName || item.author || "";
|
|
122
|
+
const label = isComment ? "Comment" : "Suggestion";
|
|
123
|
+
return (_jsx("button", { className: "w-full cursor-pointer rounded p-1 text-left hover:bg-gray-100", onClick: () => onOpenItem(item), children: _jsxs("div", { className: "flex items-center justify-between gap-2 text-xs", children: [_jsxs("div", { className: "flex items-center gap-2 truncate", children: [_jsx("span", { className: "inline-flex items-center justify-center rounded py-0.5 text-gray-700", "aria-label": label, title: label, children: isComment ? (_jsx(MessageSquare, { className: "h-3.5 w-3.5", strokeWidth: 1 })) : (_jsx(Lightbulb, { className: "h-3.5 w-3.5", strokeWidth: 1 })) }), _jsx("div", { className: "flex items-center", children: [
|
|
124
|
+
pageName,
|
|
125
|
+
componentName,
|
|
126
|
+
fieldName ||
|
|
127
|
+
(item.kind === "suggestion" ? item.fieldId : undefined),
|
|
128
|
+
]
|
|
129
|
+
.filter((x) => !!x && x.length > 0)
|
|
130
|
+
.map((seg, idx, arr) => (_jsxs("span", { className: "truncate", children: [idx > 0 && (_jsx("span", { className: "mx-1 text-gray-400", children: ">" })), _jsx("span", { className: idx === 0
|
|
131
|
+
? "font-medium text-gray-900"
|
|
132
|
+
: "text-gray-500", children: seg })] }, idx))) }), user && _jsxs("span", { className: "text-gray-500", children: [" \u00B7 ", user] })] }), _jsx("div", { className: "shrink-0 text-[10px] text-gray-500", children: dateText })] }) }));
|
|
133
|
+
};
|
|
134
|
+
return (_jsxs("div", { className: "h-full overflow-auto p-2", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(LanguageSelector, { selectedLanguage: selectedLanguage, onLanguageSelected: (language) => setSelectedLanguage(language.languageCode), showAllLanguages: true }), selectedLanguage && (_jsx("button", { className: "text-xs text-gray-600 hover:underline", onClick: () => setSelectedLanguage(undefined), children: "Clear" }))] }), isLoading && _jsx("div", { className: "p-2 text-xs text-gray-500", children: "Loading\u2026" }), error && _jsx("div", { className: "p-2 text-xs text-red-600", children: error }), !isLoading && !error && items.length === 0 && (_jsx("div", { className: "p-2 text-xs text-gray-500", children: "No recent activity" })), _jsx("div", { className: "divide-y", children: items.map((it) => (_jsx(Row, { item: it }, `${it.kind}-${it.id}`))) })] }));
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=LatestFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LatestFeedback.js","sourceRoot":"","sources":["../../../src/editor/settings/LatestFeedback.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,196 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
2
|
import { useEditContext } from "../client/editContext";
|
|
4
|
-
import { loadQuotaUsers, requestQuota, } from "../services/aiService";
|
|
5
|
-
const MONTH_NAMES = [
|
|
6
|
-
"January",
|
|
7
|
-
"February",
|
|
8
|
-
"March",
|
|
9
|
-
"April",
|
|
10
|
-
"May",
|
|
11
|
-
"June",
|
|
12
|
-
"July",
|
|
13
|
-
"August",
|
|
14
|
-
"September",
|
|
15
|
-
"October",
|
|
16
|
-
"November",
|
|
17
|
-
"December",
|
|
18
|
-
];
|
|
19
|
-
function parseUsageDate(rawDate) {
|
|
20
|
-
if (!rawDate)
|
|
21
|
-
return null;
|
|
22
|
-
const normalized = rawDate.includes("T") ? rawDate : `${rawDate}T00:00:00Z`;
|
|
23
|
-
const parsed = new Date(normalized);
|
|
24
|
-
return isNaN(parsed.getTime()) ? null : parsed;
|
|
25
|
-
}
|
|
26
|
-
function DailyUsageBarChart(props) {
|
|
27
|
-
const { title, unit, colorClass, valueFormatter, points } = props;
|
|
28
|
-
const maxValue = Math.max(1, ...points.map((point) => point.value));
|
|
29
|
-
const hasValues = points.some((point) => point.value > 0);
|
|
30
|
-
return (_jsxs("div", { className: "rounded border border-gray-100 bg-gray-50 p-3", children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("p", { className: "text-sm font-medium text-gray-700", children: title }), _jsxs("p", { className: "text-xs text-gray-500", children: ["Max: ", valueFormatter(maxValue), " ", unit] })] }), _jsx("div", { className: "h-36 rounded border border-gray-100 bg-white p-2", children: _jsx("div", { className: "flex h-full items-end gap-[2px]", children: points.map((point) => {
|
|
31
|
-
const heightPercent = point.value <= 0 ? 2 : Math.max(4, (point.value / maxValue) * 100);
|
|
32
|
-
return (_jsx("div", { className: "group relative flex h-full flex-1 items-end", children: _jsx("div", { className: `w-full rounded-t-sm ${colorClass} opacity-90 transition-opacity group-hover:opacity-100`, style: { height: `${heightPercent}%` }, title: `Day ${point.day}: ${valueFormatter(point.value)} ${unit}` }) }, point.day));
|
|
33
|
-
}) }) }), _jsx("div", { className: "mt-2 grid text-[10px] text-gray-500", style: { gridTemplateColumns: `repeat(${points.length}, minmax(0, 1fr))` }, children: points.map((point) => {
|
|
34
|
-
const shouldShowLabel = point.day === 1 ||
|
|
35
|
-
point.day === points.length ||
|
|
36
|
-
point.day % 5 === 0;
|
|
37
|
-
return (_jsx("span", { className: "text-center", children: shouldShowLabel ? point.day : "" }, point.day));
|
|
38
|
-
}) }), !hasValues && (_jsx("p", { className: "mt-2 text-xs text-gray-500", children: "No usage recorded for this period." }))] }));
|
|
39
|
-
}
|
|
40
3
|
export function QuotaInfo() {
|
|
41
4
|
const editContext = useEditContext();
|
|
42
|
-
const
|
|
43
|
-
const today = new Date();
|
|
44
|
-
const currentYear = today.getFullYear();
|
|
45
|
-
const [selectedMonth, setSelectedMonth] = useState(today.getMonth());
|
|
46
|
-
const [selectedYear, setSelectedYear] = useState(currentYear);
|
|
47
|
-
const isAdministrator = editContext?.user?.isAdministrator === true;
|
|
48
|
-
const currentUserName = editContext?.user?.name ?? "";
|
|
49
|
-
const [selectedScope, setSelectedScope] = useState("me");
|
|
50
|
-
const [selectedUserName, setSelectedUserName] = useState("");
|
|
51
|
-
const [quotaUsers, setQuotaUsers] = useState([]);
|
|
52
|
-
const [scopedQuotaInfo, setScopedQuotaInfo] = useState(null);
|
|
53
|
-
const [isLoadingScopedQuota, setIsLoadingScopedQuota] = useState(false);
|
|
54
|
-
const [scopeError, setScopeError] = useState(null);
|
|
55
|
-
const quotaInfo = isAdministrator && selectedScope !== "me" ? scopedQuotaInfo : liveQuotaInfo;
|
|
56
|
-
useEffect(() => {
|
|
57
|
-
if (selectedUserName || !currentUserName)
|
|
58
|
-
return;
|
|
59
|
-
setSelectedUserName(currentUserName);
|
|
60
|
-
}, [currentUserName, selectedUserName]);
|
|
61
|
-
const availableQuotaUsers = useMemo(() => {
|
|
62
|
-
const withCurrentUser = currentUserName &&
|
|
63
|
-
!quotaUsers.some((user) => user.userName.toLowerCase() === currentUserName.toLowerCase())
|
|
64
|
-
? [
|
|
65
|
-
...quotaUsers,
|
|
66
|
-
{ userName: currentUserName, displayName: currentUserName },
|
|
67
|
-
]
|
|
68
|
-
: quotaUsers;
|
|
69
|
-
return [...withCurrentUser].sort((a, b) => a.userName.localeCompare(b.userName, undefined, { sensitivity: "base" }));
|
|
70
|
-
}, [currentUserName, quotaUsers]);
|
|
71
|
-
useEffect(() => {
|
|
72
|
-
if (!isAdministrator)
|
|
73
|
-
return;
|
|
74
|
-
let cancelled = false;
|
|
75
|
-
async function fetchQuotaUsers() {
|
|
76
|
-
const response = await loadQuotaUsers();
|
|
77
|
-
if (cancelled)
|
|
78
|
-
return;
|
|
79
|
-
if (response.type === "success") {
|
|
80
|
-
setQuotaUsers(response.data ?? []);
|
|
81
|
-
setScopeError(null);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
setScopeError(response.details ?? "Failed to load users");
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
void fetchQuotaUsers();
|
|
88
|
-
return () => {
|
|
89
|
-
cancelled = true;
|
|
90
|
-
};
|
|
91
|
-
}, [isAdministrator]);
|
|
92
|
-
const loadScopedQuotaInfo = useCallback(async () => {
|
|
93
|
-
if (!isAdministrator)
|
|
94
|
-
return;
|
|
95
|
-
if (selectedScope === "me") {
|
|
96
|
-
setIsLoadingScopedQuota(false);
|
|
97
|
-
setScopedQuotaInfo(null);
|
|
98
|
-
setScopeError(null);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (selectedScope === "user" && !selectedUserName) {
|
|
102
|
-
setIsLoadingScopedQuota(false);
|
|
103
|
-
setScopedQuotaInfo(null);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
setIsLoadingScopedQuota(true);
|
|
107
|
-
setScopedQuotaInfo(null);
|
|
108
|
-
const response = await requestQuota({
|
|
109
|
-
scope: selectedScope,
|
|
110
|
-
userName: selectedScope === "user" ? selectedUserName : undefined,
|
|
111
|
-
});
|
|
112
|
-
if (response.type === "success" && response.data) {
|
|
113
|
-
const payload = response.data;
|
|
114
|
-
setScopedQuotaInfo({
|
|
115
|
-
usage: {
|
|
116
|
-
totalTokens: payload.usage.totalTokens,
|
|
117
|
-
totalImages: payload.usage.totalImages,
|
|
118
|
-
dailyTokens: payload.usage.dailyTokens,
|
|
119
|
-
dailyImages: payload.usage.dailyImages,
|
|
120
|
-
totalCost: payload.usage.totalCost,
|
|
121
|
-
dailyCost: payload.usage.dailyCost,
|
|
122
|
-
dailyHistory: payload.usage.dailyHistory ?? [],
|
|
123
|
-
},
|
|
124
|
-
limits: {
|
|
125
|
-
totalTokens: payload.limits.totalTokens,
|
|
126
|
-
dailyTokens: payload.limits.dailyTokens,
|
|
127
|
-
monthlyTokens: -1,
|
|
128
|
-
totalImages: payload.limits.totalImages,
|
|
129
|
-
dailyImages: payload.limits.dailyImages,
|
|
130
|
-
monthlyImages: -1,
|
|
131
|
-
},
|
|
132
|
-
});
|
|
133
|
-
setScopeError(null);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
setScopedQuotaInfo(null);
|
|
137
|
-
setScopeError(response.details ?? "Failed to load quota");
|
|
138
|
-
}
|
|
139
|
-
setIsLoadingScopedQuota(false);
|
|
140
|
-
}, [isAdministrator, selectedScope, selectedUserName]);
|
|
141
|
-
useEffect(() => {
|
|
142
|
-
if (!isAdministrator)
|
|
143
|
-
return;
|
|
144
|
-
void loadScopedQuotaInfo();
|
|
145
|
-
}, [isAdministrator, loadScopedQuotaInfo]);
|
|
146
|
-
const dailyHistory = useMemo(() => quotaInfo?.usage.dailyHistory ?? [], [quotaInfo?.usage.dailyHistory]);
|
|
147
|
-
const availableYears = useMemo(() => {
|
|
148
|
-
const years = new Set([currentYear]);
|
|
149
|
-
for (const point of dailyHistory) {
|
|
150
|
-
const date = parseUsageDate(point.date);
|
|
151
|
-
if (date)
|
|
152
|
-
years.add(date.getUTCFullYear());
|
|
153
|
-
}
|
|
154
|
-
return Array.from(years).sort((a, b) => b - a);
|
|
155
|
-
}, [dailyHistory, currentYear]);
|
|
156
|
-
useEffect(() => {
|
|
157
|
-
if (availableYears.length === 0)
|
|
158
|
-
return;
|
|
159
|
-
if (!availableYears.includes(selectedYear))
|
|
160
|
-
setSelectedYear(availableYears[0]);
|
|
161
|
-
}, [availableYears, selectedYear]);
|
|
162
|
-
const dailyChartPoints = useMemo(() => {
|
|
163
|
-
const daysInMonth = new Date(selectedYear, selectedMonth + 1, 0).getDate();
|
|
164
|
-
const pointsByDay = new Map();
|
|
165
|
-
for (let day = 1; day <= daysInMonth; day += 1) {
|
|
166
|
-
pointsByDay.set(day, { day, tokens: 0, images: 0, tokenCost: 0, imageCost: 0 });
|
|
167
|
-
}
|
|
168
|
-
for (const point of dailyHistory) {
|
|
169
|
-
const date = parseUsageDate(point.date);
|
|
170
|
-
if (!date)
|
|
171
|
-
continue;
|
|
172
|
-
const year = date.getUTCFullYear();
|
|
173
|
-
const month = date.getUTCMonth();
|
|
174
|
-
const day = date.getUTCDate();
|
|
175
|
-
if (year !== selectedYear || month !== selectedMonth)
|
|
176
|
-
continue;
|
|
177
|
-
const existing = pointsByDay.get(day);
|
|
178
|
-
if (!existing)
|
|
179
|
-
continue;
|
|
180
|
-
existing.tokens += point.tokens ?? 0;
|
|
181
|
-
existing.images += point.images ?? 0;
|
|
182
|
-
existing.tokenCost += point.tokenCost ?? 0;
|
|
183
|
-
existing.imageCost += point.imageCost ?? 0;
|
|
184
|
-
}
|
|
185
|
-
return Array.from(pointsByDay.values()).sort((a, b) => a.day - b.day);
|
|
186
|
-
}, [dailyHistory, selectedMonth, selectedYear]);
|
|
187
|
-
const selectedMonthTotals = useMemo(() => dailyChartPoints.reduce((acc, point) => {
|
|
188
|
-
acc.tokens += point.tokens;
|
|
189
|
-
acc.images += point.images;
|
|
190
|
-
acc.tokenCost += point.tokenCost;
|
|
191
|
-
acc.imageCost += point.imageCost;
|
|
192
|
-
return acc;
|
|
193
|
-
}, { tokens: 0, images: 0, tokenCost: 0, imageCost: 0 }), [dailyChartPoints]);
|
|
5
|
+
const quotaInfo = editContext?.quotaInfo;
|
|
194
6
|
const formatQuotaPercentage = (used, limit) => {
|
|
195
7
|
if (!limit || limit === 0 || limit === -1)
|
|
196
8
|
return "No limit";
|
|
@@ -227,13 +39,10 @@ export function QuotaInfo() {
|
|
|
227
39
|
return 0;
|
|
228
40
|
return Math.min(100, (used / limit) * 100);
|
|
229
41
|
};
|
|
230
|
-
const adminScopePanel = isAdministrator ? (_jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", "data-testid": "quota-admin-scope-panel", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Usage Scope" }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "quota-scope-select", className: "mb-1 block text-sm font-medium text-gray-500", children: "View" }), _jsxs("select", { id: "quota-scope-select", value: selectedScope, onChange: (event) => setSelectedScope(event.target.value), className: "w-full rounded border border-gray-200 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none", "data-testid": "quota-scope-select", children: [_jsx("option", { value: "me", children: "Me" }), _jsx("option", { value: "all", children: "All users" }), _jsx("option", { value: "user", children: "Select user" })] })] }), selectedScope === "user" && (_jsxs("div", { children: [_jsx("label", { htmlFor: "quota-user-select", className: "mb-1 block text-sm font-medium text-gray-500", children: "User" }), _jsxs("select", { id: "quota-user-select", value: selectedUserName, onChange: (event) => setSelectedUserName(event.target.value), className: "w-full rounded border border-gray-200 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none", "data-testid": "quota-user-select", children: [availableQuotaUsers.length === 0 && (_jsx("option", { value: "", children: "No users available" })), availableQuotaUsers.map((user) => (_jsxs("option", { value: user.userName, children: [user.displayName, " (", user.userName, ")"] }, user.userName)))] })] }))] }), scopeError && (_jsx("p", { className: "mt-3 text-xs text-red-600", "data-testid": "quota-scope-error", children: scopeError }))] })) : null;
|
|
231
42
|
if (!quotaInfo) {
|
|
232
|
-
return (
|
|
233
|
-
? "Loading quota information..."
|
|
234
|
-
: "No quota information available" }) })] }));
|
|
43
|
+
return (_jsx("div", { className: "space-y-6 p-4", children: _jsx("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: _jsx("p", { className: "text-gray-600", children: "No quota information available" }) }) }));
|
|
235
44
|
}
|
|
236
|
-
return (_jsxs("div", { className: "space-y-6 p-4",
|
|
45
|
+
return (_jsxs("div", { className: "space-y-6 p-4", children: [_jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Token Usage" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total Usage" }), _jsxs("span", { className: "text-sm text-gray-600", children: [quotaInfo.usage.totalTokens.toLocaleString(), " /", " ", quotaInfo.limits.totalTokens &&
|
|
237
46
|
quotaInfo.limits.totalTokens > 0
|
|
238
47
|
? quotaInfo.limits.totalTokens.toLocaleString()
|
|
239
48
|
: "∞"] })] }), quotaInfo.limits.totalTokens &&
|
|
@@ -285,22 +94,7 @@ export function QuotaInfo() {
|
|
|
285
94
|
width: `${getProgressWidth(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)}%`,
|
|
286
95
|
} }) })), _jsx("p", { className: "mt-1 text-xs text-gray-500", children: quotaInfo.limits.dailyImages === -1
|
|
287
96
|
? "No daily limit"
|
|
288
|
-
: `${formatQuotaPercentage(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)} used today` })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4",
|
|
289
|
-
day: point.day,
|
|
290
|
-
value: point.tokens,
|
|
291
|
-
})) }), _jsx(DailyUsageBarChart, { title: "Cost Tokens / day", unit: "USD", colorClass: "bg-emerald-500", valueFormatter: (value) => value.toFixed(2), points: dailyChartPoints.map((point) => ({
|
|
292
|
-
day: point.day,
|
|
293
|
-
value: point.tokenCost,
|
|
294
|
-
})) }), _jsx(DailyUsageBarChart, { title: "Images / day", unit: "images", colorClass: "bg-purple-500", valueFormatter: (value) => value.toLocaleString(), points: dailyChartPoints.map((point) => ({
|
|
295
|
-
day: point.day,
|
|
296
|
-
value: point.images,
|
|
297
|
-
})) }), _jsx(DailyUsageBarChart, { title: "Cost Images / day", unit: "USD", colorClass: "bg-teal-500", valueFormatter: (value) => value.toFixed(2), points: dailyChartPoints.map((point) => ({
|
|
298
|
-
day: point.day,
|
|
299
|
-
value: point.imageCost,
|
|
300
|
-
})) }), _jsx(DailyUsageBarChart, { title: "Total Cost / day", unit: "USD", colorClass: "bg-amber-500", valueFormatter: (value) => value.toFixed(2), points: dailyChartPoints.map((point) => ({
|
|
301
|
-
day: point.day,
|
|
302
|
-
value: point.tokenCost + point.imageCost,
|
|
303
|
-
})) })] }), dailyHistory.length === 0 && (_jsx("p", { className: "mt-3 text-xs text-gray-500", children: "No historical usage payload received yet. The chart will populate as daily usage data is sent from the server." }))] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Cost Summary" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total (All Time)" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.totalCost ?? 0).toFixed(2)] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Today" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.dailyCost ?? 0).toFixed(2)] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", "data-testid": "quota-status-summary", children: [_jsx("h4", { className: "mb-2 text-sm font-medium text-gray-700", children: "Quota Status" }), _jsxs("div", { className: "space-y-1 text-sm", children: [editContext?.isQuotaExceeded && (_jsx("p", { className: "font-medium text-red-600", "data-testid": "quota-exceeded-message", children: "\u26A0\uFE0F Quota limits have been exceeded" })), editContext?.getQuotaWarningMessage &&
|
|
97
|
+
: `${formatQuotaPercentage(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)} used today` })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Cost Summary" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total (All Time)" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.totalCost ?? 0).toFixed(2)] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Today" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.dailyCost ?? 0).toFixed(2)] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h4", { className: "mb-2 text-sm font-medium text-gray-700", children: "Quota Status" }), _jsxs("div", { className: "space-y-1 text-sm", children: [editContext?.isQuotaExceeded && (_jsx("p", { className: "font-medium text-red-600", children: "\u26A0\uFE0F Quota limits have been exceeded" })), editContext?.getQuotaWarningMessage &&
|
|
304
98
|
editContext.getQuotaWarningMessage() &&
|
|
305
99
|
!editContext.isQuotaExceeded && (_jsxs("p", { className: "text-orange-600", children: ["\u26A0\uFE0F ", editContext.getQuotaWarningMessage()] })), !editContext?.isQuotaExceeded &&
|
|
306
100
|
!editContext?.getQuotaWarningMessage?.() && (_jsx("p", { className: "text-green-600", children: "\u2705 All quotas are within limits" }))] })] })] }));
|