@burdenoff/microfe-vibecontrols 2026.528.7 → 2026.528.8

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.
Files changed (33) hide show
  1. package/dist/VibeControlsRoot.js +1 -0
  2. package/dist/VibeControlsRoot.js.map +1 -1
  3. package/dist/components/audit/AuditLogFilters.js +71 -47
  4. package/dist/components/audit/AuditLogFilters.js.map +1 -1
  5. package/dist/components/shared/AgentSetupBanner.js +50 -45
  6. package/dist/components/shared/AgentSetupBanner.js.map +1 -1
  7. package/dist/components/shared/LinkToVibePanel.js +97 -0
  8. package/dist/components/shared/LinkToVibePanel.js.map +1 -0
  9. package/dist/components/shared/index.js +1 -0
  10. package/dist/components/vibe/VibeLinkedEntitiesPanel.js +60 -0
  11. package/dist/components/vibe/VibeLinkedEntitiesPanel.js.map +1 -0
  12. package/dist/components/vibedeck/VibeDeckButtonTile.js +25 -23
  13. package/dist/components/vibedeck/VibeDeckButtonTile.js.map +1 -1
  14. package/dist/components/vibedeck/VibeDeckGrid.js +2 -2
  15. package/dist/components/vibedeck/VibeDeckGrid.js.map +1 -1
  16. package/dist/microfe-vibecontrols.css +1 -1
  17. package/dist/pages/AgentDetailsPage.js +2 -2
  18. package/dist/pages/AgentDetailsPage.js.map +1 -1
  19. package/dist/pages/AnalyticsPage.js +255 -204
  20. package/dist/pages/AnalyticsPage.js.map +1 -1
  21. package/dist/pages/OverviewPage.js +1 -11
  22. package/dist/pages/OverviewPage.js.map +1 -1
  23. package/dist/pages/SessionsPage.js +825 -629
  24. package/dist/pages/SessionsPage.js.map +1 -1
  25. package/dist/pages/VibeAuditPage.js +184 -153
  26. package/dist/pages/VibeAuditPage.js.map +1 -1
  27. package/dist/pages/VibeDeckPage.js +416 -379
  28. package/dist/pages/VibeDeckPage.js.map +1 -1
  29. package/dist/pages/VibeDetailsPage.js +621 -557
  30. package/dist/pages/VibeDetailsPage.js.map +1 -1
  31. package/dist/pages/tunnels/TunnelsTab.js +115 -90
  32. package/dist/pages/tunnels/TunnelsTab.js.map +1 -1
  33. package/package.json +1 -1
@@ -2,6 +2,7 @@ import { VibeControlsProvider as e } from "./providers/VibeControlsProvider.js";
2
2
  import { VibeControlsRoutes as t } from "./VibeControlsRoutes.js";
3
3
  import n from "./components/shared/AgentEventsConnector.js";
4
4
  /* empty css */
5
+ /* empty css */
5
6
  import { useEffect as r } from "react";
6
7
  import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
8
  import { useRecordProductVisit as a } from "@burdenoff/fe-libs/shared/hooks";
@@ -1 +1 @@
1
- {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useRecordProductVisit } from '@burdenoff/fe-libs/shared/hooks';\nimport {\n LayoutDashboard,\n Bot,\n Terminal,\n Zap,\n Globe,\n Settings,\n Activity,\n Rocket,\n LayoutGrid,\n CalendarClock,\n Shield,\n Server,\n GitBranch,\n Brain,\n Bookmark,\n PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n Puzzle,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.css';\n\n/**\n * Root component for the VibeControls microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { VibeControlsRoot, type VibeControlsRootProps } from '@burdenoff/microfe-vibecontrols';\n *\n * function App() {\n * const props: VibeControlsRootProps = {\n * basePath: '/vibecontrols',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * defaultView: 'agents',\n * onAgentSelect: (agent) => console.log('Agent selected:', agent),\n * onSessionStart: (session) => console.log('Session started:', session),\n * onVibeActivate: (vibe) => console.log('Vibe activated:', vibe),\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <VibeControlsRoot {...props} />;\n * }\n * ```\n */\nexport const VibeControlsRoot: FC<VibeControlsRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId } = props;\n const { t, locale } = useI18n();\n\n const isPublicLinkRoute =\n typeof window !== 'undefined' &&\n /^\\/vibecontrols\\/(share|deck)\\//.test(window.location.pathname);\n\n useRecordProductVisit({ productSlug: 'vibecontrols', enabled: !isPublicLinkRoute });\n\n // Helper to join paths correctly, avoiding double slashes\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems || isPublicLinkRoute) return;\n\n const navItems: NavItem[] = [\n // Main navigation\n {\n id: 'vibecontrols-overview',\n label: t('nav.overview'),\n path: basePath === '/' ? '/' : basePath,\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'vibecontrols',\n },\n\n // Targets first — the primary entity\n {\n id: 'vibecontrols-targets',\n label: t('nav.targets'),\n path: joinPath(basePath, 'targets'),\n icon: <Server size={20} />,\n order: 12,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agents',\n label: t('nav.agents'),\n path: joinPath(basePath, 'agents'),\n icon: <Bot size={20} />,\n order: 14,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agent-graph',\n label: t('nav.agentGraph'),\n path: joinPath(basePath, 'agent-graph'),\n icon: <GitBranch size={20} />,\n order: 16,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibes',\n label: t('nav.vibes'),\n path: joinPath(basePath, 'vibes'),\n icon: <Zap size={20} />,\n order: 20,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-catalogs',\n label: t('nav.catalogs') === 'nav.catalogs' ? 'Catalogs' : t('nav.catalogs'),\n path: joinPath(basePath, 'catalogs'),\n icon: <BookOpen size={20} />,\n order: 21,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-components',\n label: t('nav.components') === 'nav.components' ? 'Components' : t('nav.components'),\n path: joinPath(basePath, 'components'),\n icon: <Box size={20} />,\n order: 22,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-templates',\n label: t('nav.templates') === 'nav.templates' ? 'Templates' : t('nav.templates'),\n path: joinPath(basePath, 'templates'),\n icon: <FileCode size={20} />,\n order: 23,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-plugins',\n label: t('nav.plugins') === 'nav.plugins' ? 'Plugins' : t('nav.plugins'),\n path: joinPath(basePath, 'plugins'),\n icon: <Puzzle size={20} />,\n order: 24,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibedeck',\n label: t('nav.vibeDeck'),\n path: joinPath(basePath, 'vibedeck'),\n icon: <LayoutGrid size={20} />,\n order: 25,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-sessions',\n label: t('nav.sessions'),\n path: joinPath(basePath, 'sessions'),\n icon: <Terminal size={20} />,\n order: 30,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibecalendar',\n label: t('nav.vibeCalendar'),\n path: joinPath(basePath, 'calendar'),\n icon: <CalendarClock size={20} />,\n order: 35,\n group: 'vibecontrols',\n },\n // AI Vibecoding\n {\n id: 'vibecontrols-ai',\n label: t('nav.ai'),\n path: joinPath(basePath, 'ai'),\n icon: <Brain size={20} />,\n order: 38,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-ai-bookmarks',\n label: t('nav.aiBookmarks'),\n path: joinPath(basePath, 'ai/bookmarks'),\n icon: <Bookmark size={20} />,\n order: 38.5,\n group: 'vibecontrols',\n },\n\n // Actions\n {\n id: 'vibecontrols-actions',\n label: t('nav.actions'),\n path: joinPath(basePath, 'actions'),\n icon: <PlayCircle size={20} />,\n order: 40,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-getting-started',\n label: t('nav.gettingStarted'),\n path: joinPath(basePath, 'getting-started'),\n icon: <Rocket size={20} />,\n order: 50,\n group: 'vibecontrols',\n },\n\n // Connection management\n {\n id: 'vibecontrols-tunnels',\n label: t('nav.tunnels'),\n path: joinPath(basePath, 'tunnels'),\n icon: <Globe size={20} />,\n order: 47,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-analytics',\n label: t('nav.analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart2 size={20} />,\n order: 55.5,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-audit',\n label: t('nav.vibeAudit'),\n path: joinPath(basePath, 'audit'),\n icon: <Shield size={20} />,\n order: 56,\n group: 'vibecontrols-system',\n },\n\n // Settings & System\n {\n id: 'vibecontrols-health',\n label: t('nav.health'),\n path: joinPath(basePath, 'health'),\n icon: <Activity size={20} />,\n order: 110,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-integrations',\n label:\n t('nav.integrations') === 'nav.integrations' ? 'Integrations' : t('nav.integrations'),\n // Absolute path — links out to the host shell's /integrations route\n // (microfe-integrations, mounted by vibecontrols-app). Keeps the\n // VibeControls MFE compliant with the no-cross-MFE-import rule.\n path: '/integrations',\n icon: <Plug size={20} />,\n order: 115,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-settings',\n label: t('nav.settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 120,\n group: 'vibecontrols-system',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [registerNavItems, basePath, t, locale, isPublicLinkRoute]);\n\n // Register footer items (example: status indicator in left section)\n useEffect(() => {\n if (!registerFooterItems || isPublicLinkRoute) return;\n\n const footerItems = [\n {\n id: 'vibecontrols-status',\n label: 'VibeControls Ready',\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, isPublicLinkRoute]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId ?? null} gateway=\"global\" defaultEnabled={true}>\n <VibeControlsProvider {...props}>\n {!isPublicLinkRoute ? (\n /* Agent events connector - syncs active agent to WebSocket */\n <AgentEventsConnector />\n ) : null}\n <VibeControlsRoutes />\n </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useRecordProductVisit } from '@burdenoff/fe-libs/shared/hooks';\nimport {\n LayoutDashboard,\n Bot,\n Terminal,\n Zap,\n Globe,\n Settings,\n Activity,\n Rocket,\n LayoutGrid,\n CalendarClock,\n Shield,\n Server,\n GitBranch,\n Brain,\n Bookmark,\n PlayCircle,\n BarChart2,\n BookOpen,\n Box,\n FileCode,\n Plug,\n Puzzle,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport type { NavItem, VibeControlsRootProps } from './types';\nimport { VibeControlsRoutes } from './VibeControlsRoutes';\nimport { AgentEventsConnector } from './components/shared/AgentEventsConnector';\nimport './styles/vibecontrols.css';\nimport './styles/print.css';\n\n/**\n * Root component for the VibeControls microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { VibeControlsRoot, type VibeControlsRootProps } from '@burdenoff/microfe-vibecontrols';\n *\n * function App() {\n * const props: VibeControlsRootProps = {\n * basePath: '/vibecontrols',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * tenantId: 'tenant-123',\n * apiGatewayUrl: 'https://api.example.com',\n * authToken: 'token',\n * defaultView: 'agents',\n * onAgentSelect: (agent) => console.log('Agent selected:', agent),\n * onSessionStart: (session) => console.log('Session started:', session),\n * onVibeActivate: (vibe) => console.log('Vibe activated:', vibe),\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <VibeControlsRoot {...props} />;\n * }\n * ```\n */\nexport const VibeControlsRoot: FC<VibeControlsRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/', workspaceId } = props;\n const { t, locale } = useI18n();\n\n const isPublicLinkRoute =\n typeof window !== 'undefined' &&\n /^\\/vibecontrols\\/(share|deck)\\//.test(window.location.pathname);\n\n useRecordProductVisit({ productSlug: 'vibecontrols', enabled: !isPublicLinkRoute });\n\n // Helper to join paths correctly, avoiding double slashes\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems || isPublicLinkRoute) return;\n\n const navItems: NavItem[] = [\n // Main navigation\n {\n id: 'vibecontrols-overview',\n label: t('nav.overview'),\n path: basePath === '/' ? '/' : basePath,\n icon: <LayoutDashboard size={20} />,\n order: 10,\n group: 'vibecontrols',\n },\n\n // Targets first — the primary entity\n {\n id: 'vibecontrols-targets',\n label: t('nav.targets'),\n path: joinPath(basePath, 'targets'),\n icon: <Server size={20} />,\n order: 12,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agents',\n label: t('nav.agents'),\n path: joinPath(basePath, 'agents'),\n icon: <Bot size={20} />,\n order: 14,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-agent-graph',\n label: t('nav.agentGraph'),\n path: joinPath(basePath, 'agent-graph'),\n icon: <GitBranch size={20} />,\n order: 16,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibes',\n label: t('nav.vibes'),\n path: joinPath(basePath, 'vibes'),\n icon: <Zap size={20} />,\n order: 20,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-catalogs',\n label: t('nav.catalogs') === 'nav.catalogs' ? 'Catalogs' : t('nav.catalogs'),\n path: joinPath(basePath, 'catalogs'),\n icon: <BookOpen size={20} />,\n order: 21,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-components',\n label: t('nav.components') === 'nav.components' ? 'Components' : t('nav.components'),\n path: joinPath(basePath, 'components'),\n icon: <Box size={20} />,\n order: 22,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-templates',\n label: t('nav.templates') === 'nav.templates' ? 'Templates' : t('nav.templates'),\n path: joinPath(basePath, 'templates'),\n icon: <FileCode size={20} />,\n order: 23,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-plugins',\n label: t('nav.plugins') === 'nav.plugins' ? 'Plugins' : t('nav.plugins'),\n path: joinPath(basePath, 'plugins'),\n icon: <Puzzle size={20} />,\n order: 24,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibedeck',\n label: t('nav.vibeDeck'),\n path: joinPath(basePath, 'vibedeck'),\n icon: <LayoutGrid size={20} />,\n order: 25,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-sessions',\n label: t('nav.sessions'),\n path: joinPath(basePath, 'sessions'),\n icon: <Terminal size={20} />,\n order: 30,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-vibecalendar',\n label: t('nav.vibeCalendar'),\n path: joinPath(basePath, 'calendar'),\n icon: <CalendarClock size={20} />,\n order: 35,\n group: 'vibecontrols',\n },\n // AI Vibecoding\n {\n id: 'vibecontrols-ai',\n label: t('nav.ai'),\n path: joinPath(basePath, 'ai'),\n icon: <Brain size={20} />,\n order: 38,\n group: 'vibecontrols',\n },\n {\n id: 'vibecontrols-ai-bookmarks',\n label: t('nav.aiBookmarks'),\n path: joinPath(basePath, 'ai/bookmarks'),\n icon: <Bookmark size={20} />,\n order: 38.5,\n group: 'vibecontrols',\n },\n\n // Actions\n {\n id: 'vibecontrols-actions',\n label: t('nav.actions'),\n path: joinPath(basePath, 'actions'),\n icon: <PlayCircle size={20} />,\n order: 40,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-getting-started',\n label: t('nav.gettingStarted'),\n path: joinPath(basePath, 'getting-started'),\n icon: <Rocket size={20} />,\n order: 50,\n group: 'vibecontrols',\n },\n\n // Connection management\n {\n id: 'vibecontrols-tunnels',\n label: t('nav.tunnels'),\n path: joinPath(basePath, 'tunnels'),\n icon: <Globe size={20} />,\n order: 47,\n group: 'vibecontrols',\n },\n\n {\n id: 'vibecontrols-analytics',\n label: t('nav.analytics'),\n path: joinPath(basePath, 'analytics'),\n icon: <BarChart2 size={20} />,\n order: 55.5,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-audit',\n label: t('nav.vibeAudit'),\n path: joinPath(basePath, 'audit'),\n icon: <Shield size={20} />,\n order: 56,\n group: 'vibecontrols-system',\n },\n\n // Settings & System\n {\n id: 'vibecontrols-health',\n label: t('nav.health'),\n path: joinPath(basePath, 'health'),\n icon: <Activity size={20} />,\n order: 110,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-integrations',\n label:\n t('nav.integrations') === 'nav.integrations' ? 'Integrations' : t('nav.integrations'),\n // Absolute path — links out to the host shell's /integrations route\n // (microfe-integrations, mounted by vibecontrols-app). Keeps the\n // VibeControls MFE compliant with the no-cross-MFE-import rule.\n path: '/integrations',\n icon: <Plug size={20} />,\n order: 115,\n group: 'vibecontrols-system',\n },\n {\n id: 'vibecontrols-settings',\n label: t('nav.settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 120,\n group: 'vibecontrols-system',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [registerNavItems, basePath, t, locale, isPublicLinkRoute]);\n\n // Register footer items (example: status indicator in left section)\n useEffect(() => {\n if (!registerFooterItems || isPublicLinkRoute) return;\n\n const footerItems = [\n {\n id: 'vibecontrols-status',\n label: 'VibeControls Ready',\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, isPublicLinkRoute]);\n\n return (\n <FeatureFlagProvider workspaceId={workspaceId ?? null} gateway=\"global\" defaultEnabled={true}>\n <VibeControlsProvider {...props}>\n {!isPublicLinkRoute ? (\n /* Agent events connector - syncs active agent to WebSocket */\n <AgentEventsConnector />\n ) : null}\n <VibeControlsRoutes />\n </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAmEA,IAAa,KAA+C,MAAU;CACpE,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,KAAK,mBAAgB,GACzE,EAAE,MAAG,cAAW,GAAS,EAEzB,IACJ,OAAO,SAAW,OAClB,kCAAkC,KAAK,OAAO,SAAS,SAAS;AAElE,GAAsB;EAAE,aAAa;EAAgB,SAAS,CAAC;EAAmB,CAAC;CAGnF,IAAM,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAqOtD,QAhOA,QAAgB;AACV,SAAC,KAAoB,GAyMzB,QAHgB,EApMY;GAE1B;IACE,IAAI;IACJ,OAAO,EAAE,eAAe;IACxB,MAAM,MAAa,MAAM,MAAM;IAC/B,MAAM,kBAAC,GAAD,EAAiB,MAAM,IAAM,CAAA;IACnC,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAE,cAAc;IACvB,MAAM,EAAS,GAAU,UAAU;IACnC,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,aAAa;IACtB,MAAM,EAAS,GAAU,SAAS;IAClC,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;IACvB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,YAAY;IACrB,MAAM,EAAS,GAAU,QAAQ;IACjC,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;IACvB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,eAAe,KAAK,iBAAiB,aAAa,EAAE,eAAe;IAC5E,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,iBAAiB,KAAK,mBAAmB,eAAe,EAAE,iBAAiB;IACpF,MAAM,EAAS,GAAU,aAAa;IACtC,MAAM,kBAAC,GAAD,EAAK,MAAM,IAAM,CAAA;IACvB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,gBAAgB,KAAK,kBAAkB,cAAc,EAAE,gBAAgB;IAChF,MAAM,EAAS,GAAU,YAAY;IACrC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,cAAc,KAAK,gBAAgB,YAAY,EAAE,cAAc;IACxE,MAAM,EAAS,GAAU,UAAU;IACnC,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,eAAe;IACxB,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;IAC9B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,eAAe;IACxB,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAe,MAAM,IAAM,CAAA;IACjC,OAAO;IACP,OAAO;IACR;GAED;IACE,IAAI;IACJ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAS,GAAU,KAAK;IAC9B,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAS,GAAU,eAAe;IACxC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAE,cAAc;IACvB,MAAM,EAAS,GAAU,UAAU;IACnC,MAAM,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;IAC9B,OAAO;IACP,OAAO;IACR;GAED;IACE,IAAI;IACJ,OAAO,EAAE,qBAAqB;IAC9B,MAAM,EAAS,GAAU,kBAAkB;IAC3C,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAE,cAAc;IACvB,MAAM,EAAS,GAAU,UAAU;IACnC,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GAED;IACE,IAAI;IACJ,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAS,GAAU,YAAY;IACrC,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;IAC7B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAS,GAAU,QAAQ;IACjC,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;IAC1B,OAAO;IACP,OAAO;IACR;GAGD;IACE,IAAI;IACJ,OAAO,EAAE,aAAa;IACtB,MAAM,EAAS,GAAU,SAAS;IAClC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OACE,EAAE,mBAAmB,KAAK,qBAAqB,iBAAiB,EAAE,mBAAmB;IAIvF,MAAM;IACN,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAE,eAAe;IACxB,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACF,CAGyC;IAKzC;EAAC;EAAkB;EAAU;EAAG;EAAQ;EAAkB,CAAC,EAG9D,QAAgB;AACV,SAAC,KAAuB,GAa5B,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO;GACP,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,GAAqB,EAAkB,CAAC,EAG1C,kBAAC,GAAD;EAAqB,aAAa,KAAe;EAAM,SAAQ;EAAS,gBAAgB;YACtF,kBAAC,GAAD;GAAsB,GAAI;aAA1B,CACI,IAGE,OADF,kBAAC,GAAD,EAAwB,CAAA,EAE1B,kBAAC,GAAD,EAAsB,CAAA,CACD;;EACH,CAAA"}
@@ -4,169 +4,193 @@ import "../shared/index.js";
4
4
  import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
5
5
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
6
6
  //#region src/components/audit/AuditLogFilters.tsx
7
- function a({ searchQuery: a, onSearchChange: o, actionFilter: s, onActionChange: c, resourceTypeFilter: l, onResourceTypeChange: u, statusFilter: d, onStatusChange: f, hasCommandFilter: p, onHasCommandChange: m }) {
8
- let { t: h } = n(), g = (e, t) => {
9
- let n = h(e);
7
+ function a({ searchQuery: a, onSearchChange: o, actionFilter: s, onActionChange: c, resourceTypeFilter: l, onResourceTypeChange: u, statusFilter: d, onStatusChange: f, hasCommandFilter: p, onHasCommandChange: m, agentFilter: h, onAgentChange: g, agents: _, vibeFilter: v, onVibeChange: y, vibes: b }) {
8
+ let { t: x } = n(), S = (e, t) => {
9
+ let n = x(e);
10
10
  return n === e ? t : n;
11
- }, _ = [
11
+ }, C = [
12
12
  {
13
13
  value: "all",
14
- label: g("audit.allActions", "All Actions")
14
+ label: S("audit.allActions", "All Actions")
15
15
  },
16
16
  {
17
17
  value: "CREATE",
18
- label: g("audit.actionCreate", "Create")
18
+ label: S("audit.actionCreate", "Create")
19
19
  },
20
20
  {
21
21
  value: "UPDATE",
22
- label: g("audit.actionUpdate", "Update")
22
+ label: S("audit.actionUpdate", "Update")
23
23
  },
24
24
  {
25
25
  value: "DELETE",
26
- label: g("audit.actionDelete", "Delete")
26
+ label: S("audit.actionDelete", "Delete")
27
27
  },
28
28
  {
29
29
  value: "EXECUTE",
30
- label: g("audit.actionExecute", "Execute")
30
+ label: S("audit.actionExecute", "Execute")
31
31
  },
32
32
  {
33
33
  value: "EXPORT",
34
- label: g("audit.actionExport", "Export")
34
+ label: S("audit.actionExport", "Export")
35
35
  },
36
36
  {
37
37
  value: "SHARE",
38
- label: g("audit.actionShare", "Share")
38
+ label: S("audit.actionShare", "Share")
39
39
  },
40
40
  {
41
41
  value: "REVOKE",
42
- label: g("audit.actionRevoke", "Revoke")
42
+ label: S("audit.actionRevoke", "Revoke")
43
43
  },
44
44
  {
45
45
  value: "ARCHIVE",
46
- label: g("audit.actionArchive", "Archive")
46
+ label: S("audit.actionArchive", "Archive")
47
47
  },
48
48
  {
49
49
  value: "RESTORE",
50
- label: g("audit.actionRestore", "Restore")
50
+ label: S("audit.actionRestore", "Restore")
51
51
  }
52
- ], v = [
52
+ ], w = [
53
53
  {
54
54
  value: "all",
55
- label: g("audit.allResources", "All Resources")
55
+ label: S("audit.allResources", "All Resources")
56
56
  },
57
57
  {
58
58
  value: "AGENT",
59
- label: g("audit.resourceAgent", "Agent")
59
+ label: S("audit.resourceAgent", "Agent")
60
60
  },
61
61
  {
62
62
  value: "VIBE",
63
- label: g("audit.resourceVibe", "Vibe")
63
+ label: S("audit.resourceVibe", "Vibe")
64
64
  },
65
65
  {
66
66
  value: "SESSION",
67
- label: g("audit.resourceSession", "Session")
67
+ label: S("audit.resourceSession", "Session")
68
68
  },
69
69
  {
70
70
  value: "VIBE_DECK",
71
- label: g("audit.resourceVibeDeck", "Vibe Deck")
71
+ label: S("audit.resourceVibeDeck", "Vibe Deck")
72
72
  },
73
73
  {
74
74
  value: "VIBE_DECK_BUTTON",
75
- label: g("audit.resourceDeckButton", "Deck Button")
75
+ label: S("audit.resourceDeckButton", "Deck Button")
76
76
  },
77
77
  {
78
78
  value: "NOTE",
79
- label: g("audit.resourceNote", "Note")
79
+ label: S("audit.resourceNote", "Note")
80
80
  },
81
81
  {
82
82
  value: "CONFIGURATION",
83
- label: g("audit.resourceConfiguration", "Configuration")
83
+ label: S("audit.resourceConfiguration", "Configuration")
84
84
  },
85
85
  {
86
86
  value: "WEBHOOK",
87
- label: g("audit.resourceWebhook", "Webhook")
87
+ label: S("audit.resourceWebhook", "Webhook")
88
88
  },
89
89
  {
90
90
  value: "SESSION_SHARE",
91
- label: g("audit.resourceSessionShare", "Session Share")
91
+ label: S("audit.resourceSessionShare", "Session Share")
92
92
  },
93
93
  {
94
94
  value: "AI_TOOL_EVENT",
95
- label: g("audit.resourceAiToolEvent", "AI Tool Event")
95
+ label: S("audit.resourceAiToolEvent", "AI Tool Event")
96
96
  },
97
97
  {
98
98
  value: "AUDIT_LOG",
99
- label: g("audit.resourceAuditLog", "Audit Log")
99
+ label: S("audit.resourceAuditLog", "Audit Log")
100
100
  },
101
101
  {
102
102
  value: "CALENDAR_TASK",
103
- label: g("audit.resourceCalendarTask", "Calendar Task")
103
+ label: S("audit.resourceCalendarTask", "Calendar Task")
104
104
  },
105
105
  {
106
106
  value: "TARGET",
107
- label: g("audit.resourceTarget", "Target")
107
+ label: S("audit.resourceTarget", "Target")
108
108
  },
109
109
  {
110
110
  value: "AGENT_CONNECTION",
111
- label: g("audit.resourceAgentConnection", "Agent Connection")
111
+ label: S("audit.resourceAgentConnection", "Agent Connection")
112
112
  },
113
113
  {
114
114
  value: "UI_SESSION",
115
- label: g("audit.resourceUiSession", "UI Session")
115
+ label: S("audit.resourceUiSession", "UI Session")
116
116
  },
117
117
  {
118
118
  value: "SESSION_SHARE_LINK",
119
- label: g("audit.resourceShareLink", "Share Link")
119
+ label: S("audit.resourceShareLink", "Share Link")
120
120
  }
121
- ], y = [
121
+ ], T = [
122
122
  {
123
123
  value: "all",
124
- label: g("audit.allStatuses", "All Statuses")
124
+ label: S("audit.allStatuses", "All Statuses")
125
125
  },
126
126
  {
127
127
  value: "SUCCESS",
128
- label: g("audit.statusSuccess", "Success")
128
+ label: S("audit.statusSuccess", "Success")
129
129
  },
130
130
  {
131
131
  value: "FAILURE",
132
- label: g("audit.statusFailure", "Failure")
132
+ label: S("audit.statusFailure", "Failure")
133
133
  },
134
134
  {
135
135
  value: "DENIED",
136
- label: g("audit.statusDenied", "Denied")
136
+ label: S("audit.statusDenied", "Denied")
137
137
  },
138
138
  {
139
139
  value: "ERROR",
140
- label: g("audit.statusError", "Error")
140
+ label: S("audit.statusError", "Error")
141
141
  }
142
- ];
142
+ ], E = [{
143
+ value: "all",
144
+ label: S("audit.allAgents", "All Agents")
145
+ }, ...(_ ?? []).map((e) => ({
146
+ value: e.id,
147
+ label: e.name
148
+ }))], D = [{
149
+ value: "all",
150
+ label: S("audit.allVibes", "All Vibes")
151
+ }, ...(b ?? []).map((e) => ({
152
+ value: e.id,
153
+ label: e.name
154
+ }))];
143
155
  return /* @__PURE__ */ i("div", {
144
156
  className: "mb-4 flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center",
145
157
  children: [
146
158
  /* @__PURE__ */ r(e, {
147
159
  value: a,
148
160
  onChange: o,
149
- placeholder: g("audit.searchPlaceholder", "Search audit logs..."),
161
+ placeholder: S("audit.searchPlaceholder", "Search audit logs..."),
150
162
  className: "w-full sm:w-64"
151
163
  }),
152
164
  /* @__PURE__ */ r(t, {
153
- label: g("audit.action", "Action"),
154
- options: _,
165
+ label: S("audit.action", "Action"),
166
+ options: C,
155
167
  value: s,
156
168
  onChange: c
157
169
  }),
158
170
  /* @__PURE__ */ r(t, {
159
- label: g("audit.resource", "Resource"),
160
- options: v,
171
+ label: S("audit.resource", "Resource"),
172
+ options: w,
161
173
  value: l,
162
174
  onChange: u
163
175
  }),
164
176
  /* @__PURE__ */ r(t, {
165
- label: g("audit.status", "Status"),
166
- options: y,
177
+ label: S("audit.status", "Status"),
178
+ options: T,
167
179
  value: d,
168
180
  onChange: f
169
181
  }),
182
+ g && /* @__PURE__ */ r(t, {
183
+ label: S("audit.agent", "Agent"),
184
+ options: E,
185
+ value: h ?? "all",
186
+ onChange: g
187
+ }),
188
+ y && /* @__PURE__ */ r(t, {
189
+ label: S("audit.vibe", "Vibe"),
190
+ options: D,
191
+ value: v ?? "all",
192
+ onChange: y
193
+ }),
170
194
  /* @__PURE__ */ i("label", {
171
195
  className: "flex items-center gap-2 text-sm text-text-secondary cursor-pointer",
172
196
  children: [/* @__PURE__ */ r("input", {
@@ -175,7 +199,7 @@ function a({ searchQuery: a, onSearchChange: o, actionFilter: s, onActionChange:
175
199
  checked: p,
176
200
  onChange: (e) => m(e.target.checked),
177
201
  className: "rounded border-border-primary"
178
- }), g("audit.commandsOnly", "Commands only")]
202
+ }), S("audit.commandsOnly", "Commands only")]
179
203
  })
180
204
  ]
181
205
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AuditLogFilters.js","names":[],"sources":["../../../src/components/audit/AuditLogFilters.tsx"],"sourcesContent":["import { SearchInput, FilterDropdown } from '@/components/shared';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\ninterface AuditLogFiltersProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n actionFilter: string | null;\n onActionChange: (value: string) => void;\n resourceTypeFilter: string | null;\n onResourceTypeChange: (value: string) => void;\n statusFilter: string | null;\n onStatusChange: (value: string) => void;\n hasCommandFilter: boolean;\n onHasCommandChange: (value: boolean) => void;\n}\n\nexport function AuditLogFilters({\n searchQuery,\n onSearchChange,\n actionFilter,\n onActionChange,\n resourceTypeFilter,\n onResourceTypeChange,\n statusFilter,\n onStatusChange,\n hasCommandFilter,\n onHasCommandChange,\n}: AuditLogFiltersProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const actionOptions = [\n { value: 'all', label: tr('audit.allActions', 'All Actions') },\n { value: 'CREATE', label: tr('audit.actionCreate', 'Create') },\n { value: 'UPDATE', label: tr('audit.actionUpdate', 'Update') },\n { value: 'DELETE', label: tr('audit.actionDelete', 'Delete') },\n { value: 'EXECUTE', label: tr('audit.actionExecute', 'Execute') },\n { value: 'EXPORT', label: tr('audit.actionExport', 'Export') },\n { value: 'SHARE', label: tr('audit.actionShare', 'Share') },\n { value: 'REVOKE', label: tr('audit.actionRevoke', 'Revoke') },\n { value: 'ARCHIVE', label: tr('audit.actionArchive', 'Archive') },\n { value: 'RESTORE', label: tr('audit.actionRestore', 'Restore') },\n ];\n\n const resourceTypeOptions = [\n { value: 'all', label: tr('audit.allResources', 'All Resources') },\n { value: 'AGENT', label: tr('audit.resourceAgent', 'Agent') },\n { value: 'VIBE', label: tr('audit.resourceVibe', 'Vibe') },\n { value: 'SESSION', label: tr('audit.resourceSession', 'Session') },\n { value: 'VIBE_DECK', label: tr('audit.resourceVibeDeck', 'Vibe Deck') },\n { value: 'VIBE_DECK_BUTTON', label: tr('audit.resourceDeckButton', 'Deck Button') },\n { value: 'NOTE', label: tr('audit.resourceNote', 'Note') },\n { value: 'CONFIGURATION', label: tr('audit.resourceConfiguration', 'Configuration') },\n { value: 'WEBHOOK', label: tr('audit.resourceWebhook', 'Webhook') },\n { value: 'SESSION_SHARE', label: tr('audit.resourceSessionShare', 'Session Share') },\n { value: 'AI_TOOL_EVENT', label: tr('audit.resourceAiToolEvent', 'AI Tool Event') },\n { value: 'AUDIT_LOG', label: tr('audit.resourceAuditLog', 'Audit Log') },\n { value: 'CALENDAR_TASK', label: tr('audit.resourceCalendarTask', 'Calendar Task') },\n { value: 'TARGET', label: tr('audit.resourceTarget', 'Target') },\n { value: 'AGENT_CONNECTION', label: tr('audit.resourceAgentConnection', 'Agent Connection') },\n { value: 'UI_SESSION', label: tr('audit.resourceUiSession', 'UI Session') },\n { value: 'SESSION_SHARE_LINK', label: tr('audit.resourceShareLink', 'Share Link') },\n ];\n\n const statusOptions = [\n { value: 'all', label: tr('audit.allStatuses', 'All Statuses') },\n { value: 'SUCCESS', label: tr('audit.statusSuccess', 'Success') },\n { value: 'FAILURE', label: tr('audit.statusFailure', 'Failure') },\n { value: 'DENIED', label: tr('audit.statusDenied', 'Denied') },\n { value: 'ERROR', label: tr('audit.statusError', 'Error') },\n ];\n\n return (\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center\">\n <SearchInput\n value={searchQuery}\n onChange={onSearchChange}\n placeholder={tr('audit.searchPlaceholder', 'Search audit logs...')}\n className=\"w-full sm:w-64\"\n />\n <FilterDropdown\n label={tr('audit.action', 'Action')}\n options={actionOptions}\n value={actionFilter}\n onChange={onActionChange}\n />\n <FilterDropdown\n label={tr('audit.resource', 'Resource')}\n options={resourceTypeOptions}\n value={resourceTypeFilter}\n onChange={onResourceTypeChange}\n />\n <FilterDropdown\n label={tr('audit.status', 'Status')}\n options={statusOptions}\n value={statusFilter}\n onChange={onStatusChange}\n />\n <label className=\"flex items-center gap-2 text-sm text-text-secondary cursor-pointer\">\n <input\n aria-label=\"control\"\n type=\"checkbox\"\n checked={hasCommandFilter}\n onChange={(e) => onHasCommandChange(e.target.checked)}\n className=\"rounded border-border-primary\"\n />\n {tr('audit.commandsOnly', 'Commands only')}\n </label>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AuditLogFilters.js","names":[],"sources":["../../../src/components/audit/AuditLogFilters.tsx"],"sourcesContent":["import { SearchInput, FilterDropdown } from '@/components/shared';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\ninterface AgentOption {\n id: string;\n name: string;\n}\n\ninterface VibeOption {\n id: string;\n name: string;\n}\n\ninterface AuditLogFiltersProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n actionFilter: string | null;\n onActionChange: (value: string) => void;\n resourceTypeFilter: string | null;\n onResourceTypeChange: (value: string) => void;\n statusFilter: string | null;\n onStatusChange: (value: string) => void;\n hasCommandFilter: boolean;\n onHasCommandChange: (value: boolean) => void;\n agentFilter?: string | null;\n onAgentChange?: (value: string) => void;\n agents?: AgentOption[];\n vibeFilter?: string | null;\n onVibeChange?: (value: string) => void;\n vibes?: VibeOption[];\n}\n\nexport function AuditLogFilters({\n searchQuery,\n onSearchChange,\n actionFilter,\n onActionChange,\n resourceTypeFilter,\n onResourceTypeChange,\n statusFilter,\n onStatusChange,\n hasCommandFilter,\n onHasCommandChange,\n agentFilter,\n onAgentChange,\n agents,\n vibeFilter,\n onVibeChange,\n vibes,\n}: AuditLogFiltersProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const actionOptions = [\n { value: 'all', label: tr('audit.allActions', 'All Actions') },\n { value: 'CREATE', label: tr('audit.actionCreate', 'Create') },\n { value: 'UPDATE', label: tr('audit.actionUpdate', 'Update') },\n { value: 'DELETE', label: tr('audit.actionDelete', 'Delete') },\n { value: 'EXECUTE', label: tr('audit.actionExecute', 'Execute') },\n { value: 'EXPORT', label: tr('audit.actionExport', 'Export') },\n { value: 'SHARE', label: tr('audit.actionShare', 'Share') },\n { value: 'REVOKE', label: tr('audit.actionRevoke', 'Revoke') },\n { value: 'ARCHIVE', label: tr('audit.actionArchive', 'Archive') },\n { value: 'RESTORE', label: tr('audit.actionRestore', 'Restore') },\n ];\n\n const resourceTypeOptions = [\n { value: 'all', label: tr('audit.allResources', 'All Resources') },\n { value: 'AGENT', label: tr('audit.resourceAgent', 'Agent') },\n { value: 'VIBE', label: tr('audit.resourceVibe', 'Vibe') },\n { value: 'SESSION', label: tr('audit.resourceSession', 'Session') },\n { value: 'VIBE_DECK', label: tr('audit.resourceVibeDeck', 'Vibe Deck') },\n { value: 'VIBE_DECK_BUTTON', label: tr('audit.resourceDeckButton', 'Deck Button') },\n { value: 'NOTE', label: tr('audit.resourceNote', 'Note') },\n { value: 'CONFIGURATION', label: tr('audit.resourceConfiguration', 'Configuration') },\n { value: 'WEBHOOK', label: tr('audit.resourceWebhook', 'Webhook') },\n { value: 'SESSION_SHARE', label: tr('audit.resourceSessionShare', 'Session Share') },\n { value: 'AI_TOOL_EVENT', label: tr('audit.resourceAiToolEvent', 'AI Tool Event') },\n { value: 'AUDIT_LOG', label: tr('audit.resourceAuditLog', 'Audit Log') },\n { value: 'CALENDAR_TASK', label: tr('audit.resourceCalendarTask', 'Calendar Task') },\n { value: 'TARGET', label: tr('audit.resourceTarget', 'Target') },\n { value: 'AGENT_CONNECTION', label: tr('audit.resourceAgentConnection', 'Agent Connection') },\n { value: 'UI_SESSION', label: tr('audit.resourceUiSession', 'UI Session') },\n { value: 'SESSION_SHARE_LINK', label: tr('audit.resourceShareLink', 'Share Link') },\n ];\n\n const statusOptions = [\n { value: 'all', label: tr('audit.allStatuses', 'All Statuses') },\n { value: 'SUCCESS', label: tr('audit.statusSuccess', 'Success') },\n { value: 'FAILURE', label: tr('audit.statusFailure', 'Failure') },\n { value: 'DENIED', label: tr('audit.statusDenied', 'Denied') },\n { value: 'ERROR', label: tr('audit.statusError', 'Error') },\n ];\n\n const agentOptions = [\n { value: 'all', label: tr('audit.allAgents', 'All Agents') },\n ...(agents ?? []).map((a) => ({ value: a.id, label: a.name })),\n ];\n\n const vibeOptions = [\n { value: 'all', label: tr('audit.allVibes', 'All Vibes') },\n ...(vibes ?? []).map((v) => ({ value: v.id, label: v.name })),\n ];\n\n return (\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center\">\n <SearchInput\n value={searchQuery}\n onChange={onSearchChange}\n placeholder={tr('audit.searchPlaceholder', 'Search audit logs...')}\n className=\"w-full sm:w-64\"\n />\n <FilterDropdown\n label={tr('audit.action', 'Action')}\n options={actionOptions}\n value={actionFilter}\n onChange={onActionChange}\n />\n <FilterDropdown\n label={tr('audit.resource', 'Resource')}\n options={resourceTypeOptions}\n value={resourceTypeFilter}\n onChange={onResourceTypeChange}\n />\n <FilterDropdown\n label={tr('audit.status', 'Status')}\n options={statusOptions}\n value={statusFilter}\n onChange={onStatusChange}\n />\n {onAgentChange && (\n <FilterDropdown\n label={tr('audit.agent', 'Agent')}\n options={agentOptions}\n value={agentFilter ?? 'all'}\n onChange={onAgentChange}\n />\n )}\n {onVibeChange && (\n <FilterDropdown\n label={tr('audit.vibe', 'Vibe')}\n options={vibeOptions}\n value={vibeFilter ?? 'all'}\n onChange={onVibeChange}\n />\n )}\n <label className=\"flex items-center gap-2 text-sm text-text-secondary cursor-pointer\">\n <input\n aria-label=\"control\"\n type=\"checkbox\"\n checked={hasCommandFilter}\n onChange={(e) => onHasCommandChange(e.target.checked)}\n className=\"rounded border-border-primary\"\n />\n {tr('audit.commandsOnly', 'Commands only')}\n </label>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -6,31 +6,32 @@ import { Check as o, Copy as s, Download as c, ExternalLink as l, Terminal as u,
6
6
  import { getProfileScopedKey as f } from "@burdenoff/fe-libs/shared/utils";
7
7
  import { AnimatePresence as p, motion as m } from "framer-motion";
8
8
  import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
+ import { Button as _ } from "@burdenoff/fe-libs/ui";
9
10
  //#region src/components/shared/AgentSetupBanner.tsx
10
- var _ = "https://www.npmjs.com/package/@vibecontrols/agent";
11
- function v() {
11
+ var v = "https://www.npmjs.com/package/@vibecontrols/agent";
12
+ function y() {
12
13
  return typeof window > "u" ? "curl -fsSL https://app.vibecontrols.com/install | bash" : `curl -fsSL https://${window.__VIBECONTROLS_HOST__ ?? window.location.host}/install | bash`;
13
14
  }
14
- function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibecontrols-setup-banner-dismissed", className: S = "" }) {
15
- let C = e(), w = t(), T = i(() => v(), []), [E, D] = a(!1), [O, k] = a(() => {
15
+ function b({ variant: b = "compact", dismissible: x = !0, dismissKey: S = "vibecontrols-setup-banner-dismissed", className: C = "" }) {
16
+ let w = e(), T = t(), E = i(() => y(), []), [D, O] = a(!1), [k, A] = a(() => {
16
17
  try {
17
- return localStorage.getItem(f(x)) === "true";
18
+ return localStorage.getItem(f(S)) === "true";
18
19
  } catch {
19
20
  return !1;
20
21
  }
21
- }), A = r(async (e) => {
22
+ }), j = r(async (e) => {
22
23
  try {
23
- await navigator.clipboard.writeText(e), D(!0), setTimeout(() => D(!1), 2e3);
24
+ await navigator.clipboard.writeText(e), O(!0), setTimeout(() => O(!1), 2e3);
24
25
  } catch {
25
26
  let t = document.createElement("textarea");
26
- t.value = e, document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t), D(!0), setTimeout(() => D(!1), 2e3);
27
+ t.value = e, document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t), O(!0), setTimeout(() => O(!1), 2e3);
27
28
  }
28
- }, []), j = r(() => {
29
- k(!0);
29
+ }, []), M = r(() => {
30
+ A(!0);
30
31
  try {
31
- localStorage.setItem(f(x), "true");
32
+ localStorage.setItem(f(S), "true");
32
33
  } catch {}
33
- }, [x]), M = {
34
+ }, [S]), N = {
34
35
  duration: .3,
35
36
  ease: [
36
37
  .4,
@@ -39,7 +40,7 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
39
40
  1
40
41
  ]
41
42
  };
42
- return y === "compact" ? /* @__PURE__ */ h(p, { children: !O && /* @__PURE__ */ g(m.div, {
43
+ return b === "compact" ? /* @__PURE__ */ h(p, { children: !k && /* @__PURE__ */ g(m.div, {
43
44
  initial: {
44
45
  opacity: 0,
45
46
  y: -8,
@@ -55,8 +56,8 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
55
56
  y: -8,
56
57
  height: 0
57
58
  },
58
- transition: M,
59
- className: `relative flex flex-col items-start gap-3 px-4 py-3 bg-accent-purple-subtle border border-accent-purple/20 rounded-lg sm:flex-row sm:items-center ${S}`,
59
+ transition: N,
60
+ className: `relative flex flex-col items-start gap-3 px-4 py-3 bg-accent-purple-subtle border border-accent-purple/20 rounded-lg sm:flex-row sm:items-center ${C}`,
60
61
  children: [
61
62
  /* @__PURE__ */ h(c, { className: "size-5 text-accent-purple flex-shrink-0" }),
62
63
  /* @__PURE__ */ g("div", {
@@ -64,42 +65,42 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
64
65
  children: [
65
66
  /* @__PURE__ */ h("span", {
66
67
  className: "text-sm font-medium text-text-primary",
67
- children: C("vibecontrols.shared.agentSetupBanner.installPrompt", "Install the VibeControls Agent CLI to get started")
68
+ children: w("vibecontrols.shared.agentSetupBanner.installPrompt", "Install the VibeControls Agent CLI to get started")
68
69
  }),
69
70
  /* @__PURE__ */ g("code", {
70
71
  className: "inline-flex min-w-0 max-w-full items-center gap-1.5 rounded border border-border-default bg-bg-sunken px-2.5 py-1 font-mono text-xs text-text-primary transition-colors hover:bg-bg-elevated",
71
- onClick: () => A(T),
72
- title: C("vibecontrols.shared.agentSetupBanner.clickToCopy", "Click to copy"),
72
+ onClick: () => j(E),
73
+ title: w("vibecontrols.shared.agentSetupBanner.clickToCopy", "Click to copy"),
73
74
  children: [
74
75
  /* @__PURE__ */ h(u, { className: "size-3" }),
75
76
  /* @__PURE__ */ h("span", {
76
77
  className: "min-w-0 break-all",
77
- children: T
78
+ children: E
78
79
  }),
79
- E ? /* @__PURE__ */ h(o, { className: "size-3 text-status-success-text" }) : /* @__PURE__ */ h(s, { className: "size-3 text-text-muted" })
80
+ D ? /* @__PURE__ */ h(o, { className: "size-3 text-status-success-text" }) : /* @__PURE__ */ h(s, { className: "size-3 text-text-muted" })
80
81
  ]
81
82
  }),
82
83
  /* @__PURE__ */ g("button", {
83
84
  type: "button",
84
- onClick: () => w("/getting-started"),
85
+ onClick: () => T("/getting-started"),
85
86
  className: "text-sm text-accent-purple hover:underline flex items-center gap-1",
86
87
  children: [
87
- C("vibecontrols.shared.agentSetupBanner.setupGuide", "Setup guide"),
88
+ w("vibecontrols.shared.agentSetupBanner.setupGuide", "Setup guide"),
88
89
  " ",
89
90
  /* @__PURE__ */ h(l, { className: "size-3" })
90
91
  ]
91
92
  })
92
93
  ]
93
94
  }),
94
- b && /* @__PURE__ */ h("button", {
95
+ x && /* @__PURE__ */ h("button", {
95
96
  type: "button",
96
- onClick: j,
97
+ onClick: M,
97
98
  className: "flex-shrink-0 p-1 text-text-muted hover:text-text-secondary rounded transition-colors",
98
- title: C("vibecontrols.shared.agentSetupBanner.dismiss", "Dismiss"),
99
+ title: w("vibecontrols.shared.agentSetupBanner.dismiss", "Dismiss"),
99
100
  children: /* @__PURE__ */ h(d, { className: "size-4" })
100
101
  })
101
102
  ]
102
- }) }) : /* @__PURE__ */ h(p, { children: !O && /* @__PURE__ */ g(m.div, {
103
+ }) }) : /* @__PURE__ */ h(p, { children: !k && /* @__PURE__ */ g(m.div, {
103
104
  initial: {
104
105
  opacity: 0,
105
106
  y: -8,
@@ -115,13 +116,13 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
115
116
  y: -8,
116
117
  height: 0
117
118
  },
118
- transition: M,
119
- className: `relative border border-accent-purple/20 bg-accent-purple-subtle rounded-lg overflow-hidden ${S}`,
120
- children: [b && /* @__PURE__ */ h("button", {
119
+ transition: N,
120
+ className: `relative border border-accent-purple/20 bg-accent-purple-subtle rounded-lg overflow-hidden ${C}`,
121
+ children: [x && /* @__PURE__ */ h("button", {
121
122
  type: "button",
122
- onClick: j,
123
+ onClick: M,
123
124
  className: "absolute top-3 right-3 p-1 text-text-muted hover:text-text-secondary rounded transition-colors z-10",
124
- title: C("vibecontrols.shared.agentSetupBanner.dismiss", "Dismiss"),
125
+ title: w("vibecontrols.shared.agentSetupBanner.dismiss", "Dismiss"),
125
126
  children: /* @__PURE__ */ h(d, { className: "size-4" })
126
127
  }), /* @__PURE__ */ g("div", {
127
128
  className: "p-5 sm:p-6",
@@ -133,10 +134,10 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
133
134
  children: /* @__PURE__ */ h(c, { className: "size-5 text-accent-purple" })
134
135
  }), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h3", {
135
136
  className: "text-base font-semibold text-text-primary",
136
- children: C("vibecontrols.shared.agentSetupBanner.title", "Get Started with VibeControls Agent")
137
+ children: w("vibecontrols.shared.agentSetupBanner.title", "Get Started with VibeControls Agent")
137
138
  }), /* @__PURE__ */ h("p", {
138
139
  className: "text-sm text-text-secondary mt-0.5",
139
- children: C("vibecontrols.shared.agentSetupBanner.description", "Install the CLI on any machine you want to manage. The only prerequisite is bun — the curl script installs it for you.")
140
+ children: w("vibecontrols.shared.agentSetupBanner.description", "Install the CLI on any machine you want to manage. The only prerequisite is bun — the curl script installs it for you.")
140
141
  })] })]
141
142
  }),
142
143
  /* @__PURE__ */ h("div", {
@@ -145,17 +146,21 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
145
146
  }),
146
147
  /* @__PURE__ */ g("div", {
147
148
  className: "flex flex-wrap items-center gap-3 mt-5 ml-0 sm:ml-13",
148
- children: [/* @__PURE__ */ g("button", {
149
- type: "button",
150
- onClick: () => w("/getting-started"),
151
- className: "inline-flex items-center gap-2 px-4 py-2 text-sm bg-accent-purple text-text-inverse rounded-md hover:bg-accent-purple/90 transition-colors",
152
- children: [C("vibecontrols.shared.agentSetupBanner.viewFullSetupGuide", "View full setup guide"), /* @__PURE__ */ h(l, { className: "size-3.5" })]
153
- }), /* @__PURE__ */ g("a", {
154
- href: _,
155
- target: "_blank",
156
- rel: "noopener noreferrer",
157
- className: "inline-flex items-center gap-2 px-4 py-2 text-sm border border-border-default text-text-primary rounded-md hover:bg-bg-sunken transition-colors",
158
- children: [C("vibecontrols.shared.agentSetupBanner.npmPackage", "npm package"), /* @__PURE__ */ h(l, { className: "size-3.5" })]
149
+ children: [/* @__PURE__ */ g(_, {
150
+ variant: "default",
151
+ onClick: () => T("/getting-started"),
152
+ className: "gap-2",
153
+ children: [w("vibecontrols.shared.agentSetupBanner.viewFullSetupGuide", "View full setup guide"), /* @__PURE__ */ h(l, { className: "size-3.5" })]
154
+ }), /* @__PURE__ */ h(_, {
155
+ variant: "outline",
156
+ asChild: !0,
157
+ className: "gap-2",
158
+ children: /* @__PURE__ */ g("a", {
159
+ href: v,
160
+ target: "_blank",
161
+ rel: "noopener noreferrer",
162
+ children: [w("vibecontrols.shared.agentSetupBanner.npmPackage", "npm package"), /* @__PURE__ */ h(l, { className: "size-3.5" })]
163
+ })
159
164
  })]
160
165
  })
161
166
  ]
@@ -163,6 +168,6 @@ function y({ variant: y = "compact", dismissible: b = !0, dismissKey: x = "vibec
163
168
  }) });
164
169
  }
165
170
  //#endregion
166
- export { y as AgentSetupBanner };
171
+ export { b as AgentSetupBanner };
167
172
 
168
173
  //# sourceMappingURL=AgentSetupBanner.js.map