@burdenoff/microfe-vibecontrols 2026.1008.2 → 2026.1010.2
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/VibeControlsRoot.js +0 -2
- package/dist/VibeControlsRoutes.js +0 -2
- package/dist/components/actions/ActionCard.js +0 -2
- package/dist/components/actions/ActionForm.js +0 -2
- package/dist/components/actions/ActionSchedulesList.js +0 -2
- package/dist/components/actions/ActionTypeBadge.js +0 -2
- package/dist/components/actions/ActionWebhookEndpoint.js +0 -2
- package/dist/components/actions/ExecutionHistory.js +0 -2
- package/dist/components/actions/RemoteExecutionEnableNotice.js +0 -2
- package/dist/components/agent-manager/AgentManagerAdminBar.js +0 -2
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +0 -2
- package/dist/components/agent-manager/AgentManagerBulkActions.js +0 -2
- package/dist/components/agent-manager/AgentManagerCenter.js +0 -2
- package/dist/components/agent-manager/AgentManagerChatPane.js +0 -2
- package/dist/components/agent-manager/AgentManagerDetailPanel.js +0 -2
- package/dist/components/agent-manager/AgentManagerInputArea.js +0 -2
- package/dist/components/agent-manager/AgentManagerLayout.js +0 -2
- package/dist/components/agent-manager/AgentManagerMessageItem.js +0 -2
- package/dist/components/agent-manager/AgentManagerMessageList.js +0 -2
- package/dist/components/agent-manager/AgentManagerSessionItem.js +0 -2
- package/dist/components/agent-manager/AgentManagerSessionList.js +0 -2
- package/dist/components/agent-manager/AgentManagerSidebar.js +0 -2
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.js +0 -2
- package/dist/components/agent-manager/AgentManagerTab.js +0 -2
- package/dist/components/agent-manager/AgentManagerTabBar.js +0 -2
- package/dist/components/agent-manager/BridleConfigPanel.js +0 -2
- package/dist/components/agent-manager/ChatInsertPicker.js +0 -2
- package/dist/components/agent-manager/FilePickerModal.js +0 -2
- package/dist/components/agent-manager/PluginInstallModal.js +0 -2
- package/dist/components/agent-manager/ProfilesPanel.js +0 -2
- package/dist/components/agent-manager/controls/AutonomySelector.js +0 -2
- package/dist/components/agent-manager/controls/ContextLevelToggle.js +0 -2
- package/dist/components/agent-manager/controls/FileAttachButton.js +0 -2
- package/dist/components/agent-manager/controls/McpServerSelector.js +0 -2
- package/dist/components/agent-manager/controls/ModelSelector.js +0 -2
- package/dist/components/agent-manager/controls/SdkSelector.js +0 -2
- package/dist/components/agent-manager/controls/VoiceToggle.js +0 -2
- package/dist/components/agent-manager/controls/createDropHandlers.js +0 -2
- package/dist/components/agent-manager/detail/SessionConfigPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionLogsPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionStatsPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionToolsPanel.js +0 -2
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js +0 -2
- package/dist/components/agent-manager/modelDefaults.js +0 -2
- package/dist/components/agents/AgentCard.js +0 -2
- package/dist/components/agents/AgentConnectionRecovery.js +0 -2
- package/dist/components/agents/AgentForm.js +0 -2
- package/dist/components/agents/AgentList.js +0 -2
- package/dist/components/agents/AgentMaintenanceTab.js +0 -2
- package/dist/components/agents/AgentStatusBadge.js +0 -2
- package/dist/components/agents/AgentStorageConfig.js +0 -2
- package/dist/components/agents/AgentVisibilityCard.js +0 -2
- package/dist/components/agents/ConfigureAgentDialog.js +0 -2
- package/dist/components/agents/ConnectionLogPanel.js +0 -2
- package/dist/components/agents/CreateSessionDialog.js +0 -2
- package/dist/components/agents/GatewayAuthCard.js +0 -2
- package/dist/components/agents/OpenInBrowserEditorButton.js +0 -2
- package/dist/components/agents/OpenInEditorMenu.js +0 -2
- package/dist/components/agents/PluginUIPanel.js +0 -2
- package/dist/components/agents/RemoteTaskPermissionsCard.js +0 -2
- package/dist/components/agents/VibeOpenInEditorMenu.js +0 -2
- package/dist/components/agents/agentStatus.js +0 -2
- package/dist/components/agents/backup/AgentBackupTab.js +0 -2
- package/dist/components/agents/idePresets.js +0 -2
- package/dist/components/ai/AIContextsTab.js +0 -2
- package/dist/components/ai/AIKeysTab.js +0 -2
- package/dist/components/ai/AIModeToggle.js +0 -2
- package/dist/components/ai/AIOverviewTab.js +0 -2
- package/dist/components/ai/AIPlanPanel.js +0 -2
- package/dist/components/ai/AIPlaygroundTab.js +0 -2
- package/dist/components/ai/AIPromptsTab.js +0 -2
- package/dist/components/ai/AIProviderCredentialsCard.js +0 -2
- package/dist/components/ai/AIQueueTab.js +0 -2
- package/dist/components/ai/AISessionsTab.js +0 -2
- package/dist/components/ai/AIStatsTab.js +0 -2
- package/dist/components/ai/AITasksTab.js +0 -2
- package/dist/components/ai/AITemplatesTab.js +0 -2
- package/dist/components/ai/AiSectionTabs.js +0 -2
- package/dist/components/ai/BridleTab.js +0 -2
- package/dist/components/ai/ClaudeCredentialsCard.js +0 -2
- package/dist/components/ai/InstructionFilesManager.js +0 -2
- package/dist/components/ai/PluginHarnessPicker.js +0 -2
- package/dist/components/ai/aiProviderCredentials.js +0 -2
- package/dist/components/aliases/AliasManager.js +0 -2
- package/dist/components/aliases/aliasReservedNames.js +0 -2
- package/dist/components/analytics/AnalyticsBreakdownChart.js +0 -2
- package/dist/components/analytics/AnalyticsBreakdownTable.js +0 -2
- package/dist/components/analytics/AnalyticsEntityTabs.js +0 -2
- package/dist/components/analytics/AnalyticsFilterBar.js +0 -2
- package/dist/components/analytics/AnalyticsKpiGrid.js +0 -2
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js +0 -2
- package/dist/components/analytics/SandboxAnalyticsSection.js +0 -2
- package/dist/components/analytics/types.js +0 -2
- package/dist/components/assistant/AIAssistantPanel.js +0 -2
- package/dist/components/assistant/AiCreditsMeter.js +0 -2
- package/dist/components/assistant/ProductMarkdown.js +0 -2
- package/dist/components/assistant/assistantProduct.js +0 -2
- package/dist/components/assistant/recordAdapters.js +0 -2
- package/dist/components/audit/AuditExportButton.js +0 -2
- package/dist/components/audit/AuditLogDetail.js +0 -2
- package/dist/components/audit/AuditLogFilters.js +0 -2
- package/dist/components/audit/AuditLogStats.js +0 -2
- package/dist/components/audit/AuditLogTable.js +0 -2
- package/dist/components/catalog/CatalogCard.js +0 -2
- package/dist/components/catalog/CatalogForm.js +0 -2
- package/dist/components/common/ActionAgentTargetNotice.js +0 -2
- package/dist/components/common/CommandEditor.js +0 -2
- package/dist/components/common/actionAgentTarget.js +0 -2
- package/dist/components/common/commandHighlight.js +0 -2
- package/dist/components/components/ComponentHealthCell.js +0 -2
- package/dist/components/components/ComponentTierBadge.js +0 -2
- package/dist/components/components/ComponentsTable.js +0 -2
- package/dist/components/docs/DocsCompileStatus.js +0 -2
- package/dist/components/docs/DocsEditPanel.js +0 -2
- package/dist/components/docs/DocsEmptyState.js +0 -2
- package/dist/components/docs/DocsFullScreenViewer.js +0 -2
- package/dist/components/docs/DocsPageEditor.js +0 -2
- package/dist/components/docs/DocsPageTree.js +0 -2
- package/dist/components/docs/DocsPreviewPanel.js +0 -2
- package/dist/components/docs/DocsRevisionHistory.js +0 -2
- package/dist/components/docs/DocsSettingsPanel.js +0 -2
- package/dist/components/docs/DocsTabPanel.js +0 -2
- package/dist/components/docs/previewHtml.js +0 -2
- package/dist/components/docs/types.js +0 -2
- package/dist/components/gitops/CIDurationChart.js +0 -2
- package/dist/components/gitops/CIFailedRuns.js +0 -2
- package/dist/components/gitops/CIPipelineRunsTable.js +0 -2
- package/dist/components/gitops/CISuccessRateChart.js +0 -2
- package/dist/components/gitops/CITab.js +0 -2
- package/dist/components/gitops/CIWorkflowList.js +0 -2
- package/dist/components/gitops/GitOpsProviderPicker.js +0 -2
- package/dist/components/gitops/GitOpsSetup.js +0 -2
- package/dist/components/gitops/GitOpsSkeleton.js +0 -2
- package/dist/components/gitops/GitOpsStatusBadge.js +0 -2
- package/dist/components/gitops/ProviderIcon.js +0 -2
- package/dist/components/gitops/RepoActivityCard.js +0 -2
- package/dist/components/gitops/RepoIssuesCard.js +0 -2
- package/dist/components/gitops/RepoLanguagesCard.js +0 -2
- package/dist/components/gitops/RepoOverviewCard.js +0 -2
- package/dist/components/gitops/RepoPullRequestsCard.js +0 -2
- package/dist/components/gitops/RepoSecurityCard.js +0 -2
- package/dist/components/gitops/RepoStatsTab.js +0 -2
- package/dist/components/gitops/VibeGitOpsTab.js +0 -2
- package/dist/components/gitops/types.js +0 -2
- package/dist/components/graph/ConnectionPermissionsDialog.js +0 -2
- package/dist/components/graph/MeshAgentNode.js +0 -2
- package/dist/components/graph/MeshDeployWizard.js +0 -2
- package/dist/components/graph/MeshGraphView.js +0 -2
- package/dist/components/graph/MeshNodeActions.js +0 -2
- package/dist/components/graph/MeshRequestPanel.js +0 -2
- package/dist/components/graph/meshTypes.js +0 -2
- package/dist/components/graph/nodeIcons.js +0 -2
- package/dist/components/idp-components/ComponentCard.js +0 -2
- package/dist/components/idp-components/ComponentForm.js +0 -2
- package/dist/components/idp-components/DependencyGraphTab.js +0 -2
- package/dist/components/logs/LogViewer.js +0 -2
- package/dist/components/notes/NoteCard.js +0 -2
- package/dist/components/notes/NoteEditor.js +0 -2
- package/dist/components/notes/NoteList.js +0 -2
- package/dist/components/notes/NotesTabPanel.js +0 -2
- package/dist/components/overview/FleetActivityAreaChart.js +0 -2
- package/dist/components/overview/FleetActivityChart.js +0 -2
- package/dist/components/overview/FleetHealthCard.js +0 -2
- package/dist/components/overview/QuickActionsCard.js +0 -2
- package/dist/components/overview/useFleetAnalytics.js +0 -2
- package/dist/components/plugins/AddTabDialog.js +0 -2
- package/dist/components/plugins/FleetRolloutDialog.js +0 -2
- package/dist/components/plugins/PluginIframeMount.js +0 -2
- package/dist/components/plugins/useFleetPluginMatrix.js +0 -2
- package/dist/components/scorecard/MetricTrend.js +0 -2
- package/dist/components/scorecard/ScorecardEmptyState.js +0 -2
- package/dist/components/scorecard/ScorecardPanel.js +0 -2
- package/dist/components/scorecard/ScorecardsOverviewPanel.js +0 -2
- package/dist/components/scorecard/scorecardConstants.js +0 -2
- package/dist/components/security/SecurityRunButton.js +0 -2
- package/dist/components/security/SecurityScanList.js +0 -2
- package/dist/components/security/SecurityTabPanel.js +0 -2
- package/dist/components/security/agentClient.js +0 -2
- package/dist/components/security/hooks.js +0 -2
- package/dist/components/security/types.js +0 -2
- package/dist/components/sessions/CollaboratorsList.js +0 -2
- package/dist/components/sessions/ControlStatusBar.js +0 -2
- package/dist/components/sessions/EntityInfoPopover.js +0 -2
- package/dist/components/sessions/SessionCard.js +0 -2
- package/dist/components/sessions/SessionGroup.js +0 -2
- package/dist/components/sessions/SessionInfoPanel.js +0 -2
- package/dist/components/sessions/SessionList.js +0 -2
- package/dist/components/sessions/SessionPublicLinkPanel.js +0 -2
- package/dist/components/sessions/SessionShareDialog.js +0 -2
- package/dist/components/sessions/SessionStatusBadge.js +0 -2
- package/dist/components/sessions/SessionWorkbenchDrawer.js +0 -2
- package/dist/components/sessions/SessionsCommandPalette.js +0 -2
- package/dist/components/sessions/SharedTerminalPanel.js +0 -2
- package/dist/components/sessions/ShortcutCheatsheet.js +0 -2
- package/dist/components/sessions/TerminalIframe.js +0 -2
- package/dist/components/sessions/TerminalPanel.js +0 -2
- package/dist/components/sessions/groupSessions.js +0 -2
- package/dist/components/sessions/sessionShortcuts.js +0 -2
- package/dist/components/settings/AdvancedSection.js +0 -2
- package/dist/components/settings/IdePreferencesSection.js +0 -2
- package/dist/components/settings/NotificationsSection.js +0 -2
- package/dist/components/settings/SettingsForm.js +0 -2
- package/dist/components/settings/WorkspaceDefaultsSection.js +0 -2
- package/dist/components/shared/ActionMenu.js +0 -2
- package/dist/components/shared/AgentEventsConnector.js +0 -2
- package/dist/components/shared/AgentSelector.js +0 -2
- package/dist/components/shared/AgentSetupBanner.js +0 -2
- package/dist/components/shared/Card.js +0 -2
- package/dist/components/shared/ConfirmDialog.js +0 -2
- package/dist/components/shared/EmptyState.js +0 -2
- package/dist/components/shared/EnableRemoteTaskDialog.js +0 -2
- package/dist/components/shared/EntityTagPicker.js +0 -2
- package/dist/components/shared/EntityVibeLinkControl.js +0 -2
- package/dist/components/shared/ErrorState.js +0 -2
- package/dist/components/shared/FilterDropdown.js +0 -2
- package/dist/components/shared/GetHelpButton.js +0 -2
- package/dist/components/shared/InstallTabs.js +0 -2
- package/dist/components/shared/LinkToVibePanel.js +0 -2
- package/dist/components/shared/LoadingState.js +0 -2
- package/dist/components/shared/MotionTabPanel.js +0 -2
- package/dist/components/shared/NotificationToast.js +0 -2
- package/dist/components/shared/PageHeader.js +0 -2
- package/dist/components/shared/PageSkeleton.js +0 -2
- package/dist/components/shared/PlatformIcon.js +0 -2
- package/dist/components/shared/PluginGate.js +0 -2
- package/dist/components/shared/PromptDialog.js +0 -2
- package/dist/components/shared/QuotaExhaustedDialog.js +0 -2
- package/dist/components/shared/RequireAgentReachable.js +0 -2
- package/dist/components/shared/SearchInput.js +0 -2
- package/dist/components/shared/SearchableSelect.js +0 -2
- package/dist/components/shared/SelectionCheckbox.js +0 -2
- package/dist/components/shared/SessionNotificationBanner.js +0 -2
- package/dist/components/shared/StatCard.js +0 -2
- package/dist/components/shared/StatusBadge.js +0 -2
- package/dist/components/shared/TagFilter.js +0 -2
- package/dist/components/shared/cardMotion.js +0 -2
- package/dist/components/shared/platformIconPaths.js +0 -2
- package/dist/components/sharing/EntityShareButton.js +0 -2
- package/dist/components/sharing/NoteShareDialog.js +0 -2
- package/dist/components/sharing/SharedWithMePanel.js +0 -2
- package/dist/components/sharing/VibeShareButton.js +0 -2
- package/dist/components/sharing/entityShareOps.js +0 -2
- package/dist/components/sharing/shareControllerTypes.js +0 -2
- package/dist/components/sharing/shareRegistry.js +0 -2
- package/dist/components/sharing/useEntityShareController.js +0 -2
- package/dist/components/sharing/useNoteShareController.js +0 -2
- package/dist/components/sharing/useVibeShareController.js +0 -2
- package/dist/components/targets/TargetCard.js +0 -2
- package/dist/components/templates/PublishTemplateForm.js +0 -2
- package/dist/components/templates/TemplateCard.js +0 -2
- package/dist/components/templates/TemplateVariableEditor.js +0 -2
- package/dist/components/templates/TemplateWizard.js +0 -2
- package/dist/components/tunnels/DomainVerificationBadge.js +0 -2
- package/dist/components/tunnels/ProviderBadge.js +0 -2
- package/dist/components/tunnels/TunnelCard.js +0 -2
- package/dist/components/tunnels/TunnelConnectionCard.js +0 -2
- package/dist/components/tunnels/TunnelCopyButton.js +0 -2
- package/dist/components/tunnels/TunnelCreateWizard.js +0 -2
- package/dist/components/tunnels/TunnelMetricTiles.js +0 -2
- package/dist/components/tunnels/TunnelPublicAccessPanel.js +0 -2
- package/dist/components/tunnels/TunnelSparkline.js +0 -2
- package/dist/components/tunnels/TunnelStatusBadge.js +0 -2
- package/dist/components/tunnels/tunnelEndpoints.js +0 -2
- package/dist/components/tunnels/tunnelMetrics.js +0 -2
- package/dist/components/vibe/VibeAgentEmptyState.js +0 -2
- package/dist/components/vibe/VibeAgentSwitcher.js +0 -2
- package/dist/components/vibe/VibeEnvVarsPanel.js +0 -2
- package/dist/components/vibe/VibeLinkedEntitiesPanel.js +0 -2
- package/dist/components/vibe/VibeLlmContextAdminPanel.js +0 -2
- package/dist/components/vibe/VibeLlmContextTabPanel.js +0 -2
- package/dist/components/vibecalendar/LogsDrawer.js +0 -2
- package/dist/components/vibecalendar/ScheduleTaskModal.js +0 -2
- package/dist/components/vibecalendar/VibeCalAgendaView.js +0 -2
- package/dist/components/vibecalendar/VibeCalDayView.js +0 -2
- package/dist/components/vibecalendar/VibeCalMonthView.js +0 -2
- package/dist/components/vibecalendar/VibeCalWeekView.js +0 -2
- package/dist/components/vibecalendar/VibeCalendarHeader.js +0 -2
- package/dist/components/vibecalendar/VibeTaskBlock.js +0 -2
- package/dist/components/vibecalendar/expandOccurrences.js +0 -2
- package/dist/components/vibecalendar/types.js +0 -2
- package/dist/components/vibedeck/VibeDeckButtonForm.js +0 -2
- package/dist/components/vibedeck/VibeDeckButtonTile.js +0 -2
- package/dist/components/vibedeck/VibeDeckExecutionLog.js +0 -2
- package/dist/components/vibedeck/VibeDeckForm.js +0 -2
- package/dist/components/vibedeck/VibeDeckGrid.js +0 -2
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js +0 -2
- package/dist/components/vibedeck/VibeDeckShareDialog.js +0 -2
- package/dist/components/vibedeck/VibeDeckSwitcher.js +0 -2
- package/dist/components/vibes/DeleteVibeDialog.js +0 -2
- package/dist/components/vibes/VibeCard.js +0 -2
- package/dist/components/vibes/VibeList.js +0 -2
- package/dist/components/vibes/icons.js +0 -2
- package/dist/components/webhooks/types.js +0 -2
- package/dist/config/assistantUsecases.js +0 -2
- package/dist/config/index.js +0 -2
- package/dist/constants/aiTabs.js +0 -2
- package/dist/constants/permissions.js +0 -2
- package/dist/constants/pluginCatalog.js +0 -2
- package/dist/generated/wspace-operations.js +0 -2
- package/dist/generated/wspace-types.js +0 -2
- package/dist/hooks/useActiveAgentProfile.js +0 -2
- package/dist/hooks/useAgentConnectivity.js +0 -2
- package/dist/hooks/useAgentEvents.js +0 -2
- package/dist/hooks/useAgentManagerKeyboard.js +0 -2
- package/dist/hooks/useAgentManagerStreaming.js +0 -2
- package/dist/hooks/useAiCreditsQuota.js +0 -2
- package/dist/hooks/useCachedInitialData.js +0 -2
- package/dist/hooks/useDraftEntityTags.js +0 -2
- package/dist/hooks/useEntityTags.js +0 -2
- package/dist/hooks/useGitops.js +0 -2
- package/dist/hooks/useInitialDataLoader.js +0 -2
- package/dist/hooks/useOfferedAssistantMode.js +0 -2
- package/dist/hooks/useOpenAssistantHelp.js +0 -2
- package/dist/hooks/usePluginAvailability.js +0 -2
- package/dist/hooks/useQueryBackedTab.js +0 -2
- package/dist/hooks/useTenantContext.js +0 -2
- package/dist/hooks/useTerminalCapabilityUrl.js +0 -2
- package/dist/hooks/useToggleAgentBookmark.js +0 -2
- package/dist/hooks/useVoiceMode.js +0 -2
- package/dist/hooks/useWorkspaceWriteAccess.js +0 -2
- package/dist/lib/apolloCache.js +0 -2
- package/dist/lib/toast.js +0 -2
- package/dist/lib/vibeFeatures.js +0 -2
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +0 -2
- package/dist/node_modules/@apollo/client/errors/ServerError.js +0 -2
- package/dist/node_modules/@apollo/client/errors/ServerParseError.js +0 -2
- package/dist/node_modules/@apollo/client/errors/utils.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch/batchLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch/batching.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch-http/BaseBatchHttpLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch-http/batchHttpLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/client-awareness/ClientAwarenessLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/checkFetcher.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/parseAndCheckHttpResponse.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/selectHttpOptionsAndBody.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/selectURI.js +0 -2
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js +0 -2
- package/dist/node_modules/@apollo/client/link/utils/filterOperationVariables.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/compact.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js +0 -2
- package/dist/node_modules/@apollo/client/version.js +0 -2
- package/dist/node_modules/@wry/caches/lib/weak.js +0 -2
- package/dist/node_modules/@wry/trie/lib/index.js +0 -2
- package/dist/node_modules/clsx/dist/clsx.js +0 -2
- package/dist/node_modules/d3-array/src/ascending.js +0 -2
- package/dist/node_modules/d3-array/src/bisect.js +0 -2
- package/dist/node_modules/d3-array/src/bisector.js +0 -2
- package/dist/node_modules/d3-array/src/descending.js +0 -2
- package/dist/node_modules/d3-array/src/max.js +0 -2
- package/dist/node_modules/d3-array/src/min.js +0 -2
- package/dist/node_modules/d3-array/src/number.js +0 -2
- package/dist/node_modules/d3-array/src/quantile.js +0 -2
- package/dist/node_modules/d3-array/src/quickselect.js +0 -2
- package/dist/node_modules/d3-array/src/range.js +0 -2
- package/dist/node_modules/d3-array/src/sort.js +0 -2
- package/dist/node_modules/d3-array/src/ticks.js +0 -2
- package/dist/node_modules/d3-color/src/color.js +0 -2
- package/dist/node_modules/d3-color/src/define.js +0 -2
- package/dist/node_modules/d3-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-format/src/exponent.js +0 -2
- package/dist/node_modules/d3-format/src/formatDecimal.js +0 -2
- package/dist/node_modules/d3-format/src/formatGroup.js +0 -2
- package/dist/node_modules/d3-format/src/formatNumerals.js +0 -2
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -2
- package/dist/node_modules/d3-format/src/formatRounded.js +0 -2
- package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -2
- package/dist/node_modules/d3-format/src/formatTrim.js +0 -2
- package/dist/node_modules/d3-format/src/formatTypes.js +0 -2
- package/dist/node_modules/d3-format/src/identity.js +0 -2
- package/dist/node_modules/d3-format/src/locale.js +0 -2
- package/dist/node_modules/d3-format/src/precisionFixed.js +0 -2
- package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -2
- package/dist/node_modules/d3-format/src/precisionRound.js +0 -2
- package/dist/node_modules/d3-interpolate/src/array.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basis.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -2
- package/dist/node_modules/d3-interpolate/src/color.js +0 -2
- package/dist/node_modules/d3-interpolate/src/constant.js +0 -2
- package/dist/node_modules/d3-interpolate/src/date.js +0 -2
- package/dist/node_modules/d3-interpolate/src/number.js +0 -2
- package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -2
- package/dist/node_modules/d3-interpolate/src/object.js +0 -2
- package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -2
- package/dist/node_modules/d3-interpolate/src/rgb.js +0 -2
- package/dist/node_modules/d3-interpolate/src/round.js +0 -2
- package/dist/node_modules/d3-interpolate/src/string.js +0 -2
- package/dist/node_modules/d3-interpolate/src/value.js +0 -2
- package/dist/node_modules/d3-path/src/path.js +0 -2
- package/dist/node_modules/d3-scale/src/band.js +0 -2
- package/dist/node_modules/d3-scale/src/constant.js +0 -2
- package/dist/node_modules/d3-scale/src/continuous.js +0 -2
- package/dist/node_modules/d3-scale/src/diverging.js +0 -2
- package/dist/node_modules/d3-scale/src/identity.js +0 -2
- package/dist/node_modules/d3-scale/src/init.js +0 -2
- package/dist/node_modules/d3-scale/src/linear.js +0 -2
- package/dist/node_modules/d3-scale/src/log.js +0 -2
- package/dist/node_modules/d3-scale/src/nice.js +0 -2
- package/dist/node_modules/d3-scale/src/number.js +0 -2
- package/dist/node_modules/d3-scale/src/ordinal.js +0 -2
- package/dist/node_modules/d3-scale/src/pow.js +0 -2
- package/dist/node_modules/d3-scale/src/quantile.js +0 -2
- package/dist/node_modules/d3-scale/src/quantize.js +0 -2
- package/dist/node_modules/d3-scale/src/radial.js +0 -2
- package/dist/node_modules/d3-scale/src/sequential.js +0 -2
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -2
- package/dist/node_modules/d3-scale/src/symlog.js +0 -2
- package/dist/node_modules/d3-scale/src/threshold.js +0 -2
- package/dist/node_modules/d3-scale/src/tickFormat.js +0 -2
- package/dist/node_modules/d3-scale/src/time.js +0 -2
- package/dist/node_modules/d3-scale/src/utcTime.js +0 -2
- package/dist/node_modules/d3-shape/src/area.js +0 -2
- package/dist/node_modules/d3-shape/src/array.js +0 -2
- package/dist/node_modules/d3-shape/src/constant.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basis.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/bump.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linear.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/natural.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/step.js +0 -2
- package/dist/node_modules/d3-shape/src/line.js +0 -2
- package/dist/node_modules/d3-shape/src/math.js +0 -2
- package/dist/node_modules/d3-shape/src/noop.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/expand.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/none.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -2
- package/dist/node_modules/d3-shape/src/order/none.js +0 -2
- package/dist/node_modules/d3-shape/src/path.js +0 -2
- package/dist/node_modules/d3-shape/src/point.js +0 -2
- package/dist/node_modules/d3-shape/src/stack.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/square.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/star.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol.js +0 -2
- package/dist/node_modules/d3-time/src/day.js +0 -2
- package/dist/node_modules/d3-time/src/duration.js +0 -2
- package/dist/node_modules/d3-time/src/hour.js +0 -2
- package/dist/node_modules/d3-time/src/interval.js +0 -2
- package/dist/node_modules/d3-time/src/millisecond.js +0 -2
- package/dist/node_modules/d3-time/src/minute.js +0 -2
- package/dist/node_modules/d3-time/src/month.js +0 -2
- package/dist/node_modules/d3-time/src/second.js +0 -2
- package/dist/node_modules/d3-time/src/ticks.js +0 -2
- package/dist/node_modules/d3-time/src/week.js +0 -2
- package/dist/node_modules/d3-time/src/year.js +0 -2
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-time-format/src/locale.js +0 -2
- package/dist/node_modules/dagre/index.js +0 -2
- package/dist/node_modules/dagre/lib/acyclic.js +0 -2
- package/dist/node_modules/dagre/lib/add-border-segments.js +0 -2
- package/dist/node_modules/dagre/lib/coordinate-system.js +0 -2
- package/dist/node_modules/dagre/lib/data/list.js +0 -2
- package/dist/node_modules/dagre/lib/debug.js +0 -2
- package/dist/node_modules/dagre/lib/graphlib.js +0 -2
- package/dist/node_modules/dagre/lib/greedy-fas.js +0 -2
- package/dist/node_modules/dagre/lib/layout.js +0 -2
- package/dist/node_modules/dagre/lib/lodash.js +0 -2
- package/dist/node_modules/dagre/lib/nesting-graph.js +0 -2
- package/dist/node_modules/dagre/lib/normalize.js +0 -2
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js +0 -2
- package/dist/node_modules/dagre/lib/order/barycenter.js +0 -2
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js +0 -2
- package/dist/node_modules/dagre/lib/order/cross-count.js +0 -2
- package/dist/node_modules/dagre/lib/order/index.js +0 -2
- package/dist/node_modules/dagre/lib/order/init-order.js +0 -2
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js +0 -2
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js +0 -2
- package/dist/node_modules/dagre/lib/order/sort.js +0 -2
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js +0 -2
- package/dist/node_modules/dagre/lib/position/bk.js +0 -2
- package/dist/node_modules/dagre/lib/position/index.js +0 -2
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js +0 -2
- package/dist/node_modules/dagre/lib/rank/index.js +0 -2
- package/dist/node_modules/dagre/lib/rank/network-simplex.js +0 -2
- package/dist/node_modules/dagre/lib/rank/util.js +0 -2
- package/dist/node_modules/dagre/lib/util.js +0 -2
- package/dist/node_modules/dagre/lib/version.js +0 -2
- package/dist/node_modules/decimal.js-light/decimal.js +0 -2
- package/dist/node_modules/eventemitter3/index.js +0 -2
- package/dist/node_modules/fast-equals/dist/es/index.js +0 -2
- package/dist/node_modules/graphlib/index.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/components.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dfs.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/index.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/postorder.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/preorder.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/prim.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/tarjan.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/topsort.js +0 -2
- package/dist/node_modules/graphlib/lib/data/priority-queue.js +0 -2
- package/dist/node_modules/graphlib/lib/graph.js +0 -2
- package/dist/node_modules/graphlib/lib/index.js +0 -2
- package/dist/node_modules/graphlib/lib/json.js +0 -2
- package/dist/node_modules/graphlib/lib/lodash.js +0 -2
- package/dist/node_modules/graphlib/lib/version.js +0 -2
- package/dist/node_modules/internmap/src/index.js +0 -2
- package/dist/node_modules/lodash/_DataView.js +0 -2
- package/dist/node_modules/lodash/_Hash.js +0 -2
- package/dist/node_modules/lodash/_ListCache.js +0 -2
- package/dist/node_modules/lodash/_Map.js +0 -2
- package/dist/node_modules/lodash/_MapCache.js +0 -2
- package/dist/node_modules/lodash/_Promise.js +0 -2
- package/dist/node_modules/lodash/_Set.js +0 -2
- package/dist/node_modules/lodash/_SetCache.js +0 -2
- package/dist/node_modules/lodash/_Stack.js +0 -2
- package/dist/node_modules/lodash/_Symbol.js +0 -2
- package/dist/node_modules/lodash/_Uint8Array.js +0 -2
- package/dist/node_modules/lodash/_WeakMap.js +0 -2
- package/dist/node_modules/lodash/_apply.js +0 -2
- package/dist/node_modules/lodash/_arrayEach.js +0 -2
- package/dist/node_modules/lodash/_arrayEvery.js +0 -2
- package/dist/node_modules/lodash/_arrayFilter.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludes.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludesWith.js +0 -2
- package/dist/node_modules/lodash/_arrayLikeKeys.js +0 -2
- package/dist/node_modules/lodash/_arrayMap.js +0 -2
- package/dist/node_modules/lodash/_arrayPush.js +0 -2
- package/dist/node_modules/lodash/_arrayReduce.js +0 -2
- package/dist/node_modules/lodash/_arraySome.js +0 -2
- package/dist/node_modules/lodash/_asciiSize.js +0 -2
- package/dist/node_modules/lodash/_asciiToArray.js +0 -2
- package/dist/node_modules/lodash/_assignMergeValue.js +0 -2
- package/dist/node_modules/lodash/_assignValue.js +0 -2
- package/dist/node_modules/lodash/_assocIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseAssign.js +0 -2
- package/dist/node_modules/lodash/_baseAssignIn.js +0 -2
- package/dist/node_modules/lodash/_baseAssignValue.js +0 -2
- package/dist/node_modules/lodash/_baseClone.js +0 -2
- package/dist/node_modules/lodash/_baseCreate.js +0 -2
- package/dist/node_modules/lodash/_baseEach.js +0 -2
- package/dist/node_modules/lodash/_baseEvery.js +0 -2
- package/dist/node_modules/lodash/_baseExtremum.js +0 -2
- package/dist/node_modules/lodash/_baseFilter.js +0 -2
- package/dist/node_modules/lodash/_baseFindIndex.js +0 -2
- package/dist/node_modules/lodash/_baseFlatten.js +0 -2
- package/dist/node_modules/lodash/_baseFor.js +0 -2
- package/dist/node_modules/lodash/_baseForOwn.js +0 -2
- package/dist/node_modules/lodash/_baseGet.js +0 -2
- package/dist/node_modules/lodash/_baseGetAllKeys.js +0 -2
- package/dist/node_modules/lodash/_baseGetTag.js +0 -2
- package/dist/node_modules/lodash/_baseGt.js +0 -2
- package/dist/node_modules/lodash/_baseHas.js +0 -2
- package/dist/node_modules/lodash/_baseHasIn.js +0 -2
- package/dist/node_modules/lodash/_baseIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseIsArguments.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqual.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +0 -2
- package/dist/node_modules/lodash/_baseIsMap.js +0 -2
- package/dist/node_modules/lodash/_baseIsMatch.js +0 -2
- package/dist/node_modules/lodash/_baseIsNaN.js +0 -2
- package/dist/node_modules/lodash/_baseIsNative.js +0 -2
- package/dist/node_modules/lodash/_baseIsSet.js +0 -2
- package/dist/node_modules/lodash/_baseIsTypedArray.js +0 -2
- package/dist/node_modules/lodash/_baseIteratee.js +0 -2
- package/dist/node_modules/lodash/_baseKeys.js +0 -2
- package/dist/node_modules/lodash/_baseKeysIn.js +0 -2
- package/dist/node_modules/lodash/_baseLt.js +0 -2
- package/dist/node_modules/lodash/_baseMap.js +0 -2
- package/dist/node_modules/lodash/_baseMatches.js +0 -2
- package/dist/node_modules/lodash/_baseMatchesProperty.js +0 -2
- package/dist/node_modules/lodash/_baseMerge.js +0 -2
- package/dist/node_modules/lodash/_baseMergeDeep.js +0 -2
- package/dist/node_modules/lodash/_baseOrderBy.js +0 -2
- package/dist/node_modules/lodash/_basePick.js +0 -2
- package/dist/node_modules/lodash/_basePickBy.js +0 -2
- package/dist/node_modules/lodash/_baseProperty.js +0 -2
- package/dist/node_modules/lodash/_basePropertyDeep.js +0 -2
- package/dist/node_modules/lodash/_baseRange.js +0 -2
- package/dist/node_modules/lodash/_baseReduce.js +0 -2
- package/dist/node_modules/lodash/_baseRest.js +0 -2
- package/dist/node_modules/lodash/_baseSet.js +0 -2
- package/dist/node_modules/lodash/_baseSetToString.js +0 -2
- package/dist/node_modules/lodash/_baseSlice.js +0 -2
- package/dist/node_modules/lodash/_baseSome.js +0 -2
- package/dist/node_modules/lodash/_baseSortBy.js +0 -2
- package/dist/node_modules/lodash/_baseTimes.js +0 -2
- package/dist/node_modules/lodash/_baseToString.js +0 -2
- package/dist/node_modules/lodash/_baseTrim.js +0 -2
- package/dist/node_modules/lodash/_baseUnary.js +0 -2
- package/dist/node_modules/lodash/_baseUniq.js +0 -2
- package/dist/node_modules/lodash/_baseValues.js +0 -2
- package/dist/node_modules/lodash/_baseZipObject.js +0 -2
- package/dist/node_modules/lodash/_cacheHas.js +0 -2
- package/dist/node_modules/lodash/_castFunction.js +0 -2
- package/dist/node_modules/lodash/_castPath.js +0 -2
- package/dist/node_modules/lodash/_castSlice.js +0 -2
- package/dist/node_modules/lodash/_cloneArrayBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneDataView.js +0 -2
- package/dist/node_modules/lodash/_cloneRegExp.js +0 -2
- package/dist/node_modules/lodash/_cloneSymbol.js +0 -2
- package/dist/node_modules/lodash/_cloneTypedArray.js +0 -2
- package/dist/node_modules/lodash/_compareAscending.js +0 -2
- package/dist/node_modules/lodash/_compareMultiple.js +0 -2
- package/dist/node_modules/lodash/_copyArray.js +0 -2
- package/dist/node_modules/lodash/_copyObject.js +0 -2
- package/dist/node_modules/lodash/_copySymbols.js +0 -2
- package/dist/node_modules/lodash/_copySymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_coreJsData.js +0 -2
- package/dist/node_modules/lodash/_createAssigner.js +0 -2
- package/dist/node_modules/lodash/_createBaseEach.js +0 -2
- package/dist/node_modules/lodash/_createBaseFor.js +0 -2
- package/dist/node_modules/lodash/_createCaseFirst.js +0 -2
- package/dist/node_modules/lodash/_createFind.js +0 -2
- package/dist/node_modules/lodash/_createRange.js +0 -2
- package/dist/node_modules/lodash/_createSet.js +0 -2
- package/dist/node_modules/lodash/_defineProperty.js +0 -2
- package/dist/node_modules/lodash/_equalArrays.js +0 -2
- package/dist/node_modules/lodash/_equalByTag.js +0 -2
- package/dist/node_modules/lodash/_equalObjects.js +0 -2
- package/dist/node_modules/lodash/_flatRest.js +0 -2
- package/dist/node_modules/lodash/_freeGlobal.js +0 -2
- package/dist/node_modules/lodash/_getAllKeys.js +0 -2
- package/dist/node_modules/lodash/_getAllKeysIn.js +0 -2
- package/dist/node_modules/lodash/_getMapData.js +0 -2
- package/dist/node_modules/lodash/_getMatchData.js +0 -2
- package/dist/node_modules/lodash/_getNative.js +0 -2
- package/dist/node_modules/lodash/_getPrototype.js +0 -2
- package/dist/node_modules/lodash/_getRawTag.js +0 -2
- package/dist/node_modules/lodash/_getSymbols.js +0 -2
- package/dist/node_modules/lodash/_getSymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_getTag.js +0 -2
- package/dist/node_modules/lodash/_getValue.js +0 -2
- package/dist/node_modules/lodash/_hasPath.js +0 -2
- package/dist/node_modules/lodash/_hasUnicode.js +0 -2
- package/dist/node_modules/lodash/_hashClear.js +0 -2
- package/dist/node_modules/lodash/_hashDelete.js +0 -2
- package/dist/node_modules/lodash/_hashGet.js +0 -2
- package/dist/node_modules/lodash/_hashHas.js +0 -2
- package/dist/node_modules/lodash/_hashSet.js +0 -2
- package/dist/node_modules/lodash/_initCloneArray.js +0 -2
- package/dist/node_modules/lodash/_initCloneByTag.js +0 -2
- package/dist/node_modules/lodash/_initCloneObject.js +0 -2
- package/dist/node_modules/lodash/_isFlattenable.js +0 -2
- package/dist/node_modules/lodash/_isIndex.js +0 -2
- package/dist/node_modules/lodash/_isIterateeCall.js +0 -2
- package/dist/node_modules/lodash/_isKey.js +0 -2
- package/dist/node_modules/lodash/_isKeyable.js +0 -2
- package/dist/node_modules/lodash/_isMasked.js +0 -2
- package/dist/node_modules/lodash/_isPrototype.js +0 -2
- package/dist/node_modules/lodash/_isStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_listCacheClear.js +0 -2
- package/dist/node_modules/lodash/_listCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_listCacheGet.js +0 -2
- package/dist/node_modules/lodash/_listCacheHas.js +0 -2
- package/dist/node_modules/lodash/_listCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheClear.js +0 -2
- package/dist/node_modules/lodash/_mapCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_mapCacheGet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheHas.js +0 -2
- package/dist/node_modules/lodash/_mapCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapToArray.js +0 -2
- package/dist/node_modules/lodash/_matchesStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_memoizeCapped.js +0 -2
- package/dist/node_modules/lodash/_nativeCreate.js +0 -2
- package/dist/node_modules/lodash/_nativeKeys.js +0 -2
- package/dist/node_modules/lodash/_nativeKeysIn.js +0 -2
- package/dist/node_modules/lodash/_nodeUtil.js +0 -2
- package/dist/node_modules/lodash/_objectToString.js +0 -2
- package/dist/node_modules/lodash/_overArg.js +0 -2
- package/dist/node_modules/lodash/_overRest.js +0 -2
- package/dist/node_modules/lodash/_root.js +0 -2
- package/dist/node_modules/lodash/_safeGet.js +0 -2
- package/dist/node_modules/lodash/_setCacheAdd.js +0 -2
- package/dist/node_modules/lodash/_setCacheHas.js +0 -2
- package/dist/node_modules/lodash/_setToArray.js +0 -2
- package/dist/node_modules/lodash/_setToString.js +0 -2
- package/dist/node_modules/lodash/_shortOut.js +0 -2
- package/dist/node_modules/lodash/_stackClear.js +0 -2
- package/dist/node_modules/lodash/_stackDelete.js +0 -2
- package/dist/node_modules/lodash/_stackGet.js +0 -2
- package/dist/node_modules/lodash/_stackHas.js +0 -2
- package/dist/node_modules/lodash/_stackSet.js +0 -2
- package/dist/node_modules/lodash/_strictIndexOf.js +0 -2
- package/dist/node_modules/lodash/_stringSize.js +0 -2
- package/dist/node_modules/lodash/_stringToArray.js +0 -2
- package/dist/node_modules/lodash/_stringToPath.js +0 -2
- package/dist/node_modules/lodash/_toKey.js +0 -2
- package/dist/node_modules/lodash/_toSource.js +0 -2
- package/dist/node_modules/lodash/_trimmedEndIndex.js +0 -2
- package/dist/node_modules/lodash/_unicodeSize.js +0 -2
- package/dist/node_modules/lodash/_unicodeToArray.js +0 -2
- package/dist/node_modules/lodash/clone.js +0 -2
- package/dist/node_modules/lodash/cloneDeep.js +0 -2
- package/dist/node_modules/lodash/constant.js +0 -2
- package/dist/node_modules/lodash/debounce.js +0 -2
- package/dist/node_modules/lodash/defaults.js +0 -2
- package/dist/node_modules/lodash/each.js +0 -2
- package/dist/node_modules/lodash/eq.js +0 -2
- package/dist/node_modules/lodash/every.js +0 -2
- package/dist/node_modules/lodash/filter.js +0 -2
- package/dist/node_modules/lodash/find.js +0 -2
- package/dist/node_modules/lodash/findIndex.js +0 -2
- package/dist/node_modules/lodash/flatMap.js +0 -2
- package/dist/node_modules/lodash/flatten.js +0 -2
- package/dist/node_modules/lodash/forEach.js +0 -2
- package/dist/node_modules/lodash/forIn.js +0 -2
- package/dist/node_modules/lodash/get.js +0 -2
- package/dist/node_modules/lodash/has.js +0 -2
- package/dist/node_modules/lodash/hasIn.js +0 -2
- package/dist/node_modules/lodash/identity.js +0 -2
- package/dist/node_modules/lodash/isArguments.js +0 -2
- package/dist/node_modules/lodash/isArray.js +0 -2
- package/dist/node_modules/lodash/isArrayLike.js +0 -2
- package/dist/node_modules/lodash/isArrayLikeObject.js +0 -2
- package/dist/node_modules/lodash/isBoolean.js +0 -2
- package/dist/node_modules/lodash/isBuffer.js +0 -2
- package/dist/node_modules/lodash/isEmpty.js +0 -2
- package/dist/node_modules/lodash/isEqual.js +0 -2
- package/dist/node_modules/lodash/isFunction.js +0 -2
- package/dist/node_modules/lodash/isLength.js +0 -2
- package/dist/node_modules/lodash/isMap.js +0 -2
- package/dist/node_modules/lodash/isNaN.js +0 -2
- package/dist/node_modules/lodash/isNil.js +0 -2
- package/dist/node_modules/lodash/isNumber.js +0 -2
- package/dist/node_modules/lodash/isObject.js +0 -2
- package/dist/node_modules/lodash/isObjectLike.js +0 -2
- package/dist/node_modules/lodash/isPlainObject.js +0 -2
- package/dist/node_modules/lodash/isSet.js +0 -2
- package/dist/node_modules/lodash/isString.js +0 -2
- package/dist/node_modules/lodash/isSymbol.js +0 -2
- package/dist/node_modules/lodash/isTypedArray.js +0 -2
- package/dist/node_modules/lodash/isUndefined.js +0 -2
- package/dist/node_modules/lodash/keys.js +0 -2
- package/dist/node_modules/lodash/keysIn.js +0 -2
- package/dist/node_modules/lodash/last.js +0 -2
- package/dist/node_modules/lodash/map.js +0 -2
- package/dist/node_modules/lodash/mapValues.js +0 -2
- package/dist/node_modules/lodash/max.js +0 -2
- package/dist/node_modules/lodash/maxBy.js +0 -2
- package/dist/node_modules/lodash/memoize.js +0 -2
- package/dist/node_modules/lodash/merge.js +0 -2
- package/dist/node_modules/lodash/min.js +0 -2
- package/dist/node_modules/lodash/minBy.js +0 -2
- package/dist/node_modules/lodash/noop.js +0 -2
- package/dist/node_modules/lodash/now.js +0 -2
- package/dist/node_modules/lodash/pick.js +0 -2
- package/dist/node_modules/lodash/property.js +0 -2
- package/dist/node_modules/lodash/range.js +0 -2
- package/dist/node_modules/lodash/reduce.js +0 -2
- package/dist/node_modules/lodash/size.js +0 -2
- package/dist/node_modules/lodash/some.js +0 -2
- package/dist/node_modules/lodash/sortBy.js +0 -2
- package/dist/node_modules/lodash/stubArray.js +0 -2
- package/dist/node_modules/lodash/stubFalse.js +0 -2
- package/dist/node_modules/lodash/throttle.js +0 -2
- package/dist/node_modules/lodash/toFinite.js +0 -2
- package/dist/node_modules/lodash/toInteger.js +0 -2
- package/dist/node_modules/lodash/toNumber.js +0 -2
- package/dist/node_modules/lodash/toPlainObject.js +0 -2
- package/dist/node_modules/lodash/toString.js +0 -2
- package/dist/node_modules/lodash/transform.js +0 -2
- package/dist/node_modules/lodash/union.js +0 -2
- package/dist/node_modules/lodash/uniqBy.js +0 -2
- package/dist/node_modules/lodash/uniqueId.js +0 -2
- package/dist/node_modules/lodash/upperFirst.js +0 -2
- package/dist/node_modules/lodash/values.js +0 -2
- package/dist/node_modules/lodash/zipObject.js +0 -2
- package/dist/node_modules/object-assign/index.js +0 -2
- package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
- package/dist/node_modules/prop-types/index.js +0 -2
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
- package/dist/node_modules/prop-types/lib/has.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/Animate.js +0 -2
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +0 -2
- package/dist/node_modules/react-smooth/es6/configUpdate.js +0 -2
- package/dist/node_modules/react-smooth/es6/easing.js +0 -2
- package/dist/node_modules/react-smooth/es6/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +0 -2
- package/dist/node_modules/react-smooth/es6/util.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Area.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AreaChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/PieChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cell.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cursor.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/Label.js +0 -2
- package/dist/node_modules/recharts/es6/component/LabelList.js +0 -2
- package/dist/node_modules/recharts/es6/component/Legend.js +0 -2
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +0 -2
- package/dist/node_modules/recharts/es6/component/Text.js +0 -2
- package/dist/node_modules/recharts/es6/component/Tooltip.js +0 -2
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +0 -2
- package/dist/node_modules/recharts/es6/container/Layer.js +0 -2
- package/dist/node_modules/recharts/es6/container/Surface.js +0 -2
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +0 -2
- package/dist/node_modules/recharts/es6/polar/Pie.js +0 -2
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +0 -2
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Cross.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Curve.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Dot.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Polygon.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Sector.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Symbols.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +0 -2
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/BarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DataUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +0 -2
- package/dist/node_modules/recharts/es6/util/Events.js +0 -2
- package/dist/node_modules/recharts/es6/util/Global.js +0 -2
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +0 -2
- package/dist/node_modules/recharts/es6/util/LogUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +0 -2
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +0 -2
- package/dist/node_modules/recharts/es6/util/TickUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +0 -2
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +0 -2
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +0 -2
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +0 -2
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +0 -2
- package/dist/node_modules/recharts/es6/util/types.js +0 -2
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/utils.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/throwError.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +0 -2
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js +0 -2
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -2
- package/dist/node_modules/victory-vendor/es/d3-scale.js +0 -2
- package/dist/pages/ActionsPage.js +0 -2
- package/dist/pages/AgentDetailsPage.js +0 -2
- package/dist/pages/AgentGraphPage.js +0 -2
- package/dist/pages/AgentsLandingPage.js +0 -2
- package/dist/pages/AgentsPage.js +0 -2
- package/dist/pages/AnalyticsPage.js +0 -2
- package/dist/pages/CatalogDetailPage.js +0 -2
- package/dist/pages/CatalogDocsPage.js +0 -2
- package/dist/pages/CatalogPage.js +0 -2
- package/dist/pages/ComponentDetailPage.js +0 -2
- package/dist/pages/ComponentDocsPage.js +0 -2
- package/dist/pages/ComponentsPage.js +0 -2
- package/dist/pages/EnvTopologyPage.js +0 -2
- package/dist/pages/GettingStartedPage.js +0 -2
- package/dist/pages/HealthPage.js +0 -2
- package/dist/pages/LogsPage.js +0 -2
- package/dist/pages/NoteDetailsPage.js +0 -2
- package/dist/pages/OverviewPage.js +0 -2
- package/dist/pages/PluginDetailPage.js +0 -2
- package/dist/pages/PluginsCatalogPage.js +0 -2
- package/dist/pages/ScheduledJobDetailPage.js +0 -2
- package/dist/pages/SessionDetailsPage.js +0 -2
- package/dist/pages/SessionsPage.js +0 -2
- package/dist/pages/SettingsPage.js +0 -2
- package/dist/pages/SharedSessionPage.js +0 -2
- package/dist/pages/SharedVibeDeckPage.js +0 -2
- package/dist/pages/TargetDetailsPage.js +0 -2
- package/dist/pages/TargetsPage.js +0 -2
- package/dist/pages/TemplateDetailPage.js +0 -2
- package/dist/pages/TemplatesPage.js +0 -2
- package/dist/pages/TunnelsLandingPage.js +0 -2
- package/dist/pages/VibeAuditPage.js +0 -2
- package/dist/pages/VibeCalendarPage.js +0 -2
- package/dist/pages/VibeDeckPage.js +0 -2
- package/dist/pages/VibeDetailsPage.js +0 -2
- package/dist/pages/VibeDocsPage.js +0 -2
- package/dist/pages/VibeTaskDetailPage.js +0 -2
- package/dist/pages/VibesPage.js +0 -2
- package/dist/pages/WebhooksPage.js +0 -2
- package/dist/pages/ai/AIBookmarksPage.js +0 -2
- package/dist/pages/ai/AIBuilderPage.js +0 -2
- package/dist/pages/ai/AIPage.js +0 -2
- package/dist/pages/ai/AISessionDetailPage.js +0 -2
- package/dist/pages/ai/AgentManagerPage.js +0 -2
- package/dist/pages/tunnels/AuditTab.js +0 -2
- package/dist/pages/tunnels/DomainsTab.js +0 -2
- package/dist/pages/tunnels/ProvidersTab.js +0 -2
- package/dist/pages/tunnels/SessionsTab.js +0 -2
- package/dist/pages/tunnels/TunnelDetailsPage.js +0 -2
- package/dist/pages/tunnels/TunnelsTab.js +0 -2
- package/dist/pages/tunnels/UsageTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelAuditTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelCliTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelUsageTab.js +0 -2
- package/dist/plugin.js +0 -2
- package/dist/providers/AgentEventsProvider.js +0 -2
- package/dist/providers/QuotaExhaustedProvider.js +0 -2
- package/dist/providers/VibeControlsProvider.js +0 -2
- package/dist/services/agentRemoteTaskGates.js +0 -2
- package/dist/services/aiApi.js +0 -2
- package/dist/services/assistantApi.js +0 -2
- package/dist/services/createSandboxAssistantTransport.js +0 -2
- package/dist/services/gitopsApi.js +0 -2
- package/dist/services/iframeToken.js +0 -2
- package/dist/services/planApi.js +0 -2
- package/dist/services/schedulerApi.js +0 -2
- package/dist/shared/hooks/useField.js +0 -2
- package/dist/shared/hooks/useTr.js +0 -2
- package/dist/store/agentManagerStore.js +0 -2
- package/dist/store/vibeControlsStore.js +0 -2
- package/dist/translations/en.js +0 -2
- package/dist/types/assistant.js +0 -2
- package/dist/utils/agentApiPath.js +0 -2
- package/dist/utils/agentHealth.js +0 -2
- package/dist/utils/agentStatus.js +0 -2
- package/dist/utils/agentVisibility.js +0 -2
- package/dist/utils/aiCredits.js +0 -2
- package/dist/utils/aiCreditsLedger.js +0 -2
- package/dist/utils/aiSessionNotFound.js +0 -2
- package/dist/utils/assistantPrompt.js +0 -2
- package/dist/utils/onboardingUtils.js +0 -2
- package/dist/utils/pageContext.js +0 -2
- package/dist/utils/quotaUtils.js +0 -2
- package/dist/utils/randomSessionName.js +0 -2
- package/dist/utils/relativeTime.js +0 -2
- package/dist/utils/shareUrl.js +0 -2
- package/package.json +4 -3
- package/dist/VibeControlsRoot.js.map +0 -1
- package/dist/VibeControlsRoutes.js.map +0 -1
- package/dist/components/actions/ActionCard.js.map +0 -1
- package/dist/components/actions/ActionForm.js.map +0 -1
- package/dist/components/actions/ActionSchedulesList.js.map +0 -1
- package/dist/components/actions/ActionTypeBadge.js.map +0 -1
- package/dist/components/actions/ActionWebhookEndpoint.js.map +0 -1
- package/dist/components/actions/ExecutionHistory.js.map +0 -1
- package/dist/components/actions/RemoteExecutionEnableNotice.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerAdminBar.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerBulkActions.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerCenter.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerChatPane.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerDetailPanel.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerInputArea.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerLayout.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageList.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionItem.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionList.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSidebar.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerTab.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerTabBar.js.map +0 -1
- package/dist/components/agent-manager/BridleConfigPanel.js.map +0 -1
- package/dist/components/agent-manager/ChatInsertPicker.js.map +0 -1
- package/dist/components/agent-manager/FilePickerModal.js.map +0 -1
- package/dist/components/agent-manager/PluginInstallModal.js.map +0 -1
- package/dist/components/agent-manager/ProfilesPanel.js.map +0 -1
- package/dist/components/agent-manager/controls/AutonomySelector.js.map +0 -1
- package/dist/components/agent-manager/controls/ContextLevelToggle.js.map +0 -1
- package/dist/components/agent-manager/controls/FileAttachButton.js.map +0 -1
- package/dist/components/agent-manager/controls/McpServerSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/ModelSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/SdkSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/VoiceToggle.js.map +0 -1
- package/dist/components/agent-manager/controls/createDropHandlers.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionConfigPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionStatsPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js.map +0 -1
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js.map +0 -1
- package/dist/components/agent-manager/modelDefaults.js.map +0 -1
- package/dist/components/agents/AgentCard.js.map +0 -1
- package/dist/components/agents/AgentConnectionRecovery.js.map +0 -1
- package/dist/components/agents/AgentForm.js.map +0 -1
- package/dist/components/agents/AgentList.js.map +0 -1
- package/dist/components/agents/AgentMaintenanceTab.js.map +0 -1
- package/dist/components/agents/AgentStatusBadge.js.map +0 -1
- package/dist/components/agents/AgentStorageConfig.js.map +0 -1
- package/dist/components/agents/AgentVisibilityCard.js.map +0 -1
- package/dist/components/agents/ConfigureAgentDialog.js.map +0 -1
- package/dist/components/agents/ConnectionLogPanel.js.map +0 -1
- package/dist/components/agents/CreateSessionDialog.js.map +0 -1
- package/dist/components/agents/GatewayAuthCard.js.map +0 -1
- package/dist/components/agents/OpenInBrowserEditorButton.js.map +0 -1
- package/dist/components/agents/OpenInEditorMenu.js.map +0 -1
- package/dist/components/agents/PluginUIPanel.js.map +0 -1
- package/dist/components/agents/RemoteTaskPermissionsCard.js.map +0 -1
- package/dist/components/agents/VibeOpenInEditorMenu.js.map +0 -1
- package/dist/components/agents/agentStatus.js.map +0 -1
- package/dist/components/agents/backup/AgentBackupTab.js.map +0 -1
- package/dist/components/agents/idePresets.js.map +0 -1
- package/dist/components/ai/AIContextsTab.js.map +0 -1
- package/dist/components/ai/AIKeysTab.js.map +0 -1
- package/dist/components/ai/AIModeToggle.js.map +0 -1
- package/dist/components/ai/AIOverviewTab.js.map +0 -1
- package/dist/components/ai/AIPlanPanel.js.map +0 -1
- package/dist/components/ai/AIPlaygroundTab.js.map +0 -1
- package/dist/components/ai/AIPromptsTab.js.map +0 -1
- package/dist/components/ai/AIProviderCredentialsCard.js.map +0 -1
- package/dist/components/ai/AIQueueTab.js.map +0 -1
- package/dist/components/ai/AISessionsTab.js.map +0 -1
- package/dist/components/ai/AIStatsTab.js.map +0 -1
- package/dist/components/ai/AITasksTab.js.map +0 -1
- package/dist/components/ai/AITemplatesTab.js.map +0 -1
- package/dist/components/ai/AiSectionTabs.js.map +0 -1
- package/dist/components/ai/BridleTab.js.map +0 -1
- package/dist/components/ai/ClaudeCredentialsCard.js.map +0 -1
- package/dist/components/ai/InstructionFilesManager.js.map +0 -1
- package/dist/components/ai/PluginHarnessPicker.js.map +0 -1
- package/dist/components/ai/aiProviderCredentials.js.map +0 -1
- package/dist/components/aliases/AliasManager.js.map +0 -1
- package/dist/components/aliases/aliasReservedNames.js.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownChart.js.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownTable.js.map +0 -1
- package/dist/components/analytics/AnalyticsEntityTabs.js.map +0 -1
- package/dist/components/analytics/AnalyticsFilterBar.js.map +0 -1
- package/dist/components/analytics/AnalyticsKpiGrid.js.map +0 -1
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js.map +0 -1
- package/dist/components/analytics/SandboxAnalyticsSection.js.map +0 -1
- package/dist/components/analytics/types.js.map +0 -1
- package/dist/components/assistant/AIAssistantPanel.js.map +0 -1
- package/dist/components/assistant/AiCreditsMeter.js.map +0 -1
- package/dist/components/assistant/ProductMarkdown.js.map +0 -1
- package/dist/components/assistant/assistantProduct.js.map +0 -1
- package/dist/components/assistant/recordAdapters.js.map +0 -1
- package/dist/components/audit/AuditExportButton.js.map +0 -1
- package/dist/components/audit/AuditLogDetail.js.map +0 -1
- package/dist/components/audit/AuditLogFilters.js.map +0 -1
- package/dist/components/audit/AuditLogStats.js.map +0 -1
- package/dist/components/audit/AuditLogTable.js.map +0 -1
- package/dist/components/catalog/CatalogCard.js.map +0 -1
- package/dist/components/catalog/CatalogForm.js.map +0 -1
- package/dist/components/common/ActionAgentTargetNotice.js.map +0 -1
- package/dist/components/common/CommandEditor.js.map +0 -1
- package/dist/components/common/actionAgentTarget.js.map +0 -1
- package/dist/components/common/commandHighlight.js.map +0 -1
- package/dist/components/components/ComponentHealthCell.js.map +0 -1
- package/dist/components/components/ComponentTierBadge.js.map +0 -1
- package/dist/components/components/ComponentsTable.js.map +0 -1
- package/dist/components/docs/DocsCompileStatus.js.map +0 -1
- package/dist/components/docs/DocsEditPanel.js.map +0 -1
- package/dist/components/docs/DocsEmptyState.js.map +0 -1
- package/dist/components/docs/DocsFullScreenViewer.js.map +0 -1
- package/dist/components/docs/DocsPageEditor.js.map +0 -1
- package/dist/components/docs/DocsPageTree.js.map +0 -1
- package/dist/components/docs/DocsPreviewPanel.js.map +0 -1
- package/dist/components/docs/DocsRevisionHistory.js.map +0 -1
- package/dist/components/docs/DocsSettingsPanel.js.map +0 -1
- package/dist/components/docs/DocsTabPanel.js.map +0 -1
- package/dist/components/docs/previewHtml.js.map +0 -1
- package/dist/components/docs/types.js.map +0 -1
- package/dist/components/gitops/CIDurationChart.js.map +0 -1
- package/dist/components/gitops/CIFailedRuns.js.map +0 -1
- package/dist/components/gitops/CIPipelineRunsTable.js.map +0 -1
- package/dist/components/gitops/CISuccessRateChart.js.map +0 -1
- package/dist/components/gitops/CITab.js.map +0 -1
- package/dist/components/gitops/CIWorkflowList.js.map +0 -1
- package/dist/components/gitops/GitOpsProviderPicker.js.map +0 -1
- package/dist/components/gitops/GitOpsSetup.js.map +0 -1
- package/dist/components/gitops/GitOpsSkeleton.js.map +0 -1
- package/dist/components/gitops/GitOpsStatusBadge.js.map +0 -1
- package/dist/components/gitops/ProviderIcon.js.map +0 -1
- package/dist/components/gitops/RepoActivityCard.js.map +0 -1
- package/dist/components/gitops/RepoIssuesCard.js.map +0 -1
- package/dist/components/gitops/RepoLanguagesCard.js.map +0 -1
- package/dist/components/gitops/RepoOverviewCard.js.map +0 -1
- package/dist/components/gitops/RepoPullRequestsCard.js.map +0 -1
- package/dist/components/gitops/RepoSecurityCard.js.map +0 -1
- package/dist/components/gitops/RepoStatsTab.js.map +0 -1
- package/dist/components/gitops/VibeGitOpsTab.js.map +0 -1
- package/dist/components/gitops/types.js.map +0 -1
- package/dist/components/graph/ConnectionPermissionsDialog.js.map +0 -1
- package/dist/components/graph/MeshAgentNode.js.map +0 -1
- package/dist/components/graph/MeshDeployWizard.js.map +0 -1
- package/dist/components/graph/MeshGraphView.js.map +0 -1
- package/dist/components/graph/MeshNodeActions.js.map +0 -1
- package/dist/components/graph/MeshRequestPanel.js.map +0 -1
- package/dist/components/graph/meshTypes.js.map +0 -1
- package/dist/components/graph/nodeIcons.js.map +0 -1
- package/dist/components/idp-components/ComponentCard.js.map +0 -1
- package/dist/components/idp-components/ComponentForm.js.map +0 -1
- package/dist/components/idp-components/DependencyGraphTab.js.map +0 -1
- package/dist/components/logs/LogViewer.js.map +0 -1
- package/dist/components/notes/NoteCard.js.map +0 -1
- package/dist/components/notes/NoteEditor.js.map +0 -1
- package/dist/components/notes/NoteList.js.map +0 -1
- package/dist/components/notes/NotesTabPanel.js.map +0 -1
- package/dist/components/overview/FleetActivityAreaChart.js.map +0 -1
- package/dist/components/overview/FleetActivityChart.js.map +0 -1
- package/dist/components/overview/FleetHealthCard.js.map +0 -1
- package/dist/components/overview/QuickActionsCard.js.map +0 -1
- package/dist/components/overview/useFleetAnalytics.js.map +0 -1
- package/dist/components/plugins/AddTabDialog.js.map +0 -1
- package/dist/components/plugins/FleetRolloutDialog.js.map +0 -1
- package/dist/components/plugins/PluginIframeMount.js.map +0 -1
- package/dist/components/plugins/useFleetPluginMatrix.js.map +0 -1
- package/dist/components/scorecard/MetricTrend.js.map +0 -1
- package/dist/components/scorecard/ScorecardEmptyState.js.map +0 -1
- package/dist/components/scorecard/ScorecardPanel.js.map +0 -1
- package/dist/components/scorecard/ScorecardsOverviewPanel.js.map +0 -1
- package/dist/components/scorecard/scorecardConstants.js.map +0 -1
- package/dist/components/security/SecurityRunButton.js.map +0 -1
- package/dist/components/security/SecurityScanList.js.map +0 -1
- package/dist/components/security/SecurityTabPanel.js.map +0 -1
- package/dist/components/security/agentClient.js.map +0 -1
- package/dist/components/security/hooks.js.map +0 -1
- package/dist/components/security/types.js.map +0 -1
- package/dist/components/sessions/CollaboratorsList.js.map +0 -1
- package/dist/components/sessions/ControlStatusBar.js.map +0 -1
- package/dist/components/sessions/EntityInfoPopover.js.map +0 -1
- package/dist/components/sessions/SessionCard.js.map +0 -1
- package/dist/components/sessions/SessionGroup.js.map +0 -1
- package/dist/components/sessions/SessionInfoPanel.js.map +0 -1
- package/dist/components/sessions/SessionList.js.map +0 -1
- package/dist/components/sessions/SessionPublicLinkPanel.js.map +0 -1
- package/dist/components/sessions/SessionShareDialog.js.map +0 -1
- package/dist/components/sessions/SessionStatusBadge.js.map +0 -1
- package/dist/components/sessions/SessionWorkbenchDrawer.js.map +0 -1
- package/dist/components/sessions/SessionsCommandPalette.js.map +0 -1
- package/dist/components/sessions/SharedTerminalPanel.js.map +0 -1
- package/dist/components/sessions/ShortcutCheatsheet.js.map +0 -1
- package/dist/components/sessions/TerminalIframe.js.map +0 -1
- package/dist/components/sessions/TerminalPanel.js.map +0 -1
- package/dist/components/sessions/groupSessions.js.map +0 -1
- package/dist/components/sessions/sessionShortcuts.js.map +0 -1
- package/dist/components/settings/AdvancedSection.js.map +0 -1
- package/dist/components/settings/IdePreferencesSection.js.map +0 -1
- package/dist/components/settings/NotificationsSection.js.map +0 -1
- package/dist/components/settings/SettingsForm.js.map +0 -1
- package/dist/components/settings/WorkspaceDefaultsSection.js.map +0 -1
- package/dist/components/shared/ActionMenu.js.map +0 -1
- package/dist/components/shared/AgentEventsConnector.js.map +0 -1
- package/dist/components/shared/AgentSelector.js.map +0 -1
- package/dist/components/shared/AgentSetupBanner.js.map +0 -1
- package/dist/components/shared/Card.js.map +0 -1
- package/dist/components/shared/ConfirmDialog.js.map +0 -1
- package/dist/components/shared/EmptyState.js.map +0 -1
- package/dist/components/shared/EnableRemoteTaskDialog.js.map +0 -1
- package/dist/components/shared/EntityTagPicker.js.map +0 -1
- package/dist/components/shared/EntityVibeLinkControl.js.map +0 -1
- package/dist/components/shared/ErrorState.js.map +0 -1
- package/dist/components/shared/FilterDropdown.js.map +0 -1
- package/dist/components/shared/GetHelpButton.js.map +0 -1
- package/dist/components/shared/InstallTabs.js.map +0 -1
- package/dist/components/shared/LinkToVibePanel.js.map +0 -1
- package/dist/components/shared/LoadingState.js.map +0 -1
- package/dist/components/shared/MotionTabPanel.js.map +0 -1
- package/dist/components/shared/NotificationToast.js.map +0 -1
- package/dist/components/shared/PageHeader.js.map +0 -1
- package/dist/components/shared/PageSkeleton.js.map +0 -1
- package/dist/components/shared/PlatformIcon.js.map +0 -1
- package/dist/components/shared/PluginGate.js.map +0 -1
- package/dist/components/shared/PromptDialog.js.map +0 -1
- package/dist/components/shared/QuotaExhaustedDialog.js.map +0 -1
- package/dist/components/shared/RequireAgentReachable.js.map +0 -1
- package/dist/components/shared/SearchInput.js.map +0 -1
- package/dist/components/shared/SearchableSelect.js.map +0 -1
- package/dist/components/shared/SelectionCheckbox.js.map +0 -1
- package/dist/components/shared/SessionNotificationBanner.js.map +0 -1
- package/dist/components/shared/StatCard.js.map +0 -1
- package/dist/components/shared/StatusBadge.js.map +0 -1
- package/dist/components/shared/TagFilter.js.map +0 -1
- package/dist/components/shared/cardMotion.js.map +0 -1
- package/dist/components/shared/platformIconPaths.js.map +0 -1
- package/dist/components/sharing/EntityShareButton.js.map +0 -1
- package/dist/components/sharing/NoteShareDialog.js.map +0 -1
- package/dist/components/sharing/SharedWithMePanel.js.map +0 -1
- package/dist/components/sharing/VibeShareButton.js.map +0 -1
- package/dist/components/sharing/entityShareOps.js.map +0 -1
- package/dist/components/sharing/shareControllerTypes.js.map +0 -1
- package/dist/components/sharing/shareRegistry.js.map +0 -1
- package/dist/components/sharing/useEntityShareController.js.map +0 -1
- package/dist/components/sharing/useNoteShareController.js.map +0 -1
- package/dist/components/sharing/useVibeShareController.js.map +0 -1
- package/dist/components/targets/TargetCard.js.map +0 -1
- package/dist/components/templates/PublishTemplateForm.js.map +0 -1
- package/dist/components/templates/TemplateCard.js.map +0 -1
- package/dist/components/templates/TemplateVariableEditor.js.map +0 -1
- package/dist/components/templates/TemplateWizard.js.map +0 -1
- package/dist/components/tunnels/DomainVerificationBadge.js.map +0 -1
- package/dist/components/tunnels/ProviderBadge.js.map +0 -1
- package/dist/components/tunnels/TunnelCard.js.map +0 -1
- package/dist/components/tunnels/TunnelConnectionCard.js.map +0 -1
- package/dist/components/tunnels/TunnelCopyButton.js.map +0 -1
- package/dist/components/tunnels/TunnelCreateWizard.js.map +0 -1
- package/dist/components/tunnels/TunnelMetricTiles.js.map +0 -1
- package/dist/components/tunnels/TunnelPublicAccessPanel.js.map +0 -1
- package/dist/components/tunnels/TunnelSparkline.js.map +0 -1
- package/dist/components/tunnels/TunnelStatusBadge.js.map +0 -1
- package/dist/components/tunnels/tunnelEndpoints.js.map +0 -1
- package/dist/components/tunnels/tunnelMetrics.js.map +0 -1
- package/dist/components/vibe/VibeAgentEmptyState.js.map +0 -1
- package/dist/components/vibe/VibeAgentSwitcher.js.map +0 -1
- package/dist/components/vibe/VibeEnvVarsPanel.js.map +0 -1
- package/dist/components/vibe/VibeLinkedEntitiesPanel.js.map +0 -1
- package/dist/components/vibe/VibeLlmContextAdminPanel.js.map +0 -1
- package/dist/components/vibe/VibeLlmContextTabPanel.js.map +0 -1
- package/dist/components/vibecalendar/LogsDrawer.js.map +0 -1
- package/dist/components/vibecalendar/ScheduleTaskModal.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalAgendaView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalDayView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalMonthView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalWeekView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalendarHeader.js.map +0 -1
- package/dist/components/vibecalendar/VibeTaskBlock.js.map +0 -1
- package/dist/components/vibecalendar/expandOccurrences.js.map +0 -1
- package/dist/components/vibecalendar/types.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonForm.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonTile.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckExecutionLog.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckForm.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckGrid.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckShareDialog.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckSwitcher.js.map +0 -1
- package/dist/components/vibes/DeleteVibeDialog.js.map +0 -1
- package/dist/components/vibes/VibeCard.js.map +0 -1
- package/dist/components/vibes/VibeList.js.map +0 -1
- package/dist/components/vibes/icons.js.map +0 -1
- package/dist/components/webhooks/types.js.map +0 -1
- package/dist/config/assistantUsecases.js.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/constants/aiTabs.js.map +0 -1
- package/dist/constants/permissions.js.map +0 -1
- package/dist/constants/pluginCatalog.js.map +0 -1
- package/dist/generated/wspace-operations.js.map +0 -1
- package/dist/generated/wspace-types.js.map +0 -1
- package/dist/hooks/useActiveAgentProfile.js.map +0 -1
- package/dist/hooks/useAgentConnectivity.js.map +0 -1
- package/dist/hooks/useAgentEvents.js.map +0 -1
- package/dist/hooks/useAgentManagerKeyboard.js.map +0 -1
- package/dist/hooks/useAgentManagerStreaming.js.map +0 -1
- package/dist/hooks/useAiCreditsQuota.js.map +0 -1
- package/dist/hooks/useCachedInitialData.js.map +0 -1
- package/dist/hooks/useDraftEntityTags.js.map +0 -1
- package/dist/hooks/useEntityTags.js.map +0 -1
- package/dist/hooks/useGitops.js.map +0 -1
- package/dist/hooks/useInitialDataLoader.js.map +0 -1
- package/dist/hooks/useOfferedAssistantMode.js.map +0 -1
- package/dist/hooks/useOpenAssistantHelp.js.map +0 -1
- package/dist/hooks/usePluginAvailability.js.map +0 -1
- package/dist/hooks/useQueryBackedTab.js.map +0 -1
- package/dist/hooks/useTenantContext.js.map +0 -1
- package/dist/hooks/useTerminalCapabilityUrl.js.map +0 -1
- package/dist/hooks/useToggleAgentBookmark.js.map +0 -1
- package/dist/hooks/useVoiceMode.js.map +0 -1
- package/dist/hooks/useWorkspaceWriteAccess.js.map +0 -1
- package/dist/lib/apolloCache.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/vibeFeatures.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/ServerError.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/ServerParseError.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/utils.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch/batchLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch/batching.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch-http/BaseBatchHttpLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch-http/batchHttpLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/client-awareness/ClientAwarenessLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/checkFetcher.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/parseAndCheckHttpResponse.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/selectHttpOptionsAndBody.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/selectURI.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/utils/filterOperationVariables.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/compact.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +0 -1
- package/dist/node_modules/@apollo/client/version.js.map +0 -1
- package/dist/node_modules/@wry/caches/lib/weak.js.map +0 -1
- package/dist/node_modules/@wry/trie/lib/index.js.map +0 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
- package/dist/node_modules/d3-array/src/descending.js.map +0 -1
- package/dist/node_modules/d3-array/src/max.js.map +0 -1
- package/dist/node_modules/d3-array/src/min.js.map +0 -1
- package/dist/node_modules/d3-array/src/number.js.map +0 -1
- package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
- package/dist/node_modules/d3-array/src/range.js.map +0 -1
- package/dist/node_modules/d3-array/src/sort.js.map +0 -1
- package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-color/src/color.js.map +0 -1
- package/dist/node_modules/d3-color/src/define.js.map +0 -1
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
- package/dist/node_modules/d3-format/src/identity.js.map +0 -1
- package/dist/node_modules/d3-format/src/locale.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
- package/dist/node_modules/d3-path/src/path.js.map +0 -1
- package/dist/node_modules/d3-scale/src/band.js.map +0 -1
- package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
- package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
- package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
- package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
- package/dist/node_modules/d3-scale/src/init.js.map +0 -1
- package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
- package/dist/node_modules/d3-scale/src/log.js.map +0 -1
- package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
- package/dist/node_modules/d3-scale/src/number.js.map +0 -1
- package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
- package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
- package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
- package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
- package/dist/node_modules/d3-scale/src/time.js.map +0 -1
- package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
- package/dist/node_modules/d3-shape/src/area.js.map +0 -1
- package/dist/node_modules/d3-shape/src/array.js.map +0 -1
- package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
- package/dist/node_modules/d3-shape/src/line.js.map +0 -1
- package/dist/node_modules/d3-shape/src/math.js.map +0 -1
- package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/path.js.map +0 -1
- package/dist/node_modules/d3-shape/src/point.js.map +0 -1
- package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
- package/dist/node_modules/d3-time/src/day.js.map +0 -1
- package/dist/node_modules/d3-time/src/duration.js.map +0 -1
- package/dist/node_modules/d3-time/src/hour.js.map +0 -1
- package/dist/node_modules/d3-time/src/interval.js.map +0 -1
- package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
- package/dist/node_modules/d3-time/src/minute.js.map +0 -1
- package/dist/node_modules/d3-time/src/month.js.map +0 -1
- package/dist/node_modules/d3-time/src/second.js.map +0 -1
- package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-time/src/week.js.map +0 -1
- package/dist/node_modules/d3-time/src/year.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
- package/dist/node_modules/dagre/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/acyclic.js.map +0 -1
- package/dist/node_modules/dagre/lib/add-border-segments.js.map +0 -1
- package/dist/node_modules/dagre/lib/coordinate-system.js.map +0 -1
- package/dist/node_modules/dagre/lib/data/list.js.map +0 -1
- package/dist/node_modules/dagre/lib/debug.js.map +0 -1
- package/dist/node_modules/dagre/lib/graphlib.js.map +0 -1
- package/dist/node_modules/dagre/lib/greedy-fas.js.map +0 -1
- package/dist/node_modules/dagre/lib/layout.js.map +0 -1
- package/dist/node_modules/dagre/lib/lodash.js.map +0 -1
- package/dist/node_modules/dagre/lib/nesting-graph.js.map +0 -1
- package/dist/node_modules/dagre/lib/normalize.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/barycenter.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/cross-count.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/init-order.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/sort.js.map +0 -1
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js.map +0 -1
- package/dist/node_modules/dagre/lib/position/bk.js.map +0 -1
- package/dist/node_modules/dagre/lib/position/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/network-simplex.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/util.js.map +0 -1
- package/dist/node_modules/dagre/lib/util.js.map +0 -1
- package/dist/node_modules/dagre/lib/version.js.map +0 -1
- package/dist/node_modules/decimal.js-light/decimal.js.map +0 -1
- package/dist/node_modules/eventemitter3/index.js.map +0 -1
- package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
- package/dist/node_modules/graphlib/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/components.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dfs.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/postorder.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/preorder.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/prim.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/tarjan.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/topsort.js.map +0 -1
- package/dist/node_modules/graphlib/lib/data/priority-queue.js.map +0 -1
- package/dist/node_modules/graphlib/lib/graph.js.map +0 -1
- package/dist/node_modules/graphlib/lib/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/json.js.map +0 -1
- package/dist/node_modules/graphlib/lib/lodash.js.map +0 -1
- package/dist/node_modules/graphlib/lib/version.js.map +0 -1
- package/dist/node_modules/internmap/src/index.js.map +0 -1
- package/dist/node_modules/lodash/_DataView.js.map +0 -1
- package/dist/node_modules/lodash/_Hash.js.map +0 -1
- package/dist/node_modules/lodash/_ListCache.js.map +0 -1
- package/dist/node_modules/lodash/_Map.js.map +0 -1
- package/dist/node_modules/lodash/_MapCache.js.map +0 -1
- package/dist/node_modules/lodash/_Promise.js.map +0 -1
- package/dist/node_modules/lodash/_Set.js.map +0 -1
- package/dist/node_modules/lodash/_SetCache.js.map +0 -1
- package/dist/node_modules/lodash/_Stack.js.map +0 -1
- package/dist/node_modules/lodash/_Symbol.js.map +0 -1
- package/dist/node_modules/lodash/_Uint8Array.js.map +0 -1
- package/dist/node_modules/lodash/_WeakMap.js.map +0 -1
- package/dist/node_modules/lodash/_apply.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEach.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEvery.js.map +0 -1
- package/dist/node_modules/lodash/_arrayFilter.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludes.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +0 -1
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_arrayMap.js.map +0 -1
- package/dist/node_modules/lodash/_arrayPush.js.map +0 -1
- package/dist/node_modules/lodash/_arrayReduce.js.map +0 -1
- package/dist/node_modules/lodash/_arraySome.js.map +0 -1
- package/dist/node_modules/lodash/_asciiSize.js.map +0 -1
- package/dist/node_modules/lodash/_asciiToArray.js.map +0 -1
- package/dist/node_modules/lodash/_assignMergeValue.js.map +0 -1
- package/dist/node_modules/lodash/_assignValue.js.map +0 -1
- package/dist/node_modules/lodash/_assocIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssign.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignValue.js.map +0 -1
- package/dist/node_modules/lodash/_baseClone.js.map +0 -1
- package/dist/node_modules/lodash/_baseCreate.js.map +0 -1
- package/dist/node_modules/lodash/_baseEach.js.map +0 -1
- package/dist/node_modules/lodash/_baseEvery.js.map +0 -1
- package/dist/node_modules/lodash/_baseExtremum.js.map +0 -1
- package/dist/node_modules/lodash/_baseFilter.js.map +0 -1
- package/dist/node_modules/lodash/_baseFindIndex.js.map +0 -1
- package/dist/node_modules/lodash/_baseFlatten.js.map +0 -1
- package/dist/node_modules/lodash/_baseFor.js.map +0 -1
- package/dist/node_modules/lodash/_baseForOwn.js.map +0 -1
- package/dist/node_modules/lodash/_baseGet.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetTag.js.map +0 -1
- package/dist/node_modules/lodash/_baseGt.js.map +0 -1
- package/dist/node_modules/lodash/_baseHas.js.map +0 -1
- package/dist/node_modules/lodash/_baseHasIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsArguments.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqual.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMatch.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNaN.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNative.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsSet.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_baseIteratee.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseLt.js.map +0 -1
- package/dist/node_modules/lodash/_baseMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatches.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +0 -1
- package/dist/node_modules/lodash/_baseMerge.js.map +0 -1
- package/dist/node_modules/lodash/_baseMergeDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseOrderBy.js.map +0 -1
- package/dist/node_modules/lodash/_basePick.js.map +0 -1
- package/dist/node_modules/lodash/_basePickBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseProperty.js.map +0 -1
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseRange.js.map +0 -1
- package/dist/node_modules/lodash/_baseReduce.js.map +0 -1
- package/dist/node_modules/lodash/_baseRest.js.map +0 -1
- package/dist/node_modules/lodash/_baseSet.js.map +0 -1
- package/dist/node_modules/lodash/_baseSetToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseSlice.js.map +0 -1
- package/dist/node_modules/lodash/_baseSome.js.map +0 -1
- package/dist/node_modules/lodash/_baseSortBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseTimes.js.map +0 -1
- package/dist/node_modules/lodash/_baseToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseTrim.js.map +0 -1
- package/dist/node_modules/lodash/_baseUnary.js.map +0 -1
- package/dist/node_modules/lodash/_baseUniq.js.map +0 -1
- package/dist/node_modules/lodash/_baseValues.js.map +0 -1
- package/dist/node_modules/lodash/_baseZipObject.js.map +0 -1
- package/dist/node_modules/lodash/_cacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_castFunction.js.map +0 -1
- package/dist/node_modules/lodash/_castPath.js.map +0 -1
- package/dist/node_modules/lodash/_castSlice.js.map +0 -1
- package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneDataView.js.map +0 -1
- package/dist/node_modules/lodash/_cloneRegExp.js.map +0 -1
- package/dist/node_modules/lodash/_cloneSymbol.js.map +0 -1
- package/dist/node_modules/lodash/_cloneTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_compareAscending.js.map +0 -1
- package/dist/node_modules/lodash/_compareMultiple.js.map +0 -1
- package/dist/node_modules/lodash/_copyArray.js.map +0 -1
- package/dist/node_modules/lodash/_copyObject.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbols.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_coreJsData.js.map +0 -1
- package/dist/node_modules/lodash/_createAssigner.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseEach.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseFor.js.map +0 -1
- package/dist/node_modules/lodash/_createCaseFirst.js.map +0 -1
- package/dist/node_modules/lodash/_createFind.js.map +0 -1
- package/dist/node_modules/lodash/_createRange.js.map +0 -1
- package/dist/node_modules/lodash/_createSet.js.map +0 -1
- package/dist/node_modules/lodash/_defineProperty.js.map +0 -1
- package/dist/node_modules/lodash/_equalArrays.js.map +0 -1
- package/dist/node_modules/lodash/_equalByTag.js.map +0 -1
- package/dist/node_modules/lodash/_equalObjects.js.map +0 -1
- package/dist/node_modules/lodash/_flatRest.js.map +0 -1
- package/dist/node_modules/lodash/_freeGlobal.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_getMapData.js.map +0 -1
- package/dist/node_modules/lodash/_getMatchData.js.map +0 -1
- package/dist/node_modules/lodash/_getNative.js.map +0 -1
- package/dist/node_modules/lodash/_getPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_getRawTag.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbols.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_getTag.js.map +0 -1
- package/dist/node_modules/lodash/_getValue.js.map +0 -1
- package/dist/node_modules/lodash/_hasPath.js.map +0 -1
- package/dist/node_modules/lodash/_hasUnicode.js.map +0 -1
- package/dist/node_modules/lodash/_hashClear.js.map +0 -1
- package/dist/node_modules/lodash/_hashDelete.js.map +0 -1
- package/dist/node_modules/lodash/_hashGet.js.map +0 -1
- package/dist/node_modules/lodash/_hashHas.js.map +0 -1
- package/dist/node_modules/lodash/_hashSet.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneArray.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneByTag.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneObject.js.map +0 -1
- package/dist/node_modules/lodash/_isFlattenable.js.map +0 -1
- package/dist/node_modules/lodash/_isIndex.js.map +0 -1
- package/dist/node_modules/lodash/_isIterateeCall.js.map +0 -1
- package/dist/node_modules/lodash/_isKey.js.map +0 -1
- package/dist/node_modules/lodash/_isKeyable.js.map +0 -1
- package/dist/node_modules/lodash/_isMasked.js.map +0 -1
- package/dist/node_modules/lodash/_isPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_isStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapToArray.js.map +0 -1
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_memoizeCapped.js.map +0 -1
- package/dist/node_modules/lodash/_nativeCreate.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_nodeUtil.js.map +0 -1
- package/dist/node_modules/lodash/_objectToString.js.map +0 -1
- package/dist/node_modules/lodash/_overArg.js.map +0 -1
- package/dist/node_modules/lodash/_overRest.js.map +0 -1
- package/dist/node_modules/lodash/_root.js.map +0 -1
- package/dist/node_modules/lodash/_safeGet.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheAdd.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_setToArray.js.map +0 -1
- package/dist/node_modules/lodash/_setToString.js.map +0 -1
- package/dist/node_modules/lodash/_shortOut.js.map +0 -1
- package/dist/node_modules/lodash/_stackClear.js.map +0 -1
- package/dist/node_modules/lodash/_stackDelete.js.map +0 -1
- package/dist/node_modules/lodash/_stackGet.js.map +0 -1
- package/dist/node_modules/lodash/_stackHas.js.map +0 -1
- package/dist/node_modules/lodash/_stackSet.js.map +0 -1
- package/dist/node_modules/lodash/_strictIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_stringSize.js.map +0 -1
- package/dist/node_modules/lodash/_stringToArray.js.map +0 -1
- package/dist/node_modules/lodash/_stringToPath.js.map +0 -1
- package/dist/node_modules/lodash/_toKey.js.map +0 -1
- package/dist/node_modules/lodash/_toSource.js.map +0 -1
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +0 -1
- package/dist/node_modules/lodash/_unicodeSize.js.map +0 -1
- package/dist/node_modules/lodash/_unicodeToArray.js.map +0 -1
- package/dist/node_modules/lodash/clone.js.map +0 -1
- package/dist/node_modules/lodash/cloneDeep.js.map +0 -1
- package/dist/node_modules/lodash/constant.js.map +0 -1
- package/dist/node_modules/lodash/debounce.js.map +0 -1
- package/dist/node_modules/lodash/defaults.js.map +0 -1
- package/dist/node_modules/lodash/each.js.map +0 -1
- package/dist/node_modules/lodash/eq.js.map +0 -1
- package/dist/node_modules/lodash/every.js.map +0 -1
- package/dist/node_modules/lodash/filter.js.map +0 -1
- package/dist/node_modules/lodash/find.js.map +0 -1
- package/dist/node_modules/lodash/findIndex.js.map +0 -1
- package/dist/node_modules/lodash/flatMap.js.map +0 -1
- package/dist/node_modules/lodash/flatten.js.map +0 -1
- package/dist/node_modules/lodash/forEach.js.map +0 -1
- package/dist/node_modules/lodash/forIn.js.map +0 -1
- package/dist/node_modules/lodash/get.js.map +0 -1
- package/dist/node_modules/lodash/has.js.map +0 -1
- package/dist/node_modules/lodash/hasIn.js.map +0 -1
- package/dist/node_modules/lodash/identity.js.map +0 -1
- package/dist/node_modules/lodash/isArguments.js.map +0 -1
- package/dist/node_modules/lodash/isArray.js.map +0 -1
- package/dist/node_modules/lodash/isArrayLike.js.map +0 -1
- package/dist/node_modules/lodash/isArrayLikeObject.js.map +0 -1
- package/dist/node_modules/lodash/isBoolean.js.map +0 -1
- package/dist/node_modules/lodash/isBuffer.js.map +0 -1
- package/dist/node_modules/lodash/isEmpty.js.map +0 -1
- package/dist/node_modules/lodash/isEqual.js.map +0 -1
- package/dist/node_modules/lodash/isFunction.js.map +0 -1
- package/dist/node_modules/lodash/isLength.js.map +0 -1
- package/dist/node_modules/lodash/isMap.js.map +0 -1
- package/dist/node_modules/lodash/isNaN.js.map +0 -1
- package/dist/node_modules/lodash/isNil.js.map +0 -1
- package/dist/node_modules/lodash/isNumber.js.map +0 -1
- package/dist/node_modules/lodash/isObject.js.map +0 -1
- package/dist/node_modules/lodash/isObjectLike.js.map +0 -1
- package/dist/node_modules/lodash/isPlainObject.js.map +0 -1
- package/dist/node_modules/lodash/isSet.js.map +0 -1
- package/dist/node_modules/lodash/isString.js.map +0 -1
- package/dist/node_modules/lodash/isSymbol.js.map +0 -1
- package/dist/node_modules/lodash/isTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/isUndefined.js.map +0 -1
- package/dist/node_modules/lodash/keys.js.map +0 -1
- package/dist/node_modules/lodash/keysIn.js.map +0 -1
- package/dist/node_modules/lodash/last.js.map +0 -1
- package/dist/node_modules/lodash/map.js.map +0 -1
- package/dist/node_modules/lodash/mapValues.js.map +0 -1
- package/dist/node_modules/lodash/max.js.map +0 -1
- package/dist/node_modules/lodash/maxBy.js.map +0 -1
- package/dist/node_modules/lodash/memoize.js.map +0 -1
- package/dist/node_modules/lodash/merge.js.map +0 -1
- package/dist/node_modules/lodash/min.js.map +0 -1
- package/dist/node_modules/lodash/minBy.js.map +0 -1
- package/dist/node_modules/lodash/noop.js.map +0 -1
- package/dist/node_modules/lodash/now.js.map +0 -1
- package/dist/node_modules/lodash/pick.js.map +0 -1
- package/dist/node_modules/lodash/property.js.map +0 -1
- package/dist/node_modules/lodash/range.js.map +0 -1
- package/dist/node_modules/lodash/reduce.js.map +0 -1
- package/dist/node_modules/lodash/size.js.map +0 -1
- package/dist/node_modules/lodash/some.js.map +0 -1
- package/dist/node_modules/lodash/sortBy.js.map +0 -1
- package/dist/node_modules/lodash/stubArray.js.map +0 -1
- package/dist/node_modules/lodash/stubFalse.js.map +0 -1
- package/dist/node_modules/lodash/throttle.js.map +0 -1
- package/dist/node_modules/lodash/toFinite.js.map +0 -1
- package/dist/node_modules/lodash/toInteger.js.map +0 -1
- package/dist/node_modules/lodash/toNumber.js.map +0 -1
- package/dist/node_modules/lodash/toPlainObject.js.map +0 -1
- package/dist/node_modules/lodash/toString.js.map +0 -1
- package/dist/node_modules/lodash/transform.js.map +0 -1
- package/dist/node_modules/lodash/union.js.map +0 -1
- package/dist/node_modules/lodash/uniqBy.js.map +0 -1
- package/dist/node_modules/lodash/uniqueId.js.map +0 -1
- package/dist/node_modules/lodash/upperFirst.js.map +0 -1
- package/dist/node_modules/lodash/values.js.map +0 -1
- package/dist/node_modules/lodash/zipObject.js.map +0 -1
- package/dist/node_modules/object-assign/index.js.map +0 -1
- package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
- package/dist/node_modules/prop-types/index.js.map +0 -1
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
- package/dist/node_modules/prop-types/lib/has.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/Animate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/easing.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/util.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/PieChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cell.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Label.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Legend.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Text.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Layer.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Surface.js.map +0 -1
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/Pie.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Polygon.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Events.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Global.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/types.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/throwError.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +0 -1
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +0 -1
- package/dist/pages/ActionsPage.js.map +0 -1
- package/dist/pages/AgentDetailsPage.js.map +0 -1
- package/dist/pages/AgentGraphPage.js.map +0 -1
- package/dist/pages/AgentsLandingPage.js.map +0 -1
- package/dist/pages/AgentsPage.js.map +0 -1
- package/dist/pages/AnalyticsPage.js.map +0 -1
- package/dist/pages/CatalogDetailPage.js.map +0 -1
- package/dist/pages/CatalogDocsPage.js.map +0 -1
- package/dist/pages/CatalogPage.js.map +0 -1
- package/dist/pages/ComponentDetailPage.js.map +0 -1
- package/dist/pages/ComponentDocsPage.js.map +0 -1
- package/dist/pages/ComponentsPage.js.map +0 -1
- package/dist/pages/EnvTopologyPage.js.map +0 -1
- package/dist/pages/GettingStartedPage.js.map +0 -1
- package/dist/pages/HealthPage.js.map +0 -1
- package/dist/pages/LogsPage.js.map +0 -1
- package/dist/pages/NoteDetailsPage.js.map +0 -1
- package/dist/pages/OverviewPage.js.map +0 -1
- package/dist/pages/PluginDetailPage.js.map +0 -1
- package/dist/pages/PluginsCatalogPage.js.map +0 -1
- package/dist/pages/ScheduledJobDetailPage.js.map +0 -1
- package/dist/pages/SessionDetailsPage.js.map +0 -1
- package/dist/pages/SessionsPage.js.map +0 -1
- package/dist/pages/SettingsPage.js.map +0 -1
- package/dist/pages/SharedSessionPage.js.map +0 -1
- package/dist/pages/SharedVibeDeckPage.js.map +0 -1
- package/dist/pages/TargetDetailsPage.js.map +0 -1
- package/dist/pages/TargetsPage.js.map +0 -1
- package/dist/pages/TemplateDetailPage.js.map +0 -1
- package/dist/pages/TemplatesPage.js.map +0 -1
- package/dist/pages/TunnelsLandingPage.js.map +0 -1
- package/dist/pages/VibeAuditPage.js.map +0 -1
- package/dist/pages/VibeCalendarPage.js.map +0 -1
- package/dist/pages/VibeDeckPage.js.map +0 -1
- package/dist/pages/VibeDetailsPage.js.map +0 -1
- package/dist/pages/VibeDocsPage.js.map +0 -1
- package/dist/pages/VibeTaskDetailPage.js.map +0 -1
- package/dist/pages/VibesPage.js.map +0 -1
- package/dist/pages/WebhooksPage.js.map +0 -1
- package/dist/pages/ai/AIBookmarksPage.js.map +0 -1
- package/dist/pages/ai/AIBuilderPage.js.map +0 -1
- package/dist/pages/ai/AIPage.js.map +0 -1
- package/dist/pages/ai/AISessionDetailPage.js.map +0 -1
- package/dist/pages/ai/AgentManagerPage.js.map +0 -1
- package/dist/pages/tunnels/AuditTab.js.map +0 -1
- package/dist/pages/tunnels/DomainsTab.js.map +0 -1
- package/dist/pages/tunnels/ProvidersTab.js.map +0 -1
- package/dist/pages/tunnels/SessionsTab.js.map +0 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +0 -1
- package/dist/pages/tunnels/TunnelsTab.js.map +0 -1
- package/dist/pages/tunnels/UsageTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelAuditTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelCliTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelUsageTab.js.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/dist/providers/AgentEventsProvider.js.map +0 -1
- package/dist/providers/QuotaExhaustedProvider.js.map +0 -1
- package/dist/providers/VibeControlsProvider.js.map +0 -1
- package/dist/services/agentRemoteTaskGates.js.map +0 -1
- package/dist/services/aiApi.js.map +0 -1
- package/dist/services/assistantApi.js.map +0 -1
- package/dist/services/createSandboxAssistantTransport.js.map +0 -1
- package/dist/services/gitopsApi.js.map +0 -1
- package/dist/services/iframeToken.js.map +0 -1
- package/dist/services/planApi.js.map +0 -1
- package/dist/services/schedulerApi.js.map +0 -1
- package/dist/shared/hooks/useField.js.map +0 -1
- package/dist/shared/hooks/useTr.js.map +0 -1
- package/dist/store/agentManagerStore.js.map +0 -1
- package/dist/store/vibeControlsStore.js.map +0 -1
- package/dist/translations/en.js.map +0 -1
- package/dist/types/assistant.js.map +0 -1
- package/dist/utils/agentApiPath.js.map +0 -1
- package/dist/utils/agentHealth.js.map +0 -1
- package/dist/utils/agentStatus.js.map +0 -1
- package/dist/utils/agentVisibility.js.map +0 -1
- package/dist/utils/aiCredits.js.map +0 -1
- package/dist/utils/aiCreditsLedger.js.map +0 -1
- package/dist/utils/aiSessionNotFound.js.map +0 -1
- package/dist/utils/assistantPrompt.js.map +0 -1
- package/dist/utils/onboardingUtils.js.map +0 -1
- package/dist/utils/pageContext.js.map +0 -1
- package/dist/utils/quotaUtils.js.map +0 -1
- package/dist/utils/randomSessionName.js.map +0 -1
- package/dist/utils/relativeTime.js.map +0 -1
- package/dist/utils/shareUrl.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateWizard.js","names":[],"sources":["../../../src/components/templates/TemplateWizard.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Copy, ChevronRight, Check, X, Github, Eye, EyeOff } from 'lucide-react';\nimport type { TemplateVariable } from './TemplateVariableEditor';\n\nexport interface GitHubConfig {\n enabled: boolean;\n /** When set, the backend resolves the token via the OAuth connection (token stays server-side) */\n connectionId: string | null;\n repoName: string;\n visibility: 'public' | 'private';\n scope: 'user' | 'org';\n orgName: string;\n /** Personal access token — only used when connectionId is null */\n token: string;\n}\n\nexport interface GitHubConnection {\n id: string;\n name: string;\n externalAccountEmail?: string | null;\n externalAccountName?: string | null;\n provider: { key: string; name: string };\n}\n\ninterface TemplateWizardProps {\n templateName: string;\n variables: TemplateVariable[];\n /** URL of the template's source component repository, used for forking */\n sourceRepoUrl?: string | null;\n /** Active GitHub OAuth connections for the current workspace */\n githubConnections?: GitHubConnection[];\n onClose: () => void;\n onSubmit: (data: {\n name: string;\n description: string;\n variableValues: Record<string, unknown>;\n githubConfig: GitHubConfig | null;\n }) => Promise<void>;\n}\n\nconst inputCls =\n 'w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder focus:outline-none focus:border-action-primary-bg text-sm';\n\nfunction toKebab(s: string) {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\nexport const TemplateWizard: FC<TemplateWizardProps> = ({\n templateName,\n variables,\n sourceRepoUrl,\n githubConnections = [],\n onClose,\n onSubmit,\n}) => {\n const hasVariables = variables.length > 0;\n\n // Steps: 0=BasicInfo, 1=Variables(if any), N-1=GitHub, N=Review\n const steps = [\n 'Basic Info',\n ...(hasVariables ? ['Configure Variables'] : []),\n 'GitHub Repo',\n 'Review',\n ];\n const totalSteps = steps.length;\n const githubStep = hasVariables ? 2 : 1;\n const reviewStep = hasVariables ? 3 : 2;\n\n const [step, setStep] = useState(0);\n const [name, setName] = useState('');\n const [description, setDescription] = useState('');\n const [varValues, setVarValues] = useState<Record<string, string>>(() => {\n const init: Record<string, string> = {};\n for (const v of variables) init[v.name] = v.default || '';\n return init;\n });\n\n const hasConnections = githubConnections.length > 0;\n const [githubAuthMode, setGithubAuthMode] = useState<'connection' | 'pat'>(\n hasConnections ? 'connection' : 'pat'\n );\n const [github, setGithub] = useState<GitHubConfig>({\n enabled: !!sourceRepoUrl,\n connectionId: hasConnections ? githubConnections[0].id : null,\n repoName: '',\n visibility: 'private',\n scope: 'user',\n orgName: '',\n token: '',\n });\n\n const [showToken, setShowToken] = useState(false);\n\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const updateGithub = (patch: Partial<GitHubConfig>) => setGithub((g) => ({ ...g, ...patch }));\n\n // Keep repoName in sync with component name (only if user hasn't manually changed it)\n const [repoNameTouched, setRepoNameTouched] = useState(false);\n\n const handleNameChange = (v: string) => {\n setName(v);\n if (!repoNameTouched) {\n updateGithub({ repoName: toKebab(v) });\n }\n };\n\n const canProceed = (): boolean => {\n if (step === 0) return name.trim().length > 0;\n if (step === 1 && hasVariables) {\n return variables.filter((v) => v.required).every((v) => varValues[v.name]?.trim());\n }\n if (step === githubStep) {\n if (sourceRepoUrl && !github.enabled) return false;\n if (github.enabled) {\n if (!github.repoName.trim()) return false;\n if (github.scope === 'org' && !github.orgName.trim()) return false;\n if (githubAuthMode === 'connection') {\n if (!hasConnections) return false;\n } else {\n if (!github.token.trim()) return false;\n }\n }\n }\n return true;\n };\n\n const next = () => {\n if (!canProceed()) {\n if (step === 0) setError('Component name is required');\n else if (step === 1 && hasVariables) setError('Please fill in all required fields');\n else if (step === githubStep)\n setError(\n sourceRepoUrl\n ? 'A GitHub repository is required to fork this template — enable it and fill in the details'\n : 'Repo name, org (if applicable), and token are required to create a GitHub repo'\n );\n return;\n }\n setError(null);\n setStep((s) => Math.min(s + 1, totalSteps - 1));\n };\n\n const back = () => setStep((s) => Math.max(s - 1, 0));\n\n const handleSubmit = async () => {\n setLoading(true);\n setError(null);\n try {\n const variableValues: Record<string, unknown> = {};\n for (const v of variables) {\n const val = varValues[v.name];\n if (val !== undefined && val !== '') {\n if (v.type === 'number') variableValues[v.name] = Number(val);\n else if (v.type === 'boolean') variableValues[v.name] = val === 'true';\n else variableValues[v.name] = val;\n }\n }\n await onSubmit({\n name,\n description,\n variableValues,\n githubConfig: github.enabled ? github : null,\n });\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create component');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div\n className=\"fixed inset-0 flex items-center justify-center z-50 p-4\"\n style={{ backgroundColor: 'rgba(0,0,0,0.55)' }}\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n className=\"bg-bg-surface rounded-lg w-full max-w-lg shadow-xl\"\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border-default\">\n <h2 className=\"text-base font-semibold text-text-primary flex items-center gap-2\">\n <Copy className=\"size-4 text-action-primary-bg\" />\n Use Template: <span className=\"text-action-primary-bg ml-1\">{templateName}</span>\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1.5 text-text-secondary hover:text-text-primary rounded-md hover:bg-bg-sunken transition-colors\"\n >\n <X className=\"size-4\" />\n </button>\n </div>\n\n {/* Step pills */}\n <div className=\"px-6 pt-4\">\n <div className=\"flex items-center gap-2 overflow-x-auto pb-1\">\n {steps.map((label, i) => (\n <div key={i} className=\"flex items-center gap-2 flex-shrink-0\">\n <div\n className={`flex items-center justify-center size-6 rounded-full text-xs font-medium transition-colors ${\n i < step\n ? 'bg-status-success-bg-subtle text-status-success-text'\n : i === step\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-muted'\n }`}\n >\n {i < step ? <Check className=\"size-3\" /> : i + 1}\n </div>\n <span\n className={`text-xs ${i === step ? 'text-text-primary font-medium' : 'text-text-muted'}`}\n >\n {label}\n </span>\n {i < steps.length - 1 && (\n <ChevronRight className=\"size-3 text-text-muted flex-shrink-0\" />\n )}\n </div>\n ))}\n </div>\n </div>\n\n {/* Body */}\n <div className=\"px-6 py-5 min-h-[220px] max-h-[60vh] overflow-y-auto\">\n <AnimatePresence mode=\"wait\">\n {/* Step 0 — Basic Info */}\n {step === 0 && (\n <motion.div\n key=\"step0\"\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.15 }}\n className=\"space-y-4\"\n >\n <p className=\"text-sm text-text-secondary\">\n This wizard creates a new <strong>component</strong> — a tracked entry in your\n software catalog — pre-configured from the{' '}\n <span className=\"font-medium text-text-primary\">{templateName}</span> blueprint.\n </p>\n <div>\n <label\n htmlFor=\"templatewizard-56\"\n className=\"block text-sm font-medium text-text-primary mb-1\"\n >\n Component Name <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n id=\"templatewizard-56\"\n aria-label=\"my-new-service\"\n className={inputCls}\n placeholder=\"my-new-service\"\n value={name}\n onChange={(e) => handleNameChange(e.target.value)}\n />\n <p className=\"mt-1 text-xs text-text-muted\">\n Name of the new component created from this template.\n </p>\n </div>\n <div>\n <label\n htmlFor=\"templatewizard-55\"\n className=\"block text-sm font-medium text-text-primary mb-1\"\n >\n Description\n </label>\n <textarea\n id=\"templatewizard-55\"\n aria-label=\"What does this component do?\"\n className={`${inputCls} resize-none`}\n rows={3}\n placeholder=\"What does this component do?\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </div>\n </motion.div>\n )}\n\n {/* Step 1 — Variables (if any) */}\n {step === 1 && hasVariables && (\n <motion.div\n key=\"step1\"\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.15 }}\n className=\"space-y-4\"\n >\n <p className=\"text-sm text-text-secondary\">\n Fill in the configuration values for this template.\n </p>\n {variables.map((v) => (\n <div key={v.name}>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {v.title || v.name}\n {v.required && <span className=\"text-status-error-text ml-1\">*</span>}\n </label>\n {v.options.length > 0 ? (\n <select\n className={inputCls}\n value={varValues[v.name] || ''}\n onChange={(e) => setVarValues({ ...varValues, [v.name]: e.target.value })}\n >\n <option value=\"\">Select…</option>\n {v.options.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n ) : v.type === 'boolean' ? (\n <select\n className={inputCls}\n value={varValues[v.name] || 'false'}\n onChange={(e) => setVarValues({ ...varValues, [v.name]: e.target.value })}\n >\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n ) : (\n <input\n aria-label=\"control\"\n className={inputCls}\n type={v.type === 'number' ? 'number' : 'text'}\n placeholder={v.placeholder || v.default || ''}\n value={varValues[v.name] || ''}\n onChange={(e) => setVarValues({ ...varValues, [v.name]: e.target.value })}\n />\n )}\n </div>\n ))}\n </motion.div>\n )}\n\n {/* GitHub step */}\n {step === githubStep && (\n <motion.div\n key=\"stepGithub\"\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.15 }}\n className=\"space-y-4\"\n >\n {/* Source repo fork notice */}\n {sourceRepoUrl && (\n <div className=\"flex items-start gap-2 p-3 bg-status-info-bg rounded-md text-xs text-status-info-text\">\n <Github className=\"size-4 flex-shrink-0 mt-0.5\" />\n <div>\n <p className=\"font-medium\">Source repository detected</p>\n <p className=\"mt-0.5 text-status-info-text/80 break-all\">{sourceRepoUrl}</p>\n <p className=\"mt-1\">\n Enabling GitHub will <strong>fork</strong> this repository into your new\n repo (with fallback to a new empty repo if the fork is unavailable).\n </p>\n </div>\n </div>\n )}\n\n <div className=\"flex items-start gap-3\">\n {sourceRepoUrl ? (\n <div className=\"mt-0.5 flex-shrink-0 w-9 h-5 rounded-full bg-action-primary-bg relative opacity-70 cursor-not-allowed\">\n <span className=\"absolute top-0.5 size-4 rounded-full bg-bg-surface shadow translate-x-4\" />\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => updateGithub({ enabled: !github.enabled })}\n className={`mt-0.5 flex-shrink-0 w-9 h-5 rounded-full transition-colors relative ${\n github.enabled\n ? 'bg-action-primary-bg'\n : 'bg-bg-sunken border border-border-default'\n }`}\n >\n <span\n className={`absolute top-0.5 size-4 rounded-full bg-bg-surface shadow transition-transform ${\n github.enabled ? 'translate-x-4' : 'translate-x-0.5'\n }`}\n />\n </button>\n )}\n <div>\n <p className=\"text-sm font-medium text-text-primary flex items-center gap-2\">\n <Github className=\"size-4\" />\n {sourceRepoUrl\n ? 'Fork source & create GitHub repository'\n : 'Create a GitHub repository'}\n {sourceRepoUrl && (\n <span className=\"text-xs text-status-error-text font-normal\">Required</span>\n )}\n </p>\n <p className=\"text-xs text-text-muted mt-0.5\">\n {sourceRepoUrl\n ? 'Forks the template source repo and links it to the new component.'\n : 'Automatically creates a new GitHub repo and links it to the component.'}\n </p>\n </div>\n </div>\n\n {github.enabled && (\n <div className=\"space-y-3 pl-12\">\n <div>\n <label\n htmlFor=\"templatewizard-54\"\n className=\"block text-xs font-medium text-text-primary mb-1\"\n >\n Repository name <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n id=\"templatewizard-54\"\n aria-label=\"my-new-service\"\n className={inputCls}\n value={github.repoName}\n onChange={(e) => {\n setRepoNameTouched(true);\n updateGithub({ repoName: e.target.value });\n }}\n placeholder=\"my-new-service\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label\n htmlFor=\"templatewizard-53\"\n className=\"block text-xs font-medium text-text-primary mb-1\"\n >\n Visibility\n </label>\n <select\n id=\"templatewizard-53\"\n className={inputCls}\n value={github.visibility}\n onChange={(e) =>\n updateGithub({\n visibility: e.target.value as GitHubConfig['visibility'],\n })\n }\n >\n <option value=\"private\">Private</option>\n <option value=\"public\">Public</option>\n </select>\n </div>\n <div>\n <label\n htmlFor=\"templatewizard-52\"\n className=\"block text-xs font-medium text-text-primary mb-1\"\n >\n Create under\n </label>\n <select\n id=\"templatewizard-52\"\n className={inputCls}\n value={github.scope}\n onChange={(e) =>\n updateGithub({ scope: e.target.value as GitHubConfig['scope'] })\n }\n >\n <option value=\"user\">My account</option>\n <option value=\"org\">Organization</option>\n </select>\n </div>\n </div>\n\n {github.scope === 'org' && (\n <div>\n <label\n htmlFor=\"templatewizard-51\"\n className=\"block text-xs font-medium text-text-primary mb-1\"\n >\n Organization name <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n id=\"templatewizard-51\"\n aria-label=\"my-org\"\n className={inputCls}\n value={github.orgName}\n onChange={(e) => updateGithub({ orgName: e.target.value })}\n placeholder=\"my-org\"\n />\n </div>\n )}\n\n {/* Auth method toggle — always visible */}\n <div>\n <label\n htmlFor=\"templatewizard-50\"\n className=\"block text-xs font-medium text-text-primary mb-2\"\n >\n Authentication <span className=\"text-status-error-text\">*</span>\n </label>\n <div className=\"flex rounded-md border border-border-default overflow-hidden mb-3\">\n <button\n type=\"button\"\n onClick={() => {\n setGithubAuthMode('connection');\n updateGithub({\n connectionId: githubConnections[0]?.id ?? null,\n token: '',\n });\n }}\n className={`flex-1 py-1.5 text-xs font-medium transition-colors ${\n githubAuthMode === 'connection'\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-secondary hover:bg-bg-sunken'\n }`}\n >\n Connected Account\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setGithubAuthMode('pat');\n updateGithub({ connectionId: null });\n }}\n className={`flex-1 py-1.5 text-xs font-medium transition-colors border-l border-border-default ${\n githubAuthMode === 'pat'\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface text-text-secondary hover:bg-bg-sunken'\n }`}\n >\n Personal Token\n </button>\n </div>\n\n {/* Connected account panel */}\n {githubAuthMode === 'connection' &&\n (hasConnections ? (\n <div className=\"space-y-2\">\n <select\n id=\"templatewizard-50\"\n className={inputCls}\n value={github.connectionId ?? githubConnections[0]?.id ?? ''}\n onChange={(e) => updateGithub({ connectionId: e.target.value })}\n >\n {githubConnections.map((conn) => (\n <option key={conn.id} value={conn.id}>\n {conn.externalAccountEmail ||\n conn.externalAccountName ||\n conn.name}{' '}\n — {conn.provider.name}\n </option>\n ))}\n </select>\n <p className=\"text-xs text-status-success-text\">\n Token resolved server-side — never exposed to the browser.\n </p>\n </div>\n ) : (\n <div className=\"p-3 bg-bg-sunken rounded-md text-xs text-text-secondary space-y-1\">\n <p>No GitHub accounts connected to this workspace.</p>\n <p>\n <a\n href=\"/vibecontrols/settings/integrations\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-action-primary-bg underline\"\n >\n Connect GitHub in Settings →\n </a>{' '}\n then come back here to use it.\n </p>\n </div>\n ))}\n\n {/* PAT panel */}\n {githubAuthMode === 'pat' && (\n <div>\n <div className=\"relative\">\n <input\n aria-label=\"ghp_••••••••••••••••••••\"\n className={`${inputCls} pr-10`}\n type={showToken ? 'text' : 'password'}\n value={github.token}\n onChange={(e) => updateGithub({ token: e.target.value })}\n placeholder=\"ghp_••••••••••••••••••••\"\n autoComplete=\"off\"\n />\n <button\n type=\"button\"\n onClick={() => setShowToken((v) => !v)}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-primary\"\n >\n {showToken ? (\n <EyeOff className=\"size-4\" />\n ) : (\n <Eye className=\"size-4\" />\n )}\n </button>\n </div>\n <p className=\"mt-1 text-xs text-text-muted\">\n Needs <code className=\"font-mono\">repo</code> scope.{' '}\n <a\n href=\"https://github.com/settings/tokens/new?scopes=repo&description=VibeControls+scaffolding\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-action-primary-bg underline\"\n >\n Generate one →\n </a>\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {!github.enabled && !sourceRepoUrl && (\n <p className=\"text-sm text-text-muted pl-12\">\n Skip this step — the component will be created without a linked repository. You\n can add a repository URL later in the component settings.\n </p>\n )}\n </motion.div>\n )}\n\n {/* Review step */}\n {step === reviewStep && (\n <motion.div\n key=\"review\"\n initial={{ opacity: 0, x: 20 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -20 }}\n transition={{ duration: 0.15 }}\n className=\"space-y-4\"\n >\n <p className=\"text-sm text-text-secondary\">\n Review the details before creating your component.\n </p>\n <div className=\"bg-bg-sunken rounded-lg p-4 space-y-3 text-sm\">\n <div className=\"flex gap-3\">\n <span className=\"text-text-muted w-28 flex-shrink-0\">Name</span>\n <span className=\"text-text-primary font-medium\">{name}</span>\n </div>\n {description && (\n <div className=\"flex gap-3\">\n <span className=\"text-text-muted w-28 flex-shrink-0\">Description</span>\n <span className=\"text-text-primary\">{description}</span>\n </div>\n )}\n {hasVariables && variables.length > 0 && (\n <div className=\"pt-2 border-t border-border-default\">\n <p className=\"text-text-muted text-xs mb-2\">Variables</p>\n {variables.map((v) => (\n <div key={v.name} className=\"flex gap-3\">\n <span className=\"text-text-muted w-28 flex-shrink-0 truncate\">\n {v.title || v.name}\n </span>\n <span className=\"text-text-primary font-mono text-xs\">\n {varValues[v.name] || (\n <span className=\"text-text-muted italic\">default</span>\n )}\n </span>\n </div>\n ))}\n </div>\n )}\n <div className=\"pt-2 border-t border-border-default flex gap-3\">\n <span className=\"text-text-muted w-28 flex-shrink-0\">GitHub repo</span>\n {github.enabled ? (\n <span className=\"text-text-primary font-mono text-xs\">\n {github.scope === 'org' ? github.orgName : 'personal'}/{github.repoName}{' '}\n <span className=\"text-text-muted\">({github.visibility})</span>\n {github.connectionId && (\n <span className=\"ml-2 text-status-success-text font-sans font-normal\">\n via connected account\n </span>\n )}\n </span>\n ) : (\n <span className=\"text-text-muted italic\">not creating</span>\n )}\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {error && (\n <div className=\"mt-3 p-3 bg-status-error-bg-subtle text-status-error-text text-sm rounded-md\">\n {error}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex items-center justify-between px-6 py-4 border-t border-border-default\">\n <button\n type=\"button\"\n onClick={step === 0 ? onClose : back}\n disabled={loading}\n className=\"px-4 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50\"\n >\n {step === 0 ? 'Cancel' : 'Back'}\n </button>\n {step < reviewStep ? (\n <button\n type=\"button\"\n onClick={next}\n className=\"flex items-center gap-2 px-4 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n Next\n <ChevronRight className=\"size-4\" />\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={loading}\n className=\"flex items-center gap-2 px-4 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <Copy className=\"size-4\" />\n {loading ? 'Creating...' : 'Create Component'}\n </button>\n )}\n </div>\n </motion.div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DomainVerificationBadge.js","names":[],"sources":["../../../src/components/tunnels/DomainVerificationBadge.tsx"],"sourcesContent":["import type { TunnelDomainVerificationStatus } from '@/generated/wspace-types';\n\nconst STYLES: Record<string, string> = {\n PENDING: 'bg-status-warning-bg-subtle text-status-warning-text',\n VERIFYING: 'bg-status-warning-bg-subtle text-status-warning-text',\n VERIFIED: 'bg-status-success-bg-subtle text-status-success-text',\n FAILED: 'bg-status-error-bg-subtle text-status-error-text',\n EXPIRED: 'bg-bg-sunken text-text-muted',\n};\n\nexport function DomainVerificationBadge({\n status,\n}: {\n status: TunnelDomainVerificationStatus | string;\n}) {\n const style = STYLES[status] ?? 'bg-bg-sunken text-text-secondary';\n return (\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${style}`}\n >\n {status}\n </span>\n );\n}\n"],"mappings":";;AAEA,IAAM,IAAiC;CACrC,SAAS;CACT,WAAW;CACX,UAAU;CACV,QAAQ;CACR,SAAS;CACV;AAED,SAAgB,EAAwB,EACtC,aAGC;AAED,QACE,kBAAC,QAAD;EACE,WAAW,yEAHD,EAAO,MAAW;YAK3B;EACI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderBadge.js","names":[],"sources":["../../../src/components/tunnels/ProviderBadge.tsx"],"sourcesContent":["import type { TunnelProviderKey } from '@/generated/wspace-types';\n\nconst LABELS: Record<string, string> = {\n VIBETUNNELS: 'VibeTunnels',\n CLOUDFLARE: 'Cloudflare',\n};\n\nexport function ProviderBadge({ providerKey }: { providerKey: TunnelProviderKey | string }) {\n return (\n <span className=\"inline-flex items-center rounded-full bg-status-info-bg-subtle px-2 py-0.5 text-xs font-medium text-status-info-text\">\n {LABELS[providerKey] ?? providerKey}\n </span>\n );\n}\n"],"mappings":";;AAEA,IAAM,IAAiC;CACrC,aAAa;CACb,YAAY;CACb;AAED,SAAgB,EAAc,EAAE,kBAA4D;AAC1F,QACE,kBAAC,QAAD;EAAM,WAAU;YACb,EAAO,MAAgB;EACnB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelCard.js","names":[],"sources":["../../../src/components/tunnels/TunnelCard.tsx"],"sourcesContent":["import { motion } from 'framer-motion';\nimport { Loader2, Play, Square, Trash2, ExternalLink } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\n\nimport type { ListTunnelsQuery } from '@/generated/wspace-operations';\nimport { TunnelStatus, VibeEntityType } from '@/generated/wspace-types';\nimport { TunnelStatusBadge } from './TunnelStatusBadge';\nimport { ProviderBadge } from './ProviderBadge';\nimport { EntityVibeLinkControl } from '../shared/EntityVibeLinkControl';\n\ntype TunnelRow = NonNullable<ListTunnelsQuery['tunnels']>['items'][number];\n\ninterface TunnelCardProps {\n tunnel: TunnelRow;\n isPending?: boolean;\n onOpen: (id: string) => void;\n // Mutation callbacks are optional: the parent omits them when the actor\n // lacks the permission (tunnel:execute for start/stop, tunnel:delete), so\n // the corresponding control is hidden rather than 403-ing on click.\n onStart?: (id: string) => void;\n onStop?: (id: string) => void;\n onDelete?: (id: string, name: string) => void;\n}\n\nexport function TunnelCard({\n tunnel,\n isPending = false,\n onOpen,\n onStart,\n onStop,\n onDelete,\n}: TunnelCardProps) {\n const tr = useTr();\n const canStart =\n !isPending &&\n tunnel.status !== TunnelStatus.Active &&\n tunnel.status !== TunnelStatus.Provisioning;\n const canStop = !isPending && tunnel.status === TunnelStatus.Active;\n const hostname = tunnel.primaryDomain?.hostname;\n const publicUrl = hostname\n ? `${tunnel.protocol.toLowerCase() === 'tcp' ? 'tcp' : 'https'}://${hostname}`\n : null;\n\n return (\n <motion.div\n initial={{ opacity: 0, y: 4 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"rounded-card border border-border-subtle bg-bg-surface shadow-elevation-1 p-5 hover:border-border-strong hover:shadow-elevation-2 transition-all duration-200 ease-[var(--motion-easing-out)]\"\n >\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4\">\n <button\n type=\"button\"\n onClick={() => onOpen(tunnel.id)}\n className=\"flex-1 text-left min-w-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus rounded-button\"\n >\n <div className=\"flex flex-wrap items-center gap-2 mb-1.5\">\n <h3 className=\"text-base font-semibold text-text-primary truncate tracking-tight\">\n {tunnel.name}\n </h3>\n <TunnelStatusBadge status={tunnel.status} />\n <ProviderBadge providerKey={tunnel.providerKey} />\n </div>\n {publicUrl ? (\n <p className=\"text-sm text-text-secondary truncate\">{publicUrl}</p>\n ) : (\n <p className=\"text-sm text-text-muted\">\n {tr('vibecontrols.tunnels.noDomain', 'No domain attached')}\n </p>\n )}\n <p className=\"text-xs font-mono text-text-muted mt-1 tabular-nums\">\n {tunnel.protocol}:{tunnel.localPort} on {tunnel.localHost}\n </p>\n </button>\n\n <div className=\"flex items-center gap-2 flex-shrink-0 flex-wrap\">\n {publicUrl && (\n <a\n href={publicUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center rounded-button border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken hover:border-border-strong transition-colors\"\n onClick={(e) => e.stopPropagation()}\n >\n <ExternalLink className=\"size-3.5 mr-1.5\" />\n {tr('vibecontrols.tunnels.open', 'Open')}\n </a>\n )}\n {isPending && (\n <span className=\"inline-flex items-center rounded-button border border-border-subtle bg-bg-sunken px-3 py-1.5 text-xs text-text-muted\">\n <Loader2 className=\"size-3.5 mr-1.5 animate-spin\" />\n {tunnel.status === 'ACTIVE'\n ? tr('vibecontrols.tunnels.stopping', 'Stopping…')\n : tr('vibecontrols.tunnels.starting', 'Starting…')}\n </span>\n )}\n {canStart && onStart && (\n <button\n type=\"button\"\n onClick={() => onStart(tunnel.id)}\n className=\"inline-flex items-center rounded-button bg-action-primary-bg px-3 py-1.5 text-xs font-medium text-action-primary-text hover:bg-action-primary-bgHover transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n <Play className=\"size-3.5 mr-1.5\" />\n {tr('vibecontrols.tunnels.start', 'Start')}\n </button>\n )}\n {canStop && onStop && (\n <button\n type=\"button\"\n onClick={() => onStop(tunnel.id)}\n className=\"inline-flex items-center rounded-button border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-primary hover:bg-bg-sunken hover:border-border-strong transition-colors\"\n >\n <Square className=\"size-3.5 mr-1.5\" />\n {tr('vibecontrols.tunnels.stop', 'Stop')}\n </button>\n )}\n <EntityVibeLinkControl\n entityType={VibeEntityType.Tunnel}\n entityId={tunnel.id}\n currentVibeId={tunnel.vibeId ?? null}\n currentVisibility={tunnel.visibility ?? null}\n refetchQueries={['ListTunnels']}\n />\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(tunnel.id, tunnel.name)}\n className=\"inline-flex items-center rounded-button border border-border-subtle px-2 py-1.5 text-xs text-status-error-text hover:bg-status-error-bg-subtle hover:border-status-error-border transition-colors\"\n aria-label=\"Delete tunnel\"\n >\n <Trash2 className=\"size-3.5\" />\n </button>\n )}\n </div>\n </div>\n {tunnel.lastError && (\n <div className=\"mt-4 rounded-button border border-status-error-border bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\">\n {tunnel.lastError}\n </div>\n )}\n </motion.div>\n );\n}\n"],"mappings":";;;;;;;;;AAwBA,SAAgB,EAAW,EACzB,WACA,eAAY,IACZ,WACA,YACA,WACA,eACkB;CAClB,IAAM,IAAK,GAAO,EACZ,IACJ,CAAC,KACD,EAAO,WAAW,EAAa,UAC/B,EAAO,WAAW,EAAa,cAC3B,IAAU,CAAC,KAAa,EAAO,WAAW,EAAa,QACvD,IAAW,EAAO,eAAe,UACjC,IAAY,IACd,GAAG,EAAO,SAAS,aAAa,KAAK,QAAQ,QAAQ,QAAQ,KAAK,MAClE;AAEJ,QACE,kBAAC,EAAO,KAAR;EACE,SAAS;GAAE,SAAS;GAAG,GAAG;GAAG;EAC7B,SAAS;GAAE,SAAS;GAAG,GAAG;GAAG;EAC7B,WAAU;YAHZ,CAKE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,UAAD;IACE,MAAK;IACL,eAAe,EAAO,EAAO,GAAG;IAChC,WAAU;cAHZ;KAKE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAO;QACL,CAAA;OACL,kBAAC,GAAD,EAAmB,QAAQ,EAAO,QAAU,CAAA;OAC5C,kBAAC,GAAD,EAAe,aAAa,EAAO,aAAe,CAAA;OAC9C;;KACL,IACC,kBAAC,KAAD;MAAG,WAAU;gBAAwC;MAAc,CAAA,GAEnE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAG,iCAAiC,qBAAqB;MACxD,CAAA;KAEN,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAO;OAAS;OAAE,EAAO;OAAU;OAAK,EAAO;OAC9C;;KACG;OAET,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,KACC,kBAAC,KAAD;MACE,MAAM;MACN,QAAO;MACP,KAAI;MACJ,WAAU;MACV,UAAU,MAAM,EAAE,iBAAiB;gBALrC,CAOE,kBAAC,GAAD,EAAc,WAAU,mBAAoB,CAAA,EAC3C,EAAG,6BAA6B,OAAO,CACtC;;KAEL,KACC,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACE,kBAAC,GAAD,EAAS,WAAU,gCAAiC,CAAA,EACnD,EAAO,WAAW,WACf,EAAG,iCAAiC,YAAY,GAChD,EAAG,iCAAiC,YAAY,CAC/C;;KAER,KAAY,KACX,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAQ,EAAO,GAAG;MACjC,WAAU;gBAHZ,CAKE,kBAAC,GAAD,EAAM,WAAU,mBAAoB,CAAA,EACnC,EAAG,8BAA8B,QAAQ,CACnC;;KAEV,KAAW,KACV,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAO,EAAO,GAAG;MAChC,WAAU;gBAHZ,CAKE,kBAAC,GAAD,EAAQ,WAAU,mBAAoB,CAAA,EACrC,EAAG,6BAA6B,OAAO,CACjC;;KAEX,kBAAC,GAAD;MACE,YAAY,EAAe;MAC3B,UAAU,EAAO;MACjB,eAAe,EAAO,UAAU;MAChC,mBAAmB,EAAO,cAAc;MACxC,gBAAgB,CAAC,cAAc;MAC/B,CAAA;KACD,KACC,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,EAAS,EAAO,IAAI,EAAO,KAAK;MAC/C,WAAU;MACV,cAAW;gBAEX,kBAAC,GAAD,EAAQ,WAAU,YAAa,CAAA;MACxB,CAAA;KAEP;MACF;MACL,EAAO,aACN,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAO;GACJ,CAAA,CAEG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelConnectionCard.js","names":[],"sources":["../../../src/components/tunnels/TunnelConnectionCard.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Link2 } from 'lucide-react';\n\nimport type { GetTunnelQuery } from '@/generated/wspace-operations';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { TunnelCopyButton } from './TunnelCopyButton';\nimport { primaryTunnelEndpoint } from './tunnelEndpoints';\n\ntype TunnelDetails = NonNullable<GetTunnelQuery['tunnel']>;\n\ninterface TunnelConnectionCardProps {\n tunnel: TunnelDetails;\n}\n\n/**\n * The one address a client needs, surfaced on Overview so the primary action of\n * the page — \"give me the connection string\" — does not require a tab change.\n *\n * The string is derived from the tunnel's primary domain (the same helper the\n * Endpoints tab uses); when no domain is attached yet there is nothing\n * reachable to copy, so the card explains that instead of offering the local\n * target, which only resolves on the agent host.\n */\nexport const TunnelConnectionCard: FC<TunnelConnectionCardProps> = ({ tunnel }) => {\n const tr = useTr();\n const endpoint = primaryTunnelEndpoint(tunnel);\n\n return (\n <section className=\"rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <h3 className=\"mb-3 flex items-center gap-1.5 text-sm font-semibold text-text-primary\">\n <Link2 className=\"size-4 text-text-secondary\" aria-hidden=\"true\" />\n {tr('vibecontrols.tunnels.overview.connection', 'Connection')}\n </h3>\n\n {endpoint ? (\n <>\n <div className=\"flex items-center gap-2 rounded-md border border-border-subtle bg-bg-sunken px-3 py-2\">\n <code className=\"min-w-0 flex-1 break-all font-mono text-sm text-text-primary\">\n {endpoint.url}\n </code>\n <TunnelCopyButton\n value={endpoint.url}\n ariaLabel={tr(\n 'vibecontrols.tunnels.overview.copyConnection',\n 'Copy connection string'\n )}\n />\n </div>\n <p className=\"mt-2 text-xs text-text-muted\">\n {tr(\n 'vibecontrols.tunnels.overview.connectionHint',\n 'Point your client at this endpoint — it forwards to {{target}}.',\n { target: `${tunnel.localHost}:${tunnel.localPort}` }\n )}\n </p>\n </>\n ) : (\n <p className=\"text-sm text-text-muted\">\n {tr(\n 'vibecontrols.tunnels.overview.connectionPending',\n 'No public endpoint yet. Start the tunnel — its address appears here once a domain is attached.'\n )}\n </p>\n )}\n </section>\n );\n};\n"],"mappings":";;;;;;AAuBA,IAAa,KAAuD,EAAE,gBAAa;CACjF,IAAM,IAAK,GAAO,EACZ,IAAW,EAAsB,EAAO;AAE9C,QACE,kBAAC,WAAD;EAAS,WAAU;YAAnB,CACE,kBAAC,MAAD;GAAI,WAAU;aAAd,CACE,kBAAC,GAAD;IAAO,WAAU;IAA6B,eAAY;IAAS,CAAA,EAClE,EAAG,4CAA4C,aAAa,CAC1D;MAEJ,IACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAS;IACL,CAAA,EACP,kBAAC,GAAD;IACE,OAAO,EAAS;IAChB,WAAW,EACT,gDACA,yBACD;IACD,CAAA,CACE;MACN,kBAAC,KAAD;GAAG,WAAU;aACV,EACC,gDACA,mEACA,EAAE,QAAQ,GAAG,EAAO,UAAU,GAAG,EAAO,aAAa,CACtD;GACC,CAAA,CACH,EAAA,CAAA,GAEH,kBAAC,KAAD;GAAG,WAAU;aACV,EACC,mDACA,iGACD;GACC,CAAA,CAEE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelCopyButton.js","names":[],"sources":["../../../src/components/tunnels/TunnelCopyButton.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\n\nimport { isNative, nativeCopyText, nativeToast } from '@/utils/nativeBridge';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface TunnelCopyButtonProps {\n /** Exact text placed on the clipboard. */\n value: string;\n /** Accessible name, e.g. \"Copy connection string\". */\n ariaLabel: string;\n}\n\n/**\n * Copy-to-clipboard control shared by the Endpoints tab and the Overview\n * \"Connection\" card. Routes through the native bridge so the packaged desktop\n * and mobile shells use their own clipboard, and clears its confirmation timer\n * on unmount.\n */\nexport const TunnelCopyButton: FC<TunnelCopyButtonProps> = ({ value, ariaLabel }) => {\n const tr = useTr();\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const handleCopy = useCallback(async (): Promise<void> => {\n try {\n await nativeCopyText(value);\n } catch {\n // Clipboard access can be denied (insecure context, permission policy).\n // The value stays selectable on screen, so there is nothing to recover.\n return;\n }\n setCopied(true);\n if (isNative()) void nativeToast(tr('vibecontrols.tunnels.copied', 'Copied'));\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopied(false), 1500);\n }, [tr, value]);\n\n return (\n <button\n type=\"button\"\n onClick={() => void handleCopy()}\n aria-label={ariaLabel}\n className=\"inline-flex flex-shrink-0 items-center rounded-md border border-border-default px-2 py-1 text-xs text-text-primary hover:bg-bg-elevated focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n {copied ? (\n <Check className=\"size-3.5\" aria-hidden=\"true\" />\n ) : (\n <Copy className=\"size-3.5\" aria-hidden=\"true\" />\n )}\n </button>\n );\n};\n"],"mappings":";;;;;;AAoBA,IAAa,KAA+C,EAAE,UAAO,mBAAgB;CACnF,IAAM,IAAK,GAAO,EACZ,CAAC,GAAQ,KAAa,EAAS,GAAM,EACrC,IAAW,EAA6C,KAAK;AAEnE,eACc;AACV,EAAI,EAAS,WAAS,aAAa,EAAS,QAAQ;IAEtD,EAAE,CACH;CAED,IAAM,IAAa,EAAY,YAA2B;AACxD,MAAI;AACF,SAAM,EAAe,EAAM;UACrB;AAGN;;AAKF,EAHA,EAAU,GAAK,EACX,GAAU,IAAO,EAAY,EAAG,+BAA+B,SAAS,CAAC,EACzE,EAAS,WAAS,aAAa,EAAS,QAAQ,EACpD,EAAS,UAAU,iBAAiB,EAAU,GAAM,EAAE,KAAK;IAC1D,CAAC,GAAI,EAAM,CAAC;AAEf,QACE,kBAAC,UAAD;EACE,MAAK;EACL,eAAe,KAAK,GAAY;EAChC,cAAY;EACZ,WAAU;YAGR,EADD,IACE,IAEA,GAFD;GAAO,WAAU;GAAW,eAAY;GAAS,CAED;EAE3C,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelCreateWizard.js","names":[],"sources":["../../../src/components/tunnels/TunnelCreateWizard.tsx"],"sourcesContent":["import { useState, useMemo, useCallback } from 'react';\nimport { useNavigate } from 'react-router';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Stepper } from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { useEventBus } from '@burdenoff/fe-libs/shared/events';\nimport { useVibeControls } from '@/providers/VibeControlsProvider';\n\nimport { PageHeader } from '@/components/shared/PageHeader';\nimport { LoadingState } from '@/components/shared/LoadingState';\nimport { ErrorState } from '@/components/shared/ErrorState';\nimport { QuotaExhaustedDialog } from '@/components/shared/QuotaExhaustedDialog';\nimport {\n TunnelEnvironment,\n TunnelProtocol,\n TunnelProviderKey,\n type CreateTunnelInput,\n} from '@/generated/wspace-types';\nimport {\n useCreateTunnelMutation,\n useListTunnelProvidersQuery,\n useListAgentsQuery,\n} from '@/generated/wspace-operations';\nimport {\n getQuotaDialogContent,\n markQuotaHandledLocally,\n isQuotaExhaustedError,\n} from '@/utils/quotaUtils';\nimport { EntityTagPicker } from '@/components/shared/EntityTagPicker';\nimport { useDraftEntityTags } from '@/hooks/useDraftEntityTags';\nimport {\n LinkToVibePanel,\n LINK_TO_VIBE_DEFAULT,\n linkToVibeInput,\n type LinkToVibeValue,\n} from '@/components/shared';\n\nconst SUBDOMAIN_RE = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/;\n\ntype HostnameKind = 'managed' | 'custom' | 'auto';\n\ninterface WizardState {\n providerKey: TunnelProviderKey | '';\n agentId: string;\n name: string;\n description: string;\n protocol: TunnelProtocol;\n localHost: string;\n localPort: number;\n hostnameKind: HostnameKind;\n subdomain: string;\n environment: TunnelEnvironment;\n customDomain: string;\n basicAuthUser: string;\n basicAuthPassword: string;\n}\n\nconst INITIAL_STATE: WizardState = {\n // Default to Vibe Tunnels as the preferred provider; users can still pick\n // Cloudflare Tunnels from the provider list.\n providerKey: TunnelProviderKey.Vibetunnels,\n agentId: '',\n name: '',\n description: '',\n protocol: TunnelProtocol.Http,\n localHost: '127.0.0.1',\n localPort: 3000,\n hostnameKind: 'managed',\n subdomain: '',\n environment: TunnelEnvironment.Prod,\n customDomain: '',\n basicAuthUser: '',\n basicAuthPassword: '',\n};\n\nconst STEPS = [\n { id: 'provider', label: 'Provider' },\n { id: 'target', label: 'Protocol & target' },\n { id: 'hostname', label: 'Hostname' },\n { id: 'policies', label: 'Policies' },\n { id: 'review', label: 'Review' },\n] as const;\n\nexport function TunnelCreateWizard() {\n const tr = useTr();\n const navigate = useNavigate();\n const bus = useEventBus();\n const { workspaceId } = useVibeControls();\n const [step, setStep] = useState(0);\n const [state, setState] = useState<WizardState>(INITIAL_STATE);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isFlushingTags, setIsFlushingTags] = useState(false);\n const [showQuotaExhausted, setShowQuotaExhausted] = useState(false);\n // G7: Optional link to a Vibe + visibility, threaded into CreateTunnelInput.\n const [vibeLink, setVibeLink] = useState<LinkToVibeValue>(LINK_TO_VIBE_DEFAULT);\n // Tags selected before the tunnel exists — persisted right after create.\n const { setDraftTagIds, flushTags } = useDraftEntityTags('VIBECONTROLS_TUNNEL');\n\n const {\n data: providersData,\n loading: providersLoading,\n error: providersError,\n } = useListTunnelProvidersQuery();\n const { data: agentsData } = useListAgentsQuery({ variables: { pagination: { limit: 100 } } });\n\n const [createTunnel, { loading: creating }] = useCreateTunnelMutation();\n\n const update = useCallback(<K extends keyof WizardState>(key: K, value: WizardState[K]) => {\n setState((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const selectProvider = useCallback((providerKey: TunnelProviderKey) => {\n setState((prev) => ({\n ...prev,\n providerKey,\n hostnameKind: providerKey === TunnelProviderKey.Cloudflare ? 'auto' : 'managed',\n }));\n }, []);\n\n // VibeTunnels first, Cloudflare second, everything else alphabetically.\n const orderedProviders = useMemo(\n () =>\n [...(providersData?.tunnelProviders ?? [])].sort((a: { key: string }, b: { key: string }) => {\n const rank = (key: string) => (key === 'VIBETUNNELS' ? 0 : key === 'CLOUDFLARE' ? 1 : 2);\n const diff = rank(a.key) - rank(b.key);\n if (diff !== 0) return diff;\n return a.key.localeCompare(b.key);\n }),\n [providersData]\n );\n\n const selectedProvider = useMemo(\n () => orderedProviders.find((p: { key: string }) => p.key === state.providerKey),\n [orderedProviders, state.providerKey]\n );\n\n const caps = selectedProvider?.capabilities;\n const supportsAutoHostname = state.providerKey === TunnelProviderKey.Cloudflare;\n const protocolOptions = useMemo(() => {\n if (!caps) return [TunnelProtocol.Http];\n const list: TunnelProtocol[] = [];\n if (caps.supportsHttp) list.push(TunnelProtocol.Http);\n if (caps.supportsHttps) list.push(TunnelProtocol.Https);\n if (caps.supportsTcp) list.push(TunnelProtocol.Tcp);\n return list;\n }, [caps]);\n\n const canAdvance = useMemo(() => {\n if (step === 0) return Boolean(state.providerKey && state.agentId && state.name.trim());\n if (step === 1) return state.localPort > 0 && state.localPort < 65536;\n if (step === 2) {\n if (state.hostnameKind === 'managed')\n return Boolean(state.subdomain && SUBDOMAIN_RE.test(state.subdomain));\n if (state.hostnameKind === 'custom') return state.customDomain.trim().includes('.');\n return supportsAutoHostname;\n }\n return true;\n }, [step, state, supportsAutoHostname]);\n\n const next = () => setStep((s) => Math.min(s + 1, STEPS.length - 1));\n const back = () => setStep((s) => Math.max(s - 1, 0));\n\n const submit = async () => {\n setSubmitError(null);\n try {\n const input: CreateTunnelInput = {\n agentId: state.agentId,\n name: state.name,\n description: state.description || undefined,\n providerKey: state.providerKey as TunnelProviderKey,\n protocol: state.protocol,\n localHost: state.localHost,\n localPort: state.localPort,\n environment: state.environment,\n basicAuthUser: state.basicAuthUser || undefined,\n basicAuthPassword: state.basicAuthPassword || undefined,\n managedSubdomain: state.hostnameKind === 'managed' ? state.subdomain : undefined,\n ...linkToVibeInput(vibeLink),\n };\n const result = await createTunnel({ variables: { input } });\n\n if (result.error) {\n if (isQuotaExhaustedError(result.error)) {\n markQuotaHandledLocally();\n setShowQuotaExhausted(true);\n bus.emitCustom('vibecontrols.quota.tunnel_limit_hit', {\n workspaceId: workspaceId ?? undefined,\n });\n return;\n }\n\n setSubmitError(result.error.message);\n return;\n }\n\n const id = result.data?.createTunnel.id;\n if (id) {\n bus.emitCustom('vibecontrols.tunnel.created', {\n workspaceId: workspaceId ?? undefined,\n tunnelId: id,\n });\n setIsFlushingTags(true);\n try {\n await flushTags(id);\n } finally {\n setIsFlushingTags(false);\n }\n // Land on the detail page and immediately prompt to start — a freshly\n // created tunnel is a DRAFT, so offer to bring it online instead of\n // making the user hunt for the Start button.\n navigate(`/vibecontrols/tunnels/${id}`, { state: { autoPromptStart: true } });\n }\n } catch (err) {\n if (isQuotaExhaustedError(err)) {\n setSubmitError(null);\n markQuotaHandledLocally();\n setShowQuotaExhausted(true);\n bus.emitCustom('vibecontrols.quota.tunnel_limit_hit', {\n workspaceId: workspaceId ?? undefined,\n });\n return;\n }\n\n setSubmitError(err instanceof Error ? err.message : String(err));\n }\n };\n\n if (providersLoading) return <LoadingState message=\"Loading providers\" />;\n if (providersError) {\n return (\n <ErrorState\n title=\"Failed to load providers\"\n message={providersError.message}\n onRetry={() => window.location.reload()}\n />\n );\n }\n\n return (\n <div className=\"p-6 max-w-3xl mx-auto\">\n <PageHeader\n breadcrumb={[{ label: 'Tunnels', path: '/vibecontrols/tunnels' }, { label: 'New tunnel' }]}\n title={tr('vibecontrols.tunnels.createTitle', 'Create tunnel')}\n description={tr(\n 'vibecontrols.tunnels.createDescription',\n 'Expose a local service through a managed tunnel.'\n )}\n />\n\n <Stepper\n className=\"mb-6\"\n active={step}\n onStepClick={(i) => i <= step && setStep(i)}\n steps={STEPS.map((s) => ({ key: s.id, label: s.label }))}\n />\n\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={step}\n initial={{ opacity: 0, x: 6 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -6 }}\n transition={{ duration: 0.15 }}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\"\n >\n {step === 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Provider</h3>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {orderedProviders.map(\n (p: {\n id: string;\n key: TunnelProviderKey;\n displayName: string;\n description?: string | null;\n }) => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => selectProvider(p.key)}\n className={`rounded-lg border p-4 text-left transition-colors ${\n state.providerKey === p.key\n ? 'border-action-primary-bg bg-bg-sunken'\n : 'border-border-subtle hover:border-border-default'\n }`}\n >\n <div className=\"font-semibold text-text-primary\">{p.displayName}</div>\n <div className=\"text-xs text-text-muted mt-1\">{p.key}</div>\n {p.description && (\n <div className=\"text-xs text-text-secondary mt-2\">{p.description}</div>\n )}\n </button>\n )\n )}\n </div>\n <LabeledField label=\"Agent\">\n <select\n value={state.agentId}\n onChange={(e) => update('agentId', e.target.value)}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n <option value=\"\">Select agent</option>\n {(agentsData?.vibecontrolsAgents ?? []).map((a: { id: string; name: string }) => (\n <option key={a.id} value={a.id}>\n {a.name}\n </option>\n ))}\n </select>\n </LabeledField>\n <LabeledField label=\"Name\">\n <input\n aria-label=\"My dev tunnel\"\n type=\"text\"\n value={state.name}\n onChange={(e) => update('name', e.target.value)}\n placeholder=\"My dev tunnel\"\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted\"\n />\n </LabeledField>\n <LabeledField label=\"Description (optional)\">\n <input\n aria-label=\"control\"\n type=\"text\"\n value={state.description}\n onChange={(e) => update('description', e.target.value)}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted\"\n />\n </LabeledField>\n </div>\n )}\n\n {step === 1 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Protocol & target</h3>\n <LabeledField label=\"Protocol\">\n <div className=\"flex gap-2\">\n {protocolOptions.map((proto) => (\n <button\n key={proto}\n type=\"button\"\n onClick={() => update('protocol', proto)}\n className={`rounded-md border px-4 py-2 text-sm ${\n state.protocol === proto\n ? 'border-action-primary-bg bg-bg-sunken text-text-primary'\n : 'border-border-subtle text-text-secondary hover:border-border-default'\n }`}\n >\n {proto}\n </button>\n ))}\n </div>\n </LabeledField>\n <LabeledField label=\"Local host\">\n <input\n aria-label=\"control\"\n type=\"text\"\n value={state.localHost}\n onChange={(e) => update('localHost', e.target.value)}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </LabeledField>\n <LabeledField label=\"Local port\">\n <input\n aria-label=\"control\"\n type=\"number\"\n value={state.localPort}\n onChange={(e) => update('localPort', parseInt(e.target.value, 10) || 0)}\n min={1}\n max={65535}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </LabeledField>\n </div>\n )}\n\n {step === 2 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Hostname</h3>\n <div className=\"flex gap-2\">\n {caps?.supportsManagedSubdomains && (\n <HostnameKindButton\n active={state.hostnameKind === 'managed'}\n onClick={() => update('hostnameKind', 'managed')}\n label=\"Managed subdomain\"\n hint=\"*.vibetunnels.com\"\n />\n )}\n {caps?.supportsCustomDomains && (\n <HostnameKindButton\n active={state.hostnameKind === 'custom'}\n onClick={() => update('hostnameKind', 'custom')}\n label=\"Custom domain\"\n hint=\"TXT verification\"\n />\n )}\n {supportsAutoHostname && (\n <HostnameKindButton\n active={state.hostnameKind === 'auto'}\n onClick={() => update('hostnameKind', 'auto')}\n label=\"Auto\"\n hint=\"assigned by Cloudflare\"\n />\n )}\n </div>\n\n {state.hostnameKind === 'managed' && (\n <>\n <LabeledField label=\"Environment\">\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => update('environment', TunnelEnvironment.Prod)}\n className={`rounded-md border px-4 py-2 text-sm ${\n state.environment === TunnelEnvironment.Prod\n ? 'border-action-primary-bg bg-bg-sunken text-text-primary'\n : 'border-border-subtle text-text-secondary hover:border-border-default'\n }`}\n >\n Prod (vibetunnels.com)\n </button>\n <button\n type=\"button\"\n onClick={() => update('environment', TunnelEnvironment.Alpha)}\n className={`rounded-md border px-4 py-2 text-sm ${\n state.environment === TunnelEnvironment.Alpha\n ? 'border-action-primary-bg bg-bg-sunken text-text-primary'\n : 'border-border-subtle text-text-secondary hover:border-border-default'\n }`}\n >\n Alpha\n </button>\n </div>\n </LabeledField>\n <LabeledField label=\"Subdomain label\">\n <input\n aria-label=\"demo\"\n type=\"text\"\n value={state.subdomain}\n onChange={(e) => update('subdomain', e.target.value.toLowerCase())}\n placeholder=\"demo\"\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </LabeledField>\n {state.subdomain && (\n <p className=\"text-xs text-text-secondary\">\n Will be reserved as{' '}\n <span className=\"font-mono text-text-primary\">\n {state.subdomain}\n {state.environment === TunnelEnvironment.Alpha\n ? '.alpha.vibetunnels.com'\n : '.vibetunnels.com'}\n </span>\n </p>\n )}\n </>\n )}\n\n {state.hostnameKind === 'custom' && (\n <LabeledField label=\"Custom domain\">\n <input\n aria-label=\"preview.example.com\"\n type=\"text\"\n value={state.customDomain}\n onChange={(e) => update('customDomain', e.target.value.toLowerCase())}\n placeholder=\"preview.example.com\"\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n <p className=\"text-xs text-text-muted mt-2\">\n Custom domains are registered on create but must be verified via a TXT record\n before they can be attached. You'll see the verification challenge in the\n Domains tab after creation.\n </p>\n </LabeledField>\n )}\n </div>\n )}\n\n {step === 3 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold text-text-primary\">Policies (optional)</h3>\n <LabeledField label=\"Basic auth user\">\n <input\n aria-label=\"control\"\n type=\"text\"\n value={state.basicAuthUser}\n onChange={(e) => update('basicAuthUser', e.target.value)}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </LabeledField>\n <LabeledField label=\"Basic auth password\">\n <input\n aria-label=\"control\"\n type=\"password\"\n value={state.basicAuthPassword}\n onChange={(e) => update('basicAuthPassword', e.target.value)}\n className=\"w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n />\n </LabeledField>\n <LinkToVibePanel value={vibeLink} onChange={setVibeLink} disabled={creating} />\n </div>\n )}\n\n {step === 4 && (\n <div className=\"space-y-3\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr('vibecontrols.tunnels.review', 'Review')}\n </h3>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 text-sm\">\n <dt className=\"text-text-muted\">Provider</dt>\n <dd className=\"text-text-primary\">{state.providerKey}</dd>\n <dt className=\"text-text-muted\">Name</dt>\n <dd className=\"text-text-primary\">{state.name}</dd>\n <dt className=\"text-text-muted\">Agent</dt>\n <dd className=\"text-text-primary font-mono\">{state.agentId}</dd>\n <dt className=\"text-text-muted\">Protocol</dt>\n <dd className=\"text-text-primary\">{state.protocol}</dd>\n <dt className=\"text-text-muted\">Target</dt>\n <dd className=\"text-text-primary font-mono\">\n {state.localHost}:{state.localPort}\n </dd>\n <dt className=\"text-text-muted\">Hostname</dt>\n <dd className=\"text-text-primary\">\n {state.hostnameKind === 'managed'\n ? `${state.subdomain}.${state.environment === 'ALPHA' ? 'alpha.' : ''}vibetunnels.com`\n : state.hostnameKind === 'custom'\n ? state.customDomain\n : 'auto-assigned'}\n </dd>\n <dt className=\"text-text-muted\">Basic auth</dt>\n <dd className=\"text-text-primary\">{state.basicAuthUser ? 'yes' : 'no'}</dd>\n </dl>\n <div className=\"border-t border-border-subtle pt-3\">\n <h4 className=\"mb-2 text-sm font-medium text-text-secondary\">\n {tr('vibecontrols.tunnels.tags', 'Tags')}\n </h4>\n <EntityTagPicker entityType=\"VIBECONTROLS_TUNNEL\" onDraftChange={setDraftTagIds} />\n </div>\n {submitError && (\n <div className=\"rounded-card border border-status-error-border bg-status-error-bg-subtle p-3 text-sm text-status-error-text\">\n {submitError}\n </div>\n )}\n </div>\n )}\n </motion.div>\n </AnimatePresence>\n\n <div className=\"flex items-center justify-between mt-4\">\n <button\n type=\"button\"\n disabled={step === 0}\n onClick={back}\n className=\"rounded-md border border-border-default px-4 py-2 text-sm text-text-primary hover:bg-bg-elevated disabled:opacity-50\"\n >\n {tr('vibecontrols.tunnels.back', 'Back')}\n </button>\n {step < STEPS.length - 1 ? (\n <button\n type=\"button\"\n disabled={!canAdvance}\n onClick={next}\n className=\"rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-fg hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {tr('vibecontrols.tunnels.next', 'Next')}\n </button>\n ) : (\n <button\n type=\"button\"\n disabled={creating || isFlushingTags}\n onClick={() => void submit()}\n className=\"rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-fg hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {creating\n ? tr('vibecontrols.tunnels.creating', 'Creating...')\n : tr('vibecontrols.tunnels.createTunnel', 'Create tunnel')}\n </button>\n )}\n </div>\n\n <QuotaExhaustedDialog\n isOpen={showQuotaExhausted}\n onClose={() => setShowQuotaExhausted(false)}\n onConfirm={() => {\n setShowQuotaExhausted(false);\n navigate('/billing/plans');\n }}\n {...getQuotaDialogContent('tunnel-subdomain')}\n />\n </div>\n );\n}\n\nfunction LabeledField({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <label className=\"block\">\n <span className=\"text-xs font-medium text-text-secondary\">{label}</span>\n <div className=\"mt-1\">{children}</div>\n </label>\n );\n}\n\nfunction HostnameKindButton({\n active,\n onClick,\n label,\n hint,\n}: {\n active: boolean;\n onClick: () => void;\n label: string;\n hint: string;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={`flex-1 rounded-md border p-3 text-left transition-colors ${\n active\n ? 'border-action-primary-bg bg-bg-sunken'\n : 'border-border-subtle hover:border-border-default'\n }`}\n >\n <div className=\"text-sm font-medium text-text-primary\">{label}</div>\n <div className=\"text-xs text-text-muted mt-0.5\">{hint}</div>\n </button>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelMetricTiles.js","names":[],"sources":["../../../src/components/tunnels/TunnelMetricTiles.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { useMemo } from 'react';\nimport { ArrowDownUp, Activity, PlugZap } from 'lucide-react';\n\nimport { useGetTunnelUsageQuery } from '@/generated/wspace-operations';\nimport { LoadingState } from '@/components/shared/LoadingState';\nimport { EmptyState } from '@/components/shared/EmptyState';\nimport { ErrorState } from '@/components/shared/ErrorState';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { TunnelSparkline } from './TunnelSparkline';\nimport {\n TUNNEL_METRIC_WINDOW_HOURS,\n averageRatePerHour,\n formatBytes,\n formatPerHourRate,\n summariseTunnelUsage,\n} from './tunnelMetrics';\n\nconst HOUR_MS = 60 * 60 * 1000;\n\ninterface TunnelMetricTilesProps {\n tunnelId: string;\n}\n\n/**\n * Traffic tiles for the tunnel Overview tab, sourced entirely from the hourly\n * `tunnelUsage` roll-up (`bytesIn`, `bytesOut`, `requests`, `connections`).\n *\n * Deliberately limited to those four fields: `TunnelUsageBucket` carries no\n * latency or error counters, so per-tunnel latency / error-rate tiles are not\n * rendered rather than filled with an invented number.\n */\nexport const TunnelMetricTiles: FC<TunnelMetricTilesProps> = ({ tunnelId }) => {\n const tr = useTr();\n\n // Snap the window to hour boundaries so the query variables stay stable\n // across re-renders (and share Apollo's cache entry between visits).\n const [from, to] = useMemo(() => {\n const end = Math.ceil(Date.now() / HOUR_MS) * HOUR_MS;\n const start = end - TUNNEL_METRIC_WINDOW_HOURS * HOUR_MS;\n return [new Date(start).toISOString(), new Date(end).toISOString()];\n }, []);\n\n const { data, loading, error, refetch } = useGetTunnelUsageQuery({\n variables: { tunnelId, from, to },\n fetchPolicy: 'cache-and-network',\n });\n\n const summary = useMemo(() => summariseTunnelUsage(data?.tunnelUsage ?? []), [data?.tunnelUsage]);\n\n if (loading && !data) {\n return (\n <LoadingState\n size=\"sm\"\n message={tr('vibecontrols.tunnels.overview.metrics.loading', 'Loading traffic')}\n />\n );\n }\n\n if (error) {\n return (\n <ErrorState\n title={tr('vibecontrols.tunnels.overview.metrics.errorTitle', 'Traffic unavailable')}\n message={error.message}\n onRetry={() => void refetch()}\n />\n );\n }\n\n if (summary.ordered.length === 0) {\n return (\n <EmptyState\n title={tr('vibecontrols.tunnels.overview.metrics.emptyTitle', 'No traffic in the last 24h')}\n description={tr(\n 'vibecontrols.tunnels.overview.metrics.emptyDescription',\n 'Traffic tiles appear once the tunnel carries a request. The backend rolls usage up hourly.'\n )}\n />\n );\n }\n\n const rate = formatPerHourRate(averageRatePerHour(summary.requests, TUNNEL_METRIC_WINDOW_HOURS));\n const rateUnit = {\n sec: tr('vibecontrols.tunnels.overview.metrics.perSecond', '/s'),\n min: tr('vibecontrols.tunnels.overview.metrics.perMinute', '/min'),\n hr: tr('vibecontrols.tunnels.overview.metrics.perHour', '/hr'),\n }[rate.unit];\n\n return (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <MetricTile\n icon={<ArrowDownUp className=\"size-3.5\" aria-hidden=\"true\" />}\n label={tr('vibecontrols.tunnels.overview.metrics.dataTransferred', 'Data transferred')}\n hint={tr('vibecontrols.tunnels.overview.metrics.last24h', 'Last 24h')}\n value={formatBytes(summary.bytesTotal)}\n subtitle={tr(\n 'vibecontrols.tunnels.overview.metrics.inOutSplit',\n '{{in}} in · {{out}} out',\n { in: formatBytes(summary.bytesIn), out: formatBytes(summary.bytesOut) }\n )}\n series={summary.bytesSeries}\n seriesColorClass=\"text-accent-teal\"\n seriesLabel={tr(\n 'vibecontrols.tunnels.overview.metrics.dataTransferredSeries',\n 'Bytes transferred per hour over the last 24 hours'\n )}\n />\n\n <MetricTile\n icon={<Activity className=\"size-3.5\" aria-hidden=\"true\" />}\n label={tr('vibecontrols.tunnels.overview.metrics.requestRate', 'Request rate')}\n hint={tr('vibecontrols.tunnels.overview.metrics.average', 'Average')}\n value={`${rate.value}${rateUnit}`}\n subtitle={tr(\n 'vibecontrols.tunnels.overview.metrics.requestTotal',\n '{{count}} requests in the last 24h',\n { count: summary.requests.toLocaleString() }\n )}\n series={summary.requestSeries}\n seriesColorClass=\"text-accent-purple\"\n seriesLabel={tr(\n 'vibecontrols.tunnels.overview.metrics.requestRateSeries',\n 'Requests per hour over the last 24 hours'\n )}\n />\n\n <div className=\"sm:col-span-2\">\n <MetricTile\n icon={<PlugZap className=\"size-3.5\" aria-hidden=\"true\" />}\n label={tr('vibecontrols.tunnels.overview.metrics.connections', 'Connections')}\n hint={tr('vibecontrols.tunnels.overview.metrics.last24h', 'Last 24h')}\n value={summary.connections.toLocaleString()}\n subtitle={tr(\n 'vibecontrols.tunnels.overview.metrics.peakConnections',\n 'Peak {{count}} in a single hour',\n { count: summary.peakConnections.toLocaleString() }\n )}\n series={summary.connectionSeries}\n seriesColorClass=\"text-text-link\"\n seriesLabel={tr(\n 'vibecontrols.tunnels.overview.metrics.connectionsSeries',\n 'Connections per hour over the last 24 hours'\n )}\n />\n </div>\n </div>\n );\n};\n\ninterface MetricTileProps {\n icon: ReactNode;\n label: string;\n hint: string;\n value: string;\n subtitle: string;\n series: readonly number[];\n seriesColorClass: string;\n seriesLabel: string;\n}\n\nconst MetricTile: FC<MetricTileProps> = ({\n icon,\n label,\n hint,\n value,\n subtitle,\n series,\n seriesColorClass,\n seriesLabel,\n}) => (\n <div className=\"rounded-lg border border-border-subtle bg-bg-sunken p-3\">\n <div className=\"flex items-center gap-1.5 text-xs font-medium text-text-secondary\">\n <span className=\"text-text-muted\">{icon}</span>\n <span className=\"truncate\">{label}</span>\n <span className=\"ml-auto flex-shrink-0 text-text-muted\">{hint}</span>\n </div>\n <div className=\"mt-2 flex items-end justify-between gap-3\">\n <span className=\"text-lg font-semibold tabular-nums text-text-primary\">{value}</span>\n <TunnelSparkline\n values={series}\n ariaLabel={seriesLabel}\n className={`h-6 w-24 flex-shrink-0 ${seriesColorClass}`}\n />\n </div>\n <p className=\"mt-1 text-xs text-text-muted\">{subtitle}</p>\n </div>\n);\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelPublicAccessPanel.js","names":[],"sources":["../../../src/components/tunnels/TunnelPublicAccessPanel.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useState } from 'react';\nimport { Globe, Copy, Check, Clock, ShieldOff } from 'lucide-react';\n\nimport { notify } from '@/lib/toast';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n useSetTunnelPublicAccessMutation,\n useRevokeTunnelPublicAccessMutation,\n} from '@/generated/wspace-operations';\n\ninterface TunnelPublicAccessPanelProps {\n tunnelId: string;\n tunnelStatus: string;\n publicAccessExpiresAt?: string | null;\n publicUrl?: string | null;\n canUpdate: boolean;\n onChanged: () => void;\n}\n\n// TTL choices in seconds, inside the svc's 300 (5m) … 2592000 (30d) bounds.\nconst TTL_OPTIONS = [\n { key: '1h', seconds: 3600 },\n { key: '4h', seconds: 14_400 },\n { key: '24h', seconds: 86_400 },\n { key: '7d', seconds: 604_800 },\n];\n\n/**\n * TunnelPublicAccessPanel — grant a time-boxed public link to a tunnel and have it tear itself down.\n * Picking a window stamps `publicAccessExpiresAt = now + ttl`; a backend sweep stops the tunnel (the\n * public URL goes dead) the moment it lapses, so a \"share my localhost for 4 hours\" or \"open this DB\n * port to a contractor until tonight\" link can't outlive its purpose. Revoke kills it immediately.\n * This is the UI half of the beta-tester-tunnel / local-port-share / database-port-forward stories.\n */\nexport const TunnelPublicAccessPanel: FC<TunnelPublicAccessPanelProps> = ({\n tunnelId,\n tunnelStatus,\n publicAccessExpiresAt,\n publicUrl,\n canUpdate,\n onChanged,\n}) => {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const [ttlSeconds, setTtlSeconds] = useState(TTL_OPTIONS[1].seconds);\n const [copied, setCopied] = useState(false);\n const [setAccess, { loading: granting }] = useSetTunnelPublicAccessMutation();\n const [revokeAccess, { loading: revoking }] = useRevokeTunnelPublicAccessMutation();\n\n const expiresAt = publicAccessExpiresAt ? new Date(publicAccessExpiresAt) : null;\n const isActive = Boolean(expiresAt && expiresAt.getTime() > Date.now());\n const ttlLabel = (key: string): string =>\n ({ '1h': '1 hour', '4h': '4 hours', '24h': '24 hours', '7d': '7 days' })[key] ?? key;\n\n const handleGrant = async (): Promise<void> => {\n try {\n await setAccess({ variables: { tunnelId, ttlSeconds } });\n onChanged();\n notify.success(\n tr('tunPublic.granted', 'Public access granted'),\n tr('tunPublic.grantedDesc', 'The link auto-expires when the window ends.')\n );\n } catch (err) {\n notify.error(tr('tunPublic.grantFailed', 'Could not grant access'), (err as Error).message);\n }\n };\n\n const handleRevoke = async (): Promise<void> => {\n try {\n await revokeAccess({ variables: { tunnelId } });\n onChanged();\n notify.success(tr('tunPublic.revoked', 'Public access revoked — the link is dead'));\n } catch (err) {\n notify.error(tr('tunPublic.revokeFailed', 'Could not revoke'), (err as Error).message);\n }\n };\n\n const copyUrl = async (): Promise<void> => {\n if (!publicUrl) return;\n try {\n await navigator.clipboard.writeText(publicUrl);\n setCopied(true);\n notify.success(tr('tunPublic.copied', 'Public URL copied'));\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n notify.error(tr('tunPublic.copyFailed', 'Could not copy — copy it manually'), publicUrl);\n }\n };\n\n return (\n <section className=\"md:col-span-2 rounded-lg border border-border-subtle bg-bg-surface p-4\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-text-primary\">\n <Globe className=\"size-4\" />\n {tr('tunPublic.title', 'Time-limited public access')}\n </h3>\n\n {isActive && expiresAt ? (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 rounded-card border border-status-success-border bg-status-success-bg-subtle px-3 py-2 text-sm text-status-success-text\">\n <Clock className=\"size-4 shrink-0\" />\n <span>\n {tr('tunPublic.liveUntil', 'Public until')}{' '}\n <strong>{expiresAt.toLocaleString()}</strong>\n {tunnelStatus !== 'ACTIVE' && (\n <span className=\"ml-1 text-text-tertiary\">\n {tr('tunPublic.notRunning', '(start the tunnel for the URL to serve)')}\n </span>\n )}\n </span>\n </div>\n {publicUrl && (\n <div className=\"flex items-center gap-2 rounded-md border border-border-default px-3 py-2\">\n <span className=\"flex-1 truncate font-mono text-xs text-text-secondary\">\n {publicUrl}\n </span>\n <button\n type=\"button\"\n onClick={() => void copyUrl()}\n className=\"p-1 text-text-secondary hover:text-text-primary\"\n aria-label={tr('common.copy', 'Copy')}\n >\n {copied ? (\n <Check className=\"size-4 text-status-success-text\" />\n ) : (\n <Copy className=\"size-4\" />\n )}\n </button>\n </div>\n )}\n {canUpdate && (\n <button\n type=\"button\"\n onClick={() => void handleRevoke()}\n disabled={revoking}\n className=\"flex items-center gap-1.5 rounded-md border border-border-default px-3 py-2 text-sm text-action-danger-text hover:bg-bg-sunken disabled:opacity-50\"\n >\n <ShieldOff className=\"size-4\" />\n {tr('tunPublic.revoke', 'Revoke now')}\n </button>\n )}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <p className=\"text-sm text-text-secondary\">\n {tr(\n 'tunPublic.off',\n 'Public access is off. Grant a time-boxed window and the link tears itself down when it ends.'\n )}\n </p>\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"flex-1 min-w-[10rem]\">\n <span className=\"text-sm text-text-secondary\">\n {tr('tunPublic.window', 'Access window')}\n </span>\n <select\n value={ttlSeconds}\n onChange={(e) => setTtlSeconds(Number(e.target.value))}\n className=\"mt-1 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary\"\n >\n {TTL_OPTIONS.map((o) => (\n <option key={o.key} value={o.seconds}>\n {tr(`tunPublic.ttl.${o.key}`, ttlLabel(o.key))}\n </option>\n ))}\n </select>\n </label>\n {canUpdate && (\n <button\n type=\"button\"\n onClick={() => void handleGrant()}\n disabled={granting}\n className=\"flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm text-action-primary-text hover:opacity-90 disabled:opacity-50\"\n >\n <Globe className=\"size-4\" />\n {tr('tunPublic.grant', 'Grant public access')}\n </button>\n )}\n </div>\n </div>\n )}\n </section>\n );\n};\n"],"mappings":";;;;;;;AAqBA,IAAM,IAAc;CAClB;EAAE,KAAK;EAAM,SAAS;EAAM;CAC5B;EAAE,KAAK;EAAM,SAAS;EAAQ;CAC9B;EAAE,KAAK;EAAO,SAAS;EAAQ;CAC/B;EAAE,KAAK;EAAM,SAAS;EAAS;CAChC,EASY,KAA6D,EACxE,aACA,iBACA,0BACA,cACA,cACA,mBACI;CACJ,IAAM,EAAE,SAAM,GAAS,EACjB,KAAM,GAAa,MAA6B;EACpD,IAAM,IAAI,EAAE,EAAI;AAChB,SAAO,MAAM,IAAM,IAAW;IAG1B,CAAC,GAAY,KAAiB,EAAS,EAAY,GAAG,QAAQ,EAC9D,CAAC,GAAQ,KAAa,EAAS,GAAM,EACrC,CAAC,GAAW,EAAE,SAAS,OAAc,GAAkC,EACvE,CAAC,GAAc,EAAE,SAAS,OAAc,GAAqC,EAE7E,IAAY,IAAwB,IAAI,KAAK,EAAsB,GAAG,MACtE,IAAW,GAAQ,KAAa,EAAU,SAAS,GAAG,KAAK,KAAK,GAChE,KAAY,OACf;EAAE,MAAM;EAAU,MAAM;EAAW,OAAO;EAAY,MAAM;EAAU,EAAE,MAAQ,GAE7E,IAAc,YAA2B;AAC7C,MAAI;AAGF,GAFA,MAAM,EAAU,EAAE,WAAW;IAAE;IAAU;IAAY,EAAE,CAAC,EACxD,GAAW,EACX,EAAO,QACL,EAAG,qBAAqB,wBAAwB,EAChD,EAAG,yBAAyB,8CAA8C,CAC3E;WACM,GAAK;AACZ,KAAO,MAAM,EAAG,yBAAyB,yBAAyB,EAAG,EAAc,QAAQ;;IAIzF,IAAe,YAA2B;AAC9C,MAAI;AAGF,GAFA,MAAM,EAAa,EAAE,WAAW,EAAE,aAAU,EAAE,CAAC,EAC/C,GAAW,EACX,EAAO,QAAQ,EAAG,qBAAqB,2CAA2C,CAAC;WAC5E,GAAK;AACZ,KAAO,MAAM,EAAG,0BAA0B,mBAAmB,EAAG,EAAc,QAAQ;;IAIpF,IAAU,YAA2B;AACpC,QACL,KAAI;AAIF,GAHA,MAAM,UAAU,UAAU,UAAU,EAAU,EAC9C,EAAU,GAAK,EACf,EAAO,QAAQ,EAAG,oBAAoB,oBAAoB,CAAC,EAC3D,OAAO,iBAAiB,EAAU,GAAM,EAAE,KAAK;UACzC;AACN,KAAO,MAAM,EAAG,wBAAwB,oCAAoC,EAAE,EAAU;;;AAI5F,QACE,kBAAC,WAAD;EAAS,WAAU;YAAnB,CACE,kBAAC,MAAD;GAAI,WAAU;aAAd,CACE,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA,EAC3B,EAAG,mBAAmB,6BAA6B,CACjD;MAEJ,KAAY,IACX,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAO,WAAU,mBAAoB,CAAA,EACrC,kBAAC,QAAD,EAAA,UAAA;MACG,EAAG,uBAAuB,eAAe;MAAE;MAC5C,kBAAC,UAAD,EAAA,UAAS,EAAU,gBAAgB,EAAU,CAAA;MAC5C,MAAiB,YAChB,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAG,wBAAwB,0CAA0C;OACjE,CAAA;MAEJ,EAAA,CAAA,CACH;;IACL,KACC,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBACb;MACI,CAAA,EACP,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,KAAK,GAAS;MAC7B,WAAU;MACV,cAAY,EAAG,eAAe,OAAO;gBAEpC,IACC,kBAAC,GAAD,EAAO,WAAU,mCAAoC,CAAA,GAErD,kBAAC,GAAD,EAAM,WAAU,UAAW,CAAA;MAEtB,CAAA,CACL;;IAEP,KACC,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,KAAK,GAAc;KAClC,UAAU;KACV,WAAU;eAJZ,CAME,kBAAC,GAAD,EAAW,WAAU,UAAW,CAAA,EAC/B,EAAG,oBAAoB,aAAa,CAC9B;;IAEP;OAEN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cACV,EACC,iBACA,+FACD;IACC,CAAA,EACJ,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,SAAD;KAAO,WAAU;eAAjB,CACE,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAG,oBAAoB,gBAAgB;MACnC,CAAA,EACP,kBAAC,UAAD;MACE,OAAO;MACP,WAAW,MAAM,EAAc,OAAO,EAAE,OAAO,MAAM,CAAC;MACtD,WAAU;gBAET,EAAY,KAAK,MAChB,kBAAC,UAAD;OAAoB,OAAO,EAAE;iBAC1B,EAAG,iBAAiB,EAAE,OAAO,EAAS,EAAE,IAAI,CAAC;OACvC,EAFI,EAAE,IAEN,CACT;MACK,CAAA,CACH;QACP,KACC,kBAAC,UAAD;KACE,MAAK;KACL,eAAe,KAAK,GAAa;KACjC,UAAU;KACV,WAAU;eAJZ,CAME,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA,EAC3B,EAAG,mBAAmB,sBAAsB,CACtC;OAEP;MACF;KAEA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelSparkline.js","names":[],"sources":["../../../src/components/tunnels/TunnelSparkline.tsx"],"sourcesContent":["import type { FC } from 'react';\n\ninterface TunnelSparklineProps {\n /** One value per hourly usage bucket, oldest → newest. */\n values: readonly number[];\n /** Accessible description of what the bars represent. */\n ariaLabel: string;\n /** Semantic colour utility applied to the bars, e.g. `text-accent-teal`. */\n className?: string;\n}\n\nconst VIEW_WIDTH = 100;\nconst VIEW_HEIGHT = 24;\n/** Bars keep a hairline of height at zero so an idle hour still reads as a bucket. */\nconst MIN_BAR_HEIGHT = 1;\n\n/**\n * A bar sparkline over real hourly usage buckets — one bar per bucket returned\n * by `tunnelUsage`. It plots only the values it is handed; there is no\n * smoothing, padding or synthesised history, so an empty window renders nothing\n * and the caller shows its empty state instead.\n */\nexport const TunnelSparkline: FC<TunnelSparklineProps> = ({ values, ariaLabel, className }) => {\n if (values.length === 0) return null;\n\n const max = values.reduce((acc, v) => Math.max(acc, v), 0);\n const slot = VIEW_WIDTH / values.length;\n const barWidth = Math.max(slot * 0.62, 0.5);\n\n return (\n <svg\n viewBox={`0 0 ${VIEW_WIDTH} ${VIEW_HEIGHT}`}\n preserveAspectRatio=\"none\"\n className={className}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {values.map((value, index) => {\n const height =\n max > 0\n ? Math.max((value / max) * VIEW_HEIGHT, value > 0 ? MIN_BAR_HEIGHT : MIN_BAR_HEIGHT / 2)\n : MIN_BAR_HEIGHT / 2;\n return (\n <rect\n key={index}\n x={index * slot + (slot - barWidth) / 2}\n y={VIEW_HEIGHT - height}\n width={barWidth}\n height={height}\n fill=\"currentColor\"\n opacity={value > 0 ? 1 : 0.35}\n />\n );\n })}\n </svg>\n );\n};\n"],"mappings":";;AAWA,IAAM,IAAa,KACb,IAAc,IAEd,IAAiB,GAQV,KAA6C,EAAE,WAAQ,cAAW,mBAAgB;AAC7F,KAAI,EAAO,WAAW,EAAG,QAAO;CAEhC,IAAM,IAAM,EAAO,QAAQ,GAAK,MAAM,KAAK,IAAI,GAAK,EAAE,EAAE,EAAE,EACpD,IAAO,IAAa,EAAO,QAC3B,IAAW,KAAK,IAAI,IAAO,KAAM,GAAI;AAE3C,QACE,kBAAC,OAAD;EACE,SAAS,OAAO,EAAW,GAAG;EAC9B,qBAAoB;EACT;EACX,MAAK;EACL,cAAY;YAEX,EAAO,KAAK,GAAO,MAAU;GAC5B,IAAM,IACJ,IAAM,IACF,KAAK,IAAK,IAAQ,IAAO,GAAa,IAAQ,IAAI,IAAiB,IAAiB,EAAE,GACtF,IAAiB;AACvB,UACE,kBAAC,QAAD;IAEE,GAAG,IAAQ,KAAQ,IAAO,KAAY;IACtC,GAAG,IAAc;IACjB,OAAO;IACC;IACR,MAAK;IACL,SAAS,IAAQ,IAAI,IAAI;IACzB,EAPK,EAOL;IAEJ;EACE,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TunnelStatusBadge.js","names":[],"sources":["../../../src/components/tunnels/TunnelStatusBadge.tsx"],"sourcesContent":["import type { TunnelStatus } from '@/generated/wspace-types';\n\nconst STATUS_STYLES: Record<string, string> = {\n ACTIVE: 'bg-status-success-bg-subtle text-status-success-text',\n DRAFT: 'bg-bg-sunken text-text-secondary',\n PROVISIONING: 'bg-status-warning-bg-subtle text-status-warning-text',\n DEGRADED: 'bg-status-warning-bg-subtle text-status-warning-text',\n STOPPED: 'bg-bg-sunken text-text-muted',\n ERROR: 'bg-status-error-bg-subtle text-status-error-text',\n DELETING: 'bg-bg-sunken text-text-muted',\n};\n\nexport function TunnelStatusBadge({ status }: { status: TunnelStatus | string }) {\n const style = STATUS_STYLES[status] ?? 'bg-bg-sunken text-text-secondary';\n return (\n <span\n className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${style}`}\n >\n {status}\n </span>\n );\n}\n"],"mappings":";;AAEA,IAAM,IAAwC;CAC5C,QAAQ;CACR,OAAO;CACP,cAAc;CACd,UAAU;CACV,SAAS;CACT,OAAO;CACP,UAAU;CACX;AAED,SAAgB,EAAkB,EAAE,aAA6C;AAE/E,QACE,kBAAC,QAAD;EACE,WAAW,yEAHD,EAAc,MAAW;YAKlC;EACI,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tunnelEndpoints.js","names":[],"sources":["../../../src/components/tunnels/tunnelEndpoints.ts"],"sourcesContent":["import type { GetTunnelQuery } from '@/generated/wspace-operations';\nimport { TunnelProtocol } from '@/generated/wspace-types';\n\ntype TunnelDetails = NonNullable<GetTunnelQuery['tunnel']>;\n\n/** Where an endpoint row came from — the caller turns this into a translated label. */\nexport type TunnelEndpointKind = 'primary' | 'domain' | 'local';\n\nexport interface TunnelEndpoint {\n kind: TunnelEndpointKind;\n /** Fully qualified address, e.g. `https://pg.example.com` or `tcp://10.0.4.20:5432`. */\n url: string;\n /** True when the URL is browser-navigable (and therefore safe to render as a link). */\n isWebLink: boolean;\n}\n\n/**\n * URL scheme a client uses to reach the tunnel's *public* side.\n *\n * HTTP tunnels are always terminated with TLS at the edge, so they advertise\n * `https`. TCP/UDP keep their own scheme — a UDP tunnel must not be advertised\n * as an HTTPS URL.\n */\nexport function publicTunnelScheme(protocol: TunnelDetails['protocol']): string {\n switch (protocol) {\n case TunnelProtocol.Tcp:\n return 'tcp';\n case TunnelProtocol.Udp:\n return 'udp';\n default:\n return 'https';\n }\n}\n\n/**\n * Every address this tunnel answers on: the primary hostname first, then any\n * other attached domains, then the local target the agent forwards to.\n *\n * Shared by the Endpoints tab and the Overview \"Connection\" card so the two\n * can never disagree about what a tunnel's address is.\n */\nexport function buildTunnelEndpoints(tunnel: TunnelDetails): TunnelEndpoint[] {\n const scheme = publicTunnelScheme(tunnel.protocol);\n const isWebLink = scheme === 'https';\n const primaryHostname = tunnel.primaryDomain?.hostname ?? null;\n const endpoints: TunnelEndpoint[] = [];\n\n if (primaryHostname) {\n endpoints.push({ kind: 'primary', url: `${scheme}://${primaryHostname}`, isWebLink });\n }\n\n for (const domain of tunnel.domains ?? []) {\n if (domain.hostname === primaryHostname) continue;\n endpoints.push({ kind: 'domain', url: `${scheme}://${domain.hostname}`, isWebLink });\n }\n\n endpoints.push({\n kind: 'local',\n url: `${tunnel.protocol.toLowerCase()}://${tunnel.localHost}:${tunnel.localPort}`,\n isWebLink: false,\n });\n\n return endpoints;\n}\n\n/**\n * The address to hand a client, or `null` when the tunnel has no public\n * hostname yet (DRAFT tunnels, and ACTIVE ones whose provider is still\n * allocating a domain). Callers must render an explanatory empty state rather\n * than falling back to the local target, which is not reachable off-host.\n */\nexport function primaryTunnelEndpoint(tunnel: TunnelDetails): TunnelEndpoint | null {\n return buildTunnelEndpoints(tunnel).find((endpoint) => endpoint.kind === 'primary') ?? null;\n}\n"],"mappings":";;AAuBA,SAAgB,EAAmB,GAA6C;AAC9E,SAAQ,GAAR;EACE,KAAK,EAAe,IAClB,QAAO;EACT,KAAK,EAAe,IAClB,QAAO;EACT,QACE,QAAO;;;AAWb,SAAgB,EAAqB,GAAyC;CAC5E,IAAM,IAAS,EAAmB,EAAO,SAAS,EAC5C,IAAY,MAAW,SACvB,IAAkB,EAAO,eAAe,YAAY,MACpD,IAA8B,EAAE;AAEtC,CAAI,KACF,EAAU,KAAK;EAAE,MAAM;EAAW,KAAK,GAAG,EAAO,KAAK;EAAmB;EAAW,CAAC;AAGvF,MAAK,IAAM,KAAU,EAAO,WAAW,EAAE,CACnC,GAAO,aAAa,KACxB,EAAU,KAAK;EAAE,MAAM;EAAU,KAAK,GAAG,EAAO,KAAK,EAAO;EAAY;EAAW,CAAC;AAStF,QANA,EAAU,KAAK;EACb,MAAM;EACN,KAAK,GAAG,EAAO,SAAS,aAAa,CAAC,KAAK,EAAO,UAAU,GAAG,EAAO;EACtE,WAAW;EACZ,CAAC,EAEK;;AAST,SAAgB,EAAsB,GAA8C;AAClF,QAAO,EAAqB,EAAO,CAAC,MAAM,MAAa,EAAS,SAAS,UAAU,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tunnelMetrics.js","names":[],"sources":["../../../src/components/tunnels/tunnelMetrics.ts"],"sourcesContent":["import type { GetTunnelUsageQuery } from '@/generated/wspace-operations';\n\nexport type TunnelUsageBucket = GetTunnelUsageQuery['tunnelUsage'][number];\n\n/** Hours in the rolling window the tunnel metric tiles summarise. */\nexport const TUNNEL_METRIC_WINDOW_HOURS = 24;\n\nexport interface TunnelUsageSummary {\n /** Buckets ordered oldest → newest, one per hour the backend rolled up. */\n ordered: TunnelUsageBucket[];\n bytesIn: number;\n bytesOut: number;\n bytesTotal: number;\n requests: number;\n connections: number;\n /** Per-hour series, aligned with `ordered`, for the sparklines. */\n bytesSeries: number[];\n requestSeries: number[];\n connectionSeries: number[];\n /** Highest single-hour connection count in the window. */\n peakConnections: number;\n}\n\n/**\n * Fold the hourly `tunnelUsage` buckets into the totals and per-hour series the\n * Overview tiles render. Everything here is derived from fields the backend\n * actually returns (`bytesIn`, `bytesOut`, `requests`, `connections`) — no\n * metric is synthesised.\n */\nexport function summariseTunnelUsage(buckets: readonly TunnelUsageBucket[]): TunnelUsageSummary {\n const ordered = [...buckets].sort(\n (a, b) => new Date(a.hourBucket).getTime() - new Date(b.hourBucket).getTime()\n );\n\n const summary: TunnelUsageSummary = {\n ordered,\n bytesIn: 0,\n bytesOut: 0,\n bytesTotal: 0,\n requests: 0,\n connections: 0,\n bytesSeries: [],\n requestSeries: [],\n connectionSeries: [],\n peakConnections: 0,\n };\n\n for (const bucket of ordered) {\n const bytes = bucket.bytesIn + bucket.bytesOut;\n summary.bytesIn += bucket.bytesIn;\n summary.bytesOut += bucket.bytesOut;\n summary.bytesTotal += bytes;\n summary.requests += bucket.requests;\n summary.connections += bucket.connections;\n summary.bytesSeries.push(bytes);\n summary.requestSeries.push(bucket.requests);\n summary.connectionSeries.push(bucket.connections);\n summary.peakConnections = Math.max(summary.peakConnections, bucket.connections);\n }\n\n return summary;\n}\n\n/** Human-readable byte count (binary units, matching the Usage tab's table). */\nexport function formatBytes(n: number): string {\n if (n < 1024) return `${Math.round(n)} B`;\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KiB`;\n if (n < 1024 * 1024 * 1024) return `${(n / 1024 / 1024).toFixed(1)} MiB`;\n return `${(n / 1024 / 1024 / 1024).toFixed(2)} GiB`;\n}\n\n/**\n * Average rate over a window, expressed in whichever unit keeps the number\n * readable. Returns the numeric value plus the unit suffix so the caller can\n * translate the suffix.\n */\nexport function averageRatePerHour(total: number, hours: number): number {\n if (hours <= 0) return 0;\n return total / hours;\n}\n\n/** Format a per-hour rate as `/s`, `/min` or `/hr` depending on magnitude. */\nexport function formatPerHourRate(ratePerHour: number): {\n value: string;\n unit: 'sec' | 'min' | 'hr';\n} {\n const perMinute = ratePerHour / 60;\n const perSecond = perMinute / 60;\n if (perSecond >= 1) return { value: perSecond.toFixed(perSecond >= 10 ? 0 : 1), unit: 'sec' };\n if (perMinute >= 1) return { value: perMinute.toFixed(perMinute >= 10 ? 0 : 1), unit: 'min' };\n return { value: ratePerHour.toFixed(ratePerHour >= 10 ? 0 : 1), unit: 'hr' };\n}\n"],"mappings":";AA6BA,SAAgB,EAAqB,GAA2D;CAC9F,IAAM,IAAU,CAAC,GAAG,EAAQ,CAAC,MAC1B,GAAG,MAAM,IAAI,KAAK,EAAE,WAAW,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,WAAW,CAAC,SAAS,CAC9E,EAEK,IAA8B;EAClC;EACA,SAAS;EACT,UAAU;EACV,YAAY;EACZ,UAAU;EACV,aAAa;EACb,aAAa,EAAE;EACf,eAAe,EAAE;EACjB,kBAAkB,EAAE;EACpB,iBAAiB;EAClB;AAED,MAAK,IAAM,KAAU,GAAS;EAC5B,IAAM,IAAQ,EAAO,UAAU,EAAO;AAStC,EARA,EAAQ,WAAW,EAAO,SAC1B,EAAQ,YAAY,EAAO,UAC3B,EAAQ,cAAc,GACtB,EAAQ,YAAY,EAAO,UAC3B,EAAQ,eAAe,EAAO,aAC9B,EAAQ,YAAY,KAAK,EAAM,EAC/B,EAAQ,cAAc,KAAK,EAAO,SAAS,EAC3C,EAAQ,iBAAiB,KAAK,EAAO,YAAY,EACjD,EAAQ,kBAAkB,KAAK,IAAI,EAAQ,iBAAiB,EAAO,YAAY;;AAGjF,QAAO;;AAIT,SAAgB,EAAY,GAAmB;AAI7C,QAHI,IAAI,OAAa,GAAG,KAAK,MAAM,EAAE,CAAC,MAClC,IAAI,OAAO,OAAa,IAAI,IAAI,MAAM,QAAQ,EAAE,CAAC,QACjD,IAAI,OAAO,OAAO,OAAa,IAAI,IAAI,OAAO,MAAM,QAAQ,EAAE,CAAC,QAC5D,IAAI,IAAI,OAAO,OAAO,MAAM,QAAQ,EAAE,CAAC;;AAQhD,SAAgB,EAAmB,GAAe,GAAuB;AAEvE,QADI,KAAS,IAAU,IAChB,IAAQ;;AAIjB,SAAgB,EAAkB,GAGhC;CACA,IAAM,IAAY,IAAc,IAC1B,IAAY,IAAY;AAG9B,QAFI,KAAa,IAAU;EAAE,OAAO,EAAU,QAAQ,KAAa,KAAK,IAAI,EAAE;EAAE,MAAM;EAAO,GACzF,KAAa,IAAU;EAAE,OAAO,EAAU,QAAQ,KAAa,KAAK,IAAI,EAAE;EAAE,MAAM;EAAO,GACtF;EAAE,OAAO,EAAY,QAAQ,KAAe,KAAK,IAAI,EAAE;EAAE,MAAM;EAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VibeAgentEmptyState.js","names":[],"sources":["../../../src/components/vibe/VibeAgentEmptyState.tsx"],"sourcesContent":["/**\n * VibeAgentEmptyState — shown on the Vibe details page when the vibe has no\n * agent attached. Tabs that depend on an agent (sessions, gitops, GraphQL\n * playground, git) are hidden, and the user is invited to attach an agent.\n *\n * UX: opens an in-place modal listing the workspace's existing agents so the\n * user can attach one without leaving the vibe detail page. Falls back to\n * navigating to the agents page only if no agents exist in the workspace\n * (so the user can register their first one).\n */\nimport { useCallback, useMemo, useState } from 'react';\nimport type { FC } from 'react';\nimport { ArrowRight, Plus, Server } from 'lucide-react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { EmptyState } from '@/components/shared';\nimport { useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport {\n useListAgentsQuery,\n useAttachAgentToVibeMutation,\n GetVibeDocument,\n ListVibesDocument,\n type ListAgentsQuery,\n} from '@/generated/wspace-operations';\n\nexport interface VibeAgentEmptyStateProps {\n vibeId: string;\n tr: (key: string, fallback: string) => string;\n /** Optional: called after a successful attach so the parent can refetch. */\n onAttached?: () => void;\n}\n\nexport const VibeAgentEmptyState: FC<VibeAgentEmptyStateProps> = ({ vibeId, tr, onAttached }) => {\n const navigate = useVibeNavigate();\n const apolloClient = useApolloClient();\n const [open, setOpen] = useState(false);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [busyAgentId, setBusyAgentId] = useState<string | null>(null);\n\n const { data, loading } = useListAgentsQuery({\n skip: !open,\n fetchPolicy: 'cache-and-network',\n });\n const [attach] = useAttachAgentToVibeMutation({\n refetchQueries: [GetVibeDocument, ListVibesDocument],\n awaitRefetchQueries: true,\n });\n\n const agents = useMemo<ListAgentsQuery['vibecontrolsAgents']>(\n () => data?.vibecontrolsAgents ?? [],\n [data]\n );\n\n const handleAttach = useCallback(\n async (agentId: string) => {\n setErrorMessage(null);\n setBusyAgentId(agentId);\n try {\n await attach({ variables: { input: { vibeId, agentId } } });\n apolloClient.cache.evict({ id: `Vibe:${vibeId}` });\n apolloClient.cache.gc();\n setOpen(false);\n onAttached?.();\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : String(err));\n } finally {\n setBusyAgentId(null);\n }\n },\n [attach, vibeId, onAttached, apolloClient]\n );\n\n const handleRegisterNew = useCallback(() => {\n // Deep-link to the agents page with vibeId so the agents UI can offer\n // a \"register and attach to this vibe\" affordance.\n const query = vibeId ? `?attachToVibe=${encodeURIComponent(vibeId)}` : '';\n navigate(`/agents${query}`);\n }, [navigate, vibeId]);\n\n return (\n <>\n <div className=\"rounded-lg border border-border-default bg-bg-surface\">\n <EmptyState\n icon={<Server className=\"size-8 text-text-secondary\" />}\n title={tr('vibeDetails.noAgentTitle', 'No agent attached')}\n description={tr(\n 'vibeDetails.noAgentDescription',\n 'This vibe is not attached to an agent yet. Sessions, GitOps, GraphQL playground, and git tooling all run through an agent — connect one to unlock those tabs.'\n )}\n action={\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n {tr('vibeDetails.connectAnAgent', 'Connect an agent to this vibe')}\n <ArrowRight className=\"size-4\" />\n </button>\n }\n />\n </div>\n\n {open && (\n <div\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"vibe-attach-agent-title\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n onClick={(e) => {\n if (e.target === e.currentTarget) setOpen(false);\n }}\n >\n <div className=\"w-full max-w-md rounded-lg bg-bg-elevated border border-border-default shadow-xl\">\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border-subtle\">\n <h2\n id=\"vibe-attach-agent-title\"\n className=\"text-base font-semibold text-text-primary\"\n >\n {tr('vibeDetails.attachAgentTitle', 'Attach an agent')}\n </h2>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"text-text-secondary hover:text-text-primary transition-colors\"\n aria-label={tr('common.close', 'Close')}\n >\n ✕\n </button>\n </div>\n\n <div className=\"px-5 py-4 max-h-[60vh] overflow-y-auto\">\n {loading && agents.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">{tr('common.loading', 'Loading…')}</p>\n ) : agents.length === 0 ? (\n <div className=\"text-sm text-text-secondary space-y-3\">\n <p>\n {tr(\n 'vibeDetails.noWorkspaceAgents',\n 'No agents in this workspace yet. Register one first, then attach it to this vibe.'\n )}\n </p>\n <button\n type=\"button\"\n onClick={handleRegisterNew}\n className=\"inline-flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n {tr('vibeDetails.registerAgent', 'Register an agent')}\n </button>\n </div>\n ) : (\n <ul className=\"space-y-2\">\n {agents.map((a) => (\n <li key={a.id}>\n <button\n type=\"button\"\n onClick={() => handleAttach(a.id)}\n disabled={busyAgentId !== null}\n className=\"w-full flex items-center justify-between gap-3 px-3 py-2.5 rounded-md border border-border-subtle hover:border-border-default hover:bg-action-ghost-bg-hover transition-colors text-left disabled:opacity-60\"\n >\n <span className=\"flex items-center gap-3 min-w-0\">\n <Server className=\"size-4 text-text-secondary flex-shrink-0\" />\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-text-primary truncate\">\n {a.name}\n </span>\n <span className=\"block text-xs text-text-secondary truncate\">\n {a.hostname || '—'}{' '}\n {a.isActive\n ? `· ${tr('agents.active', 'Active')}`\n : `· ${tr('agents.inactive', 'Inactive')}`}\n </span>\n </span>\n </span>\n <span className=\"text-xs text-text-tertiary\">\n {busyAgentId === a.id\n ? tr('common.attaching', 'Attaching…')\n : tr('vibeDetails.attach', 'Attach')}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n\n {errorMessage && (\n <p className=\"mt-3 text-sm text-status-error-text\">{errorMessage}</p>\n )}\n </div>\n\n {agents.length > 0 && (\n <div className=\"flex items-center justify-between px-5 py-3 border-t border-border-subtle\">\n <button\n type=\"button\"\n onClick={handleRegisterNew}\n className=\"text-xs text-text-secondary hover:text-text-primary inline-flex items-center gap-1\"\n >\n <Plus className=\"size-3.5\" />\n {tr('vibeDetails.registerAgent', 'Register a new agent')}\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className=\"text-sm px-3 py-1.5 rounded-md border border-border-default text-text-primary hover:bg-action-ghost-bg-hover\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VibeAgentSwitcher.js","names":[],"sources":["../../../src/components/vibe/VibeAgentSwitcher.tsx"],"sourcesContent":["/**\n * VibeAgentSwitcher — inline switcher + attach-more affordance shown on the\n * Vibe detail Overview tab once at least one agent is attached.\n *\n * Why this exists: a vibe can carry many agents (every collaborator brings\n * their own host/dev VM alongside shared env agents). Without a top-level\n * switcher, the \"effective agent\" chosen by the auto-pick heuristic is\n * invisible and unswitchable from the detail page, and there's no way to\n * attach a *second* agent without leaving for the agents tab. This card:\n *\n * 1. Names the active agent for the current user on this vibe.\n * 2. Lists every attached agent in a searchable dropdown — choosing one\n * writes to the per-vibe default store slot, persisted across reloads.\n * 3. Surfaces \"Attach another agent\" so users discover the multi-attach\n * flow without bouncing tabs.\n * 4. Surfaces \"Detach\" per agent (owner-scoped, no peer detaches).\n */\nimport { useMemo, useState, useCallback } from 'react';\nimport { Check, ChevronDown, Plus, Search, Server, X } from 'lucide-react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { Card } from '@/components/shared';\nimport {\n useAttachAgentToVibeMutation,\n useDetachAgentFromVibeMutation,\n useListAgentsQuery,\n GetVibeDocument,\n ListVibesDocument,\n type ListAgentsQuery,\n} from '@/generated/wspace-operations';\n\ntype ListAgent = NonNullable<ListAgentsQuery['vibecontrolsAgents']>[number];\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport { useTr } from '@/shared/hooks/useTr';\n\nexport interface AttachedAgent {\n id: string;\n name: string;\n hostname?: string | null;\n isActive: boolean;\n ownerUserId?: string | null;\n /** BOFF-6394 — `PRIVATE` = owner only; `WORKSPACE` = any member. */\n visibility?: 'PRIVATE' | 'WORKSPACE' | null;\n tunnelUrl?: string | null;\n}\n\ninterface Props {\n vibeId: string;\n attachedAgents: ReadonlyArray<AttachedAgent>;\n effectiveAgentId: string | null;\n}\n\nexport function VibeAgentSwitcher({ vibeId, attachedAgents, effectiveAgentId }: Props) {\n const tr = useTr();\n const apolloClient = useApolloClient();\n const setDefault = useVibeControlsStore((s) => s.setDefaultAgentForVibe);\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [attachOpen, setAttachOpen] = useState(false);\n const [attachQuery, setAttachQuery] = useState('');\n const [attachError, setAttachError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const active = attachedAgents.find((a) => a.id === effectiveAgentId) ?? attachedAgents[0] ?? null;\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return attachedAgents;\n return attachedAgents.filter(\n (a) =>\n a.name.toLowerCase().includes(q) ||\n (a.hostname ?? '').toLowerCase().includes(q) ||\n a.id.toLowerCase().includes(q)\n );\n }, [attachedAgents, query]);\n\n const { data: agentsData, refetch: refetchAgents } = useListAgentsQuery({\n skip: !attachOpen,\n fetchPolicy: 'cache-and-network',\n });\n const attachedIds = useMemo(() => new Set(attachedAgents.map((a) => a.id)), [attachedAgents]);\n const candidates = useMemo(() => {\n const all = agentsData?.vibecontrolsAgents ?? [];\n const q = attachQuery.trim().toLowerCase();\n return all\n .filter((a: ListAgent) => !attachedIds.has(a.id))\n .filter((a: ListAgent) =>\n q ? a.name.toLowerCase().includes(q) || (a.hostname ?? '').toLowerCase().includes(q) : true\n );\n }, [agentsData, attachedIds, attachQuery]);\n\n const [attach] = useAttachAgentToVibeMutation({\n refetchQueries: [GetVibeDocument, ListVibesDocument],\n awaitRefetchQueries: true,\n });\n const [detach] = useDetachAgentFromVibeMutation({\n refetchQueries: [GetVibeDocument, ListVibesDocument],\n awaitRefetchQueries: true,\n });\n\n const handlePick = useCallback(\n (agentId: string) => {\n setDefault(vibeId, agentId);\n setOpen(false);\n },\n [setDefault, vibeId]\n );\n\n const handleAttach = useCallback(\n async (agentId: string) => {\n setBusy(true);\n setAttachError(null);\n try {\n await attach({ variables: { input: { vibeId, agentId } } });\n apolloClient.cache.evict({ id: `Vibe:${vibeId}` });\n apolloClient.cache.gc();\n await refetchAgents();\n setAttachOpen(false);\n } catch (err) {\n setAttachError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(false);\n }\n },\n [attach, refetchAgents, vibeId, apolloClient]\n );\n\n const handleDetach = useCallback(\n async (agentId: string) => {\n if (!confirm(tr('vibeAgentSwitcher.detachConfirm', 'Detach this agent from the vibe?'))) {\n return;\n }\n setBusy(true);\n try {\n await detach({ variables: { input: { vibeId, agentId } } });\n // Evict the vibe from cache so the parent GetVibe query re-renders immediately\n apolloClient.cache.evict({ id: `Vibe:${vibeId}` });\n apolloClient.cache.gc();\n setOpen(false);\n } finally {\n setBusy(false);\n }\n },\n [detach, tr, vibeId, apolloClient]\n );\n\n return (\n <Card>\n <div className=\"p-4 border-b border-border-default flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Server className=\"size-5\" />\n {tr('vibeAgentSwitcher.title', 'Active agent for this vibe')}\n </h3>\n <button\n type=\"button\"\n onClick={() => setAttachOpen(true)}\n className=\"inline-flex items-center gap-1.5 text-xs px-2.5 py-1.5 rounded-md border border-border-default text-text-primary hover:bg-bg-sunken\"\n disabled={busy}\n >\n <Plus className=\"size-3.5\" />\n {tr('vibeAgentSwitcher.attachAnother', 'Attach another')}\n </button>\n </div>\n\n <div className=\"p-4 space-y-2 relative\">\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"w-full flex items-center justify-between gap-3 px-3 py-2.5 rounded-md border border-border-default bg-bg-sunken hover:border-action-primary-bg\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n <span className=\"flex items-center gap-3 min-w-0\">\n <Server className=\"size-4 text-text-secondary flex-shrink-0\" />\n <span className=\"min-w-0 text-left\">\n <span className=\"block text-sm font-medium text-text-primary truncate\">\n {active?.name ?? tr('vibeAgentSwitcher.none', 'No active agent')}\n </span>\n <span className=\"block text-xs text-text-secondary truncate\">\n {active?.hostname ?? '—'}\n {active && (active.isActive ? ' · active' : ' · offline')}\n </span>\n </span>\n </span>\n <ChevronDown\n className={`size-4 text-text-secondary transition-transform ${open ? 'rotate-180' : ''}`}\n />\n </button>\n\n {open && (\n <div className=\"absolute left-4 right-4 z-30 mt-1 rounded-md border border-border-default bg-bg-elevated shadow-lg\">\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-border-subtle\">\n <Search className=\"size-4 text-text-secondary\" />\n <input\n aria-label=\"control\"\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={tr('vibeAgentSwitcher.searchPlaceholder', 'Search agents…')}\n className=\"w-full bg-transparent text-sm text-text-primary outline-none\"\n />\n </div>\n <ul role=\"listbox\" className=\"max-h-64 overflow-y-auto py-1\">\n {filtered.length === 0 ? (\n <li className=\"px-3 py-2 text-xs text-text-secondary\">\n {tr('vibeAgentSwitcher.noMatch', 'No agents match your search.')}\n </li>\n ) : (\n filtered.map((a) => {\n const isActive = a.id === effectiveAgentId;\n return (\n <li key={a.id} className=\"flex items-center\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => handlePick(a.id)}\n className={`flex-1 flex items-center justify-between gap-3 px-3 py-2 text-left text-sm hover:bg-bg-sunken ${isActive ? 'bg-bg-sunken' : ''}`}\n >\n <span className=\"flex items-center gap-2 min-w-0\">\n <Server className=\"size-4 text-text-secondary flex-shrink-0\" />\n <span className=\"min-w-0\">\n <span className=\"block text-text-primary truncate\">{a.name}</span>\n <span className=\"block text-xs text-text-secondary truncate\">\n {a.hostname ?? '—'} {a.isActive ? '· active' : '· offline'}\n </span>\n </span>\n </span>\n {isActive && <Check className=\"size-4 text-action-primary-bg\" />}\n </button>\n <button\n type=\"button\"\n onClick={() => handleDetach(a.id)}\n disabled={busy}\n title={tr('vibeAgentSwitcher.detach', 'Detach from vibe')}\n className=\"px-2 text-text-secondary hover:text-status-error-text\"\n >\n <X className=\"size-4\" />\n </button>\n </li>\n );\n })\n )}\n </ul>\n </div>\n )}\n </div>\n\n {attachOpen && (\n <div\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setAttachOpen(false);\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n onClick={(e) => {\n if (e.target === e.currentTarget) setAttachOpen(false);\n }}\n >\n <div className=\"w-full max-w-md rounded-lg bg-bg-elevated border border-border-default shadow-xl\">\n <div className=\"flex items-center justify-between px-5 py-4 border-b border-border-subtle\">\n <h2 className=\"text-base font-semibold text-text-primary\">\n {tr('vibeAgentSwitcher.attachTitle', 'Attach an additional agent')}\n </h2>\n <button\n type=\"button\"\n onClick={() => setAttachOpen(false)}\n className=\"text-text-secondary hover:text-text-primary\"\n aria-label={tr('common.close', 'Close')}\n >\n <X className=\"size-4\" />\n </button>\n </div>\n <div className=\"px-5 py-3 border-b border-border-subtle\">\n <div className=\"flex items-center gap-2\">\n <Search className=\"size-4 text-text-secondary\" />\n <input\n aria-label=\"control\"\n type=\"text\"\n value={attachQuery}\n onChange={(e) => setAttachQuery(e.target.value)}\n placeholder={tr('vibeAgentSwitcher.searchPlaceholder', 'Search agents…')}\n className=\"w-full bg-transparent text-sm text-text-primary outline-none\"\n />\n </div>\n </div>\n <div className=\"p-2 max-h-[60vh] overflow-y-auto\">\n {candidates.length === 0 ? (\n <p className=\"text-sm text-text-secondary px-3 py-2\">\n {tr(\n 'vibeAgentSwitcher.noCandidates',\n 'No unattached agents available. Register a new agent first.'\n )}\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {candidates.map((a: ListAgent) => (\n <li key={a.id}>\n <button\n type=\"button\"\n onClick={() => handleAttach(a.id)}\n disabled={busy}\n className=\"w-full flex items-center justify-between gap-3 px-3 py-2.5 rounded-md border border-border-subtle hover:border-border-default hover:bg-action-ghost-bg-hover text-left disabled:opacity-60\"\n >\n <span className=\"flex items-center gap-3 min-w-0\">\n <Server className=\"size-4 text-text-secondary flex-shrink-0\" />\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium text-text-primary truncate\">\n {a.name}\n </span>\n <span className=\"block text-xs text-text-secondary truncate\">\n {a.hostname || '—'}\n {a.isActive ? ' · active' : ' · inactive'}\n </span>\n </span>\n </span>\n <span className=\"text-xs text-text-tertiary\">\n {tr('vibeAgentSwitcher.attach', 'Attach')}\n </span>\n </button>\n </li>\n ))}\n </ul>\n )}\n {attachError && (\n <p className=\"mt-2 px-3 text-sm text-status-error-text\">{attachError}</p>\n )}\n </div>\n </div>\n </div>\n )}\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VibeEnvVarsPanel.js","names":[],"sources":["../../../src/components/vibe/VibeEnvVarsPanel.tsx"],"sourcesContent":["import type { FC, FormEvent } from 'react';\nimport { useState } from 'react';\nimport { Variable, Lock, Trash2, Plus, Pencil, Eye, EyeOff } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\n\nimport { Card, LoadingState, ErrorState, ConfirmDialog } from '@/components/shared';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { notify } from '@/lib/toast';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n useGetVibeEnvVarsQuery,\n useSetVibeEnvVarMutation,\n useDeleteVibeEnvVarMutation,\n type VibeEnvVarFieldsFragment,\n} from '@/generated/wspace-operations';\n\ninterface VibeEnvVarsPanelProps {\n vibeId: string;\n}\n\nconst KEY_PATTERN = /^[A-Za-z_]\\w*$/;\n\n/**\n * VibeEnvVarsPanel — full CRUD for a vibe's environment variables, with first-class secret support.\n * Secret values are stored AES-256-GCM-encrypted server-side and are never returned in plaintext\n * (`value` comes back null + `isSecret` true), so the UI renders them masked. Plain vars show their\n * value. Every var a session started under this vibe will automatically inherit.\n */\nexport const VibeEnvVarsPanel: FC<VibeEnvVarsPanelProps> = ({ vibeId }) => {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n const { hasPermission } = usePermissions();\n const canEdit = hasPermission(VIBE_PERMISSIONS.VIBE_UPDATE);\n\n const { data, loading, error, refetch } = useGetVibeEnvVarsQuery({\n variables: { vibeId },\n fetchPolicy: 'cache-and-network',\n });\n const [setEnvVar, { loading: saving }] = useSetVibeEnvVarMutation();\n const [deleteEnvVar] = useDeleteVibeEnvVarMutation();\n\n const [formKey, setFormKey] = useState('');\n const [formValue, setFormValue] = useState('');\n const [formSecret, setFormSecret] = useState(false);\n const [editingKey, setEditingKey] = useState<string | null>(null);\n const [revealValue, setRevealValue] = useState(false);\n const [pendingDelete, setPendingDelete] = useState<string | null>(null);\n\n const envVars: VibeEnvVarFieldsFragment[] = data?.vibe?.envVars ?? [];\n\n const resetForm = (): void => {\n setFormKey('');\n setFormValue('');\n setFormSecret(false);\n setEditingKey(null);\n setRevealValue(false);\n };\n\n const startEdit = (key: string, isSecret: boolean, value: string | null | undefined): void => {\n setEditingKey(key);\n setFormKey(key);\n setFormValue(value ?? '');\n setFormSecret(isSecret);\n setRevealValue(false);\n };\n\n const handleSubmit = async (e: FormEvent): Promise<void> => {\n e.preventDefault();\n const key = formKey.trim();\n if (!KEY_PATTERN.test(key)) {\n notify.error(\n tr('vibeEnv.invalidKey', 'Invalid name'),\n tr(\n 'vibeEnv.invalidKeyDesc',\n 'Use letters, digits and underscores; must not start with a digit.'\n )\n );\n return;\n }\n try {\n await setEnvVar({ variables: { vibeId, key, value: formValue, isSecret: formSecret } });\n await refetch();\n notify.success(\n editingKey\n ? tr('vibeEnv.updated', 'Variable updated')\n : tr('vibeEnv.added', 'Variable added'),\n `${key}${formSecret ? ' (secret)' : ''}`\n );\n resetForm();\n } catch (err) {\n notify.error(tr('vibeEnv.saveFailed', 'Could not save variable'), (err as Error).message);\n }\n };\n\n const handleDelete = async (key: string): Promise<void> => {\n try {\n await deleteEnvVar({ variables: { vibeId, key } });\n await refetch();\n notify.success(tr('vibeEnv.deleted', 'Variable removed'), key);\n if (editingKey === key) resetForm();\n } catch (err) {\n notify.error(tr('vibeEnv.deleteFailed', 'Could not remove variable'), (err as Error).message);\n } finally {\n setPendingDelete(null);\n }\n };\n\n return (\n <Card>\n <div className=\"p-4 border-b border-border-default flex items-center justify-between\">\n <h3 className=\"font-semibold text-text-primary flex items-center gap-2\">\n <Variable className=\"size-5\" />\n {tr('vibeDetails.environmentVariables', 'Environment Variables')}\n </h3>\n <span className=\"text-xs text-text-secondary\">\n {tr('vibeEnv.injectedHint', 'Injected into every session started under this vibe')}\n </span>\n </div>\n\n <div className=\"p-4 space-y-4\">\n {loading && envVars.length === 0 ? (\n <LoadingState />\n ) : error ? (\n <ErrorState message={error.message} onRetry={() => void refetch()} />\n ) : envVars.length === 0 ? (\n <p className=\"text-text-secondary\">\n {tr('vibeDetails.noEnvironmentVariables', 'No environment variables configured')}\n </p>\n ) : (\n <ul className=\"divide-y divide-border-default rounded-md border border-border-default\">\n {envVars.map((v) => (\n <li key={v.key} className=\"flex items-center gap-3 px-3 py-2\">\n <span className=\"font-mono text-sm text-text-primary shrink-0\">{v.key}</span>\n <span className=\"text-text-tertiary\">=</span>\n <span className=\"font-mono text-sm text-text-secondary truncate flex items-center gap-1.5 flex-1\">\n {v.isSecret ? (\n <>\n <Lock className=\"size-3.5 text-text-tertiary\" aria-hidden />\n <span aria-label={tr('vibeEnv.secretMasked', 'Secret value (hidden)')}>\n ••••••••\n </span>\n </>\n ) : (\n <span className=\"truncate\">{v.value}</span>\n )}\n </span>\n {canEdit && (\n <div className=\"flex items-center gap-1 shrink-0\">\n <button\n type=\"button\"\n onClick={() => startEdit(v.key, v.isSecret, v.value)}\n className=\"p-1.5 rounded text-text-secondary hover:text-text-primary hover:bg-bg-sunken\"\n aria-label={tr('common.edit', 'Edit')}\n >\n <Pencil className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setPendingDelete(v.key)}\n className=\"p-1.5 rounded text-text-secondary hover:text-action-danger-text hover:bg-bg-sunken\"\n aria-label={tr('common.delete', 'Delete')}\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n )}\n </li>\n ))}\n </ul>\n )}\n\n {canEdit && (\n <form onSubmit={(e) => void handleSubmit(e)} className=\"space-y-3 pt-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <input\n value={formKey}\n onChange={(e) => setFormKey(e.target.value)}\n disabled={editingKey !== null}\n placeholder={tr('vibeEnv.keyPlaceholder', 'NAME')}\n className=\"font-mono text-sm px-3 py-2 rounded-md border border-border-default bg-bg-surface text-text-primary disabled:opacity-60 sm:w-48\"\n aria-label={tr('vibeEnv.keyLabel', 'Variable name')}\n />\n <div className=\"relative flex-1\">\n <input\n value={formValue}\n onChange={(e) => setFormValue(e.target.value)}\n type={formSecret && !revealValue ? 'password' : 'text'}\n placeholder={\n editingKey && formSecret\n ? tr('vibeEnv.secretReenter', 'Enter a new secret value')\n : tr('vibeEnv.valuePlaceholder', 'value')\n }\n className=\"w-full font-mono text-sm px-3 py-2 rounded-md border border-border-default bg-bg-surface text-text-primary\"\n aria-label={tr('vibeEnv.valueLabel', 'Variable value')}\n />\n {formSecret && (\n <button\n type=\"button\"\n onClick={() => setRevealValue((s) => !s)}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1 text-text-tertiary hover:text-text-primary\"\n aria-label={\n revealValue ? tr('vibeEnv.hide', 'Hide') : tr('vibeEnv.reveal', 'Reveal')\n }\n >\n {revealValue ? <EyeOff className=\"size-4\" /> : <Eye className=\"size-4\" />}\n </button>\n )}\n </div>\n </div>\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm text-text-secondary cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={formSecret}\n onChange={(e) => setFormSecret(e.target.checked)}\n className=\"rounded border-border-default\"\n />\n <Lock className=\"size-3.5\" />\n {tr('vibeEnv.secretToggle', 'Secret (encrypted at rest, never shown again)')}\n </label>\n <div className=\"flex items-center gap-2\">\n {editingKey && (\n <button\n type=\"button\"\n onClick={resetForm}\n className=\"px-3 py-2 text-sm rounded-md text-text-secondary hover:bg-bg-sunken\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n )}\n <button\n type=\"submit\"\n disabled={saving || formKey.trim().length === 0}\n className=\"flex items-center gap-1.5 px-3 py-2 text-sm rounded-md bg-action-primary-bg text-action-primary-text hover:opacity-90 disabled:opacity-50\"\n >\n <Plus className=\"size-4\" />\n {editingKey ? tr('vibeEnv.save', 'Save') : tr('vibeEnv.add', 'Add variable')}\n </button>\n </div>\n </div>\n </form>\n )}\n </div>\n\n {pendingDelete && (\n <ConfirmDialog\n isOpen\n title={tr('vibeEnv.deleteTitle', 'Remove environment variable?')}\n message={`\"${pendingDelete}\" ${tr('vibeEnv.deleteMessage', 'will be removed from this vibe.')}`}\n confirmLabel={tr('common.delete', 'Delete')}\n variant=\"danger\"\n onConfirm={() => void handleDelete(pendingDelete)}\n onClose={() => setPendingDelete(null)}\n />\n )}\n </Card>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VibeLinkedEntitiesPanel.js","names":[],"sources":["../../../src/components/vibe/VibeLinkedEntitiesPanel.tsx"],"sourcesContent":["import { Link2, ArrowUpRight } from 'lucide-react';\nimport { EmptyState, LoadingState, ErrorState } from '@/components/shared';\nimport { useTr } from '@/shared/hooks/useTr';\nimport { useVibeControls, useVibeNavigate } from '@/providers/VibeControlsProvider';\nimport {\n useGetVibeLinkedEntitiesQuery,\n useGetVibeLinkedSandboxesQuery,\n useGetVibeLinkedScheduledJobsQuery,\n type GetVibeLinkedEntitiesQuery,\n type GetVibeLinkedSandboxesQuery,\n type GetVibeLinkedScheduledJobsQuery,\n} from '@/generated/wspace-operations';\n\ntype LinkedSandbox = GetVibeLinkedSandboxesQuery['listSandboxes']['items'][number];\ntype LinkedScheduledJob = GetVibeLinkedScheduledJobsQuery['scheduledJobs']['jobs'][number];\n\ntype LinkedEntities = NonNullable<\n NonNullable<GetVibeLinkedEntitiesQuery['vibe']>['linkedEntities']\n>;\n\nexport type LinkedEntityKind =\n | 'vibedecks'\n | 'actions'\n | 'scheduledJobs'\n | 'sandboxes'\n | 'aiPrompts'\n | 'aiContexts'\n | 'instructionFiles'\n | 'tunnels';\n\ninterface VibeLinkedEntitiesPanelProps {\n vibeId: string;\n kind: LinkedEntityKind;\n}\n\nconst KIND_LABELS: Record<LinkedEntityKind, { singular: string; plural: string }> = {\n vibedecks: { singular: 'Vibe Deck', plural: 'Vibe Decks' },\n actions: { singular: 'Action', plural: 'Actions' },\n scheduledJobs: { singular: 'Scheduled Job', plural: 'Scheduled Jobs' },\n sandboxes: { singular: 'Sandbox', plural: 'Sandboxes' },\n aiPrompts: { singular: 'AI Prompt', plural: 'AI Prompts' },\n aiContexts: { singular: 'AI Context', plural: 'AI Contexts' },\n instructionFiles: { singular: 'Instruction File', plural: 'Instruction Files' },\n tunnels: { singular: 'Tunnel', plural: 'Tunnels' },\n};\n\n// Kinds backed by Vibe.linkedEntities on wspace-vibecontrols-svc. scheduledJobs +\n// sandboxes live in other subgraphs and are rendered by the dedicated\n// sub-panels below (listSandboxes / scheduledJobs filtered by vibeId).\nconst LOCAL_KINDS = new Set<LinkedEntityKind>([\n 'vibedecks',\n 'actions',\n 'aiPrompts',\n 'aiContexts',\n 'instructionFiles',\n 'tunnels',\n]);\n\n// In-app destination for each linked-entity kind's main management page. Lets\n// users jump straight from a vibe's linked-entity tab to the full entity surface\n// without hunting through the side navigation. All paths are relative to the\n// vibecontrols basePath and go through useVibeNavigate (which prepends it) —\n// EXCEPT `sandboxes`, which is served by a sibling host-shell MFE mounted at the\n// app-absolute `/sandbox` route and must be navigated via the host shell (see\n// VibeLinkedSandboxes below).\nconst KIND_ROUTES: Record<LinkedEntityKind, string> = {\n vibedecks: '/vibedeck',\n actions: '/actions',\n scheduledJobs: '/calendar',\n sandboxes: '/sandbox',\n aiPrompts: '/ai-tools/ai/prompts',\n aiContexts: '/ai-tools/ai/contexts',\n instructionFiles: '/ai-tools/ai/instructions',\n tunnels: '/tunnels',\n};\n\ninterface LinkedRow {\n id: string;\n label: string;\n badge: string;\n visibility: string;\n}\n\nfunction visibilityLabel(visibility: string): string {\n return visibility === 'SHARED_WITH_VIBE' ? 'Shared' : 'Private';\n}\n\n/**\n * Shared presentational shell for a list of linked rows: handles loading,\n * error, empty, and the populated list. Keeps the three data sources\n * (linkedEntities, sandboxes, scheduledJobs) rendering identically.\n */\nfunction LinkedRowsView({\n labels,\n loading,\n hasData,\n error,\n rows,\n emptyDescription,\n onOpenPage,\n}: {\n labels: { singular: string; plural: string };\n loading: boolean;\n hasData: boolean;\n error?: { message: string };\n rows: LinkedRow[];\n emptyDescription: string;\n /** Navigate to this kind's full management page (Part 1 deep-link). */\n onOpenPage?: () => void;\n}) {\n const tr = useTr();\n\n const body = (() => {\n if (loading && !hasData) {\n return (\n <div className=\"p-6\">\n <LoadingState message={`Loading ${labels.plural.toLowerCase()}…`} />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-6\">\n <ErrorState\n title={`Failed to load ${labels.plural.toLowerCase()}`}\n message={error.message}\n />\n </div>\n );\n }\n\n if (rows.length === 0) {\n return (\n <div className=\"p-6\">\n <EmptyState\n icon={<Link2 size={48} className=\"text-text-secondary\" />}\n title={`No ${labels.plural.toLowerCase()} linked yet`}\n description={emptyDescription}\n />\n </div>\n );\n }\n\n return (\n <ul className=\"divide-y divide-border-default\" data-testid=\"vibe-linked-entities\">\n {rows.map((row) => (\n <li key={row.id} className=\"flex items-center justify-between gap-3 px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-text-primary\">{row.label}</span>\n <span className=\"flex-shrink-0 rounded bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\">\n {row.badge}\n </span>\n </div>\n <span\n className={`flex-shrink-0 rounded px-2 py-0.5 text-xs ${\n row.visibility === 'SHARED_WITH_VIBE'\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-tertiary'\n }`}\n >\n {visibilityLabel(row.visibility)}\n </span>\n </li>\n ))}\n </ul>\n );\n })();\n\n return (\n <div className=\"rounded-lg border border-border-default bg-bg-surface\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border-default px-4 py-3\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{labels.plural}</h3>\n {onOpenPage && (\n <button\n type=\"button\"\n onClick={onOpenPage}\n data-testid=\"vibe-linked-open-page\"\n className=\"inline-flex flex-shrink-0 items-center gap-1.5 rounded-md border border-border-default px-2.5 py-1.5 text-xs font-medium text-text-primary transition-colors hover:bg-bg-elevated\"\n title={tr('vibeDetails.linked.openPageTitle', `Open the ${labels.plural} page`)}\n >\n {tr('vibeDetails.linked.openPage', `Open ${labels.plural} page`)}\n <ArrowUpRight size={14} />\n </button>\n )}\n </div>\n {body}\n </div>\n );\n}\n\n/** Sandboxes linked to the vibe — fetched from the sandbox subgraph. */\nfunction VibeLinkedSandboxes({ vibeId }: { vibeId: string }) {\n const tr = useTr();\n const navigate = useVibeNavigate();\n const labels = KIND_LABELS.sandboxes;\n const { workspaceId, projectId, navigate: shellNavigate } = useVibeControls();\n\n // Sandboxes mount at the app-absolute `/sandbox` route, OUTSIDE the\n // vibecontrols basePath. Use the host shell navigate directly so we don't get\n // basePath-prefixed into a dead end; fall back to the in-MFE navigate when\n // running standalone (no shell, basePath empty → path passes through as-is).\n const openSandboxes = () => {\n if (shellNavigate) shellNavigate(KIND_ROUTES.sandboxes);\n else navigate(KIND_ROUTES.sandboxes);\n };\n\n const { data, loading, error } = useGetVibeLinkedSandboxesQuery({\n variables: {\n context: { workspaceId: workspaceId ?? undefined, projectId: projectId ?? undefined },\n vibeId,\n },\n skip: !workspaceId,\n fetchPolicy: 'cache-and-network',\n });\n\n const rows: LinkedRow[] = (data?.listSandboxes?.items ?? []).map((s: LinkedSandbox) => ({\n id: s.id,\n label: s.name,\n badge: String(s.status),\n visibility: s.visibility,\n }));\n\n return (\n <LinkedRowsView\n labels={labels}\n loading={loading}\n hasData={!!data}\n error={error}\n rows={rows}\n onOpenPage={openSandboxes}\n emptyDescription={tr(\n 'vibeDetails.linked.empty',\n `Link a ${labels.singular.toLowerCase()} to this vibe and set it to \"Shared with vibe\" to make it visible to everyone with access.`\n )}\n />\n );\n}\n\n/** Scheduled jobs linked to the vibe — fetched from the scheduler subgraph. */\nfunction VibeLinkedScheduledJobs({ vibeId }: { vibeId: string }) {\n const tr = useTr();\n const navigate = useVibeNavigate();\n const labels = KIND_LABELS.scheduledJobs;\n const { workspaceId } = useVibeControls();\n\n const { data, loading, error } = useGetVibeLinkedScheduledJobsQuery({\n variables: { workspaceId: workspaceId ?? '', vibeId },\n skip: !workspaceId,\n fetchPolicy: 'cache-and-network',\n });\n\n const rows: LinkedRow[] = (data?.scheduledJobs?.jobs ?? []).map((j: LinkedScheduledJob) => ({\n id: j.id,\n label: j.name ?? j.id,\n badge: String(j.status),\n visibility: j.visibility,\n }));\n\n return (\n <LinkedRowsView\n labels={labels}\n loading={loading}\n hasData={!!data}\n error={error}\n rows={rows}\n onOpenPage={() => navigate(KIND_ROUTES.scheduledJobs)}\n emptyDescription={tr(\n 'vibeDetails.linked.empty',\n `Link a ${labels.singular.toLowerCase()} to this vibe and set it to \"Shared with vibe\" to make it visible to everyone with access.`\n )}\n />\n );\n}\n\n/**\n * Renders the entities linked to a vibe (visibility-filtered server-side) for a\n * given kind. Local kinds come from `Vibe.linkedEntities`; sandboxes +\n * scheduledJobs are fetched from their own subgraphs via dedicated vibeId\n * filters. SHARED_WITH_VIBE entities are visible to every member with access to\n * the vibe; PRIVATE only to their owner.\n */\nexport function VibeLinkedEntitiesPanel({ vibeId, kind }: VibeLinkedEntitiesPanelProps) {\n const tr = useTr();\n const navigate = useVibeNavigate();\n const labels = KIND_LABELS[kind];\n const isLocal = LOCAL_KINDS.has(kind);\n\n const { data, loading, error } = useGetVibeLinkedEntitiesQuery({\n variables: { id: vibeId },\n skip: !isLocal,\n fetchPolicy: 'cache-and-network',\n });\n\n if (kind === 'sandboxes') {\n return <VibeLinkedSandboxes vibeId={vibeId} />;\n }\n if (kind === 'scheduledJobs') {\n return <VibeLinkedScheduledJobs vibeId={vibeId} />;\n }\n\n const linked: LinkedEntities | undefined = data?.vibe?.linkedEntities ?? undefined;\n const rows: LinkedRow[] = (() => {\n if (!linked) return [];\n switch (kind) {\n case 'vibedecks':\n return linked.vibeDecks.map((d) => ({\n id: d.id,\n label: d.name,\n badge: 'Deck',\n visibility: d.visibility,\n }));\n case 'actions':\n return linked.actions.map((a) => ({\n id: a.id,\n label: a.name,\n badge: 'Action',\n visibility: a.visibility,\n }));\n case 'aiPrompts':\n return linked.aiPrompts.map((p) => ({\n id: p.id,\n label: p.name,\n badge: String(p.category),\n visibility: p.visibility,\n }));\n case 'aiContexts':\n return linked.aiContexts.map((c) => ({\n id: c.id,\n label: c.name,\n badge: String(c.type),\n visibility: c.visibility,\n }));\n case 'instructionFiles':\n return linked.instructionFiles.map((f) => ({\n id: f.id,\n label: f.effectiveFilename,\n badge: String(f.scope),\n visibility: f.visibility,\n }));\n case 'tunnels':\n return linked.tunnels.map((t) => ({\n id: t.id,\n label: t.name,\n badge: 'Tunnel',\n visibility: t.visibility,\n }));\n default:\n return [];\n }\n })();\n\n return (\n <LinkedRowsView\n labels={labels}\n loading={loading}\n hasData={!!data}\n error={error}\n rows={rows}\n onOpenPage={() => navigate(KIND_ROUTES[kind])}\n emptyDescription={tr(\n 'vibeDetails.linked.empty',\n `Link a ${labels.singular.toLowerCase()} to this vibe and set it to \"Shared with vibe\" to make it visible to everyone with access.`\n )}\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VibeLlmContextAdminPanel.js","names":[],"sources":["../../../src/components/vibe/VibeLlmContextAdminPanel.tsx"],"sourcesContent":["import type { ReactElement } from 'react';\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport { Clock, Info, Shield, Trash2 } from 'lucide-react';\n\ninterface AdminTokenRow {\n id: string;\n vibeId: string;\n userId: string;\n label: string | null;\n tokenFingerprint: string;\n includeCredentials: boolean;\n includes: string[];\n status: 'ACTIVE' | 'REVOKED';\n expiresAt: string;\n lastFetchedAt: string | null;\n fetchCount: number;\n createdAt: string;\n revokedAt: string | null;\n revokedReason: string | null;\n}\n\nconst ALL_TOKENS = gql`\n query AllVibeLlmContextTokens($vibeId: ID, $userId: ID) {\n allVibeLlmContextTokens(vibeId: $vibeId, userId: $userId) {\n id\n vibeId\n userId\n label\n tokenFingerprint\n includeCredentials\n includes\n status\n expiresAt\n lastFetchedAt\n fetchCount\n createdAt\n revokedAt\n revokedReason\n }\n }\n`;\n\nconst ADMIN_REVOKE = gql`\n mutation AdminRevokeVibeLlmContextToken($tokenId: ID!, $reason: String) {\n adminRevokeVibeLlmContextToken(tokenId: $tokenId, reason: $reason) {\n id\n status\n revokedAt\n revokedReason\n }\n }\n`;\n\nfunction formatExpiry(expiresAt: string): string {\n const diff = new Date(expiresAt).getTime() - Date.now();\n if (diff < 0) return 'expired';\n const hours = Math.floor(diff / (1000 * 60 * 60));\n const mins = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));\n if (hours > 24) return `${Math.floor(hours / 24)}d`;\n if (hours > 0) return `${hours}h ${mins}m`;\n return `${mins}m`;\n}\n\ninterface VibeLlmContextAdminPanelProps {\n vibeId: string;\n}\n\nexport function VibeLlmContextAdminPanel({ vibeId }: VibeLlmContextAdminPanelProps): ReactElement {\n const { data, loading, refetch } = useQuery<{ allVibeLlmContextTokens: AdminTokenRow[] }>(\n ALL_TOKENS,\n {\n variables: { vibeId },\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'ignore',\n }\n );\n const [adminRevoke] = useMutation<\n { adminRevokeVibeLlmContextToken: AdminTokenRow },\n { tokenId: string; reason?: string | null }\n >(ADMIN_REVOKE, { refetchQueries: ['AllVibeLlmContextTokens'] });\n\n const [reasonDraft, setReasonDraft] = useState<Record<string, string>>({});\n const tokens = data?.allVibeLlmContextTokens ?? [];\n\n const onRevoke = async (tokenId: string) => {\n await adminRevoke({\n variables: {\n tokenId,\n reason: (reasonDraft[tokenId] ?? '').trim() || null,\n },\n });\n setReasonDraft((prev) => {\n const next = { ...prev };\n delete next[tokenId];\n return next;\n });\n await refetch();\n };\n\n return (\n <section className=\"bg-bg-surface border border-status-warning-border rounded-lg p-5 space-y-3\">\n <header className=\"flex items-start gap-3\">\n <Shield className=\"size-5 text-status-warning-text mt-0.5\" />\n <div>\n <h3 className=\"text-base font-semibold text-text-primary\">\n Admin · all URLs for this vibe\n </h3>\n <p className=\"text-sm text-text-secondary\">\n Visible only to workspace admins. Lists every user's signed URLs for this vibe. Use\n revoke to immediately invalidate any URL — takes effect on the next fetch.\n </p>\n </div>\n </header>\n\n {loading && tokens.length === 0 && (\n <div className=\"text-sm text-text-secondary py-3\">Loading…</div>\n )}\n {tokens.length === 0 && !loading && (\n <div className=\"text-sm text-text-secondary py-3 flex items-center gap-2\">\n <Info className=\"size-4\" />\n No URLs minted for this vibe by any user.\n </div>\n )}\n {tokens.length > 0 && (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border-default text-left text-xs text-text-secondary\">\n <th className=\"py-2 pr-3\">User</th>\n <th className=\"py-2 pr-3\">Label</th>\n <th className=\"py-2 pr-3\">Fingerprint</th>\n <th className=\"py-2 pr-3\">Creds</th>\n <th className=\"py-2 pr-3\">Status</th>\n <th className=\"py-2 pr-3\">Expires</th>\n <th className=\"py-2 pr-3\">Fetches</th>\n <th className=\"py-2 pr-3\">Revoke</th>\n </tr>\n </thead>\n <tbody>\n {tokens.map((t) => (\n <tr key={t.id} className=\"border-b border-border-subtle align-top\">\n <td\n className=\"py-2 pr-3 font-mono text-xs text-text-secondary truncate max-w-[120px]\"\n title={t.userId}\n >\n {t.userId}\n </td>\n <td className=\"py-2 pr-3 text-text-primary\">{t.label ?? '—'}</td>\n <td className=\"py-2 pr-3 font-mono text-xs text-text-secondary\">\n {t.tokenFingerprint}\n </td>\n <td className=\"py-2 pr-3\">\n {t.includeCredentials ? (\n <span className=\"text-xs text-status-warning-text\">on</span>\n ) : (\n <span className=\"text-xs text-text-secondary\">off</span>\n )}\n </td>\n <td className=\"py-2 pr-3\">\n <span\n className={`text-xs px-1.5 py-0.5 rounded ${\n t.status === 'ACTIVE'\n ? 'bg-status-success-bg/20 text-status-success-text'\n : 'bg-bg-sunken text-text-secondary'\n }`}\n >\n {t.status}\n </span>\n </td>\n <td className=\"py-2 pr-3 text-xs text-text-secondary\">\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"size-3\" />\n {formatExpiry(t.expiresAt)}\n </span>\n </td>\n <td className=\"py-2 pr-3 text-xs text-text-secondary\">{t.fetchCount}</td>\n <td className=\"py-2 pr-3\">\n {t.status === 'ACTIVE' ? (\n <div className=\"flex items-center gap-1\">\n <input\n aria-label=\"reason\"\n type=\"text\"\n value={reasonDraft[t.id] ?? ''}\n onChange={(e) =>\n setReasonDraft((prev) => ({ ...prev, [t.id]: e.target.value }))\n }\n placeholder=\"reason\"\n className=\"w-28 px-1.5 py-1 text-xs bg-bg-sunken border border-border-default rounded text-text-primary\"\n />\n <button\n type=\"button\"\n onClick={() => onRevoke(t.id)}\n title=\"Admin revoke\"\n aria-label=\"Admin revoke URL\"\n className=\"p-1.5 text-status-error-text hover:opacity-80\"\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n ) : (\n <span className=\"text-xs text-text-secondary\" title={t.revokedReason ?? ''}>\n {t.revokedReason ?? '—'}\n </span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </section>\n );\n}\n"],"mappings":"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"}
|