@parhelia/core 0.3.12770 → 0.3.12777

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 (599) hide show
  1. package/dist/agents-view/AgentCard.js +1 -5
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentsView.js +1 -1
  4. package/dist/agents-view/AgentsView.js.map +1 -1
  5. package/dist/components/ActionButton.d.ts +7 -0
  6. package/dist/components/ActionButton.js +2 -2
  7. package/dist/components/ActionButton.js.map +1 -1
  8. package/dist/components/MarkdownDisplay.js +1 -1
  9. package/dist/components/ui/CardConnector.js +1 -1
  10. package/dist/components/ui/LanguageSelectionGrid.js +1 -1
  11. package/dist/components/ui/LanguageSelector.js +17 -3
  12. package/dist/components/ui/LanguageSelector.js.map +1 -1
  13. package/dist/components/ui/PlaceholderItemSelector.js +1 -1
  14. package/dist/components/ui/alert.d.ts +1 -1
  15. package/dist/components/ui/button.d.ts +2 -2
  16. package/dist/components/ui/card.js +1 -1
  17. package/dist/components/ui/close-button.d.ts +1 -1
  18. package/dist/components/ui/context-menu.js +1 -1
  19. package/dist/components/ui/copy-button.js +1 -1
  20. package/dist/components/ui/delete-button.d.ts +1 -1
  21. package/dist/components/ui/paste-button.js +1 -1
  22. package/dist/components/ui/popover.d.ts +1 -0
  23. package/dist/components/ui/popover.js +16 -7
  24. package/dist/components/ui/popover.js.map +1 -1
  25. package/dist/components/ui/sonner.js +1 -1
  26. package/dist/components/ui/upload-button.js +1 -1
  27. package/dist/config/config.js +18 -4
  28. package/dist/config/config.js.map +1 -1
  29. package/dist/editor/ConcurrentUserLimitDialog.js +1 -1
  30. package/dist/editor/ConfirmationDialog.d.ts +0 -1
  31. package/dist/editor/ConfirmationDialog.js +3 -6
  32. package/dist/editor/ConfirmationDialog.js.map +1 -1
  33. package/dist/editor/ContentTree.d.ts +12 -1
  34. package/dist/editor/ContentTree.js +20 -5
  35. package/dist/editor/ContentTree.js.map +1 -1
  36. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  37. package/dist/editor/FieldHistory.d.ts +15 -1
  38. package/dist/editor/FieldHistory.js +85 -52
  39. package/dist/editor/FieldHistory.js.map +1 -1
  40. package/dist/editor/FieldList.js +5 -2
  41. package/dist/editor/FieldList.js.map +1 -1
  42. package/dist/editor/FieldListField.js +7 -2
  43. package/dist/editor/FieldListField.js.map +1 -1
  44. package/dist/editor/FieldListFieldWithFallbacks.js +1 -1
  45. package/dist/editor/GlobalMenuBar.js +1 -1
  46. package/dist/editor/ItemInfo.js +2 -2
  47. package/dist/editor/ItemInfo.js.map +1 -1
  48. package/dist/editor/LinkEditorDialog.js +1 -1
  49. package/dist/editor/MigrationsView.js +1 -1
  50. package/dist/editor/PictureCropper.js +1 -1
  51. package/dist/editor/PictureCropper.js.map +1 -1
  52. package/dist/editor/SetupWizard.js.map +1 -1
  53. package/dist/editor/WorkspaceTitleSwitcher.js +1 -1
  54. package/dist/editor/ai/AgentImageCopyButton.d.ts +6 -0
  55. package/dist/editor/ai/AgentImageCopyButton.js +93 -0
  56. package/dist/editor/ai/AgentImageCopyButton.js.map +1 -0
  57. package/dist/editor/ai/AgentSharingSection.js +1 -1
  58. package/dist/editor/ai/Agents.d.ts +2 -2
  59. package/dist/editor/ai/Agents.js +2 -10
  60. package/dist/editor/ai/Agents.js.map +1 -1
  61. package/dist/editor/ai/GuidanceOverlay.js +1 -1
  62. package/dist/editor/ai/GuidanceOverlay.js.map +1 -1
  63. package/dist/editor/ai/InlineAiDialog.js +1 -1
  64. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  65. package/dist/editor/ai/InlineAiTrigger.js +1 -1
  66. package/dist/editor/ai/MediaImage.js +2 -1
  67. package/dist/editor/ai/MediaImage.js.map +1 -1
  68. package/dist/editor/ai/agentActivitySummary.js.map +1 -1
  69. package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
  70. package/dist/editor/ai/dialogs/AgentDialogHandler.js +109 -11
  71. package/dist/editor/ai/dialogs/AgentDialogHandler.js.map +1 -1
  72. package/dist/editor/ai/dialogs/QuestionnaireInline.js +1 -1
  73. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +21 -0
  74. package/dist/editor/ai/dialogs/agentDialogTypes.js +3 -1
  75. package/dist/editor/ai/dialogs/agentDialogTypes.js.map +1 -1
  76. package/dist/editor/ai/dialogs/offscreenPageCapture.d.ts +11 -0
  77. package/dist/editor/ai/dialogs/offscreenPageCapture.js +77 -23
  78. package/dist/editor/ai/dialogs/offscreenPageCapture.js.map +1 -1
  79. package/dist/editor/ai/terminal/agentCost.d.ts +1 -0
  80. package/dist/editor/ai/terminal/agentCost.js +10 -3
  81. package/dist/editor/ai/terminal/agentCost.js.map +1 -1
  82. package/dist/editor/ai/terminal/agentSessionSelectors.d.ts +1 -0
  83. package/dist/editor/ai/terminal/agentSessionSelectors.js +29 -3
  84. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  85. package/dist/editor/ai/terminal/agentSessionState.js +4 -1
  86. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  87. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +1 -1
  88. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  89. package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +1 -1
  90. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +3 -3
  91. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  92. package/dist/editor/ai/terminal/components/AgentDocumentList.js +2 -2
  93. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  94. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
  95. package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +22 -5
  96. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +102 -19
  97. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  98. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +1 -1
  99. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +2 -2
  100. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
  101. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +8 -3
  102. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  103. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +46 -6
  104. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  105. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +1 -1
  106. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +1 -1
  107. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.d.ts +1 -0
  108. package/dist/editor/ai/terminal/components/AgentTerminalContextChrome.js.map +1 -1
  109. package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js +1 -1
  110. package/dist/editor/ai/terminal/components/AgentTerminalContextPanels.js.map +1 -1
  111. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +1 -1
  112. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +1 -1
  113. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +1 -1
  114. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +1 -1
  116. package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
  117. package/dist/editor/ai/terminal/components/AiResponseMessage.js +42 -36
  118. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  119. package/dist/editor/ai/terminal/components/ApprovalCard.js +1 -1
  120. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  121. package/dist/editor/ai/terminal/components/ContextInfoBar.d.ts +2 -1
  122. package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -2
  123. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  124. package/dist/editor/ai/terminal/components/EditOperationsPanel.js +1 -1
  125. package/dist/editor/ai/terminal/components/QuestionnaireRecap.d.ts +2 -2
  126. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +2 -1
  127. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +10 -16
  128. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  129. package/dist/editor/ai/terminal/components/UserMessage.js +1 -1
  130. package/dist/editor/ai/terminal/useAgentContextDisplayNames.d.ts +2 -0
  131. package/dist/editor/ai/terminal/useAgentContextDisplayNames.js +37 -28
  132. package/dist/editor/ai/terminal/useAgentContextDisplayNames.js.map +1 -1
  133. package/dist/editor/ai/terminal/useAgentEditorContextPipeline.d.ts +1 -0
  134. package/dist/editor/ai/terminal/useAgentInlineDialogPipeline.d.ts +1 -1
  135. package/dist/editor/ai/terminal/useAgentLoader.js +5 -2
  136. package/dist/editor/ai/terminal/useAgentLoader.js.map +1 -1
  137. package/dist/editor/ai/terminal/useAgentPromptComposerSurface.d.ts +2 -2
  138. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.d.ts +2 -0
  139. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js +5 -3
  140. package/dist/editor/ai/terminal/useAgentPromptQueueSocketHandler.js.map +1 -1
  141. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +4 -4
  142. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +3 -0
  143. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  144. package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +31 -31
  145. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
  146. package/dist/editor/ai/terminal/useAgentStopCommand.js +4 -0
  147. package/dist/editor/ai/terminal/useAgentStopCommand.js.map +1 -1
  148. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +1 -0
  149. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  150. package/dist/editor/ai/terminal/useAgentTerminalChrome.d.ts +1 -0
  151. package/dist/editor/ai/terminal/useAgentTerminalChrome.js +2 -2
  152. package/dist/editor/ai/terminal/useAgentTerminalChrome.js.map +1 -1
  153. package/dist/editor/ai/terminal/useAgentTerminalController.js +3 -1
  154. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  155. package/dist/editor/ai/terminal/useAgentTerminalViewState.d.ts +1 -0
  156. package/dist/editor/ai/terminal/useAgentTerminalViewState.js +22 -1
  157. package/dist/editor/ai/terminal/useAgentTerminalViewState.js.map +1 -1
  158. package/dist/editor/ai/useAgentPanes.js.map +1 -1
  159. package/dist/editor/ai/useAgentStatus.js.map +1 -1
  160. package/dist/editor/ai/useInlineAiPosition.js.map +1 -1
  161. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +42 -23
  162. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  163. package/dist/editor/bridge/BridgeClient.js +6 -6
  164. package/dist/editor/bridge/BridgeClient.js.map +1 -1
  165. package/dist/editor/bridge/protocol.d.ts +26 -0
  166. package/dist/editor/bridge/protocol.js +1 -1
  167. package/dist/editor/bridge/protocol.js.map +1 -1
  168. package/dist/editor/client/AboutDialog.js +1 -1
  169. package/dist/editor/client/EditorShell.js +125 -90
  170. package/dist/editor/client/EditorShell.js.map +1 -1
  171. package/dist/editor/client/SessionExpiredOverlay.js +1 -1
  172. package/dist/editor/client/SessionExpiredOverlay.js.map +1 -1
  173. package/dist/editor/client/editContext.d.ts +26 -3
  174. package/dist/editor/client/editContext.js.map +1 -1
  175. package/dist/editor/client/fieldModificationStore.js +0 -21
  176. package/dist/editor/client/fieldModificationStore.js.map +1 -1
  177. package/dist/editor/client/hooks/useClientInfoRegistration.d.ts +13 -0
  178. package/dist/editor/client/hooks/useClientInfoRegistration.js +38 -0
  179. package/dist/editor/client/hooks/useClientInfoRegistration.js.map +1 -0
  180. package/dist/editor/client/itemsRepository.js +1 -34
  181. package/dist/editor/client/itemsRepository.js.map +1 -1
  182. package/dist/editor/client/operations.d.ts +4 -2
  183. package/dist/editor/client/operations.js +89 -65
  184. package/dist/editor/client/operations.js.map +1 -1
  185. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  186. package/dist/editor/client/ui/EditorChrome.d.ts +1 -0
  187. package/dist/editor/client/ui/EditorChrome.js +7 -2
  188. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  189. package/dist/editor/client/ui/FullscreenControls.d.ts +3 -0
  190. package/dist/editor/client/ui/FullscreenControls.js +7 -12
  191. package/dist/editor/client/ui/FullscreenControls.js.map +1 -1
  192. package/dist/editor/client/undoTargetResolution.d.ts +28 -0
  193. package/dist/editor/client/undoTargetResolution.js +69 -0
  194. package/dist/editor/client/undoTargetResolution.js.map +1 -0
  195. package/dist/editor/commands/componentCommands.js +3 -6
  196. package/dist/editor/commands/componentCommands.js.map +1 -1
  197. package/dist/editor/commands/customCommandConverter.js.map +1 -1
  198. package/dist/editor/commands/itemCommands.js +20 -10
  199. package/dist/editor/commands/itemCommands.js.map +1 -1
  200. package/dist/editor/content-tree/IndicatorSettings.js +1 -1
  201. package/dist/editor/content-tree/TreeOptions.js +1 -1
  202. package/dist/editor/context-menu/InsertMenu.js +2 -3
  203. package/dist/editor/context-menu/InsertMenu.js.map +1 -1
  204. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +1 -1
  205. package/dist/editor/field-types/AttachmentEditor.js +7 -0
  206. package/dist/editor/field-types/AttachmentEditor.js.map +1 -1
  207. package/dist/editor/field-types/LinkFieldEditor.js +1 -1
  208. package/dist/editor/field-types/PictureFieldEditor.js +21 -21
  209. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  210. package/dist/editor/field-types/RichTextEditor.js +1 -1
  211. package/dist/editor/field-types/RichTextEditorComponent.js +6 -0
  212. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  213. package/dist/editor/field-types/SingleLineText.js +0 -34
  214. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  215. package/dist/editor/field-types/richtext/bridgeRichTextProfile.d.ts +1 -1
  216. package/dist/editor/field-types/richtext/components/EditorDropdown.js +1 -1
  217. package/dist/editor/field-types/richtext/components/ReactSlate.js +1 -1
  218. package/dist/editor/field-types/richtext/components/SimpleDropdown.js +1 -1
  219. package/dist/editor/field-types/richtext/components/SimpleToolbar.js +1 -1
  220. package/dist/editor/field-types/richtext/hooks/useRichTextProfile.js.map +1 -1
  221. package/dist/editor/field-types/richtext/utils/conversion.js +2 -4
  222. package/dist/editor/field-types/richtext/utils/conversion.js.map +1 -1
  223. package/dist/editor/field-types/richtext/utils/plugins.d.ts +1 -0
  224. package/dist/editor/field-types/richtext/utils/plugins.js +12 -0
  225. package/dist/editor/field-types/richtext/utils/plugins.js.map +1 -1
  226. package/dist/editor/field-types/richtext/utils/profileMapper.js.map +1 -1
  227. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  228. package/dist/editor/fieldValueDiagnostics.js.map +1 -1
  229. package/dist/editor/media-selector/MediaFolderBrowser.js +26 -4
  230. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  231. package/dist/editor/media-selector/Preview.js +6 -11
  232. package/dist/editor/media-selector/Preview.js.map +1 -1
  233. package/dist/editor/media-selector/Thumbnails.js +31 -3
  234. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  235. package/dist/editor/media-selector/TreeSelector.js +53 -6
  236. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  237. package/dist/editor/media-selector/UploadZone.d.ts +1 -2
  238. package/dist/editor/media-selector/UploadZone.js +3 -4
  239. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  240. package/dist/editor/media-selector/mediaItemDrag.d.ts +28 -0
  241. package/dist/editor/media-selector/mediaItemDrag.js +42 -0
  242. package/dist/editor/media-selector/mediaItemDrag.js.map +1 -0
  243. package/dist/editor/menubar/ActiveUsers.js +6 -3
  244. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  245. package/dist/editor/menubar/FavoritesControls.js +8 -1
  246. package/dist/editor/menubar/FavoritesControls.js.map +1 -1
  247. package/dist/editor/menubar/GenericToolbar.js +1 -1
  248. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  249. package/dist/editor/menubar/ItemActionsMenu.js +1 -1
  250. package/dist/editor/menubar/ItemLanguageVersion.js +1 -1
  251. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  252. package/dist/editor/menubar/OperationsIndicator.js +1 -1
  253. package/dist/editor/menubar/PageSelector.d.ts +2 -1
  254. package/dist/editor/menubar/PageSelector.js +15 -5
  255. package/dist/editor/menubar/PageSelector.js.map +1 -1
  256. package/dist/editor/menubar/VersionPreviewCard.js +1 -1
  257. package/dist/editor/menubar/VersionSelector.js +1 -1
  258. package/dist/editor/menubar/toolbar-sections/CustomCommandsToolbar.js +1 -1
  259. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.d.ts +3 -1
  260. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +6 -7
  261. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  262. package/dist/editor/menubar/toolbar-sections/EditControls.js +5 -5
  263. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  264. package/dist/editor/menubar/toolbar-sections/InsertControls.js +1 -1
  265. package/dist/editor/menubar/toolbar-sections/InsertControls.js.map +1 -1
  266. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +14 -4
  267. package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
  268. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.d.ts +1 -0
  269. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +14 -0
  270. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -0
  271. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.d.ts +7 -0
  272. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js +44 -0
  273. package/dist/editor/menubar/toolbar-sections/RefreshPageControl.js.map +1 -0
  274. package/dist/editor/menubar/toolbar-sections/ReviewCommands.js +1 -1
  275. package/dist/editor/menubar/toolbar-sections/UtilityControls.js +1 -1
  276. package/dist/editor/menubar/toolbar-sections/ViewportControls.d.ts +7 -0
  277. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +16 -8
  278. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  279. package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -0
  280. package/dist/editor/menubar/toolbar-sections/index.js +1 -0
  281. package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
  282. package/dist/editor/notifications/NotificationCenter.js +2 -2
  283. package/dist/editor/notifications/NotificationCenter.js.map +1 -1
  284. package/dist/editor/notifications/NotificationItem.js +16 -57
  285. package/dist/editor/notifications/NotificationItem.js.map +1 -1
  286. package/dist/editor/notifications/WatchButton.js +1 -1
  287. package/dist/editor/notifications/notificationListState.d.ts +1 -1
  288. package/dist/editor/notifications/notificationRoutes.js.map +1 -1
  289. package/dist/editor/notifications/useNotifications.d.ts +1 -1
  290. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +6 -3
  291. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  292. package/dist/editor/page-editor-chrome/CommentHighlightings.js +1 -1
  293. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js +50 -22
  294. package/dist/editor/page-editor-chrome/DragInsertionOverlay.js.map +1 -1
  295. package/dist/editor/page-editor-chrome/EmptyImageFieldIndicators.js +1 -1
  296. package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
  297. package/dist/editor/page-editor-chrome/FieldActionIndicators.js +1 -1
  298. package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +1 -1
  299. package/dist/editor/page-editor-chrome/FrameMenu.js +4 -4
  300. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  301. package/dist/editor/page-editor-chrome/FrameMenus.js +1 -1
  302. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.d.ts +58 -0
  303. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +709 -0
  304. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -0
  305. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +12 -2
  306. package/dist/editor/page-editor-chrome/LockedFieldIndicator.js.map +1 -1
  307. package/dist/editor/page-editor-chrome/PageEditorChrome.js +7 -2
  308. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  309. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +57 -10
  310. package/dist/editor/page-editor-chrome/PictureEditorOverlay.js.map +1 -1
  311. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +1 -8
  312. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  313. package/dist/editor/page-editor-chrome/PlaceholderDropZones.d.ts +1 -0
  314. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +10 -3
  315. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  316. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +5 -2
  317. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  318. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js +7 -2
  319. package/dist/editor/page-editor-chrome/SuggestionVariantSwitcher.js.map +1 -1
  320. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +5 -2
  321. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +153 -51
  322. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  323. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  324. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +7 -0
  325. package/dist/editor/page-editor-chrome/overlay/geometry.js +35 -17
  326. package/dist/editor/page-editor-chrome/overlay/geometry.js.map +1 -1
  327. package/dist/editor/page-editor-chrome/overlay/placeholderZones.js.map +1 -1
  328. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +18 -70
  329. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  330. package/dist/editor/page-viewer/MiniMap.js +1 -1
  331. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  332. package/dist/editor/page-viewer/MinimapDropTargets.js +1 -1
  333. package/dist/editor/page-viewer/PageViewer.js +5 -3
  334. package/dist/editor/page-viewer/PageViewer.js.map +1 -1
  335. package/dist/editor/page-viewer/PageViewerFrame.js +252 -121
  336. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  337. package/dist/editor/page-viewer/bridgeFieldPatch.js +0 -45
  338. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  339. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +12 -0
  340. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +27 -0
  341. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
  342. package/dist/editor/page-viewer/fullscreenPagePath.d.ts +1 -0
  343. package/dist/editor/page-viewer/fullscreenPagePath.js +11 -0
  344. package/dist/editor/page-viewer/fullscreenPagePath.js.map +1 -0
  345. package/dist/editor/page-viewer/internalLinkNavigation.d.ts +9 -0
  346. package/dist/editor/page-viewer/internalLinkNavigation.js +104 -0
  347. package/dist/editor/page-viewer/internalLinkNavigation.js.map +1 -0
  348. package/dist/editor/page-viewer/pageViewContext.d.ts +3 -1
  349. package/dist/editor/page-viewer/pageViewContext.js +14 -10
  350. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  351. package/dist/editor/page-viewer/parentBridgeInjection.d.ts +2 -0
  352. package/dist/editor/page-viewer/parentBridgeInjection.js +63 -16
  353. package/dist/editor/page-viewer/parentBridgeInjection.js.map +1 -1
  354. package/dist/editor/page-viewer/renderUrl.d.ts +1 -1
  355. package/dist/editor/personalization/ConditionTreeEditor.js +1 -1
  356. package/dist/editor/personalization/ConditionTreeEditor.js.map +1 -1
  357. package/dist/editor/personalization/PersonalizationPanel.js +1 -1
  358. package/dist/editor/personalization/TreeItemPicker.js +7 -1
  359. package/dist/editor/personalization/TreeItemPicker.js.map +1 -1
  360. package/dist/editor/personalization/utils.js.map +1 -1
  361. package/dist/editor/reviews/Comment.js +12 -1
  362. package/dist/editor/reviews/Comment.js.map +1 -1
  363. package/dist/editor/reviews/CommentDisplayPopover.js +13 -2
  364. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  365. package/dist/editor/reviews/CommentEditor.js +1 -1
  366. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  367. package/dist/editor/reviews/CommentView.js +1 -1
  368. package/dist/editor/reviews/Comments.js +5 -20
  369. package/dist/editor/reviews/Comments.js.map +1 -1
  370. package/dist/editor/reviews/CreateReviewDialog.js +1 -1
  371. package/dist/editor/reviews/DecisionsMatrix.js +1 -1
  372. package/dist/editor/reviews/EditReviewSettingsDialog.js +1 -1
  373. package/dist/editor/reviews/FeedbackFilters.d.ts +16 -0
  374. package/dist/editor/reviews/FeedbackFilters.js +45 -0
  375. package/dist/editor/reviews/FeedbackFilters.js.map +1 -0
  376. package/dist/editor/reviews/FeedbackModeIntro.js +2 -2
  377. package/dist/editor/reviews/FeedbackModeIntro.js.map +1 -1
  378. package/dist/editor/reviews/MentionText.js +1 -1
  379. package/dist/editor/reviews/ReviewCard.js +2 -3
  380. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  381. package/dist/editor/reviews/ReviewDetail.js +1 -1
  382. package/dist/editor/reviews/ReviewItemsPanel.js +74 -11
  383. package/dist/editor/reviews/ReviewItemsPanel.js.map +1 -1
  384. package/dist/editor/reviews/SecretPhraseInput.js +1 -1
  385. package/dist/editor/reviews/SuggestedEdit.js +12 -1
  386. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  387. package/dist/editor/reviews/SuggestionCommentThread.js +12 -1
  388. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  389. package/dist/editor/reviews/SuggestionDisplayPopover.js +14 -9
  390. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  391. package/dist/editor/reviews/suggestedEditState.js.map +1 -1
  392. package/dist/editor/reviews/useMultiReview.js +5 -2
  393. package/dist/editor/reviews/useMultiReview.js.map +1 -1
  394. package/dist/editor/services/agentService.d.ts +91 -10
  395. package/dist/editor/services/agentService.js +100 -27
  396. package/dist/editor/services/agentService.js.map +1 -1
  397. package/dist/editor/services/aiService.js.map +1 -1
  398. package/dist/editor/services/contentService.d.ts +3 -1
  399. package/dist/editor/services/contentService.js +8 -0
  400. package/dist/editor/services/contentService.js.map +1 -1
  401. package/dist/editor/services/contextService.js.map +1 -1
  402. package/dist/editor/services/editService.js.map +1 -1
  403. package/dist/editor/services/favouritesService.d.ts +0 -7
  404. package/dist/editor/services/favouritesService.js +0 -7
  405. package/dist/editor/services/favouritesService.js.map +1 -1
  406. package/dist/editor/services/indexService.d.ts +3 -1
  407. package/dist/editor/services/indexService.js +8 -0
  408. package/dist/editor/services/indexService.js.map +1 -1
  409. package/dist/editor/services/localStorageService.js.map +1 -1
  410. package/dist/editor/services/reviewsService.js.map +1 -1
  411. package/dist/editor/services/serviceHelper.d.ts +3 -0
  412. package/dist/editor/services/serviceHelper.js +51 -1
  413. package/dist/editor/services/serviceHelper.js.map +1 -1
  414. package/dist/editor/services/suggestedEditsService.js.map +1 -1
  415. package/dist/editor/services/systemService.d.ts +10 -0
  416. package/dist/editor/services/systemService.js +3 -0
  417. package/dist/editor/services/systemService.js.map +1 -1
  418. package/dist/editor/services/textCompletionService.js +5 -0
  419. package/dist/editor/services/textCompletionService.js.map +1 -1
  420. package/dist/editor/settings/About.js +2 -4
  421. package/dist/editor/settings/About.js.map +1 -1
  422. package/dist/editor/settings/IndexOverview.js +3 -2
  423. package/dist/editor/settings/IndexOverview.js.map +1 -1
  424. package/dist/editor/settings/SettingsBreadcrumb.js +1 -1
  425. package/dist/editor/settings/SettingsView.js +1 -1
  426. package/dist/editor/settings/StatusSummary.js +1 -1
  427. package/dist/editor/settings/index/IndexGenerationsSection.d.ts +8 -0
  428. package/dist/editor/settings/index/IndexGenerationsSection.js +93 -0
  429. package/dist/editor/settings/index/IndexGenerationsSection.js.map +1 -0
  430. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -1
  431. package/dist/editor/settings/panels/AgentsPanel.js +1 -1
  432. package/dist/editor/settings/panels/CreateAgentProfileDialog.js +1 -1
  433. package/dist/editor/settings/panels/CreateJavaScriptToolDialog.js +1 -1
  434. package/dist/editor/settings/panels/CreateMcpServerDialog.js +1 -1
  435. package/dist/editor/settings/panels/JavaScriptToolsPanel.js +1 -1
  436. package/dist/editor/settings/panels/MemoriesPanel.d.ts +16 -0
  437. package/dist/editor/settings/panels/MemoriesPanel.js +291 -0
  438. package/dist/editor/settings/panels/MemoriesPanel.js.map +1 -0
  439. package/dist/editor/settings/panels/MemoryEntryDialog.d.ts +45 -0
  440. package/dist/editor/settings/panels/MemoryEntryDialog.js +167 -0
  441. package/dist/editor/settings/panels/MemoryEntryDialog.js.map +1 -0
  442. package/dist/editor/settings/panels/ModelsPanel.js +1 -1
  443. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
  444. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +1 -1
  445. package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
  446. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +1 -1
  447. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  448. package/dist/editor/settings/panels/ProvidersPanel.js +1 -1
  449. package/dist/editor/settings/panels/RenderingHostsPanel.d.ts +2 -0
  450. package/dist/editor/settings/panels/RenderingHostsPanel.js +63 -0
  451. package/dist/editor/settings/panels/RenderingHostsPanel.js.map +1 -0
  452. package/dist/editor/settings/panels/SearchConfigPanel.js +6 -4
  453. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
  454. package/dist/editor/settings/panels/StatusPanel.js +1 -1
  455. package/dist/editor/settings/panels/index.d.ts +2 -0
  456. package/dist/editor/settings/panels/index.js +2 -0
  457. package/dist/editor/settings/panels/index.js.map +1 -1
  458. package/dist/editor/setup-wizard/steps/CompleteStep.js +1 -1
  459. package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
  460. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
  461. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +1 -1
  462. package/dist/editor/setup-wizard/steps/ModelSelectionStep.js +1 -1
  463. package/dist/editor/setup-wizard/steps/ProviderStep.js +1 -1
  464. package/dist/editor/sidebar/ComponentPalette.js +4 -4
  465. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  466. package/dist/editor/sidebar/ComponentTree.js +182 -61
  467. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  468. package/dist/editor/sidebar/ContentTreePanel.d.ts +2 -2
  469. package/dist/editor/sidebar/DictionaryEditor.js +1 -1
  470. package/dist/editor/sidebar/EditHistory.js +1 -1
  471. package/dist/editor/sidebar/Favorites.js.map +1 -1
  472. package/dist/editor/sidebar/NavigationPanelItem.js +2 -2
  473. package/dist/editor/sidebar/NavigationPanelItem.js.map +1 -1
  474. package/dist/editor/sidebar/OperationItem.js +1 -1
  475. package/dist/editor/sidebar/Sessions.js +20 -9
  476. package/dist/editor/sidebar/Sessions.js.map +1 -1
  477. package/dist/editor/sidebar/Workbox.d.ts +8 -0
  478. package/dist/editor/sidebar/Workbox.js +94 -12
  479. package/dist/editor/sidebar/Workbox.js.map +1 -1
  480. package/dist/editor/sidebar/WorkboxFilters.d.ts +11 -0
  481. package/dist/editor/sidebar/WorkboxFilters.js +61 -0
  482. package/dist/editor/sidebar/WorkboxFilters.js.map +1 -0
  483. package/dist/editor/sidebar/WorkspaceRail.js +1 -1
  484. package/dist/editor/sidebar/useSharedComponentPublishState.js.map +1 -1
  485. package/dist/editor/template-wizard/TemplateBuilderDialog.js +1 -1
  486. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +1 -1
  487. package/dist/editor/tree-indicators/GutterColumns.js +1 -1
  488. package/dist/editor/tree-indicators/GutterContext.js +2 -2
  489. package/dist/editor/tree-indicators/GutterContext.js.map +1 -1
  490. package/dist/editor/ui/DragPreview.js.map +1 -1
  491. package/dist/editor/ui/HomeListRow.js +1 -1
  492. package/dist/editor/ui/HomeListRow.js.map +1 -1
  493. package/dist/editor/ui/ItemCollectionEditor.js +1 -1
  494. package/dist/editor/ui/ItemNameDialogNew.d.ts +11 -0
  495. package/dist/editor/ui/ItemNameDialogNew.js +12 -7
  496. package/dist/editor/ui/ItemNameDialogNew.js.map +1 -1
  497. package/dist/editor/ui/ItemSearch.js +1 -1
  498. package/dist/editor/ui/PerfectTree.d.ts +5 -1
  499. package/dist/editor/ui/PerfectTree.js +7 -5
  500. package/dist/editor/ui/PerfectTree.js.map +1 -1
  501. package/dist/editor/ui/PublishDialog.js +1 -1
  502. package/dist/editor/ui/PublishItemDialog.js +1 -1
  503. package/dist/editor/ui/PublishRestrictionsDialog.js +2 -2
  504. package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
  505. package/dist/editor/ui/RemoveComponentsConfirmMessage.js +1 -1
  506. package/dist/editor/ui/SimpleIconButton.d.ts +1 -1
  507. package/dist/editor/ui/SimpleTable.d.ts +5 -1
  508. package/dist/editor/ui/SimpleTable.js +5 -1
  509. package/dist/editor/ui/SimpleTable.js.map +1 -1
  510. package/dist/editor/ui/Spinner.js +1 -1
  511. package/dist/editor/ui/Spinner.js.map +1 -1
  512. package/dist/editor/ui/WorkboxItemsTable.js +49 -20
  513. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  514. package/dist/editor/utils/itemutils.js +0 -3
  515. package/dist/editor/utils/itemutils.js.map +1 -1
  516. package/dist/editor/utils/selectionContext.js.map +1 -1
  517. package/dist/editor/utils/sitecoreDate.js +8 -2
  518. package/dist/editor/utils/sitecoreDate.js.map +1 -1
  519. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -0
  520. package/dist/editor/version-diff/versionDiffGeometryKeys.js +16 -0
  521. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -0
  522. package/dist/editor/version-diff/versionDiffHighlightStyles.d.ts +6 -0
  523. package/dist/editor/version-diff/versionDiffHighlightStyles.js +6 -0
  524. package/dist/editor/version-diff/versionDiffHighlightStyles.js.map +1 -1
  525. package/dist/editor/version-diff/versionDiffTargets.d.ts +40 -1
  526. package/dist/editor/version-diff/versionDiffTargets.js +176 -15
  527. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  528. package/dist/editor/views/ItemEditor.js +1 -1
  529. package/dist/editor/views/ItemEditorPane.js +1 -1
  530. package/dist/editor/views/ItemEditorPane.js.map +1 -1
  531. package/dist/editor/views/SingleEditView.js +1 -1
  532. package/dist/lib/pointerDrag.js.map +1 -1
  533. package/dist/lib/safelist.js +1 -1
  534. package/dist/licensing/FeatureGate.d.ts +1 -1
  535. package/dist/licensing/LicenseContext.js.map +1 -1
  536. package/dist/licensing/LicenseOverlay.js +1 -1
  537. package/dist/logging/consolePrefix.js.map +1 -1
  538. package/dist/revision.d.ts +2 -2
  539. package/dist/revision.js +2 -2
  540. package/dist/setup/services/setupWizardService.d.ts +3 -56
  541. package/dist/setup/services/setupWizardService.js +0 -43
  542. package/dist/setup/services/setupWizardService.js.map +1 -1
  543. package/dist/setup/wizard/steps/ImportModelDialog.js +1 -1
  544. package/dist/splash-screen/ModernSplashScreen.js +3 -19
  545. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  546. package/dist/splash-screen/NewPage.js +1 -1
  547. package/dist/splash-screen/RecentPages.js +1 -1
  548. package/dist/task-board/TaskBoardWorkspace.js +5 -0
  549. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  550. package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
  551. package/dist/task-board/components/ProjectDashboard.js +1 -1
  552. package/dist/task-board/components/ProjectGoalsPanel.js +1 -1
  553. package/dist/task-board/components/ProjectSettingsDialog.js +1 -1
  554. package/dist/task-board/components/TaskBoardBreadcrumb.js +1 -1
  555. package/dist/task-board/components/TaskBoardProjectListSidebar.js +1 -1
  556. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  557. package/dist/task-board/components/TaskBoardTitlebar.js +1 -1
  558. package/dist/task-board/components/TaskDetailPanel.js +1 -1
  559. package/dist/task-board/components/TaskReviewActions.js +1 -1
  560. package/dist/task-board/components/TaskRow.js +1 -1
  561. package/dist/task-board/components/TaskboardPersistentLogPanel.js +1 -1
  562. package/dist/task-board/components/WizardCommunicationCenter.js +1 -1
  563. package/dist/task-board/components/WizardTask.js +1 -1
  564. package/dist/task-board/components/WizardTaskDetailsPanel.js +1 -1
  565. package/dist/task-board/services/goalService.d.ts +1 -14
  566. package/dist/task-board/services/goalService.js +0 -10
  567. package/dist/task-board/services/goalService.js.map +1 -1
  568. package/dist/task-board/services/taskService.d.ts +0 -11
  569. package/dist/task-board/services/taskService.js +0 -3
  570. package/dist/task-board/services/taskService.js.map +1 -1
  571. package/dist/task-board/views/DependencyGraphView.d.ts +13 -0
  572. package/dist/task-board/views/DependencyGraphView.js +62 -11
  573. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  574. package/dist/task-board/views/ListView.js +1 -1
  575. package/dist/tour/Tour.js +1 -1
  576. package/dist/tour/Tour.js.map +1 -1
  577. package/dist/tour/default-tour.js +1 -1
  578. package/dist/tour/preview-tour.js +1 -1
  579. package/dist/types.d.ts +33 -9
  580. package/package.json +3 -2
  581. package/styles.css +11 -4
  582. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.d.ts +0 -5
  583. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js +0 -12
  584. package/dist/editor/ai/terminal/components/AgentEditHistoryButton.js.map +0 -1
  585. package/dist/editor/ai/terminal/components/AgentThinkingDots.d.ts +0 -5
  586. package/dist/editor/ai/terminal/components/AgentThinkingDots.js +0 -9
  587. package/dist/editor/ai/terminal/components/AgentThinkingDots.js.map +0 -1
  588. package/dist/editor/reviews/CommentsAndFeedback.d.ts +0 -8
  589. package/dist/editor/reviews/CommentsAndFeedback.js +0 -17
  590. package/dist/editor/reviews/CommentsAndFeedback.js.map +0 -1
  591. package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +0 -53
  592. package/dist/editor/reviews/CreateReviewDetailsStep.js +0 -77
  593. package/dist/editor/reviews/CreateReviewDetailsStep.js.map +0 -1
  594. package/dist/splash-screen/ParheliaAssistantChat.d.ts +0 -8
  595. package/dist/splash-screen/ParheliaAssistantChat.js +0 -507
  596. package/dist/splash-screen/ParheliaAssistantChat.js.map +0 -1
  597. package/dist/splash-screen/SplashScreenAgentContext.d.ts +0 -28
  598. package/dist/splash-screen/SplashScreenAgentContext.js +0 -51
  599. package/dist/splash-screen/SplashScreenAgentContext.js.map +0 -1
@@ -0,0 +1,291 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { Brain, Lock, Pencil, Plus, RefreshCw } from "lucide-react";
4
+ import { Button } from "../../../components/ui/button";
5
+ import { DeleteIcon } from "../../../components/ui/delete-icon";
6
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "../../../components/ui/alert-dialog";
7
+ import { SettingsPanelLayout } from "../SettingsPanelLayout";
8
+ import { SearchInput } from "../../../components/SearchInput";
9
+ import { cn } from "../../../lib/utils";
10
+ import { Splitter } from "../../ui/Splitter";
11
+ import { LoadingState } from "../../ui/LoadingState";
12
+ import { SimpleIconButton } from "../../ui/SimpleIconButton";
13
+ import { formatDateTime } from "../../utils";
14
+ import { useRequiredSettingsHeaderActions } from "../SettingsHeaderActionsContext";
15
+ import { loadAiProfiles } from "../../services/aiService";
16
+ import { deleteAgentMemory, getSubtreeMemories, listMyAgentMemories, listSubtreeMemoryScopes, memoryLanguageBadges, } from "../../services/agentService";
17
+ import { MemoryEntryDialog, } from "./MemoryEntryDialog";
18
+ /**
19
+ * Management UI for agent memories.
20
+ *
21
+ * Two kinds live here because they share one store and one prompt pipeline:
22
+ * - Content memories, attached to a content item and inherited by everything below it. This
23
+ * is where tone of voice is authored.
24
+ * - The signed-in user's personal memories, grouped by agent profile.
25
+ *
26
+ * Sits in the AI settings group rather than Personal, because content memories are shared.
27
+ *
28
+ * All creation and editing goes through {@link MemoryEntryDialog}; this panel owns every
29
+ * entry list itself so counts and the left list stay consistent without cross-component
30
+ * syncing. (The chat tray's compact AgentMemoryPanel is intentionally not reused here.)
31
+ */
32
+ export function MemoriesPanel() {
33
+ const [state, setState] = useState("loading");
34
+ const [error, setError] = useState(null);
35
+ const [scopes, setScopes] = useState([]);
36
+ const [personalMemories, setPersonalMemories] = useState([]);
37
+ const [profiles, setProfiles] = useState([]);
38
+ const [searchQuery, setSearchQuery] = useState("");
39
+ const [selection, setSelection] = useState(null);
40
+ const [dialogTarget, setDialogTarget] = useState(null);
41
+ const [pendingDelete, setPendingDelete] = useState(null);
42
+ const setSettingsHeaderActions = useRequiredSettingsHeaderActions();
43
+ // Entries of the selected scope. Owned here (not by the detail pane) so saves and
44
+ // deletes can update the list and the left column's counts in one place.
45
+ const [scopeEntries, setScopeEntries] = useState([]);
46
+ const [scopeCanWrite, setScopeCanWrite] = useState(false);
47
+ const [entriesState, setEntriesState] = useState("loading");
48
+ const [entriesError, setEntriesError] = useState(null);
49
+ const [entriesRefresh, setEntriesRefresh] = useState(0);
50
+ const load = useCallback(async () => {
51
+ try {
52
+ setState("loading");
53
+ const [scopeResult, personalResult, profileList] = await Promise.all([
54
+ listSubtreeMemoryScopes({ take: 200 }),
55
+ listMyAgentMemories(0, 200),
56
+ // Names for the personal grouping; a failure here must not blank the panel.
57
+ loadAiProfiles().catch(() => []),
58
+ ]);
59
+ if (!scopeResult.success) {
60
+ throw new Error(scopeResult.error || "Failed to load memory scopes");
61
+ }
62
+ const scopeList = scopeResult.scopes ?? [];
63
+ setScopes(scopeList);
64
+ setPersonalMemories(personalResult.memories ?? []);
65
+ setProfiles(profileList);
66
+ setError(null);
67
+ setState("success");
68
+ // Land the user on something real instead of an empty "select on the left" pane.
69
+ setSelection((prev) => prev ??
70
+ (scopeList.length > 0
71
+ ? { kind: "scope", scopeId: scopeList[0].scopeId }
72
+ : { kind: "personal" }));
73
+ }
74
+ catch (err) {
75
+ console.error("Failed to load memories", err);
76
+ setError(err instanceof Error ? err.message : "Failed to load memories");
77
+ setState("error");
78
+ }
79
+ }, []);
80
+ useEffect(() => {
81
+ void load();
82
+ }, [load]);
83
+ const selectedScopeId = selection?.kind === "scope" ? selection.scopeId : null;
84
+ useEffect(() => {
85
+ if (!selectedScopeId)
86
+ return;
87
+ let cancelled = false;
88
+ setEntriesState("loading");
89
+ setEntriesError(null);
90
+ getSubtreeMemories({ scopeId: selectedScopeId, includeInherited: false })
91
+ .then((result) => {
92
+ if (cancelled)
93
+ return;
94
+ if (result.success) {
95
+ setScopeEntries(result.memories ?? []);
96
+ setScopeCanWrite(result.canWrite ?? false);
97
+ setEntriesState("success");
98
+ }
99
+ else {
100
+ setEntriesError(result.error || "Failed to load memories");
101
+ setEntriesState("error");
102
+ }
103
+ })
104
+ .catch((err) => {
105
+ if (cancelled)
106
+ return;
107
+ console.error("Failed to load content memories", err);
108
+ setEntriesError(err instanceof Error ? err.message : "Failed to load memories");
109
+ setEntriesState("error");
110
+ });
111
+ return () => {
112
+ cancelled = true;
113
+ };
114
+ }, [selectedScopeId, entriesRefresh]);
115
+ const filteredScopes = useMemo(() => {
116
+ const query = searchQuery.trim().toLowerCase();
117
+ if (!query)
118
+ return scopes;
119
+ return scopes.filter((scope) => scope.name?.toLowerCase().includes(query) ||
120
+ scope.path?.toLowerCase().includes(query));
121
+ }, [scopes, searchQuery]);
122
+ const addGuidanceButton = useMemo(() => (_jsxs(Button, { size: "sm", variant: "default", onClick: () => setDialogTarget({ kind: "guidance" }), disabled: state === "loading", "data-testid": "memories-panel-new-guidance", title: "Add content memory", children: [_jsx(Plus, { className: "mr-1 h-4 w-4", strokeWidth: 1 }), "New memory"] })), [state]);
123
+ // Surface the primary action in the settings header bar (desktop only; the toolbar below
124
+ // carries a mobile duplicate).
125
+ useEffect(() => {
126
+ if (!setSettingsHeaderActions)
127
+ return;
128
+ setSettingsHeaderActions(addGuidanceButton);
129
+ return () => {
130
+ setSettingsHeaderActions(null);
131
+ };
132
+ }, [addGuidanceButton, setSettingsHeaderActions]);
133
+ const setScopeCount = useCallback((scopeId, count) => {
134
+ setScopes((prev) => {
135
+ if (count === 0) {
136
+ // A scope only exists in this list because it carries memories.
137
+ return prev.filter((s) => s.scopeId !== scopeId);
138
+ }
139
+ return prev.map((s) => s.scopeId === scopeId ? { ...s, entryCount: count } : s);
140
+ });
141
+ if (count === 0 && selectedScopeId === scopeId) {
142
+ setSelection(null);
143
+ }
144
+ }, [selectedScopeId]);
145
+ const handleDialogSaved = useCallback(async (memory, scopeId) => {
146
+ if (!dialogTarget)
147
+ return;
148
+ if (dialogTarget.kind === "personal") {
149
+ setPersonalMemories((prev) => {
150
+ const index = prev.findIndex((m) => m.id === memory.id);
151
+ if (index === -1)
152
+ return [memory, ...prev];
153
+ const next = [...prev];
154
+ next[index] = memory;
155
+ return next;
156
+ });
157
+ return;
158
+ }
159
+ // Saved into the scope that is already open: update in place.
160
+ if (scopeId && scopeId === selectedScopeId) {
161
+ setScopeEntries((prev) => {
162
+ const index = prev.findIndex((m) => m.id === memory.id);
163
+ const next = index === -1
164
+ ? [memory, ...prev]
165
+ : prev.map((m, i) => (i === index ? memory : m));
166
+ if (index === -1)
167
+ setScopeCount(scopeId, next.length);
168
+ return next;
169
+ });
170
+ return;
171
+ }
172
+ // A newly picked scope: only the server can resolve the item's
173
+ // name, path and write access, so reload and select it.
174
+ await load();
175
+ if (scopeId) {
176
+ setSelection({ kind: "scope", scopeId });
177
+ setEntriesRefresh((n) => n + 1);
178
+ }
179
+ }, [dialogTarget, selectedScopeId, setScopeCount, load]);
180
+ const deleteEntry = useCallback(async (entry) => {
181
+ try {
182
+ const result = await deleteAgentMemory(entry.id);
183
+ if (!result.success) {
184
+ setError(result.error || "Failed to delete");
185
+ return;
186
+ }
187
+ if (entry.scopeId) {
188
+ setScopeEntries((prev) => {
189
+ const next = prev.filter((m) => m.id !== entry.id);
190
+ setScopeCount(entry.scopeId, next.length);
191
+ return next;
192
+ });
193
+ }
194
+ else {
195
+ setPersonalMemories((prev) => prev.filter((m) => m.id !== entry.id));
196
+ }
197
+ }
198
+ catch (err) {
199
+ console.error("Failed to delete memory", err);
200
+ setError(err instanceof Error ? err.message : "Failed to delete");
201
+ }
202
+ }, [setScopeCount]);
203
+ // Confirmation is rendered by this panel itself: the settings workspace has no
204
+ // editor shell, so editContext.confirm silently does nothing there (other panels
205
+ // fell back to window.confirm for the same reason).
206
+ const confirmDelete = useCallback((entry) => {
207
+ setPendingDelete(entry);
208
+ }, []);
209
+ const profileName = useCallback((profileId) => {
210
+ const profile = profiles.find((p) => p.id?.toLowerCase() === profileId.toLowerCase());
211
+ return profile?.displayTitle || profile?.name || "Unknown profile";
212
+ }, [profiles]);
213
+ const personalByProfile = useMemo(() => {
214
+ const grouped = new Map();
215
+ for (const memory of personalMemories) {
216
+ const key = memory.profileId ?? "unknown";
217
+ const existing = grouped.get(key);
218
+ if (existing)
219
+ existing.push(memory);
220
+ else
221
+ grouped.set(key, [memory]);
222
+ }
223
+ return grouped;
224
+ }, [personalMemories]);
225
+ const selectedScope = selection?.kind === "scope"
226
+ ? scopes.find((s) => s.scopeId === selection.scopeId)
227
+ : undefined;
228
+ const listContent = (_jsx(SettingsPanelLayout, { children: _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", children: [_jsxs("div", { className: "shrink-0 px-4 py-3", children: [_jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-center", children: [_jsx(SearchInput, { value: searchQuery, onChange: setSearchQuery, placeholder: "Filter by name or path...", className: "w-full" }), _jsx("div", { className: "shrink-0 md:hidden", children: addGuidanceButton }), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => void load(), title: "Refresh", children: _jsx(RefreshCw, { className: "h-4 w-4", strokeWidth: 1 }) })] }), error ? (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red mt-2 rounded border p-2 text-xs whitespace-pre-wrap", children: error })) : null] }), _jsx("div", { className: "px-4 py-3", children: state === "loading" ? (_jsx(LoadingState, { message: "Loading memories..." })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-neutral-grey-50 mb-1 px-2 text-[11px] font-medium uppercase", children: "Content memories" }), filteredScopes.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center px-6 py-8 text-center", children: [_jsx(Brain, { className: "text-neutral-grey-50 mb-3 h-9 w-9", strokeWidth: 1 }), _jsx("p", { className: "text-neutral-grey-50 text-sm font-medium", children: scopes.length === 0
229
+ ? "No content memories yet"
230
+ : "No matching content" }), _jsx("p", { className: "text-neutral-grey-50 mt-1 text-xs", children: scopes.length === 0
231
+ ? "Add tone of voice or terminology to a site, and every AI feature working below it will follow it."
232
+ : "Try a different search term." })] })) : (_jsx("div", { className: "divide-border-default divide-y", children: filteredScopes.map((scope) => {
233
+ const isSelected = selection?.kind === "scope" &&
234
+ selection.scopeId === scope.scopeId;
235
+ return (_jsxs("button", { type: "button", onClick: () => setSelection({
236
+ kind: "scope",
237
+ scopeId: scope.scopeId,
238
+ }), className: cn("hover:bg-neutral-grey-5 flex w-full flex-col items-start gap-0.5 px-2 py-2 text-left", isSelected && "bg-neutral-grey-5"), "data-testid": "memories-panel-scope", children: [_jsxs("span", { className: "text-neutral-grey-100 flex items-center gap-1.5 truncate text-sm font-medium", children: [scope.name || scope.path || scope.scopeId, !scope.canWrite && (_jsx(Lock, { className: "text-neutral-grey-50 h-3 w-3 shrink-0", strokeWidth: 1.5, "aria-label": "Read-only" }))] }), _jsx("span", { className: "text-neutral-grey-50 truncate text-[11px]", children: scope.path }), _jsxs("span", { className: "text-neutral-grey-50 text-[11px]", children: [scope.entryCount, " ", scope.entryCount === 1 ? "entry" : "entries"] })] }, scope.scopeId));
239
+ }) })), _jsx("div", { className: "text-neutral-grey-50 mt-4 mb-1 px-2 text-[11px] font-medium uppercase", children: "My memories" }), _jsxs("button", { type: "button", onClick: () => setSelection({ kind: "personal" }), className: cn("hover:bg-neutral-grey-5 flex w-full flex-col items-start gap-0.5 px-2 py-2 text-left", selection?.kind === "personal" && "bg-neutral-grey-5"), "data-testid": "memories-panel-personal", children: [_jsx("span", { className: "text-neutral-grey-100 text-sm font-medium", children: "Personal memories" }), _jsxs("span", { className: "text-neutral-grey-50 text-[11px]", children: [personalMemories.length, " ", personalMemories.length === 1 ? "entry" : "entries", " across", " ", personalByProfile.size, " ", personalByProfile.size === 1 ? "profile" : "profiles"] })] })] })) })] }) }));
240
+ const scopeDetail = selectedScopeId && (_jsxs("div", { className: "py-3", "data-testid": "memories-scope-detail", children: [_jsxs("div", { className: "flex items-start justify-between gap-3 px-4 pb-1", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-neutral-grey-100 truncate text-sm font-medium", children: selectedScope?.name || "Content memories" }), _jsx("div", { className: "text-neutral-grey-50 truncate text-[11px]", title: selectedScope?.path ?? undefined, children: selectedScope?.path })] }), entriesState === "success" && scopeCanWrite && (_jsxs(Button, { size: "sm", variant: "outline", className: "shrink-0", onClick: () => setDialogTarget({
241
+ kind: "guidance",
242
+ scopeId: selectedScopeId,
243
+ scopeLabel: selectedScope?.path || selectedScope?.name || undefined,
244
+ }), "data-testid": "memories-scope-add", children: [_jsx(Plus, { className: "mr-1 h-4 w-4", strokeWidth: 1 }), "Add memory"] }))] }), _jsxs("div", { className: "text-neutral-grey-50 px-4 pb-2 text-xs", children: ["Applies to this content and everything below it \u2014 in every language, or only the languages shown on the entry. Treated as a strong preference, not an enforced rule.", entriesState === "success" && !scopeCanWrite && (_jsxs("span", { className: "text-neutral-grey-100", children: [" ", "You don't have write access to this content, so these memories are read-only for you."] }))] }), entriesState === "loading" ? (_jsx("div", { className: "px-4 py-2", children: _jsx(LoadingState, { message: "Loading memories..." }) })) : entriesState === "error" ? (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red mx-4 my-2 rounded border p-2 text-xs whitespace-pre-wrap", children: entriesError })) : scopeEntries.length === 0 ? (_jsx("div", { className: "text-neutral-grey-50 px-4 py-4 text-xs", children: "No memories on this content yet." })) : (_jsx("div", { className: "divide-border-default divide-y", children: scopeEntries.map((entry) => (_jsx(MemoryEntryRow, { entry: entry, canEdit: scopeCanWrite, onEdit: () => setDialogTarget({
245
+ kind: "guidance",
246
+ scopeId: selectedScopeId,
247
+ scopeLabel: selectedScope?.path || selectedScope?.name || undefined,
248
+ entry,
249
+ }), onDelete: () => confirmDelete(entry) }, entry.id))) }))] }));
250
+ const personalDetail = (_jsxs("div", { className: "py-3", "data-testid": "memories-personal-detail", children: [_jsxs("div", { className: "px-4 pb-1", children: [_jsx("div", { className: "text-neutral-grey-100 text-sm font-medium", children: "Personal memories" }), _jsx("div", { className: "text-neutral-grey-50 text-xs", children: "Facts and preferences agents keep in mind when working with you. Agents add to these as you work with them; only you see them." })] }), personalByProfile.size === 0 ? (_jsx("div", { className: "text-neutral-grey-50 px-4 py-4 text-xs", children: "No personal memories yet. Agents store durable facts here as you work with them." })) : (Array.from(personalByProfile.entries()).map(([profileId, entries]) => (_jsxs("div", { className: "mt-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-4", children: [_jsx("div", { className: "text-neutral-grey-50 text-[11px] font-medium uppercase", children: profileName(profileId) }), _jsx(SimpleIconButton, { icon: _jsx(Plus, { className: "h-4 w-4", strokeWidth: 1 }), label: "Add memory", onClick: () => setDialogTarget({
251
+ kind: "personal",
252
+ profileId,
253
+ profileName: profileName(profileId),
254
+ }), "data-testid": "memories-personal-add" })] }), _jsx("div", { className: "divide-border-default divide-y", children: entries.map((entry) => (_jsx(MemoryEntryRow, { entry: entry, canEdit: true, onEdit: () => setDialogTarget({
255
+ kind: "personal",
256
+ profileId,
257
+ profileName: profileName(profileId),
258
+ entry,
259
+ }), onDelete: () => confirmDelete(entry) }, entry.id))) })] }, profileId))))] }));
260
+ const detailContent = (_jsx(SettingsPanelLayout, { children: _jsx("div", { className: "overflow-hidden rounded-lg bg-white", children: selection?.kind === "scope" ? (scopeDetail) : selection?.kind === "personal" ? (personalDetail) : (_jsx("div", { className: "text-neutral-grey-50 px-4 py-8 text-sm", children: "Select content on the left to see the memories that apply to it, or choose your personal memories." })) }) }));
261
+ const panels = [
262
+ { name: "list", content: listContent, defaultSize: 40, minSize: 25 },
263
+ { name: "detail", content: detailContent, defaultSize: 60, minSize: 30 },
264
+ ];
265
+ return (_jsxs(_Fragment, { children: [_jsx(Splitter, { panels: panels, localStorageKey: "memories-panel-splitter-v1", direction: "horizontal" }), _jsx(MemoryEntryDialog, { target: dialogTarget, onClose: () => setDialogTarget(null), onSaved: handleDialogSaved }), _jsx(AlertDialog, { open: !!pendingDelete, onOpenChange: (open) => !open && setPendingDelete(null), children: _jsxs(AlertDialogContent, { "data-testid": "memories-delete-confirm", children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete memory" }), _jsx(AlertDialogDescription, { children: pendingDelete?.scopeId
266
+ ? "Delete this memory? It applies to everyone working below this content, and this cannot be undone."
267
+ : "Delete this memory? This action cannot be undone." })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Cancel" }), _jsx(AlertDialogAction, { "data-testid": "memories-delete-confirm-accept", onClick: () => {
268
+ const entry = pendingDelete;
269
+ setPendingDelete(null);
270
+ if (entry)
271
+ void deleteEntry(entry);
272
+ }, children: "Delete" })] })] }) })] }));
273
+ }
274
+ /**
275
+ * One memory entry in a detail list. The content is intentionally only available
276
+ * in the edit dialog, keeping potentially sensitive or lengthy memories out of
277
+ * the list.
278
+ */
279
+ function MemoryEntryRow({ entry, canEdit, onEdit, onDelete, }) {
280
+ const languageBadges = memoryLanguageBadges(entry.languages);
281
+ const isOnDemand = entry.loadMode === "ondemand";
282
+ const updated = new Date(entry.updatedDate);
283
+ const meta = [
284
+ isNaN(updated.getTime()) ? null : `Updated ${formatDateTime(updated)}`,
285
+ entry.createdBy || null,
286
+ ]
287
+ .filter(Boolean)
288
+ .join(" · ");
289
+ return (_jsxs("div", { className: "flex items-start gap-3 px-4 py-3", "data-testid": "memories-entry", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [(entry.title || languageBadges.length > 0 || isOnDemand) && (_jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [entry.title && (_jsx("span", { className: "text-neutral-grey-100 text-sm font-medium", children: entry.title })), isOnDemand && (_jsx("span", { className: "border-border-default text-neutral-grey-50 rounded-full border px-1.5 text-[10px]", "data-testid": "memories-entry-load-mode", title: "Not in every prompt - the agent loads it by title when relevant", children: "On demand" })), languageBadges.map((badge) => (_jsx("span", { className: "border-border-default text-neutral-grey-50 rounded-full border px-1.5 text-[10px]", "data-testid": "memories-entry-language", children: badge }, badge)))] })), meta && (_jsx("div", { className: "text-neutral-grey-50 mt-1 text-[11px]", children: meta }))] }), canEdit && (_jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(SimpleIconButton, { icon: _jsx(Pencil, { className: "h-4 w-4", strokeWidth: 1 }), label: "Edit", onClick: onEdit, "data-testid": "memories-entry-edit" }), _jsx(SimpleIconButton, { icon: _jsx(DeleteIcon, { size: "lg" }), label: "Delete", onClick: onDelete, "data-testid": "memories-entry-delete" })] }))] }));
290
+ }
291
+ //# sourceMappingURL=MemoriesPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoriesPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/MemoriesPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import { type AgentMemoryEntry } from "../../services/agentService";
3
+ export declare const CONTENT_ROOT_ID = "0de95ae4-41ab-4d01-9eb0-67441b7c2450";
4
+ /**
5
+ * What the dialog creates or edits.
6
+ *
7
+ * The `guidance` kind is a content memory: attached to a content item, shared by everyone
8
+ * working below it. ("guidance" survives as the discriminant because the API scope name did.)
9
+ *
10
+ * - `guidance` without `entry`: create. The scope is always pickable; `scopeId` only
11
+ * pre-selects the picker (e.g. when adding from an open scope's detail pane).
12
+ * - `guidance` with `entry`: edit. The scope stays pickable - choosing a different item
13
+ * moves the memory there (the server authorizes write access on both ends).
14
+ * - `personal`: one of the user's own memories under an agent profile.
15
+ */
16
+ export type MemoryEntryDialogTarget = {
17
+ kind: "guidance";
18
+ scopeId?: string;
19
+ scopeLabel?: string | null;
20
+ entry?: AgentMemoryEntry;
21
+ } | {
22
+ kind: "personal";
23
+ profileId: string;
24
+ profileName?: string;
25
+ entry?: AgentMemoryEntry;
26
+ };
27
+ interface MemoryEntryDialogProps {
28
+ /** Non-null opens the dialog. */
29
+ target: MemoryEntryDialogTarget | null;
30
+ onClose: () => void;
31
+ /**
32
+ * Called after a successful save with the stored entry. For guidance,
33
+ * `scopeId` is the scope the entry was attached to.
34
+ */
35
+ onSaved: (memory: AgentMemoryEntry, scopeId?: string) => void | Promise<void>;
36
+ }
37
+ /**
38
+ * The one editor for memory entries in Settings - creating and editing, guidance and
39
+ * personal, all use this dialog so the fields, sizing and hints never diverge.
40
+ *
41
+ * (The chat tray deliberately does not use it: tray panels live inside a popover that
42
+ * unmounts on dismiss, so the tray keeps its small inline form.)
43
+ */
44
+ export declare function MemoryEntryDialog({ target, onClose, onSaved, }: MemoryEntryDialogProps): React.JSX.Element;
45
+ export {};
@@ -0,0 +1,167 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from "react";
3
+ import { Brain } from "lucide-react";
4
+ import { toast } from "sonner";
5
+ import { Button } from "../../../components/ui/button";
6
+ import { ActionButton } from "../../../components/ActionButton";
7
+ import { Input } from "../../../components/ui/input";
8
+ import { Textarea } from "../../../components/ui/textarea";
9
+ import { Dialog, DialogContent, DialogFooter, } from "../../../components/ui/dialog";
10
+ import { StyledDialogTitle } from "../../../components/ui/styled-dialog-title";
11
+ import { cn } from "../../../lib/utils";
12
+ import { LanguageSelectionGrid } from "../../../components/ui/LanguageSelectionGrid";
13
+ import { TreeItemPicker } from "../../personalization/TreeItemPicker";
14
+ import { saveAgentMemory, MEMORY_CONTENT_LIMITS, } from "../../services/agentService";
15
+ import { getLanguages } from "../../services/contentService";
16
+ export const CONTENT_ROOT_ID = "0de95ae4-41ab-4d01-9eb0-67441b7c2450"; // /sitecore/content
17
+ /**
18
+ * The one editor for memory entries in Settings - creating and editing, guidance and
19
+ * personal, all use this dialog so the fields, sizing and hints never diverge.
20
+ *
21
+ * (The chat tray deliberately does not use it: tray panels live inside a popover that
22
+ * unmounts on dismiss, so the tray keeps its small inline form.)
23
+ */
24
+ export function MemoryEntryDialog({ target, onClose, onSaved, }) {
25
+ const [scopeId, setScopeId] = useState("");
26
+ const [languages, setLanguages] = useState([]);
27
+ const [loadMode, setLoadMode] = useState("eager");
28
+ const [title, setTitle] = useState("");
29
+ const [content, setContent] = useState("");
30
+ const [saving, setSaving] = useState(false);
31
+ const [error, setError] = useState(null);
32
+ // The system-wide language list, not editContext.itemLanguages: this dialog edits scopes
33
+ // that have nothing to do with the loaded item, and Settings has no editor shell anyway.
34
+ const [availableLanguages, setAvailableLanguages] = useState([]);
35
+ const languagesRequestedRef = useRef(false);
36
+ // Render from the last non-null target so the labels don't flash to the
37
+ // fallback wording while the close animation plays after target goes null.
38
+ const lastTargetRef = useRef(null);
39
+ if (target)
40
+ lastTargetRef.current = target;
41
+ const view = target ?? lastTargetRef.current;
42
+ const isGuidance = view?.kind === "guidance";
43
+ const isEdit = !!view?.entry;
44
+ // Seed the drafts whenever a new target opens the dialog.
45
+ useEffect(() => {
46
+ if (!target)
47
+ return;
48
+ setScopeId(target.kind === "guidance"
49
+ ? (target.entry?.scopeId ?? target.scopeId ?? "")
50
+ : "");
51
+ setLanguages(target.kind === "guidance" ? (target.entry?.languages ?? []) : []);
52
+ setLoadMode(target.entry?.loadMode ?? "eager");
53
+ setTitle(target.entry?.title ?? "");
54
+ setContent(target.entry?.content ?? "");
55
+ setError(null);
56
+ }, [target]);
57
+ // Fetched once, the first time a guidance target opens. A failure just leaves the grid
58
+ // empty: saving still works and the entry stays unrestricted, which is the safe default.
59
+ useEffect(() => {
60
+ if (target?.kind !== "guidance" || languagesRequestedRef.current)
61
+ return;
62
+ languagesRequestedRef.current = true;
63
+ void (async () => {
64
+ try {
65
+ const result = await getLanguages();
66
+ const list = (result?.data ??
67
+ result ??
68
+ []);
69
+ setAvailableLanguages(Array.isArray(list) ? list : []);
70
+ }
71
+ catch (err) {
72
+ console.error("Failed to load languages for memory entry dialog", err);
73
+ }
74
+ })();
75
+ }, [target]);
76
+ const languageOptions = useMemo(() => availableLanguages.map((language) => ({
77
+ code: language.languageCode,
78
+ name: language.name,
79
+ icon: language.icon,
80
+ })), [availableLanguages]);
81
+ const maxContentLength = MEMORY_CONTENT_LIMITS[loadMode];
82
+ // maxLength does not truncate a value that is already in the field, so switching an
83
+ // over-long entry back to "Always apply" has to block saving rather than silently send
84
+ // something the server will reject.
85
+ const overContentLimit = content.trim().length > maxContentLength;
86
+ const missingOnDemandTitle = loadMode === "ondemand" && !title.trim();
87
+ const canSave = !!target &&
88
+ !!content.trim() &&
89
+ !overContentLimit &&
90
+ !missingOnDemandTitle &&
91
+ (target.kind !== "guidance" || !!scopeId) &&
92
+ !saving;
93
+ const handleSave = async () => {
94
+ if (!target || !canSave)
95
+ return;
96
+ try {
97
+ setSaving(true);
98
+ setError(null);
99
+ const result = await saveAgentMemory({
100
+ id: target.entry?.id,
101
+ ...(target.kind === "personal"
102
+ ? { profileId: target.profileId }
103
+ : // Always explicit: this dialog knows the full selection, so an empty array
104
+ // deliberately clears a restriction the editor just removed.
105
+ { scopeId, entryLanguages: languages }),
106
+ loadMode,
107
+ title: title.trim() || null,
108
+ content: content.trim(),
109
+ });
110
+ if (!result.success || !result.memory) {
111
+ setError(result.error || "Failed to save");
112
+ return;
113
+ }
114
+ toast.success(isGuidance
115
+ ? isEdit
116
+ ? "Content memory updated"
117
+ : "Content memory added"
118
+ : isEdit
119
+ ? "Memory updated"
120
+ : "Memory added");
121
+ await onSaved(result.memory, isGuidance ? scopeId : undefined);
122
+ onClose();
123
+ }
124
+ catch (err) {
125
+ console.error("Failed to save memory entry", err);
126
+ setError(err instanceof Error ? err.message : "Failed to save");
127
+ }
128
+ finally {
129
+ setSaving(false);
130
+ }
131
+ };
132
+ const dialogTitle = isGuidance
133
+ ? isEdit
134
+ ? "Edit content memory"
135
+ : "New content memory"
136
+ : isEdit
137
+ ? "Edit memory"
138
+ : "New memory";
139
+ const subtitle = isGuidance
140
+ ? "Tone of voice, terminology or style that AI should follow for a part of the content tree"
141
+ : "A durable fact or preference the agent keeps in mind when working with you";
142
+ const labelClass = "text-neutral-grey-100 block text-sm font-medium";
143
+ return (_jsx(Dialog, { open: !!target, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { className: "gap-0 p-0 sm:max-w-xl", "data-testid": "memory-entry-dialog", onKeyDown: (e) => {
144
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") {
145
+ e.preventDefault();
146
+ void handleSave();
147
+ }
148
+ }, children: [_jsx(StyledDialogTitle, { icon: _jsx(Brain, { strokeWidth: 1 }), title: dialogTitle, subtitle: subtitle }), _jsxs("div", { className: "space-y-4 overflow-y-auto px-8 pt-6 pb-6", children: [_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { htmlFor: "memory-entry-title", className: labelClass, children: ["Title", " ", _jsx("span", { className: "text-neutral-grey-50 font-normal", children: loadMode === "ondemand" ? "(required)" : "(optional)" })] }), _jsx(Input, { id: "memory-entry-title", value: title, onChange: (e) => setTitle(e.target.value), placeholder: isGuidance ? "Tone of voice" : "What this is about", maxLength: 200, "data-testid": "memory-entry-dialog-title" }), loadMode === "ondemand" && (_jsx("p", { className: "text-neutral-grey-50 text-xs", children: "The title is all the agent sees when deciding whether to load this memory, so make it descriptive." }))] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: labelClass, children: "When to apply" }), _jsx("div", { className: "border-border-default flex gap-1 rounded-[4px] border p-1", role: "radiogroup", "data-testid": "memory-entry-dialog-load-mode", children: [
149
+ ["eager", "Always apply"],
150
+ ["ondemand", "Load when relevant"],
151
+ ].map(([mode, label]) => (_jsx("button", { type: "button", role: "radio", "aria-checked": loadMode === mode, onClick: () => setLoadMode(mode), className: cn("flex-1 rounded-[3px] px-3 py-1.5 text-sm transition-colors", loadMode === mode
152
+ ? "bg-neutral-grey-10 text-neutral-grey-100 font-medium"
153
+ : "text-neutral-grey-50 hover:text-neutral-grey-100"), "data-testid": `memory-entry-dialog-load-mode-${mode}`, children: label }, mode))) }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: loadMode === "ondemand"
154
+ ? "Kept out of the everyday prompt. The agent sees the title and loads the text when it looks relevant - use this for glossaries and other long reference material."
155
+ : "Injected into every prompt, so it always applies." })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "memory-entry-content", className: labelClass, children: "Text" }), _jsx(Textarea, { id: "memory-entry-content", value: content, onChange: (e) => setContent(e.target.value), placeholder: isGuidance
156
+ ? "Address the reader as you. Keep sentences short. Never use exclamation marks."
157
+ : "What should the agent remember?", maxLength: maxContentLength, autoFocus: isEdit, className: "max-h-72 min-h-40 text-sm", "data-testid": "memory-entry-dialog-content" }), _jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("p", { className: "text-neutral-grey-50 text-xs", children: isGuidance
158
+ ? "Applies to chat agents, inline AI edits, generators and autocomplete. Treated as a strong preference, not an enforced rule."
159
+ : "Injected into the agent's system prompt. The agent can also update its own memories as you work with it." }), _jsxs("span", { className: cn("shrink-0 text-[11px] tabular-nums", overContentLimit
160
+ ? "text-feedback-red"
161
+ : "text-neutral-grey-50"), children: [content.length, "/", maxContentLength] })] }), overContentLimit && (_jsxs("p", { className: "text-feedback-red text-xs", children: ["Shorten the text to ", maxContentLength, " characters, or keep it as a \"Load when relevant\" memory."] }))] }), view?.kind === "guidance" ? (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "memory-entry-scope", className: labelClass, children: "Applies to" }), _jsx(TreeItemPicker, { value: scopeId, rootItemId: CONTENT_ROOT_ID, placeholder: "Select content...", onChange: setScopeId }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: view.entry
162
+ ? "The item this memory is attached to. Picking a different item moves the memory there."
163
+ : "The item you pick and everything below it. Pick the root of a site for site-wide tone of voice." }), _jsxs("div", { className: "space-y-2 pt-2", children: [_jsxs("label", { className: labelClass, children: ["Languages", " ", _jsx("span", { className: "text-neutral-grey-50 font-normal", children: "(optional)" })] }), _jsx(LanguageSelectionGrid, { languages: languageOptions, selectedLanguageCodes: languages, onSelectedLanguageCodesChange: setLanguages, headerless: true, testId: "memory-entry-dialog-languages", bodyClassName: "max-h-40", emptyState: "No languages available." }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Leave empty to apply in every language, or limit this memory to the selected language versions." })] })] })) : view?.kind === "personal" && view.profileName ? (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: labelClass, children: "Agent profile" }), _jsx("div", { className: "border-border-default bg-neutral-grey-5 rounded-[4px] border px-3 py-2", children: _jsx("span", { className: "text-neutral-grey-100 text-sm", children: view.profileName }) })] })) : null, error && (_jsx("div", { className: "border-feedback-red bg-feedback-red-light text-feedback-red rounded border p-2 text-xs whitespace-pre-wrap", children: error }))] }), _jsxs(DialogFooter, { className: "border-border-default gap-2 border-t pt-5 sm:gap-3", children: [_jsx(Button, { variant: "outline", onClick: onClose, disabled: saving, children: "Cancel" }), _jsx(ActionButton, { onClick: () => void handleSave(), disabled: !canSave, isLoading: saving, loadingText: "Saving...",
164
+ // Cancel inherits "lg" from the DialogFooter's ButtonSizeProvider; match it.
165
+ size: "lg", "data-testid": "memory-entry-dialog-save", children: isEdit ? "Save changes" : "Add memory" })] })] }) }));
166
+ }
167
+ //# sourceMappingURL=MemoryEntryDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryEntryDialog.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/MemoryEntryDialog.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useMemo, useCallback } from "react";
3
3
  import { Button } from "../../../components/ui/button";
4
4
  import { SettingsPanelLayout } from "../SettingsPanelLayout";