@burdenoff/microfe-vibecontrols 2026.1023.8 → 2026.1027.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,9 +42,11 @@ var e = /* @__PURE__ */ function(e) {
42
42
  }({}), b = /* @__PURE__ */ function(e) {
43
43
  return e.Action = "ACTION", e.AiContext = "AI_CONTEXT", e.AiPrompt = "AI_PROMPT", e.InstructionFile = "INSTRUCTION_FILE", e.Sandbox = "SANDBOX", e.ScheduledJob = "SCHEDULED_JOB", e.Tunnel = "TUNNEL", e.VibeDeck = "VIBE_DECK", e;
44
44
  }({}), x = /* @__PURE__ */ function(e) {
45
- return e.Private = "PRIVATE", e.SharedWithVibe = "SHARED_WITH_VIBE", e;
45
+ return e.Custom = "CUSTOM", e.Monorepo = "MONOREPO", e.Package = "PACKAGE", e.Project = "PROJECT", e.Repository = "REPOSITORY", e.Workspace = "WORKSPACE", e;
46
46
  }({}), S = /* @__PURE__ */ function(e) {
47
+ return e.Private = "PRIVATE", e.SharedWithVibe = "SHARED_WITH_VIBE", e;
48
+ }({}), C = /* @__PURE__ */ function(e) {
47
49
  return e.Custom = "CUSTOM", e.Script = "SCRIPT", e.Ssh = "SSH", e.Terminal = "TERMINAL", e.Tmux = "TMUX", e.Wezterm = "WEZTERM", e.Zellij = "ZELLIJ", e;
48
50
  }({});
49
51
  //#endregion
50
- export { e as AgentCapabilityScope, t as AnalyticsEntityType, n as CollaboratorRole, r as ComponentType, i as DeploymentEnvironment, a as InstructionFilename, o as InstructionScope, s as MeshSessionKind, c as NoteVisibility, l as ScorecardTier, u as SessionSharePermission, d as TunnelDomainType, f as TunnelDomainVerificationStatus, p as TunnelEnvironment, m as TunnelProtocol, h as TunnelProviderKey, g as TunnelSessionStatus, _ as TunnelStatus, v as VibeAuditExportFormat, y as VibeDeckSharePermission, b as VibeEntityType, x as VibeVisibility, S as VibecontrolsSessionType };
52
+ export { e as AgentCapabilityScope, t as AnalyticsEntityType, n as CollaboratorRole, r as ComponentType, i as DeploymentEnvironment, a as InstructionFilename, o as InstructionScope, s as MeshSessionKind, c as NoteVisibility, l as ScorecardTier, u as SessionSharePermission, d as TunnelDomainType, f as TunnelDomainVerificationStatus, p as TunnelEnvironment, m as TunnelProtocol, h as TunnelProviderKey, g as TunnelSessionStatus, _ as TunnelStatus, v as VibeAuditExportFormat, y as VibeDeckSharePermission, b as VibeEntityType, x as VibeType, S as VibeVisibility, C as VibecontrolsSessionType };
@@ -8,134 +8,135 @@ import ue from "../hooks/useCachedInitialData.js";
8
8
  import { PageHeader as de } from "../components/shared/PageHeader.js";
9
9
  import { LoadingState as fe } from "../components/shared/LoadingState.js";
10
10
  import { ErrorState as pe } from "../components/shared/ErrorState.js";
11
+ import { VibeType as a } from "../generated/wspace-types.js";
11
12
  import { EntityTagPicker as me } from "../components/shared/EntityTagPicker.js";
12
13
  import { useDraftEntityTags as he } from "../hooks/useDraftEntityTags.js";
13
14
  import { EmptyState as ge } from "../components/shared/EmptyState.js";
14
15
  import { SearchInput as _e } from "../components/shared/SearchInput.js";
15
- import { FilterDropdown as ve } from "../components/shared/FilterDropdown.js";
16
- import { GetHelpButton as ye } from "../components/shared/GetHelpButton.js";
17
- import { SelectionCheckbox as be } from "../components/shared/SelectionCheckbox.js";
16
+ import { FilterDropdown as o } from "../components/shared/FilterDropdown.js";
17
+ import { GetHelpButton as ve } from "../components/shared/GetHelpButton.js";
18
+ import { SelectionCheckbox as ye } from "../components/shared/SelectionCheckbox.js";
18
19
  import "../components/shared/index.js";
19
- import { VIBE_PERMISSIONS as a } from "../constants/permissions.js";
20
- import { PageSkeleton as xe } from "../components/shared/PageSkeleton.js";
21
- import { buildProtocolUrl as Se, getIdePreset as Ce, resolveEffectiveIdeCommand as we } from "../components/agents/idePresets.js";
22
- import { VibeCard as Te } from "../components/vibes/VibeCard.js";
23
- import { DeleteVibeDialog as Ee } from "../components/vibes/DeleteVibeDialog.js";
24
- import { VibeList as De } from "../components/vibes/VibeList.js";
20
+ import { VIBE_PERMISSIONS as s } from "../constants/permissions.js";
21
+ import { PageSkeleton as be } from "../components/shared/PageSkeleton.js";
22
+ import { buildProtocolUrl as xe, getIdePreset as Se, resolveEffectiveIdeCommand as Ce } from "../components/agents/idePresets.js";
23
+ import { VibeCard as we } from "../components/vibes/VibeCard.js";
24
+ import { DeleteVibeDialog as Te } from "../components/vibes/DeleteVibeDialog.js";
25
+ import { VibeList as Ee } from "../components/vibes/VibeList.js";
25
26
  import "../components/vibes/index.js";
26
- import { useCallback as o, useEffect as Oe, useMemo as s, useRef as c, useState as l } from "react";
27
- import { useI18n as ke } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
28
- import { useUpgradePrompt as Ae } from "@burdenoff/fe-libs/shared/hooks";
29
- import { Archive as je, Grid as Me, List as Ne, Play as Pe, Plus as Fe, RefreshCw as Ie, Zap as Le } from "lucide-react";
30
- import { useSearchParams as Re } from "react-router";
31
- import { usePermissions as ze } from "@burdenoff/fe-libs/shared/providers/shell";
32
- import { AnimatePresence as Be } from "framer-motion";
33
- import { Fragment as Ve, jsx as u, jsxs as d } from "react/jsx-runtime";
34
- import { Button as He, CTAOverflowMenu as Ue, PagePurpose as We } from "@burdenoff/fe-libs/ui";
35
- import { AccessDenied as Ge, PermissionButton as f, PermissionGate as Ke } from "@burdenoff/fe-libs/shared/components";
36
- import { MotionItem as qe, MotionList as p, MotionPage as Je } from "@burdenoff/fe-libs/shared/motion";
27
+ import { useCallback as c, useEffect as De, useMemo as l, useRef as u, useState as d } from "react";
28
+ import { useI18n as Oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
29
+ import { useUpgradePrompt as ke } from "@burdenoff/fe-libs/shared/hooks";
30
+ import { Archive as Ae, Grid as je, List as Me, Play as Ne, Plus as Pe, RefreshCw as Fe, Zap as Ie } from "lucide-react";
31
+ import { useSearchParams as Le } from "react-router";
32
+ import { usePermissions as Re } from "@burdenoff/fe-libs/shared/providers/shell";
33
+ import { AnimatePresence as ze } from "framer-motion";
34
+ import { Fragment as Be, jsx as f, jsxs as p } from "react/jsx-runtime";
35
+ import { Button as Ve, CTAOverflowMenu as He, PagePurpose as Ue } from "@burdenoff/fe-libs/ui";
36
+ import { AccessDenied as We, PermissionButton as m, PermissionGate as Ge } from "@burdenoff/fe-libs/shared/components";
37
+ import { MotionItem as Ke, MotionList as qe, MotionPage as Je } from "@burdenoff/fe-libs/shared/motion";
37
38
  import { useAssistantPageControls as Ye } from "@burdenoff/fe-libs/shared/assistant/appControls/useAssistantControl";
38
39
  import { enumFilter as Xe, filtersOf as Ze, openersOf as Qe, searchOf as $e } from "@burdenoff/fe-libs/shared/assistant/appControls/pageAdapters";
39
40
  //#region src/pages/VibesPage.tsx
40
41
  function et() {
41
- let { onVibeActivate: et, workspaceId: m } = se(), tt = ce(), { hasPermission: h, isLoading: g, permissions: nt } = ze(), { t: rt } = ke(), { isFree: it, approachingLimits: at } = Ae({ resource: "vibes" }), _ = at[0], v = o((e, t, n) => {
42
+ let { onVibeActivate: et, workspaceId: h } = se(), tt = ce(), { hasPermission: g, isLoading: _, permissions: nt } = Re(), { t: rt } = Oe(), { isFree: it, approachingLimits: at } = ke({ resource: "vibes" }), v = at[0], y = c((e, t, n) => {
42
43
  let r = rt(e, n), i = r === e ? t : r;
43
44
  return n ? Object.entries(n).reduce((e, [t, n]) => e.replace(`{{${t}}}`, String(n)), i) : i;
44
- }, [rt]), y = s(() => [
45
+ }, [rt]), b = l(() => [
45
46
  {
46
47
  value: "all",
47
- label: v("vibesPage.statusAll", "All Statuses")
48
+ label: y("vibesPage.statusAll", "All Statuses")
48
49
  },
49
50
  {
50
51
  value: "ACTIVE",
51
- label: v("vibesPage.statusActive", "Active")
52
+ label: y("vibesPage.statusActive", "Active")
52
53
  },
53
54
  {
54
55
  value: "INACTIVE",
55
- label: v("vibesPage.statusInactive", "Inactive")
56
+ label: y("vibesPage.statusInactive", "Inactive")
56
57
  },
57
58
  {
58
59
  value: "ARCHIVED",
59
- label: v("vibesPage.statusArchived", "Archived")
60
+ label: y("vibesPage.statusArchived", "Archived")
60
61
  },
61
62
  {
62
63
  value: "ERROR",
63
- label: v("vibesPage.statusError", "Error")
64
+ label: y("vibesPage.statusError", "Error")
64
65
  }
65
- ], [v]), ot = s(() => [
66
+ ], [y]), x = l(() => [
66
67
  {
67
68
  value: "all",
68
- label: v("vibesPage.typeAll", "All Types")
69
+ label: y("vibesPage.typeAll", "All Types")
69
70
  },
70
71
  {
71
- value: "PROJECT",
72
- label: v("vibesPage.typeProject", "Project")
72
+ value: a.Project,
73
+ label: y("vibesPage.typeProject", "Project")
73
74
  },
74
75
  {
75
- value: "REPOSITORY",
76
- label: v("vibesPage.typeRepository", "Repository")
76
+ value: a.Repository,
77
+ label: y("vibesPage.typeRepository", "Repository")
77
78
  },
78
79
  {
79
- value: "WORKSPACE",
80
- label: v("vibesPage.typeWorkspace", "Workspace")
80
+ value: a.Workspace,
81
+ label: y("vibesPage.typeWorkspace", "Workspace")
81
82
  },
82
83
  {
83
- value: "MONOREPO",
84
- label: v("vibesPage.typeMonorepo", "Monorepo")
84
+ value: a.Monorepo,
85
+ label: y("vibesPage.typeMonorepo", "Monorepo")
85
86
  },
86
87
  {
87
- value: "PACKAGE",
88
- label: v("vibesPage.typePackage", "Package")
88
+ value: a.Package,
89
+ label: y("vibesPage.typePackage", "Package")
89
90
  },
90
91
  {
91
- value: "CUSTOM",
92
- label: v("vibesPage.typeCustom", "Custom")
92
+ value: a.Custom,
93
+ label: y("vibesPage.typeCustom", "Custom")
93
94
  }
94
- ], [v]), st = h(a.VIBE_LIST), ct = h(a.VIBE_UPDATE), lt = h(a.VIBE_DELETE), b = g || !st, [x, ut] = l(""), [S, dt] = l("all"), [C, ft] = l("all"), [w, pt] = l("all"), [T, mt] = l("grid"), [ht, E] = l(!1), [gt, D] = l(null), [O, _t] = l(!1), [vt, k] = l(null), [yt, A] = l(!1), [j, M] = l({}), [bt, N] = l(null), [P, F] = l(/* @__PURE__ */ new Set()), [xt, I] = l(null), L = c(null);
95
- Oe(() => () => {
96
- L.current && clearTimeout(L.current);
95
+ ], [y]), ot = g(s.VIBE_LIST), st = g(s.VIBE_UPDATE), ct = g(s.VIBE_DELETE), S = _ || !ot, [C, lt] = d(""), [w, ut] = d("all"), [T, dt] = d("all"), [E, ft] = d("all"), [D, pt] = d("grid"), [mt, O] = d(!1), [ht, k] = d(null), [A, gt] = d(!1), [_t, j] = d(null), [vt, M] = d(!1), [N, P] = d({}), [yt, F] = d(null), [I, L] = d(/* @__PURE__ */ new Set()), [bt, R] = d(null), z = u(null);
96
+ De(() => () => {
97
+ z.current && clearTimeout(z.current);
97
98
  }, []);
98
- let St = o(() => {
99
- N(null), L.current &&= (clearTimeout(L.current), null);
100
- }, []), Ct = c(null), wt = c(null), Tt = c(null), Et = c(null), [Dt] = n(), [Ot] = t(), { setDraftTagIds: kt, flushTags: At } = he("VIBECONTROLS_VIBE"), [jt] = te(), [Mt] = e(), [Nt, { loading: Pt }] = r(), [R, z] = l(null), { data: Ft, loading: B, error: It, refetch: V } = ee({
101
- variables: s(() => {
99
+ let xt = c(() => {
100
+ F(null), z.current &&= (clearTimeout(z.current), null);
101
+ }, []), St = u(null), Ct = u(null), wt = u(null), Tt = u(null), [Et] = n(), [Dt] = t(), { setDraftTagIds: Ot, flushTags: kt } = he("VIBECONTROLS_VIBE"), [At] = te(), [jt] = e(), [Mt, { loading: Nt }] = r(), [B, V] = d(null), { data: Pt, loading: H, error: Ft, refetch: U } = ee({
102
+ variables: l(() => {
102
103
  let e = {};
103
- return m && (e.workspaceId = m), S !== "all" && (e.status = S), C !== "all" && (e.type = C), w !== "all" && (e.attachedAgentIds = [w]), {
104
+ return h && (e.workspaceId = h), w !== "all" && (e.status = w), T !== "all" && (e.type = T), E !== "all" && (e.attachedAgentIds = [E]), {
104
105
  filter: e,
105
106
  pagination: { limit: 50 }
106
107
  };
107
108
  }, [
108
- m,
109
- S,
110
- C,
111
- w
109
+ h,
110
+ w,
111
+ T,
112
+ E
112
113
  ]),
113
- fetchPolicy: S === "all" && C === "all" && w === "all" ? "cache-first" : "cache-and-network",
114
+ fetchPolicy: w === "all" && T === "all" && E === "all" ? "cache-first" : "cache-and-network",
114
115
  nextFetchPolicy: "cache-first",
115
- skip: b,
116
+ skip: S,
116
117
  notifyOnNetworkStatusChange: !0
117
- }), { agents: Lt } = ue(), [Rt, { data: zt }] = i({ fetchPolicy: "cache-first" }), Bt = c(!1), H = o(() => {
118
- Bt.current || b || (Bt.current = !0, Rt({ variables: { pagination: { limit: 100 } } }));
119
- }, [Rt, b]), Vt = s(() => {
120
- let e = zt?.vibecontrolsAgents ?? null, t = e ? e.map((e) => ({
118
+ }), { agents: It } = ue(), [Lt, { data: Rt }] = i({ fetchPolicy: "cache-first" }), zt = u(!1), W = c(() => {
119
+ zt.current || S || (zt.current = !0, Lt({ variables: { pagination: { limit: 100 } } }));
120
+ }, [Lt, S]), Bt = l(() => {
121
+ let e = Rt?.vibecontrolsAgents ?? null, t = e ? e.map((e) => ({
121
122
  id: e.id,
122
123
  name: e.name
123
- })) : Lt.map((e) => ({
124
+ })) : It.map((e) => ({
124
125
  id: e.id,
125
126
  name: e.name
126
127
  }));
127
128
  return [{
128
129
  value: "all",
129
- label: v("vibesPage.allAgents", "All Agents")
130
+ label: y("vibesPage.allAgents", "All Agents")
130
131
  }, ...t.map((e) => ({
131
132
  value: e.id,
132
133
  label: e.name
133
134
  }))];
134
135
  }, [
135
- zt?.vibecontrolsAgents,
136
- Lt,
137
- v
138
- ]), U = s(() => (Ft?.vibes?.items ?? []).map((e) => ({
136
+ Rt?.vibecontrolsAgents,
137
+ It,
138
+ y
139
+ ]), G = l(() => (Pt?.vibes?.items ?? []).map((e) => ({
139
140
  id: e.id,
140
141
  workspaceId: e.workspaceId,
141
142
  name: e.name,
@@ -153,17 +154,17 @@ function et() {
153
154
  createdAt: e.createdAt,
154
155
  updatedAt: e.updatedAt,
155
156
  agents: []
156
- })), [Ft?.vibes?.items]), W = s(() => U.filter((e) => {
157
- if (x) {
158
- let t = x.toLowerCase();
157
+ })), [Pt?.vibes?.items]), K = l(() => G.filter((e) => {
158
+ if (C) {
159
+ let t = C.toLowerCase();
159
160
  if (!(e.name.toLowerCase().includes(t) || e.description?.toLowerCase().includes(t) || e.path?.toLowerCase().includes(t) || e.tags?.some((e) => e.toLowerCase().includes(t)))) return !1;
160
161
  }
161
162
  return !0;
162
- }), [U, x]), Ht = s(() => U.filter((e) => P.has(e.id)), [U, P]), G = Ht.filter((e) => e.status !== "ACTIVE"), K = Ht.filter((e) => e.status !== "ARCHIVED"), q = W.length > 0 && W.every((e) => P.has(e.id)), Ut = W.some((e) => P.has(e.id)) && !q, Wt = (e) => {
163
+ }), [G, C]), Vt = l(() => G.filter((e) => I.has(e.id)), [G, I]), q = Vt.filter((e) => e.status !== "ACTIVE"), J = Vt.filter((e) => e.status !== "ARCHIVED"), Y = K.length > 0 && K.every((e) => I.has(e.id)), Ht = K.some((e) => I.has(e.id)) && !Y, Ut = (e) => {
163
164
  tt(`/vibes/${e.id}`);
164
- }, J = async (e) => {
165
+ }, Wt = async (e) => {
165
166
  try {
166
- (await jt({ variables: {
167
+ (await At({ variables: {
167
168
  id: e.id,
168
169
  status: "ACTIVE"
169
170
  } })).data?.updateVibeStatus && (et?.({
@@ -171,21 +172,21 @@ function et() {
171
172
  name: e.name,
172
173
  type: e.type,
173
174
  status: "ACTIVE"
174
- }), await V());
175
+ }), await U());
175
176
  } catch (e) {
176
177
  console.error("Failed to activate vibe:", e);
177
178
  }
178
179
  }, Gt = async (e) => {
179
180
  try {
180
- await Mt({ variables: { id: e.id } }), await V();
181
+ await jt({ variables: { id: e.id } }), await U();
181
182
  } catch (e) {
182
183
  console.error("Failed to archive vibe:", e);
183
184
  }
184
185
  }, Kt = async (e) => {
185
- if (!R) return;
186
- let t = R.id;
186
+ if (!B) return;
187
+ let t = B.id;
187
188
  try {
188
- await Nt({
189
+ await Mt({
189
190
  variables: {
190
191
  id: t,
191
192
  deleteRelatedEntities: e
@@ -196,98 +197,98 @@ function et() {
196
197
  id: t
197
198
  }) }), e.gc();
198
199
  }
199
- }), z(null), await V();
200
+ }), V(null), await U();
200
201
  } catch (e) {
201
202
  console.error("Failed to delete vibe:", e);
202
203
  }
203
204
  }, qt = le((e) => e.preferredIdeCommand), Jt = le((e) => e.vibeIdeOverrides), Yt = (e) => {
204
205
  if (!e.path) {
205
- N(v("vibesPage.openEditorPathMissing", "No path available to open in editor")), L.current = setTimeout(() => {
206
- N(null), L.current = null;
206
+ F(y("vibesPage.openEditorPathMissing", "No path available to open in editor")), z.current = setTimeout(() => {
207
+ F(null), z.current = null;
207
208
  }, 3e3);
208
209
  return;
209
210
  }
210
- let t = we(e.id, qt, Jt), n = Ce(t), r = n ? Se(n, e.path) : `vscode://file/${e.path}`;
211
- r ? window.location.href = r : (N(v("vibesPage.openEditorNoProtocol", `${n?.label ?? t} has no URL handler — open this Vibe and use the editor menu.`)), L.current = setTimeout(() => {
212
- N(null), L.current = null;
211
+ let t = Ce(e.id, qt, Jt), n = Se(t), r = n ? xe(n, e.path) : `vscode://file/${e.path}`;
212
+ r ? window.location.href = r : (F(y("vibesPage.openEditorNoProtocol", `${n?.label ?? t} has no URL handler — open this Vibe and use the editor menu.`)), z.current = setTimeout(() => {
213
+ F(null), z.current = null;
213
214
  }, 4e3));
214
- }, Y = o(() => {
215
- D(null), E(!0), H();
216
- }, [H]), Xt = h(a.VIBE_CREATE);
217
- Ye(s(() => ({
218
- page: v("vibesPage.assistantPage", "Vibes"),
215
+ }, X = c(() => {
216
+ k(null), O(!0), W();
217
+ }, [W]), Xt = g(s.VIBE_CREATE);
218
+ Ye(l(() => ({
219
+ page: y("vibesPage.assistantPage", "Vibes"),
219
220
  filters: Ze([Xe({
220
221
  id: "status",
221
- label: v("vibesPage.filterStatus", "Status"),
222
- options: y,
222
+ label: y("vibesPage.filterStatus", "Status"),
223
+ options: b,
223
224
  neutral: "all",
224
- value: S,
225
- set: dt
225
+ value: w,
226
+ set: ut
226
227
  }), Xe({
227
228
  id: "type",
228
- label: v("vibesPage.assistantType", "Type"),
229
- options: ot,
229
+ label: y("vibesPage.assistantType", "Type"),
230
+ options: x,
230
231
  neutral: "all",
231
- value: C,
232
- set: ft
232
+ value: T,
233
+ set: dt
233
234
  })]),
234
- search: $e(ut),
235
+ search: $e(lt),
235
236
  ...Xt ? { openers: Qe([{
236
237
  id: "create-vibe",
237
- label: v("vibesPage.assistantCreateVibe", "Create vibe"),
238
- open: Y
238
+ label: y("vibesPage.assistantCreateVibe", "Create vibe"),
239
+ open: X
239
240
  }]) } : {}
240
241
  }), [
241
- v,
242
242
  y,
243
- ot,
244
- S,
245
- C,
243
+ b,
244
+ x,
245
+ w,
246
+ T,
246
247
  Xt,
247
- Y
248
+ X
248
249
  ]));
249
- let [X, Zt] = Re();
250
- Oe(() => {
251
- if (X.get("create") === "true") {
252
- Y();
253
- let e = new URLSearchParams(X);
250
+ let [Z, Zt] = Le();
251
+ De(() => {
252
+ if (Z.get("create") === "true") {
253
+ X();
254
+ let e = new URLSearchParams(Z);
254
255
  e.delete("create"), Zt(e, { replace: !0 });
255
256
  }
256
257
  }, [
257
- X,
258
+ Z,
258
259
  Zt,
259
- Y
260
+ X
260
261
  ]);
261
262
  let Qt = (e, t) => {
262
- F((n) => {
263
+ L((n) => {
263
264
  let r = new Set(n);
264
265
  return t ? r.add(e.id) : r.delete(e.id), r;
265
266
  });
266
267
  }, $t = (e) => {
267
- F((t) => {
268
+ L((t) => {
268
269
  let n = new Set(t);
269
- return W.forEach((t) => {
270
+ return K.forEach((t) => {
270
271
  e ? n.add(t.id) : n.delete(t.id);
271
272
  }), n;
272
273
  });
273
- }, Z = () => F(/* @__PURE__ */ new Set()), en = async () => {
274
- if (G.length === 0) return;
275
- let e = await Promise.allSettled(G.map((e) => jt({ variables: {
274
+ }, en = () => L(/* @__PURE__ */ new Set()), tn = async () => {
275
+ if (q.length === 0) return;
276
+ let e = await Promise.allSettled(q.map((e) => At({ variables: {
276
277
  id: e.id,
277
278
  status: "ACTIVE"
278
279
  } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
279
- k(`Activated ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => k(null), 4e3), Z(), I(null), await V();
280
- }, tn = async () => {
281
- if (K.length === 0) return;
282
- let e = await Promise.allSettled(K.map((e) => Mt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
283
- k(`Archived ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => k(null), 4e3), Z(), I(null), await V();
280
+ j(`Activated ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => j(null), 4e3), en(), R(null), await U();
284
281
  }, nn = async () => {
285
- let e = Ct.current?.value?.trim(), t = wt.current?.value?.trim(), n = Tt.current?.value, r = Et.current?.value, i = {};
286
- if (e || (i.name = v("vibesPage.nameRequired", "Name is required")), i.name) {
287
- M(i), D(v("vibesPage.fillRequired", "Please fill in all required fields"));
282
+ if (J.length === 0) return;
283
+ let e = await Promise.allSettled(J.map((e) => jt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
284
+ j(`Archived ${t} vibe${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), setTimeout(() => j(null), 4e3), en(), R(null), await U();
285
+ }, rn = async () => {
286
+ let e = St.current?.value?.trim(), t = Ct.current?.value?.trim(), n = wt.current?.value, r = Tt.current?.value, i = {};
287
+ if (e || (i.name = y("vibesPage.nameRequired", "Name is required")), i.name) {
288
+ P(i), k(y("vibesPage.fillRequired", "Please fill in all required fields"));
288
289
  return;
289
290
  }
290
- M({});
291
+ P({});
291
292
  let ee = [
292
293
  "PROJECT",
293
294
  "REPOSITORY",
@@ -296,219 +297,232 @@ function et() {
296
297
  "PACKAGE",
297
298
  "CUSTOM"
298
299
  ].includes(r) ? r : "PROJECT";
299
- _t(!0), D(null);
300
+ gt(!0), k(null);
300
301
  try {
301
- let r = await Dt({ variables: { input: {
302
+ let r = await Et({ variables: { input: {
302
303
  name: e,
303
304
  path: t ?? "",
304
305
  type: ee
305
306
  } } });
306
- if (!r.data?.createVibe?.id) throw Error(v("vibesPage.failedCreate", "Failed to create vibe"));
307
+ if (!r.data?.createVibe?.id) throw Error(y("vibesPage.failedCreate", "Failed to create vibe"));
307
308
  let i = r.data.createVibe.id;
308
309
  if (n) try {
309
- await Ot({ variables: { input: {
310
+ await Dt({ variables: { input: {
310
311
  vibeId: i,
311
312
  agentId: n
312
313
  } } });
313
314
  } catch {}
314
- E(!1), k(v("vibesPage.createdSuccess", "Vibe created successfully")), await At(i), await V(), setTimeout(() => k(null), 3e3);
315
+ O(!1), j(y("vibesPage.createdSuccess", "Vibe created successfully")), await kt(i), await U(), setTimeout(() => j(null), 3e3);
315
316
  } catch (e) {
316
317
  if (ie(e)) {
317
- E(!1), D(null), M({}), ae(), A(!0);
318
+ O(!1), k(null), P({}), ae(), M(!0);
318
319
  return;
319
320
  }
320
- D(e instanceof Error ? e.message : v("vibesPage.failedCreate", "Failed to create vibe"));
321
+ k(e instanceof Error ? e.message : y("vibesPage.failedCreate", "Failed to create vibe"));
321
322
  } finally {
322
- _t(!1);
323
+ gt(!1);
323
324
  }
324
- }, rn = {
325
- total: U.length,
326
- active: U.filter((e) => e.status === "ACTIVE").length,
327
- inactive: U.filter((e) => e.status === "INACTIVE").length
328
- }, Q = g, $ = !g && !!nt && (nt.permissionStrings?.length ?? 0) > 0 && !st, an = !Q && !$ && B && U.length === 0, on = !Q && !$ && !!It && U.length === 0, sn = !Q && !$ && !on;
329
- return /* @__PURE__ */ d(Je, {
325
+ }, an = {
326
+ total: G.length,
327
+ active: G.filter((e) => e.status === "ACTIVE").length,
328
+ inactive: G.filter((e) => e.status === "INACTIVE").length
329
+ }, Q = _, $ = !_ && !!nt && (nt.permissionStrings?.length ?? 0) > 0 && !ot, on = !Q && !$ && H && G.length === 0, sn = !Q && !$ && !!Ft && G.length === 0, cn = !Q && !$ && !sn;
330
+ return /* @__PURE__ */ p(Je, {
330
331
  className: "space-y-6 px-6 lg:px-8 py-6 bg-bg-canvas min-h-screen",
331
332
  children: [
332
- Q && /* @__PURE__ */ u(fe, { message: v("vibesPage.loadingPermissions", "Loading permissions...") }),
333
- $ && /* @__PURE__ */ u(Ge, {
334
- title: v("vibesPage.accessDeniedTitle", "Access Denied"),
335
- description: v("vibesPage.accessDeniedDescription", "You don't have permission to view vibes. Contact your workspace administrator for access.")
333
+ Q && /* @__PURE__ */ f(fe, { message: y("vibesPage.loadingPermissions", "Loading permissions...") }),
334
+ $ && /* @__PURE__ */ f(We, {
335
+ title: y("vibesPage.accessDeniedTitle", "Access Denied"),
336
+ description: y("vibesPage.accessDeniedDescription", "You don't have permission to view vibes. Contact your workspace administrator for access.")
336
337
  }),
337
- on && /* @__PURE__ */ u(pe, {
338
- title: v("vibesPage.failedLoad", "Failed to load vibes"),
339
- message: It?.message ?? "",
340
- onRetry: () => V()
338
+ sn && /* @__PURE__ */ f(pe, {
339
+ title: y("vibesPage.failedLoad", "Failed to load vibes"),
340
+ message: Ft?.message ?? "",
341
+ onRetry: () => U()
341
342
  }),
342
- sn && /* @__PURE__ */ d(Ve, { children: [
343
- /* @__PURE__ */ u(de, {
344
- title: v("vibesPage.title", "Vibes"),
345
- description: v("vibesPage.descriptionActive", "{{active}} of {{total}} vibes active", {
346
- active: rn.active,
347
- total: rn.total
343
+ cn && /* @__PURE__ */ p(Be, { children: [
344
+ /* @__PURE__ */ f(de, {
345
+ title: y("vibesPage.title", "Vibes"),
346
+ description: y("vibesPage.descriptionActive", "{{active}} of {{total}} vibes active", {
347
+ active: an.active,
348
+ total: an.total
348
349
  }),
349
- actions: /* @__PURE__ */ d("div", {
350
+ actions: /* @__PURE__ */ p("div", {
350
351
  className: "flex items-center gap-2",
351
352
  children: [
352
- it && _ && typeof _.limit == "number" && /* @__PURE__ */ u("a", {
353
+ it && v && typeof v.limit == "number" && /* @__PURE__ */ f("a", {
353
354
  href: "/billing/plans",
354
- className: `inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-md border ${_.current >= _.limit ? "border-status-error-border bg-status-error-bg-subtle text-status-error-text" : "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"}`,
355
- title: v("vibesPage.upgradeChipTooltip", "Free plan limit — upgrade for more vibes"),
356
- children: v("vibesPage.usageChip", "{{current}} of {{limit}} vibes used", {
357
- current: _.current,
358
- limit: _.limit
355
+ className: `inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-md border ${v.current >= v.limit ? "border-status-error-border bg-status-error-bg-subtle text-status-error-text" : "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"}`,
356
+ title: y("vibesPage.upgradeChipTooltip", "Free plan limit — upgrade for more vibes"),
357
+ children: y("vibesPage.usageChip", "{{current}} of {{limit}} vibes used", {
358
+ current: v.current,
359
+ limit: v.limit
359
360
  })
360
361
  }),
361
- /* @__PURE__ */ u(f, {
362
- permission: a.VIBE_CREATE,
362
+ /* @__PURE__ */ f(m, {
363
+ permission: s.VIBE_CREATE,
363
364
  deniedBehavior: "disable",
364
- deniedTooltip: v("vibesPage.deniedCreateTooltip", "You don't have permission to create vibes"),
365
- children: /* @__PURE__ */ d(He, {
365
+ deniedTooltip: y("vibesPage.deniedCreateTooltip", "You don't have permission to create vibes"),
366
+ children: /* @__PURE__ */ p(Ve, {
366
367
  type: "button",
367
- onClick: Y,
368
+ onClick: X,
368
369
  className: "gap-2",
369
- children: [/* @__PURE__ */ u(Fe, { className: "size-4" }), v("vibesPage.addVibe", "Add Vibe")]
370
+ children: [/* @__PURE__ */ f(Pe, { className: "size-4" }), y("vibesPage.addVibe", "Add Vibe")]
370
371
  })
371
372
  }),
372
- /* @__PURE__ */ u(Ue, { actions: [{
373
- label: v("vibesPage.refreshTitle", "Refresh vibes"),
374
- onSelect: () => void V(),
375
- disabled: B,
376
- icon: /* @__PURE__ */ u(Ie, { className: `size-4 ${B ? "animate-spin" : ""}` })
373
+ /* @__PURE__ */ f(He, { actions: [{
374
+ label: y("vibesPage.refreshTitle", "Refresh vibes"),
375
+ onSelect: () => void U(),
376
+ disabled: H,
377
+ icon: /* @__PURE__ */ f(Fe, { className: `size-4 ${H ? "animate-spin" : ""}` })
377
378
  }] })
378
379
  ]
379
380
  })
380
381
  }),
381
- /* @__PURE__ */ u(We, {
382
- icon: /* @__PURE__ */ u(Le, { className: "size-4" }),
383
- children: v("vibesPage.purpose", "A vibe is a workspace for a piece of work — a project, an experiment, a support task. It ties together the agent that runs your commands, the sessions you open, notes, schedules and audit history in one place. Create a vibe whenever you want a focused, shareable space to get something done with AI and your own machines.")
382
+ /* @__PURE__ */ f(Ue, {
383
+ icon: /* @__PURE__ */ f(Ie, { className: "size-4" }),
384
+ children: y("vibesPage.purpose", "A vibe is a workspace for a piece of work — a project, an experiment, a support task. It ties together the agent that runs your commands, the sessions you open, notes, schedules and audit history in one place. Create a vibe whenever you want a focused, shareable space to get something done with AI and your own machines.")
384
385
  }),
385
- /* @__PURE__ */ d("div", {
386
+ /* @__PURE__ */ p("div", {
386
387
  className: "space-y-3",
387
- children: [/* @__PURE__ */ d("div", {
388
+ children: [/* @__PURE__ */ p("div", {
388
389
  className: "flex items-center gap-2",
389
- children: [/* @__PURE__ */ u("div", {
390
+ children: [/* @__PURE__ */ f("div", {
390
391
  "data-tour": "vibecontrols-vibes-search",
391
392
  className: "flex-1 sm:w-64 sm:flex-none",
392
- children: /* @__PURE__ */ u(_e, {
393
- value: x,
394
- onChange: ut,
395
- placeholder: v("vibesPage.searchPlaceholder", "Search vibes..."),
393
+ children: /* @__PURE__ */ f(_e, {
394
+ value: C,
395
+ onChange: lt,
396
+ placeholder: y("vibesPage.searchPlaceholder", "Search vibes..."),
396
397
  className: "w-full"
397
398
  })
398
- }), /* @__PURE__ */ d("div", {
399
+ }), /* @__PURE__ */ p("div", {
399
400
  "data-tour": "vibecontrols-vibes-view-toggle",
400
401
  className: "flex items-center gap-1 bg-bg-sunken rounded-button p-1 flex-shrink-0 border border-border-subtle",
401
- children: [/* @__PURE__ */ u("button", {
402
+ children: [/* @__PURE__ */ f("button", {
402
403
  type: "button",
403
- onClick: () => mt("grid"),
404
- className: `p-1.5 sm:p-2 rounded ${T === "grid" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
405
- title: v("vibesPage.gridViewTitle", "Grid view"),
406
- children: /* @__PURE__ */ u(Me, { className: "size-4 text-text-secondary" })
407
- }), /* @__PURE__ */ u("button", {
404
+ onClick: () => pt("grid"),
405
+ className: `p-1.5 sm:p-2 rounded ${D === "grid" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
406
+ title: y("vibesPage.gridViewTitle", "Grid view"),
407
+ children: /* @__PURE__ */ f(je, { className: "size-4 text-text-secondary" })
408
+ }), /* @__PURE__ */ f("button", {
408
409
  type: "button",
409
- onClick: () => mt("list"),
410
- className: `p-1.5 sm:p-2 rounded ${T === "list" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
411
- title: v("vibesPage.listViewTitle", "List view"),
412
- children: /* @__PURE__ */ u(Ne, { className: "size-4 text-text-secondary" })
410
+ onClick: () => pt("list"),
411
+ className: `p-1.5 sm:p-2 rounded ${D === "list" ? "bg-[var(--color-accent-soft)] text-text-primary" : "text-text-secondary hover:bg-bg-surface/60"}`,
412
+ title: y("vibesPage.listViewTitle", "List view"),
413
+ children: /* @__PURE__ */ f(Me, { className: "size-4 text-text-secondary" })
413
414
  })]
414
415
  })]
415
- }), /* @__PURE__ */ d("div", {
416
+ }), /* @__PURE__ */ p("div", {
416
417
  className: "flex items-center gap-2 sm:gap-3 flex-wrap",
417
- children: [/* @__PURE__ */ u("div", {
418
- "data-tour": "vibecontrols-vibes-status-filter",
419
- children: /* @__PURE__ */ u(ve, {
420
- label: v("vibesPage.filterStatus", "Status"),
421
- value: S,
422
- options: y,
423
- onChange: dt
424
- })
425
- }), /* @__PURE__ */ u("div", {
426
- "data-tour": "vibecontrols-vibes-agent-filter",
427
- onMouseDown: H,
428
- onFocus: H,
429
- children: /* @__PURE__ */ u(ve, {
430
- label: v("vibesPage.filterAgent", "Agent"),
431
- value: w,
432
- options: Vt,
433
- onChange: pt
418
+ children: [
419
+ /* @__PURE__ */ f("div", {
420
+ "data-tour": "vibecontrols-vibes-status-filter",
421
+ children: /* @__PURE__ */ f(o, {
422
+ label: y("vibesPage.filterStatus", "Status"),
423
+ value: w,
424
+ options: b,
425
+ onChange: ut
426
+ })
427
+ }),
428
+ /* @__PURE__ */ f("div", {
429
+ "data-tour": "vibecontrols-vibes-type-filter",
430
+ children: /* @__PURE__ */ f(o, {
431
+ label: y("vibesPage.filterType", "Type"),
432
+ value: T,
433
+ options: x,
434
+ onChange: dt,
435
+ allLabel: y("vibesPage.typeAll", "All Types")
436
+ })
437
+ }),
438
+ /* @__PURE__ */ f("div", {
439
+ "data-tour": "vibecontrols-vibes-agent-filter",
440
+ onMouseDown: W,
441
+ onFocus: W,
442
+ children: /* @__PURE__ */ f(o, {
443
+ label: y("vibesPage.filterAgent", "Agent"),
444
+ value: E,
445
+ options: Bt,
446
+ onChange: ft
447
+ })
434
448
  })
435
- })]
449
+ ]
436
450
  })]
437
451
  }),
438
- x || S !== "all" || C !== "all" || w !== "all" ? /* @__PURE__ */ d("p", {
452
+ C || w !== "all" || T !== "all" || E !== "all" ? /* @__PURE__ */ p("p", {
439
453
  className: "text-sm text-text-secondary",
440
- children: [v("vibesPage.showingResults", "Showing {{filtered}} of {{total}} vibes", {
441
- filtered: W.length,
442
- total: U.length
443
- }), B && /* @__PURE__ */ u("span", {
454
+ children: [y("vibesPage.showingResults", "Showing {{filtered}} of {{total}} vibes", {
455
+ filtered: K.length,
456
+ total: G.length
457
+ }), H && /* @__PURE__ */ f("span", {
444
458
  className: "ml-2 text-text-muted",
445
- children: v("vibesPage.refreshing", "(refreshing...)")
459
+ children: y("vibesPage.refreshing", "(refreshing...)")
446
460
  })]
447
461
  }) : null,
448
- W.length > 0 && /* @__PURE__ */ u("div", {
462
+ K.length > 0 && /* @__PURE__ */ f("div", {
449
463
  "data-tour": "vibecontrols-vibes-bulk-actions-toolbar",
450
464
  className: "rounded-card border border-border-subtle bg-bg-surface shadow-elevation-1 p-5",
451
- children: /* @__PURE__ */ d("div", {
465
+ children: /* @__PURE__ */ p("div", {
452
466
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
453
- children: [/* @__PURE__ */ d("div", {
467
+ children: [/* @__PURE__ */ p("div", {
454
468
  className: "flex flex-wrap items-center gap-3",
455
- children: [/* @__PURE__ */ d("div", {
469
+ children: [/* @__PURE__ */ p("div", {
456
470
  className: "flex items-center gap-2",
457
- children: [/* @__PURE__ */ u(be, {
458
- checked: q,
459
- indeterminate: Ut,
471
+ children: [/* @__PURE__ */ f(ye, {
472
+ checked: Y,
473
+ indeterminate: Ht,
460
474
  onChange: $t,
461
475
  ariaLabel: "Select all visible vibes"
462
- }), /* @__PURE__ */ u("span", {
476
+ }), /* @__PURE__ */ f("span", {
463
477
  className: "text-sm font-medium text-text-primary",
464
478
  children: "Select all visible"
465
479
  })]
466
- }), P.size > 0 && /* @__PURE__ */ u("button", {
480
+ }), I.size > 0 && /* @__PURE__ */ f("button", {
467
481
  type: "button",
468
- onClick: Z,
482
+ onClick: en,
469
483
  className: "text-sm text-text-secondary hover:text-text-primary",
470
484
  children: "Clear selection"
471
485
  })]
472
- }), /* @__PURE__ */ d("div", {
486
+ }), /* @__PURE__ */ p("div", {
473
487
  className: "flex flex-wrap items-center gap-2",
474
488
  children: [
475
- /* @__PURE__ */ d("span", {
489
+ /* @__PURE__ */ p("span", {
476
490
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
477
- children: [P.size, " selected"]
491
+ children: [I.size, " selected"]
478
492
  }),
479
- /* @__PURE__ */ u(f, {
480
- permission: a.VIBE_UPDATE,
493
+ /* @__PURE__ */ f(m, {
494
+ permission: s.VIBE_UPDATE,
481
495
  deniedBehavior: "hide",
482
- children: /* @__PURE__ */ u("button", {
496
+ children: /* @__PURE__ */ f("button", {
483
497
  type: "button",
484
- onClick: () => I("activate"),
485
- disabled: G.length === 0,
498
+ onClick: () => R("activate"),
499
+ disabled: q.length === 0,
486
500
  title: "Mark selected vibes as ACTIVE so they appear in the default vibe list and can run sessions/tunnels via their attached agent(s).",
487
501
  className: "rounded-button border border-status-success-border px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle transition-colors disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
488
- children: /* @__PURE__ */ d("span", {
502
+ children: /* @__PURE__ */ p("span", {
489
503
  className: "inline-flex items-center gap-2",
490
504
  children: [
491
- /* @__PURE__ */ u(Pe, { className: "size-4" }),
505
+ /* @__PURE__ */ f(Ne, { className: "size-4" }),
492
506
  "Activate Selected",
493
- G.length > 0 ? ` (${G.length})` : ""
507
+ q.length > 0 ? ` (${q.length})` : ""
494
508
  ]
495
509
  })
496
510
  })
497
511
  }),
498
- /* @__PURE__ */ u(f, {
499
- permission: a.VIBE_UPDATE,
512
+ /* @__PURE__ */ f(m, {
513
+ permission: s.VIBE_UPDATE,
500
514
  deniedBehavior: "hide",
501
- children: /* @__PURE__ */ u("button", {
515
+ children: /* @__PURE__ */ f("button", {
502
516
  type: "button",
503
- onClick: () => I("archive"),
504
- disabled: K.length === 0,
517
+ onClick: () => R("archive"),
518
+ disabled: J.length === 0,
505
519
  className: "rounded-button border border-status-warning-border px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle transition-colors disabled:cursor-not-allowed disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
506
- children: /* @__PURE__ */ d("span", {
520
+ children: /* @__PURE__ */ p("span", {
507
521
  className: "inline-flex items-center gap-2",
508
522
  children: [
509
- /* @__PURE__ */ u(je, { className: "size-4" }),
523
+ /* @__PURE__ */ f(Ae, { className: "size-4" }),
510
524
  "Archive Selected",
511
- K.length > 0 ? ` (${K.length})` : ""
525
+ J.length > 0 ? ` (${J.length})` : ""
512
526
  ]
513
527
  })
514
528
  })
@@ -517,217 +531,217 @@ function et() {
517
531
  })]
518
532
  })
519
533
  }),
520
- an ? /* @__PURE__ */ u(xe, {
534
+ on ? /* @__PURE__ */ f(be, {
521
535
  variant: "cards",
522
536
  count: 6
523
- }) : W.length > 0 ? /* @__PURE__ */ u(Be, {
537
+ }) : K.length > 0 ? /* @__PURE__ */ f(ze, {
524
538
  mode: "wait",
525
- children: T === "grid" ? /* @__PURE__ */ u(p, {
539
+ children: D === "grid" ? /* @__PURE__ */ f(qe, {
526
540
  "data-tour": "vibes-page-grid-view",
527
541
  stagger: .04,
528
542
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 gap-4 xl:gap-3",
529
- children: W.map((e) => /* @__PURE__ */ u(qe, { children: /* @__PURE__ */ u(Te, {
543
+ children: K.map((e) => /* @__PURE__ */ f(Ke, { children: /* @__PURE__ */ f(we, {
530
544
  vibe: e,
531
- onOpen: Wt,
532
- onActivate: ct ? J : void 0,
533
- onArchive: ct ? Gt : void 0,
534
- onDelete: lt ? z : void 0,
545
+ onOpen: Ut,
546
+ onActivate: st ? Wt : void 0,
547
+ onArchive: st ? Gt : void 0,
548
+ onDelete: ct ? V : void 0,
535
549
  onOpenInEditor: Yt,
536
- selected: P.has(e.id),
550
+ selected: I.has(e.id),
537
551
  onToggleSelect: (t) => Qt(e, t)
538
552
  }) }, e.id))
539
- }, "grid") : /* @__PURE__ */ u(p, { children: /* @__PURE__ */ u(De, {
540
- vibes: W,
541
- onOpen: Wt,
542
- onActivate: J,
553
+ }, "grid") : /* @__PURE__ */ f(qe, { children: /* @__PURE__ */ f(Ee, {
554
+ vibes: K,
555
+ onOpen: Ut,
556
+ onActivate: Wt,
543
557
  onArchive: Gt,
544
- onDelete: lt ? z : void 0,
558
+ onDelete: ct ? V : void 0,
545
559
  onOpenInEditor: Yt,
546
- selectedVibeIds: P,
560
+ selectedVibeIds: I,
547
561
  onToggleSelect: Qt,
548
562
  onToggleAllVisible: $t,
549
- allVisibleSelected: q,
550
- partiallySelected: Ut
563
+ allVisibleSelected: Y,
564
+ partiallySelected: Ht
551
565
  }) }, "list")
552
- }) : /* @__PURE__ */ u(ge, {
553
- icon: /* @__PURE__ */ u(Le, { className: "size-8 text-text-secondary" }),
554
- illustration: x || S !== "all" || C !== "all" || w !== "all" ? "empty-search" : "empty-vibes",
555
- title: x || S !== "all" || C !== "all" || w !== "all" ? v("vibesPage.emptyNoVibesFound", "No vibes found") : v("vibesPage.emptyNoVibesConfigured", "No vibes configured"),
556
- description: x || S !== "all" || C !== "all" || w !== "all" ? v("vibesPage.emptyAdjustSearch", "Try adjusting your search or filters") : v("vibesPage.emptyNoVibesDescription", "Add your first vibe to start managing your development projects"),
557
- action: !x && S === "all" && C === "all" && w === "all" ? /* @__PURE__ */ d("div", {
566
+ }) : /* @__PURE__ */ f(ge, {
567
+ icon: /* @__PURE__ */ f(Ie, { className: "size-8 text-text-secondary" }),
568
+ illustration: C || w !== "all" || T !== "all" || E !== "all" ? "empty-search" : "empty-vibes",
569
+ title: C || w !== "all" || T !== "all" || E !== "all" ? y("vibesPage.emptyNoVibesFound", "No vibes found") : y("vibesPage.emptyNoVibesConfigured", "No vibes configured"),
570
+ description: C || w !== "all" || T !== "all" || E !== "all" ? y("vibesPage.emptyAdjustSearch", "Try adjusting your search or filters") : y("vibesPage.emptyNoVibesDescription", "Add your first vibe to start managing your development projects"),
571
+ action: !C && w === "all" && T === "all" && E === "all" ? /* @__PURE__ */ p("div", {
558
572
  className: "flex items-center gap-2",
559
- children: [/* @__PURE__ */ u(Ke, {
560
- permission: a.VIBE_CREATE,
561
- children: /* @__PURE__ */ d("button", {
573
+ children: [/* @__PURE__ */ f(Ge, {
574
+ permission: s.VIBE_CREATE,
575
+ children: /* @__PURE__ */ p("button", {
562
576
  type: "button",
563
- onClick: Y,
577
+ onClick: X,
564
578
  className: "flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
565
- children: [/* @__PURE__ */ u(Fe, { className: "size-4" }), v("vibesPage.addVibe", "Add Vibe")]
579
+ children: [/* @__PURE__ */ f(Pe, { className: "size-4" }), y("vibesPage.addVibe", "Add Vibe")]
566
580
  })
567
- }), /* @__PURE__ */ u(ye, { prompt: "What is a Vibe in VibeControls and how do I create one?" })]
581
+ }), /* @__PURE__ */ f(ve, { prompt: "What is a Vibe in VibeControls and how do I create one?" })]
568
582
  }) : void 0
569
583
  }),
570
- vt && /* @__PURE__ */ u("div", {
584
+ _t && /* @__PURE__ */ f("div", {
571
585
  className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-success-bg-subtle text-status-success-text border border-status-success-border rounded-card shadow-elevation-3 text-sm",
572
- children: vt
586
+ children: _t
573
587
  }),
574
- /* @__PURE__ */ u(ne, {
575
- isOpen: xt === "activate",
576
- onClose: () => I(null),
577
- onConfirm: en,
588
+ /* @__PURE__ */ f(ne, {
589
+ isOpen: bt === "activate",
590
+ onClose: () => R(null),
591
+ onConfirm: tn,
578
592
  title: "Activate selected vibes",
579
- message: `Activate ${G.length} selected vibe${G.length === 1 ? "" : "s"}?`,
593
+ message: `Activate ${q.length} selected vibe${q.length === 1 ? "" : "s"}?`,
580
594
  confirmLabel: "Activate",
581
595
  variant: "default"
582
596
  }),
583
- /* @__PURE__ */ u(ne, {
584
- isOpen: xt === "archive",
585
- onClose: () => I(null),
586
- onConfirm: tn,
597
+ /* @__PURE__ */ f(ne, {
598
+ isOpen: bt === "archive",
599
+ onClose: () => R(null),
600
+ onConfirm: nn,
587
601
  title: "Archive selected vibes",
588
- message: `Archive ${K.length} selected vibe${K.length === 1 ? "" : "s"}? Archived vibes will be hidden from active workflows.`,
602
+ message: `Archive ${J.length} selected vibe${J.length === 1 ? "" : "s"}? Archived vibes will be hidden from active workflows.`,
589
603
  confirmLabel: "Archive",
590
604
  variant: "warning"
591
605
  }),
592
- bt && /* @__PURE__ */ d("div", {
606
+ yt && /* @__PURE__ */ p("div", {
593
607
  role: "alert",
594
608
  className: "fixed bottom-4 right-4 z-50 px-4 py-3 bg-status-error-bg-subtle text-status-error-text border border-status-error-border rounded-card shadow-elevation-3 text-sm",
595
- children: [bt, /* @__PURE__ */ u("button", {
609
+ children: [yt, /* @__PURE__ */ f("button", {
596
610
  type: "button",
597
- onClick: St,
611
+ onClick: xt,
598
612
  className: "ml-3 text-xs underline opacity-80 hover:opacity-100",
599
- children: v("vibesPage.dismiss", "Dismiss")
613
+ children: y("vibesPage.dismiss", "Dismiss")
600
614
  })]
601
615
  }),
602
- ht && /* @__PURE__ */ u("div", {
616
+ mt && /* @__PURE__ */ f("div", {
603
617
  className: "fixed inset-0 bg-bg-overlay flex items-center justify-center z-50 p-4",
604
- children: /* @__PURE__ */ d("div", {
618
+ children: /* @__PURE__ */ p("div", {
605
619
  className: "bg-bg-surface rounded-card border border-border-subtle shadow-[var(--shadow-elevation-4)] p-6 w-full max-w-lg",
606
620
  children: [
607
- /* @__PURE__ */ u("h2", {
621
+ /* @__PURE__ */ f("h2", {
608
622
  className: "text-lg font-semibold text-text-primary mb-4",
609
- children: v("vibesPage.addNewVibe", "Add New Vibe")
623
+ children: y("vibesPage.addNewVibe", "Add New Vibe")
610
624
  }),
611
- /* @__PURE__ */ d("div", {
625
+ /* @__PURE__ */ p("div", {
612
626
  className: "space-y-4",
613
627
  children: [
614
- gt && /* @__PURE__ */ u("div", {
628
+ ht && /* @__PURE__ */ f("div", {
615
629
  className: "p-3 bg-status-error-bg-subtle text-status-error-text border border-status-error-border text-sm rounded-card",
616
- children: gt
630
+ children: ht
617
631
  }),
618
- /* @__PURE__ */ d("div", { children: [
619
- /* @__PURE__ */ u("label", {
632
+ /* @__PURE__ */ p("div", { children: [
633
+ /* @__PURE__ */ f("label", {
620
634
  className: "block text-sm font-medium text-text-primary mb-1",
621
- children: v("vibesPage.nameLabel", "Name *")
635
+ children: y("vibesPage.nameLabel", "Name *")
622
636
  }),
623
- /* @__PURE__ */ u("input", {
637
+ /* @__PURE__ */ f("input", {
624
638
  "aria-label": "control",
625
- ref: Ct,
639
+ ref: St,
626
640
  type: "text",
627
- placeholder: v("vibesPage.namePlaceholder", "My Project"),
628
- onChange: () => j.name && M((e) => ({
641
+ placeholder: y("vibesPage.namePlaceholder", "My Project"),
642
+ onChange: () => N.name && P((e) => ({
629
643
  ...e,
630
644
  name: void 0
631
645
  })),
632
- className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${j.name ? "border-status-error-border" : "border-border-subtle"}`
646
+ className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${N.name ? "border-status-error-border" : "border-border-subtle"}`
633
647
  }),
634
- j.name && /* @__PURE__ */ u("p", {
648
+ N.name && /* @__PURE__ */ f("p", {
635
649
  className: "mt-1 text-xs text-status-error-text",
636
- children: j.name
650
+ children: N.name
637
651
  })
638
652
  ] }),
639
- /* @__PURE__ */ d("div", { children: [
640
- /* @__PURE__ */ d("label", {
653
+ /* @__PURE__ */ p("div", { children: [
654
+ /* @__PURE__ */ p("label", {
641
655
  className: "block text-sm font-medium text-text-primary mb-1",
642
- children: [v("vibesPage.pathLabel", "Path"), /* @__PURE__ */ u("span", {
656
+ children: [y("vibesPage.pathLabel", "Path"), /* @__PURE__ */ f("span", {
643
657
  className: "ml-1 text-xs text-text-tertiary font-normal",
644
- children: v("vibesPage.pathOptional", "(optional)")
658
+ children: y("vibesPage.pathOptional", "(optional)")
645
659
  })]
646
660
  }),
647
- /* @__PURE__ */ u("input", {
661
+ /* @__PURE__ */ f("input", {
648
662
  "aria-label": "control",
649
- ref: wt,
663
+ ref: Ct,
650
664
  type: "text",
651
- placeholder: v("vibesPage.pathPlaceholder", "/path/to/project"),
652
- onChange: () => j.path && M((e) => ({
665
+ placeholder: y("vibesPage.pathPlaceholder", "/path/to/project"),
666
+ onChange: () => N.path && P((e) => ({
653
667
  ...e,
654
668
  path: void 0
655
669
  })),
656
- className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${j.path ? "border-status-error-border" : "border-border-subtle"}`
670
+ className: `w-full px-3 py-2 bg-bg-sunken border rounded-input text-text-primary placeholder:text-text-placeholder transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong ${N.path ? "border-status-error-border" : "border-border-subtle"}`
657
671
  }),
658
- j.path && /* @__PURE__ */ u("p", {
672
+ N.path && /* @__PURE__ */ f("p", {
659
673
  className: "mt-1 text-xs text-status-error-text",
660
- children: j.path
674
+ children: N.path
661
675
  })
662
676
  ] }),
663
- /* @__PURE__ */ d("div", { children: [/* @__PURE__ */ u("label", {
677
+ /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("label", {
664
678
  className: "block text-sm font-medium text-text-primary mb-1",
665
- children: v("vibesPage.agentLabel", "Agent")
666
- }), /* @__PURE__ */ d("select", {
667
- ref: Tt,
679
+ children: y("vibesPage.agentLabel", "Agent")
680
+ }), /* @__PURE__ */ p("select", {
681
+ ref: wt,
668
682
  className: "w-full px-3 py-2 bg-bg-sunken border border-border-subtle rounded-input text-text-primary transition-colors focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)] focus:border-border-strong",
669
- children: [/* @__PURE__ */ u("option", {
683
+ children: [/* @__PURE__ */ f("option", {
670
684
  value: "",
671
- children: v("vibesPage.selectAgent", "Select an agent")
672
- }), Vt.filter((e) => e.value !== "all").map((e) => /* @__PURE__ */ u("option", {
685
+ children: y("vibesPage.selectAgent", "Select an agent")
686
+ }), Bt.filter((e) => e.value !== "all").map((e) => /* @__PURE__ */ f("option", {
673
687
  value: e.value,
674
688
  children: e.label
675
689
  }, e.value))]
676
690
  })] }),
677
- /* @__PURE__ */ u("input", {
678
- ref: Et,
691
+ /* @__PURE__ */ f("input", {
692
+ ref: Tt,
679
693
  type: "hidden",
680
694
  value: "PROJECT"
681
695
  })
682
696
  ]
683
697
  }),
684
- /* @__PURE__ */ d("div", {
698
+ /* @__PURE__ */ p("div", {
685
699
  className: "mt-4 border-t border-border-subtle pt-4",
686
- children: [/* @__PURE__ */ u("h3", {
700
+ children: [/* @__PURE__ */ f("h3", {
687
701
  className: "text-sm font-medium text-text-secondary mb-2",
688
- children: v("vibesPage.tags", "Tags")
689
- }), /* @__PURE__ */ u(me, {
702
+ children: y("vibesPage.tags", "Tags")
703
+ }), /* @__PURE__ */ f(me, {
690
704
  entityType: "VIBECONTROLS_VIBE",
691
- onDraftChange: kt
705
+ onDraftChange: Ot
692
706
  })]
693
707
  }),
694
- /* @__PURE__ */ d("div", {
708
+ /* @__PURE__ */ p("div", {
695
709
  className: "flex flex-col sm:flex-row justify-end gap-3 mt-6",
696
- children: [/* @__PURE__ */ u("button", {
710
+ children: [/* @__PURE__ */ f("button", {
697
711
  type: "button",
698
- onClick: () => E(!1),
699
- disabled: O,
712
+ onClick: () => O(!1),
713
+ disabled: A,
700
714
  className: "px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50",
701
- children: v("vibesPage.cancel", "Cancel")
702
- }), /* @__PURE__ */ u("button", {
715
+ children: y("vibesPage.cancel", "Cancel")
716
+ }), /* @__PURE__ */ f("button", {
703
717
  type: "button",
704
- onClick: nn,
705
- disabled: O,
718
+ onClick: rn,
719
+ disabled: A,
706
720
  className: "px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-button hover:bg-action-primary-bgHover transition-all duration-200 disabled:opacity-50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus",
707
- children: O ? v("vibesPage.creating", "Creating...") : v("vibesPage.createVibe", "Create Vibe")
721
+ children: A ? y("vibesPage.creating", "Creating...") : y("vibesPage.createVibe", "Create Vibe")
708
722
  })]
709
723
  })
710
724
  ]
711
725
  })
712
726
  }),
713
- /* @__PURE__ */ u(re, {
714
- isOpen: yt,
715
- onClose: () => A(!1),
727
+ /* @__PURE__ */ f(re, {
728
+ isOpen: vt,
729
+ onClose: () => M(!1),
716
730
  onConfirm: () => {
717
- A(!1), tt(oe);
731
+ M(!1), tt(oe);
718
732
  },
719
733
  title: "Vibe Quota Reached",
720
734
  message: "You've used all available vibe creation quota on your current plan. Upgrade your plan to create more vibes."
721
735
  })
722
736
  ] }),
723
- R && /* @__PURE__ */ u(Ee, {
737
+ B && /* @__PURE__ */ f(Te, {
724
738
  vibe: {
725
- id: R.id,
726
- name: R.name
739
+ id: B.id,
740
+ name: B.name
727
741
  },
728
- deleting: Pt,
742
+ deleting: Nt,
729
743
  onConfirm: Kt,
730
- onCancel: () => z(null)
744
+ onCancel: () => V(null)
731
745
  })
732
746
  ]
733
747
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-vibecontrols",
3
- "version": "2026.1023.8",
3
+ "version": "2026.1027.1",
4
4
  "description": "VibeControls microfrontend for Burdenoff products",
5
5
  "type": "module",
6
6
  "files": [