@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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import type { DashboardSummary } from "./types";
|
|
6
|
+
|
|
7
|
+
export interface DashboardKPICardsProps {
|
|
8
|
+
readonly summary: DashboardSummary | null;
|
|
9
|
+
readonly isLoading: boolean;
|
|
10
|
+
readonly className?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface StatCardDef {
|
|
14
|
+
readonly label: string;
|
|
15
|
+
readonly valueClass: string;
|
|
16
|
+
readonly getValue: (s: DashboardSummary) => string;
|
|
17
|
+
readonly getBreakdown: (s: DashboardSummary) => string | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function formatCost(usd: number): string {
|
|
21
|
+
if (usd >= 1) return `$${usd.toFixed(2)}`;
|
|
22
|
+
if (usd >= 0.01) return `$${usd.toFixed(3)}`;
|
|
23
|
+
if (usd > 0) return `<$0.01`;
|
|
24
|
+
return "$0.00";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const STAT_CARDS: readonly StatCardDef[] = [
|
|
28
|
+
{
|
|
29
|
+
label: "Active",
|
|
30
|
+
valueClass: "text-foreground",
|
|
31
|
+
getValue: (s) => String(s.activeCount),
|
|
32
|
+
getBreakdown: (s) => {
|
|
33
|
+
const ag = s.agent?.activeCount ?? 0;
|
|
34
|
+
const wf = s.workflow?.activeCount ?? 0;
|
|
35
|
+
if (ag === 0 && wf === 0) return null;
|
|
36
|
+
return `${ag} agent, ${wf} workflow`;
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: "Completed",
|
|
41
|
+
valueClass: "text-success",
|
|
42
|
+
getValue: (s) => String(s.completedCount),
|
|
43
|
+
getBreakdown: (s) => {
|
|
44
|
+
const ag = s.agent?.phaseCounts[3] ?? 0;
|
|
45
|
+
const wf = s.workflow?.phaseCounts[3] ?? 0;
|
|
46
|
+
if (ag === 0 && wf === 0) return null;
|
|
47
|
+
return `${ag} agent, ${wf} workflow`;
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: "Failed",
|
|
52
|
+
valueClass: "text-destructive",
|
|
53
|
+
getValue: (s) => String(s.failedCount),
|
|
54
|
+
getBreakdown: (s) => {
|
|
55
|
+
const ag = s.agent?.phaseCounts[4] ?? 0;
|
|
56
|
+
const wf = s.workflow?.phaseCounts[4] ?? 0;
|
|
57
|
+
if (ag === 0 && wf === 0) return null;
|
|
58
|
+
return `${ag} agent, ${wf} workflow`;
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: "Total Cost",
|
|
63
|
+
valueClass: "text-foreground",
|
|
64
|
+
getValue: (s) => formatCost(s.totalCostUsd),
|
|
65
|
+
getBreakdown: () => null,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Unified stat cards showing combined agent + workflow execution KPIs.
|
|
71
|
+
*
|
|
72
|
+
* Each card shows the combined count with a breakdown tooltip showing
|
|
73
|
+
* per-source values (e.g., "2 agent, 1 workflow").
|
|
74
|
+
*
|
|
75
|
+
* Cost comes from the billing source of truth (getOrgUsageReport),
|
|
76
|
+
* not from summing per-domain costs. See AD-DASH-005.
|
|
77
|
+
*
|
|
78
|
+
* @since Unified Platform Dashboard
|
|
79
|
+
*/
|
|
80
|
+
export const DashboardKPICards = memo(function DashboardKPICards({
|
|
81
|
+
summary,
|
|
82
|
+
isLoading,
|
|
83
|
+
className,
|
|
84
|
+
}: DashboardKPICardsProps) {
|
|
85
|
+
if (isLoading) {
|
|
86
|
+
return (
|
|
87
|
+
<div className={cn("space-y-3", className)} aria-busy="true">
|
|
88
|
+
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-4">
|
|
89
|
+
{Array.from({ length: 4 }, (_, i) => (
|
|
90
|
+
<div
|
|
91
|
+
key={i}
|
|
92
|
+
className="h-[72px] animate-pulse rounded-lg border border-border bg-muted/50"
|
|
93
|
+
/>
|
|
94
|
+
))}
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (!summary) return null;
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<div className={cn("grid gap-3 sm:grid-cols-2 lg:grid-cols-4", className)}>
|
|
104
|
+
{STAT_CARDS.map((card) => {
|
|
105
|
+
const breakdown = card.getBreakdown(summary);
|
|
106
|
+
return (
|
|
107
|
+
<div
|
|
108
|
+
key={card.label}
|
|
109
|
+
className="rounded-lg border border-border bg-card px-4 py-3"
|
|
110
|
+
title={breakdown ?? undefined}
|
|
111
|
+
>
|
|
112
|
+
<p className="text-xs font-medium text-muted-foreground">
|
|
113
|
+
{card.label}
|
|
114
|
+
</p>
|
|
115
|
+
<p className={cn("mt-1 text-2xl font-semibold", card.valueClass)}>
|
|
116
|
+
{card.getValue(summary)}
|
|
117
|
+
</p>
|
|
118
|
+
{breakdown && (
|
|
119
|
+
<p className="mt-0.5 text-[10px] text-muted-foreground">
|
|
120
|
+
{breakdown}
|
|
121
|
+
</p>
|
|
122
|
+
)}
|
|
123
|
+
</div>
|
|
124
|
+
);
|
|
125
|
+
})}
|
|
126
|
+
</div>
|
|
127
|
+
);
|
|
128
|
+
});
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { usePendingApprovals } from "../workflow/usePendingApprovals";
|
|
6
|
+
import { PendingApprovalsWidget } from "../workflow/PendingApprovalsWidget";
|
|
7
|
+
import { useDashboardSummary, type UseDashboardSummaryOptions } from "./useDashboardSummary";
|
|
8
|
+
import { useDashboardFailedRuns } from "./useDashboardFailedRuns";
|
|
9
|
+
import { DashboardKPICards } from "./DashboardKPICards";
|
|
10
|
+
import { DashboardFailedRuns } from "./DashboardFailedRuns";
|
|
11
|
+
import type { DashboardFailedRun } from "./types";
|
|
12
|
+
|
|
13
|
+
export interface OperationalDashboardProps {
|
|
14
|
+
/** Organization slug for execution summaries and pending approvals. */
|
|
15
|
+
readonly org: string | null | undefined;
|
|
16
|
+
/** Organization ID (metadata.id) for the usage report. */
|
|
17
|
+
readonly orgId: string | null | undefined;
|
|
18
|
+
/** Called when the user clicks "Review" on a pending approval. */
|
|
19
|
+
readonly onApprovalClick?: (executionId: string) => void;
|
|
20
|
+
/** Called when the user clicks "View" on a failed execution. */
|
|
21
|
+
readonly onFailedRunClick?: (id: string, type: DashboardFailedRun["type"]) => void;
|
|
22
|
+
readonly className?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Composed dashboard widget that aggregates operational metrics from both
|
|
27
|
+
* agent and workflow domains into a unified platform view.
|
|
28
|
+
*
|
|
29
|
+
* Layout:
|
|
30
|
+
* - Row 1: KPI stat cards (Active | Completed | Failed | Total Cost)
|
|
31
|
+
* - Row 2: Pending Approvals | Recent Failures (2-column grid)
|
|
32
|
+
*
|
|
33
|
+
* Cost comes from the billing source of truth (`getOrgUsageReport`),
|
|
34
|
+
* not from summing agent + workflow costs. See AD-DASH-005.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <OperationalDashboard
|
|
39
|
+
* org="acme"
|
|
40
|
+
* orgId={activeOrg?.metadata?.id}
|
|
41
|
+
* onApprovalClick={(id) => navigate(`/executions/${id}`)}
|
|
42
|
+
* onFailedRunClick={(id, type) => navigate(`/executions/${id}`)}
|
|
43
|
+
* />
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @since Unified Platform Dashboard
|
|
47
|
+
*/
|
|
48
|
+
export const OperationalDashboard = memo(function OperationalDashboard({
|
|
49
|
+
org,
|
|
50
|
+
orgId,
|
|
51
|
+
onApprovalClick,
|
|
52
|
+
onFailedRunClick,
|
|
53
|
+
className,
|
|
54
|
+
}: OperationalDashboardProps) {
|
|
55
|
+
const summaryOptions: UseDashboardSummaryOptions = {
|
|
56
|
+
org,
|
|
57
|
+
orgId,
|
|
58
|
+
refetchInterval: 60_000,
|
|
59
|
+
};
|
|
60
|
+
const { summary, isLoading: summaryLoading } = useDashboardSummary(summaryOptions);
|
|
61
|
+
|
|
62
|
+
const { approvals, totalCount: approvalCount, isLoading: approvalsLoading } =
|
|
63
|
+
usePendingApprovals({ org, refetchInterval: 30_000 });
|
|
64
|
+
|
|
65
|
+
const { failedRuns, isLoading: failedLoading } = useDashboardFailedRuns(org);
|
|
66
|
+
|
|
67
|
+
const handleFailedRunClick = useCallback(
|
|
68
|
+
(id: string, type: DashboardFailedRun["type"]) => {
|
|
69
|
+
onFailedRunClick?.(id, type);
|
|
70
|
+
},
|
|
71
|
+
[onFailedRunClick],
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<section
|
|
76
|
+
aria-label="Platform dashboard"
|
|
77
|
+
className={cn("space-y-6", className)}
|
|
78
|
+
>
|
|
79
|
+
<DashboardKPICards summary={summary} isLoading={summaryLoading} />
|
|
80
|
+
|
|
81
|
+
<div className="grid gap-6 lg:grid-cols-2">
|
|
82
|
+
<PendingApprovalsWidget
|
|
83
|
+
approvals={approvals}
|
|
84
|
+
totalCount={approvalCount}
|
|
85
|
+
isLoading={approvalsLoading}
|
|
86
|
+
onReviewClick={onApprovalClick}
|
|
87
|
+
/>
|
|
88
|
+
<DashboardFailedRuns
|
|
89
|
+
failedRuns={failedRuns}
|
|
90
|
+
isLoading={failedLoading}
|
|
91
|
+
onViewClick={handleFailedRunClick}
|
|
92
|
+
/>
|
|
93
|
+
</div>
|
|
94
|
+
</section>
|
|
95
|
+
);
|
|
96
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ─── Types ──────────────────────────────────────────────────────────────────
|
|
2
|
+
export type { DashboardSummary, DashboardFailedRun } from "./types";
|
|
3
|
+
|
|
4
|
+
// ─── Data Hooks ─────────────────────────────────────────────────────────────
|
|
5
|
+
export {
|
|
6
|
+
useAgentExecutionSummary,
|
|
7
|
+
AgentExecutionSummaryTimeWindow,
|
|
8
|
+
type UseAgentExecutionSummaryOptions,
|
|
9
|
+
type UseAgentExecutionSummaryReturn,
|
|
10
|
+
} from "./useAgentExecutionSummary";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
useDashboardSummary,
|
|
14
|
+
type UseDashboardSummaryOptions,
|
|
15
|
+
type UseDashboardSummaryReturn,
|
|
16
|
+
} from "./useDashboardSummary";
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
useDashboardFailedRuns,
|
|
20
|
+
type UseDashboardFailedRunsReturn,
|
|
21
|
+
} from "./useDashboardFailedRuns";
|
|
22
|
+
|
|
23
|
+
// ─── Styled Components ─────────────────────────────────────────────────────
|
|
24
|
+
export {
|
|
25
|
+
DashboardKPICards,
|
|
26
|
+
type DashboardKPICardsProps,
|
|
27
|
+
} from "./DashboardKPICards";
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
DashboardFailedRuns,
|
|
31
|
+
type DashboardFailedRunsProps,
|
|
32
|
+
} from "./DashboardFailedRuns";
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
OperationalDashboard,
|
|
36
|
+
type OperationalDashboardProps,
|
|
37
|
+
} from "./OperationalDashboard";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { AgentExecutionSummary } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
|
|
2
|
+
import type { GetOrgUsageReportOutput } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
|
|
3
|
+
import type { ExecutionSummary } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Unified dashboard summary combining operational metrics from both
|
|
7
|
+
* agent and workflow execution domains.
|
|
8
|
+
*
|
|
9
|
+
* Execution counts (active, completed, failed) are safe to add because
|
|
10
|
+
* agent executions and workflow executions are distinct resources.
|
|
11
|
+
*
|
|
12
|
+
* Cost comes from {@link GetOrgUsageReportOutput} (billing source of truth),
|
|
13
|
+
* NOT from summing agent + workflow costs. This prevents double-counting
|
|
14
|
+
* when workflows delegate to agents. See AD-DASH-005.
|
|
15
|
+
*/
|
|
16
|
+
export interface DashboardSummary {
|
|
17
|
+
/** Combined agent + workflow active execution count. */
|
|
18
|
+
readonly activeCount: number;
|
|
19
|
+
/** Combined agent + workflow completed count. */
|
|
20
|
+
readonly completedCount: number;
|
|
21
|
+
/** Combined agent + workflow failed count. */
|
|
22
|
+
readonly failedCount: number;
|
|
23
|
+
/**
|
|
24
|
+
* Total platform cost in USD from the billing source of truth.
|
|
25
|
+
* Sourced from `getOrgUsageReport.total_billable_cost_micros`.
|
|
26
|
+
*/
|
|
27
|
+
readonly totalCostUsd: number;
|
|
28
|
+
/** Agent-side execution summary for per-source breakdown in tooltips. */
|
|
29
|
+
readonly agent: AgentExecutionSummary | null;
|
|
30
|
+
/** Workflow-side execution summary for per-source breakdown in tooltips. */
|
|
31
|
+
readonly workflow: ExecutionSummary | null;
|
|
32
|
+
/** Org-level usage report for cost details. */
|
|
33
|
+
readonly orgUsage: GetOrgUsageReportOutput | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** A normalized entry representing a failed execution from either domain. */
|
|
37
|
+
export interface DashboardFailedRun {
|
|
38
|
+
/** Execution ID (`aex_*` or `wex_*`). */
|
|
39
|
+
readonly id: string;
|
|
40
|
+
/** Discriminator for routing navigation. */
|
|
41
|
+
readonly type: "agent_execution" | "workflow_execution";
|
|
42
|
+
/** Execution name or subject. */
|
|
43
|
+
readonly name: string;
|
|
44
|
+
/** Error message from the failed execution. */
|
|
45
|
+
readonly error: string;
|
|
46
|
+
/** When the execution failed. */
|
|
47
|
+
readonly failedAt: Date;
|
|
48
|
+
/** The agent or workflow name associated with this execution. */
|
|
49
|
+
readonly resourceName: string;
|
|
50
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { create } from "@bufbuild/protobuf";
|
|
4
|
+
import type { AgentExecutionSummary } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
|
|
5
|
+
import {
|
|
6
|
+
AgentExecutionSummaryTimeWindow,
|
|
7
|
+
GetAgentExecutionSummaryRequestSchema,
|
|
8
|
+
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
|
|
9
|
+
import { useStigmer } from "../hooks";
|
|
10
|
+
import { useFetch } from "../internal/useFetch";
|
|
11
|
+
|
|
12
|
+
export { AgentExecutionSummaryTimeWindow };
|
|
13
|
+
|
|
14
|
+
/** Options for {@link useAgentExecutionSummary}. */
|
|
15
|
+
export interface UseAgentExecutionSummaryOptions {
|
|
16
|
+
/** Organization slug. When empty/null, the hook does not fetch. */
|
|
17
|
+
readonly org: string | null | undefined;
|
|
18
|
+
/** Time window for aggregation. @default LAST_7D */
|
|
19
|
+
readonly timeWindow?: AgentExecutionSummaryTimeWindow;
|
|
20
|
+
/** Refetch interval in milliseconds. `0` or `false` disables. @default 0 */
|
|
21
|
+
readonly refetchInterval?: number | false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Return value of {@link useAgentExecutionSummary}. */
|
|
25
|
+
export interface UseAgentExecutionSummaryReturn {
|
|
26
|
+
readonly summary: AgentExecutionSummary | null;
|
|
27
|
+
readonly isLoading: boolean;
|
|
28
|
+
readonly isRefetching: boolean;
|
|
29
|
+
readonly error: Error | null;
|
|
30
|
+
readonly refetch: () => void;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Data hook that fetches aggregated agent execution statistics for an
|
|
35
|
+
* organization. Returns phase counts, active count, average duration,
|
|
36
|
+
* and top failing agents.
|
|
37
|
+
*
|
|
38
|
+
* Cost is intentionally excluded from this response — the dashboard
|
|
39
|
+
* sources cost from `useOrgUsageReport` (billing source of truth) to
|
|
40
|
+
* prevent double-counting. See AD-DASH-005.
|
|
41
|
+
*
|
|
42
|
+
* @since Unified Platform Dashboard
|
|
43
|
+
*/
|
|
44
|
+
export function useAgentExecutionSummary(
|
|
45
|
+
options: UseAgentExecutionSummaryOptions,
|
|
46
|
+
): UseAgentExecutionSummaryReturn {
|
|
47
|
+
const stigmer = useStigmer();
|
|
48
|
+
const org = options.org ?? "";
|
|
49
|
+
const timeWindow =
|
|
50
|
+
options.timeWindow ??
|
|
51
|
+
AgentExecutionSummaryTimeWindow.LAST_7D;
|
|
52
|
+
const refetchInterval = options.refetchInterval ?? 0;
|
|
53
|
+
|
|
54
|
+
const fetchFn = org
|
|
55
|
+
? async () => {
|
|
56
|
+
return await stigmer.agentExecution.getExecutionSummary(
|
|
57
|
+
create(GetAgentExecutionSummaryRequestSchema, { org, timeWindow }),
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
: null;
|
|
61
|
+
|
|
62
|
+
const { data, isLoading, isRefetching, error, refetch } =
|
|
63
|
+
useFetch<AgentExecutionSummary | null>(
|
|
64
|
+
fetchFn,
|
|
65
|
+
[stigmer, org, timeWindow],
|
|
66
|
+
null,
|
|
67
|
+
{ refetchInterval: refetchInterval || false },
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return { summary: data, isLoading, isRefetching, error, refetch };
|
|
71
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { create } from "@bufbuild/protobuf";
|
|
5
|
+
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
6
|
+
import { ExecutionPhase as AgentPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
7
|
+
import { ExecutionPhase as WorkflowPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
|
|
8
|
+
import { ListAgentExecutionsRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
|
|
9
|
+
import { ListWorkflowExecutionsRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
|
|
10
|
+
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
11
|
+
import type { WorkflowExecution } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
|
|
12
|
+
import { useStigmer } from "../hooks";
|
|
13
|
+
import { useFetch } from "../internal/useFetch";
|
|
14
|
+
import type { DashboardFailedRun } from "./types";
|
|
15
|
+
|
|
16
|
+
const EPOCH = new Date(0);
|
|
17
|
+
const EMPTY: readonly DashboardFailedRun[] = [];
|
|
18
|
+
const MAX_TOTAL = 5;
|
|
19
|
+
const PAGE_SIZE = 5;
|
|
20
|
+
|
|
21
|
+
/** Return value of {@link useDashboardFailedRuns}. */
|
|
22
|
+
export interface UseDashboardFailedRunsReturn {
|
|
23
|
+
readonly failedRuns: readonly DashboardFailedRun[];
|
|
24
|
+
readonly isLoading: boolean;
|
|
25
|
+
readonly error: Error | null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Composition hook that fetches recent failed executions from both
|
|
30
|
+
* agent and workflow domains, normalizes them into {@link DashboardFailedRun}
|
|
31
|
+
* entries, and interleaves them by timestamp (newest first).
|
|
32
|
+
*
|
|
33
|
+
* Returns at most 5 total entries to keep the widget compact.
|
|
34
|
+
*
|
|
35
|
+
* @since Unified Platform Dashboard
|
|
36
|
+
*/
|
|
37
|
+
export function useDashboardFailedRuns(
|
|
38
|
+
org: string | null | undefined,
|
|
39
|
+
): UseDashboardFailedRunsReturn {
|
|
40
|
+
const stigmer = useStigmer();
|
|
41
|
+
const orgVal = org ?? "";
|
|
42
|
+
|
|
43
|
+
const agentFetchFn = useMemo(
|
|
44
|
+
() =>
|
|
45
|
+
orgVal
|
|
46
|
+
? async () => {
|
|
47
|
+
const resp = await stigmer.agentExecution.list(
|
|
48
|
+
create(ListAgentExecutionsRequestSchema, {
|
|
49
|
+
pageSize: PAGE_SIZE,
|
|
50
|
+
phase: AgentPhase.EXECUTION_FAILED,
|
|
51
|
+
}),
|
|
52
|
+
);
|
|
53
|
+
return [...resp.entries] as readonly AgentExecution[];
|
|
54
|
+
}
|
|
55
|
+
: null,
|
|
56
|
+
[stigmer, orgVal],
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const workflowFetchFn = useMemo(
|
|
60
|
+
() =>
|
|
61
|
+
orgVal
|
|
62
|
+
? async () => {
|
|
63
|
+
const resp = await stigmer.workflowExecution.list(
|
|
64
|
+
create(ListWorkflowExecutionsRequestSchema, {
|
|
65
|
+
pageSize: PAGE_SIZE,
|
|
66
|
+
phase: WorkflowPhase.EXECUTION_FAILED,
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
return [...resp.entries] as readonly WorkflowExecution[];
|
|
70
|
+
}
|
|
71
|
+
: null,
|
|
72
|
+
[stigmer, orgVal],
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const { data: agentFailed, isLoading: agLoading, error: agError } =
|
|
76
|
+
useFetch<readonly AgentExecution[]>(agentFetchFn, [stigmer, orgVal], [], {
|
|
77
|
+
refetchInterval: 60_000,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const { data: workflowFailed, isLoading: wfLoading, error: wfError } =
|
|
81
|
+
useFetch<readonly WorkflowExecution[]>(workflowFetchFn, [stigmer, orgVal], [], {
|
|
82
|
+
refetchInterval: 60_000,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
const failedRuns = useMemo(() => {
|
|
86
|
+
if (!agentFailed.length && !workflowFailed.length) return EMPTY;
|
|
87
|
+
|
|
88
|
+
const agentEntries: DashboardFailedRun[] = agentFailed.map((exec) => {
|
|
89
|
+
const ts = exec.status?.audit?.specAudit?.createdAt;
|
|
90
|
+
return {
|
|
91
|
+
id: exec.metadata?.id ?? "",
|
|
92
|
+
type: "agent_execution" as const,
|
|
93
|
+
name: exec.metadata?.name || "Untitled execution",
|
|
94
|
+
error: exec.status?.error ?? "",
|
|
95
|
+
failedAt: ts ? timestampDate(ts) : EPOCH,
|
|
96
|
+
resourceName: exec.spec?.agentId ?? "",
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const workflowEntries: DashboardFailedRun[] = workflowFailed.map((exec) => {
|
|
101
|
+
const ts = exec.status?.audit?.specAudit?.createdAt;
|
|
102
|
+
return {
|
|
103
|
+
id: exec.metadata?.id ?? "",
|
|
104
|
+
type: "workflow_execution" as const,
|
|
105
|
+
name: exec.metadata?.name || "Untitled execution",
|
|
106
|
+
error: exec.status?.error ?? "",
|
|
107
|
+
failedAt: ts ? timestampDate(ts) : EPOCH,
|
|
108
|
+
resourceName: exec.metadata?.slug ?? "",
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const merged = [...agentEntries, ...workflowEntries];
|
|
113
|
+
merged.sort((a, b) => b.failedAt.getTime() - a.failedAt.getTime());
|
|
114
|
+
return merged.slice(0, MAX_TOTAL);
|
|
115
|
+
}, [agentFailed, workflowFailed]);
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
failedRuns,
|
|
119
|
+
isLoading: agLoading || wfLoading,
|
|
120
|
+
error: agError ?? wfError,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { ExecutionPhase as WorkflowPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
|
|
5
|
+
import { ExecutionPhase as AgentPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
6
|
+
import {
|
|
7
|
+
useWorkflowDashboardSummary,
|
|
8
|
+
type UseWorkflowDashboardSummaryOptions,
|
|
9
|
+
} from "../workflow/useWorkflowDashboardSummary";
|
|
10
|
+
import { useOrgUsageReport } from "../usage/useOrgUsageReport";
|
|
11
|
+
import { dateRangeFromPreset } from "../usage/date-range";
|
|
12
|
+
import {
|
|
13
|
+
useAgentExecutionSummary,
|
|
14
|
+
AgentExecutionSummaryTimeWindow,
|
|
15
|
+
} from "./useAgentExecutionSummary";
|
|
16
|
+
import type { DashboardSummary } from "./types";
|
|
17
|
+
|
|
18
|
+
/** Options for {@link useDashboardSummary}. */
|
|
19
|
+
export interface UseDashboardSummaryOptions {
|
|
20
|
+
/** Organization slug for execution summaries. */
|
|
21
|
+
readonly org: string | null | undefined;
|
|
22
|
+
/** Organization ID (metadata.id) for the usage report. */
|
|
23
|
+
readonly orgId: string | null | undefined;
|
|
24
|
+
/** Refetch interval in milliseconds. @default 60_000 */
|
|
25
|
+
readonly refetchInterval?: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Return value of {@link useDashboardSummary}. */
|
|
29
|
+
export interface UseDashboardSummaryReturn {
|
|
30
|
+
readonly summary: DashboardSummary | null;
|
|
31
|
+
readonly isLoading: boolean;
|
|
32
|
+
readonly error: Error | null;
|
|
33
|
+
readonly refetch: () => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Composition hook that merges agent execution summary, workflow execution
|
|
38
|
+
* summary, and org usage report into a single {@link DashboardSummary}.
|
|
39
|
+
*
|
|
40
|
+
* - Execution counts (active, completed, failed) are added across both
|
|
41
|
+
* domains — safe because agent and workflow executions are distinct resources.
|
|
42
|
+
* - Cost comes from `getOrgUsageReport` (billing source of truth). NOT from
|
|
43
|
+
* summing agent + workflow costs. See AD-DASH-005.
|
|
44
|
+
*
|
|
45
|
+
* Follows the same client-side merge pattern as `useRecentActivity`.
|
|
46
|
+
*
|
|
47
|
+
* @since Unified Platform Dashboard
|
|
48
|
+
*/
|
|
49
|
+
export function useDashboardSummary(
|
|
50
|
+
options: UseDashboardSummaryOptions,
|
|
51
|
+
): UseDashboardSummaryReturn {
|
|
52
|
+
const refetchInterval = options.refetchInterval ?? 60_000;
|
|
53
|
+
|
|
54
|
+
const { summary: workflowSummary, isLoading: wfLoading, error: wfError, refetch: wfRefetch } =
|
|
55
|
+
useWorkflowDashboardSummary({
|
|
56
|
+
org: options.org,
|
|
57
|
+
refetchInterval,
|
|
58
|
+
} satisfies UseWorkflowDashboardSummaryOptions);
|
|
59
|
+
|
|
60
|
+
const { summary: agentSummary, isLoading: agLoading, error: agError, refetch: agRefetch } =
|
|
61
|
+
useAgentExecutionSummary({
|
|
62
|
+
org: options.org,
|
|
63
|
+
timeWindow: AgentExecutionSummaryTimeWindow.LAST_7D,
|
|
64
|
+
refetchInterval,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const dateRange = useMemo(() => dateRangeFromPreset("7d"), []);
|
|
68
|
+
const { report: orgUsage, isLoading: usageLoading, error: usageError, refetch: usageRefetch } =
|
|
69
|
+
useOrgUsageReport(options.orgId ?? null, dateRange);
|
|
70
|
+
|
|
71
|
+
const isLoading = wfLoading || agLoading || usageLoading;
|
|
72
|
+
const error = wfError ?? agError ?? usageError;
|
|
73
|
+
|
|
74
|
+
const summary = useMemo<DashboardSummary | null>(() => {
|
|
75
|
+
if (isLoading && !workflowSummary && !agentSummary) return null;
|
|
76
|
+
|
|
77
|
+
const wfActive = workflowSummary?.activeCount ?? 0;
|
|
78
|
+
const agActive = agentSummary?.activeCount ?? 0;
|
|
79
|
+
|
|
80
|
+
const wfCompleted = workflowSummary?.phaseCounts[WorkflowPhase.EXECUTION_COMPLETED] ?? 0;
|
|
81
|
+
const agCompleted = agentSummary?.phaseCounts[AgentPhase.EXECUTION_COMPLETED] ?? 0;
|
|
82
|
+
|
|
83
|
+
const wfFailed = workflowSummary?.phaseCounts[WorkflowPhase.EXECUTION_FAILED] ?? 0;
|
|
84
|
+
const agFailed = agentSummary?.phaseCounts[AgentPhase.EXECUTION_FAILED] ?? 0;
|
|
85
|
+
|
|
86
|
+
const totalCostMicros = Number(orgUsage?.totalBillableCostMicros ?? BigInt(0));
|
|
87
|
+
const totalCostUsd = totalCostMicros / 1_000_000;
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
activeCount: wfActive + agActive,
|
|
91
|
+
completedCount: wfCompleted + agCompleted,
|
|
92
|
+
failedCount: wfFailed + agFailed,
|
|
93
|
+
totalCostUsd,
|
|
94
|
+
agent: agentSummary,
|
|
95
|
+
workflow: workflowSummary,
|
|
96
|
+
orgUsage: orgUsage,
|
|
97
|
+
};
|
|
98
|
+
}, [workflowSummary, agentSummary, orgUsage, isLoading]);
|
|
99
|
+
|
|
100
|
+
const refetch = useMemo(() => {
|
|
101
|
+
return () => {
|
|
102
|
+
wfRefetch();
|
|
103
|
+
agRefetch();
|
|
104
|
+
usageRefetch();
|
|
105
|
+
};
|
|
106
|
+
}, [wfRefetch, agRefetch, usageRefetch]);
|
|
107
|
+
|
|
108
|
+
return { summary, isLoading, error, refetch };
|
|
109
|
+
}
|