@burdenoff/microfe-vibecontrols 2026.521.3 → 2026.522.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/VibeControlsRoot.js +86 -78
  2. package/dist/VibeControlsRoot.js.map +1 -1
  3. package/dist/VibeControlsRoutes.js +168 -125
  4. package/dist/VibeControlsRoutes.js.map +1 -1
  5. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +174 -0
  6. package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +1 -0
  7. package/dist/components/agent-manager/AgentManagerChatPane.js +149 -94
  8. package/dist/components/agent-manager/AgentManagerChatPane.js.map +1 -1
  9. package/dist/components/agent-manager/AgentManagerMessageItem.js +52 -41
  10. package/dist/components/agent-manager/AgentManagerMessageItem.js.map +1 -1
  11. package/dist/components/agent-manager/AgentManagerMessageList.js +22 -15
  12. package/dist/components/agent-manager/AgentManagerMessageList.js.map +1 -1
  13. package/dist/components/agents/OpenInEditorMenu.js +241 -0
  14. package/dist/components/agents/OpenInEditorMenu.js.map +1 -0
  15. package/dist/components/agents/VibeOpenInEditorMenu.js +20 -0
  16. package/dist/components/agents/VibeOpenInEditorMenu.js.map +1 -0
  17. package/dist/components/agents/idePresets.js +148 -0
  18. package/dist/components/agents/idePresets.js.map +1 -0
  19. package/dist/components/agents/index.js +3 -0
  20. package/dist/components/ai/AIPlanPanel.js +332 -0
  21. package/dist/components/ai/AIPlanPanel.js.map +1 -0
  22. package/dist/components/analytics/index.js +2 -2
  23. package/dist/components/assistant/AssistantMessageItem.js +55 -47
  24. package/dist/components/assistant/AssistantMessageItem.js.map +1 -1
  25. package/dist/components/audit/AuditExportButton.js +87 -41
  26. package/dist/components/audit/AuditExportButton.js.map +1 -1
  27. package/dist/components/gitops/CIDurationChart.js +11 -11
  28. package/dist/components/security/SecurityEmptyState.js +33 -0
  29. package/dist/components/security/SecurityEmptyState.js.map +1 -0
  30. package/dist/components/security/SecurityEvidenceList.js +42 -0
  31. package/dist/components/security/SecurityEvidenceList.js.map +1 -0
  32. package/dist/components/security/SecurityFindingsTable.js +201 -0
  33. package/dist/components/security/SecurityFindingsTable.js.map +1 -0
  34. package/dist/components/security/SecurityHeaderStrip.js +67 -0
  35. package/dist/components/security/SecurityHeaderStrip.js.map +1 -0
  36. package/dist/components/security/SecurityLifecycleStepper.js +66 -0
  37. package/dist/components/security/SecurityLifecycleStepper.js.map +1 -0
  38. package/dist/components/security/SecurityProviderDrawer.js +112 -0
  39. package/dist/components/security/SecurityProviderDrawer.js.map +1 -0
  40. package/dist/components/security/SecurityTabPanel.js +105 -0
  41. package/dist/components/security/SecurityTabPanel.js.map +1 -0
  42. package/dist/components/security/gql.js +128 -0
  43. package/dist/components/security/gql.js.map +1 -0
  44. package/dist/components/security/index.js +8 -0
  45. package/dist/components/security/types.js +80 -0
  46. package/dist/components/security/types.js.map +1 -0
  47. package/dist/components/settings/IdePreferencesSection.js +66 -0
  48. package/dist/components/settings/IdePreferencesSection.js.map +1 -0
  49. package/dist/components/shared/PageSkeleton.js +88 -0
  50. package/dist/components/shared/PageSkeleton.js.map +1 -0
  51. package/dist/constants/pluginCatalog.js +20 -8
  52. package/dist/constants/pluginCatalog.js.map +1 -1
  53. package/dist/generated/wspace-operations.js +1350 -1262
  54. package/dist/generated/wspace-operations.js.map +1 -1
  55. package/dist/generated/wspace-types.js.map +1 -1
  56. package/dist/hooks/useToggleAgentBookmark.js +32 -0
  57. package/dist/hooks/useToggleAgentBookmark.js.map +1 -0
  58. package/dist/index.js +10 -10
  59. package/dist/pages/AgentDetailsPage.js +25 -25
  60. package/dist/pages/AgentDetailsPage.js.map +1 -1
  61. package/dist/pages/AgentsPage.js +326 -327
  62. package/dist/pages/AgentsPage.js.map +1 -1
  63. package/dist/pages/AnalyticsPage.js +425 -420
  64. package/dist/pages/AnalyticsPage.js.map +1 -1
  65. package/dist/pages/CatalogDetailPage.js +258 -249
  66. package/dist/pages/CatalogDetailPage.js.map +1 -1
  67. package/dist/pages/CatalogPage.js +22 -22
  68. package/dist/pages/CatalogPage.js.map +1 -1
  69. package/dist/pages/ComponentDetailPage.js +30 -30
  70. package/dist/pages/ComponentDetailPage.js.map +1 -1
  71. package/dist/pages/ComponentsPage.js +23 -23
  72. package/dist/pages/ComponentsPage.js.map +1 -1
  73. package/dist/pages/LogsPage.js +107 -0
  74. package/dist/pages/LogsPage.js.map +1 -0
  75. package/dist/pages/NoteDetailsPage.js +12 -12
  76. package/dist/pages/NoteDetailsPage.js.map +1 -1
  77. package/dist/pages/SessionDetailsPage.js +12 -12
  78. package/dist/pages/SessionDetailsPage.js.map +1 -1
  79. package/dist/pages/SessionsPage.js +158 -136
  80. package/dist/pages/SessionsPage.js.map +1 -1
  81. package/dist/pages/SettingsPage.js +60 -52
  82. package/dist/pages/SettingsPage.js.map +1 -1
  83. package/dist/pages/TargetDetailsPage.js +18 -18
  84. package/dist/pages/TargetDetailsPage.js.map +1 -1
  85. package/dist/pages/TargetsPage.js +328 -331
  86. package/dist/pages/TargetsPage.js.map +1 -1
  87. package/dist/pages/TemplateDetailPage.js +17 -17
  88. package/dist/pages/TemplateDetailPage.js.map +1 -1
  89. package/dist/pages/TemplatesPage.js +17 -17
  90. package/dist/pages/TemplatesPage.js.map +1 -1
  91. package/dist/pages/VibeDetailsPage.js +552 -535
  92. package/dist/pages/VibeDetailsPage.js.map +1 -1
  93. package/dist/pages/VibesPage.js +321 -296
  94. package/dist/pages/VibesPage.js.map +1 -1
  95. package/dist/pages/ai/AIBookmarksPage.js +184 -0
  96. package/dist/pages/ai/AIBookmarksPage.js.map +1 -0
  97. package/dist/pages/ai/AIPage.js +138 -109
  98. package/dist/pages/ai/AIPage.js.map +1 -1
  99. package/dist/services/planApi.js +18 -0
  100. package/dist/services/planApi.js.map +1 -0
  101. package/dist/store/vibeControlsStore.js +20 -2
  102. package/dist/store/vibeControlsStore.js.map +1 -1
  103. package/dist/translations/en.js +30 -1
  104. package/dist/translations/en.js.map +1 -1
  105. package/package.json +4 -4
@@ -1,45 +1,47 @@
1
1
  import { useAddVibeToCatalogMutation as e, useArchiveVibeMutation as t, useCreateSessionMutation as n, useGetVibeCatalogsQuery as r, useGetVibeFeatureCatalogQuery as i, useGetVibeFeatureFlagsQuery as a, useGetVibeQuery as o, useRemoveVibeFromCatalogMutation as s, useSetVibeFeatureFlagMutation as c, useUpdateVibeStatusMutation as l } from "../generated/wspace-operations.js";
2
- import { useVibeControls as u, useVibeNavigate as ee } from "../providers/VibeControlsProvider.js";
3
- import { useVibeControlsStore as te } from "../store/vibeControlsStore.js";
4
- import { PageHeader as d } from "../components/shared/PageHeader.js";
5
- import { LoadingState as f } from "../components/shared/LoadingState.js";
6
- import { ErrorState as p } from "../components/shared/ErrorState.js";
7
- import { EntityTagPicker as m } from "../components/shared/EntityTagPicker.js";
8
- import { EmptyState as h } from "../components/shared/EmptyState.js";
9
- import { StatusBadge as g } from "../components/shared/StatusBadge.js";
10
- import { Card as _ } from "../components/shared/Card.js";
11
- import { SESSION_PROVIDER_PACKAGES as ne } from "../constants/pluginCatalog.js";
12
- import { PluginGate as v } from "../components/shared/PluginGate.js";
13
- import { useActiveAgentProfile as re } from "../hooks/useActiveAgentProfile.js";
2
+ import { useVibeControls as u, useVibeNavigate as d } from "../providers/VibeControlsProvider.js";
3
+ import { useVibeControlsStore as f } from "../store/vibeControlsStore.js";
4
+ import { PageHeader as p } from "../components/shared/PageHeader.js";
5
+ import { ErrorState as m } from "../components/shared/ErrorState.js";
6
+ import { EntityTagPicker as h } from "../components/shared/EntityTagPicker.js";
7
+ import { EmptyState as g } from "../components/shared/EmptyState.js";
8
+ import { StatusBadge as _ } from "../components/shared/StatusBadge.js";
9
+ import { Card as v } from "../components/shared/Card.js";
10
+ import { SESSION_PROVIDER_PACKAGES as ee } from "../constants/pluginCatalog.js";
11
+ import { PluginGate as te } from "../components/shared/PluginGate.js";
12
+ import { useActiveAgentProfile as ne } from "../hooks/useActiveAgentProfile.js";
14
13
  import "../components/shared/index.js";
15
14
  import { VIBE_PERMISSIONS as y } from "../constants/permissions.js";
16
- import { OpenInBrowserEditorButton as ie } from "../components/agents/OpenInBrowserEditorButton.js";
15
+ import { PageSkeleton as b } from "../components/shared/PageSkeleton.js";
16
+ import { VibeOpenInEditorMenu as re } from "../components/agents/VibeOpenInEditorMenu.js";
17
17
  import "../components/agents/index.js";
18
- import { NotesTabPanel as ae } from "../components/notes/NotesTabPanel.js";
18
+ import { NotesTabPanel as x } from "../components/notes/NotesTabPanel.js";
19
19
  import "../components/notes/index.js";
20
- import { useQueryBackedTab as b } from "../hooks/useQueryBackedTab.js";
21
- import { appendIframeTokenParam as oe, mintIframeToken as x, mintScopedIframeToken as se, scheduleIframeTokenRefresh as S } from "../services/iframeToken.js";
22
- import { AddTabDialog as ce } from "../components/plugins/AddTabDialog.js";
23
- import { PluginIframeMount as le } from "../components/plugins/PluginIframeMount.js";
24
- import { ScorecardPanel as ue } from "../components/scorecard/ScorecardPanel.js";
20
+ import { useQueryBackedTab as S } from "../hooks/useQueryBackedTab.js";
21
+ import { appendIframeTokenParam as ie, mintIframeToken as C, mintScopedIframeToken as ae, scheduleIframeTokenRefresh as w } from "../services/iframeToken.js";
22
+ import { AddTabDialog as oe } from "../components/plugins/AddTabDialog.js";
23
+ import { PluginIframeMount as se } from "../components/plugins/PluginIframeMount.js";
24
+ import { ScorecardPanel as ce } from "../components/scorecard/ScorecardPanel.js";
25
25
  import "../components/scorecard/index.js";
26
- import { DocsTabPanel as de } from "../components/docs/DocsTabPanel.js";
26
+ import { DocsTabPanel as le } from "../components/docs/DocsTabPanel.js";
27
27
  import "../components/docs/index.js";
28
- import { VibeGitOpsTab as fe } from "../components/gitops/VibeGitOpsTab.js";
29
- import { VibeAgentEmptyState as pe } from "../components/vibe/VibeAgentEmptyState.js";
30
- import { DEFAULT_VIBE_FEATURE_CATALOG as me, isVibeFeatureEnabled as he } from "../lib/vibeFeatures.js";
31
- import { useCallback as ge, useEffect as C, useMemo as _e, useRef as ve, useState as w } from "react";
32
- import { useI18n as ye } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
33
- import { Archive as be, ArrowLeft as xe, BarChart3 as Se, BookOpen as Ce, Check as we, Clock as Te, ExternalLink as Ee, FileText as De, Folder as Oe, GitBranch as ke, GitMerge as Ae, Globe as je, Info as Me, Library as T, Link2 as Ne, Loader2 as Pe, Network as Fe, Pause as Ie, Play as Le, Plus as E, RefreshCw as Re, Server as ze, Settings as Be, Tag as Ve, Terminal as D, Variable as He, X as Ue, Zap as O } from "lucide-react";
34
- import { useParams as We } from "react-router-dom";
35
- import { AnimatePresence as Ge, motion as k } from "framer-motion";
36
- import { Fragment as Ke, jsx as A, jsxs as j } from "react/jsx-runtime";
37
- import { useFeatureFlagDetails as M } from "@burdenoff/fe-libs/shared/feature-flags";
38
- import { MotionItem as N, MotionList as qe, MotionPage as Je } from "@burdenoff/fe-libs/shared/motion";
39
- import { PermissionButton as Ye } from "@burdenoff/fe-libs/shared/components";
40
- import { usePluginContributions as Xe } from "@burdenoff/fe-libs/shared/plugins";
28
+ import { VibeGitOpsTab as ue } from "../components/gitops/VibeGitOpsTab.js";
29
+ import { VibeAgentEmptyState as de } from "../components/vibe/VibeAgentEmptyState.js";
30
+ import { DEFAULT_VIBE_FEATURE_CATALOG as fe, isVibeFeatureEnabled as pe } from "../lib/vibeFeatures.js";
31
+ import { SecurityTabPanel as me } from "../components/security/SecurityTabPanel.js";
32
+ import "../components/security/index.js";
33
+ import { useCallback as he, useEffect as ge, useMemo as T, useRef as _e, useState as E } from "react";
34
+ import { useI18n as ve } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
35
+ import { Archive as ye, ArrowLeft as D, BarChart3 as be, BookOpen as xe, Check as Se, Clock as Ce, ExternalLink as we, FileText as Te, Folder as Ee, GitBranch as De, GitMerge as Oe, Globe as ke, Info as Ae, Library as O, Link2 as je, Loader2 as Me, Network as Ne, Pause as Pe, Play as Fe, Plus as k, RefreshCw as Ie, Server as Le, Settings as Re, Shield as ze, Tag as Be, Terminal as A, Variable as Ve, X as He, Zap as j } from "lucide-react";
36
+ import { useParams as Ue } from "react-router-dom";
37
+ import { AnimatePresence as We, motion as M } from "framer-motion";
38
+ import { Fragment as Ge, jsx as N, jsxs as P } from "react/jsx-runtime";
39
+ import { useFeatureFlagDetails as F } from "@burdenoff/fe-libs/shared/feature-flags";
40
+ import { MotionItem as I, MotionList as Ke, MotionPage as L } from "@burdenoff/fe-libs/shared/motion";
41
+ import { PermissionButton as qe } from "@burdenoff/fe-libs/shared/components";
42
+ import { usePluginContributions as Je } from "@burdenoff/fe-libs/shared/plugins";
41
43
  //#region src/pages/VibeDetailsPage.tsx
42
- var Ze = [
44
+ var Ye = [
43
45
  "overview",
44
46
  "config",
45
47
  "git",
@@ -50,66 +52,68 @@ var Ze = [
50
52
  "catalogs",
51
53
  "graphqlPlayground",
52
54
  "gitops",
55
+ "security",
53
56
  "related"
54
- ], Qe = new Set(["overview", "config"]), $e = new Set(["apiPlayground"]), et = new Set([
57
+ ], Xe = new Set(["overview", "config"]), Ze = new Set(["apiPlayground"]), Qe = new Set([
55
58
  "sessions",
56
59
  "gitops",
57
60
  "graphqlPlayground",
58
- "git"
61
+ "git",
62
+ "security"
59
63
  ]);
60
- function tt() {
61
- let { t: e } = ye(), { id: r } = We(), { basePath: s } = u(), oe = s || "", x = ee(), S = ge((t, n) => {
64
+ function R() {
65
+ let { t: e } = ve(), { id: r } = Ue(), { basePath: s } = u(), ie = s || "", C = d(), w = he((t, n) => {
62
66
  let r = e(t);
63
67
  return r === t ? n : r;
64
- }, [e]), [we] = l({ refetchQueries: ["GetVibe"] }), [je] = t({ refetchQueries: ["GetVibe"] }), [Pe] = n({ refetchQueries: ["GetVibe", "ListSessions"] }), { data: Ue } = i({
68
+ }, [e]), [Se] = l({ refetchQueries: ["GetVibe"] }), [we] = t({ refetchQueries: ["GetVibe"] }), [ke] = n({ refetchQueries: ["GetVibe", "ListSessions"] }), { data: Me } = i({
65
69
  fetchPolicy: "cache-first",
66
70
  errorPolicy: "ignore"
67
- }), tt = _e(() => {
68
- let e = new Map(me.map((e) => [e.id, e]));
69
- for (let t of Ue?.vibeFeatureCatalog ?? []) e.set(t.id, t);
71
+ }), He = T(() => {
72
+ let e = new Map(fe.map((e) => [e.id, e]));
73
+ for (let t of Me?.vibeFeatureCatalog ?? []) e.set(t.id, t);
70
74
  return Array.from(e.values());
71
- }, [Ue?.vibeFeatureCatalog]), it = _e(() => tt.filter((e) => !$e.has(e.id)), [tt]), [at, { loading: ot }] = c({ refetchQueries: ["GetVibe"] }), [st, ct] = w(!1), [lt, P] = w(null), [ut, dt] = w(!1), [ft, F] = w(null), I = ve(null), L = ve(null), R = ve(null), z = ve(null), { data: pt, loading: mt, error: ht, refetch: gt } = o({
75
+ }, [Me?.vibeFeatureCatalog]), R = T(() => He.filter((e) => !Ze.has(e.id)), [He]), [tt, { loading: nt }] = c({ refetchQueries: ["GetVibe"] }), [rt, it] = E(!1), [at, z] = E(null), [ot, st] = E(!1), [ct, lt] = E(null), ut = _e(null), dt = _e(null), ft = _e(null), pt = _e(null), { data: mt, loading: ht, error: gt, refetch: _t } = o({
72
76
  variables: { id: r || "" },
73
77
  skip: !r,
74
78
  fetchPolicy: "cache-and-network"
75
- }), B = pt?.vibe, { data: _t } = a({
79
+ }), B = mt?.vibe, { data: vt } = a({
76
80
  variables: { id: r || "" },
77
81
  skip: !r,
78
82
  fetchPolicy: "cache-first",
79
83
  errorPolicy: "ignore"
80
- }), vt = B, V = _t?.vibe ?? vt, H = ge((e) => he(V ?? null, e, it), [V, it]), yt = M("vibes.tabs.git"), bt = M("vibes.tabs.scorecard"), xt = M("vibes.tabs.graphql-playground"), St = M("vibes.tabs.git-iframe"), Ct = M("vibes.tabs.graphiql-iframe"), wt = M("vibes.tabs.gitops-iframe"), Tt = ge((e) => {
84
+ }), yt = B, V = vt?.vibe ?? yt, H = he((e) => pe(V ?? null, e, R), [V, R]), bt = F("vibes.tabs.git"), xt = F("vibes.tabs.scorecard"), St = F("vibes.tabs.graphql-playground"), Ct = F("vibes.tabs.git-iframe"), wt = F("vibes.tabs.graphiql-iframe"), Tt = F("vibes.tabs.gitops-iframe"), Et = he((e) => {
81
85
  switch (e) {
82
- case "git": return yt ? !!yt.value : !0;
83
- case "scorecard": return bt ? !!bt.value : !0;
84
- case "graphqlPlayground": return xt ? !!xt.value : !0;
86
+ case "git": return bt ? !!bt.value : !0;
87
+ case "scorecard": return xt ? !!xt.value : !0;
88
+ case "graphqlPlayground": return St ? !!St.value : !0;
85
89
  default: return !0;
86
90
  }
87
91
  }, [
88
- yt,
89
92
  bt,
90
- xt
91
- ]), U = B?.agents ?? [], W = B?.sessions || [], Et = B?.children || [], Dt = B?.parent || null, Ot = te((e) => r ? e.defaultAgentForVibe?.[r] : void 0), G = (Ot ? U.find((e) => e.id === Ot) ?? null : null) ?? (U.length === 1 ? U[0] : U.find((e) => !!e.tunnelUrl) ?? U[0] ?? null), K = G, q = G?.tunnelUrl ?? null, kt = G?.agentApiKey ?? null, { active: J } = re(G?.id ?? null), Y = M("vibes.tabs.iframe-host")?.value === !0, At = _e(() => {
92
- if (!Y || !G?.tunnelUrl) return [];
93
- let e = G.id, t = J ?? "default";
93
+ xt,
94
+ St
95
+ ]), U = B?.agents ?? [], W = B?.sessions || [], Dt = B?.children || [], Ot = B?.parent || null, kt = f((e) => r ? e.defaultAgentForVibe?.[r] : void 0), G = (kt ? U.find((e) => e.id === kt) ?? null : null) ?? (U.length === 1 ? U[0] : U.find((e) => !!e.tunnelUrl) ?? U[0] ?? null), K = G, At = G?.tunnelUrl ?? null, jt = G?.agentApiKey ?? null, { active: q } = ne(G?.id ?? null), J = F("vibes.tabs.iframe-host")?.value === !0, Mt = T(() => {
96
+ if (!J || !G?.tunnelUrl) return [];
97
+ let e = G.id, t = q ?? "default";
94
98
  return [{
95
99
  tunnelUrl: G.tunnelUrl,
96
100
  profile: t,
97
101
  label: G.name ?? G.id,
98
- mintIframeToken: async ({ pathPrefixes: n }) => se(e, t, n)
102
+ mintIframeToken: async ({ pathPrefixes: n }) => ae(e, t, n)
99
103
  }];
100
104
  }, [
101
- Y,
105
+ J,
102
106
  G,
103
- J
104
- ]), X = Xe(At, {
107
+ q
108
+ ]), Y = Je(Mt, {
105
109
  mountPoint: "vibe.detailTab",
106
- enabled: Y && At.length > 0
107
- }), [Z, Q] = b(_e(() => {
108
- let e = X.data.filter((e) => e.contribution.mountPoint === "vibe.detailTab").map((e) => e.contribution.id);
109
- return [...Ze, ...e];
110
- }, [X.data]), "overview"), [jt, Mt] = w(!1);
111
- C(() => {
112
- B && te.setState({
110
+ enabled: J && Mt.length > 0
111
+ }), [X, Z] = S(T(() => {
112
+ let e = Y.data.filter((e) => e.contribution.mountPoint === "vibe.detailTab").map((e) => e.contribution.id);
113
+ return [...Ye, ...e];
114
+ }, [Y.data]), "overview"), [Nt, Pt] = E(!1);
115
+ ge(() => {
116
+ B && f.setState({
113
117
  activeAgentId: G?.id ?? null,
114
118
  selectedAgentId: G?.id ?? null,
115
119
  activeVibeId: B.id,
@@ -118,88 +122,86 @@ function tt() {
118
122
  selectedSessionId: null
119
123
  });
120
124
  }, [B?.id, G?.id]);
121
- let Nt = U.length > 0;
122
- C(() => {
123
- if (!Qe.has(Z)) {
124
- if (!H(Z) || !Tt(Z)) {
125
- Q("overview");
125
+ let Q = U.length > 0;
126
+ ge(() => {
127
+ if (!Xe.has(X)) {
128
+ if (!H(X) || !Et(X)) {
129
+ Z("overview");
126
130
  return;
127
131
  }
128
- !Nt && et.has(Z) && Q("overview");
132
+ !Q && Qe.has(X) && Z("overview");
129
133
  }
130
134
  }, [
131
- Z,
135
+ X,
132
136
  H,
133
- Tt,
134
- Nt,
135
- Q
137
+ Et,
138
+ Q,
139
+ Z
136
140
  ]);
137
141
  let $ = () => {
138
- x("/vibes");
139
- }, Pt = async () => {
142
+ C("/vibes");
143
+ }, Ft = async () => {
140
144
  if (B?.id) try {
141
- await we({ variables: {
145
+ await Se({ variables: {
142
146
  id: B.id,
143
147
  status: "ACTIVE"
144
148
  } });
145
149
  } catch (e) {
146
150
  console.error("Failed to activate vibe:", e);
147
151
  }
148
- }, Ft = async () => {
152
+ }, It = async () => {
149
153
  if (B?.id) try {
150
- await we({ variables: {
154
+ await Se({ variables: {
151
155
  id: B.id,
152
156
  status: "INACTIVE"
153
157
  } });
154
158
  } catch (e) {
155
159
  console.error("Failed to deactivate vibe:", e);
156
160
  }
157
- }, It = async () => {
161
+ }, Lt = async () => {
158
162
  if (B?.id) try {
159
- await je({ variables: { id: B.id } });
163
+ await we({ variables: { id: B.id } });
160
164
  } catch (e) {
161
165
  console.error("Failed to archive vibe:", e);
162
166
  }
163
- }, Lt = () => {
164
- B?.path ? window.location.href = `vscode://file/${B.path}` : (F(S("vibesPage.openEditorPathMissing", "No path available to open in editor")), setTimeout(() => F(null), 3e3));
165
167
  }, Rt = () => {
166
- P(null), ct(!0);
168
+ z(null), it(!0);
167
169
  }, zt = async () => {
168
- let e = I.current?.value?.trim(), t = L.current?.value, n = R.current?.value?.trim() || void 0, r = z.current?.value?.trim() || void 0;
170
+ let e = ut.current?.value?.trim(), t = dt.current?.value, n = ft.current?.value?.trim() || void 0, r = pt.current?.value?.trim() || void 0;
169
171
  if (!e) {
170
- P(S("vibeDetails.sessionNameRequired", "Session name is required"));
172
+ z(w("vibeDetails.sessionNameRequired", "Session name is required"));
171
173
  return;
172
174
  }
173
175
  let i = B?.agentId;
174
176
  if (!i) {
175
- P(S("vibeDetails.noAgentAttached", "This vibe has no agent attached. Connect an agent to this vibe before creating a session."));
177
+ z(w("vibeDetails.noAgentAttached", "This vibe has no agent attached. Connect an agent to this vibe before creating a session."));
176
178
  return;
177
179
  }
178
- dt(!0), P(null);
180
+ st(!0), z(null);
179
181
  try {
180
- await Pe({ variables: { input: {
182
+ await ke({ variables: { input: {
181
183
  name: e,
182
184
  type: t || "TERMINAL",
183
185
  agentId: i,
184
186
  vibeId: B?.id,
185
187
  command: n,
186
188
  workingDirectory: r || B?.path || void 0
187
- } } }), ct(!1), I.current && (I.current.value = ""), L.current && (L.current.selectedIndex = 0), R.current && (R.current.value = ""), z.current && (z.current.value = ""), F(S("sessions.createdSuccess", "Session created successfully")), setTimeout(() => F(null), 3e3);
189
+ } } }), it(!1), ut.current && (ut.current.value = ""), dt.current && (dt.current.selectedIndex = 0), ft.current && (ft.current.value = ""), pt.current && (pt.current.value = ""), lt(w("sessions.createdSuccess", "Session created successfully")), setTimeout(() => lt(null), 3e3);
188
190
  } catch (e) {
189
- P(e instanceof Error ? e.message : S("sessions.failedCreate", "Failed to create session"));
191
+ z(e instanceof Error ? e.message : w("sessions.failedCreate", "Failed to create session"));
190
192
  } finally {
191
- dt(!1);
193
+ st(!1);
192
194
  }
193
195
  }, Bt = () => {
194
- K && x(`/agents/${K.id}`);
196
+ K && C(`/agents/${K.id}`);
195
197
  }, Vt = (e) => {
196
- x(`/sessions/${e}`);
198
+ C(`/sessions/${e}`);
197
199
  }, Ht = (e) => {
198
- x(`/vibes/${e}`);
200
+ C(`/vibes/${e}`);
199
201
  }, Ut = (e) => {
200
- if (!e) return S("health.never", "Never");
202
+ if (!e) return w("health.never", "Never");
201
203
  let t = Date.now() - new Date(e).getTime();
202
- return t < 6e4 ? S("health.justNow", "Just now") : t < 36e5 ? `${Math.floor(t / 6e4)}m ago` : t < 864e5 ? `${Math.floor(t / 36e5)}h ago` : new Date(e).toLocaleDateString();
204
+ return t < 6e4 ? w("health.justNow", "Just now") : t < 36e5 ? `${Math.floor(t / 6e4)}m ago` : t < 864e5 ? `${Math.floor(t / 36e5)}h ago` : new Date(e).toLocaleDateString();
203
205
  }, Wt = (e) => {
204
206
  switch (e) {
205
207
  case "clean": return "text-status-success-text";
@@ -208,283 +210,281 @@ function tt() {
208
210
  default: return "text-text-secondary";
209
211
  }
210
212
  };
211
- if (mt && !B) return /* @__PURE__ */ j(Je, {
213
+ if (ht && !B) return /* @__PURE__ */ P(L, {
212
214
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
213
- children: [/* @__PURE__ */ j("button", {
215
+ children: [/* @__PURE__ */ P("button", {
214
216
  onClick: $,
215
217
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
216
- children: [/* @__PURE__ */ A(xe, { className: "w-4 h-4" }), S("vibeDetails.backToVibes", "Back to Vibes")]
217
- }), /* @__PURE__ */ A(f, { message: S("vibeDetails.loadingDetails", "Loading vibe details...") })]
218
+ children: [/* @__PURE__ */ N(D, { className: "w-4 h-4" }), w("vibeDetails.backToVibes", "Back to Vibes")]
219
+ }), /* @__PURE__ */ N(b, { variant: "detail" })]
218
220
  });
219
- if (ht && !B) return /* @__PURE__ */ j(Je, {
221
+ if (gt && !B) return /* @__PURE__ */ P(L, {
220
222
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
221
- children: [/* @__PURE__ */ j("button", {
223
+ children: [/* @__PURE__ */ P("button", {
222
224
  onClick: $,
223
225
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
224
- children: [/* @__PURE__ */ A(xe, { className: "w-4 h-4" }), S("vibeDetails.backToVibes", "Back to Vibes")]
225
- }), /* @__PURE__ */ A(p, {
226
- title: S("vibeDetails.failedLoad", "Failed to load vibe"),
227
- message: ht.message,
228
- onRetry: () => gt()
226
+ children: [/* @__PURE__ */ N(D, { className: "w-4 h-4" }), w("vibeDetails.backToVibes", "Back to Vibes")]
227
+ }), /* @__PURE__ */ N(m, {
228
+ title: w("vibeDetails.failedLoad", "Failed to load vibe"),
229
+ message: gt.message,
230
+ onRetry: () => _t()
229
231
  })]
230
232
  });
231
- if (!B) return /* @__PURE__ */ j(Je, {
233
+ if (!B) return /* @__PURE__ */ P(L, {
232
234
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
233
- children: [/* @__PURE__ */ j("button", {
235
+ children: [/* @__PURE__ */ P("button", {
234
236
  onClick: $,
235
237
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
236
- children: [/* @__PURE__ */ A(xe, { className: "w-4 h-4" }), S("vibeDetails.backToVibes", "Back to Vibes")]
237
- }), /* @__PURE__ */ A(h, {
238
- icon: /* @__PURE__ */ A(O, { className: "w-8 h-8 text-text-secondary" }),
239
- title: S("vibeDetails.notFound", "Vibe not found"),
240
- description: `${S("vibeDetails.notFoundDescriptionPrefix", "No vibe with ID")} "${r}" ${S("vibeDetails.notFoundDescriptionSuffix", "exists")}`,
241
- action: /* @__PURE__ */ A("button", {
238
+ children: [/* @__PURE__ */ N(D, { className: "w-4 h-4" }), w("vibeDetails.backToVibes", "Back to Vibes")]
239
+ }), /* @__PURE__ */ N(g, {
240
+ icon: /* @__PURE__ */ N(j, { className: "w-8 h-8 text-text-secondary" }),
241
+ title: w("vibeDetails.notFound", "Vibe not found"),
242
+ description: `${w("vibeDetails.notFoundDescriptionPrefix", "No vibe with ID")} "${r}" ${w("vibeDetails.notFoundDescriptionSuffix", "exists")}`,
243
+ action: /* @__PURE__ */ N("button", {
242
244
  onClick: $,
243
245
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
244
- children: S("vibeDetails.backToVibes", "Back to Vibes")
246
+ children: w("vibeDetails.backToVibes", "Back to Vibes")
245
247
  })
246
248
  })]
247
249
  });
248
- let Gt = B.status === "ACTIVE" || B.status === "RUNNING", Kt = W.filter((e) => e.status === "RUNNING").length, qt = Et.length + +!!Dt + +!!K, Jt = !!(B.gitBranch || B.gitRemote), Yt = [
250
+ let Gt = B.status === "ACTIVE" || B.status === "RUNNING", Kt = W.filter((e) => e.status === "RUNNING").length, qt = Dt.length + +!!Ot + +!!K, Jt = !!(B.gitBranch || B.gitRemote), Yt = [
249
251
  {
250
252
  id: "overview",
251
- label: S("nav.overview", "Overview"),
252
- icon: Me
253
+ label: w("nav.overview", "Overview"),
254
+ icon: Ae
253
255
  },
254
256
  {
255
257
  id: "config",
256
- label: S("vibeDetails.config", "Config"),
257
- icon: Be
258
+ label: w("vibeDetails.config", "Config"),
259
+ icon: Re
258
260
  },
259
261
  {
260
262
  id: "git",
261
- label: S("vibeDetails.git", "Git"),
262
- icon: ke,
263
+ label: w("vibeDetails.git", "Git"),
264
+ icon: De,
263
265
  badge: Jt && B.gitBranch || void 0
264
266
  },
265
267
  {
266
268
  id: "sessions",
267
- label: S("nav.sessions", "Sessions"),
268
- icon: D,
269
+ label: w("nav.sessions", "Sessions"),
270
+ icon: A,
269
271
  badge: `${W.length}`
270
272
  },
271
273
  {
272
274
  id: "notes",
273
- label: S("vibeDetails.notes", "Notes"),
274
- icon: De
275
+ label: w("vibeDetails.notes", "Notes"),
276
+ icon: Te
275
277
  },
276
278
  {
277
279
  id: "docs",
278
- label: S("vibeDetails.docs", "Docs"),
279
- icon: Ce
280
+ label: w("vibeDetails.docs", "Docs"),
281
+ icon: xe
280
282
  },
281
283
  {
282
284
  id: "scorecard",
283
- label: S("vibeDetails.scorecard", "Scorecard"),
284
- icon: Se
285
+ label: w("vibeDetails.scorecard", "Scorecard"),
286
+ icon: be
285
287
  },
286
288
  {
287
289
  id: "catalogs",
288
- label: S("vibeDetails.catalogs", "Catalogs"),
289
- icon: T
290
+ label: w("vibeDetails.catalogs", "Catalogs"),
291
+ icon: O
290
292
  },
291
293
  {
292
294
  id: "graphqlPlayground",
293
- label: S("vibeDetails.graphqlPlayground", "GraphQL"),
294
- icon: Fe
295
+ label: w("vibeDetails.graphqlPlayground", "GraphQL"),
296
+ icon: Ne
295
297
  },
296
298
  {
297
299
  id: "gitops",
298
- label: S("vibeDetails.gitops", "GitOps"),
299
- icon: Ae
300
+ label: w("vibeDetails.gitops", "GitOps"),
301
+ icon: Oe
302
+ },
303
+ {
304
+ id: "security",
305
+ label: w("vibeDetails.security", "Security"),
306
+ icon: ze
300
307
  },
301
308
  {
302
309
  id: "related",
303
- label: S("vibeDetails.related", "Related"),
304
- icon: Ne,
310
+ label: w("vibeDetails.related", "Related"),
311
+ icon: je,
305
312
  badge: qt > 0 ? `${qt}` : void 0
306
313
  }
307
- ].filter((e) => Qe.has(e.id) ? !0 : !(!H(e.id) || !Tt(e.id) || !Nt && et.has(e.id) || e.id === "git" && St?.value === !0 || e.id === "graphqlPlayground" && Ct?.value === !0 || e.id === "gitops" && wt?.value === !0));
308
- return /* @__PURE__ */ j(Je, {
314
+ ].filter((e) => Xe.has(e.id) ? !0 : !(!H(e.id) || !Et(e.id) || !Q && Qe.has(e.id) || e.id === "git" && Ct?.value === !0 || e.id === "graphqlPlayground" && wt?.value === !0 || e.id === "gitops" && Tt?.value === !0));
315
+ return /* @__PURE__ */ P(L, {
309
316
  className: "space-y-6 p-4 sm:p-6 bg-bg-surface min-h-screen",
310
317
  children: [
311
- ft && /* @__PURE__ */ A("div", {
318
+ ct && /* @__PURE__ */ N("div", {
312
319
  className: "fixed top-4 left-4 right-4 sm:left-auto z-50 bg-status-success-bg text-status-success-text px-4 py-3 rounded-md shadow-lg",
313
- children: ft
320
+ children: ct
314
321
  }),
315
- /* @__PURE__ */ j("button", {
322
+ /* @__PURE__ */ P("button", {
316
323
  onClick: $,
317
324
  className: "flex items-center gap-2 text-text-secondary hover:text-text-primary transition-colors",
318
- children: [/* @__PURE__ */ A(xe, { className: "w-4 h-4" }), S("vibeDetails.backToVibes", "Back to Vibes")]
325
+ children: [/* @__PURE__ */ N(D, { className: "w-4 h-4" }), w("vibeDetails.backToVibes", "Back to Vibes")]
319
326
  }),
320
- /* @__PURE__ */ A(d, {
327
+ /* @__PURE__ */ N(p, {
321
328
  title: B.name,
322
- description: B.description || S("vibeDetails.noDescription", "No description"),
329
+ description: B.description || w("vibeDetails.noDescription", "No description"),
323
330
  breadcrumb: [{
324
- label: S("nav.vibes", "Vibes"),
325
- path: oe ? `${oe}/vibes` : "/vibes"
331
+ label: w("nav.vibes", "Vibes"),
332
+ path: ie ? `${ie}/vibes` : "/vibes"
326
333
  }, { label: B.name }],
327
- actions: /* @__PURE__ */ j("div", {
334
+ actions: /* @__PURE__ */ P("div", {
328
335
  className: "flex items-center gap-2 flex-wrap",
329
336
  children: [
330
- /* @__PURE__ */ A("button", {
331
- onClick: () => gt(),
332
- disabled: mt,
337
+ /* @__PURE__ */ N("button", {
338
+ onClick: () => _t(),
339
+ disabled: ht,
333
340
  className: "flex items-center justify-center p-2 bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50",
334
- title: S("common.refresh", "Refresh"),
335
- children: /* @__PURE__ */ A(Re, { className: `w-4 h-4 ${mt ? "animate-spin" : ""}` })
341
+ title: w("common.refresh", "Refresh"),
342
+ children: /* @__PURE__ */ N(Ie, { className: `w-4 h-4 ${ht ? "animate-spin" : ""}` })
336
343
  }),
337
- /* @__PURE__ */ A(Ye, {
344
+ /* @__PURE__ */ N(qe, {
338
345
  permission: y.VIBE_UPDATE,
339
346
  deniedBehavior: "disable",
340
347
  deniedTooltip: "You don't have permission to update vibes",
341
- children: Gt ? /* @__PURE__ */ j("button", {
342
- onClick: Ft,
348
+ children: Gt ? /* @__PURE__ */ P("button", {
349
+ onClick: It,
343
350
  className: "flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
344
- children: [/* @__PURE__ */ A(Ie, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ A("span", {
351
+ children: [/* @__PURE__ */ N(Pe, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ N("span", {
345
352
  className: "hidden sm:inline",
346
- children: S("vibeDetails.deactivate", "Deactivate")
353
+ children: w("vibeDetails.deactivate", "Deactivate")
347
354
  })]
348
- }) : /* @__PURE__ */ j("button", {
349
- onClick: Pt,
355
+ }) : /* @__PURE__ */ P("button", {
356
+ onClick: Ft,
350
357
  className: "flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-success-bg text-status-success-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
351
- children: [/* @__PURE__ */ A(Le, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ A("span", {
358
+ children: [/* @__PURE__ */ N(Fe, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ N("span", {
352
359
  className: "hidden sm:inline",
353
- children: S("vibeDetails.activate", "Activate")
360
+ children: w("vibeDetails.activate", "Activate")
354
361
  })]
355
362
  })
356
363
  }),
357
- /* @__PURE__ */ j("button", {
358
- onClick: Lt,
359
- className: "flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-bg-sunken text-text-primary rounded-md hover:bg-bg-sunken/80 transition-colors",
360
- title: S("vibeDetails.openInLocalVscode", "Open in local VS Code"),
361
- children: [/* @__PURE__ */ A(Ee, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ A("span", {
362
- className: "hidden sm:inline",
363
- children: S("vibeDetails.openInLocalVscode", "Open in VS Code")
364
- })]
365
- }),
366
- H("browserEditor") && /* @__PURE__ */ A(ie, {
367
- tunnelUrl: q,
368
- agentApiKey: kt,
369
- profile: J,
370
- workspacePath: B.path || void 0
364
+ /* @__PURE__ */ N(re, {
365
+ vibeId: B.id,
366
+ workspacePath: B.path,
367
+ tunnelUrl: At,
368
+ agentApiKey: jt,
369
+ profile: q ?? "default",
370
+ browserEditorEnabled: H("browserEditor")
371
371
  }),
372
- /* @__PURE__ */ A(Ye, {
372
+ /* @__PURE__ */ N(qe, {
373
373
  permission: y.SESSION_CREATE,
374
374
  deniedBehavior: "disable",
375
375
  deniedTooltip: "You don't have permission to create sessions",
376
- children: /* @__PURE__ */ j("button", {
376
+ children: /* @__PURE__ */ P("button", {
377
377
  onClick: Rt,
378
378
  className: "flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
379
379
  children: [
380
- /* @__PURE__ */ A(E, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }),
381
- /* @__PURE__ */ A("span", {
380
+ /* @__PURE__ */ N(k, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }),
381
+ /* @__PURE__ */ N("span", {
382
382
  className: "hidden sm:inline",
383
- children: S("vibeDetails.new", "New")
383
+ children: w("vibeDetails.new", "New")
384
384
  }),
385
- /* @__PURE__ */ A("span", {
385
+ /* @__PURE__ */ N("span", {
386
386
  className: "hidden sm:inline",
387
- children: S("nav.sessions", "Session")
387
+ children: w("nav.sessions", "Session")
388
388
  })
389
389
  ]
390
390
  })
391
391
  }),
392
- /* @__PURE__ */ A(Ye, {
392
+ /* @__PURE__ */ N(qe, {
393
393
  permission: y.VIBE_UPDATE,
394
394
  deniedBehavior: "disable",
395
395
  deniedTooltip: "You don't have permission to archive vibes",
396
- children: /* @__PURE__ */ j("button", {
397
- onClick: It,
396
+ children: /* @__PURE__ */ P("button", {
397
+ onClick: Lt,
398
398
  className: "flex items-center gap-1.5 px-2.5 py-1.5 sm:px-3 sm:py-2 text-xs sm:text-sm bg-status-warning-bg text-status-warning-text rounded-md hover:opacity-80 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
399
- title: S("vibeDetails.archive", "Archive"),
400
- children: [/* @__PURE__ */ A(be, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ A("span", {
399
+ title: w("vibeDetails.archive", "Archive"),
400
+ children: [/* @__PURE__ */ N(ye, { className: "w-3.5 h-3.5 sm:w-4 sm:h-4" }), /* @__PURE__ */ N("span", {
401
401
  className: "hidden sm:inline",
402
- children: S("vibeDetails.archive", "Archive")
402
+ children: w("vibeDetails.archive", "Archive")
403
403
  })]
404
404
  })
405
405
  })
406
406
  ]
407
407
  })
408
408
  }),
409
- /* @__PURE__ */ j(qe, {
409
+ /* @__PURE__ */ P(Ke, {
410
410
  stagger: .04,
411
411
  className: "grid grid-cols-2 sm:grid-cols-4 gap-3 sm:gap-4",
412
412
  children: [
413
- /* @__PURE__ */ A(N, { children: /* @__PURE__ */ A(_, {
413
+ /* @__PURE__ */ N(I, { children: /* @__PURE__ */ N(v, {
414
414
  className: "p-3 sm:p-4",
415
- children: /* @__PURE__ */ j("div", {
415
+ children: /* @__PURE__ */ P("div", {
416
416
  className: "flex items-center gap-2 sm:gap-3",
417
- children: [/* @__PURE__ */ A("div", {
417
+ children: [/* @__PURE__ */ N("div", {
418
418
  className: "w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
419
- children: /* @__PURE__ */ A(O, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
420
- }), /* @__PURE__ */ j("div", {
419
+ children: /* @__PURE__ */ N(j, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
420
+ }), /* @__PURE__ */ P("div", {
421
421
  className: "min-w-0",
422
- children: [/* @__PURE__ */ A("p", {
422
+ children: [/* @__PURE__ */ N("p", {
423
423
  className: "text-xs sm:text-sm text-text-secondary",
424
- children: S("sessions.filterStatus", "Status")
425
- }), /* @__PURE__ */ A(g, {
424
+ children: w("sessions.filterStatus", "Status")
425
+ }), /* @__PURE__ */ N(_, {
426
426
  status: B.status,
427
427
  size: "md"
428
428
  })]
429
429
  })]
430
430
  })
431
431
  }) }),
432
- /* @__PURE__ */ A(N, { children: /* @__PURE__ */ A(_, {
432
+ /* @__PURE__ */ N(I, { children: /* @__PURE__ */ N(v, {
433
433
  className: "p-3 sm:p-4",
434
- children: /* @__PURE__ */ j("div", {
434
+ children: /* @__PURE__ */ P("div", {
435
435
  className: "flex items-center gap-2 sm:gap-3",
436
- children: [/* @__PURE__ */ A("div", {
436
+ children: [/* @__PURE__ */ N("div", {
437
437
  className: "w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
438
- children: /* @__PURE__ */ A(Oe, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
439
- }), /* @__PURE__ */ j("div", {
438
+ children: /* @__PURE__ */ N(Ee, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
439
+ }), /* @__PURE__ */ P("div", {
440
440
  className: "min-w-0",
441
- children: [/* @__PURE__ */ A("p", {
441
+ children: [/* @__PURE__ */ N("p", {
442
442
  className: "text-xs sm:text-sm text-text-secondary",
443
- children: S("sessions.filterType", "Type")
444
- }), /* @__PURE__ */ A("p", {
443
+ children: w("sessions.filterType", "Type")
444
+ }), /* @__PURE__ */ N("p", {
445
445
  className: "font-semibold text-text-primary text-sm sm:text-base truncate",
446
446
  children: B.type
447
447
  })]
448
448
  })]
449
449
  })
450
450
  }) }),
451
- /* @__PURE__ */ A(N, { children: /* @__PURE__ */ A(_, {
451
+ /* @__PURE__ */ N(I, { children: /* @__PURE__ */ N(v, {
452
452
  className: "p-3 sm:p-4",
453
- children: /* @__PURE__ */ j("div", {
453
+ children: /* @__PURE__ */ P("div", {
454
454
  className: "flex items-center gap-2 sm:gap-3",
455
- children: [/* @__PURE__ */ A("div", {
455
+ children: [/* @__PURE__ */ N("div", {
456
456
  className: "w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
457
- children: /* @__PURE__ */ A(ze, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
458
- }), /* @__PURE__ */ j("div", {
457
+ children: /* @__PURE__ */ N(Le, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
458
+ }), /* @__PURE__ */ P("div", {
459
459
  className: "min-w-0 flex-1",
460
- children: [/* @__PURE__ */ A("p", {
460
+ children: [/* @__PURE__ */ N("p", {
461
461
  className: "text-xs sm:text-sm text-text-secondary",
462
- children: S("sessions.filterAgent", "Agent")
463
- }), /* @__PURE__ */ A("p", {
462
+ children: w("sessions.filterAgent", "Agent")
463
+ }), /* @__PURE__ */ N("p", {
464
464
  className: "font-semibold text-text-primary text-sm sm:text-base truncate",
465
- children: K?.name || S("targets.unknown", "Unknown")
465
+ children: K?.name || w("targets.unknown", "Unknown")
466
466
  })]
467
467
  })]
468
468
  })
469
469
  }) }),
470
- /* @__PURE__ */ A(N, { children: /* @__PURE__ */ A(_, {
470
+ /* @__PURE__ */ N(I, { children: /* @__PURE__ */ N(v, {
471
471
  className: "p-3 sm:p-4",
472
- children: /* @__PURE__ */ j("div", {
472
+ children: /* @__PURE__ */ P("div", {
473
473
  className: "flex items-center gap-2 sm:gap-3",
474
- children: [/* @__PURE__ */ A("div", {
474
+ children: [/* @__PURE__ */ N("div", {
475
475
  className: "w-8 h-8 sm:w-10 sm:h-10 rounded-lg bg-bg-sunken flex items-center justify-center flex-shrink-0",
476
- children: /* @__PURE__ */ A(D, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
477
- }), /* @__PURE__ */ j("div", {
476
+ children: /* @__PURE__ */ N(A, { className: "w-4 h-4 sm:w-5 sm:h-5 text-text-secondary" })
477
+ }), /* @__PURE__ */ P("div", {
478
478
  className: "min-w-0",
479
- children: [/* @__PURE__ */ A("p", {
479
+ children: [/* @__PURE__ */ N("p", {
480
480
  className: "text-xs sm:text-sm text-text-secondary",
481
- children: S("nav.sessions", "Sessions")
482
- }), /* @__PURE__ */ j("p", {
481
+ children: w("nav.sessions", "Sessions")
482
+ }), /* @__PURE__ */ P("p", {
483
483
  className: "font-semibold text-text-primary text-sm sm:text-base",
484
484
  children: [
485
485
  Kt,
486
486
  " ",
487
- S("health.active", "active")
487
+ w("health.active", "active")
488
488
  ]
489
489
  })]
490
490
  })]
@@ -492,33 +492,33 @@ function tt() {
492
492
  }) })
493
493
  ]
494
494
  }),
495
- /* @__PURE__ */ A("div", {
495
+ /* @__PURE__ */ N("div", {
496
496
  className: "border-b border-border-default",
497
- children: /* @__PURE__ */ j("nav", {
497
+ children: /* @__PURE__ */ P("nav", {
498
498
  className: "flex gap-1 -mb-px overflow-x-auto pb-1",
499
- "aria-label": S("vibeDetails.tabsAriaLabel", "Vibe tabs"),
499
+ "aria-label": w("vibeDetails.tabsAriaLabel", "Vibe tabs"),
500
500
  children: [
501
501
  Yt.map((e) => {
502
- let t = e.icon, n = Z === e.id;
503
- return /* @__PURE__ */ j("button", {
504
- onClick: () => Q(e.id),
502
+ let t = e.icon, n = X === e.id;
503
+ return /* @__PURE__ */ P("button", {
504
+ onClick: () => Z(e.id),
505
505
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${n ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
506
506
  "aria-selected": n,
507
507
  role: "tab",
508
508
  children: [
509
- /* @__PURE__ */ A(t, { className: "w-4 h-4" }),
509
+ /* @__PURE__ */ N(t, { className: "w-4 h-4" }),
510
510
  e.label,
511
- e.badge && /* @__PURE__ */ A("span", {
511
+ e.badge && /* @__PURE__ */ N("span", {
512
512
  className: `hidden rounded-full px-1.5 py-0.5 text-[10px] sm:inline-flex sm:text-xs ${n ? "bg-action-primary-bg/10 text-action-primary-bg" : "bg-bg-sunken text-text-muted"}`,
513
513
  children: e.badge
514
514
  })
515
515
  ]
516
516
  }, e.id);
517
517
  }),
518
- Y && X.data.map((e) => {
519
- let t = Z === e.contribution.id;
520
- return /* @__PURE__ */ A("button", {
521
- onClick: () => Q(e.contribution.id),
518
+ J && Y.data.map((e) => {
519
+ let t = X === e.contribution.id;
520
+ return /* @__PURE__ */ N("button", {
521
+ onClick: () => Z(e.contribution.id),
522
522
  className: `flex shrink-0 items-center gap-1.5 px-3 py-2.5 text-xs sm:gap-2 sm:px-4 sm:text-sm font-medium border-b-2 transition-colors whitespace-nowrap ${t ? "border-action-primary-bg text-action-primary-bg" : "border-transparent text-text-secondary hover:text-text-primary hover:border-border-default"}`,
523
523
  "aria-selected": t,
524
524
  role: "tab",
@@ -526,16 +526,16 @@ function tt() {
526
526
  children: e.contribution.title
527
527
  }, `plugin-${e.contribution.id}`);
528
528
  }),
529
- Y && G && /* @__PURE__ */ j("button", {
529
+ J && G && /* @__PURE__ */ P("button", {
530
530
  type: "button",
531
- onClick: () => Mt(!0),
531
+ onClick: () => Pt(!0),
532
532
  className: "flex shrink-0 items-center gap-1 px-2 py-2 text-xs sm:text-sm border-b-2 border-transparent text-text-secondary hover:text-text-primary hover:border-border-default",
533
533
  title: "Install a UI plugin tab",
534
534
  "aria-label": "Add tab",
535
- children: [/* @__PURE__ */ A("span", {
535
+ children: [/* @__PURE__ */ N("span", {
536
536
  "aria-hidden": !0,
537
537
  children: "+"
538
- }), /* @__PURE__ */ A("span", {
538
+ }), /* @__PURE__ */ N("span", {
539
539
  className: "hidden sm:inline",
540
540
  children: "Add tab"
541
541
  })]
@@ -543,10 +543,10 @@ function tt() {
543
543
  ]
544
544
  })
545
545
  }),
546
- /* @__PURE__ */ j(Ge, {
546
+ /* @__PURE__ */ P(We, {
547
547
  mode: "wait",
548
548
  children: [
549
- Z === "overview" && /* @__PURE__ */ j(k.div, {
549
+ X === "overview" && /* @__PURE__ */ P(M.div, {
550
550
  initial: {
551
551
  opacity: 0,
552
552
  y: 8
@@ -562,50 +562,50 @@ function tt() {
562
562
  transition: { duration: .2 },
563
563
  className: "space-y-6",
564
564
  children: [
565
- B.description && /* @__PURE__ */ A(_, { children: /* @__PURE__ */ A("div", {
565
+ B.description && /* @__PURE__ */ N(v, { children: /* @__PURE__ */ N("div", {
566
566
  className: "p-4",
567
- children: /* @__PURE__ */ A("p", {
567
+ children: /* @__PURE__ */ N("p", {
568
568
  className: "text-text-primary",
569
569
  children: B.description
570
570
  })
571
571
  }) }),
572
- !Nt && /* @__PURE__ */ A(pe, {
572
+ !Q && /* @__PURE__ */ N(de, {
573
573
  vibeId: B.id,
574
- tr: S
574
+ tr: w
575
575
  }),
576
- /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
576
+ /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
577
577
  className: "p-3 sm:p-4 border-b border-border-default",
578
- children: /* @__PURE__ */ j("h3", {
578
+ children: /* @__PURE__ */ P("h3", {
579
579
  className: "font-semibold text-text-primary flex items-center gap-2 text-sm sm:text-base",
580
- children: [/* @__PURE__ */ A(Oe, { className: "w-4 h-4 sm:w-5 sm:h-5" }), S("vibeDetails.path", "Path")]
580
+ children: [/* @__PURE__ */ N(Ee, { className: "w-4 h-4 sm:w-5 sm:h-5" }), w("vibeDetails.path", "Path")]
581
581
  })
582
- }), /* @__PURE__ */ A("div", {
582
+ }), /* @__PURE__ */ N("div", {
583
583
  className: "p-3 sm:p-4",
584
- children: /* @__PURE__ */ A("div", {
584
+ children: /* @__PURE__ */ N("div", {
585
585
  className: "bg-bg-sunken rounded-md p-2 sm:p-3 font-mono text-xs sm:text-sm text-text-primary overflow-x-auto break-all",
586
586
  children: B.path
587
587
  })
588
588
  })] }),
589
- /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
589
+ /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
590
590
  className: "p-4 border-b border-border-default",
591
- children: /* @__PURE__ */ j("h3", {
591
+ children: /* @__PURE__ */ P("h3", {
592
592
  className: "font-semibold text-text-primary flex items-center gap-2",
593
- children: [/* @__PURE__ */ A(Te, { className: "w-5 h-5" }), S("vibeDetails.timeline", "Timeline")]
593
+ children: [/* @__PURE__ */ N(Ce, { className: "w-5 h-5" }), w("vibeDetails.timeline", "Timeline")]
594
594
  })
595
- }), /* @__PURE__ */ A("div", {
595
+ }), /* @__PURE__ */ N("div", {
596
596
  className: "p-4",
597
- children: /* @__PURE__ */ j("div", {
597
+ children: /* @__PURE__ */ P("div", {
598
598
  className: "grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm",
599
- children: [/* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
599
+ children: [/* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("p", {
600
600
  className: "text-text-secondary",
601
- children: S("vibeDetails.created", "Created")
602
- }), /* @__PURE__ */ A("p", {
601
+ children: w("vibeDetails.created", "Created")
602
+ }), /* @__PURE__ */ N("p", {
603
603
  className: "font-medium text-text-primary",
604
604
  children: Ut(B.createdAt)
605
- })] }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
605
+ })] }), /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("p", {
606
606
  className: "text-text-secondary",
607
- children: S("vibeDetails.updated", "Updated")
608
- }), /* @__PURE__ */ A("p", {
607
+ children: w("vibeDetails.updated", "Updated")
608
+ }), /* @__PURE__ */ N("p", {
609
609
  className: "font-medium text-text-primary",
610
610
  children: Ut(B.updatedAt)
611
611
  })] })]
@@ -613,7 +613,7 @@ function tt() {
613
613
  })] })
614
614
  ]
615
615
  }, "overview"),
616
- Z === "config" && /* @__PURE__ */ j(k.div, {
616
+ X === "config" && /* @__PURE__ */ P(M.div, {
617
617
  initial: {
618
618
  opacity: 0,
619
619
  y: 8
@@ -629,17 +629,17 @@ function tt() {
629
629
  transition: { duration: .2 },
630
630
  className: "space-y-6",
631
631
  children: [
632
- /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
632
+ /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
633
633
  className: "p-4 border-b border-border-default",
634
- children: /* @__PURE__ */ j("h3", {
634
+ children: /* @__PURE__ */ P("h3", {
635
635
  className: "font-semibold text-text-primary flex items-center gap-2",
636
- children: [/* @__PURE__ */ A(He, { className: "w-5 h-5" }), S("vibeDetails.environmentVariables", "Environment Variables")]
636
+ children: [/* @__PURE__ */ N(Ve, { className: "w-5 h-5" }), w("vibeDetails.environmentVariables", "Environment Variables")]
637
637
  })
638
- }), /* @__PURE__ */ A("div", {
638
+ }), /* @__PURE__ */ N("div", {
639
639
  className: "p-4",
640
- children: B.environmentVariables && Object.keys(B.environmentVariables).length > 0 ? /* @__PURE__ */ A("div", {
640
+ children: B.environmentVariables && Object.keys(B.environmentVariables).length > 0 ? /* @__PURE__ */ N("div", {
641
641
  className: "flex flex-wrap gap-2",
642
- children: Object.entries(B.environmentVariables).map(([e, t]) => /* @__PURE__ */ j("span", {
642
+ children: Object.entries(B.environmentVariables).map(([e, t]) => /* @__PURE__ */ P("span", {
643
643
  className: "px-3 py-1 bg-bg-sunken text-text-primary text-sm rounded-full font-mono",
644
644
  children: [
645
645
  e,
@@ -647,52 +647,52 @@ function tt() {
647
647
  String(t)
648
648
  ]
649
649
  }, e))
650
- }) : /* @__PURE__ */ A("p", {
650
+ }) : /* @__PURE__ */ N("p", {
651
651
  className: "text-text-secondary",
652
- children: S("vibeDetails.noEnvironmentVariables", "No environment variables configured")
652
+ children: w("vibeDetails.noEnvironmentVariables", "No environment variables configured")
653
653
  })
654
654
  })] }),
655
- /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
655
+ /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
656
656
  className: "p-4 border-b border-border-default",
657
- children: /* @__PURE__ */ j("h3", {
657
+ children: /* @__PURE__ */ P("h3", {
658
658
  className: "font-semibold text-text-primary flex items-center gap-2",
659
- children: [/* @__PURE__ */ A(Ve, { className: "w-5 h-5" }), S("vibeDetails.tags", "Tags")]
659
+ children: [/* @__PURE__ */ N(Be, { className: "w-5 h-5" }), w("vibeDetails.tags", "Tags")]
660
660
  })
661
- }), /* @__PURE__ */ A("div", {
661
+ }), /* @__PURE__ */ N("div", {
662
662
  className: "p-4",
663
- children: /* @__PURE__ */ A(m, {
663
+ children: /* @__PURE__ */ N(h, {
664
664
  entityType: "VIBECONTROLS_VIBE",
665
665
  entityId: B.id
666
666
  })
667
667
  })] }),
668
- /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ j("div", {
668
+ /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ P("div", {
669
669
  className: "p-4 border-b border-border-default",
670
- children: [/* @__PURE__ */ j("h3", {
670
+ children: [/* @__PURE__ */ P("h3", {
671
671
  className: "font-semibold text-text-primary flex items-center gap-2",
672
- children: [/* @__PURE__ */ A(Be, { className: "w-5 h-5" }), S("vibeDetails.features", "Features")]
673
- }), /* @__PURE__ */ A("p", {
672
+ children: [/* @__PURE__ */ N(Re, { className: "w-5 h-5" }), w("vibeDetails.features", "Features")]
673
+ }), /* @__PURE__ */ N("p", {
674
674
  className: "text-sm text-text-secondary mt-1",
675
- children: S("vibeDetails.featuresDescription", "Toggle which sections show up on this vibe. Changes apply to everyone viewing the vibe.")
675
+ children: w("vibeDetails.featuresDescription", "Toggle which sections show up on this vibe. Changes apply to everyone viewing the vibe.")
676
676
  })]
677
- }), /* @__PURE__ */ A("div", {
677
+ }), /* @__PURE__ */ N("div", {
678
678
  className: "p-4 space-y-2",
679
- children: it.map((e) => {
679
+ children: R.map((e) => {
680
680
  let t = H(e.id);
681
- return /* @__PURE__ */ j("label", {
681
+ return /* @__PURE__ */ P("label", {
682
682
  className: "flex items-center justify-between gap-4 py-2 cursor-pointer",
683
- children: [/* @__PURE__ */ A("span", {
683
+ children: [/* @__PURE__ */ N("span", {
684
684
  className: "text-sm font-medium text-text-primary",
685
685
  children: e.label
686
- }), /* @__PURE__ */ A("input", {
686
+ }), /* @__PURE__ */ N("input", {
687
687
  type: "checkbox",
688
688
  role: "switch",
689
689
  "aria-label": e.label,
690
690
  checked: t,
691
- disabled: ot || !B.id,
691
+ disabled: nt || !B.id,
692
692
  onChange: async (t) => {
693
693
  let n = t.target.checked;
694
694
  try {
695
- await at({
695
+ await tt({
696
696
  variables: {
697
697
  id: B.id,
698
698
  featureId: e.id,
@@ -722,7 +722,7 @@ function tt() {
722
722
  })] })
723
723
  ]
724
724
  }, "config"),
725
- Z === "git" && H("git") && /* @__PURE__ */ A(k.div, {
725
+ X === "git" && H("git") && /* @__PURE__ */ N(M.div, {
726
726
  initial: {
727
727
  opacity: 0,
728
728
  y: 8
@@ -737,57 +737,57 @@ function tt() {
737
737
  },
738
738
  transition: { duration: .2 },
739
739
  className: "space-y-6",
740
- children: /* @__PURE__ */ A(v, {
740
+ children: /* @__PURE__ */ N(te, {
741
741
  agentId: G?.id ?? null,
742
742
  required: ["@vibecontrols/vibe-plugin-tool-git"],
743
743
  mode: "all",
744
- eyebrow: S("vibeDetails.gitPluginEyebrow", "Git plugin required"),
745
- title: S("vibeDetails.gitPluginTitle", "Install the git plugin"),
746
- description: S("vibeDetails.gitPluginDescription", "Live git branch, status, and remote data for this vibe are served by the vibe-plugin-tool-git agent plugin."),
747
- children: Jt ? /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
744
+ eyebrow: w("vibeDetails.gitPluginEyebrow", "Git plugin required"),
745
+ title: w("vibeDetails.gitPluginTitle", "Install the git plugin"),
746
+ description: w("vibeDetails.gitPluginDescription", "Live git branch, status, and remote data for this vibe are served by the vibe-plugin-tool-git agent plugin."),
747
+ children: Jt ? /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
748
748
  className: "p-4 border-b border-border-default",
749
- children: /* @__PURE__ */ j("h3", {
749
+ children: /* @__PURE__ */ P("h3", {
750
750
  className: "font-semibold text-text-primary flex items-center gap-2",
751
- children: [/* @__PURE__ */ A(ke, { className: "w-5 h-5" }), S("vibeDetails.gitInformation", "Git Information")]
751
+ children: [/* @__PURE__ */ N(De, { className: "w-5 h-5" }), w("vibeDetails.gitInformation", "Git Information")]
752
752
  })
753
- }), /* @__PURE__ */ j("div", {
753
+ }), /* @__PURE__ */ P("div", {
754
754
  className: "p-4 space-y-3",
755
- children: [/* @__PURE__ */ j("div", {
755
+ children: [/* @__PURE__ */ P("div", {
756
756
  className: "flex items-center gap-4 flex-wrap",
757
- children: [B.gitBranch && /* @__PURE__ */ j("div", {
757
+ children: [B.gitBranch && /* @__PURE__ */ P("div", {
758
758
  className: "flex items-center gap-2",
759
- children: [/* @__PURE__ */ j("span", {
759
+ children: [/* @__PURE__ */ P("span", {
760
760
  className: "text-sm text-text-secondary",
761
- children: [S("vibeDetails.branch", "Branch"), ":"]
762
- }), /* @__PURE__ */ A("span", {
761
+ children: [w("vibeDetails.branch", "Branch"), ":"]
762
+ }), /* @__PURE__ */ N("span", {
763
763
  className: "px-2 py-1 bg-bg-sunken text-text-primary text-sm rounded font-mono",
764
764
  children: B.gitBranch
765
765
  })]
766
- }), B.gitStatus && /* @__PURE__ */ j("div", {
766
+ }), B.gitStatus && /* @__PURE__ */ P("div", {
767
767
  className: "flex items-center gap-2",
768
- children: [/* @__PURE__ */ j("span", {
768
+ children: [/* @__PURE__ */ P("span", {
769
769
  className: "text-sm text-text-secondary",
770
- children: [S("sessions.filterStatus", "Status"), ":"]
771
- }), /* @__PURE__ */ A("span", {
770
+ children: [w("sessions.filterStatus", "Status"), ":"]
771
+ }), /* @__PURE__ */ N("span", {
772
772
  className: `font-medium ${Wt(B.gitStatus)}`,
773
773
  children: B.gitStatus
774
774
  })]
775
775
  })]
776
- }), B.gitRemote && /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("span", {
776
+ }), B.gitRemote && /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ P("span", {
777
777
  className: "text-sm text-text-secondary",
778
- children: [S("vibeDetails.remote", "Remote"), ":"]
779
- }), /* @__PURE__ */ A("p", {
778
+ children: [w("vibeDetails.remote", "Remote"), ":"]
779
+ }), /* @__PURE__ */ N("p", {
780
780
  className: "font-mono text-sm text-text-primary mt-1 break-all",
781
781
  children: B.gitRemote
782
782
  })] })]
783
- })] }) : /* @__PURE__ */ A(h, {
784
- icon: /* @__PURE__ */ A(ke, { className: "w-8 h-8 text-text-secondary" }),
785
- title: S("vibeDetails.noGitInformation", "No git information"),
786
- description: S("vibeDetails.noGitInformationDescription", "This vibe does not have any git repository linked")
783
+ })] }) : /* @__PURE__ */ N(g, {
784
+ icon: /* @__PURE__ */ N(De, { className: "w-8 h-8 text-text-secondary" }),
785
+ title: w("vibeDetails.noGitInformation", "No git information"),
786
+ description: w("vibeDetails.noGitInformationDescription", "This vibe does not have any git repository linked")
787
787
  })
788
788
  })
789
789
  }, "git"),
790
- Z === "sessions" && H("sessions") && /* @__PURE__ */ A(k.div, {
790
+ X === "sessions" && H("sessions") && /* @__PURE__ */ N(M.div, {
791
791
  initial: {
792
792
  opacity: 0,
793
793
  y: 8
@@ -801,66 +801,66 @@ function tt() {
801
801
  y: -8
802
802
  },
803
803
  transition: { duration: .2 },
804
- children: /* @__PURE__ */ A(v, {
804
+ children: /* @__PURE__ */ N(te, {
805
805
  agentId: G?.id ?? null,
806
806
  requirements: [{
807
807
  packages: ["@vibecontrols/vibe-plugin-session-manager"],
808
808
  mode: "all",
809
- eyebrow: S("vibeDetails.sessionsManagerEyebrow", "Session manager required"),
810
- title: S("vibeDetails.sessionsManagerTitle", "Install the session manager"),
811
- description: S("vibeDetails.sessionsManagerDescription", "Sessions are orchestrated by the unified session manager plugin. Install it to continue.")
809
+ eyebrow: w("vibeDetails.sessionsManagerEyebrow", "Session manager required"),
810
+ title: w("vibeDetails.sessionsManagerTitle", "Install the session manager"),
811
+ description: w("vibeDetails.sessionsManagerDescription", "Sessions are orchestrated by the unified session manager plugin. Install it to continue.")
812
812
  }, {
813
- packages: ne,
813
+ packages: ee,
814
814
  mode: "any",
815
- eyebrow: S("vibeDetails.sessionProviderEyebrow", "Session provider required"),
816
- title: S("vibeDetails.sessionProviderTitle", "Pick a session provider"),
817
- description: S("vibeDetails.sessionProviderDescription", "Choose the terminal multiplexer your sessions should run on. You can install more providers later.")
815
+ eyebrow: w("vibeDetails.sessionProviderEyebrow", "Session provider required"),
816
+ title: w("vibeDetails.sessionProviderTitle", "Pick a session provider"),
817
+ description: w("vibeDetails.sessionProviderDescription", "Choose the terminal multiplexer your sessions should run on. You can install more providers later.")
818
818
  }],
819
- children: /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ j("div", {
819
+ children: /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ P("div", {
820
820
  className: "p-4 border-b border-border-default flex items-center justify-between",
821
- children: [/* @__PURE__ */ j("h3", {
821
+ children: [/* @__PURE__ */ P("h3", {
822
822
  className: "font-semibold text-text-primary flex items-center gap-2",
823
823
  children: [
824
- /* @__PURE__ */ A(D, { className: "w-5 h-5" }),
825
- S("nav.sessions", "Sessions"),
824
+ /* @__PURE__ */ N(A, { className: "w-5 h-5" }),
825
+ w("nav.sessions", "Sessions"),
826
826
  " (",
827
827
  W.length,
828
828
  ")"
829
829
  ]
830
- }), /* @__PURE__ */ j("button", {
830
+ }), /* @__PURE__ */ P("button", {
831
831
  onClick: Rt,
832
832
  className: "flex items-center gap-1 px-2 py-1 text-sm bg-bg-sunken text-text-primary rounded hover:bg-bg-sunken/80 transition-colors",
833
- children: [/* @__PURE__ */ A(E, { className: "w-4 h-4" }), S("vibeDetails.new", "New")]
833
+ children: [/* @__PURE__ */ N(k, { className: "w-4 h-4" }), w("vibeDetails.new", "New")]
834
834
  })]
835
- }), W.length > 0 ? /* @__PURE__ */ A(qe, {
835
+ }), W.length > 0 ? /* @__PURE__ */ N(Ke, {
836
836
  className: "divide-y divide-border-primary",
837
- children: W.map((e) => /* @__PURE__ */ A(N, {
837
+ children: W.map((e) => /* @__PURE__ */ N(I, {
838
838
  variant: "fadeRight",
839
- children: /* @__PURE__ */ j("div", {
839
+ children: /* @__PURE__ */ P("div", {
840
840
  onClick: () => Vt(e.id),
841
841
  className: "p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors",
842
- children: [/* @__PURE__ */ j("div", {
842
+ children: [/* @__PURE__ */ P("div", {
843
843
  className: "flex items-center gap-3 min-w-0",
844
- children: [/* @__PURE__ */ A(D, { className: "w-5 h-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ j("div", {
844
+ children: [/* @__PURE__ */ N(A, { className: "w-5 h-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ P("div", {
845
845
  className: "min-w-0",
846
- children: [/* @__PURE__ */ A("p", {
846
+ children: [/* @__PURE__ */ N("p", {
847
847
  className: "font-medium text-text-primary truncate",
848
848
  children: e.name
849
- }), /* @__PURE__ */ A("p", {
849
+ }), /* @__PURE__ */ N("p", {
850
850
  className: "text-sm text-text-secondary truncate",
851
851
  children: e.type
852
852
  })]
853
853
  })]
854
- }), /* @__PURE__ */ A(g, { status: e.status })]
854
+ }), /* @__PURE__ */ N(_, { status: e.status })]
855
855
  })
856
856
  }, e.id))
857
- }) : /* @__PURE__ */ A("div", {
857
+ }) : /* @__PURE__ */ N("div", {
858
858
  className: "p-6 text-center text-text-secondary",
859
- children: S("vibeDetails.noSessionsForVibe", "No sessions for this vibe")
859
+ children: w("vibeDetails.noSessionsForVibe", "No sessions for this vibe")
860
860
  })] })
861
861
  })
862
862
  }, "sessions"),
863
- Z === "notes" && H("notes") && /* @__PURE__ */ A(k.div, {
863
+ X === "notes" && H("notes") && /* @__PURE__ */ N(M.div, {
864
864
  initial: {
865
865
  opacity: 0,
866
866
  y: 8
@@ -875,12 +875,12 @@ function tt() {
875
875
  },
876
876
  transition: { duration: .2 },
877
877
  className: "space-y-6",
878
- children: /* @__PURE__ */ A(ae, {
878
+ children: /* @__PURE__ */ N(x, {
879
879
  context: "vibe",
880
880
  vibeId: B.id
881
881
  })
882
882
  }, "notes"),
883
- Z === "docs" && H("docs") && /* @__PURE__ */ A(k.div, {
883
+ X === "docs" && H("docs") && /* @__PURE__ */ N(M.div, {
884
884
  initial: {
885
885
  opacity: 0,
886
886
  y: 8
@@ -895,9 +895,9 @@ function tt() {
895
895
  },
896
896
  transition: { duration: .2 },
897
897
  className: "space-y-6",
898
- children: /* @__PURE__ */ A(de, { vibeId: B.id })
898
+ children: /* @__PURE__ */ N(le, { vibeId: B.id })
899
899
  }, "docs"),
900
- Z === "scorecard" && H("scorecard") && /* @__PURE__ */ A(k.div, {
900
+ X === "scorecard" && H("scorecard") && /* @__PURE__ */ N(M.div, {
901
901
  initial: {
902
902
  opacity: 0,
903
903
  y: 8
@@ -912,12 +912,12 @@ function tt() {
912
912
  },
913
913
  transition: { duration: .2 },
914
914
  className: "space-y-6",
915
- children: /* @__PURE__ */ A(ue, {
915
+ children: /* @__PURE__ */ N(ce, {
916
916
  ownerType: "VIBE",
917
917
  ownerId: B.id
918
918
  })
919
919
  }, "scorecard"),
920
- Z === "catalogs" && H("catalogs") && /* @__PURE__ */ A(k.div, {
920
+ X === "catalogs" && H("catalogs") && /* @__PURE__ */ N(M.div, {
921
921
  initial: {
922
922
  opacity: 0,
923
923
  y: 8
@@ -932,13 +932,13 @@ function tt() {
932
932
  },
933
933
  transition: { duration: .2 },
934
934
  className: "space-y-6",
935
- children: /* @__PURE__ */ A(nt, {
935
+ children: /* @__PURE__ */ N($e, {
936
936
  vibeId: B.id,
937
- tr: S,
938
- navigate: x
937
+ tr: w,
938
+ navigate: C
939
939
  })
940
940
  }, "catalogs"),
941
- Z === "graphqlPlayground" && H("graphqlPlayground") && /* @__PURE__ */ A(k.div, {
941
+ X === "graphqlPlayground" && H("graphqlPlayground") && /* @__PURE__ */ N(M.div, {
942
942
  initial: {
943
943
  opacity: 0,
944
944
  y: 8
@@ -953,37 +953,54 @@ function tt() {
953
953
  },
954
954
  transition: { duration: .2 },
955
955
  className: "space-y-6",
956
- children: /* @__PURE__ */ A(v, {
956
+ children: /* @__PURE__ */ N(te, {
957
957
  agentId: G?.id ?? null,
958
958
  required: ["@vibecontrols/vibe-plugin-tool-graphiql"],
959
959
  mode: "all",
960
- eyebrow: S("vibeDetails.graphqlPluginEyebrow", "GraphQL playground plugin required"),
961
- title: S("vibeDetails.graphqlPluginTitle", "Install the GraphQL playground"),
962
- description: S("vibeDetails.graphqlPluginDescription", "The GraphQL Playground is served by the graphiql agent plugin. Install it to continue."),
963
- children: q ? /* @__PURE__ */ A(rt, {
960
+ eyebrow: w("vibeDetails.graphqlPluginEyebrow", "GraphQL playground plugin required"),
961
+ title: w("vibeDetails.graphqlPluginTitle", "Install the GraphQL playground"),
962
+ description: w("vibeDetails.graphqlPluginDescription", "The GraphQL Playground is served by the graphiql agent plugin. Install it to continue."),
963
+ children: At ? /* @__PURE__ */ N(et, {
964
964
  vibeId: B.id,
965
965
  agentId: G?.id ?? null,
966
- profile: J,
967
- tunnelUrl: q,
968
- apiKey: kt,
966
+ profile: q,
967
+ tunnelUrl: At,
968
+ apiKey: jt,
969
969
  type: "graphql",
970
- tr: S
971
- }) : /* @__PURE__ */ A(h, {
972
- icon: /* @__PURE__ */ A(Fe, { className: "w-8 h-8 text-text-secondary" }),
973
- title: S("vibeDetails.noAgentTunnel", "No agent tunnel available"),
974
- description: S("vibeDetails.noAgentTunnelDesc2", "The GraphQL playground requires an active agent with a tunnel URL.")
970
+ tr: w
971
+ }) : /* @__PURE__ */ N(g, {
972
+ icon: /* @__PURE__ */ N(Ne, { className: "w-8 h-8 text-text-secondary" }),
973
+ title: w("vibeDetails.noAgentTunnel", "No agent tunnel available"),
974
+ description: w("vibeDetails.noAgentTunnelDesc2", "The GraphQL playground requires an active agent with a tunnel URL.")
975
975
  })
976
976
  })
977
977
  }, "graphqlPlayground"),
978
- Z === "gitops" && H("gitops") && /* @__PURE__ */ A(fe, {
978
+ X === "gitops" && H("gitops") && /* @__PURE__ */ N(ue, {
979
979
  vibeId: r || "",
980
980
  agentId: G?.id ?? "",
981
- profile: J,
982
- tunnelUrl: q,
983
- apiKey: kt,
984
- tr: S
981
+ profile: q,
982
+ tunnelUrl: At,
983
+ apiKey: jt,
984
+ tr: w
985
985
  }),
986
- Z === "related" && H("related") && /* @__PURE__ */ A(k.div, {
986
+ X === "security" && H("security") && /* @__PURE__ */ N(M.div, {
987
+ initial: {
988
+ opacity: 0,
989
+ y: 8
990
+ },
991
+ animate: {
992
+ opacity: 1,
993
+ y: 0
994
+ },
995
+ exit: {
996
+ opacity: 0,
997
+ y: -8
998
+ },
999
+ transition: { duration: .2 },
1000
+ className: "space-y-6",
1001
+ children: /* @__PURE__ */ N(me, { vibeId: r || "" })
1002
+ }, "security"),
1003
+ X === "related" && H("related") && /* @__PURE__ */ N(M.div, {
987
1004
  initial: {
988
1005
  opacity: 0,
989
1006
  y: 8
@@ -998,97 +1015,97 @@ function tt() {
998
1015
  },
999
1016
  transition: { duration: .2 },
1000
1017
  className: "space-y-6",
1001
- children: qt > 0 ? /* @__PURE__ */ j(Ke, { children: [
1002
- Et.length > 0 && /* @__PURE__ */ j(_, { children: [/* @__PURE__ */ A("div", {
1018
+ children: qt > 0 ? /* @__PURE__ */ P(Ge, { children: [
1019
+ Dt.length > 0 && /* @__PURE__ */ P(v, { children: [/* @__PURE__ */ N("div", {
1003
1020
  className: "p-4 border-b border-border-default",
1004
- children: /* @__PURE__ */ j("h3", {
1021
+ children: /* @__PURE__ */ P("h3", {
1005
1022
  className: "font-semibold text-text-primary flex items-center gap-2",
1006
1023
  children: [
1007
- /* @__PURE__ */ A(O, { className: "w-5 h-5" }),
1008
- S("vibeDetails.childVibes", "Child Vibes"),
1024
+ /* @__PURE__ */ N(j, { className: "w-5 h-5" }),
1025
+ w("vibeDetails.childVibes", "Child Vibes"),
1009
1026
  " (",
1010
- Et.length,
1027
+ Dt.length,
1011
1028
  ")"
1012
1029
  ]
1013
1030
  })
1014
- }), /* @__PURE__ */ A(qe, {
1031
+ }), /* @__PURE__ */ N(Ke, {
1015
1032
  className: "divide-y divide-border-primary",
1016
- children: Et.map((e) => /* @__PURE__ */ A(N, {
1033
+ children: Dt.map((e) => /* @__PURE__ */ N(I, {
1017
1034
  variant: "fadeRight",
1018
- children: /* @__PURE__ */ j("div", {
1035
+ children: /* @__PURE__ */ P("div", {
1019
1036
  onClick: () => Ht(e.id),
1020
1037
  className: "p-4 flex items-center justify-between cursor-pointer hover:bg-bg-sunken/50 transition-colors",
1021
- children: [/* @__PURE__ */ j("div", {
1038
+ children: [/* @__PURE__ */ P("div", {
1022
1039
  className: "flex items-center gap-3 min-w-0",
1023
- children: [/* @__PURE__ */ A(O, { className: "w-5 h-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ j("div", {
1040
+ children: [/* @__PURE__ */ N(j, { className: "w-5 h-5 text-text-secondary flex-shrink-0" }), /* @__PURE__ */ P("div", {
1024
1041
  className: "min-w-0",
1025
- children: [/* @__PURE__ */ A("p", {
1042
+ children: [/* @__PURE__ */ N("p", {
1026
1043
  className: "font-medium text-text-primary truncate",
1027
1044
  children: e.name
1028
- }), /* @__PURE__ */ A("p", {
1045
+ }), /* @__PURE__ */ N("p", {
1029
1046
  className: "text-sm text-text-secondary truncate",
1030
1047
  children: e.type
1031
1048
  })]
1032
1049
  })]
1033
- }), /* @__PURE__ */ A(g, { status: e.status })]
1050
+ }), /* @__PURE__ */ N(_, { status: e.status })]
1034
1051
  })
1035
1052
  }, e.id))
1036
1053
  })] }),
1037
- Dt && /* @__PURE__ */ A(_, {
1038
- onClick: () => Ht(Dt.id),
1054
+ Ot && /* @__PURE__ */ N(v, {
1055
+ onClick: () => Ht(Ot.id),
1039
1056
  hoverable: !0,
1040
- children: /* @__PURE__ */ j("div", {
1057
+ children: /* @__PURE__ */ P("div", {
1041
1058
  className: "p-4 flex items-center gap-3",
1042
- children: [/* @__PURE__ */ A("div", {
1059
+ children: [/* @__PURE__ */ N("div", {
1043
1060
  className: "w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center",
1044
- children: /* @__PURE__ */ A(O, { className: "w-5 h-5 text-text-secondary" })
1045
- }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
1061
+ children: /* @__PURE__ */ N(j, { className: "w-5 h-5 text-text-secondary" })
1062
+ }), /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("p", {
1046
1063
  className: "text-sm text-text-secondary",
1047
- children: S("vibeDetails.parentVibe", "Parent Vibe")
1048
- }), /* @__PURE__ */ A("p", {
1064
+ children: w("vibeDetails.parentVibe", "Parent Vibe")
1065
+ }), /* @__PURE__ */ N("p", {
1049
1066
  className: "font-medium text-text-primary",
1050
- children: Dt.name
1067
+ children: Ot.name
1051
1068
  })] })]
1052
1069
  })
1053
1070
  }),
1054
- K && /* @__PURE__ */ A(_, {
1071
+ K && /* @__PURE__ */ N(v, {
1055
1072
  onClick: Bt,
1056
1073
  hoverable: !0,
1057
- children: /* @__PURE__ */ j("div", {
1074
+ children: /* @__PURE__ */ P("div", {
1058
1075
  className: "p-4 flex items-center justify-between",
1059
- children: [/* @__PURE__ */ j("div", {
1076
+ children: [/* @__PURE__ */ P("div", {
1060
1077
  className: "flex items-center gap-3",
1061
- children: [/* @__PURE__ */ A("div", {
1078
+ children: [/* @__PURE__ */ N("div", {
1062
1079
  className: "w-10 h-10 rounded-lg bg-bg-sunken flex items-center justify-center",
1063
- children: /* @__PURE__ */ A(ze, { className: "w-5 h-5 text-text-secondary" })
1064
- }), /* @__PURE__ */ j("div", { children: [
1065
- /* @__PURE__ */ A("p", {
1080
+ children: /* @__PURE__ */ N(Le, { className: "w-5 h-5 text-text-secondary" })
1081
+ }), /* @__PURE__ */ P("div", { children: [
1082
+ /* @__PURE__ */ N("p", {
1066
1083
  className: "text-sm text-text-secondary",
1067
- children: S("vibeDetails.runningOnAgent", "Running on Agent")
1084
+ children: w("vibeDetails.runningOnAgent", "Running on Agent")
1068
1085
  }),
1069
- /* @__PURE__ */ A("p", {
1086
+ /* @__PURE__ */ N("p", {
1070
1087
  className: "font-medium text-text-primary",
1071
1088
  children: K.name
1072
1089
  }),
1073
- /* @__PURE__ */ A("p", {
1090
+ /* @__PURE__ */ N("p", {
1074
1091
  className: "text-sm text-text-secondary",
1075
1092
  children: K.hostname
1076
1093
  })
1077
1094
  ] })]
1078
- }), /* @__PURE__ */ A(g, { status: K.isActive ? "ACTIVE" : "OFFLINE" })]
1095
+ }), /* @__PURE__ */ N(_, { status: K.isActive ? "ACTIVE" : "OFFLINE" })]
1079
1096
  })
1080
1097
  })
1081
- ] }) : /* @__PURE__ */ A(h, {
1082
- icon: /* @__PURE__ */ A(Ne, { className: "w-8 h-8 text-text-secondary" }),
1083
- title: S("vibeDetails.noRelatedEntities", "No related entities"),
1084
- description: S("vibeDetails.noRelatedEntitiesDescription", "This vibe has no child vibes, parent vibe, or linked agent")
1098
+ ] }) : /* @__PURE__ */ N(g, {
1099
+ icon: /* @__PURE__ */ N(je, { className: "w-8 h-8 text-text-secondary" }),
1100
+ title: w("vibeDetails.noRelatedEntities", "No related entities"),
1101
+ description: w("vibeDetails.noRelatedEntitiesDescription", "This vibe has no child vibes, parent vibe, or linked agent")
1085
1102
  })
1086
1103
  }, "related"),
1087
- Y && (() => {
1088
- let e = X.data.find((e) => e.contribution.id === Z);
1104
+ J && (() => {
1105
+ let e = Y.data.find((e) => e.contribution.id === X);
1089
1106
  if (!e) return null;
1090
1107
  let t = e.tunnel, n = e.capabilities.restPaths.length > 0 ? e.capabilities.restPaths : [`/ui/${e.pluginKey}`];
1091
- return /* @__PURE__ */ A(k.div, {
1108
+ return /* @__PURE__ */ N(M.div, {
1092
1109
  initial: {
1093
1110
  opacity: 0,
1094
1111
  y: 8
@@ -1103,9 +1120,9 @@ function tt() {
1103
1120
  },
1104
1121
  transition: { duration: .2 },
1105
1122
  className: "space-y-6",
1106
- children: /* @__PURE__ */ A(_, { children: /* @__PURE__ */ A("div", {
1123
+ children: /* @__PURE__ */ N(v, { children: /* @__PURE__ */ N("div", {
1107
1124
  className: "p-0 h-[600px]",
1108
- children: /* @__PURE__ */ A(le, {
1125
+ children: /* @__PURE__ */ N(se, {
1109
1126
  contribution: e,
1110
1127
  tunnel: t,
1111
1128
  restPaths: n,
@@ -1125,106 +1142,106 @@ function tt() {
1125
1142
  })()
1126
1143
  ]
1127
1144
  }),
1128
- Y && G && /* @__PURE__ */ A(ce, {
1129
- isOpen: jt,
1130
- onClose: () => Mt(!1),
1145
+ J && G && /* @__PURE__ */ N(oe, {
1146
+ isOpen: Nt,
1147
+ onClose: () => Pt(!1),
1131
1148
  mountPoint: "vibe.detailTab",
1132
1149
  agentId: G.id,
1133
- profile: J ?? "default",
1150
+ profile: q ?? "default",
1134
1151
  onInstalled: () => {
1135
- X.refetch();
1152
+ Y.refetch();
1136
1153
  }
1137
1154
  }),
1138
- st && /* @__PURE__ */ A("div", {
1155
+ rt && /* @__PURE__ */ N("div", {
1139
1156
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
1140
- children: /* @__PURE__ */ j("div", {
1157
+ children: /* @__PURE__ */ P("div", {
1141
1158
  className: "bg-bg-surface rounded-lg p-6 w-full max-w-lg",
1142
1159
  children: [
1143
- /* @__PURE__ */ j("h2", {
1160
+ /* @__PURE__ */ P("h2", {
1144
1161
  className: "text-lg font-semibold text-text-primary mb-4",
1145
1162
  children: [
1146
- S("vibeDetails.newSessionFor", "New Session for"),
1163
+ w("vibeDetails.newSessionFor", "New Session for"),
1147
1164
  " ",
1148
1165
  B.name
1149
1166
  ]
1150
1167
  }),
1151
- lt && /* @__PURE__ */ A("div", {
1168
+ at && /* @__PURE__ */ N("div", {
1152
1169
  className: "mb-4 p-3 bg-status-error-bg text-status-error-text rounded-md text-sm",
1153
- children: lt
1170
+ children: at
1154
1171
  }),
1155
- /* @__PURE__ */ j("div", {
1172
+ /* @__PURE__ */ P("div", {
1156
1173
  className: "space-y-4",
1157
1174
  children: [
1158
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
1175
+ /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("label", {
1159
1176
  className: "block text-sm font-medium text-text-primary mb-1",
1160
- children: S("vibeDetails.sessionName", "Session Name")
1161
- }), /* @__PURE__ */ A("input", {
1162
- ref: I,
1177
+ children: w("vibeDetails.sessionName", "Session Name")
1178
+ }), /* @__PURE__ */ N("input", {
1179
+ ref: ut,
1163
1180
  type: "text",
1164
- placeholder: S("vibeDetails.sessionNamePlaceholder", "dev-terminal"),
1181
+ placeholder: w("vibeDetails.sessionNamePlaceholder", "dev-terminal"),
1165
1182
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
1166
1183
  })] }),
1167
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
1184
+ /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("label", {
1168
1185
  className: "block text-sm font-medium text-text-primary mb-1",
1169
- children: S("sessions.filterType", "Type")
1170
- }), /* @__PURE__ */ j("select", {
1171
- ref: L,
1186
+ children: w("sessions.filterType", "Type")
1187
+ }), /* @__PURE__ */ P("select", {
1188
+ ref: dt,
1172
1189
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary",
1173
1190
  children: [
1174
- /* @__PURE__ */ A("option", {
1191
+ /* @__PURE__ */ N("option", {
1175
1192
  value: "TERMINAL",
1176
- children: S("sessions.typeTerminal", "Terminal")
1193
+ children: w("sessions.typeTerminal", "Terminal")
1177
1194
  }),
1178
- /* @__PURE__ */ A("option", {
1195
+ /* @__PURE__ */ N("option", {
1179
1196
  value: "TMUX",
1180
- children: S("sessions.typeTmux", "TMUX")
1197
+ children: w("sessions.typeTmux", "TMUX")
1181
1198
  }),
1182
- /* @__PURE__ */ A("option", {
1199
+ /* @__PURE__ */ N("option", {
1183
1200
  value: "SSH",
1184
- children: S("sessions.typeSsh", "SSH")
1201
+ children: w("sessions.typeSsh", "SSH")
1185
1202
  }),
1186
- /* @__PURE__ */ A("option", {
1203
+ /* @__PURE__ */ N("option", {
1187
1204
  value: "SCRIPT",
1188
- children: S("sessions.typeScript", "Script")
1205
+ children: w("sessions.typeScript", "Script")
1189
1206
  }),
1190
- /* @__PURE__ */ A("option", {
1207
+ /* @__PURE__ */ N("option", {
1191
1208
  value: "CUSTOM",
1192
- children: S("sessions.typeCustom", "Custom")
1209
+ children: w("sessions.typeCustom", "Custom")
1193
1210
  })
1194
1211
  ]
1195
1212
  })] }),
1196
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
1213
+ /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("label", {
1197
1214
  className: "block text-sm font-medium text-text-primary mb-1",
1198
- children: S("sessions.command", "Command")
1199
- }), /* @__PURE__ */ A("input", {
1200
- ref: R,
1215
+ children: w("sessions.command", "Command")
1216
+ }), /* @__PURE__ */ N("input", {
1217
+ ref: ft,
1201
1218
  type: "text",
1202
- placeholder: S("vibeDetails.sessionCommandPlaceholder", "bash"),
1219
+ placeholder: w("vibeDetails.sessionCommandPlaceholder", "bash"),
1203
1220
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder"
1204
1221
  })] }),
1205
- /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("label", {
1222
+ /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("label", {
1206
1223
  className: "block text-sm font-medium text-text-primary mb-1",
1207
- children: S("vibeDetails.workingDirectory", "Working Directory")
1208
- }), /* @__PURE__ */ A("input", {
1209
- ref: z,
1224
+ children: w("vibeDetails.workingDirectory", "Working Directory")
1225
+ }), /* @__PURE__ */ N("input", {
1226
+ ref: pt,
1210
1227
  type: "text",
1211
1228
  defaultValue: B.path || "",
1212
1229
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary"
1213
1230
  })] })
1214
1231
  ]
1215
1232
  }),
1216
- /* @__PURE__ */ j("div", {
1233
+ /* @__PURE__ */ P("div", {
1217
1234
  className: "flex flex-col sm:flex-row justify-end gap-3 mt-6",
1218
- children: [/* @__PURE__ */ A("button", {
1219
- onClick: () => ct(!1),
1220
- disabled: ut,
1235
+ children: [/* @__PURE__ */ N("button", {
1236
+ onClick: () => it(!1),
1237
+ disabled: ot,
1221
1238
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
1222
- children: S("common.cancel", "Cancel")
1223
- }), /* @__PURE__ */ A("button", {
1239
+ children: w("common.cancel", "Cancel")
1240
+ }), /* @__PURE__ */ N("button", {
1224
1241
  onClick: zt,
1225
- disabled: ut,
1242
+ disabled: ot,
1226
1243
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50",
1227
- children: ut ? S("sessions.creating", "Creating...") : S("sessions.createSession", "Create Session")
1244
+ children: ot ? w("sessions.creating", "Creating...") : w("sessions.createSession", "Create Session")
1228
1245
  })]
1229
1246
  })
1230
1247
  ]
@@ -1233,70 +1250,70 @@ function tt() {
1233
1250
  ]
1234
1251
  });
1235
1252
  }
1236
- function nt({ vibeId: t, tr: n, navigate: i }) {
1237
- let [a, o] = w(!1), { data: c, loading: l, refetch: u } = r({ fetchPolicy: "cache-and-network" }), [ee] = e({ refetchQueries: ["GetVibeCatalogs"] }), [te] = s({ refetchQueries: ["GetVibeCatalogs"] }), d = c?.vibecontrolsCatalogs?.items ?? [], p = d.filter((e) => e.vibes?.some((e) => e.vibeId === t)), m = d.filter((e) => !e.vibes?.some((e) => e.vibeId === t)), g = async (e) => {
1238
- await ee({ variables: {
1253
+ function $e({ vibeId: t, tr: n, navigate: i }) {
1254
+ let [a, o] = E(!1), { data: c, loading: l, refetch: u } = r({ fetchPolicy: "cache-and-network" }), [d] = e({ refetchQueries: ["GetVibeCatalogs"] }), [f] = s({ refetchQueries: ["GetVibeCatalogs"] }), p = c?.vibecontrolsCatalogs?.items ?? [], m = p.filter((e) => e.vibes?.some((e) => e.vibeId === t)), h = p.filter((e) => !e.vibes?.some((e) => e.vibeId === t)), _ = async (e) => {
1255
+ await d({ variables: {
1239
1256
  catalogId: e,
1240
1257
  vibeId: t
1241
1258
  } }), await u(), o(!1);
1242
- }, ne = async (e) => {
1243
- await te({ variables: {
1259
+ }, ee = async (e) => {
1260
+ await f({ variables: {
1244
1261
  catalogId: e,
1245
1262
  vibeId: t
1246
1263
  } }), await u();
1247
1264
  };
1248
- return l && d.length === 0 ? /* @__PURE__ */ A(f, { message: n("vibeDetails.loadingCatalogs", "Loading catalogs...") }) : /* @__PURE__ */ j(Ke, { children: [
1249
- /* @__PURE__ */ j("div", {
1265
+ return l && p.length === 0 ? /* @__PURE__ */ N(b, { variant: "detail" }) : /* @__PURE__ */ P(Ge, { children: [
1266
+ /* @__PURE__ */ P("div", {
1250
1267
  className: "flex items-center justify-between",
1251
- children: [/* @__PURE__ */ j("h3", {
1268
+ children: [/* @__PURE__ */ P("h3", {
1252
1269
  className: "font-semibold text-text-primary flex items-center gap-2",
1253
1270
  children: [
1254
- /* @__PURE__ */ A(T, { className: "w-5 h-5" }),
1271
+ /* @__PURE__ */ N(O, { className: "w-5 h-5" }),
1255
1272
  n("vibeDetails.catalogsTitle", "Catalogs"),
1256
- /* @__PURE__ */ j("span", {
1273
+ /* @__PURE__ */ P("span", {
1257
1274
  className: "text-sm font-normal text-text-secondary",
1258
1275
  children: [
1259
1276
  "(",
1260
- p.length,
1277
+ m.length,
1261
1278
  ")"
1262
1279
  ]
1263
1280
  })
1264
1281
  ]
1265
- }), /* @__PURE__ */ j("button", {
1282
+ }), /* @__PURE__ */ P("button", {
1266
1283
  onClick: () => o(!0),
1267
1284
  className: "flex items-center gap-2 px-3 py-2 text-sm bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors",
1268
- children: [/* @__PURE__ */ A(E, { className: "w-4 h-4" }), n("vibeDetails.addToCatalog", "Add to Catalog")]
1285
+ children: [/* @__PURE__ */ N(k, { className: "w-4 h-4" }), n("vibeDetails.addToCatalog", "Add to Catalog")]
1269
1286
  })]
1270
1287
  }),
1271
- p.length > 0 ? /* @__PURE__ */ A("div", {
1288
+ m.length > 0 ? /* @__PURE__ */ N("div", {
1272
1289
  className: "space-y-2",
1273
- children: p.map((e) => /* @__PURE__ */ A(_, { children: /* @__PURE__ */ j("div", {
1290
+ children: m.map((e) => /* @__PURE__ */ N(v, { children: /* @__PURE__ */ P("div", {
1274
1291
  className: "p-3 flex items-center justify-between",
1275
- children: [/* @__PURE__ */ j("button", {
1292
+ children: [/* @__PURE__ */ P("button", {
1276
1293
  onClick: () => i(`/catalogs/${e.id}`),
1277
1294
  className: "flex items-center gap-3 text-left hover:opacity-80 transition-opacity",
1278
- children: [/* @__PURE__ */ A(T, { className: "w-5 h-5 text-action-primary-bg flex-shrink-0" }), /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
1295
+ children: [/* @__PURE__ */ N(O, { className: "w-5 h-5 text-action-primary-bg flex-shrink-0" }), /* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("p", {
1279
1296
  className: "font-medium text-text-primary text-sm",
1280
1297
  children: e.name
1281
- }), /* @__PURE__ */ A("p", {
1298
+ }), /* @__PURE__ */ N("p", {
1282
1299
  className: "text-xs text-text-secondary",
1283
1300
  children: e.visibility
1284
1301
  })] })]
1285
- }), /* @__PURE__ */ A("button", {
1286
- onClick: () => ne(e.id),
1302
+ }), /* @__PURE__ */ N("button", {
1303
+ onClick: () => ee(e.id),
1287
1304
  className: "p-1.5 text-text-muted hover:text-status-error-text hover:bg-status-error-bg rounded-md transition-colors",
1288
1305
  title: n("vibeDetails.removeFromCatalog", "Remove from catalog"),
1289
- children: /* @__PURE__ */ A(Ue, { className: "w-4 h-4" })
1306
+ children: /* @__PURE__ */ N(He, { className: "w-4 h-4" })
1290
1307
  })]
1291
1308
  }) }, e.id))
1292
- }) : /* @__PURE__ */ A(h, {
1293
- icon: /* @__PURE__ */ A(T, { className: "w-8 h-8 text-text-secondary" }),
1309
+ }) : /* @__PURE__ */ N(g, {
1310
+ icon: /* @__PURE__ */ N(O, { className: "w-8 h-8 text-text-secondary" }),
1294
1311
  title: n("vibeDetails.noCatalogs", "Not in any catalogs"),
1295
1312
  description: n("vibeDetails.noCatalogsDesc", "Add this vibe to catalogs to organize and track it alongside other components")
1296
1313
  }),
1297
- a && /* @__PURE__ */ A("div", {
1314
+ a && /* @__PURE__ */ N("div", {
1298
1315
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
1299
- children: /* @__PURE__ */ j(k.div, {
1316
+ children: /* @__PURE__ */ P(M.div, {
1300
1317
  initial: {
1301
1318
  opacity: 0,
1302
1319
  scale: .95
@@ -1307,33 +1324,33 @@ function nt({ vibeId: t, tr: n, navigate: i }) {
1307
1324
  },
1308
1325
  className: "bg-bg-surface rounded-lg w-full max-w-md max-h-[60vh] flex flex-col",
1309
1326
  children: [
1310
- /* @__PURE__ */ A("div", {
1327
+ /* @__PURE__ */ N("div", {
1311
1328
  className: "p-4 border-b border-border-default",
1312
- children: /* @__PURE__ */ A("h2", {
1329
+ children: /* @__PURE__ */ N("h2", {
1313
1330
  className: "text-lg font-semibold text-text-primary",
1314
1331
  children: n("vibeDetails.addToCatalogTitle", "Add Vibe to Catalog")
1315
1332
  })
1316
1333
  }),
1317
- /* @__PURE__ */ A("div", {
1334
+ /* @__PURE__ */ N("div", {
1318
1335
  className: "flex-1 overflow-y-auto p-2",
1319
- children: m.length === 0 ? /* @__PURE__ */ A("div", {
1336
+ children: h.length === 0 ? /* @__PURE__ */ N("div", {
1320
1337
  className: "p-4 text-center text-text-secondary text-sm",
1321
1338
  children: n("vibeDetails.noAvailableCatalogs", "No available catalogs. This vibe is already in all catalogs.")
1322
- }) : m.map((e) => /* @__PURE__ */ j("button", {
1323
- onClick: () => g(e.id),
1339
+ }) : h.map((e) => /* @__PURE__ */ P("button", {
1340
+ onClick: () => _(e.id),
1324
1341
  className: "w-full flex items-center justify-between p-3 rounded-md hover:bg-bg-sunken transition-colors text-left",
1325
- children: [/* @__PURE__ */ j("div", { children: [/* @__PURE__ */ A("p", {
1342
+ children: [/* @__PURE__ */ P("div", { children: [/* @__PURE__ */ N("p", {
1326
1343
  className: "font-medium text-text-primary text-sm",
1327
1344
  children: e.name
1328
- }), /* @__PURE__ */ A("p", {
1345
+ }), /* @__PURE__ */ N("p", {
1329
1346
  className: "text-xs text-text-secondary",
1330
1347
  children: e.visibility
1331
- })] }), /* @__PURE__ */ A(E, { className: "w-4 h-4 text-text-secondary" })]
1348
+ })] }), /* @__PURE__ */ N(k, { className: "w-4 h-4 text-text-secondary" })]
1332
1349
  }, e.id))
1333
1350
  }),
1334
- /* @__PURE__ */ A("div", {
1351
+ /* @__PURE__ */ N("div", {
1335
1352
  className: "p-4 border-t border-border-default",
1336
- children: /* @__PURE__ */ A("button", {
1353
+ children: /* @__PURE__ */ N("button", {
1337
1354
  onClick: () => o(!1),
1338
1355
  className: "w-full px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors",
1339
1356
  children: n("common.close", "Close")
@@ -1344,25 +1361,25 @@ function nt({ vibeId: t, tr: n, navigate: i }) {
1344
1361
  })
1345
1362
  ] });
1346
1363
  }
1347
- function rt({ vibeId: e, agentId: t, profile: n, tunnelUrl: r, apiKey: i, type: a, tr: o }) {
1348
- let s = a === "rest", c = "graphiql", l = `${r}/api/profiles/${encodeURIComponent(n)}/${c}/config/${e}`, [u, ee] = w(""), [te, d] = w(!1), [f, p] = w(!1), [m, h] = w(!1), [g, ne] = w(0);
1349
- C(() => {
1364
+ function et({ vibeId: e, agentId: t, profile: n, tunnelUrl: r, apiKey: i, type: a, tr: o }) {
1365
+ let s = a === "rest", c = "graphiql", l = `${r}/api/profiles/${encodeURIComponent(n)}/${c}/config/${e}`, [u, d] = E(""), [f, p] = E(!1), [m, h] = E(!1), [g, _] = E(!1), [ee, te] = E(0);
1366
+ ge(() => {
1350
1367
  let e = { "Content-Type": "application/json" };
1351
1368
  i && (e["x-agent-api-key"] = i), fetch(l, { headers: e }).then((e) => e.ok ? e.json() : null).then((e) => {
1352
1369
  if (e) {
1353
1370
  let t = s ? e.openapiUrl || e.url : e.graphqlUrl || e.url;
1354
- t && ee(t);
1371
+ t && d(t);
1355
1372
  }
1356
- d(!0);
1357
- }).catch(() => d(!0));
1373
+ p(!0);
1374
+ }).catch(() => p(!0));
1358
1375
  }, [
1359
1376
  l,
1360
1377
  i,
1361
1378
  s
1362
1379
  ]);
1363
- let v = async () => {
1380
+ let ne = async () => {
1364
1381
  if (u.trim()) {
1365
- p(!0), h(!1);
1382
+ h(!0), _(!1);
1366
1383
  try {
1367
1384
  let e = { "Content-Type": "application/json" };
1368
1385
  i && (e["x-agent-api-key"] = i);
@@ -1371,76 +1388,76 @@ function rt({ vibeId: e, agentId: t, profile: n, tunnelUrl: r, apiKey: i, type:
1371
1388
  method: "PUT",
1372
1389
  headers: e,
1373
1390
  body: JSON.stringify(t)
1374
- }), h(!0), ne((e) => e + 1), setTimeout(() => h(!1), 3e3);
1391
+ }), _(!0), te((e) => e + 1), setTimeout(() => _(!1), 3e3);
1375
1392
  } catch {} finally {
1376
- p(!1);
1393
+ h(!1);
1377
1394
  }
1378
1395
  }
1379
- }, [re, y] = w(null), [ie, ae] = w(null), b = `/ui/${c}`;
1380
- C(() => {
1396
+ }, [y, b] = E(null), [re, x] = E(null), S = `/ui/${c}`;
1397
+ ge(() => {
1381
1398
  if (!t) return;
1382
1399
  let e = !1, r = null, i = (a) => {
1383
- e || (y(a), r = S(t, n, b, a, i, (e) => ae(e.message)));
1400
+ e || (b(a), r = w(t, n, S, a, i, (e) => x(e.message)));
1384
1401
  };
1385
- return x(t, n, b).then((a) => {
1386
- e || (y(a), r = S(t, n, b, a, i, (e) => ae(e.message)));
1402
+ return C(t, n, S).then((a) => {
1403
+ e || (b(a), r = w(t, n, S, a, i, (e) => x(e.message)));
1387
1404
  }).catch((t) => {
1388
- e || ae(t instanceof Error ? t.message : String(t));
1405
+ e || x(t instanceof Error ? t.message : String(t));
1389
1406
  }), () => {
1390
1407
  e = !0, r?.cancel();
1391
1408
  };
1392
1409
  }, [
1393
1410
  t,
1394
1411
  n,
1395
- b
1412
+ S
1396
1413
  ]);
1397
- let se = `${r}/ui/${c}?vibeId=${e}`, ce = re ? oe(se, re.token) : se;
1398
- return /* @__PURE__ */ j("div", {
1414
+ let ae = `${r}/ui/${c}?vibeId=${e}`, oe = y ? ie(ae, y.token) : ae;
1415
+ return /* @__PURE__ */ P("div", {
1399
1416
  className: "space-y-4",
1400
- children: [/* @__PURE__ */ A(_, { children: /* @__PURE__ */ j("div", {
1417
+ children: [/* @__PURE__ */ N(v, { children: /* @__PURE__ */ P("div", {
1401
1418
  className: "p-4",
1402
1419
  children: [
1403
- /* @__PURE__ */ j("div", {
1420
+ /* @__PURE__ */ P("div", {
1404
1421
  className: "flex items-center gap-2 mb-2",
1405
- children: [A(s ? je : Fe, { className: "w-5 h-5 text-text-secondary" }), /* @__PURE__ */ A("h3", {
1422
+ children: [N(s ? ke : Ne, { className: "w-5 h-5 text-text-secondary" }), /* @__PURE__ */ N("h3", {
1406
1423
  className: "font-semibold text-text-primary",
1407
1424
  children: s ? o("vibeDetails.restPlaygroundTitle", "REST API Playground") : o("vibeDetails.graphqlPlaygroundTitle", "GraphQL Playground")
1408
1425
  })]
1409
1426
  }),
1410
- /* @__PURE__ */ j("div", {
1427
+ /* @__PURE__ */ P("div", {
1411
1428
  className: "flex items-center gap-2",
1412
- children: [/* @__PURE__ */ A("input", {
1429
+ children: [/* @__PURE__ */ N("input", {
1413
1430
  type: "url",
1414
1431
  value: u,
1415
- onChange: (e) => ee(e.target.value),
1432
+ onChange: (e) => d(e.target.value),
1416
1433
  placeholder: s ? o("vibeDetails.enterSwaggerUrl", "Enter OpenAPI/Swagger URL (e.g. https://petstore3.swagger.io/api/v3/openapi.json)") : o("vibeDetails.enterGraphqlUrl", "Enter GraphQL endpoint URL (e.g. https://countries.trevorblades.com/graphql)"),
1417
1434
  className: "flex-1 px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder text-sm",
1418
- onKeyDown: (e) => e.key === "Enter" && v()
1419
- }), /* @__PURE__ */ j("button", {
1420
- onClick: v,
1421
- disabled: f || !u.trim(),
1435
+ onKeyDown: (e) => e.key === "Enter" && ne()
1436
+ }), /* @__PURE__ */ P("button", {
1437
+ onClick: ne,
1438
+ disabled: m || !u.trim(),
1422
1439
  className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50 text-sm whitespace-nowrap",
1423
- children: [f ? /* @__PURE__ */ A(Pe, { className: "w-4 h-4 animate-spin" }) : A(m ? we : Ee, { className: "w-4 h-4" }), f ? o("common.saving", "Saving...") : m ? o("common.saved", "Saved!") : o("vibeDetails.loadApi", "Load API")]
1440
+ children: [m ? /* @__PURE__ */ N(Me, { className: "w-4 h-4 animate-spin" }) : N(g ? Se : we, { className: "w-4 h-4" }), m ? o("common.saving", "Saving...") : g ? o("common.saved", "Saved!") : o("vibeDetails.loadApi", "Load API")]
1424
1441
  })]
1425
1442
  }),
1426
- !te && /* @__PURE__ */ A("p", {
1443
+ !f && /* @__PURE__ */ N("p", {
1427
1444
  className: "text-xs text-text-muted mt-1",
1428
1445
  children: o("vibeDetails.loadingConfig", "Loading saved configuration...")
1429
1446
  })
1430
1447
  ]
1431
- }) }), t && !re ? /* @__PURE__ */ A("div", {
1448
+ }) }), t && !y ? /* @__PURE__ */ N("div", {
1432
1449
  className: "p-8 text-center text-sm text-text-secondary rounded-md border border-border-default bg-bg-sunken",
1433
- children: ie ? o("vibeDetails.iframeTokenError", `Iframe token error: ${ie}`) : o("vibeDetails.mintingIframeToken", "Authorizing iframe…")
1434
- }) : /* @__PURE__ */ A("iframe", {
1435
- src: ce,
1450
+ children: re ? o("vibeDetails.iframeTokenError", `Iframe token error: ${re}`) : o("vibeDetails.mintingIframeToken", "Authorizing iframe…")
1451
+ }) : /* @__PURE__ */ N("iframe", {
1452
+ src: oe,
1436
1453
  title: s ? "REST API Playground" : "GraphQL Playground",
1437
1454
  className: "w-full rounded-md border border-border-default bg-bg-sunken",
1438
1455
  style: { height: "700px" },
1439
1456
  sandbox: "allow-scripts allow-same-origin allow-forms allow-popups"
1440
- }, g)]
1457
+ }, ee)]
1441
1458
  });
1442
1459
  }
1443
1460
  //#endregion
1444
- export { tt as VibeDetailsPage };
1461
+ export { R as VibeDetailsPage };
1445
1462
 
1446
1463
  //# sourceMappingURL=VibeDetailsPage.js.map