@burdenoff/microfe-vibecontrols 2026.521.3 → 2026.522.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/VibeControlsRoot.js +86 -78
  2. package/dist/VibeControlsRoot.js.map +1 -1
  3. package/dist/VibeControlsRoutes.js +168 -125
  4. package/dist/VibeControlsRoutes.js.map +1 -1
  5. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +174 -0
  6. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +1 -0
  7. package/dist/components/agent-manager/AgentManagerChatPane.js +149 -94
  8. package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
  9. package/dist/components/agent-manager/AgentManagerMessageItem.js +52 -41
  10. package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
  11. package/dist/components/agent-manager/AgentManagerMessageList.js +22 -15
  12. package/dist/components/agent-manager/AgentManagerMessageList.js.map +1 -1
  13. package/dist/components/agents/OpenInEditorMenu.js +241 -0
  14. package/dist/components/agents/OpenInEditorMenu.js.map +1 -0
  15. package/dist/components/agents/VibeOpenInEditorMenu.js +20 -0
  16. package/dist/components/agents/VibeOpenInEditorMenu.js.map +1 -0
  17. package/dist/components/agents/idePresets.js +148 -0
  18. package/dist/components/agents/idePresets.js.map +1 -0
  19. package/dist/components/agents/index.js +3 -0
  20. package/dist/components/ai/AIPlanPanel.js +332 -0
  21. package/dist/components/ai/AIPlanPanel.js.map +1 -0
  22. package/dist/components/analytics/index.js +2 -2
  23. package/dist/components/assistant/AssistantMessageItem.js +55 -47
  24. package/dist/components/assistant/AssistantMessageItem.js.map +1 -1
  25. package/dist/components/audit/AuditExportButton.js +87 -41
  26. package/dist/components/audit/AuditExportButton.js.map +1 -1
  27. package/dist/components/gitops/CIDurationChart.js +11 -11
  28. package/dist/components/security/SecurityEmptyState.js +33 -0
  29. package/dist/components/security/SecurityEmptyState.js.map +1 -0
  30. package/dist/components/security/SecurityEvidenceList.js +42 -0
  31. package/dist/components/security/SecurityEvidenceList.js.map +1 -0
  32. package/dist/components/security/SecurityFindingsTable.js +201 -0
  33. package/dist/components/security/SecurityFindingsTable.js.map +1 -0
  34. package/dist/components/security/SecurityHeaderStrip.js +67 -0
  35. package/dist/components/security/SecurityHeaderStrip.js.map +1 -0
  36. package/dist/components/security/SecurityLifecycleStepper.js +66 -0
  37. package/dist/components/security/SecurityLifecycleStepper.js.map +1 -0
  38. package/dist/components/security/SecurityProviderDrawer.js +112 -0
  39. package/dist/components/security/SecurityProviderDrawer.js.map +1 -0
  40. package/dist/components/security/SecurityTabPanel.js +105 -0
  41. package/dist/components/security/SecurityTabPanel.js.map +1 -0
  42. package/dist/components/security/gql.js +128 -0
  43. package/dist/components/security/gql.js.map +1 -0
  44. package/dist/components/security/index.js +8 -0
  45. package/dist/components/security/types.js +80 -0
  46. package/dist/components/security/types.js.map +1 -0
  47. package/dist/components/settings/IdePreferencesSection.js +66 -0
  48. package/dist/components/settings/IdePreferencesSection.js.map +1 -0
  49. package/dist/components/shared/PageSkeleton.js +88 -0
  50. package/dist/components/shared/PageSkeleton.js.map +1 -0
  51. package/dist/constants/pluginCatalog.js +20 -8
  52. package/dist/constants/pluginCatalog.js.map +1 -1
  53. package/dist/generated/wspace-operations.js +1350 -1262
  54. package/dist/generated/wspace-operations.js.map +1 -1
  55. package/dist/generated/wspace-types.js.map +1 -1
  56. package/dist/hooks/useToggleAgentBookmark.js +32 -0
  57. package/dist/hooks/useToggleAgentBookmark.js.map +1 -0
  58. package/dist/index.js +10 -10
  59. package/dist/pages/AgentDetailsPage.js +25 -25
  60. package/dist/pages/AgentDetailsPage.js.map +1 -1
  61. package/dist/pages/AgentsPage.js +326 -327
  62. package/dist/pages/AgentsPage.js.map +1 -1
  63. package/dist/pages/AnalyticsPage.js +425 -420
  64. package/dist/pages/AnalyticsPage.js.map +1 -1
  65. package/dist/pages/CatalogDetailPage.js +258 -249
  66. package/dist/pages/CatalogDetailPage.js.map +1 -1
  67. package/dist/pages/CatalogPage.js +22 -22
  68. package/dist/pages/CatalogPage.js.map +1 -1
  69. package/dist/pages/ComponentDetailPage.js +30 -30
  70. package/dist/pages/ComponentDetailPage.js.map +1 -1
  71. package/dist/pages/ComponentsPage.js +23 -23
  72. package/dist/pages/ComponentsPage.js.map +1 -1
  73. package/dist/pages/LogsPage.js +107 -0
  74. package/dist/pages/LogsPage.js.map +1 -0
  75. package/dist/pages/NoteDetailsPage.js +12 -12
  76. package/dist/pages/NoteDetailsPage.js.map +1 -1
  77. package/dist/pages/SessionDetailsPage.js +12 -12
  78. package/dist/pages/SessionDetailsPage.js.map +1 -1
  79. package/dist/pages/SessionsPage.js +158 -136
  80. package/dist/pages/SessionsPage.js.map +1 -1
  81. package/dist/pages/SettingsPage.js +60 -52
  82. package/dist/pages/SettingsPage.js.map +1 -1
  83. package/dist/pages/TargetDetailsPage.js +18 -18
  84. package/dist/pages/TargetDetailsPage.js.map +1 -1
  85. package/dist/pages/TargetsPage.js +328 -331
  86. package/dist/pages/TargetsPage.js.map +1 -1
  87. package/dist/pages/TemplateDetailPage.js +17 -17
  88. package/dist/pages/TemplateDetailPage.js.map +1 -1
  89. package/dist/pages/TemplatesPage.js +17 -17
  90. package/dist/pages/TemplatesPage.js.map +1 -1
  91. package/dist/pages/VibeDetailsPage.js +552 -535
  92. package/dist/pages/VibeDetailsPage.js.map +1 -1
  93. package/dist/pages/VibesPage.js +321 -296
  94. package/dist/pages/VibesPage.js.map +1 -1
  95. package/dist/pages/ai/AIBookmarksPage.js +184 -0
  96. package/dist/pages/ai/AIBookmarksPage.js.map +1 -0
  97. package/dist/pages/ai/AIPage.js +138 -109
  98. package/dist/pages/ai/AIPage.js.map +1 -1
  99. package/dist/services/planApi.js +18 -0
  100. package/dist/services/planApi.js.map +1 -0
  101. package/dist/store/vibeControlsStore.js +20 -2
  102. package/dist/store/vibeControlsStore.js.map +1 -1
  103. package/dist/translations/en.js +30 -1
  104. package/dist/translations/en.js.map +1 -1
  105. package/package.json +4 -4
@@ -1,281 +1,324 @@
1
1
  import { useTr as e } from "./shared/hooks/useTr.js";
2
2
  import t, { Suspense as n, useEffect as r } from "react";
3
- import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-router-dom";
4
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
- import { FeatureGate as u } from "@burdenoff/fe-libs/shared/feature-flags";
3
+ import { Navigate as i, Route as a, Routes as o, useLocation as s, useParams as c } from "react-router-dom";
4
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
+ import { FeatureGate as ee } 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/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/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), I = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), L = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), R = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), z = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), B = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), V = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), H = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), U = t.lazy(() => import("./pages/PluginStandalonePage.js").then((e) => ({ default: e.PluginStandalonePage }))), W = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), G = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), K = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage })));
8
- function q() {
9
- return /* @__PURE__ */ c("div", {
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 }))), te = t.lazy(() => import("./pages/ActionsPage.js").then((e) => ({ default: e.ActionsPage }))), j = t.lazy(() => import("./pages/VibeAuditPage.js").then((e) => ({ default: e.VibeAuditPage }))), M = t.lazy(() => import("./pages/AnalyticsPage.js").then((e) => ({ default: e.AnalyticsPage }))), N = t.lazy(() => import("./pages/VibeDocsPage.js").then((e) => ({ default: e.VibeDocsPage }))), P = t.lazy(() => import("./pages/LogsPage.js").then((e) => ({ default: e.LogsPage }))), F = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), I = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), L = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), R = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), z = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), B = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), V = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), H = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), U = t.lazy(() => import("./pages/PluginStandalonePage.js").then((e) => ({ default: e.PluginStandalonePage }))), W = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), G = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), K = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), q = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage })));
8
+ function J() {
9
+ return /* @__PURE__ */ l("div", {
10
10
  className: "flex items-center justify-center h-full min-h-[200px]",
11
- children: /* @__PURE__ */ c("div", { className: "animate-pulse bg-muted rounded w-full h-full" })
11
+ children: /* @__PURE__ */ l("div", { className: "animate-pulse bg-muted rounded w-full h-full" })
12
12
  });
13
13
  }
14
- function J() {
14
+ function Y() {
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
- function Y() {
22
- return /* @__PURE__ */ c("div", {
21
+ var X = new Set([
22
+ "overview",
23
+ "templates",
24
+ "contexts",
25
+ "prompts",
26
+ "sessions",
27
+ "tasks",
28
+ "stats",
29
+ "playground",
30
+ "config"
31
+ ]);
32
+ function Z() {
33
+ let { tab: e } = c();
34
+ return e === "plan" ? /* @__PURE__ */ l(i, {
35
+ to: "/vibecontrols/ai-tools/plan",
36
+ replace: !0
37
+ }) : e && X.has(e) ? /* @__PURE__ */ l(i, {
38
+ to: `/vibecontrols/ai-tools/ai/${e}`,
39
+ replace: !0
40
+ }) : /* @__PURE__ */ l(i, {
41
+ to: "/vibecontrols/ai-tools/ai/overview",
42
+ replace: !0
43
+ });
44
+ }
45
+ function Q() {
46
+ return /* @__PURE__ */ l("div", {
23
47
  className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
24
48
  children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
25
49
  });
26
50
  }
27
- function X(e, t, n = !0) {
28
- return /* @__PURE__ */ c(u, {
51
+ function $(e, t, n = !0) {
52
+ return /* @__PURE__ */ l(ee, {
29
53
  flag: e,
30
54
  defaultValue: n,
31
- fallback: /* @__PURE__ */ c(Y, {}),
55
+ fallback: /* @__PURE__ */ l(Q, {}),
32
56
  children: t
33
57
  });
34
58
  }
35
- function Z() {
36
- return /* @__PURE__ */ l(n, {
37
- fallback: /* @__PURE__ */ c(q, {}),
38
- children: [/* @__PURE__ */ c(J, {}), /* @__PURE__ */ l(o, { children: [
39
- /* @__PURE__ */ c(a, {
59
+ function ne() {
60
+ return /* @__PURE__ */ u(n, {
61
+ fallback: /* @__PURE__ */ l(J, {}),
62
+ children: [/* @__PURE__ */ l(Y, {}), /* @__PURE__ */ u(o, { children: [
63
+ /* @__PURE__ */ l(a, {
40
64
  index: !0,
41
- element: X("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
65
+ element: $("vibecontrols.overview", /* @__PURE__ */ l(d, {}))
42
66
  }),
43
- /* @__PURE__ */ c(a, {
67
+ /* @__PURE__ */ l(a, {
44
68
  path: "plugin/:pluginKey",
45
- element: X("vibecontrols.vibes", /* @__PURE__ */ c(U, {}))
69
+ element: $("vibecontrols.vibes", /* @__PURE__ */ l(U, {}))
46
70
  }),
47
- /* @__PURE__ */ c(a, {
71
+ /* @__PURE__ */ l(a, {
48
72
  path: "agents",
49
- element: X("vibecontrols.agents", /* @__PURE__ */ c(f, {}))
73
+ element: $("vibecontrols.agents", /* @__PURE__ */ l(f, {}))
50
74
  }),
51
- /* @__PURE__ */ c(a, {
75
+ /* @__PURE__ */ l(a, {
52
76
  path: "agents/:id",
53
- element: X("vibecontrols.agents", /* @__PURE__ */ c(p, {}))
77
+ element: $("vibecontrols.agents", /* @__PURE__ */ l(p, {}))
54
78
  }),
55
- /* @__PURE__ */ c(a, {
79
+ /* @__PURE__ */ l(a, {
56
80
  path: "sessions",
57
- element: X("vibecontrols.sessions", /* @__PURE__ */ c(h, {}))
81
+ element: $("vibecontrols.sessions", /* @__PURE__ */ l(h, {}))
58
82
  }),
59
- /* @__PURE__ */ c(a, {
83
+ /* @__PURE__ */ l(a, {
60
84
  path: "vibes",
61
- element: X("vibecontrols.vibes", /* @__PURE__ */ c(_, {}))
85
+ element: $("vibecontrols.vibes", /* @__PURE__ */ l(_, {}))
62
86
  }),
63
- /* @__PURE__ */ c(a, {
87
+ /* @__PURE__ */ l(a, {
64
88
  path: "vibes/:id",
65
- element: X("vibecontrols.vibes", /* @__PURE__ */ c(v, {}))
89
+ element: $("vibecontrols.vibes", /* @__PURE__ */ l(v, {}))
66
90
  }),
67
- /* @__PURE__ */ c(a, {
91
+ /* @__PURE__ */ l(a, {
68
92
  path: "vibes/:id/docs/*",
69
- element: X("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
93
+ element: $("vibecontrols.vibes", /* @__PURE__ */ l(N, {}))
70
94
  }),
71
- /* @__PURE__ */ c(a, {
95
+ /* @__PURE__ */ l(a, {
72
96
  path: "notes/:id",
73
- element: X("vibecontrols.vibes", /* @__PURE__ */ c(y, {}))
97
+ element: $("vibecontrols.vibes", /* @__PURE__ */ l(y, {}))
74
98
  }),
75
- /* @__PURE__ */ c(a, {
99
+ /* @__PURE__ */ l(a, {
76
100
  path: "sessions/:id",
77
- element: X("vibecontrols.sessions", /* @__PURE__ */ c(g, {}))
101
+ element: $("vibecontrols.sessions", /* @__PURE__ */ l(g, {}))
78
102
  }),
79
- /* @__PURE__ */ c(a, {
103
+ /* @__PURE__ */ l(a, {
80
104
  path: "ai",
81
- element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
105
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(K, {}))
106
+ }),
107
+ /* @__PURE__ */ l(a, {
108
+ path: "ai/bookmarks",
109
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(q, {}))
82
110
  }),
83
- /* @__PURE__ */ c(a, {
111
+ /* @__PURE__ */ l(a, {
84
112
  path: "ai/:tab",
85
- element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
113
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(K, {}))
86
114
  }),
87
- /* @__PURE__ */ c(a, {
115
+ /* @__PURE__ */ l(a, {
88
116
  path: "ai/sessions/:sessionId",
89
- element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
117
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(K, {}))
90
118
  }),
91
- /* @__PURE__ */ c(a, {
119
+ /* @__PURE__ */ l(a, {
92
120
  path: "ai-tools",
93
- element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
121
+ element: /* @__PURE__ */ l(i, {
122
+ to: "ai/overview",
123
+ replace: !0
124
+ })
125
+ }),
126
+ /* @__PURE__ */ l(a, {
127
+ path: "ai-tools/plan",
128
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(W, {}))
94
129
  }),
95
- /* @__PURE__ */ c(a, {
130
+ /* @__PURE__ */ l(a, {
131
+ path: "ai-tools/ai",
132
+ element: /* @__PURE__ */ l(i, {
133
+ to: "overview",
134
+ replace: !0
135
+ })
136
+ }),
137
+ /* @__PURE__ */ l(a, {
138
+ path: "ai-tools/ai/:tab",
139
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(W, {}))
140
+ }),
141
+ /* @__PURE__ */ l(a, {
96
142
  path: "ai-tools/:tab",
97
- element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
143
+ element: /* @__PURE__ */ l(Z, {})
98
144
  }),
99
- /* @__PURE__ */ c(a, {
145
+ /* @__PURE__ */ l(a, {
100
146
  path: "ai-tools/sessions/:sessionId",
101
- element: X("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
147
+ element: $("vibecontrols.ai", /* @__PURE__ */ l(G, {}))
102
148
  }),
103
- /* @__PURE__ */ c(a, {
149
+ /* @__PURE__ */ l(a, {
104
150
  path: "targets",
105
- element: /* @__PURE__ */ c(i, {
151
+ element: /* @__PURE__ */ l(i, {
106
152
  to: "../agents?tab=targets",
107
153
  replace: !0
108
154
  })
109
155
  }),
110
- /* @__PURE__ */ c(a, {
156
+ /* @__PURE__ */ l(a, {
111
157
  path: "targets/:id",
112
- element: X("vibecontrols.agents", /* @__PURE__ */ c(m, {}))
158
+ element: $("vibecontrols.agents", /* @__PURE__ */ l(m, {}))
113
159
  }),
114
- /* @__PURE__ */ c(a, {
160
+ /* @__PURE__ */ l(a, {
115
161
  path: "agent-graph",
116
- element: /* @__PURE__ */ c(i, {
162
+ element: /* @__PURE__ */ l(i, {
117
163
  to: "../agents?tab=graph",
118
164
  replace: !0
119
165
  })
120
166
  }),
121
- /* @__PURE__ */ c(a, {
167
+ /* @__PURE__ */ l(a, {
122
168
  path: "catalogs",
123
- element: X("vibecontrols.catalogs", /* @__PURE__ */ c(F, {}))
169
+ element: $("vibecontrols.catalogs", /* @__PURE__ */ l(F, {}))
124
170
  }),
125
- /* @__PURE__ */ c(a, {
171
+ /* @__PURE__ */ l(a, {
126
172
  path: "catalogs/:id",
127
- element: X("vibecontrols.catalogs", /* @__PURE__ */ c(I, {}))
173
+ element: $("vibecontrols.catalogs", /* @__PURE__ */ l(I, {}))
128
174
  }),
129
- /* @__PURE__ */ c(a, {
175
+ /* @__PURE__ */ l(a, {
130
176
  path: "catalogs/:id/docs/*",
131
- element: X("vibecontrols.catalogs", /* @__PURE__ */ c(L, {}))
177
+ element: $("vibecontrols.catalogs", /* @__PURE__ */ l(L, {}))
132
178
  }),
133
- /* @__PURE__ */ c(a, {
179
+ /* @__PURE__ */ l(a, {
134
180
  path: "components",
135
- element: X("vibecontrols.components", /* @__PURE__ */ c(R, {}))
181
+ element: $("vibecontrols.components", /* @__PURE__ */ l(R, {}))
136
182
  }),
137
- /* @__PURE__ */ c(a, {
183
+ /* @__PURE__ */ l(a, {
138
184
  path: "components/:id",
139
- element: X("vibecontrols.components", /* @__PURE__ */ c(z, {}))
185
+ element: $("vibecontrols.components", /* @__PURE__ */ l(z, {}))
140
186
  }),
141
- /* @__PURE__ */ c(a, {
187
+ /* @__PURE__ */ l(a, {
142
188
  path: "components/:id/docs/*",
143
- element: X("vibecontrols.components", /* @__PURE__ */ c(B, {}))
189
+ element: $("vibecontrols.components", /* @__PURE__ */ l(B, {}))
144
190
  }),
145
- /* @__PURE__ */ c(a, {
191
+ /* @__PURE__ */ l(a, {
146
192
  path: "templates",
147
- element: X("vibecontrols.templates", /* @__PURE__ */ c(V, {}))
193
+ element: $("vibecontrols.templates", /* @__PURE__ */ l(V, {}))
148
194
  }),
149
- /* @__PURE__ */ c(a, {
195
+ /* @__PURE__ */ l(a, {
150
196
  path: "templates/:id",
151
- element: X("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
197
+ element: $("vibecontrols.templates", /* @__PURE__ */ l(H, {}))
152
198
  }),
153
- /* @__PURE__ */ c(a, {
199
+ /* @__PURE__ */ l(a, {
154
200
  path: "actions",
155
- element: X("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
201
+ element: $("vibecontrols.actions", /* @__PURE__ */ l(te, {}))
156
202
  }),
157
- /* @__PURE__ */ c(a, {
203
+ /* @__PURE__ */ l(a, {
158
204
  path: "vibedeck",
159
- element: X("vibecontrols.vibedeck", /* @__PURE__ */ c(D, {}))
205
+ element: $("vibecontrols.vibedeck", /* @__PURE__ */ l(D, {}))
160
206
  }),
161
- /* @__PURE__ */ c(a, {
207
+ /* @__PURE__ */ l(a, {
162
208
  path: "calendar",
163
- element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
209
+ element: $("vibecontrols.calendar", /* @__PURE__ */ l(k, {}))
164
210
  }),
165
- /* @__PURE__ */ c(a, {
211
+ /* @__PURE__ */ l(a, {
166
212
  path: "calendar/:viewType",
167
- element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
213
+ element: $("vibecontrols.calendar", /* @__PURE__ */ l(k, {}))
168
214
  }),
169
- /* @__PURE__ */ c(a, {
215
+ /* @__PURE__ */ l(a, {
170
216
  path: "calendar/task/:taskId",
171
- element: X("vibecontrols.calendar", /* @__PURE__ */ c(A, {}))
217
+ element: $("vibecontrols.calendar", /* @__PURE__ */ l(A, {}))
172
218
  }),
173
- /* @__PURE__ */ c(a, {
219
+ /* @__PURE__ */ l(a, {
174
220
  path: "webhooks",
175
- element: /* @__PURE__ */ c(i, {
221
+ element: /* @__PURE__ */ l(i, {
176
222
  to: "/devportal/webhooks",
177
223
  replace: !0
178
224
  })
179
225
  }),
180
- /* @__PURE__ */ c(a, {
226
+ /* @__PURE__ */ l(a, {
181
227
  path: "webhooks/new",
182
- element: /* @__PURE__ */ c(i, {
228
+ element: /* @__PURE__ */ l(i, {
183
229
  to: "/devportal/webhooks/new",
184
230
  replace: !0
185
231
  })
186
232
  }),
187
- /* @__PURE__ */ c(a, {
233
+ /* @__PURE__ */ l(a, {
188
234
  path: "webhooks/:id",
189
- element: /* @__PURE__ */ c(i, {
235
+ element: /* @__PURE__ */ l(i, {
190
236
  to: "/devportal/webhooks",
191
237
  replace: !0
192
238
  })
193
239
  }),
194
- /* @__PURE__ */ c(a, {
240
+ /* @__PURE__ */ l(a, {
195
241
  path: "gitops",
196
- element: /* @__PURE__ */ c(i, {
242
+ element: /* @__PURE__ */ l(i, {
197
243
  to: "../vibes",
198
244
  replace: !0
199
245
  })
200
246
  }),
201
- /* @__PURE__ */ c(a, {
247
+ /* @__PURE__ */ l(a, {
202
248
  path: "gitops/:tab",
203
- element: /* @__PURE__ */ c(i, {
249
+ element: /* @__PURE__ */ l(i, {
204
250
  to: "../vibes",
205
251
  replace: !0
206
252
  })
207
253
  }),
208
- /* @__PURE__ */ c(a, {
254
+ /* @__PURE__ */ l(a, {
209
255
  path: "tunnels",
210
- element: X("vibecontrols.tunnels", /* @__PURE__ */ c(b, {}))
256
+ element: $("vibecontrols.tunnels", /* @__PURE__ */ l(b, {}))
211
257
  }),
212
- /* @__PURE__ */ c(a, {
258
+ /* @__PURE__ */ l(a, {
213
259
  path: "tunnels/new",
214
- element: X("vibecontrols.tunnels", /* @__PURE__ */ c(S, {}))
260
+ element: $("vibecontrols.tunnels", /* @__PURE__ */ l(S, {}))
215
261
  }),
216
- /* @__PURE__ */ c(a, {
262
+ /* @__PURE__ */ l(a, {
217
263
  path: "tunnels/:tunnelId",
218
- element: X("vibecontrols.tunnels", /* @__PURE__ */ c(x, {}))
264
+ element: $("vibecontrols.tunnels", /* @__PURE__ */ l(x, {}))
219
265
  }),
220
- /* @__PURE__ */ c(a, {
266
+ /* @__PURE__ */ l(a, {
221
267
  path: "health",
222
- element: X("vibecontrols.health", /* @__PURE__ */ c(w, {}))
268
+ element: $("vibecontrols.health", /* @__PURE__ */ l(w, {}))
223
269
  }),
224
- /* @__PURE__ */ c(a, {
270
+ /* @__PURE__ */ l(a, {
225
271
  path: "analytics",
226
- element: X("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
272
+ element: $("vibecontrols.analytics", /* @__PURE__ */ l(M, {}))
227
273
  }),
228
- /* @__PURE__ */ c(a, {
274
+ /* @__PURE__ */ l(a, {
229
275
  path: "audit",
230
- element: X("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
276
+ element: $("vibecontrols.audit-log", /* @__PURE__ */ l(j, {}), !1)
231
277
  }),
232
- /* @__PURE__ */ c(a, {
278
+ /* @__PURE__ */ l(a, {
233
279
  path: "logs",
234
- element: /* @__PURE__ */ c(i, {
235
- to: "/vibecontrols/agents",
236
- replace: !0
237
- })
280
+ element: $("vibecontrols.agents", /* @__PURE__ */ l(P, {}))
238
281
  }),
239
- /* @__PURE__ */ c(a, {
282
+ /* @__PURE__ */ l(a, {
240
283
  path: "settings",
241
- element: X("vibecontrols.settings", /* @__PURE__ */ c(C, {}))
284
+ element: $("vibecontrols.settings", /* @__PURE__ */ l(C, {}))
242
285
  }),
243
- /* @__PURE__ */ c(a, {
286
+ /* @__PURE__ */ l(a, {
244
287
  path: "getting-started",
245
- element: /* @__PURE__ */ c(T, {})
288
+ element: /* @__PURE__ */ l(T, {})
246
289
  }),
247
- /* @__PURE__ */ c(a, {
290
+ /* @__PURE__ */ l(a, {
248
291
  path: "share/:token",
249
- element: /* @__PURE__ */ c(E, {})
292
+ element: /* @__PURE__ */ l(E, {})
250
293
  }),
251
- /* @__PURE__ */ c(a, {
294
+ /* @__PURE__ */ l(a, {
252
295
  path: "deck/:token",
253
- element: /* @__PURE__ */ c(O, {})
296
+ element: /* @__PURE__ */ l(O, {})
254
297
  }),
255
- /* @__PURE__ */ c(a, {
298
+ /* @__PURE__ */ l(a, {
256
299
  path: "access",
257
- element: /* @__PURE__ */ c(i, {
300
+ element: /* @__PURE__ */ l(i, {
258
301
  to: "../agents?tab=targets",
259
302
  replace: !0
260
303
  })
261
304
  }),
262
- /* @__PURE__ */ c(a, {
305
+ /* @__PURE__ */ l(a, {
263
306
  path: "ssh-targets",
264
- element: /* @__PURE__ */ c(i, {
307
+ element: /* @__PURE__ */ l(i, {
265
308
  to: "../agents?tab=targets",
266
309
  replace: !0
267
310
  })
268
311
  }),
269
- /* @__PURE__ */ c(a, {
312
+ /* @__PURE__ */ l(a, {
270
313
  path: "ssh-terminals",
271
- element: /* @__PURE__ */ c(i, {
314
+ element: /* @__PURE__ */ l(i, {
272
315
  to: "../agents?tab=targets",
273
316
  replace: !0
274
317
  })
275
318
  }),
276
- /* @__PURE__ */ c(a, {
319
+ /* @__PURE__ */ l(a, {
277
320
  path: "*",
278
- element: /* @__PURE__ */ c(i, {
321
+ element: /* @__PURE__ */ l(i, {
279
322
  to: "",
280
323
  replace: !0
281
324
  })
@@ -284,6 +327,6 @@ function Z() {
284
327
  });
285
328
  }
286
329
  //#endregion
287
- export { Z as VibeControlsRoutes };
330
+ export { ne as VibeControlsRoutes };
288
331
 
289
332
  //# sourceMappingURL=VibeControlsRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibeControlsRoutes.js","names":[],"sources":["../src/VibeControlsRoutes.tsx"],"sourcesContent":["import React, { Suspense, useEffect } from 'react';\nimport { Navigate, Route, Routes, useLocation } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTr } from './shared/hooks/useTr';\n\n// Lazy load - All pages (required for @/ alias resolution when consumed by host app)\nconst OverviewPage = React.lazy(() =>\n import('./pages/OverviewPage').then((m) => ({ default: m.OverviewPage }))\n);\n\n// Other pages\nconst AgentsLandingPage = React.lazy(() =>\n import('./pages/AgentsLandingPage').then((m) => ({ default: m.AgentsLandingPage }))\n);\nconst AgentDetailsPage = React.lazy(() =>\n import('./pages/AgentDetailsPage').then((m) => ({ default: m.AgentDetailsPage }))\n);\nconst TargetDetailsPage = React.lazy(() =>\n import('./pages/TargetDetailsPage').then((m) => ({ default: m.TargetDetailsPage }))\n);\nconst SessionsPage = React.lazy(() =>\n import('./pages/SessionsPage').then((m) => ({ default: m.SessionsPage }))\n);\nconst SessionDetailsPage = React.lazy(() =>\n import('./pages/SessionDetailsPage').then((m) => ({ default: m.SessionDetailsPage }))\n);\nconst VibesPage = React.lazy(() =>\n import('./pages/VibesPage').then((m) => ({ default: m.VibesPage }))\n);\nconst VibeDetailsPage = React.lazy(() =>\n import('./pages/VibeDetailsPage').then((m) => ({ default: m.VibeDetailsPage }))\n);\nconst NoteDetailsPage = React.lazy(() =>\n import('./pages/NoteDetailsPage').then((m) => ({ default: m.NoteDetailsPage }))\n);\nconst TunnelsLandingPage = React.lazy(() =>\n import('./pages/TunnelsLandingPage').then((m) => ({ default: m.TunnelsLandingPage }))\n);\nconst TunnelDetailsPage = React.lazy(() =>\n import('./pages/tunnels/TunnelDetailsPage').then((m) => ({ default: m.TunnelDetailsPage }))\n);\nconst TunnelCreateWizard = React.lazy(() =>\n import('./components/tunnels/TunnelCreateWizard').then((m) => ({ default: m.TunnelCreateWizard }))\n);\nconst SettingsPage = React.lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst HealthPage = React.lazy(() =>\n import('./pages/HealthPage').then((m) => ({ default: m.HealthPage }))\n);\nconst GettingStartedPage = React.lazy(() =>\n import('./pages/GettingStartedPage').then((m) => ({ default: m.GettingStartedPage }))\n);\nconst SharedSessionPage = React.lazy(() =>\n import('./pages/SharedSessionPage').then((m) => ({ default: m.SharedSessionPage }))\n);\nconst VibeDeckPage = React.lazy(() =>\n import('./pages/VibeDeckPage').then((m) => ({ default: m.VibeDeckPage }))\n);\nconst SharedVibeDeckPage = React.lazy(() =>\n import('./pages/SharedVibeDeckPage').then((m) => ({ default: m.SharedVibeDeckPage }))\n);\nconst VibeCalendarPage = React.lazy(() =>\n import('./pages/VibeCalendarPage').then((m) => ({ default: m.VibeCalendarPage }))\n);\nconst VibeTaskDetailPage = React.lazy(() =>\n import('./pages/VibeTaskDetailPage').then((m) => ({ default: m.VibeTaskDetailPage }))\n);\nconst ActionsPage = React.lazy(() =>\n import('./pages/ActionsPage').then((m) => ({ default: m.ActionsPage }))\n);\nconst VibeAuditPage = React.lazy(() =>\n import('./pages/VibeAuditPage').then((m) => ({ default: m.VibeAuditPage }))\n);\nconst AnalyticsPage = React.lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst VibeDocsPage = React.lazy(() =>\n import('./pages/VibeDocsPage').then((m) => ({ default: m.VibeDocsPage }))\n);\n\n// Catalog, Components, Templates pages\nconst CatalogPage = React.lazy(() =>\n import('./pages/CatalogPage').then((m) => ({ default: m.CatalogPage }))\n);\nconst CatalogDetailPage = React.lazy(() =>\n import('./pages/CatalogDetailPage').then((m) => ({ default: m.CatalogDetailPage }))\n);\nconst CatalogDocsPage = React.lazy(() =>\n import('./pages/CatalogDocsPage').then((m) => ({ default: m.CatalogDocsPage }))\n);\nconst ComponentsPage = React.lazy(() =>\n import('./pages/ComponentsPage').then((m) => ({ default: m.ComponentsPage }))\n);\nconst ComponentDetailPage = React.lazy(() =>\n import('./pages/ComponentDetailPage').then((m) => ({ default: m.ComponentDetailPage }))\n);\nconst ComponentDocsPage = React.lazy(() =>\n import('./pages/ComponentDocsPage').then((m) => ({ default: m.ComponentDocsPage }))\n);\nconst TemplatesPage = React.lazy(() =>\n import('./pages/TemplatesPage').then((m) => ({ default: m.TemplatesPage }))\n);\nconst TemplateDetailPage = React.lazy(() =>\n import('./pages/TemplateDetailPage').then((m) => ({ default: m.TemplateDetailPage }))\n);\nconst PluginStandalonePage = React.lazy(() =>\n import('./pages/PluginStandalonePage').then((m) => ({ default: m.PluginStandalonePage }))\n);\n\n// AI pages\nconst AIPage = React.lazy(() => import('./pages/ai/AIPage').then((m) => ({ default: m.AIPage })));\nconst AISessionDetailPage = React.lazy(() =>\n import('./pages/ai/AISessionDetailPage').then((m) => ({ default: m.AISessionDetailPage }))\n);\nconst AgentManagerPage = React.lazy(() =>\n import('./pages/ai/AgentManagerPage').then((m) => ({ default: m.AgentManagerPage }))\n);\n\n// Loading fallback component\nfunction PageLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center h-full min-h-[200px]\">\n <div className=\"animate-pulse bg-muted rounded w-full h-full\" />\n </div>\n );\n}\n\n/**\n * Internal router for the VibeControls microfrontend.\n * This component handles routing within the microfrontend using React Router v7.\n *\n * Routes:\n * - / → Overview page (dashboard)\n * - /agents → Agents management page\n * - /agents/:id → Agent details page\n * - /sessions → Sessions management page\n * - /sessions/:id → Session details page\n * - /vibes → Vibes (projects) management page\n * - /vibes/:id → Vibe details page (includes Notes tab)\n * - /settings → Settings page\n * - /webhooks → Legacy redirect to Developer Portal webhooks\n * - /health → Health monitoring page\n * - /* → Catch-all redirects to overview\n */\nfunction ScrollToTop() {\n const { pathname } = useLocation();\n useEffect(() => {\n // The scrollable container is the <main> element with overflow-auto\n // inside AppShellLayout, not the window itself.\n const main = document.querySelector('main');\n if (main) main.scrollTop = 0;\n }, [pathname]);\n return null;\n}\n\n/**\n * Fallback shown when a feature flag is OFF.\n */\nfunction FeatureDisabledFallback() {\n const tr = useTr();\n return (\n <div className=\"flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm\">\n {tr(\n 'vibecontrols.pages.featureDisabled',\n 'This feature is currently disabled. You can enable it from Feature Previews.'\n )}\n </div>\n );\n}\n\n/**\n * Helper: wraps a page element in a FeatureGate.\n * defaultValue={true} means the feature shows by default (before flags are seeded).\n * Only hides when a flag is explicitly set to false.\n */\nfunction gated(flag: string, element: React.ReactNode, defaultValue = true): React.ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={defaultValue} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nexport function VibeControlsRoutes() {\n return (\n <Suspense fallback={<PageLoadingFallback />}>\n <ScrollToTop />\n <Routes>\n {/* Default route - overview page */}\n <Route index element={gated('vibecontrols.overview', <OverviewPage />)} />\n\n {/* Core pages */}\n {/* PR-9 standalone plugin route — deep-link any contribution\n from any mount point as a full-page view. Wrapped in the\n same `gated()` envelope as every other authenticated route\n for consistent authz; the page-level\n `vibes.tabs.iframe-host` feature flag still gates rendering\n once the user is past the entitlement check. */}\n <Route\n path=\"plugin/:pluginKey\"\n element={gated('vibecontrols.vibes', <PluginStandalonePage />)}\n />\n\n <Route path=\"agents\" element={gated('vibecontrols.agents', <AgentsLandingPage />)} />\n <Route path=\"agents/:id\" element={gated('vibecontrols.agents', <AgentDetailsPage />)} />\n <Route path=\"sessions\" element={gated('vibecontrols.sessions', <SessionsPage />)} />\n <Route path=\"vibes\" element={gated('vibecontrols.vibes', <VibesPage />)} />\n <Route path=\"vibes/:id\" element={gated('vibecontrols.vibes', <VibeDetailsPage />)} />\n <Route path=\"vibes/:id/docs/*\" element={gated('vibecontrols.vibes', <VibeDocsPage />)} />\n <Route path=\"notes/:id\" element={gated('vibecontrols.vibes', <NoteDetailsPage />)} />\n <Route\n path=\"sessions/:id\"\n element={gated('vibecontrols.sessions', <SessionDetailsPage />)}\n />\n {/* Agent Manager — multi-session tabbed UI (replaces old AI page) */}\n <Route path=\"ai\" element={gated('vibecontrols.ai', <AgentManagerPage />)} />\n <Route path=\"ai/:tab\" element={gated('vibecontrols.ai', <AgentManagerPage />)} />\n <Route\n path=\"ai/sessions/:sessionId\"\n element={gated('vibecontrols.ai', <AgentManagerPage />)}\n />\n {/* AI Tools — templates, contexts, prompts, stats, playground */}\n <Route path=\"ai-tools\" element={gated('vibecontrols.ai', <AIPage />)} />\n <Route path=\"ai-tools/:tab\" element={gated('vibecontrols.ai', <AIPage />)} />\n <Route\n path=\"ai-tools/sessions/:sessionId\"\n element={gated('vibecontrols.ai', <AISessionDetailPage />)}\n />\n\n {/* Targets list lives in the Targets & Agents landing; per-target\n detail is its own page (mirrors agents/:id). */}\n <Route path=\"targets\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"targets/:id\" element={gated('vibecontrols.agents', <TargetDetailsPage />)} />\n {/* Agent Graph is also a tab inside the Targets & Agents landing. */}\n <Route path=\"agent-graph\" element={<Navigate to=\"../agents?tab=graph\" replace />} />\n\n {/* Catalog */}\n <Route path=\"catalogs\" element={gated('vibecontrols.catalogs', <CatalogPage />)} />\n <Route\n path=\"catalogs/:id\"\n element={gated('vibecontrols.catalogs', <CatalogDetailPage />)}\n />\n <Route\n path=\"catalogs/:id/docs/*\"\n element={gated('vibecontrols.catalogs', <CatalogDocsPage />)}\n />\n <Route path=\"components\" element={gated('vibecontrols.components', <ComponentsPage />)} />\n <Route\n path=\"components/:id\"\n element={gated('vibecontrols.components', <ComponentDetailPage />)}\n />\n <Route\n path=\"components/:id/docs/*\"\n element={gated('vibecontrols.components', <ComponentDocsPage />)}\n />\n <Route path=\"templates\" element={gated('vibecontrols.templates', <TemplatesPage />)} />\n <Route\n path=\"templates/:id\"\n element={gated('vibecontrols.templates', <TemplateDetailPage />)}\n />\n\n {/* Automation */}\n <Route path=\"actions\" element={gated('vibecontrols.actions', <ActionsPage />)} />\n <Route path=\"vibedeck\" element={gated('vibecontrols.vibedeck', <VibeDeckPage />)} />\n <Route path=\"calendar\" element={gated('vibecontrols.calendar', <VibeCalendarPage />)} />\n <Route\n path=\"calendar/:viewType\"\n element={gated('vibecontrols.calendar', <VibeCalendarPage />)}\n />\n <Route\n path=\"calendar/task/:taskId\"\n element={gated('vibecontrols.calendar', <VibeTaskDetailPage />)}\n />\n <Route path=\"webhooks\" element={<Navigate to=\"/devportal/webhooks\" replace />} />\n <Route path=\"webhooks/new\" element={<Navigate to=\"/devportal/webhooks/new\" replace />} />\n <Route path=\"webhooks/:id\" element={<Navigate to=\"/devportal/webhooks\" replace />} />\n {/* GitOps consolidated into Vibe detail tab — old /gitops routes redirect to vibes list. */}\n <Route path=\"gitops\" element={<Navigate to=\"../vibes\" replace />} />\n <Route path=\"gitops/:tab\" element={<Navigate to=\"../vibes\" replace />} />\n\n {/* Infrastructure */}\n <Route path=\"tunnels\" element={gated('vibecontrols.tunnels', <TunnelsLandingPage />)} />\n <Route path=\"tunnels/new\" element={gated('vibecontrols.tunnels', <TunnelCreateWizard />)} />\n <Route\n path=\"tunnels/:tunnelId\"\n element={gated('vibecontrols.tunnels', <TunnelDetailsPage />)}\n />\n\n {/* Insights */}\n <Route path=\"health\" element={gated('vibecontrols.health', <HealthPage />)} />\n <Route path=\"analytics\" element={gated('vibecontrols.analytics', <AnalyticsPage />)} />\n <Route path=\"audit\" element={gated('vibecontrols.audit-log', <VibeAuditPage />, false)} />\n <Route path=\"logs\" element={<Navigate to=\"/vibecontrols/agents\" replace />} />\n\n {/* Settings */}\n <Route path=\"settings\" element={gated('vibecontrols.settings', <SettingsPage />)} />\n\n {/* Setup */}\n {/* Not gated — onboarding flow must always be reachable */}\n <Route path=\"getting-started\" element={<GettingStartedPage />} />\n\n {/* Shared public routes (no gating — accessible via public links) */}\n <Route path=\"share/:token\" element={<SharedSessionPage />} />\n <Route path=\"deck/:token\" element={<SharedVibeDeckPage />} />\n\n {/* Legacy redirects */}\n <Route path=\"access\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"ssh-targets\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"ssh-terminals\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n\n {/* Catch-all route - redirect to overview */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VibeControlsRoutes.js","names":[],"sources":["../src/VibeControlsRoutes.tsx"],"sourcesContent":["import React, { Suspense, useEffect } from 'react';\nimport { Navigate, Route, Routes, useLocation, useParams } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useTr } from './shared/hooks/useTr';\n\n// Lazy load - All pages (required for @/ alias resolution when consumed by host app)\nconst OverviewPage = React.lazy(() =>\n import('./pages/OverviewPage').then((m) => ({ default: m.OverviewPage }))\n);\n\n// Other pages\nconst AgentsLandingPage = React.lazy(() =>\n import('./pages/AgentsLandingPage').then((m) => ({ default: m.AgentsLandingPage }))\n);\nconst AgentDetailsPage = React.lazy(() =>\n import('./pages/AgentDetailsPage').then((m) => ({ default: m.AgentDetailsPage }))\n);\nconst TargetDetailsPage = React.lazy(() =>\n import('./pages/TargetDetailsPage').then((m) => ({ default: m.TargetDetailsPage }))\n);\nconst SessionsPage = React.lazy(() =>\n import('./pages/SessionsPage').then((m) => ({ default: m.SessionsPage }))\n);\nconst SessionDetailsPage = React.lazy(() =>\n import('./pages/SessionDetailsPage').then((m) => ({ default: m.SessionDetailsPage }))\n);\nconst VibesPage = React.lazy(() =>\n import('./pages/VibesPage').then((m) => ({ default: m.VibesPage }))\n);\nconst VibeDetailsPage = React.lazy(() =>\n import('./pages/VibeDetailsPage').then((m) => ({ default: m.VibeDetailsPage }))\n);\nconst NoteDetailsPage = React.lazy(() =>\n import('./pages/NoteDetailsPage').then((m) => ({ default: m.NoteDetailsPage }))\n);\nconst TunnelsLandingPage = React.lazy(() =>\n import('./pages/TunnelsLandingPage').then((m) => ({ default: m.TunnelsLandingPage }))\n);\nconst TunnelDetailsPage = React.lazy(() =>\n import('./pages/tunnels/TunnelDetailsPage').then((m) => ({ default: m.TunnelDetailsPage }))\n);\nconst TunnelCreateWizard = React.lazy(() =>\n import('./components/tunnels/TunnelCreateWizard').then((m) => ({ default: m.TunnelCreateWizard }))\n);\nconst SettingsPage = React.lazy(() =>\n import('./pages/SettingsPage').then((m) => ({ default: m.SettingsPage }))\n);\nconst HealthPage = React.lazy(() =>\n import('./pages/HealthPage').then((m) => ({ default: m.HealthPage }))\n);\nconst GettingStartedPage = React.lazy(() =>\n import('./pages/GettingStartedPage').then((m) => ({ default: m.GettingStartedPage }))\n);\nconst SharedSessionPage = React.lazy(() =>\n import('./pages/SharedSessionPage').then((m) => ({ default: m.SharedSessionPage }))\n);\nconst VibeDeckPage = React.lazy(() =>\n import('./pages/VibeDeckPage').then((m) => ({ default: m.VibeDeckPage }))\n);\nconst SharedVibeDeckPage = React.lazy(() =>\n import('./pages/SharedVibeDeckPage').then((m) => ({ default: m.SharedVibeDeckPage }))\n);\nconst VibeCalendarPage = React.lazy(() =>\n import('./pages/VibeCalendarPage').then((m) => ({ default: m.VibeCalendarPage }))\n);\nconst VibeTaskDetailPage = React.lazy(() =>\n import('./pages/VibeTaskDetailPage').then((m) => ({ default: m.VibeTaskDetailPage }))\n);\nconst ActionsPage = React.lazy(() =>\n import('./pages/ActionsPage').then((m) => ({ default: m.ActionsPage }))\n);\nconst VibeAuditPage = React.lazy(() =>\n import('./pages/VibeAuditPage').then((m) => ({ default: m.VibeAuditPage }))\n);\nconst AnalyticsPage = React.lazy(() =>\n import('./pages/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst VibeDocsPage = React.lazy(() =>\n import('./pages/VibeDocsPage').then((m) => ({ default: m.VibeDocsPage }))\n);\nconst LogsPage = React.lazy(() =>\n import('./pages/LogsPage').then((m) => ({ default: m.LogsPage }))\n);\n\n// Catalog, Components, Templates pages\nconst CatalogPage = React.lazy(() =>\n import('./pages/CatalogPage').then((m) => ({ default: m.CatalogPage }))\n);\nconst CatalogDetailPage = React.lazy(() =>\n import('./pages/CatalogDetailPage').then((m) => ({ default: m.CatalogDetailPage }))\n);\nconst CatalogDocsPage = React.lazy(() =>\n import('./pages/CatalogDocsPage').then((m) => ({ default: m.CatalogDocsPage }))\n);\nconst ComponentsPage = React.lazy(() =>\n import('./pages/ComponentsPage').then((m) => ({ default: m.ComponentsPage }))\n);\nconst ComponentDetailPage = React.lazy(() =>\n import('./pages/ComponentDetailPage').then((m) => ({ default: m.ComponentDetailPage }))\n);\nconst ComponentDocsPage = React.lazy(() =>\n import('./pages/ComponentDocsPage').then((m) => ({ default: m.ComponentDocsPage }))\n);\nconst TemplatesPage = React.lazy(() =>\n import('./pages/TemplatesPage').then((m) => ({ default: m.TemplatesPage }))\n);\nconst TemplateDetailPage = React.lazy(() =>\n import('./pages/TemplateDetailPage').then((m) => ({ default: m.TemplateDetailPage }))\n);\nconst PluginStandalonePage = React.lazy(() =>\n import('./pages/PluginStandalonePage').then((m) => ({ default: m.PluginStandalonePage }))\n);\n\n// AI pages\nconst AIPage = React.lazy(() => import('./pages/ai/AIPage').then((m) => ({ default: m.AIPage })));\nconst AISessionDetailPage = React.lazy(() =>\n import('./pages/ai/AISessionDetailPage').then((m) => ({ default: m.AISessionDetailPage }))\n);\nconst AgentManagerPage = React.lazy(() =>\n import('./pages/ai/AgentManagerPage').then((m) => ({ default: m.AgentManagerPage }))\n);\nconst AIBookmarksPage = React.lazy(() =>\n import('./pages/ai/AIBookmarksPage').then((m) => ({ default: m.AIBookmarksPage }))\n);\n\n// Loading fallback component\nfunction PageLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center h-full min-h-[200px]\">\n <div className=\"animate-pulse bg-muted rounded w-full h-full\" />\n </div>\n );\n}\n\n/**\n * Internal router for the VibeControls microfrontend.\n * This component handles routing within the microfrontend using React Router v7.\n *\n * Routes:\n * - / → Overview page (dashboard)\n * - /agents → Agents management page\n * - /agents/:id → Agent details page\n * - /sessions → Sessions management page\n * - /sessions/:id → Session details page\n * - /vibes → Vibes (projects) management page\n * - /vibes/:id → Vibe details page (includes Notes tab)\n * - /settings → Settings page\n * - /webhooks → Legacy redirect to Developer Portal webhooks\n * - /health → Health monitoring page\n * - /* → Catch-all redirects to overview\n */\nfunction ScrollToTop() {\n const { pathname } = useLocation();\n useEffect(() => {\n // The scrollable container is the <main> element with overflow-auto\n // inside AppShellLayout, not the window itself.\n const main = document.querySelector('main');\n if (main) main.scrollTop = 0;\n }, [pathname]);\n return null;\n}\n\n/**\n * Legacy redirect: /ai-tools/<tab> → /ai-tools/ai/<tab>.\n *\n * Before the Plan / AI mode toggle the page was reachable directly at\n * /ai-tools/<tab>. New shape is /ai-tools/<mode>/<tab>. We keep the\n * legacy links working by mapping the captured `:tab` param: if it\n * resolves to a known AI sub-tab, redirect there; if it's literally\n * \"plan\", route to the Plan page; otherwise fall back to AI overview.\n */\nconst VALID_AI_TABS = new Set<string>([\n 'overview',\n 'templates',\n 'contexts',\n 'prompts',\n 'sessions',\n 'tasks',\n 'stats',\n 'playground',\n 'config',\n]);\n\nfunction LegacyAIToolsRedirect() {\n const { tab } = useParams<{ tab?: string }>();\n if (tab === 'plan') {\n return <Navigate to=\"/vibecontrols/ai-tools/plan\" replace />;\n }\n if (tab && VALID_AI_TABS.has(tab)) {\n return <Navigate to={`/vibecontrols/ai-tools/ai/${tab}`} replace />;\n }\n return <Navigate to=\"/vibecontrols/ai-tools/ai/overview\" replace />;\n}\n\n/**\n * Fallback shown when a feature flag is OFF.\n */\nfunction FeatureDisabledFallback() {\n const tr = useTr();\n return (\n <div className=\"flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm\">\n {tr(\n 'vibecontrols.pages.featureDisabled',\n 'This feature is currently disabled. You can enable it from Feature Previews.'\n )}\n </div>\n );\n}\n\n/**\n * Helper: wraps a page element in a FeatureGate.\n * defaultValue={true} means the feature shows by default (before flags are seeded).\n * Only hides when a flag is explicitly set to false.\n */\nfunction gated(flag: string, element: React.ReactNode, defaultValue = true): React.ReactElement {\n return (\n <FeatureGate flag={flag} defaultValue={defaultValue} fallback={<FeatureDisabledFallback />}>\n {element}\n </FeatureGate>\n );\n}\n\nexport function VibeControlsRoutes() {\n return (\n <Suspense fallback={<PageLoadingFallback />}>\n <ScrollToTop />\n <Routes>\n {/* Default route - overview page */}\n <Route index element={gated('vibecontrols.overview', <OverviewPage />)} />\n\n {/* Core pages */}\n {/* PR-9 standalone plugin route — deep-link any contribution\n from any mount point as a full-page view. Wrapped in the\n same `gated()` envelope as every other authenticated route\n for consistent authz; the page-level\n `vibes.tabs.iframe-host` feature flag still gates rendering\n once the user is past the entitlement check. */}\n <Route\n path=\"plugin/:pluginKey\"\n element={gated('vibecontrols.vibes', <PluginStandalonePage />)}\n />\n\n <Route path=\"agents\" element={gated('vibecontrols.agents', <AgentsLandingPage />)} />\n <Route path=\"agents/:id\" element={gated('vibecontrols.agents', <AgentDetailsPage />)} />\n <Route path=\"sessions\" element={gated('vibecontrols.sessions', <SessionsPage />)} />\n <Route path=\"vibes\" element={gated('vibecontrols.vibes', <VibesPage />)} />\n <Route path=\"vibes/:id\" element={gated('vibecontrols.vibes', <VibeDetailsPage />)} />\n <Route path=\"vibes/:id/docs/*\" element={gated('vibecontrols.vibes', <VibeDocsPage />)} />\n <Route path=\"notes/:id\" element={gated('vibecontrols.vibes', <NoteDetailsPage />)} />\n <Route\n path=\"sessions/:id\"\n element={gated('vibecontrols.sessions', <SessionDetailsPage />)}\n />\n {/* Agent Manager — multi-session tabbed UI (replaces old AI page) */}\n <Route path=\"ai\" element={gated('vibecontrols.ai', <AgentManagerPage />)} />\n {/* Saved messages — listed BEFORE ai/:tab so \"bookmarks\" is not consumed as a tab. */}\n <Route path=\"ai/bookmarks\" element={gated('vibecontrols.ai', <AIBookmarksPage />)} />\n <Route path=\"ai/:tab\" element={gated('vibecontrols.ai', <AgentManagerPage />)} />\n <Route\n path=\"ai/sessions/:sessionId\"\n element={gated('vibecontrols.ai', <AgentManagerPage />)}\n />\n {/* AI Tools — Plan / AI modes:\n /ai-tools → /ai-tools/ai/overview (redirect)\n /ai-tools/plan → Plan mode (plannotator iframe)\n /ai-tools/ai → /ai-tools/ai/overview (redirect)\n /ai-tools/ai/:tab → AI mode with active sub-tab\n Legacy /ai-tools/<tab> URLs from before the Plan mode rollout\n redirect into the new shape via LegacyAIToolsRedirect. */}\n <Route path=\"ai-tools\" element={<Navigate to=\"ai/overview\" replace />} />\n <Route path=\"ai-tools/plan\" element={gated('vibecontrols.ai', <AIPage />)} />\n <Route path=\"ai-tools/ai\" element={<Navigate to=\"overview\" replace />} />\n <Route path=\"ai-tools/ai/:tab\" element={gated('vibecontrols.ai', <AIPage />)} />\n <Route path=\"ai-tools/:tab\" element={<LegacyAIToolsRedirect />} />\n <Route\n path=\"ai-tools/sessions/:sessionId\"\n element={gated('vibecontrols.ai', <AISessionDetailPage />)}\n />\n\n {/* Targets list lives in the Targets & Agents landing; per-target\n detail is its own page (mirrors agents/:id). */}\n <Route path=\"targets\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"targets/:id\" element={gated('vibecontrols.agents', <TargetDetailsPage />)} />\n {/* Agent Graph is also a tab inside the Targets & Agents landing. */}\n <Route path=\"agent-graph\" element={<Navigate to=\"../agents?tab=graph\" replace />} />\n\n {/* Catalog */}\n <Route path=\"catalogs\" element={gated('vibecontrols.catalogs', <CatalogPage />)} />\n <Route\n path=\"catalogs/:id\"\n element={gated('vibecontrols.catalogs', <CatalogDetailPage />)}\n />\n <Route\n path=\"catalogs/:id/docs/*\"\n element={gated('vibecontrols.catalogs', <CatalogDocsPage />)}\n />\n <Route path=\"components\" element={gated('vibecontrols.components', <ComponentsPage />)} />\n <Route\n path=\"components/:id\"\n element={gated('vibecontrols.components', <ComponentDetailPage />)}\n />\n <Route\n path=\"components/:id/docs/*\"\n element={gated('vibecontrols.components', <ComponentDocsPage />)}\n />\n <Route path=\"templates\" element={gated('vibecontrols.templates', <TemplatesPage />)} />\n <Route\n path=\"templates/:id\"\n element={gated('vibecontrols.templates', <TemplateDetailPage />)}\n />\n\n {/* Automation */}\n <Route path=\"actions\" element={gated('vibecontrols.actions', <ActionsPage />)} />\n <Route path=\"vibedeck\" element={gated('vibecontrols.vibedeck', <VibeDeckPage />)} />\n <Route path=\"calendar\" element={gated('vibecontrols.calendar', <VibeCalendarPage />)} />\n <Route\n path=\"calendar/:viewType\"\n element={gated('vibecontrols.calendar', <VibeCalendarPage />)}\n />\n <Route\n path=\"calendar/task/:taskId\"\n element={gated('vibecontrols.calendar', <VibeTaskDetailPage />)}\n />\n <Route path=\"webhooks\" element={<Navigate to=\"/devportal/webhooks\" replace />} />\n <Route path=\"webhooks/new\" element={<Navigate to=\"/devportal/webhooks/new\" replace />} />\n <Route path=\"webhooks/:id\" element={<Navigate to=\"/devportal/webhooks\" replace />} />\n {/* GitOps consolidated into Vibe detail tab — old /gitops routes redirect to vibes list. */}\n <Route path=\"gitops\" element={<Navigate to=\"../vibes\" replace />} />\n <Route path=\"gitops/:tab\" element={<Navigate to=\"../vibes\" replace />} />\n\n {/* Infrastructure */}\n <Route path=\"tunnels\" element={gated('vibecontrols.tunnels', <TunnelsLandingPage />)} />\n <Route path=\"tunnels/new\" element={gated('vibecontrols.tunnels', <TunnelCreateWizard />)} />\n <Route\n path=\"tunnels/:tunnelId\"\n element={gated('vibecontrols.tunnels', <TunnelDetailsPage />)}\n />\n\n {/* Insights */}\n <Route path=\"health\" element={gated('vibecontrols.health', <HealthPage />)} />\n <Route path=\"analytics\" element={gated('vibecontrols.analytics', <AnalyticsPage />)} />\n <Route path=\"audit\" element={gated('vibecontrols.audit-log', <VibeAuditPage />, false)} />\n <Route path=\"logs\" element={gated('vibecontrols.agents', <LogsPage />)} />\n\n {/* Settings */}\n <Route path=\"settings\" element={gated('vibecontrols.settings', <SettingsPage />)} />\n\n {/* Setup */}\n {/* Not gated — onboarding flow must always be reachable */}\n <Route path=\"getting-started\" element={<GettingStartedPage />} />\n\n {/* Shared public routes (no gating — accessible via public links) */}\n <Route path=\"share/:token\" element={<SharedSessionPage />} />\n <Route path=\"deck/:token\" element={<SharedVibeDeckPage />} />\n\n {/* Legacy redirects */}\n <Route path=\"access\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"ssh-targets\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n <Route path=\"ssh-terminals\" element={<Navigate to=\"../agents?tab=targets\" replace />} />\n\n {/* Catch-all route - redirect to overview */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}