@parhelia/core 0.3.12763 → 0.3.12768

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/dist/agents-view/AgentCard.js +7 -9
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentGalleryView.js +4 -4
  4. package/dist/agents-view/AgentGalleryView.js.map +1 -1
  5. package/dist/agents-view/AgentProfileIcon.js +1 -8
  6. package/dist/agents-view/AgentProfileIcon.js.map +1 -1
  7. package/dist/agents-view/AgentsWorkspaceView.js +2 -2
  8. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  9. package/dist/agents-view/RenameAgentDialog.js +1 -1
  10. package/dist/agents-view/RenameAgentDialog.js.map +1 -1
  11. package/dist/components/MarkdownViewerPopover.js +3 -3
  12. package/dist/components/MarkdownViewerPopover.js.map +1 -1
  13. package/dist/components/WorkspaceHomeView.js +1 -1
  14. package/dist/components/WorkspaceHomeView.js.map +1 -1
  15. package/dist/components/ui/LanguageSelector.js +1 -1
  16. package/dist/components/ui/LanguageSelector.js.map +1 -1
  17. package/dist/components/ui/PlaceholderInput.js +1 -1
  18. package/dist/components/ui/PlaceholderItemSelector.js +1 -1
  19. package/dist/components/ui/PlaceholderItemSelector.js.map +1 -1
  20. package/dist/components/ui/UserPicker.js +2 -2
  21. package/dist/components/ui/UserPicker.js.map +1 -1
  22. package/dist/components/ui/accordion.js +1 -1
  23. package/dist/components/ui/accordion.js.map +1 -1
  24. package/dist/components/ui/breadcrumb.js +2 -2
  25. package/dist/components/ui/breadcrumb.js.map +1 -1
  26. package/dist/components/ui/calendar.js +3 -3
  27. package/dist/components/ui/calendar.js.map +1 -1
  28. package/dist/components/ui/card.js +2 -2
  29. package/dist/components/ui/card.js.map +1 -1
  30. package/dist/components/ui/checkbox.js +1 -1
  31. package/dist/components/ui/checkbox.js.map +1 -1
  32. package/dist/components/ui/context-menu.js +3 -3
  33. package/dist/components/ui/context-menu.js.map +1 -1
  34. package/dist/components/ui/delete-icon.js +1 -1
  35. package/dist/components/ui/delete-icon.js.map +1 -1
  36. package/dist/components/ui/dropdown-menu.js +4 -4
  37. package/dist/components/ui/dropdown-menu.js.map +1 -1
  38. package/dist/components/ui/mention-textarea.js +2 -2
  39. package/dist/components/ui/mention-textarea.js.map +1 -1
  40. package/dist/components/ui/multi-switch-button.js +1 -1
  41. package/dist/components/ui/multi-switch-button.js.map +1 -1
  42. package/dist/components/ui/upload-button.js +1 -1
  43. package/dist/components/ui/upload-button.js.map +1 -1
  44. package/dist/config/config.js +29 -18
  45. package/dist/config/config.js.map +1 -1
  46. package/dist/editor/AdminRequiredView.js +1 -1
  47. package/dist/editor/AdminRequiredView.js.map +1 -1
  48. package/dist/editor/ConcurrentUserLimitDialog.d.ts +2 -1
  49. package/dist/editor/ConcurrentUserLimitDialog.js +26 -11
  50. package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -1
  51. package/dist/editor/ConfirmationDialog.js +1 -1
  52. package/dist/editor/ContentTree.js +2 -2
  53. package/dist/editor/ContentTree.js.map +1 -1
  54. package/dist/editor/ContextMenu.js +36 -6
  55. package/dist/editor/ContextMenu.js.map +1 -1
  56. package/dist/editor/DeleteItemsWarning.js +2 -2
  57. package/dist/editor/DeleteItemsWarning.js.map +1 -1
  58. package/dist/editor/Editor.js +49 -4
  59. package/dist/editor/Editor.js.map +1 -1
  60. package/dist/editor/EditorWarning.js +1 -1
  61. package/dist/editor/EditorWarning.js.map +1 -1
  62. package/dist/editor/FieldActionsOverlay.js +1 -1
  63. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  64. package/dist/editor/FieldHistory.js +7 -7
  65. package/dist/editor/FieldHistory.js.map +1 -1
  66. package/dist/editor/FieldList.js +45 -4
  67. package/dist/editor/FieldList.js.map +1 -1
  68. package/dist/editor/FieldListField.js +5 -3
  69. package/dist/editor/FieldListField.js.map +1 -1
  70. package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
  71. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  72. package/dist/editor/MainLayout.js +3 -6
  73. package/dist/editor/MainLayout.js.map +1 -1
  74. package/dist/editor/MigrationsView.js +6 -6
  75. package/dist/editor/MigrationsView.js.map +1 -1
  76. package/dist/editor/PictureCropper.js +2 -2
  77. package/dist/editor/PictureCropper.js.map +1 -1
  78. package/dist/editor/SetupWizard.js +1 -1
  79. package/dist/editor/SetupWizard.js.map +1 -1
  80. package/dist/editor/UsedBy.js +2 -2
  81. package/dist/editor/UsedBy.js.map +1 -1
  82. package/dist/editor/WorkspaceTitleSwitcher.js +3 -3
  83. package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -1
  84. package/dist/editor/ai/AgentProfileSelector.js +4 -4
  85. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  86. package/dist/editor/ai/AgentSharingSection.js +6 -6
  87. package/dist/editor/ai/AgentSharingSection.js.map +1 -1
  88. package/dist/editor/ai/Agents.js +3 -3
  89. package/dist/editor/ai/Agents.js.map +1 -1
  90. package/dist/editor/ai/ContentInspectorPopover.js +2 -2
  91. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  92. package/dist/editor/ai/GuidanceOverlay.js +1 -1
  93. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  94. package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +5 -19
  95. package/dist/editor/ai/HeartbeatDiagnosticsPanel.js.map +1 -1
  96. package/dist/editor/ai/InlineAiDialog.d.ts +13 -0
  97. package/dist/editor/ai/InlineAiDialog.js +52 -14
  98. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  99. package/dist/editor/ai/InlineAiTrigger.js +1 -1
  100. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  101. package/dist/editor/ai/bridgeInlineTextReplace.d.ts +16 -0
  102. package/dist/editor/ai/bridgeInlineTextReplace.js +31 -0
  103. package/dist/editor/ai/bridgeInlineTextReplace.js.map +1 -0
  104. package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js +2 -2
  105. package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js.map +1 -1
  106. package/dist/editor/ai/dialogs/QuestionnaireInline.js +3 -3
  107. package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
  108. package/dist/editor/ai/inlineAiTextEditLabels.d.ts +1 -1
  109. package/dist/editor/ai/inlineAiTextEditLabels.js +1 -1
  110. package/dist/editor/ai/terminal/components/ActivitySummaryCell.js +4 -4
  111. package/dist/editor/ai/terminal/components/ActivitySummaryCell.js.map +1 -1
  112. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +7 -7
  113. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  114. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js +1 -1
  115. package/dist/editor/ai/terminal/components/AgentContextItemPicker.js.map +1 -1
  116. package/dist/editor/ai/terminal/components/AgentDocumentList.js +3 -3
  117. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +1 -1
  119. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +1 -1
  120. package/dist/editor/ai/terminal/components/AgentGreeting.js +2 -2
  121. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  122. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +2 -2
  123. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/AgentModeSelector.js +2 -2
  125. package/dist/editor/ai/terminal/components/AgentModeSelector.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/AgentParentLink.js +1 -1
  127. package/dist/editor/ai/terminal/components/AgentParentLink.js.map +1 -1
  128. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
  129. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
  130. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
  131. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
  132. package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
  133. package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
  134. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
  135. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
  137. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  138. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +5 -5
  139. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  140. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js +1 -1
  141. package/dist/editor/ai/terminal/components/AgentReadOnlyNotice.js.map +1 -1
  142. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js +1 -1
  143. package/dist/editor/ai/terminal/components/AgentSettingsPopover.js.map +1 -1
  144. package/dist/editor/ai/terminal/components/AgentSettingsSections.js +4 -2
  145. package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
  146. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
  147. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
  148. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js +1 -1
  149. package/dist/editor/ai/terminal/components/AgentSuggestionBanner.js.map +1 -1
  150. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +1 -1
  151. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  152. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +3 -3
  153. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  154. package/dist/editor/ai/terminal/components/AiResponseMessage.js +11 -14
  155. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  156. package/dist/editor/ai/terminal/components/ApprovalCard.js +3 -4
  157. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  158. package/dist/editor/ai/terminal/components/ContextInfoBar.js +1 -1
  159. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  160. package/dist/editor/ai/terminal/components/EditOperationsPanel.js +2 -2
  161. package/dist/editor/ai/terminal/components/EditOperationsPanel.js.map +1 -1
  162. package/dist/editor/ai/terminal/components/HeartbeatMessage.js +1 -1
  163. package/dist/editor/ai/terminal/components/HeartbeatMessage.js.map +1 -1
  164. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +2 -2
  165. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -1
  166. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +4 -4
  167. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js.map +1 -1
  168. package/dist/editor/ai/terminal/components/TodoListPanel.js +4 -4
  169. package/dist/editor/ai/terminal/components/TodoListPanel.js.map +1 -1
  170. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +9 -0
  171. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +63 -22
  172. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  173. package/dist/editor/ai/terminal/components/UserMessage.js +10 -6
  174. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  175. package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js +35 -7
  176. package/dist/editor/ai/terminal/useAgentTextareaDropHandlers.js.map +1 -1
  177. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +5 -5
  178. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  179. package/dist/editor/ai-image-editor/AiImageResultOverlay.js +1 -1
  180. package/dist/editor/bridge/protocol.d.ts +12 -0
  181. package/dist/editor/bridge/protocol.js +1 -1
  182. package/dist/editor/bridge/protocol.js.map +1 -1
  183. package/dist/editor/client/AboutDialog.js +1 -1
  184. package/dist/editor/client/AboutDialog.js.map +1 -1
  185. package/dist/editor/client/EditorShell.js +103 -51
  186. package/dist/editor/client/EditorShell.js.map +1 -1
  187. package/dist/editor/client/agentTerminalFocus.d.ts +1 -1
  188. package/dist/editor/client/agentTerminalFocus.js +1 -1
  189. package/dist/editor/client/agentTerminalFocus.js.map +1 -1
  190. package/dist/editor/client/editContext.d.ts +4 -1
  191. package/dist/editor/client/editContext.js.map +1 -1
  192. package/dist/editor/client/editHistoryReconciliation.d.ts +10 -0
  193. package/dist/editor/client/editHistoryReconciliation.js +25 -0
  194. package/dist/editor/client/editHistoryReconciliation.js.map +1 -0
  195. package/dist/editor/client/errorToast.js +1 -1
  196. package/dist/editor/client/errorToast.js.map +1 -1
  197. package/dist/editor/client/hooks/useEditorWebSocket.d.ts +4 -3
  198. package/dist/editor/client/hooks/useEditorWebSocket.js +265 -64
  199. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  200. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +1 -0
  201. package/dist/editor/client/hooks/useSocketMessageHandler.js +44 -11
  202. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  203. package/dist/editor/client/operations.d.ts +1 -1
  204. package/dist/editor/client/operations.js +123 -77
  205. package/dist/editor/client/operations.js.map +1 -1
  206. package/dist/editor/client/pageModelBuilder.js +11 -6
  207. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  208. package/dist/editor/client/sessionIdClaim.d.ts +22 -0
  209. package/dist/editor/client/sessionIdClaim.js +77 -0
  210. package/dist/editor/client/sessionIdClaim.js.map +1 -0
  211. package/dist/editor/client/sidebarAvailability.d.ts +9 -0
  212. package/dist/editor/client/sidebarAvailability.js +29 -0
  213. package/dist/editor/client/sidebarAvailability.js.map +1 -0
  214. package/dist/editor/client/suggestedEditFieldQueue.d.ts +2 -0
  215. package/dist/editor/client/suggestedEditFieldQueue.js +16 -0
  216. package/dist/editor/client/suggestedEditFieldQueue.js.map +1 -0
  217. package/dist/editor/client/ui/FullscreenControls.js +1 -1
  218. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  219. package/dist/editor/client/waitForEditOperationTerminal.d.ts +2 -0
  220. package/dist/editor/client/waitForEditOperationTerminal.js +73 -9
  221. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  222. package/dist/editor/commands/componentCommands.js +17 -15
  223. package/dist/editor/commands/componentCommands.js.map +1 -1
  224. package/dist/editor/commands/deleteVersionCommand.js +1 -1
  225. package/dist/editor/commands/deleteVersionCommand.js.map +1 -1
  226. package/dist/editor/commands/itemCommands.js +64 -9
  227. package/dist/editor/commands/itemCommands.js.map +1 -1
  228. package/dist/editor/commands/placeholderCommands.js +1 -1
  229. package/dist/editor/commands/placeholderCommands.js.map +1 -1
  230. package/dist/editor/content-tree/IndicatorSettings.js +2 -2
  231. package/dist/editor/content-tree/TreeSettingsMenu.js +1 -1
  232. package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -1
  233. package/dist/editor/context-menu/InsertMenu.js +1 -1
  234. package/dist/editor/context-menu/InsertMenu.js.map +1 -1
  235. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js +1 -1
  236. package/dist/editor/editor-warnings/FinalWorkflowStateReadOnly.js.map +1 -1
  237. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
  238. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
  239. package/dist/editor/editor-warnings/NoWriteAccess.js +3 -1
  240. package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
  241. package/dist/editor/field-types/AttachmentEditor.js +1 -1
  242. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  243. package/dist/editor/field-types/CheckboxEditor.js +1 -1
  244. package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
  245. package/dist/editor/field-types/DateFieldEditor.js +2 -2
  246. package/dist/editor/field-types/DateFieldEditor.js.map +1 -1
  247. package/dist/editor/field-types/DateTimeFieldEditor.js +1 -1
  248. package/dist/editor/field-types/DateTimeFieldEditor.js.map +1 -1
  249. package/dist/editor/field-types/TreeListEditor.d.ts +3 -1
  250. package/dist/editor/field-types/TreeListEditor.js +5 -5
  251. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  252. package/dist/editor/field-types/richtext/components/ReactSlate.js +15 -2
  253. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  254. package/dist/editor/field-types/richtext/richTextToolbarIcons.js +14 -14
  255. package/dist/editor/field-types/richtext/richTextToolbarIcons.js.map +1 -1
  256. package/dist/editor/field-types/textContextMenuFactory.js +1 -1
  257. package/dist/editor/field-types/textContextMenuFactory.js.map +1 -1
  258. package/dist/editor/itemContextMenu.js +1 -1
  259. package/dist/editor/itemContextMenu.js.map +1 -1
  260. package/dist/editor/media-selector/AiImageSearchPrompt.js +1 -1
  261. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  262. package/dist/editor/media-selector/MediaFolderBrowser.js +5 -5
  263. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  264. package/dist/editor/media-selector/MediaSelector.js +1 -1
  265. package/dist/editor/media-selector/MediaSelector.js.map +1 -1
  266. package/dist/editor/media-selector/Preview.js +1 -1
  267. package/dist/editor/media-selector/Preview.js.map +1 -1
  268. package/dist/editor/media-selector/Thumbnails.js +4 -4
  269. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  270. package/dist/editor/media-selector/TreeSelector.js +3 -3
  271. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  272. package/dist/editor/media-selector/UploadZone.js +1 -1
  273. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  274. package/dist/editor/menubar/ActiveUsers.js +17 -15
  275. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  276. package/dist/editor/menubar/FavoritesControls.js +3 -3
  277. package/dist/editor/menubar/FavoritesControls.js.map +1 -1
  278. package/dist/editor/menubar/ItemLanguageVersion.js +7 -3
  279. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  280. package/dist/editor/menubar/OpenInNewTabButton.d.ts +1 -1
  281. package/dist/editor/menubar/OpenInNewTabButton.js +2 -2
  282. package/dist/editor/menubar/OpenInNewTabButton.js.map +1 -1
  283. package/dist/editor/menubar/OperationsIndicator.js +3 -3
  284. package/dist/editor/menubar/OperationsIndicator.js.map +1 -1
  285. package/dist/editor/menubar/ToolbarFactory.js +2 -7
  286. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  287. package/dist/editor/menubar/VersionSelector.js +15 -14
  288. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  289. package/dist/editor/menubar/WorkflowButton.js +5 -5
  290. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  291. package/dist/editor/menubar/activeUserSessions.d.ts +9 -0
  292. package/dist/editor/menubar/activeUserSessions.js +30 -0
  293. package/dist/editor/menubar/activeUserSessions.js.map +1 -0
  294. package/dist/editor/menubar/toolbar-sections/CompareControls.js +1 -1
  295. package/dist/editor/menubar/toolbar-sections/CompareControls.js.map +1 -1
  296. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js +1 -1
  297. package/dist/editor/menubar/toolbar-sections/FullscreenControl.js.map +1 -1
  298. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +12 -12
  299. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  300. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js +1 -1
  301. package/dist/editor/menubar/toolbar-sections/UndoRedoControls.js.map +1 -1
  302. package/dist/editor/menubar/toolbar-sections/UtilityControls.d.ts +1 -3
  303. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +3 -4
  304. package/dist/editor/menubar/toolbar-sections/UtilityControls.js.map +1 -1
  305. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +3 -2
  306. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  307. package/dist/editor/notifications/NotificationCenter.js +23 -5
  308. package/dist/editor/notifications/NotificationCenter.js.map +1 -1
  309. package/dist/editor/notifications/NotificationItem.js +3 -3
  310. package/dist/editor/notifications/NotificationItem.js.map +1 -1
  311. package/dist/editor/notifications/WatchButton.js +8 -8
  312. package/dist/editor/notifications/WatchButton.js.map +1 -1
  313. package/dist/editor/notifications/watchEventOptions.js +2 -2
  314. package/dist/editor/notifications/watchEventOptions.js.map +1 -1
  315. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
  316. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  317. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +5 -5
  318. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  319. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +2 -2
  320. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js.map +1 -1
  321. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +1 -1
  322. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  323. package/dist/editor/page-editor-chrome/FrameMenu.js +2 -2
  324. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  325. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -1
  326. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  327. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +119 -27
  328. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  329. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.d.ts +6 -0
  330. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +23 -0
  331. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -0
  332. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +8 -1
  333. package/dist/editor/page-editor-chrome/overlay/geometry.js +30 -0
  334. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  335. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +16 -13
  336. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +75 -35
  337. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  338. package/dist/editor/page-viewer/EditorForm.js +7 -2
  339. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  340. package/dist/editor/page-viewer/MiniMap.d.ts +2 -1
  341. package/dist/editor/page-viewer/MiniMap.js +98 -12
  342. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  343. package/dist/editor/page-viewer/PageViewer.js +2 -2
  344. package/dist/editor/page-viewer/PageViewerFrame.js +248 -115
  345. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  346. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +34 -1
  347. package/dist/editor/page-viewer/bridgeFieldPatch.js +69 -1
  348. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  349. package/dist/editor/page-viewer/bridgeInlineEditSession.d.ts +49 -0
  350. package/dist/editor/page-viewer/bridgeInlineEditSession.js +189 -0
  351. package/dist/editor/page-viewer/bridgeInlineEditSession.js.map +1 -0
  352. package/dist/editor/personalization/ActionList.js +1 -1
  353. package/dist/editor/personalization/ActionList.js.map +1 -1
  354. package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
  355. package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
  356. package/dist/editor/personalization/PersonalizationPanel.js +98 -34
  357. package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
  358. package/dist/editor/personalization/RuleElementPicker.js +1 -1
  359. package/dist/editor/personalization/RuleElementPicker.js.map +1 -1
  360. package/dist/editor/personalization/RuleList.js +3 -3
  361. package/dist/editor/personalization/RuleList.js.map +1 -1
  362. package/dist/editor/personalization/TreeItemPicker.js +3 -3
  363. package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
  364. package/dist/editor/reviews/CommentDisplayPopover.js +2 -2
  365. package/dist/editor/reviews/CommentEditor.js +3 -2
  366. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  367. package/dist/editor/reviews/CommentPopover.js +5 -3
  368. package/dist/editor/reviews/CommentPopover.js.map +1 -1
  369. package/dist/editor/reviews/CommentView.js +8 -8
  370. package/dist/editor/reviews/CommentView.js.map +1 -1
  371. package/dist/editor/reviews/Comments.js +4 -4
  372. package/dist/editor/reviews/Comments.js.map +1 -1
  373. package/dist/editor/reviews/CreateReviewConfirmStep.js +1 -1
  374. package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -1
  375. package/dist/editor/reviews/CreateReviewDialog.js +4 -5
  376. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  377. package/dist/editor/reviews/CreateReviewReviewersStep.js +1 -1
  378. package/dist/editor/reviews/CreateReviewReviewersStep.js.map +1 -1
  379. package/dist/editor/reviews/CreateReviewSettingsStep.js +2 -1
  380. package/dist/editor/reviews/CreateReviewSettingsStep.js.map +1 -1
  381. package/dist/editor/reviews/CreateReviewSuccessStep.js +1 -1
  382. package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -1
  383. package/dist/editor/reviews/DecisionsMatrix.js +13 -13
  384. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  385. package/dist/editor/reviews/EditReviewSettingsDialog.d.ts +1 -1
  386. package/dist/editor/reviews/EditReviewSettingsDialog.js +28 -63
  387. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  388. package/dist/editor/reviews/FeedbackModeIntro.js +3 -3
  389. package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
  390. package/dist/editor/reviews/LatestFeedback.js +3 -3
  391. package/dist/editor/reviews/LatestFeedback.js.map +1 -1
  392. package/dist/editor/reviews/MultiReviewManager.js +0 -1
  393. package/dist/editor/reviews/MultiReviewManager.js.map +1 -1
  394. package/dist/editor/reviews/PreconfiguredReviewerSelector.js +1 -1
  395. package/dist/editor/reviews/PreconfiguredReviewerSelector.js.map +1 -1
  396. package/dist/editor/reviews/ReviewCard.d.ts +1 -4
  397. package/dist/editor/reviews/ReviewCard.js +28 -7
  398. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  399. package/dist/editor/reviews/ReviewDetail.js +39 -35
  400. package/dist/editor/reviews/ReviewDetail.js.map +1 -1
  401. package/dist/editor/reviews/ReviewItemsPanel.d.ts +1 -3
  402. package/dist/editor/reviews/ReviewItemsPanel.js +20 -56
  403. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
  404. package/dist/editor/reviews/ReviewersPanel.js +3 -3
  405. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  406. package/dist/editor/reviews/ReviewsList.js +9 -74
  407. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  408. package/dist/editor/reviews/SecretPhraseInput.d.ts +8 -0
  409. package/dist/editor/reviews/SecretPhraseInput.js +9 -0
  410. package/dist/editor/reviews/SecretPhraseInput.js.map +1 -0
  411. package/dist/editor/reviews/SuggestedEdit.js +36 -70
  412. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  413. package/dist/editor/reviews/SuggestionDisplayPopover.js +77 -58
  414. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  415. package/dist/editor/reviews/applySuggestedEditActions.d.ts +21 -0
  416. package/dist/editor/reviews/applySuggestedEditActions.js +242 -0
  417. package/dist/editor/reviews/applySuggestedEditActions.js.map +1 -0
  418. package/dist/editor/reviews/feedbackScrollTarget.js +3 -2
  419. package/dist/editor/reviews/feedbackScrollTarget.js.map +1 -1
  420. package/dist/editor/reviews/reviewListPresentation.d.ts +2 -0
  421. package/dist/editor/reviews/reviewListPresentation.js +11 -0
  422. package/dist/editor/reviews/reviewListPresentation.js.map +1 -1
  423. package/dist/editor/reviews/suggestedEditState.js +12 -1
  424. package/dist/editor/reviews/suggestedEditState.js.map +1 -1
  425. package/dist/editor/reviews/suggestionDisplayValue.d.ts +38 -1
  426. package/dist/editor/reviews/suggestionDisplayValue.js +99 -21
  427. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
  428. package/dist/editor/reviews/suggestionPatch.d.ts +10 -0
  429. package/dist/editor/reviews/suggestionPatch.js +17 -0
  430. package/dist/editor/reviews/suggestionPatch.js.map +1 -0
  431. package/dist/editor/reviews/useMultiReview.d.ts +1 -2
  432. package/dist/editor/reviews/useMultiReview.js +74 -65
  433. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  434. package/dist/editor/services/contentService.d.ts +1 -9
  435. package/dist/editor/services/contentService.js +4 -1
  436. package/dist/editor/services/contentService.js.map +1 -1
  437. package/dist/editor/services/editService.d.ts +1 -0
  438. package/dist/editor/services/editService.js +12 -19
  439. package/dist/editor/services/editService.js.map +1 -1
  440. package/dist/editor/services/reviewsService.d.ts +1 -9
  441. package/dist/editor/services/reviewsService.js +1 -9
  442. package/dist/editor/services/reviewsService.js.map +1 -1
  443. package/dist/editor/services/suggestedEditsService.d.ts +17 -5
  444. package/dist/editor/services/suggestedEditsService.js +23 -5
  445. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  446. package/dist/editor/services/systemService.d.ts +1 -2
  447. package/dist/editor/services/systemService.js +0 -3
  448. package/dist/editor/services/systemService.js.map +1 -1
  449. package/dist/editor/settings/About.js +6 -6
  450. package/dist/editor/settings/About.js.map +1 -1
  451. package/dist/editor/settings/IndexOverview.js +1 -1
  452. package/dist/editor/settings/IndexOverview.js.map +1 -1
  453. package/dist/editor/settings/QuotaInfo.js +5 -5
  454. package/dist/editor/settings/QuotaInfo.js.map +1 -1
  455. package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
  456. package/dist/editor/settings/SettingsBreadcrumb.js.map +1 -1
  457. package/dist/editor/settings/SettingsView.js +3 -2
  458. package/dist/editor/settings/SettingsView.js.map +1 -1
  459. package/dist/editor/settings/StatusSummary.js +6 -6
  460. package/dist/editor/settings/StatusSummary.js.map +1 -1
  461. package/dist/editor/settings/index/EmbeddingProviderInfo.js +2 -2
  462. package/dist/editor/settings/index/EmbeddingProviderInfo.js.map +1 -1
  463. package/dist/editor/settings/index/QueueErrorsDisplay.d.ts +1 -1
  464. package/dist/editor/settings/index/QueueErrorsDisplay.js +7 -3
  465. package/dist/editor/settings/index/QueueErrorsDisplay.js.map +1 -1
  466. package/dist/editor/settings/index/embeddingErrors.d.ts +7 -0
  467. package/dist/editor/settings/index/embeddingErrors.js +105 -0
  468. package/dist/editor/settings/index/embeddingErrors.js.map +1 -0
  469. package/dist/editor/settings/index/types.d.ts +1 -0
  470. package/dist/editor/settings/index/useIndexStatus.js +2 -2
  471. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  472. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +6 -6
  473. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
  474. package/dist/editor/settings/panels/AgentToolsPanel.js +3 -3
  475. package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
  476. package/dist/editor/settings/panels/AgentsPanel.js +2 -2
  477. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  478. package/dist/editor/settings/panels/ClusterInstancesPanel.js +3 -3
  479. package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
  480. package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
  481. package/dist/editor/settings/panels/CreateAgentProfileDialog.js.map +1 -1
  482. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
  483. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -1
  484. package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
  485. package/dist/editor/settings/panels/CreateMcpServerDialog.js.map +1 -1
  486. package/dist/editor/settings/panels/FieldTypeSerializersPanel.js +2 -2
  487. package/dist/editor/settings/panels/FieldTypeSerializersPanel.js.map +1 -1
  488. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +1 -1
  489. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
  490. package/dist/editor/settings/panels/ItemConfigPanel.js +1 -1
  491. package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -1
  492. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +1 -1
  493. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
  494. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +5 -5
  495. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -1
  496. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +5 -5
  497. package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -1
  498. package/dist/editor/settings/panels/McpToolsPanel.js +3 -3
  499. package/dist/editor/settings/panels/McpToolsPanel.js.map +1 -1
  500. package/dist/editor/settings/panels/ModelConfigPanel.js +6 -6
  501. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  502. package/dist/editor/settings/panels/ModelsPanel.js +4 -4
  503. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  504. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +16 -13
  505. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
  506. package/dist/editor/settings/panels/PersistentLogsPanel.js +1 -1
  507. package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
  508. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +2 -3
  509. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  510. package/dist/editor/settings/panels/ProjectTemplateSelector.js +1 -1
  511. package/dist/editor/settings/panels/ProjectTemplateSelector.js.map +1 -1
  512. package/dist/editor/settings/panels/ProjectTemplateSelectorList.js +1 -1
  513. package/dist/editor/settings/panels/ProjectTemplateSelectorList.js.map +1 -1
  514. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +13 -13
  515. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  516. package/dist/editor/settings/panels/ProviderConfigPanel.js +3 -3
  517. package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -1
  518. package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
  519. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  520. package/dist/editor/settings/panels/SearchConfigPanel.js +3 -3
  521. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  522. package/dist/editor/settings/panels/StatusPanel.js +5 -5
  523. package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
  524. package/dist/editor/settings/panels/SystemSettingsPanel.js +1 -1
  525. package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -1
  526. package/dist/editor/settings/panels/UserPreferencesPanel.js +1 -1
  527. package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
  528. package/dist/editor/setup-wizard/SetupStepError.js +1 -1
  529. package/dist/editor/setup-wizard/SetupStepError.js.map +1 -1
  530. package/dist/editor/setup-wizard/SetupStepLayout.js +1 -1
  531. package/dist/editor/setup-wizard/SetupStepLayout.js.map +1 -1
  532. package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -2
  533. package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
  534. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
  535. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
  536. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
  537. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
  538. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
  539. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -1
  540. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +6 -12
  541. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js.map +1 -1
  542. package/dist/editor/setup-wizard/steps/ProviderStep.js +6 -6
  543. package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
  544. package/dist/editor/setup-wizard/steps/WelcomeStep.js +1 -1
  545. package/dist/editor/sidebar/Completions.js +1 -1
  546. package/dist/editor/sidebar/Completions.js.map +1 -1
  547. package/dist/editor/sidebar/ComponentPalette.js +1 -1
  548. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  549. package/dist/editor/sidebar/ComponentTree.js +11 -11
  550. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  551. package/dist/editor/sidebar/DictionaryEditor.js +48 -23
  552. package/dist/editor/sidebar/DictionaryEditor.js.map +1 -1
  553. package/dist/editor/sidebar/Favorites.js +5 -5
  554. package/dist/editor/sidebar/Favorites.js.map +1 -1
  555. package/dist/editor/sidebar/NavigationPanelItem.js +1 -1
  556. package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
  557. package/dist/editor/sidebar/OperationItem.js +4 -4
  558. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  559. package/dist/editor/sidebar/Sessions.js +14 -7
  560. package/dist/editor/sidebar/Sessions.js.map +1 -1
  561. package/dist/editor/sidebar/SidebarPanel.js +7 -5
  562. package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
  563. package/dist/editor/sidebar/TimelineView.js +1 -1
  564. package/dist/editor/sidebar/TimelineView.js.map +1 -1
  565. package/dist/editor/sidebar/Validation.js +1 -1
  566. package/dist/editor/sidebar/Validation.js.map +1 -1
  567. package/dist/editor/sidebar/Workbox.js +1 -1
  568. package/dist/editor/sidebar/Workbox.js.map +1 -1
  569. package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
  570. package/dist/editor/template-wizard/TemplateBuilderDialog.js.map +1 -1
  571. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +10 -10
  572. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  573. package/dist/editor/tree-indicators/GutterColumns.js +2 -2
  574. package/dist/editor/ui/ComponentThumbnailDialog.js +1 -1
  575. package/dist/editor/ui/ComponentThumbnailDialog.js.map +1 -1
  576. package/dist/editor/ui/IconSelectorDialog.js +1 -1
  577. package/dist/editor/ui/IconSelectorDialog.js.map +1 -1
  578. package/dist/editor/ui/Icons.d.ts +1 -1
  579. package/dist/editor/ui/Icons.js +7 -7
  580. package/dist/editor/ui/Icons.js.map +1 -1
  581. package/dist/editor/ui/ItemList.js +1 -1
  582. package/dist/editor/ui/ItemList.js.map +1 -1
  583. package/dist/editor/ui/PerfectTree.js +2 -2
  584. package/dist/editor/ui/PerfectTree.js.map +1 -1
  585. package/dist/editor/ui/PublishDialog.js +1 -1
  586. package/dist/editor/ui/PublishDialog.js.map +1 -1
  587. package/dist/editor/ui/PublishItemDialog.js +2 -2
  588. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  589. package/dist/editor/ui/PublishRestrictionsDialog.js +20 -11
  590. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  591. package/dist/editor/ui/Section.js +2 -2
  592. package/dist/editor/ui/Section.js.map +1 -1
  593. package/dist/editor/ui/SharedFolderSelectorDialog.js +17 -3
  594. package/dist/editor/ui/SharedFolderSelectorDialog.js.map +1 -1
  595. package/dist/editor/ui/SimpleTable.d.ts +3 -1
  596. package/dist/editor/ui/SimpleTable.js +3 -3
  597. package/dist/editor/ui/SimpleTable.js.map +1 -1
  598. package/dist/editor/ui/Spinner.js +1 -1
  599. package/dist/editor/ui/Spinner.js.map +1 -1
  600. package/dist/editor/ui/Splitter.js +3 -7
  601. package/dist/editor/ui/Splitter.js.map +1 -1
  602. package/dist/editor/ui/TemplateSelectorDialog.js +2 -2
  603. package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
  604. package/dist/editor/ui/WorkboxItemsTable.js +2 -2
  605. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  606. package/dist/editor/utils.js +6 -0
  607. package/dist/editor/utils.js.map +1 -1
  608. package/dist/editor/version-diff/versionDiffTargets.js +2 -1
  609. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  610. package/dist/editor/views/EditorSlot.js +1 -1
  611. package/dist/editor/views/EditorSlot.js.map +1 -1
  612. package/dist/editor/views/ItemEditor.js +2 -2
  613. package/dist/editor/views/ItemEditor.js.map +1 -1
  614. package/dist/editor/views/SingleEditView.js +2 -2
  615. package/dist/index.d.ts +0 -1
  616. package/dist/index.js +0 -1
  617. package/dist/index.js.map +1 -1
  618. package/dist/licensing/EmailEntry.js +1 -1
  619. package/dist/licensing/EmailEntry.js.map +1 -1
  620. package/dist/licensing/FeatureGate.js +1 -1
  621. package/dist/licensing/LicenseActivationForm.js +1 -1
  622. package/dist/licensing/LicenseActivationForm.js.map +1 -1
  623. package/dist/licensing/LicenseCodeEntry.js +1 -1
  624. package/dist/licensing/LicenseCodeEntry.js.map +1 -1
  625. package/dist/licensing/LicenseOverlay.js +2 -2
  626. package/dist/licensing/LicenseOverlay.js.map +1 -1
  627. package/dist/revision.d.ts +2 -2
  628. package/dist/revision.js +2 -2
  629. package/dist/setup/services/setupWizardService.js +4 -1
  630. package/dist/setup/services/setupWizardService.js.map +1 -1
  631. package/dist/setup/wizard/steps/AddModelDialog.js +1 -1
  632. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  633. package/dist/setup/wizard/steps/ImportModelDialog.js +3 -3
  634. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  635. package/dist/splash-screen/ModernSplashScreen.d.ts +1 -1
  636. package/dist/splash-screen/ModernSplashScreen.js +11 -11
  637. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  638. package/dist/splash-screen/NewPage.js +3 -3
  639. package/dist/splash-screen/NewPage.js.map +1 -1
  640. package/dist/splash-screen/OpenPage.js +1 -1
  641. package/dist/splash-screen/OpenPage.js.map +1 -1
  642. package/dist/splash-screen/ParheliaAssistantChat.js +7 -7
  643. package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
  644. package/dist/splash-screen/RecentPages.js +1 -1
  645. package/dist/splash-screen/RecentPages.js.map +1 -1
  646. package/dist/task-board/TaskBoardWorkspace.js +1 -1
  647. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  648. package/dist/task-board/components/CommentsList.js +4 -4
  649. package/dist/task-board/components/CommentsList.js.map +1 -1
  650. package/dist/task-board/components/FinishedProjectCard.js +1 -1
  651. package/dist/task-board/components/FinishedProjectCard.js.map +1 -1
  652. package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
  653. package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
  654. package/dist/task-board/components/ItemCollectionPicker.js +1 -1
  655. package/dist/task-board/components/ItemCollectionPicker.js.map +1 -1
  656. package/dist/task-board/components/ProjectBudgetBanner.js +1 -1
  657. package/dist/task-board/components/ProjectBudgetBanner.js.map +1 -1
  658. package/dist/task-board/components/ProjectDashboard.js +4 -4
  659. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  660. package/dist/task-board/components/ProjectGoalsPanel.js +17 -13
  661. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  662. package/dist/task-board/components/ProjectListContent.js +5 -5
  663. package/dist/task-board/components/ProjectListContent.js.map +1 -1
  664. package/dist/task-board/components/ProjectOverviewContent.js +4 -4
  665. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  666. package/dist/task-board/components/ProjectPropertiesPanel.js +5 -5
  667. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  668. package/dist/task-board/components/ProjectSettingsDialog.js +3 -3
  669. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  670. package/dist/task-board/components/TaskAgentPanel.js +4 -4
  671. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  672. package/dist/task-board/components/TaskAssigneePicker.js +4 -4
  673. package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
  674. package/dist/task-board/components/TaskAttachmentDropZone.js +3 -3
  675. package/dist/task-board/components/TaskAttachmentDropZone.js.map +1 -1
  676. package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
  677. package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
  678. package/dist/task-board/components/TaskBoardMyTasksSidebar.js +1 -1
  679. package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
  680. package/dist/task-board/components/TaskBoardProjectListSidebar.js +4 -4
  681. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  682. package/dist/task-board/components/TaskBoardProjectSelector.js +1 -1
  683. package/dist/task-board/components/TaskBoardProjectSelector.js.map +1 -1
  684. package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
  685. package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
  686. package/dist/task-board/components/TaskCard.js +1 -1
  687. package/dist/task-board/components/TaskCard.js.map +1 -1
  688. package/dist/task-board/components/TaskDetailPanel.js +6 -6
  689. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  690. package/dist/task-board/components/TaskReviewActions.js +6 -6
  691. package/dist/task-board/components/TaskReviewActions.js.map +1 -1
  692. package/dist/task-board/components/TaskRow.js +1 -1
  693. package/dist/task-board/components/TaskRow.js.map +1 -1
  694. package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -3
  695. package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
  696. package/dist/task-board/components/WizardCommunicationCards.js +3 -3
  697. package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
  698. package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
  699. package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
  700. package/dist/task-board/components/WizardTaskDetailsPanel.js +3 -3
  701. package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
  702. package/dist/task-board/views/DependencyGraphView.js +8 -8
  703. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  704. package/dist/task-board/views/WizardView.js +4 -4
  705. package/dist/task-board/views/WizardView.js.map +1 -1
  706. package/dist/tour/default-tour.js +17 -17
  707. package/dist/tour/default-tour.js.map +1 -1
  708. package/dist/tour/preview-tour.js +6 -6
  709. package/dist/tour/preview-tour.js.map +1 -1
  710. package/dist/types.d.ts +13 -5
  711. package/package.json +1 -1
  712. package/styles.css +25 -2
@@ -1,4 +1,4 @@
1
- export declare const AGENT_TERMINAL_BLUR_GRACE_MS = 350;
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 = 350;
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,GAAG,CAAC;AAEhD,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"}
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"}
@@ -162,7 +162,7 @@ export type EditContextType = {
162
162
  originatingSlotId?: string;
163
163
  }) => Promise<void>;
164
164
  updateRenderingParameters: (componentId: string, parameters: Record<string, string | null>) => Promise<void>;
165
- updateRenderingRules: (componentId: string, rules: unknown) => Promise<void>;
165
+ updateRenderingRules: (componentId: string, rules: unknown, pageItem?: ItemDescriptor) => Promise<void>;
166
166
  undo: (operationId?: string) => Promise<boolean>;
167
167
  undoOperations: (operationIds: string[]) => Promise<boolean>;
168
168
  redo: (operationId?: string) => Promise<boolean>;
@@ -185,6 +185,7 @@ export type EditContextType = {
185
185
  commentsLoaded: boolean;
186
186
  suggestedEdits: SuggestedEdit[];
187
187
  setSuggestedEdits: React.Dispatch<React.SetStateAction<SuggestedEdit[]>>;
188
+ getCurrentSuggestedEdits: () => SuggestedEdit[];
188
189
  availableCommentTags: {
189
190
  label: string;
190
191
  color: string;
@@ -290,6 +291,8 @@ export type EditContextType = {
290
291
  setLayoutMode: React.Dispatch<React.SetStateAction<LayoutMode>>;
291
292
  showSuggestedEdits: boolean;
292
293
  setShowSuggestedEdits: React.Dispatch<React.SetStateAction<boolean>>;
294
+ suggestionVariantSelection: Record<string, string>;
295
+ setSuggestionVariantSelection: React.Dispatch<React.SetStateAction<Record<string, string>>>;
293
296
  showSuggestedEditsDiff: boolean;
294
297
  setShowSuggestedEditsDiff: React.Dispatch<React.SetStateAction<boolean>>;
295
298
  showVersionDiffHighlighting: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"editContext.js","sourceRoot":"","sources":["../../../src/editor/client/editContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAGZ,UAAU,EAEV,MAAM,GACP,MAAM,OAAO,CAAC;AAmzBf,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA8B,SAAS,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAYD,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAC1C,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAEtE,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,mBAAmB,EAAE,EAAE,SAAS,IAAI,eAAe,CAAC;AAC7D,CAAC;AAED,MAAM,eAAe,GAAa,EAAE,CAAC;AAoCrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEpE,mDAAmD;AACnD,MAAM,UAAU,uBAAuB;IACrC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAiBD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC"}
1
+ {"version":3,"file":"editContext.js","sourceRoot":"","sources":["../../../src/editor/client/editContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAGZ,UAAU,EAEV,MAAM,GACP,MAAM,OAAO,CAAC;AAyzBf,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAA8B,SAAS,CAAC,CAAC;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAYD,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAC1C,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAEtE,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,mBAAmB,EAAE,EAAE,SAAS,IAAI,eAAe,CAAC;AAC7D,CAAC;AAED,MAAM,eAAe,GAAa,EAAE,CAAC;AAoCrC,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAEpE,mDAAmD;AACnD,MAAM,UAAU,uBAAuB;IACrC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,OAAO,UAAU,CAAC;AACpB,CAAC;AAiBD,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,QAAQ,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.75 }), 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 whitespace-pre-wrap break-words", children: details }))] }));
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 close was actually issued. The hook's close handler does NOT null
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 nothing to do the hook will replace it on its next
17
- * scheduleReconnect tick.
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 close was actually issued. The hook's close handler does NOT null
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 nothing to do the hook will replace it on its next
14
- * scheduleReconnect tick.
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 (!socket)
26
- return false;
27
- if (socket.readyState === WebSocket.OPEN ||
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
- return false;
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 for the rest of the page lifetime.
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. Disambiguate a concurrent-user-limit
243
- // rejection (surface it) from a transient failure (let EventSource retry).
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 || availability.allowed)
446
+ if (disposed)
247
447
  return;
248
- isConcurrentUserLimitRef.current = true;
249
- if (availability.currentUsers !== undefined &&
250
- availability.maxUsers !== undefined &&
251
- availability.message) {
252
- onConcurrentUserLimitRef.current?.({
253
- currentUsers: availability.currentUsers,
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
- return; // SSE fallback disabled in settings.
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
- else {
288
- const ws = globalThis.editorSocket;
498
+ const ws = globalThis.editorSocket;
499
+ if (ws &&
500
+ (ws.readyState === WebSocket.OPEN ||
501
+ ws.readyState === WebSocket.CONNECTING)) {
289
502
  try {
290
- ws?.close(4000, reason);
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
- // Connection not allowed - likely concurrent user limit
313
- isConcurrentUserLimitRef.current = true;
314
- if (availability.currentUsers !== undefined &&
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
- isConcurrentUserLimitRef.current = true;
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
- isConcurrentUserLimitRef.current = true;
428
- if (availability.currentUsers !== undefined &&
429
- availability.maxUsers !== undefined &&
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
- connect().catch((error) => {
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();