@burdenoff/microfe-vibecontrols 2026.601.1 → 2026.601.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.
|
@@ -1,24 +1,24 @@
|
|
|
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
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { FeatureGate as
|
|
3
|
+
import { Navigate as i, Route as a, Routes as ee, useLocation as o, useParams 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";
|
|
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 }))), te = t.lazy(() => import("./pages/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), 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/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), V = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), H = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), U = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), W = t.lazy(() => import("./pages/
|
|
8
|
-
function
|
|
9
|
-
return /* @__PURE__ */
|
|
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/ScheduledJobDetailPage.js").then((e) => ({ default: e.ScheduledJobDetailPage }))), 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/LogsPage.js").then((e) => ({ default: e.LogsPage }))), I = t.lazy(() => import("./pages/CatalogPage.js").then((e) => ({ default: e.CatalogPage }))), L = t.lazy(() => import("./pages/CatalogDetailPage.js").then((e) => ({ default: e.CatalogDetailPage }))), R = t.lazy(() => import("./pages/CatalogDocsPage.js").then((e) => ({ default: e.CatalogDocsPage }))), z = t.lazy(() => import("./pages/ComponentsPage.js").then((e) => ({ default: e.ComponentsPage }))), B = t.lazy(() => import("./pages/ComponentDetailPage.js").then((e) => ({ default: e.ComponentDetailPage }))), V = t.lazy(() => import("./pages/ComponentDocsPage.js").then((e) => ({ default: e.ComponentDocsPage }))), H = t.lazy(() => import("./pages/TemplatesPage.js").then((e) => ({ default: e.TemplatesPage }))), U = t.lazy(() => import("./pages/TemplateDetailPage.js").then((e) => ({ default: e.TemplateDetailPage }))), W = t.lazy(() => import("./pages/PluginsCatalogPage.js").then((e) => ({ default: e.PluginsCatalogPage }))), G = t.lazy(() => import("./pages/ai/AIPage.js").then((e) => ({ default: e.AIPage }))), K = t.lazy(() => import("./pages/ai/AISessionDetailPage.js").then((e) => ({ default: e.AISessionDetailPage }))), q = t.lazy(() => import("./pages/ai/AgentManagerPage.js").then((e) => ({ default: e.AgentManagerPage }))), J = t.lazy(() => import("./pages/ai/AIBookmarksPage.js").then((e) => ({ default: e.AIBookmarksPage })));
|
|
8
|
+
function Y() {
|
|
9
|
+
return /* @__PURE__ */ c("div", {
|
|
10
10
|
className: "flex items-center justify-center h-full min-h-[200px]",
|
|
11
|
-
children: /* @__PURE__ */
|
|
11
|
+
children: /* @__PURE__ */ c("div", { className: "animate-pulse bg-muted rounded w-full h-full" })
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
function
|
|
15
|
-
let { pathname: e } =
|
|
14
|
+
function X() {
|
|
15
|
+
let { pathname: e } = o();
|
|
16
16
|
return r(() => {
|
|
17
17
|
let e = document.querySelector("main");
|
|
18
18
|
e && (e.scrollTop = 0);
|
|
19
19
|
}, [e]), null;
|
|
20
20
|
}
|
|
21
|
-
var
|
|
21
|
+
var Z = new Set([
|
|
22
22
|
"overview",
|
|
23
23
|
"templates",
|
|
24
24
|
"contexts",
|
|
@@ -29,318 +29,314 @@ var Q = new Set([
|
|
|
29
29
|
"playground",
|
|
30
30
|
"config"
|
|
31
31
|
]);
|
|
32
|
-
function
|
|
33
|
-
let { tab: e } =
|
|
34
|
-
return e === "plan" ? /* @__PURE__ */
|
|
32
|
+
function Q() {
|
|
33
|
+
let { tab: e } = s();
|
|
34
|
+
return e === "plan" ? /* @__PURE__ */ c(i, {
|
|
35
35
|
to: "/vibecontrols/ai-tools/plan",
|
|
36
36
|
replace: !0
|
|
37
|
-
}) : e &&
|
|
37
|
+
}) : e && Z.has(e) ? /* @__PURE__ */ c(i, {
|
|
38
38
|
to: `/vibecontrols/ai-tools/ai/${e}`,
|
|
39
39
|
replace: !0
|
|
40
|
-
}) : /* @__PURE__ */
|
|
40
|
+
}) : /* @__PURE__ */ c(i, {
|
|
41
41
|
to: "/vibecontrols/ai-tools/ai/overview",
|
|
42
42
|
replace: !0
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
function
|
|
46
|
-
return /* @__PURE__ */
|
|
45
|
+
function ne() {
|
|
46
|
+
return /* @__PURE__ */ c("div", {
|
|
47
47
|
className: "flex items-center justify-center h-full min-h-[200px] text-text-secondary text-sm",
|
|
48
48
|
children: e()("vibecontrols.pages.featureDisabled", "This feature is currently disabled. You can enable it from Feature Previews.")
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
function $(e, t, n = !0) {
|
|
52
|
-
return /* @__PURE__ */
|
|
52
|
+
return /* @__PURE__ */ c(u, {
|
|
53
53
|
flag: e,
|
|
54
54
|
defaultValue: n,
|
|
55
|
-
fallback: /* @__PURE__ */
|
|
55
|
+
fallback: /* @__PURE__ */ c(ne, {}),
|
|
56
56
|
children: t
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
function
|
|
60
|
-
return /* @__PURE__ */
|
|
61
|
-
fallback: /* @__PURE__ */
|
|
62
|
-
children: [/* @__PURE__ */
|
|
63
|
-
/* @__PURE__ */
|
|
59
|
+
function re() {
|
|
60
|
+
return /* @__PURE__ */ l(n, {
|
|
61
|
+
fallback: /* @__PURE__ */ c(Y, {}),
|
|
62
|
+
children: [/* @__PURE__ */ c(X, {}), /* @__PURE__ */ l(ee, { children: [
|
|
63
|
+
/* @__PURE__ */ c(a, {
|
|
64
64
|
index: !0,
|
|
65
|
-
element: $("vibecontrols.overview", /* @__PURE__ */
|
|
66
|
-
}),
|
|
67
|
-
/* @__PURE__ */ l(a, {
|
|
68
|
-
path: "plugin/:pluginKey",
|
|
69
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */ l(W, {}))
|
|
65
|
+
element: $("vibecontrols.overview", /* @__PURE__ */ c(d, {}))
|
|
70
66
|
}),
|
|
71
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ c(a, {
|
|
72
68
|
path: "plugins",
|
|
73
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */
|
|
69
|
+
element: $("vibecontrols.vibes", /* @__PURE__ */ c(W, {}))
|
|
74
70
|
}),
|
|
75
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ c(a, {
|
|
76
72
|
path: "agents",
|
|
77
|
-
element: $("vibecontrols.agents", /* @__PURE__ */
|
|
73
|
+
element: $("vibecontrols.agents", /* @__PURE__ */ c(f, {}))
|
|
78
74
|
}),
|
|
79
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ c(a, {
|
|
80
76
|
path: "agents/new",
|
|
81
|
-
element: /* @__PURE__ */
|
|
77
|
+
element: /* @__PURE__ */ c(i, {
|
|
82
78
|
to: "../agents?create=true",
|
|
83
79
|
replace: !0
|
|
84
80
|
})
|
|
85
81
|
}),
|
|
86
|
-
/* @__PURE__ */
|
|
82
|
+
/* @__PURE__ */ c(a, {
|
|
87
83
|
path: "agents/:id",
|
|
88
|
-
element: $("vibecontrols.agents", /* @__PURE__ */
|
|
84
|
+
element: $("vibecontrols.agents", /* @__PURE__ */ c(p, {}))
|
|
89
85
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ c(a, {
|
|
91
87
|
path: "sessions",
|
|
92
|
-
element: $("vibecontrols.sessions", /* @__PURE__ */
|
|
88
|
+
element: $("vibecontrols.sessions", /* @__PURE__ */ c(h, {}))
|
|
93
89
|
}),
|
|
94
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ c(a, {
|
|
95
91
|
path: "vibes",
|
|
96
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */
|
|
92
|
+
element: $("vibecontrols.vibes", /* @__PURE__ */ c(_, {}))
|
|
97
93
|
}),
|
|
98
|
-
/* @__PURE__ */
|
|
94
|
+
/* @__PURE__ */ c(a, {
|
|
99
95
|
path: "vibes/new",
|
|
100
|
-
element: /* @__PURE__ */
|
|
96
|
+
element: /* @__PURE__ */ c(i, {
|
|
101
97
|
to: "../vibes?create=true",
|
|
102
98
|
replace: !0
|
|
103
99
|
})
|
|
104
100
|
}),
|
|
105
|
-
/* @__PURE__ */
|
|
101
|
+
/* @__PURE__ */ c(a, {
|
|
106
102
|
path: "vibes/:id",
|
|
107
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */
|
|
103
|
+
element: $("vibecontrols.vibes", /* @__PURE__ */ c(v, {}))
|
|
108
104
|
}),
|
|
109
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ c(a, {
|
|
110
106
|
path: "vibes/:id/docs/*",
|
|
111
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */
|
|
107
|
+
element: $("vibecontrols.vibes", /* @__PURE__ */ c(P, {}))
|
|
112
108
|
}),
|
|
113
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ c(a, {
|
|
114
110
|
path: "notes/:id",
|
|
115
|
-
element: $("vibecontrols.vibes", /* @__PURE__ */
|
|
111
|
+
element: $("vibecontrols.vibes", /* @__PURE__ */ c(y, {}))
|
|
116
112
|
}),
|
|
117
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ c(a, {
|
|
118
114
|
path: "sessions/:id",
|
|
119
|
-
element: $("vibecontrols.sessions", /* @__PURE__ */
|
|
115
|
+
element: $("vibecontrols.sessions", /* @__PURE__ */ c(g, {}))
|
|
120
116
|
}),
|
|
121
|
-
/* @__PURE__ */
|
|
117
|
+
/* @__PURE__ */ c(a, {
|
|
122
118
|
path: "ai",
|
|
123
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
119
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
|
|
124
120
|
}),
|
|
125
|
-
/* @__PURE__ */
|
|
121
|
+
/* @__PURE__ */ c(a, {
|
|
126
122
|
path: "ai/bookmarks",
|
|
127
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
123
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(J, {}))
|
|
128
124
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ c(a, {
|
|
130
126
|
path: "ai/:tab",
|
|
131
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
127
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
|
|
132
128
|
}),
|
|
133
|
-
/* @__PURE__ */
|
|
129
|
+
/* @__PURE__ */ c(a, {
|
|
134
130
|
path: "ai/sessions/:sessionId",
|
|
135
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
131
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(q, {}))
|
|
136
132
|
}),
|
|
137
|
-
/* @__PURE__ */
|
|
133
|
+
/* @__PURE__ */ c(a, {
|
|
138
134
|
path: "ai-tools",
|
|
139
|
-
element: /* @__PURE__ */
|
|
135
|
+
element: /* @__PURE__ */ c(i, {
|
|
140
136
|
to: "ai/overview",
|
|
141
137
|
replace: !0
|
|
142
138
|
})
|
|
143
139
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
140
|
+
/* @__PURE__ */ c(a, {
|
|
145
141
|
path: "ai-tools/plan",
|
|
146
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
142
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
|
|
147
143
|
}),
|
|
148
|
-
/* @__PURE__ */
|
|
144
|
+
/* @__PURE__ */ c(a, {
|
|
149
145
|
path: "ai-tools/ai",
|
|
150
|
-
element: /* @__PURE__ */
|
|
146
|
+
element: /* @__PURE__ */ c(i, {
|
|
151
147
|
to: "overview",
|
|
152
148
|
replace: !0
|
|
153
149
|
})
|
|
154
150
|
}),
|
|
155
|
-
/* @__PURE__ */
|
|
151
|
+
/* @__PURE__ */ c(a, {
|
|
156
152
|
path: "ai-tools/ai/:tab",
|
|
157
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
153
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(G, {}))
|
|
158
154
|
}),
|
|
159
|
-
/* @__PURE__ */
|
|
155
|
+
/* @__PURE__ */ c(a, {
|
|
160
156
|
path: "ai-tools/:tab",
|
|
161
|
-
element: /* @__PURE__ */
|
|
157
|
+
element: /* @__PURE__ */ c(Q, {})
|
|
162
158
|
}),
|
|
163
|
-
/* @__PURE__ */
|
|
159
|
+
/* @__PURE__ */ c(a, {
|
|
164
160
|
path: "ai-tools/sessions/:sessionId",
|
|
165
|
-
element: $("vibecontrols.ai", /* @__PURE__ */
|
|
161
|
+
element: $("vibecontrols.ai", /* @__PURE__ */ c(K, {}))
|
|
166
162
|
}),
|
|
167
|
-
/* @__PURE__ */
|
|
163
|
+
/* @__PURE__ */ c(a, {
|
|
168
164
|
path: "targets",
|
|
169
|
-
element: /* @__PURE__ */
|
|
165
|
+
element: /* @__PURE__ */ c(i, {
|
|
170
166
|
to: "../agents?tab=targets",
|
|
171
167
|
replace: !0
|
|
172
168
|
})
|
|
173
169
|
}),
|
|
174
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ c(a, {
|
|
175
171
|
path: "targets/:id",
|
|
176
|
-
element: $("vibecontrols.agents", /* @__PURE__ */
|
|
172
|
+
element: $("vibecontrols.agents", /* @__PURE__ */ c(m, {}))
|
|
177
173
|
}),
|
|
178
|
-
/* @__PURE__ */
|
|
174
|
+
/* @__PURE__ */ c(a, {
|
|
179
175
|
path: "agent-graph",
|
|
180
|
-
element: /* @__PURE__ */
|
|
176
|
+
element: /* @__PURE__ */ c(i, {
|
|
181
177
|
to: "../agents?tab=graph",
|
|
182
178
|
replace: !0
|
|
183
179
|
})
|
|
184
180
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
181
|
+
/* @__PURE__ */ c(a, {
|
|
186
182
|
path: "catalogs",
|
|
187
|
-
element: $("vibecontrols.catalogs", /* @__PURE__ */
|
|
183
|
+
element: $("vibecontrols.catalogs", /* @__PURE__ */ c(I, {}))
|
|
188
184
|
}),
|
|
189
|
-
/* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ c(a, {
|
|
190
186
|
path: "catalogs/:id",
|
|
191
|
-
element: $("vibecontrols.catalogs", /* @__PURE__ */
|
|
187
|
+
element: $("vibecontrols.catalogs", /* @__PURE__ */ c(L, {}))
|
|
192
188
|
}),
|
|
193
|
-
/* @__PURE__ */
|
|
189
|
+
/* @__PURE__ */ c(a, {
|
|
194
190
|
path: "catalogs/:id/docs/*",
|
|
195
|
-
element: $("vibecontrols.catalogs", /* @__PURE__ */
|
|
191
|
+
element: $("vibecontrols.catalogs", /* @__PURE__ */ c(R, {}))
|
|
196
192
|
}),
|
|
197
|
-
/* @__PURE__ */
|
|
193
|
+
/* @__PURE__ */ c(a, {
|
|
198
194
|
path: "components",
|
|
199
|
-
element: $("vibecontrols.components", /* @__PURE__ */
|
|
195
|
+
element: $("vibecontrols.components", /* @__PURE__ */ c(z, {}))
|
|
200
196
|
}),
|
|
201
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ c(a, {
|
|
202
198
|
path: "components/:id",
|
|
203
|
-
element: $("vibecontrols.components", /* @__PURE__ */
|
|
199
|
+
element: $("vibecontrols.components", /* @__PURE__ */ c(B, {}))
|
|
204
200
|
}),
|
|
205
|
-
/* @__PURE__ */
|
|
201
|
+
/* @__PURE__ */ c(a, {
|
|
206
202
|
path: "components/:id/docs/*",
|
|
207
|
-
element: $("vibecontrols.components", /* @__PURE__ */
|
|
203
|
+
element: $("vibecontrols.components", /* @__PURE__ */ c(V, {}))
|
|
208
204
|
}),
|
|
209
|
-
/* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ c(a, {
|
|
210
206
|
path: "templates",
|
|
211
|
-
element: $("vibecontrols.templates", /* @__PURE__ */
|
|
207
|
+
element: $("vibecontrols.templates", /* @__PURE__ */ c(H, {}))
|
|
212
208
|
}),
|
|
213
|
-
/* @__PURE__ */
|
|
209
|
+
/* @__PURE__ */ c(a, {
|
|
214
210
|
path: "templates/:id",
|
|
215
|
-
element: $("vibecontrols.templates", /* @__PURE__ */
|
|
211
|
+
element: $("vibecontrols.templates", /* @__PURE__ */ c(U, {}))
|
|
216
212
|
}),
|
|
217
|
-
/* @__PURE__ */
|
|
213
|
+
/* @__PURE__ */ c(a, {
|
|
218
214
|
path: "actions",
|
|
219
|
-
element: $("vibecontrols.actions", /* @__PURE__ */
|
|
215
|
+
element: $("vibecontrols.actions", /* @__PURE__ */ c(j, {}))
|
|
220
216
|
}),
|
|
221
|
-
/* @__PURE__ */
|
|
217
|
+
/* @__PURE__ */ c(a, {
|
|
222
218
|
path: "vibedeck",
|
|
223
|
-
element: $("vibecontrols.vibedeck", /* @__PURE__ */
|
|
219
|
+
element: $("vibecontrols.vibedeck", /* @__PURE__ */ c(D, {}))
|
|
224
220
|
}),
|
|
225
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ c(a, {
|
|
226
222
|
path: "calendar",
|
|
227
|
-
element: $("vibecontrols.calendar", /* @__PURE__ */
|
|
223
|
+
element: $("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
|
|
228
224
|
}),
|
|
229
|
-
/* @__PURE__ */
|
|
225
|
+
/* @__PURE__ */ c(a, {
|
|
230
226
|
path: "calendar/:viewType",
|
|
231
|
-
element: $("vibecontrols.calendar", /* @__PURE__ */
|
|
227
|
+
element: $("vibecontrols.calendar", /* @__PURE__ */ c(k, {}))
|
|
232
228
|
}),
|
|
233
|
-
/* @__PURE__ */
|
|
229
|
+
/* @__PURE__ */ c(a, {
|
|
234
230
|
path: "calendar/task/:taskId",
|
|
235
|
-
element: $("vibecontrols.calendar", /* @__PURE__ */
|
|
231
|
+
element: $("vibecontrols.calendar", /* @__PURE__ */ c(A, {}))
|
|
236
232
|
}),
|
|
237
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ c(a, {
|
|
238
234
|
path: "calendar/scheduled-job/:jobId",
|
|
239
|
-
element: $("vibecontrols.calendar", /* @__PURE__ */
|
|
235
|
+
element: $("vibecontrols.calendar", /* @__PURE__ */ c(te, {}))
|
|
240
236
|
}),
|
|
241
|
-
/* @__PURE__ */
|
|
237
|
+
/* @__PURE__ */ c(a, {
|
|
242
238
|
path: "webhooks",
|
|
243
|
-
element: /* @__PURE__ */
|
|
239
|
+
element: /* @__PURE__ */ c(i, {
|
|
244
240
|
to: "/devportal/webhooks",
|
|
245
241
|
replace: !0
|
|
246
242
|
})
|
|
247
243
|
}),
|
|
248
|
-
/* @__PURE__ */
|
|
244
|
+
/* @__PURE__ */ c(a, {
|
|
249
245
|
path: "webhooks/new",
|
|
250
|
-
element: /* @__PURE__ */
|
|
246
|
+
element: /* @__PURE__ */ c(i, {
|
|
251
247
|
to: "/devportal/webhooks/new",
|
|
252
248
|
replace: !0
|
|
253
249
|
})
|
|
254
250
|
}),
|
|
255
|
-
/* @__PURE__ */
|
|
251
|
+
/* @__PURE__ */ c(a, {
|
|
256
252
|
path: "webhooks/:id",
|
|
257
|
-
element: /* @__PURE__ */
|
|
253
|
+
element: /* @__PURE__ */ c(i, {
|
|
258
254
|
to: "/devportal/webhooks",
|
|
259
255
|
replace: !0
|
|
260
256
|
})
|
|
261
257
|
}),
|
|
262
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ c(a, {
|
|
263
259
|
path: "gitops",
|
|
264
|
-
element: /* @__PURE__ */
|
|
260
|
+
element: /* @__PURE__ */ c(i, {
|
|
265
261
|
to: "../vibes",
|
|
266
262
|
replace: !0
|
|
267
263
|
})
|
|
268
264
|
}),
|
|
269
|
-
/* @__PURE__ */
|
|
265
|
+
/* @__PURE__ */ c(a, {
|
|
270
266
|
path: "gitops/:tab",
|
|
271
|
-
element: /* @__PURE__ */
|
|
267
|
+
element: /* @__PURE__ */ c(i, {
|
|
272
268
|
to: "../vibes",
|
|
273
269
|
replace: !0
|
|
274
270
|
})
|
|
275
271
|
}),
|
|
276
|
-
/* @__PURE__ */
|
|
272
|
+
/* @__PURE__ */ c(a, {
|
|
277
273
|
path: "tunnels",
|
|
278
|
-
element: $("vibecontrols.tunnels", /* @__PURE__ */
|
|
274
|
+
element: $("vibecontrols.tunnels", /* @__PURE__ */ c(b, {}))
|
|
279
275
|
}),
|
|
280
|
-
/* @__PURE__ */
|
|
276
|
+
/* @__PURE__ */ c(a, {
|
|
281
277
|
path: "tunnels/new",
|
|
282
|
-
element: $("vibecontrols.tunnels", /* @__PURE__ */
|
|
278
|
+
element: $("vibecontrols.tunnels", /* @__PURE__ */ c(S, {}))
|
|
283
279
|
}),
|
|
284
|
-
/* @__PURE__ */
|
|
280
|
+
/* @__PURE__ */ c(a, {
|
|
285
281
|
path: "tunnels/:tunnelId",
|
|
286
|
-
element: $("vibecontrols.tunnels", /* @__PURE__ */
|
|
282
|
+
element: $("vibecontrols.tunnels", /* @__PURE__ */ c(x, {}))
|
|
287
283
|
}),
|
|
288
|
-
/* @__PURE__ */
|
|
284
|
+
/* @__PURE__ */ c(a, {
|
|
289
285
|
path: "health",
|
|
290
|
-
element: $("vibecontrols.health", /* @__PURE__ */
|
|
286
|
+
element: $("vibecontrols.health", /* @__PURE__ */ c(w, {}))
|
|
291
287
|
}),
|
|
292
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ c(a, {
|
|
293
289
|
path: "analytics",
|
|
294
|
-
element: $("vibecontrols.analytics", /* @__PURE__ */
|
|
290
|
+
element: $("vibecontrols.analytics", /* @__PURE__ */ c(N, {}))
|
|
295
291
|
}),
|
|
296
|
-
/* @__PURE__ */
|
|
292
|
+
/* @__PURE__ */ c(a, {
|
|
297
293
|
path: "audit",
|
|
298
|
-
element: $("vibecontrols.audit-log", /* @__PURE__ */
|
|
294
|
+
element: $("vibecontrols.audit-log", /* @__PURE__ */ c(M, {}), !1)
|
|
299
295
|
}),
|
|
300
|
-
/* @__PURE__ */
|
|
296
|
+
/* @__PURE__ */ c(a, {
|
|
301
297
|
path: "logs",
|
|
302
|
-
element: $("vibecontrols.agents", /* @__PURE__ */
|
|
298
|
+
element: $("vibecontrols.agents", /* @__PURE__ */ c(F, {}))
|
|
303
299
|
}),
|
|
304
|
-
/* @__PURE__ */
|
|
300
|
+
/* @__PURE__ */ c(a, {
|
|
305
301
|
path: "settings",
|
|
306
|
-
element: $("vibecontrols.settings", /* @__PURE__ */
|
|
302
|
+
element: $("vibecontrols.settings", /* @__PURE__ */ c(C, {}))
|
|
307
303
|
}),
|
|
308
|
-
/* @__PURE__ */
|
|
304
|
+
/* @__PURE__ */ c(a, {
|
|
309
305
|
path: "getting-started",
|
|
310
|
-
element: /* @__PURE__ */
|
|
306
|
+
element: /* @__PURE__ */ c(T, {})
|
|
311
307
|
}),
|
|
312
|
-
/* @__PURE__ */
|
|
308
|
+
/* @__PURE__ */ c(a, {
|
|
313
309
|
path: "share/:token",
|
|
314
|
-
element: /* @__PURE__ */
|
|
310
|
+
element: /* @__PURE__ */ c(E, {})
|
|
315
311
|
}),
|
|
316
|
-
/* @__PURE__ */
|
|
312
|
+
/* @__PURE__ */ c(a, {
|
|
317
313
|
path: "deck/:token",
|
|
318
|
-
element: /* @__PURE__ */
|
|
314
|
+
element: /* @__PURE__ */ c(O, {})
|
|
319
315
|
}),
|
|
320
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ c(a, {
|
|
321
317
|
path: "access",
|
|
322
|
-
element: /* @__PURE__ */
|
|
318
|
+
element: /* @__PURE__ */ c(i, {
|
|
323
319
|
to: "../agents?tab=targets",
|
|
324
320
|
replace: !0
|
|
325
321
|
})
|
|
326
322
|
}),
|
|
327
|
-
/* @__PURE__ */
|
|
323
|
+
/* @__PURE__ */ c(a, {
|
|
328
324
|
path: "ssh-targets",
|
|
329
|
-
element: /* @__PURE__ */
|
|
325
|
+
element: /* @__PURE__ */ c(i, {
|
|
330
326
|
to: "../agents?tab=targets",
|
|
331
327
|
replace: !0
|
|
332
328
|
})
|
|
333
329
|
}),
|
|
334
|
-
/* @__PURE__ */
|
|
330
|
+
/* @__PURE__ */ c(a, {
|
|
335
331
|
path: "ssh-terminals",
|
|
336
|
-
element: /* @__PURE__ */
|
|
332
|
+
element: /* @__PURE__ */ c(i, {
|
|
337
333
|
to: "../agents?tab=targets",
|
|
338
334
|
replace: !0
|
|
339
335
|
})
|
|
340
336
|
}),
|
|
341
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ c(a, {
|
|
342
338
|
path: "*",
|
|
343
|
-
element: /* @__PURE__ */
|
|
339
|
+
element: /* @__PURE__ */ c(i, {
|
|
344
340
|
to: "",
|
|
345
341
|
replace: !0
|
|
346
342
|
})
|
|
@@ -349,6 +345,6 @@ function ie() {
|
|
|
349
345
|
});
|
|
350
346
|
}
|
|
351
347
|
//#endregion
|
|
352
|
-
export {
|
|
348
|
+
export { re as VibeControlsRoutes };
|
|
353
349
|
|
|
354
350
|
//# 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, 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 ScheduledJobDetailPage = React.lazy(() =>\n import('./pages/ScheduledJobDetailPage').then((m) => ({ default: m.ScheduledJobDetailPage }))\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);\nconst PluginsCatalogPage = React.lazy(() =>\n import('./pages/PluginsCatalogPage').then((m) => ({ default: m.PluginsCatalogPage }))\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 {/* Plugins catalog — searchable grid of every published plugin. */}\n <Route path=\"plugins\" element={gated('vibecontrols.vibes', <PluginsCatalogPage />)} />\n\n <Route path=\"agents\" element={gated('vibecontrols.agents', <AgentsLandingPage />)} />\n <Route path=\"agents/new\" element={<Navigate to=\"../agents?create=true\" replace />} />\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/new\" element={<Navigate to=\"../vibes?create=true\" replace />} />\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 {/* ScheduledJob (wspace-scheduler-svc) — separate id space\n from VibeCalendarTask above, so it needs its own route. */}\n <Route\n path=\"calendar/scheduled-job/:jobId\"\n element={gated('vibecontrols.calendar', <ScheduledJobDetailPage />)}\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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"}
|
|
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 ScheduledJobDetailPage = React.lazy(() =>\n import('./pages/ScheduledJobDetailPage').then((m) => ({ default: m.ScheduledJobDetailPage }))\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 PluginsCatalogPage = React.lazy(() =>\n import('./pages/PluginsCatalogPage').then((m) => ({ default: m.PluginsCatalogPage }))\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 {/* Plugins catalog — searchable grid of every published plugin. */}\n <Route path=\"plugins\" element={gated('vibecontrols.vibes', <PluginsCatalogPage />)} />\n\n <Route path=\"agents\" element={gated('vibecontrols.agents', <AgentsLandingPage />)} />\n <Route path=\"agents/new\" element={<Navigate to=\"../agents?create=true\" replace />} />\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/new\" element={<Navigate to=\"../vibes?create=true\" replace />} />\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 {/* ScheduledJob (wspace-scheduler-svc) — separate id space\n from VibeCalendarTask above, so it needs its own route. */}\n <Route\n path=\"calendar/scheduled-job/:jobId\"\n element={gated('vibecontrols.calendar', <ScheduledJobDetailPage />)}\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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"}
|
package/package.json
CHANGED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { useListAgentsQuery as e } from "../generated/wspace-operations.js";
|
|
2
|
-
import { useVibeControlsStore as t } from "../store/vibeControlsStore.js";
|
|
3
|
-
import { useActiveAgentProfile as n } from "../hooks/useActiveAgentProfile.js";
|
|
4
|
-
import { mintScopedIframeToken as r } from "../services/iframeToken.js";
|
|
5
|
-
import { PluginIframeMount as i } from "../components/plugins/PluginIframeMount.js";
|
|
6
|
-
import { useMemo as a } from "react";
|
|
7
|
-
import { useParams as o, useSearchParams as s } from "react-router-dom";
|
|
8
|
-
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
9
|
-
import { Card as u } from "@burdenoff/fe-libs/ui";
|
|
10
|
-
import { useFeatureFlagDetails as d } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
11
|
-
import { usePluginContributions as f } from "@burdenoff/fe-libs/shared/plugins";
|
|
12
|
-
//#region src/pages/PluginStandalonePage.tsx
|
|
13
|
-
function p() {
|
|
14
|
-
let { pluginKey: p } = o(), [m] = s(), h = m.get("mount") ?? "vibe.detailTab", g = d("vibes.tabs.iframe-host")?.value === !0, _ = a(() => {
|
|
15
|
-
let e = m.get("context");
|
|
16
|
-
if (!e) return {};
|
|
17
|
-
try {
|
|
18
|
-
let t = e.replace(/-/g, "+").replace(/_/g, "/"), n = t.length % 4 == 0 ? t : t + "=".repeat(4 - t.length % 4), r = atob(n), i = JSON.parse(r);
|
|
19
|
-
return i && typeof i == "object" ? i : {};
|
|
20
|
-
} catch {
|
|
21
|
-
return {};
|
|
22
|
-
}
|
|
23
|
-
}, [m]), v = t((e) => e.activeAgentId), y = t((e) => e.defaultAgentForVibe), { data: b, loading: x } = e({ fetchPolicy: "cache-and-network" }), S = a(() => b?.vibecontrolsAgents ?? [], [b]), C = a(() => {
|
|
24
|
-
let e = typeof _.agentId == "string" ? _.agentId : null, t = typeof _.vibeId == "string" ? _.vibeId : null;
|
|
25
|
-
if (e) return S.find((t) => t.id === e) ?? null;
|
|
26
|
-
if (t) {
|
|
27
|
-
let e = y?.[t];
|
|
28
|
-
if (e) return S.find((t) => t.id === e) ?? null;
|
|
29
|
-
}
|
|
30
|
-
return v ? S.find((e) => e.id === v) ?? null : S[0] ?? null;
|
|
31
|
-
}, [
|
|
32
|
-
S,
|
|
33
|
-
v,
|
|
34
|
-
y,
|
|
35
|
-
_
|
|
36
|
-
]), { active: w } = n(C?.id ?? null), T = a(() => {
|
|
37
|
-
if (!g || !C?.tunnelUrl) return [];
|
|
38
|
-
let e = w ?? "default", t = C.id;
|
|
39
|
-
return [{
|
|
40
|
-
tunnelUrl: C.tunnelUrl,
|
|
41
|
-
profile: e,
|
|
42
|
-
label: C.name ?? C.id,
|
|
43
|
-
mintIframeToken: async ({ pathPrefixes: n }) => r(t, e, n)
|
|
44
|
-
}];
|
|
45
|
-
}, [
|
|
46
|
-
g,
|
|
47
|
-
C,
|
|
48
|
-
w
|
|
49
|
-
]), { data: E, isFetching: D } = f(T, {
|
|
50
|
-
mountPoint: h,
|
|
51
|
-
enabled: g && T.length > 0
|
|
52
|
-
}), O = a(() => p ? E.find((e) => e.pluginKey === p && e.contribution.mountPoint === h) ?? null : null, [
|
|
53
|
-
E,
|
|
54
|
-
p,
|
|
55
|
-
h
|
|
56
|
-
]);
|
|
57
|
-
return g ? p ? x && S.length === 0 ? /* @__PURE__ */ c("div", {
|
|
58
|
-
className: "p-6",
|
|
59
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ c("div", {
|
|
60
|
-
className: "p-6 text-text-secondary",
|
|
61
|
-
children: "Loading…"
|
|
62
|
-
}) })
|
|
63
|
-
}) : !C || !C.tunnelUrl ? /* @__PURE__ */ c("div", {
|
|
64
|
-
className: "p-6",
|
|
65
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ l("div", {
|
|
66
|
-
className: "p-6 text-text-secondary",
|
|
67
|
-
children: [
|
|
68
|
-
"No agent available to serve ",
|
|
69
|
-
/* @__PURE__ */ c("code", { children: p }),
|
|
70
|
-
". Attach an agent first."
|
|
71
|
-
]
|
|
72
|
-
}) })
|
|
73
|
-
}) : D && !O ? /* @__PURE__ */ c("div", {
|
|
74
|
-
className: "p-6",
|
|
75
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ l("div", {
|
|
76
|
-
className: "p-6 text-text-secondary",
|
|
77
|
-
children: [
|
|
78
|
-
"Looking for ",
|
|
79
|
-
p,
|
|
80
|
-
"…"
|
|
81
|
-
]
|
|
82
|
-
}) })
|
|
83
|
-
}) : O ? /* @__PURE__ */ c("div", {
|
|
84
|
-
className: "p-4 sm:p-6 h-full",
|
|
85
|
-
children: /* @__PURE__ */ c(u, {
|
|
86
|
-
className: "h-[80vh] min-h-[500px]",
|
|
87
|
-
children: /* @__PURE__ */ c("div", {
|
|
88
|
-
className: "p-0 h-full",
|
|
89
|
-
children: /* @__PURE__ */ c(i, {
|
|
90
|
-
contribution: O,
|
|
91
|
-
tunnel: O.tunnel,
|
|
92
|
-
restPaths: O.capabilities.restPaths.length > 0 ? O.capabilities.restPaths : [`/ui/${O.pluginKey}`],
|
|
93
|
-
context: _,
|
|
94
|
-
agentId: C.id,
|
|
95
|
-
profile: O.tunnel.profile,
|
|
96
|
-
theme: {
|
|
97
|
-
colorMode: "light",
|
|
98
|
-
tokens: {}
|
|
99
|
-
},
|
|
100
|
-
locale: "en",
|
|
101
|
-
featureFlags: {},
|
|
102
|
-
hostVersion: "1.0.0"
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
})
|
|
106
|
-
}) : /* @__PURE__ */ c("div", {
|
|
107
|
-
className: "p-6",
|
|
108
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ l("div", {
|
|
109
|
-
className: "p-6 text-status-error-text",
|
|
110
|
-
children: [
|
|
111
|
-
"Plugin ",
|
|
112
|
-
/* @__PURE__ */ c("code", {
|
|
113
|
-
className: "font-mono",
|
|
114
|
-
children: p
|
|
115
|
-
}),
|
|
116
|
-
" doesn't contribute to mount",
|
|
117
|
-
/* @__PURE__ */ l("code", {
|
|
118
|
-
className: "font-mono",
|
|
119
|
-
children: [" ", h]
|
|
120
|
-
}),
|
|
121
|
-
" on agent",
|
|
122
|
-
" ",
|
|
123
|
-
C.name ?? C.id,
|
|
124
|
-
"."
|
|
125
|
-
]
|
|
126
|
-
}) })
|
|
127
|
-
}) : /* @__PURE__ */ c("div", {
|
|
128
|
-
className: "p-6",
|
|
129
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ c("div", {
|
|
130
|
-
className: "p-6 text-status-error-text",
|
|
131
|
-
children: "Missing plugin key in URL."
|
|
132
|
-
}) })
|
|
133
|
-
}) : /* @__PURE__ */ c("div", {
|
|
134
|
-
className: "p-6",
|
|
135
|
-
children: /* @__PURE__ */ c(u, { children: /* @__PURE__ */ l("div", {
|
|
136
|
-
className: "p-6 text-text-secondary",
|
|
137
|
-
children: [
|
|
138
|
-
"Iframe-host is disabled in this workspace. Ask an admin to enable",
|
|
139
|
-
/* @__PURE__ */ c("code", {
|
|
140
|
-
className: "font-mono text-xs",
|
|
141
|
-
children: " vibes.tabs.iframe-host"
|
|
142
|
-
}),
|
|
143
|
-
"."
|
|
144
|
-
]
|
|
145
|
-
}) })
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
//#endregion
|
|
149
|
-
export { p as PluginStandalonePage };
|
|
150
|
-
|
|
151
|
-
//# sourceMappingURL=PluginStandalonePage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PluginStandalonePage.js","names":[],"sources":["../../src/pages/PluginStandalonePage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\n\nimport { Card } from '@burdenoff/fe-libs/ui';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\nimport {\n type DiscoveredContribution,\n type MountTunnel,\n usePluginContributions,\n} from '@burdenoff/fe-libs/shared/plugins';\n\nimport { useVibeControlsStore } from '@/store/vibeControlsStore';\nimport { useListAgentsQuery } from '@/generated/wspace-operations';\nimport { useActiveAgentProfile } from '@/hooks/useActiveAgentProfile';\nimport { mintScopedIframeToken } from '@/services/iframeToken';\nimport { PluginIframeMount } from '@/components/plugins/PluginIframeMount';\n\n/**\n * PR-9 deep-link route — `/plugin/:pluginKey?mount=<id>&context=<base64url(json)>`.\n *\n * Full-page view of any plugin contribution from any mount point. URL\n * params are a routing hint; the actual context flows into the iframe\n * via `host:init` postMessage (the trust boundary). The page validates\n * the requested context against the user's accessible agents and only\n * mounts the iframe when the chosen tunnel resolves to an agent the\n * user owns / has access to.\n *\n * Behind the same `vibes.tabs.iframe-host` feature flag the in-tab\n * iframe surface uses. When the flag is off, this page renders an\n * empty-state instead of mounting any iframe.\n */\nexport function PluginStandalonePage() {\n const { pluginKey } = useParams<{ pluginKey: string }>();\n const [searchParams] = useSearchParams();\n const requestedMount = searchParams.get('mount') ?? 'vibe.detailTab';\n\n // ── feature flag ────────────────────────────────────────────────────\n const iframeHostFlag = useFeatureFlagDetails('vibes.tabs.iframe-host');\n const enableIframeHost = iframeHostFlag?.value === true;\n\n // ── decode URL context (untrusted hint) ────────────────────────────\n const requestedContext = useMemo<Record<string, unknown>>(() => {\n const raw = searchParams.get('context');\n if (!raw) return {};\n try {\n // base64url → base64 → JSON\n const padded = raw.replace(/-/g, '+').replace(/_/g, '/');\n const pad = padded.length % 4 === 0 ? padded : padded + '='.repeat(4 - (padded.length % 4));\n const decoded = atob(pad);\n const parsed = JSON.parse(decoded);\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {};\n } catch {\n return {};\n }\n }, [searchParams]);\n\n // ── pick the effective agent ───────────────────────────────────────\n // 1. If the URL hint names an `agentId`, use that agent directly.\n // 2. Else if the URL hint names a `vibeId`, honour\n // `defaultAgentForVibe` if set, else fall back to the user's most\n // recently active agent.\n // 3. Else the user's most recently active agent.\n const activeAgentId = useVibeControlsStore((s) => s.activeAgentId);\n const defaultAgentForVibe = useVibeControlsStore((s) => s.defaultAgentForVibe);\n const { data: agentsData, loading: agentsLoading } = useListAgentsQuery({\n fetchPolicy: 'cache-and-network',\n });\n const allAgents = useMemo(() => agentsData?.vibecontrolsAgents ?? [], [agentsData]);\n\n const effectiveAgent = useMemo(() => {\n const ctxAgentId =\n typeof requestedContext.agentId === 'string' ? requestedContext.agentId : null;\n const ctxVibeId = typeof requestedContext.vibeId === 'string' ? requestedContext.vibeId : null;\n if (ctxAgentId) return allAgents.find((a: { id: string }) => a.id === ctxAgentId) ?? null;\n if (ctxVibeId) {\n const defaulted = defaultAgentForVibe?.[ctxVibeId];\n if (defaulted) return allAgents.find((a: { id: string }) => a.id === defaulted) ?? null;\n }\n if (activeAgentId) return allAgents.find((a: { id: string }) => a.id === activeAgentId) ?? null;\n return allAgents[0] ?? null;\n }, [allAgents, activeAgentId, defaultAgentForVibe, requestedContext]);\n\n const { active: activeProfile } = useActiveAgentProfile(effectiveAgent?.id ?? null);\n\n // ── tunnel + discovery ─────────────────────────────────────────────\n const tunnels = useMemo<MountTunnel[]>(() => {\n if (!enableIframeHost || !effectiveAgent?.tunnelUrl) return [];\n const profile = activeProfile ?? 'default';\n const agentIdForToken = effectiveAgent.id;\n return [\n {\n tunnelUrl: effectiveAgent.tunnelUrl,\n profile,\n label: effectiveAgent.name ?? effectiveAgent.id,\n mintIframeToken: async ({ pathPrefixes }) => {\n return mintScopedIframeToken(agentIdForToken, profile, pathPrefixes);\n },\n },\n ];\n }, [enableIframeHost, effectiveAgent, activeProfile]);\n\n const { data: contributions, isFetching } = usePluginContributions(tunnels, {\n mountPoint: requestedMount,\n enabled: enableIframeHost && tunnels.length > 0,\n });\n\n const target = useMemo<DiscoveredContribution | null>(() => {\n if (!pluginKey) return null;\n return (\n contributions.find(\n (c) => c.pluginKey === pluginKey && c.contribution.mountPoint === requestedMount\n ) ?? null\n );\n }, [contributions, pluginKey, requestedMount]);\n\n if (!enableIframeHost) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-text-secondary\">\n Iframe-host is disabled in this workspace. Ask an admin to enable\n <code className=\"font-mono text-xs\"> vibes.tabs.iframe-host</code>.\n </div>\n </Card>\n </div>\n );\n }\n\n if (!pluginKey) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-status-error-text\">Missing plugin key in URL.</div>\n </Card>\n </div>\n );\n }\n\n if (agentsLoading && allAgents.length === 0) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-text-secondary\">Loading…</div>\n </Card>\n </div>\n );\n }\n\n if (!effectiveAgent || !effectiveAgent.tunnelUrl) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-text-secondary\">\n No agent available to serve <code>{pluginKey}</code>. Attach an agent first.\n </div>\n </Card>\n </div>\n );\n }\n\n if (isFetching && !target) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-text-secondary\">Looking for {pluginKey}…</div>\n </Card>\n </div>\n );\n }\n\n if (!target) {\n return (\n <div className=\"p-6\">\n <Card>\n <div className=\"p-6 text-status-error-text\">\n Plugin <code className=\"font-mono\">{pluginKey}</code> doesn't contribute to mount\n <code className=\"font-mono\"> {requestedMount}</code> on agent{' '}\n {effectiveAgent.name ?? effectiveAgent.id}.\n </div>\n </Card>\n </div>\n );\n }\n\n return (\n <div className=\"p-4 sm:p-6 h-full\">\n <Card className=\"h-[80vh] min-h-[500px]\">\n <div className=\"p-0 h-full\">\n <PluginIframeMount\n contribution={target}\n tunnel={target.tunnel}\n restPaths={\n target.capabilities.restPaths.length > 0\n ? target.capabilities.restPaths\n : [`/ui/${target.pluginKey}`]\n }\n context={requestedContext}\n agentId={effectiveAgent.id}\n profile={target.tunnel.profile}\n theme={{ colorMode: 'light', tokens: {} }}\n locale=\"en\"\n featureFlags={{}}\n hostVersion=\"1.0.0\"\n />\n </div>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|