@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.
- package/dist/agents-view/AgentCard.js +2 -2
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentsView.js +4 -2
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +8 -1
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/DateAgentsGroup.js +1 -1
- package/dist/agents-view/DateAgentsGroup.js.map +1 -1
- package/dist/components/ui/checkbox.js +3 -2
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/context-menu.d.ts +9 -1
- package/dist/components/ui/context-menu.js +59 -12
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/select.js +16 -2
- package/dist/components/ui/select.js.map +1 -1
- package/dist/config/config.d.ts +2 -0
- package/dist/config/config.js +66 -10
- package/dist/config/config.js.map +1 -1
- package/dist/config/types/sidebar.d.ts +8 -0
- package/dist/config/types/workspace.d.ts +8 -0
- package/dist/config/types.d.ts +24 -0
- package/dist/config/types.js.map +1 -1
- package/dist/editor/ContextMenu.js +59 -6
- package/dist/editor/ContextMenu.js.map +1 -1
- package/dist/editor/Editor.js +9 -2
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/EditorWarning.d.ts +3 -1
- package/dist/editor/EditorWarning.js +24 -7
- package/dist/editor/EditorWarning.js.map +1 -1
- package/dist/editor/FieldList.js +1 -1
- package/dist/editor/FieldList.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +8 -6
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/LinkEditorDialog.d.ts +2 -0
- package/dist/editor/LinkEditorDialog.js +6 -1
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/ai/AgentSharingSection.d.ts +1 -1
- package/dist/editor/ai/AgentSharingSection.js +7 -0
- package/dist/editor/ai/AgentSharingSection.js.map +1 -1
- package/dist/editor/ai/Agents.js +7 -7
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.d.ts +7 -1
- package/dist/editor/ai/InlineAiDialog.js +27 -7
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +63 -1
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/terminal/activeReasoningModel.d.ts +9 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js +20 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js.map +1 -0
- package/dist/editor/ai/terminal/agentDurations.d.ts +27 -0
- package/dist/editor/ai/terminal/agentDurations.js +89 -0
- package/dist/editor/ai/terminal/agentDurations.js.map +1 -0
- package/dist/editor/ai/terminal/agentStartRequest.d.ts +1 -0
- package/dist/editor/ai/terminal/agentStartRequest.js +1 -0
- package/dist/editor/ai/terminal/agentStartRequest.js.map +1 -1
- package/dist/editor/ai/terminal/agentTurnTiming.d.ts +33 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js +103 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentCostDisplay.d.ts +3 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js +16 -25
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +4 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.d.ts +5 -1
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js +7 -2
- package/dist/editor/ai/terminal/components/AgentProfileModelSettingsSection.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.d.ts +10 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js +12 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProfileSwitcher.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentSettingsContent.d.ts +5 -1
- package/dist/editor/ai/terminal/components/AgentSettingsContent.js +2 -2
- package/dist/editor/ai/terminal/components/AgentSettingsContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.d.ts +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +17 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +69 -8
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -2
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentThinkingIndicator.d.ts +21 -1
- package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +15 -4
- package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +3 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +84 -58
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/ApprovalCard.js +72 -10
- package/dist/editor/ai/terminal/components/ApprovalCard.js.map +1 -1
- package/dist/editor/ai/terminal/components/InitialThinkingSplash.js +2 -2
- package/dist/editor/ai/terminal/components/InitialThinkingSplash.js.map +1 -1
- package/dist/editor/ai/terminal/components/QueuedPromptsPanel.js +2 -2
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.d.ts +15 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +52 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -0
- package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +3 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +35 -57
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js +1 -1
- package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +26 -1
- package/dist/editor/ai/terminal/components/agentThinkingStyles.js +26 -1
- package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -1
- package/dist/editor/ai/terminal/components/approvalActions.d.ts +1 -0
- package/dist/editor/ai/terminal/components/approvalActions.js +5 -2
- package/dist/editor/ai/terminal/components/approvalActions.js.map +1 -1
- package/dist/editor/ai/terminal/components/useApprovalActions.d.ts +4 -4
- package/dist/editor/ai/terminal/components/useApprovalActions.js +5 -2
- package/dist/editor/ai/terminal/components/useApprovalActions.js.map +1 -1
- package/dist/editor/ai/terminal/reasoningEffortLevels.d.ts +8 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js +54 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js.map +1 -0
- package/dist/editor/ai/terminal/requestUsage.d.ts +3 -0
- package/dist/editor/ai/terminal/requestUsage.js +22 -0
- package/dist/editor/ai/terminal/requestUsage.js.map +1 -0
- package/dist/editor/ai/terminal/types.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentModeState.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentProfileSelection.d.ts +10 -0
- package/dist/editor/ai/terminal/useAgentProfileSelection.js +10 -2
- package/dist/editor/ai/terminal/useAgentProfileSelection.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.d.ts +5 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js +10 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentSessionSync.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSettingsCommands.d.ts +9 -0
- package/dist/editor/ai/terminal/useAgentSettingsCommands.js +63 -6
- package/dist/editor/ai/terminal/useAgentSettingsCommands.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSettingsPanel.d.ts +5 -0
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js +8 -0
- package/dist/editor/ai/terminal/useAgentSettingsPanel.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSkillActions.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSkillActions.js +1 -0
- package/dist/editor/ai/terminal/useAgentSkillActions.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +6 -1
- package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.d.ts +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +21 -4
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalControls.d.ts +4 -0
- package/dist/editor/ai/terminal/useAgentTerminalControls.js +5 -1
- package/dist/editor/ai/terminal/useAgentTerminalControls.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.d.ts +6 -0
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +202 -64
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +733 -722
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/SandboxWelcomeOverlay.d.ts +4 -1
- package/dist/editor/client/SandboxWelcomeOverlay.js +6 -5
- package/dist/editor/client/SandboxWelcomeOverlay.js.map +1 -1
- package/dist/editor/client/SessionsDialog.d.ts +2 -0
- package/dist/editor/client/SessionsDialog.js +27 -0
- package/dist/editor/client/SessionsDialog.js.map +1 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js +4 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/ui/DevModeIndicator.js +6 -4
- package/dist/editor/client/ui/DevModeIndicator.js.map +1 -1
- package/dist/editor/commands/componentCommands.js +1 -2
- package/dist/editor/commands/componentCommands.js.map +1 -1
- package/dist/editor/editor-warnings/ItemLocked.js +1 -1
- package/dist/editor/editor-warnings/ItemLocked.js.map +1 -1
- package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +1 -1
- package/dist/editor/editor-warnings/NoLanguageWriteAccess.js.map +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +1 -1
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js.map +1 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js +1 -1
- package/dist/editor/editor-warnings/NoWriteAccess.js.map +1 -1
- package/dist/editor/field-types/LinkFieldEditor.js +15 -4
- package/dist/editor/field-types/LinkFieldEditor.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +6 -1
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/RichTextEditor.js +5 -5
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +6 -1
- package/dist/editor/field-types/SingleLineText.js.map +1 -1
- package/dist/editor/field-types/TreeListEditor.js +3 -3
- package/dist/editor/field-types/TreeListEditor.js.map +1 -1
- package/dist/editor/fieldTypes.d.ts +2 -0
- package/dist/editor/itemContextMenuGroups.d.ts +16 -0
- package/dist/editor/itemContextMenuGroups.js +48 -0
- package/dist/editor/itemContextMenuGroups.js.map +1 -0
- package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
- package/dist/editor/menubar/ActiveUsers.js +4 -1
- package/dist/editor/menubar/ActiveUsers.js.map +1 -1
- package/dist/editor/menubar/OpenPublishedPageButton.d.ts +1 -0
- package/dist/editor/menubar/OpenPublishedPageButton.js +22 -0
- package/dist/editor/menubar/OpenPublishedPageButton.js.map +1 -0
- package/dist/editor/menubar/WorkflowButton.js +77 -22
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js +1 -1
- package/dist/editor/menubar/toolbar-sections/PreviewModeControl.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +8 -4
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +36 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +4 -0
- package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.d.ts +19 -0
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js +14 -0
- package/dist/editor/page-editor-chrome/bridgeInlineFormatToolbarLayout.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.d.ts +3 -0
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +18 -0
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
- package/dist/editor/page-viewer/DeviceToolbar.js +20 -8
- package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
- package/dist/editor/page-viewer/EditorForm.js +8 -7
- package/dist/editor/page-viewer/EditorForm.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +10 -0
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/PreviewModeNotice.d.ts +7 -0
- package/dist/editor/page-viewer/PreviewModeNotice.js +19 -0
- package/dist/editor/page-viewer/PreviewModeNotice.js.map +1 -0
- package/dist/editor/page-viewer/pageViewContext.d.ts +5 -1
- package/dist/editor/page-viewer/pageViewContext.js +59 -2
- package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
- package/dist/editor/page-viewer/previewEditAttempt.d.ts +31 -0
- package/dist/editor/page-viewer/previewEditAttempt.js +68 -0
- package/dist/editor/page-viewer/previewEditAttempt.js.map +1 -0
- package/dist/editor/pageModel.d.ts +1 -0
- package/dist/editor/services/agentService.d.ts +67 -0
- package/dist/editor/services/agentService.js +2 -0
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +7 -0
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +9 -0
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +13 -0
- package/dist/editor/services/editService.js +8 -0
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/migrationService.d.ts +31 -0
- package/dist/editor/services/migrationService.js +22 -0
- package/dist/editor/services/migrationService.js.map +1 -0
- package/dist/editor/services/publicSiteService.d.ts +40 -0
- package/dist/editor/services/publicSiteService.js +5 -0
- package/dist/editor/services/publicSiteService.js.map +1 -0
- package/dist/editor/settings/About.js +71 -32
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/MigrationJournalCard.d.ts +12 -0
- package/dist/editor/settings/MigrationJournalCard.js +114 -0
- package/dist/editor/settings/MigrationJournalCard.js.map +1 -0
- package/dist/editor/settings/QuotaUserPicker.js +1 -1
- package/dist/editor/settings/SettingsView.js +18 -5
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +1 -0
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js +2 -0
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/PublicSiteEntryDialog.d.ts +8 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js +113 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js.map +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.d.ts +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.js +153 -0
- package/dist/editor/settings/panels/PublicSitesPanel.js.map +1 -0
- package/dist/editor/settings/panels/StatusPanel.js +2 -1
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js +4 -4
- package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
- package/dist/editor/settings/panels/index.d.ts +1 -0
- package/dist/editor/settings/panels/index.js +1 -0
- package/dist/editor/settings/panels/index.js.map +1 -1
- package/dist/editor/settings/panels/publicSiteHelpers.d.ts +6 -0
- package/dist/editor/settings/panels/publicSiteHelpers.js +30 -0
- package/dist/editor/settings/panels/publicSiteHelpers.js.map +1 -0
- package/dist/editor/settings/status/coreStatusChecks.js +4 -0
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/sidebar/OperationDetailsContent.d.ts +14 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +521 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -0
- package/dist/editor/sidebar/OperationItem.js +9 -77
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/Sessions.d.ts +3 -1
- package/dist/editor/sidebar/Sessions.js +2 -1
- package/dist/editor/sidebar/Sessions.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +22 -7
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +14 -7
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/PublishDialog.d.ts +7 -2
- package/dist/editor/ui/PublishDialog.js +67 -33
- package/dist/editor/ui/PublishDialog.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +31 -20
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/PublishReadinessSummary.d.ts +12 -0
- package/dist/editor/ui/PublishReadinessSummary.js +34 -0
- package/dist/editor/ui/PublishReadinessSummary.js.map +1 -0
- package/dist/editor/ui/TemplateSelectorDialog.js +27 -1
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/publishReadiness.d.ts +85 -0
- package/dist/editor/ui/publishReadiness.js +251 -0
- package/dist/editor/ui/publishReadiness.js.map +1 -0
- package/dist/editor/ui/usePublishingItem.d.ts +8 -0
- package/dist/editor/ui/usePublishingItem.js +47 -0
- package/dist/editor/ui/usePublishingItem.js.map +1 -0
- package/dist/editor/utils/linkDisplay.d.ts +12 -0
- package/dist/editor/utils/linkDisplay.js +23 -0
- package/dist/editor/utils/linkDisplay.js.map +1 -0
- package/dist/editor/views/ItemEditor.js +44 -27
- package/dist/editor/views/ItemEditor.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/viewportClip.d.ts +18 -0
- package/dist/lib/viewportClip.js +22 -0
- package/dist/lib/viewportClip.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/wizard/steps/ImportModelDialog.js +238 -176
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.js +4 -1
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/tour/Tour.d.ts +10 -2
- package/dist/tour/Tour.js +136 -31
- package/dist/tour/Tour.js.map +1 -1
- package/dist/tour/default-tour.js +5 -16
- package/dist/tour/default-tour.js.map +1 -1
- package/dist/tour/preview-tour.js +1 -1
- package/dist/tour/preview-tour.js.map +1 -1
- package/dist/tour/sandbox-tour.js +4 -3
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/dist/tour/tour-utils.d.ts +6 -0
- package/dist/tour/tour-utils.js +10 -0
- package/dist/tour/tour-utils.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/package.json +1 -1
- 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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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;
|
|
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 {
|
|
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 ${
|
|
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,
|
|
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-
|
|
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-
|
|
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,
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
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("
|
|
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)"] })),
|
|
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: [
|
|
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:
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
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
|