@parhelia/core 0.3.12763 → 0.3.12767
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.js +7 -9
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentGalleryView.js +4 -4
- package/dist/agents-view/AgentGalleryView.js.map +1 -1
- package/dist/agents-view/AgentProfileIcon.js +1 -8
- package/dist/agents-view/AgentProfileIcon.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +2 -2
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/RenameAgentDialog.js +1 -1
- package/dist/agents-view/RenameAgentDialog.js.map +1 -1
- package/dist/components/MarkdownViewerPopover.js +3 -3
- package/dist/components/MarkdownViewerPopover.js.map +1 -1
- package/dist/components/WorkspaceHomeView.js +1 -1
- package/dist/components/WorkspaceHomeView.js.map +1 -1
- package/dist/components/ui/LanguageSelector.js +1 -1
- package/dist/components/ui/LanguageSelector.js.map +1 -1
- package/dist/components/ui/PlaceholderInput.js +1 -1
- package/dist/components/ui/PlaceholderItemSelector.js +1 -1
- package/dist/components/ui/PlaceholderItemSelector.js.map +1 -1
- package/dist/components/ui/UserPicker.js +2 -2
- package/dist/components/ui/UserPicker.js.map +1 -1
- package/dist/components/ui/accordion.js +1 -1
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/breadcrumb.js +2 -2
- package/dist/components/ui/breadcrumb.js.map +1 -1
- package/dist/components/ui/calendar.js +3 -3
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/checkbox.js +1 -1
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/context-menu.js +3 -3
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/delete-icon.js +1 -1
- package/dist/components/ui/delete-icon.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js +4 -4
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/mention-textarea.js +2 -2
- package/dist/components/ui/mention-textarea.js.map +1 -1
- package/dist/components/ui/multi-switch-button.js +1 -1
- package/dist/components/ui/multi-switch-button.js.map +1 -1
- package/dist/components/ui/upload-button.js +1 -1
- package/dist/components/ui/upload-button.js.map +1 -1
- package/dist/config/config.js +29 -18
- package/dist/config/config.js.map +1 -1
- package/dist/editor/AdminRequiredView.js +1 -1
- package/dist/editor/AdminRequiredView.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.d.ts +2 -1
- package/dist/editor/ConcurrentUserLimitDialog.js +26 -11
- package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
- package/dist/editor/ConfirmationDialog.js +1 -1
- package/dist/editor/ContentTree.js +2 -2
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/ContextMenu.js +36 -6
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/DeleteItemsWarning.js +2 -2
- package/dist/editor/DeleteItemsWarning.js.map +1 -1
- package/dist/editor/Editor.js +49 -4
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/EditorWarning.js +1 -1
- package/dist/editor/EditorWarning.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.js +1 -1
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldHistory.js +7 -7
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/FieldList.js +45 -4
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/FieldListField.js +1 -1
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
- package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
- package/dist/editor/MainLayout.js +3 -6
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +6 -6
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/PictureCropper.js +2 -2
- package/dist/editor/PictureCropper.js.map +1 -1
- package/dist/editor/SetupWizard.js +1 -1
- package/dist/editor/SetupWizard.js.map +1 -1
- package/dist/editor/UsedBy.js +2 -2
- package/dist/editor/UsedBy.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.js +3 -3
- package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
- package/dist/editor/ai/AgentProfileSelector.js +4 -4
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/AgentSharingSection.js +6 -6
- package/dist/editor/ai/AgentSharingSection.js.map +1 -1
- package/dist/editor/ai/Agents.js +3 -3
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/ContentInspectorPopover.js +2 -2
- package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
- package/dist/editor/ai/GuidanceOverlay.js +1 -1
- package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +5 -19
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +13 -0
- package/dist/editor/ai/InlineAiDialog.js +52 -14
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +1 -1
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/bridgeInlineTextReplace.d.ts +16 -0
- package/dist/editor/ai/bridgeInlineTextReplace.js +31 -0
- package/dist/editor/ai/bridgeInlineTextReplace.js.map +1 -0
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js +2 -2
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +3 -3
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/inlineAiTextEditLabels.d.ts +1 -1
- package/dist/editor/ai/inlineAiTextEditLabels.js +1 -1
- package/dist/editor/ai/terminal/components/ActivitySummaryCell.js +4 -4
- package/dist/editor/ai/terminal/components/ActivitySummaryCell.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +7 -7
- package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +1 -1
- package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentDocumentList.js +3 -3
- package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +1 -1
- package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +2 -2
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +2 -2
- package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentModeSelector.js +2 -2
- package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentParentLink.js +1 -1
- package/dist/editor/ai/terminal/components/AgentParentLink.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +5 -5
- package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
- package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsSections.js +4 -2
- package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
- package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +1 -1
- package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +3 -3
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -14
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ApprovalCard.js +3 -4
- package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
- package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/EditOperationsPanel.js +2 -2
- package/dist/editor/ai/terminal/components/EditOperationsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/HeartbeatMessage.js +1 -1
- package/dist/editor/ai/terminal/components/HeartbeatMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +2 -2
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -1
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +4 -4
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/TodoListPanel.js +4 -4
- package/dist/editor/ai/terminal/components/TodoListPanel.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +9 -0
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +63 -22
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +10 -6
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js +35 -7
- package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +5 -5
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageResultOverlay.js +1 -1
- package/dist/editor/bridge/protocol.d.ts +6 -0
- package/dist/editor/bridge/protocol.js +1 -1
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +1 -1
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +69 -44
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/agentTerminalFocus.d.ts +1 -1
- package/dist/editor/client/agentTerminalFocus.js +1 -1
- package/dist/editor/client/agentTerminalFocus.js.map +1 -1
- package/dist/editor/client/editHistoryReconciliation.d.ts +10 -0
- package/dist/editor/client/editHistoryReconciliation.js +25 -0
- package/dist/editor/client/editHistoryReconciliation.js.map +1 -0
- package/dist/editor/client/errorToast.js +1 -1
- package/dist/editor/client/errorToast.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +4 -3
- package/dist/editor/client/hooks/useEditorWebSocket.js +265 -64
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.js +29 -6
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.js +62 -23
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.js +11 -6
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/sessionIdClaim.d.ts +22 -0
- package/dist/editor/client/sessionIdClaim.js +77 -0
- package/dist/editor/client/sessionIdClaim.js.map +1 -0
- package/dist/editor/client/sidebarAvailability.d.ts +9 -0
- package/dist/editor/client/sidebarAvailability.js +29 -0
- package/dist/editor/client/sidebarAvailability.js.map +1 -0
- package/dist/editor/client/ui/FullscreenControls.js +1 -1
- package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.d.ts +2 -0
- package/dist/editor/client/waitForEditOperationTerminal.js +73 -9
- package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +17 -15
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/commands/itemCommands.js +64 -9
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/placeholderCommands.js +1 -1
- package/dist/editor/commands/placeholderCommands.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.js +2 -2
- package/dist/editor/content-tree/TreeSettingsMenu.js +1 -1
- package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -1
- package/dist/editor/context-menu/InsertMenu.js +1 -1
- package/dist/editor/context-menu/InsertMenu.js.map +1 -1
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +1 -1
- package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js +3 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
- package/dist/editor/field-types/AttachmentEditor.js +1 -1
- package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
- package/dist/editor/field-types/CheckboxEditor.js +1 -1
- package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
- package/dist/editor/field-types/DateFieldEditor.js +2 -2
- package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
- package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.d.ts +3 -1
- package/dist/editor/field-types/TreeListEditor.js +5 -5
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.js +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js +14 -14
- package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js +1 -1
- package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
- package/dist/editor/itemContextMenu.js +1 -1
- package/dist/editor/itemContextMenu.js.map +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js +1 -1
- package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +5 -5
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/media-selector/MediaSelector.js +1 -1
- package/dist/editor/media-selector/MediaSelector.js.map +1 -1
- package/dist/editor/media-selector/Preview.js +1 -1
- package/dist/editor/media-selector/Preview.js.map +1 -1
- package/dist/editor/media-selector/Thumbnails.js +4 -4
- package/dist/editor/media-selector/Thumbnails.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +3 -3
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/media-selector/UploadZone.js +1 -1
- package/dist/editor/media-selector/UploadZone.js.map +1 -1
- package/dist/editor/menubar/ActiveUsers.js +17 -15
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/FavoritesControls.js +3 -3
- package/dist/editor/menubar/FavoritesControls.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +7 -3
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/OpenInNewTabButton.d.ts +1 -1
- package/dist/editor/menubar/OpenInNewTabButton.js +2 -2
- package/dist/editor/menubar/OpenInNewTabButton.js.map +1 -1
- package/dist/editor/menubar/OperationsIndicator.js +3 -3
- package/dist/editor/menubar/OperationsIndicator.js.map +1 -1
- package/dist/editor/menubar/ToolbarFactory.js +2 -7
- package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.js +15 -13
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +5 -5
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/activeUserSessions.d.ts +9 -0
- package/dist/editor/menubar/activeUserSessions.js +30 -0
- package/dist/editor/menubar/activeUserSessions.js.map +1 -0
- package/dist/editor/menubar/toolbar-sections/CompareControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/CompareControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/FullscreenControl.js +1 -1
- package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +12 -12
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/UtilityControls.d.ts +1 -3
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -4
- package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +3 -2
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/notifications/NotificationCenter.js +23 -5
- package/dist/editor/notifications/NotificationCenter.js.map +1 -1
- package/dist/editor/notifications/NotificationItem.js +3 -3
- package/dist/editor/notifications/NotificationItem.js.map +1 -1
- package/dist/editor/notifications/WatchButton.js +8 -8
- package/dist/editor/notifications/WatchButton.js.map +1 -1
- package/dist/editor/notifications/watchEventOptions.js +2 -2
- package/dist/editor/notifications/watchEventOptions.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +5 -5
- package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +2 -2
- package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +16 -13
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +75 -35
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +1 -1
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +2 -1
- package/dist/editor/page-viewer/MiniMap.js +98 -12
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewer.js +2 -2
- package/dist/editor/page-viewer/PageViewerFrame.js +184 -90
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +34 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.js +69 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/bridgeInlineEditSession.d.ts +49 -0
- package/dist/editor/page-viewer/bridgeInlineEditSession.js +189 -0
- package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -0
- package/dist/editor/personalization/ActionList.js +1 -1
- package/dist/editor/personalization/ActionList.js.map +1 -1
- package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
- package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
- package/dist/editor/personalization/PersonalizationPanel.js +7 -7
- package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
- package/dist/editor/personalization/RuleElementPicker.js +1 -1
- package/dist/editor/personalization/RuleElementPicker.js.map +1 -1
- package/dist/editor/personalization/RuleList.js +3 -3
- package/dist/editor/personalization/RuleList.js.map +1 -1
- package/dist/editor/personalization/TreeItemPicker.js +3 -3
- package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +2 -2
- package/dist/editor/reviews/CommentEditor.js +3 -2
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- package/dist/editor/reviews/CommentPopover.js +5 -3
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +8 -8
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/Comments.js +4 -4
- package/dist/editor/reviews/Comments.js.map +1 -1
- package/dist/editor/reviews/CreateReviewConfirmStep.js +1 -1
- package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +4 -5
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/CreateReviewReviewersStep.js +1 -1
- package/dist/editor/reviews/CreateReviewReviewersStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSettingsStep.js +2 -1
- package/dist/editor/reviews/CreateReviewSettingsStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.js +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +13 -13
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.d.ts +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +28 -63
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/FeedbackModeIntro.js +3 -3
- package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
- package/dist/editor/reviews/LatestFeedback.js +3 -3
- package/dist/editor/reviews/LatestFeedback.js.map +1 -1
- package/dist/editor/reviews/MultiReviewManager.js +0 -1
- package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
- package/dist/editor/reviews/PreconfiguredReviewerSelector.js +1 -1
- package/dist/editor/reviews/PreconfiguredReviewerSelector.js.map +1 -1
- package/dist/editor/reviews/ReviewCard.d.ts +1 -4
- package/dist/editor/reviews/ReviewCard.js +28 -7
- package/dist/editor/reviews/ReviewCard.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +39 -35
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewItemsPanel.d.ts +1 -3
- package/dist/editor/reviews/ReviewItemsPanel.js +20 -56
- package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewersPanel.js +3 -3
- package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +9 -74
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/reviews/SecretPhraseInput.d.ts +8 -0
- package/dist/editor/reviews/SecretPhraseInput.js +9 -0
- package/dist/editor/reviews/SecretPhraseInput.js.map +1 -0
- package/dist/editor/reviews/SuggestedEdit.js +6 -6
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/reviewListPresentation.d.ts +2 -0
- package/dist/editor/reviews/reviewListPresentation.js +11 -0
- package/dist/editor/reviews/reviewListPresentation.js.map +1 -1
- package/dist/editor/reviews/useMultiReview.d.ts +1 -2
- package/dist/editor/reviews/useMultiReview.js +74 -65
- package/dist/editor/reviews/useMultiReview.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +1 -9
- package/dist/editor/services/contentService.js +4 -1
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +1 -0
- package/dist/editor/services/editService.js +12 -19
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +1 -9
- package/dist/editor/services/reviewsService.js +1 -9
- package/dist/editor/services/reviewsService.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/settings/About.js +6 -6
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/IndexOverview.js +1 -1
- package/dist/editor/settings/IndexOverview.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +5 -5
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
- package/dist/editor/settings/SettingsBreadcrumb.js.map +1 -1
- package/dist/editor/settings/SettingsView.js +3 -2
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/StatusSummary.js +6 -6
- package/dist/editor/settings/StatusSummary.js.map +1 -1
- package/dist/editor/settings/index/EmbeddingProviderInfo.js +2 -2
- package/dist/editor/settings/index/EmbeddingProviderInfo.js.map +1 -1
- package/dist/editor/settings/index/QueueErrorsDisplay.d.ts +1 -1
- package/dist/editor/settings/index/QueueErrorsDisplay.js +7 -3
- package/dist/editor/settings/index/QueueErrorsDisplay.js.map +1 -1
- package/dist/editor/settings/index/embeddingErrors.d.ts +7 -0
- package/dist/editor/settings/index/embeddingErrors.js +105 -0
- package/dist/editor/settings/index/embeddingErrors.js.map +1 -0
- package/dist/editor/settings/index/types.d.ts +1 -0
- package/dist/editor/settings/index/useIndexStatus.js +2 -2
- package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +6 -6
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js +3 -3
- package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js +2 -2
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ClusterInstancesPanel.js +3 -3
- package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
- package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
- package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -1
- package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
- package/dist/editor/settings/panels/CreateMcpServerDialog.js.map +1 -1
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js +2 -2
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js.map +1 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +1 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ItemConfigPanel.js +1 -1
- package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +5 -5
- package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js +5 -5
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/McpToolsPanel.js +3 -3
- package/dist/editor/settings/panels/McpToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js +6 -6
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +4 -4
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +16 -13
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +2 -3
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelectorList.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelectorList.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +13 -13
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProviderConfigPanel.js +3 -3
- package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/StatusPanel.js +5 -5
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
- package/dist/editor/setup-wizard/SetupStepError.js +1 -1
- package/dist/editor/setup-wizard/SetupStepError.js.map +1 -1
- package/dist/editor/setup-wizard/SetupStepLayout.js +1 -1
- package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -2
- package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +6 -12
- package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ProviderStep.js +6 -6
- package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/WelcomeStep.js +1 -1
- package/dist/editor/sidebar/Completions.js +1 -1
- package/dist/editor/sidebar/Completions.js.map +1 -1
- package/dist/editor/sidebar/ComponentPalette.js +1 -1
- package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +11 -11
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/DictionaryEditor.js +40 -15
- package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +5 -5
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
- package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +4 -4
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/Sessions.js +14 -7
- package/dist/editor/sidebar/Sessions.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.js +7 -5
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/TimelineView.js +1 -1
- package/dist/editor/sidebar/TimelineView.js.map +1 -1
- package/dist/editor/sidebar/Validation.js +1 -1
- package/dist/editor/sidebar/Validation.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +1 -1
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
- package/dist/editor/template-wizard/TemplateBuilderDialog.js.map +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +10 -10
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.js +2 -2
- package/dist/editor/ui/ComponentThumbnailDialog.js +1 -1
- package/dist/editor/ui/ComponentThumbnailDialog.js.map +1 -1
- package/dist/editor/ui/IconSelectorDialog.js +1 -1
- package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
- package/dist/editor/ui/Icons.d.ts +1 -1
- package/dist/editor/ui/Icons.js +7 -7
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemList.js +1 -1
- package/dist/editor/ui/ItemList.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +2 -2
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/PublishDialog.js +1 -1
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +2 -2
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/PublishRestrictionsDialog.js +20 -11
- package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
- package/dist/editor/ui/Section.js +2 -2
- package/dist/editor/ui/Section.js.map +1 -1
- package/dist/editor/ui/SimpleTable.d.ts +3 -1
- package/dist/editor/ui/SimpleTable.js +3 -3
- package/dist/editor/ui/SimpleTable.js.map +1 -1
- package/dist/editor/ui/Spinner.js +1 -1
- package/dist/editor/ui/Spinner.js.map +1 -1
- package/dist/editor/ui/Splitter.js +3 -7
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +2 -2
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/WorkboxItemsTable.js +2 -2
- package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
- package/dist/editor/utils.js +6 -0
- package/dist/editor/utils.js.map +1 -1
- package/dist/editor/version-diff/versionDiffTargets.js +2 -1
- package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
- package/dist/editor/views/EditorSlot.js +1 -1
- package/dist/editor/views/EditorSlot.js.map +1 -1
- package/dist/editor/views/ItemEditor.js +2 -2
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/editor/views/SingleEditView.js +2 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/licensing/EmailEntry.js +1 -1
- package/dist/licensing/EmailEntry.js.map +1 -1
- package/dist/licensing/FeatureGate.js +1 -1
- package/dist/licensing/LicenseActivationForm.js +1 -1
- package/dist/licensing/LicenseActivationForm.js.map +1 -1
- package/dist/licensing/LicenseCodeEntry.js +1 -1
- package/dist/licensing/LicenseCodeEntry.js.map +1 -1
- package/dist/licensing/LicenseOverlay.js +2 -2
- package/dist/licensing/LicenseOverlay.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/services/setupWizardService.js +4 -1
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
- package/dist/setup/wizard/steps/ImportModelDialog.js +3 -3
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.d.ts +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +11 -11
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +3 -3
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/OpenPage.js +1 -1
- package/dist/splash-screen/OpenPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +7 -7
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +1 -1
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +1 -1
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/CommentsList.js +4 -4
- package/dist/task-board/components/CommentsList.js.map +1 -1
- package/dist/task-board/components/FinishedProjectCard.js +1 -1
- package/dist/task-board/components/FinishedProjectCard.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
- package/dist/task-board/components/ItemCollectionPicker.js +1 -1
- package/dist/task-board/components/ItemCollectionPicker.js.map +1 -1
- package/dist/task-board/components/ProjectBudgetBanner.js +1 -1
- package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
- package/dist/task-board/components/ProjectDashboard.js +4 -4
- package/dist/task-board/components/ProjectDashboard.js.map +1 -1
- package/dist/task-board/components/ProjectGoalsPanel.js +17 -13
- package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
- package/dist/task-board/components/ProjectListContent.js +5 -5
- package/dist/task-board/components/ProjectListContent.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +4 -4
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.js +5 -5
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js +3 -3
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +4 -4
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.js +4 -4
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentDropZone.js +3 -3
- package/dist/task-board/components/TaskAttachmentDropZone.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js +4 -4
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectSelector.js +1 -1
- package/dist/task-board/components/TaskBoardProjectSelector.js.map +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +1 -1
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +6 -6
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskReviewActions.js +6 -6
- package/dist/task-board/components/TaskReviewActions.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +1 -1
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -3
- package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCards.js +3 -3
- package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
- package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
- package/dist/task-board/components/WizardTaskDetailsPanel.js +3 -3
- package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.js +8 -8
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/WizardView.js +4 -4
- package/dist/task-board/views/WizardView.js.map +1 -1
- package/dist/tour/default-tour.js +17 -17
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/tour/preview-tour.js +6 -6
- package/dist/tour/preview-tour.js.map +1 -1
- package/dist/types.d.ts +11 -5
- package/package.json +1 -1
- package/styles.css +25 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const AGENT_TERMINAL_BLUR_GRACE_MS =
|
|
1
|
+
export declare const AGENT_TERMINAL_BLUR_GRACE_MS = 2000;
|
|
2
2
|
/** Whether an event target is (or is inside) the agent terminal. */
|
|
3
3
|
export declare function isAgentTerminalTarget(target: EventTarget | null): boolean;
|
|
4
4
|
/**
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// `document.activeElement`: the prompt textarea holds focus for minutes, and a
|
|
12
12
|
// persistent activeElement check would suppress legitimate clears (e.g. a mode
|
|
13
13
|
// change via keyboard shortcut) while the user types.
|
|
14
|
-
export const AGENT_TERMINAL_BLUR_GRACE_MS =
|
|
14
|
+
export const AGENT_TERMINAL_BLUR_GRACE_MS = 2_000;
|
|
15
15
|
const AGENT_TERMINAL_SELECTOR = "[data-agent-terminal-root]";
|
|
16
16
|
/** Whether an event target is (or is inside) the agent terminal. */
|
|
17
17
|
export function isAgentTerminalTarget(target) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentTerminalFocus.js","sourceRoot":"","sources":["../../../src/editor/client/agentTerminalFocus.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,eAAe;AAEf,+EAA+E;AAC/E,8EAA8E;AAC9E,uEAAuE;AACvE,uEAAuE;AACvE,+EAA+E;AAC/E,+EAA+E;AAC/E,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,
|
|
1
|
+
{"version":3,"file":"agentTerminalFocus.js","sourceRoot":"","sources":["../../../src/editor/client/agentTerminalFocus.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,eAAe;AAEf,+EAA+E;AAC/E,8EAA8E;AAC9E,uEAAuE;AACvE,uEAAuE;AACvE,+EAA+E;AAC/E,+EAA+E;AAC/E,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAE7D,oEAAoE;AACpE,MAAM,UAAU,qBAAqB,CAAC,MAA0B;IAC9D,MAAM,OAAO,GAAG,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAA0B,EAC1B,GAAW;IAEX,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAI5C;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,4BAA4B,CAAC;IAC/D,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,8BAA8B,GAAG,OAAO,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { EditOperation } from "../../types";
|
|
2
|
+
import type { ExecutionResult } from "../services/editService";
|
|
3
|
+
export declare function isRedoStackEntry(operation: EditOperation): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Persisting any new operation removes all undone operations for that session
|
|
6
|
+
* on the server. Apply the same rule before deciding whether the new operation
|
|
7
|
+
* belongs in the currently visible history scope.
|
|
8
|
+
*/
|
|
9
|
+
export declare function reconcileNewHistoryOperation(history: EditOperation[], newOperation: EditOperation, includeNewOperation: boolean): EditOperation[];
|
|
10
|
+
export declare function isMissingEditOperationResult(result: ExecutionResult<unknown>): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function isRedoStackEntry(operation) {
|
|
2
|
+
return operation.undone === true || operation.canRedo === true;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Persisting any new operation removes all undone operations for that session
|
|
6
|
+
* on the server. Apply the same rule before deciding whether the new operation
|
|
7
|
+
* belongs in the currently visible history scope.
|
|
8
|
+
*/
|
|
9
|
+
export function reconcileNewHistoryOperation(history, newOperation, includeNewOperation) {
|
|
10
|
+
const historyWithValidRedoStack = newOperation.sessionId && !isRedoStackEntry(newOperation)
|
|
11
|
+
? history.filter((operation) => operation.sessionId !== newOperation.sessionId ||
|
|
12
|
+
!isRedoStackEntry(operation))
|
|
13
|
+
: history;
|
|
14
|
+
return includeNewOperation
|
|
15
|
+
? [newOperation, ...historyWithValidRedoStack]
|
|
16
|
+
: historyWithValidRedoStack;
|
|
17
|
+
}
|
|
18
|
+
export function isMissingEditOperationResult(result) {
|
|
19
|
+
if (result.response.status !== 404)
|
|
20
|
+
return false;
|
|
21
|
+
return [result.summary, result.details, result.rawDetails]
|
|
22
|
+
.filter((value) => typeof value === "string")
|
|
23
|
+
.some((value) => /operation not found\s*:/i.test(value));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=editHistoryReconciliation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editHistoryReconciliation.js","sourceRoot":"","sources":["../../../src/editor/client/editHistoryReconciliation.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACvD,OAAO,SAAS,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAAwB,EACxB,YAA2B,EAC3B,mBAA4B;IAE5B,MAAM,yBAAyB,GAC7B,YAAY,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;QACvD,CAAC,CAAC,OAAO,CAAC,MAAM,CACZ,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,SAAS,KAAK,YAAY,CAAC,SAAS;YAC9C,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAC/B;QACH,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO,mBAAmB;QACxB,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,yBAAyB,CAAC;QAC9C,CAAC,CAAC,yBAAyB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAAgC;IAEhC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAEjD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;SACvD,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;SAC7D,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -56,7 +56,7 @@ function ExpandableErrorDetails({ details, onToggle, }) {
|
|
|
56
56
|
event.stopPropagation();
|
|
57
57
|
setExpanded((current) => !current);
|
|
58
58
|
onToggle?.();
|
|
59
|
-
}, children: [_jsx(ChevronDown, { className: cn("h-3 w-3 transition-transform duration-200", expanded && "rotate-180"), strokeWidth: 1
|
|
59
|
+
}, children: [_jsx(ChevronDown, { className: cn("h-3 w-3 transition-transform duration-200", expanded && "rotate-180"), strokeWidth: 1 }), expanded ? "Hide details" : "Show details"] }), expanded && (_jsx("pre", { id: detailsId, className: "border-border-default bg-neutral-grey-5 text-neutral-grey-100 mt-2 max-h-36 overflow-auto rounded border p-2 font-mono text-[11px] leading-relaxed break-words whitespace-pre-wrap", children: details }))] }));
|
|
60
60
|
}
|
|
61
61
|
export function showExpandableErrorToast(error) {
|
|
62
62
|
const normalized = normalizeErrorToastPayload(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorToast.js","sourceRoot":"","sources":["../../../src/editor/client/errorToast.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"errorToast.js","sourceRoot":"","sources":["../../../src/editor/client/errorToast.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Dispatch, type SetStateAction } from "react";
|
|
2
2
|
import { type EditorSocketDiagnostics } from "../socketDiagnostics";
|
|
3
3
|
export type ConcurrentUserLimitError = {
|
|
4
|
+
backendReachable: boolean;
|
|
4
5
|
currentUsers: number;
|
|
5
6
|
maxUsers: number;
|
|
6
7
|
message: string;
|
|
@@ -10,11 +11,11 @@ export type ConcurrentUserLimitError = {
|
|
|
10
11
|
* up. Used by recovery code that wants the freshly opened socket to re-issue agent
|
|
11
12
|
* subscriptions via the existing onOpen callback chain — not for routine close handling.
|
|
12
13
|
*
|
|
13
|
-
* Returns whether a
|
|
14
|
+
* Returns whether a reconnect was actually initiated. The hook's close handler does NOT null
|
|
14
15
|
* `globalThis.editorSocket`; the next `connect()` call detects `readyState === CLOSED`
|
|
15
16
|
* and overwrites the global, so we must not delete it from this helper. When the socket
|
|
16
|
-
* is already CLOSING/CLOSED there is
|
|
17
|
-
*
|
|
17
|
+
* is missing or already CLOSING/CLOSED there is no close event to drive recovery, so we route
|
|
18
|
+
* through the hook's reconnect handler, which re-enters the connect path directly.
|
|
18
19
|
*/
|
|
19
20
|
export declare function forceEditorSocketReconnect(reason: string): boolean;
|
|
20
21
|
export declare function useEditorWebSocket(params: {
|
|
@@ -2,16 +2,30 @@ import { useEffect, useRef } from "react";
|
|
|
2
2
|
import { checkConnectionAvailability, } from "../../services/editService";
|
|
3
3
|
import { createEditorSocketDiagnostics, getEditorSocketReadyStateLabel, } from "../socketDiagnostics";
|
|
4
4
|
import { createSseTransport, createWebSocketAdapter, ensureEditorRealtimeHandle, getEditorRealtime, setActiveTransport, setReconnectHandler, } from "../realtime/realtimeTransport";
|
|
5
|
+
// Availability recheck cadence while the concurrent-user-limit latch is set. Deliberately slow:
|
|
6
|
+
// the ConcurrentUserLimitDialog polls at 7.5s while open, so this timer only has to cover tabs
|
|
7
|
+
// where the dialog was dismissed.
|
|
8
|
+
const CONCURRENT_LIMIT_RECHECK_MS = 60_000;
|
|
9
|
+
// While on the SSE fallback, how often to probe whether a WebSocket can be opened again. At
|
|
10
|
+
// fallback time an app-pool recycle looks identical to a missing IIS WebSocket feature, so SSE
|
|
11
|
+
// mode must not be permanent — but one probe per interval keeps genuinely WS-less environments
|
|
12
|
+
// free of retry storms.
|
|
13
|
+
const WS_REPROBE_INTERVAL_MS = 5 * 60_000;
|
|
14
|
+
// A probe socket that has not reached OPEN within this window counts as failed.
|
|
15
|
+
const WS_PROBE_TIMEOUT_MS = 5_000;
|
|
16
|
+
// Used when the server rejects the connection without complete limit metadata; the dialog must
|
|
17
|
+
// still appear or the tab has no recovery path besides a reload.
|
|
18
|
+
const CONCURRENT_LIMIT_FALLBACK_MESSAGE = "The concurrent user limit for this license has been reached. Editing becomes available again once another user disconnects.";
|
|
5
19
|
/**
|
|
6
20
|
* Closes the active editor websocket so the hook's own reconnect machinery picks it back
|
|
7
21
|
* up. Used by recovery code that wants the freshly opened socket to re-issue agent
|
|
8
22
|
* subscriptions via the existing onOpen callback chain — not for routine close handling.
|
|
9
23
|
*
|
|
10
|
-
* Returns whether a
|
|
24
|
+
* Returns whether a reconnect was actually initiated. The hook's close handler does NOT null
|
|
11
25
|
* `globalThis.editorSocket`; the next `connect()` call detects `readyState === CLOSED`
|
|
12
26
|
* and overwrites the global, so we must not delete it from this helper. When the socket
|
|
13
|
-
* is already CLOSING/CLOSED there is
|
|
14
|
-
*
|
|
27
|
+
* is missing or already CLOSING/CLOSED there is no close event to drive recovery, so we route
|
|
28
|
+
* through the hook's reconnect handler, which re-enters the connect path directly.
|
|
15
29
|
*/
|
|
16
30
|
export function forceEditorSocketReconnect(reason) {
|
|
17
31
|
// In SSE fallback mode there is no globalThis.editorSocket; route through the transport handle,
|
|
@@ -22,10 +36,9 @@ export function forceEditorSocketReconnect(reason) {
|
|
|
22
36
|
return true;
|
|
23
37
|
}
|
|
24
38
|
const socket = globalThis.editorSocket;
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
socket.readyState === WebSocket.CONNECTING) {
|
|
39
|
+
if (socket &&
|
|
40
|
+
(socket.readyState === WebSocket.OPEN ||
|
|
41
|
+
socket.readyState === WebSocket.CONNECTING)) {
|
|
29
42
|
try {
|
|
30
43
|
socket.close(4000, reason);
|
|
31
44
|
return true;
|
|
@@ -34,7 +47,8 @@ export function forceEditorSocketReconnect(reason) {
|
|
|
34
47
|
return false;
|
|
35
48
|
}
|
|
36
49
|
}
|
|
37
|
-
|
|
50
|
+
realtime.reconnect(reason);
|
|
51
|
+
return true;
|
|
38
52
|
}
|
|
39
53
|
export function useEditorWebSocket(params) {
|
|
40
54
|
const { sessionId, onMessage, onOpen, onError, onConcurrentUserLimit, onSessionRevoked, connectSocket, requestQuota, sendClientInfo, setSocketDiagnostics, enableWebSocketTransport = true, enableSseFallback = true, transportSettingsReady = true, } = params;
|
|
@@ -48,6 +62,12 @@ export function useEditorWebSocket(params) {
|
|
|
48
62
|
const sseTransportRef = useRef(null);
|
|
49
63
|
const hadOpenedRef = useRef(false);
|
|
50
64
|
const fallbackTimerRef = useRef(null);
|
|
65
|
+
const limitRecheckTimerRef = useRef(null);
|
|
66
|
+
const sseReconnectTimeoutRef = useRef(null);
|
|
67
|
+
const sseReconnectAttemptsRef = useRef(0);
|
|
68
|
+
const wsReprobeTimerRef = useRef(null);
|
|
69
|
+
// Tears down an in-flight WebSocket probe (its socket and timeout); null when none is running.
|
|
70
|
+
const wsProbeCleanupRef = useRef(null);
|
|
51
71
|
// Stable refs for callbacks to avoid re-connecting on every render
|
|
52
72
|
const onMessageRef = useRef(onMessage);
|
|
53
73
|
const onOpenRef = useRef(onOpen);
|
|
@@ -154,6 +174,178 @@ export function useEditorWebSocket(params) {
|
|
|
154
174
|
connect();
|
|
155
175
|
}, delay);
|
|
156
176
|
};
|
|
177
|
+
const startConnect = () => {
|
|
178
|
+
connect().catch((error) => {
|
|
179
|
+
console.error("Error in WebSocket connection:", error);
|
|
180
|
+
onErrorRef.current?.(new Event("error"));
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
const clearLimitRecheckTimer = () => {
|
|
184
|
+
if (limitRecheckTimerRef.current) {
|
|
185
|
+
clearTimeout(limitRecheckTimerRef.current);
|
|
186
|
+
limitRecheckTimerRef.current = null;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
// While the concurrent-user-limit latch is set no close event will ever fire again, so this
|
|
190
|
+
// chained timeout (at most one check in flight) is the only automatic way back in once a
|
|
191
|
+
// seat frees up.
|
|
192
|
+
const scheduleLimitRecheck = () => {
|
|
193
|
+
if (disposed || limitRecheckTimerRef.current) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
limitRecheckTimerRef.current = setTimeout(() => {
|
|
197
|
+
limitRecheckTimerRef.current = null;
|
|
198
|
+
if (disposed || !isConcurrentUserLimitRef.current) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
checkConnectionAvailability(sessionId)
|
|
202
|
+
.then((availability) => {
|
|
203
|
+
if (disposed || !isConcurrentUserLimitRef.current) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (availability.allowed) {
|
|
207
|
+
isConcurrentUserLimitRef.current = false;
|
|
208
|
+
reconnectAttemptsRef.current = 0;
|
|
209
|
+
if (modeRef.current === "sse") {
|
|
210
|
+
connectSse();
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
startConnect();
|
|
214
|
+
}
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
scheduleLimitRecheck();
|
|
218
|
+
})
|
|
219
|
+
.catch(() => {
|
|
220
|
+
// Availability unknown (server restarting?) — keep polling.
|
|
221
|
+
if (!disposed && isConcurrentUserLimitRef.current) {
|
|
222
|
+
scheduleLimitRecheck();
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}, CONCURRENT_LIMIT_RECHECK_MS);
|
|
226
|
+
};
|
|
227
|
+
// The dialog (with its Retry button) must appear even when the availability response carries
|
|
228
|
+
// partial metadata — a latched limit without a visible dialog leaves no recovery path short
|
|
229
|
+
// of a reload.
|
|
230
|
+
const notifyConcurrentUserLimit = (availability) => {
|
|
231
|
+
isConcurrentUserLimitRef.current = true;
|
|
232
|
+
onConcurrentUserLimitRef.current?.({
|
|
233
|
+
backendReachable: availability.backendReachable ?? true,
|
|
234
|
+
currentUsers: availability.currentUsers ?? 0,
|
|
235
|
+
maxUsers: availability.maxUsers ?? 0,
|
|
236
|
+
message: availability.message ?? CONCURRENT_LIMIT_FALLBACK_MESSAGE,
|
|
237
|
+
});
|
|
238
|
+
scheduleLimitRecheck();
|
|
239
|
+
};
|
|
240
|
+
const clearSseReconnectTimer = () => {
|
|
241
|
+
if (sseReconnectTimeoutRef.current) {
|
|
242
|
+
clearTimeout(sseReconnectTimeoutRef.current);
|
|
243
|
+
sseReconnectTimeoutRef.current = null;
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
// EventSource retries transient drops on its own, but a hard failure (connection refused,
|
|
247
|
+
// non-200 while the server restarts) closes it permanently — the stream must be re-created
|
|
248
|
+
// by us, reusing the WebSocket backoff curve.
|
|
249
|
+
const scheduleSseReconnect = () => {
|
|
250
|
+
if (disposed ||
|
|
251
|
+
sseReconnectTimeoutRef.current ||
|
|
252
|
+
modeRef.current !== "sse") {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const attempts = sseReconnectAttemptsRef.current;
|
|
256
|
+
const delay = Math.min(1000 * Math.pow(2, Math.min(attempts, 5)), 30000);
|
|
257
|
+
reconnectCountRef.current += 1;
|
|
258
|
+
markSocketEvent("reconnect-scheduled", null, {
|
|
259
|
+
reconnectCount: reconnectCountRef.current,
|
|
260
|
+
});
|
|
261
|
+
sseReconnectTimeoutRef.current = setTimeout(() => {
|
|
262
|
+
sseReconnectTimeoutRef.current = null;
|
|
263
|
+
sseReconnectAttemptsRef.current = attempts + 1;
|
|
264
|
+
connectSse();
|
|
265
|
+
}, delay);
|
|
266
|
+
};
|
|
267
|
+
const clearWsReprobeTimer = () => {
|
|
268
|
+
if (wsReprobeTimerRef.current) {
|
|
269
|
+
clearTimeout(wsReprobeTimerRef.current);
|
|
270
|
+
wsReprobeTimerRef.current = null;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
// SSE mode is sticky by design (a missing IIS WebSocket feature never heals), but the same
|
|
274
|
+
// fallback also triggers on transient failures like an app-pool recycle — probe occasionally
|
|
275
|
+
// so those tabs find their way back to the preferred transport.
|
|
276
|
+
const startWsReprobeTimer = () => {
|
|
277
|
+
if (disposed || wsReprobeTimerRef.current || !wsEnabledRef.current) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
wsReprobeTimerRef.current = setTimeout(() => {
|
|
281
|
+
wsReprobeTimerRef.current = null;
|
|
282
|
+
if (disposed || modeRef.current !== "sse") {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
if (!isConcurrentUserLimitRef.current) {
|
|
286
|
+
probeWebSocket();
|
|
287
|
+
}
|
|
288
|
+
startWsReprobeTimer();
|
|
289
|
+
}, WS_REPROBE_INTERVAL_MS);
|
|
290
|
+
};
|
|
291
|
+
// Opens a single throwaway WebSocket. Reaching OPEN proves the transport works again, so the
|
|
292
|
+
// editor switches back; anything else leaves SSE untouched. The probe carries none of the
|
|
293
|
+
// hook's listeners, so it must never be adopted as the real socket.
|
|
294
|
+
const probeWebSocket = () => {
|
|
295
|
+
if (disposed ||
|
|
296
|
+
modeRef.current !== "sse" ||
|
|
297
|
+
!wsEnabledRef.current ||
|
|
298
|
+
wsProbeCleanupRef.current) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
let probe;
|
|
302
|
+
try {
|
|
303
|
+
probe = connectSocket(sessionId);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
let settled = false;
|
|
309
|
+
const settle = (opened) => {
|
|
310
|
+
if (settled) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
settled = true;
|
|
314
|
+
wsProbeCleanupRef.current = null;
|
|
315
|
+
clearTimeout(probeTimer);
|
|
316
|
+
try {
|
|
317
|
+
probe.close();
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
/* ignore */
|
|
321
|
+
}
|
|
322
|
+
if (opened && !disposed && modeRef.current === "sse") {
|
|
323
|
+
switchBackToWebSocket();
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const probeTimer = setTimeout(() => settle(false), WS_PROBE_TIMEOUT_MS);
|
|
327
|
+
wsProbeCleanupRef.current = () => settle(false);
|
|
328
|
+
probe.addEventListener("open", () => settle(true));
|
|
329
|
+
probe.addEventListener("close", () => settle(false));
|
|
330
|
+
probe.addEventListener("error", () => settle(false));
|
|
331
|
+
};
|
|
332
|
+
const switchBackToWebSocket = () => {
|
|
333
|
+
if (disposed) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
clearWsReprobeTimer();
|
|
337
|
+
clearSseReconnectTimer();
|
|
338
|
+
sseTransportRef.current?.close();
|
|
339
|
+
sseTransportRef.current = null;
|
|
340
|
+
setActiveTransport(null);
|
|
341
|
+
modeRef.current = null;
|
|
342
|
+
// The probe reached OPEN, so this environment provably supports WebSockets; a later
|
|
343
|
+
// close-before-open must go through the retry path, not straight back to SSE.
|
|
344
|
+
hadOpenedRef.current = true;
|
|
345
|
+
reconnectAttemptsRef.current = 0;
|
|
346
|
+
sseReconnectAttemptsRef.current = 0;
|
|
347
|
+
startConnect();
|
|
348
|
+
};
|
|
157
349
|
const attach = (socket, handler, reusedExistingSocket) => {
|
|
158
350
|
if (disposed) {
|
|
159
351
|
return;
|
|
@@ -193,12 +385,13 @@ export function useEditorWebSocket(params) {
|
|
|
193
385
|
}
|
|
194
386
|
}, 5000);
|
|
195
387
|
};
|
|
196
|
-
// Establishes (or re-establishes) the SSE fallback transport
|
|
388
|
+
// Establishes (or re-establishes) the SSE fallback transport.
|
|
197
389
|
const connectSse = () => {
|
|
198
390
|
if (disposed)
|
|
199
391
|
return;
|
|
200
392
|
modeRef.current = "sse";
|
|
201
393
|
clearFallbackTimer();
|
|
394
|
+
clearSseReconnectTimer();
|
|
202
395
|
if (reconnectTimeoutRef.current) {
|
|
203
396
|
clearTimeout(reconnectTimeoutRef.current);
|
|
204
397
|
reconnectTimeoutRef.current = null;
|
|
@@ -218,6 +411,8 @@ export function useEditorWebSocket(params) {
|
|
|
218
411
|
if (disposed)
|
|
219
412
|
return;
|
|
220
413
|
isConcurrentUserLimitRef.current = false;
|
|
414
|
+
clearLimitRecheckTimer();
|
|
415
|
+
sseReconnectAttemptsRef.current = 0;
|
|
221
416
|
markSocketEvent("open", null, {
|
|
222
417
|
lastOpenAt: new Date().toISOString(),
|
|
223
418
|
lastCloseCode: null,
|
|
@@ -239,24 +434,31 @@ export function useEditorWebSocket(params) {
|
|
|
239
434
|
lastErrorAt: new Date().toISOString(),
|
|
240
435
|
});
|
|
241
436
|
onErrorRef.current?.(event);
|
|
242
|
-
// EventSource auto-reconnects on transient drops
|
|
243
|
-
//
|
|
437
|
+
// EventSource auto-reconnects on transient drops but stays CLOSED after a hard failure
|
|
438
|
+
// (connection refused, non-200 while the server restarts). Capture the state before the
|
|
439
|
+
// availability round-trip so a late response cannot mask it.
|
|
440
|
+
const closedHard = sseTransportRef.current?.eventSource.readyState ===
|
|
441
|
+
EventSource.CLOSED;
|
|
442
|
+
// Disambiguate a concurrent-user-limit rejection (surface it) from a plain failure
|
|
443
|
+
// (let EventSource retry transient drops; re-create the stream on hard closes).
|
|
244
444
|
checkConnectionAvailability(sessionId)
|
|
245
445
|
.then((availability) => {
|
|
246
|
-
if (disposed
|
|
446
|
+
if (disposed)
|
|
247
447
|
return;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
maxUsers: availability.maxUsers,
|
|
255
|
-
message: availability.message,
|
|
256
|
-
});
|
|
448
|
+
if (!availability.allowed) {
|
|
449
|
+
notifyConcurrentUserLimit(availability);
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
if (closedHard) {
|
|
453
|
+
scheduleSseReconnect();
|
|
257
454
|
}
|
|
258
455
|
})
|
|
259
|
-
.catch(() => {
|
|
456
|
+
.catch(() => {
|
|
457
|
+
// Availability unknown — a permanently closed stream still must be replaced.
|
|
458
|
+
if (!disposed && closedHard) {
|
|
459
|
+
scheduleSseReconnect();
|
|
460
|
+
}
|
|
461
|
+
});
|
|
260
462
|
},
|
|
261
463
|
onSessionRevoked: () => {
|
|
262
464
|
if (disposed)
|
|
@@ -269,12 +471,17 @@ export function useEditorWebSocket(params) {
|
|
|
269
471
|
});
|
|
270
472
|
sseTransportRef.current = sse;
|
|
271
473
|
setActiveTransport(sse);
|
|
474
|
+
startWsReprobeTimer();
|
|
272
475
|
};
|
|
273
476
|
function fallbackToSse() {
|
|
274
477
|
if (disposed || modeRef.current === "sse")
|
|
275
478
|
return;
|
|
276
|
-
if (!sseEnabledRef.current)
|
|
277
|
-
|
|
479
|
+
if (!sseEnabledRef.current) {
|
|
480
|
+
// SSE fallback disabled in settings — keep retrying the WebSocket with backoff instead
|
|
481
|
+
// of leaving the tab without any transport.
|
|
482
|
+
scheduleReconnect(socketInstanceRef.current);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
278
485
|
connectSse();
|
|
279
486
|
}
|
|
280
487
|
ensureEditorRealtimeHandle();
|
|
@@ -282,17 +489,32 @@ export function useEditorWebSocket(params) {
|
|
|
282
489
|
if (disposed)
|
|
283
490
|
return;
|
|
284
491
|
if (modeRef.current === "sse") {
|
|
492
|
+
// Re-establish the stream for recovery callers, and treat the explicit request as an
|
|
493
|
+
// opportunity to leave SSE mode if WebSockets have come back in the meantime.
|
|
285
494
|
connectSse();
|
|
495
|
+
probeWebSocket();
|
|
496
|
+
return;
|
|
286
497
|
}
|
|
287
|
-
|
|
288
|
-
|
|
498
|
+
const ws = globalThis.editorSocket;
|
|
499
|
+
if (ws &&
|
|
500
|
+
(ws.readyState === WebSocket.OPEN ||
|
|
501
|
+
ws.readyState === WebSocket.CONNECTING)) {
|
|
289
502
|
try {
|
|
290
|
-
ws
|
|
503
|
+
ws.close(4000, reason);
|
|
291
504
|
}
|
|
292
505
|
catch {
|
|
293
506
|
/* ignore */
|
|
294
507
|
}
|
|
508
|
+
return;
|
|
295
509
|
}
|
|
510
|
+
// No live socket to close (already CLOSED, or never created because a connect attempt
|
|
511
|
+
// latched) — no close event can drive recovery, so re-enter the connect path directly.
|
|
512
|
+
if (reconnectTimeoutRef.current) {
|
|
513
|
+
clearTimeout(reconnectTimeoutRef.current);
|
|
514
|
+
reconnectTimeoutRef.current = null;
|
|
515
|
+
}
|
|
516
|
+
reconnectAttemptsRef.current = 0;
|
|
517
|
+
startConnect();
|
|
296
518
|
});
|
|
297
519
|
const connect = async () => {
|
|
298
520
|
if (disposed || modeRef.current === "sse")
|
|
@@ -309,18 +531,9 @@ export function useEditorWebSocket(params) {
|
|
|
309
531
|
if (disposed)
|
|
310
532
|
return;
|
|
311
533
|
if (!availability.allowed) {
|
|
312
|
-
//
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
availability.maxUsers !== undefined &&
|
|
316
|
-
availability.message) {
|
|
317
|
-
onConcurrentUserLimitRef.current?.({
|
|
318
|
-
currentUsers: availability.currentUsers,
|
|
319
|
-
maxUsers: availability.maxUsers,
|
|
320
|
-
message: availability.message,
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
// Don't attempt connection or retry for concurrent user limit
|
|
534
|
+
// Concurrent user limit — don't attempt or retry the connection; the limit recheck
|
|
535
|
+
// timer (and the dialog's Retry button) drive recovery from here.
|
|
536
|
+
notifyConcurrentUserLimit(availability);
|
|
324
537
|
return;
|
|
325
538
|
}
|
|
326
539
|
// Reset the flag if connection is allowed
|
|
@@ -355,6 +568,7 @@ export function useEditorWebSocket(params) {
|
|
|
355
568
|
}
|
|
356
569
|
reconnectAttemptsRef.current = 0;
|
|
357
570
|
isConcurrentUserLimitRef.current = false;
|
|
571
|
+
clearLimitRecheckTimer();
|
|
358
572
|
hadOpenedRef.current = true;
|
|
359
573
|
modeRef.current = "websocket";
|
|
360
574
|
clearFallbackTimer();
|
|
@@ -403,16 +617,7 @@ export function useEditorWebSocket(params) {
|
|
|
403
617
|
if (disposed)
|
|
404
618
|
return;
|
|
405
619
|
if (!availability.allowed) {
|
|
406
|
-
|
|
407
|
-
if (availability.currentUsers !== undefined &&
|
|
408
|
-
availability.maxUsers !== undefined &&
|
|
409
|
-
availability.message) {
|
|
410
|
-
onConcurrentUserLimitRef.current?.({
|
|
411
|
-
currentUsers: availability.currentUsers,
|
|
412
|
-
maxUsers: availability.maxUsers,
|
|
413
|
-
message: availability.message,
|
|
414
|
-
});
|
|
415
|
-
}
|
|
620
|
+
notifyConcurrentUserLimit(availability);
|
|
416
621
|
return;
|
|
417
622
|
}
|
|
418
623
|
fallbackToSse();
|
|
@@ -423,18 +628,12 @@ export function useEditorWebSocket(params) {
|
|
|
423
628
|
if (shouldCheckAvailability) {
|
|
424
629
|
checkConnectionAvailability(sessionId)
|
|
425
630
|
.then((availability) => {
|
|
631
|
+
if (disposed)
|
|
632
|
+
return;
|
|
426
633
|
if (!availability.allowed) {
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
availability.message) {
|
|
431
|
-
onConcurrentUserLimitRef.current?.({
|
|
432
|
-
currentUsers: availability.currentUsers,
|
|
433
|
-
maxUsers: availability.maxUsers,
|
|
434
|
-
message: availability.message,
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
return; // Don't retry
|
|
634
|
+
// Don't retry — the limit recheck timer takes over.
|
|
635
|
+
notifyConcurrentUserLimit(availability);
|
|
636
|
+
return;
|
|
438
637
|
}
|
|
439
638
|
// Not a concurrent user limit issue, proceed with retry.
|
|
440
639
|
scheduleReconnect(socket);
|
|
@@ -480,10 +679,7 @@ export function useEditorWebSocket(params) {
|
|
|
480
679
|
}
|
|
481
680
|
};
|
|
482
681
|
// Call async connect function
|
|
483
|
-
|
|
484
|
-
console.error("Error in WebSocket connection:", error);
|
|
485
|
-
onErrorRef.current?.(new Event("error"));
|
|
486
|
-
});
|
|
682
|
+
startConnect();
|
|
487
683
|
return () => {
|
|
488
684
|
disposed = true;
|
|
489
685
|
if (reconnectTimeoutRef.current) {
|
|
@@ -491,6 +687,11 @@ export function useEditorWebSocket(params) {
|
|
|
491
687
|
reconnectTimeoutRef.current = null;
|
|
492
688
|
}
|
|
493
689
|
clearFallbackTimer();
|
|
690
|
+
clearLimitRecheckTimer();
|
|
691
|
+
clearSseReconnectTimer();
|
|
692
|
+
clearWsReprobeTimer();
|
|
693
|
+
// Settles (and closes) any in-flight WebSocket probe together with its timeout.
|
|
694
|
+
wsProbeCleanupRef.current?.();
|
|
494
695
|
setReconnectHandler(null);
|
|
495
696
|
if (sseTransportRef.current) {
|
|
496
697
|
sseTransportRef.current.close();
|