@parhelia/core 0.1.12888 → 0.1.12890
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.d.ts +2 -1
- package/dist/agents-view/AgentCard.js +14 -38
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentGalleryCard.d.ts +12 -0
- package/dist/agents-view/AgentGalleryCard.js +12 -0
- package/dist/agents-view/AgentGalleryCard.js.map +1 -0
- package/dist/agents-view/AgentGalleryView.d.ts +18 -0
- package/dist/agents-view/AgentGalleryView.js +88 -0
- package/dist/agents-view/AgentGalleryView.js.map +1 -0
- package/dist/agents-view/AgentProfileIcon.d.ts +9 -0
- package/dist/agents-view/AgentProfileIcon.js +28 -0
- package/dist/agents-view/AgentProfileIcon.js.map +1 -0
- package/dist/agents-view/AgentsView.d.ts +6 -1
- package/dist/agents-view/AgentsView.js +40 -12
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +40 -21
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/DateAgentsGroup.d.ts +2 -1
- package/dist/agents-view/DateAgentsGroup.js +2 -2
- package/dist/agents-view/DateAgentsGroup.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.d.ts +2 -1
- package/dist/agents-view/ProfileAgentsGroup.js +5 -8
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/agents-view/RenameAgentDialog.d.ts +12 -0
- package/dist/agents-view/RenameAgentDialog.js +40 -0
- package/dist/agents-view/RenameAgentDialog.js.map +1 -0
- package/dist/components/FilterInput.d.ts +2 -0
- package/dist/components/FilterInput.js +4 -2
- package/dist/components/FilterInput.js.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +1 -1
- package/dist/components/ui/alert-dialog.js +5 -5
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/alert.d.ts +3 -2
- package/dist/components/ui/alert.js +9 -4
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/button.d.ts +9 -4
- package/dist/components/ui/button.js +16 -9
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/dialog.js +4 -3
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/styled-dialog-title.js +1 -1
- package/dist/components/ui/styled-dialog-title.js.map +1 -1
- package/dist/config/config.js +4 -3
- package/dist/config/config.js.map +1 -1
- package/dist/editor/FieldListField.js +6 -2
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +3 -1
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +3 -3
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.js +11 -9
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.d.ts +5 -0
- package/dist/editor/WorkspaceTitleSwitcher.js +86 -0
- package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -0
- package/dist/editor/ai/AgentInlineDialogContent.js +1 -1
- package/dist/editor/ai/AgentInlineDialogContent.js.map +1 -1
- package/dist/editor/ai/Agents.js +155 -43
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +1 -1
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +52 -82
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/terminal/agentQuestionnaireRecap.d.ts +82 -0
- package/dist/editor/ai/terminal/agentQuestionnaireRecap.js +277 -0
- package/dist/editor/ai/terminal/agentQuestionnaireRecap.js.map +1 -0
- package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.d.ts +3 -0
- package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.js +3 -3
- package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionLiveTotals.d.ts +5 -0
- package/dist/editor/ai/terminal/agentSessionLiveTotals.js +14 -0
- package/dist/editor/ai/terminal/agentSessionLiveTotals.js.map +1 -1
- package/dist/editor/ai/terminal/agentSessionSnapshot.js +2 -0
- package/dist/editor/ai/terminal/agentSessionSnapshot.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +5 -2
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.d.ts +12 -0
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js +207 -0
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +3 -3
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js +5 -2
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +5 -3
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +4 -3
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +6 -19
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +5 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +33 -2
- package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +2 -0
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +20 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +3 -2
- package/dist/editor/ai/terminal/components/AgentTerminalView.js +11 -2
- package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +59 -7
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.d.ts +9 -0
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +56 -0
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -0
- package/dist/editor/ai/terminal/contextBreakdown.d.ts +17 -0
- package/dist/editor/ai/terminal/contextBreakdown.js +58 -0
- package/dist/editor/ai/terminal/contextBreakdown.js.map +1 -0
- package/dist/editor/ai/terminal/types.d.ts +2 -0
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.d.ts +29 -0
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js +68 -0
- package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentInlineDialogEvents.js +8 -3
- package/dist/editor/ai/terminal/useAgentInlineDialogEvents.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentInlineDialogState.d.ts +10 -3
- package/dist/editor/ai/terminal/useAgentInlineDialogState.js +33 -4
- package/dist/editor/ai/terminal/useAgentInlineDialogState.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js +16 -2
- package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +3 -1
- package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSession.js +12 -1
- package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentSubmitLifecycle.d.ts +3 -0
- package/dist/editor/ai/terminal/useAgentSubmitLifecycle.js +6 -1
- package/dist/editor/ai/terminal/useAgentSubmitLifecycle.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalController.js +48 -4
- package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -0
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.js +2 -1
- package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentToolCallHandler.js +13 -1
- package/dist/editor/ai/terminal/useAgentToolCallHandler.js.map +1 -1
- package/dist/editor/ai/terminal/useAgentToolResultHandler.js +31 -7
- package/dist/editor/ai/terminal/useAgentToolResultHandler.js.map +1 -1
- package/dist/editor/bridge/BridgeClient.d.ts +1 -8
- package/dist/editor/bridge/BridgeClient.js +2 -4
- package/dist/editor/bridge/BridgeClient.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +512 -0
- package/dist/editor/bridge/protocol.js +188 -0
- package/dist/editor/bridge/protocol.js.map +1 -0
- package/dist/editor/client/AboutDialog.js +15 -4
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +50 -13
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/editContext.d.ts +6 -0
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +3 -0
- package/dist/editor/client/hooks/useSocketMessageHandler.js +57 -25
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/hooks/useWorkbox.d.ts +1 -0
- package/dist/editor/client/hooks/useWorkbox.js +14 -1
- package/dist/editor/client/hooks/useWorkbox.js.map +1 -1
- package/dist/editor/client/operationToasts.d.ts +2 -0
- package/dist/editor/client/operationToasts.js +35 -0
- package/dist/editor/client/operationToasts.js.map +1 -0
- package/dist/editor/client/operations.d.ts +4 -0
- package/dist/editor/client/operations.js +134 -74
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.d.ts +1 -0
- package/dist/editor/client/pageModelBuilder.js +22 -13
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.d.ts +1 -0
- package/dist/editor/client/waitForEditOperationTerminal.js +1 -1
- package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
- package/dist/editor/commands/itemCommands.js +5 -16
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.js +3 -2
- package/dist/editor/content-tree/IndicatorSettings.js.map +1 -1
- package/dist/editor/field-types/CheckboxEditor.js +3 -1
- package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
- package/dist/editor/field-types/MultiLineText.js +24 -7
- package/dist/editor/field-types/MultiLineText.js.map +1 -1
- package/dist/editor/field-types/SingleLineText.js +19 -2
- package/dist/editor/field-types/SingleLineText.js.map +1 -1
- package/dist/editor/field-types/useTextCompletion.d.ts +20 -0
- package/dist/editor/field-types/useTextCompletion.js +166 -0
- package/dist/editor/field-types/useTextCompletion.js.map +1 -0
- package/dist/editor/menubar/ItemLanguageVersion.js +3 -14
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/OperationsIndicator.d.ts +7 -0
- package/dist/editor/menubar/OperationsIndicator.js +87 -0
- package/dist/editor/menubar/OperationsIndicator.js.map +1 -0
- package/dist/editor/menubar/ToolbarFactory.js +4 -1
- package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.d.ts +3 -2
- package/dist/editor/menubar/VersionSelector.js +28 -12
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +7 -4
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/EditControls.js +7 -3
- package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +4 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/notifications/NotificationCenter.js +28 -27
- package/dist/editor/notifications/NotificationCenter.js.map +1 -1
- package/dist/editor/notifications/NotificationItem.js +100 -15
- package/dist/editor/notifications/NotificationItem.js.map +1 -1
- package/dist/editor/notifications/watchEventOptions.js +3 -2
- package/dist/editor/notifications/watchEventOptions.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +8 -2
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +7 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +3 -10
- package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
- package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +2 -2
- package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +1 -1
- package/dist/editor/page-viewer/MiniMap.d.ts +21 -0
- package/dist/editor/page-viewer/MiniMap.js +113 -11
- package/dist/editor/page-viewer/MiniMap.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +155 -22
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +1 -2
- package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
- package/dist/editor/page-viewer/pageViewContext.d.ts +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +5 -1
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +12 -2
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/latestFeedbackData.js +7 -1
- package/dist/editor/reviews/latestFeedbackData.js.map +1 -1
- package/dist/editor/reviews/suggestedEditState.d.ts +2 -0
- package/dist/editor/reviews/suggestedEditState.js +20 -0
- package/dist/editor/reviews/suggestedEditState.js.map +1 -1
- package/dist/editor/reviews/suggestionContentChange.d.ts +1 -1
- package/dist/editor/reviews/suggestionContentChange.js +23 -3
- package/dist/editor/reviews/suggestionContentChange.js.map +1 -1
- package/dist/editor/services/agentService.d.ts +6 -0
- package/dist/editor/services/agentService.js +14 -0
- package/dist/editor/services/agentService.js.map +1 -1
- package/dist/editor/services/aiService.d.ts +5 -0
- package/dist/editor/services/aiService.js.map +1 -1
- package/dist/editor/settings/About.js +1 -1
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +4 -2
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js +61 -33
- package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ClusterInstancesPanel.js +2 -1
- package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +3 -2
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -2
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/StatusPanel.js +10 -7
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/sidebar/Completions.js +1 -1
- package/dist/editor/sidebar/Completions.js.map +1 -1
- package/dist/editor/sidebar/ComponentTree.js +1 -1
- package/dist/editor/sidebar/ComponentTree.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +1 -1
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +18 -4
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +3 -2
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.js +3 -2
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/ui/DialogButtons.d.ts +3 -1
- package/dist/editor/ui/DialogButtons.js +3 -2
- package/dist/editor/ui/DialogButtons.js.map +1 -1
- package/dist/editor/ui/Icons.js +1 -1
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemCollectionEditor.js +2 -2
- package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +4 -6
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.d.ts +2 -1
- package/dist/editor/ui/SimpleTabs.js +23 -5
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.js +120 -3
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/splitterResizeEvent.d.ts +7 -0
- package/dist/editor/ui/splitterResizeEvent.js +6 -0
- package/dist/editor/ui/splitterResizeEvent.js.map +1 -1
- package/dist/editor/version-diff/versionDiffTargets.d.ts +1 -1
- package/dist/editor/workflowFields.d.ts +1 -0
- package/dist/editor/workflowFields.js +16 -0
- package/dist/editor/workflowFields.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/ModernSplashScreen.js +20 -11
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +26 -7
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +154 -121
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/CreateTaskDialog.js +1 -1
- package/dist/task-board/components/CreateTaskDialog.js.map +1 -1
- package/dist/task-board/components/ProjectDashboard.d.ts +12 -22
- package/dist/task-board/components/ProjectDashboard.js +120 -108
- package/dist/task-board/components/ProjectDashboard.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +3 -0
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.d.ts +2 -0
- package/dist/task-board/components/ProjectPropertiesPanel.js +7 -4
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.d.ts +16 -0
- package/dist/task-board/components/ProjectSettingsDialog.js +55 -47
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +6 -5
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.js +3 -2
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
- package/dist/task-board/components/TaskBoardHomeView.d.ts +7 -0
- package/dist/task-board/components/TaskBoardHomeView.js +21 -0
- package/dist/task-board/components/TaskBoardHomeView.js.map +1 -0
- package/dist/task-board/components/TaskBoardProjectListSidebar.js +74 -12
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js +9 -52
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +5 -13
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +3 -2
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/taskBoardNavStore.d.ts +0 -2
- package/dist/task-board/taskBoardNavStore.js +0 -2
- package/dist/task-board/taskBoardNavStore.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.js +3 -2
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/KanbanView.js +161 -38
- package/dist/task-board/views/KanbanView.js.map +1 -1
- package/dist/task-board/views/ListView.js +1 -2
- package/dist/task-board/views/ListView.js.map +1 -1
- package/dist/task-board/views/WizardView.d.ts +2 -0
- package/dist/task-board/views/WizardView.js +7 -4
- package/dist/task-board/views/WizardView.js.map +1 -1
- package/package.json +1 -2
- package/styles.css +4 -3
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { ExternalLink } from "lucide-react";
|
|
5
|
+
import { getProject, getTasks, } from "../../../../task-board/services/taskService";
|
|
6
|
+
import { useEditContext } from "../../../client/editContext";
|
|
7
|
+
import { useParheliaSettings } from "../../../hooks/useParheliaSettings";
|
|
8
|
+
import { getAgent as fetchAgent, } from "../../../services/agentService";
|
|
9
|
+
const REFRESH_INTERVAL_MS = 10_000;
|
|
10
|
+
function asRecord(value) {
|
|
11
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
12
|
+
? value
|
|
13
|
+
: undefined;
|
|
14
|
+
}
|
|
15
|
+
function getString(record, ...keys) {
|
|
16
|
+
if (!record)
|
|
17
|
+
return undefined;
|
|
18
|
+
for (const key of keys) {
|
|
19
|
+
const value = record[key];
|
|
20
|
+
if (typeof value === "string" && value.trim())
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
function getTrackedProjectFromAdditionalData(additionalData) {
|
|
26
|
+
const data = asRecord(additionalData);
|
|
27
|
+
const projectId = getString(data, "createdProjectId", "CreatedProjectId");
|
|
28
|
+
if (!projectId)
|
|
29
|
+
return null;
|
|
30
|
+
return {
|
|
31
|
+
projectId,
|
|
32
|
+
title: getString(data, "createdProjectTitle", "CreatedProjectTitle"),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function getTrackedProjectFromAgentContext(agentContext) {
|
|
36
|
+
if (!agentContext)
|
|
37
|
+
return null;
|
|
38
|
+
try {
|
|
39
|
+
const context = typeof agentContext === "string"
|
|
40
|
+
? JSON.parse(agentContext)
|
|
41
|
+
: agentContext;
|
|
42
|
+
const record = asRecord(context);
|
|
43
|
+
return getTrackedProjectFromAdditionalData(record?.additionalData ?? record?.AdditionalData);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function getTrackedProjectFromMessages(messages) {
|
|
50
|
+
if (!messages?.length)
|
|
51
|
+
return null;
|
|
52
|
+
for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
|
|
53
|
+
const toolCalls = messages[messageIndex]?.toolCalls;
|
|
54
|
+
if (!toolCalls?.length)
|
|
55
|
+
continue;
|
|
56
|
+
for (let callIndex = toolCalls.length - 1; callIndex >= 0; callIndex -= 1) {
|
|
57
|
+
const toolCall = toolCalls[callIndex];
|
|
58
|
+
if (toolCall?.functionName !== "create-project" ||
|
|
59
|
+
toolCall.functionError ||
|
|
60
|
+
!toolCall.functionResult) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const result = JSON.parse(toolCall.functionResult);
|
|
65
|
+
const record = asRecord(result);
|
|
66
|
+
const projectId = getString(record, "projectId", "ProjectId");
|
|
67
|
+
if (projectId) {
|
|
68
|
+
return {
|
|
69
|
+
projectId,
|
|
70
|
+
title: getString(record, "title", "Title"),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Ignore non-JSON results; the context fallback can still find the project.
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function ProjectProgressBar({ done, total, className, }) {
|
|
82
|
+
const percent = total > 0 ? Math.min((done / total) * 100, 100) : 0;
|
|
83
|
+
return (_jsx("div", { className: `bg-neutral-grey-10 h-2 w-full overflow-hidden rounded-full ${className || ""}`, children: _jsx("div", { className: "bg-feedback-green h-full rounded-full transition-all duration-300", style: { width: `${percent}%` } }) }));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Progress header for the taskboard project created by this agent (tracked in
|
|
87
|
+
* the agent context as additionalData.createdProjectId). Rendered directly
|
|
88
|
+
* above the prompt composer; the expand button opens the project in the
|
|
89
|
+
* taskboard workspace.
|
|
90
|
+
*/
|
|
91
|
+
export function AgentProjectProgress({ agent, agentMetadata, messages, }) {
|
|
92
|
+
const additionalData = agentMetadata?.additionalData;
|
|
93
|
+
const metadataTrackedProject = getTrackedProjectFromAdditionalData(additionalData);
|
|
94
|
+
const messageTrackedProject = useMemo(() => getTrackedProjectFromMessages(messages), [messages]);
|
|
95
|
+
const [loadedTrackedProject, setLoadedTrackedProject] = useState(null);
|
|
96
|
+
const agentId = agent?.id;
|
|
97
|
+
const metadataProjectId = metadataTrackedProject?.projectId;
|
|
98
|
+
const messageProjectId = messageTrackedProject?.projectId;
|
|
99
|
+
const loadedProjectId = loadedTrackedProject?.projectId;
|
|
100
|
+
const projectId = metadataProjectId ?? messageProjectId ?? loadedProjectId;
|
|
101
|
+
const trackedTitle = metadataTrackedProject?.title ??
|
|
102
|
+
messageTrackedProject?.title ??
|
|
103
|
+
loadedTrackedProject?.title;
|
|
104
|
+
const editContext = useEditContext();
|
|
105
|
+
const parheliaSettings = useParheliaSettings();
|
|
106
|
+
const currency = parheliaSettings?.currency || "USD";
|
|
107
|
+
const [project, setProject] = useState(null);
|
|
108
|
+
const [tasks, setTasks] = useState(null);
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
setLoadedTrackedProject(null);
|
|
111
|
+
}, [agentId]);
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (projectId || !agentId)
|
|
114
|
+
return;
|
|
115
|
+
let disposed = false;
|
|
116
|
+
const loadTrackedProject = async () => {
|
|
117
|
+
try {
|
|
118
|
+
const details = await fetchAgent(agentId);
|
|
119
|
+
const trackedProject = getTrackedProjectFromAgentContext(details.agentContext) ??
|
|
120
|
+
getTrackedProjectFromMessages(details.messages);
|
|
121
|
+
if (!disposed && trackedProject?.projectId) {
|
|
122
|
+
setLoadedTrackedProject(trackedProject);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// The regular interval will retry; absence of this header is non-fatal.
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
void loadTrackedProject();
|
|
130
|
+
const interval = window.setInterval(() => void loadTrackedProject(), REFRESH_INTERVAL_MS);
|
|
131
|
+
return () => {
|
|
132
|
+
disposed = true;
|
|
133
|
+
window.clearInterval(interval);
|
|
134
|
+
};
|
|
135
|
+
}, [agentId, projectId]);
|
|
136
|
+
const refresh = useCallback(async () => {
|
|
137
|
+
if (!projectId)
|
|
138
|
+
return;
|
|
139
|
+
try {
|
|
140
|
+
const [projectResult, tasksResult] = await Promise.all([
|
|
141
|
+
getProject(projectId),
|
|
142
|
+
getTasks(projectId),
|
|
143
|
+
]);
|
|
144
|
+
if (projectResult.type === "success" && projectResult.data) {
|
|
145
|
+
const data = projectResult.data;
|
|
146
|
+
setProject(data.project ?? data);
|
|
147
|
+
}
|
|
148
|
+
if (tasksResult.type === "success" && Array.isArray(tasksResult.data)) {
|
|
149
|
+
setTasks(tasksResult.data);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Keep the last known data; the next poll may succeed again.
|
|
154
|
+
}
|
|
155
|
+
}, [projectId]);
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
setProject(null);
|
|
158
|
+
setTasks(null);
|
|
159
|
+
if (!projectId)
|
|
160
|
+
return;
|
|
161
|
+
void refresh();
|
|
162
|
+
const interval = setInterval(() => void refresh(), REFRESH_INTERVAL_MS);
|
|
163
|
+
return () => clearInterval(interval);
|
|
164
|
+
}, [projectId, refresh]);
|
|
165
|
+
const openInTaskboard = useCallback(() => {
|
|
166
|
+
if (!projectId || typeof window === "undefined")
|
|
167
|
+
return;
|
|
168
|
+
if (editContext?.workspaceId !== "taskboard") {
|
|
169
|
+
editContext?.switchWorkspace?.("taskboard", {
|
|
170
|
+
skipNavigationHistory: true,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Mirror the notification-route deep link: workspace + tbProjectId, with
|
|
174
|
+
// editor/task params cleared (see config/notificationRoutes.ts).
|
|
175
|
+
const params = new URLSearchParams(window.location.search);
|
|
176
|
+
params.set("workspace", "taskboard");
|
|
177
|
+
params.set("tbProjectId", projectId);
|
|
178
|
+
for (const key of [
|
|
179
|
+
"tbTaskId",
|
|
180
|
+
"tbView",
|
|
181
|
+
"tbWizard",
|
|
182
|
+
"itemid",
|
|
183
|
+
"lang",
|
|
184
|
+
"language",
|
|
185
|
+
"version",
|
|
186
|
+
"reviewId",
|
|
187
|
+
]) {
|
|
188
|
+
params.delete(key);
|
|
189
|
+
}
|
|
190
|
+
const queryString = params.toString();
|
|
191
|
+
window.history.replaceState(null, "", queryString
|
|
192
|
+
? `${window.location.pathname}?${queryString}`
|
|
193
|
+
: window.location.pathname);
|
|
194
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
195
|
+
}, [editContext, projectId]);
|
|
196
|
+
if (!projectId)
|
|
197
|
+
return null;
|
|
198
|
+
const title = project?.title || trackedTitle || "Project";
|
|
199
|
+
const total = tasks?.length ?? 0;
|
|
200
|
+
const done = tasks?.filter((t) => t.status === "Done").length ?? 0;
|
|
201
|
+
const costUsed = project?.costUsed ?? null;
|
|
202
|
+
const costLimit = project?.costLimit ?? null;
|
|
203
|
+
return (_jsxs("div", { "data-testid": "agent-project-progress", className: "shrink-0 px-4 pt-3 pb-2", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-neutral-grey-100 truncate text-sm font-semibold", title: title, children: title }), costUsed != null && (_jsxs("span", { className: "text-neutral-grey-50 hidden truncate text-xs sm:block", children: ["Current total cost:", " ", _jsxs("span", { className: "font-semibold", children: [costUsed.toFixed(2), " ", currency] }), costLimit != null &&
|
|
204
|
+
costLimit > 0 &&
|
|
205
|
+
` / ${costLimit.toFixed(2)} ${currency}`] })), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [_jsx("span", { "data-testid": "agent-project-progress-counts", className: "bg-neutral-grey-5 text-neutral-grey-100 rounded-md px-2 py-0.5 text-xs font-medium tabular-nums", children: tasks ? `${done}/${total} done` : "..." }), _jsx("button", { type: "button", "data-testid": "agent-project-progress-expand", title: "Open in Taskboard", "aria-label": "Open in Taskboard", onClick: openInTaskboard, className: "text-neutral-grey-50 hover:text-neutral-grey-100 hover:bg-neutral-grey-5 rounded-md p-1.5 transition-colors", children: _jsx(ExternalLink, { className: "h-4 w-4" }) })] })] }), _jsx(ProjectProgressBar, { done: done, total: total, className: "mt-2" })] }));
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=AgentProjectProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentProjectProgress.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentProjectProgress.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { ArrowUp, Mic, MicOff, Square } from "lucide-react";
|
|
3
3
|
import { Button } from "../../../../components/ui/button";
|
|
4
4
|
export function AgentPromptActionButtons({ isVoiceDisabled, isListening, isExecuting, sendDisabled, sendTitle, onVoicePointerDown, onVoicePointerUp, onVoicePointerCancel, onSubmit, onStop, }) {
|
|
5
|
-
return (_jsxs("div", { className: "pointer-events-auto flex items-center gap-1 self-end", children: [_jsx("span", { title: isVoiceDisabled
|
|
5
|
+
return (_jsxs("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1 self-end", children: [_jsx("span", { title: isVoiceDisabled
|
|
6
6
|
? "Your browser does not support Speech Recognition"
|
|
7
7
|
: isListening
|
|
8
8
|
? "Stop voice input"
|
|
9
|
-
: "Click to toggle, hold to record", children: _jsx(Button, { onPointerDown: isVoiceDisabled ? undefined : onVoicePointerDown, onPointerUp: isVoiceDisabled ? undefined : onVoicePointerUp, onPointerCancel: isVoiceDisabled ? undefined : onVoicePointerCancel, onContextMenu: (event) => event.preventDefault(), disabled: isVoiceDisabled, size: "
|
|
9
|
+
: "Click to toggle, hold to record", children: _jsx(Button, { onPointerDown: isVoiceDisabled ? undefined : onVoicePointerDown, onPointerUp: isVoiceDisabled ? undefined : onVoicePointerUp, onPointerCancel: isVoiceDisabled ? undefined : onVoicePointerCancel, onContextMenu: (event) => event.preventDefault(), disabled: isVoiceDisabled, size: "iconSm", className: `text-neutral-grey-100 hover:bg-neutral-grey-20 touch-none rounded-md border-0 bg-transparent select-none ${isVoiceDisabled
|
|
10
10
|
? "pointer-events-none cursor-not-allowed opacity-40"
|
|
11
11
|
: "cursor-pointer"}`, "aria-label": isVoiceDisabled
|
|
12
12
|
? "Your browser does not support Speech Recognition"
|
|
13
13
|
: isListening
|
|
14
14
|
? "Stop voice input"
|
|
15
|
-
: "Start voice input", "aria-pressed": isListening, "aria-disabled": isVoiceDisabled, children: isListening ? (_jsx(MicOff, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(Mic, { className: "size-4", strokeWidth: 1.75 })) }) }), _jsx(Button, { onClick: isExecuting ? onStop : onSubmit, disabled: sendDisabled, size: "
|
|
15
|
+
: "Start voice input", "aria-pressed": isListening, "aria-disabled": isVoiceDisabled, children: isListening ? (_jsx(MicOff, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(Mic, { className: "size-4", strokeWidth: 1.75 })) }) }), _jsx(Button, { onClick: isExecuting ? onStop : onSubmit, disabled: sendDisabled, size: "iconSm", className: "bg-neutral-grey-100 hover:bg-neutral-grey-80 cursor-pointer rounded-md text-white", title: sendTitle, "aria-label": isExecuting ? "Stop" : "Send", "data-testid": "agent-send-stop-button", "data-executing": isExecuting ? "true" : "false", children: isExecuting ? (_jsx(Square, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(ArrowUp, { className: "size-4", strokeWidth: 1.75 })) })] }));
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=AgentPromptActionButtons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentPromptActionButtons.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptActionButtons.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAe1D,MAAM,UAAU,wBAAwB,CAAC,EACvC,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,MAAM,GACwB;IAC9B,OAAO,CACL,eAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"AgentPromptActionButtons.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptActionButtons.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAe1D,MAAM,UAAU,wBAAwB,CAAC,EACvC,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,MAAM,GACwB;IAC9B,OAAO,CACL,eAAK,SAAS,EAAC,+DAA+D,aAC5E,eACE,KAAK,EACH,eAAe;oBACb,CAAC,CAAC,kDAAkD;oBACpD,CAAC,CAAC,WAAW;wBACX,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,iCAAiC,YAGzC,KAAC,MAAM,IACL,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,EAC/D,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAC3D,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,EACnE,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAChD,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,4GACT,eAAe;wBACb,CAAC,CAAC,mDAAmD;wBACrD,CAAC,CAAC,gBACN,EAAE,gBAEA,eAAe;wBACb,CAAC,CAAC,kDAAkD;wBACpD,CAAC,CAAC,WAAW;4BACX,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,mBAAmB,kBAEb,WAAW,mBACV,eAAe,YAE7B,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAC9C,GACM,GACJ,EACP,KAAC,MAAM,IACL,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EACxC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mFAAmF,EAC7F,KAAK,EAAE,SAAS,gBACJ,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,iBAC7B,wBAAwB,oBACpB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7C,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAClD,GACM,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -3,5 +3,6 @@ import { type AgentPromptInputAreaProps } from "./AgentPromptInputArea";
|
|
|
3
3
|
export interface AgentPromptComposerProps extends AgentPromptInputAreaProps {
|
|
4
4
|
className?: string;
|
|
5
5
|
children?: React.ReactNode;
|
|
6
|
+
surface?: "default" | "project";
|
|
6
7
|
}
|
|
7
|
-
export declare function AgentPromptComposer({ className, children, ...inputProps }: AgentPromptComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function AgentPromptComposer({ className, children, surface, inputSurface, ...inputProps }: AgentPromptComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../../../../lib/utils";
|
|
3
3
|
import { AgentPromptInputArea, } from "./AgentPromptInputArea";
|
|
4
|
-
export function AgentPromptComposer({ className, children, ...inputProps }) {
|
|
5
|
-
|
|
4
|
+
export function AgentPromptComposer({ className, children, surface = "default", inputSurface, ...inputProps }) {
|
|
5
|
+
const isProjectSurface = surface === "project";
|
|
6
|
+
return (_jsxs("div", { className: cn(isProjectSurface
|
|
7
|
+
? "bg-neutral-grey-5 px-5 pt-5 pb-4"
|
|
8
|
+
: "border-border-default border-t bg-white/95 px-4 pt-3 pb-2", className), children: [_jsx(AgentPromptInputArea, { ...inputProps, inputSurface: isProjectSurface ? "flat" : inputSurface }), children] }));
|
|
6
9
|
}
|
|
7
10
|
//# sourceMappingURL=AgentPromptComposer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentPromptComposer.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptComposer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentPromptComposer.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptComposer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAQhC,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,YAAY,EACZ,GAAG,UAAU,EACY;IACzB,MAAM,gBAAgB,GAAG,OAAO,KAAK,SAAS,CAAC;IAC/C,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,gBAAgB;YACd,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,2DAA2D,EAC/D,SAAS,CACV,aAED,KAAC,oBAAoB,OACf,UAAU,EACd,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GACtD,EACD,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -27,6 +27,7 @@ export interface AgentPromptInputAreaProps {
|
|
|
27
27
|
onBlur: () => void;
|
|
28
28
|
trayOverlay?: React.ReactNode;
|
|
29
29
|
attachmentsContent?: React.ReactNode;
|
|
30
|
+
inputSurface?: "default" | "flat";
|
|
30
31
|
dropHandlers?: {
|
|
31
32
|
isDragOver: boolean;
|
|
32
33
|
onDragOver: (e: React.DragEvent) => void;
|
|
@@ -35,4 +36,4 @@ export interface AgentPromptInputAreaProps {
|
|
|
35
36
|
onDrop: (e: React.DragEvent) => void;
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
|
-
export declare function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, dropHandlers, }: AgentPromptInputAreaProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export declare function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, inputSurface, dropHandlers, }: AgentPromptInputAreaProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useLayoutEffect, useRef, useState } from "react";
|
|
3
3
|
import { Textarea } from "../../../../components/ui/textarea";
|
|
4
|
+
import { cn } from "../../../../lib/utils";
|
|
4
5
|
import { PlaceholderInput, } from "../../../../components/ui/PlaceholderInput";
|
|
5
6
|
import { hasPromptPlaceholders } from "../agentPromptPlaceholders";
|
|
6
|
-
export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, dropHandlers, }) {
|
|
7
|
+
export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, inputSurface = "default", dropHandlers, }) {
|
|
7
8
|
const isDragOver = dropHandlers?.isDragOver ?? false;
|
|
9
|
+
const isFlatSurface = inputSurface === "flat";
|
|
8
10
|
const trayRef = useRef(null);
|
|
9
11
|
const [trayWidth, setTrayWidth] = useState(0);
|
|
10
12
|
useLayoutEffect(() => {
|
|
@@ -39,9 +41,9 @@ export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBotto
|
|
|
39
41
|
: {}),
|
|
40
42
|
...(trayOverlay && trayWidth > 0 ? { paddingBottom: "42px" } : {}),
|
|
41
43
|
};
|
|
42
|
-
return (_jsx("div", { className: "flex items-stretch gap-2", children: _jsxs("div", { className:
|
|
44
|
+
return (_jsx("div", { className: cn("flex items-stretch gap-2", !isFlatSurface && "mx-2"), children: _jsxs("div", { className: cn("relative flex-1 transition-shadow", isFlatSurface ? "rounded-none" : "rounded-[10px]", isDragOver && "ring-highlight-100 ring-2 ring-offset-1"), onDragOver: dropHandlers?.onDragOver, onDragEnter: dropHandlers?.onDragEnter, onDragLeave: dropHandlers?.onDragLeave, onDrop: dropHandlers?.onDrop, children: [trayOverlay && (_jsx("div", { ref: trayRef, className: "pointer-events-auto absolute bottom-2 left-2 z-10 flex items-center gap-1", children: trayOverlay })), _jsxs("div", { className: cn("bg-neutral-grey-5 overflow-hidden", !isFlatSurface && "border-border-default rounded-[10px] border"), children: [_jsx(Textarea, { ref: textareaRef, style: textareaStyle, value: prompt, onChange: (event) => onPromptChange(event.target.value), onKeyDown: onKeyDown, onPaste: onPaste, onFocus: onFocus, onBlur: onBlur, placeholder: readOnly
|
|
43
45
|
? "Read-only access - ask the owner for Full access to chat with this agent."
|
|
44
|
-
: inputPlaceholder, className: "max-h-[250px] min-h-[86px] w-full resize-y overflow-y-auto border-0 bg-transparent
|
|
46
|
+
: inputPlaceholder, className: cn("max-h-[250px] min-h-[86px] w-full resize-y overflow-y-auto border-0 bg-transparent text-[13px] shadow-none focus-visible:shadow-none focus-visible:ring-0 lg:max-h-[450px]", isFlatSurface ? "px-0 pt-0" : "px-3 pt-3"), "data-testid": "agent-terminal-prompt", disabled: isSubmitting || readOnly, readOnly: !effectiveIsFocused, title: !effectiveIsFocused
|
|
45
47
|
? "Editing in another pane - click here to take over"
|
|
46
48
|
: undefined }), attachmentsContent] }), isDragOver && (_jsx("div", { className: "bg-highlight-10/70 text-highlight-100 pointer-events-none absolute inset-0 flex items-center justify-center rounded-[10px] text-xs font-medium", children: "Drop to add to context or upload" }))] }) }));
|
|
47
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentPromptInputArea.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptInputArea.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EACL,gBAAgB,GAEjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentPromptInputArea.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptInputArea.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,9 +7,10 @@ export interface AgentTerminalFullLayoutProps {
|
|
|
7
7
|
onBackToParent: () => void;
|
|
8
8
|
readOnlyAccessNotice: React.ReactNode;
|
|
9
9
|
upperContent: React.ReactNode;
|
|
10
|
+
/** Inline dialog panel for non-questionnaire dialogs (stacked above the composer). */
|
|
10
11
|
inlineDialog: React.ReactNode;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
/** Persistent strip rendered directly above the prompt composer (e.g. project progress). */
|
|
13
|
+
aboveComposer?: React.ReactNode;
|
|
13
14
|
promptComposerProps: Omit<AgentPromptComposerProps, "className" | "children">;
|
|
14
15
|
promptControls: React.ReactNode;
|
|
15
16
|
showStatusBar?: boolean;
|
|
@@ -20,4 +21,4 @@ export interface AgentTerminalFullLayoutProps {
|
|
|
20
21
|
attachmentsContent?: React.ReactNode;
|
|
21
22
|
dropHandlers?: AgentPromptComposerProps["dropHandlers"];
|
|
22
23
|
}
|
|
23
|
-
export declare function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog,
|
|
24
|
+
export declare function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, aboveComposer, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }: AgentTerminalFullLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,23 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../../lib/utils";
|
|
3
3
|
import { AgentParentLink } from "./AgentParentLink";
|
|
4
4
|
import { AgentPromptComposer, } from "./AgentPromptComposer";
|
|
5
|
-
export function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog,
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
name: "conversation",
|
|
10
|
-
defaultSize: 65,
|
|
11
|
-
content: upperContent,
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
name: "questionnaire",
|
|
15
|
-
defaultSize: 35,
|
|
16
|
-
content: inlineDialog,
|
|
17
|
-
},
|
|
18
|
-
], direction: "vertical", localStorageKey: compact
|
|
19
|
-
? "agent-terminal-compact-questionnaire-splitter"
|
|
20
|
-
: "agent-terminal-questionnaire-splitter", className: "min-h-0 flex-1", splitterClassName: "bg-neutral-grey-10 hover:bg-neutral-grey-10" })) : (_jsxs(_Fragment, { children: [upperContent, inlineDialog] }));
|
|
21
|
-
return (_jsxs("div", { className: `flex h-full min-h-0 flex-col ${className || ""}`, children: [_jsx(AgentParentLink, { parentAgentId: parentAgentId, simpleMode: simpleMode, onBack: onBackToParent }), readOnlyAccessNotice, content, _jsx(AgentPromptComposer, { ...promptComposerProps, trayOverlay: trayOverlay, attachmentsContent: attachmentsContent, dropHandlers: dropHandlers, className: simpleMode ? "pb-10" : undefined, children: promptControls })] }));
|
|
5
|
+
export function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, aboveComposer, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }) {
|
|
6
|
+
const content = (_jsxs(_Fragment, { children: [upperContent, inlineDialog] }));
|
|
7
|
+
const promptComposer = (_jsx(AgentPromptComposer, { ...promptComposerProps, trayOverlay: trayOverlay, attachmentsContent: attachmentsContent, dropHandlers: dropHandlers, className: cn(simpleMode ? "pb-10" : undefined), surface: aboveComposer ? "project" : "default", children: aboveComposer ? null : promptControls }));
|
|
8
|
+
return (_jsxs("div", { className: cn("mx-auto flex h-full min-h-0 w-full max-w-[750px] flex-col", className), children: [_jsx(AgentParentLink, { parentAgentId: parentAgentId, simpleMode: simpleMode, onBack: onBackToParent }), readOnlyAccessNotice, content, aboveComposer ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "border-border-default mx-3 shrink-0 overflow-hidden rounded-[16px] border bg-white sm:mx-4", children: [aboveComposer, promptComposer] }), _jsx("div", { className: "shrink-0 px-4 pb-2", children: promptControls })] })) : (promptComposer)] }));
|
|
22
9
|
}
|
|
23
10
|
//# sourceMappingURL=AgentTerminalFullLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTerminalFullLayout.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AgentTerminalFullLayout.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAwB/B,MAAM,UAAU,uBAAuB,CAAC,EACtC,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,GACiB;IAC7B,MAAM,OAAO,GAAG,CACd,8BACG,YAAY,EACZ,YAAY,IACZ,CACJ,CAAC;IAEF,MAAM,cAAc,GAAG,CACrB,KAAC,mBAAmB,OACd,mBAAmB,EACvB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC/C,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAE7C,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,GAClB,CACvB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,SAAS,CACV,aAED,KAAC,eAAe,IACd,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc,GACtB,EACD,oBAAoB,EACpB,OAAO,EACP,aAAa,CAAC,CAAC,CAAC,CACf,8BACE,eAAK,SAAS,EAAC,4FAA4F,aACxG,aAAa,EACb,cAAc,IACX,EACN,cAAK,SAAS,EAAC,oBAAoB,YAAE,cAAc,GAAO,IACzD,CACJ,CAAC,CAAC,CAAC,CACF,cAAc,CACf,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -48,5 +48,9 @@ export interface AgentTerminalFullUpperContentProps {
|
|
|
48
48
|
onDeleteQueuedPrompt?: (queuedPrompt: QueuedPrompt) => void | Promise<void>;
|
|
49
49
|
queuePushDisabled?: boolean;
|
|
50
50
|
queueDeleteDisabled?: boolean;
|
|
51
|
+
/** Active questionnaire dialog rendered inline at the end of the conversation. */
|
|
52
|
+
conversationInlineDialog?: React.ReactNode;
|
|
53
|
+
/** Identifier (callbackId) of the active inline dialog; scrolls it into view when it changes. */
|
|
54
|
+
conversationInlineDialogKey?: string;
|
|
51
55
|
}
|
|
52
|
-
export declare function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, }: AgentTerminalFullUpperContentProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
export declare function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, conversationInlineDialog, conversationInlineDialogKey, }: AgentTerminalFullUpperContentProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useLayoutEffect, useRef } from "react";
|
|
2
3
|
import { Loader2 } from "lucide-react";
|
|
3
4
|
import { AgentGreeting } from "./AgentGreeting";
|
|
4
5
|
import { InitialThinkingSplash } from "./InitialThinkingSplash";
|
|
@@ -7,7 +8,37 @@ import { AgentRunStatusBanners } from "./AgentRunStatusBanners";
|
|
|
7
8
|
import { AgentTerminalMessageGroups, } from "./AgentTerminalMessageGroups";
|
|
8
9
|
import { AgentThinkingDots } from "./AgentThinkingDots";
|
|
9
10
|
import { AgentTerminalContextPanels } from "./AgentTerminalContextPanels";
|
|
10
|
-
export function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, }) {
|
|
11
|
-
|
|
11
|
+
export function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, conversationInlineDialog, conversationInlineDialogKey, }) {
|
|
12
|
+
// Scroll the conversation so the questionnaire's TOP is in view once per
|
|
13
|
+
// dialog (title and first question visible — a tall form scrolled to the
|
|
14
|
+
// bottom would open on its footer). Covers both the live request path and
|
|
15
|
+
// recovery after reload. Re-renders while the same dialog stays open must
|
|
16
|
+
// not yank a user who scrolled away.
|
|
17
|
+
const conversationInlineDialogRef = useRef(null);
|
|
18
|
+
const lastScrolledDialogKeyRef = useRef(null);
|
|
19
|
+
useLayoutEffect(() => {
|
|
20
|
+
if (!conversationInlineDialogKey) {
|
|
21
|
+
lastScrolledDialogKeyRef.current = null;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (lastScrolledDialogKeyRef.current === conversationInlineDialogKey) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
lastScrolledDialogKeyRef.current = conversationInlineDialogKey;
|
|
28
|
+
const scrollDialogIntoView = () => {
|
|
29
|
+
const container = messagesContainerRef.current;
|
|
30
|
+
const dialogElement = conversationInlineDialogRef.current;
|
|
31
|
+
if (!container || !dialogElement) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const containerRect = container.getBoundingClientRect();
|
|
35
|
+
const dialogRect = dialogElement.getBoundingClientRect();
|
|
36
|
+
container.scrollTop += dialogRect.top - containerRect.top - 8;
|
|
37
|
+
};
|
|
38
|
+
scrollDialogIntoView();
|
|
39
|
+
const animationFrameId = window.requestAnimationFrame(scrollDialogIntoView);
|
|
40
|
+
return () => window.cancelAnimationFrame(animationFrameId);
|
|
41
|
+
}, [conversationInlineDialogKey, messagesContainerRef]);
|
|
42
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 flex-1 flex-col", children: [fixedBrowserClaimBanner, _jsx(AgentRunStatusBanners, { agent: agent, agentStub: agentStub, error: error, lastRunStatusReason: lastRunStatusReason }), _jsxs("div", { ref: messagesContainerRef, className: "flex-1 overflow-y-auto", onScroll: onScroll, children: [messages.length === 0 && !error && !hideGreeting && !isLoading ? (_jsx("div", { className: "flex h-full items-center justify-center", children: !activeProfile ? (_jsx(Loader2, { className: "text-neutral-grey-50 mx-auto h-8 w-8 animate-spin" })) : (_jsx(AgentGreeting, { profile: activeProfile, onPromptClick: onGreetingPromptClick })) })) : null, showInitialThinkingSplash ? _jsx(InitialThinkingSplash, {}) : null, inlineBrowserClaimBanner, _jsxs("div", { className: "space-y-0 select-text", children: [_jsx(AgentTerminalMessageGroups, { messages: messages, operations: operations, isExecuting: isExecuting, defaultCollapseJson: defaultCollapseJson, profile: activeProfile, agentId: agent?.id || agentStub.id, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, browserCaptureInlinePrompt: browserCaptureInlinePrompt, readOnly: readOnly, onQuickAction: onQuickAction }), shouldShowThinkingDots ? (_jsx(AgentThinkingDots, { profile: activeProfile })) : null] }), conversationInlineDialog ? (_jsx("div", { ref: conversationInlineDialogRef, "data-testid": "agent-conversation-inline-dialog", className: "px-4 py-3", children: conversationInlineDialog })) : null, !simpleMode && costLimitBanner, _jsx("div", { ref: messagesEndRef })] }), _jsx(AgentTerminalContextPanels, { hideContext: hideContext, simpleMode: simpleMode, isMobile: isMobile, contextChrome: contextChrome, agent: agent, activeProfile: activeProfile, documentListRef: documentListRef, hasTodoContent: hasTodoContent, hasSpawnedAgents: hasSpawnedAgents, hasHistoryContent: hasHistoryContent, messages: messages, agentMetadata: agentMetadata, operations: operations, activeTab: contextPanelsActiveTab, setActiveTab: setContextPanelsActiveTab }), !simpleMode ? (_jsx(QueuedPromptsPanel, { queuedPrompts: queuedPrompts, onPushQueuedPrompt: onPushQueuedPrompt, onDeleteQueuedPrompt: onDeleteQueuedPrompt, pushDisabled: queuePushDisabled, deleteDisabled: queueDeleteDisabled })) : null] }));
|
|
12
43
|
}
|
|
13
44
|
//# sourceMappingURL=AgentTerminalFullUpperContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentTerminalFullUpperContent.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullUpperContent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentTerminalFullUpperContent.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullUpperContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export type ContextWindowStatus = {
|
|
|
10
10
|
estimatedInputTokens: number;
|
|
11
11
|
contextUsedPercent: number;
|
|
12
12
|
model?: string;
|
|
13
|
+
/** Estimated split of the used context by category (category key → tokens) */
|
|
14
|
+
breakdown?: Record<string, number>;
|
|
13
15
|
} | null;
|
|
14
16
|
export type LiveTotals = {
|
|
15
17
|
input: number;
|
|
@@ -7,6 +7,7 @@ import { AgentCostDisplay } from "./AgentCostDisplay";
|
|
|
7
7
|
import { ContentInspectorPopover, } from "../../ContentInspectorPopover";
|
|
8
8
|
import { formatAgentDiagnosticsEvent, formatSeqRanges, interpretAgentRunDiagnostics, } from "../../agentDiagnostics";
|
|
9
9
|
import { HeartbeatDiagnosticsPanel } from "../../HeartbeatDiagnosticsPanel";
|
|
10
|
+
import { buildContextBreakdownRows } from "../contextBreakdown";
|
|
10
11
|
function formatDiagnosticTime(value) {
|
|
11
12
|
if (!value)
|
|
12
13
|
return "—";
|
|
@@ -396,6 +397,9 @@ function buildTokensSection(params) {
|
|
|
396
397
|
]),
|
|
397
398
|
},
|
|
398
399
|
]);
|
|
400
|
+
const contextBreakdownLines = contextWindowStatus
|
|
401
|
+
? buildContextBreakdownRows(contextWindowStatus).map((row) => ` ${row.label}: ${formatNumber(Math.round(row.tokens))} tokens (${formatPercent(row.percent)})`)
|
|
402
|
+
: [];
|
|
399
403
|
const contextSection = contextWindowStatus
|
|
400
404
|
? joinSubsections([
|
|
401
405
|
{
|
|
@@ -411,6 +415,8 @@ function buildTokensSection(params) {
|
|
|
411
415
|
agent?.contextWindowTokens != null
|
|
412
416
|
? `Persisted window size: ${formatNumber(agent.contextWindowTokens)}`
|
|
413
417
|
: null,
|
|
418
|
+
contextBreakdownLines.length > 0 ? "Breakdown (estimated):" : null,
|
|
419
|
+
...contextBreakdownLines,
|
|
414
420
|
]),
|
|
415
421
|
},
|
|
416
422
|
])
|
|
@@ -822,17 +828,30 @@ export function AgentTerminalStatusBar({ agent, contextWindowStatus, effectiveMo
|
|
|
822
828
|
: "var(--color-neutral-grey-50)";
|
|
823
829
|
const radius = 15.915;
|
|
824
830
|
const formatTokens = (tokens) => {
|
|
831
|
+
if (tokens >= 1_000_000) {
|
|
832
|
+
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
833
|
+
}
|
|
825
834
|
if (tokens >= 1000) {
|
|
826
835
|
return `${(tokens / 1000).toFixed(1)}k`;
|
|
827
836
|
}
|
|
828
837
|
return tokens.toString();
|
|
829
838
|
};
|
|
839
|
+
const breakdownRows = useMemo(() => hasData && contextWindowStatus
|
|
840
|
+
? buildContextBreakdownRows(contextWindowStatus)
|
|
841
|
+
: [], [hasData, contextWindowStatus]);
|
|
830
842
|
const hasAssistantMessages = messages.some((m) => m.role === "assistant");
|
|
831
843
|
const canOpenDiagnostics = Boolean(agent?.id) && agent?.status !== "new";
|
|
832
844
|
return (_jsxs("div", { className: "text-neutral-grey-50 mt-1 flex items-center gap-2 text-[11px]", children: [agent?.id && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { className: "flex cursor-help items-center justify-center", children: _jsxs("svg", { className: "h-3 w-3 shrink-0", viewBox: "0 0 36 36", "aria-hidden": "true", children: [_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: "var(--color-border-default)", strokeWidth: "4" }), hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: `${percentValue} 100`, strokeLinecap: "round", style: {
|
|
833
845
|
transformOrigin: "center",
|
|
834
846
|
transform: "rotate(-90deg)",
|
|
835
|
-
} })), !hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: "0 100", strokeLinecap: "round", opacity: 0.5 }))] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: hasData && contextWindowStatus ? (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Context window:" }), " ", formatTokens(contextWindowStatus.estimatedInputTokens || 0), " ", "/ ", formatTokens(contextWindowStatus.contextWindowTokens), " ", "tokens"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Used:" }), " ", pct] })
|
|
847
|
+
} })), !hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: "0 100", strokeLinecap: "round", opacity: 0.5 }))] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: hasData && contextWindowStatus ? (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Context window:" }), " ", formatTokens(contextWindowStatus.estimatedInputTokens || 0), " ", "/ ", formatTokens(contextWindowStatus.contextWindowTokens), " ", "tokens"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Used:" }), " ", pct] }), breakdownRows.length > 0 && (_jsx("div", { className: "border-border-default mt-1.5 min-w-44 space-y-0.5 border-t pt-1.5", children: breakdownRows.map((row, index) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "h-2 w-2 shrink-0 rounded-[2px]", style: row.isFree
|
|
848
|
+
? {
|
|
849
|
+
backgroundColor: "var(--color-border-default)",
|
|
850
|
+
}
|
|
851
|
+
: {
|
|
852
|
+
backgroundColor: "var(--color-highlight-100)",
|
|
853
|
+
opacity: Math.max(0.18, 1 - index * 0.16),
|
|
854
|
+
} }), _jsx("span", { className: "flex-1 pr-3", children: row.label }), _jsxs("span", { className: "tabular-nums whitespace-nowrap", children: [formatTokens(Math.round(row.tokens)), " \u00B7", " ", row.percent.toFixed(1), "%"] })] }, row.key))) }))] })) : (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsx("div", { children: "Context window usage will appear here when the agent starts processing." })] })) })] })), agent?.compressionMarkerIndex != null && (_jsxs(Popover, { open: showCompressionPopover, onOpenChange: setShowCompressionPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "border-highlight-100/20 bg-highlight-10/50 text-highlight-100 hover:bg-highlight-10 badge-pad-sm flex cursor-pointer items-center rounded border text-[11px] transition-colors", onClick: () => setShowCompressionPopover(!showCompressionPopover), children: "Compressed" }) }), _jsx(PopoverContent, { className: "w-96 p-4", align: "start", side: "top", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-neutral-grey-100 text-[10px] font-semibold", children: "Conversation Compressed" }), _jsxs("p", { className: "text-neutral-grey-50 mt-1 text-[11px]", children: ["First ", agent.compressionMarkerIndex, " messages have been summarized to reduce context usage."] })] }), agent.compressedSummary && (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-neutral-grey-100 text-[11px] font-medium", children: "Summary:" }), _jsx("div", { className: "border-border-default bg-neutral-grey-5 text-neutral-grey-100 max-h-64 overflow-y-auto rounded border p-3 text-[11px] whitespace-pre-wrap", children: agent.compressedSummary })] }))] }) })] })), _jsx(AgentCostDisplay, { totalTokens: liveTotals
|
|
836
855
|
? {
|
|
837
856
|
input: liveTotals.input,
|
|
838
857
|
output: liveTotals.output,
|