@burdenoff/microfe-vibecontrols 2026.611.4 → 2026.613.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,237 +6,245 @@ import n from "./components/shared/AgentEventsConnector.js";
6
6
  import { useEffect as r } from "react";
7
7
  import { useI18n as i } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
8
  import { useRecordProductVisit as a } from "@burdenoff/fe-libs/shared/hooks";
9
- import { Activity as o, BarChart2 as s, BookOpen as c, Bookmark as l, Bot as u, Box as d, Brain as f, CalendarClock as p, FileCode as m, GitBranch as h, Globe as g, LayoutDashboard as _, LayoutGrid as v, Network as y, PlayCircle as b, Plug as x, Puzzle as S, Rocket as C, Server as w, Settings as T, Shield as E, Terminal as D, Webhook as O, Zap as k } from "lucide-react";
10
- import { jsx as A, jsxs as j } from "react/jsx-runtime";
11
- import { Toaster as M } from "@burdenoff/fe-libs/ui";
12
- import { FeatureFlagProvider as N } from "@burdenoff/fe-libs/shared/feature-flags";
9
+ import { Activity as o, BarChart2 as s, BookOpen as c, Bookmark as l, Bot as u, Box as d, Brain as f, CalendarClock as p, FileCode as m, GitBranch as h, Globe as g, LayoutDashboard as _, LayoutGrid as v, Network as y, PlayCircle as b, Plug as x, Puzzle as S, Rocket as C, Server as w, Settings as T, Shield as E, Sparkles as D, Terminal as O, Webhook as k, Zap as A } from "lucide-react";
10
+ import { jsx as j, jsxs as M } from "react/jsx-runtime";
11
+ import { Toaster as N } from "@burdenoff/fe-libs/ui";
12
+ import { FeatureFlagProvider as P } from "@burdenoff/fe-libs/shared/feature-flags";
13
13
  //#region src/VibeControlsRoot.tsx
14
- var P = (P) => {
15
- let { registerNavItems: F, registerFooterItems: I, basePath: L = "/", workspaceId: R } = P, { t: z, locale: B } = i(), V = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname);
14
+ var F = (F) => {
15
+ let { registerNavItems: I, registerFooterItems: L, basePath: R = "/", workspaceId: z, renderToaster: B = !1 } = F, { t: V, locale: H } = i(), U = typeof window < "u" && /^\/vibecontrols\/(share|deck)\//.test(window.location.pathname);
16
16
  a({
17
17
  productSlug: "vibecontrols",
18
- enabled: !V
18
+ enabled: !U
19
19
  });
20
- let H = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
20
+ let W = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
21
21
  return r(() => {
22
- if (!(!F || V)) return F([
22
+ if (!(!I || U)) return I([
23
23
  {
24
24
  id: "vibecontrols-overview",
25
- label: z("nav.overview"),
26
- path: L === "/" ? "/" : L,
27
- icon: /* @__PURE__ */ A(_, { size: 20 }),
25
+ label: V("nav.overview"),
26
+ path: R === "/" ? "/" : R,
27
+ icon: /* @__PURE__ */ j(_, { size: 20 }),
28
28
  order: 10,
29
29
  group: "vibecontrols"
30
30
  },
31
31
  {
32
32
  id: "vibecontrols-targets",
33
- label: z("nav.targets"),
34
- path: H(L, "targets"),
35
- icon: /* @__PURE__ */ A(w, { size: 20 }),
33
+ label: V("nav.targets"),
34
+ path: W(R, "targets"),
35
+ icon: /* @__PURE__ */ j(w, { size: 20 }),
36
36
  order: 12,
37
37
  group: "vibecontrols"
38
38
  },
39
39
  {
40
40
  id: "vibecontrols-agents",
41
- label: z("nav.agents"),
42
- path: H(L, "agents"),
43
- icon: /* @__PURE__ */ A(u, { size: 20 }),
41
+ label: V("nav.agents"),
42
+ path: W(R, "agents"),
43
+ icon: /* @__PURE__ */ j(u, { size: 20 }),
44
44
  order: 14,
45
45
  group: "vibecontrols"
46
46
  },
47
47
  {
48
48
  id: "vibecontrols-agent-graph",
49
- label: z("nav.agentGraph"),
50
- path: H(L, "agent-graph"),
51
- icon: /* @__PURE__ */ A(h, { size: 20 }),
49
+ label: V("nav.agentGraph"),
50
+ path: W(R, "agent-graph"),
51
+ icon: /* @__PURE__ */ j(h, { size: 20 }),
52
52
  order: 16,
53
53
  group: "vibecontrols"
54
54
  },
55
55
  {
56
56
  id: "vibecontrols-vibes",
57
- label: z("nav.vibes"),
58
- path: H(L, "vibes"),
59
- icon: /* @__PURE__ */ A(k, { size: 20 }),
57
+ label: V("nav.vibes"),
58
+ path: W(R, "vibes"),
59
+ icon: /* @__PURE__ */ j(A, { size: 20 }),
60
60
  order: 20,
61
61
  group: "vibecontrols"
62
62
  },
63
63
  {
64
64
  id: "vibecontrols-catalogs",
65
- label: z("nav.catalogs") === "nav.catalogs" ? "Catalogs" : z("nav.catalogs"),
66
- path: H(L, "catalogs"),
67
- icon: /* @__PURE__ */ A(c, { size: 20 }),
65
+ label: V("nav.catalogs") === "nav.catalogs" ? "Catalogs" : V("nav.catalogs"),
66
+ path: W(R, "catalogs"),
67
+ icon: /* @__PURE__ */ j(c, { size: 20 }),
68
68
  order: 21,
69
69
  group: "vibecontrols"
70
70
  },
71
71
  {
72
72
  id: "vibecontrols-components",
73
- label: z("nav.components") === "nav.components" ? "Components" : z("nav.components"),
74
- path: H(L, "components"),
75
- icon: /* @__PURE__ */ A(d, { size: 20 }),
73
+ label: V("nav.components") === "nav.components" ? "Components" : V("nav.components"),
74
+ path: W(R, "components"),
75
+ icon: /* @__PURE__ */ j(d, { size: 20 }),
76
76
  order: 22,
77
77
  group: "vibecontrols"
78
78
  },
79
79
  {
80
80
  id: "vibecontrols-templates",
81
- label: z("nav.templates") === "nav.templates" ? "Templates" : z("nav.templates"),
82
- path: H(L, "templates"),
83
- icon: /* @__PURE__ */ A(m, { size: 20 }),
81
+ label: V("nav.templates") === "nav.templates" ? "Templates" : V("nav.templates"),
82
+ path: W(R, "templates"),
83
+ icon: /* @__PURE__ */ j(m, { size: 20 }),
84
84
  order: 23,
85
85
  group: "vibecontrols"
86
86
  },
87
87
  {
88
88
  id: "vibecontrols-environments",
89
- label: z("nav.environments") === "nav.environments" ? "Environments" : z("nav.environments"),
90
- path: H(L, "environments"),
91
- icon: /* @__PURE__ */ A(y, { size: 20 }),
89
+ label: V("nav.environments") === "nav.environments" ? "Environments" : V("nav.environments"),
90
+ path: W(R, "environments"),
91
+ icon: /* @__PURE__ */ j(y, { size: 20 }),
92
92
  order: 23.5,
93
93
  group: "vibecontrols"
94
94
  },
95
95
  {
96
96
  id: "vibecontrols-plugins",
97
- label: z("nav.plugins") === "nav.plugins" ? "Plugins" : z("nav.plugins"),
98
- path: H(L, "plugins"),
99
- icon: /* @__PURE__ */ A(S, { size: 20 }),
97
+ label: V("nav.plugins") === "nav.plugins" ? "Plugins" : V("nav.plugins"),
98
+ path: W(R, "plugins"),
99
+ icon: /* @__PURE__ */ j(S, { size: 20 }),
100
100
  order: 24,
101
101
  group: "vibecontrols"
102
102
  },
103
103
  {
104
104
  id: "vibecontrols-vibedeck",
105
- label: z("nav.vibeDeck"),
106
- path: H(L, "vibedeck"),
107
- icon: /* @__PURE__ */ A(v, { size: 20 }),
105
+ label: V("nav.vibeDeck"),
106
+ path: W(R, "vibedeck"),
107
+ icon: /* @__PURE__ */ j(v, { size: 20 }),
108
108
  order: 25,
109
109
  group: "vibecontrols"
110
110
  },
111
111
  {
112
112
  id: "vibecontrols-sessions",
113
- label: z("nav.sessions"),
114
- path: H(L, "sessions"),
115
- icon: /* @__PURE__ */ A(D, { size: 20 }),
113
+ label: V("nav.sessions"),
114
+ path: W(R, "sessions"),
115
+ icon: /* @__PURE__ */ j(O, { size: 20 }),
116
116
  order: 30,
117
117
  group: "vibecontrols"
118
118
  },
119
119
  {
120
120
  id: "vibecontrols-vibecalendar",
121
- label: z("nav.vibeCalendar"),
122
- path: H(L, "calendar"),
123
- icon: /* @__PURE__ */ A(p, { size: 20 }),
121
+ label: V("nav.vibeCalendar"),
122
+ path: W(R, "calendar"),
123
+ icon: /* @__PURE__ */ j(p, { size: 20 }),
124
124
  order: 35,
125
125
  group: "vibecontrols"
126
126
  },
127
127
  {
128
128
  id: "vibecontrols-ai",
129
- label: z("nav.ai"),
130
- path: H(L, "ai"),
131
- icon: /* @__PURE__ */ A(f, { size: 20 }),
129
+ label: V("nav.ai"),
130
+ path: W(R, "ai"),
131
+ icon: /* @__PURE__ */ j(f, { size: 20 }),
132
132
  order: 38,
133
133
  group: "vibecontrols"
134
134
  },
135
135
  {
136
136
  id: "vibecontrols-ai-bookmarks",
137
- label: z("nav.aiBookmarks"),
138
- path: H(L, "ai/bookmarks"),
139
- icon: /* @__PURE__ */ A(l, { size: 20 }),
137
+ label: V("nav.aiBookmarks"),
138
+ path: W(R, "ai/bookmarks"),
139
+ icon: /* @__PURE__ */ j(l, { size: 20 }),
140
140
  order: 38.5,
141
141
  group: "vibecontrols"
142
142
  },
143
+ {
144
+ id: "vibecontrols-ai-builder",
145
+ label: V("nav.aiBuilder") === "nav.aiBuilder" ? "AI Builder" : V("nav.aiBuilder"),
146
+ path: W(R, "ai-builder"),
147
+ icon: /* @__PURE__ */ j(D, { size: 20 }),
148
+ order: 38.7,
149
+ group: "vibecontrols"
150
+ },
143
151
  {
144
152
  id: "vibecontrols-actions",
145
- label: z("nav.actions"),
146
- path: H(L, "actions"),
147
- icon: /* @__PURE__ */ A(b, { size: 20 }),
153
+ label: V("nav.actions"),
154
+ path: W(R, "actions"),
155
+ icon: /* @__PURE__ */ j(b, { size: 20 }),
148
156
  order: 40,
149
157
  group: "vibecontrols"
150
158
  },
151
159
  {
152
160
  id: "vibecontrols-webhooks",
153
- label: z("nav.webhooks") === "nav.webhooks" ? "Webhooks" : z("nav.webhooks"),
154
- path: H(L, "webhooks"),
155
- icon: /* @__PURE__ */ A(O, { size: 20 }),
161
+ label: V("nav.webhooks") === "nav.webhooks" ? "Webhooks" : V("nav.webhooks"),
162
+ path: W(R, "webhooks"),
163
+ icon: /* @__PURE__ */ j(k, { size: 20 }),
156
164
  order: 41,
157
165
  group: "vibecontrols"
158
166
  },
159
167
  {
160
168
  id: "vibecontrols-getting-started",
161
- label: z("nav.gettingStarted"),
162
- path: H(L, "getting-started"),
163
- icon: /* @__PURE__ */ A(C, { size: 20 }),
169
+ label: V("nav.gettingStarted"),
170
+ path: W(R, "getting-started"),
171
+ icon: /* @__PURE__ */ j(C, { size: 20 }),
164
172
  order: 50,
165
173
  group: "vibecontrols"
166
174
  },
167
175
  {
168
176
  id: "vibecontrols-tunnels",
169
- label: z("nav.tunnels"),
170
- path: H(L, "tunnels"),
171
- icon: /* @__PURE__ */ A(g, { size: 20 }),
177
+ label: V("nav.tunnels"),
178
+ path: W(R, "tunnels"),
179
+ icon: /* @__PURE__ */ j(g, { size: 20 }),
172
180
  order: 47,
173
181
  group: "vibecontrols"
174
182
  },
175
183
  {
176
184
  id: "vibecontrols-analytics",
177
- label: z("nav.analytics"),
178
- path: H(L, "analytics"),
179
- icon: /* @__PURE__ */ A(s, { size: 20 }),
185
+ label: V("nav.analytics"),
186
+ path: W(R, "analytics"),
187
+ icon: /* @__PURE__ */ j(s, { size: 20 }),
180
188
  order: 55.5,
181
189
  group: "vibecontrols-system"
182
190
  },
183
191
  {
184
192
  id: "vibecontrols-audit",
185
- label: z("nav.vibeAudit"),
186
- path: H(L, "audit"),
187
- icon: /* @__PURE__ */ A(E, { size: 20 }),
193
+ label: V("nav.vibeAudit"),
194
+ path: W(R, "audit"),
195
+ icon: /* @__PURE__ */ j(E, { size: 20 }),
188
196
  order: 56,
189
197
  group: "vibecontrols-system"
190
198
  },
191
199
  {
192
200
  id: "vibecontrols-health",
193
- label: z("nav.health"),
194
- path: H(L, "health"),
195
- icon: /* @__PURE__ */ A(o, { size: 20 }),
201
+ label: V("nav.health"),
202
+ path: W(R, "health"),
203
+ icon: /* @__PURE__ */ j(o, { size: 20 }),
196
204
  order: 110,
197
205
  group: "vibecontrols-system"
198
206
  },
199
207
  {
200
208
  id: "vibecontrols-integrations",
201
- label: z("nav.integrations") === "nav.integrations" ? "Integrations" : z("nav.integrations"),
209
+ label: V("nav.integrations") === "nav.integrations" ? "Integrations" : V("nav.integrations"),
202
210
  path: "/integrations",
203
- icon: /* @__PURE__ */ A(x, { size: 20 }),
211
+ icon: /* @__PURE__ */ j(x, { size: 20 }),
204
212
  order: 115,
205
213
  group: "vibecontrols-system"
206
214
  },
207
215
  {
208
216
  id: "vibecontrols-settings",
209
- label: z("nav.settings"),
210
- path: H(L, "settings"),
211
- icon: /* @__PURE__ */ A(T, { size: 20 }),
217
+ label: V("nav.settings"),
218
+ path: W(R, "settings"),
219
+ icon: /* @__PURE__ */ j(T, { size: 20 }),
212
220
  order: 120,
213
221
  group: "vibecontrols-system"
214
222
  }
215
223
  ]);
216
224
  }, [
217
- F,
218
- L,
219
- z,
220
- B,
221
- V
225
+ I,
226
+ R,
227
+ V,
228
+ H,
229
+ U
222
230
  ]), r(() => {
223
- if (!(!I || V)) return I([{
231
+ if (!(!L || U)) return L([{
224
232
  id: "vibecontrols-status",
225
233
  label: "VibeControls Ready",
226
234
  type: "status",
227
235
  order: 10,
228
236
  section: "left"
229
237
  }]);
230
- }, [I, V]), /* @__PURE__ */ A(N, {
231
- workspaceId: R ?? null,
238
+ }, [L, U]), /* @__PURE__ */ j(P, {
239
+ workspaceId: z ?? null,
232
240
  gateway: "global",
233
241
  defaultEnabled: !0,
234
- children: /* @__PURE__ */ j(e, {
235
- ...P,
242
+ children: /* @__PURE__ */ M(e, {
243
+ ...F,
236
244
  children: [
237
- V ? null : /* @__PURE__ */ A(n, {}),
238
- /* @__PURE__ */ A(t, {}),
239
- /* @__PURE__ */ A(M, {
245
+ U ? null : /* @__PURE__ */ j(n, {}),
246
+ /* @__PURE__ */ j(t, {}),
247
+ B ? /* @__PURE__ */ j(N, {
240
248
  position: "bottom-right",
241
249
  offset: {
242
250
  bottom: 96,
@@ -253,12 +261,12 @@ var P = (P) => {
253
261
  "--normal-border": "var(--color-border-default)",
254
262
  "--border-radius": "var(--radius-card)"
255
263
  }
256
- })
264
+ }) : null
257
265
  ]
258
266
  })
259
267
  });
260
268
  };
261
269
  //#endregion
262
- export { P as VibeControlsRoot };
270
+ export { F as VibeControlsRoot };
263
271
 
264
272
  //# sourceMappingURL=VibeControlsRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibeControlsRoot.js","names":[],"sources":["../src/VibeControlsRoot.tsx"],"sourcesContent":["import type { CSSProperties, 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 Network,\n Webhook,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\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-environments',\n label:\n t('nav.environments') === 'nav.environments' ? 'Environments' : t('nav.environments'),\n path: joinPath(basePath, 'environments'),\n icon: <Network size={20} />,\n order: 23.5,\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 id: 'vibecontrols-webhooks',\n label: t('nav.webhooks') === 'nav.webhooks' ? 'Webhooks' : t('nav.webhooks'),\n path: joinPath(basePath, 'webhooks'),\n icon: <Webhook size={20} />,\n order: 41,\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 {/* Single sonner toaster for the whole module (lib/toast.ts emits\n to it). Offset clears the shell's page-discussion FAB at\n bottom-6 right-6. The style block remaps sonner's theme vars to\n this app's semantic tokens (the fe-libs defaults reference\n shadcn vars that are not defined in this shell). */}\n <Toaster\n position=\"bottom-right\"\n offset={{ bottom: 96, right: 16 }}\n mobileOffset={{ bottom: 96, left: 16, right: 16 }}\n style={\n {\n '--normal-bg': 'var(--color-bg-elevated)',\n '--normal-text': 'var(--color-text-primary)',\n '--normal-border': 'var(--color-border-default)',\n '--border-radius': 'var(--radius-card)',\n } as CSSProperties\n }\n />\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 { CSSProperties, 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 Network,\n Webhook,\n Sparkles,\n} from 'lucide-react';\nimport { VibeControlsProvider } from './providers/VibeControlsProvider';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { Toaster } from '@burdenoff/fe-libs/ui';\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 {\n registerNavItems,\n registerFooterItems,\n basePath = '/',\n workspaceId,\n renderToaster = false,\n } = 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-environments',\n label:\n t('nav.environments') === 'nav.environments' ? 'Environments' : t('nav.environments'),\n path: joinPath(basePath, 'environments'),\n icon: <Network size={20} />,\n order: 23.5,\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 id: 'vibecontrols-ai-builder',\n label: t('nav.aiBuilder') === 'nav.aiBuilder' ? 'AI Builder' : t('nav.aiBuilder'),\n path: joinPath(basePath, 'ai-builder'),\n icon: <Sparkles size={20} />,\n order: 38.7,\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 id: 'vibecontrols-webhooks',\n label: t('nav.webhooks') === 'nav.webhooks' ? 'Webhooks' : t('nav.webhooks'),\n path: joinPath(basePath, 'webhooks'),\n icon: <Webhook size={20} />,\n order: 41,\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 {/* Toaster is owned by the HOST, not the module. Production app shells\n mount a single sonner <Toaster> via AppShellProvider; since sonner\n is a global singleton, this module's lib/toast.ts emits to it and a\n second Toaster here would render every toast twice (the AI-assistant\n \"Error fetching quota limit and usage\" double-toast). Only the\n standalone dev harness (src/dev/main.tsx) — which has no host shell —\n passes renderToaster so toasts are visible there. The style block\n remaps sonner's theme vars to this app's semantic tokens (the\n fe-libs defaults reference shadcn vars not defined in the bare dev\n harness); the offset clears the page-discussion FAB. */}\n {renderToaster ? (\n <Toaster\n position=\"bottom-right\"\n offset={{ bottom: 96, right: 16 }}\n mobileOffset={{ bottom: 96, left: 16, right: 16 }}\n style={\n {\n '--normal-bg': 'var(--color-bg-elevated)',\n '--normal-text': 'var(--color-text-primary)',\n '--normal-border': 'var(--color-border-default)',\n '--border-radius': 'var(--radius-card)',\n } as CSSProperties\n }\n />\n ) : null}\n </VibeControlsProvider>\n </FeatureFlagProvider>\n );\n};\n"],"mappings":"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"}
@@ -4,21 +4,21 @@ import { Navigate as i, Route as a, Routes as o, useLocation as s, useParams as
4
4
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
5
  import { FeatureGate as u } from "@burdenoff/fe-libs/shared/feature-flags";
6
6
  //#region src/VibeControlsRoutes.tsx
7
- var d = t.lazy(() => import("./pages/OverviewPage.js").then((e) => ({ default: e.OverviewPage }))), f = t.lazy(() => import("./pages/AgentsLandingPage.js").then((e) => ({ default: e.AgentsLandingPage }))), p = t.lazy(() => import("./pages/AgentDetailsPage.js").then((e) => ({ default: e.AgentDetailsPage }))), m = t.lazy(() => import("./pages/TargetDetailsPage.js").then((e) => ({ default: e.TargetDetailsPage }))), h = t.lazy(() => import("./pages/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), g = t.lazy(() => import("./pages/SessionDetailsPage.js").then((e) => ({ default: e.SessionDetailsPage }))), _ = t.lazy(() => import("./pages/VibesPage.js").then((e) => ({ default: e.VibesPage }))), v = t.lazy(() => import("./pages/VibeDetailsPage.js").then((e) => ({ default: e.VibeDetailsPage }))), y = t.lazy(() => import("./pages/NoteDetailsPage.js").then((e) => ({ default: e.NoteDetailsPage }))), b = t.lazy(() => import("./pages/TunnelsLandingPage.js").then((e) => ({ default: e.TunnelsLandingPage }))), x = t.lazy(() => import("./pages/tunnels/TunnelDetailsPage.js").then((e) => ({ default: e.TunnelDetailsPage }))), S = t.lazy(() => import("./components/tunnels/TunnelCreateWizard.js").then((e) => ({ default: e.TunnelCreateWizard }))), C = t.lazy(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), w = t.lazy(() => import("./pages/HealthPage.js").then((e) => ({ default: e.HealthPage }))), T = t.lazy(() => import("./pages/GettingStartedPage.js").then((e) => ({ default: e.GettingStartedPage }))), E = t.lazy(() => import("./pages/SharedSessionPage.js").then((e) => ({ default: e.SharedSessionPage }))), D = t.lazy(() => import("./pages/VibeDeckPage.js").then((e) => ({ default: e.VibeDeckPage }))), O = t.lazy(() => import("./pages/SharedVibeDeckPage.js").then((e) => ({ default: e.SharedVibeDeckPage }))), k = t.lazy(() => import("./pages/VibeCalendarPage.js").then((e) => ({ default: e.VibeCalendarPage }))), A = t.lazy(() => import("./pages/VibeTaskDetailPage.js").then((e) => ({ default: e.VibeTaskDetailPage }))), j = t.lazy(() => import("./pages/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), te = t.lazy(() => import("./pages/ActionsPage.js").then((e) => ({ default: e.ActionsPage }))), M = t.lazy(() => import("./pages/VibeAuditPage.js").then((e) => ({ default: e.VibeAuditPage }))), N = t.lazy(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), P = t.lazy(() => import("./pages/VibeDocsPage.js").then((e) => ({ default: e.VibeDocsPage }))), F = t.lazy(() => import("./pages/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/EnvTopologyPage.js").then((e) => ({ default: e.EnvTopologyPage }))), V = t.lazy(() => import("./pages/WebhooksPage.js").then((e) => ({ default: e.WebhooksPage }))), H = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), U = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), W = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), G = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), K = t.lazy(() => import("./pages/PluginsCatalogPage.js").then((e) => ({ default: e.PluginsCatalogPage }))), q = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), J = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), Y = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), X = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage })));
8
- function Z() {
7
+ var d = t.lazy(() => import("./pages/OverviewPage.js").then((e) => ({ default: e.OverviewPage }))), f = t.lazy(() => import("./pages/AgentsLandingPage.js").then((e) => ({ default: e.AgentsLandingPage }))), p = t.lazy(() => import("./pages/AgentDetailsPage.js").then((e) => ({ default: e.AgentDetailsPage }))), m = t.lazy(() => import("./pages/TargetDetailsPage.js").then((e) => ({ default: e.TargetDetailsPage }))), h = t.lazy(() => import("./pages/SessionsPage.js").then((e) => ({ default: e.SessionsPage }))), g = t.lazy(() => import("./pages/SessionDetailsPage.js").then((e) => ({ default: e.SessionDetailsPage }))), _ = t.lazy(() => import("./pages/VibesPage.js").then((e) => ({ default: e.VibesPage }))), v = t.lazy(() => import("./pages/VibeDetailsPage.js").then((e) => ({ default: e.VibeDetailsPage }))), y = t.lazy(() => import("./pages/NoteDetailsPage.js").then((e) => ({ default: e.NoteDetailsPage }))), b = t.lazy(() => import("./pages/TunnelsLandingPage.js").then((e) => ({ default: e.TunnelsLandingPage }))), x = t.lazy(() => import("./pages/tunnels/TunnelDetailsPage.js").then((e) => ({ default: e.TunnelDetailsPage }))), S = t.lazy(() => import("./components/tunnels/TunnelCreateWizard.js").then((e) => ({ default: e.TunnelCreateWizard }))), C = t.lazy(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), w = t.lazy(() => import("./pages/HealthPage.js").then((e) => ({ default: e.HealthPage }))), T = t.lazy(() => import("./pages/GettingStartedPage.js").then((e) => ({ default: e.GettingStartedPage }))), E = t.lazy(() => import("./pages/SharedSessionPage.js").then((e) => ({ default: e.SharedSessionPage }))), D = t.lazy(() => import("./pages/VibeDeckPage.js").then((e) => ({ default: e.VibeDeckPage }))), O = t.lazy(() => import("./pages/SharedVibeDeckPage.js").then((e) => ({ default: e.SharedVibeDeckPage }))), k = t.lazy(() => import("./pages/VibeCalendarPage.js").then((e) => ({ default: e.VibeCalendarPage }))), A = t.lazy(() => import("./pages/VibeTaskDetailPage.js").then((e) => ({ default: e.VibeTaskDetailPage }))), j = t.lazy(() => import("./pages/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), M = t.lazy(() => import("./pages/ActionsPage.js").then((e) => ({ default: e.ActionsPage }))), N = t.lazy(() => import("./pages/VibeAuditPage.js").then((e) => ({ default: e.VibeAuditPage }))), P = t.lazy(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), F = t.lazy(() => import("./pages/VibeDocsPage.js").then((e) => ({ default: e.VibeDocsPage }))), te = t.lazy(() => import("./pages/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/EnvTopologyPage.js").then((e) => ({ default: e.EnvTopologyPage }))), V = t.lazy(() => import("./pages/WebhooksPage.js").then((e) => ({ default: e.WebhooksPage }))), H = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), U = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), W = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), G = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), K = t.lazy(() => import("./pages/PluginsCatalogPage.js").then((e) => ({ default: e.PluginsCatalogPage }))), q = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), J = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), Y = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), X = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage }))), Z = t.lazy(() => import("./pages/ai/AIBuilderPage.js").then((e) => ({ default: e.AIBuilderPage })));
8
+ function Q() {
9
9
  return /* @__PURE__ */ c("div", {
10
10
  className: "flex items-center justify-center h-full min-h-[200px]",
11
11
  children: /* @__PURE__ */ c("div", { className: "animate-pulse bg-muted rounded w-full h-full" })
12
12
  });
13
13
  }
14
- function Q() {
14
+ function ne() {
15
15
  let { pathname: e } = s();
16
16
  return r(() => {
17
17
  let e = document.querySelector("main");
18
18
  e && (e.scrollTop = 0);
19
19
  }, [e]), null;
20
20
  }
21
- var ne = new Set([
21
+ var re = new Set([
22
22
  "overview",
23
23
  "templates",
24
24
  "contexts",
@@ -29,12 +29,12 @@ var ne = new Set([
29
29
  "playground",
30
30
  "config"
31
31
  ]);
32
- function re() {
32
+ function ie() {
33
33
  let { tab: e } = ee();
34
34
  return e === "plan" ? /* @__PURE__ */ c(i, {
35
35
  to: "/vibecontrols/ai-tools/plan",
36
36
  replace: !0
37
- }) : e && ne.has(e) ? /* @__PURE__ */ c(i, {
37
+ }) : e && re.has(e) ? /* @__PURE__ */ c(i, {
38
38
  to: `/vibecontrols/ai-tools/ai/${e}`,
39
39
  replace: !0
40
40
  }) : /* @__PURE__ */ c(i, {
@@ -42,7 +42,7 @@ function re() {
42
42
  replace: !0
43
43
  });
44
44
  }
45
- function ie() {
45
+ function ae() {
46
46
  return /* @__PURE__ */ c("div", {
47
47
  className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
48
48
  children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
@@ -52,14 +52,14 @@ function $(e, t, n = !0) {
52
52
  return /* @__PURE__ */ c(u, {
53
53
  flag: e,
54
54
  defaultValue: n,
55
- fallback: /* @__PURE__ */ c(ie, {}),
55
+ fallback: /* @__PURE__ */ c(ae, {}),
56
56
  children: t
57
57
  });
58
58
  }
59
- function ae() {
59
+ function oe() {
60
60
  return /* @__PURE__ */ l(n, {
61
- fallback: /* @__PURE__ */ c(Z, {}),
62
- children: [/* @__PURE__ */ c(Q, {}), /* @__PURE__ */ l(o, { children: [
61
+ fallback: /* @__PURE__ */ c(Q, {}),
62
+ children: [/* @__PURE__ */ c(ne, {}), /* @__PURE__ */ l(o, { children: [
63
63
  /* @__PURE__ */ c(a, {
64
64
  index: !0,
65
65
  element: $("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
@@ -104,7 +104,7 @@ function ae() {
104
104
  }),
105
105
  /* @__PURE__ */ c(a, {
106
106
  path: "vibes/:id/docs/*",
107
- element: $("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
107
+ element: $("vibecontrols.vibes", /* @__PURE__ */ c(F, {}))
108
108
  }),
109
109
  /* @__PURE__ */ c(a, {
110
110
  path: "notes/:id",
@@ -122,6 +122,10 @@ function ae() {
122
122
  path: "ai/bookmarks",
123
123
  element: $("vibecontrols.ai", /* @__PURE__ */ c(X, {}))
124
124
  }),
125
+ /* @__PURE__ */ c(a, {
126
+ path: "ai-builder",
127
+ element: $("vibecontrols.ai", /* @__PURE__ */ c(Z, {}))
128
+ }),
125
129
  /* @__PURE__ */ c(a, {
126
130
  path: "ai/:tab",
127
131
  element: $("vibecontrols.ai", /* @__PURE__ */ c(Y, {}))
@@ -154,7 +158,7 @@ function ae() {
154
158
  }),
155
159
  /* @__PURE__ */ c(a, {
156
160
  path: "ai-tools/:tab",
157
- element: /* @__PURE__ */ c(re, {})
161
+ element: /* @__PURE__ */ c(ie, {})
158
162
  }),
159
163
  /* @__PURE__ */ c(a, {
160
164
  path: "ai-tools/sessions/:sessionId",
@@ -216,7 +220,7 @@ function ae() {
216
220
  }),
217
221
  /* @__PURE__ */ c(a, {
218
222
  path: "actions",
219
- element: $("vibecontrols.actions", /* @__PURE__ */ c(te, {}))
223
+ element: $("vibecontrols.actions", /* @__PURE__ */ c(M, {}))
220
224
  }),
221
225
  /* @__PURE__ */ c(a, {
222
226
  path: "vibedeck",
@@ -282,15 +286,15 @@ function ae() {
282
286
  }),
283
287
  /* @__PURE__ */ c(a, {
284
288
  path: "analytics",
285
- element: $("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
289
+ element: $("vibecontrols.analytics", /* @__PURE__ */ c(P, {}))
286
290
  }),
287
291
  /* @__PURE__ */ c(a, {
288
292
  path: "audit",
289
- element: $("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
293
+ element: $("vibecontrols.audit-log", /* @__PURE__ */ c(N, {}), !1)
290
294
  }),
291
295
  /* @__PURE__ */ c(a, {
292
296
  path: "logs",
293
- element: /* @__PURE__ */ c(F, {})
297
+ element: /* @__PURE__ */ c(te, {})
294
298
  }),
295
299
  /* @__PURE__ */ c(a, {
296
300
  path: "settings",
@@ -340,6 +344,6 @@ function ae() {
340
344
  });
341
345
  }
342
346
  //#endregion
343
- export { ae as VibeControlsRoutes };
347
+ export { oe as VibeControlsRoutes };
344
348
 
345
349
  //# sourceMappingURL=VibeControlsRoutes.js.map