@parhelia/core 0.1.12485 → 0.1.12515

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 (310) hide show
  1. package/dist/agents-view/AgentCard.js +22 -20
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentsInbox.js +2 -13
  4. package/dist/agents-view/AgentsInbox.js.map +1 -1
  5. package/dist/agents-view/AgentsView.js +9 -56
  6. package/dist/agents-view/AgentsView.js.map +1 -1
  7. package/dist/agents-view/AgentsWorkspaceView.js +14 -16
  8. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  9. package/dist/agents-view/ProfileAgentsGroup.js +2 -1
  10. package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
  11. package/dist/components/ui/copy-button.d.ts +2 -1
  12. package/dist/components/ui/copy-button.js +2 -2
  13. package/dist/components/ui/copy-button.js.map +1 -1
  14. package/dist/components/ui/input.js +1 -1
  15. package/dist/components/ui/input.js.map +1 -1
  16. package/dist/components/ui/paste-button.d.ts +2 -1
  17. package/dist/components/ui/paste-button.js +2 -2
  18. package/dist/components/ui/paste-button.js.map +1 -1
  19. package/dist/components/ui/tabs.d.ts +1 -1
  20. package/dist/components/ui/tabs.js +4 -11
  21. package/dist/components/ui/tabs.js.map +1 -1
  22. package/dist/config/config.js +73 -8
  23. package/dist/config/config.js.map +1 -1
  24. package/dist/config/types.d.ts +30 -5
  25. package/dist/config/types.js.map +1 -1
  26. package/dist/editor/ContentTree.js +36 -4
  27. package/dist/editor/ContentTree.js.map +1 -1
  28. package/dist/editor/FieldHistory.js +49 -31
  29. package/dist/editor/FieldHistory.js.map +1 -1
  30. package/dist/editor/FieldListField.js +4 -4
  31. package/dist/editor/FieldListField.js.map +1 -1
  32. package/dist/editor/FieldListFieldWithFallbacks.js +23 -2
  33. package/dist/editor/FieldListFieldWithFallbacks.js.map +1 -1
  34. package/dist/editor/GlobalMenuBar.js +1 -1
  35. package/dist/editor/GlobalMenuBar.js.map +1 -1
  36. package/dist/editor/ItemInfo.js +36 -1
  37. package/dist/editor/ItemInfo.js.map +1 -1
  38. package/dist/editor/MainLayout.d.ts +0 -2
  39. package/dist/editor/MainLayout.js +0 -1
  40. package/dist/editor/MainLayout.js.map +1 -1
  41. package/dist/editor/Titlebar.js +2 -2
  42. package/dist/editor/Titlebar.js.map +1 -1
  43. package/dist/editor/ai/AgentDocumentList.js +32 -14
  44. package/dist/editor/ai/AgentDocumentList.js.map +1 -1
  45. package/dist/editor/ai/AgentGreeting.js +3 -2
  46. package/dist/editor/ai/AgentGreeting.js.map +1 -1
  47. package/dist/editor/ai/AgentProfileSelector.js +2 -1
  48. package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
  49. package/dist/editor/ai/AgentStatusBadge.d.ts +0 -5
  50. package/dist/editor/ai/AgentStatusBadge.js +57 -71
  51. package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
  52. package/dist/editor/ai/AgentTerminal.js +585 -248
  53. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  54. package/dist/editor/ai/Agents.js +33 -88
  55. package/dist/editor/ai/Agents.js.map +1 -1
  56. package/dist/editor/ai/AiResponseMessage.js +3 -4
  57. package/dist/editor/ai/AiResponseMessage.js.map +1 -1
  58. package/dist/editor/ai/GuidanceOverlay.js +17 -11
  59. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  60. package/dist/editor/ai/InlineAiDialog.js +4 -8
  61. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  62. package/dist/editor/ai/MediaImage.js +40 -8
  63. package/dist/editor/ai/MediaImage.js.map +1 -1
  64. package/dist/editor/ai/SpawnedAgentsPanel.js +10 -12
  65. package/dist/editor/ai/SpawnedAgentsPanel.js.map +1 -1
  66. package/dist/editor/ai/ToolCallDisplay.js +156 -64
  67. package/dist/editor/ai/ToolCallDisplay.js.map +1 -1
  68. package/dist/editor/ai/agentDiagnostics.js +1 -3
  69. package/dist/editor/ai/agentDiagnostics.js.map +1 -1
  70. package/dist/editor/ai/dialogs/AgentDialogHandler.d.ts +1 -8
  71. package/dist/editor/ai/dialogs/AgentDialogHandler.js +89 -12
  72. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  73. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +62 -0
  74. package/dist/editor/ai/dialogs/agentDialogTypes.js +2 -0
  75. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  76. package/dist/editor/ai/dialogs/browserBoundCapture.d.ts +29 -0
  77. package/dist/editor/ai/dialogs/browserBoundCapture.js +117 -0
  78. package/dist/editor/ai/dialogs/browserBoundCapture.js.map +1 -0
  79. package/dist/editor/ai/dialogs/capturePageDom.d.ts +3 -0
  80. package/dist/editor/ai/dialogs/capturePageDom.js +64 -0
  81. package/dist/editor/ai/dialogs/capturePageDom.js.map +1 -0
  82. package/dist/editor/ai/dialogs/capturePageScreenshot.d.ts +3 -0
  83. package/dist/editor/ai/dialogs/capturePageScreenshot.js +446 -0
  84. package/dist/editor/ai/dialogs/capturePageScreenshot.js.map +1 -0
  85. package/dist/editor/ai/useAgentStatus.js +23 -85
  86. package/dist/editor/ai/useAgentStatus.js.map +1 -1
  87. package/dist/editor/client/EditorShell.js +88 -100
  88. package/dist/editor/client/EditorShell.js.map +1 -1
  89. package/dist/editor/client/editContext.d.ts +8 -16
  90. package/dist/editor/client/editContext.js.map +1 -1
  91. package/dist/editor/client/hooks/useEditorUrlSync.js +1 -2
  92. package/dist/editor/client/hooks/useEditorUrlSync.js.map +1 -1
  93. package/dist/editor/client/hooks/useEditorWebSocket.js +56 -44
  94. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  95. package/dist/editor/client/hooks/useSocketMessageHandler.js +19 -6
  96. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  97. package/dist/editor/client/itemsRepository.js +10 -6
  98. package/dist/editor/client/itemsRepository.js.map +1 -1
  99. package/dist/editor/client/operations.js +15 -3
  100. package/dist/editor/client/operations.js.map +1 -1
  101. package/dist/editor/client/pageModelBuilder.js +1 -1
  102. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  103. package/dist/editor/client/ui/EditorChrome.d.ts +0 -4
  104. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  105. package/dist/editor/client/waitForEditOperationTerminal.d.ts +8 -3
  106. package/dist/editor/client/waitForEditOperationTerminal.js +5 -1
  107. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  108. package/dist/editor/commands/componentCommands.js +3 -49
  109. package/dist/editor/commands/componentCommands.js.map +1 -1
  110. package/dist/editor/commands/customCommandConverter.js +2 -1
  111. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  112. package/dist/editor/commands/handlers/agentHandler.js +2 -1
  113. package/dist/editor/commands/handlers/agentHandler.js.map +1 -1
  114. package/dist/editor/commands/itemCommands.js +5 -0
  115. package/dist/editor/commands/itemCommands.js.map +1 -1
  116. package/dist/editor/content-tree/IndicatorSettings.d.ts +11 -0
  117. package/dist/editor/content-tree/IndicatorSettings.js +60 -0
  118. package/dist/editor/content-tree/IndicatorSettings.js.map +1 -0
  119. package/dist/editor/content-tree/TreeOptions.d.ts +6 -0
  120. package/dist/editor/content-tree/TreeOptions.js +8 -0
  121. package/dist/editor/content-tree/TreeOptions.js.map +1 -0
  122. package/dist/editor/content-tree/TreeSettingsMenu.d.ts +2 -0
  123. package/dist/editor/content-tree/TreeSettingsMenu.js +30 -0
  124. package/dist/editor/content-tree/TreeSettingsMenu.js.map +1 -0
  125. package/dist/editor/hooks/useNavigationPanelLogic.js +2 -6
  126. package/dist/editor/hooks/useNavigationPanelLogic.js.map +1 -1
  127. package/dist/editor/manualActionEvents.d.ts +8 -0
  128. package/dist/editor/manualActionEvents.js +48 -0
  129. package/dist/editor/manualActionEvents.js.map +1 -0
  130. package/dist/editor/menubar/PageSelector.js +9 -12
  131. package/dist/editor/menubar/PageSelector.js.map +1 -1
  132. package/dist/editor/menubar/WorkflowButton.js +23 -23
  133. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  134. package/dist/editor/menubar/toolbar-sections/EditControls.js +1 -1
  135. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  136. package/dist/editor/menubar/toolbar-sections/ManualBrowser.d.ts +3 -9
  137. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +225 -71
  138. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  139. package/dist/editor/notifications/WatchButton.js +2 -2
  140. package/dist/editor/notifications/WatchButton.js.map +1 -1
  141. package/dist/editor/page-editor-chrome/FrameMenu.js +1 -1
  142. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  143. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +11 -11
  144. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  145. package/dist/editor/page-viewer/EditorForm.js +2 -0
  146. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  147. package/dist/editor/page-viewer/PageViewer.js +8 -2
  148. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  149. package/dist/editor/page-viewer/PageViewerFrame.js +21 -8
  150. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  151. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js +107 -49
  152. package/dist/editor/page-viewer/pageModelSkeletonBuilder.js.map +1 -1
  153. package/dist/editor/page-viewer/pageViewContext.d.ts +1 -0
  154. package/dist/editor/page-viewer/pageViewContext.js +51 -14
  155. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  156. package/dist/editor/reviews/CreateReviewDialog.js +1 -3
  157. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  158. package/dist/editor/reviews/DiffView.js +7 -14
  159. package/dist/editor/reviews/DiffView.js.map +1 -1
  160. package/dist/editor/reviews/useMultiReview.js +2 -2
  161. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  162. package/dist/editor/services/agentService.d.ts +34 -3
  163. package/dist/editor/services/agentService.js +107 -72
  164. package/dist/editor/services/agentService.js.map +1 -1
  165. package/dist/editor/services/agentStatus.d.ts +12 -0
  166. package/dist/editor/services/agentStatus.js +59 -0
  167. package/dist/editor/services/agentStatus.js.map +1 -0
  168. package/dist/editor/services/aiService.d.ts +3 -1
  169. package/dist/editor/services/aiService.js.map +1 -1
  170. package/dist/editor/services/indexService.js +1 -1
  171. package/dist/editor/services/indexService.js.map +1 -1
  172. package/dist/editor/settings/SettingsView.js +22 -20
  173. package/dist/editor/settings/SettingsView.js.map +1 -1
  174. package/dist/editor/settings/Status.js +5 -4
  175. package/dist/editor/settings/Status.js.map +1 -1
  176. package/dist/editor/settings/index/useIndexStatus.js +20 -22
  177. package/dist/editor/settings/index/useIndexStatus.js.map +1 -1
  178. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.d.ts +7 -0
  179. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +48 -0
  180. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js.map +1 -0
  181. package/dist/editor/settings/panels/GroupedFieldConfigPanel.d.ts +2 -1
  182. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +2 -2
  183. package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
  184. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.d.ts +12 -0
  185. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +46 -0
  186. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -0
  187. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.d.ts +9 -0
  188. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js +34 -0
  189. package/dist/editor/settings/panels/JavaScriptToolConfigPanel.js.map +1 -0
  190. package/dist/editor/settings/panels/JavaScriptToolsPanel.d.ts +2 -0
  191. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +285 -0
  192. package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -0
  193. package/dist/editor/settings/panels/ModelConfigPanel.d.ts +2 -1
  194. package/dist/editor/settings/panels/ModelConfigPanel.js +88 -7
  195. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  196. package/dist/editor/settings/panels/ModelsPanel.js +129 -70
  197. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  198. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.d.ts +1 -4
  199. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -3
  200. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  201. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +78 -22
  202. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  203. package/dist/editor/settings/panels/ProvidersPanel.d.ts +1 -1
  204. package/dist/editor/settings/panels/ProvidersPanel.js +40 -55
  205. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  206. package/dist/editor/settings/panels/index.d.ts +1 -0
  207. package/dist/editor/settings/panels/index.js +1 -0
  208. package/dist/editor/settings/panels/index.js.map +1 -1
  209. package/dist/editor/settings/status/coreStatusChecks.js +28 -17
  210. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  211. package/dist/editor/sidebar/ComponentPalette.js +2 -1
  212. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  213. package/dist/editor/sidebar/ComponentTree.js +210 -49
  214. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  215. package/dist/editor/sidebar/EditHistory.js +3 -38
  216. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  217. package/dist/editor/sidebar/MainContentTree.js +4 -3
  218. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  219. package/dist/editor/sidebar/MorePanelsButton.js +1 -1
  220. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  221. package/dist/editor/sidebar/NavigationPanelItem.js +3 -6
  222. package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
  223. package/dist/editor/sidebar/SidebarPanel.js +20 -4
  224. package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
  225. package/dist/editor/sidebar/SidebarStack.js +1 -0
  226. package/dist/editor/sidebar/SidebarStack.js.map +1 -1
  227. package/dist/editor/sidebar/Workbox.js +53 -3
  228. package/dist/editor/sidebar/Workbox.js.map +1 -1
  229. package/dist/editor/tree-indicators/GutterColumns.d.ts +3 -1
  230. package/dist/editor/tree-indicators/GutterColumns.js +4 -3
  231. package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
  232. package/dist/editor/tree-indicators/GutterContext.d.ts +4 -0
  233. package/dist/editor/tree-indicators/GutterContext.js +23 -0
  234. package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
  235. package/dist/editor/tree-indicators/index.d.ts +0 -1
  236. package/dist/editor/tree-indicators/index.js +0 -1
  237. package/dist/editor/tree-indicators/index.js.map +1 -1
  238. package/dist/editor/tree-indicators/types.d.ts +2 -1
  239. package/dist/editor/ui/HomeButton.js +1 -1
  240. package/dist/editor/ui/HomeButton.js.map +1 -1
  241. package/dist/editor/ui/ItemNameDialogNew.d.ts +2 -0
  242. package/dist/editor/ui/ItemNameDialogNew.js +17 -7
  243. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  244. package/dist/editor/ui/ItemSearch.js +7 -11
  245. package/dist/editor/ui/ItemSearch.js.map +1 -1
  246. package/dist/editor/ui/SimpleTabs.js +33 -16
  247. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  248. package/dist/editor/ui/Splitter.js +1 -1
  249. package/dist/editor/ui/Splitter.js.map +1 -1
  250. package/dist/editor/views/CompareView.js +3 -1
  251. package/dist/editor/views/CompareView.js.map +1 -1
  252. package/dist/editor/views/EditorSlot.js +2 -2
  253. package/dist/editor/views/EditorSlot.js.map +1 -1
  254. package/dist/editor/views/ParheliaView.js +5 -6
  255. package/dist/editor/views/ParheliaView.js.map +1 -1
  256. package/dist/editor/views/SingleEditView.js +2 -0
  257. package/dist/editor/views/SingleEditView.js.map +1 -1
  258. package/dist/editor/views/editorSlotContext.js +35 -6
  259. package/dist/editor/views/editorSlotContext.js.map +1 -1
  260. package/dist/index.d.ts +4 -1
  261. package/dist/index.js +1 -0
  262. package/dist/index.js.map +1 -1
  263. package/dist/lib/sanitize.d.ts +10 -0
  264. package/dist/lib/sanitize.js +40 -0
  265. package/dist/lib/sanitize.js.map +1 -0
  266. package/dist/revision.d.ts +2 -2
  267. package/dist/revision.js +2 -2
  268. package/dist/setup/services/setupWizardService.d.ts +28 -0
  269. package/dist/setup/services/setupWizardService.js +34 -0
  270. package/dist/setup/services/setupWizardService.js.map +1 -1
  271. package/dist/setup/wizard/steps/AddModelDialog.js +12 -3
  272. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -1
  273. package/dist/setup/wizard/steps/ImportModelDialog.js +3 -1
  274. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  275. package/dist/splash-screen/NewPage.js +24 -24
  276. package/dist/splash-screen/NewPage.js.map +1 -1
  277. package/dist/task-board/TaskBoardWorkspace.js +29 -10
  278. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  279. package/dist/task-board/components/AssignAgentDialog.js +0 -8
  280. package/dist/task-board/components/AssignAgentDialog.js.map +1 -1
  281. package/dist/task-board/components/ItemCollectionEditorDialog.js +5 -12
  282. package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
  283. package/dist/task-board/components/ProjectAgentsPanel.js +2 -27
  284. package/dist/task-board/components/ProjectAgentsPanel.js.map +1 -1
  285. package/dist/task-board/components/ProjectOverviewContent.js +2 -2
  286. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  287. package/dist/task-board/components/ProjectPropertiesPanel.js +1 -1
  288. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  289. package/dist/task-board/components/TaskAgentPanel.js +2 -6
  290. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  291. package/dist/task-board/components/TaskDetailPanel.js +1 -1
  292. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  293. package/dist/task-board/components/TaskboardPersistentLogPanel.js +3 -1
  294. package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
  295. package/dist/task-board/taskAgentLink.js +1 -3
  296. package/dist/task-board/taskAgentLink.js.map +1 -1
  297. package/dist/task-board/views/DependencyGraphView.js +19 -1
  298. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  299. package/dist/tour/Tour.js +10 -4
  300. package/dist/tour/Tour.js.map +1 -1
  301. package/dist/tour/default-tour.js +51 -11
  302. package/dist/tour/default-tour.js.map +1 -1
  303. package/dist/types.d.ts +4 -13
  304. package/package.json +4 -1
  305. package/dist/editor/ComponentInfo.d.ts +0 -4
  306. package/dist/editor/ComponentInfo.js +0 -41
  307. package/dist/editor/ComponentInfo.js.map +0 -1
  308. package/dist/editor/tree-indicators/GutterSelector.d.ts +0 -5
  309. package/dist/editor/tree-indicators/GutterSelector.js +0 -91
  310. package/dist/editor/tree-indicators/GutterSelector.js.map +0 -1
@@ -154,14 +154,14 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
154
154
  if (typeof window !== "undefined")
155
155
  sessionStorage?.setItem("sessionId", sessionId);
156
156
  // Workspace state
157
- // Note: "reviews" is a sidebar, not a workspace. If view/workspace=reviews, we should
157
+ // Note: "reviews" is a sidebar, not a workspace. If workspace=reviews, we should
158
158
  // set workspace to "editor" and open the reviews sidebar instead.
159
159
  // Memoize searchParams reads to avoid triggering Router state updates during render
160
160
  // (Next.js App Router uses startTransition internally for URL changes)
161
- const rawWorkspace = useMemo(() => searchParams.get("workspace") ?? searchParams.get("view"), [searchParams]);
161
+ const rawWorkspace = useMemo(() => searchParams.get("workspace"), [searchParams]);
162
162
  const isReviewsSidebarRequest = rawWorkspace === "reviews";
163
163
  const [workspaceId, setWorkspaceId] = useState(
164
- // If view=reviews, use "editor" workspace (reviews is a sidebar, not a workspace)
164
+ // If workspace=reviews, use "editor" workspace (reviews is a sidebar, not a workspace)
165
165
  isReviewsSidebarRequest
166
166
  ? "editor"
167
167
  : (rawWorkspace ??
@@ -183,7 +183,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
183
183
  else {
184
184
  sidebars = [...(configuration.editor.defaultOpenSidebars ?? [])];
185
185
  }
186
- // If view/workspace=reviews was requested, ensure reviews sidebar is open
186
+ // If workspace=reviews was requested, ensure reviews sidebar is open
187
187
  if (isReviewsSidebarRequest && !sidebars.includes("reviews")) {
188
188
  sidebars.push("reviews");
189
189
  }
@@ -313,12 +313,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
313
313
  }
314
314
  catch { }
315
315
  }, [lockedSidebars]);
316
- // Legacy aliases for backwards compatibility
317
316
  const viewName = workspaceId;
318
- const setViewName = setWorkspaceId;
319
- const viewNameRef = workspaceIdRef;
320
- const previousViewName = previousWorkspaceId;
321
- const setPreviousViewName = setPreviousWorkspaceId;
322
317
  const [compareMode, setCompareModeState] = useState(false);
323
318
  const [componentDesignerComponent, setComponentDesignerComponent] = useState();
324
319
  const [componentDesignerRendering, setComponentDesignerRendering] = useState();
@@ -443,13 +438,12 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
443
438
  visitedAt: entry.visitedAt,
444
439
  }));
445
440
  });
446
- // Navigation history for browser history (view + item combinations)
441
+ // Navigation history for browser history (workspace + item combinations)
447
442
  const [navigationHistory, setNavigationHistory] = useState(() => {
448
- // Initialize from browse history with current view
443
+ // Initialize from browse history with the current workspace
449
444
  if (!userInfo.browseHistory)
450
445
  return [];
451
446
  const defaultWorkspaceId = searchParams.get("workspace") ??
452
- searchParams.get("view") ??
453
447
  configuration.editor.defaultWorkspace ??
454
448
  configuration.editor.workspaces?.[0]?.id ??
455
449
  "editor";
@@ -508,6 +502,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
508
502
  const [helpTerminalInitialPrompt, setHelpTerminalInitialPrompt] = useState(undefined);
509
503
  const [helpTerminalProfileName, setHelpTerminalProfileName] = useState(undefined);
510
504
  const [helpTerminalActiveTab, setHelpTerminalActiveTab] = useState(undefined);
505
+ const [selectedHelpSectionId, setSelectedHelpSectionId] = useState(null);
511
506
  const [showAgentsWorkspaceEditor, setShowAgentsWorkspaceEditor] = useState(false);
512
507
  const [selectedAgentsWorkspaceAgentId, setSelectedAgentsWorkspaceAgentId] = useState(null);
513
508
  const [activeEditorTab, setActiveEditorTab] = useState(null);
@@ -534,13 +529,12 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
534
529
  if (!startupChecks.hasBlockingIssues)
535
530
  return;
536
531
  // Don't redirect if already in settings workspace - let user navigate freely within settings
537
- const currentWorkspace = searchParams.get("workspace") ?? searchParams.get("view");
532
+ const currentWorkspace = searchParams.get("workspace");
538
533
  if (currentWorkspace === "settings")
539
534
  return;
540
535
  // Redirect to the status panel (where user can see all issues and navigate to fixes)
541
536
  const url = new URL(window.location.href);
542
537
  url.searchParams.set("workspace", "settings");
543
- url.searchParams.delete("view"); // Remove legacy param
544
538
  url.searchParams.set("ccpanel", "status");
545
539
  router.push(url.toString(), { scroll: false });
546
540
  }, [
@@ -558,6 +552,16 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
558
552
  setMode(queryMode);
559
553
  }
560
554
  }, [searchParams, isInitialLoad]);
555
+ useEffect(() => {
556
+ if (!isInitialLoad)
557
+ return;
558
+ const helpParam = searchParams.get("help");
559
+ if (helpParam) {
560
+ setHelpTerminalActiveTab("manual");
561
+ setShowHelpTerminal(true);
562
+ setSelectedHelpSectionId(helpParam === "contents" || helpParam === "true" ? null : helpParam);
563
+ }
564
+ }, [searchParams, isInitialLoad]);
561
565
  useEffect(() => {
562
566
  if (mode === "suggestions") {
563
567
  // Ensure we're in the editor workspace and open the feedback sidebar
@@ -782,8 +786,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
782
786
  console.error(`No workspace found for id: ${workspaceId}`);
783
787
  return null;
784
788
  }
785
- // Legacy alias for backwards compatibility
786
- const currentView = currentWorkspace;
787
789
  const activeKeyboardCommands = useMemo(() => {
788
790
  const activeCommandIds = new Set(currentWorkspace.keyboardCommandIds ?? []);
789
791
  return (configuration.commands.keyboardCommands ?? []).filter((command) => activeCommandIds.has(command.id));
@@ -934,6 +936,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
934
936
  setHelpTerminalInitialPrompt(undefined);
935
937
  setHelpTerminalProfileName(undefined);
936
938
  setHelpTerminalActiveTab(undefined);
939
+ setSelectedHelpSectionId(null);
937
940
  }
938
941
  }, [showHelpTerminal]);
939
942
  const toggleHelpTerminal = useCallback((options) => {
@@ -1093,9 +1096,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1093
1096
  isHandlingPopStateRef.current = true;
1094
1097
  // Sync URL parameters back to component state for browser navigation
1095
1098
  const urlParams = new URLSearchParams(window.location.search);
1096
- // Handle workspace changes (with legacy view fallback)
1097
- const urlWorkspace = urlParams.get("workspace") ?? urlParams.get("view");
1098
- if (urlWorkspace && urlWorkspace !== viewNameRef.current) {
1099
+ const urlWorkspace = urlParams.get("workspace");
1100
+ if (urlWorkspace && urlWorkspace !== workspaceIdRef.current) {
1099
1101
  setWorkspaceId(urlWorkspace);
1100
1102
  }
1101
1103
  // Handle sidebar changes
@@ -1112,6 +1114,18 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1112
1114
  if (compareValue !== compareMode) {
1113
1115
  setCompareMode(compareValue);
1114
1116
  }
1117
+ // Handle help panel changes
1118
+ const helpParam = urlParams.get("help");
1119
+ if (helpParam) {
1120
+ setHelpTerminalActiveTab("manual");
1121
+ setShowHelpTerminal(true);
1122
+ setSelectedHelpSectionId(helpParam === "contents" || helpParam === "true"
1123
+ ? null
1124
+ : helpParam);
1125
+ }
1126
+ else {
1127
+ handleSetShowHelpTerminal(false);
1128
+ }
1115
1129
  // Handle mode changes
1116
1130
  const urlMode = urlParams.get("mode");
1117
1131
  if (urlMode && urlMode !== mode) {
@@ -1890,7 +1904,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1890
1904
  if (current.get("workspace") !== viewName) {
1891
1905
  current.set("workspace", viewName);
1892
1906
  }
1893
- current.delete("view"); // Remove legacy view param
1894
1907
  // Sync sidebar state
1895
1908
  const currentSidebars = current.get("sidebar") ?? "";
1896
1909
  const newSidebars = openSidebars.join(",");
@@ -1902,6 +1915,12 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1902
1915
  current.delete("sidebar");
1903
1916
  }
1904
1917
  }
1918
+ if (showHelpTerminal) {
1919
+ current.set("help", selectedHelpSectionId ?? "contents");
1920
+ }
1921
+ else {
1922
+ current.delete("help");
1923
+ }
1905
1924
  if (!compareMode) {
1906
1925
  current.delete("compare");
1907
1926
  current.delete("compareLanguage");
@@ -1969,6 +1988,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
1969
1988
  fullscreen,
1970
1989
  currentWizardId,
1971
1990
  openSidebars,
1991
+ showHelpTerminal,
1992
+ selectedHelpSectionId,
1972
1993
  ]);
1973
1994
  useEffect(() => {
1974
1995
  async function load() {
@@ -2364,20 +2385,35 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2364
2385
  ? existingOp.progress
2365
2386
  : op.progress;
2366
2387
  // IMPORTANT: Once canUndo becomes true, never downgrade it to false,
2367
- // UNLESS this update indicates the operation was undone. When an undo
2368
- // completes, the server sends canUndo: false and canRedo: true (or undone: true).
2369
- // We must respect that transition so the UI reflects the undo.
2370
- const isUndoUpdate = op.undone === true || op.canRedo === true;
2388
+ // UNLESS this update indicates the operation was undone.
2389
+ // Runtime logs show long-running undo completion can arrive as:
2390
+ // - existing: canUndo=true, executionStatus=executing
2391
+ // - incoming: canUndo=false, executionStatus=completed
2392
+ // without explicit undone/canRedo flags yet.
2393
+ const isExplicitUndoUpdate = op.undone === true || op.canRedo === true;
2394
+ const isInferredUndoCompletion = existingOp.executionStatus === "executing" &&
2395
+ op.executionStatus === "completed" &&
2396
+ existingOp.canUndo === true &&
2397
+ op.canUndo === false;
2398
+ const isUndoUpdate = isExplicitUndoUpdate || isInferredUndoCompletion;
2371
2399
  const mergedCanUndo = isUndoUpdate
2372
2400
  ? false
2373
2401
  : existingOp.canUndo === true
2374
2402
  ? true
2375
2403
  : op.canUndo;
2404
+ const mergedCanRedo = isUndoUpdate
2405
+ ? true
2406
+ : op.canRedo ?? existingOp.canRedo;
2407
+ const mergedUndone = isUndoUpdate
2408
+ ? true
2409
+ : op.undone ?? existingOp.undone;
2376
2410
  const mergedOp = {
2377
2411
  ...existingOp,
2378
2412
  ...op,
2379
2413
  progress: mergedProgress,
2380
2414
  canUndo: mergedCanUndo,
2415
+ canRedo: mergedCanRedo,
2416
+ undone: mergedUndone,
2381
2417
  };
2382
2418
  // Ensure undone operations always have canRedo: true.
2383
2419
  if (mergedOp.undone && !mergedOp.canRedo) {
@@ -2431,10 +2467,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2431
2467
  });
2432
2468
  // Ref for markOperationComplete callback (needed because operationsContext is created later)
2433
2469
  const markOperationCompleteRef = useRef(null);
2434
- // When the websocket is reconnecting, we can briefly lose the ability to send messages.
2435
- // Agent dialog responses (e.g. questionnaire cancel/submit) must not be dropped, otherwise
2436
- // the backend tool call can remain pending and tests/users will hang.
2437
- const pendingAgentDialogResponsesRef = useRef([]);
2438
2470
  // WebSocket message handler and connection
2439
2471
  const messageHandler = useSocketMessageHandler({
2440
2472
  sessionId,
@@ -2485,22 +2517,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2485
2517
  void startupChecks.recheckQuiet();
2486
2518
  // Increment socket connection version to trigger re-subscriptions
2487
2519
  setSocketConnectionVersion((v) => v + 1);
2488
- // Flush any queued agent dialog responses now that the socket is open.
2489
- // Keep this early so pending tool calls unblock ASAP.
2490
- try {
2491
- if (socketInstanceRef.current &&
2492
- socketInstanceRef.current.readyState === WebSocket.OPEN &&
2493
- pendingAgentDialogResponsesRef.current.length > 0) {
2494
- // FIFO flush
2495
- while (pendingAgentDialogResponsesRef.current.length > 0) {
2496
- const queued = pendingAgentDialogResponsesRef.current.shift();
2497
- socketInstanceRef.current.send(JSON.stringify(queued));
2498
- }
2499
- }
2500
- }
2501
- catch (e) {
2502
- console.error("Failed to flush queued agent dialog responses:", e);
2503
- }
2504
2520
  // Fetch any running operations on (re)connect for auto-resume
2505
2521
  // This ensures the UI shows operations that are still executing
2506
2522
  try {
@@ -2525,6 +2541,13 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2525
2541
  sendClientInfo,
2526
2542
  setSocketDiagnostics,
2527
2543
  });
2544
+ useEffect(() => {
2545
+ const hasMySession = activeSessions.some((s) => s.sessionId === sessionId);
2546
+ if (hasMySession &&
2547
+ socketInstanceRef.current?.readyState === WebSocket.OPEN) {
2548
+ toast.dismiss("session-revoked");
2549
+ }
2550
+ }, [activeSessions, sessionId, socketConnectionVersion, socketInstanceRef]);
2528
2551
  useEffect(() => {
2529
2552
  const handleRevoked = (event) => {
2530
2553
  const customEvent = event;
@@ -2540,15 +2563,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2540
2563
  socketInstanceRef.current.readyState === WebSocket.OPEN) {
2541
2564
  socketInstanceRef.current.send(JSON.stringify(message));
2542
2565
  }
2543
- else if (message.type === "agent-dialog-response") {
2544
- // Queue dialog responses to avoid losing them during reconnects.
2545
- pendingAgentDialogResponsesRef.current.push(message);
2546
- // Prevent unbounded growth in pathological scenarios.
2547
- if (pendingAgentDialogResponsesRef.current.length > 50) {
2548
- pendingAgentDialogResponsesRef.current =
2549
- pendingAgentDialogResponsesRef.current.slice(-50);
2550
- }
2551
- }
2552
2566
  }, [socketInstanceRef]);
2553
2567
  // URL update helper - defined early so it can be used by workspace/sidebar functions
2554
2568
  const updateUrl = useCallback((params) => {
@@ -2615,14 +2629,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2615
2629
  updateUrl,
2616
2630
  handleSetShowAgentsPanel,
2617
2631
  ]);
2618
- // Legacy alias for backwards compatibility
2619
- const switchView = useCallback((viewName, options) => {
2620
- // Handle ccpanel for settings workspace
2621
- if (options?.ccpanel) {
2622
- updateUrl({ ccpanel: options.ccpanel, workspace: viewName });
2623
- }
2624
- switchWorkspace(viewName, options);
2625
- }, [switchWorkspace, updateUrl]);
2626
2632
  // Helper: get all sidebar IDs that should be preserved (locked sidebars + their stack mates)
2627
2633
  const getPreservedSidebarIds = useCallback(() => {
2628
2634
  const lockedSet = new Set(lockedSidebarsRef.current);
@@ -2698,18 +2704,21 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
2698
2704
  isMobile,
2699
2705
  ]);
2700
2706
  // Ensure a sidebar is open (without toggling it closed if already open)
2701
- const openSidebar = useCallback((sidebarId) => {
2707
+ const openSidebar = useCallback((sidebarId, options) => {
2702
2708
  const currentOpenSidebars = openSidebarsRef.current;
2703
2709
  if (currentOpenSidebars.includes(sidebarId)) {
2704
2710
  // Already open, nothing to do
2705
2711
  return;
2706
2712
  }
2707
- // Keep sidebars that are locked OR in a stack with a locked sidebar
2708
- const preservedSet = getPreservedSidebarIds();
2709
- const newSidebars = [
2710
- ...currentOpenSidebars.filter((id) => preservedSet.has(id)), // Keep locked stacks
2711
- sidebarId, // Add the new one
2712
- ];
2713
+ const preservedSet = options?.preserveOpenSidebars
2714
+ ? undefined
2715
+ : getPreservedSidebarIds();
2716
+ const newSidebars = options?.preserveOpenSidebars
2717
+ ? [...currentOpenSidebars, sidebarId]
2718
+ : [
2719
+ ...currentOpenSidebars.filter((id) => preservedSet?.has(id)),
2720
+ sidebarId,
2721
+ ];
2713
2722
  openSidebarsRef.current = newSidebars;
2714
2723
  setOpenSidebars(newSidebars);
2715
2724
  ensureSidebarPinned(sidebarId);
@@ -3383,8 +3392,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3383
3392
  skipViewChange: true,
3384
3393
  });
3385
3394
  if (item) {
3386
- // Switch to the editor view
3387
- switchView("editor", {
3395
+ switchWorkspace("editor", {
3388
3396
  skipNavigationHistory: true,
3389
3397
  });
3390
3398
  showInfoToast({
@@ -3417,7 +3425,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3417
3425
  document.removeEventListener("click", handleCtrlClick, true);
3418
3426
  };
3419
3427
  }
3420
- }, [loadItem, switchView, showInfoToast, showErrorToast]);
3428
+ }, [loadItem, switchWorkspace, showInfoToast, showErrorToast]);
3421
3429
  useEffect(() => {
3422
3430
  const handleGlobalBlur = () => {
3423
3431
  operations.onFieldBlur?.();
@@ -3455,18 +3463,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3455
3463
  // Otherwise, only show workspaces that are in the settings
3456
3464
  return workspaceIdsFromSettings.includes(w.id) && !w.visible;
3457
3465
  });
3458
- // Legacy: Calculate visible views for backwards compatibility
3459
- const allViews = (configuration.editor.views ?? [])
3460
- .filter((x) => {
3461
- return !x.visible && !x.hidden;
3462
- })
3463
- .filter((x) => !userInfo.views ||
3464
- userInfo.views.map((view) => view.name).includes(x.name));
3465
- const pinnedViews = userInfo.preferences?.pinnedViews ||
3466
- configuration.editor.defaultPinnedViews ||
3467
- [];
3468
- // Legacy visibleViews for backwards compatibility
3469
- const visibleViews = allViews.filter((view) => view.name === viewName || pinnedViews.includes(view.name));
3470
3466
  // Handle initial mode setup from URL (only on initial load)
3471
3467
  useEffect(() => {
3472
3468
  if (!isInitialLoad)
@@ -3511,7 +3507,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3511
3507
  // This is especially important when called from the tour, where the current workspace
3512
3508
  // might be the editor and URL-only navigation would get "corrected" back.
3513
3509
  try {
3514
- switchView("home", {
3510
+ switchWorkspace("home", {
3515
3511
  skipConfirmation: true,
3516
3512
  skipNavigationHistory: true,
3517
3513
  });
@@ -3558,7 +3554,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3558
3554
  const current = new URLSearchParams(searchParams.toString());
3559
3555
  current.delete("version");
3560
3556
  current.delete("itemid");
3561
- current.delete("view"); // Remove legacy param
3562
3557
  current.delete("workspace"); // Clear workspace
3563
3558
  current.set("create", "1");
3564
3559
  const newUrl = `${pathname}?${current.toString()}`;
@@ -3891,12 +3886,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3891
3886
  reorderPinnedSidebars,
3892
3887
  reorderOpenSidebars,
3893
3888
  getResolvedSidebar,
3894
- // Legacy compatibility (deprecated)
3895
- viewName,
3896
- previousViewName,
3897
- switchView,
3898
- view: currentView,
3899
- visibleViews,
3900
3889
  compareMode,
3901
3890
  setCompareMode,
3902
3891
  fullscreen,
@@ -3949,6 +3938,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
3949
3938
  setActiveSlot,
3950
3939
  revision,
3951
3940
  notifyPageModelReady,
3941
+ pageModelReadyToken,
3952
3942
  selectedComment,
3953
3943
  setSelectedComment,
3954
3944
  comments,
@@ -4040,6 +4030,8 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4040
4030
  helpTerminalProfileName,
4041
4031
  helpTerminalActiveTab,
4042
4032
  setHelpTerminalActiveTab,
4033
+ selectedHelpSectionId,
4034
+ setSelectedHelpSectionId,
4043
4035
  showAgentsWorkspaceEditor,
4044
4036
  setShowAgentsWorkspaceEditor: handleSetShowAgentsWorkspaceEditor,
4045
4037
  selectedAgentsWorkspaceAgentId,
@@ -4092,7 +4084,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4092
4084
  configuration,
4093
4085
  updateUrl,
4094
4086
  workspaceId,
4095
- switchView,
4096
4087
  pathname,
4097
4088
  router,
4098
4089
  item,
@@ -4133,9 +4124,6 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4133
4124
  reorderOpenSidebars,
4134
4125
  getResolvedSidebar,
4135
4126
  viewName,
4136
- previousViewName,
4137
- currentView,
4138
- visibleViews,
4139
4127
  compareMode,
4140
4128
  // Important: in multi-slot mode the active PageViewContext can change
4141
4129
  // without the base `pageViewContext` identity changing (e.g. switching slots).
@@ -4160,6 +4148,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4160
4148
  currentItemDescriptor,
4161
4149
  revision,
4162
4150
  notifyPageModelReady,
4151
+ pageModelReadyToken,
4163
4152
  selectedComment,
4164
4153
  comments,
4165
4154
  availableCommentTags,
@@ -4203,6 +4192,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4203
4192
  helpTerminalProfileName,
4204
4193
  helpTerminalActiveTab,
4205
4194
  setHelpTerminalActiveTab,
4195
+ selectedHelpSectionId,
4206
4196
  showAgentsWorkspaceEditor,
4207
4197
  selectedAgentsWorkspaceAgentId,
4208
4198
  activeEditorTab,
@@ -4476,15 +4466,13 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4476
4466
  useEffect(() => {
4477
4467
  fieldsEditContext.clearModifiedFields();
4478
4468
  }, [currentItemDescriptor]);
4479
- if (!currentView)
4469
+ if (!currentWorkspace)
4480
4470
  return null;
4481
4471
  const editorUi = fullscreen ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "fixed inset-0 flex", children: [_jsx(PageViewerFrame, { compareView: compareMode, pageViewContext: activePageViewContext }), _jsx(FullscreenControls, { device: activePageViewContext.device, setDevice: (d) => activePageViewContext.setDevice(d), canExit: !configuration.forceFullscreen, onExit: () => setFullscreen(false), firstMobileDeviceName: configuration.devices[0]?.name })] }), showFullscreenHint && !configuration.forceFullscreen && !isMobile && (_jsx("div", { className: "fixed inset-0 z-10000", onMouseMoveCapture: () => {
4482
4472
  setTimeout(() => {
4483
4473
  setShowFullscreenHint(false);
4484
4474
  }, 600);
4485
- }, "data-testid": "fullscreen-hint-overlay", children: _jsxs("div", { className: "fixed top-6 left-1/2 -translate-x-1/2 transform rounded-full bg-black/60 px-6 py-2.5 text-sm font-medium text-white shadow-2xl backdrop-blur-md transition-all duration-500", children: ["Press", " ", _jsx("kbd", { className: "mx-1 rounded bg-white/20 px-1.5 py-0.5 text-xs font-semibold", children: "Ctrl + F11" }), " ", "to exit fullscreen"] }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(EditorChrome, { className: className, currentWorkspace: currentWorkspace, centerPanelView: centerPanelView, editContext: editContext, showAgentsPanel: showAgentsPanel, handleSetShowAgentsPanel: handleSetShowAgentsPanel, workspaceId: workspaceId,
4486
- // Legacy props for backwards compatibility
4487
- currentView: currentView, viewName: viewName }), isTourActive && (_jsx(Tour, { tourStopCallback: () => {
4475
+ }, "data-testid": "fullscreen-hint-overlay", children: _jsxs("div", { className: "fixed top-6 left-1/2 -translate-x-1/2 transform rounded-full bg-black/60 px-6 py-2.5 text-sm font-medium text-white shadow-2xl backdrop-blur-md transition-all duration-500", children: ["Press", " ", _jsx("kbd", { className: "mx-1 rounded bg-white/20 px-1.5 py-0.5 text-xs font-semibold", children: "Ctrl + F11" }), " ", "to exit fullscreen"] }) }))] })) : (_jsxs(_Fragment, { children: [_jsx(EditorChrome, { className: className, currentWorkspace: currentWorkspace, centerPanelView: centerPanelView, editContext: editContext, showAgentsPanel: showAgentsPanel, handleSetShowAgentsPanel: handleSetShowAgentsPanel, workspaceId: workspaceId }), isTourActive && (_jsx(Tour, { tourStopCallback: () => {
4488
4476
  setIsTourActive(false);
4489
4477
  // Remove tour state from URL
4490
4478
  // Use history.replaceState instead of router.replace to avoid triggering React navigation
@@ -4495,7 +4483,7 @@ export function EditorShell({ configuration, className, item: loadItemDescriptor
4495
4483
  ? `${window.location.pathname}?${queryString}`
4496
4484
  : window.location.pathname;
4497
4485
  window.history.replaceState(null, "", newUrl);
4498
- }, configuration: configuration, restoredFromUrl: tourRestoredRef.current })), _jsx(GuidanceOverlay, {}), _jsx(AgentDialogHandler, { sendWebSocketMessage: (type, payload) => sendSocketMessage({ type, payload }) })] }));
4486
+ }, configuration: configuration, restoredFromUrl: tourRestoredRef.current })), _jsx(GuidanceOverlay, {}), _jsx(AgentDialogHandler, {})] }));
4499
4487
  return (_jsx(LicenseProvider, { children: _jsx("div", { className: `editor h-full w-full`, children: _jsx(OperationsContextProvider, { value: operationsContext.context, children: _jsx(FieldsEditContextProvider, { value: fieldsEditContext, children: _jsxs(EditContextProvider, { value: editContext, children: [_jsx(DevModeIndicator, {}), startupChecks.state === "loading" && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-white/70 backdrop-blur-[1px]", children: _jsx("div", { className: "flex items-center gap-3 rounded-md border border-gray-200 bg-white px-4 py-3 text-gray-700 shadow-sm", children: _jsx(Spinner, { size: "xl" }) }) })), editContext.isRefreshing && (_jsx("div", { className: "pointer-events-none fixed right-0 bottom-0 flex h-24 w-24 items-center justify-center text-gray-600 opacity-50 select-none", children: _jsx(Spinner, {}) })), (currentWorkspace.id === "agents" ||
4500
4488
  currentWorkspace.id === "taskboard") &&
4501
4489
  showAgentsWorkspaceEditor && (_jsx(AgentsSlotContextBridgeHost, { slots: editorSlots })), startupChecks.state !== "loading" && (children || editorUi), startupChecks.state !== "loading" && dialog, _jsx(Toaster, { position: "top-center" }), " ", _jsx(ConfirmationDialog, { ref: confirmationDialogRef }), _jsx(ConcurrentUserLimitDialog, { open: concurrentUserLimitError !== null, onOpenChange: (open) => {