@burdenoff/microfe-vibecontrols 2026.511.1 → 2026.512.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +2 -5
- package/dist/components/agent-manager/AgentManagerAdminBar.js +69 -61
- package/dist/components/agent-manager/AgentManagerAdminBar.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerCenter.js +56 -50
- package/dist/components/agent-manager/AgentManagerCenter.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerChatPane.js +87 -74
- package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerDetailPanel.js +5 -5
- package/dist/components/agent-manager/AgentManagerDetailPanel.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerInputArea.js +159 -157
- package/dist/components/agent-manager/AgentManagerInputArea.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js +32 -28
- package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerSessionItem.js +24 -24
- package/dist/components/agent-manager/AgentManagerSessionItem.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerSessionList.js +32 -24
- package/dist/components/agent-manager/AgentManagerSessionList.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerSidebar.js +3 -3
- package/dist/components/agent-manager/AgentManagerSidebar.js.map +1 -1
- package/dist/components/agent-manager/AgentManagerTabBar.js +2 -2
- package/dist/components/agent-manager/AgentManagerTabBar.js.map +1 -1
- package/dist/components/agent-manager/BridleConfigPanel.js +1 -1
- package/dist/components/agent-manager/BridleConfigPanel.js.map +1 -1
- package/dist/components/agent-manager/ProfilesPanel.js +260 -0
- package/dist/components/agent-manager/ProfilesPanel.js.map +1 -0
- package/dist/components/agent-manager/controls/ModelSelector.js +75 -58
- package/dist/components/agent-manager/controls/ModelSelector.js.map +1 -1
- package/dist/components/agent-manager/controls/SdkSelector.js +85 -61
- package/dist/components/agent-manager/controls/SdkSelector.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionConfigPanel.js +2 -2
- package/dist/components/agent-manager/detail/SessionConfigPanel.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.js +1 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionStatsPanel.js +1 -1
- package/dist/components/agent-manager/detail/SessionStatsPanel.js.map +1 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js +1 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js.map +1 -1
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js +1 -1
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js.map +1 -1
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js +129 -108
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +1 -1
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js +1 -1
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js.map +1 -1
- package/dist/components/agent-manager/index.js +16 -0
- package/dist/components/agent-manager/modelDefaults.js +10 -0
- package/dist/components/agent-manager/modelDefaults.js.map +1 -0
- package/dist/components/agents/AgentCard.js +33 -30
- package/dist/components/agents/AgentCard.js.map +1 -1
- package/dist/components/agents/AgentForm.js +277 -239
- package/dist/components/agents/AgentForm.js.map +1 -1
- package/dist/components/agents/AgentStatusBadge.js +19 -8
- package/dist/components/agents/AgentStatusBadge.js.map +1 -1
- package/dist/components/agents/OpenInBrowserEditorButton.js +67 -65
- package/dist/components/agents/OpenInBrowserEditorButton.js.map +1 -1
- package/dist/components/agents/backup/AgentBackupTab.js +186 -185
- package/dist/components/agents/backup/AgentBackupTab.js.map +1 -1
- package/dist/components/ai/AIContextsTab.js +1 -1
- package/dist/components/ai/AIContextsTab.js.map +1 -1
- package/dist/components/ai/AIOverviewTab.js +2 -2
- package/dist/components/ai/AIOverviewTab.js.map +1 -1
- package/dist/components/ai/AIPlaygroundTab.js +97 -97
- package/dist/components/ai/AIPlaygroundTab.js.map +1 -1
- package/dist/components/ai/AIPromptsTab.js +4 -4
- package/dist/components/ai/AIPromptsTab.js.map +1 -1
- package/dist/components/ai/AIProviderCredentialsCard.js +234 -0
- package/dist/components/ai/AIProviderCredentialsCard.js.map +1 -0
- package/dist/components/ai/AISessionsTab.js +17 -1
- package/dist/components/ai/AISessionsTab.js.map +1 -1
- package/dist/components/ai/AIStatsTab.js +1 -1
- package/dist/components/ai/AIStatsTab.js.map +1 -1
- package/dist/components/ai/ClaudeCredentialsCard.js +1 -1
- package/dist/components/ai/ClaudeCredentialsCard.js.map +1 -1
- package/dist/components/ai/PluginHarnessPicker.js +84 -53
- package/dist/components/ai/PluginHarnessPicker.js.map +1 -1
- package/dist/components/aliases/AliasManager.js +386 -0
- package/dist/components/aliases/AliasManager.js.map +1 -0
- package/dist/components/aliases/aliasReservedNames.js +32 -0
- package/dist/components/aliases/aliasReservedNames.js.map +1 -0
- package/dist/components/gitops/CIDurationChart.js +11 -11
- package/dist/components/gitops/VibeGitOpsTab.js +128 -100
- package/dist/components/gitops/VibeGitOpsTab.js.map +1 -1
- package/dist/components/graph/AgentGraphView.js +61 -62
- package/dist/components/graph/AgentGraphView.js.map +1 -1
- package/dist/components/graph/AgentNode.js +17 -18
- package/dist/components/graph/AgentNode.js.map +1 -1
- package/dist/components/graph/TargetNode.js +31 -32
- package/dist/components/graph/TargetNode.js.map +1 -1
- package/dist/components/logs/LogViewer.js +121 -119
- package/dist/components/logs/LogViewer.js.map +1 -1
- package/dist/components/sessions/TerminalPanel.js +449 -458
- package/dist/components/sessions/TerminalPanel.js.map +1 -1
- package/dist/components/shared/AgentSelector.js +87 -67
- package/dist/components/shared/AgentSelector.js.map +1 -1
- package/dist/components/shared/AgentSetupBanner.js +64 -61
- package/dist/components/shared/AgentSetupBanner.js.map +1 -1
- package/dist/components/vibecalendar/expandOccurrences.js.map +1 -1
- package/dist/constants/pluginCatalog.js +29 -1
- package/dist/constants/pluginCatalog.js.map +1 -1
- package/dist/generated/wspace-operations.js +126 -103
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/hooks/useActiveAgentProfile.js +51 -0
- package/dist/hooks/useActiveAgentProfile.js.map +1 -0
- package/dist/hooks/useAgentEvents.js +1 -0
- package/dist/hooks/useAgentEvents.js.map +1 -1
- package/dist/hooks/useAgentManagerStreaming.js +1 -1
- package/dist/hooks/useAgentManagerStreaming.js.map +1 -1
- package/dist/hooks/useCachedInitialData.js +4 -2
- package/dist/hooks/useCachedInitialData.js.map +1 -1
- package/dist/hooks/usePluginAvailability.js +93 -61
- package/dist/hooks/usePluginAvailability.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/microfe-vibecontrols.css +1 -1
- package/dist/node_modules/d3-scale/src/continuous.js +20 -20
- package/dist/node_modules/d3-scale/src/diverging.js +30 -30
- package/dist/node_modules/d3-scale/src/sequential.js +25 -25
- package/dist/pages/AgentDetailsPage.js +801 -736
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/AgentsLandingPage.js +4 -4
- package/dist/pages/AgentsLandingPage.js.map +1 -1
- package/dist/pages/AgentsPage.js +351 -295
- package/dist/pages/AgentsPage.js.map +1 -1
- package/dist/pages/SessionsPage.js +618 -615
- package/dist/pages/SessionsPage.js.map +1 -1
- package/dist/pages/TargetsPage.js +5 -2
- package/dist/pages/TargetsPage.js.map +1 -1
- package/dist/pages/VibeDetailsPage.js +582 -555
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/pages/ai/AIPage.js +107 -103
- package/dist/pages/ai/AIPage.js.map +1 -1
- package/dist/pages/ai/AISessionDetailPage.js +167 -163
- package/dist/pages/ai/AISessionDetailPage.js.map +1 -1
- package/dist/pages/ai/AgentManagerPage.js +94 -90
- package/dist/pages/ai/AgentManagerPage.js.map +1 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +1 -1
- package/dist/services/aiApi.js +119 -112
- package/dist/services/aiApi.js.map +1 -1
- package/dist/services/iframeToken.js +29 -0
- package/dist/services/iframeToken.js.map +1 -0
- package/dist/services/schedulerApi.js +14 -13
- package/dist/services/schedulerApi.js.map +1 -1
- package/dist/store/agentManagerStore.js +61 -14
- package/dist/store/agentManagerStore.js.map +1 -1
- package/dist/store/vibeControlsStore.js +21 -1
- package/dist/store/vibeControlsStore.js.map +1 -1
- package/dist/translations/en.js.map +1 -1
- package/dist/utils/agentApiPath.js +9 -0
- package/dist/utils/agentApiPath.js.map +1 -0
- package/package.json +3 -3
- package/dist/VibeControlsRoot.d.ts +0 -36
- package/dist/VibeControlsRoot.d.ts.map +0 -1
- package/dist/VibeControlsRoutes.d.ts +0 -2
- package/dist/VibeControlsRoutes.d.ts.map +0 -1
- package/dist/components/actions/ActionCard.d.ts +0 -32
- package/dist/components/actions/ActionCard.d.ts.map +0 -1
- package/dist/components/actions/ActionForm.d.ts +0 -39
- package/dist/components/actions/ActionForm.d.ts.map +0 -1
- package/dist/components/actions/ActionTypeBadge.d.ts +0 -9
- package/dist/components/actions/ActionTypeBadge.d.ts.map +0 -1
- package/dist/components/actions/ExecutionHistory.d.ts +0 -23
- package/dist/components/actions/ExecutionHistory.d.ts.map +0 -1
- package/dist/components/actions/index.d.ts +0 -6
- package/dist/components/actions/index.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerAdminBar.d.ts +0 -13
- package/dist/components/agent-manager/AgentManagerAdminBar.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerBulkActions.d.ts +0 -13
- package/dist/components/agent-manager/AgentManagerBulkActions.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerCenter.d.ts +0 -8
- package/dist/components/agent-manager/AgentManagerCenter.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerChatPane.d.ts +0 -9
- package/dist/components/agent-manager/AgentManagerChatPane.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerDetailPanel.d.ts +0 -13
- package/dist/components/agent-manager/AgentManagerDetailPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerInputArea.d.ts +0 -14
- package/dist/components/agent-manager/AgentManagerInputArea.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerLayout.d.ts +0 -10
- package/dist/components/agent-manager/AgentManagerLayout.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.d.ts +0 -10
- package/dist/components/agent-manager/AgentManagerMessageItem.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageList.d.ts +0 -12
- package/dist/components/agent-manager/AgentManagerMessageList.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionItem.d.ts +0 -12
- package/dist/components/agent-manager/AgentManagerSessionItem.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionList.d.ts +0 -16
- package/dist/components/agent-manager/AgentManagerSessionList.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerSidebar.d.ts +0 -14
- package/dist/components/agent-manager/AgentManagerSidebar.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.d.ts +0 -8
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerTab.d.ts +0 -15
- package/dist/components/agent-manager/AgentManagerTab.d.ts.map +0 -1
- package/dist/components/agent-manager/AgentManagerTabBar.d.ts +0 -10
- package/dist/components/agent-manager/AgentManagerTabBar.d.ts.map +0 -1
- package/dist/components/agent-manager/BridleConfigPanel.d.ts +0 -13
- package/dist/components/agent-manager/BridleConfigPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/PluginInstallModal.d.ts +0 -9
- package/dist/components/agent-manager/PluginInstallModal.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/ContextLevelToggle.d.ts +0 -23
- package/dist/components/agent-manager/controls/ContextLevelToggle.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/FileAttachButton.d.ts +0 -13
- package/dist/components/agent-manager/controls/FileAttachButton.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/McpServerSelector.d.ts +0 -10
- package/dist/components/agent-manager/controls/McpServerSelector.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/ModelSelector.d.ts +0 -10
- package/dist/components/agent-manager/controls/ModelSelector.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/SdkSelector.d.ts +0 -13
- package/dist/components/agent-manager/controls/SdkSelector.d.ts.map +0 -1
- package/dist/components/agent-manager/controls/VoiceToggle.d.ts +0 -13
- package/dist/components/agent-manager/controls/VoiceToggle.d.ts.map +0 -1
- package/dist/components/agent-manager/detail/SessionConfigPanel.d.ts +0 -14
- package/dist/components/agent-manager/detail/SessionConfigPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.d.ts +0 -13
- package/dist/components/agent-manager/detail/SessionLogsPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/detail/SessionStatsPanel.d.ts +0 -12
- package/dist/components/agent-manager/detail/SessionStatsPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.d.ts +0 -12
- package/dist/components/agent-manager/detail/SessionToolsPanel.d.ts.map +0 -1
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.d.ts +0 -15
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.d.ts.map +0 -1
- package/dist/components/agent-manager/dialogs/NewSessionDialog.d.ts +0 -14
- package/dist/components/agent-manager/dialogs/NewSessionDialog.d.ts.map +0 -1
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.d.ts +0 -15
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.d.ts.map +0 -1
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.d.ts +0 -15
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.d.ts.map +0 -1
- package/dist/components/agent-manager/index.d.ts +0 -16
- package/dist/components/agent-manager/index.d.ts.map +0 -1
- package/dist/components/agents/AgentCard.d.ts +0 -30
- package/dist/components/agents/AgentCard.d.ts.map +0 -1
- package/dist/components/agents/AgentForm.d.ts +0 -29
- package/dist/components/agents/AgentForm.d.ts.map +0 -1
- package/dist/components/agents/AgentList.d.ts +0 -19
- package/dist/components/agents/AgentList.d.ts.map +0 -1
- package/dist/components/agents/AgentStatusBadge.d.ts +0 -12
- package/dist/components/agents/AgentStatusBadge.d.ts.map +0 -1
- package/dist/components/agents/OpenInBrowserEditorButton.d.ts +0 -16
- package/dist/components/agents/OpenInBrowserEditorButton.d.ts.map +0 -1
- package/dist/components/agents/PluginUIPanel.d.ts +0 -38
- package/dist/components/agents/PluginUIPanel.d.ts.map +0 -1
- package/dist/components/agents/backup/AgentBackupTab.d.ts +0 -11
- package/dist/components/agents/backup/AgentBackupTab.d.ts.map +0 -1
- package/dist/components/agents/index.d.ts +0 -8
- package/dist/components/agents/index.d.ts.map +0 -1
- package/dist/components/agents/types.d.ts +0 -72
- package/dist/components/agents/types.d.ts.map +0 -1
- package/dist/components/ai/AIAssistantPanel.d.ts +0 -8
- package/dist/components/ai/AIAssistantPanel.d.ts.map +0 -1
- package/dist/components/ai/AIContextsTab.d.ts +0 -6
- package/dist/components/ai/AIContextsTab.d.ts.map +0 -1
- package/dist/components/ai/AIOverviewTab.d.ts +0 -7
- package/dist/components/ai/AIOverviewTab.d.ts.map +0 -1
- package/dist/components/ai/AIPlaygroundTab.d.ts +0 -6
- package/dist/components/ai/AIPlaygroundTab.d.ts.map +0 -1
- package/dist/components/ai/AIPromptsTab.d.ts +0 -6
- package/dist/components/ai/AIPromptsTab.d.ts.map +0 -1
- package/dist/components/ai/AISessionsTab.d.ts +0 -7
- package/dist/components/ai/AISessionsTab.d.ts.map +0 -1
- package/dist/components/ai/AIStatsTab.d.ts +0 -6
- package/dist/components/ai/AIStatsTab.d.ts.map +0 -1
- package/dist/components/ai/AITasksTab.d.ts +0 -5
- package/dist/components/ai/AITasksTab.d.ts.map +0 -1
- package/dist/components/ai/AITemplatesTab.d.ts +0 -6
- package/dist/components/ai/AITemplatesTab.d.ts.map +0 -1
- package/dist/components/ai/ClaudeCredentialsCard.d.ts +0 -6
- package/dist/components/ai/ClaudeCredentialsCard.d.ts.map +0 -1
- package/dist/components/ai/PluginHarnessPicker.d.ts +0 -31
- package/dist/components/ai/PluginHarnessPicker.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownChart.d.ts +0 -12
- package/dist/components/analytics/AnalyticsBreakdownChart.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownTable.d.ts +0 -13
- package/dist/components/analytics/AnalyticsBreakdownTable.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsEntityTabs.d.ts +0 -9
- package/dist/components/analytics/AnalyticsEntityTabs.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsFilterBar.d.ts +0 -15
- package/dist/components/analytics/AnalyticsFilterBar.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsKpiGrid.d.ts +0 -10
- package/dist/components/analytics/AnalyticsKpiGrid.d.ts.map +0 -1
- package/dist/components/analytics/AnalyticsTimeSeriesChart.d.ts +0 -16
- package/dist/components/analytics/AnalyticsTimeSeriesChart.d.ts.map +0 -1
- package/dist/components/analytics/SandboxAnalyticsSection.d.ts +0 -9
- package/dist/components/analytics/SandboxAnalyticsSection.d.ts.map +0 -1
- package/dist/components/analytics/index.d.ts +0 -9
- package/dist/components/analytics/index.d.ts.map +0 -1
- package/dist/components/analytics/types.d.ts +0 -28
- package/dist/components/analytics/types.d.ts.map +0 -1
- package/dist/components/assistant/AIAssistantPanel.d.ts +0 -5
- package/dist/components/assistant/AIAssistantPanel.d.ts.map +0 -1
- package/dist/components/assistant/AssistantChatArea.d.ts +0 -4
- package/dist/components/assistant/AssistantChatArea.d.ts.map +0 -1
- package/dist/components/assistant/AssistantChatInput.d.ts +0 -10
- package/dist/components/assistant/AssistantChatInput.d.ts.map +0 -1
- package/dist/components/assistant/AssistantConversationList.d.ts +0 -4
- package/dist/components/assistant/AssistantConversationList.d.ts.map +0 -1
- package/dist/components/assistant/AssistantExportMenu.d.ts +0 -4
- package/dist/components/assistant/AssistantExportMenu.d.ts.map +0 -1
- package/dist/components/assistant/AssistantMarkdownRenderer.d.ts +0 -8
- package/dist/components/assistant/AssistantMarkdownRenderer.d.ts.map +0 -1
- package/dist/components/assistant/AssistantMessageItem.d.ts +0 -10
- package/dist/components/assistant/AssistantMessageItem.d.ts.map +0 -1
- package/dist/components/assistant/AssistantMessageList.d.ts +0 -10
- package/dist/components/assistant/AssistantMessageList.d.ts.map +0 -1
- package/dist/components/assistant/AssistantModeSelector.d.ts +0 -10
- package/dist/components/assistant/AssistantModeSelector.d.ts.map +0 -1
- package/dist/components/assistant/AssistantWelcome.d.ts +0 -10
- package/dist/components/assistant/AssistantWelcome.d.ts.map +0 -1
- package/dist/components/assistant/index.d.ts +0 -11
- package/dist/components/assistant/index.d.ts.map +0 -1
- package/dist/components/audit/AuditDeleteDialog.d.ts +0 -12
- package/dist/components/audit/AuditDeleteDialog.d.ts.map +0 -1
- package/dist/components/audit/AuditExportButton.d.ts +0 -8
- package/dist/components/audit/AuditExportButton.d.ts.map +0 -1
- package/dist/components/audit/AuditLogDetail.d.ts +0 -9
- package/dist/components/audit/AuditLogDetail.d.ts.map +0 -1
- package/dist/components/audit/AuditLogFilters.d.ts +0 -15
- package/dist/components/audit/AuditLogFilters.d.ts.map +0 -1
- package/dist/components/audit/AuditLogStats.d.ts +0 -9
- package/dist/components/audit/AuditLogStats.d.ts.map +0 -1
- package/dist/components/audit/AuditLogTable.d.ts +0 -21
- package/dist/components/audit/AuditLogTable.d.ts.map +0 -1
- package/dist/components/audit/index.d.ts +0 -7
- package/dist/components/audit/index.d.ts.map +0 -1
- package/dist/components/catalog/CatalogCard.d.ts +0 -22
- package/dist/components/catalog/CatalogCard.d.ts.map +0 -1
- package/dist/components/catalog/CatalogForm.d.ts +0 -18
- package/dist/components/catalog/CatalogForm.d.ts.map +0 -1
- package/dist/components/catalog/index.d.ts +0 -5
- package/dist/components/catalog/index.d.ts.map +0 -1
- package/dist/components/docs/DocsCompileStatus.d.ts +0 -9
- package/dist/components/docs/DocsCompileStatus.d.ts.map +0 -1
- package/dist/components/docs/DocsEditPanel.d.ts +0 -26
- package/dist/components/docs/DocsEditPanel.d.ts.map +0 -1
- package/dist/components/docs/DocsEmptyState.d.ts +0 -7
- package/dist/components/docs/DocsEmptyState.d.ts.map +0 -1
- package/dist/components/docs/DocsPageEditor.d.ts +0 -13
- package/dist/components/docs/DocsPageEditor.d.ts.map +0 -1
- package/dist/components/docs/DocsPageTree.d.ts +0 -12
- package/dist/components/docs/DocsPageTree.d.ts.map +0 -1
- package/dist/components/docs/DocsPreviewPanel.d.ts +0 -17
- package/dist/components/docs/DocsPreviewPanel.d.ts.map +0 -1
- package/dist/components/docs/DocsSettingsPanel.d.ts +0 -15
- package/dist/components/docs/DocsSettingsPanel.d.ts.map +0 -1
- package/dist/components/docs/DocsTabPanel.d.ts +0 -8
- package/dist/components/docs/DocsTabPanel.d.ts.map +0 -1
- package/dist/components/docs/index.d.ts +0 -10
- package/dist/components/docs/index.d.ts.map +0 -1
- package/dist/components/docs/previewHtml.d.ts +0 -2
- package/dist/components/docs/previewHtml.d.ts.map +0 -1
- package/dist/components/docs/types.d.ts +0 -59
- package/dist/components/docs/types.d.ts.map +0 -1
- package/dist/components/gitops/CIDurationChart.d.ts +0 -12
- package/dist/components/gitops/CIDurationChart.d.ts.map +0 -1
- package/dist/components/gitops/CIFailedRuns.d.ts +0 -13
- package/dist/components/gitops/CIFailedRuns.d.ts.map +0 -1
- package/dist/components/gitops/CIPipelineRunsTable.d.ts +0 -13
- package/dist/components/gitops/CIPipelineRunsTable.d.ts.map +0 -1
- package/dist/components/gitops/CISuccessRateChart.d.ts +0 -13
- package/dist/components/gitops/CISuccessRateChart.d.ts.map +0 -1
- package/dist/components/gitops/CITab.d.ts +0 -15
- package/dist/components/gitops/CITab.d.ts.map +0 -1
- package/dist/components/gitops/CIWorkflowList.d.ts +0 -13
- package/dist/components/gitops/CIWorkflowList.d.ts.map +0 -1
- package/dist/components/gitops/GitOpsProviderCard.d.ts +0 -14
- package/dist/components/gitops/GitOpsProviderCard.d.ts.map +0 -1
- package/dist/components/gitops/GitOpsSetup.d.ts +0 -16
- package/dist/components/gitops/GitOpsSetup.d.ts.map +0 -1
- package/dist/components/gitops/GitOpsSkeleton.d.ts +0 -12
- package/dist/components/gitops/GitOpsSkeleton.d.ts.map +0 -1
- package/dist/components/gitops/GitOpsStatusBadge.d.ts +0 -14
- package/dist/components/gitops/GitOpsStatusBadge.d.ts.map +0 -1
- package/dist/components/gitops/ProviderIcon.d.ts +0 -14
- package/dist/components/gitops/ProviderIcon.d.ts.map +0 -1
- package/dist/components/gitops/RepoActivityCard.d.ts +0 -12
- package/dist/components/gitops/RepoActivityCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoIssuesCard.d.ts +0 -12
- package/dist/components/gitops/RepoIssuesCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoLanguagesCard.d.ts +0 -13
- package/dist/components/gitops/RepoLanguagesCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoOverviewCard.d.ts +0 -13
- package/dist/components/gitops/RepoOverviewCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoPullRequestsCard.d.ts +0 -12
- package/dist/components/gitops/RepoPullRequestsCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoSecurityCard.d.ts +0 -12
- package/dist/components/gitops/RepoSecurityCard.d.ts.map +0 -1
- package/dist/components/gitops/RepoStatsTab.d.ts +0 -15
- package/dist/components/gitops/RepoStatsTab.d.ts.map +0 -1
- package/dist/components/gitops/VibeGitOpsTab.d.ts +0 -12
- package/dist/components/gitops/VibeGitOpsTab.d.ts.map +0 -1
- package/dist/components/gitops/index.d.ts +0 -21
- package/dist/components/gitops/index.d.ts.map +0 -1
- package/dist/components/gitops/types.d.ts +0 -90
- package/dist/components/gitops/types.d.ts.map +0 -1
- package/dist/components/graph/AgentGraphView.d.ts +0 -44
- package/dist/components/graph/AgentGraphView.d.ts.map +0 -1
- package/dist/components/graph/AgentNode.d.ts +0 -6
- package/dist/components/graph/AgentNode.d.ts.map +0 -1
- package/dist/components/graph/ConnectionPermissionsDialog.d.ts +0 -26
- package/dist/components/graph/ConnectionPermissionsDialog.d.ts.map +0 -1
- package/dist/components/graph/TargetNode.d.ts +0 -6
- package/dist/components/graph/TargetNode.d.ts.map +0 -1
- package/dist/components/health/AgentHealthCard.d.ts +0 -9
- package/dist/components/health/AgentHealthCard.d.ts.map +0 -1
- package/dist/components/health/HealthDashboard.d.ts +0 -10
- package/dist/components/health/HealthDashboard.d.ts.map +0 -1
- package/dist/components/health/SystemStatus.d.ts +0 -11
- package/dist/components/health/SystemStatus.d.ts.map +0 -1
- package/dist/components/health/index.d.ts +0 -5
- package/dist/components/health/index.d.ts.map +0 -1
- package/dist/components/health/types.d.ts +0 -50
- package/dist/components/health/types.d.ts.map +0 -1
- package/dist/components/idp-components/ComponentCard.d.ts +0 -24
- package/dist/components/idp-components/ComponentCard.d.ts.map +0 -1
- package/dist/components/idp-components/ComponentForm.d.ts +0 -22
- package/dist/components/idp-components/ComponentForm.d.ts.map +0 -1
- package/dist/components/idp-components/index.d.ts +0 -5
- package/dist/components/idp-components/index.d.ts.map +0 -1
- package/dist/components/logs/LogViewer.d.ts +0 -13
- package/dist/components/logs/LogViewer.d.ts.map +0 -1
- package/dist/components/notes/NoteCard.d.ts +0 -13
- package/dist/components/notes/NoteCard.d.ts.map +0 -1
- package/dist/components/notes/NoteEditor.d.ts +0 -31
- package/dist/components/notes/NoteEditor.d.ts.map +0 -1
- package/dist/components/notes/NoteList.d.ts +0 -15
- package/dist/components/notes/NoteList.d.ts.map +0 -1
- package/dist/components/notes/NotesTabPanel.d.ts +0 -18
- package/dist/components/notes/NotesTabPanel.d.ts.map +0 -1
- package/dist/components/notes/index.d.ts +0 -7
- package/dist/components/notes/index.d.ts.map +0 -1
- package/dist/components/notes/types.d.ts +0 -58
- package/dist/components/notes/types.d.ts.map +0 -1
- package/dist/components/scorecard/ScorecardPanel.d.ts +0 -9
- package/dist/components/scorecard/ScorecardPanel.d.ts.map +0 -1
- package/dist/components/scorecard/index.d.ts +0 -3
- package/dist/components/scorecard/index.d.ts.map +0 -1
- package/dist/components/sessions/CollaboratorsList.d.ts +0 -18
- package/dist/components/sessions/CollaboratorsList.d.ts.map +0 -1
- package/dist/components/sessions/ControlStatusBar.d.ts +0 -31
- package/dist/components/sessions/ControlStatusBar.d.ts.map +0 -1
- package/dist/components/sessions/SessionCard.d.ts +0 -24
- package/dist/components/sessions/SessionCard.d.ts.map +0 -1
- package/dist/components/sessions/SessionForm.d.ts +0 -20
- package/dist/components/sessions/SessionForm.d.ts.map +0 -1
- package/dist/components/sessions/SessionList.d.ts +0 -25
- package/dist/components/sessions/SessionList.d.ts.map +0 -1
- package/dist/components/sessions/SessionShareDialog.d.ts +0 -15
- package/dist/components/sessions/SessionShareDialog.d.ts.map +0 -1
- package/dist/components/sessions/SessionStatusBadge.d.ts +0 -9
- package/dist/components/sessions/SessionStatusBadge.d.ts.map +0 -1
- package/dist/components/sessions/SharedTerminalPanel.d.ts +0 -72
- package/dist/components/sessions/SharedTerminalPanel.d.ts.map +0 -1
- package/dist/components/sessions/TerminalPanel.d.ts +0 -69
- package/dist/components/sessions/TerminalPanel.d.ts.map +0 -1
- package/dist/components/sessions/index.d.ts +0 -11
- package/dist/components/sessions/index.d.ts.map +0 -1
- package/dist/components/sessions/types.d.ts +0 -67
- package/dist/components/sessions/types.d.ts.map +0 -1
- package/dist/components/settings/AdvancedSection.d.ts +0 -22
- package/dist/components/settings/AdvancedSection.d.ts.map +0 -1
- package/dist/components/settings/ConfigEditor.d.ts +0 -14
- package/dist/components/settings/ConfigEditor.d.ts.map +0 -1
- package/dist/components/settings/ConfigSection.d.ts +0 -12
- package/dist/components/settings/ConfigSection.d.ts.map +0 -1
- package/dist/components/settings/NotificationsSection.d.ts +0 -14
- package/dist/components/settings/NotificationsSection.d.ts.map +0 -1
- package/dist/components/settings/PreferencesSection.d.ts +0 -14
- package/dist/components/settings/PreferencesSection.d.ts.map +0 -1
- package/dist/components/settings/ProfileSection.d.ts +0 -14
- package/dist/components/settings/ProfileSection.d.ts.map +0 -1
- package/dist/components/settings/SecuritySection.d.ts +0 -11
- package/dist/components/settings/SecuritySection.d.ts.map +0 -1
- package/dist/components/settings/SettingsForm.d.ts +0 -58
- package/dist/components/settings/SettingsForm.d.ts.map +0 -1
- package/dist/components/settings/WorkspaceDefaultsSection.d.ts +0 -27
- package/dist/components/settings/WorkspaceDefaultsSection.d.ts.map +0 -1
- package/dist/components/settings/index.d.ts +0 -4
- package/dist/components/settings/index.d.ts.map +0 -1
- package/dist/components/settings/types.d.ts +0 -55
- package/dist/components/settings/types.d.ts.map +0 -1
- package/dist/components/shared/AgentEventsConnector.d.ts +0 -6
- package/dist/components/shared/AgentEventsConnector.d.ts.map +0 -1
- package/dist/components/shared/AgentSelector.d.ts +0 -25
- package/dist/components/shared/AgentSelector.d.ts.map +0 -1
- package/dist/components/shared/AgentSetupBanner.d.ts +0 -21
- package/dist/components/shared/AgentSetupBanner.d.ts.map +0 -1
- package/dist/components/shared/Card.d.ts +0 -29
- package/dist/components/shared/Card.d.ts.map +0 -1
- package/dist/components/shared/ConfirmDialog.d.ts +0 -14
- package/dist/components/shared/ConfirmDialog.d.ts.map +0 -1
- package/dist/components/shared/EmptyState.d.ts +0 -11
- package/dist/components/shared/EmptyState.d.ts.map +0 -1
- package/dist/components/shared/EntityTagPicker.d.ts +0 -8
- package/dist/components/shared/EntityTagPicker.d.ts.map +0 -1
- package/dist/components/shared/ErrorState.d.ts +0 -11
- package/dist/components/shared/ErrorState.d.ts.map +0 -1
- package/dist/components/shared/FilterDropdown.d.ts +0 -20
- package/dist/components/shared/FilterDropdown.d.ts.map +0 -1
- package/dist/components/shared/GetHelpButton.d.ts +0 -27
- package/dist/components/shared/GetHelpButton.d.ts.map +0 -1
- package/dist/components/shared/InstallTabs.d.ts +0 -18
- package/dist/components/shared/InstallTabs.d.ts.map +0 -1
- package/dist/components/shared/LoadingState.d.ts +0 -7
- package/dist/components/shared/LoadingState.d.ts.map +0 -1
- package/dist/components/shared/NotificationToast.d.ts +0 -40
- package/dist/components/shared/NotificationToast.d.ts.map +0 -1
- package/dist/components/shared/PageHeader.d.ts +0 -14
- package/dist/components/shared/PageHeader.d.ts.map +0 -1
- package/dist/components/shared/PluginGate.d.ts +0 -35
- package/dist/components/shared/PluginGate.d.ts.map +0 -1
- package/dist/components/shared/QuotaExhaustedDialog.d.ts +0 -12
- package/dist/components/shared/QuotaExhaustedDialog.d.ts.map +0 -1
- package/dist/components/shared/RequireAgentReachable.d.ts +0 -14
- package/dist/components/shared/RequireAgentReachable.d.ts.map +0 -1
- package/dist/components/shared/SearchInput.d.ts +0 -9
- package/dist/components/shared/SearchInput.d.ts.map +0 -1
- package/dist/components/shared/SearchableSelect.d.ts +0 -48
- package/dist/components/shared/SearchableSelect.d.ts.map +0 -1
- package/dist/components/shared/SelectionCheckbox.d.ts +0 -11
- package/dist/components/shared/SelectionCheckbox.d.ts.map +0 -1
- package/dist/components/shared/SessionNotificationBanner.d.ts +0 -47
- package/dist/components/shared/SessionNotificationBanner.d.ts.map +0 -1
- package/dist/components/shared/StatCard.d.ts +0 -17
- package/dist/components/shared/StatCard.d.ts.map +0 -1
- package/dist/components/shared/StatusBadge.d.ts +0 -11
- package/dist/components/shared/StatusBadge.d.ts.map +0 -1
- package/dist/components/shared/TagFilter.d.ts +0 -11
- package/dist/components/shared/TagFilter.d.ts.map +0 -1
- package/dist/components/shared/index.d.ts +0 -32
- package/dist/components/shared/index.d.ts.map +0 -1
- package/dist/components/targets/TargetCard.d.ts +0 -45
- package/dist/components/targets/TargetCard.d.ts.map +0 -1
- package/dist/components/targets/index.d.ts +0 -3
- package/dist/components/targets/index.d.ts.map +0 -1
- package/dist/components/templates/TemplateCard.d.ts +0 -19
- package/dist/components/templates/TemplateCard.d.ts.map +0 -1
- package/dist/components/templates/index.d.ts +0 -3
- package/dist/components/templates/index.d.ts.map +0 -1
- package/dist/components/tunnels/DomainVerificationBadge.d.ts +0 -6
- package/dist/components/tunnels/DomainVerificationBadge.d.ts.map +0 -1
- package/dist/components/tunnels/ProviderBadge.d.ts +0 -6
- package/dist/components/tunnels/ProviderBadge.d.ts.map +0 -1
- package/dist/components/tunnels/TunnelCard.d.ts +0 -13
- package/dist/components/tunnels/TunnelCard.d.ts.map +0 -1
- package/dist/components/tunnels/TunnelCreateWizard.d.ts +0 -2
- package/dist/components/tunnels/TunnelCreateWizard.d.ts.map +0 -1
- package/dist/components/tunnels/TunnelStatusBadge.d.ts +0 -6
- package/dist/components/tunnels/TunnelStatusBadge.d.ts.map +0 -1
- package/dist/components/vibe/VibeAgentEmptyState.d.ts +0 -8
- package/dist/components/vibe/VibeAgentEmptyState.d.ts.map +0 -1
- package/dist/components/vibecalendar/LogsDrawer.d.ts +0 -12
- package/dist/components/vibecalendar/LogsDrawer.d.ts.map +0 -1
- package/dist/components/vibecalendar/ScheduleTaskModal.d.ts +0 -33
- package/dist/components/vibecalendar/ScheduleTaskModal.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeCalAgendaView.d.ts +0 -11
- package/dist/components/vibecalendar/VibeCalAgendaView.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeCalDayView.d.ts +0 -12
- package/dist/components/vibecalendar/VibeCalDayView.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeCalMonthView.d.ts +0 -12
- package/dist/components/vibecalendar/VibeCalMonthView.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeCalWeekView.d.ts +0 -12
- package/dist/components/vibecalendar/VibeCalWeekView.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeCalendarHeader.d.ts +0 -12
- package/dist/components/vibecalendar/VibeCalendarHeader.d.ts.map +0 -1
- package/dist/components/vibecalendar/VibeTaskBlock.d.ts +0 -12
- package/dist/components/vibecalendar/VibeTaskBlock.d.ts.map +0 -1
- package/dist/components/vibecalendar/expandOccurrences.d.ts +0 -37
- package/dist/components/vibecalendar/expandOccurrences.d.ts.map +0 -1
- package/dist/components/vibecalendar/index.d.ts +0 -11
- package/dist/components/vibecalendar/index.d.ts.map +0 -1
- package/dist/components/vibecalendar/types.d.ts +0 -53
- package/dist/components/vibecalendar/types.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonForm.d.ts +0 -54
- package/dist/components/vibedeck/VibeDeckButtonForm.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonTile.d.ts +0 -48
- package/dist/components/vibedeck/VibeDeckButtonTile.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckExecutionLog.d.ts +0 -25
- package/dist/components/vibedeck/VibeDeckExecutionLog.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckForm.d.ts +0 -21
- package/dist/components/vibedeck/VibeDeckForm.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckGrid.d.ts +0 -51
- package/dist/components/vibedeck/VibeDeckGrid.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckShareDialog.d.ts +0 -10
- package/dist/components/vibedeck/VibeDeckShareDialog.d.ts.map +0 -1
- package/dist/components/vibedeck/VibeDeckSwitcher.d.ts +0 -28
- package/dist/components/vibedeck/VibeDeckSwitcher.d.ts.map +0 -1
- package/dist/components/vibedeck/index.d.ts +0 -9
- package/dist/components/vibedeck/index.d.ts.map +0 -1
- package/dist/components/vibes/VibeCard.d.ts +0 -19
- package/dist/components/vibes/VibeCard.d.ts.map +0 -1
- package/dist/components/vibes/VibeForm.d.ts +0 -15
- package/dist/components/vibes/VibeForm.d.ts.map +0 -1
- package/dist/components/vibes/VibeList.d.ts +0 -20
- package/dist/components/vibes/VibeList.d.ts.map +0 -1
- package/dist/components/vibes/icons.d.ts +0 -6
- package/dist/components/vibes/icons.d.ts.map +0 -1
- package/dist/components/vibes/index.d.ts +0 -5
- package/dist/components/vibes/index.d.ts.map +0 -1
- package/dist/components/vibes/types.d.ts +0 -71
- package/dist/components/vibes/types.d.ts.map +0 -1
- package/dist/components/webhooks/WebhookCard.d.ts +0 -12
- package/dist/components/webhooks/WebhookCard.d.ts.map +0 -1
- package/dist/components/webhooks/WebhookForm.d.ts +0 -11
- package/dist/components/webhooks/WebhookForm.d.ts.map +0 -1
- package/dist/components/webhooks/WebhookList.d.ts +0 -14
- package/dist/components/webhooks/WebhookList.d.ts.map +0 -1
- package/dist/components/webhooks/index.d.ts +0 -5
- package/dist/components/webhooks/index.d.ts.map +0 -1
- package/dist/components/webhooks/types.d.ts +0 -58
- package/dist/components/webhooks/types.d.ts.map +0 -1
- package/dist/config/assistantUsecases.d.ts +0 -18
- package/dist/config/assistantUsecases.d.ts.map +0 -1
- package/dist/config/index.d.ts +0 -24
- package/dist/config/index.d.ts.map +0 -1
- package/dist/constants/permissions.d.ts +0 -112
- package/dist/constants/permissions.d.ts.map +0 -1
- package/dist/constants/pluginCatalog.d.ts +0 -36
- package/dist/constants/pluginCatalog.d.ts.map +0 -1
- package/dist/dev/main.d.ts +0 -2
- package/dist/dev/main.d.ts.map +0 -1
- package/dist/generated/global-operations.d.ts +0 -2
- package/dist/generated/global-operations.d.ts.map +0 -1
- package/dist/generated/global-types.d.ts +0 -21253
- package/dist/generated/global-types.d.ts.map +0 -1
- package/dist/generated/wspace-operations.d.ts +0 -15218
- package/dist/generated/wspace-operations.d.ts.map +0 -1
- package/dist/generated/wspace-types.d.ts +0 -55252
- package/dist/generated/wspace-types.d.ts.map +0 -1
- package/dist/hooks/index.d.ts +0 -7
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/useAgentConnectivity.d.ts +0 -47
- package/dist/hooks/useAgentConnectivity.d.ts.map +0 -1
- package/dist/hooks/useAgentEvents.d.ts +0 -36
- package/dist/hooks/useAgentEvents.d.ts.map +0 -1
- package/dist/hooks/useAgentManagerKeyboard.d.ts +0 -17
- package/dist/hooks/useAgentManagerKeyboard.d.ts.map +0 -1
- package/dist/hooks/useAgentManagerStreaming.d.ts +0 -19
- package/dist/hooks/useAgentManagerStreaming.d.ts.map +0 -1
- package/dist/hooks/useAssistantHeartbeat.d.ts +0 -4
- package/dist/hooks/useAssistantHeartbeat.d.ts.map +0 -1
- package/dist/hooks/useAssistantKeyboardShortcuts.d.ts +0 -18
- package/dist/hooks/useAssistantKeyboardShortcuts.d.ts.map +0 -1
- package/dist/hooks/useCachedInitialData.d.ts +0 -120
- package/dist/hooks/useCachedInitialData.d.ts.map +0 -1
- package/dist/hooks/useEntityTags.d.ts +0 -24
- package/dist/hooks/useEntityTags.d.ts.map +0 -1
- package/dist/hooks/useFileUpload.d.ts +0 -15
- package/dist/hooks/useFileUpload.d.ts.map +0 -1
- package/dist/hooks/useInitialDataLoader.d.ts +0 -48
- package/dist/hooks/useInitialDataLoader.d.ts.map +0 -1
- package/dist/hooks/useMcpServers.d.ts +0 -14
- package/dist/hooks/useMcpServers.d.ts.map +0 -1
- package/dist/hooks/useOpenAssistantHelp.d.ts +0 -2
- package/dist/hooks/useOpenAssistantHelp.d.ts.map +0 -1
- package/dist/hooks/usePluginAvailability.d.ts +0 -35
- package/dist/hooks/usePluginAvailability.d.ts.map +0 -1
- package/dist/hooks/useQueryBackedTab.d.ts +0 -2
- package/dist/hooks/useQueryBackedTab.d.ts.map +0 -1
- package/dist/hooks/useSessionSearch.d.ts +0 -24
- package/dist/hooks/useSessionSearch.d.ts.map +0 -1
- package/dist/hooks/useVoiceMode.d.ts +0 -17
- package/dist/hooks/useVoiceMode.d.ts.map +0 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/vibeFeatures.d.ts +0 -29
- package/dist/lib/vibeFeatures.d.ts.map +0 -1
- package/dist/node_modules/@xyflow/react/dist/esm/index.js +0 -3281
- package/dist/node_modules/@xyflow/react/dist/esm/index.js.map +0 -1
- package/dist/node_modules/@xyflow/system/dist/esm/index.js +0 -1845
- package/dist/node_modules/@xyflow/system/dist/esm/index.js.map +0 -1
- package/dist/node_modules/classcat/index.js +0 -12
- package/dist/node_modules/classcat/index.js.map +0 -1
- package/dist/node_modules/d3-dispatch/src/dispatch.js +0 -67
- package/dist/node_modules/d3-dispatch/src/dispatch.js.map +0 -1
- package/dist/node_modules/d3-drag/src/constant.js +0 -6
- package/dist/node_modules/d3-drag/src/constant.js.map +0 -1
- package/dist/node_modules/d3-drag/src/drag.js +0 -116
- package/dist/node_modules/d3-drag/src/drag.js.map +0 -1
- package/dist/node_modules/d3-drag/src/event.js +0 -64
- package/dist/node_modules/d3-drag/src/event.js.map +0 -1
- package/dist/node_modules/d3-drag/src/nodrag.js +0 -17
- package/dist/node_modules/d3-drag/src/nodrag.js.map +0 -1
- package/dist/node_modules/d3-drag/src/noevent.js +0 -15
- package/dist/node_modules/d3-drag/src/noevent.js.map +0 -1
- package/dist/node_modules/d3-ease/src/cubic.js +0 -8
- package/dist/node_modules/d3-ease/src/cubic.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/transform/decompose.js +0 -24
- package/dist/node_modules/d3-interpolate/src/transform/decompose.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/transform/index.js +0 -56
- package/dist/node_modules/d3-interpolate/src/transform/index.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/transform/parse.js +0 -14
- package/dist/node_modules/d3-interpolate/src/transform/parse.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/zoom.js +0 -43
- package/dist/node_modules/d3-interpolate/src/zoom.js.map +0 -1
- package/dist/node_modules/d3-selection/src/array.js +0 -8
- package/dist/node_modules/d3-selection/src/array.js.map +0 -1
- package/dist/node_modules/d3-selection/src/constant.js +0 -10
- package/dist/node_modules/d3-selection/src/constant.js.map +0 -1
- package/dist/node_modules/d3-selection/src/creator.js +0 -22
- package/dist/node_modules/d3-selection/src/creator.js.map +0 -1
- package/dist/node_modules/d3-selection/src/matcher.js +0 -15
- package/dist/node_modules/d3-selection/src/matcher.js.map +0 -1
- package/dist/node_modules/d3-selection/src/namespace.js +0 -13
- package/dist/node_modules/d3-selection/src/namespace.js.map +0 -1
- package/dist/node_modules/d3-selection/src/namespaces.js +0 -12
- package/dist/node_modules/d3-selection/src/namespaces.js.map +0 -1
- package/dist/node_modules/d3-selection/src/pointer.js +0 -20
- package/dist/node_modules/d3-selection/src/pointer.js.map +0 -1
- package/dist/node_modules/d3-selection/src/select.js +0 -9
- package/dist/node_modules/d3-selection/src/select.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/append.js +0 -12
- package/dist/node_modules/d3-selection/src/selection/append.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/attr.js +0 -46
- package/dist/node_modules/d3-selection/src/selection/attr.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/call.js +0 -9
- package/dist/node_modules/d3-selection/src/selection/call.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/classed.js +0 -55
- package/dist/node_modules/d3-selection/src/selection/classed.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/clone.js +0 -16
- package/dist/node_modules/d3-selection/src/selection/clone.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/data.js +0 -38
- package/dist/node_modules/d3-selection/src/selection/data.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/datum.js +0 -8
- package/dist/node_modules/d3-selection/src/selection/datum.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/dispatch.js +0 -23
- package/dist/node_modules/d3-selection/src/selection/dispatch.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/each.js +0 -9
- package/dist/node_modules/d3-selection/src/selection/each.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/empty.js +0 -8
- package/dist/node_modules/d3-selection/src/selection/empty.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/enter.js +0 -28
- package/dist/node_modules/d3-selection/src/selection/enter.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/exit.js +0 -10
- package/dist/node_modules/d3-selection/src/selection/exit.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/filter.js +0 -12
- package/dist/node_modules/d3-selection/src/selection/filter.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/html.js +0 -21
- package/dist/node_modules/d3-selection/src/selection/html.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/index.js +0 -87
- package/dist/node_modules/d3-selection/src/selection/index.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/insert.js +0 -16
- package/dist/node_modules/d3-selection/src/selection/insert.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/iterator.js +0 -8
- package/dist/node_modules/d3-selection/src/selection/iterator.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/join.js +0 -9
- package/dist/node_modules/d3-selection/src/selection/join.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/lower.js +0 -11
- package/dist/node_modules/d3-selection/src/selection/lower.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/merge.js +0 -11
- package/dist/node_modules/d3-selection/src/selection/merge.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/node.js +0 -12
- package/dist/node_modules/d3-selection/src/selection/node.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/nodes.js +0 -8
- package/dist/node_modules/d3-selection/src/selection/nodes.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/on.js +0 -58
- package/dist/node_modules/d3-selection/src/selection/on.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/order.js +0 -9
- package/dist/node_modules/d3-selection/src/selection/order.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/property.js +0 -24
- package/dist/node_modules/d3-selection/src/selection/property.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/raise.js +0 -11
- package/dist/node_modules/d3-selection/src/selection/raise.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/remove.js +0 -12
- package/dist/node_modules/d3-selection/src/selection/remove.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/select.js +0 -12
- package/dist/node_modules/d3-selection/src/selection/select.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/selectAll.js +0 -18
- package/dist/node_modules/d3-selection/src/selection/selectAll.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/selectChild.js +0 -18
- package/dist/node_modules/d3-selection/src/selection/selectChild.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/selectChildren.js +0 -18
- package/dist/node_modules/d3-selection/src/selection/selectChildren.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/size.js +0 -10
- package/dist/node_modules/d3-selection/src/selection/size.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/sort.js +0 -20
- package/dist/node_modules/d3-selection/src/selection/sort.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/sparse.js +0 -8
- package/dist/node_modules/d3-selection/src/selection/sparse.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/style.js +0 -28
- package/dist/node_modules/d3-selection/src/selection/style.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selection/text.js +0 -21
- package/dist/node_modules/d3-selection/src/selection/text.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selector.js +0 -11
- package/dist/node_modules/d3-selection/src/selector.js.map +0 -1
- package/dist/node_modules/d3-selection/src/selectorAll.js +0 -13
- package/dist/node_modules/d3-selection/src/selectorAll.js.map +0 -1
- package/dist/node_modules/d3-selection/src/sourceEvent.js +0 -10
- package/dist/node_modules/d3-selection/src/sourceEvent.js.map +0 -1
- package/dist/node_modules/d3-selection/src/window.js +0 -8
- package/dist/node_modules/d3-selection/src/window.js.map +0 -1
- package/dist/node_modules/d3-timer/src/timeout.js +0 -12
- package/dist/node_modules/d3-timer/src/timeout.js.map +0 -1
- package/dist/node_modules/d3-timer/src/timer.js +0 -55
- package/dist/node_modules/d3-timer/src/timer.js.map +0 -1
- package/dist/node_modules/d3-transition/src/index.js +0 -3
- package/dist/node_modules/d3-transition/src/interrupt.js +0 -18
- package/dist/node_modules/d3-transition/src/interrupt.js.map +0 -1
- package/dist/node_modules/d3-transition/src/selection/index.js +0 -7
- package/dist/node_modules/d3-transition/src/selection/index.js.map +0 -1
- package/dist/node_modules/d3-transition/src/selection/interrupt.js +0 -11
- package/dist/node_modules/d3-transition/src/selection/interrupt.js.map +0 -1
- package/dist/node_modules/d3-transition/src/selection/transition.js +0 -25
- package/dist/node_modules/d3-transition/src/selection/transition.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/attr.js +0 -51
- package/dist/node_modules/d3-transition/src/transition/attr.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/attrTween.js +0 -40
- package/dist/node_modules/d3-transition/src/transition/attrTween.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/delay.js +0 -20
- package/dist/node_modules/d3-transition/src/transition/delay.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/duration.js +0 -20
- package/dist/node_modules/d3-transition/src/transition/duration.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/ease.js +0 -16
- package/dist/node_modules/d3-transition/src/transition/ease.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/easeVarying.js +0 -17
- package/dist/node_modules/d3-transition/src/transition/easeVarying.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/end.js +0 -18
- package/dist/node_modules/d3-transition/src/transition/end.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/filter.js +0 -12
- package/dist/node_modules/d3-transition/src/transition/filter.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/index.js +0 -69
- package/dist/node_modules/d3-transition/src/transition/index.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/interpolate.js +0 -13
- package/dist/node_modules/d3-transition/src/transition/interpolate.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/merge.js +0 -12
- package/dist/node_modules/d3-transition/src/transition/merge.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/on.js +0 -23
- package/dist/node_modules/d3-transition/src/transition/on.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/remove.js +0 -15
- package/dist/node_modules/d3-transition/src/transition/remove.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/schedule.js +0 -71
- package/dist/node_modules/d3-transition/src/transition/schedule.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/select.js +0 -14
- package/dist/node_modules/d3-transition/src/transition/select.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/selectAll.js +0 -17
- package/dist/node_modules/d3-transition/src/transition/selectAll.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/selection.js +0 -10
- package/dist/node_modules/d3-transition/src/transition/selection.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/style.js +0 -47
- package/dist/node_modules/d3-transition/src/transition/style.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/styleTween.js +0 -25
- package/dist/node_modules/d3-transition/src/transition/styleTween.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/text.js +0 -19
- package/dist/node_modules/d3-transition/src/transition/text.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/textTween.js +0 -25
- package/dist/node_modules/d3-transition/src/transition/textTween.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/transition.js +0 -19
- package/dist/node_modules/d3-transition/src/transition/transition.js.map +0 -1
- package/dist/node_modules/d3-transition/src/transition/tween.js +0 -56
- package/dist/node_modules/d3-transition/src/transition/tween.js.map +0 -1
- package/dist/node_modules/d3-zoom/src/constant.js +0 -6
- package/dist/node_modules/d3-zoom/src/constant.js.map +0 -1
- package/dist/node_modules/d3-zoom/src/event.js +0 -30
- package/dist/node_modules/d3-zoom/src/event.js.map +0 -1
- package/dist/node_modules/d3-zoom/src/index.js +0 -2
- package/dist/node_modules/d3-zoom/src/noevent.js +0 -11
- package/dist/node_modules/d3-zoom/src/noevent.js.map +0 -1
- package/dist/node_modules/d3-zoom/src/transform.js +0 -50
- package/dist/node_modules/d3-zoom/src/transform.js.map +0 -1
- package/dist/node_modules/d3-zoom/src/zoom.js +0 -219
- package/dist/node_modules/d3-zoom/src/zoom.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +0 -56
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +0 -54
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -54
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -46
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/shim/index.js +0 -12
- package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/shim/with-selector.js +0 -12
- package/dist/node_modules/use-sync-external-store/shim/with-selector.js.map +0 -1
- package/dist/node_modules/zustand/esm/traditional.js +0 -17
- package/dist/node_modules/zustand/esm/traditional.js.map +0 -1
- package/dist/node_modules/zustand/esm/vanilla/shallow.js +0 -21
- package/dist/node_modules/zustand/esm/vanilla/shallow.js.map +0 -1
- package/dist/node_modules/zustand/esm/vanilla.js +0 -20
- package/dist/node_modules/zustand/esm/vanilla.js.map +0 -1
- package/dist/pages/ActionsPage.d.ts +0 -2
- package/dist/pages/ActionsPage.d.ts.map +0 -1
- package/dist/pages/AgentDetailsPage.d.ts +0 -5
- package/dist/pages/AgentDetailsPage.d.ts.map +0 -1
- package/dist/pages/AgentGraphPage.d.ts +0 -9
- package/dist/pages/AgentGraphPage.d.ts.map +0 -1
- package/dist/pages/AgentsLandingPage.d.ts +0 -12
- package/dist/pages/AgentsLandingPage.d.ts.map +0 -1
- package/dist/pages/AgentsPage.d.ts +0 -5
- package/dist/pages/AgentsPage.d.ts.map +0 -1
- package/dist/pages/AnalyticsPage.d.ts +0 -2
- package/dist/pages/AnalyticsPage.d.ts.map +0 -1
- package/dist/pages/CatalogDetailPage.d.ts +0 -2
- package/dist/pages/CatalogDetailPage.d.ts.map +0 -1
- package/dist/pages/CatalogDocsPage.d.ts +0 -2
- package/dist/pages/CatalogDocsPage.d.ts.map +0 -1
- package/dist/pages/CatalogPage.d.ts +0 -2
- package/dist/pages/CatalogPage.d.ts.map +0 -1
- package/dist/pages/ComponentDetailPage.d.ts +0 -2
- package/dist/pages/ComponentDetailPage.d.ts.map +0 -1
- package/dist/pages/ComponentDocsPage.d.ts +0 -2
- package/dist/pages/ComponentDocsPage.d.ts.map +0 -1
- package/dist/pages/ComponentsPage.d.ts +0 -2
- package/dist/pages/ComponentsPage.d.ts.map +0 -1
- package/dist/pages/GettingStartedPage.d.ts +0 -16
- package/dist/pages/GettingStartedPage.d.ts.map +0 -1
- package/dist/pages/HealthPage.d.ts +0 -2
- package/dist/pages/HealthPage.d.ts.map +0 -1
- package/dist/pages/LogsPage.d.ts +0 -2
- package/dist/pages/LogsPage.d.ts.map +0 -1
- package/dist/pages/NoteDetailsPage.d.ts +0 -2
- package/dist/pages/NoteDetailsPage.d.ts.map +0 -1
- package/dist/pages/OverviewPage.d.ts +0 -9
- package/dist/pages/OverviewPage.d.ts.map +0 -1
- package/dist/pages/SessionDetailsPage.d.ts +0 -6
- package/dist/pages/SessionDetailsPage.d.ts.map +0 -1
- package/dist/pages/SessionsPage.d.ts +0 -6
- package/dist/pages/SessionsPage.d.ts.map +0 -1
- package/dist/pages/SettingsPage.d.ts +0 -2
- package/dist/pages/SettingsPage.d.ts.map +0 -1
- package/dist/pages/SharedSessionPage.d.ts +0 -13
- package/dist/pages/SharedSessionPage.d.ts.map +0 -1
- package/dist/pages/SharedVibeDeckPage.d.ts +0 -8
- package/dist/pages/SharedVibeDeckPage.d.ts.map +0 -1
- package/dist/pages/TargetDetailsPage.d.ts +0 -13
- package/dist/pages/TargetDetailsPage.d.ts.map +0 -1
- package/dist/pages/TargetsPage.d.ts +0 -8
- package/dist/pages/TargetsPage.d.ts.map +0 -1
- package/dist/pages/TemplateDetailPage.d.ts +0 -2
- package/dist/pages/TemplateDetailPage.d.ts.map +0 -1
- package/dist/pages/TemplatesPage.d.ts +0 -2
- package/dist/pages/TemplatesPage.d.ts.map +0 -1
- package/dist/pages/TunnelsLandingPage.d.ts +0 -8
- package/dist/pages/TunnelsLandingPage.d.ts.map +0 -1
- package/dist/pages/VibeAuditPage.d.ts +0 -2
- package/dist/pages/VibeAuditPage.d.ts.map +0 -1
- package/dist/pages/VibeCalendarPage.d.ts +0 -9
- package/dist/pages/VibeCalendarPage.d.ts.map +0 -1
- package/dist/pages/VibeDeckPage.d.ts +0 -2
- package/dist/pages/VibeDeckPage.d.ts.map +0 -1
- package/dist/pages/VibeDetailsPage.d.ts +0 -5
- package/dist/pages/VibeDetailsPage.d.ts.map +0 -1
- package/dist/pages/VibeDocsPage.d.ts +0 -2
- package/dist/pages/VibeDocsPage.d.ts.map +0 -1
- package/dist/pages/VibeTaskDetailPage.d.ts +0 -9
- package/dist/pages/VibeTaskDetailPage.d.ts.map +0 -1
- package/dist/pages/VibesPage.d.ts +0 -5
- package/dist/pages/VibesPage.d.ts.map +0 -1
- package/dist/pages/WebhooksPage.d.ts +0 -5
- package/dist/pages/WebhooksPage.d.ts.map +0 -1
- package/dist/pages/ai/AIPage.d.ts +0 -6
- package/dist/pages/ai/AIPage.d.ts.map +0 -1
- package/dist/pages/ai/AISessionDetailPage.d.ts +0 -5
- package/dist/pages/ai/AISessionDetailPage.d.ts.map +0 -1
- package/dist/pages/ai/AgentManagerPage.d.ts +0 -9
- package/dist/pages/ai/AgentManagerPage.d.ts.map +0 -1
- package/dist/pages/index.d.ts +0 -17
- package/dist/pages/index.d.ts.map +0 -1
- package/dist/pages/tunnels/AuditTab.d.ts +0 -8
- package/dist/pages/tunnels/AuditTab.d.ts.map +0 -1
- package/dist/pages/tunnels/DomainsTab.d.ts +0 -2
- package/dist/pages/tunnels/DomainsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/ProvidersTab.d.ts +0 -2
- package/dist/pages/tunnels/ProvidersTab.d.ts.map +0 -1
- package/dist/pages/tunnels/SessionsTab.d.ts +0 -8
- package/dist/pages/tunnels/SessionsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/TunnelDetailsPage.d.ts +0 -2
- package/dist/pages/tunnels/TunnelDetailsPage.d.ts.map +0 -1
- package/dist/pages/tunnels/TunnelsTab.d.ts +0 -2
- package/dist/pages/tunnels/TunnelsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/UsageTab.d.ts +0 -8
- package/dist/pages/tunnels/UsageTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelAuditTab.d.ts +0 -4
- package/dist/pages/tunnels/tabs/TunnelAuditTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelCliTab.d.ts +0 -8
- package/dist/pages/tunnels/tabs/TunnelCliTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.d.ts +0 -8
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.d.ts +0 -8
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.d.ts +0 -8
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.d.ts +0 -4
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.d.ts +0 -9
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.d.ts.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelUsageTab.d.ts +0 -4
- package/dist/pages/tunnels/tabs/TunnelUsageTab.d.ts.map +0 -1
- package/dist/plugin.d.ts +0 -4
- package/dist/plugin.d.ts.map +0 -1
- package/dist/providers/AgentEventsProvider.d.ts +0 -79
- package/dist/providers/AgentEventsProvider.d.ts.map +0 -1
- package/dist/providers/VibeControlsProvider.d.ts +0 -29
- package/dist/providers/VibeControlsProvider.d.ts.map +0 -1
- package/dist/services/aiApi.d.ts +0 -310
- package/dist/services/aiApi.d.ts.map +0 -1
- package/dist/services/assistantApi.d.ts +0 -71
- package/dist/services/assistantApi.d.ts.map +0 -1
- package/dist/services/assistantExportService.d.ts +0 -9
- package/dist/services/assistantExportService.d.ts.map +0 -1
- package/dist/services/schedulerApi.d.ts +0 -18
- package/dist/services/schedulerApi.d.ts.map +0 -1
- package/dist/shared/hooks/useTr.d.ts +0 -17
- package/dist/shared/hooks/useTr.d.ts.map +0 -1
- package/dist/store/agentManagerStore.d.ts +0 -65
- package/dist/store/agentManagerStore.d.ts.map +0 -1
- package/dist/store/assistantStore.d.ts +0 -56
- package/dist/store/assistantStore.d.ts.map +0 -1
- package/dist/store/vibeControlsStore.d.ts +0 -68
- package/dist/store/vibeControlsStore.d.ts.map +0 -1
- package/dist/translations/en.d.ts +0 -2174
- package/dist/translations/en.d.ts.map +0 -1
- package/dist/types/agentManager.d.ts +0 -72
- package/dist/types/agentManager.d.ts.map +0 -1
- package/dist/types/assistant.d.ts +0 -58
- package/dist/types/assistant.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -134
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/agentStatus.d.ts +0 -42
- package/dist/utils/agentStatus.d.ts.map +0 -1
- package/dist/utils/aiSessionNotFound.d.ts +0 -2
- package/dist/utils/aiSessionNotFound.d.ts.map +0 -1
- package/dist/utils/nativeBridge.d.ts +0 -3
- package/dist/utils/nativeBridge.d.ts.map +0 -1
- package/dist/utils/pageContext.d.ts +0 -23
- package/dist/utils/pageContext.d.ts.map +0 -1
- package/dist/utils/quotaUtils.d.ts +0 -8
- package/dist/utils/quotaUtils.d.ts.map +0 -1
- package/dist/utils/relativeTime.d.ts +0 -3
- package/dist/utils/relativeTime.d.ts.map +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useVibeControlsStore as e } from "../store/vibeControlsStore.js";
|
|
2
|
+
import { useEffect as t, useMemo as n } from "react";
|
|
3
|
+
import { gql as r } from "@apollo/client";
|
|
4
|
+
import { useQuery as i } from "@apollo/client/react";
|
|
5
|
+
//#region src/hooks/useActiveAgentProfile.ts
|
|
6
|
+
var a = r`
|
|
7
|
+
query VibecontrolsAgentProfiles($agentId: ID!) {
|
|
8
|
+
vibecontrolsAgentProfiles(agentId: $agentId) {
|
|
9
|
+
id
|
|
10
|
+
agentId
|
|
11
|
+
name
|
|
12
|
+
isDefault
|
|
13
|
+
port
|
|
14
|
+
status
|
|
15
|
+
tunnelUrl
|
|
16
|
+
createdAt
|
|
17
|
+
updatedAt
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
function o(r) {
|
|
22
|
+
let o = e((e) => e.setActiveProfile), s = e((e) => r ? e.activeProfilePerAgent[r] ?? null : null), { data: c, loading: l, error: u, refetch: d } = i(a, {
|
|
23
|
+
variables: { agentId: r ?? "" },
|
|
24
|
+
skip: !r,
|
|
25
|
+
fetchPolicy: "cache-and-network",
|
|
26
|
+
errorPolicy: "ignore"
|
|
27
|
+
}), f = n(() => c?.vibecontrolsAgentProfiles ?? [], [c]), p = n(() => f.length === 0 ? null : f.find((e) => e.isDefault) ?? f[0] ?? null, [f]), m = s ?? p?.name ?? "default";
|
|
28
|
+
return t(() => {
|
|
29
|
+
r && (s || p && p.name !== "default" && o(r, p.name));
|
|
30
|
+
}, [
|
|
31
|
+
r,
|
|
32
|
+
s,
|
|
33
|
+
p,
|
|
34
|
+
o
|
|
35
|
+
]), {
|
|
36
|
+
profiles: f,
|
|
37
|
+
active: m,
|
|
38
|
+
setActive: (e) => {
|
|
39
|
+
r && o(r, e);
|
|
40
|
+
},
|
|
41
|
+
loading: l,
|
|
42
|
+
error: u ?? null,
|
|
43
|
+
refetch: () => {
|
|
44
|
+
d();
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { a as VIBECONTROLS_AGENT_PROFILES_QUERY, o as useActiveAgentProfile };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=useActiveAgentProfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useActiveAgentProfile.js","names":[],"sources":["../../src/hooks/useActiveAgentProfile.ts"],"sourcesContent":["/**\n * useActiveAgentProfile — Phase 5B (multi-profile-per-daemon).\n *\n * Lists `AgentProfile` rows for an agent and tracks the currently-active\n * profile name in the VibeControls Zustand store (`activeProfilePerAgent`).\n *\n * Active-selection rules:\n * 1. If the user has explicitly selected a profile for this agent, use it.\n * 2. Otherwise, fall back to the profile flagged `isDefault`.\n * 3. Otherwise, fall back to the first profile in the list.\n * 4. Otherwise, fall back to the literal string \"default\" so callers can\n * build canonical paths even before any AgentProfile rows exist\n * (server-side compatibility shim).\n *\n * NOTE: The Apollo `gql` document is inlined here (not generated) so this\n * hook compiles cleanly even before the Phase 5A svc work has published\n * the AgentProfile schema to Hive. Once published, the inline document\n * can be replaced with the generated `useVibecontrolsAgentProfilesQuery`\n * hook without touching callsites.\n */\n\nimport { useEffect, useMemo } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\n\nexport interface AgentProfile {\n id: string;\n agentId: string;\n name: string;\n isDefault: boolean;\n port: number | null;\n status: string | null;\n tunnelUrl: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface VibecontrolsAgentProfilesData {\n vibecontrolsAgentProfiles: AgentProfile[];\n}\n\ninterface VibecontrolsAgentProfilesVars {\n agentId: string;\n}\n\nconst VIBECONTROLS_AGENT_PROFILES_QUERY = gql`\n query VibecontrolsAgentProfiles($agentId: ID!) {\n vibecontrolsAgentProfiles(agentId: $agentId) {\n id\n agentId\n name\n isDefault\n port\n status\n tunnelUrl\n createdAt\n updatedAt\n }\n }\n`;\n\nexport interface UseActiveAgentProfileResult {\n /** All profiles for the agent (empty until svc Phase 5A is live). */\n profiles: AgentProfile[];\n /** The currently-selected profile name for this agent. */\n active: string;\n /** Persist a new active profile for this agent into the store. */\n setActive: (profile: string) => void;\n loading: boolean;\n error: Error | null;\n refetch: () => void;\n}\n\nexport function useActiveAgentProfile(\n agentId: string | null | undefined\n): UseActiveAgentProfileResult {\n const setActiveProfile = useVibeControlsStore((s) => s.setActiveProfile);\n const storedActive = useVibeControlsStore((s) =>\n agentId ? (s.activeProfilePerAgent[agentId] ?? null) : null\n );\n\n const { data, loading, error, refetch } = useQuery<\n VibecontrolsAgentProfilesData,\n VibecontrolsAgentProfilesVars\n >(VIBECONTROLS_AGENT_PROFILES_QUERY, {\n variables: { agentId: agentId ?? '' },\n skip: !agentId,\n fetchPolicy: 'cache-and-network',\n // The svc Phase 5A schema may not be published yet; swallow schema\n // errors so consumers still render with the canonical \"default\"\n // fallback instead of the whole tree blowing up.\n errorPolicy: 'ignore',\n });\n\n const profiles = useMemo<AgentProfile[]>(() => data?.vibecontrolsAgentProfiles ?? [], [data]);\n\n const defaultProfile = useMemo<AgentProfile | null>(() => {\n if (profiles.length === 0) return null;\n return profiles.find((p) => p.isDefault) ?? profiles[0] ?? null;\n }, [profiles]);\n\n const active: string = storedActive ?? defaultProfile?.name ?? 'default';\n\n // Auto-commit the resolved default into the store the first time we\n // see profiles for this agent so downstream readers (which prefer\n // store-first reads via `getActiveProfile`) match the hook's result.\n useEffect(() => {\n if (!agentId) return;\n if (storedActive) return;\n if (defaultProfile && defaultProfile.name !== 'default') {\n setActiveProfile(agentId, defaultProfile.name);\n }\n }, [agentId, storedActive, defaultProfile, setActiveProfile]);\n\n const setActive = (profile: string): void => {\n if (!agentId) return;\n setActiveProfile(agentId, profile);\n };\n\n return {\n profiles,\n active,\n setActive,\n loading,\n error: (error as Error | undefined) ?? null,\n refetch: () => {\n void refetch();\n },\n };\n}\n\nexport { VIBECONTROLS_AGENT_PROFILES_QUERY };\n"],"mappings":";;;;;AA8CA,IAAM,IAAoC,CAAG;;;;;;;;;;;;;;;AA4B7C,SAAgB,EACd,GAC6B;CAC7B,IAAM,IAAmB,GAAsB,MAAM,EAAE,iBAAiB,EAClE,IAAe,GAAsB,MACzC,IAAW,EAAE,sBAAsB,MAAY,OAAQ,KACxD,EAEK,EAAE,SAAM,YAAS,UAAO,eAAY,EAGxC,GAAmC;EACnC,WAAW,EAAE,SAAS,KAAW,IAAI;EACrC,MAAM,CAAC;EACP,aAAa;EAIb,aAAa;EACd,CAAC,EAEI,IAAW,QAA8B,GAAM,6BAA6B,EAAE,EAAE,CAAC,EAAK,CAAC,EAEvF,IAAiB,QACjB,EAAS,WAAW,IAAU,OAC3B,EAAS,MAAM,MAAM,EAAE,UAAU,IAAI,EAAS,MAAM,MAC1D,CAAC,EAAS,CAAC,EAER,IAAiB,KAAgB,GAAgB,QAAQ;AAkB/D,QAbA,QAAgB;AACT,QACD,KACA,KAAkB,EAAe,SAAS,aAC5C,EAAiB,GAAS,EAAe,KAAK;IAE/C;EAAC;EAAS;EAAc;EAAgB;EAAiB,CAAC,EAOtD;EACL;EACA;EACA,YARiB,MAA0B;AACtC,QACL,EAAiB,GAAS,EAAQ;;EAOlC;EACA,OAAQ,KAA+B;EACvC,eAAe;AACR,MAAS;;EAEjB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
|
|
2
|
+
import "@burdenoff/fe-libs/shared/graphql";
|
|
2
3
|
import { graphqlFetch as i } from "@burdenoff/fe-libs/shared/graphql/fetch";
|
|
3
4
|
//#region src/hooks/useAgentEvents.ts
|
|
4
5
|
var a = 50, o = 3e3, s = 5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentEvents.js","names":[],"sources":["../../src/hooks/useAgentEvents.ts"],"sourcesContent":["/**\n * useAgentEvents Hook\n *\n * Polls recent AI tool events through the workspace gateway instead of opening\n * a direct browser WebSocket to the agent tunnel.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { getStoredAuthToken, getStoredWorkspaceToken } from '@burdenoff/fe-libs/shared/graphql';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql/fetch';\n\nexport type AgentEventType =\n | 'connected'\n | 'session:created'\n | 'session:updated'\n | 'session:terminated'\n | 'session:output'\n | 'tunnel:started'\n | 'tunnel:stopped'\n | 'tunnel:error'\n | 'notification:new'\n | 'notification:read'\n | 'file:changed'\n | 'task:started'\n | 'task:completed'\n | 'task:failed'\n | 'plugin:installed'\n | 'plugin:removed'\n | 'plugin:reloaded'\n | 'agent:heartbeat'\n | 'log:entry'\n | 'pong';\n\nexport interface AiToolNotification {\n id: string;\n source: string;\n eventType: string;\n title: string;\n message: string;\n timestamp: string;\n properties?: Record<string, unknown>;\n}\n\nexport interface AgentEvent<T = unknown> {\n type: AgentEventType;\n payload: T;\n timestamp: string;\n}\n\nexport type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';\n\nexport interface UseAgentEventsOptions {\n agentId: string | null;\n enabled?: boolean;\n reconnectDelay?: number;\n maxReconnectAttempts?: number;\n onNotification?: (notification: AiToolNotification) => void;\n onEvent?: (event: AgentEvent) => void;\n onStatusChange?: (status: ConnectionStatus) => void;\n}\n\nexport interface UseAgentEventsReturn {\n status: ConnectionStatus;\n error: string | null;\n notifications: AiToolNotification[];\n reconnect: () => void;\n disconnect: () => void;\n clearNotifications: () => void;\n dismissNotification: (id: string) => void;\n}\n\nconst MAX_NOTIFICATIONS = 50;\nconst DEFAULT_RECONNECT_DELAY = 3000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 5;\n\ninterface RecentAiToolEvent {\n id: string;\n source: string;\n eventType: string;\n payload?: Record<string, unknown> | null;\n createdAt: string;\n}\n\nfunction getWorkspaceId(): string {\n if (typeof window === 'undefined') return '';\n return new URLSearchParams(window.location.search).get('workspace') || '';\n}\n\nexport function useAgentEvents(options: UseAgentEventsOptions): UseAgentEventsReturn {\n const {\n agentId,\n enabled = true,\n reconnectDelay = DEFAULT_RECONNECT_DELAY,\n maxReconnectAttempts = DEFAULT_MAX_RECONNECT_ATTEMPTS,\n onNotification,\n onEvent,\n onStatusChange,\n } = options;\n\n const [status, setStatus] = useState<ConnectionStatus>('disconnected');\n const [error, setError] = useState<string | null>(null);\n const [notifications, setNotifications] = useState<AiToolNotification[]>([]);\n\n const seenEventIdsRef = useRef<Set<string>>(new Set());\n const reconnectAttemptsRef = useRef(0);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const intentionalDisconnectRef = useRef(false);\n\n const updateStatus = useCallback(\n (newStatus: ConnectionStatus) => {\n setStatus(newStatus);\n onStatusChange?.(newStatus);\n },\n [onStatusChange]\n );\n\n const clearIntervalRef = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n const clearNotifications = useCallback(() => {\n setNotifications([]);\n }, []);\n\n const dismissNotification = useCallback((id: string) => {\n setNotifications((prev) => prev.filter((notification) => notification.id !== id));\n }, []);\n\n const pollEvents = useCallback(async () => {\n if (!agentId || !enabled) return;\n\n const result = await graphqlFetch<{\n recentAiToolEvents?: RecentAiToolEvent[];\n }>({\n gateway: 'workspace',\n query: `query RecentAiToolEvents($agentId: ID!, $limit: Int) {\n recentAiToolEvents(agentId: $agentId, limit: $limit) {\n id\n source\n eventType\n payload\n createdAt\n }\n }`,\n variables: { agentId, limit: 20 },\n });\n\n if (result.errors?.length) {\n throw new Error(result.errors[0]?.message || 'Failed to poll agent events');\n }\n\n const events = result.data?.recentAiToolEvents ?? [];\n const incoming: AiToolNotification[] = [];\n\n for (const event of [...events].reverse()) {\n if (seenEventIdsRef.current.has(event.id)) continue;\n seenEventIdsRef.current.add(event.id);\n\n const payload = event.payload ?? {};\n const notification: AiToolNotification = {\n id: event.id,\n source: event.source,\n eventType: event.eventType,\n title: typeof payload.title === 'string' ? payload.title : `${event.source} event`,\n message:\n typeof payload.message === 'string'\n ? payload.message\n : typeof payload.summary === 'string'\n ? payload.summary\n : event.eventType,\n timestamp: event.createdAt,\n properties: payload,\n };\n\n incoming.push(notification);\n onNotification?.(notification);\n onEvent?.({ type: 'notification:new', payload: notification, timestamp: event.createdAt });\n }\n\n if (incoming.length > 0) {\n setNotifications((prev) => [...incoming.reverse(), ...prev].slice(0, MAX_NOTIFICATIONS));\n }\n }, [agentId, enabled, onEvent, onNotification]);\n\n const disconnect = useCallback(() => {\n intentionalDisconnectRef.current = true;\n clearIntervalRef();\n reconnectAttemptsRef.current = 0;\n updateStatus('disconnected');\n }, [clearIntervalRef, updateStatus]);\n\n const connect = useCallback(() => {\n if (!agentId || !enabled) return;\n\n intentionalDisconnectRef.current = false;\n clearIntervalRef();\n updateStatus('connecting');\n setError(null);\n\n const runPoll = async () => {\n try {\n await pollEvents();\n reconnectAttemptsRef.current = 0;\n updateStatus('connected');\n setError(null);\n } catch (err) {\n if (intentionalDisconnectRef.current) {\n updateStatus('disconnected');\n return;\n }\n\n reconnectAttemptsRef.current += 1;\n setError(err instanceof Error ? err.message : 'Failed to poll agent events');\n\n if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\n updateStatus('error');\n clearIntervalRef();\n } else {\n updateStatus('connecting');\n }\n }\n };\n\n void runPoll();\n intervalRef.current = setInterval(() => {\n void runPoll();\n }, reconnectDelay);\n }, [\n agentId,\n enabled,\n clearIntervalRef,\n maxReconnectAttempts,\n pollEvents,\n reconnectDelay,\n updateStatus,\n ]);\n\n const reconnect = useCallback(() => {\n reconnectAttemptsRef.current = 0;\n connect();\n }, [connect]);\n\n useEffect(() => {\n if (enabled && agentId) {\n connect();\n } else {\n disconnect();\n }\n\n return () => {\n clearIntervalRef();\n };\n }, [agentId, enabled, connect, disconnect, clearIntervalRef]);\n\n return {\n status,\n error,\n notifications,\n reconnect,\n disconnect,\n clearNotifications,\n dismissNotification,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useAgentEvents.js","names":[],"sources":["../../src/hooks/useAgentEvents.ts"],"sourcesContent":["/**\n * useAgentEvents Hook\n *\n * Polls recent AI tool events through the workspace gateway instead of opening\n * a direct browser WebSocket to the agent tunnel.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n getStoredAuthToken,\n getStoredWorkspaceId,\n getStoredWorkspaceToken,\n} from '@burdenoff/fe-libs/shared/graphql';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql/fetch';\n\nexport type AgentEventType =\n | 'connected'\n | 'session:created'\n | 'session:updated'\n | 'session:terminated'\n | 'session:output'\n | 'tunnel:started'\n | 'tunnel:stopped'\n | 'tunnel:error'\n | 'notification:new'\n | 'notification:read'\n | 'file:changed'\n | 'task:started'\n | 'task:completed'\n | 'task:failed'\n | 'plugin:installed'\n | 'plugin:removed'\n | 'plugin:reloaded'\n | 'agent:heartbeat'\n | 'log:entry'\n | 'pong';\n\nexport interface AiToolNotification {\n id: string;\n source: string;\n eventType: string;\n title: string;\n message: string;\n timestamp: string;\n properties?: Record<string, unknown>;\n}\n\nexport interface AgentEvent<T = unknown> {\n type: AgentEventType;\n payload: T;\n timestamp: string;\n}\n\nexport type ConnectionStatus = 'disconnected' | 'connecting' | 'connected' | 'error';\n\nexport interface UseAgentEventsOptions {\n agentId: string | null;\n enabled?: boolean;\n reconnectDelay?: number;\n maxReconnectAttempts?: number;\n onNotification?: (notification: AiToolNotification) => void;\n onEvent?: (event: AgentEvent) => void;\n onStatusChange?: (status: ConnectionStatus) => void;\n}\n\nexport interface UseAgentEventsReturn {\n status: ConnectionStatus;\n error: string | null;\n notifications: AiToolNotification[];\n reconnect: () => void;\n disconnect: () => void;\n clearNotifications: () => void;\n dismissNotification: (id: string) => void;\n}\n\nconst MAX_NOTIFICATIONS = 50;\nconst DEFAULT_RECONNECT_DELAY = 3000;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 5;\n\ninterface RecentAiToolEvent {\n id: string;\n source: string;\n eventType: string;\n payload?: Record<string, unknown> | null;\n createdAt: string;\n}\n\n// Reads from ActiveContextStorage with URL precedence (mirrors aiApi.ts /\n// schedulerApi.ts). Bare `?workspace=` parsing missed the param across MFE\n// route changes, so the SSE stream connected without workspace context.\nfunction getWorkspaceId(): string {\n return getStoredWorkspaceId() ?? '';\n}\n\nexport function useAgentEvents(options: UseAgentEventsOptions): UseAgentEventsReturn {\n const {\n agentId,\n enabled = true,\n reconnectDelay = DEFAULT_RECONNECT_DELAY,\n maxReconnectAttempts = DEFAULT_MAX_RECONNECT_ATTEMPTS,\n onNotification,\n onEvent,\n onStatusChange,\n } = options;\n\n const [status, setStatus] = useState<ConnectionStatus>('disconnected');\n const [error, setError] = useState<string | null>(null);\n const [notifications, setNotifications] = useState<AiToolNotification[]>([]);\n\n const seenEventIdsRef = useRef<Set<string>>(new Set());\n const reconnectAttemptsRef = useRef(0);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const intentionalDisconnectRef = useRef(false);\n\n const updateStatus = useCallback(\n (newStatus: ConnectionStatus) => {\n setStatus(newStatus);\n onStatusChange?.(newStatus);\n },\n [onStatusChange]\n );\n\n const clearIntervalRef = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n }, []);\n\n const clearNotifications = useCallback(() => {\n setNotifications([]);\n }, []);\n\n const dismissNotification = useCallback((id: string) => {\n setNotifications((prev) => prev.filter((notification) => notification.id !== id));\n }, []);\n\n const pollEvents = useCallback(async () => {\n if (!agentId || !enabled) return;\n\n const result = await graphqlFetch<{\n recentAiToolEvents?: RecentAiToolEvent[];\n }>({\n gateway: 'workspace',\n query: `query RecentAiToolEvents($agentId: ID!, $limit: Int) {\n recentAiToolEvents(agentId: $agentId, limit: $limit) {\n id\n source\n eventType\n payload\n createdAt\n }\n }`,\n variables: { agentId, limit: 20 },\n });\n\n if (result.errors?.length) {\n throw new Error(result.errors[0]?.message || 'Failed to poll agent events');\n }\n\n const events = result.data?.recentAiToolEvents ?? [];\n const incoming: AiToolNotification[] = [];\n\n for (const event of [...events].reverse()) {\n if (seenEventIdsRef.current.has(event.id)) continue;\n seenEventIdsRef.current.add(event.id);\n\n const payload = event.payload ?? {};\n const notification: AiToolNotification = {\n id: event.id,\n source: event.source,\n eventType: event.eventType,\n title: typeof payload.title === 'string' ? payload.title : `${event.source} event`,\n message:\n typeof payload.message === 'string'\n ? payload.message\n : typeof payload.summary === 'string'\n ? payload.summary\n : event.eventType,\n timestamp: event.createdAt,\n properties: payload,\n };\n\n incoming.push(notification);\n onNotification?.(notification);\n onEvent?.({ type: 'notification:new', payload: notification, timestamp: event.createdAt });\n }\n\n if (incoming.length > 0) {\n setNotifications((prev) => [...incoming.reverse(), ...prev].slice(0, MAX_NOTIFICATIONS));\n }\n }, [agentId, enabled, onEvent, onNotification]);\n\n const disconnect = useCallback(() => {\n intentionalDisconnectRef.current = true;\n clearIntervalRef();\n reconnectAttemptsRef.current = 0;\n updateStatus('disconnected');\n }, [clearIntervalRef, updateStatus]);\n\n const connect = useCallback(() => {\n if (!agentId || !enabled) return;\n\n intentionalDisconnectRef.current = false;\n clearIntervalRef();\n updateStatus('connecting');\n setError(null);\n\n const runPoll = async () => {\n try {\n await pollEvents();\n reconnectAttemptsRef.current = 0;\n updateStatus('connected');\n setError(null);\n } catch (err) {\n if (intentionalDisconnectRef.current) {\n updateStatus('disconnected');\n return;\n }\n\n reconnectAttemptsRef.current += 1;\n setError(err instanceof Error ? err.message : 'Failed to poll agent events');\n\n if (reconnectAttemptsRef.current >= maxReconnectAttempts) {\n updateStatus('error');\n clearIntervalRef();\n } else {\n updateStatus('connecting');\n }\n }\n };\n\n void runPoll();\n intervalRef.current = setInterval(() => {\n void runPoll();\n }, reconnectDelay);\n }, [\n agentId,\n enabled,\n clearIntervalRef,\n maxReconnectAttempts,\n pollEvents,\n reconnectDelay,\n updateStatus,\n ]);\n\n const reconnect = useCallback(() => {\n reconnectAttemptsRef.current = 0;\n connect();\n }, [connect]);\n\n useEffect(() => {\n if (enabled && agentId) {\n connect();\n } else {\n disconnect();\n }\n\n return () => {\n clearIntervalRef();\n };\n }, [agentId, enabled, connect, disconnect, clearIntervalRef]);\n\n return {\n status,\n error,\n notifications,\n reconnect,\n disconnect,\n clearNotifications,\n dismissNotification,\n };\n}\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { useCallback as n, useRef as r } from "react";
|
|
|
5
5
|
function i() {
|
|
6
6
|
return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
7
7
|
}
|
|
8
|
-
function a({
|
|
8
|
+
function a({ agent: a, sessionId: o }) {
|
|
9
9
|
let s = r(null), c = t((e) => e.addMessage), l = t((e) => e.updateMessage), u = t((e) => e.setSessionStatus), d = t((e) => e.sessionStates[o]), f = d?.status === "streaming" || d?.status === "processing";
|
|
10
10
|
return {
|
|
11
11
|
sendMessage: n(async (n) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentManagerStreaming.js","names":[],"sources":["../../src/hooks/useAgentManagerStreaming.ts"],"sourcesContent":["/**\n * Hook for streaming management in Agent Manager sessions.\n *\n * Manages the send/receive lifecycle: adds user message to store,\n * creates a placeholder assistant message, calls sendPromptToSession,\n * updates the placeholder with the response, and handles cancellation.\n */\n\nimport { useRef, useCallback } from 'react';\nimport { useAgentManagerStore } from '@/store/agentManagerStore';\nimport { sendPromptToSession } from '@/services/aiApi';\nimport type { AgentManagerMessage } from '@/types/agentManager';\n\ninterface UseAgentManagerStreamingParams {\n
|
|
1
|
+
{"version":3,"file":"useAgentManagerStreaming.js","names":[],"sources":["../../src/hooks/useAgentManagerStreaming.ts"],"sourcesContent":["/**\n * Hook for streaming management in Agent Manager sessions.\n *\n * Manages the send/receive lifecycle: adds user message to store,\n * creates a placeholder assistant message, calls sendPromptToSession,\n * updates the placeholder with the response, and handles cancellation.\n */\n\nimport { useRef, useCallback } from 'react';\nimport { useAgentManagerStore } from '@/store/agentManagerStore';\nimport { sendPromptToSession, type AgentRef } from '@/services/aiApi';\nimport type { AgentManagerMessage } from '@/types/agentManager';\n\ninterface UseAgentManagerStreamingParams {\n agent: AgentRef;\n sessionId: string;\n}\n\ninterface UseAgentManagerStreamingReturn {\n sendMessage: (prompt: string) => Promise<void>;\n cancelStream: () => void;\n isStreaming: boolean;\n}\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nexport function useAgentManagerStreaming({\n agent,\n sessionId,\n}: UseAgentManagerStreamingParams): UseAgentManagerStreamingReturn {\n const abortRef = useRef<AbortController | null>(null);\n\n const addMessage = useAgentManagerStore((s) => s.addMessage);\n const updateMessage = useAgentManagerStore((s) => s.updateMessage);\n const setSessionStatus = useAgentManagerStore((s) => s.setSessionStatus);\n const sessionState = useAgentManagerStore((s) => s.sessionStates[sessionId]);\n\n const isStreaming = sessionState?.status === 'streaming' || sessionState?.status === 'processing';\n\n const sendMessage = useCallback(\n async (prompt: string) => {\n // Get current session state for SDK, model, and history limit\n const currentState = useAgentManagerStore.getState().sessionStates[sessionId];\n const currentSdk = currentState?.sdk;\n const currentModel = currentState?.model;\n const currentMode = currentState?.mode;\n const historyLimit = currentState?.contextHistoryLimit ?? 20;\n\n // Add user message with SDK info\n const userMsg: AgentManagerMessage = {\n id: generateId(),\n role: 'user',\n content: prompt,\n timestamp: new Date().toISOString(),\n sdk: currentSdk,\n };\n addMessage(sessionId, userMsg);\n\n // Build conversation history from last N messages (excluding the one just added)\n const messages = currentState?.messages ?? [];\n const historyMessages = messages\n .filter((m) => m.role === 'user' || m.role === 'assistant')\n .slice(-historyLimit)\n .map((m) => ({ role: m.role, content: m.content }));\n\n // Add placeholder assistant message\n const assistantMsgId = generateId();\n const placeholderMsg: AgentManagerMessage = {\n id: assistantMsgId,\n role: 'assistant',\n content: '',\n timestamp: new Date().toISOString(),\n sdk: currentSdk,\n };\n addMessage(sessionId, placeholderMsg);\n\n // Set status to streaming\n setSessionStatus(sessionId, 'streaming');\n\n // Create abort controller\n const controller = new AbortController();\n abortRef.current = controller;\n\n try {\n const result = await sendPromptToSession(agent, sessionId, prompt, undefined, {\n agentType: currentSdk,\n model: currentModel,\n mode: currentMode,\n conversationHistory: historyMessages.length > 0 ? historyMessages : undefined,\n });\n\n // Check if aborted\n if (controller.signal.aborted) return;\n\n // Update the placeholder message with the response\n updateMessage(sessionId, assistantMsgId, result.response);\n\n // Patch the assistant message with tokens, model, and SDK used\n {\n const store = useAgentManagerStore.getState();\n const session = store.sessionStates[sessionId];\n if (session) {\n const responseModel = (result as Record<string, unknown>).model as string | undefined;\n const responseSdk = (\n (result as Record<string, unknown>).metadata as Record<string, unknown>\n )?.provider as string | undefined;\n const updatedMessages = session.messages.map((m) =>\n m.id === assistantMsgId\n ? {\n ...m,\n content: result.response,\n tokens: result.tokens,\n model: responseModel || m.model,\n sdk: (responseSdk as AgentManagerMessage['sdk']) || currentSdk,\n }\n : m\n );\n useAgentManagerStore.setState((prev) => ({\n sessionStates: {\n ...prev.sessionStates,\n [sessionId]: { ...session, messages: updatedMessages },\n },\n }));\n }\n }\n\n setSessionStatus(sessionId, 'idle');\n } catch (error: unknown) {\n if (controller.signal.aborted) return;\n\n const errorMessage = error instanceof Error ? error.message : 'An error occurred';\n\n updateMessage(sessionId, assistantMsgId, `Error: ${errorMessage}`);\n setSessionStatus(sessionId, 'error');\n\n // Reset to idle after a brief period\n setTimeout(() => {\n setSessionStatus(sessionId, 'idle');\n }, 3000);\n } finally {\n abortRef.current = null;\n }\n },\n [agent, sessionId, addMessage, updateMessage, setSessionStatus]\n );\n\n const cancelStream = useCallback(() => {\n if (abortRef.current) {\n abortRef.current.abort();\n abortRef.current = null;\n }\n setSessionStatus(sessionId, 'idle');\n }, [sessionId, setSessionStatus]);\n\n return { sendMessage, cancelStream, isStreaming };\n}\n"],"mappings":";;;;AAwBA,SAAS,IAAqB;AAC5B,QAAO,GAAG,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE;;AAGhE,SAAgB,EAAyB,EACvC,UACA,gBACiE;CACjE,IAAM,IAAW,EAA+B,KAAK,EAE/C,IAAa,GAAsB,MAAM,EAAE,WAAW,EACtD,IAAgB,GAAsB,MAAM,EAAE,cAAc,EAC5D,IAAmB,GAAsB,MAAM,EAAE,iBAAiB,EAClE,IAAe,GAAsB,MAAM,EAAE,cAAc,GAAW,EAEtE,IAAc,GAAc,WAAW,eAAe,GAAc,WAAW;AAqHrF,QAAO;EAAE,aAnHW,EAClB,OAAO,MAAmB;GAExB,IAAM,IAAe,EAAqB,UAAU,CAAC,cAAc,IAC7D,IAAa,GAAc,KAC3B,IAAe,GAAc,OAC7B,IAAc,GAAc,MAC5B,IAAe,GAAc,uBAAuB;AAU1D,KAAW,GAP0B;IACnC,IAAI,GAAY;IAChB,MAAM;IACN,SAAS;IACT,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,KAAK;IACN,CAC6B;GAI9B,IAAM,KADW,GAAc,YAAY,EAAE,EAE1C,QAAQ,MAAM,EAAE,SAAS,UAAU,EAAE,SAAS,YAAY,CAC1D,MAAM,CAAC,EAAa,CACpB,KAAK,OAAO;IAAE,MAAM,EAAE;IAAM,SAAS,EAAE;IAAS,EAAE,EAG/C,IAAiB,GAAY;AAWnC,GAHA,EAAW,GAPiC;IAC1C,IAAI;IACJ,MAAM;IACN,SAAS;IACT,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,KAAK;IACN,CACoC,EAGrC,EAAiB,GAAW,YAAY;GAGxC,IAAM,IAAa,IAAI,iBAAiB;AACxC,KAAS,UAAU;AAEnB,OAAI;IACF,IAAM,IAAS,MAAM,EAAoB,GAAO,GAAW,GAAQ,KAAA,GAAW;KAC5E,WAAW;KACX,OAAO;KACP,MAAM;KACN,qBAAqB,EAAgB,SAAS,IAAI,IAAkB,KAAA;KACrE,CAAC;AAGF,QAAI,EAAW,OAAO,QAAS;AAG/B,MAAc,GAAW,GAAgB,EAAO,SAAS;IAGzD;KAEE,IAAM,IADQ,EAAqB,UAAU,CACvB,cAAc;AACpC,SAAI,GAAS;MACX,IAAM,IAAiB,EAAmC,OACpD,IACH,EAAmC,UACnC,UACG,IAAkB,EAAQ,SAAS,KAAK,MAC5C,EAAE,OAAO,IACL;OACE,GAAG;OACH,SAAS,EAAO;OAChB,QAAQ,EAAO;OACf,OAAO,KAAiB,EAAE;OAC1B,KAAM,KAA8C;OACrD,GACD,EACL;AACD,QAAqB,UAAU,OAAU,EACvC,eAAe;OACb,GAAG,EAAK;QACP,IAAY;QAAE,GAAG;QAAS,UAAU;QAAiB;OACvD,EACF,EAAE;;;AAIP,MAAiB,GAAW,OAAO;YAC5B,GAAgB;AACvB,QAAI,EAAW,OAAO,QAAS;AAQ/B,IAJA,EAAc,GAAW,GAAgB,UAFpB,aAAiB,QAAQ,EAAM,UAAU,sBAEI,EAClE,EAAiB,GAAW,QAAQ,EAGpC,iBAAiB;AACf,OAAiB,GAAW,OAAO;OAClC,IAAK;aACA;AACR,MAAS,UAAU;;KAGvB;GAAC;GAAO;GAAW;GAAY;GAAe;GAAiB,CAChE;EAUqB,cARD,QAAkB;AAKrC,GAJA,AAEE,EAAS,aADT,EAAS,QAAQ,OAAO,EACL,OAErB,EAAiB,GAAW,OAAO;KAClC,CAAC,GAAW,EAAiB,CAAC;EAEG;EAAa"}
|
|
@@ -5,7 +5,8 @@ import { useCallback as n, useMemo as r } from "react";
|
|
|
5
5
|
function i() {
|
|
6
6
|
let { workspaceId: i } = t(), { data: a, loading: o, error: s, refetch: c } = e({
|
|
7
7
|
variables: { workspaceId: i || "" },
|
|
8
|
-
fetchPolicy: "cache-
|
|
8
|
+
fetchPolicy: "cache-and-network",
|
|
9
|
+
nextFetchPolicy: "cache-first",
|
|
9
10
|
skip: !i
|
|
10
11
|
}), l = n(() => {
|
|
11
12
|
c();
|
|
@@ -24,7 +25,8 @@ function i() {
|
|
|
24
25
|
architecture: e.architecture,
|
|
25
26
|
createdAt: e.createdAt,
|
|
26
27
|
updatedAt: e.updatedAt,
|
|
27
|
-
agentApiKey: e.agentApiKey
|
|
28
|
+
agentApiKey: e.agentApiKey,
|
|
29
|
+
metadata: e.metadata ?? null
|
|
28
30
|
})) : [], n = a?.vibes?.items, r = Array.isArray(n) ? n.map((e) => ({
|
|
29
31
|
id: e.id,
|
|
30
32
|
name: e.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCachedInitialData.js","names":[],"sources":["../../src/hooks/useCachedInitialData.ts"],"sourcesContent":["/**\n * useCachedInitialData\n *\n * Hook to read the prefetched initial data from Apollo cache.\n * This uses cache-only to avoid any network requests - data should already\n * be present from the useInitialDataLoader in VibeControlsProvider.\n *\n * This hook is the primary way components should access shared data\n * (agents, vibes, sessions, targets, notes) instead of making\n * independent queries.\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useVibeControls } from '../providers/VibeControlsProvider';\nimport {\n useVibeControlsInitialDataQuery,\n type VibeControlsInitialDataQuery,\n type VibeControlsInitialDataQueryVariables,\n} from '../generated/wspace-operations';\n\n/**\n * Return type for cached initial data\n */\ninterface CachedInitialData {\n /** The full cached query result */\n data?: VibeControlsInitialDataQuery;\n /** Whether the data is still loading (should be false if cached) */\n loading: boolean;\n /** Whether there was an error (cached data might still be available) */\n error?: Error;\n /** All agents from cache */\n agents: Array<{\n id: string;\n name: string;\n hostname: string;\n platform: string;\n architecture?: string;\n isActive: boolean;\n tunnelUrl?: string | null;\n tunnelStatus?: string | null;\n lastHeartbeat?: string | null;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n agentApiKey?: string | null;\n }>;\n /** All vibes from cache */\n vibes: Array<{\n id: string;\n name: string;\n description?: string;\n path?: string;\n status: string;\n agentId?: string | null;\n type?: string;\n tags?: string[];\n gitBranch?: string | null;\n createdAt?: string;\n updatedAt?: string;\n }>;\n /** All sessions from cache */\n sessions: Array<{\n id: string;\n name: string;\n status: string;\n agentId?: string | null;\n vibeId?: string | null;\n type?: string;\n startedAt?: string | null;\n metadata?: Record<string, unknown> | null;\n createdAt?: string;\n updatedAt?: string;\n }>;\n /** All targets from cache */\n targets: Array<{\n id: string;\n workspaceId?: string;\n name: string;\n type?: string;\n status: string;\n host?: string | null;\n port?: number | null;\n username?: string | null;\n connectionId?: string | null;\n label?: string | null;\n tags?: string[];\n metadata?: Record<string, unknown> | null;\n createdAt?: string;\n updatedAt?: string;\n agents?: Array<{\n id: string;\n name: string;\n version?: string | null;\n isActive: boolean;\n tunnelUrl?: string | null;\n agentApiKey?: string | null;\n }>;\n }>;\n /** All notes from cache */\n notes: Array<{\n id: string;\n title: string;\n isPinned: boolean;\n }>;\n /** Totals for stats */\n totals: {\n agents: number;\n vibes: number;\n sessions: number;\n targets: number;\n notes: number;\n };\n /** Refetch all initial data from network */\n refetch: () => void;\n}\n\n/**\n * Hook to access cached initial data.\n * Returns data from Apollo cache with cache-only policy.\n * If data is not yet in cache, returns empty arrays.\n *\n * Usage:\n * ```tsx\n * function MyComponent() {\n * const { agents, vibes, sessions, loading } = useCachedInitialData();\n *\n * if (loading) return <Loading />;\n *\n * return (\n * <select>\n * {agents.map(a => <option key={a.id}>{a.name}</option>)}\n * </select>\n * );\n * }\n * ```\n */\nexport function useCachedInitialData(): CachedInitialData {\n const { workspaceId } = useVibeControls();\n\n const {\n data,\n loading: queryLoading,\n error,\n refetch: apolloRefetch,\n } = useVibeControlsInitialDataQuery({\n variables: { workspaceId: workspaceId || '' } as VibeControlsInitialDataQueryVariables,\n fetchPolicy: 'cache-first',\n skip: !workspaceId,\n });\n\n const refetch = useCallback(() => {\n void apolloRefetch();\n }, [apolloRefetch]);\n\n // If cache-only returns no data and isn't loading, it means the initial\n // network fetch hasn't populated the cache yet — treat as loading to\n // prevent counts flickering from 0 to actual values.\n const loading = queryLoading || (!data && !error && !!workspaceId);\n\n // Memoize the transformed data\n const result = useMemo<CachedInitialData>(() => {\n const rawAgents = data?.vibecontrolsAgents;\n const agents = Array.isArray(rawAgents)\n ? rawAgents.map((a: NonNullable<(typeof rawAgents)[number]>) => ({\n id: a.id,\n name: a.name,\n hostname: a.hostname,\n platform: a.platform,\n isActive: a.isActive,\n tunnelUrl: a.tunnelUrl,\n tunnelStatus: a.tunnelStatus,\n lastHeartbeat: a.lastHeartbeat,\n version: a.version,\n architecture: a.architecture,\n createdAt: a.createdAt,\n updatedAt: a.updatedAt,\n agentApiKey: a.agentApiKey,\n }))\n : [];\n\n const rawVibes = data?.vibes?.items;\n const vibes = Array.isArray(rawVibes)\n ? rawVibes.map((v: NonNullable<(typeof rawVibes)[number]>) => ({\n id: v.id,\n name: v.name,\n description: v.description,\n path: v.path,\n status: v.status,\n agentId: v.agentId,\n type: v.type,\n tags: v.tags,\n gitBranch: v.gitBranch,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n }))\n : [];\n\n const rawSessions = data?.sessions?.items;\n const sessions = Array.isArray(rawSessions)\n ? rawSessions.map((s: NonNullable<(typeof rawSessions)[number]>) => ({\n id: s.id,\n name: s.name,\n status: s.status,\n agentId: s.agentId,\n vibeId: s.vibeId,\n type: s.type,\n startedAt: s.startedAt,\n metadata: (s.metadata as Record<string, unknown> | null) ?? null,\n createdAt: s.createdAt,\n updatedAt: s.updatedAt,\n }))\n : [];\n\n const rawTargets = data?.targets?.items;\n const targets = Array.isArray(rawTargets)\n ? rawTargets.map((t: NonNullable<(typeof rawTargets)[number]>) => ({\n id: t.id,\n workspaceId: t.workspaceId,\n name: t.name,\n type: t.type,\n status: t.status,\n host: t.host,\n port: t.port,\n username: t.username,\n connectionId: t.connectionId,\n label: t.label,\n tags: t.tags,\n metadata: (t.metadata as Record<string, unknown> | null) ?? null,\n createdAt: t.createdAt,\n updatedAt: t.updatedAt,\n agents: (t.agents ?? []).map((agent: NonNullable<(typeof t.agents)[number]>) => ({\n id: agent.id,\n name: agent.name,\n version: agent.version,\n isActive: agent.isActive,\n tunnelUrl: agent.tunnelUrl,\n agentApiKey: agent.agentApiKey,\n })),\n }))\n : [];\n\n const rawNotes = data?.notes?.items;\n const notes = Array.isArray(rawNotes)\n ? rawNotes.map((n: NonNullable<(typeof rawNotes)[number]>) => ({\n id: n.id,\n title: n.title,\n isPinned: n.isPinned,\n }))\n : [];\n\n return {\n data,\n loading,\n error: error as Error | undefined,\n agents,\n vibes,\n sessions,\n targets,\n notes,\n totals: {\n agents: data?.vibecontrolsAgents?.length ?? 0,\n vibes: data?.vibes?.total ?? 0,\n sessions: data?.sessions?.total ?? 0,\n targets: data?.targets?.total ?? 0,\n notes: data?.notes?.total ?? 0,\n },\n refetch,\n };\n }, [data, loading, error, refetch]);\n\n return result;\n}\n\nexport default useCachedInitialData;\n"],"mappings":";;;;AAwIA,SAAgB,IAA0C;CACxD,IAAM,EAAE,mBAAgB,GAAiB,EAEnC,EACJ,SACA,SAAS,GACT,UACA,SAAS,MACP,EAAgC;EAClC,WAAW,EAAE,aAAa,KAAe,IAAI;EAC7C,aAAa;EACb,MAAM,CAAC;EACR,CAAC,EAEI,IAAU,QAAkB;AAC3B,KAAe;IACnB,CAAC,EAAc,CAAC,EAKb,IAAU,KAAiB,CAAC,KAAQ,CAAC,KAAS,CAAC,CAAC;AAiHtD,QA9Ge,QAAiC;EAC9C,IAAM,IAAY,GAAM,oBAClB,IAAS,MAAM,QAAQ,EAAU,GACnC,EAAU,KAAK,OAAgD;GAC7D,IAAI,EAAE;GACN,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,WAAW,EAAE;GACb,cAAc,EAAE;GAChB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,WAAW,EAAE;GACb,WAAW,EAAE;GACb,aAAa,EAAE;GAChB,EAAE,GACH,EAAE,EAEA,IAAW,GAAM,OAAO,OACxB,IAAQ,MAAM,QAAQ,EAAS,GACjC,EAAS,KAAK,OAA+C;GAC3D,IAAI,EAAE;GACN,MAAM,EAAE;GACR,aAAa,EAAE;GACf,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,SAAS,EAAE;GACX,MAAM,EAAE;GACR,MAAM,EAAE;GACR,WAAW,EAAE;GACb,WAAW,EAAE;GACb,WAAW,EAAE;GACd,EAAE,GACH,EAAE,EAEA,IAAc,GAAM,UAAU,OAC9B,IAAW,MAAM,QAAQ,EAAY,GACvC,EAAY,KAAK,OAAkD;GACjE,IAAI,EAAE;GACN,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,SAAS,EAAE;GACX,QAAQ,EAAE;GACV,MAAM,EAAE;GACR,WAAW,EAAE;GACb,UAAW,EAAE,YAA+C;GAC5D,WAAW,EAAE;GACb,WAAW,EAAE;GACd,EAAE,GACH,EAAE,EAEA,IAAa,GAAM,SAAS,OAC5B,IAAU,MAAM,QAAQ,EAAW,GACrC,EAAW,KAAK,OAAiD;GAC/D,IAAI,EAAE;GACN,aAAa,EAAE;GACf,MAAM,EAAE;GACR,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,MAAM,EAAE;GACR,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,cAAc,EAAE;GAChB,OAAO,EAAE;GACT,MAAM,EAAE;GACR,UAAW,EAAE,YAA+C;GAC5D,WAAW,EAAE;GACb,WAAW,EAAE;GACb,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,OAAmD;IAC/E,IAAI,EAAM;IACV,MAAM,EAAM;IACZ,SAAS,EAAM;IACf,UAAU,EAAM;IAChB,WAAW,EAAM;IACjB,aAAa,EAAM;IACpB,EAAE;GACJ,EAAE,GACH,EAAE,EAEA,IAAW,GAAM,OAAO;AAS9B,SAAO;GACL;GACA;GACO;GACP;GACA;GACA;GACA;GACA,OAhBY,MAAM,QAAQ,EAAS,GACjC,EAAS,KAAK,OAA+C;IAC3D,IAAI,EAAE;IACN,OAAO,EAAE;IACT,UAAU,EAAE;IACb,EAAE,GACH,EAAE;GAWJ,QAAQ;IACN,QAAQ,GAAM,oBAAoB,UAAU;IAC5C,OAAO,GAAM,OAAO,SAAS;IAC7B,UAAU,GAAM,UAAU,SAAS;IACnC,SAAS,GAAM,SAAS,SAAS;IACjC,OAAO,GAAM,OAAO,SAAS;IAC9B;GACD;GACD;IACA;EAAC;EAAM;EAAS;EAAO;EAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"useCachedInitialData.js","names":[],"sources":["../../src/hooks/useCachedInitialData.ts"],"sourcesContent":["/**\n * useCachedInitialData\n *\n * Hook to read the prefetched initial data from Apollo cache.\n * This uses cache-only to avoid any network requests - data should already\n * be present from the useInitialDataLoader in VibeControlsProvider.\n *\n * This hook is the primary way components should access shared data\n * (agents, vibes, sessions, targets, notes) instead of making\n * independent queries.\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useVibeControls } from '../providers/VibeControlsProvider';\nimport {\n useVibeControlsInitialDataQuery,\n type VibeControlsInitialDataQuery,\n type VibeControlsInitialDataQueryVariables,\n} from '../generated/wspace-operations';\n\n/**\n * Return type for cached initial data\n */\ninterface CachedInitialData {\n /** The full cached query result */\n data?: VibeControlsInitialDataQuery;\n /** Whether the data is still loading (should be false if cached) */\n loading: boolean;\n /** Whether there was an error (cached data might still be available) */\n error?: Error;\n /** All agents from cache */\n agents: Array<{\n id: string;\n name: string;\n hostname: string;\n platform: string;\n architecture?: string;\n isActive: boolean;\n tunnelUrl?: string | null;\n tunnelStatus?: string | null;\n lastHeartbeat?: string | null;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n agentApiKey?: string | null;\n /** jsonb metadata; carries the canonical CLI `profile` field. */\n metadata?: Record<string, unknown> | null;\n }>;\n /** All vibes from cache */\n vibes: Array<{\n id: string;\n name: string;\n description?: string;\n path?: string;\n status: string;\n agentId?: string | null;\n type?: string;\n tags?: string[];\n gitBranch?: string | null;\n createdAt?: string;\n updatedAt?: string;\n }>;\n /** All sessions from cache */\n sessions: Array<{\n id: string;\n name: string;\n status: string;\n agentId?: string | null;\n vibeId?: string | null;\n type?: string;\n startedAt?: string | null;\n metadata?: Record<string, unknown> | null;\n createdAt?: string;\n updatedAt?: string;\n }>;\n /** All targets from cache */\n targets: Array<{\n id: string;\n workspaceId?: string;\n name: string;\n type?: string;\n status: string;\n host?: string | null;\n port?: number | null;\n username?: string | null;\n connectionId?: string | null;\n label?: string | null;\n tags?: string[];\n metadata?: Record<string, unknown> | null;\n createdAt?: string;\n updatedAt?: string;\n agents?: Array<{\n id: string;\n name: string;\n version?: string | null;\n isActive: boolean;\n tunnelUrl?: string | null;\n agentApiKey?: string | null;\n }>;\n }>;\n /** All notes from cache */\n notes: Array<{\n id: string;\n title: string;\n isPinned: boolean;\n }>;\n /** Totals for stats */\n totals: {\n agents: number;\n vibes: number;\n sessions: number;\n targets: number;\n notes: number;\n };\n /** Refetch all initial data from network */\n refetch: () => void;\n}\n\n/**\n * Hook to access cached initial data.\n * Returns data from Apollo cache with cache-only policy.\n * If data is not yet in cache, returns empty arrays.\n *\n * Usage:\n * ```tsx\n * function MyComponent() {\n * const { agents, vibes, sessions, loading } = useCachedInitialData();\n *\n * if (loading) return <Loading />;\n *\n * return (\n * <select>\n * {agents.map(a => <option key={a.id}>{a.name}</option>)}\n * </select>\n * );\n * }\n * ```\n */\nexport function useCachedInitialData(): CachedInitialData {\n const { workspaceId } = useVibeControls();\n\n const {\n data,\n loading: queryLoading,\n error,\n refetch: apolloRefetch,\n } = useVibeControlsInitialDataQuery({\n variables: { workspaceId: workspaceId || '' } as VibeControlsInitialDataQueryVariables,\n // cache-and-network: serve cached data immediately for fast paint, then\n // re-issue the network request on every mount so cross-page mutations\n // (e.g. createTarget on TargetsPage → user navigates to AgentsPage) show\n // up without a manual reload. Previously cache-first held stale data\n // until refetch() was explicitly invoked.\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n skip: !workspaceId,\n });\n\n const refetch = useCallback(() => {\n void apolloRefetch();\n }, [apolloRefetch]);\n\n // If cache-only returns no data and isn't loading, it means the initial\n // network fetch hasn't populated the cache yet — treat as loading to\n // prevent counts flickering from 0 to actual values.\n const loading = queryLoading || (!data && !error && !!workspaceId);\n\n // Memoize the transformed data\n const result = useMemo<CachedInitialData>(() => {\n const rawAgents = data?.vibecontrolsAgents;\n const agents = Array.isArray(rawAgents)\n ? rawAgents.map((a: NonNullable<(typeof rawAgents)[number]>) => ({\n id: a.id,\n name: a.name,\n hostname: a.hostname,\n platform: a.platform,\n isActive: a.isActive,\n tunnelUrl: a.tunnelUrl,\n tunnelStatus: a.tunnelStatus,\n lastHeartbeat: a.lastHeartbeat,\n version: a.version,\n architecture: a.architecture,\n createdAt: a.createdAt,\n updatedAt: a.updatedAt,\n agentApiKey: a.agentApiKey,\n metadata:\n ((a as { metadata?: unknown }).metadata as Record<string, unknown> | null) ?? null,\n }))\n : [];\n\n const rawVibes = data?.vibes?.items;\n const vibes = Array.isArray(rawVibes)\n ? rawVibes.map((v: NonNullable<(typeof rawVibes)[number]>) => ({\n id: v.id,\n name: v.name,\n description: v.description,\n path: v.path,\n status: v.status,\n agentId: v.agentId,\n type: v.type,\n tags: v.tags,\n gitBranch: v.gitBranch,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n }))\n : [];\n\n const rawSessions = data?.sessions?.items;\n const sessions = Array.isArray(rawSessions)\n ? rawSessions.map((s: NonNullable<(typeof rawSessions)[number]>) => ({\n id: s.id,\n name: s.name,\n status: s.status,\n agentId: s.agentId,\n vibeId: s.vibeId,\n type: s.type,\n startedAt: s.startedAt,\n metadata: (s.metadata as Record<string, unknown> | null) ?? null,\n createdAt: s.createdAt,\n updatedAt: s.updatedAt,\n }))\n : [];\n\n const rawTargets = data?.targets?.items;\n const targets = Array.isArray(rawTargets)\n ? rawTargets.map((t: NonNullable<(typeof rawTargets)[number]>) => ({\n id: t.id,\n workspaceId: t.workspaceId,\n name: t.name,\n type: t.type,\n status: t.status,\n host: t.host,\n port: t.port,\n username: t.username,\n connectionId: t.connectionId,\n label: t.label,\n tags: t.tags,\n metadata: (t.metadata as Record<string, unknown> | null) ?? null,\n createdAt: t.createdAt,\n updatedAt: t.updatedAt,\n agents: (t.agents ?? []).map((agent: NonNullable<(typeof t.agents)[number]>) => ({\n id: agent.id,\n name: agent.name,\n version: agent.version,\n isActive: agent.isActive,\n tunnelUrl: agent.tunnelUrl,\n agentApiKey: agent.agentApiKey,\n })),\n }))\n : [];\n\n const rawNotes = data?.notes?.items;\n const notes = Array.isArray(rawNotes)\n ? rawNotes.map((n: NonNullable<(typeof rawNotes)[number]>) => ({\n id: n.id,\n title: n.title,\n isPinned: n.isPinned,\n }))\n : [];\n\n return {\n data,\n loading,\n error: error as Error | undefined,\n agents,\n vibes,\n sessions,\n targets,\n notes,\n totals: {\n agents: data?.vibecontrolsAgents?.length ?? 0,\n vibes: data?.vibes?.total ?? 0,\n sessions: data?.sessions?.total ?? 0,\n targets: data?.targets?.total ?? 0,\n notes: data?.notes?.total ?? 0,\n },\n refetch,\n };\n }, [data, loading, error, refetch]);\n\n return result;\n}\n\nexport default useCachedInitialData;\n"],"mappings":";;;;AA0IA,SAAgB,IAA0C;CACxD,IAAM,EAAE,mBAAgB,GAAiB,EAEnC,EACJ,SACA,SAAS,GACT,UACA,SAAS,MACP,EAAgC;EAClC,WAAW,EAAE,aAAa,KAAe,IAAI;EAM7C,aAAa;EACb,iBAAiB;EACjB,MAAM,CAAC;EACR,CAAC,EAEI,IAAU,QAAkB;AAC3B,KAAe;IACnB,CAAC,EAAc,CAAC,EAKb,IAAU,KAAiB,CAAC,KAAQ,CAAC,KAAS,CAAC,CAAC;AAmHtD,QAhHe,QAAiC;EAC9C,IAAM,IAAY,GAAM,oBAClB,IAAS,MAAM,QAAQ,EAAU,GACnC,EAAU,KAAK,OAAgD;GAC7D,IAAI,EAAE;GACN,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,WAAW,EAAE;GACb,cAAc,EAAE;GAChB,eAAe,EAAE;GACjB,SAAS,EAAE;GACX,cAAc,EAAE;GAChB,WAAW,EAAE;GACb,WAAW,EAAE;GACb,aAAa,EAAE;GACf,UACI,EAA6B,YAA+C;GACjF,EAAE,GACH,EAAE,EAEA,IAAW,GAAM,OAAO,OACxB,IAAQ,MAAM,QAAQ,EAAS,GACjC,EAAS,KAAK,OAA+C;GAC3D,IAAI,EAAE;GACN,MAAM,EAAE;GACR,aAAa,EAAE;GACf,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,SAAS,EAAE;GACX,MAAM,EAAE;GACR,MAAM,EAAE;GACR,WAAW,EAAE;GACb,WAAW,EAAE;GACb,WAAW,EAAE;GACd,EAAE,GACH,EAAE,EAEA,IAAc,GAAM,UAAU,OAC9B,IAAW,MAAM,QAAQ,EAAY,GACvC,EAAY,KAAK,OAAkD;GACjE,IAAI,EAAE;GACN,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,SAAS,EAAE;GACX,QAAQ,EAAE;GACV,MAAM,EAAE;GACR,WAAW,EAAE;GACb,UAAW,EAAE,YAA+C;GAC5D,WAAW,EAAE;GACb,WAAW,EAAE;GACd,EAAE,GACH,EAAE,EAEA,IAAa,GAAM,SAAS,OAC5B,IAAU,MAAM,QAAQ,EAAW,GACrC,EAAW,KAAK,OAAiD;GAC/D,IAAI,EAAE;GACN,aAAa,EAAE;GACf,MAAM,EAAE;GACR,MAAM,EAAE;GACR,QAAQ,EAAE;GACV,MAAM,EAAE;GACR,MAAM,EAAE;GACR,UAAU,EAAE;GACZ,cAAc,EAAE;GAChB,OAAO,EAAE;GACT,MAAM,EAAE;GACR,UAAW,EAAE,YAA+C;GAC5D,WAAW,EAAE;GACb,WAAW,EAAE;GACb,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK,OAAmD;IAC/E,IAAI,EAAM;IACV,MAAM,EAAM;IACZ,SAAS,EAAM;IACf,UAAU,EAAM;IAChB,WAAW,EAAM;IACjB,aAAa,EAAM;IACpB,EAAE;GACJ,EAAE,GACH,EAAE,EAEA,IAAW,GAAM,OAAO;AAS9B,SAAO;GACL;GACA;GACO;GACP;GACA;GACA;GACA;GACA,OAhBY,MAAM,QAAQ,EAAS,GACjC,EAAS,KAAK,OAA+C;IAC3D,IAAI,EAAE;IACN,OAAO,EAAE;IACT,UAAU,EAAE;IACb,EAAE,GACH,EAAE;GAWJ,QAAQ;IACN,QAAQ,GAAM,oBAAoB,UAAU;IAC5C,OAAO,GAAM,OAAO,SAAS;IAC7B,UAAU,GAAM,UAAU,SAAS;IACnC,SAAS,GAAM,SAAS,SAAS;IACjC,OAAO,GAAM,OAAO,SAAS;IAC9B;GACD;GACD;IACA;EAAC;EAAM;EAAS;EAAO;EAAQ,CAAC"}
|
|
@@ -1,112 +1,144 @@
|
|
|
1
|
-
import { AgentPluginsDocument as e, useInstallAgentPluginMutation as t } from "../generated/wspace-operations.js";
|
|
2
|
-
import { isQuotaExhaustedError as
|
|
3
|
-
import { useCallback as
|
|
4
|
-
import { useApolloClient as
|
|
1
|
+
import { AgentPluginsDocument as e, useInstallAgentPluginMutation as t, useVibecontrolsAgentPluginStreamSubscription as n } from "../generated/wspace-operations.js";
|
|
2
|
+
import { isQuotaExhaustedError as r } from "../utils/quotaUtils.js";
|
|
3
|
+
import { useCallback as i, useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
|
|
4
|
+
import { useApolloClient as l } from "@apollo/client/react";
|
|
5
5
|
//#region src/hooks/usePluginAvailability.ts
|
|
6
|
-
function
|
|
6
|
+
function u(e) {
|
|
7
7
|
if (!e) return !1;
|
|
8
8
|
let t = e.toLowerCase();
|
|
9
9
|
return t.includes("agent not yet configured") || t.includes("awaiting-config") || t.includes("initializing") || t.includes("agent unreachable") || t.includes("agent returned 503") || t.includes("http 503") || t.includes("plugin routes are unavailable") || t.includes("econnrefused") || t.includes("rate_limited") || t.includes("rate limited") || t.includes("operation timeout") || t.includes("operation_timeout") || t.includes("typo in the url") || t.includes("unable to connect") || t.includes("failed to open socket") || t.includes("failedtoopensocket") || t.includes("fetch failed") || t.includes("enotfound") || t.includes("getaddrinfo");
|
|
10
10
|
}
|
|
11
|
-
function
|
|
11
|
+
function d(e) {
|
|
12
12
|
let t = e.toLowerCase();
|
|
13
13
|
return t.includes("typo in the url") || t.includes("unable to connect") || t.includes("failed to open socket") || t.includes("failedtoopensocket") || t.includes("econnrefused") || t.includes("enotfound") || t.includes("getaddrinfo") || t.includes("fetch failed") || t.includes("agent unreachable") ? "Agent unreachable. Make sure the vibecontrols-agent is running locally." : t.includes("agent not yet configured") || t.includes("awaiting-config") ? "Agent is waiting for configuration. Finish setup in the Agents page." : t.includes("initializing") ? "Agent is starting up. Try again in a moment." : t.includes("http 503") || t.includes("agent returned 503") ? "Agent service unavailable. It may be restarting." : e.length > 200 ? `${e.slice(0, 200)}…` : e;
|
|
14
14
|
}
|
|
15
|
-
function
|
|
16
|
-
let
|
|
17
|
-
if (!
|
|
15
|
+
function f(f, p) {
|
|
16
|
+
let m = l(), [h] = t(), g = o(() => {
|
|
17
|
+
if (!p) return null;
|
|
18
18
|
try {
|
|
19
|
-
let t =
|
|
19
|
+
let t = m.readQuery({
|
|
20
20
|
query: e,
|
|
21
|
-
variables: { agentId:
|
|
21
|
+
variables: { agentId: p }
|
|
22
22
|
})?.agentPlugins?.installed ?? null;
|
|
23
23
|
return t ? new Set(t.map((e) => e.packageName)) : null;
|
|
24
24
|
} catch {
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
|
-
}, [
|
|
27
|
+
}, [m, p]), [_, v] = c(!1), [y, b] = c(() => g !== null), [x, S] = c(() => {
|
|
28
28
|
let e = {};
|
|
29
|
-
if (
|
|
29
|
+
if (g) for (let t of f) e[t] = g.has(t);
|
|
30
30
|
return e;
|
|
31
|
-
}), [
|
|
32
|
-
if (!
|
|
33
|
-
|
|
31
|
+
}), [C, w] = c(null), [T, E] = c(null), [D, O] = c(!1), k = s(null), A = i(async () => {
|
|
32
|
+
if (!p) {
|
|
33
|
+
S({});
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
v(!0);
|
|
37
37
|
try {
|
|
38
|
-
let { data: t } = await
|
|
38
|
+
let { data: t } = await m.query({
|
|
39
39
|
query: e,
|
|
40
|
-
variables: { agentId:
|
|
40
|
+
variables: { agentId: p },
|
|
41
41
|
fetchPolicy: "network-only"
|
|
42
42
|
}), n = {}, r = t?.agentPlugins?.installed ?? [], i = t?.agentPlugins?.error ?? null, a = new Set(r.map((e) => e.packageName));
|
|
43
|
-
for (let e of
|
|
43
|
+
for (let e of f) n[e] = a.has(e);
|
|
44
44
|
if (i) {
|
|
45
|
-
|
|
45
|
+
u(i) || S(n), console.error("[ai] agentPlugins returned error", i), E(d(i)), k.current && clearTimeout(k.current), u(i) || (k.current = setTimeout(() => E(null), 5e3));
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
S(n), E(null), k.current &&= (clearTimeout(k.current), null);
|
|
49
49
|
} catch (e) {
|
|
50
|
-
let t = e instanceof Error ? e.message : "Agent unreachable — unable to read plugin list", n =
|
|
51
|
-
n ||
|
|
50
|
+
let t = e instanceof Error ? e.message : "Agent unreachable — unable to read plugin list", n = u(t);
|
|
51
|
+
n || S({}), console.error("[ai] agentPlugins fetch failed", e), E(d(t)), k.current && clearTimeout(k.current), n || (k.current = setTimeout(() => E(null), 5e3));
|
|
52
52
|
} finally {
|
|
53
|
-
|
|
53
|
+
v(!1), b(!0);
|
|
54
54
|
}
|
|
55
55
|
}, [
|
|
56
|
-
f,
|
|
57
56
|
p,
|
|
58
|
-
|
|
57
|
+
m,
|
|
58
|
+
o(() => f.slice().sort().join("|"), [f])
|
|
59
59
|
]);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}, [
|
|
63
|
-
|
|
60
|
+
a(() => {
|
|
61
|
+
A();
|
|
62
|
+
}, [A]), n({
|
|
63
|
+
variables: { agentId: p ?? "" },
|
|
64
|
+
skip: !p,
|
|
65
|
+
onData: ({ data: t }) => {
|
|
66
|
+
let n = t.data?.vibecontrolsAgentPluginStream;
|
|
67
|
+
if (!n || !p) return;
|
|
68
|
+
let r = new Set(n.map((e) => e.packageName));
|
|
69
|
+
S((e) => {
|
|
70
|
+
let t = { ...e }, n = !1;
|
|
71
|
+
for (let e of f) {
|
|
72
|
+
let i = r.has(e);
|
|
73
|
+
t[e] !== i && (t[e] = i, n = !0);
|
|
74
|
+
}
|
|
75
|
+
return n ? t : e;
|
|
76
|
+
}), b(!0);
|
|
77
|
+
try {
|
|
78
|
+
let t = m.readQuery({
|
|
79
|
+
query: e,
|
|
80
|
+
variables: { agentId: p }
|
|
81
|
+
});
|
|
82
|
+
m.writeQuery({
|
|
83
|
+
query: e,
|
|
84
|
+
variables: { agentId: p },
|
|
85
|
+
data: { agentPlugins: {
|
|
86
|
+
__typename: "AgentPluginListResult",
|
|
87
|
+
installed: n,
|
|
88
|
+
available: t?.agentPlugins?.available ?? [],
|
|
89
|
+
error: null
|
|
90
|
+
} }
|
|
91
|
+
});
|
|
92
|
+
} catch {}
|
|
93
|
+
}
|
|
94
|
+
}), a(() => {
|
|
95
|
+
let e = () => void A();
|
|
64
96
|
return window.addEventListener("focus", e), () => window.removeEventListener("focus", e);
|
|
65
|
-
}, [
|
|
66
|
-
|
|
97
|
+
}, [A]), a(() => () => {
|
|
98
|
+
k.current && clearTimeout(k.current);
|
|
67
99
|
}, []);
|
|
68
|
-
let
|
|
69
|
-
if (!
|
|
70
|
-
|
|
100
|
+
let j = i(async (e) => {
|
|
101
|
+
if (!p) return !1;
|
|
102
|
+
w(e), E(null);
|
|
71
103
|
try {
|
|
72
|
-
let { data: t } = await
|
|
73
|
-
agentId:
|
|
104
|
+
let { data: t } = await h({ variables: {
|
|
105
|
+
agentId: p,
|
|
74
106
|
packageName: e
|
|
75
107
|
} });
|
|
76
|
-
if (t?.installAgentPlugin?.success) return
|
|
108
|
+
if (t?.installAgentPlugin?.success) return S((t) => ({
|
|
77
109
|
...t,
|
|
78
110
|
[e]: !0
|
|
79
|
-
})), await
|
|
111
|
+
})), await A(), !0;
|
|
80
112
|
throw Error(t?.installAgentPlugin?.error || "Install failed");
|
|
81
113
|
} catch (e) {
|
|
82
|
-
if (
|
|
114
|
+
if (r(e)) return O(!0), !1;
|
|
83
115
|
let t = e instanceof Error ? e.message : "Failed to install plugin";
|
|
84
|
-
return console.error("[ai] plugin install failed", e),
|
|
116
|
+
return console.error("[ai] plugin install failed", e), E(d(t)), k.current && clearTimeout(k.current), u(t) || (k.current = setTimeout(() => E(null), 5e3)), !1;
|
|
85
117
|
} finally {
|
|
86
|
-
|
|
118
|
+
w(null);
|
|
87
119
|
}
|
|
88
120
|
}, [
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
]),
|
|
121
|
+
p,
|
|
122
|
+
h,
|
|
123
|
+
A
|
|
124
|
+
]), M = i(() => O(!1), []), N = o(() => f.filter((e) => !x[e]), [f, x]), P = o(() => f.some((e) => x[e]), [f, x]), F = N.length === 0 && f.length > 0;
|
|
93
125
|
return {
|
|
94
|
-
loading:
|
|
95
|
-
initialLoading: !
|
|
96
|
-
installed:
|
|
97
|
-
missing:
|
|
98
|
-
anyInstalled:
|
|
99
|
-
allInstalled:
|
|
100
|
-
installing:
|
|
101
|
-
install:
|
|
102
|
-
error:
|
|
103
|
-
errorIsAgentState:
|
|
104
|
-
quotaExhausted:
|
|
105
|
-
clearQuotaExhausted:
|
|
106
|
-
refetch:
|
|
126
|
+
loading: _,
|
|
127
|
+
initialLoading: !y,
|
|
128
|
+
installed: x,
|
|
129
|
+
missing: N,
|
|
130
|
+
anyInstalled: P,
|
|
131
|
+
allInstalled: F,
|
|
132
|
+
installing: C,
|
|
133
|
+
install: j,
|
|
134
|
+
error: T,
|
|
135
|
+
errorIsAgentState: u(T),
|
|
136
|
+
quotaExhausted: D,
|
|
137
|
+
clearQuotaExhausted: M,
|
|
138
|
+
refetch: A
|
|
107
139
|
};
|
|
108
140
|
}
|
|
109
141
|
//#endregion
|
|
110
|
-
export {
|
|
142
|
+
export { f as usePluginAvailability };
|
|
111
143
|
|
|
112
144
|
//# sourceMappingURL=usePluginAvailability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePluginAvailability.js","names":[],"sources":["../../src/hooks/usePluginAvailability.ts"],"sourcesContent":["/**\n * usePluginAvailability — query + install helpers for vibecontrols-agent plugins.\n *\n * Wraps the existing backend-proxied GraphQL ops (AgentPlugins query +\n * InstallAgentPlugin mutation) and exposes a small state surface that\n * gating components can render against.\n *\n * Re-fetches after a successful install so `installed`/`missing` reflect\n * the post-install state. No WebSocket subscription — call `refetch()` on\n * window focus in consumers that want freshness.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport {\n AgentPluginsDocument,\n useInstallAgentPluginMutation,\n type AgentPluginsQuery,\n} from '@/generated/wspace-operations';\nimport { isQuotaExhaustedError } from '@/utils/quotaUtils';\n\n/**\n * Classifies transient \"the agent itself isn't ready\" errors so the UI can\n * render a dedicated waiting state instead of an install CTA. These errors\n * are not the user's to fix via an install click — they resolve on their\n * own (or require Agents-page intervention).\n */\nfunction classifyAgentStateError(message: string | null | undefined): boolean {\n if (!message) return false;\n const m = message.toLowerCase();\n return (\n m.includes('agent not yet configured') ||\n m.includes('awaiting-config') ||\n m.includes('initializing') ||\n m.includes('agent unreachable') ||\n m.includes('agent returned 503') ||\n m.includes('http 503') ||\n m.includes('plugin routes are unavailable') ||\n m.includes('econnrefused') ||\n m.includes('rate_limited') ||\n m.includes('rate limited') ||\n m.includes('operation timeout') ||\n m.includes('operation_timeout') ||\n // Bun's fetch surfaces these human-friendly strings when the agent\n // socket isn't accepting connections. Without this branch, the raw\n // text would leak into the install card as the error chip.\n m.includes('typo in the url') ||\n m.includes('unable to connect') ||\n m.includes('failed to open socket') ||\n m.includes('failedtoopensocket') ||\n m.includes('fetch failed') ||\n m.includes('enotfound') ||\n m.includes('getaddrinfo')\n // Note: \"operation was aborted\" is deliberately NOT classified as an\n // agent-state error. Apollo aborts previous in-flight queries when\n // the same lazy query is re-fired (common in React Strict Mode\n // double-mount). Those aborts are transient and not about agent\n // state; the follow-up fetch succeeds normally.\n );\n}\n\n/**\n * Translate raw error strings (especially Bun fetch's human-friendly but\n * jargon-y errors) into a short, user-safe message. Used right before we\n * stash anything into the surfaced `error` field — guarantees we never\n * render \"Was there a typo in the url or port?\" or similar into the DOM.\n */\nfunction sanitizeAgentStateError(raw: string): string {\n const m = raw.toLowerCase();\n if (\n m.includes('typo in the url') ||\n m.includes('unable to connect') ||\n m.includes('failed to open socket') ||\n m.includes('failedtoopensocket') ||\n m.includes('econnrefused') ||\n m.includes('enotfound') ||\n m.includes('getaddrinfo') ||\n m.includes('fetch failed') ||\n m.includes('agent unreachable')\n ) {\n return 'Agent unreachable. Make sure the vibecontrols-agent is running locally.';\n }\n if (m.includes('agent not yet configured') || m.includes('awaiting-config')) {\n return 'Agent is waiting for configuration. Finish setup in the Agents page.';\n }\n if (m.includes('initializing')) {\n return 'Agent is starting up. Try again in a moment.';\n }\n if (m.includes('http 503') || m.includes('agent returned 503')) {\n return 'Agent service unavailable. It may be restarting.';\n }\n return raw.length > 200 ? `${raw.slice(0, 200)}…` : raw;\n}\n\nexport interface UsePluginAvailabilityResult {\n loading: boolean;\n /**\n * True while the very first fetch is in flight (or before it has begun).\n * Consumers should render a loading spinner instead of the install CTA in\n * this state so users don't see a flash of \"plugin required / Install\"\n * followed by a flash of the real content.\n */\n initialLoading: boolean;\n installed: Record<string, boolean>;\n missing: string[];\n anyInstalled: boolean;\n allInstalled: boolean;\n installing: string | null;\n install: (packageName: string) => Promise<boolean>;\n error: string | null;\n /** True when `error` points to the agent itself not being ready. */\n errorIsAgentState: boolean;\n quotaExhausted: boolean;\n clearQuotaExhausted: () => void;\n refetch: () => Promise<void>;\n}\n\nexport function usePluginAvailability(\n packages: readonly string[],\n agentId: string | null\n): UsePluginAvailabilityResult {\n const apollo = useApolloClient();\n const [installPluginMutation] = useInstallAgentPluginMutation();\n\n // Read cached data synchronously so the first render already has the\n // installed map populated when another consumer has primed the cache.\n const cachedInstalledSet = useMemo(() => {\n if (!agentId) return null;\n try {\n const cached = apollo.readQuery<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n });\n const installedList = cached?.agentPlugins?.installed ?? null;\n if (!installedList) return null;\n return new Set(installedList.map((p: { packageName: string }) => p.packageName));\n } catch {\n return null;\n }\n }, [apollo, agentId]);\n\n const [loading, setLoading] = useState(false);\n const [hasFetchedOnce, setHasFetchedOnce] = useState(() => cachedInstalledSet !== null);\n const [installedMap, setInstalledMap] = useState<Record<string, boolean>>(() => {\n const next: Record<string, boolean> = {};\n if (cachedInstalledSet) {\n for (const pkg of packages) next[pkg] = cachedInstalledSet.has(pkg);\n }\n return next;\n });\n const [installing, setInstalling] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [quotaExhausted, setQuotaExhausted] = useState(false);\n const errorTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Stable key so we re-run only when the *set* of requested packages changes.\n const packagesKey = useMemo(() => packages.slice().sort().join('|'), [packages]);\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setInstalledMap({});\n return;\n }\n setLoading(true);\n try {\n // Use the Apollo client directly with `network-only` so out-of-band\n // installs (CLI, other tabs, agent-side changes) are always picked\n // up. `useAgentPluginsLazyQuery`'s lazy execute() doesn't accept\n // per-call fetchPolicy in Apollo v4; `apollo.query()` does.\n const { data } = await apollo.query<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n fetchPolicy: 'network-only',\n });\n const next: Record<string, boolean> = {};\n const installedList = data?.agentPlugins?.installed ?? [];\n const pluginError = data?.agentPlugins?.error ?? null;\n const installedSet = new Set(\n installedList.map((p: { packageName: string }) => p.packageName)\n );\n for (const pkg of packages) next[pkg] = installedSet.has(pkg);\n if (pluginError) {\n if (!classifyAgentStateError(pluginError)) {\n setInstalledMap(next);\n }\n // Log the raw error for debugging, but only surface a sanitized\n // version to the UI. Raw Bun fetch errors (\"Was there a typo in\n // the url or port?\") would otherwise leak into the install card.\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] agentPlugins returned error', pluginError);\n setError(sanitizeAgentStateError(pluginError));\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!classifyAgentStateError(pluginError)) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n return;\n }\n setInstalledMap(next);\n // Clear any lingering error from a previously-aborted fetch so the\n // gate doesn't keep showing \"Agent not ready\" after a successful\n // subsequent request (e.g. React Strict Mode double-mount).\n setError(null);\n if (errorTimerRef.current) {\n clearTimeout(errorTimerRef.current);\n errorTimerRef.current = null;\n }\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Agent unreachable — unable to read plugin list';\n const isAgentStateError = classifyAgentStateError(msg);\n // Keep the last known installed state while the agent is restarting or\n // finalizing. Otherwise a transient 503 flashes an install CTA for an\n // already-installed plugin.\n if (!isAgentStateError) {\n setInstalledMap({});\n }\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] agentPlugins fetch failed', err);\n setError(sanitizeAgentStateError(msg));\n // State-related errors stay visible until resolved; transient\n // network/GraphQL errors auto-dismiss so the UI stays tidy.\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!isAgentStateError) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n } finally {\n setLoading(false);\n setHasFetchedOnce(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [agentId, apollo, packagesKey]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n // Also refetch when the tab regains focus so installs made elsewhere flow in.\n useEffect(() => {\n const onFocus = () => void refetch();\n window.addEventListener('focus', onFocus);\n return () => window.removeEventListener('focus', onFocus);\n }, [refetch]);\n\n useEffect(() => {\n return () => {\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n };\n }, []);\n\n const install = useCallback(\n async (packageName: string): Promise<boolean> => {\n if (!agentId) return false;\n setInstalling(packageName);\n setError(null);\n try {\n const { data } = await installPluginMutation({\n variables: { agentId, packageName },\n });\n if (data?.installAgentPlugin?.success) {\n setInstalledMap((prev) => ({ ...prev, [packageName]: true }));\n await refetch();\n return true;\n }\n throw new Error(data?.installAgentPlugin?.error || 'Install failed');\n } catch (err) {\n if (isQuotaExhaustedError(err)) {\n setQuotaExhausted(true);\n return false;\n }\n const msg = err instanceof Error ? err.message : 'Failed to install plugin';\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] plugin install failed', err);\n setError(sanitizeAgentStateError(msg));\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!classifyAgentStateError(msg)) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n return false;\n } finally {\n setInstalling(null);\n }\n },\n [agentId, installPluginMutation, refetch]\n );\n\n const clearQuotaExhausted = useCallback(() => setQuotaExhausted(false), []);\n\n const missing = useMemo(\n () => packages.filter((pkg) => !installedMap[pkg]),\n [packages, installedMap]\n );\n const anyInstalled = useMemo(\n () => packages.some((pkg) => installedMap[pkg]),\n [packages, installedMap]\n );\n const allInstalled = missing.length === 0 && packages.length > 0;\n\n return {\n loading,\n initialLoading: !hasFetchedOnce,\n installed: installedMap,\n missing,\n anyInstalled,\n allInstalled,\n installing,\n install,\n error,\n errorIsAgentState: classifyAgentStateError(error),\n quotaExhausted,\n clearQuotaExhausted,\n refetch,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usePluginAvailability.js","names":[],"sources":["../../src/hooks/usePluginAvailability.ts"],"sourcesContent":["/**\n * usePluginAvailability — query + install helpers for vibecontrols-agent plugins.\n *\n * Wraps the existing backend-proxied GraphQL ops (AgentPlugins query +\n * InstallAgentPlugin mutation) and exposes a small state surface that\n * gating components can render against.\n *\n * Live updates: subscribes to `vibecontrolsAgentPluginStream` so the\n * installed map reflects out-of-band installs (CLI, other tabs,\n * agent-side changes) without per-tab polling. The initial AgentPlugins\n * query is still used for first paint so the gate can render before\n * the WebSocket completes its handshake.\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport {\n AgentPluginsDocument,\n useInstallAgentPluginMutation,\n useVibecontrolsAgentPluginStreamSubscription,\n type AgentPluginsQuery,\n} from '@/generated/wspace-operations';\nimport { isQuotaExhaustedError } from '@/utils/quotaUtils';\n\n/**\n * Classifies transient \"the agent itself isn't ready\" errors so the UI can\n * render a dedicated waiting state instead of an install CTA. These errors\n * are not the user's to fix via an install click — they resolve on their\n * own (or require Agents-page intervention).\n */\nfunction classifyAgentStateError(message: string | null | undefined): boolean {\n if (!message) return false;\n const m = message.toLowerCase();\n return (\n m.includes('agent not yet configured') ||\n m.includes('awaiting-config') ||\n m.includes('initializing') ||\n m.includes('agent unreachable') ||\n m.includes('agent returned 503') ||\n m.includes('http 503') ||\n m.includes('plugin routes are unavailable') ||\n m.includes('econnrefused') ||\n m.includes('rate_limited') ||\n m.includes('rate limited') ||\n m.includes('operation timeout') ||\n m.includes('operation_timeout') ||\n // Bun's fetch surfaces these human-friendly strings when the agent\n // socket isn't accepting connections. Without this branch, the raw\n // text would leak into the install card as the error chip.\n m.includes('typo in the url') ||\n m.includes('unable to connect') ||\n m.includes('failed to open socket') ||\n m.includes('failedtoopensocket') ||\n m.includes('fetch failed') ||\n m.includes('enotfound') ||\n m.includes('getaddrinfo')\n // Note: \"operation was aborted\" is deliberately NOT classified as an\n // agent-state error. Apollo aborts previous in-flight queries when\n // the same lazy query is re-fired (common in React Strict Mode\n // double-mount). Those aborts are transient and not about agent\n // state; the follow-up fetch succeeds normally.\n );\n}\n\n/**\n * Translate raw error strings (especially Bun fetch's human-friendly but\n * jargon-y errors) into a short, user-safe message. Used right before we\n * stash anything into the surfaced `error` field — guarantees we never\n * render \"Was there a typo in the url or port?\" or similar into the DOM.\n */\nfunction sanitizeAgentStateError(raw: string): string {\n const m = raw.toLowerCase();\n if (\n m.includes('typo in the url') ||\n m.includes('unable to connect') ||\n m.includes('failed to open socket') ||\n m.includes('failedtoopensocket') ||\n m.includes('econnrefused') ||\n m.includes('enotfound') ||\n m.includes('getaddrinfo') ||\n m.includes('fetch failed') ||\n m.includes('agent unreachable')\n ) {\n return 'Agent unreachable. Make sure the vibecontrols-agent is running locally.';\n }\n if (m.includes('agent not yet configured') || m.includes('awaiting-config')) {\n return 'Agent is waiting for configuration. Finish setup in the Agents page.';\n }\n if (m.includes('initializing')) {\n return 'Agent is starting up. Try again in a moment.';\n }\n if (m.includes('http 503') || m.includes('agent returned 503')) {\n return 'Agent service unavailable. It may be restarting.';\n }\n return raw.length > 200 ? `${raw.slice(0, 200)}…` : raw;\n}\n\nexport interface UsePluginAvailabilityResult {\n loading: boolean;\n /**\n * True while the very first fetch is in flight (or before it has begun).\n * Consumers should render a loading spinner instead of the install CTA in\n * this state so users don't see a flash of \"plugin required / Install\"\n * followed by a flash of the real content.\n */\n initialLoading: boolean;\n installed: Record<string, boolean>;\n missing: string[];\n anyInstalled: boolean;\n allInstalled: boolean;\n installing: string | null;\n install: (packageName: string) => Promise<boolean>;\n error: string | null;\n /** True when `error` points to the agent itself not being ready. */\n errorIsAgentState: boolean;\n quotaExhausted: boolean;\n clearQuotaExhausted: () => void;\n refetch: () => Promise<void>;\n}\n\nexport function usePluginAvailability(\n packages: readonly string[],\n agentId: string | null\n): UsePluginAvailabilityResult {\n const apollo = useApolloClient();\n const [installPluginMutation] = useInstallAgentPluginMutation();\n\n // Read cached data synchronously so the first render already has the\n // installed map populated when another consumer has primed the cache.\n const cachedInstalledSet = useMemo(() => {\n if (!agentId) return null;\n try {\n const cached = apollo.readQuery<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n });\n const installedList = cached?.agentPlugins?.installed ?? null;\n if (!installedList) return null;\n return new Set(installedList.map((p: { packageName: string }) => p.packageName));\n } catch {\n return null;\n }\n }, [apollo, agentId]);\n\n const [loading, setLoading] = useState(false);\n const [hasFetchedOnce, setHasFetchedOnce] = useState(() => cachedInstalledSet !== null);\n const [installedMap, setInstalledMap] = useState<Record<string, boolean>>(() => {\n const next: Record<string, boolean> = {};\n if (cachedInstalledSet) {\n for (const pkg of packages) next[pkg] = cachedInstalledSet.has(pkg);\n }\n return next;\n });\n const [installing, setInstalling] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [quotaExhausted, setQuotaExhausted] = useState(false);\n const errorTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Stable key so we re-run only when the *set* of requested packages changes.\n const packagesKey = useMemo(() => packages.slice().sort().join('|'), [packages]);\n\n const refetch = useCallback(async () => {\n if (!agentId) {\n setInstalledMap({});\n return;\n }\n setLoading(true);\n try {\n // Use the Apollo client directly with `network-only` so out-of-band\n // installs (CLI, other tabs, agent-side changes) are always picked\n // up. `useAgentPluginsLazyQuery`'s lazy execute() doesn't accept\n // per-call fetchPolicy in Apollo v4; `apollo.query()` does.\n const { data } = await apollo.query<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n fetchPolicy: 'network-only',\n });\n const next: Record<string, boolean> = {};\n const installedList = data?.agentPlugins?.installed ?? [];\n const pluginError = data?.agentPlugins?.error ?? null;\n const installedSet = new Set(\n installedList.map((p: { packageName: string }) => p.packageName)\n );\n for (const pkg of packages) next[pkg] = installedSet.has(pkg);\n if (pluginError) {\n if (!classifyAgentStateError(pluginError)) {\n setInstalledMap(next);\n }\n // Log the raw error for debugging, but only surface a sanitized\n // version to the UI. Raw Bun fetch errors (\"Was there a typo in\n // the url or port?\") would otherwise leak into the install card.\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] agentPlugins returned error', pluginError);\n setError(sanitizeAgentStateError(pluginError));\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!classifyAgentStateError(pluginError)) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n return;\n }\n setInstalledMap(next);\n // Clear any lingering error from a previously-aborted fetch so the\n // gate doesn't keep showing \"Agent not ready\" after a successful\n // subsequent request (e.g. React Strict Mode double-mount).\n setError(null);\n if (errorTimerRef.current) {\n clearTimeout(errorTimerRef.current);\n errorTimerRef.current = null;\n }\n } catch (err) {\n const msg =\n err instanceof Error ? err.message : 'Agent unreachable — unable to read plugin list';\n const isAgentStateError = classifyAgentStateError(msg);\n // Keep the last known installed state while the agent is restarting or\n // finalizing. Otherwise a transient 503 flashes an install CTA for an\n // already-installed plugin.\n if (!isAgentStateError) {\n setInstalledMap({});\n }\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] agentPlugins fetch failed', err);\n setError(sanitizeAgentStateError(msg));\n // State-related errors stay visible until resolved; transient\n // network/GraphQL errors auto-dismiss so the UI stays tidy.\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!isAgentStateError) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n } finally {\n setLoading(false);\n setHasFetchedOnce(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [agentId, apollo, packagesKey]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n // Subscribe to the push stream. The svc emits the installed list\n // whenever it diverges from its previous snapshot, so we only update\n // local state on payloads — and we also write through to the Apollo\n // cache so other consumers reading `agentPlugins` directly see fresh\n // data without their own refetch.\n useVibecontrolsAgentPluginStreamSubscription({\n variables: { agentId: agentId ?? '' },\n skip: !agentId,\n onData: ({ data }) => {\n const installedList = data.data?.vibecontrolsAgentPluginStream;\n if (!installedList || !agentId) return;\n const installedSet = new Set(\n installedList.map((p: { packageName: string }) => p.packageName)\n );\n setInstalledMap((prev) => {\n const next: Record<string, boolean> = { ...prev };\n let changed = false;\n for (const pkg of packages) {\n const has = installedSet.has(pkg);\n if (next[pkg] !== has) {\n next[pkg] = has;\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n setHasFetchedOnce(true);\n // Mirror into Apollo cache so consumers that read AgentPluginsQuery\n // directly (e.g. PluginHarnessPicker) see the same fresh list.\n try {\n const existing = apollo.readQuery<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n });\n apollo.writeQuery<AgentPluginsQuery>({\n query: AgentPluginsDocument,\n variables: { agentId },\n data: {\n agentPlugins: {\n __typename: 'AgentPluginListResult',\n installed: installedList,\n available: existing?.agentPlugins?.available ?? [],\n error: null,\n },\n },\n });\n } catch {\n // Cache may not have been primed yet — the next refetch will\n // populate `available` and we'll write again on the next event.\n }\n },\n });\n\n // Also refetch when the tab regains focus so installs made elsewhere flow in.\n useEffect(() => {\n const onFocus = () => void refetch();\n window.addEventListener('focus', onFocus);\n return () => window.removeEventListener('focus', onFocus);\n }, [refetch]);\n\n useEffect(() => {\n return () => {\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n };\n }, []);\n\n const install = useCallback(\n async (packageName: string): Promise<boolean> => {\n if (!agentId) return false;\n setInstalling(packageName);\n setError(null);\n try {\n const { data } = await installPluginMutation({\n variables: { agentId, packageName },\n });\n if (data?.installAgentPlugin?.success) {\n setInstalledMap((prev) => ({ ...prev, [packageName]: true }));\n await refetch();\n return true;\n }\n throw new Error(data?.installAgentPlugin?.error || 'Install failed');\n } catch (err) {\n if (isQuotaExhaustedError(err)) {\n setQuotaExhausted(true);\n return false;\n }\n const msg = err instanceof Error ? err.message : 'Failed to install plugin';\n // eslint-disable-next-line no-console -- intentional: keep technical detail for debugging\n console.error('[ai] plugin install failed', err);\n setError(sanitizeAgentStateError(msg));\n if (errorTimerRef.current) clearTimeout(errorTimerRef.current);\n if (!classifyAgentStateError(msg)) {\n errorTimerRef.current = setTimeout(() => setError(null), 5000);\n }\n return false;\n } finally {\n setInstalling(null);\n }\n },\n [agentId, installPluginMutation, refetch]\n );\n\n const clearQuotaExhausted = useCallback(() => setQuotaExhausted(false), []);\n\n const missing = useMemo(\n () => packages.filter((pkg) => !installedMap[pkg]),\n [packages, installedMap]\n );\n const anyInstalled = useMemo(\n () => packages.some((pkg) => installedMap[pkg]),\n [packages, installedMap]\n );\n const allInstalled = missing.length === 0 && packages.length > 0;\n\n return {\n loading,\n initialLoading: !hasFetchedOnce,\n installed: installedMap,\n missing,\n anyInstalled,\n allInstalled,\n installing,\n install,\n error,\n errorIsAgentState: classifyAgentStateError(error),\n quotaExhausted,\n clearQuotaExhausted,\n refetch,\n };\n}\n"],"mappings":"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"}
|