@parhelia/core 0.3.12831 → 0.4.12796

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 (339) hide show
  1. package/dist/agents-view/AgentCard.js +2 -2
  2. package/dist/agents-view/AgentCard.js.map +1 -1
  3. package/dist/agents-view/AgentsView.js +4 -2
  4. package/dist/agents-view/AgentsView.js.map +1 -1
  5. package/dist/agents-view/AgentsWorkspaceView.js +8 -1
  6. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  7. package/dist/agents-view/DateAgentsGroup.js +1 -1
  8. package/dist/agents-view/DateAgentsGroup.js.map +1 -1
  9. package/dist/components/ui/checkbox.js +3 -2
  10. package/dist/components/ui/checkbox.js.map +1 -1
  11. package/dist/components/ui/context-menu.d.ts +9 -1
  12. package/dist/components/ui/context-menu.js +59 -12
  13. package/dist/components/ui/context-menu.js.map +1 -1
  14. package/dist/components/ui/select.js +16 -2
  15. package/dist/components/ui/select.js.map +1 -1
  16. package/dist/config/config.d.ts +2 -0
  17. package/dist/config/config.js +66 -10
  18. package/dist/config/config.js.map +1 -1
  19. package/dist/config/types/sidebar.d.ts +8 -0
  20. package/dist/config/types/workspace.d.ts +8 -0
  21. package/dist/config/types.d.ts +24 -0
  22. package/dist/config/types.js.map +1 -1
  23. package/dist/editor/ContextMenu.js +59 -6
  24. package/dist/editor/ContextMenu.js.map +1 -1
  25. package/dist/editor/Editor.js +9 -2
  26. package/dist/editor/Editor.js.map +1 -1
  27. package/dist/editor/EditorWarning.d.ts +3 -1
  28. package/dist/editor/EditorWarning.js +24 -7
  29. package/dist/editor/EditorWarning.js.map +1 -1
  30. package/dist/editor/FieldList.js +1 -1
  31. package/dist/editor/FieldList.js.map +1 -1
  32. package/dist/editor/GlobalMenuBar.js +8 -6
  33. package/dist/editor/GlobalMenuBar.js.map +1 -1
  34. package/dist/editor/LinkEditorDialog.d.ts +2 -0
  35. package/dist/editor/LinkEditorDialog.js +6 -1
  36. package/dist/editor/LinkEditorDialog.js.map +1 -1
  37. package/dist/editor/ai/AgentSharingSection.d.ts +1 -1
  38. package/dist/editor/ai/AgentSharingSection.js +7 -0
  39. package/dist/editor/ai/AgentSharingSection.js.map +1 -1
  40. package/dist/editor/ai/Agents.js +7 -7
  41. package/dist/editor/ai/Agents.js.map +1 -1
  42. package/dist/editor/ai/InlineAiDialog.d.ts +7 -1
  43. package/dist/editor/ai/InlineAiDialog.js +27 -7
  44. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  45. package/dist/editor/ai/InlineAiTrigger.js +63 -1
  46. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  47. package/dist/editor/ai/terminal/activeReasoningModel.d.ts +9 -0
  48. package/dist/editor/ai/terminal/activeReasoningModel.js +20 -0
  49. package/dist/editor/ai/terminal/activeReasoningModel.js.map +1 -0
  50. package/dist/editor/ai/terminal/agentDurations.d.ts +27 -0
  51. package/dist/editor/ai/terminal/agentDurations.js +89 -0
  52. package/dist/editor/ai/terminal/agentDurations.js.map +1 -0
  53. package/dist/editor/ai/terminal/agentStartRequest.d.ts +1 -0
  54. package/dist/editor/ai/terminal/agentStartRequest.js +1 -0
  55. package/dist/editor/ai/terminal/agentStartRequest.js.map +1 -1
  56. package/dist/editor/ai/terminal/agentTurnTiming.d.ts +33 -0
  57. package/dist/editor/ai/terminal/agentTurnTiming.js +103 -0
  58. package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -0
  59. package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +3 -1
  60. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +16 -25
  61. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  62. package/dist/editor/ai/terminal/components/AgentGreeting.js +4 -1
  63. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  64. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.d.ts +5 -1
  65. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +7 -2
  66. package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
  67. package/dist/editor/ai/terminal/components/AgentProfileRecovery.d.ts +10 -0
  68. package/dist/editor/ai/terminal/components/AgentProfileRecovery.js +12 -0
  69. package/dist/editor/ai/terminal/components/AgentProfileRecovery.js.map +1 -0
  70. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
  71. package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
  72. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
  73. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  74. package/dist/editor/ai/terminal/components/AgentPromptComposer.js +1 -1
  75. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
  76. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  77. package/dist/editor/ai/terminal/components/AgentSettingsContent.d.ts +5 -1
  78. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +2 -2
  79. package/dist/editor/ai/terminal/components/AgentSettingsContent.js.map +1 -1
  80. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +2 -1
  81. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -2
  82. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
  83. package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.d.ts +1 -1
  84. package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.js +2 -2
  85. package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.js.map +1 -1
  86. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +17 -1
  87. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  88. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -1
  89. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  90. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +1 -1
  91. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +69 -8
  92. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  93. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -1
  94. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -2
  95. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  96. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.d.ts +21 -1
  97. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +15 -4
  98. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
  99. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +3 -1
  100. package/dist/editor/ai/terminal/components/AiResponseMessage.js +84 -58
  101. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  102. package/dist/editor/ai/terminal/components/ApprovalCard.js +72 -10
  103. package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
  104. package/dist/editor/ai/terminal/components/InitialThinkingSplash.js +2 -2
  105. package/dist/editor/ai/terminal/components/InitialThinkingSplash.js.map +1 -1
  106. package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +2 -2
  107. package/dist/editor/ai/terminal/components/ResponseTurnDuration.d.ts +15 -0
  108. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +52 -0
  109. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -0
  110. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +3 -1
  111. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +35 -57
  112. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  113. package/dist/editor/ai/terminal/components/UserMessage.js +1 -1
  114. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +26 -1
  116. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +26 -1
  117. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/approvalActions.d.ts +1 -0
  119. package/dist/editor/ai/terminal/components/approvalActions.js +5 -2
  120. package/dist/editor/ai/terminal/components/approvalActions.js.map +1 -1
  121. package/dist/editor/ai/terminal/components/useApprovalActions.d.ts +4 -4
  122. package/dist/editor/ai/terminal/components/useApprovalActions.js +5 -2
  123. package/dist/editor/ai/terminal/components/useApprovalActions.js.map +1 -1
  124. package/dist/editor/ai/terminal/reasoningEffortLevels.d.ts +8 -0
  125. package/dist/editor/ai/terminal/reasoningEffortLevels.js +54 -0
  126. package/dist/editor/ai/terminal/reasoningEffortLevels.js.map +1 -0
  127. package/dist/editor/ai/terminal/requestUsage.d.ts +3 -0
  128. package/dist/editor/ai/terminal/requestUsage.js +22 -0
  129. package/dist/editor/ai/terminal/requestUsage.js.map +1 -0
  130. package/dist/editor/ai/terminal/types.d.ts +1 -0
  131. package/dist/editor/ai/terminal/useAgentModeState.js.map +1 -1
  132. package/dist/editor/ai/terminal/useAgentProfileSelection.d.ts +10 -0
  133. package/dist/editor/ai/terminal/useAgentProfileSelection.js +10 -2
  134. package/dist/editor/ai/terminal/useAgentProfileSelection.js.map +1 -1
  135. package/dist/editor/ai/terminal/useAgentReasoningEffortState.d.ts +5 -0
  136. package/dist/editor/ai/terminal/useAgentReasoningEffortState.js +10 -0
  137. package/dist/editor/ai/terminal/useAgentReasoningEffortState.js.map +1 -0
  138. package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -0
  139. package/dist/editor/ai/terminal/useAgentSettingsCommands.d.ts +9 -0
  140. package/dist/editor/ai/terminal/useAgentSettingsCommands.js +63 -6
  141. package/dist/editor/ai/terminal/useAgentSettingsCommands.js.map +1 -1
  142. package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +5 -0
  143. package/dist/editor/ai/terminal/useAgentSettingsPanel.js +8 -0
  144. package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
  145. package/dist/editor/ai/terminal/useAgentSkillActions.d.ts +1 -0
  146. package/dist/editor/ai/terminal/useAgentSkillActions.js +1 -0
  147. package/dist/editor/ai/terminal/useAgentSkillActions.js.map +1 -1
  148. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
  149. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +6 -1
  150. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  151. package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
  152. package/dist/editor/ai/terminal/useAgentTerminalController.js +21 -4
  153. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  154. package/dist/editor/ai/terminal/useAgentTerminalControls.d.ts +4 -0
  155. package/dist/editor/ai/terminal/useAgentTerminalControls.js +5 -1
  156. package/dist/editor/ai/terminal/useAgentTerminalControls.js.map +1 -1
  157. package/dist/editor/ai-image-editor/AiImageEditorDialog.d.ts +6 -0
  158. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +202 -64
  159. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  160. package/dist/editor/client/EditorShell.js +733 -722
  161. package/dist/editor/client/EditorShell.js.map +1 -1
  162. package/dist/editor/client/SandboxWelcomeOverlay.d.ts +4 -1
  163. package/dist/editor/client/SandboxWelcomeOverlay.js +6 -5
  164. package/dist/editor/client/SandboxWelcomeOverlay.js.map +1 -1
  165. package/dist/editor/client/SessionsDialog.d.ts +2 -0
  166. package/dist/editor/client/SessionsDialog.js +27 -0
  167. package/dist/editor/client/SessionsDialog.js.map +1 -0
  168. package/dist/editor/client/hooks/useSocketMessageHandler.js +4 -0
  169. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  170. package/dist/editor/client/ui/DevModeIndicator.js +6 -4
  171. package/dist/editor/client/ui/DevModeIndicator.js.map +1 -1
  172. package/dist/editor/commands/componentCommands.js +1 -2
  173. package/dist/editor/commands/componentCommands.js.map +1 -1
  174. package/dist/editor/editor-warnings/ItemLocked.js +1 -1
  175. package/dist/editor/editor-warnings/ItemLocked.js.map +1 -1
  176. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +1 -1
  177. package/dist/editor/editor-warnings/NoLanguageWriteAccess.js.map +1 -1
  178. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
  179. package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
  180. package/dist/editor/editor-warnings/NoWriteAccess.js +1 -1
  181. package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
  182. package/dist/editor/field-types/LinkFieldEditor.js +15 -4
  183. package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
  184. package/dist/editor/field-types/MultiLineText.js +6 -1
  185. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  186. package/dist/editor/field-types/RichTextEditor.js +5 -5
  187. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  188. package/dist/editor/field-types/SingleLineText.js +6 -1
  189. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  190. package/dist/editor/field-types/TreeListEditor.js +3 -3
  191. package/dist/editor/field-types/TreeListEditor.js.map +1 -1
  192. package/dist/editor/fieldTypes.d.ts +2 -0
  193. package/dist/editor/itemContextMenuGroups.d.ts +16 -0
  194. package/dist/editor/itemContextMenuGroups.js +48 -0
  195. package/dist/editor/itemContextMenuGroups.js.map +1 -0
  196. package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
  197. package/dist/editor/menubar/ActiveUsers.js +4 -1
  198. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  199. package/dist/editor/menubar/OpenPublishedPageButton.d.ts +1 -0
  200. package/dist/editor/menubar/OpenPublishedPageButton.js +22 -0
  201. package/dist/editor/menubar/OpenPublishedPageButton.js.map +1 -0
  202. package/dist/editor/menubar/WorkflowButton.js +77 -22
  203. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  204. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +1 -1
  205. package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -1
  206. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +8 -4
  207. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  208. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +36 -1
  209. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  210. package/dist/editor/page-editor-chrome/PageEditorChrome.js +4 -0
  211. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  212. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.d.ts +19 -0
  213. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js +14 -0
  214. package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js.map +1 -1
  215. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +3 -0
  216. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +18 -0
  217. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  218. package/dist/editor/page-viewer/DeviceToolbar.js +20 -8
  219. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  220. package/dist/editor/page-viewer/EditorForm.js +8 -7
  221. package/dist/editor/page-viewer/EditorForm.js.map +1 -1
  222. package/dist/editor/page-viewer/PageViewerFrame.js +10 -0
  223. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  224. package/dist/editor/page-viewer/PreviewModeNotice.d.ts +7 -0
  225. package/dist/editor/page-viewer/PreviewModeNotice.js +19 -0
  226. package/dist/editor/page-viewer/PreviewModeNotice.js.map +1 -0
  227. package/dist/editor/page-viewer/pageViewContext.d.ts +5 -1
  228. package/dist/editor/page-viewer/pageViewContext.js +59 -2
  229. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  230. package/dist/editor/page-viewer/previewEditAttempt.d.ts +31 -0
  231. package/dist/editor/page-viewer/previewEditAttempt.js +68 -0
  232. package/dist/editor/page-viewer/previewEditAttempt.js.map +1 -0
  233. package/dist/editor/pageModel.d.ts +1 -0
  234. package/dist/editor/services/agentService.d.ts +67 -0
  235. package/dist/editor/services/agentService.js +2 -0
  236. package/dist/editor/services/agentService.js.map +1 -1
  237. package/dist/editor/services/aiService.d.ts +7 -0
  238. package/dist/editor/services/aiService.js.map +1 -1
  239. package/dist/editor/services/contentService.d.ts +9 -0
  240. package/dist/editor/services/contentService.js.map +1 -1
  241. package/dist/editor/services/editService.d.ts +13 -0
  242. package/dist/editor/services/editService.js +8 -0
  243. package/dist/editor/services/editService.js.map +1 -1
  244. package/dist/editor/services/migrationService.d.ts +31 -0
  245. package/dist/editor/services/migrationService.js +22 -0
  246. package/dist/editor/services/migrationService.js.map +1 -0
  247. package/dist/editor/services/publicSiteService.d.ts +40 -0
  248. package/dist/editor/services/publicSiteService.js +5 -0
  249. package/dist/editor/services/publicSiteService.js.map +1 -0
  250. package/dist/editor/settings/About.js +71 -32
  251. package/dist/editor/settings/About.js.map +1 -1
  252. package/dist/editor/settings/MigrationJournalCard.d.ts +12 -0
  253. package/dist/editor/settings/MigrationJournalCard.js +114 -0
  254. package/dist/editor/settings/MigrationJournalCard.js.map +1 -0
  255. package/dist/editor/settings/QuotaUserPicker.js +1 -1
  256. package/dist/editor/settings/SettingsView.js +18 -5
  257. package/dist/editor/settings/SettingsView.js.map +1 -1
  258. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -0
  259. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
  260. package/dist/editor/settings/panels/ModelConfigPanel.js +2 -0
  261. package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
  262. package/dist/editor/settings/panels/PublicSiteEntryDialog.d.ts +8 -0
  263. package/dist/editor/settings/panels/PublicSiteEntryDialog.js +113 -0
  264. package/dist/editor/settings/panels/PublicSiteEntryDialog.js.map +1 -0
  265. package/dist/editor/settings/panels/PublicSitesPanel.d.ts +1 -0
  266. package/dist/editor/settings/panels/PublicSitesPanel.js +153 -0
  267. package/dist/editor/settings/panels/PublicSitesPanel.js.map +1 -0
  268. package/dist/editor/settings/panels/StatusPanel.js +2 -1
  269. package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
  270. package/dist/editor/settings/panels/UserPreferencesPanel.js +4 -4
  271. package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
  272. package/dist/editor/settings/panels/index.d.ts +1 -0
  273. package/dist/editor/settings/panels/index.js +1 -0
  274. package/dist/editor/settings/panels/index.js.map +1 -1
  275. package/dist/editor/settings/panels/publicSiteHelpers.d.ts +6 -0
  276. package/dist/editor/settings/panels/publicSiteHelpers.js +30 -0
  277. package/dist/editor/settings/panels/publicSiteHelpers.js.map +1 -0
  278. package/dist/editor/settings/status/coreStatusChecks.js +4 -0
  279. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  280. package/dist/editor/sidebar/OperationDetailsContent.d.ts +14 -0
  281. package/dist/editor/sidebar/OperationDetailsContent.js +521 -0
  282. package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -0
  283. package/dist/editor/sidebar/OperationItem.js +9 -77
  284. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  285. package/dist/editor/sidebar/Sessions.d.ts +3 -1
  286. package/dist/editor/sidebar/Sessions.js +2 -1
  287. package/dist/editor/sidebar/Sessions.js.map +1 -1
  288. package/dist/editor/sidebar/Workbox.js +22 -7
  289. package/dist/editor/sidebar/Workbox.js.map +1 -1
  290. package/dist/editor/ui/PerfectTree.js +14 -7
  291. package/dist/editor/ui/PerfectTree.js.map +1 -1
  292. package/dist/editor/ui/PublishDialog.d.ts +7 -2
  293. package/dist/editor/ui/PublishDialog.js +67 -33
  294. package/dist/editor/ui/PublishDialog.js.map +1 -1
  295. package/dist/editor/ui/PublishItemDialog.js +31 -20
  296. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  297. package/dist/editor/ui/PublishReadinessSummary.d.ts +12 -0
  298. package/dist/editor/ui/PublishReadinessSummary.js +34 -0
  299. package/dist/editor/ui/PublishReadinessSummary.js.map +1 -0
  300. package/dist/editor/ui/TemplateSelectorDialog.js +27 -1
  301. package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
  302. package/dist/editor/ui/publishReadiness.d.ts +85 -0
  303. package/dist/editor/ui/publishReadiness.js +251 -0
  304. package/dist/editor/ui/publishReadiness.js.map +1 -0
  305. package/dist/editor/ui/usePublishingItem.d.ts +8 -0
  306. package/dist/editor/ui/usePublishingItem.js +47 -0
  307. package/dist/editor/ui/usePublishingItem.js.map +1 -0
  308. package/dist/editor/utils/linkDisplay.d.ts +12 -0
  309. package/dist/editor/utils/linkDisplay.js +23 -0
  310. package/dist/editor/utils/linkDisplay.js.map +1 -0
  311. package/dist/editor/views/ItemEditor.js +44 -27
  312. package/dist/editor/views/ItemEditor.js.map +1 -1
  313. package/dist/index.d.ts +9 -1
  314. package/dist/index.js +8 -1
  315. package/dist/index.js.map +1 -1
  316. package/dist/lib/viewportClip.d.ts +18 -0
  317. package/dist/lib/viewportClip.js +22 -0
  318. package/dist/lib/viewportClip.js.map +1 -0
  319. package/dist/revision.d.ts +2 -2
  320. package/dist/revision.js +2 -2
  321. package/dist/setup/wizard/steps/ImportModelDialog.js +238 -176
  322. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
  323. package/dist/task-board/components/ProjectSettingsDialog.js +4 -1
  324. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  325. package/dist/tour/Tour.d.ts +10 -2
  326. package/dist/tour/Tour.js +136 -31
  327. package/dist/tour/Tour.js.map +1 -1
  328. package/dist/tour/default-tour.js +5 -16
  329. package/dist/tour/default-tour.js.map +1 -1
  330. package/dist/tour/preview-tour.js +1 -1
  331. package/dist/tour/preview-tour.js.map +1 -1
  332. package/dist/tour/sandbox-tour.js +4 -3
  333. package/dist/tour/sandbox-tour.js.map +1 -1
  334. package/dist/tour/tour-utils.d.ts +6 -0
  335. package/dist/tour/tour-utils.js +10 -0
  336. package/dist/tour/tour-utils.js.map +1 -1
  337. package/dist/types.d.ts +7 -0
  338. package/package.json +1 -1
  339. package/styles.css +6 -1
@@ -1,7 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo } from "react";
3
- import { Check, ShieldCheck, X, Zap } from "lucide-react";
2
+ import { useId, useMemo, useState } from "react";
3
+ import { Check, ChevronDown, ShieldCheck, X, Zap } from "lucide-react";
4
4
  import { Button } from "../../../../components/ui/button";
5
+ import { Checkbox } from "../../../../components/ui/checkbox";
6
+ import { Textarea } from "../../../../components/ui/textarea";
5
7
  import { Tooltip, TooltipTrigger, TooltipContent, } from "../../../../components/ui/tooltip";
6
8
  import { Spinner } from "../../../ui/Spinner";
7
9
  import { cleanToolFunctionName } from "./toolCallApprovalGate";
@@ -19,6 +21,8 @@ const hasDeleteAllowance = (item) => {
19
21
  !!item.allowableScope.parentItemPath);
20
22
  };
21
23
  const ApprovalItemContent = ({ item, compact = false, }) => {
24
+ const [expanded, setExpanded] = useState(false);
25
+ const detailsId = useId();
22
26
  const functionName = cleanToolFunctionName(item.functionName);
23
27
  const content = getToolCallContentRenderer(functionName)?.resolveApproval?.({
24
28
  functionName,
@@ -26,10 +30,7 @@ const ApprovalItemContent = ({ item, compact = false, }) => {
26
30
  });
27
31
  if (!content)
28
32
  return null;
29
- if (compact) {
30
- return (_jsxs("details", { className: "border-border-default mt-1 w-full rounded border px-2 py-1", children: [_jsx("summary", { className: "text-neutral-grey-50 cursor-pointer text-[10px] font-medium", children: "View changes" }), content] }));
31
- }
32
- return content;
33
+ return (_jsxs("div", { className: compact ? "mt-1 w-full" : "mt-0.5 w-full", children: [_jsxs("button", { type: "button", "aria-expanded": expanded, "aria-controls": detailsId, className: "text-neutral-grey-50 hover:text-neutral-grey-100 focus-visible:ring-ring/50 inline-flex items-center gap-1 rounded-sm py-0.5 text-[10px] font-medium outline-none focus-visible:ring-2", onClick: () => setExpanded((current) => !current), "data-testid": "agent-approval-details-toggle", children: [_jsx(ChevronDown, { className: `h-3 w-3 transition-transform duration-200 ${expanded ? "rotate-180" : ""}`, strokeWidth: 1 }), expanded ? "Hide details" : "Show details"] }), expanded && _jsx("div", { id: detailsId, children: content })] }));
33
34
  };
34
35
  /**
35
36
  * The primary interaction surface for a supervised approval pause: shown
@@ -39,9 +40,45 @@ const ApprovalItemContent = ({ item, compact = false, }) => {
39
40
  * (via useApprovalActions); ToolCallDisplay is diagnostics-only.
40
41
  */
41
42
  export function ApprovalCard({ agentId, items, readOnly = false, onSwitchToAutonomous, }) {
42
- const { busyAction, error, approveAll, rejectAll, switchToAutonomous, approveWithAllowance, } = useApprovalActions({ agentId, readOnly, onSwitchToAutonomous });
43
+ const { busyAction, error, clearError, approveAll, rejectAll, switchToAutonomous, approveWithAllowance, } = useApprovalActions({ agentId, readOnly, onSwitchToAutonomous });
44
+ const [showRejectionReason, setShowRejectionReason] = useState(false);
45
+ const [rejectionReason, setRejectionReason] = useState("");
46
+ const rejectionReasonId = useId();
47
+ // Every action is included by default; we only track the ones the user
48
+ // unticked so actions that arrive later start out selected as well.
49
+ const [deselectedIds, setDeselectedIds] = useState(() => new Set());
43
50
  const isPlural = items.length > 1;
44
51
  const singleItem = !isPlural ? items[0] : undefined;
52
+ const selectedItems = useMemo(() => isPlural
53
+ ? items.filter((item) => !deselectedIds.has(item.toolCallId))
54
+ : items, [deselectedIds, isPlural, items]);
55
+ const selectedCount = selectedItems.length;
56
+ const allSelected = selectedCount === items.length;
57
+ const noneSelected = selectedCount === 0;
58
+ const setItemSelected = (toolCallId, selected) => {
59
+ setDeselectedIds((current) => {
60
+ if (selected ? !current.has(toolCallId) : current.has(toolCallId)) {
61
+ return current;
62
+ }
63
+ const next = new Set(current);
64
+ if (selected)
65
+ next.delete(toolCallId);
66
+ else
67
+ next.add(toolCallId);
68
+ return next;
69
+ });
70
+ };
71
+ const handleReject = async () => {
72
+ if (!showRejectionReason) {
73
+ clearError();
74
+ setShowRejectionReason(true);
75
+ return;
76
+ }
77
+ if (await rejectAll(selectedItems, rejectionReason)) {
78
+ setShowRejectionReason(false);
79
+ setRejectionReason("");
80
+ }
81
+ };
45
82
  // Collective high badge only when every pending action carries the same
46
83
  // single "high" risk (ported from the old batch bar).
47
84
  const uniqueRisks = useMemo(() => Array.from(new Set(items.map((item) => item.riskLevel || undefined))), [items]);
@@ -59,17 +96,42 @@ export function ApprovalCard({ agentId, items, readOnly = false, onSwitchToAuton
59
96
  ? busyAction.toolCallId
60
97
  : null;
61
98
  const readOnlyTitle = readOnly ? "Read-only access" : undefined;
62
- const countSuffix = isPlural ? ` all (${items.length})` : "";
99
+ // "Approve all (5)" while every action is ticked; "Approve selected (3)"
100
+ // once the user narrows the batch.
101
+ const countSuffix = !isPlural
102
+ ? ""
103
+ : allSelected
104
+ ? ` all (${items.length})`
105
+ : ` selected (${selectedCount})`;
106
+ const decisionDisabled = isBusy || readOnly || noneSelected;
107
+ const decisionTitle = noneSelected
108
+ ? "Select at least one action"
109
+ : readOnlyTitle;
63
110
  if (items.length === 0) {
64
111
  return null;
65
112
  }
66
113
  const renderAllowanceButton = (item) => {
67
- if (!hasDeleteAllowance(item) || !agentId)
114
+ if (showRejectionReason || !hasDeleteAllowance(item) || !agentId)
68
115
  return null;
69
116
  const isCreatingAllowance = allowanceBusyToolCallId === item.toolCallId;
70
117
  return (_jsxs(Button, { size: "sm", variant: "outline", disabled: isBusy || readOnly, title: readOnlyTitle, onClick: () => approveWithAllowance(item), className: "text-neutral-grey-100 h-7 gap-1.5 bg-white px-2.5 text-xs", "data-testid": "agent-approval-allowance-button", children: [isCreatingAllowance ? (_jsx(Spinner, { size: "xs" })) : (_jsx(ShieldCheck, { size: 12, strokeWidth: 1 })), _jsxs("span", { className: "max-w-72 truncate", children: ["Approve + allow deletes in ", item.allowableScope.parentItemPath] })] }));
71
118
  };
72
- return (_jsxs("div", { className: "border-neutral-grey-10 mt-1 mb-3 rounded-xl border bg-white px-3 py-2.5", "data-testid": "agent-approval-card", children: [singleItem ? (_jsxs("div", { className: "mb-2.5 flex flex-col gap-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-neutral-grey-100 text-[13px] leading-4 font-medium", children: cleanToolFunctionName(singleItem.functionName) || "Agent action" }), singleItem.riskLevel === "high" && (_jsx(HighRiskBadge, { summary: singleItem.summary })), _jsx("span", { className: "text-neutral-grey-50 ml-auto shrink-0 text-xs", children: "Awaiting approval" })] }), singleItem.summary && (_jsx("span", { className: "text-neutral-grey-100 text-xs leading-5", children: singleItem.summary })), _jsx(ApprovalItemContent, { item: singleItem })] })) : (_jsxs("div", { className: "mb-2.5 flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [showHeaderRiskBadge && _jsx(HighRiskBadge, {}), _jsxs("span", { className: "text-neutral-grey-100 text-[13px] leading-4 font-medium", children: [items.length, " actions awaiting approval"] })] }), _jsx("div", { className: "flex flex-col gap-1", children: items.map((item) => (_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", "data-testid": "agent-approval-card-item", children: [_jsx("span", { className: "text-neutral-grey-100 shrink-0 text-xs font-medium", children: cleanToolFunctionName(item.functionName) || "Agent action" }), !showHeaderRiskBadge && item.riskLevel === "high" && (_jsx(HighRiskBadge, { summary: item.summary })), item.summary && (_jsx("span", { className: "text-neutral-grey-50 min-w-0 flex-1 truncate text-xs", children: item.summary })), renderAllowanceButton(item)] }), _jsx(ApprovalItemContent, { item: item, compact: true })] }, item.toolCallId))) })] })), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(Button, { size: "sm", "data-testid": "agent-approve-all-button", disabled: isBusy || readOnly, onClick: () => approveAll(items), title: readOnlyTitle, className: "bg-feedback-green hover:bg-feedback-green h-7 gap-1.5 px-2.5 text-xs text-white shadow-xs", children: [isApproving ? (_jsx(Spinner, { size: "xs" })) : (_jsx(Check, { size: 12, strokeWidth: 1 })), "Approve", countSuffix] }), _jsxs(Button, { size: "sm", variant: "outline", "data-testid": "agent-reject-all-button", disabled: isBusy || readOnly, onClick: () => rejectAll(items), title: readOnlyTitle, className: "border-feedback-red text-feedback-red hover:border-feedback-red hover:bg-feedback-red-light hover:text-feedback-red h-7 gap-1.5 bg-white px-2.5 text-xs", children: [isRejecting ? (_jsx(Spinner, { size: "xs" })) : (_jsx(X, { size: 12, strokeWidth: 1 })), "Reject", countSuffix] }), singleItem && renderAllowanceButton(singleItem), !hideAutonomousSwitch && (_jsxs(Button, { size: "sm", variant: "ghost", "data-testid": "agent-approval-autonomous-button", disabled: isBusy || readOnly, onClick: () => switchToAutonomous(items), title: readOnly
119
+ return (_jsxs("div", { className: "border-neutral-grey-10 mt-1 mb-3 min-w-0 rounded-xl border bg-white px-3 py-2.5", "data-testid": "agent-approval-card", children: [singleItem ? (_jsxs("div", { className: "mb-2.5 flex flex-col gap-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-neutral-grey-100 text-[13px] leading-4 font-medium", children: cleanToolFunctionName(singleItem.functionName) || "Agent action" }), singleItem.riskLevel === "high" && (_jsx(HighRiskBadge, { summary: singleItem.summary })), _jsx("span", { className: "text-neutral-grey-50 ml-auto shrink-0 text-xs", children: "Awaiting approval" })] }), singleItem.summary && (_jsx("span", { className: "text-neutral-grey-100 text-xs leading-5 [overflow-wrap:anywhere] whitespace-pre-wrap", children: singleItem.summary })), _jsx(ApprovalItemContent, { item: singleItem })] })) : (_jsxs("div", { className: "mb-2.5 flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [showHeaderRiskBadge && _jsx(HighRiskBadge, {}), _jsxs("span", { className: "text-neutral-grey-100 text-[13px] leading-4 font-medium", children: [items.length, " actions awaiting approval"] })] }), _jsx("div", { className: "flex flex-col gap-1", children: items.map((item) => {
120
+ const label = cleanToolFunctionName(item.functionName) || "Agent action";
121
+ const checkboxId = `${rejectionReasonId}-${item.toolCallId}`;
122
+ const selected = !deselectedIds.has(item.toolCallId);
123
+ return (_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex flex-wrap items-start gap-x-2 gap-y-1", "data-testid": "agent-approval-card-item", "data-selected": selected ? "true" : "false", children: [_jsx(Checkbox, { id: checkboxId, checked: selected, disabled: isBusy || readOnly, onCheckedChange: (checked) => setItemSelected(item.toolCallId, checked === true), "aria-label": `Include ${label}`, className: "mt-0.5", "data-testid": "agent-approval-item-checkbox" }), _jsx("label", { htmlFor: checkboxId, className: "text-neutral-grey-100 max-w-full cursor-pointer text-xs leading-5 font-medium [overflow-wrap:anywhere]", children: label }), !showHeaderRiskBadge && item.riskLevel === "high" && (_jsx(HighRiskBadge, { summary: item.summary })), item.summary && (_jsx("span", { className: "text-neutral-grey-50 min-w-0 flex-1 text-xs leading-5 [overflow-wrap:anywhere] whitespace-pre-wrap", children: item.summary })), renderAllowanceButton(item)] }), _jsx("div", { className: "pl-6", children: _jsx(ApprovalItemContent, { item: item, compact: true }) })] }, item.toolCallId));
124
+ }) })] })), showRejectionReason && (_jsxs("div", { className: "mb-2.5 flex flex-col gap-1.5", children: [_jsx("label", { htmlFor: rejectionReasonId, className: "text-neutral-grey-100 text-xs font-medium", children: "Reason for rejection (optional)" }), _jsx(Textarea, { id: rejectionReasonId, autoFocus: true, value: rejectionReason, onChange: (event) => setRejectionReason(event.target.value), disabled: isBusy || readOnly, placeholder: "Tell the model why you\u2019re rejecting this or what to do instead.", "aria-describedby": `${rejectionReasonId}-help`, className: "max-h-48 resize-y" }), _jsx("p", { id: `${rejectionReasonId}-help`, className: "text-neutral-grey-50 text-xs", children: selectedCount > 1
125
+ ? "Your reason will be sent to the model for every rejected action."
126
+ : "Your reason will be sent to the model with the rejection." })] })), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [!showRejectionReason && (_jsxs(Button, { size: "sm", "data-testid": "agent-approve-all-button", disabled: decisionDisabled, onClick: () => approveAll(selectedItems), title: decisionTitle, className: "bg-feedback-green hover:bg-feedback-green h-7 gap-1.5 px-2.5 text-xs text-white shadow-xs", children: [isApproving ? (_jsx(Spinner, { size: "xs" })) : (_jsx(Check, { size: 12, strokeWidth: 1 })), "Approve", countSuffix] })), _jsxs(Button, { size: "sm", variant: "outline", "data-testid": "agent-reject-all-button", disabled: decisionDisabled, onClick: handleReject, title: decisionTitle, className: "border-feedback-red text-feedback-red hover:border-feedback-red hover:bg-feedback-red-light hover:text-feedback-red h-7 gap-1.5 bg-white px-2.5 text-xs", children: [isRejecting ? (_jsx(Spinner, { size: "xs" })) : (_jsx(X, { size: 12, strokeWidth: 1 })), showRejectionReason
127
+ ? `Confirm rejection${isPlural ? ` (${selectedCount})` : ""}`
128
+ : `Reject${countSuffix}`] }), showRejectionReason && (_jsx(Button, { size: "sm", variant: "ghost", disabled: isBusy, onClick: () => {
129
+ setShowRejectionReason(false);
130
+ setRejectionReason("");
131
+ clearError();
132
+ }, className: "h-7 px-2.5 text-xs", children: "Cancel" })), !showRejectionReason &&
133
+ singleItem &&
134
+ renderAllowanceButton(singleItem), !showRejectionReason && !hideAutonomousSwitch && (_jsxs(Button, { size: "sm", variant: "ghost", "data-testid": "agent-approval-autonomous-button", disabled: isBusy || readOnly, onClick: () => switchToAutonomous(items), title: readOnly
73
135
  ? "Read-only access"
74
136
  : "Stop asking for approval and let the agent run autonomously", className: "text-neutral-grey-50 hover:text-neutral-grey-100 ml-auto h-7 gap-1.5 px-2 text-xs", children: [isSwitchingMode ? (_jsx(Spinner, { size: "xs" })) : (_jsx(Zap, { size: 12, strokeWidth: 1 })), isSwitchingMode ? "Switching" : "Autonomous"] }))] }), error && (_jsx("div", { className: "text-feedback-red mt-2 text-xs", "data-testid": "agent-approval-card-error", role: "alert", children: error }))] }));
75
137
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ApprovalCard.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/ApprovalCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAkBxE,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,EAAwB,EAAE,EAAE;IAC1D,MAAM,KAAK,GAAG,CACZ,eAAM,SAAS,EAAC,8KAA8K,qBAEvL,CACR,CAAC;IAEF,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBAAE,KAAK,GAAkB,EAChD,MAAC,cAAc,IAAC,IAAI,EAAC,KAAK,EAAC,SAAS,EAAC,UAAU,aAC7C,cAAK,SAAS,EAAC,aAAa,2BAAiB,EAC7C,cAAK,SAAS,EAAC,+BAA+B,YAAE,OAAO,GAAO,IAC/C,IACT,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,IAAsB,EAGtB,EAAE;IACF,OAAO,CACL,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,QAAQ;QAC/C,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY;QAClC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CACrC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,EAC3B,IAAI,EACJ,OAAO,GAAG,KAAK,GAIhB,EAAE,EAAE;IACH,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,0BAA0B,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;QAC1E,YAAY;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,mBAAS,SAAS,EAAC,4DAA4D,aAC7E,kBAAS,SAAS,EAAC,6DAA6D,6BAEtE,EACT,OAAO,IACA,CACX,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,oBAAoB,GACF;IAClB,MAAM,EACJ,UAAU,EACV,KAAK,EACL,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,oBAAoB,GACrB,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpD,wEAAwE;IACxE,sDAAsD;IACtD,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAC3E,CAAC,KAAK,CAAC,CACR,CAAC;IACF,MAAM,mBAAmB,GACvB,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAExD,0EAA0E;IAC1E,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,OAAO,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,cAAc,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;IACnC,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,CAAC;IAC7C,MAAM,WAAW,GAAG,UAAU,KAAK,QAAQ,CAAC;IAC5C,MAAM,eAAe,GAAG,UAAU,KAAK,YAAY,CAAC;IACpD,MAAM,uBAAuB,GAC3B,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;QACnD,CAAC,CAAC,UAAU,CAAC,UAAU;QACvB,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,qBAAqB,GAAG,CAAC,IAAsB,EAAE,EAAE;QACvD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,mBAAmB,GAAG,uBAAuB,KAAK,IAAI,CAAC,UAAU,CAAC;QAExE,OAAO,CACL,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAC5B,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EACzC,SAAS,EAAC,2DAA2D,iBACzD,iCAAiC,aAE5C,mBAAmB,CAAC,CAAC,CAAC,CACrB,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CAC1C,EACD,gBAAM,SAAS,EAAC,mBAAmB,4CACL,IAAI,CAAC,cAAc,CAAC,cAAc,IACzD,IACA,CACV,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAC,yEAAyE,iBACvE,qBAAqB,aAEhC,UAAU,CAAC,CAAC,CAAC,CACZ,eAAK,SAAS,EAAC,4BAA4B,aACzC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,yDAAyD,YACtE,qBAAqB,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,cAAc,GAC5D,EACN,UAAU,CAAC,SAAS,KAAK,MAAM,IAAI,CAClC,KAAC,aAAa,IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,GAAI,CAC/C,EACD,eAAM,SAAS,EAAC,+CAA+C,kCAExD,IACH,EACL,UAAU,CAAC,OAAO,IAAI,CACrB,eAAM,SAAS,EAAC,yCAAyC,YACtD,UAAU,CAAC,OAAO,GACd,CACR,EACD,KAAC,mBAAmB,IAAC,IAAI,EAAE,UAAU,GAAI,IACrC,CACP,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,8BAA8B,aAC3C,eAAK,SAAS,EAAC,mCAAmC,aAC/C,mBAAmB,IAAI,KAAC,aAAa,KAAG,EACzC,gBAAM,SAAS,EAAC,yDAAyD,aACtE,KAAK,CAAC,MAAM,kCACR,IACH,EACN,cAAK,SAAS,EAAC,qBAAqB,YACjC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,eAA2B,SAAS,EAAC,eAAe,aAClD,eACE,SAAS,EAAC,mCAAmC,iBACjC,0BAA0B,aAEtC,eAAM,SAAS,EAAC,oDAAoD,YACjE,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,cAAc,GACtD,EACN,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CACpD,KAAC,aAAa,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAI,CACzC,EACA,IAAI,CAAC,OAAO,IAAI,CACf,eAAM,SAAS,EAAC,sDAAsD,YACnE,IAAI,CAAC,OAAO,GACR,CACR,EACA,qBAAqB,CAAC,IAAI,CAAC,IACxB,EACN,KAAC,mBAAmB,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,SAAG,KAlBnC,IAAI,CAAC,UAAU,CAmBnB,CACP,CAAC,GACE,IACF,CACP,EAED,eAAK,SAAS,EAAC,mCAAmC,aAChD,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,iBACG,0BAA0B,EACtC,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAChC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAC,2FAA2F,aAEpG,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CACpC,aACO,WAAW,IACZ,EACT,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,iBACL,yBAAyB,EACrC,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,KAAK,EAAE,aAAa,EACpB,SAAS,EAAC,yJAAyJ,aAElK,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CAChC,YACM,WAAW,IACX,EACR,UAAU,IAAI,qBAAqB,CAAC,UAAU,CAAC,EAC/C,CAAC,oBAAoB,IAAI,CACxB,MAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,iBACH,kCAAkC,EAC9C,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EACxC,KAAK,EACH,QAAQ;4BACN,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,6DAA6D,EAEnE,SAAS,EAAC,mFAAmF,aAE5F,eAAe,CAAC,CAAC,CAAC,CACjB,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,GAAG,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAI,CAClC,EACA,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,IACtC,CACV,IACG,EAEL,KAAK,IAAI,CACR,cACE,SAAS,EAAC,gCAAgC,iBAC9B,2BAA2B,EACvC,IAAI,EAAC,OAAO,YAEX,KAAK,GACF,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ApprovalCard.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/ApprovalCard.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { AGENT_THINKING_TEXT_SIZE_CLASS } from "./agentThinkingStyles";
2
+ import { AGENT_THINKING_LABEL_CLASS, AGENT_THINKING_TEXT, } from "./agentThinkingStyles";
3
3
  export const InitialThinkingSplash = () => {
4
- return (_jsx("div", { className: "flex h-full items-center justify-center p-8", children: _jsx("span", { className: `animate-text-shimmer ${AGENT_THINKING_TEXT_SIZE_CLASS} font-medium`, children: "Thinking..." }) }));
4
+ return (_jsx("div", { className: "flex h-full items-center justify-center p-8", children: _jsx("span", { className: `animate-text-shimmer ${AGENT_THINKING_LABEL_CLASS}`, children: AGENT_THINKING_TEXT }) }));
5
5
  };
6
6
  //# sourceMappingURL=InitialThinkingSplash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InitialThinkingSplash.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/InitialThinkingSplash.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,OAAO,CACL,cAAK,SAAS,EAAC,6CAA6C,YAC1D,eACE,SAAS,EAAE,wBAAwB,8BAA8B,cAAc,4BAG1E,GACH,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"InitialThinkingSplash.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/InitialThinkingSplash.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,OAAO,CACL,cAAK,SAAS,EAAC,6CAA6C,YAC1D,eAAM,SAAS,EAAE,wBAAwB,0BAA0B,EAAE,YAClE,mBAAmB,GACf,GACH,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -10,7 +10,7 @@ export const QueuedPromptsPanel = ({ queuedPrompts, onPushQueuedPrompt, onDelete
10
10
  const [expandedDetailIds, setExpandedDetailIds] = useState({});
11
11
  if (queuedPrompts.length === 0)
12
12
  return null;
13
- return (_jsx("div", { className: "border-border-default border-t bg-white", "data-testid": "queued-prompts-section", children: _jsx("div", { className: "px-3 py-2.5", children: _jsx("div", { className: "border-border-default divide-border-default max-h-64 divide-y overflow-y-auto rounded-lg border bg-white", children: queuedPrompts.map((qp) => {
13
+ return (_jsx("div", { className: "border-border-default border-t bg-white", "data-testid": "queued-prompts-section", children: _jsx("div", { className: "px-3 py-1.5", children: _jsx("div", { className: "border-border-default divide-border-default max-h-64 divide-y overflow-y-auto rounded-lg border bg-white", children: queuedPrompts.map((qp) => {
14
14
  let triggerName = "";
15
15
  if (qp.data) {
16
16
  try {
@@ -33,7 +33,7 @@ export const QueuedPromptsPanel = ({ queuedPrompts, onPushQueuedPrompt, onDelete
33
33
  const hasSchedule = qp.scheduledFor &&
34
34
  new Date(qp.scheduledFor).getTime() >
35
35
  new Date(qp.createdDate || 0).getTime() + 1000;
36
- return (_jsxs("div", { className: "group/qp", "data-testid": "queued-prompt-item", children: [_jsxs("div", { className: "hover:bg-neutral-grey-5 relative flex items-center gap-2 px-2.5 py-2 transition-colors", children: [_jsx("span", { className: "text-neutral-grey-50 -ml-1.5 flex h-4 w-3 shrink-0 cursor-grab items-center justify-center opacity-0 transition-opacity group-hover/qp:opacity-100", "aria-hidden": "true", children: _jsx(GripVertical, { className: "h-3.5 w-3.5", strokeWidth: 1 }) }), _jsx(ListTree, { className: "text-neutral-grey-50 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { className: "text-neutral-grey-100 min-w-0 flex-1 truncate text-[13px]", "data-testid": "queued-prompt-text", title: qp.prompt, children: qp.prompt }), _jsxs("div", { className: "text-neutral-grey-50 flex shrink-0 items-center gap-1", children: [onPushQueuedPrompt ? (_jsxs("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 inline-flex h-7 items-center gap-1 rounded px-2 text-[13px] transition-colors disabled:cursor-not-allowed disabled:opacity-50", title: "Steer the agent with this prompt now", "aria-label": "Steer the agent with this prompt now", "data-testid": "queued-prompt-push-button", disabled: pushDisabled, onClick: () => onPushQueuedPrompt(qp), children: [_jsx(CornerDownRight, { className: "h-3.5 w-3.5", strokeWidth: 1 }), "Steer"] })) : null, onDeleteQueuedPrompt ? (_jsx("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 inline-flex h-7 w-7 items-center justify-center rounded transition-colors disabled:cursor-not-allowed disabled:opacity-50", title: "Delete queued prompt", "aria-label": "Delete queued prompt", "data-testid": "queued-prompt-delete-button", disabled: deleteDisabled, onClick: () => onDeleteQueuedPrompt(qp), children: _jsx(DeleteIcon, { size: "md" }) })) : null, _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 data-[state=open]:bg-neutral-grey-10 data-[state=open]:text-neutral-grey-100 inline-flex h-7 w-7 items-center justify-center rounded transition-colors", title: "More actions", "aria-label": "More actions", "data-testid": "queued-prompt-more-button", children: _jsx(MoreHorizontal, { className: "h-4 w-4", strokeWidth: 1 }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-44", children: [_jsxs(DropdownMenuItem, { onSelect: () => {
36
+ return (_jsxs("div", { className: "group/qp", "data-testid": "queued-prompt-item", children: [_jsxs("div", { className: "hover:bg-neutral-grey-5 relative flex items-center gap-2 px-2.5 py-1 transition-colors", children: [_jsx("span", { className: "text-neutral-grey-50 -ml-1.5 flex h-4 w-3 shrink-0 cursor-grab items-center justify-center opacity-0 transition-opacity group-hover/qp:opacity-100", "aria-hidden": "true", children: _jsx(GripVertical, { className: "h-3.5 w-3.5", strokeWidth: 1 }) }), _jsx(ListTree, { className: "text-neutral-grey-50 h-4 w-4 shrink-0", strokeWidth: 1 }), _jsx("span", { className: "text-neutral-grey-100 min-w-0 flex-1 truncate text-[13px]", "data-testid": "queued-prompt-text", title: qp.prompt, children: qp.prompt }), _jsxs("div", { className: "text-neutral-grey-50 flex shrink-0 items-center gap-1", children: [onPushQueuedPrompt ? (_jsxs("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 inline-flex h-7 items-center gap-1 rounded px-2 text-[13px] transition-colors disabled:cursor-not-allowed disabled:opacity-50", title: "Steer the agent with this prompt now", "aria-label": "Steer the agent with this prompt now", "data-testid": "queued-prompt-push-button", disabled: pushDisabled, onClick: () => onPushQueuedPrompt(qp), children: [_jsx(CornerDownRight, { className: "h-3.5 w-3.5", strokeWidth: 1 }), "Steer"] })) : null, onDeleteQueuedPrompt ? (_jsx("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 inline-flex h-7 w-7 items-center justify-center rounded transition-colors disabled:cursor-not-allowed disabled:opacity-50", title: "Delete queued prompt", "aria-label": "Delete queued prompt", "data-testid": "queued-prompt-delete-button", disabled: deleteDisabled, onClick: () => onDeleteQueuedPrompt(qp), children: _jsx(DeleteIcon, { size: "md" }) })) : null, _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "hover:text-neutral-grey-100 hover:bg-neutral-grey-10 data-[state=open]:bg-neutral-grey-10 data-[state=open]:text-neutral-grey-100 inline-flex h-7 w-7 items-center justify-center rounded transition-colors", title: "More actions", "aria-label": "More actions", "data-testid": "queued-prompt-more-button", children: _jsx(MoreHorizontal, { className: "h-4 w-4", strokeWidth: 1 }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-44", children: [_jsxs(DropdownMenuItem, { onSelect: () => {
37
37
  void navigator.clipboard?.writeText(qp.prompt);
38
38
  }, children: [_jsx(Copy, { strokeWidth: 1 }), "Copy prompt"] }), _jsxs(DropdownMenuItem, { onSelect: () => setExpandedDetailIds((prev) => ({
39
39
  ...prev,
@@ -0,0 +1,15 @@
1
+ import type { AgentTurnTiming } from "../agentTurnTiming";
2
+ /**
3
+ * Current time that refreshes once per interval while `active`. Stops ticking
4
+ * when inactive and keeps the last value, so a settled turn reads the moment
5
+ * it settled until persisted timestamps arrive.
6
+ */
7
+ export declare function useNowTicker(active: boolean, intervalMs?: number): number;
8
+ /**
9
+ * Wall-clock duration of one response turn. Ticks while the turn is running
10
+ * and settles on the persisted timing once the response has completed.
11
+ */
12
+ export declare function ResponseTurnDuration({ timing, className, }: {
13
+ timing: AgentTurnTiming;
14
+ className?: string;
15
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { Timer } from "lucide-react";
4
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../../../../components/ui/tooltip";
5
+ import { cn } from "../../../../lib/utils";
6
+ import { formatTime } from "../../../utils";
7
+ import { formatDurationMs, formatElapsedMs } from "../agentDurations";
8
+ const TICK_INTERVAL_MS = 1000;
9
+ /**
10
+ * Current time that refreshes once per interval while `active`. Stops ticking
11
+ * when inactive and keeps the last value, so a settled turn reads the moment
12
+ * it settled until persisted timestamps arrive.
13
+ */
14
+ export function useNowTicker(active, intervalMs = TICK_INTERVAL_MS) {
15
+ const [now, setNow] = useState(() => Date.now());
16
+ useEffect(() => {
17
+ if (!active) {
18
+ return undefined;
19
+ }
20
+ const handle = window.setInterval(() => {
21
+ setNow(Date.now());
22
+ }, intervalMs);
23
+ return () => {
24
+ window.clearInterval(handle);
25
+ };
26
+ }, [active, intervalMs]);
27
+ return now;
28
+ }
29
+ const formatClock = (epochMs) => formatTime(new Date(epochMs), { second: "numeric" });
30
+ /**
31
+ * Wall-clock duration of one response turn. Ticks while the turn is running
32
+ * and settles on the persisted timing once the response has completed.
33
+ */
34
+ export function ResponseTurnDuration({ timing, className, }) {
35
+ const { startedAt, endedAt, isLive } = timing;
36
+ const now = useNowTicker(isLive);
37
+ // While live the clock is the end. Once settled, prefer the persisted end;
38
+ // until the snapshot brings it, the last tick is within a second of it.
39
+ const effectiveEnd = isLive ? now : (endedAt ?? now);
40
+ const durationMs = Math.max(0, effectiveEnd - startedAt);
41
+ const label = isLive
42
+ ? formatElapsedMs(durationMs)
43
+ : formatDurationMs(durationMs);
44
+ if (!label) {
45
+ return null;
46
+ }
47
+ const tooltip = isLive
48
+ ? `Responding for ${label}, since ${formatClock(startedAt)}`
49
+ : `Response took ${label} (${formatClock(startedAt)} to ${formatClock(effectiveEnd)})`;
50
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { className: cn("text-neutral-grey-50 inline-flex shrink-0 cursor-help items-center gap-1 text-[10px] leading-4 tabular-nums", className), "data-testid": "agent-turn-duration", "data-live": isLive ? "true" : "false", "data-duration-ms": durationMs, children: [_jsx(Timer, { size: 12, strokeWidth: 1, "aria-hidden": "true" }), _jsx("span", { children: label })] }) }), _jsx(TooltipContent, { side: "top", children: tooltip })] }));
51
+ }
52
+ //# sourceMappingURL=ResponseTurnDuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseTurnDuration.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/ResponseTurnDuration.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import "react-json-view-lite/dist/index.css";
3
3
  import type { EditOperation } from "../../../../types";
4
+ import type { AgentTurnTiming } from "../agentTurnTiming";
4
5
  export type ApprovalInfo = {
5
6
  summary: string;
6
7
  riskLevel?: "low" | "medium" | "high";
@@ -69,6 +70,7 @@ interface ToolCallDisplayProps {
69
70
  editOperations?: EditOperation[];
70
71
  finished: boolean;
71
72
  isLive?: boolean;
73
+ liveTiming?: AgentTurnTiming | null;
72
74
  openPopovers: {
73
75
  [key: string]: boolean;
74
76
  };
@@ -90,5 +92,5 @@ export declare const InlineToolResultPreview: ({ preview, className, imageClassN
90
92
  imageClassName?: string;
91
93
  testId?: string;
92
94
  }) => React.JSX.Element;
93
- export declare function ToolCallDisplay({ toolCalls, editOperations, finished, isLive, openPopovers, setOpenPopovers, messageId, }: ToolCallDisplayProps): React.JSX.Element | null;
95
+ export declare function ToolCallDisplay({ toolCalls, editOperations, finished, isLive, liveTiming, openPopovers, setOpenPopovers, messageId, }: ToolCallDisplayProps): React.JSX.Element | null;
94
96
  export {};
@@ -7,7 +7,11 @@ import { CopyButton } from "../../../../components/ui/copy-button";
7
7
  import { AgentImageCopyButton } from "../../AgentImageCopyButton";
8
8
  import { Tooltip, TooltipTrigger, TooltipContent, } from "../../../../components/ui/tooltip";
9
9
  import { formatTime, formatDateTime } from "../../../utils";
10
+ import { formatDurationMs } from "../agentDurations";
11
+ import { formatWorkingOnToolLabel } from "./agentThinkingStyles";
12
+ import { ResponseTurnDuration } from "./ResponseTurnDuration";
10
13
  import { getToolCallContentRenderer } from "./toolCallContentRenderers";
14
+ import { cleanToolFunctionName } from "./toolCallApprovalGate";
11
15
  // Custom dark theme styles for JSON view
12
16
  const darkJsonStyles = {
13
17
  ...defaultStyles,
@@ -31,7 +35,7 @@ const JsonLightThemeStyles = () => (_jsx("style", { children: `
31
35
  .dark-json-null { color: var(--color-feedback-red); }
32
36
  .dark-json-undefined { color: var(--color-feedback-red); }
33
37
  ` }));
34
- import { ChevronDown, ChevronRight, CheckCircle2, CircleSlash2, XCircle, Wrench, } from "lucide-react";
38
+ import { ChevronDown, ChevronRight, CheckCircle2, CircleSlash2, XCircle, } from "lucide-react";
35
39
  const ToolCallStatusIcon = ({ status }) => {
36
40
  const Icon = status === "failed"
37
41
  ? XCircle
@@ -44,31 +48,6 @@ const ToolCallStatusIcon = ({ status }) => {
44
48
  ? "text-feedback-orange"
45
49
  : "text-feedback-green" }));
46
50
  };
47
- const formatToolDuration = (durationMs) => {
48
- if (typeof durationMs !== "number" ||
49
- !Number.isFinite(durationMs) ||
50
- durationMs < 0) {
51
- return null;
52
- }
53
- if (durationMs < 1000) {
54
- return `${Math.round(durationMs)}ms`;
55
- }
56
- if (durationMs < 10_000) {
57
- return `${(durationMs / 1000).toFixed(1)}s`;
58
- }
59
- if (durationMs < 60_000) {
60
- return `${Math.round(durationMs / 1000)}s`;
61
- }
62
- const totalSeconds = Math.round(durationMs / 1000);
63
- const minutes = Math.floor(totalSeconds / 60);
64
- const seconds = totalSeconds % 60;
65
- if (minutes < 60) {
66
- return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`;
67
- }
68
- const hours = Math.floor(minutes / 60);
69
- const remainingMinutes = minutes % 60;
70
- return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`;
71
- };
72
51
  const formatToolCallMeta = (createdDate, durationMs) => {
73
52
  const parts = [];
74
53
  let tooltip = null;
@@ -79,7 +58,7 @@ const formatToolCallMeta = (createdDate, durationMs) => {
79
58
  tooltip = formatDateTime(parsed);
80
59
  }
81
60
  }
82
- const duration = formatToolDuration(durationMs);
61
+ const duration = formatDurationMs(durationMs);
83
62
  if (duration) {
84
63
  parts.push(duration);
85
64
  }
@@ -476,7 +455,7 @@ ToolCallDetails.displayName = "ToolCallDetails";
476
455
  const AnimatedToolCallDetails = ({ isExpanded, children, }) => {
477
456
  return (_jsx(AnimatedDisclosureContent, { isExpanded: isExpanded, children: children }));
478
457
  };
479
- export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLive = false, openPopovers, setOpenPopovers, messageId, }) {
458
+ export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLive = false, liveTiming = null, openPopovers, setOpenPopovers, messageId, }) {
480
459
  // Always starts collapsed — pending approvals are surfaced by the
481
460
  // ApprovalCard after the activity, never by force-expanding diagnostics.
482
461
  const [isGroupExpanded, setIsGroupExpanded] = useState(false);
@@ -484,17 +463,13 @@ export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLi
484
463
  const groupSummary = useMemo(() => {
485
464
  if (!toolCalls || toolCalls.length === 0)
486
465
  return null;
466
+ const lastToolCall = normalizeToolCall(toolCalls[toolCalls.length - 1]);
467
+ const lastToolName = cleanToolFunctionName(lastToolCall.function?.name || lastToolCall.displayName) || "Tool call";
487
468
  const uniqueNames = [
488
469
  ...new Set(toolCalls
489
470
  .map((tc) => {
490
471
  const normalized = normalizeToolCall(tc);
491
- return (("functionName" in tc
492
- ? tc.functionName
493
- : normalized.function?.name) || "")
494
- .replace(/ \(approved\)/g, "")
495
- .replace(/ \(rejected\)/g, "")
496
- .replace(/ \(pending approval\)/g, "")
497
- .trim();
472
+ return cleanToolFunctionName(normalized.function?.name || normalized.displayName);
498
473
  })
499
474
  .filter(Boolean)),
500
475
  ];
@@ -506,7 +481,7 @@ export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLi
506
481
  const normalized = normalizeToolCall(tc);
507
482
  return isRejectedToolCall(normalized);
508
483
  }).length;
509
- return { uniqueNames, errorCount, rejectedCount };
484
+ return { lastToolName, uniqueNames, errorCount, rejectedCount };
510
485
  }, [toolCalls]);
511
486
  const allToolCallsCompleted = useMemo(() => {
512
487
  if (!toolCalls || toolCalls.length === 0)
@@ -538,15 +513,18 @@ export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLi
538
513
  return null;
539
514
  }
540
515
  const showGroupHeader = toolCalls.length > 0;
541
- const isGroupActive = !groupHasFailedToolCall &&
542
- !groupHasRejectedToolCall &&
543
- (isLive || !allToolCallsCompleted);
544
- return (_jsxs("div", { className: "flex flex-col", children: [showGroupHeader && (_jsxs("div", { className: "group text-neutral-grey-50 hover:bg-neutral-grey-5/60 hover:text-neutral-grey-100 flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs transition-all", "data-testid": "agent-toolcalls-group", onClick: () => {
516
+ // A failed or rejected call does not end the run — the model receives it as a
517
+ // tool result and continues — so it must not switch off the live shimmer.
518
+ // The error / rejected badges below still surface the outcome.
519
+ const isGroupActive = !finished && (isLive || !allToolCallsCompleted);
520
+ return (_jsxs("div", { className: "flex flex-col", children: [showGroupHeader && (_jsxs("div", { className: "group/disclosure text-neutral-grey-50 hover:bg-neutral-grey-5/60 hover:text-neutral-grey-100 flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs transition-all", "data-testid": "agent-toolcalls-group", onClick: () => {
545
521
  setIsGroupExpanded(!isGroupExpanded);
546
522
  setUserToggled(true);
547
- }, children: [_jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center transition-transform group-hover:scale-110", children: isGroupExpanded ? (_jsx(ChevronDown, { size: 14, strokeWidth: 1, className: "text-neutral-grey-50" })) : (_jsx(ChevronRight, { size: 14, strokeWidth: 1, className: "text-neutral-grey-50" })) }), _jsx("div", { className: "text-neutral-grey-50 flex h-4 w-4 shrink-0 items-center justify-center", children: _jsx(Wrench, { strokeWidth: 1, size: 14 }) }), _jsxs("span", { className: `leading-4 font-medium ${isGroupActive ? "animate-text-shimmer" : ""}`, children: [toolCalls.length, " tool call", toolCalls.length !== 1 ? "s" : ""] }), !isGroupExpanded && groupSummary && (_jsx("span", { className: "text-neutral-grey-50 ml-1 min-w-0 flex-1 truncate text-[10px] leading-4", children: groupSummary.uniqueNames.length <= 3
523
+ }, children: [_jsx("span", { className: `leading-4 font-medium ${isGroupActive ? "animate-text-shimmer min-w-0 truncate" : "shrink-0"}`, children: isGroupActive
524
+ ? formatWorkingOnToolLabel(groupSummary?.lastToolName ?? "Tool call")
525
+ : `${toolCalls.length} tool call${toolCalls.length !== 1 ? "s" : ""}` }), _jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center opacity-0 transition-opacity group-hover/disclosure:opacity-100", children: isGroupExpanded ? (_jsx(ChevronDown, { size: 14, strokeWidth: 1, className: "text-neutral-grey-50" })) : (_jsx(ChevronRight, { size: 14, strokeWidth: 1, className: "text-neutral-grey-50" })) }), !isGroupActive && !isGroupExpanded && groupSummary && (_jsx("span", { className: "text-neutral-grey-50 ml-1 min-w-0 flex-1 truncate text-[10px] leading-4", children: groupSummary.uniqueNames.length <= 3
548
526
  ? groupSummary.uniqueNames.join(", ")
549
- : `${groupSummary.uniqueNames.slice(0, 2).join(", ")} +${groupSummary.uniqueNames.length - 2} more` })), groupSummary && groupSummary.errorCount > 0 && (_jsxs("span", { className: "text-feedback-red ml-1 shrink-0 text-[10px] leading-4", children: ["(", groupSummary.errorCount, " error", groupSummary.errorCount !== 1 ? "s" : "", ")"] })), groupSummary && groupSummary.rejectedCount > 0 && (_jsxs("span", { className: "text-feedback-orange ml-1 shrink-0 text-[10px] leading-4", children: ["(", groupSummary.rejectedCount, " rejected)"] })), _jsx("div", { className: "ml-auto flex h-4 w-4 shrink-0 items-center justify-center", children: groupHasFailedToolCall || groupHasRejectedToolCall ? (_jsx(ToolCallStatusIcon, { status: groupHasFailedToolCall ? "failed" : "rejected" })) : isGroupActive ? (_jsx(Spinner, { size: "xs" })) : (_jsx(ToolCallStatusIcon, { status: "completed" })) })] })), _jsx("div", { className: userToggled
527
+ : `${groupSummary.uniqueNames.slice(0, 2).join(", ")} +${groupSummary.uniqueNames.length - 2} more` })), groupSummary && groupSummary.errorCount > 0 && (_jsxs("span", { className: "text-feedback-red ml-1 shrink-0 text-[10px] leading-4", children: ["(", groupSummary.errorCount, " error", groupSummary.errorCount !== 1 ? "s" : "", ")"] })), groupSummary && groupSummary.rejectedCount > 0 && (_jsxs("span", { className: "text-feedback-orange ml-1 shrink-0 text-[10px] leading-4", children: ["(", groupSummary.rejectedCount, " rejected)"] })), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [isGroupActive && liveTiming?.isLive && (_jsx(ResponseTurnDuration, { timing: liveTiming })), _jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center", children: groupHasFailedToolCall || groupHasRejectedToolCall ? (_jsx(ToolCallStatusIcon, { status: groupHasFailedToolCall ? "failed" : "rejected" })) : isGroupActive ? (_jsx(Spinner, { size: "xs" })) : (_jsx(ToolCallStatusIcon, { status: "completed" })) })] })] })), _jsx("div", { className: userToggled
550
528
  ? "grid transition-[grid-template-rows] duration-200 ease-out"
551
529
  : "grid", style: {
552
530
  gridTemplateRows: isGroupExpanded ? "1fr" : "0fr",
@@ -588,25 +566,25 @@ export function ToolCallDisplay({ toolCalls, editOperations = [], finished, isLi
588
566
  (isAwaitingApproval || isStreaming || !finished);
589
567
  // Debug logging removed for performance
590
568
  const isExpanded = openPopovers[popoverKey] || false;
591
- return (_jsxs("div", { children: [_jsxs("div", { className: "group text-neutral-grey-50 hover:bg-neutral-grey-5/60 hover:text-neutral-grey-100 flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs transition-all", onClick: () => {
569
+ return (_jsxs("div", { children: [_jsx("div", { className: "group/disclosure text-neutral-grey-50 hover:bg-neutral-grey-5/60 hover:text-neutral-grey-100 flex cursor-pointer items-center gap-1.5 rounded-md px-1 py-1 text-xs transition-all", onClick: () => {
592
570
  setOpenPopovers((prev) => ({
593
571
  ...prev,
594
572
  [popoverKey]: !prev[popoverKey],
595
573
  }));
596
- }, children: [_jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center transition-transform group-hover:scale-110", children: _jsx(ChevronRight, { size: 14, strokeWidth: 1, className: `text-neutral-grey-50 transition-transform duration-200 ease-out motion-reduce:transition-none ${isExpanded ? "rotate-90" : "rotate-0"}` }) }), _jsx("div", { className: "text-neutral-grey-50 flex h-4 w-4 shrink-0 items-center justify-center", children: _jsx(Wrench, { strokeWidth: 1, size: 14 }) }), _jsxs("div", { className: "inline-flex min-w-0 flex-1 items-center gap-2", children: [_jsxs("span", { className: `shrink-0 leading-4 font-medium transition-colors ${hasFailed
597
- ? "text-feedback-red"
598
- : isPruned
599
- ? "text-neutral-grey-50"
600
- : ""}`, children: [(originalFunctionName ||
601
- toolCall?.function?.name ||
602
- toolCall?.displayName ||
603
- "(function name missing)")
604
- .replace(" (approved)", "")
605
- .replace(" (rejected)", "")
606
- .replace(" (pending approval)", ""), toolCall.function?.error &&
607
- !isRejected &&
608
- !isPruned && (_jsx("span", { className: "text-feedback-red ml-1 leading-4", children: "(error)" })), isPruned && (_jsxs("span", { className: "rounded-badge bg-neutral-grey-5 badge-pad-sm text-2xs text-neutral-grey-100 ml-2 inline-flex items-center gap-1 font-medium", children: [_jsx("span", { children: "\u2702" }), " Pruned"] })), isRejected && (_jsx("span", { className: "rounded-badge bg-feedback-orange-light badge-pad-sm text-2xs text-feedback-orange ml-2 inline-flex items-center gap-1 font-medium", children: "Rejected" }))] }), finalApprovalInfo?.summary && !hasApprovalStatus && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-neutral-grey-50 min-w-0 flex-1 cursor-help truncate text-xs leading-4 italic", children: finalApprovalInfo.summary }) }), _jsx(TooltipContent, { side: "top", className: "max-w-md", children: finalApprovalInfo.summary })] })), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [toolCallMeta &&
609
- (toolCallMeta.tooltip ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-neutral-grey-50 cursor-help text-[10px] leading-4", children: toolCallMeta.display }) }), _jsx(TooltipContent, { side: "top", children: toolCallMeta.tooltip })] })) : (_jsx("span", { className: "text-neutral-grey-50 text-[10px] leading-4", children: toolCallMeta.display }))), _jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center transition-all", children: hasFailed ? (_jsx(ToolCallStatusIcon, { status: "failed" })) : isRejected ? (_jsx(ToolCallStatusIcon, { status: "rejected" })) : showPendingStatus ? (_jsx(Spinner, { size: "xs" })) : (_jsx(ToolCallStatusIcon, { status: "completed" })) })] })] })] }), _jsx(AnimatedToolCallDetails, { isExpanded: isExpanded, children: _jsx(ToolCallDetails, { toolCall: toolCall, result: toolResult, operations: matchedOperations }) })] }, toolCallKey));
574
+ }, children: _jsxs("div", { className: "inline-flex min-w-0 flex-1 items-center gap-2", children: [_jsxs("span", { className: `shrink-0 leading-4 font-medium transition-colors ${hasFailed
575
+ ? "text-feedback-red"
576
+ : isPruned
577
+ ? "text-neutral-grey-50"
578
+ : ""}`, children: [(originalFunctionName ||
579
+ toolCall?.function?.name ||
580
+ toolCall?.displayName ||
581
+ "(function name missing)")
582
+ .replace(" (approved)", "")
583
+ .replace(" (rejected)", "")
584
+ .replace(" (pending approval)", ""), toolCall.function?.error &&
585
+ !isRejected &&
586
+ !isPruned && (_jsx("span", { className: "text-feedback-red ml-1 leading-4", children: "(error)" })), isPruned && (_jsxs("span", { className: "rounded-badge bg-neutral-grey-5 badge-pad-sm text-2xs text-neutral-grey-100 ml-2 inline-flex items-center gap-1 font-medium", children: [_jsx("span", { children: "\u2702" }), " Pruned"] })), isRejected && (_jsx("span", { className: "rounded-badge bg-feedback-orange-light badge-pad-sm text-2xs text-feedback-orange ml-2 inline-flex items-center gap-1 font-medium", children: "Rejected" }))] }), _jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center opacity-0 transition-opacity group-hover/disclosure:opacity-100", children: _jsx(ChevronRight, { size: 14, strokeWidth: 1, className: `text-neutral-grey-50 transition-transform duration-200 ease-out motion-reduce:transition-none ${isExpanded ? "rotate-90" : "rotate-0"}` }) }), finalApprovalInfo?.summary && !hasApprovalStatus && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-neutral-grey-50 min-w-0 flex-1 cursor-help truncate text-xs leading-4 italic", children: finalApprovalInfo.summary }) }), _jsx(TooltipContent, { side: "top", className: "max-w-md", children: finalApprovalInfo.summary })] })), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [toolCallMeta &&
587
+ (toolCallMeta.tooltip ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "text-neutral-grey-50 cursor-help text-[10px] leading-4", children: toolCallMeta.display }) }), _jsx(TooltipContent, { side: "top", children: toolCallMeta.tooltip })] })) : (_jsx("span", { className: "text-neutral-grey-50 text-[10px] leading-4", children: toolCallMeta.display }))), _jsx("div", { className: "flex h-4 w-4 shrink-0 items-center justify-center transition-all", children: hasFailed ? (_jsx(ToolCallStatusIcon, { status: "failed" })) : isRejected ? (_jsx(ToolCallStatusIcon, { status: "rejected" })) : showPendingStatus ? (_jsx(Spinner, { size: "xs" })) : (_jsx(ToolCallStatusIcon, { status: "completed" })) })] })] }) }), _jsx(AnimatedToolCallDetails, { isExpanded: isExpanded, children: _jsx(ToolCallDetails, { toolCall: toolCall, result: toolResult, operations: matchedOperations }) })] }, toolCallKey));
610
588
  }) }) }) })] }));
611
589
  }
612
590
  //# sourceMappingURL=ToolCallDisplay.js.map