@burdenoff/microfe-vibecontrols 2026.521.1 → 2026.521.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/VibeControlsRoutes.js +50 -46
- package/dist/VibeControlsRoutes.js.map +1 -1
- package/dist/components/gitops/VibeGitOpsTab.js +33 -33
- package/dist/components/plugins/AddTabDialog.js +224 -0
- package/dist/components/plugins/AddTabDialog.js.map +1 -0
- package/dist/components/plugins/PluginIframeMount.js +134 -0
- package/dist/components/plugins/PluginIframeMount.js.map +1 -0
- package/dist/pages/AgentDetailsPage.js +830 -730
- package/dist/pages/AgentDetailsPage.js.map +1 -1
- package/dist/pages/PluginStandalonePage.js +145 -0
- package/dist/pages/PluginStandalonePage.js.map +1 -0
- package/dist/pages/VibeDetailsPage.js +677 -579
- package/dist/pages/VibeDetailsPage.js.map +1 -1
- package/dist/services/iframeToken.js +10 -3
- package/dist/services/iframeToken.js.map +1 -1
- package/dist/store/vibeControlsStore.js +35 -2
- package/dist/store/vibeControlsStore.js.map +1 -1
- package/package.json +2 -2
|
@@ -4,97 +4,101 @@ import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-
|
|
|
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/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/ai/AIPage.js").then((e) => ({ default: e.AIPage }))),
|
|
8
|
-
function
|
|
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
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
|
|
14
|
+
function J() {
|
|
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
|
|
21
|
+
function Y() {
|
|
22
22
|
return /* @__PURE__ */ c("div", {
|
|
23
23
|
className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
|
|
24
24
|
children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
function
|
|
27
|
+
function X(e, t, n = !0) {
|
|
28
28
|
return /* @__PURE__ */ c(u, {
|
|
29
29
|
flag: e,
|
|
30
30
|
defaultValue: n,
|
|
31
|
-
fallback: /* @__PURE__ */ c(
|
|
31
|
+
fallback: /* @__PURE__ */ c(Y, {}),
|
|
32
32
|
children: t
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
|
-
function
|
|
35
|
+
function Z() {
|
|
36
36
|
return /* @__PURE__ */ l(n, {
|
|
37
|
-
fallback: /* @__PURE__ */ c(
|
|
38
|
-
children: [/* @__PURE__ */ c(
|
|
37
|
+
fallback: /* @__PURE__ */ c(q, {}),
|
|
38
|
+
children: [/* @__PURE__ */ c(J, {}), /* @__PURE__ */ l(o, { children: [
|
|
39
39
|
/* @__PURE__ */ c(a, {
|
|
40
40
|
index: !0,
|
|
41
|
-
element:
|
|
41
|
+
element: X("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ c(a, {
|
|
44
|
+
path: "plugin/:pluginKey",
|
|
45
|
+
element: X("vibecontrols.vibes", /* @__PURE__ */ c(U, {}))
|
|
42
46
|
}),
|
|
43
47
|
/* @__PURE__ */ c(a, {
|
|
44
48
|
path: "agents",
|
|
45
|
-
element:
|
|
49
|
+
element: X("vibecontrols.agents", /* @__PURE__ */ c(f, {}))
|
|
46
50
|
}),
|
|
47
51
|
/* @__PURE__ */ c(a, {
|
|
48
52
|
path: "agents/:id",
|
|
49
|
-
element:
|
|
53
|
+
element: X("vibecontrols.agents", /* @__PURE__ */ c(p, {}))
|
|
50
54
|
}),
|
|
51
55
|
/* @__PURE__ */ c(a, {
|
|
52
56
|
path: "sessions",
|
|
53
|
-
element:
|
|
57
|
+
element: X("vibecontrols.sessions", /* @__PURE__ */ c(h, {}))
|
|
54
58
|
}),
|
|
55
59
|
/* @__PURE__ */ c(a, {
|
|
56
60
|
path: "vibes",
|
|
57
|
-
element:
|
|
61
|
+
element: X("vibecontrols.vibes", /* @__PURE__ */ c(_, {}))
|
|
58
62
|
}),
|
|
59
63
|
/* @__PURE__ */ c(a, {
|
|
60
64
|
path: "vibes/:id",
|
|
61
|
-
element:
|
|
65
|
+
element: X("vibecontrols.vibes", /* @__PURE__ */ c(v, {}))
|
|
62
66
|
}),
|
|
63
67
|
/* @__PURE__ */ c(a, {
|
|
64
68
|
path: "vibes/:id/docs/*",
|
|
65
|
-
element:
|
|
69
|
+
element: X("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
|
|
66
70
|
}),
|
|
67
71
|
/* @__PURE__ */ c(a, {
|
|
68
72
|
path: "notes/:id",
|
|
69
|
-
element:
|
|
73
|
+
element: X("vibecontrols.vibes", /* @__PURE__ */ c(y, {}))
|
|
70
74
|
}),
|
|
71
75
|
/* @__PURE__ */ c(a, {
|
|
72
76
|
path: "sessions/:id",
|
|
73
|
-
element:
|
|
77
|
+
element: X("vibecontrols.sessions", /* @__PURE__ */ c(g, {}))
|
|
74
78
|
}),
|
|
75
79
|
/* @__PURE__ */ c(a, {
|
|
76
80
|
path: "ai",
|
|
77
|
-
element:
|
|
81
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
|
|
78
82
|
}),
|
|
79
83
|
/* @__PURE__ */ c(a, {
|
|
80
84
|
path: "ai/:tab",
|
|
81
|
-
element:
|
|
85
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
|
|
82
86
|
}),
|
|
83
87
|
/* @__PURE__ */ c(a, {
|
|
84
88
|
path: "ai/sessions/:sessionId",
|
|
85
|
-
element:
|
|
89
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
|
|
86
90
|
}),
|
|
87
91
|
/* @__PURE__ */ c(a, {
|
|
88
92
|
path: "ai-tools",
|
|
89
|
-
element:
|
|
93
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
|
|
90
94
|
}),
|
|
91
95
|
/* @__PURE__ */ c(a, {
|
|
92
96
|
path: "ai-tools/:tab",
|
|
93
|
-
element:
|
|
97
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(W, {}))
|
|
94
98
|
}),
|
|
95
99
|
/* @__PURE__ */ c(a, {
|
|
96
100
|
path: "ai-tools/sessions/:sessionId",
|
|
97
|
-
element:
|
|
101
|
+
element: X("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
|
|
98
102
|
}),
|
|
99
103
|
/* @__PURE__ */ c(a, {
|
|
100
104
|
path: "targets",
|
|
@@ -105,7 +109,7 @@ function X() {
|
|
|
105
109
|
}),
|
|
106
110
|
/* @__PURE__ */ c(a, {
|
|
107
111
|
path: "targets/:id",
|
|
108
|
-
element:
|
|
112
|
+
element: X("vibecontrols.agents", /* @__PURE__ */ c(m, {}))
|
|
109
113
|
}),
|
|
110
114
|
/* @__PURE__ */ c(a, {
|
|
111
115
|
path: "agent-graph",
|
|
@@ -116,55 +120,55 @@ function X() {
|
|
|
116
120
|
}),
|
|
117
121
|
/* @__PURE__ */ c(a, {
|
|
118
122
|
path: "catalogs",
|
|
119
|
-
element:
|
|
123
|
+
element: X("vibecontrols.catalogs", /* @__PURE__ */ c(F, {}))
|
|
120
124
|
}),
|
|
121
125
|
/* @__PURE__ */ c(a, {
|
|
122
126
|
path: "catalogs/:id",
|
|
123
|
-
element:
|
|
127
|
+
element: X("vibecontrols.catalogs", /* @__PURE__ */ c(I, {}))
|
|
124
128
|
}),
|
|
125
129
|
/* @__PURE__ */ c(a, {
|
|
126
130
|
path: "catalogs/:id/docs/*",
|
|
127
|
-
element:
|
|
131
|
+
element: X("vibecontrols.catalogs", /* @__PURE__ */ c(L, {}))
|
|
128
132
|
}),
|
|
129
133
|
/* @__PURE__ */ c(a, {
|
|
130
134
|
path: "components",
|
|
131
|
-
element:
|
|
135
|
+
element: X("vibecontrols.components", /* @__PURE__ */ c(R, {}))
|
|
132
136
|
}),
|
|
133
137
|
/* @__PURE__ */ c(a, {
|
|
134
138
|
path: "components/:id",
|
|
135
|
-
element:
|
|
139
|
+
element: X("vibecontrols.components", /* @__PURE__ */ c(z, {}))
|
|
136
140
|
}),
|
|
137
141
|
/* @__PURE__ */ c(a, {
|
|
138
142
|
path: "components/:id/docs/*",
|
|
139
|
-
element:
|
|
143
|
+
element: X("vibecontrols.components", /* @__PURE__ */ c(B, {}))
|
|
140
144
|
}),
|
|
141
145
|
/* @__PURE__ */ c(a, {
|
|
142
146
|
path: "templates",
|
|
143
|
-
element:
|
|
147
|
+
element: X("vibecontrols.templates", /* @__PURE__ */ c(V, {}))
|
|
144
148
|
}),
|
|
145
149
|
/* @__PURE__ */ c(a, {
|
|
146
150
|
path: "templates/:id",
|
|
147
|
-
element:
|
|
151
|
+
element: X("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
|
|
148
152
|
}),
|
|
149
153
|
/* @__PURE__ */ c(a, {
|
|
150
154
|
path: "actions",
|
|
151
|
-
element:
|
|
155
|
+
element: X("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
|
|
152
156
|
}),
|
|
153
157
|
/* @__PURE__ */ c(a, {
|
|
154
158
|
path: "vibedeck",
|
|
155
|
-
element:
|
|
159
|
+
element: X("vibecontrols.vibedeck", /* @__PURE__ */ c(D, {}))
|
|
156
160
|
}),
|
|
157
161
|
/* @__PURE__ */ c(a, {
|
|
158
162
|
path: "calendar",
|
|
159
|
-
element:
|
|
163
|
+
element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
|
|
160
164
|
}),
|
|
161
165
|
/* @__PURE__ */ c(a, {
|
|
162
166
|
path: "calendar/:viewType",
|
|
163
|
-
element:
|
|
167
|
+
element: X("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
|
|
164
168
|
}),
|
|
165
169
|
/* @__PURE__ */ c(a, {
|
|
166
170
|
path: "calendar/task/:taskId",
|
|
167
|
-
element:
|
|
171
|
+
element: X("vibecontrols.calendar", /* @__PURE__ */ c(A, {}))
|
|
168
172
|
}),
|
|
169
173
|
/* @__PURE__ */ c(a, {
|
|
170
174
|
path: "webhooks",
|
|
@@ -203,27 +207,27 @@ function X() {
|
|
|
203
207
|
}),
|
|
204
208
|
/* @__PURE__ */ c(a, {
|
|
205
209
|
path: "tunnels",
|
|
206
|
-
element:
|
|
210
|
+
element: X("vibecontrols.tunnels", /* @__PURE__ */ c(b, {}))
|
|
207
211
|
}),
|
|
208
212
|
/* @__PURE__ */ c(a, {
|
|
209
213
|
path: "tunnels/new",
|
|
210
|
-
element:
|
|
214
|
+
element: X("vibecontrols.tunnels", /* @__PURE__ */ c(S, {}))
|
|
211
215
|
}),
|
|
212
216
|
/* @__PURE__ */ c(a, {
|
|
213
217
|
path: "tunnels/:tunnelId",
|
|
214
|
-
element:
|
|
218
|
+
element: X("vibecontrols.tunnels", /* @__PURE__ */ c(x, {}))
|
|
215
219
|
}),
|
|
216
220
|
/* @__PURE__ */ c(a, {
|
|
217
221
|
path: "health",
|
|
218
|
-
element:
|
|
222
|
+
element: X("vibecontrols.health", /* @__PURE__ */ c(w, {}))
|
|
219
223
|
}),
|
|
220
224
|
/* @__PURE__ */ c(a, {
|
|
221
225
|
path: "analytics",
|
|
222
|
-
element:
|
|
226
|
+
element: X("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
|
|
223
227
|
}),
|
|
224
228
|
/* @__PURE__ */ c(a, {
|
|
225
229
|
path: "audit",
|
|
226
|
-
element:
|
|
230
|
+
element: X("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
|
|
227
231
|
}),
|
|
228
232
|
/* @__PURE__ */ c(a, {
|
|
229
233
|
path: "logs",
|
|
@@ -234,7 +238,7 @@ function X() {
|
|
|
234
238
|
}),
|
|
235
239
|
/* @__PURE__ */ c(a, {
|
|
236
240
|
path: "settings",
|
|
237
|
-
element:
|
|
241
|
+
element: X("vibecontrols.settings", /* @__PURE__ */ c(C, {}))
|
|
238
242
|
}),
|
|
239
243
|
/* @__PURE__ */ c(a, {
|
|
240
244
|
path: "getting-started",
|
|
@@ -280,6 +284,6 @@ function X() {
|
|
|
280
284
|
});
|
|
281
285
|
}
|
|
282
286
|
//#endregion
|
|
283
|
-
export {
|
|
287
|
+
export { Z as VibeControlsRoutes };
|
|
284
288
|
|
|
285
289
|
//# 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);\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 <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 } 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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"}
|
|
@@ -3,44 +3,44 @@ import { useVibeControls as a } from "../../providers/VibeControlsProvider.js";
|
|
|
3
3
|
import "../../constants/pluginCatalog.js";
|
|
4
4
|
import { PluginGate as o } from "../shared/PluginGate.js";
|
|
5
5
|
import "../shared/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { appendIframeTokenParam as s, mintIframeToken as c, scheduleIframeTokenRefresh as l } from "../../services/iframeToken.js";
|
|
7
|
+
import { RepoStatsTab as u } from "./RepoStatsTab.js";
|
|
8
|
+
import { CITab as d } from "./CITab.js";
|
|
9
|
+
import { GitOpsSetup as f } from "./GitOpsSetup.js";
|
|
10
10
|
import { useCallback as p, useEffect as m, useState as h } from "react";
|
|
11
11
|
import { BarChart3 as g, GitBranch as _, GitMerge as v, Play as y, RefreshCw as b } from "lucide-react";
|
|
12
12
|
import { motion as x } from "framer-motion";
|
|
13
13
|
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
14
14
|
//#region src/components/gitops/VibeGitOpsTab.tsx
|
|
15
|
-
var T = ({ vibeId:
|
|
15
|
+
var T = ({ vibeId: s, agentId: c, profile: l, tunnelUrl: p, apiKey: m, tr: T }) => {
|
|
16
16
|
let [D, O] = h("repo-stats"), [k, A] = h(!1), { workspaceId: j } = a(), { data: M, loading: N, refetch: P } = n({
|
|
17
17
|
variables: {
|
|
18
|
-
filter: { vibeId:
|
|
18
|
+
filter: { vibeId: s },
|
|
19
19
|
pagination: { limit: 50 }
|
|
20
20
|
},
|
|
21
21
|
fetchPolicy: "cache-and-network"
|
|
22
22
|
}), F = M?.listGitopsProviders?.items ?? [], I = F.find((e) => e.isActive)?.id || F[0]?.id || "", { data: L, loading: R, error: z } = t({
|
|
23
23
|
variables: {
|
|
24
24
|
providerId: I,
|
|
25
|
-
agentId:
|
|
25
|
+
agentId: c
|
|
26
26
|
},
|
|
27
|
-
skip: !I || !
|
|
27
|
+
skip: !I || !c || D !== "repo-stats",
|
|
28
28
|
fetchPolicy: "cache-and-network"
|
|
29
29
|
}), { data: B, loading: V, error: H } = e({
|
|
30
30
|
variables: {
|
|
31
31
|
providerId: I,
|
|
32
|
-
agentId:
|
|
32
|
+
agentId: c,
|
|
33
33
|
limit: 30
|
|
34
34
|
},
|
|
35
|
-
skip: !I || !
|
|
35
|
+
skip: !I || !c || D !== "ci",
|
|
36
36
|
fetchPolicy: "cache-and-network"
|
|
37
37
|
}), [U, { loading: W }] = i(), [G, { loading: K }] = r(), q = async () => {
|
|
38
|
-
!I || !
|
|
38
|
+
!I || !c || (D === "repo-stats" ? await U({ variables: {
|
|
39
39
|
providerId: I,
|
|
40
|
-
agentId:
|
|
40
|
+
agentId: c
|
|
41
41
|
} }) : D === "ci" && await G({ variables: {
|
|
42
42
|
providerId: I,
|
|
43
|
-
agentId:
|
|
43
|
+
agentId: c
|
|
44
44
|
} }));
|
|
45
45
|
}, J = W || K, Y = F.length > 0, X = [
|
|
46
46
|
{
|
|
@@ -84,7 +84,7 @@ var T = ({ vibeId: u, agentId: d, profile: f, tunnelUrl: p, apiKey: m, tr: T })
|
|
|
84
84
|
})]
|
|
85
85
|
}), /* @__PURE__ */ w("div", {
|
|
86
86
|
className: "flex items-center gap-2",
|
|
87
|
-
children: [Y &&
|
|
87
|
+
children: [Y && c && (D === "repo-stats" || D === "ci") && /* @__PURE__ */ w("button", {
|
|
88
88
|
onClick: q,
|
|
89
89
|
disabled: J,
|
|
90
90
|
className: "flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md border border-border-default text-text-secondary hover:text-text-primary hover:border-border-strong disabled:opacity-50 transition-colors",
|
|
@@ -117,17 +117,17 @@ var T = ({ vibeId: u, agentId: d, profile: f, tunnelUrl: p, apiKey: m, tr: T })
|
|
|
117
117
|
}), /* @__PURE__ */ w("div", {
|
|
118
118
|
className: "min-w-0 flex-1 space-y-4",
|
|
119
119
|
children: [
|
|
120
|
-
k && /* @__PURE__ */ C(
|
|
120
|
+
k && /* @__PURE__ */ C(f, {
|
|
121
121
|
workspaceId: j || "",
|
|
122
|
-
agents:
|
|
123
|
-
id:
|
|
122
|
+
agents: c ? [{
|
|
123
|
+
id: c,
|
|
124
124
|
name: "Active Agent"
|
|
125
125
|
}] : [],
|
|
126
126
|
onCreated: () => {
|
|
127
127
|
A(!1), P();
|
|
128
128
|
}
|
|
129
129
|
}),
|
|
130
|
-
D === "repo-stats" && !k && /* @__PURE__ */ C(S, { children: Y ?
|
|
130
|
+
D === "repo-stats" && !k && /* @__PURE__ */ C(S, { children: Y ? c ? /* @__PURE__ */ C(u, {
|
|
131
131
|
stats: L?.getRepoStats ?? null,
|
|
132
132
|
loading: R || N,
|
|
133
133
|
error: z?.message
|
|
@@ -152,7 +152,7 @@ var T = ({ vibeId: u, agentId: d, profile: f, tunnelUrl: p, apiKey: m, tr: T })
|
|
|
152
152
|
})
|
|
153
153
|
]
|
|
154
154
|
}) }),
|
|
155
|
-
D === "ci" && !k && /* @__PURE__ */ C(S, { children: Y ?
|
|
155
|
+
D === "ci" && !k && /* @__PURE__ */ C(S, { children: Y ? c ? /* @__PURE__ */ C(d, {
|
|
156
156
|
status: B?.getCIStatus ?? null,
|
|
157
157
|
loading: V || N,
|
|
158
158
|
error: H?.message
|
|
@@ -170,15 +170,15 @@ var T = ({ vibeId: u, agentId: d, profile: f, tunnelUrl: p, apiKey: m, tr: T })
|
|
|
170
170
|
})]
|
|
171
171
|
}) }),
|
|
172
172
|
D === "git-ui" && /* @__PURE__ */ C(o, {
|
|
173
|
-
agentId:
|
|
173
|
+
agentId: c || null,
|
|
174
174
|
required: ["@vibecontrols/vibe-plugin-tool-git"],
|
|
175
175
|
mode: "all",
|
|
176
176
|
eyebrow: T("gitops.ungitEyebrow", "Ungit plugin required"),
|
|
177
177
|
title: T("gitops.ungitTitle", "Install the visual git client"),
|
|
178
178
|
description: T("gitops.ungitDescription", "The Git UI embeds the Ungit visual git client served by your agent. Install the plugin to continue."),
|
|
179
179
|
children: /* @__PURE__ */ C(E, {
|
|
180
|
-
agentId:
|
|
181
|
-
profile:
|
|
180
|
+
agentId: c,
|
|
181
|
+
profile: l,
|
|
182
182
|
tunnelUrl: p,
|
|
183
183
|
apiKey: m,
|
|
184
184
|
tr: T
|
|
@@ -190,14 +190,14 @@ var T = ({ vibeId: u, agentId: d, profile: f, tunnelUrl: p, apiKey: m, tr: T })
|
|
|
190
190
|
}, "gitops");
|
|
191
191
|
};
|
|
192
192
|
function E({ agentId: e, profile: t, tunnelUrl: n, apiKey: r, tr: i }) {
|
|
193
|
-
let [a, o] = h(!1), [
|
|
193
|
+
let [a, o] = h(!1), [u, d] = h(!1), [f, g] = h(null), [v, y] = h(null);
|
|
194
194
|
m(() => {
|
|
195
195
|
if (!e || !a) return;
|
|
196
196
|
let n = !1, r = null, i = (a) => {
|
|
197
|
-
n || (g(a), r =
|
|
197
|
+
n || (g(a), r = l(e, t, "/ungit", a, i, (e) => y(e.message)));
|
|
198
198
|
};
|
|
199
|
-
return
|
|
200
|
-
n || (g(a), r =
|
|
199
|
+
return c(e, t, "/ungit").then((a) => {
|
|
200
|
+
n || (g(a), r = l(e, t, "/ungit", a, i, (e) => y(e.message)));
|
|
201
201
|
}).catch((e) => {
|
|
202
202
|
n || y(e instanceof Error ? e.message : String(e));
|
|
203
203
|
}), () => {
|
|
@@ -230,29 +230,29 @@ function E({ agentId: e, profile: t, tunnelUrl: n, apiKey: r, tr: i }) {
|
|
|
230
230
|
className: "text-xs text-text-secondary",
|
|
231
231
|
children: i("gitops.ungitNote", "Visual git client powered by Ungit plugin on the agent.")
|
|
232
232
|
}),
|
|
233
|
-
!a && !
|
|
233
|
+
!a && !u && /* @__PURE__ */ C("button", {
|
|
234
234
|
onClick: () => {
|
|
235
235
|
if (!r) return;
|
|
236
|
-
|
|
236
|
+
d(!0);
|
|
237
237
|
let e = { "Content-Type": "application/json" };
|
|
238
238
|
e["x-agent-api-key"] = r, fetch(`${n}/api/profiles/${encodeURIComponent(t)}/ungit/start`, {
|
|
239
239
|
method: "POST",
|
|
240
240
|
headers: e,
|
|
241
241
|
body: "{}"
|
|
242
242
|
}).then((e) => e.json()).then(() => {
|
|
243
|
-
o(!0),
|
|
244
|
-
}).catch(() =>
|
|
243
|
+
o(!0), d(!1);
|
|
244
|
+
}).catch(() => d(!1));
|
|
245
245
|
},
|
|
246
246
|
className: "px-3 py-1 text-xs font-medium rounded-md bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover transition-colors",
|
|
247
247
|
children: i("gitops.startUngit", "Start Ungit")
|
|
248
248
|
}),
|
|
249
|
-
|
|
249
|
+
u && /* @__PURE__ */ C("span", {
|
|
250
250
|
className: "text-xs text-text-secondary animate-pulse",
|
|
251
251
|
children: i("gitops.startingUngit", "Starting...")
|
|
252
252
|
})
|
|
253
253
|
]
|
|
254
|
-
}), a ?
|
|
255
|
-
src:
|
|
254
|
+
}), a ? f ? /* @__PURE__ */ C("iframe", {
|
|
255
|
+
src: s(`${n}/ungit/`, f.token),
|
|
256
256
|
title: "Git UI (Ungit)",
|
|
257
257
|
className: "w-full",
|
|
258
258
|
style: { height: "700px" },
|