@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
|
@@ -5,8 +5,7 @@ import "react-json-view-lite/dist/index.css";
|
|
|
5
5
|
import { Spinner } from "../ui/Spinner";
|
|
6
6
|
import { Button } from "../../components/ui/button";
|
|
7
7
|
import { CopyButton } from "../../components/ui/copy-button";
|
|
8
|
-
import { approveToolCall,
|
|
9
|
-
import { formatTime } from "../utils";
|
|
8
|
+
import { approveToolCall, rejectToolCall, updateAgentSettings } from "../services/agentService";
|
|
10
9
|
// Custom dark theme styles for JSON view
|
|
11
10
|
const darkJsonStyles = {
|
|
12
11
|
...defaultStyles,
|
|
@@ -69,45 +68,6 @@ const getToolIcon = (toolName) => {
|
|
|
69
68
|
};
|
|
70
69
|
return iconMap[toolName] || iconMap.default;
|
|
71
70
|
};
|
|
72
|
-
const formatToolDuration = (durationMs) => {
|
|
73
|
-
if (typeof durationMs !== "number" ||
|
|
74
|
-
!Number.isFinite(durationMs) ||
|
|
75
|
-
durationMs < 0) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
if (durationMs < 1000) {
|
|
79
|
-
return `${Math.round(durationMs)}ms`;
|
|
80
|
-
}
|
|
81
|
-
if (durationMs < 10_000) {
|
|
82
|
-
return `${(durationMs / 1000).toFixed(1)}s`;
|
|
83
|
-
}
|
|
84
|
-
if (durationMs < 60_000) {
|
|
85
|
-
return `${Math.round(durationMs / 1000)}s`;
|
|
86
|
-
}
|
|
87
|
-
const totalSeconds = Math.round(durationMs / 1000);
|
|
88
|
-
const minutes = Math.floor(totalSeconds / 60);
|
|
89
|
-
const seconds = totalSeconds % 60;
|
|
90
|
-
if (minutes < 60) {
|
|
91
|
-
return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;
|
|
92
|
-
}
|
|
93
|
-
const hours = Math.floor(minutes / 60);
|
|
94
|
-
const remainingMinutes = minutes % 60;
|
|
95
|
-
return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`;
|
|
96
|
-
};
|
|
97
|
-
const formatToolCallMeta = (createdDate, durationMs) => {
|
|
98
|
-
const parts = [];
|
|
99
|
-
if (createdDate) {
|
|
100
|
-
const parsed = new Date(createdDate);
|
|
101
|
-
if (!Number.isNaN(parsed.getTime())) {
|
|
102
|
-
parts.push(formatTime(parsed));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
const duration = formatToolDuration(durationMs);
|
|
106
|
-
if (duration) {
|
|
107
|
-
parts.push(duration);
|
|
108
|
-
}
|
|
109
|
-
return parts.length > 0 ? parts.join(" • ") : null;
|
|
110
|
-
};
|
|
111
71
|
// Helper function to normalize tool calls to a common format
|
|
112
72
|
const normalizeToolCall = (toolCall) => {
|
|
113
73
|
if ("functionName" in toolCall) {
|
|
@@ -118,14 +78,10 @@ const normalizeToolCall = (toolCall) => {
|
|
|
118
78
|
function: {
|
|
119
79
|
name: toolCall.functionName,
|
|
120
80
|
arguments: toolCall.functionArguments,
|
|
121
|
-
result: toolCall.
|
|
81
|
+
result: toolCall.functionResult,
|
|
122
82
|
error: toolCall.functionError,
|
|
123
83
|
},
|
|
124
84
|
requiresApproval: toolCall.requiresApproval,
|
|
125
|
-
isPruned: toolCall.isPruned,
|
|
126
|
-
prunedAt: toolCall.prunedAt,
|
|
127
|
-
responseTimeMs: toolCall.responseTimeMs,
|
|
128
|
-
createdDate: toolCall.createdDate,
|
|
129
85
|
};
|
|
130
86
|
}
|
|
131
87
|
// Already in base format
|
|
@@ -177,125 +133,6 @@ const parseJsonString = (json) => {
|
|
|
177
133
|
}
|
|
178
134
|
}
|
|
179
135
|
};
|
|
180
|
-
const isImageDataUrl = (value) => {
|
|
181
|
-
return typeof value === "string" && /^data:image\//i.test(value.trim());
|
|
182
|
-
};
|
|
183
|
-
const getInlineImageSource = (value) => {
|
|
184
|
-
if (isImageDataUrl(value)) {
|
|
185
|
-
return value.trim();
|
|
186
|
-
}
|
|
187
|
-
if (!value || typeof value !== "object") {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
const candidate = value;
|
|
191
|
-
if (isImageDataUrl(candidate.dataUrl)) {
|
|
192
|
-
return candidate.dataUrl.trim();
|
|
193
|
-
}
|
|
194
|
-
if (isImageDataUrl(candidate.url)) {
|
|
195
|
-
return candidate.url.trim();
|
|
196
|
-
}
|
|
197
|
-
if (isImageDataUrl(candidate.src)) {
|
|
198
|
-
return candidate.src.trim();
|
|
199
|
-
}
|
|
200
|
-
const imageUrlCandidate = candidate.imageUrl ?? candidate.image_url;
|
|
201
|
-
if (imageUrlCandidate && typeof imageUrlCandidate === "object") {
|
|
202
|
-
const imageUrlRecord = imageUrlCandidate;
|
|
203
|
-
if (isImageDataUrl(imageUrlRecord.url)) {
|
|
204
|
-
return imageUrlRecord.url.trim();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return null;
|
|
208
|
-
};
|
|
209
|
-
const extractInlineToolResultImage = (value) => {
|
|
210
|
-
const directSource = getInlineImageSource(value);
|
|
211
|
-
if (directSource) {
|
|
212
|
-
return {
|
|
213
|
-
src: directSource,
|
|
214
|
-
alt: "Tool result image",
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
if (Array.isArray(value)) {
|
|
218
|
-
for (const entry of value) {
|
|
219
|
-
const preview = extractInlineToolResultImage(entry);
|
|
220
|
-
if (preview) {
|
|
221
|
-
return preview;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
if (!value || typeof value !== "object") {
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
const candidate = value;
|
|
230
|
-
const nestedImage = candidate.image && typeof candidate.image === "object"
|
|
231
|
-
? candidate.image
|
|
232
|
-
: undefined;
|
|
233
|
-
const richImageSource = getInlineImageSource(candidate.imageUrl ??
|
|
234
|
-
candidate.image_url);
|
|
235
|
-
const src = isImageDataUrl(nestedImage?.dataUrl)
|
|
236
|
-
? nestedImage?.dataUrl.trim()
|
|
237
|
-
: isImageDataUrl(candidate.dataUrl)
|
|
238
|
-
? candidate.dataUrl.trim()
|
|
239
|
-
: richImageSource
|
|
240
|
-
? richImageSource
|
|
241
|
-
: null;
|
|
242
|
-
if (!src) {
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
const width = typeof candidate.imageWidth === "number" && Number.isFinite(candidate.imageWidth)
|
|
246
|
-
? candidate.imageWidth
|
|
247
|
-
: typeof nestedImage?.width === "number" && Number.isFinite(nestedImage.width)
|
|
248
|
-
? nestedImage.width
|
|
249
|
-
: undefined;
|
|
250
|
-
const height = typeof candidate.imageHeight === "number" &&
|
|
251
|
-
Number.isFinite(candidate.imageHeight)
|
|
252
|
-
? candidate.imageHeight
|
|
253
|
-
: typeof nestedImage?.height === "number" &&
|
|
254
|
-
Number.isFinite(nestedImage.height)
|
|
255
|
-
? nestedImage.height
|
|
256
|
-
: undefined;
|
|
257
|
-
return {
|
|
258
|
-
src,
|
|
259
|
-
alt: candidate.scope
|
|
260
|
-
? `Screenshot result (${candidate.scope})`
|
|
261
|
-
: "Tool result image",
|
|
262
|
-
fileName: nestedImage?.fileName || candidate.fileName,
|
|
263
|
-
dimensions: width && height ? `${Math.round(width)} x ${Math.round(height)}` : undefined,
|
|
264
|
-
};
|
|
265
|
-
};
|
|
266
|
-
const sanitizeInlineImageDataForDisplay = (value) => {
|
|
267
|
-
if (isImageDataUrl(value)) {
|
|
268
|
-
return "[image data URL omitted from preview]";
|
|
269
|
-
}
|
|
270
|
-
if (Array.isArray(value)) {
|
|
271
|
-
let hasChanges = false;
|
|
272
|
-
const sanitizedItems = value.map((entry) => {
|
|
273
|
-
const sanitizedEntry = sanitizeInlineImageDataForDisplay(entry);
|
|
274
|
-
if (sanitizedEntry !== entry) {
|
|
275
|
-
hasChanges = true;
|
|
276
|
-
}
|
|
277
|
-
return sanitizedEntry;
|
|
278
|
-
});
|
|
279
|
-
return hasChanges ? sanitizedItems : value;
|
|
280
|
-
}
|
|
281
|
-
if (!value || typeof value !== "object") {
|
|
282
|
-
return value;
|
|
283
|
-
}
|
|
284
|
-
const candidate = value;
|
|
285
|
-
let hasChanges = false;
|
|
286
|
-
const clone = {};
|
|
287
|
-
Object.entries(candidate).forEach(([key, entryValue]) => {
|
|
288
|
-
const sanitizedValue = sanitizeInlineImageDataForDisplay(entryValue);
|
|
289
|
-
clone[key] = sanitizedValue;
|
|
290
|
-
if (sanitizedValue !== entryValue) {
|
|
291
|
-
hasChanges = true;
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
return hasChanges ? clone : value;
|
|
295
|
-
};
|
|
296
|
-
const InlineToolResultPreview = ({ preview, }) => {
|
|
297
|
-
return (_jsxs("a", { href: preview.src, target: "_blank", rel: "noopener noreferrer", className: "mb-2 block overflow-hidden rounded border border-gray-200 bg-white transition-colors hover:border-gray-300", children: [_jsx("img", { src: preview.src, alt: preview.alt, loading: "lazy", className: "max-h-40 w-auto max-w-full bg-gray-100 object-contain" }), (preview.fileName || preview.dimensions) && (_jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-gray-100 px-2 py-1 text-[10px] text-gray-500", children: [_jsx("span", { className: "truncate", children: preview.fileName || "Screenshot" }), preview.dimensions && (_jsx("span", { className: "shrink-0", children: preview.dimensions }))] }))] }));
|
|
298
|
-
};
|
|
299
136
|
// Helper function to render JSON or text
|
|
300
137
|
const renderJsonOrText = (json) => {
|
|
301
138
|
const parsed = parseJsonString(json);
|
|
@@ -304,7 +141,7 @@ const renderJsonOrText = (json) => {
|
|
|
304
141
|
}
|
|
305
142
|
// If parsing failed, display as plain text
|
|
306
143
|
const jsonString = typeof json === "string" ? json : String(json);
|
|
307
|
-
return (_jsx("div", { className: "font-mono text-xs
|
|
144
|
+
return (_jsx("div", { className: "font-mono text-xs break-words whitespace-pre-wrap text-gray-700", children: jsonString }));
|
|
308
145
|
};
|
|
309
146
|
// Expandable panel component
|
|
310
147
|
const ExpandablePanel = ({ title, children, defaultExpanded = false, actionButton, }) => {
|
|
@@ -313,14 +150,8 @@ const ExpandablePanel = ({ title, children, defaultExpanded = false, actionButto
|
|
|
313
150
|
};
|
|
314
151
|
// Helper function to create expandable tool call details
|
|
315
152
|
const ToolCallDetails = memo(({ toolCall, result }) => {
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const hasOutput = !!result || hasError || isPruned;
|
|
319
|
-
const prunedOutput = useMemo(() => {
|
|
320
|
-
if (!isPruned)
|
|
321
|
-
return "";
|
|
322
|
-
return result || toolCall.function?.error || "";
|
|
323
|
-
}, [isPruned, result, toolCall.function?.error]);
|
|
153
|
+
const hasError = toolCall.function?.error;
|
|
154
|
+
const hasOutput = result || hasError;
|
|
324
155
|
// Memoize parsed input data to prevent re-parsing on every render
|
|
325
156
|
const parsedInput = useMemo(() => {
|
|
326
157
|
return parseJsonString(toolCall.function?.arguments || "");
|
|
@@ -329,31 +160,6 @@ const ToolCallDetails = memo(({ toolCall, result }) => {
|
|
|
329
160
|
const parsedOutput = useMemo(() => {
|
|
330
161
|
return parseJsonString(result || "");
|
|
331
162
|
}, [result]);
|
|
332
|
-
const parsedPrunedOutput = useMemo(() => {
|
|
333
|
-
return parseJsonString(prunedOutput);
|
|
334
|
-
}, [prunedOutput]);
|
|
335
|
-
const outputPreview = useMemo(() => {
|
|
336
|
-
if (isPruned) {
|
|
337
|
-
return extractInlineToolResultImage(parsedPrunedOutput ?? prunedOutput);
|
|
338
|
-
}
|
|
339
|
-
if (hasError) {
|
|
340
|
-
return null;
|
|
341
|
-
}
|
|
342
|
-
return extractInlineToolResultImage(parsedOutput ?? (result || ""));
|
|
343
|
-
}, [
|
|
344
|
-
hasError,
|
|
345
|
-
isPruned,
|
|
346
|
-
parsedOutput,
|
|
347
|
-
parsedPrunedOutput,
|
|
348
|
-
prunedOutput,
|
|
349
|
-
result,
|
|
350
|
-
]);
|
|
351
|
-
const displayPrunedOutput = useMemo(() => {
|
|
352
|
-
return sanitizeInlineImageDataForDisplay(parsedPrunedOutput ?? prunedOutput);
|
|
353
|
-
}, [parsedPrunedOutput, prunedOutput]);
|
|
354
|
-
const displayOutput = useMemo(() => {
|
|
355
|
-
return sanitizeInlineImageDataForDisplay(parsedOutput ?? (result || ""));
|
|
356
|
-
}, [parsedOutput, result]);
|
|
357
163
|
// Get text to copy for input
|
|
358
164
|
const inputTextToCopy = useMemo(() => {
|
|
359
165
|
const args = toolCall.function?.arguments || "";
|
|
@@ -364,190 +170,63 @@ const ToolCallDetails = memo(({ toolCall, result }) => {
|
|
|
364
170
|
}, [toolCall.function?.arguments, parsedInput]);
|
|
365
171
|
// Get text to copy for output
|
|
366
172
|
const outputTextToCopy = useMemo(() => {
|
|
367
|
-
if (isPruned) {
|
|
368
|
-
if (parsedPrunedOutput !== null) {
|
|
369
|
-
return JSON.stringify(parsedPrunedOutput, null, 2);
|
|
370
|
-
}
|
|
371
|
-
return typeof prunedOutput === "object"
|
|
372
|
-
? JSON.stringify(prunedOutput, null, 2)
|
|
373
|
-
: prunedOutput;
|
|
374
|
-
}
|
|
375
173
|
if (hasError) {
|
|
376
174
|
return toolCall.function?.error || "";
|
|
377
175
|
}
|
|
378
176
|
if (parsedOutput !== null) {
|
|
379
177
|
return JSON.stringify(parsedOutput, null, 2);
|
|
380
178
|
}
|
|
381
|
-
if (typeof result === "object") {
|
|
382
|
-
return JSON.stringify(result, null, 2);
|
|
383
|
-
}
|
|
384
179
|
return result || "";
|
|
385
|
-
}, [
|
|
386
|
-
|
|
387
|
-
isPruned,
|
|
388
|
-
toolCall.function?.error,
|
|
389
|
-
parsedOutput,
|
|
390
|
-
parsedPrunedOutput,
|
|
391
|
-
prunedOutput,
|
|
392
|
-
result,
|
|
393
|
-
]);
|
|
394
|
-
return (_jsxs("div", { className: "mt-1 ml-5 overflow-hidden rounded border border-gray-200/60 bg-gray-50/40", children: [_jsx(ExpandablePanel, { title: "Input", defaultExpanded: !hasOutput, actionButton: _jsx(CopyButton, { textToCopy: inputTextToCopy, iconOnly: true, className: "cursor-pointer text-gray-400 hover:text-gray-600" }), children: _jsx("div", { className: "rounded bg-white p-2 text-xs", children: parsedInput !== null ? (_jsx(MemoizedJsonView, { data: parsedInput })) : (_jsx("div", { className: "font-mono text-xs wrap-break-word whitespace-pre-wrap text-gray-700", children: toolCall.function?.arguments || "" })) }) }), hasOutput && (_jsx(ExpandablePanel, { title: isPruned ? "Pruned" : hasError ? "Error" : "Output", defaultExpanded: true, actionButton: _jsx(CopyButton, { textToCopy: outputTextToCopy, iconOnly: true, className: "cursor-pointer text-gray-400 hover:text-gray-600" }), children: isPruned ? (_jsxs("div", { className: "rounded border-l-2 border-slate-400 bg-slate-50/70 p-2 text-xs text-slate-700", children: [_jsx("div", { className: "mb-1 text-[10px] font-medium text-slate-600", children: "Pruned from AI context" }), _jsx("div", { className: "mb-2 text-slate-600", children: "This tool call completed, but its output was pruned from future agent context to save tokens." }), prunedOutput ? (_jsxs("div", { className: "rounded bg-white p-2 text-xs", children: [outputPreview && (_jsx(InlineToolResultPreview, { preview: outputPreview })), displayPrunedOutput !== null &&
|
|
395
|
-
typeof displayPrunedOutput === "object" ? (_jsx(MemoizedJsonView, { data: displayPrunedOutput })) : (_jsx("div", { className: "font-mono text-xs wrap-break-word whitespace-pre-wrap text-gray-700", children: String(displayPrunedOutput ?? prunedOutput) }))] })) : null] })) : hasError ? (_jsxs("div", { className: "rounded border-l-2 border-red-400 bg-red-50/60 p-2 text-xs text-red-700", children: [_jsx("div", { className: "mb-1 text-[10px] font-medium text-red-600", children: "Error" }), _jsx("div", { className: "text-red-600", children: toolCall.function?.error })] })) : (_jsxs("div", { className: "rounded bg-white p-2 text-xs", children: [outputPreview && (_jsx(InlineToolResultPreview, { preview: outputPreview })), displayOutput !== null && typeof displayOutput === "object" ? (_jsx(MemoizedJsonView, { data: displayOutput })) : (_jsx("div", { className: "font-mono text-xs wrap-break-word whitespace-pre-wrap text-gray-700", children: String(displayOutput ?? (result || "")) }))] })) }))] }));
|
|
180
|
+
}, [hasError, toolCall.function?.error, parsedOutput, result]);
|
|
181
|
+
return (_jsxs("div", { className: "mt-1 ml-5 overflow-hidden rounded border border-gray-200/60 bg-gray-50/40", children: [_jsx(ExpandablePanel, { title: "Input", defaultExpanded: !hasOutput, actionButton: _jsx(CopyButton, { textToCopy: inputTextToCopy, iconOnly: true, className: "cursor-pointer text-gray-400 hover:text-gray-600" }), children: _jsx("div", { className: "rounded bg-white p-2 text-xs", children: parsedInput !== null ? (_jsx(MemoizedJsonView, { data: parsedInput })) : (_jsx("div", { className: "font-mono text-xs break-words whitespace-pre-wrap text-gray-700", children: toolCall.function?.arguments || "" })) }) }), hasOutput && (_jsx(ExpandablePanel, { title: hasError ? "Error" : "Output", defaultExpanded: true, actionButton: _jsx(CopyButton, { textToCopy: outputTextToCopy, iconOnly: true, className: "cursor-pointer text-gray-400 hover:text-gray-600" }), children: hasError ? (_jsxs("div", { className: "rounded border-l-2 border-red-400 bg-red-50/60 p-2 text-xs text-red-700", children: [_jsx("div", { className: "mb-1 text-[10px] font-medium text-red-600", children: "Error" }), _jsx("div", { className: "text-red-600", children: toolCall.function?.error })] })) : (_jsx("div", { className: "rounded bg-white p-2 text-xs", children: parsedOutput !== null ? (_jsx(MemoizedJsonView, { data: parsedOutput })) : (_jsx("div", { className: "font-mono text-xs break-words whitespace-pre-wrap text-gray-700", children: result || "" })) })) }))] }));
|
|
396
182
|
}, (prevProps, nextProps) => {
|
|
397
183
|
// Only re-render if the data actually changed
|
|
398
184
|
return (prevProps.toolCall.id === nextProps.toolCall.id &&
|
|
399
185
|
prevProps.toolCall.function?.arguments ===
|
|
400
186
|
nextProps.toolCall.function?.arguments &&
|
|
401
187
|
prevProps.result === nextProps.result &&
|
|
402
|
-
prevProps.toolCall.function?.error === nextProps.toolCall.function?.error
|
|
403
|
-
prevProps.toolCall.isPruned === nextProps.toolCall.isPruned);
|
|
188
|
+
prevProps.toolCall.function?.error === nextProps.toolCall.function?.error);
|
|
404
189
|
});
|
|
405
190
|
ToolCallDetails.displayName = "ToolCallDetails";
|
|
406
|
-
export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopovers, messageId, agentId, allPendingApprovals = [], onSwitchToAutonomous, seenApprovalDialogs, onApprovalDialogShown,
|
|
407
|
-
const [
|
|
191
|
+
export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopovers, messageId, agentId, allPendingApprovals = [], onSwitchToAutonomous, seenApprovalDialogs, onApprovalDialogShown, }) {
|
|
192
|
+
const [isApprovingAll, setIsApprovingAll] = useState(false);
|
|
408
193
|
const [isSwitchingMode, setIsSwitchingMode] = useState(false);
|
|
409
|
-
const [isGroupExpanded, setIsGroupExpanded] = useState(() => {
|
|
410
|
-
if (toolCalls && toolCalls.length >= 2 && finished) {
|
|
411
|
-
const allDone = toolCalls.every((tc) => {
|
|
412
|
-
if ("isCompleted" in tc)
|
|
413
|
-
return tc.isCompleted;
|
|
414
|
-
const n = normalizeToolCall(tc);
|
|
415
|
-
return !!(n.function?.result || n.function?.error);
|
|
416
|
-
});
|
|
417
|
-
const hasPending = toolCalls.some((tc) => {
|
|
418
|
-
if (!tc.requiresApproval)
|
|
419
|
-
return false;
|
|
420
|
-
const fn = ("functionName" in tc
|
|
421
|
-
? tc.functionName
|
|
422
|
-
: normalizeToolCall(tc).function?.name) || "";
|
|
423
|
-
return !fn.includes("(approved)") && !fn.includes("(rejected)");
|
|
424
|
-
});
|
|
425
|
-
if (allDone && !hasPending)
|
|
426
|
-
return false;
|
|
427
|
-
}
|
|
428
|
-
return true;
|
|
429
|
-
});
|
|
430
|
-
const [userToggled, setUserToggled] = useState(false);
|
|
431
|
-
const allToolCallsCompleted = useMemo(() => {
|
|
432
|
-
if (!toolCalls)
|
|
433
|
-
return false;
|
|
434
|
-
return toolCalls.every((tc) => {
|
|
435
|
-
if ("isCompleted" in tc)
|
|
436
|
-
return tc.isCompleted;
|
|
437
|
-
const normalized = normalizeToolCall(tc);
|
|
438
|
-
return !!(normalized.function?.result || normalized.function?.error);
|
|
439
|
-
});
|
|
440
|
-
}, [toolCalls]);
|
|
441
|
-
const hasPendingApprovalsInGroup = useMemo(() => {
|
|
442
|
-
if (!toolCalls)
|
|
443
|
-
return false;
|
|
444
|
-
return toolCalls.some((tc) => {
|
|
445
|
-
if (!tc.requiresApproval)
|
|
446
|
-
return false;
|
|
447
|
-
const funcName = ("functionName" in tc
|
|
448
|
-
? tc.functionName
|
|
449
|
-
: normalizeToolCall(tc).function?.name) || "";
|
|
450
|
-
return (!funcName.includes("(approved)") && !funcName.includes("(rejected)"));
|
|
451
|
-
});
|
|
452
|
-
}, [toolCalls]);
|
|
453
|
-
useEffect(() => {
|
|
454
|
-
if (!userToggled &&
|
|
455
|
-
(toolCalls?.length ?? 0) >= 2 &&
|
|
456
|
-
finished &&
|
|
457
|
-
allToolCallsCompleted &&
|
|
458
|
-
!hasPendingApprovalsInGroup) {
|
|
459
|
-
setIsGroupExpanded(false);
|
|
460
|
-
}
|
|
461
|
-
}, [
|
|
462
|
-
userToggled,
|
|
463
|
-
toolCalls?.length,
|
|
464
|
-
finished,
|
|
465
|
-
allToolCallsCompleted,
|
|
466
|
-
hasPendingApprovalsInGroup,
|
|
467
|
-
]);
|
|
468
|
-
const groupSummary = useMemo(() => {
|
|
469
|
-
if (!toolCalls || toolCalls.length < 2)
|
|
470
|
-
return null;
|
|
471
|
-
const uniqueNames = [
|
|
472
|
-
...new Set(toolCalls
|
|
473
|
-
.map((tc) => {
|
|
474
|
-
const normalized = normalizeToolCall(tc);
|
|
475
|
-
return ((("functionName" in tc
|
|
476
|
-
? tc.functionName
|
|
477
|
-
: normalized.function?.name) || "")
|
|
478
|
-
.replace(/ \(approved\)/g, "")
|
|
479
|
-
.replace(/ \(rejected\)/g, "")
|
|
480
|
-
.replace(/ \(pending approval\)/g, "")
|
|
481
|
-
.trim());
|
|
482
|
-
})
|
|
483
|
-
.filter(Boolean)),
|
|
484
|
-
];
|
|
485
|
-
const errorCount = toolCalls.filter((tc) => {
|
|
486
|
-
const normalized = normalizeToolCall(tc);
|
|
487
|
-
return !!normalized.function?.error && !normalized.isPruned;
|
|
488
|
-
}).length;
|
|
489
|
-
return { uniqueNames, errorCount };
|
|
490
|
-
}, [toolCalls]);
|
|
491
194
|
if (!toolCalls || toolCalls.length === 0) {
|
|
492
195
|
return null;
|
|
493
196
|
}
|
|
494
|
-
const resolvePendingToolCalls = async (pendingToolCalls, approved) => {
|
|
495
|
-
if (!agentId || pendingToolCalls.length === 0)
|
|
496
|
-
return;
|
|
497
|
-
const actionLabel = approved ? "approve" : "reject";
|
|
498
|
-
await Promise.all(pendingToolCalls.map(async (pending) => {
|
|
499
|
-
try {
|
|
500
|
-
const params = {
|
|
501
|
-
agentId,
|
|
502
|
-
messageId: pending.dbMessageId || pending.messageId,
|
|
503
|
-
toolCallId: pending.toolCallId,
|
|
504
|
-
};
|
|
505
|
-
if (approved) {
|
|
506
|
-
await approveToolCall(params);
|
|
507
|
-
}
|
|
508
|
-
else {
|
|
509
|
-
await rejectToolCall(params);
|
|
510
|
-
}
|
|
511
|
-
window.dispatchEvent(new CustomEvent("agent:toolApprovalResolved", {
|
|
512
|
-
detail: {
|
|
513
|
-
messageId: pending.dbMessageId || pending.messageId,
|
|
514
|
-
toolCallId: pending.toolCallId,
|
|
515
|
-
approved,
|
|
516
|
-
},
|
|
517
|
-
}));
|
|
518
|
-
}
|
|
519
|
-
catch (error) {
|
|
520
|
-
console.error(`Failed to ${actionLabel} tool call ${pending.toolCallId}:`, error);
|
|
521
|
-
}
|
|
522
|
-
}));
|
|
523
|
-
};
|
|
524
197
|
// Helper to approve all pending tool calls with a specific risk level
|
|
525
198
|
const handleApproveAllByRisk = async (riskLevel) => {
|
|
526
|
-
if (!agentId ||
|
|
527
|
-
return;
|
|
528
|
-
const matchingPending = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === riskLevel);
|
|
529
|
-
if (matchingPending.length === 0)
|
|
530
|
-
return;
|
|
531
|
-
setBatchRiskAction("approve");
|
|
532
|
-
try {
|
|
533
|
-
await resolvePendingToolCalls(matchingPending, true);
|
|
534
|
-
}
|
|
535
|
-
finally {
|
|
536
|
-
setBatchRiskAction(null);
|
|
537
|
-
}
|
|
538
|
-
};
|
|
539
|
-
const handleRejectAllByRisk = async (riskLevel) => {
|
|
540
|
-
if (!agentId || batchRiskAction)
|
|
199
|
+
if (!agentId || isApprovingAll)
|
|
541
200
|
return;
|
|
542
201
|
const matchingPending = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === riskLevel);
|
|
543
202
|
if (matchingPending.length === 0)
|
|
544
203
|
return;
|
|
545
|
-
|
|
204
|
+
setIsApprovingAll(true);
|
|
546
205
|
try {
|
|
547
|
-
|
|
206
|
+
// Approve all matching tool calls in parallel
|
|
207
|
+
await Promise.all(matchingPending.map(async (pending) => {
|
|
208
|
+
try {
|
|
209
|
+
await approveToolCall({
|
|
210
|
+
agentId,
|
|
211
|
+
messageId: pending.dbMessageId || pending.messageId,
|
|
212
|
+
toolCallId: pending.toolCallId,
|
|
213
|
+
});
|
|
214
|
+
// Dispatch event to update UI
|
|
215
|
+
window.dispatchEvent(new CustomEvent("agent:toolApprovalResolved", {
|
|
216
|
+
detail: {
|
|
217
|
+
messageId: pending.dbMessageId || pending.messageId,
|
|
218
|
+
toolCallId: pending.toolCallId,
|
|
219
|
+
approved: true,
|
|
220
|
+
},
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.error(`Failed to approve tool call ${pending.toolCallId}:`, error);
|
|
225
|
+
}
|
|
226
|
+
}));
|
|
548
227
|
}
|
|
549
228
|
finally {
|
|
550
|
-
|
|
229
|
+
setIsApprovingAll(false);
|
|
551
230
|
}
|
|
552
231
|
};
|
|
553
232
|
// Helper to switch to autonomous mode
|
|
@@ -556,14 +235,29 @@ export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopo
|
|
|
556
235
|
return;
|
|
557
236
|
setIsSwitchingMode(true);
|
|
558
237
|
try {
|
|
559
|
-
|
|
560
|
-
if (result.success === false || result.updates?.mode === false) {
|
|
561
|
-
throw new Error("Mode change was not applied");
|
|
562
|
-
}
|
|
238
|
+
await updateAgentSettings(agentId, { mode: "autonomous" });
|
|
563
239
|
onSwitchToAutonomous?.();
|
|
564
240
|
// After switching to autonomous, approve all remaining pending tool calls
|
|
565
241
|
if (allPendingApprovals.length > 0) {
|
|
566
|
-
await
|
|
242
|
+
await Promise.all(allPendingApprovals.map(async (pending) => {
|
|
243
|
+
try {
|
|
244
|
+
await approveToolCall({
|
|
245
|
+
agentId,
|
|
246
|
+
messageId: pending.dbMessageId || pending.messageId,
|
|
247
|
+
toolCallId: pending.toolCallId,
|
|
248
|
+
});
|
|
249
|
+
window.dispatchEvent(new CustomEvent("agent:toolApprovalResolved", {
|
|
250
|
+
detail: {
|
|
251
|
+
messageId: pending.dbMessageId || pending.messageId,
|
|
252
|
+
toolCallId: pending.toolCallId,
|
|
253
|
+
approved: true,
|
|
254
|
+
},
|
|
255
|
+
}));
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
console.error(`Failed to approve tool call ${pending.toolCallId}:`, error);
|
|
259
|
+
}
|
|
260
|
+
}));
|
|
567
261
|
}
|
|
568
262
|
}
|
|
569
263
|
catch (error) {
|
|
@@ -574,89 +268,56 @@ export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopo
|
|
|
574
268
|
setIsSwitchingMode(false);
|
|
575
269
|
}
|
|
576
270
|
};
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
.
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
const shouldShowBrowserCaptureInlinePrompt = !!browserCaptureInlinePrompt &&
|
|
624
|
-
browserCaptureInlinePrompt.toolNames.includes(baseFunctionName) &&
|
|
625
|
-
!isCompleted &&
|
|
626
|
-
!toolCall.function?.error;
|
|
627
|
-
return (_jsxs("div", { children: [_jsxs("div", { className: "group flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs text-gray-600 transition-all hover:bg-gray-100/60 hover:text-gray-800", onClick: () => {
|
|
628
|
-
setOpenPopovers((prev) => ({
|
|
629
|
-
...prev,
|
|
630
|
-
[popoverKey]: !prev[popoverKey],
|
|
631
|
-
}));
|
|
632
|
-
}, children: [_jsx("div", { className: "flex items-center transition-transform group-hover:scale-110", children: isExpanded ? (_jsx(ChevronDown, { size: 14, strokeWidth: 1.5, className: "text-gray-500" })) : (_jsx(ChevronRight, { size: 14, strokeWidth: 1.5, className: "text-gray-500" })) }), isCompleted ? (_jsx("div", { className: `flex items-center transition-all ${toolCall.function?.error && !isPruned
|
|
633
|
-
? "text-red-500"
|
|
634
|
-
: isPruned
|
|
635
|
-
? "text-slate-500"
|
|
636
|
-
: "text-green-600"}`, children: getToolIcon(toolCall?.function?.name || "") })) : finalApprovalInfo && !hasApprovalStatus ? (_jsx("div", { className: "flex items-center text-amber-600 transition-all", children: getToolIcon(toolCall?.function?.name || "") })) : isStreaming || !finished ? (
|
|
637
|
-
// Show spinner when tool call arguments are still being streamed or tool is executing
|
|
638
|
-
_jsx(Spinner, { size: "xs" })) : (
|
|
639
|
-
// Turn finished but tool call not completed - show static icon
|
|
640
|
-
_jsx("div", { className: "flex items-center text-gray-400 transition-all", children: getToolIcon(toolCall?.function?.name || "") })), _jsxs("div", { className: "inline-flex flex-1 items-center gap-2", children: [_jsxs("span", { className: `font-medium transition-colors ${toolCall.function?.error && !isPruned
|
|
641
|
-
? "text-red-600"
|
|
642
|
-
: isPruned
|
|
643
|
-
? "text-slate-600"
|
|
644
|
-
: ""}`, children: [(originalFunctionName ||
|
|
645
|
-
toolCall?.function?.name ||
|
|
646
|
-
toolCall?.displayName ||
|
|
647
|
-
"(function name missing)")
|
|
648
|
-
.replace(" (approved)", "")
|
|
649
|
-
.replace(" (rejected)", "")
|
|
650
|
-
.replace(" (pending approval)", ""), toolCall.function?.error && !isRejected && !isPruned && (_jsx("span", { className: "ml-1 text-red-500", children: "(error)" })), isPruned && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-semibold text-slate-700", children: [_jsx("span", { children: "\u2702" }), " Pruned"] })), finalApprovalInfo && isApproved && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-0.5 text-[10px] font-semibold text-green-700", children: [_jsx("span", { children: "\u2713" }), " Approved"] })), finalApprovalInfo && isRejected && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-[10px] font-semibold text-red-700", children: [_jsx("span", { children: "\u2717" }), " Rejected"] })), finalApprovalInfo && isPending && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-[10px] font-semibold text-amber-700", children: [_jsx("span", { children: "\u23F8" }), " Pending approval"] }))] }), toolCallMeta && (_jsx("span", { className: "ml-auto shrink-0 text-[10px] text-gray-400", children: toolCallMeta }))] })] }), isExpanded && (_jsx(ToolCallDetails, { toolCall: toolCall, result: toolResult })), shouldShowBrowserCaptureInlinePrompt && browserCaptureInlinePrompt && (_jsx("div", { className: "mt-2 ml-5 rounded-lg border border-blue-200 bg-blue-50 p-3 text-[11px] text-blue-900", children: _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-semibold", children: browserCaptureInlinePrompt.label }), _jsx("div", { className: "mt-1 text-blue-800", children: browserCaptureInlinePrompt.description })] }), _jsx("div", { className: "flex shrink-0 items-center gap-2", children: _jsx("button", { type: "button", className: "rounded border border-blue-300 bg-white px-2 py-1 text-[11px] font-medium text-blue-900 disabled:cursor-not-allowed disabled:opacity-60", disabled: browserCaptureInlinePrompt.isPending, onClick: (event) => {
|
|
651
|
-
event.stopPropagation();
|
|
652
|
-
browserCaptureInlinePrompt.onAction();
|
|
653
|
-
}, children: browserCaptureInlinePrompt.actionLabel }) })] }) })), !isCompleted && finalApprovalInfo && !hasApprovalStatus && (_jsx(ApprovalDialog, { toolCallId: toolCallIdForApproval, onApprovalDialogShown: onApprovalDialogShown, finalApprovalInfo: finalApprovalInfo, isAgentToolCall: isAgentToolCall, originalToolCall: originalToolCall, toolCall: toolCall, messageId: messageId, agentId: agentId, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, hideAutonomousSwitch: hideAutonomousSwitch, isSwitchingMode: isSwitchingMode, setIsSwitchingMode: setIsSwitchingMode, batchRiskAction: batchRiskAction, handleApproveAllByRisk: handleApproveAllByRisk, handleRejectAllByRisk: handleRejectAllByRisk, handleSwitchToAutonomous: handleSwitchToAutonomous }))] }, toolIndex));
|
|
654
|
-
})] }));
|
|
271
|
+
return (_jsx("div", { className: "flex flex-col", children: toolCalls.map((originalToolCall, toolIndex) => {
|
|
272
|
+
const toolCall = normalizeToolCall(originalToolCall);
|
|
273
|
+
const toolResult = toolCall.function?.result;
|
|
274
|
+
const popoverKey = `${messageId}-${toolIndex}`;
|
|
275
|
+
const isAgentToolCall = "isCompleted" in originalToolCall;
|
|
276
|
+
// Get approval information to check if tool call is pending approval
|
|
277
|
+
const approvalInfo = originalToolCall.requiresApproval || toolCall.requiresApproval;
|
|
278
|
+
const isCompleted = isAgentToolCall
|
|
279
|
+
? originalToolCall.isCompleted
|
|
280
|
+
: !!(toolResult || toolCall.function?.error) && !approvalInfo;
|
|
281
|
+
// Check if tool call is currently streaming (arguments still being generated)
|
|
282
|
+
const isStreaming = isAgentToolCall && "isStreaming" in originalToolCall && originalToolCall.isStreaming === true;
|
|
283
|
+
// Use the approval info from the backend
|
|
284
|
+
const finalApprovalInfo = approvalInfo;
|
|
285
|
+
// Check if this tool call's approval dialog has already been shown (for deduplication)
|
|
286
|
+
const toolCallIdForApproval = "toolCallId" in originalToolCall ? originalToolCall.toolCallId : toolCall.id;
|
|
287
|
+
const approvalAlreadyShown = seenApprovalDialogs?.has(toolCallIdForApproval) ?? false;
|
|
288
|
+
// Check if this tool call has been approved/rejected (look for status indicators in function name)
|
|
289
|
+
// The AgentTerminal adds " (approved)" or " (rejected)" or " (pending approval)" to the functionName field
|
|
290
|
+
const originalFunctionName = ("functionName" in originalToolCall
|
|
291
|
+
? originalToolCall.functionName
|
|
292
|
+
: toolCall?.function?.name) || "";
|
|
293
|
+
const isApproved = originalFunctionName.includes("(approved)");
|
|
294
|
+
const isRejected = originalFunctionName.includes("(rejected)");
|
|
295
|
+
const isPending = originalFunctionName.includes("(pending approval)");
|
|
296
|
+
// Treat only approved/rejected as final; pending should still show buttons
|
|
297
|
+
const hasApprovalStatus = isApproved || isRejected;
|
|
298
|
+
// Debug logging removed for performance
|
|
299
|
+
const isExpanded = openPopovers[popoverKey] || false;
|
|
300
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "group flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs text-gray-600 transition-all hover:bg-gray-100/60 hover:text-gray-800", onClick: () => {
|
|
301
|
+
setOpenPopovers((prev) => ({
|
|
302
|
+
...prev,
|
|
303
|
+
[popoverKey]: !prev[popoverKey],
|
|
304
|
+
}));
|
|
305
|
+
}, children: [_jsx("div", { className: "flex items-center transition-transform group-hover:scale-110", children: isExpanded ? (_jsx(ChevronDown, { size: 14, strokeWidth: 1.5, className: "text-gray-500" })) : (_jsx(ChevronRight, { size: 14, strokeWidth: 1.5, className: "text-gray-500" })) }), isCompleted ? (_jsx("div", { className: `flex items-center transition-all ${toolCall.function?.error ? "text-red-500" : "text-green-600"}`, children: getToolIcon(toolCall?.function?.name || "") })) : finalApprovalInfo && !hasApprovalStatus ? (_jsx("div", { className: "flex items-center text-amber-600 transition-all", children: getToolIcon(toolCall?.function?.name || "") })) : isStreaming || !finished ? (
|
|
306
|
+
// Show spinner when tool call arguments are still being streamed or tool is executing
|
|
307
|
+
_jsx(Spinner, { size: "xs" })) : (
|
|
308
|
+
// Turn finished but tool call not completed - show static icon
|
|
309
|
+
_jsx("div", { className: "flex items-center text-gray-400 transition-all", children: getToolIcon(toolCall?.function?.name || "") })), _jsx("div", { className: "inline-flex flex-1 items-center gap-2", children: _jsxs("span", { className: `font-medium transition-colors ${toolCall.function?.error ? "text-red-600" : ""}`, children: [(originalFunctionName ||
|
|
310
|
+
toolCall?.function?.name ||
|
|
311
|
+
toolCall?.displayName ||
|
|
312
|
+
"(function name missing)")
|
|
313
|
+
.replace(" (approved)", "")
|
|
314
|
+
.replace(" (rejected)", "")
|
|
315
|
+
.replace(" (pending approval)", ""), toolCall.function?.error && !isRejected && (_jsx("span", { className: "ml-1 text-red-500", children: "(error)" })), finalApprovalInfo && isApproved && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-0.5 text-[10px] font-semibold text-green-700", children: [_jsx("span", { children: "\u2713" }), " Approved"] })), finalApprovalInfo && isRejected && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-[10px] font-semibold text-red-700", children: [_jsx("span", { children: "\u2717" }), " Rejected"] })), finalApprovalInfo && isPending && (_jsxs("span", { className: "ml-2 inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-[10px] font-semibold text-amber-700", children: [_jsx("span", { children: "\u23F8" }), " Pending approval"] }))] }) })] }), isExpanded && (_jsx(ToolCallDetails, { toolCall: toolCall, result: toolResult })), !isCompleted && finalApprovalInfo && !hasApprovalStatus && (_jsx(ApprovalDialog, { toolCallId: toolCallIdForApproval, onApprovalDialogShown: onApprovalDialogShown, finalApprovalInfo: finalApprovalInfo, isAgentToolCall: isAgentToolCall, originalToolCall: originalToolCall, toolCall: toolCall, messageId: messageId, agentId: agentId, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, isSwitchingMode: isSwitchingMode, setIsSwitchingMode: setIsSwitchingMode, isApprovingAll: isApprovingAll, setIsApprovingAll: setIsApprovingAll, handleApproveAllByRisk: handleApproveAllByRisk, handleSwitchToAutonomous: handleSwitchToAutonomous }))] }, toolIndex));
|
|
316
|
+
}) }));
|
|
655
317
|
}
|
|
656
318
|
// Separate component for approval dialog to properly handle useEffect
|
|
657
|
-
function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo, isAgentToolCall, originalToolCall, toolCall, messageId, agentId, allPendingApprovals, onSwitchToAutonomous,
|
|
319
|
+
function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo, isAgentToolCall, originalToolCall, toolCall, messageId, agentId, allPendingApprovals, onSwitchToAutonomous, isSwitchingMode, setIsSwitchingMode, isApprovingAll, setIsApprovingAll, handleApproveAllByRisk, handleSwitchToAutonomous, }) {
|
|
658
320
|
const hasMarkedAsShown = useRef(false);
|
|
659
|
-
const [isCreatingAllowance, setIsCreatingAllowance] = useState(false);
|
|
660
321
|
// Mark dialog as shown on mount to prevent duplicate dialogs
|
|
661
322
|
// The dialog stays visible until hasApprovalStatus becomes true (after approve/reject)
|
|
662
323
|
useEffect(() => {
|
|
@@ -679,44 +340,7 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
|
|
|
679
340
|
hasMarkedAsShown.current = true;
|
|
680
341
|
}
|
|
681
342
|
};
|
|
682
|
-
|
|
683
|
-
return isAgentToolCall
|
|
684
|
-
? originalToolCall.dbMessageId || originalToolCall.messageId
|
|
685
|
-
: messageId;
|
|
686
|
-
};
|
|
687
|
-
const dispatchApprovalResolved = (actualMessageId, approved) => {
|
|
688
|
-
const ev = new CustomEvent("agent:toolApprovalResolved", {
|
|
689
|
-
detail: {
|
|
690
|
-
messageId: actualMessageId,
|
|
691
|
-
toolCallId: toolCall.id,
|
|
692
|
-
approved,
|
|
693
|
-
},
|
|
694
|
-
});
|
|
695
|
-
window.dispatchEvent(ev);
|
|
696
|
-
};
|
|
697
|
-
const approveCurrentToolCall = async () => {
|
|
698
|
-
const actualMessageId = getActualMessageId();
|
|
699
|
-
if (!agentId) {
|
|
700
|
-
console.error("Cannot approve tool call: agentId is missing");
|
|
701
|
-
return;
|
|
702
|
-
}
|
|
703
|
-
if (!actualMessageId) {
|
|
704
|
-
console.error("Cannot approve tool call: messageId is missing");
|
|
705
|
-
return;
|
|
706
|
-
}
|
|
707
|
-
await approveToolCall({
|
|
708
|
-
agentId,
|
|
709
|
-
messageId: actualMessageId,
|
|
710
|
-
toolCallId: toolCall.id,
|
|
711
|
-
});
|
|
712
|
-
dispatchApprovalResolved(actualMessageId, true);
|
|
713
|
-
};
|
|
714
|
-
const allowableScope = finalApprovalInfo.allowableScope;
|
|
715
|
-
const showAllowInScopeButton = !!agentId &&
|
|
716
|
-
allowableScope?.operationType === "delete" &&
|
|
717
|
-
!!allowableScope.parentItemId &&
|
|
718
|
-
!!allowableScope.parentItemPath;
|
|
719
|
-
return (_jsxs("div", { className: "mt-2 overflow-hidden rounded-lg border border-amber-200 bg-linear-to-br from-amber-50 to-amber-50/30 shadow-sm", children: [_jsx("div", { className: "border-b border-amber-200/60 bg-amber-50/80 p-3", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: `mt-1 h-2.5 w-2.5 rounded-full shadow-sm ${finalApprovalInfo.riskLevel === "high"
|
|
343
|
+
return (_jsxs("div", { className: "mt-2 overflow-hidden rounded-lg border border-amber-200 bg-gradient-to-br from-amber-50 to-amber-50/30 shadow-sm", children: [_jsx("div", { className: "border-b border-amber-200/60 bg-amber-50/80 p-3", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: `mt-1 h-2.5 w-2.5 rounded-full shadow-sm ${finalApprovalInfo.riskLevel === "high"
|
|
720
344
|
? "bg-red-500 ring-2 ring-red-200"
|
|
721
345
|
: finalApprovalInfo.riskLevel === "medium"
|
|
722
346
|
? "bg-amber-500 ring-2 ring-amber-200"
|
|
@@ -724,32 +348,13 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
|
|
|
724
348
|
? "bg-red-100 text-red-700"
|
|
725
349
|
: finalApprovalInfo.riskLevel === "medium"
|
|
726
350
|
? "bg-amber-100 text-amber-700"
|
|
727
|
-
: "bg-green-100 text-green-700"}`, children: [_jsx("span", { className: "font-normal", children: "Risk:" }), _jsx("span", { className: "uppercase", children: finalApprovalInfo.riskLevel })] }))] })] }) }), _jsxs("div", { className: "flex flex-col gap-2 bg-white/60 p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [
|
|
728
|
-
markAsShown();
|
|
729
|
-
if (!agentId || !allowableScope?.parentItemId)
|
|
730
|
-
return;
|
|
731
|
-
setIsCreatingAllowance(true);
|
|
732
|
-
try {
|
|
733
|
-
await createOperationAllowance({
|
|
734
|
-
agentId,
|
|
735
|
-
itemId: allowableScope.parentItemId,
|
|
736
|
-
operationType: "delete",
|
|
737
|
-
scopeType: "itemSubtree",
|
|
738
|
-
});
|
|
739
|
-
await approveCurrentToolCall();
|
|
740
|
-
}
|
|
741
|
-
catch (error) {
|
|
742
|
-
console.error("Failed to create operation allowance:", error);
|
|
743
|
-
alert(`Failed to allow deletes in scope: ${error?.message || "Unknown error"}`);
|
|
744
|
-
}
|
|
745
|
-
finally {
|
|
746
|
-
setIsCreatingAllowance(false);
|
|
747
|
-
}
|
|
748
|
-
}, children: isCreatingAllowance
|
|
749
|
-
? "Allowing..."
|
|
750
|
-
: `Allow deletes in ${allowableScope?.parentItemPath}` })), _jsx(Button, { size: "sm", variant: "secondary", "data-testid": "agent-reject-button", onClick: async () => {
|
|
351
|
+
: "bg-green-100 text-green-700"}`, children: [_jsx("span", { className: "font-normal", children: "Risk:" }), _jsx("span", { className: "uppercase", children: finalApprovalInfo.riskLevel })] }))] })] }) }), _jsxs("div", { className: "flex flex-col gap-2 bg-white/60 p-3", children: [_jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2", children: [_jsx(Button, { size: "sm", variant: "secondary", "data-testid": "agent-reject-button", onClick: async () => {
|
|
751
352
|
markAsShown(); // Mark as shown when user interacts
|
|
752
|
-
|
|
353
|
+
// Use the dbMessageId from AgentToolCall if available, otherwise fall back to messageId or prop
|
|
354
|
+
const actualMessageId = isAgentToolCall
|
|
355
|
+
? originalToolCall.dbMessageId ||
|
|
356
|
+
originalToolCall.messageId
|
|
357
|
+
: messageId;
|
|
753
358
|
if (!agentId) {
|
|
754
359
|
console.error("❌ Cannot reject tool call: agentId is missing");
|
|
755
360
|
return;
|
|
@@ -770,21 +375,53 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
|
|
|
770
375
|
toolCallId: toolCall.id,
|
|
771
376
|
});
|
|
772
377
|
console.log("✅ Reject successful:", result);
|
|
773
|
-
|
|
378
|
+
const ev = new CustomEvent("agent:toolApprovalResolved", {
|
|
379
|
+
detail: {
|
|
380
|
+
messageId: actualMessageId,
|
|
381
|
+
toolCallId: toolCall.id,
|
|
382
|
+
approved: false,
|
|
383
|
+
},
|
|
384
|
+
});
|
|
385
|
+
window.dispatchEvent(ev);
|
|
774
386
|
}
|
|
775
387
|
catch (error) {
|
|
776
388
|
console.error("❌ Reject failed:", error);
|
|
777
389
|
}
|
|
778
390
|
}, children: "Reject" }), _jsx(Button, { size: "sm", "data-testid": "agent-approve-button", onClick: async () => {
|
|
779
391
|
markAsShown(); // Mark as shown when user interacts
|
|
392
|
+
// Use the dbMessageId from AgentToolCall if available, otherwise fall back to messageId or prop
|
|
393
|
+
const actualMessageId = isAgentToolCall
|
|
394
|
+
? originalToolCall.dbMessageId ||
|
|
395
|
+
originalToolCall.messageId
|
|
396
|
+
: messageId;
|
|
397
|
+
if (!agentId) {
|
|
398
|
+
console.error("❌ Cannot approve tool call: agentId is missing");
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
if (!actualMessageId) {
|
|
402
|
+
console.error("❌ Cannot approve tool call: messageId is missing");
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
780
405
|
console.log("✅ Approving tool call:", {
|
|
781
406
|
agentId,
|
|
782
|
-
messageId:
|
|
407
|
+
messageId: actualMessageId,
|
|
783
408
|
toolCallId: toolCall.id,
|
|
784
409
|
});
|
|
785
410
|
try {
|
|
786
|
-
await
|
|
787
|
-
|
|
411
|
+
const result = await approveToolCall({
|
|
412
|
+
agentId,
|
|
413
|
+
messageId: actualMessageId,
|
|
414
|
+
toolCallId: toolCall.id,
|
|
415
|
+
});
|
|
416
|
+
console.log("✅ Approve successful:", result);
|
|
417
|
+
const ev = new CustomEvent("agent:toolApprovalResolved", {
|
|
418
|
+
detail: {
|
|
419
|
+
messageId: actualMessageId,
|
|
420
|
+
toolCallId: toolCall.id,
|
|
421
|
+
approved: true,
|
|
422
|
+
},
|
|
423
|
+
});
|
|
424
|
+
window.dispatchEvent(ev);
|
|
788
425
|
}
|
|
789
426
|
catch (error) {
|
|
790
427
|
console.error("❌ Approve failed:", error);
|
|
@@ -794,23 +431,15 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
|
|
|
794
431
|
const currentRiskLevel = finalApprovalInfo?.riskLevel;
|
|
795
432
|
const sameRiskCount = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === currentRiskLevel).length;
|
|
796
433
|
const totalPendingCount = allPendingApprovals.length;
|
|
797
|
-
const showSwitchToAutonomous = !hideAutonomousSwitch;
|
|
798
|
-
const showResolveAllByRisk = sameRiskCount > 1;
|
|
799
434
|
// Only show batch actions if there's more than 1 pending approval
|
|
800
435
|
if (totalPendingCount <= 1)
|
|
801
436
|
return null;
|
|
802
|
-
if (!showSwitchToAutonomous && !showResolveAllByRisk)
|
|
803
|
-
return null;
|
|
804
437
|
const riskLabel = currentRiskLevel
|
|
805
438
|
? currentRiskLevel.charAt(0).toUpperCase() + currentRiskLevel.slice(1)
|
|
806
439
|
: "Same";
|
|
807
|
-
return (_jsxs("div", { className:
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
? "Rejecting..."
|
|
811
|
-
: `Reject All ${riskLabel} (${sameRiskCount})` }), _jsx(Button, { size: "sm", variant: "outline", "data-testid": "agent-approve-all-button", disabled: batchRiskAction !== null, onClick: () => handleApproveAllByRisk(currentRiskLevel), className: "text-xs", children: batchRiskAction === "approve"
|
|
812
|
-
? "Approving..."
|
|
813
|
-
: `Approve All ${riskLabel} (${sameRiskCount})` })] }))] }));
|
|
440
|
+
return (_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 border-t border-amber-200/60 pt-2", children: [_jsx(Button, { size: "sm", variant: "outline", disabled: isSwitchingMode, onClick: handleSwitchToAutonomous, className: "text-xs", children: isSwitchingMode ? "Switching..." : "Switch to Autonomous" }), sameRiskCount > 1 && (_jsx(Button, { size: "sm", variant: "outline", disabled: isApprovingAll, onClick: () => handleApproveAllByRisk(currentRiskLevel), className: "text-xs", children: isApprovingAll
|
|
441
|
+
? "Approving..."
|
|
442
|
+
: `Approve All ${riskLabel} (${sameRiskCount})` }))] }));
|
|
814
443
|
})()] })] }));
|
|
815
444
|
}
|
|
816
445
|
//# sourceMappingURL=ToolCallDisplay.js.map
|