@parhelia/core 0.1.12565 → 0.1.12570

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 +99 -191
  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 +496 -2406
  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 -481
  123. package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
  124. package/dist/editor/ai/Agents.js +113 -161
  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 +26 -267
  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 +150 -542
  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 +100 -90
  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 +237 -770
  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 +15 -73
  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 -24
  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 -39
@@ -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,
@@ -50,7 +49,7 @@ const getToolIcon = (toolName) => {
50
49
  "remove-component": _jsx(Trash2, { strokeWidth: 1, size: 14 }),
51
50
  "move-components": _jsx(Edit, { strokeWidth: 1, size: 14 }),
52
51
  "get-placeholders": _jsx(Code, { strokeWidth: 1, size: 14 }),
53
- "get-component-schema-with-placeholders": _jsx(Code, { strokeWidth: 1, size: 14 }),
52
+ "get-component-props-and-placeholders": _jsx(Code, { strokeWidth: 1, size: 14 }),
54
53
  // Search operations
55
54
  "search-content": _jsx(Search, { strokeWidth: 1, size: 14 }),
56
55
  "search-images": _jsx(FileSearch, { strokeWidth: 1, size: 14 }),
@@ -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,129 +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" &&
246
- Number.isFinite(candidate.imageWidth)
247
- ? candidate.imageWidth
248
- : typeof nestedImage?.width === "number" &&
249
- Number.isFinite(nestedImage.width)
250
- ? nestedImage.width
251
- : undefined;
252
- const height = typeof candidate.imageHeight === "number" &&
253
- Number.isFinite(candidate.imageHeight)
254
- ? candidate.imageHeight
255
- : typeof nestedImage?.height === "number" &&
256
- Number.isFinite(nestedImage.height)
257
- ? nestedImage.height
258
- : undefined;
259
- return {
260
- src,
261
- alt: candidate.scope
262
- ? `Screenshot result (${candidate.scope})`
263
- : "Tool result image",
264
- fileName: nestedImage?.fileName || candidate.fileName,
265
- dimensions: width && height
266
- ? `${Math.round(width)} x ${Math.round(height)}`
267
- : undefined,
268
- };
269
- };
270
- const sanitizeInlineImageDataForDisplay = (value) => {
271
- if (isImageDataUrl(value)) {
272
- return "[image data URL omitted from preview]";
273
- }
274
- if (Array.isArray(value)) {
275
- let hasChanges = false;
276
- const sanitizedItems = value.map((entry) => {
277
- const sanitizedEntry = sanitizeInlineImageDataForDisplay(entry);
278
- if (sanitizedEntry !== entry) {
279
- hasChanges = true;
280
- }
281
- return sanitizedEntry;
282
- });
283
- return hasChanges ? sanitizedItems : value;
284
- }
285
- if (!value || typeof value !== "object") {
286
- return value;
287
- }
288
- const candidate = value;
289
- let hasChanges = false;
290
- const clone = {};
291
- Object.entries(candidate).forEach(([key, entryValue]) => {
292
- const sanitizedValue = sanitizeInlineImageDataForDisplay(entryValue);
293
- clone[key] = sanitizedValue;
294
- if (sanitizedValue !== entryValue) {
295
- hasChanges = true;
296
- }
297
- });
298
- return hasChanges ? clone : value;
299
- };
300
- const InlineToolResultPreview = ({ preview, }) => {
301
- 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 }))] }))] }));
302
- };
303
136
  // Helper function to render JSON or text
304
137
  const renderJsonOrText = (json) => {
305
138
  const parsed = parseJsonString(json);
@@ -308,7 +141,7 @@ const renderJsonOrText = (json) => {
308
141
  }
309
142
  // If parsing failed, display as plain text
310
143
  const jsonString = typeof json === "string" ? json : String(json);
311
- 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 }));
312
145
  };
313
146
  // Expandable panel component
314
147
  const ExpandablePanel = ({ title, children, defaultExpanded = false, actionButton, }) => {
@@ -316,15 +149,9 @@ const ExpandablePanel = ({ title, children, defaultExpanded = false, actionButto
316
149
  return (_jsxs("div", { className: "border-b border-gray-100 last:border-b-0", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex flex-1 cursor-pointer items-center gap-1.5 px-3 py-1.5 transition-colors hover:bg-gray-50/50", onClick: () => setIsExpanded(!isExpanded), children: [isExpanded ? (_jsx(ChevronDown, { size: 12, strokeWidth: 1.5, className: "text-gray-400 transition-transform" })) : (_jsx(ChevronRight, { size: 12, strokeWidth: 1.5, className: "text-gray-400 transition-transform" })), _jsx("span", { className: "text-[10px] font-medium text-gray-500", children: title })] }), actionButton && (_jsx("div", { className: "pr-2", onClick: (e) => e.stopPropagation(), children: actionButton }))] }), isExpanded && (_jsx("div", { className: "w-full overflow-auto px-3 pb-2", children: children }))] }));
317
150
  };
318
151
  // Helper function to create expandable tool call details
319
- const ToolCallDetails = memo(({ toolCall, result, }) => {
320
- const isPruned = !!toolCall.isPruned;
321
- const hasError = !!toolCall.function?.error && !isPruned;
322
- const hasOutput = !!result || hasError || isPruned;
323
- const prunedOutput = useMemo(() => {
324
- if (!isPruned)
325
- return "";
326
- return result || toolCall.function?.error || "";
327
- }, [isPruned, result, toolCall.function?.error]);
152
+ const ToolCallDetails = memo(({ toolCall, result }) => {
153
+ const hasError = toolCall.function?.error;
154
+ const hasOutput = result || hasError;
328
155
  // Memoize parsed input data to prevent re-parsing on every render
329
156
  const parsedInput = useMemo(() => {
330
157
  return parseJsonString(toolCall.function?.arguments || "");
@@ -333,31 +160,6 @@ const ToolCallDetails = memo(({ toolCall, result, }) => {
333
160
  const parsedOutput = useMemo(() => {
334
161
  return parseJsonString(result || "");
335
162
  }, [result]);
336
- const parsedPrunedOutput = useMemo(() => {
337
- return parseJsonString(prunedOutput);
338
- }, [prunedOutput]);
339
- const outputPreview = useMemo(() => {
340
- if (isPruned) {
341
- return extractInlineToolResultImage(parsedPrunedOutput ?? prunedOutput);
342
- }
343
- if (hasError) {
344
- return null;
345
- }
346
- return extractInlineToolResultImage(parsedOutput ?? (result || ""));
347
- }, [
348
- hasError,
349
- isPruned,
350
- parsedOutput,
351
- parsedPrunedOutput,
352
- prunedOutput,
353
- result,
354
- ]);
355
- const displayPrunedOutput = useMemo(() => {
356
- return sanitizeInlineImageDataForDisplay(parsedPrunedOutput ?? prunedOutput);
357
- }, [parsedPrunedOutput, prunedOutput]);
358
- const displayOutput = useMemo(() => {
359
- return sanitizeInlineImageDataForDisplay(parsedOutput ?? (result || ""));
360
- }, [parsedOutput, result]);
361
163
  // Get text to copy for input
362
164
  const inputTextToCopy = useMemo(() => {
363
165
  const args = toolCall.function?.arguments || "";
@@ -368,194 +170,63 @@ const ToolCallDetails = memo(({ toolCall, result, }) => {
368
170
  }, [toolCall.function?.arguments, parsedInput]);
369
171
  // Get text to copy for output
370
172
  const outputTextToCopy = useMemo(() => {
371
- if (isPruned) {
372
- if (parsedPrunedOutput !== null) {
373
- return JSON.stringify(parsedPrunedOutput, null, 2);
374
- }
375
- return typeof prunedOutput === "object"
376
- ? JSON.stringify(prunedOutput, null, 2)
377
- : prunedOutput;
378
- }
379
173
  if (hasError) {
380
174
  return toolCall.function?.error || "";
381
175
  }
382
176
  if (parsedOutput !== null) {
383
177
  return JSON.stringify(parsedOutput, null, 2);
384
178
  }
385
- if (typeof result === "object") {
386
- return JSON.stringify(result, null, 2);
387
- }
388
179
  return result || "";
389
- }, [
390
- hasError,
391
- isPruned,
392
- toolCall.function?.error,
393
- parsedOutput,
394
- parsedPrunedOutput,
395
- prunedOutput,
396
- result,
397
- ]);
398
- 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 &&
399
- 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 || "" })) })) }))] }));
400
182
  }, (prevProps, nextProps) => {
401
183
  // Only re-render if the data actually changed
402
184
  return (prevProps.toolCall.id === nextProps.toolCall.id &&
403
185
  prevProps.toolCall.function?.arguments ===
404
186
  nextProps.toolCall.function?.arguments &&
405
187
  prevProps.result === nextProps.result &&
406
- prevProps.toolCall.function?.error ===
407
- nextProps.toolCall.function?.error &&
408
- prevProps.toolCall.isPruned === nextProps.toolCall.isPruned);
188
+ prevProps.toolCall.function?.error === nextProps.toolCall.function?.error);
409
189
  });
410
190
  ToolCallDetails.displayName = "ToolCallDetails";
411
- export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopovers, messageId, agentId, allPendingApprovals = [], onSwitchToAutonomous, seenApprovalDialogs, onApprovalDialogShown, browserCaptureInlinePrompt, }) {
412
- 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);
413
193
  const [isSwitchingMode, setIsSwitchingMode] = useState(false);
414
- const [isGroupExpanded, setIsGroupExpanded] = useState(() => {
415
- return (toolCalls?.some((tc) => {
416
- if (!tc.requiresApproval)
417
- return false;
418
- const funcName = ("functionName" in tc
419
- ? tc.functionName
420
- : normalizeToolCall(tc).function?.name) || "";
421
- return (!funcName.includes("(approved)") && !funcName.includes("(rejected)"));
422
- }) ?? false);
423
- });
424
- const [userToggled, setUserToggled] = useState(false);
425
- const hasPendingApprovalsInGroup = useMemo(() => {
426
- if (!toolCalls)
427
- return false;
428
- return toolCalls.some((tc) => {
429
- if (!tc.requiresApproval)
430
- return false;
431
- const funcName = ("functionName" in tc
432
- ? tc.functionName
433
- : normalizeToolCall(tc).function?.name) || "";
434
- return (!funcName.includes("(approved)") && !funcName.includes("(rejected)"));
435
- });
436
- }, [toolCalls]);
437
- useEffect(() => {
438
- if (!userToggled) {
439
- setIsGroupExpanded(hasPendingApprovalsInGroup);
440
- }
441
- }, [userToggled, hasPendingApprovalsInGroup]);
442
- const groupSummary = useMemo(() => {
443
- if (!toolCalls || toolCalls.length === 0)
444
- return null;
445
- const uniqueNames = [
446
- ...new Set(toolCalls
447
- .map((tc) => {
448
- const normalized = normalizeToolCall(tc);
449
- return (("functionName" in tc
450
- ? tc.functionName
451
- : normalized.function?.name) || "")
452
- .replace(/ \(approved\)/g, "")
453
- .replace(/ \(rejected\)/g, "")
454
- .replace(/ \(pending approval\)/g, "")
455
- .trim();
456
- })
457
- .filter(Boolean)),
458
- ];
459
- const errorCount = toolCalls.filter((tc) => {
460
- const normalized = normalizeToolCall(tc);
461
- return !!normalized.function?.error && !normalized.isPruned;
462
- }).length;
463
- return { uniqueNames, errorCount };
464
- }, [toolCalls]);
465
- const shouldShowGroupBrowserCaptureInlinePrompt = useMemo(() => {
466
- if (!browserCaptureInlinePrompt || !toolCalls?.length)
467
- return false;
468
- return toolCalls.some((tc) => {
469
- const normalized = normalizeToolCall(tc);
470
- const originalFunctionName = ("functionName" in tc ? tc.functionName : normalized.function?.name) || "";
471
- const baseFunctionName = originalFunctionName
472
- .replace(" (approved)", "")
473
- .replace(" (rejected)", "")
474
- .replace(" (pending approval)", "")
475
- .trim()
476
- .toLowerCase();
477
- const approvalInfo = tc.requiresApproval || normalized.requiresApproval;
478
- const isCompleted = "isCompleted" in tc
479
- ? tc.isCompleted
480
- : !!(normalized.function?.result || normalized.function?.error) &&
481
- !approvalInfo;
482
- return (browserCaptureInlinePrompt.toolNames.includes(baseFunctionName) &&
483
- !isCompleted &&
484
- !normalized.function?.error);
485
- });
486
- }, [browserCaptureInlinePrompt, toolCalls]);
487
- const allToolCallsCompleted = useMemo(() => {
488
- if (!toolCalls || toolCalls.length === 0)
489
- return false;
490
- return toolCalls.every((tc) => {
491
- const isAgentToolCall = "isCompleted" in tc;
492
- if (isAgentToolCall)
493
- return tc.isCompleted;
494
- const normalized = normalizeToolCall(tc);
495
- const approvalInfo = tc.requiresApproval || normalized.requiresApproval;
496
- return !!(normalized.function?.result || normalized.function?.error) && !approvalInfo;
497
- });
498
- }, [toolCalls]);
499
194
  if (!toolCalls || toolCalls.length === 0) {
500
195
  return null;
501
196
  }
502
- const resolvePendingToolCalls = async (pendingToolCalls, approved) => {
503
- if (!agentId || pendingToolCalls.length === 0)
504
- return;
505
- const actionLabel = approved ? "approve" : "reject";
506
- await Promise.all(pendingToolCalls.map(async (pending) => {
507
- try {
508
- const params = {
509
- agentId,
510
- messageId: pending.dbMessageId || pending.messageId,
511
- toolCallId: pending.toolCallId,
512
- };
513
- if (approved) {
514
- await approveToolCall(params);
515
- }
516
- else {
517
- await rejectToolCall(params);
518
- }
519
- window.dispatchEvent(new CustomEvent("agent:toolApprovalResolved", {
520
- detail: {
521
- messageId: pending.dbMessageId || pending.messageId,
522
- toolCallId: pending.toolCallId,
523
- approved,
524
- },
525
- }));
526
- }
527
- catch (error) {
528
- console.error(`Failed to ${actionLabel} tool call ${pending.toolCallId}:`, error);
529
- }
530
- }));
531
- };
532
197
  // Helper to approve all pending tool calls with a specific risk level
533
198
  const handleApproveAllByRisk = async (riskLevel) => {
534
- if (!agentId || batchRiskAction)
199
+ if (!agentId || isApprovingAll)
535
200
  return;
536
201
  const matchingPending = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === riskLevel);
537
202
  if (matchingPending.length === 0)
538
203
  return;
539
- setBatchRiskAction("approve");
204
+ setIsApprovingAll(true);
540
205
  try {
541
- await resolvePendingToolCalls(matchingPending, true);
542
- }
543
- finally {
544
- setBatchRiskAction(null);
545
- }
546
- };
547
- const handleRejectAllByRisk = async (riskLevel) => {
548
- if (!agentId || batchRiskAction)
549
- return;
550
- const matchingPending = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === riskLevel);
551
- if (matchingPending.length === 0)
552
- return;
553
- setBatchRiskAction("reject");
554
- try {
555
- 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
+ }));
556
227
  }
557
228
  finally {
558
- setBatchRiskAction(null);
229
+ setIsApprovingAll(false);
559
230
  }
560
231
  };
561
232
  // Helper to switch to autonomous mode
@@ -564,14 +235,29 @@ export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopo
564
235
  return;
565
236
  setIsSwitchingMode(true);
566
237
  try {
567
- const result = await updateAgentSettings(agentId, { mode: "autonomous" });
568
- if (result.success === false || result.updates?.mode === false) {
569
- throw new Error("Mode change was not applied");
570
- }
238
+ await updateAgentSettings(agentId, { mode: "autonomous" });
571
239
  onSwitchToAutonomous?.();
572
240
  // After switching to autonomous, approve all remaining pending tool calls
573
241
  if (allPendingApprovals.length > 0) {
574
- 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
+ }));
575
261
  }
576
262
  }
577
263
  catch (error) {
@@ -582,101 +268,56 @@ export function ToolCallDisplay({ toolCalls, finished, openPopovers, setOpenPopo
582
268
  setIsSwitchingMode(false);
583
269
  }
584
270
  };
585
- const showGroupHeader = toolCalls.length > 0;
586
- return (_jsxs("div", { className: "flex flex-col", children: [showGroupHeader && (_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: () => {
587
- setIsGroupExpanded((prev) => !prev);
588
- setUserToggled(true);
589
- }, 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 ${!allToolCallsCompleted ? "animate-text-shimmer" : ""}`, 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
590
- ? groupSummary.uniqueNames.join(", ")
591
- : `${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" : "", ")"] }))] })), shouldShowGroupBrowserCaptureInlinePrompt && 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) => {
592
- event.stopPropagation();
593
- browserCaptureInlinePrompt.onAction();
594
- }, children: browserCaptureInlinePrompt.actionLabel }) })] }) })), isGroupExpanded && (_jsx("div", { className: "ml-4", children: toolCalls.map((originalToolCall, toolIndex) => {
595
- const toolCall = normalizeToolCall(originalToolCall);
596
- const toolResult = toolCall.function?.result;
597
- const isAgentToolCall = "isCompleted" in originalToolCall;
598
- const toolCallKey = ("toolCallId" in originalToolCall
599
- ? originalToolCall.toolCallId
600
- : toolCall.id) || `${messageId}-${toolIndex}`;
601
- const popoverKey = `${messageId}-${toolCallKey}`;
602
- const isPruned = !!toolCall.isPruned;
603
- const toolCallMeta = formatToolCallMeta(toolCall.createdDate, toolCall.responseTimeMs);
604
- // Get approval information to check if tool call is pending approval
605
- const approvalInfo = originalToolCall.requiresApproval || toolCall.requiresApproval;
606
- const isCompleted = isAgentToolCall
607
- ? originalToolCall.isCompleted
608
- : !!(toolResult || toolCall.function?.error) && !approvalInfo;
609
- // Check if tool call is currently streaming (arguments still being generated)
610
- const isStreaming = isAgentToolCall &&
611
- "isStreaming" in originalToolCall &&
612
- originalToolCall.isStreaming === true;
613
- // Use the approval info from the backend
614
- const finalApprovalInfo = approvalInfo;
615
- // Check if this tool call's approval dialog has already been shown (for deduplication)
616
- const toolCallIdForApproval = "toolCallId" in originalToolCall
617
- ? originalToolCall.toolCallId
618
- : toolCall.id;
619
- const approvalAlreadyShown = seenApprovalDialogs?.has(toolCallIdForApproval) ?? false;
620
- // Check if this tool call has been approved/rejected (look for status indicators in function name)
621
- // The AgentTerminal adds " (approved)" or " (rejected)" or " (pending approval)" to the functionName field
622
- const originalFunctionName = ("functionName" in originalToolCall
623
- ? originalToolCall.functionName
624
- : toolCall?.function?.name) || "";
625
- const baseFunctionName = originalFunctionName
626
- .replace(" (approved)", "")
627
- .replace(" (rejected)", "")
628
- .replace(" (pending approval)", "")
629
- .trim()
630
- .toLowerCase();
631
- const hideAutonomousSwitch = baseFunctionName === "delete-item" ||
632
- baseFunctionName === "delete-items";
633
- const isApproved = originalFunctionName.includes("(approved)");
634
- const isRejected = originalFunctionName.includes("(rejected)");
635
- const isPending = originalFunctionName.includes("(pending approval)");
636
- // Treat only approved/rejected as final; pending should still show buttons
637
- const hasApprovalStatus = isApproved || isRejected;
638
- // Debug logging removed for performance
639
- const isExpanded = openPopovers[popoverKey] || false;
640
- const shouldShowBrowserCaptureInlinePrompt = !!browserCaptureInlinePrompt &&
641
- browserCaptureInlinePrompt.toolNames.includes(baseFunctionName) &&
642
- !isCompleted &&
643
- !toolCall.function?.error;
644
- const toolCallMessageId = originalToolCall.messageId || toolCall.messageId || messageId;
645
- 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: () => {
646
- setOpenPopovers((prev) => ({
647
- ...prev,
648
- [popoverKey]: !prev[popoverKey],
649
- }));
650
- }, 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
651
- ? "text-red-500"
652
- : isPruned
653
- ? "text-slate-500"
654
- : "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 ? (
655
- // Show spinner when tool call arguments are still being streamed or tool is executing
656
- _jsx(Spinner, { size: "xs" })) : (
657
- // Turn finished but tool call not completed - show static icon
658
- _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
659
- ? "text-red-600"
660
- : isPruned
661
- ? "text-slate-600"
662
- : ""}`, children: [(originalFunctionName ||
663
- toolCall?.function?.name ||
664
- toolCall?.displayName ||
665
- "(function name missing)")
666
- .replace(" (approved)", "")
667
- .replace(" (rejected)", "")
668
- .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 })), !shouldShowGroupBrowserCaptureInlinePrompt &&
669
- shouldShowBrowserCaptureInlinePrompt &&
670
- 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) => {
671
- event.stopPropagation();
672
- browserCaptureInlinePrompt.onAction();
673
- }, children: browserCaptureInlinePrompt.actionLabel }) })] }) })), !isCompleted && finalApprovalInfo && !hasApprovalStatus && (_jsx(ApprovalDialog, { toolCallId: toolCallIdForApproval, onApprovalDialogShown: onApprovalDialogShown, finalApprovalInfo: finalApprovalInfo, isAgentToolCall: isAgentToolCall, originalToolCall: originalToolCall, toolCall: toolCall, messageId: toolCallMessageId, agentId: agentId, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, hideAutonomousSwitch: hideAutonomousSwitch, isSwitchingMode: isSwitchingMode, setIsSwitchingMode: setIsSwitchingMode, batchRiskAction: batchRiskAction, handleApproveAllByRisk: handleApproveAllByRisk, handleRejectAllByRisk: handleRejectAllByRisk, handleSwitchToAutonomous: handleSwitchToAutonomous }))] }, toolCallKey));
674
- }) }))] }));
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
+ }) }));
675
317
  }
676
318
  // Separate component for approval dialog to properly handle useEffect
677
- 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, }) {
678
320
  const hasMarkedAsShown = useRef(false);
679
- const [isCreatingAllowance, setIsCreatingAllowance] = useState(false);
680
321
  // Mark dialog as shown on mount to prevent duplicate dialogs
681
322
  // The dialog stays visible until hasApprovalStatus becomes true (after approve/reject)
682
323
  useEffect(() => {
@@ -699,44 +340,7 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
699
340
  hasMarkedAsShown.current = true;
700
341
  }
701
342
  };
702
- const getActualMessageId = () => {
703
- return isAgentToolCall
704
- ? originalToolCall.dbMessageId || originalToolCall.messageId
705
- : messageId;
706
- };
707
- const dispatchApprovalResolved = (actualMessageId, approved) => {
708
- const ev = new CustomEvent("agent:toolApprovalResolved", {
709
- detail: {
710
- messageId: actualMessageId,
711
- toolCallId: toolCall.id,
712
- approved,
713
- },
714
- });
715
- window.dispatchEvent(ev);
716
- };
717
- const approveCurrentToolCall = async () => {
718
- const actualMessageId = getActualMessageId();
719
- if (!agentId) {
720
- console.error("Cannot approve tool call: agentId is missing");
721
- return;
722
- }
723
- if (!actualMessageId) {
724
- console.error("Cannot approve tool call: messageId is missing");
725
- return;
726
- }
727
- await approveToolCall({
728
- agentId,
729
- messageId: actualMessageId,
730
- toolCallId: toolCall.id,
731
- });
732
- dispatchApprovalResolved(actualMessageId, true);
733
- };
734
- const allowableScope = finalApprovalInfo.allowableScope;
735
- const showAllowInScopeButton = !!agentId &&
736
- allowableScope?.operationType === "delete" &&
737
- !!allowableScope.parentItemId &&
738
- !!allowableScope.parentItemPath;
739
- 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"
740
344
  ? "bg-red-500 ring-2 ring-red-200"
741
345
  : finalApprovalInfo.riskLevel === "medium"
742
346
  ? "bg-amber-500 ring-2 ring-amber-200"
@@ -744,32 +348,13 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
744
348
  ? "bg-red-100 text-red-700"
745
349
  : finalApprovalInfo.riskLevel === "medium"
746
350
  ? "bg-amber-100 text-amber-700"
747
- : "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 () => {
748
- markAsShown();
749
- if (!agentId || !allowableScope?.parentItemId)
750
- return;
751
- setIsCreatingAllowance(true);
752
- try {
753
- await createOperationAllowance({
754
- agentId,
755
- itemId: allowableScope.parentItemId,
756
- operationType: "delete",
757
- scopeType: "itemSubtree",
758
- });
759
- await approveCurrentToolCall();
760
- }
761
- catch (error) {
762
- console.error("Failed to create operation allowance:", error);
763
- alert(`Failed to allow deletes in scope: ${error?.message || "Unknown error"}`);
764
- }
765
- finally {
766
- setIsCreatingAllowance(false);
767
- }
768
- }, children: isCreatingAllowance
769
- ? "Allowing..."
770
- : `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 () => {
771
352
  markAsShown(); // Mark as shown when user interacts
772
- 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;
773
358
  if (!agentId) {
774
359
  console.error("❌ Cannot reject tool call: agentId is missing");
775
360
  return;
@@ -790,21 +375,53 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
790
375
  toolCallId: toolCall.id,
791
376
  });
792
377
  console.log("✅ Reject successful:", result);
793
- 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);
794
386
  }
795
387
  catch (error) {
796
388
  console.error("❌ Reject failed:", error);
797
389
  }
798
390
  }, children: "Reject" }), _jsx(Button, { size: "sm", "data-testid": "agent-approve-button", onClick: async () => {
799
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
+ }
800
405
  console.log("✅ Approving tool call:", {
801
406
  agentId,
802
- messageId: getActualMessageId(),
407
+ messageId: actualMessageId,
803
408
  toolCallId: toolCall.id,
804
409
  });
805
410
  try {
806
- await approveCurrentToolCall();
807
- 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);
808
425
  }
809
426
  catch (error) {
810
427
  console.error("❌ Approve failed:", error);
@@ -814,24 +431,15 @@ function ApprovalDialog({ toolCallId, onApprovalDialogShown, finalApprovalInfo,
814
431
  const currentRiskLevel = finalApprovalInfo?.riskLevel;
815
432
  const sameRiskCount = allPendingApprovals.filter((p) => (p.riskLevel || undefined) === currentRiskLevel).length;
816
433
  const totalPendingCount = allPendingApprovals.length;
817
- const showSwitchToAutonomous = !hideAutonomousSwitch;
818
- const showResolveAllByRisk = sameRiskCount > 1;
819
434
  // Only show batch actions if there's more than 1 pending approval
820
435
  if (totalPendingCount <= 1)
821
436
  return null;
822
- if (!showSwitchToAutonomous && !showResolveAllByRisk)
823
- return null;
824
437
  const riskLabel = currentRiskLevel
825
- ? currentRiskLevel.charAt(0).toUpperCase() +
826
- currentRiskLevel.slice(1)
438
+ ? currentRiskLevel.charAt(0).toUpperCase() + currentRiskLevel.slice(1)
827
439
  : "Same";
828
- return (_jsxs("div", { className: `flex flex-wrap items-center gap-2 border-t border-amber-200/60 pt-2 ${showSwitchToAutonomous && showResolveAllByRisk
829
- ? "justify-between"
830
- : "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"
831
- ? "Rejecting..."
832
- : `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"
833
- ? "Approving..."
834
- : `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})` }))] }));
835
443
  })()] })] }));
836
444
  }
837
445
  //# sourceMappingURL=ToolCallDisplay.js.map