@stigmer/react 0.5.1 → 1.0.0
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/activity/group-activity.d.ts +13 -0
- package/activity/group-activity.d.ts.map +1 -0
- package/activity/group-activity.js +54 -0
- package/activity/group-activity.js.map +1 -0
- package/activity/index.d.ts +4 -0
- package/activity/index.d.ts.map +1 -0
- package/activity/index.js +3 -0
- package/activity/index.js.map +1 -0
- package/activity/types.d.ts +34 -0
- package/activity/types.d.ts.map +1 -0
- package/activity/types.js +2 -0
- package/activity/types.js.map +1 -0
- package/activity/useRecentActivity.d.ts +35 -0
- package/activity/useRecentActivity.d.ts.map +1 -0
- package/activity/useRecentActivity.js +73 -0
- package/activity/useRecentActivity.js.map +1 -0
- package/agent/AgentPicker.d.ts.map +1 -1
- package/agent/AgentPicker.js +4 -2
- package/agent/AgentPicker.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +1 -1
- package/billing/BillingSection.js.map +1 -1
- package/composer/ComposerToolbar.d.ts +5 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +4 -3
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/InteractionModePicker.d.ts +40 -0
- package/composer/InteractionModePicker.d.ts.map +1 -0
- package/composer/InteractionModePicker.js +76 -0
- package/composer/InteractionModePicker.js.map +1 -0
- package/composer/SessionComposer.d.ts +53 -64
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +20 -8
- package/composer/SessionComposer.js.map +1 -1
- package/composer/__tests__/SessionComposer-memo.test.js +10 -5
- package/composer/__tests__/SessionComposer-memo.test.js.map +1 -1
- package/composer/index.d.ts +3 -1
- package/composer/index.d.ts.map +1 -1
- package/composer/index.js +1 -0
- package/composer/index.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts +19 -0
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -0
- package/dashboard/DashboardFailedRuns.js +35 -0
- package/dashboard/DashboardFailedRuns.js.map +1 -0
- package/dashboard/DashboardKPICards.d.ts +19 -0
- package/dashboard/DashboardKPICards.d.ts.map +1 -0
- package/dashboard/DashboardKPICards.js +80 -0
- package/dashboard/DashboardKPICards.js.map +1 -0
- package/dashboard/OperationalDashboard.d.ts +37 -0
- package/dashboard/OperationalDashboard.d.ts.map +1 -0
- package/dashboard/OperationalDashboard.js +48 -0
- package/dashboard/OperationalDashboard.js.map +1 -0
- package/dashboard/index.d.ts +8 -0
- package/dashboard/index.d.ts.map +1 -0
- package/dashboard/index.js +9 -0
- package/dashboard/index.js.map +1 -0
- package/dashboard/types.d.ts +49 -0
- package/dashboard/types.d.ts.map +1 -0
- package/dashboard/types.js +2 -0
- package/dashboard/types.js.map +1 -0
- package/dashboard/useAgentExecutionSummary.d.ts +33 -0
- package/dashboard/useAgentExecutionSummary.d.ts.map +1 -0
- package/dashboard/useAgentExecutionSummary.js +32 -0
- package/dashboard/useAgentExecutionSummary.js.map +1 -0
- package/dashboard/useDashboardFailedRuns.d.ts +18 -0
- package/dashboard/useDashboardFailedRuns.d.ts.map +1 -0
- package/dashboard/useDashboardFailedRuns.js +86 -0
- package/dashboard/useDashboardFailedRuns.js.map +1 -0
- package/dashboard/useDashboardSummary.d.ts +32 -0
- package/dashboard/useDashboardSummary.d.ts.map +1 -0
- package/dashboard/useDashboardSummary.js +67 -0
- package/dashboard/useDashboardSummary.js.map +1 -0
- package/execution/ContextGauge.d.ts +45 -0
- package/execution/ContextGauge.d.ts.map +1 -0
- package/execution/ContextGauge.js +82 -0
- package/execution/ContextGauge.js.map +1 -0
- package/execution/InteractionModeBadge.d.ts +24 -0
- package/execution/InteractionModeBadge.d.ts.map +1 -0
- package/execution/InteractionModeBadge.js +29 -0
- package/execution/InteractionModeBadge.js.map +1 -0
- package/execution/MessageThread.d.ts +33 -3
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -9
- package/execution/MessageThread.js.map +1 -1
- package/execution/PlanCompletionCard.d.ts +23 -0
- package/execution/PlanCompletionCard.d.ts.map +1 -0
- package/execution/PlanCompletionCard.js +28 -0
- package/execution/PlanCompletionCard.js.map +1 -0
- package/execution/SummarizationBadge.d.ts +30 -0
- package/execution/SummarizationBadge.d.ts.map +1 -0
- package/execution/SummarizationBadge.js +61 -0
- package/execution/SummarizationBadge.js.map +1 -0
- package/execution/SummarizationCard.d.ts +27 -0
- package/execution/SummarizationCard.d.ts.map +1 -0
- package/execution/SummarizationCard.js +47 -0
- package/execution/SummarizationCard.js.map +1 -0
- package/execution/__tests__/PlanCompletionCard.test.d.ts +2 -0
- package/execution/__tests__/PlanCompletionCard.test.d.ts.map +1 -0
- package/execution/__tests__/PlanCompletionCard.test.js +53 -0
- package/execution/__tests__/PlanCompletionCard.test.js.map +1 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts +2 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.d.ts.map +1 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.js +137 -0
- package/execution/__tests__/buildThreadItems-plan-completion.test.js.map +1 -0
- package/execution/__tests__/useContextWindow.test.d.ts +2 -0
- package/execution/__tests__/useContextWindow.test.d.ts.map +1 -0
- package/execution/__tests__/useContextWindow.test.js +121 -0
- package/execution/__tests__/useContextWindow.test.js.map +1 -0
- package/execution/index.d.ts +12 -0
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +6 -0
- package/execution/index.js.map +1 -1
- package/execution/useContextWindow.d.ts +71 -0
- package/execution/useContextWindow.d.ts.map +1 -0
- package/execution/useContextWindow.js +91 -0
- package/execution/useContextWindow.js.map +1 -0
- package/execution/useCreateAgentExecution.d.ts +9 -0
- package/execution/useCreateAgentExecution.d.ts.map +1 -1
- package/execution/useCreateAgentExecution.js +15 -3
- package/execution/useCreateAgentExecution.js.map +1 -1
- package/index.d.ts +9 -4
- package/index.d.ts.map +1 -1
- package/index.js +12 -2
- package/index.js.map +1 -1
- package/internal/VirtualizedThread.d.ts +2 -1
- package/internal/VirtualizedThread.d.ts.map +1 -1
- package/internal/VirtualizedThread.js +3 -2
- package/internal/VirtualizedThread.js.map +1 -1
- package/internal/store/index.d.ts +1 -0
- package/internal/store/index.d.ts.map +1 -1
- package/internal/store/index.js +1 -0
- package/internal/store/index.js.map +1 -1
- package/internal/store/workflow-execution-event-store.d.ts +92 -0
- package/internal/store/workflow-execution-event-store.d.ts.map +1 -0
- package/internal/store/workflow-execution-event-store.js +298 -0
- package/internal/store/workflow-execution-event-store.js.map +1 -0
- package/library/ScopeToggle.d.ts +13 -9
- package/library/ScopeToggle.d.ts.map +1 -1
- package/library/ScopeToggle.js +43 -22
- package/library/ScopeToggle.js.map +1 -1
- package/library/VisibilityToggle.js +14 -5
- package/library/VisibilityToggle.js.map +1 -1
- package/library/index.d.ts +1 -0
- package/library/index.d.ts.map +1 -1
- package/library/index.js +1 -0
- package/library/index.js.map +1 -1
- package/library/useExportResource.d.ts +3 -2
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +11 -6
- package/library/useExportResource.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +25 -13
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +4 -2
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/package.json +16 -5
- package/provider.d.ts.map +1 -1
- package/provider.js +164 -1
- package/provider.js.map +1 -1
- package/resource-detail/ResourceDetailShell.d.ts +1 -1
- package/resource-detail/ResourceDetailShell.d.ts.map +1 -1
- package/resource-detail/ResourceDetailShell.js +6 -6
- package/resource-detail/ResourceDetailShell.js.map +1 -1
- package/resource-detail/types.d.ts +23 -0
- package/resource-detail/types.d.ts.map +1 -1
- package/resource-detail/useDeleteResource.d.ts +1 -1
- package/resource-detail/useDeleteResource.d.ts.map +1 -1
- package/resource-detail/useDeleteResource.js +5 -0
- package/resource-detail/useDeleteResource.js.map +1 -1
- package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -1
- package/resource-workbench/components/ResourceWorkbench.js +2 -1
- package/resource-workbench/components/ResourceWorkbench.js.map +1 -1
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +1 -0
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -0
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +1 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +1 -0
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionUsage.d.ts.map +1 -1
- package/session/useSessionUsage.js +65 -4
- package/session/useSessionUsage.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +1 -4
- package/settings/UsageSection.js.map +1 -1
- package/skill/SkillPicker.d.ts.map +1 -1
- package/skill/SkillPicker.js +4 -2
- package/skill/SkillPicker.js.map +1 -1
- package/src/activity/group-activity.ts +65 -0
- package/src/activity/index.ts +13 -0
- package/src/activity/types.ts +35 -0
- package/src/activity/useRecentActivity.ts +131 -0
- package/src/agent/AgentPicker.tsx +6 -1
- package/src/billing/BillingSection.tsx +3 -2
- package/src/composer/ComposerToolbar.tsx +19 -1
- package/src/composer/InteractionModePicker.tsx +189 -0
- package/src/composer/SessionComposer.tsx +85 -8
- package/src/composer/__tests__/SessionComposer-memo.test.ts +11 -6
- package/src/composer/index.ts +7 -0
- package/src/dashboard/DashboardFailedRuns.tsx +109 -0
- package/src/dashboard/DashboardKPICards.tsx +128 -0
- package/src/dashboard/OperationalDashboard.tsx +96 -0
- package/src/dashboard/index.ts +37 -0
- package/src/dashboard/types.ts +50 -0
- package/src/dashboard/useAgentExecutionSummary.ts +71 -0
- package/src/dashboard/useDashboardFailedRuns.ts +122 -0
- package/src/dashboard/useDashboardSummary.ts +109 -0
- package/src/execution/ContextGauge.tsx +243 -0
- package/src/execution/InteractionModeBadge.tsx +70 -0
- package/src/execution/MessageThread.tsx +88 -3
- package/src/execution/PlanCompletionCard.tsx +105 -0
- package/src/execution/SummarizationBadge.tsx +188 -0
- package/src/execution/SummarizationCard.tsx +126 -0
- package/src/execution/__tests__/PlanCompletionCard.test.tsx +67 -0
- package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +197 -0
- package/src/execution/__tests__/useContextWindow.test.ts +167 -0
- package/src/execution/index.ts +22 -0
- package/src/execution/useContextWindow.ts +148 -0
- package/src/execution/useCreateAgentExecution.ts +26 -3
- package/src/index.ts +222 -0
- package/src/internal/VirtualizedThread.tsx +4 -1
- package/src/internal/store/index.ts +6 -0
- package/src/internal/store/workflow-execution-event-store.ts +391 -0
- package/src/library/ScopeToggle.tsx +88 -20
- package/src/library/VisibilityToggle.tsx +54 -13
- package/src/library/index.ts +2 -0
- package/src/library/useExportResource.ts +12 -9
- package/src/mcp-server/McpServerDetailView.tsx +80 -148
- package/src/mcp-server/McpServerPicker.tsx +6 -1
- package/src/provider.tsx +195 -8
- package/src/resource-detail/ResourceDetailShell.tsx +21 -4
- package/src/resource-detail/types.ts +25 -0
- package/src/resource-detail/useDeleteResource.ts +6 -1
- package/src/resource-workbench/components/ResourceWorkbench.tsx +4 -0
- package/src/session/useNewSessionFlow.ts +1 -0
- package/src/session/useSessionConversation.ts +8 -0
- package/src/session/useSessionPageFlow.ts +1 -0
- package/src/session/useSessionUsage.ts +72 -4
- package/src/settings/UsageSection.tsx +1 -9
- package/src/skill/SkillPicker.tsx +6 -1
- package/src/workflow/ApprovalFormBuilder.tsx +1017 -0
- package/src/workflow/BranchConditionBuilder.tsx +451 -0
- package/src/workflow/CanvasActionsContext.ts +12 -0
- package/src/workflow/CanvasContextMenu.tsx +364 -0
- package/src/workflow/CanvasTaskNode.tsx +372 -0
- package/src/workflow/CanvasTransitionEdge.tsx +122 -0
- package/src/workflow/CostByWorkflowChart.tsx +120 -0
- package/src/workflow/ExecutionSummaryWidget.tsx +194 -0
- package/src/workflow/ExecutionTrendChart.tsx +157 -0
- package/src/workflow/FailedRunsWidget.tsx +109 -0
- package/src/workflow/PendingApprovalsWidget.tsx +115 -0
- package/src/workflow/TaskConfigForm.tsx +618 -0
- package/src/workflow/TaskKindRegistryContext.ts +36 -0
- package/src/workflow/TaskPickerPopover.tsx +326 -0
- package/src/workflow/WorkflowArchitectDialog.tsx +505 -0
- package/src/workflow/WorkflowCanvasEditor.tsx +651 -0
- package/src/workflow/WorkflowCanvasInner.tsx +160 -0
- package/src/workflow/WorkflowDashboard.tsx +124 -0
- package/src/workflow/WorkflowDetailView.tsx +527 -0
- package/src/workflow/WorkflowEditorView.tsx +547 -0
- package/src/workflow/WorkflowExecutionApprovalCard.tsx +129 -0
- package/src/workflow/WorkflowExecutionArtifactPanel.tsx +112 -0
- package/src/workflow/WorkflowExecutionCostPanel.tsx +131 -0
- package/src/workflow/WorkflowExecutionHeader.tsx +194 -0
- package/src/workflow/WorkflowExecutionPhaseBadge.tsx +188 -0
- package/src/workflow/WorkflowExecutionTaskPanel.tsx +135 -0
- package/src/workflow/WorkflowExecutionTimeline.tsx +118 -0
- package/src/workflow/WorkflowExecutionTimelineEvent.tsx +488 -0
- package/src/workflow/WorkflowExecutionViewer.tsx +248 -0
- package/src/workflow/WorkflowInspectorPanel.tsx +568 -0
- package/src/workflow/WorkflowRefinePanel.tsx +411 -0
- package/src/workflow/WorkflowRepairCard.tsx +433 -0
- package/src/workflow/WorkflowRunDialog.tsx +220 -0
- package/src/workflow/WorkflowRunForm.tsx +245 -0
- package/src/workflow/WorkflowTaskList.tsx +177 -0
- package/src/workflow/WorkflowTaskPalette.tsx +248 -0
- package/src/workflow/WorkflowTopologyGraph.tsx +250 -0
- package/src/workflow/WorkflowYamlEditor.tsx +271 -0
- package/src/workflow/__tests__/starter-workflow-yaml.test.ts +57 -0
- package/src/workflow/canvas-constants.ts +87 -0
- package/src/workflow/canvas-icons.tsx +36 -0
- package/src/workflow/extract-workflow-yaml.ts +87 -0
- package/src/workflow/graph-commands.ts +675 -0
- package/src/workflow/index.ts +375 -0
- package/src/workflow/serialize-workflow-yaml.ts +546 -0
- package/src/workflow/starter-workflow-yaml.ts +29 -0
- package/src/workflow/types.ts +99 -0
- package/src/workflow/useCanvasKeyboardShortcuts.ts +134 -0
- package/src/workflow/useDiagnoseExecutionFlow.ts +378 -0
- package/src/workflow/useGraphHistory.ts +138 -0
- package/src/workflow/usePendingApprovals.ts +89 -0
- package/src/workflow/useRefineWorkflowFlow.ts +321 -0
- package/src/workflow/useResolveAgentExecutionSession.ts +57 -0
- package/src/workflow/useRunWorkflowFlow.ts +235 -0
- package/src/workflow/useTaskKindRegistry.ts +135 -0
- package/src/workflow/useWorkflow.ts +78 -0
- package/src/workflow/useWorkflowArchitectFlow.ts +303 -0
- package/src/workflow/useWorkflowCanvas.ts +882 -0
- package/src/workflow/useWorkflowCount.ts +66 -0
- package/src/workflow/useWorkflowDashboardSummary.ts +71 -0
- package/src/workflow/useWorkflowEditor.ts +106 -0
- package/src/workflow/useWorkflowExecution.ts +67 -0
- package/src/workflow/useWorkflowExecutionActions.ts +179 -0
- package/src/workflow/useWorkflowExecutionArtifacts.ts +57 -0
- package/src/workflow/useWorkflowExecutionEventLog.ts +111 -0
- package/src/workflow/useWorkflowExecutionEventStream.ts +244 -0
- package/src/workflow/useWorkflowExecutionList.ts +121 -0
- package/src/workflow/useWorkflowInstances.ts +62 -0
- package/src/workflow/useWorkflowList.ts +79 -0
- package/src/workflow/useWorkflowSave.ts +84 -0
- package/src/workflow/useWorkflowTopology.ts +229 -0
- package/src/workflow/useWorkflowValidation.ts +329 -0
- package/src/workflow/useWorkflowYaml.ts +49 -0
- package/src/workflow/workflow-graph-conversions.ts +796 -0
- package/src/workflow/workflow-graph-model.ts +83 -0
- package/src/workflow/workflow-yaml-diff.ts +132 -0
- package/styles.css +1 -1
- package/workflow/ApprovalFormBuilder.d.ts +24 -0
- package/workflow/ApprovalFormBuilder.d.ts.map +1 -0
- package/workflow/ApprovalFormBuilder.js +347 -0
- package/workflow/ApprovalFormBuilder.js.map +1 -0
- package/workflow/BranchConditionBuilder.d.ts +29 -0
- package/workflow/BranchConditionBuilder.d.ts.map +1 -0
- package/workflow/BranchConditionBuilder.js +170 -0
- package/workflow/BranchConditionBuilder.js.map +1 -0
- package/workflow/CanvasActionsContext.d.ts +8 -0
- package/workflow/CanvasActionsContext.d.ts.map +1 -0
- package/workflow/CanvasActionsContext.js +4 -0
- package/workflow/CanvasActionsContext.js.map +1 -0
- package/workflow/CanvasContextMenu.d.ts +59 -0
- package/workflow/CanvasContextMenu.d.ts.map +1 -0
- package/workflow/CanvasContextMenu.js +98 -0
- package/workflow/CanvasContextMenu.js.map +1 -0
- package/workflow/CanvasTaskNode.d.ts +21 -0
- package/workflow/CanvasTaskNode.d.ts.map +1 -0
- package/workflow/CanvasTaskNode.js +125 -0
- package/workflow/CanvasTaskNode.js.map +1 -0
- package/workflow/CanvasTransitionEdge.d.ts +24 -0
- package/workflow/CanvasTransitionEdge.d.ts.map +1 -0
- package/workflow/CanvasTransitionEdge.js +50 -0
- package/workflow/CanvasTransitionEdge.js.map +1 -0
- package/workflow/CostByWorkflowChart.d.ts +15 -0
- package/workflow/CostByWorkflowChart.d.ts.map +1 -0
- package/workflow/CostByWorkflowChart.js +45 -0
- package/workflow/CostByWorkflowChart.js.map +1 -0
- package/workflow/ExecutionSummaryWidget.d.ts +16 -0
- package/workflow/ExecutionSummaryWidget.d.ts.map +1 -0
- package/workflow/ExecutionSummaryWidget.js +93 -0
- package/workflow/ExecutionSummaryWidget.js.map +1 -0
- package/workflow/ExecutionTrendChart.d.ts +14 -0
- package/workflow/ExecutionTrendChart.d.ts.map +1 -0
- package/workflow/ExecutionTrendChart.js +67 -0
- package/workflow/ExecutionTrendChart.js.map +1 -0
- package/workflow/FailedRunsWidget.d.ts +19 -0
- package/workflow/FailedRunsWidget.d.ts.map +1 -0
- package/workflow/FailedRunsWidget.js +37 -0
- package/workflow/FailedRunsWidget.js.map +1 -0
- package/workflow/PendingApprovalsWidget.d.ts +19 -0
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -0
- package/workflow/PendingApprovalsWidget.js +35 -0
- package/workflow/PendingApprovalsWidget.js.map +1 -0
- package/workflow/TaskConfigForm.d.ts +29 -0
- package/workflow/TaskConfigForm.d.ts.map +1 -0
- package/workflow/TaskConfigForm.js +230 -0
- package/workflow/TaskConfigForm.js.map +1 -0
- package/workflow/TaskKindRegistryContext.d.ts +24 -0
- package/workflow/TaskKindRegistryContext.d.ts.map +1 -0
- package/workflow/TaskKindRegistryContext.js +25 -0
- package/workflow/TaskKindRegistryContext.js.map +1 -0
- package/workflow/TaskPickerPopover.d.ts +33 -0
- package/workflow/TaskPickerPopover.d.ts.map +1 -0
- package/workflow/TaskPickerPopover.js +110 -0
- package/workflow/TaskPickerPopover.js.map +1 -0
- package/workflow/WorkflowArchitectDialog.d.ts +48 -0
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -0
- package/workflow/WorkflowArchitectDialog.js +129 -0
- package/workflow/WorkflowArchitectDialog.js.map +1 -0
- package/workflow/WorkflowCanvasEditor.d.ts +38 -0
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -0
- package/workflow/WorkflowCanvasEditor.js +287 -0
- package/workflow/WorkflowCanvasEditor.js.map +1 -0
- package/workflow/WorkflowCanvasInner.d.ts +32 -0
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -0
- package/workflow/WorkflowCanvasInner.js +49 -0
- package/workflow/WorkflowCanvasInner.js.map +1 -0
- package/workflow/WorkflowDashboard.d.ts +35 -0
- package/workflow/WorkflowDashboard.d.ts.map +1 -0
- package/workflow/WorkflowDashboard.js +59 -0
- package/workflow/WorkflowDashboard.js.map +1 -0
- package/workflow/WorkflowDetailView.d.ts +63 -0
- package/workflow/WorkflowDetailView.d.ts.map +1 -0
- package/workflow/WorkflowDetailView.js +202 -0
- package/workflow/WorkflowDetailView.js.map +1 -0
- package/workflow/WorkflowEditorView.d.ts +43 -0
- package/workflow/WorkflowEditorView.d.ts.map +1 -0
- package/workflow/WorkflowEditorView.js +165 -0
- package/workflow/WorkflowEditorView.js.map +1 -0
- package/workflow/WorkflowExecutionApprovalCard.d.ts +27 -0
- package/workflow/WorkflowExecutionApprovalCard.d.ts.map +1 -0
- package/workflow/WorkflowExecutionApprovalCard.js +32 -0
- package/workflow/WorkflowExecutionApprovalCard.js.map +1 -0
- package/workflow/WorkflowExecutionArtifactPanel.d.ts +15 -0
- package/workflow/WorkflowExecutionArtifactPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionArtifactPanel.js +53 -0
- package/workflow/WorkflowExecutionArtifactPanel.js.map +1 -0
- package/workflow/WorkflowExecutionCostPanel.d.ts +18 -0
- package/workflow/WorkflowExecutionCostPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionCostPanel.js +44 -0
- package/workflow/WorkflowExecutionCostPanel.js.map +1 -0
- package/workflow/WorkflowExecutionHeader.d.ts +26 -0
- package/workflow/WorkflowExecutionHeader.d.ts.map +1 -0
- package/workflow/WorkflowExecutionHeader.js +68 -0
- package/workflow/WorkflowExecutionHeader.js.map +1 -0
- package/workflow/WorkflowExecutionPhaseBadge.d.ts +23 -0
- package/workflow/WorkflowExecutionPhaseBadge.d.ts.map +1 -0
- package/workflow/WorkflowExecutionPhaseBadge.js +99 -0
- package/workflow/WorkflowExecutionPhaseBadge.js.map +1 -0
- package/workflow/WorkflowExecutionTaskPanel.d.ts +24 -0
- package/workflow/WorkflowExecutionTaskPanel.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTaskPanel.js +59 -0
- package/workflow/WorkflowExecutionTaskPanel.js.map +1 -0
- package/workflow/WorkflowExecutionTimeline.d.ts +27 -0
- package/workflow/WorkflowExecutionTimeline.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTimeline.js +51 -0
- package/workflow/WorkflowExecutionTimeline.js.map +1 -0
- package/workflow/WorkflowExecutionTimelineEvent.d.ts +18 -0
- package/workflow/WorkflowExecutionTimelineEvent.d.ts.map +1 -0
- package/workflow/WorkflowExecutionTimelineEvent.js +210 -0
- package/workflow/WorkflowExecutionTimelineEvent.js.map +1 -0
- package/workflow/WorkflowExecutionViewer.d.ts +45 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -0
- package/workflow/WorkflowExecutionViewer.js +75 -0
- package/workflow/WorkflowExecutionViewer.js.map +1 -0
- package/workflow/WorkflowInspectorPanel.d.ts +46 -0
- package/workflow/WorkflowInspectorPanel.d.ts.map +1 -0
- package/workflow/WorkflowInspectorPanel.js +152 -0
- package/workflow/WorkflowInspectorPanel.js.map +1 -0
- package/workflow/WorkflowRefinePanel.d.ts +30 -0
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -0
- package/workflow/WorkflowRefinePanel.js +107 -0
- package/workflow/WorkflowRefinePanel.js.map +1 -0
- package/workflow/WorkflowRepairCard.d.ts +35 -0
- package/workflow/WorkflowRepairCard.d.ts.map +1 -0
- package/workflow/WorkflowRepairCard.js +113 -0
- package/workflow/WorkflowRepairCard.js.map +1 -0
- package/workflow/WorkflowRunDialog.d.ts +51 -0
- package/workflow/WorkflowRunDialog.d.ts.map +1 -0
- package/workflow/WorkflowRunDialog.js +75 -0
- package/workflow/WorkflowRunDialog.js.map +1 -0
- package/workflow/WorkflowRunForm.d.ts +62 -0
- package/workflow/WorkflowRunForm.d.ts.map +1 -0
- package/workflow/WorkflowRunForm.js +64 -0
- package/workflow/WorkflowRunForm.js.map +1 -0
- package/workflow/WorkflowTaskList.d.ts +25 -0
- package/workflow/WorkflowTaskList.d.ts.map +1 -0
- package/workflow/WorkflowTaskList.js +89 -0
- package/workflow/WorkflowTaskList.js.map +1 -0
- package/workflow/WorkflowTaskPalette.d.ts +22 -0
- package/workflow/WorkflowTaskPalette.d.ts.map +1 -0
- package/workflow/WorkflowTaskPalette.js +83 -0
- package/workflow/WorkflowTaskPalette.js.map +1 -0
- package/workflow/WorkflowTopologyGraph.d.ts +22 -0
- package/workflow/WorkflowTopologyGraph.d.ts.map +1 -0
- package/workflow/WorkflowTopologyGraph.js +123 -0
- package/workflow/WorkflowTopologyGraph.js.map +1 -0
- package/workflow/WorkflowYamlEditor.d.ts +43 -0
- package/workflow/WorkflowYamlEditor.d.ts.map +1 -0
- package/workflow/WorkflowYamlEditor.js +215 -0
- package/workflow/WorkflowYamlEditor.js.map +1 -0
- package/workflow/__tests__/starter-workflow-yaml.test.d.ts +2 -0
- package/workflow/__tests__/starter-workflow-yaml.test.d.ts.map +1 -0
- package/workflow/__tests__/starter-workflow-yaml.test.js +44 -0
- package/workflow/__tests__/starter-workflow-yaml.test.js.map +1 -0
- package/workflow/canvas-constants.d.ts +56 -0
- package/workflow/canvas-constants.d.ts.map +1 -0
- package/workflow/canvas-constants.js +74 -0
- package/workflow/canvas-constants.js.map +1 -0
- package/workflow/canvas-icons.d.ts +13 -0
- package/workflow/canvas-icons.d.ts.map +1 -0
- package/workflow/canvas-icons.js +21 -0
- package/workflow/canvas-icons.js.map +1 -0
- package/workflow/extract-workflow-yaml.d.ts +22 -0
- package/workflow/extract-workflow-yaml.d.ts.map +1 -0
- package/workflow/extract-workflow-yaml.js +63 -0
- package/workflow/extract-workflow-yaml.js.map +1 -0
- package/workflow/graph-commands.d.ts +209 -0
- package/workflow/graph-commands.d.ts.map +1 -0
- package/workflow/graph-commands.js +516 -0
- package/workflow/graph-commands.js.map +1 -0
- package/workflow/index.d.ts +66 -0
- package/workflow/index.d.ts.map +1 -0
- package/workflow/index.js +88 -0
- package/workflow/index.js.map +1 -0
- package/workflow/serialize-workflow-yaml.d.ts +39 -0
- package/workflow/serialize-workflow-yaml.d.ts.map +1 -0
- package/workflow/serialize-workflow-yaml.js +413 -0
- package/workflow/serialize-workflow-yaml.js.map +1 -0
- package/workflow/starter-workflow-yaml.d.ts +12 -0
- package/workflow/starter-workflow-yaml.d.ts.map +1 -0
- package/workflow/starter-workflow-yaml.js +30 -0
- package/workflow/starter-workflow-yaml.js.map +1 -0
- package/workflow/types.d.ts +80 -0
- package/workflow/types.d.ts.map +1 -0
- package/workflow/types.js +2 -0
- package/workflow/types.js.map +1 -0
- package/workflow/useCanvasKeyboardShortcuts.d.ts +34 -0
- package/workflow/useCanvasKeyboardShortcuts.d.ts.map +1 -0
- package/workflow/useCanvasKeyboardShortcuts.js +108 -0
- package/workflow/useCanvasKeyboardShortcuts.js.map +1 -0
- package/workflow/useDiagnoseExecutionFlow.d.ts +87 -0
- package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -0
- package/workflow/useDiagnoseExecutionFlow.js +257 -0
- package/workflow/useDiagnoseExecutionFlow.js.map +1 -0
- package/workflow/useGraphHistory.d.ts +28 -0
- package/workflow/useGraphHistory.d.ts.map +1 -0
- package/workflow/useGraphHistory.js +106 -0
- package/workflow/useGraphHistory.js.map +1 -0
- package/workflow/usePendingApprovals.d.ts +35 -0
- package/workflow/usePendingApprovals.d.ts.map +1 -0
- package/workflow/usePendingApprovals.js +50 -0
- package/workflow/usePendingApprovals.js.map +1 -0
- package/workflow/useRefineWorkflowFlow.d.ts +75 -0
- package/workflow/useRefineWorkflowFlow.d.ts.map +1 -0
- package/workflow/useRefineWorkflowFlow.js +216 -0
- package/workflow/useRefineWorkflowFlow.js.map +1 -0
- package/workflow/useResolveAgentExecutionSession.d.ts +33 -0
- package/workflow/useResolveAgentExecutionSession.d.ts.map +1 -0
- package/workflow/useResolveAgentExecutionSession.js +37 -0
- package/workflow/useResolveAgentExecutionSession.js.map +1 -0
- package/workflow/useRunWorkflowFlow.d.ts +82 -0
- package/workflow/useRunWorkflowFlow.d.ts.map +1 -0
- package/workflow/useRunWorkflowFlow.js +145 -0
- package/workflow/useRunWorkflowFlow.js.map +1 -0
- package/workflow/useTaskKindRegistry.d.ts +96 -0
- package/workflow/useTaskKindRegistry.d.ts.map +1 -0
- package/workflow/useTaskKindRegistry.js +75 -0
- package/workflow/useTaskKindRegistry.js.map +1 -0
- package/workflow/useWorkflow.d.ts +47 -0
- package/workflow/useWorkflow.d.ts.map +1 -0
- package/workflow/useWorkflow.js +53 -0
- package/workflow/useWorkflow.js.map +1 -0
- package/workflow/useWorkflowArchitectFlow.d.ts +96 -0
- package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -0
- package/workflow/useWorkflowArchitectFlow.js +179 -0
- package/workflow/useWorkflowArchitectFlow.js.map +1 -0
- package/workflow/useWorkflowCanvas.d.ts +66 -0
- package/workflow/useWorkflowCanvas.d.ts.map +1 -0
- package/workflow/useWorkflowCanvas.js +628 -0
- package/workflow/useWorkflowCanvas.js.map +1 -0
- package/workflow/useWorkflowCount.d.ts +47 -0
- package/workflow/useWorkflowCount.d.ts.map +1 -0
- package/workflow/useWorkflowCount.js +26 -0
- package/workflow/useWorkflowCount.js.map +1 -0
- package/workflow/useWorkflowDashboardSummary.d.ts +34 -0
- package/workflow/useWorkflowDashboardSummary.d.ts.map +1 -0
- package/workflow/useWorkflowDashboardSummary.js +33 -0
- package/workflow/useWorkflowDashboardSummary.js.map +1 -0
- package/workflow/useWorkflowEditor.d.ts +45 -0
- package/workflow/useWorkflowEditor.d.ts.map +1 -0
- package/workflow/useWorkflowEditor.js +52 -0
- package/workflow/useWorkflowEditor.js.map +1 -0
- package/workflow/useWorkflowExecution.d.ts +37 -0
- package/workflow/useWorkflowExecution.d.ts.map +1 -0
- package/workflow/useWorkflowExecution.js +43 -0
- package/workflow/useWorkflowExecution.js.map +1 -0
- package/workflow/useWorkflowExecutionActions.d.ts +41 -0
- package/workflow/useWorkflowExecutionActions.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionActions.js +86 -0
- package/workflow/useWorkflowExecutionActions.js.map +1 -0
- package/workflow/useWorkflowExecutionArtifacts.d.ts +26 -0
- package/workflow/useWorkflowExecutionArtifacts.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionArtifacts.js +29 -0
- package/workflow/useWorkflowExecutionArtifacts.js.map +1 -0
- package/workflow/useWorkflowExecutionEventLog.d.ts +47 -0
- package/workflow/useWorkflowExecutionEventLog.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionEventLog.js +59 -0
- package/workflow/useWorkflowExecutionEventLog.js.map +1 -0
- package/workflow/useWorkflowExecutionEventStream.d.ts +61 -0
- package/workflow/useWorkflowExecutionEventStream.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionEventStream.js +161 -0
- package/workflow/useWorkflowExecutionEventStream.js.map +1 -0
- package/workflow/useWorkflowExecutionList.d.ts +49 -0
- package/workflow/useWorkflowExecutionList.d.ts.map +1 -0
- package/workflow/useWorkflowExecutionList.js +65 -0
- package/workflow/useWorkflowExecutionList.js.map +1 -0
- package/workflow/useWorkflowInstances.d.ts +30 -0
- package/workflow/useWorkflowInstances.d.ts.map +1 -0
- package/workflow/useWorkflowInstances.js +33 -0
- package/workflow/useWorkflowInstances.js.map +1 -0
- package/workflow/useWorkflowList.d.ts +57 -0
- package/workflow/useWorkflowList.d.ts.map +1 -0
- package/workflow/useWorkflowList.js +29 -0
- package/workflow/useWorkflowList.js.map +1 -0
- package/workflow/useWorkflowSave.d.ts +25 -0
- package/workflow/useWorkflowSave.d.ts.map +1 -0
- package/workflow/useWorkflowSave.js +61 -0
- package/workflow/useWorkflowSave.js.map +1 -0
- package/workflow/useWorkflowTopology.d.ts +40 -0
- package/workflow/useWorkflowTopology.d.ts.map +1 -0
- package/workflow/useWorkflowTopology.js +163 -0
- package/workflow/useWorkflowTopology.js.map +1 -0
- package/workflow/useWorkflowValidation.d.ts +27 -0
- package/workflow/useWorkflowValidation.d.ts.map +1 -0
- package/workflow/useWorkflowValidation.js +253 -0
- package/workflow/useWorkflowValidation.js.map +1 -0
- package/workflow/useWorkflowYaml.d.ts +26 -0
- package/workflow/useWorkflowYaml.d.ts.map +1 -0
- package/workflow/useWorkflowYaml.js +26 -0
- package/workflow/useWorkflowYaml.js.map +1 -0
- package/workflow/workflow-graph-conversions.d.ts +70 -0
- package/workflow/workflow-graph-conversions.d.ts.map +1 -0
- package/workflow/workflow-graph-conversions.js +634 -0
- package/workflow/workflow-graph-conversions.js.map +1 -0
- package/workflow/workflow-graph-model.d.ts +83 -0
- package/workflow/workflow-graph-model.d.ts.map +1 -0
- package/workflow/workflow-graph-model.js +5 -0
- package/workflow/workflow-graph-model.js.map +1 -0
- package/workflow/workflow-yaml-diff.d.ts +24 -0
- package/workflow/workflow-yaml-diff.d.ts.map +1 -0
- package/workflow/workflow-yaml-diff.js +96 -0
- package/workflow/workflow-yaml-diff.js.map +1 -0
|
@@ -6,6 +6,7 @@ import { ConfigureMenu, type ConfigureMenuItem } from "./ConfigureMenu";
|
|
|
6
6
|
import { ModelSelector } from "../models/ModelSelector";
|
|
7
7
|
import { HarnessSelector } from "../models/HarnessSelector";
|
|
8
8
|
import type { HarnessOption } from "../models/harness";
|
|
9
|
+
import { InteractionModePicker, type InteractionModeOption } from "./InteractionModePicker";
|
|
9
10
|
import {
|
|
10
11
|
PaperclipIcon,
|
|
11
12
|
WorkspaceIcon,
|
|
@@ -48,6 +49,12 @@ export interface ComposerToolbarProps {
|
|
|
48
49
|
readonly harness?: HarnessOption;
|
|
49
50
|
readonly onHarnessChange: (harness: HarnessOption) => void;
|
|
50
51
|
|
|
52
|
+
// -- Interaction mode picker ------------------------------------------------
|
|
53
|
+
|
|
54
|
+
readonly showInteractionModePicker: boolean;
|
|
55
|
+
readonly interactionMode?: InteractionModeOption;
|
|
56
|
+
readonly onInteractionModeChange: (mode: InteractionModeOption) => void;
|
|
57
|
+
|
|
51
58
|
// -- Model selector -------------------------------------------------------
|
|
52
59
|
|
|
53
60
|
readonly showModelSelector: boolean;
|
|
@@ -89,6 +96,9 @@ export function ComposerToolbar({
|
|
|
89
96
|
showHarnessSelector,
|
|
90
97
|
harness,
|
|
91
98
|
onHarnessChange,
|
|
99
|
+
showInteractionModePicker,
|
|
100
|
+
interactionMode,
|
|
101
|
+
onInteractionModeChange,
|
|
92
102
|
showModelSelector,
|
|
93
103
|
modelId,
|
|
94
104
|
onModelChange,
|
|
@@ -96,7 +106,7 @@ export function ComposerToolbar({
|
|
|
96
106
|
const hasTier1 = showAttach || showWorkspace;
|
|
97
107
|
const hasTier2 = configureItems.length > 0;
|
|
98
108
|
const showHarnessSeparate = showHarnessSelector && !showModelSelector;
|
|
99
|
-
const hasExecParams = showHarnessSeparate || showModelSelector;
|
|
109
|
+
const hasExecParams = showHarnessSeparate || showInteractionModePicker || showModelSelector;
|
|
100
110
|
|
|
101
111
|
return (
|
|
102
112
|
<div className="flex items-center justify-between gap-2 border-t border-border-muted px-3 py-2">
|
|
@@ -169,6 +179,14 @@ export function ComposerToolbar({
|
|
|
169
179
|
/>
|
|
170
180
|
)}
|
|
171
181
|
|
|
182
|
+
{showInteractionModePicker && (
|
|
183
|
+
<InteractionModePicker
|
|
184
|
+
value={interactionMode ?? "agent"}
|
|
185
|
+
onValueChange={onInteractionModeChange}
|
|
186
|
+
disabled={disabled}
|
|
187
|
+
/>
|
|
188
|
+
)}
|
|
189
|
+
|
|
172
190
|
{showModelSelector && (
|
|
173
191
|
<ModelSelector
|
|
174
192
|
value={modelId}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import { Popover } from "@base-ui/react/popover";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import { useStigmerPortalContainer } from "../portal-container";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Interaction mode options for agent executions.
|
|
10
|
+
*
|
|
11
|
+
* Maps to `InteractionMode` proto enum values (excluding UNSPECIFIED):
|
|
12
|
+
* - `"agent"` → `INTERACTION_MODE_AGENT` (full tool access)
|
|
13
|
+
* - `"plan"` → `INTERACTION_MODE_PLAN` (read-only analysis)
|
|
14
|
+
*/
|
|
15
|
+
export type InteractionModeOption = "agent" | "plan";
|
|
16
|
+
|
|
17
|
+
const OPTIONS: readonly InteractionModeOption[] = ["agent", "plan"];
|
|
18
|
+
|
|
19
|
+
const MODE_META: Record<
|
|
20
|
+
InteractionModeOption,
|
|
21
|
+
{ label: string; description: string }
|
|
22
|
+
> = {
|
|
23
|
+
agent: {
|
|
24
|
+
label: "Agent",
|
|
25
|
+
description: "Full tool access — read, write, and execute",
|
|
26
|
+
},
|
|
27
|
+
plan: {
|
|
28
|
+
label: "Plan",
|
|
29
|
+
description: "Read-only analysis — search and reason only",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** Props for {@link InteractionModePicker}. */
|
|
34
|
+
export interface InteractionModePickerProps {
|
|
35
|
+
/** Currently selected interaction mode. */
|
|
36
|
+
readonly value: InteractionModeOption;
|
|
37
|
+
/** Called when the user picks a different mode. */
|
|
38
|
+
readonly onValueChange: (mode: InteractionModeOption) => void;
|
|
39
|
+
/** Additional CSS class names for the trigger button. */
|
|
40
|
+
readonly className?: string;
|
|
41
|
+
/** When true, disables the picker. */
|
|
42
|
+
readonly disabled?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Compact dropdown for choosing the execution interaction mode.
|
|
47
|
+
*
|
|
48
|
+
* Renders a trigger button showing the current mode label with a
|
|
49
|
+
* chevron, and a popover with the available options. Each option
|
|
50
|
+
* shows a label and a short description.
|
|
51
|
+
*
|
|
52
|
+
* Designed to scale to additional modes (e.g. Ask) without layout
|
|
53
|
+
* changes. Uses `@base-ui/react` Popover for positioning and portal
|
|
54
|
+
* rendering, matching the pattern used by {@link ModelSelector}.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* function ComposerToolbar() {
|
|
59
|
+
* const [mode, setMode] = useState<InteractionModeOption>("agent");
|
|
60
|
+
* return <InteractionModePicker value={mode} onValueChange={setMode} />;
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function InteractionModePicker({
|
|
65
|
+
value,
|
|
66
|
+
onValueChange,
|
|
67
|
+
className,
|
|
68
|
+
disabled,
|
|
69
|
+
}: InteractionModePickerProps) {
|
|
70
|
+
const portalContainer = useStigmerPortalContainer();
|
|
71
|
+
const [open, setOpen] = useState(false);
|
|
72
|
+
|
|
73
|
+
const select = useCallback(
|
|
74
|
+
(mode: InteractionModeOption) => {
|
|
75
|
+
onValueChange(mode);
|
|
76
|
+
setOpen(false);
|
|
77
|
+
},
|
|
78
|
+
[onValueChange],
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const handleKeyDown = useCallback(
|
|
82
|
+
(e: React.KeyboardEvent) => {
|
|
83
|
+
const idx = OPTIONS.indexOf(value);
|
|
84
|
+
let next: number | undefined;
|
|
85
|
+
|
|
86
|
+
switch (e.key) {
|
|
87
|
+
case "ArrowDown":
|
|
88
|
+
e.preventDefault();
|
|
89
|
+
next = idx < OPTIONS.length - 1 ? idx + 1 : 0;
|
|
90
|
+
break;
|
|
91
|
+
case "ArrowUp":
|
|
92
|
+
e.preventDefault();
|
|
93
|
+
next = idx > 0 ? idx - 1 : OPTIONS.length - 1;
|
|
94
|
+
break;
|
|
95
|
+
case "Escape":
|
|
96
|
+
e.preventDefault();
|
|
97
|
+
setOpen(false);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (next !== undefined) {
|
|
102
|
+
select(OPTIONS[next]);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
[value, select],
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<Popover.Root open={open} onOpenChange={setOpen}>
|
|
110
|
+
<Popover.Trigger
|
|
111
|
+
disabled={disabled}
|
|
112
|
+
className={cn(
|
|
113
|
+
"inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-xs transition-colors",
|
|
114
|
+
"text-muted-foreground hover:text-foreground hover:bg-accent-hover",
|
|
115
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
116
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
117
|
+
className,
|
|
118
|
+
)}
|
|
119
|
+
>
|
|
120
|
+
<span className="font-medium text-foreground">
|
|
121
|
+
{MODE_META[value].label}
|
|
122
|
+
</span>
|
|
123
|
+
<ChevronIcon />
|
|
124
|
+
</Popover.Trigger>
|
|
125
|
+
|
|
126
|
+
<Popover.Portal container={portalContainer}>
|
|
127
|
+
<Popover.Positioner sideOffset={4}>
|
|
128
|
+
<Popover.Popup
|
|
129
|
+
role="listbox"
|
|
130
|
+
aria-label="Interaction mode"
|
|
131
|
+
onKeyDown={handleKeyDown}
|
|
132
|
+
className={cn(
|
|
133
|
+
"z-50 w-56 rounded-lg border border-border bg-popover p-1 shadow-md",
|
|
134
|
+
"animate-in fade-in-0 zoom-in-95",
|
|
135
|
+
)}
|
|
136
|
+
>
|
|
137
|
+
{OPTIONS.map((option) => {
|
|
138
|
+
const meta = MODE_META[option];
|
|
139
|
+
const isActive = value === option;
|
|
140
|
+
|
|
141
|
+
return (
|
|
142
|
+
<button
|
|
143
|
+
key={option}
|
|
144
|
+
type="button"
|
|
145
|
+
role="option"
|
|
146
|
+
aria-selected={isActive}
|
|
147
|
+
onClick={() => select(option)}
|
|
148
|
+
className={cn(
|
|
149
|
+
"flex w-full flex-col gap-0.5 rounded-md px-2.5 py-2 text-left transition-colors",
|
|
150
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
151
|
+
isActive
|
|
152
|
+
? "bg-accent text-foreground"
|
|
153
|
+
: "text-foreground hover:bg-accent-hover",
|
|
154
|
+
)}
|
|
155
|
+
>
|
|
156
|
+
<span className="text-xs font-medium">{meta.label}</span>
|
|
157
|
+
<span className="text-[0.65rem] leading-snug text-muted-foreground">
|
|
158
|
+
{meta.description}
|
|
159
|
+
</span>
|
|
160
|
+
</button>
|
|
161
|
+
);
|
|
162
|
+
})}
|
|
163
|
+
</Popover.Popup>
|
|
164
|
+
</Popover.Positioner>
|
|
165
|
+
</Popover.Portal>
|
|
166
|
+
</Popover.Root>
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function ChevronIcon() {
|
|
171
|
+
return (
|
|
172
|
+
<svg
|
|
173
|
+
width="12"
|
|
174
|
+
height="12"
|
|
175
|
+
viewBox="0 0 12 12"
|
|
176
|
+
fill="none"
|
|
177
|
+
className="shrink-0 text-muted-foreground"
|
|
178
|
+
aria-hidden="true"
|
|
179
|
+
>
|
|
180
|
+
<path
|
|
181
|
+
d="M3 4.5L6 7.5L9 4.5"
|
|
182
|
+
stroke="currentColor"
|
|
183
|
+
strokeWidth="1.5"
|
|
184
|
+
strokeLinecap="round"
|
|
185
|
+
strokeLinejoin="round"
|
|
186
|
+
/>
|
|
187
|
+
</svg>
|
|
188
|
+
);
|
|
189
|
+
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { memo, useCallback, useEffect, useMemo, useRef, useState, type DragEvent, type KeyboardEvent } from "react";
|
|
3
|
+
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState, type DragEvent, type KeyboardEvent } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage, type AttachmentInput, type EnvVarInput, type McpServerUsageInput, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import { useComposer } from "./useComposer";
|
|
7
7
|
import { ComposerToolbar } from "./ComposerToolbar";
|
|
8
8
|
import { type ConfigureMenuItem } from "./ConfigureMenu";
|
|
9
9
|
import type { HarnessOption } from "../models/harness";
|
|
10
|
+
import type { InteractionModeOption } from "./InteractionModePicker";
|
|
10
11
|
import { parseModelKey } from "../models/registry";
|
|
11
12
|
import { ContextChip, type ChipItem } from "./ContextChip";
|
|
12
13
|
import { WorkspaceEditor } from "../workspace/WorkspaceEditor";
|
|
@@ -51,6 +52,33 @@ import {
|
|
|
51
52
|
ResolveSpinner,
|
|
52
53
|
} from "./icons";
|
|
53
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Imperative handle exposed by {@link SessionComposer} via `ref`.
|
|
57
|
+
*
|
|
58
|
+
* Allows parent components to programmatically set the composer's
|
|
59
|
+
* message text and focus the textarea. Used for features like
|
|
60
|
+
* "Build from Plan" where a CTA outside the composer needs to
|
|
61
|
+
* pre-fill and focus the input.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```tsx
|
|
65
|
+
* const composerRef = useRef<SessionComposerHandle>(null);
|
|
66
|
+
*
|
|
67
|
+
* function handleBuildFromPlan() {
|
|
68
|
+
* composerRef.current?.setMessage("Implement the plan above");
|
|
69
|
+
* composerRef.current?.focus();
|
|
70
|
+
* }
|
|
71
|
+
*
|
|
72
|
+
* <SessionComposer ref={composerRef} onSubmit={handleSubmit} />
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export interface SessionComposerHandle {
|
|
76
|
+
/** Replace the composer's message text. */
|
|
77
|
+
setMessage(message: string): void;
|
|
78
|
+
/** Focus the composer's textarea. */
|
|
79
|
+
focus(): void;
|
|
80
|
+
}
|
|
81
|
+
|
|
54
82
|
/**
|
|
55
83
|
* Context provided to `onSubmit` at the moment of submission.
|
|
56
84
|
*
|
|
@@ -83,6 +111,16 @@ export interface SessionComposerSubmitContext {
|
|
|
83
111
|
* `undefined` when no files were attached.
|
|
84
112
|
*/
|
|
85
113
|
readonly attachments?: AttachmentInput[];
|
|
114
|
+
/**
|
|
115
|
+
* Interaction mode selected by the user for this execution.
|
|
116
|
+
*
|
|
117
|
+
* - `"agent"` (default): full tool access — read, write, create, delete.
|
|
118
|
+
* - `"plan"`: read-only analysis — read, search, list only.
|
|
119
|
+
*
|
|
120
|
+
* `undefined` when no mode picker is shown (defaults to `"agent"`).
|
|
121
|
+
* Pass to execution creation as `execution_config.interaction_mode`.
|
|
122
|
+
*/
|
|
123
|
+
readonly interactionMode?: InteractionModeOption;
|
|
86
124
|
}
|
|
87
125
|
|
|
88
126
|
/** Props for {@link SessionComposer}. */
|
|
@@ -120,6 +158,22 @@ export interface SessionComposerProps {
|
|
|
120
158
|
/** Show the harness selector in the toolbar. @default false */
|
|
121
159
|
readonly showHarnessSelector?: boolean;
|
|
122
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Currently selected interaction mode.
|
|
163
|
+
*
|
|
164
|
+
* When `onInteractionModeChange` is provided, renders a mode picker
|
|
165
|
+
* in the toolbar. Defaults to `"agent"` when omitted.
|
|
166
|
+
*/
|
|
167
|
+
readonly interactionMode?: InteractionModeOption;
|
|
168
|
+
/**
|
|
169
|
+
* Called when the user switches the interaction mode.
|
|
170
|
+
*
|
|
171
|
+
* Providing this callback enables the mode picker in the toolbar.
|
|
172
|
+
*/
|
|
173
|
+
readonly onInteractionModeChange?: (mode: InteractionModeOption) => void;
|
|
174
|
+
/** Show the interaction mode picker in the toolbar. @default false */
|
|
175
|
+
readonly showInteractionModePicker?: boolean;
|
|
176
|
+
|
|
123
177
|
/** Initial model ID for the model selector. */
|
|
124
178
|
readonly defaultModelId?: string;
|
|
125
179
|
/** Called when the user changes the selected model. */
|
|
@@ -384,13 +438,16 @@ export interface SessionComposerProps {
|
|
|
384
438
|
* />
|
|
385
439
|
* ```
|
|
386
440
|
*/
|
|
387
|
-
|
|
441
|
+
const SessionComposerInner = forwardRef<SessionComposerHandle, SessionComposerProps>(function SessionComposer({
|
|
388
442
|
onSubmit,
|
|
389
443
|
isSubmitting = false,
|
|
390
444
|
disabled = false,
|
|
391
445
|
harness,
|
|
392
446
|
onHarnessChange,
|
|
393
447
|
showHarnessSelector = false,
|
|
448
|
+
interactionMode,
|
|
449
|
+
onInteractionModeChange,
|
|
450
|
+
showInteractionModePicker = false,
|
|
394
451
|
defaultModelId,
|
|
395
452
|
onModelChange,
|
|
396
453
|
showModelSelector = true,
|
|
@@ -420,7 +477,7 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
420
477
|
autoFocus = false,
|
|
421
478
|
ariaLabel = "Send message",
|
|
422
479
|
className,
|
|
423
|
-
}
|
|
480
|
+
}, ref) {
|
|
424
481
|
useRenderTracer("SessionComposer", { disabled, isSubmitting });
|
|
425
482
|
|
|
426
483
|
const [modelId, setModelIdRaw] = useState<string | undefined>(defaultModelId);
|
|
@@ -655,12 +712,17 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
655
712
|
const hasEnv = Object.keys(env).length > 0;
|
|
656
713
|
const hasAttachments =
|
|
657
714
|
attachmentInputs !== undefined && attachmentInputs.length > 0;
|
|
715
|
+
const effectiveMode =
|
|
716
|
+
showInteractionModePicker && interactionMode
|
|
717
|
+
? interactionMode
|
|
718
|
+
: undefined;
|
|
658
719
|
|
|
659
720
|
const context: SessionComposerSubmitContext | undefined =
|
|
660
|
-
hasEnv || hasAttachments
|
|
721
|
+
hasEnv || hasAttachments || effectiveMode
|
|
661
722
|
? {
|
|
662
723
|
runtimeEnv: hasEnv ? env : undefined,
|
|
663
724
|
attachments: hasAttachments ? attachmentInputs : undefined,
|
|
725
|
+
interactionMode: effectiveMode,
|
|
664
726
|
}
|
|
665
727
|
: undefined;
|
|
666
728
|
|
|
@@ -673,7 +735,7 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
673
735
|
attachments.clear();
|
|
674
736
|
}
|
|
675
737
|
},
|
|
676
|
-
[onSubmit, modelId, stigmer, agentSetup.state, mcpSetup.pendingRuntimeEnv, sessionVariables, enableAttachments, attachments, personalEnv],
|
|
738
|
+
[onSubmit, modelId, stigmer, agentSetup.state, mcpSetup.pendingRuntimeEnv, sessionVariables, enableAttachments, attachments, personalEnv, showInteractionModePicker, interactionMode],
|
|
677
739
|
);
|
|
678
740
|
|
|
679
741
|
const composer = useComposer({
|
|
@@ -681,6 +743,11 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
681
743
|
disabled: isDisabled,
|
|
682
744
|
});
|
|
683
745
|
|
|
746
|
+
useImperativeHandle(ref, () => ({
|
|
747
|
+
setMessage: composer.setMessage,
|
|
748
|
+
focus: () => composer.textareaRef.current?.focus(),
|
|
749
|
+
}), [composer.setMessage, composer.textareaRef]);
|
|
750
|
+
|
|
684
751
|
const handleModelChange = useCallback(
|
|
685
752
|
(id: string) => {
|
|
686
753
|
setModelId(id);
|
|
@@ -696,6 +763,13 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
696
763
|
[onHarnessChange],
|
|
697
764
|
);
|
|
698
765
|
|
|
766
|
+
const handleInteractionModeChange = useCallback(
|
|
767
|
+
(mode: InteractionModeOption) => {
|
|
768
|
+
onInteractionModeChange?.(mode);
|
|
769
|
+
},
|
|
770
|
+
[onInteractionModeChange],
|
|
771
|
+
);
|
|
772
|
+
|
|
699
773
|
const handleDisplayNameResolved = useCallback(
|
|
700
774
|
(key: string, name: string) => {
|
|
701
775
|
setDisplayNames((prev) => {
|
|
@@ -1197,7 +1271,6 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
1197
1271
|
<div className="relative">
|
|
1198
1272
|
<AgentPicker
|
|
1199
1273
|
org={org!}
|
|
1200
|
-
scope="all"
|
|
1201
1274
|
value={agentRef ?? null}
|
|
1202
1275
|
onChange={handleAgentSelect}
|
|
1203
1276
|
onDisplayNameResolved={handleDisplayNameResolved}
|
|
@@ -1218,7 +1291,6 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
1218
1291
|
return (
|
|
1219
1292
|
<McpServerPicker
|
|
1220
1293
|
org={org!}
|
|
1221
|
-
scope="all"
|
|
1222
1294
|
setup={{
|
|
1223
1295
|
entries: mcpSetup.entries,
|
|
1224
1296
|
onServerAdded: (ref) => mcpSetup.addServer(ref),
|
|
@@ -1241,7 +1313,6 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
1241
1313
|
return (
|
|
1242
1314
|
<SkillPicker
|
|
1243
1315
|
org={org!}
|
|
1244
|
-
scope="all"
|
|
1245
1316
|
value={skillRefs ?? []}
|
|
1246
1317
|
onChange={onSkillRefsChange!}
|
|
1247
1318
|
onDisplayNameResolved={handleDisplayNameResolved}
|
|
@@ -1478,6 +1549,9 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
1478
1549
|
showHarnessSelector={showHarnessSelector}
|
|
1479
1550
|
harness={harness}
|
|
1480
1551
|
onHarnessChange={handleHarnessChange}
|
|
1552
|
+
showInteractionModePicker={showInteractionModePicker}
|
|
1553
|
+
interactionMode={interactionMode}
|
|
1554
|
+
onInteractionModeChange={handleInteractionModeChange}
|
|
1481
1555
|
showModelSelector={showModelSelector}
|
|
1482
1556
|
modelId={modelId}
|
|
1483
1557
|
onModelChange={handleModelChange}
|
|
@@ -1487,6 +1561,9 @@ export const SessionComposer = memo(function SessionComposer({
|
|
|
1487
1561
|
);
|
|
1488
1562
|
});
|
|
1489
1563
|
|
|
1564
|
+
export const SessionComposer = memo(SessionComposerInner);
|
|
1565
|
+
|
|
1566
|
+
|
|
1490
1567
|
// ---------------------------------------------------------------------------
|
|
1491
1568
|
// Agent setup error — secret-flow guidance or generic fallback
|
|
1492
1569
|
// ---------------------------------------------------------------------------
|
|
@@ -5,15 +5,20 @@ describe("SessionComposer — memo isolation", () => {
|
|
|
5
5
|
it("is wrapped in React.memo (shallow prop comparison)", () => {
|
|
6
6
|
// React.memo returns an exotic component with $$typeof set to
|
|
7
7
|
// Symbol.for("react.memo") and a `type` field pointing at the
|
|
8
|
-
// inner
|
|
8
|
+
// inner component. For forwardRef components the inner type is an
|
|
9
|
+
// object (the forwardRef exotic), not a plain function.
|
|
9
10
|
const memoSymbol = Symbol.for("react.memo");
|
|
10
|
-
const typed = SessionComposer as unknown as { $$typeof: symbol; type:
|
|
11
|
+
const typed = SessionComposer as unknown as { $$typeof: symbol; type: unknown; compare: unknown };
|
|
11
12
|
|
|
12
13
|
expect(typed.$$typeof).toBe(memoSymbol);
|
|
13
|
-
expect(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
expect(typed.type).toBeTruthy();
|
|
15
|
+
|
|
16
|
+
const innerType = typed.type as { $$typeof?: symbol; render?: Function };
|
|
17
|
+
if (typeof typed.type === "function") {
|
|
18
|
+
expect((typed.type as Function).name).toMatch(/^SessionComposer/);
|
|
19
|
+
} else {
|
|
20
|
+
expect(innerType.$$typeof).toBe(Symbol.for("react.forward_ref"));
|
|
21
|
+
}
|
|
17
22
|
});
|
|
18
23
|
|
|
19
24
|
it("uses default shallow comparison (no custom areEqual)", () => {
|
package/src/composer/index.ts
CHANGED
|
@@ -3,6 +3,13 @@ export type { UseComposerOptions, UseComposerReturn } from "./useComposer";
|
|
|
3
3
|
|
|
4
4
|
export { SessionComposer } from "./SessionComposer";
|
|
5
5
|
export type {
|
|
6
|
+
SessionComposerHandle,
|
|
6
7
|
SessionComposerProps,
|
|
7
8
|
SessionComposerSubmitContext,
|
|
8
9
|
} from "./SessionComposer";
|
|
10
|
+
|
|
11
|
+
export { InteractionModePicker } from "./InteractionModePicker";
|
|
12
|
+
export type {
|
|
13
|
+
InteractionModePickerProps,
|
|
14
|
+
InteractionModeOption,
|
|
15
|
+
} from "./InteractionModePicker";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import type { DashboardFailedRun } from "./types";
|
|
6
|
+
|
|
7
|
+
export interface DashboardFailedRunsProps {
|
|
8
|
+
readonly failedRuns: readonly DashboardFailedRun[];
|
|
9
|
+
readonly isLoading: boolean;
|
|
10
|
+
/** Called when the user clicks "View" on a failed run. */
|
|
11
|
+
readonly onViewClick?: (id: string, type: DashboardFailedRun["type"]) => void;
|
|
12
|
+
readonly className?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function timeAgo(date: Date): string {
|
|
16
|
+
const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
|
|
17
|
+
if (seconds < 60) return "just now";
|
|
18
|
+
const minutes = Math.floor(seconds / 60);
|
|
19
|
+
if (minutes < 60) return `${minutes}m ago`;
|
|
20
|
+
const hours = Math.floor(minutes / 60);
|
|
21
|
+
if (hours < 24) return `${hours}h ago`;
|
|
22
|
+
const days = Math.floor(hours / 24);
|
|
23
|
+
return `${days}d ago`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Widget showing recent failed executions from both agent and workflow
|
|
28
|
+
* domains, interleaved by timestamp.
|
|
29
|
+
*
|
|
30
|
+
* Each row includes a type badge (Agent / Workflow), the execution name,
|
|
31
|
+
* a truncated error, and a relative timestamp.
|
|
32
|
+
*
|
|
33
|
+
* @since Unified Platform Dashboard
|
|
34
|
+
*/
|
|
35
|
+
export const DashboardFailedRuns = memo(function DashboardFailedRuns({
|
|
36
|
+
failedRuns,
|
|
37
|
+
isLoading,
|
|
38
|
+
onViewClick,
|
|
39
|
+
className,
|
|
40
|
+
}: DashboardFailedRunsProps) {
|
|
41
|
+
if (isLoading) {
|
|
42
|
+
return (
|
|
43
|
+
<div
|
|
44
|
+
className={cn("rounded-lg border border-border bg-card p-4", className)}
|
|
45
|
+
aria-busy="true"
|
|
46
|
+
>
|
|
47
|
+
<div className="mb-3 h-4 w-32 animate-pulse rounded bg-muted" />
|
|
48
|
+
<div className="space-y-2">
|
|
49
|
+
{Array.from({ length: 3 }, (_, i) => (
|
|
50
|
+
<div key={i} className="h-10 animate-pulse rounded bg-muted/50" />
|
|
51
|
+
))}
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<div className={cn("rounded-lg border border-border bg-card p-4", className)}>
|
|
59
|
+
<h3 className="mb-3 text-sm font-semibold text-foreground">
|
|
60
|
+
Recent Failures
|
|
61
|
+
</h3>
|
|
62
|
+
{failedRuns.length === 0 ? (
|
|
63
|
+
<p className="py-6 text-center text-xs text-muted-foreground">
|
|
64
|
+
No recent failures
|
|
65
|
+
</p>
|
|
66
|
+
) : (
|
|
67
|
+
<ul className="space-y-1.5" role="list">
|
|
68
|
+
{failedRuns.map((run) => (
|
|
69
|
+
<li
|
|
70
|
+
key={run.id}
|
|
71
|
+
className="flex items-start gap-2 rounded-md px-2 py-1.5 text-xs hover:bg-muted/50"
|
|
72
|
+
>
|
|
73
|
+
<span
|
|
74
|
+
className={cn(
|
|
75
|
+
"mt-0.5 shrink-0 rounded px-1 py-0.5 text-[10px] font-medium leading-none",
|
|
76
|
+
run.type === "agent_execution"
|
|
77
|
+
? "bg-primary/10 text-primary"
|
|
78
|
+
: "bg-muted text-muted-foreground",
|
|
79
|
+
)}
|
|
80
|
+
>
|
|
81
|
+
{run.type === "agent_execution" ? "Agent" : "Workflow"}
|
|
82
|
+
</span>
|
|
83
|
+
<div className="min-w-0 flex-1">
|
|
84
|
+
<p className="truncate font-medium text-foreground">
|
|
85
|
+
{run.name}
|
|
86
|
+
</p>
|
|
87
|
+
{run.error && (
|
|
88
|
+
<p className="truncate text-muted-foreground">{run.error}</p>
|
|
89
|
+
)}
|
|
90
|
+
</div>
|
|
91
|
+
<span className="shrink-0 text-muted-foreground">
|
|
92
|
+
{timeAgo(run.failedAt)}
|
|
93
|
+
</span>
|
|
94
|
+
{onViewClick && (
|
|
95
|
+
<button
|
|
96
|
+
type="button"
|
|
97
|
+
onClick={() => onViewClick(run.id, run.type)}
|
|
98
|
+
className="shrink-0 text-primary hover:underline"
|
|
99
|
+
>
|
|
100
|
+
View
|
|
101
|
+
</button>
|
|
102
|
+
)}
|
|
103
|
+
</li>
|
|
104
|
+
))}
|
|
105
|
+
</ul>
|
|
106
|
+
)}
|
|
107
|
+
</div>
|
|
108
|
+
);
|
|
109
|
+
});
|