@parhelia/core 0.1.12554 → 0.1.12556

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