@burdenoff/microfe-vibecontrols 2026.625.3 → 2026.626.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 (59) hide show
  1. package/dist/components/agents/AgentForm.js +129 -127
  2. package/dist/components/agents/AgentForm.js.map +1 -1
  3. package/dist/components/shared/InstallTabs.js +19 -7
  4. package/dist/components/shared/InstallTabs.js.map +1 -1
  5. package/dist/pages/ActionsPage.js +209 -204
  6. package/dist/pages/ActionsPage.js.map +1 -1
  7. package/dist/pages/AgentDetailsPage.js +678 -648
  8. package/dist/pages/AgentDetailsPage.js.map +1 -1
  9. package/dist/pages/AgentGraphPage.js +112 -108
  10. package/dist/pages/AgentGraphPage.js.map +1 -1
  11. package/dist/pages/AgentsPage.js +159 -155
  12. package/dist/pages/AgentsPage.js.map +1 -1
  13. package/dist/pages/AnalyticsPage.js +140 -136
  14. package/dist/pages/AnalyticsPage.js.map +1 -1
  15. package/dist/pages/CatalogDetailPage.js +249 -244
  16. package/dist/pages/CatalogDetailPage.js.map +1 -1
  17. package/dist/pages/CatalogPage.js +73 -68
  18. package/dist/pages/CatalogPage.js.map +1 -1
  19. package/dist/pages/ComponentDetailPage.js +195 -164
  20. package/dist/pages/ComponentDetailPage.js.map +1 -1
  21. package/dist/pages/ComponentsPage.js +80 -75
  22. package/dist/pages/ComponentsPage.js.map +1 -1
  23. package/dist/pages/EnvTopologyPage.js +100 -95
  24. package/dist/pages/EnvTopologyPage.js.map +1 -1
  25. package/dist/pages/HealthPage.js +331 -204
  26. package/dist/pages/HealthPage.js.map +1 -1
  27. package/dist/pages/LogsPage.js +54 -49
  28. package/dist/pages/LogsPage.js.map +1 -1
  29. package/dist/pages/OverviewPage.js +159 -129
  30. package/dist/pages/OverviewPage.js.map +1 -1
  31. package/dist/pages/PluginsCatalogPage.js +72 -78
  32. package/dist/pages/PluginsCatalogPage.js.map +1 -1
  33. package/dist/pages/SessionDetailsPage.js +517 -512
  34. package/dist/pages/SessionDetailsPage.js.map +1 -1
  35. package/dist/pages/SessionsPage.js +1084 -1079
  36. package/dist/pages/SessionsPage.js.map +1 -1
  37. package/dist/pages/SettingsPage.js +107 -103
  38. package/dist/pages/SettingsPage.js.map +1 -1
  39. package/dist/pages/TargetDetailsPage.js +131 -123
  40. package/dist/pages/TargetDetailsPage.js.map +1 -1
  41. package/dist/pages/TargetsPage.js +198 -194
  42. package/dist/pages/TargetsPage.js.map +1 -1
  43. package/dist/pages/TemplatesPage.js +77 -71
  44. package/dist/pages/TemplatesPage.js.map +1 -1
  45. package/dist/pages/VibeAuditPage.js +83 -78
  46. package/dist/pages/VibeAuditPage.js.map +1 -1
  47. package/dist/pages/VibeCalendarPage.js +109 -104
  48. package/dist/pages/VibeCalendarPage.js.map +1 -1
  49. package/dist/pages/VibeDeckPage.js +222 -217
  50. package/dist/pages/VibeDeckPage.js.map +1 -1
  51. package/dist/pages/VibeDetailsPage.js +532 -501
  52. package/dist/pages/VibeDetailsPage.js.map +1 -1
  53. package/dist/pages/VibesPage.js +137 -133
  54. package/dist/pages/VibesPage.js.map +1 -1
  55. package/dist/pages/WebhooksPage.js +329 -324
  56. package/dist/pages/WebhooksPage.js.map +1 -1
  57. package/dist/pages/ai/AIPage.js +149 -144
  58. package/dist/pages/ai/AIPage.js.map +1 -1
  59. package/package.json +2 -2
@@ -1,40 +1,40 @@
1
- import { useCreateActionMutation as e, useDeleteActionMutation as t, useDuplicateActionMutation as n, useExecuteActionMutation as r, useGetActionQuery as i, useListActionsQuery as ee, useListAgentsQuery as te, useUpdateActionMutation as ne } from "../generated/wspace-operations.js";
2
- import { ConfirmDialog as a } from "../components/shared/ConfirmDialog.js";
3
- import { QuotaExhaustedDialog as re } from "../components/shared/QuotaExhaustedDialog.js";
4
- import { getQuotaDialogContent as ie, isQuotaExhaustedError as o, markQuotaHandledLocally as s } from "../utils/quotaUtils.js";
5
- import { useVibeControls as ae } from "../providers/VibeControlsProvider.js";
6
- import { PageHeader as oe } from "../components/shared/PageHeader.js";
7
- import { LoadingState as se } from "../components/shared/LoadingState.js";
8
- import { ErrorState as ce } from "../components/shared/ErrorState.js";
9
- import { EntityTagPicker as le } from "../components/shared/EntityTagPicker.js";
10
- import { useDraftEntityTags as ue } from "../hooks/useDraftEntityTags.js";
11
- import { EmptyState as de } from "../components/shared/EmptyState.js";
12
- import { SearchInput as fe } from "../components/shared/SearchInput.js";
13
- import { FilterDropdown as pe } from "../components/shared/FilterDropdown.js";
14
- import { EnableRemoteTaskDialog as me } from "../components/shared/EnableRemoteTaskDialog.js";
15
- import { LINK_TO_VIBE_DEFAULT as c, LinkToVibePanel as he, linkToVibeInput as ge } from "../components/shared/LinkToVibePanel.js";
16
- import { GetHelpButton as _e } from "../components/shared/GetHelpButton.js";
17
- import { SelectionCheckbox as ve } from "../components/shared/SelectionCheckbox.js";
18
- import { useActiveAgentProfile as ye } from "../hooks/useActiveAgentProfile.js";
1
+ import { useCreateActionMutation as e, useDeleteActionMutation as t, useDuplicateActionMutation as n, useExecuteActionMutation as r, useGetActionQuery as i, useListActionsQuery as a, useListAgentsQuery as ee, useUpdateActionMutation as te } from "../generated/wspace-operations.js";
2
+ import { ConfirmDialog as o } from "../components/shared/ConfirmDialog.js";
3
+ import { QuotaExhaustedDialog as ne } from "../components/shared/QuotaExhaustedDialog.js";
4
+ import { getQuotaDialogContent as re, isQuotaExhaustedError as s, markQuotaHandledLocally as c } from "../utils/quotaUtils.js";
5
+ import { useVibeControls as ie } from "../providers/VibeControlsProvider.js";
6
+ import { PageHeader as ae } from "../components/shared/PageHeader.js";
7
+ import { LoadingState as oe } from "../components/shared/LoadingState.js";
8
+ import { ErrorState as se } from "../components/shared/ErrorState.js";
9
+ import { EntityTagPicker as ce } from "../components/shared/EntityTagPicker.js";
10
+ import { useDraftEntityTags as le } from "../hooks/useDraftEntityTags.js";
11
+ import { EmptyState as ue } from "../components/shared/EmptyState.js";
12
+ import { SearchInput as de } from "../components/shared/SearchInput.js";
13
+ import { FilterDropdown as fe } from "../components/shared/FilterDropdown.js";
14
+ import { EnableRemoteTaskDialog as pe } from "../components/shared/EnableRemoteTaskDialog.js";
15
+ import { LINK_TO_VIBE_DEFAULT as l, LinkToVibePanel as me, linkToVibeInput as he } from "../components/shared/LinkToVibePanel.js";
16
+ import { GetHelpButton as ge } from "../components/shared/GetHelpButton.js";
17
+ import { SelectionCheckbox as _e } from "../components/shared/SelectionCheckbox.js";
18
+ import { useActiveAgentProfile as ve } from "../hooks/useActiveAgentProfile.js";
19
19
  import "../components/shared/index.js";
20
- import { isNative as be, nativeNotify as xe } from "../utils/nativeBridge.js";
21
- import { VIBE_PERMISSIONS as l } from "../constants/permissions.js";
22
- import { ActionCard as Se } from "../components/actions/ActionCard.js";
23
- import { enableRemoteTaskExecution as Ce, isRemoteTaskDeniedError as we } from "../services/agentRemoteTaskGates.js";
24
- import { ActionForm as Te } from "../components/actions/ActionForm.js";
25
- import { ExecutionHistory as Ee } from "../components/actions/ExecutionHistory.js";
26
- import { ActionSchedulesList as De } from "../components/actions/ActionSchedulesList.js";
20
+ import { isNative as ye, nativeNotify as be } from "../utils/nativeBridge.js";
21
+ import { VIBE_PERMISSIONS as u } from "../constants/permissions.js";
22
+ import { ActionCard as xe } from "../components/actions/ActionCard.js";
23
+ import { enableRemoteTaskExecution as Se, isRemoteTaskDeniedError as Ce } from "../services/agentRemoteTaskGates.js";
24
+ import { ActionForm as we } from "../components/actions/ActionForm.js";
25
+ import { ExecutionHistory as Te } from "../components/actions/ExecutionHistory.js";
26
+ import { ActionSchedulesList as Ee } from "../components/actions/ActionSchedulesList.js";
27
27
  import "../components/actions/index.js";
28
- import { useCallback as u, useEffect as Oe, useMemo as d, useState as f } from "react";
29
- import { useI18n as ke } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
30
- import { Copy as Ae, Play as je, Plus as Me, RefreshCw as Ne, Trash2 as Pe } from "lucide-react";
31
- import { useNavigate as Fe, useSearchParams as Ie } from "react-router-dom";
32
- import { usePermissions as Le } from "@burdenoff/fe-libs/shared/providers/shell";
33
- import { AnimatePresence as p } from "framer-motion";
34
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
35
- import { CTAOverflowMenu as Re } from "@burdenoff/fe-libs/ui";
28
+ import { useCallback as d, useEffect as De, useMemo as f, useState as p } from "react";
29
+ import { useI18n as Oe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
30
+ import { Copy as ke, Play as Ae, Plus as je, RefreshCw as Me, Trash2 as Ne } from "lucide-react";
31
+ import { useNavigate as Pe, useSearchParams as Fe } from "react-router-dom";
32
+ import { usePermissions as Ie } from "@burdenoff/fe-libs/shared/providers/shell";
33
+ import { AnimatePresence as m } from "framer-motion";
34
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
35
+ import { CTAOverflowMenu as Le, PagePurpose as Re } from "@burdenoff/fe-libs/ui";
36
36
  import { AccessDenied as ze } from "@burdenoff/fe-libs/shared/components";
37
- import { MotionPage as g } from "@burdenoff/fe-libs/shared/motion";
37
+ import { MotionPage as _ } from "@burdenoff/fe-libs/shared/motion";
38
38
  //#region src/pages/ActionsPage.tsx
39
39
  var Be = [
40
40
  {
@@ -71,11 +71,11 @@ var Be = [
71
71
  label: "On Demand"
72
72
  }
73
73
  ];
74
- function _() {
75
- let _ = Fe(), [v, He] = Ie(), { workspaceId: Ue } = ae(), { hasPermission: y, isLoading: We, permissions: b } = Le(), x = ((e) => (t, n) => {
74
+ function v() {
75
+ let v = Pe(), [He, Ue] = Fe(), { workspaceId: We } = ie(), { hasPermission: y, isLoading: Ge, permissions: b } = Ie(), x = ((e) => (t, n) => {
76
76
  let r = e.t(t);
77
77
  return r === t ? n : r;
78
- })(ke()), S = (Array.isArray(b) ? b : b?.permissionStrings)?.some?.((e) => e.startsWith("action:")), Ge = S ? y(l.ACTION_LIST) : !0, Ke = S ? y(l.ACTION_CREATE) : !0, qe = S ? y(l.ACTION_UPDATE) : !0, Je = S ? y(l.ACTION_DELETE) : !0, Ye = S ? y(l.ACTION_EXECUTE) : !0, C = We, [w, T] = f({ type: "none" }), [Xe, E] = f([]), [D, Ze] = f(""), [O, Qe] = f(null), [k, $e] = f(null), [A, j] = f(null), [M, N] = f(/* @__PURE__ */ new Set()), [et, tt] = f(null), [nt, P] = f(null), [F, I] = f(null), [L, R] = f(null), [z, B] = f(null), [rt, it] = f(!1), { profiles: at } = ye(z?.agentId ?? null), ot = at.find((e) => e.isDefault)?.name ?? "default", [V, H] = f(c), [st, ct] = f(c), U = u((e, t, n, r = 1e4) => {
78
+ })(Oe()), S = (Array.isArray(b) ? b : b?.permissionStrings)?.some?.((e) => e.startsWith("action:")), Ke = S ? y(u.ACTION_LIST) : !0, qe = S ? y(u.ACTION_CREATE) : !0, Je = S ? y(u.ACTION_UPDATE) : !0, Ye = S ? y(u.ACTION_DELETE) : !0, Xe = S ? y(u.ACTION_EXECUTE) : !0, C = Ge, [w, T] = p({ type: "none" }), [Ze, E] = p([]), [D, Qe] = p(""), [O, $e] = p(null), [k, et] = p(null), [A, j] = p(null), [M, N] = p(/* @__PURE__ */ new Set()), [tt, nt] = p(null), [rt, P] = p(null), [F, I] = p(null), [L, R] = p(null), [z, B] = p(null), [it, at] = p(!1), { profiles: ot } = ve(z?.agentId ?? null), st = ot.find((e) => e.isDefault)?.name ?? "default", [V, H] = p(l), [ct, lt] = p(l), U = d((e, t, n, r = 1e4) => {
79
79
  let i = Date.now() + Math.random();
80
80
  E((r) => [...r, {
81
81
  message: e,
@@ -83,9 +83,9 @@ function _() {
83
83
  detail: n,
84
84
  id: i
85
85
  }]), t === "success" && setTimeout(() => E((e) => e.filter((e) => e.id !== i)), r);
86
- }, []), lt = u((e) => {
86
+ }, []), ut = d((e) => {
87
87
  E((t) => t.filter((t) => t.id !== e));
88
- }, []), { data: ut, loading: dt, error: ft, refetch: W } = ee({
88
+ }, []), { data: dt, loading: ft, error: pt, refetch: W } = a({
89
89
  variables: {
90
90
  filter: {
91
91
  ...O && O !== "all" ? { actionType: O } : {},
@@ -95,20 +95,20 @@ function _() {
95
95
  pagination: { limit: 50 }
96
96
  },
97
97
  skip: C
98
- }), G = d(() => ut?.actions?.items || [], [ut]), { data: pt } = i({
98
+ }), G = f(() => dt?.actions?.items || [], [dt]), { data: mt } = i({
99
99
  variables: { id: A },
100
100
  skip: !A || C
101
- }), K = pt?.action, mt = K?.recentExecutions || [], { data: ht } = te({
101
+ }), K = mt?.action, ht = K?.recentExecutions || [], { data: gt } = ee({
102
102
  variables: { pagination: { limit: 100 } },
103
103
  fetchPolicy: "cache-and-network",
104
104
  skip: C
105
- }), gt = d(() => (ht?.vibecontrolsAgents ?? []).map((e) => ({
105
+ }), _t = f(() => (gt?.vibecontrolsAgents ?? []).map((e) => ({
106
106
  id: e.id,
107
107
  name: e.name,
108
108
  isActive: e.isActive
109
- })), [ht]), [_t, { loading: vt }] = e({ refetchQueries: ["ListActions"] }), { setDraftTagIds: yt, flushTags: bt } = ue("VIBECONTROLS_ACTION"), [xt, { loading: St }] = ne({ refetchQueries: ["ListActions", "GetAction"] }), [q] = t({ refetchQueries: ["ListActions"] }), [J] = r({ refetchQueries: ["GetAction"] }), [Y] = n({ refetchQueries: ["ListActions"] }), Ct = u(async (e) => {
109
+ })), [gt]), [vt, { loading: yt }] = e({ refetchQueries: ["ListActions"] }), { setDraftTagIds: bt, flushTags: xt } = le("VIBECONTROLS_ACTION"), [St, { loading: Ct }] = te({ refetchQueries: ["ListActions", "GetAction"] }), [q] = t({ refetchQueries: ["ListActions"] }), [J] = r({ refetchQueries: ["GetAction"] }), [Y] = n({ refetchQueries: ["ListActions"] }), wt = d(async (e) => {
110
110
  try {
111
- let t = await _t({ variables: { input: {
111
+ let t = await vt({ variables: { input: {
112
112
  name: e.name,
113
113
  displayName: e.displayName || null,
114
114
  description: e.description || null,
@@ -129,29 +129,29 @@ function _() {
129
129
  timeoutMs: e.timeoutMs,
130
130
  retryCount: e.retryCount,
131
131
  confirmationRequired: e.confirmationRequired,
132
- ...ge(V)
132
+ ...he(V)
133
133
  } } });
134
- if (t.error && o(t.error)) {
135
- T({ type: "none" }), s(), R("action");
134
+ if (t.error && s(t.error)) {
135
+ T({ type: "none" }), c(), R("action");
136
136
  return;
137
137
  }
138
138
  let n = t.data?.createAction?.id;
139
- T({ type: "none" }), U("Action created", "success"), H(c), n && await bt(n);
139
+ T({ type: "none" }), U("Action created", "success"), H(l), n && await xt(n);
140
140
  } catch (e) {
141
- if (o(e)) {
142
- T({ type: "none" }), s(), R("action");
141
+ if (s(e)) {
142
+ T({ type: "none" }), c(), R("action");
143
143
  return;
144
144
  }
145
145
  U(e instanceof Error ? e.message : "Failed to create action", "error");
146
146
  }
147
147
  }, [
148
- _t,
149
- bt,
148
+ vt,
149
+ xt,
150
150
  U,
151
151
  V
152
- ]), wt = u(async (e) => {
152
+ ]), Tt = d(async (e) => {
153
153
  if (w.type === "edit") try {
154
- await xt({ variables: {
154
+ await St({ variables: {
155
155
  id: w.actionId,
156
156
  input: {
157
157
  displayName: e.displayName || null,
@@ -173,29 +173,29 @@ function _() {
173
173
  timeoutMs: e.timeoutMs,
174
174
  retryCount: e.retryCount,
175
175
  confirmationRequired: e.confirmationRequired,
176
- ...ge(st)
176
+ ...he(ct)
177
177
  }
178
178
  } }), T({ type: "none" }), U("Action updated", "success");
179
179
  } catch (e) {
180
180
  U(e instanceof Error ? e.message : "Failed to update action", "error");
181
181
  }
182
182
  }, [
183
- xt,
183
+ St,
184
184
  w,
185
185
  U,
186
- st
187
- ]), Tt = u(async () => {
186
+ ct
187
+ ]), Et = d(async () => {
188
188
  if (w.type === "confirmDelete") try {
189
- await q({ variables: { id: w.id } }), A === w.id && j(null), T({ type: "none" }), U("Action deleted", "success"), be() && xe("success");
189
+ await q({ variables: { id: w.id } }), A === w.id && j(null), T({ type: "none" }), U("Action deleted", "success"), ye() && be("success");
190
190
  } catch (e) {
191
- U(e instanceof Error ? e.message : "Failed to delete action", "error"), be() && xe("error");
191
+ U(e instanceof Error ? e.message : "Failed to delete action", "error"), ye() && be("error");
192
192
  }
193
193
  }, [
194
194
  w,
195
195
  q,
196
196
  A,
197
197
  U
198
- ]), Et = async (e) => {
198
+ ]), Dt = async (e) => {
199
199
  let t = G.find((t) => t.id === e);
200
200
  if (t) {
201
201
  if (t.confirmationRequired) {
@@ -208,16 +208,16 @@ function _() {
208
208
  }
209
209
  await X(e);
210
210
  }
211
- }, X = u(async (e, t = !0) => {
212
- tt(e);
211
+ }, X = d(async (e, t = !0) => {
212
+ nt(e);
213
213
  try {
214
214
  let n = await J({ variables: { id: e } });
215
- if (n.error && o(n.error)) {
216
- s(), R("command-execution");
215
+ if (n.error && s(n.error)) {
216
+ c(), R("command-execution");
217
217
  return;
218
218
  }
219
219
  let r = n.data?.executeAction;
220
- if (r && we(r) && r.agentId) {
220
+ if (r && Ce(r) && r.agentId) {
221
221
  t ? B({
222
222
  actionId: e,
223
223
  agentId: r.agentId
@@ -226,26 +226,26 @@ function _() {
226
226
  }
227
227
  r && U(r.status === "SUCCESS" || r.status === "COMPLETED" ? "Action executed successfully" : "Action execution failed", r.status === "SUCCESS" || r.status === "COMPLETED" ? "success" : "error", r.output || r.errorMessage);
228
228
  } catch (e) {
229
- if (o(e)) {
230
- s(), R("command-execution");
229
+ if (s(e)) {
230
+ c(), R("command-execution");
231
231
  return;
232
232
  }
233
233
  U(e instanceof Error ? e.message : "Execution failed", "error");
234
234
  } finally {
235
- tt(null);
235
+ nt(null);
236
236
  }
237
- }, [J, U]), Dt = u(async () => {
237
+ }, [J, U]), Ot = d(async () => {
238
238
  if (w.type !== "confirmExecute") return;
239
239
  let e = w.actionId;
240
240
  T({ type: "none" }), await X(e);
241
- }, [w, X]), Ot = u(async ({ shell: e, file: t }) => {
241
+ }, [w, X]), kt = d(async ({ shell: e, file: t }) => {
242
242
  if (!z) return;
243
243
  let { actionId: n, agentId: r } = z;
244
- it(!0);
244
+ at(!0);
245
245
  try {
246
- await Ce({
246
+ await Se({
247
247
  id: r,
248
- profile: ot
248
+ profile: st
249
249
  }, {
250
250
  shell: e,
251
251
  file: t
@@ -253,14 +253,14 @@ function _() {
253
253
  } catch (e) {
254
254
  U(e instanceof Error ? e.message : "Failed to enable remote execution", "error");
255
255
  } finally {
256
- it(!1);
256
+ at(!1);
257
257
  }
258
258
  }, [
259
259
  z,
260
- ot,
260
+ st,
261
261
  X,
262
262
  U
263
- ]), kt = u(async (e) => {
263
+ ]), At = d(async (e) => {
264
264
  let t = G.find((t) => t.id === e);
265
265
  if (t) try {
266
266
  await Y({ variables: {
@@ -274,40 +274,40 @@ function _() {
274
274
  G,
275
275
  Y,
276
276
  U
277
- ]), Z = d(() => w.type === "edit" && G.find((e) => e.id === w.actionId) || null, [w, G]);
278
- Oe(() => {
277
+ ]), Z = f(() => w.type === "edit" && G.find((e) => e.id === w.actionId) || null, [w, G]);
278
+ De(() => {
279
279
  if (w.type === "edit" && Z) {
280
280
  let e = Z;
281
- ct({
281
+ lt({
282
282
  vibeId: e.vibeId ?? null,
283
283
  visibility: e.visibility ?? "PRIVATE"
284
284
  });
285
- } else w.type === "create" && H(c);
286
- }, [w.type, Z]), Oe(() => {
287
- let e = v.get("editAction");
285
+ } else w.type === "create" && H(l);
286
+ }, [w.type, Z]), De(() => {
287
+ let e = He.get("editAction");
288
288
  if (!e) return;
289
289
  T({
290
290
  type: "edit",
291
291
  actionId: e
292
292
  });
293
- let t = new URLSearchParams(v);
294
- t.delete("editAction"), He(t, { replace: !0 });
295
- }, [v, He]);
296
- let Q = d(() => G.filter((e) => M.has(e.id)), [G, M]), At = G.length > 0 && G.every((e) => M.has(e.id)), jt = G.some((e) => M.has(e.id)) && !At, Mt = u((e, t) => {
293
+ let t = new URLSearchParams(He);
294
+ t.delete("editAction"), Ue(t, { replace: !0 });
295
+ }, [He, Ue]);
296
+ let Q = f(() => G.filter((e) => M.has(e.id)), [G, M]), jt = G.length > 0 && G.every((e) => M.has(e.id)), Mt = G.some((e) => M.has(e.id)) && !jt, Nt = d((e, t) => {
297
297
  N((n) => {
298
298
  let r = new Set(n);
299
299
  return t ? r.add(e) : r.delete(e), r;
300
300
  });
301
- }, []), Nt = u((e) => {
301
+ }, []), Pt = d((e) => {
302
302
  N((t) => {
303
303
  let n = new Set(t);
304
304
  return G.forEach((t) => {
305
305
  e ? n.add(t.id) : n.delete(t.id);
306
306
  }), n;
307
307
  });
308
- }, [G]), $ = u(() => {
308
+ }, [G]), $ = d(() => {
309
309
  N(/* @__PURE__ */ new Set());
310
- }, []), Pt = u(async () => {
310
+ }, []), Ft = d(async () => {
311
311
  if (Q.length !== 0) {
312
312
  I("duplicate");
313
313
  try {
@@ -328,7 +328,7 @@ function _() {
328
328
  U,
329
329
  $,
330
330
  W
331
- ]), Ft = u(async () => {
331
+ ]), It = d(async () => {
332
332
  if (Q.length !== 0) {
333
333
  I("delete");
334
334
  try {
@@ -348,22 +348,22 @@ function _() {
348
348
  U,
349
349
  $,
350
350
  W
351
- ]), It = u(async () => {
351
+ ]), Lt = d(async () => {
352
352
  if (Q.length === 0) return;
353
353
  I("execute");
354
354
  let e = 0, t = 0, n = !1;
355
355
  try {
356
356
  for (let r of Q) try {
357
357
  let i = await J({ variables: { id: r.id } });
358
- if (i.error && o(i.error)) {
359
- s(), R("command-execution"), n = !0;
358
+ if (i.error && s(i.error)) {
359
+ c(), R("command-execution"), n = !0;
360
360
  break;
361
361
  }
362
- let ee = i.data?.executeAction;
363
- ee?.status === "SUCCESS" || ee?.status === "COMPLETED" ? e += 1 : t += 1;
362
+ let a = i.data?.executeAction;
363
+ a?.status === "SUCCESS" || a?.status === "COMPLETED" ? e += 1 : t += 1;
364
364
  } catch (e) {
365
- if (o(e)) {
366
- s(), R("command-execution"), n = !0;
365
+ if (s(e)) {
366
+ c(), R("command-execution"), n = !0;
367
367
  break;
368
368
  }
369
369
  t += 1;
@@ -382,120 +382,124 @@ function _() {
382
382
  A,
383
383
  W
384
384
  ]);
385
- return We ? /* @__PURE__ */ m(g, { children: /* @__PURE__ */ m(se, { message: "Loading Actions..." }) }) : b && b.permissionStrings?.length > 0 && !Ge ? /* @__PURE__ */ m(g, { children: /* @__PURE__ */ m(ze, {}) }) : dt ? /* @__PURE__ */ m(g, { children: /* @__PURE__ */ m(se, { message: "Loading Actions..." }) }) : ft ? /* @__PURE__ */ m(g, { children: /* @__PURE__ */ m(ce, {
386
- message: ft.message,
385
+ return Ge ? /* @__PURE__ */ h(_, { children: /* @__PURE__ */ h(oe, { message: "Loading Actions..." }) }) : b && b.permissionStrings?.length > 0 && !Ke ? /* @__PURE__ */ h(_, { children: /* @__PURE__ */ h(ze, {}) }) : ft ? /* @__PURE__ */ h(_, { children: /* @__PURE__ */ h(oe, { message: "Loading Actions..." }) }) : pt ? /* @__PURE__ */ h(_, { children: /* @__PURE__ */ h(se, {
386
+ message: pt.message,
387
387
  onRetry: () => W()
388
- }) }) : /* @__PURE__ */ h(g, {
388
+ }) }) : /* @__PURE__ */ g(_, {
389
389
  className: "px-6 lg:px-8 py-6 space-y-6",
390
390
  children: [
391
- /* @__PURE__ */ m(oe, {
391
+ /* @__PURE__ */ h(ae, {
392
392
  title: x("nav.actions", "Actions"),
393
393
  description: "Automate tasks — run commands, scripts, or trigger webhooks on your agents",
394
- actions: /* @__PURE__ */ m(Re, {
395
- primary: Ke ? {
394
+ actions: /* @__PURE__ */ h(Le, {
395
+ primary: qe ? {
396
396
  label: x("actions.createAction", "Create Action"),
397
397
  onSelect: () => T({ type: "create" }),
398
- icon: /* @__PURE__ */ m(Me, { size: 16 })
398
+ icon: /* @__PURE__ */ h(je, { size: 16 })
399
399
  } : void 0,
400
400
  actions: [{
401
401
  label: x("common.refresh", "Refresh"),
402
402
  onSelect: () => void W(),
403
- icon: /* @__PURE__ */ m(Ne, { size: 16 })
403
+ icon: /* @__PURE__ */ h(Me, { size: 16 })
404
404
  }]
405
405
  })
406
406
  }),
407
- /* @__PURE__ */ h("div", {
407
+ /* @__PURE__ */ h(Re, {
408
+ icon: /* @__PURE__ */ h(Ae, { className: "size-4" }),
409
+ children: x("actions.purpose", "Actions are reusable, one-click automations you run on your agents — a shell command, a script, or a webhook trigger. Define an action once (for example \"deploy\", \"run tests\" or \"restart service\") and fire it on demand instead of re-typing commands, so routine work becomes a single button.")
410
+ }),
411
+ /* @__PURE__ */ g("div", {
408
412
  "data-tour": "actions-filter-section",
409
413
  className: "flex flex-wrap items-center gap-3",
410
414
  children: [
411
- /* @__PURE__ */ m(fe, {
415
+ /* @__PURE__ */ h(de, {
412
416
  value: D,
413
- onChange: Ze,
417
+ onChange: Qe,
414
418
  placeholder: x("actions.searchPlaceholder", "Search actions..."),
415
419
  className: "w-full sm:w-64"
416
420
  }),
417
- /* @__PURE__ */ m(pe, {
421
+ /* @__PURE__ */ h(fe, {
418
422
  label: "Type",
419
423
  options: Be,
420
424
  value: O,
421
- onChange: Qe
425
+ onChange: $e
422
426
  }),
423
- /* @__PURE__ */ m(pe, {
427
+ /* @__PURE__ */ h(fe, {
424
428
  label: "Trigger",
425
429
  options: Ve,
426
430
  value: k,
427
- onChange: $e
431
+ onChange: et
428
432
  })
429
433
  ]
430
434
  }),
431
- G.length > 0 && /* @__PURE__ */ m("div", {
435
+ G.length > 0 && /* @__PURE__ */ h("div", {
432
436
  "data-tour": "actions-selection-toolbar",
433
437
  className: "rounded-lg border border-border-default bg-bg-surface p-4",
434
- children: /* @__PURE__ */ h("div", {
438
+ children: /* @__PURE__ */ g("div", {
435
439
  className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
436
- children: [/* @__PURE__ */ h("div", {
440
+ children: [/* @__PURE__ */ g("div", {
437
441
  className: "flex flex-wrap items-center gap-3",
438
- children: [/* @__PURE__ */ h("div", {
442
+ children: [/* @__PURE__ */ g("div", {
439
443
  className: "flex items-center gap-2",
440
- children: [/* @__PURE__ */ m(ve, {
441
- checked: At,
442
- indeterminate: jt,
443
- onChange: Nt,
444
+ children: [/* @__PURE__ */ h(_e, {
445
+ checked: jt,
446
+ indeterminate: Mt,
447
+ onChange: Pt,
444
448
  ariaLabel: "Select all visible actions"
445
- }), /* @__PURE__ */ m("span", {
449
+ }), /* @__PURE__ */ h("span", {
446
450
  className: "text-sm font-medium text-text-primary",
447
451
  children: "Select all visible"
448
452
  })]
449
- }), M.size > 0 && /* @__PURE__ */ m("button", {
453
+ }), M.size > 0 && /* @__PURE__ */ h("button", {
450
454
  type: "button",
451
455
  onClick: $,
452
456
  className: "text-sm text-text-secondary hover:text-text-primary",
453
457
  children: "Clear selection"
454
458
  })]
455
- }), /* @__PURE__ */ h("div", {
459
+ }), /* @__PURE__ */ g("div", {
456
460
  className: "flex flex-wrap items-center gap-2",
457
461
  children: [
458
- /* @__PURE__ */ h("span", {
462
+ /* @__PURE__ */ g("span", {
459
463
  className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
460
464
  children: [M.size, " selected"]
461
465
  }),
462
- /* @__PURE__ */ m("button", {
466
+ /* @__PURE__ */ h("button", {
463
467
  type: "button",
464
468
  onClick: () => P("execute"),
465
469
  disabled: Q.length === 0 || F !== null,
466
470
  className: "rounded-md border border-status-success-border px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg disabled:cursor-not-allowed disabled:opacity-50",
467
- children: /* @__PURE__ */ h("span", {
471
+ children: /* @__PURE__ */ g("span", {
468
472
  className: "inline-flex items-center gap-2",
469
473
  children: [
470
- /* @__PURE__ */ m(je, { size: 14 }),
474
+ /* @__PURE__ */ h(Ae, { size: 14 }),
471
475
  "Execute Selected",
472
476
  Q.length > 0 ? ` (${Q.length})` : ""
473
477
  ]
474
478
  })
475
479
  }),
476
- /* @__PURE__ */ m("button", {
480
+ /* @__PURE__ */ h("button", {
477
481
  type: "button",
478
- onClick: Pt,
482
+ onClick: Ft,
479
483
  disabled: Q.length === 0 || F !== null,
480
484
  className: "rounded-md border border-border-default px-3 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-50",
481
- children: /* @__PURE__ */ h("span", {
485
+ children: /* @__PURE__ */ g("span", {
482
486
  className: "inline-flex items-center gap-2",
483
487
  children: [
484
- /* @__PURE__ */ m(Ae, { size: 14 }),
488
+ /* @__PURE__ */ h(ke, { size: 14 }),
485
489
  "Duplicate Selected",
486
490
  Q.length > 0 ? ` (${Q.length})` : ""
487
491
  ]
488
492
  })
489
493
  }),
490
- /* @__PURE__ */ m("button", {
494
+ /* @__PURE__ */ h("button", {
491
495
  type: "button",
492
496
  onClick: () => P("delete"),
493
497
  disabled: Q.length === 0 || F !== null,
494
498
  className: "rounded-md border border-status-error-border px-3 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg disabled:cursor-not-allowed disabled:opacity-50",
495
- children: /* @__PURE__ */ h("span", {
499
+ children: /* @__PURE__ */ g("span", {
496
500
  className: "inline-flex items-center gap-2",
497
501
  children: [
498
- /* @__PURE__ */ m(Pe, { size: 14 }),
502
+ /* @__PURE__ */ h(Ne, { size: 14 }),
499
503
  "Delete Selected",
500
504
  Q.length > 0 ? ` (${Q.length})` : ""
501
505
  ]
@@ -505,26 +509,27 @@ function _() {
505
509
  })]
506
510
  })
507
511
  }),
508
- /* @__PURE__ */ m(p, {
512
+ /* @__PURE__ */ h(m, {
509
513
  mode: "wait",
510
- children: G.length === 0 && !dt && /* @__PURE__ */ m(de, {
514
+ children: G.length === 0 && !ft && /* @__PURE__ */ h(ue, {
515
+ illustration: "empty-data",
511
516
  title: "No actions yet",
512
517
  description: "Create your first action to automate commands, scripts, and webhooks",
513
- action: /* @__PURE__ */ h("div", {
518
+ action: /* @__PURE__ */ g("div", {
514
519
  className: "flex items-center gap-2",
515
- children: [Ke && /* @__PURE__ */ m("button", {
520
+ children: [qe && /* @__PURE__ */ h("button", {
516
521
  type: "button",
517
522
  onClick: () => T({ type: "create" }),
518
523
  className: "px-4 py-2 rounded-lg bg-action-primary-bg text-action-primary-text hover:opacity-90 text-sm font-medium",
519
524
  children: "Create Action"
520
- }), /* @__PURE__ */ m(_e, { prompt: "What is an Action in VibeControls and how do I create one?" })]
525
+ }), /* @__PURE__ */ h(ge, { prompt: "What is an Action in VibeControls and how do I create one?" })]
521
526
  })
522
527
  })
523
528
  }),
524
- G.length > 0 && /* @__PURE__ */ m("div", {
529
+ G.length > 0 && /* @__PURE__ */ h("div", {
525
530
  "data-tour": "actions-list-container",
526
531
  className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",
527
- children: G.map((e) => /* @__PURE__ */ m("div", {
532
+ children: G.map((e) => /* @__PURE__ */ h("div", {
528
533
  role: "button",
529
534
  tabIndex: 0,
530
535
  onClick: () => j(e.id),
@@ -532,87 +537,87 @@ function _() {
532
537
  (t.key === "Enter" || t.key === " ") && (t.preventDefault(), j(e.id));
533
538
  },
534
539
  "aria-label": `Select action ${e.displayName || e.name}`,
535
- children: /* @__PURE__ */ m(Se, {
540
+ children: /* @__PURE__ */ h(xe, {
536
541
  action: e,
537
- onExecute: Et,
542
+ onExecute: Dt,
538
543
  onEdit: (e) => T({
539
544
  type: "edit",
540
545
  actionId: e
541
546
  }),
542
- onDuplicate: kt,
547
+ onDuplicate: At,
543
548
  onDelete: (t) => T({
544
549
  type: "confirmDelete",
545
550
  id: t,
546
551
  name: e.displayName || e.name
547
552
  }),
548
- onSchedule: (e) => _(`/scheduler?actionId=${encodeURIComponent(e)}`),
549
- onAddToCalendar: (e) => _(`/vibecontrols/calendar?actionId=${encodeURIComponent(e)}`),
550
- canUpdate: qe,
551
- canDelete: Je,
552
- canExecute: Ye,
553
- isExecuting: et === e.id,
553
+ onSchedule: (e) => v(`/scheduler?actionId=${encodeURIComponent(e)}`),
554
+ onAddToCalendar: (e) => v(`/vibecontrols/calendar?actionId=${encodeURIComponent(e)}`),
555
+ canUpdate: Je,
556
+ canDelete: Ye,
557
+ canExecute: Xe,
558
+ isExecuting: tt === e.id,
554
559
  selected: M.has(e.id),
555
- onToggleSelect: (t) => Mt(e.id, t)
560
+ onToggleSelect: (t) => Nt(e.id, t)
556
561
  })
557
562
  }, e.id))
558
563
  }),
559
- /* @__PURE__ */ m(p, { children: A && K && /* @__PURE__ */ h("div", {
564
+ /* @__PURE__ */ h(m, { children: A && K && /* @__PURE__ */ g("div", {
560
565
  className: "space-y-3",
561
- children: [Ue && /* @__PURE__ */ m(De, {
566
+ children: [We && /* @__PURE__ */ h(Ee, {
562
567
  actionId: A,
563
- workspaceId: Ue,
568
+ workspaceId: We,
564
569
  actionName: K.displayName || K.name,
565
570
  onClose: () => j(null)
566
- }), /* @__PURE__ */ m("div", {
571
+ }), /* @__PURE__ */ h("div", {
567
572
  "data-tour": "actions-execution-history",
568
- children: /* @__PURE__ */ m(Ee, {
569
- executions: mt,
573
+ children: /* @__PURE__ */ h(Te, {
574
+ executions: ht,
570
575
  actionName: K.displayName || K.name,
571
576
  onClose: () => j(null)
572
577
  })
573
578
  })]
574
579
  }) }),
575
- /* @__PURE__ */ m(p, { children: Xe.length > 0 && /* @__PURE__ */ m("div", {
580
+ /* @__PURE__ */ h(m, { children: Ze.length > 0 && /* @__PURE__ */ h("div", {
576
581
  className: "fixed bottom-4 left-4 right-4 sm:left-auto sm:bottom-6 sm:right-6 z-50 flex flex-col gap-2 max-w-[calc(100vw-2rem)] sm:max-w-md",
577
- children: Xe.slice(-3).map((e) => /* @__PURE__ */ h("div", {
582
+ children: Ze.slice(-3).map((e) => /* @__PURE__ */ g("div", {
578
583
  role: "button",
579
584
  tabIndex: 0,
580
585
  onKeyDown: (t) => {
581
- (t.key === "Enter" || t.key === " ") && (t.preventDefault(), lt(e.id));
586
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), ut(e.id));
582
587
  },
583
588
  className: `p-4 rounded-xl shadow-lg border cursor-pointer ${e.variant === "success" ? "bg-status-success-bg-subtle border-status-success-border text-status-success-text" : "bg-status-error-bg-subtle border-status-error-border text-status-error-text"}`,
584
- onClick: () => lt(e.id),
585
- children: [/* @__PURE__ */ m("div", {
589
+ onClick: () => ut(e.id),
590
+ children: [/* @__PURE__ */ h("div", {
586
591
  className: "font-medium text-sm",
587
592
  children: e.message
588
- }), e.detail && /* @__PURE__ */ m("pre", {
593
+ }), e.detail && /* @__PURE__ */ h("pre", {
589
594
  className: "text-xs font-mono opacity-80 mt-1 max-h-20 overflow-y-auto whitespace-pre-wrap",
590
595
  children: e.detail
591
596
  })]
592
597
  }, e.id))
593
598
  }) }),
594
- w.type === "create" && /* @__PURE__ */ m(Te, {
599
+ w.type === "create" && /* @__PURE__ */ h(we, {
595
600
  title: "Create Action",
596
- agents: gt,
597
- onSubmit: Ct,
601
+ agents: _t,
602
+ onSubmit: wt,
598
603
  onCancel: () => T({ type: "none" }),
599
- isLoading: vt,
600
- extraSection: /* @__PURE__ */ h("div", {
604
+ isLoading: yt,
605
+ extraSection: /* @__PURE__ */ g("div", {
601
606
  className: "space-y-4",
602
- children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h3", {
607
+ children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h3", {
603
608
  className: "text-sm font-medium text-text-secondary mb-2",
604
609
  children: x("actions.tags", "Tags")
605
- }), /* @__PURE__ */ m(le, {
610
+ }), /* @__PURE__ */ h(ce, {
606
611
  entityType: "VIBECONTROLS_ACTION",
607
- onDraftChange: yt
608
- })] }), /* @__PURE__ */ m(he, {
612
+ onDraftChange: bt
613
+ })] }), /* @__PURE__ */ h(me, {
609
614
  value: V,
610
615
  onChange: H,
611
- disabled: vt
616
+ disabled: yt
612
617
  })]
613
618
  })
614
619
  }),
615
- w.type === "edit" && Z && /* @__PURE__ */ m(Te, {
620
+ w.type === "edit" && Z && /* @__PURE__ */ h(we, {
616
621
  title: "Edit Action",
617
622
  initialData: {
618
623
  name: Z.name,
@@ -636,83 +641,83 @@ function _() {
636
641
  retryCount: Z.retryCount || 0,
637
642
  confirmationRequired: Z.confirmationRequired ?? !1
638
643
  },
639
- agents: gt,
640
- onSubmit: wt,
644
+ agents: _t,
645
+ onSubmit: Tt,
641
646
  onCancel: () => T({ type: "none" }),
642
- isLoading: St,
643
- extraSection: /* @__PURE__ */ h("div", {
647
+ isLoading: Ct,
648
+ extraSection: /* @__PURE__ */ g("div", {
644
649
  className: "space-y-4",
645
- children: [/* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h3", {
650
+ children: [/* @__PURE__ */ g("div", { children: [/* @__PURE__ */ h("h3", {
646
651
  className: "text-sm font-medium text-text-secondary mb-2",
647
652
  children: x("actions.tags", "Tags")
648
- }), /* @__PURE__ */ m(le, {
653
+ }), /* @__PURE__ */ h(ce, {
649
654
  entityType: "VIBECONTROLS_ACTION",
650
655
  entityId: Z.id
651
- })] }), /* @__PURE__ */ m(he, {
652
- value: st,
653
- onChange: ct,
654
- disabled: St
656
+ })] }), /* @__PURE__ */ h(me, {
657
+ value: ct,
658
+ onChange: lt,
659
+ disabled: Ct
655
660
  })]
656
661
  })
657
662
  }),
658
- w.type === "confirmDelete" && /* @__PURE__ */ m(a, {
663
+ w.type === "confirmDelete" && /* @__PURE__ */ h(o, {
659
664
  isOpen: !0,
660
665
  title: "Delete Action",
661
666
  message: `Are you sure you want to delete "${w.name}"? This cannot be undone.`,
662
667
  confirmLabel: "Delete",
663
668
  variant: "danger",
664
- onConfirm: Tt,
669
+ onConfirm: Et,
665
670
  onClose: () => T({ type: "none" })
666
671
  }),
667
- w.type === "confirmExecute" && /* @__PURE__ */ m(a, {
672
+ w.type === "confirmExecute" && /* @__PURE__ */ h(o, {
668
673
  isOpen: !0,
669
674
  title: `Execute: ${w.name}`,
670
675
  message: `Are you sure you want to execute "${w.name}"?`,
671
676
  confirmLabel: "Execute",
672
677
  variant: "warning",
673
- onConfirm: Dt,
678
+ onConfirm: Ot,
674
679
  onClose: () => T({ type: "none" })
675
680
  }),
676
- /* @__PURE__ */ m(a, {
677
- isOpen: nt === "delete",
681
+ /* @__PURE__ */ h(o, {
682
+ isOpen: rt === "delete",
678
683
  title: "Delete Selected Actions",
679
684
  message: `Are you sure you want to delete ${Q.length} selected action${Q.length === 1 ? "" : "s"}? This cannot be undone.`,
680
685
  confirmLabel: "Delete Actions",
681
686
  variant: "danger",
682
- onConfirm: Ft,
687
+ onConfirm: It,
683
688
  onClose: () => P(null),
684
689
  isLoading: F === "delete"
685
690
  }),
686
- /* @__PURE__ */ m(a, {
687
- isOpen: nt === "execute",
691
+ /* @__PURE__ */ h(o, {
692
+ isOpen: rt === "execute",
688
693
  title: "Execute Selected Actions",
689
694
  message: `Execute ${Q.length} selected action${Q.length === 1 ? "" : "s"}? This may trigger commands, scripts, or webhooks immediately.`,
690
695
  confirmLabel: "Execute Actions",
691
696
  variant: "warning",
692
- onConfirm: It,
697
+ onConfirm: Lt,
693
698
  onClose: () => P(null),
694
699
  isLoading: F === "execute"
695
700
  }),
696
- /* @__PURE__ */ m(re, {
701
+ /* @__PURE__ */ h(ne, {
697
702
  isOpen: L !== null,
698
703
  onClose: () => R(null),
699
704
  onConfirm: () => {
700
- s(), R(null), _("/billing/plans");
705
+ c(), R(null), v("/billing/plans");
701
706
  },
702
- title: L ? ie(L).title : void 0,
703
- message: L ? ie(L).message : ""
707
+ title: L ? re(L).title : void 0,
708
+ message: L ? re(L).message : ""
704
709
  }),
705
- /* @__PURE__ */ m(me, {
710
+ /* @__PURE__ */ h(pe, {
706
711
  isOpen: z !== null,
707
- agentName: z ? gt.find((e) => e.id === z.agentId)?.name : void 0,
708
- isLoading: rt,
712
+ agentName: z ? _t.find((e) => e.id === z.agentId)?.name : void 0,
713
+ isLoading: it,
709
714
  onClose: () => B(null),
710
- onConfirm: Ot
715
+ onConfirm: kt
711
716
  })
712
717
  ]
713
718
  });
714
719
  }
715
720
  //#endregion
716
- export { _ as ActionsPage };
721
+ export { v as ActionsPage };
717
722
 
718
723
  //# sourceMappingURL=ActionsPage.js.map