@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,243 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import type { AgentExecution } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
import {
|
|
7
|
+
useContextWindow,
|
|
8
|
+
type ContextHealth,
|
|
9
|
+
type UseContextWindowReturn,
|
|
10
|
+
} from "./useContextWindow";
|
|
11
|
+
import { formatTokenCount } from "./UsageWidget";
|
|
12
|
+
|
|
13
|
+
/** Props for {@link ContextGauge}. */
|
|
14
|
+
export interface ContextGaugeProps {
|
|
15
|
+
/**
|
|
16
|
+
* The execution snapshot from `useExecutionStream`, or `null`.
|
|
17
|
+
* The gauge extracts `context_info` from the execution status.
|
|
18
|
+
*/
|
|
19
|
+
readonly execution: AgentExecution | null;
|
|
20
|
+
/**
|
|
21
|
+
* When `true`, renders a minimal bar without labels.
|
|
22
|
+
* Use in tight layouts (e.g., inline status indicators).
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
readonly compact?: boolean;
|
|
26
|
+
/** Additional CSS classes for the root element. */
|
|
27
|
+
readonly className?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const HEALTH_BAR_COLORS: Record<ContextHealth, string> = {
|
|
31
|
+
healthy: "bg-success",
|
|
32
|
+
warning: "bg-warning",
|
|
33
|
+
critical: "bg-destructive",
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const HEALTH_TEXT_COLORS: Record<ContextHealth, string> = {
|
|
37
|
+
healthy: "text-success",
|
|
38
|
+
warning: "text-warning",
|
|
39
|
+
critical: "text-destructive",
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const HEALTH_LABELS: Record<ContextHealth, string> = {
|
|
43
|
+
healthy: "Healthy",
|
|
44
|
+
warning: "Approaching limit",
|
|
45
|
+
critical: "Near limit",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
function formatCompactTokens(count: number): string {
|
|
49
|
+
if (count >= 1_000_000) return `${(count / 1_000_000).toFixed(1)}M`;
|
|
50
|
+
if (count >= 1_000) return `${Math.round(count / 1_000)}K`;
|
|
51
|
+
return String(count);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Visual gauge showing context window utilization during agent execution.
|
|
56
|
+
*
|
|
57
|
+
* Renders a progress bar with threshold markers, token count labels, and
|
|
58
|
+
* a health indicator derived from utilization percentage. The gauge updates
|
|
59
|
+
* in real-time as the execution streams status updates.
|
|
60
|
+
*
|
|
61
|
+
* Returns `null` when `context_info` is absent (e.g., Cursor harness
|
|
62
|
+
* where context is managed externally).
|
|
63
|
+
*
|
|
64
|
+
* All visual properties flow through `--stgm-*` tokens. Zero Console
|
|
65
|
+
* dependencies. Accessible via `role="meter"` with ARIA value attributes.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```tsx
|
|
69
|
+
* const { execution } = useExecutionStream(executionId);
|
|
70
|
+
* <ContextGauge execution={execution} />
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* @example Compact mode in a status bar:
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <ContextGauge execution={execution} compact />
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @see {@link useContextWindow} - headless hook for custom rendering
|
|
79
|
+
*/
|
|
80
|
+
export const ContextGauge = memo(function ContextGauge({
|
|
81
|
+
execution,
|
|
82
|
+
compact = false,
|
|
83
|
+
className,
|
|
84
|
+
}: ContextGaugeProps) {
|
|
85
|
+
const ctx = useContextWindow(execution);
|
|
86
|
+
|
|
87
|
+
if (!ctx.hasContextInfo) return null;
|
|
88
|
+
|
|
89
|
+
if (compact) return <CompactGauge ctx={ctx} className={className} />;
|
|
90
|
+
|
|
91
|
+
return <FullGauge ctx={ctx} className={className} />;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const CompactGauge = memo(function CompactGauge({
|
|
95
|
+
ctx,
|
|
96
|
+
className,
|
|
97
|
+
}: {
|
|
98
|
+
readonly ctx: UseContextWindowReturn;
|
|
99
|
+
readonly className?: string;
|
|
100
|
+
}) {
|
|
101
|
+
const barPercent = Math.min(ctx.utilizationPercent, 100);
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<div
|
|
105
|
+
role="meter"
|
|
106
|
+
aria-label="Context window utilization"
|
|
107
|
+
aria-valuenow={ctx.currentTokenCount}
|
|
108
|
+
aria-valuemin={0}
|
|
109
|
+
aria-valuemax={ctx.contextWindowLimit}
|
|
110
|
+
aria-valuetext={`${Math.round(ctx.utilizationPercent)}% context used`}
|
|
111
|
+
className={cn("flex items-center gap-2", className)}
|
|
112
|
+
>
|
|
113
|
+
<div className="h-1.5 flex-1 overflow-hidden rounded-full bg-muted">
|
|
114
|
+
<div
|
|
115
|
+
className={cn(
|
|
116
|
+
"h-full rounded-full transition-colors",
|
|
117
|
+
HEALTH_BAR_COLORS[ctx.health],
|
|
118
|
+
)}
|
|
119
|
+
style={{ width: `${barPercent}%` }}
|
|
120
|
+
/>
|
|
121
|
+
</div>
|
|
122
|
+
<span
|
|
123
|
+
className={cn(
|
|
124
|
+
"shrink-0 text-xs tabular-nums",
|
|
125
|
+
HEALTH_TEXT_COLORS[ctx.health],
|
|
126
|
+
)}
|
|
127
|
+
>
|
|
128
|
+
{Math.round(ctx.utilizationPercent)}%
|
|
129
|
+
</span>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
const FullGauge = memo(function FullGauge({
|
|
135
|
+
ctx,
|
|
136
|
+
className,
|
|
137
|
+
}: {
|
|
138
|
+
readonly ctx: UseContextWindowReturn;
|
|
139
|
+
readonly className?: string;
|
|
140
|
+
}) {
|
|
141
|
+
const barPercent = Math.min(ctx.utilizationPercent, 100);
|
|
142
|
+
const triggerPercent =
|
|
143
|
+
ctx.triggerThreshold > 0 && ctx.contextWindowLimit > 0
|
|
144
|
+
? (ctx.triggerThreshold / ctx.contextWindowLimit) * 100
|
|
145
|
+
: 0;
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<div
|
|
149
|
+
role="meter"
|
|
150
|
+
aria-label="Context window utilization"
|
|
151
|
+
aria-valuenow={ctx.currentTokenCount}
|
|
152
|
+
aria-valuemin={0}
|
|
153
|
+
aria-valuemax={ctx.contextWindowLimit}
|
|
154
|
+
aria-valuetext={`${formatCompactTokens(ctx.currentTokenCount)} of ${formatCompactTokens(ctx.contextWindowLimit)} tokens used, ${Math.round(ctx.utilizationPercent)}%`}
|
|
155
|
+
className={cn("flex flex-col gap-1.5", className)}
|
|
156
|
+
>
|
|
157
|
+
{/* Header: label + percentage */}
|
|
158
|
+
<div className="flex items-baseline justify-between">
|
|
159
|
+
<span className="text-xs font-medium text-foreground">
|
|
160
|
+
Context
|
|
161
|
+
</span>
|
|
162
|
+
<span
|
|
163
|
+
className={cn(
|
|
164
|
+
"text-xs tabular-nums font-medium",
|
|
165
|
+
HEALTH_TEXT_COLORS[ctx.health],
|
|
166
|
+
)}
|
|
167
|
+
>
|
|
168
|
+
{Math.round(ctx.utilizationPercent)}%
|
|
169
|
+
</span>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
{/* Progress bar with threshold marker */}
|
|
173
|
+
<div className="relative">
|
|
174
|
+
<div className="h-2 overflow-hidden rounded-full bg-muted">
|
|
175
|
+
<div
|
|
176
|
+
className={cn(
|
|
177
|
+
"h-full rounded-full transition-colors",
|
|
178
|
+
HEALTH_BAR_COLORS[ctx.health],
|
|
179
|
+
)}
|
|
180
|
+
style={{ width: `${barPercent}%` }}
|
|
181
|
+
/>
|
|
182
|
+
</div>
|
|
183
|
+
{triggerPercent > 0 && triggerPercent < 100 && (
|
|
184
|
+
<div
|
|
185
|
+
className="absolute top-0 h-2 w-px bg-muted-foreground/40"
|
|
186
|
+
style={{ left: `${triggerPercent}%` }}
|
|
187
|
+
aria-hidden="true"
|
|
188
|
+
/>
|
|
189
|
+
)}
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
{/* Token counts */}
|
|
193
|
+
<div className="text-xs tabular-nums text-muted-foreground">
|
|
194
|
+
{formatCompactTokens(ctx.currentTokenCount)} /{" "}
|
|
195
|
+
{formatCompactTokens(ctx.contextWindowLimit)} tokens
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
{/* Health status + summarization count */}
|
|
199
|
+
<div className="flex items-center gap-1.5">
|
|
200
|
+
<span
|
|
201
|
+
className={cn(
|
|
202
|
+
"inline-flex h-1.5 w-1.5 rounded-full",
|
|
203
|
+
HEALTH_BAR_COLORS[ctx.health],
|
|
204
|
+
)}
|
|
205
|
+
aria-hidden="true"
|
|
206
|
+
/>
|
|
207
|
+
<span className="text-xs text-muted-foreground">
|
|
208
|
+
{HEALTH_LABELS[ctx.health]}
|
|
209
|
+
</span>
|
|
210
|
+
{ctx.summarizationEvents.length > 0 && (
|
|
211
|
+
<span className="text-xs text-muted-foreground">
|
|
212
|
+
· {ctx.summarizationEvents.length}{" "}
|
|
213
|
+
{ctx.summarizationEvents.length === 1
|
|
214
|
+
? "summarization"
|
|
215
|
+
: "summarizations"}
|
|
216
|
+
</span>
|
|
217
|
+
)}
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
{/* Summarization details (when events exist) */}
|
|
221
|
+
{ctx.summarizationEvents.length > 0 && (
|
|
222
|
+
<SummarizationSummary events={ctx.summarizationEvents} />
|
|
223
|
+
)}
|
|
224
|
+
</div>
|
|
225
|
+
);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
function SummarizationSummary({
|
|
229
|
+
events,
|
|
230
|
+
}: {
|
|
231
|
+
readonly events: UseContextWindowReturn["summarizationEvents"];
|
|
232
|
+
}) {
|
|
233
|
+
const latest = events[events.length - 1];
|
|
234
|
+
if (!latest) return null;
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
<div className="pl-3 text-xs tabular-nums text-muted-foreground">
|
|
238
|
+
Last: {formatTokenCount(latest.tokensBefore)} →{" "}
|
|
239
|
+
{formatTokenCount(latest.tokensAfter)} tokens (
|
|
240
|
+
{Math.round(latest.compressionRatio * 100)}% reduction)
|
|
241
|
+
</div>
|
|
242
|
+
);
|
|
243
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
|
|
7
|
+
/** Props for {@link InteractionModeBadge}. */
|
|
8
|
+
export interface InteractionModeBadgeProps {
|
|
9
|
+
/** The interaction mode to display. */
|
|
10
|
+
readonly mode: InteractionMode;
|
|
11
|
+
/** Additional CSS class names for the root container. */
|
|
12
|
+
readonly className?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Displays the interaction mode of an execution as a compact inline badge.
|
|
17
|
+
*
|
|
18
|
+
* Only renders for non-default modes (PLAN). Returns `null` for AGENT
|
|
19
|
+
* and UNSPECIFIED since agent mode is the default and does not need
|
|
20
|
+
* visual distinction.
|
|
21
|
+
*
|
|
22
|
+
* All visual properties flow through `--stgm-*` tokens.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <InteractionModeBadge mode={InteractionMode.PLAN} />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export const InteractionModeBadge = memo(function InteractionModeBadge({
|
|
30
|
+
mode,
|
|
31
|
+
className,
|
|
32
|
+
}: InteractionModeBadgeProps) {
|
|
33
|
+
if (
|
|
34
|
+
mode !== InteractionMode.PLAN
|
|
35
|
+
) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<span
|
|
41
|
+
role="status"
|
|
42
|
+
aria-label="Plan mode"
|
|
43
|
+
className={cn(
|
|
44
|
+
"inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-[0.65rem] font-medium",
|
|
45
|
+
"bg-accent text-muted-foreground",
|
|
46
|
+
className,
|
|
47
|
+
)}
|
|
48
|
+
>
|
|
49
|
+
<PlanIcon />
|
|
50
|
+
Plan
|
|
51
|
+
</span>
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
function PlanIcon() {
|
|
56
|
+
return (
|
|
57
|
+
<svg
|
|
58
|
+
width="10"
|
|
59
|
+
height="10"
|
|
60
|
+
viewBox="0 0 12 12"
|
|
61
|
+
fill="none"
|
|
62
|
+
stroke="currentColor"
|
|
63
|
+
strokeWidth="1.5"
|
|
64
|
+
strokeLinecap="round"
|
|
65
|
+
strokeLinejoin="round"
|
|
66
|
+
>
|
|
67
|
+
<path d="M2 3h8M2 6h5M2 9h6" />
|
|
68
|
+
</svg>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
@@ -10,6 +10,7 @@ import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentex
|
|
|
10
10
|
import {
|
|
11
11
|
ApprovalAction,
|
|
12
12
|
ExecutionPhase,
|
|
13
|
+
InteractionMode,
|
|
13
14
|
MessageType,
|
|
14
15
|
} from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
15
16
|
import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
|
|
@@ -21,6 +22,9 @@ import { SubAgentSection } from "./SubAgentSection";
|
|
|
21
22
|
import { ExecutionPhaseBadge } from "./ExecutionPhaseBadge";
|
|
22
23
|
import { SetupProgress } from "./SetupProgress";
|
|
23
24
|
import { ApprovalCard } from "./ApprovalCard";
|
|
25
|
+
import { SummarizationCard } from "./SummarizationCard";
|
|
26
|
+
import { PlanCompletionCard } from "./PlanCompletionCard";
|
|
27
|
+
import type { SummarizationEventView } from "./useContextWindow";
|
|
24
28
|
import { FilePathContext, type FilePathContextValue } from "./FilePathContext";
|
|
25
29
|
import type { ResolvedPathAction } from "./file-path-resolver";
|
|
26
30
|
import { SandboxContext, type SandboxContextValue } from "./SandboxContext";
|
|
@@ -103,6 +107,14 @@ export interface MessageThreadProps {
|
|
|
103
107
|
* the user's own filesystem (no normalization needed).
|
|
104
108
|
*/
|
|
105
109
|
readonly sandboxWorkspaceRoot?: string;
|
|
110
|
+
/**
|
|
111
|
+
* Summarization events from context window tracking. When provided,
|
|
112
|
+
* "Context compacted" cards are interleaved into the thread at the
|
|
113
|
+
* correct chronological position based on event timestamps.
|
|
114
|
+
*
|
|
115
|
+
* Obtain from {@link useContextWindow}.summarizationEvents.
|
|
116
|
+
*/
|
|
117
|
+
readonly summarizationEvents?: readonly SummarizationEventView[];
|
|
106
118
|
/**
|
|
107
119
|
* Enable virtualized rendering for long conversations. Requires
|
|
108
120
|
* `react-virtuoso` to be installed as a peer dependency. When
|
|
@@ -112,6 +124,19 @@ export interface MessageThreadProps {
|
|
|
112
124
|
* @default false
|
|
113
125
|
*/
|
|
114
126
|
readonly virtualized?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Called when the user clicks "Implement" on a completed Plan-mode
|
|
129
|
+
* execution's {@link PlanCompletionCard}.
|
|
130
|
+
*
|
|
131
|
+
* When provided, a CTA card is rendered at the end of the thread
|
|
132
|
+
* after a Plan-mode execution completes successfully. The consumer
|
|
133
|
+
* typically wires this to switch the interaction mode to Agent,
|
|
134
|
+
* pre-fill the composer, and focus it.
|
|
135
|
+
*
|
|
136
|
+
* When omitted, no plan completion card is rendered. Backward
|
|
137
|
+
* compatible — existing consumers see no change.
|
|
138
|
+
*/
|
|
139
|
+
readonly onBuildFromPlan?: () => void;
|
|
115
140
|
}
|
|
116
141
|
|
|
117
142
|
/**
|
|
@@ -129,7 +154,9 @@ export type ThreadItem =
|
|
|
129
154
|
| { readonly kind: "sub-agent"; readonly subAgentExecution: SubAgentExecution; readonly key: string }
|
|
130
155
|
| { readonly kind: "phase-badge"; readonly phase: ExecutionPhase; readonly key: string }
|
|
131
156
|
| { readonly kind: "approval-request"; readonly pendingApproval: PendingApproval; readonly key: string }
|
|
132
|
-
| { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly isAwaitingResponse?: boolean; readonly key: string }
|
|
157
|
+
| { readonly kind: "setup-progress"; readonly workspaceEntries: readonly WorkspaceEntry[]; readonly serverPhase?: string; readonly isAwaitingResponse?: boolean; readonly key: string }
|
|
158
|
+
| { readonly kind: "context-compacted"; readonly event: SummarizationEventView; readonly key: string }
|
|
159
|
+
| { readonly kind: "plan-completion"; readonly key: string };
|
|
133
160
|
|
|
134
161
|
function hasAiMessages(execution: AgentExecution): boolean {
|
|
135
162
|
const messages = execution.status?.messages;
|
|
@@ -154,6 +181,7 @@ export function buildThreadItems(
|
|
|
154
181
|
pendingUserMessage: string | null | undefined,
|
|
155
182
|
includeApprovals: boolean,
|
|
156
183
|
workspaceEntries: readonly WorkspaceEntry[] | undefined,
|
|
184
|
+
summarizationEvents?: readonly SummarizationEventView[],
|
|
157
185
|
): ThreadItem[] {
|
|
158
186
|
const items: ThreadItem[] = [];
|
|
159
187
|
const allExecutions = activeStreamExecution
|
|
@@ -163,6 +191,30 @@ export function buildThreadItems(
|
|
|
163
191
|
? allExecutions.length - 1
|
|
164
192
|
: -1;
|
|
165
193
|
|
|
194
|
+
// Build a queue of summarization events to interleave by timestamp.
|
|
195
|
+
// Events are consumed as messages pass their timestamp.
|
|
196
|
+
const pendingEvents = summarizationEvents?.length
|
|
197
|
+
? [...summarizationEvents]
|
|
198
|
+
: [];
|
|
199
|
+
let eventCursor = 0;
|
|
200
|
+
|
|
201
|
+
function flushEventsUntil(messageTimestamp: string | undefined): void {
|
|
202
|
+
if (!messageTimestamp || pendingEvents.length === 0) return;
|
|
203
|
+
while (
|
|
204
|
+
eventCursor < pendingEvents.length &&
|
|
205
|
+
pendingEvents[eventCursor].timestamp &&
|
|
206
|
+
pendingEvents[eventCursor].timestamp <= messageTimestamp
|
|
207
|
+
) {
|
|
208
|
+
const evt = pendingEvents[eventCursor];
|
|
209
|
+
items.push({
|
|
210
|
+
kind: "context-compacted",
|
|
211
|
+
event: evt,
|
|
212
|
+
key: `compacted-${evt.timestamp}`,
|
|
213
|
+
});
|
|
214
|
+
eventCursor++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
166
218
|
for (let ei = 0; ei < allExecutions.length; ei++) {
|
|
167
219
|
const exec = allExecutions[ei];
|
|
168
220
|
const execId = exec.metadata?.id ?? `_e${ei}`;
|
|
@@ -198,6 +250,8 @@ export function buildThreadItems(
|
|
|
198
250
|
// to their parent MESSAGE_AI and rendered via ToolCallGroup.
|
|
199
251
|
if (msg.type === MessageType.MESSAGE_TOOL) continue;
|
|
200
252
|
|
|
253
|
+
flushEventsUntil(msg.timestamp);
|
|
254
|
+
|
|
201
255
|
const isEmptyAi =
|
|
202
256
|
msg.type === MessageType.MESSAGE_AI && !msg.content.trim();
|
|
203
257
|
|
|
@@ -253,6 +307,17 @@ export function buildThreadItems(
|
|
|
253
307
|
}
|
|
254
308
|
}
|
|
255
309
|
|
|
310
|
+
// Flush any remaining summarization events that occurred after all messages
|
|
311
|
+
while (eventCursor < pendingEvents.length) {
|
|
312
|
+
const evt = pendingEvents[eventCursor];
|
|
313
|
+
items.push({
|
|
314
|
+
kind: "context-compacted",
|
|
315
|
+
event: evt,
|
|
316
|
+
key: `compacted-${evt.timestamp}`,
|
|
317
|
+
});
|
|
318
|
+
eventCursor++;
|
|
319
|
+
}
|
|
320
|
+
|
|
256
321
|
const lastExec = allExecutions[allExecutions.length - 1];
|
|
257
322
|
const lastPhase =
|
|
258
323
|
lastExec?.status?.phase ?? ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED;
|
|
@@ -294,6 +359,13 @@ export function buildThreadItems(
|
|
|
294
359
|
});
|
|
295
360
|
}
|
|
296
361
|
|
|
362
|
+
if (
|
|
363
|
+
lastPhase === ExecutionPhase.EXECUTION_COMPLETED &&
|
|
364
|
+
lastExec?.spec?.executionConfig?.interactionMode === InteractionMode.PLAN
|
|
365
|
+
) {
|
|
366
|
+
items.push({ kind: "plan-completion", key: "plan-completion" });
|
|
367
|
+
}
|
|
368
|
+
|
|
297
369
|
if (includeApprovals) {
|
|
298
370
|
const allApprovals = lastExec?.status?.pendingApprovals ?? [];
|
|
299
371
|
for (let ai = 0; ai < allApprovals.length; ai++) {
|
|
@@ -359,14 +431,16 @@ export function MessageThread({
|
|
|
359
431
|
workspaceEntries,
|
|
360
432
|
onFilePathClick,
|
|
361
433
|
sandboxWorkspaceRoot,
|
|
434
|
+
summarizationEvents,
|
|
362
435
|
virtualized = false,
|
|
436
|
+
onBuildFromPlan,
|
|
363
437
|
}: MessageThreadProps) {
|
|
364
438
|
useRenderTracer("MessageThread", { executions, activeStreamExecution });
|
|
365
439
|
|
|
366
440
|
const includeApprovals = onApprovalSubmit != null;
|
|
367
441
|
const items = useMemo(
|
|
368
|
-
() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries),
|
|
369
|
-
[executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries],
|
|
442
|
+
() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents),
|
|
443
|
+
[executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents],
|
|
370
444
|
);
|
|
371
445
|
|
|
372
446
|
useKeyStability(items);
|
|
@@ -395,6 +469,7 @@ export function MessageThread({
|
|
|
395
469
|
submittingApprovalIds={submittingApprovalIds}
|
|
396
470
|
filePathCtx={filePathCtx}
|
|
397
471
|
sandboxCtx={sandboxCtx}
|
|
472
|
+
onBuildFromPlan={onBuildFromPlan}
|
|
398
473
|
/>
|
|
399
474
|
</Suspense>
|
|
400
475
|
</div>
|
|
@@ -410,6 +485,7 @@ export function MessageThread({
|
|
|
410
485
|
submittingApprovalIds={submittingApprovalIds}
|
|
411
486
|
filePathCtx={filePathCtx}
|
|
412
487
|
sandboxCtx={sandboxCtx}
|
|
488
|
+
onBuildFromPlan={onBuildFromPlan}
|
|
413
489
|
/>
|
|
414
490
|
);
|
|
415
491
|
}
|
|
@@ -430,6 +506,7 @@ interface NonVirtualizedThreadProps {
|
|
|
430
506
|
readonly submittingApprovalIds?: ReadonlySet<string>;
|
|
431
507
|
readonly filePathCtx: FilePathContextValue;
|
|
432
508
|
readonly sandboxCtx: SandboxContextValue;
|
|
509
|
+
readonly onBuildFromPlan?: () => void;
|
|
433
510
|
}
|
|
434
511
|
|
|
435
512
|
function NonVirtualizedThread({
|
|
@@ -440,6 +517,7 @@ function NonVirtualizedThread({
|
|
|
440
517
|
submittingApprovalIds,
|
|
441
518
|
filePathCtx,
|
|
442
519
|
sandboxCtx,
|
|
520
|
+
onBuildFromPlan,
|
|
443
521
|
}: NonVirtualizedThreadProps) {
|
|
444
522
|
const { scrollRef, sentinelRef, contentRef, isFollowing, jumpToLatest } =
|
|
445
523
|
useAutoScroll();
|
|
@@ -472,6 +550,7 @@ function NonVirtualizedThread({
|
|
|
472
550
|
formatToolCallSummary={formatToolCallSummary}
|
|
473
551
|
onApprovalSubmit={onApprovalSubmit}
|
|
474
552
|
submittingApprovalIds={submittingApprovalIds}
|
|
553
|
+
onBuildFromPlan={onBuildFromPlan}
|
|
475
554
|
/>
|
|
476
555
|
</ThreadItemWrapper>
|
|
477
556
|
))}
|
|
@@ -505,6 +584,7 @@ export interface ThreadItemRendererProps {
|
|
|
505
584
|
comment?: string,
|
|
506
585
|
) => void;
|
|
507
586
|
readonly submittingApprovalIds?: ReadonlySet<string>;
|
|
587
|
+
readonly onBuildFromPlan?: () => void;
|
|
508
588
|
}
|
|
509
589
|
|
|
510
590
|
/**
|
|
@@ -523,6 +603,7 @@ export function ThreadItemRenderer({
|
|
|
523
603
|
formatToolCallSummary,
|
|
524
604
|
onApprovalSubmit,
|
|
525
605
|
submittingApprovalIds,
|
|
606
|
+
onBuildFromPlan,
|
|
526
607
|
}: ThreadItemRendererProps) {
|
|
527
608
|
switch (item.kind) {
|
|
528
609
|
case "message":
|
|
@@ -570,6 +651,10 @@ export function ThreadItemRenderer({
|
|
|
570
651
|
isAwaitingResponse={item.isAwaitingResponse}
|
|
571
652
|
/>
|
|
572
653
|
);
|
|
654
|
+
case "context-compacted":
|
|
655
|
+
return <SummarizationCard event={item.event} />;
|
|
656
|
+
case "plan-completion":
|
|
657
|
+
return <PlanCompletionCard onImplement={onBuildFromPlan} />;
|
|
573
658
|
}
|
|
574
659
|
}
|
|
575
660
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
|
|
6
|
+
/** Props for {@link PlanCompletionCard}. */
|
|
7
|
+
export interface PlanCompletionCardProps {
|
|
8
|
+
/** Called when the user clicks the "Implement" button. */
|
|
9
|
+
readonly onImplement?: () => void;
|
|
10
|
+
/** Disables the CTA button (e.g., while an execution is active). */
|
|
11
|
+
readonly disabled?: boolean;
|
|
12
|
+
/** Additional CSS classes for the root element. */
|
|
13
|
+
readonly className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Inline CTA card shown in the {@link MessageThread} after a completed
|
|
18
|
+
* Plan-mode execution.
|
|
19
|
+
*
|
|
20
|
+
* Offers a single "Implement" action that the consumer wires to switch
|
|
21
|
+
* the interaction mode to Agent, pre-fill the composer, and focus it.
|
|
22
|
+
*
|
|
23
|
+
* Renders nothing when `onImplement` is not provided, so the card is
|
|
24
|
+
* fully opt-in from the consumer's perspective.
|
|
25
|
+
*
|
|
26
|
+
* All visual properties flow through `--stgm-*` tokens.
|
|
27
|
+
*/
|
|
28
|
+
export const PlanCompletionCard = memo(function PlanCompletionCard({
|
|
29
|
+
onImplement,
|
|
30
|
+
disabled,
|
|
31
|
+
className,
|
|
32
|
+
}: PlanCompletionCardProps) {
|
|
33
|
+
if (!onImplement) return null;
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div
|
|
37
|
+
role="status"
|
|
38
|
+
aria-label="Plan complete"
|
|
39
|
+
className={cn(
|
|
40
|
+
"mx-4 flex items-center gap-3 rounded-md border border-border/50",
|
|
41
|
+
"bg-muted/30 px-3 py-2.5",
|
|
42
|
+
className,
|
|
43
|
+
)}
|
|
44
|
+
>
|
|
45
|
+
<PlanCompleteIcon />
|
|
46
|
+
<span className="min-w-0 flex-1 text-xs font-medium text-muted-foreground">
|
|
47
|
+
Plan complete — ready to implement?
|
|
48
|
+
</span>
|
|
49
|
+
<button
|
|
50
|
+
type="button"
|
|
51
|
+
disabled={disabled}
|
|
52
|
+
onClick={onImplement}
|
|
53
|
+
className={cn(
|
|
54
|
+
"inline-flex items-center gap-1.5 rounded-md px-3 py-1.5",
|
|
55
|
+
"text-xs font-medium transition-colors",
|
|
56
|
+
"bg-primary text-primary-foreground",
|
|
57
|
+
"hover:bg-primary-hover",
|
|
58
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
59
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
60
|
+
)}
|
|
61
|
+
>
|
|
62
|
+
<ImplementIcon />
|
|
63
|
+
Implement
|
|
64
|
+
</button>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
function PlanCompleteIcon() {
|
|
70
|
+
return (
|
|
71
|
+
<svg
|
|
72
|
+
width="16"
|
|
73
|
+
height="16"
|
|
74
|
+
viewBox="0 0 16 16"
|
|
75
|
+
fill="none"
|
|
76
|
+
stroke="currentColor"
|
|
77
|
+
strokeWidth="1.5"
|
|
78
|
+
strokeLinecap="round"
|
|
79
|
+
strokeLinejoin="round"
|
|
80
|
+
className="shrink-0 text-muted-foreground/70"
|
|
81
|
+
aria-hidden="true"
|
|
82
|
+
>
|
|
83
|
+
<path d="M3 4h10M3 8h7M3 12h8" />
|
|
84
|
+
<path d="M12.5 10.5l1.5 1.5-1.5 1.5" />
|
|
85
|
+
</svg>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function ImplementIcon() {
|
|
90
|
+
return (
|
|
91
|
+
<svg
|
|
92
|
+
width="12"
|
|
93
|
+
height="12"
|
|
94
|
+
viewBox="0 0 12 12"
|
|
95
|
+
fill="none"
|
|
96
|
+
stroke="currentColor"
|
|
97
|
+
strokeWidth="1.5"
|
|
98
|
+
strokeLinecap="round"
|
|
99
|
+
strokeLinejoin="round"
|
|
100
|
+
aria-hidden="true"
|
|
101
|
+
>
|
|
102
|
+
<path d="M2 6h8M7 3l3 3-3 3" />
|
|
103
|
+
</svg>
|
|
104
|
+
);
|
|
105
|
+
}
|