@termix-ssh/plugin-sdk 1.0.19 → 1.0.21

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 (44) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/PLUGIN-GUIDE.md +8 -2
  3. package/dist/frontend.d.ts +7 -3
  4. package/dist/frontend.js +19 -3
  5. package/dist/host/{PluginsTab-YAGYRBIE.js → PluginsTab-HQGSDSHS.js} +31 -47
  6. package/dist/host/{chunk-MYBONEWZ.js → chunk-A5CULDWV.js} +18 -11
  7. package/dist/host/{chunk-2MU6WNSX.js → chunk-FGX27MAA.js} +1 -1
  8. package/dist/host/{chunk-LQKK2JJA.js → chunk-GTHINW3L.js} +1551 -1508
  9. package/dist/host/{chunk-7LEJ3HYF.js → chunk-JFQGI4OD.js} +5 -3
  10. package/dist/host/{chunk-446UEDSK.js → chunk-WWFRBU2E.js} +19 -3
  11. package/dist/host/core-classes.json +1 -1
  12. package/dist/host/{linked-server-OUF3POT7.js → linked-server-UDSFY3N7.js} +1 -1
  13. package/dist/host/{rbac-api-LZVENREG.js → rbac-api-AAAPMF52.js} +1 -1
  14. package/dist/host/testing-host.js +4 -4
  15. package/dist/host/types/src/ui/api/look-api.d.ts +2 -0
  16. package/dist/host/types/src/ui/api/plugins-api.d.ts +1 -1
  17. package/dist/host/types/src/ui/components/data-view.d.ts +7 -2
  18. package/dist/host/types/src/ui/components/panel-layout.d.ts +9 -2
  19. package/dist/host/types/src/ui/lib/app-return.d.ts +13 -0
  20. package/dist/host/types/src/ui/plugin-host/sdk-ui.d.ts +1 -1
  21. package/dist/host/types/src/ui/plugins/plugin-model.d.ts +1 -1
  22. package/dist/host/ui.js +67 -24
  23. package/dist/host/{use-permissions-BYCDS5PD.js → use-permissions-VAND5GEG.js} +1 -1
  24. package/dist/host-commands.d.ts +2 -6
  25. package/dist/host-commands.js +3 -6
  26. package/dist/host-scripts/docker.d.ts +137 -0
  27. package/dist/host-scripts/docker.js +345 -0
  28. package/dist/host-scripts/index.d.ts +15 -0
  29. package/dist/host-scripts/index.js +15 -0
  30. package/dist/host-scripts/journal.d.ts +45 -0
  31. package/dist/host-scripts/journal.js +194 -0
  32. package/dist/host-scripts/metrics.d.ts +134 -0
  33. package/dist/host-scripts/metrics.js +320 -0
  34. package/dist/host-scripts/openrc.d.ts +6 -0
  35. package/dist/host-scripts/openrc.js +90 -0
  36. package/dist/host-scripts/shell.d.ts +43 -0
  37. package/dist/host-scripts/shell.js +95 -0
  38. package/dist/host-scripts/systemd.d.ts +73 -0
  39. package/dist/host-scripts/systemd.js +320 -0
  40. package/dist/host-scripts/text.d.ts +23 -0
  41. package/dist/host-scripts/text.js +111 -0
  42. package/dist/manifest.d.ts +1 -1
  43. package/dist/manifest.js +1 -1
  44. package/package.json +5 -1
@@ -4087,7 +4087,9 @@ function unregisteredViewStatus(kind, id) {
4087
4087
  return { status: getPluginStoreState().loaded ? "missing" : "loading" };
4088
4088
  }
4089
4089
  const serverState = owner.summary.state;
4090
- if (!owner.summary.enabled) return { status: "disabled", owner };
4090
+ if (!owner.summary.enabled || serverState === "safe-mode") {
4091
+ return { status: "disabled", owner };
4092
+ }
4091
4093
  if (owner.frontend === "failed" || owner.frontend === "blocked" || serverState === "failed" || serverState === "blocked") {
4092
4094
  return { status: "failed", owner };
4093
4095
  }
@@ -6316,7 +6318,7 @@ async function updateRole(roleId, roleData) {
6316
6318
  try {
6317
6319
  const response = await rbacApi.put(`/rbac/roles/${roleId}`, roleData);
6318
6320
  if (roleData.permissions) {
6319
- const { notifyPermissionsChanged } = await import("./use-permissions-BYCDS5PD.js");
6321
+ const { notifyPermissionsChanged } = await import("./use-permissions-VAND5GEG.js");
6320
6322
  notifyPermissionsChanged();
6321
6323
  }
6322
6324
  return response.data;
@@ -6898,7 +6900,7 @@ function createRemoteOriginApiInstance(path) {
6898
6900
  });
6899
6901
  instance.interceptors.request.use(
6900
6902
  async (config) => {
6901
- const { getLinkedSession: getLinkedSession2 } = await import("./linked-server-OUF3POT7.js");
6903
+ const { getLinkedSession: getLinkedSession2 } = await import("./linked-server-UDSFY3N7.js");
6902
6904
  const linked = await getLinkedSession2();
6903
6905
  config.baseURL = linked ? `${linked.serverUrl}${path}` : "http://no-server-configured";
6904
6906
  if (config.headers.set) {
@@ -6,11 +6,12 @@ import {
6
6
  Plus,
7
7
  Trash,
8
8
  cn,
9
+ gridSizeStyle,
9
10
  useAreaPreferences
10
- } from "./chunk-LQKK2JJA.js";
11
+ } from "./chunk-GTHINW3L.js";
11
12
  import {
12
13
  isElectron
13
- } from "./chunk-7LEJ3HYF.js";
14
+ } from "./chunk-JFQGI4OD.js";
14
15
  import {
15
16
  __commonJS,
16
17
  __toESM,
@@ -2219,6 +2220,8 @@ function DataView({
2219
2220
  getKey,
2220
2221
  renderCard,
2221
2222
  columns,
2223
+ size,
2224
+ minCardWidth,
2222
2225
  listColumns,
2223
2226
  onRowClick,
2224
2227
  isRowActive,
@@ -2229,7 +2232,19 @@ function DataView({
2229
2232
  return /* @__PURE__ */ jsx3("div", { className: "flex flex-1 items-center justify-center", children: empty });
2230
2233
  }
2231
2234
  if (view === "grid") {
2232
- return /* @__PURE__ */ jsx3("div", { className: cn("grid", PANEL.gap, gridClass(columns), className), children: items.map((item) => /* @__PURE__ */ jsx3("div", { children: renderCard(item) }, getKey(item))) });
2235
+ return /* @__PURE__ */ jsx3(
2236
+ "div",
2237
+ {
2238
+ className: cn(
2239
+ "grid",
2240
+ PANEL.gap,
2241
+ !size && gridClass(columns),
2242
+ className
2243
+ ),
2244
+ style: size ? gridSizeStyle(size, minCardWidth) : void 0,
2245
+ children: items.map((item) => /* @__PURE__ */ jsx3("div", { className: "flex flex-col *:flex-1", children: renderCard(item) }, getKey(item)))
2246
+ }
2247
+ );
2233
2248
  }
2234
2249
  const template = listColumns.map((c) => c.width).join(" ");
2235
2250
  const rowHeight = density === "compact" ? "h-7" : "h-9";
@@ -2471,6 +2486,7 @@ function pluginStatus(summary) {
2471
2486
  if (summary.state === "failed") return "failed";
2472
2487
  if (summary.state === "blocked") return "blocked";
2473
2488
  if (!summary.enabled) return "disabled";
2489
+ if (summary.state === "safe-mode") return "safeMode";
2474
2490
  return "running";
2475
2491
  }
2476
2492
  function mergePlugins(installed, registry) {
@@ -1 +1 @@
1
- ["!running","**:data-[slot=kbd]:isolate","**:data-[slot=kbd]:relative","**:data-[slot=kbd]:rounded-none","**:data-[slot=kbd]:z-50","*:[a]:hover:text-foreground","*:[a]:underline","*:[a]:underline-offset-3","*:[img:first-child]:rounded-none","*:[img:last-child]:rounded-none","*:[span]:last:flex","*:[span]:last:gap-2","*:[span]:last:items-center","*:data-[slot=alert-description]:text-destructive/90","*:data-[slot=select-value]:flex","*:data-[slot=select-value]:gap-2","*:data-[slot=select-value]:items-center","*:data-[slot=select-value]:line-clamp-1","*:flex-1","-bottom-1.5","-left-1","-left-1.5","-mx-1","-mx-3","-my-1","-right-1","-right-1.5","-top-1","-top-1.5","-translate-x-1/2","-translate-x-px","-translate-y-1/2","2xl:flex","3","@3xl:block","@3xl:hidden","@container","@container/card-header","[&::-webkit-inner-spin-button]:appearance-none","[&::-webkit-outer-spin-button]:appearance-none","[&>*:last-child]:border-b-0","[&>*]:h-full","[&>button]:hidden","[&>span:last-child]:truncate","[&>svg]:pointer-events-none","[&>svg]:shrink-0","[&>svg]:size-3","[&>svg]:size-4","[&>svg]:text-current","[&>svg]:text-sidebar-accent-foreground","[&>svg]:translate-y-0.5","[&_[cmdk-group-heading]]:font-medium","[&_[cmdk-group-heading]]:px-2","[&_[cmdk-group-heading]]:py-1.5","[&_[cmdk-group-heading]]:text-muted-foreground","[&_[cmdk-group-heading]]:text-xs","[&_[cmdk-list-sizer]]:flex","[&_[cmdk-list-sizer]]:flex-col","[&_p]:leading-relaxed","[&_svg:not([class*='size-'])]:size-3","[&_svg:not([class*='size-'])]:size-3.5","[&_svg:not([class*='size-'])]:size-4","[&_svg:not([class*='text-'])]:text-muted-foreground","[&_svg]:pointer-events-none","[&_svg]:shrink-0","[&_svg]:size-2.5","[&_svg]:size-3","[&_svg]:size-3.5","[&_svg]:size-4","[.border-b]:pb-4","[.gap-4>&]:border-0","[.gap-4>&]:py-0","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2","[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","[a&]:hover:bg-accent","[a&]:hover:bg-destructive/90","[a&]:hover:bg-primary/90","[a&]:hover:bg-secondary/90","[a&]:hover:text-accent-foreground","[a]:hover:bg-primary/80","[animation-duration:900ms]","[appearance:textfield]","[backend:stderr]","[clip-path:inset(0px_-4px_-4px_-4px)]","[op:http_server_port_conflict]","[op:startup_failed]","absolute","accent-[var(--accent-brand)]","active:bg-sidebar-accent","active:cursor-grabbing","active:not-aria-[haspopup]:translate-y-px","active:text-sidebar-accent-foreground","after:-inset-2","after:absolute","after:inset-y-0","after:start-1/2","after:w-[2px]","animate-pulse","animate-spin","appearance-none","aria-disabled:opacity-50","aria-disabled:pointer-events-none","aria-expanded:bg-muted","aria-expanded:bg-secondary","aria-expanded:opacity-100","aria-expanded:text-foreground","aria-expanded:text-secondary-foreground","aria-invalid:border-destructive","aria-invalid:ring-1","aria-invalid:ring-destructive/20","aspect-square","aspect-video","auto-rows-min","bg-accent","bg-accent-brand","bg-accent-brand/10","bg-accent-brand/15","bg-accent-brand/20","bg-accent-brand/5","bg-accent-brand/60","bg-background","bg-background/85","bg-background/90","bg-black","bg-black/10","bg-blue-500/20","bg-border","bg-canvas","bg-card","bg-clip-padding","bg-destructive","bg-destructive/10","bg-destructive/15","bg-destructive/5","bg-destructive/70","bg-emerald-500","bg-emerald-500/10","bg-foreground","bg-green-500","bg-green-500/10","bg-green-500/70","bg-input","bg-muted","bg-muted-foreground","bg-muted-foreground/20","bg-muted-foreground/25","bg-muted-foreground/30","bg-muted-foreground/40","bg-muted-foreground/50","bg-muted/10","bg-muted/15","bg-muted/20","bg-muted/30","bg-muted/40","bg-muted/50","bg-muted/60","bg-muted/70","bg-muted/[0.08]","bg-overlay","bg-popover","bg-primary","bg-primary/30","bg-red-500","bg-red-500/10","bg-red-500/40","bg-secondary","bg-sidebar","bg-sidebar-border","bg-surface-dim/60","bg-transparent","bg-warning","bg-warning/10","bg-warning/20","bg-warning/40","bg-warning/5","bg-warning/70","block","blur","border","border-0","border-2","border-accent-brand","border-accent-brand/30","border-accent-brand/40","border-accent-brand/50","border-accent-brand/60","border-accent-brand/70","border-b","border-b-2","border-border","border-border/30","border-border/40","border-border/50","border-border/60","border-current","border-dashed","border-destructive/20","border-destructive/30","border-destructive/40","border-destructive/50","border-emerald-500/40","border-foreground/10","border-green-500/30","border-input","border-l","border-l-2","border-l-transparent","border-muted-foreground/30","border-primary","border-r","border-red-500/40","border-sidebar-border","border-t","border-t-0","border-t-border/40","border-t-muted-foreground/70","border-t-transparent","border-transparent","border-warning/30","border-warning/40","border-y","bottom-0","break-all","break-words","col-start-2","collapse","columns-2","columns-3","com","container","contents","cursor-col-resize","cursor-default","cursor-grab","cursor-pointer","cursor-row-resize","dark","dark:aria-invalid:border-destructive/50","dark:aria-invalid:ring-destructive/40","dark:bg-destructive/20","dark:bg-destructive/60","dark:bg-input/30","dark:bg-transparent","dark:border-accent-brand/40","dark:border-input","dark:data-[state=active]:bg-input/30","dark:data-[state=active]:border-input","dark:data-[state=active]:text-foreground","dark:data-[state=checked]:bg-primary","dark:data-[variant=destructive]:focus:bg-destructive/20","dark:disabled:bg-input/80","dark:focus-visible:ring-destructive/40","dark:hover:bg-accent-brand/10","dark:hover:bg-destructive/10","dark:hover:bg-destructive/30","dark:hover:bg-input/50","dark:hover:bg-muted/50","dark:text-muted-foreground","data-[disabled=true]:opacity-50","data-[disabled=true]:pointer-events-none","data-[disabled]:opacity-50","data-[disabled]:pointer-events-none","data-[orientation=horizontal]:h-1.5","data-[orientation=horizontal]:h-full","data-[orientation=horizontal]:h-px","data-[orientation=horizontal]:w-full","data-[orientation=vertical]:flex-col","data-[orientation=vertical]:h-full","data-[orientation=vertical]:min-h-44","data-[orientation=vertical]:self-center","data-[orientation=vertical]:self-stretch","data-[orientation=vertical]:w-1.5","data-[orientation=vertical]:w-auto","data-[orientation=vertical]:w-full","data-[orientation=vertical]:w-px","data-[placeholder]:text-muted-foreground","data-[selected=true]:bg-muted","data-[selected=true]:text-accent-foreground","data-[side=bottom]:border-t","data-[side=bottom]:bottom-0","data-[side=bottom]:data-closed:slide-out-to-bottom-10","data-[side=bottom]:data-open:slide-in-from-bottom-10","data-[side=bottom]:h-auto","data-[side=bottom]:inset-x-0","data-[side=bottom]:slide-in-from-top-2","data-[side=bottom]:translate-y-1","data-[side=left]:-translate-x-1","data-[side=left]:border-r","data-[side=left]:data-closed:slide-out-to-left-10","data-[side=left]:data-open:slide-in-from-left-10","data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]","data-[side=left]:h-full","data-[side=left]:inset-y-0","data-[side=left]:left-0","data-[side=left]:slide-in-from-right-2","data-[side=left]:sm:max-w-sm","data-[side=left]:w-3/4","data-[side=right]:border-l","data-[side=right]:data-closed:slide-out-to-right-10","data-[side=right]:data-open:slide-in-from-right-10","data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]","data-[side=right]:h-full","data-[side=right]:inset-y-0","data-[side=right]:right-0","data-[side=right]:slide-in-from-left-2","data-[side=right]:sm:max-w-sm","data-[side=right]:translate-x-1","data-[side=right]:w-3/4","data-[side=top]:-translate-y-1","data-[side=top]:border-b","data-[side=top]:data-closed:slide-out-to-top-10","data-[side=top]:data-open:slide-in-from-top-10","data-[side=top]:h-auto","data-[side=top]:inset-x-0","data-[side=top]:slide-in-from-bottom-2","data-[side=top]:top-0","data-[size=default]:h-9","data-[size=md]:text-xs","data-[size=sm]:gap-2","data-[size=sm]:h-8","data-[size=sm]:has-data-[slot=card-footer]:pb-0","data-[size=sm]:py-3","data-[size=sm]:text-xs","data-[state=active]:animate-in","data-[state=active]:bg-background","data-[state=active]:fade-in-0","data-[state=active]:shadow-sm","data-[state=checked]:bg-accent-brand","data-[state=checked]:bg-primary","data-[state=checked]:border-accent-brand","data-[state=checked]:border-primary","data-[state=checked]:text-primary-foreground","data-[state=checked]:translate-x-4","data-[state=closed]:animate-out","data-[state=closed]:fade-out-0","data-[state=closed]:overflow-hidden","data-[state=closed]:zoom-out-95","data-[state=delayed-open]:animate-in","data-[state=delayed-open]:fade-in-0","data-[state=delayed-open]:zoom-in-95","data-[state=inactive]:animate-out","data-[state=inactive]:fade-out-0","data-[state=open]:animate-in","data-[state=open]:fade-in-0","data-[state=open]:zoom-in-95","data-[state=unchecked]:bg-muted","data-[state=unchecked]:border-border","data-[state=unchecked]:translate-x-0.5","data-[variant=destructive]:*:[svg]:text-destructive","data-[variant=destructive]:focus:bg-destructive/10","data-[variant=destructive]:focus:text-destructive","data-[variant=destructive]:text-destructive","data-active:bg-sidebar-accent","data-active:font-medium","data-active:text-sidebar-accent-foreground","data-closed:animate-out","data-closed:fade-out-0","data-closed:zoom-out-95","data-disabled:opacity-50","data-disabled:pointer-events-none","data-inset:pl-7","data-open:animate-in","data-open:bg-accent","data-open:fade-in-0","data-open:hover:bg-sidebar-accent","data-open:hover:text-sidebar-accent-foreground","data-open:text-accent-foreground","data-open:zoom-in-95","disabled:bg-input/50","disabled:cursor-not-allowed","disabled:opacity-30","disabled:opacity-40","disabled:opacity-50","disabled:opacity-60","disabled:pointer-events-none","divide-border","divide-y","drop-shadow","duration-100","duration-150","duration-200","duration-500","duration-[450ms]","ease-in-out","ease-linear","enabled:hover:text-accent-brand","fade-in","file:bg-transparent","file:border-0","file:font-medium","file:h-6","file:inline-flex","file:text-foreground","file:text-xs","fill-foreground","filter","fixed","flex","flex-1","flex-col","flex-col-reverse","flex-row","flex-row-reverse","flex-shrink-0","flex-wrap","focus-visible:border-destructive/40","focus-visible:border-ring","focus-visible:outline-1","focus-visible:outline-hidden","focus-visible:outline-none","focus-visible:outline-ring","focus-visible:relative","focus-visible:ring-0","focus-visible:ring-1","focus-visible:ring-2","focus-visible:ring-4","focus-visible:ring-[#f59145]/40","focus-visible:ring-[3px]","focus-visible:ring-destructive/20","focus-visible:ring-inset","focus-visible:ring-ring","focus-visible:ring-ring/50","focus-visible:z-10","focus-within:border-ring","focus-within:opacity-100","focus-within:ring-1","focus-within:ring-ring/50","focus:**:text-accent-foreground","focus:bg-accent","focus:ring-1","focus:ring-ring","focus:text-accent-brand","focus:text-accent-foreground","font-bold","font-heading","font-medium","font-mono","font-normal","font-semibold","fs-lg","fs-md","fs-sm","fs-xl","fs-xs","gap-0","gap-0.5","gap-1","gap-1.5","gap-2","gap-2.5","gap-3","gap-3.5","gap-4","gap-5","gap-6","gap-[1.75px]","gap-[3.5px]","gap-px","gap-x-2","gap-x-4","gap-y-0.5","gap-y-1","gap-y-1.5","grid","grid-cols-1","grid-cols-2","grid-cols-3","grid-cols-4","grid-cols-6","grid-cols-8","grid-cols-[0_1fr]","group","group-[.toast]:!border-accent-brand/30","group-[.toast]:!border-destructive/30","group-[.toast]:!text-accent-brand","group-[.toast]:!text-destructive","group-[.toast]:bg-accent-brand","group-[.toast]:bg-muted","group-[.toast]:font-semibold","group-[.toast]:text-muted-foreground","group-[.toast]:text-white","group-[.toaster]:bg-card","group-[.toaster]:border-border","group-[.toaster]:font-mono","group-[.toaster]:rounded-none!","group-[.toaster]:shadow-lg","group-[.toaster]:text-card-foreground","group-data-[collapsible=icon]:-mt-8","group-data-[collapsible=icon]:hidden","group-data-[collapsible=icon]:opacity-0","group-data-[collapsible=icon]:overflow-hidden","group-data-[collapsible=icon]:p-0!","group-data-[collapsible=icon]:p-2!","group-data-[collapsible=icon]:size-8!","group-data-[collapsible=icon]:w-(--sidebar-width-icon)","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]","group-data-[collapsible=offcanvas]:after:left-full","group-data-[collapsible=offcanvas]:translate-x-0","group-data-[collapsible=offcanvas]:w-0","group-data-[disabled=true]:opacity-50","group-data-[disabled=true]:pointer-events-none","group-data-[side=left]:-right-4","group-data-[side=left]:border-r","group-data-[side=right]:border-l","group-data-[side=right]:left-0","group-data-[side=right]:rotate-180","group-data-[size=sm]/card:[.border-b]:pb-3","group-data-[size=sm]/card:p-3","group-data-[size=sm]/card:px-3","group-data-[size=sm]/card:text-sm","group-data-[variant=floating]:ring-1","group-data-[variant=floating]:ring-sidebar-border","group-data-[variant=floating]:rounded-none","group-data-[variant=floating]:shadow-sm","group-focus-within/menu-item:opacity-100","group-focus-within/row:flex","group-focus/dropdown-menu-item:text-accent-foreground","group-has-data-[sidebar=menu-action]/menu-item:pr-8","group-hover/folder:opacity-100","group-hover/menu-item:opacity-100","group-hover/open:text-accent-brand","group-hover/resize:bg-accent-brand/60","group-hover/row:flex","group-hover:bg-accent-brand/60","group-hover:opacity-100","group/card","group/dropdown-menu-item","group/folder","group/menu-item","group/open","group/resize","group/row","grow","h-0.5","h-1","h-1.5","h-10","h-11","h-12","h-12.5","h-14","h-16","h-2","h-2.5","h-3","h-4","h-5","h-6","h-7","h-8","h-9","h-[136px]","h-[46%]","h-[calc(100%-1px)]","h-[var(--radix-select-trigger-height)]","h-dvh","h-full","h-px","h-screen","h-svh","has-[>img:first-child]:pt-0","has-[>svg]:gap-x-3","has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr]","has-[[data-state=open]]:opacity-100","has-data-[icon=inline-end]:pr-1.5","has-data-[icon=inline-end]:pr-2","has-data-[icon=inline-start]:pl-1.5","has-data-[icon=inline-start]:pl-2","has-data-[slot=card-action]:grid-cols-[1fr_auto]","has-data-[slot=card-description]:grid-rows-[auto_auto]","has-data-[slot=card-footer]:pb-0","has-data-[slot=kbd]:pr-1.5","has-data-[variant=inset]:bg-sidebar","hidden","host-status-stripe","hover:after:bg-sidebar-border","hover:bg-accent-brand/10","hover:bg-accent-brand/15","hover:bg-accent-brand/20","hover:bg-accent-brand/5","hover:bg-accent-brand/90","hover:bg-destructive/10","hover:bg-destructive/20","hover:bg-destructive/90","hover:bg-foreground/[0.03]","hover:bg-muted","hover:bg-muted/30","hover:bg-muted/40","hover:bg-muted/50","hover:bg-secondary/80","hover:bg-sidebar-accent","hover:border-accent-brand/40","hover:border-accent-brand/60","hover:border-destructive/40","hover:border-foreground/40","hover:border-muted-foreground","hover:group-data-[collapsible=offcanvas]:bg-sidebar","hover:opacity-100","hover:ring-4","hover:ring-[#f59145]/40","hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]","hover:text-accent-brand","hover:text-accent-brand/70","hover:text-destructive","hover:text-foreground","hover:text-sidebar-accent-foreground","hover:underline","in-data-[side=left]:cursor-w-resize","in-data-[side=right]:cursor-e-resize","inline","inline-block","inline-flex","inset-0","inset-x-0","inset-y-0","invisible","isolate","italic","items-baseline","items-center","items-start","items-stretch","justify-between","justify-center","justify-end","justify-items-start","justify-self-end","justify-start","last:border-0","last:border-b-0","leading-[1.7]","leading-none","leading-relaxed","leading-snug","leading-tight","left-0","left-1/2","left-2","left-2.5","left-[50%]","lg:block","lg:col-span-2","lg:flex","lg:grid-cols-1","lg:grid-cols-2","lg:grid-cols-3","lg:grid-cols-4","lg:grid-cols-5","lg:hidden","line-clamp-2","line-clamp-3","line-clamp-4","line-through","list-disc","lowercase","ltr:-translate-x-1/2","lucide","m-auto","max-h-(--radix-dropdown-menu-content-available-height)","max-h-(--radix-select-content-available-height)","max-h-40","max-h-56","max-h-64","max-h-96","max-h-[300px]","max-w-(--skeleton-width)","max-w-2xl","max-w-32","max-w-3xl","max-w-40","max-w-48","max-w-5xl","max-w-[380px]","max-w-[560px]","max-w-[calc(100%-2rem)]","max-w-lg","max-w-md","max-w-sm","max-w-xl","max-w-xs","mb-1","mb-2","mb-4","md:-mx-4","md:after:hidden","md:block","md:flex","md:flex-row","md:grid-cols-1","md:grid-cols-2","md:grid-cols-3","md:grid-cols-4","md:max-h-none","md:opacity-0","md:peer-data-[variant=inset]:m-2","md:peer-data-[variant=inset]:ml-0","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2","md:peer-data-[variant=inset]:rounded-none","md:peer-data-[variant=inset]:shadow-sm","md:px-4","md:text-2xl","md:text-xs","md:w-44","md:w-56","min-h-0","min-h-16","min-h-6","min-h-8","min-h-[220px]","min-h-[70vh]","min-h-[80px]","min-h-full","min-h-svh","min-w-0","min-w-16","min-w-32","min-w-4","min-w-40","min-w-5","min-w-52","min-w-[8rem]","min-w-[96px]","min-w-[var(--radix-select-trigger-width)]","min-w-max","ml-0.5","ml-1.5","ml-2","ml-[27px]","ml-auto","motion-context-enter","motion-fade-enter","motion-interactive","motion-meter","motion-panel-enter","motion-transfer-phase","motion-workspace-enter","motion-workspace-layout","mr-1","mr-2","mt-0.5","mt-1","mt-3","mt-4","mt-auto","mt-px","mx-2","mx-3.5","mx-auto","my-1","my-3","my-auto","normal-case","not-data-[variant=destructive]:focus:**:text-accent-foreground","object-contain","opacity-0","opacity-100","opacity-40","opacity-50","opacity-60","opacity-70","opacity-80","origin-(--radix-dropdown-menu-content-transform-origin)","origin-(--radix-popover-content-transform-origin)","origin-(--radix-select-content-transform-origin)","origin-(--radix-tooltip-content-transform-origin)","origin-center","outline","outline-hidden","outline-none","overflow-auto","overflow-hidden","overflow-x-auto","overflow-x-hidden","overflow-y-auto","overline","p-0","p-0.5","p-1","p-1.5","p-10","p-2","p-2.5","p-3","p-4","p-5","p-6","p-[3px]","p-px","paused","pb-1","pb-1.5","pb-2","peer","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","peer-data-[size=sm]/menu-button:top-1","peer-data-active/menu-button:text-sidebar-accent-foreground","peer-disabled:cursor-not-allowed","peer-disabled:opacity-50","peer-hover/menu-button:text-sidebar-accent-foreground","peer/menu-button","pl-1","pl-2","pl-2.5","pl-4","pl-7","pl-8","pl-[8.75px]","placeholder:text-muted-foreground","placeholder:text-muted-foreground/50","pointer-coarse:flex","pointer-coarse:opacity-100","pointer-events-none","pr-0.5","pr-1","pr-1.5","pr-12","pr-2","pr-7","pr-8","pr-9","pr-[7px]","pt-0.5","pt-1","pt-2","pt-2.5","pt-3","pt-4","pt-[3.5px]","px-0","px-1","px-1.5","px-2","px-2.5","px-3","px-4","px-6","py-0","py-0.5","py-1","py-1.5","py-10","py-2","py-2.5","py-3","py-4","py-6","py-8","py-[1px]","py-[7px]","py-px","relative","resize","resize-none","right-0","right-1","right-1.5","right-2","right-2.5","right-3","ring","ring-1","ring-2","ring-accent-brand","ring-border","ring-foreground/10","ring-inset","ring-offset-1","ring-offset-background","ring-sidebar-ring","ring-white/60","rotate-45","rotate-90","rounded","rounded-[inherit]","rounded-full","rounded-none","row-span-2","row-start-1","rtl:-translate-x-1/2","running","safe-bottom","scroll-my-1","scrollbar-none","select-none","self-start","sepia","settings-search-hit","shadow","shadow-[0_0_0_1px_hsl(var(--sidebar-border))]","shadow-lg","shadow-md","shadow-none","shadow-sm","shadow-xl","shadow-xs","shrink-0","size-1.5","size-10","size-12","size-2.5","size-3","size-3.5","size-4","size-5","size-6","size-7","size-8","size-9","size-[22.75px]","size-full","sm:flex","sm:flex-row","sm:grid-cols-12","sm:grid-cols-2","sm:grid-cols-3","sm:grid-cols-4","sm:items-center","sm:justify-end","sm:max-w-lg","sm:max-w-sm","sm:mr-auto","sm:py-14","sm:text-left","space-y-1.5","space-y-2","sr-only","static","sticky","stroke-accent-brand","stroke-border","stroke-muted","supports-backdrop-filter:backdrop-blur-xs","tab-1","tab-2","table","tabular-nums","termix-titlebar","text-2xl","text-[10px]","text-[11px]","text-[13px]","text-[9px]","text-accent-brand","text-accent-brand/80","text-accent-foreground","text-background","text-base","text-blue-400","text-blue-500","text-card-foreground","text-center","text-current","text-destructive","text-destructive/80","text-emerald-500","text-foreground","text-foreground-secondary","text-green-500","text-left","text-lg","text-muted-foreground","text-muted-foreground/30","text-muted-foreground/40","text-muted-foreground/50","text-muted-foreground/60","text-muted-foreground/70","text-muted-foreground/80","text-popover-foreground","text-primary","text-primary-foreground","text-red-500","text-right","text-secondary-foreground","text-sidebar-foreground","text-sidebar-foreground/70","text-sm","text-warning","text-white","text-xl","text-xs","text-xs/relaxed","thin-scrollbar","toast","toaster","top-0","top-1","top-1.5","top-1/2","top-2","top-3","top-3.5","top-[50%]","touch-none","tracking-[0.35em]","tracking-[0.3em]","tracking-normal","tracking-tight","tracking-wide","tracking-wider","tracking-widest","transfer-progress-fill","transfer-progress-indeterminate","transfer-progress-stalled","transfer-progress-track","transform","transition","transition-[color,background-color,border-color,opacity,box-shadow,transform]","transition-[color,box-shadow]","transition-[height]","transition-[left,right,width]","transition-[left,top,width,height]","transition-[margin,opacity]","transition-[stroke-dasharray]","transition-[width,height,padding]","transition-[width]","transition-all","transition-colors","transition-none","transition-opacity","transition-shadow","transition-transform","translate-x-0.5","translate-x-4","translate-x-[-50%]","translate-x-px","translate-y-[-1px]","translate-y-[-50%]","translate-y-[calc(-50%_-_2px)]","truncate","underline","underline-offset-2","underline-offset-4","uppercase","visible","w-(--radix-dropdown-menu-trigger-width)","w-(--sidebar-width)","w-0.5","w-1/2","w-1/4","w-10","w-11","w-12","w-12.5","w-2","w-2.5","w-2/3","w-28","w-3","w-3/4","w-4","w-40","w-48","w-5","w-5/6","w-52","w-56","w-6","w-60","w-64","w-72","w-9","w-[240px]","w-[3px]","w-[46%]","w-[var(--radix-popover-trigger-width)]","w-auto","w-fit","w-full","w-px","w-screen","whitespace-normal","whitespace-nowrap","whitespace-pre-line","whitespace-pre-wrap","xl:grid-cols-1","xl:grid-cols-2","xl:grid-cols-3","xl:grid-cols-4","z-0","z-10","z-20","z-30","z-40","z-50","z-500","z-[100]","z-[60]","z-[70]","z-[9998]","z-[99999]"]
1
+ ["!running","**:data-[slot=kbd]:isolate","**:data-[slot=kbd]:relative","**:data-[slot=kbd]:rounded-none","**:data-[slot=kbd]:z-50","*:[a]:hover:text-foreground","*:[a]:underline","*:[a]:underline-offset-3","*:[img:first-child]:rounded-none","*:[img:last-child]:rounded-none","*:[span]:last:flex","*:[span]:last:gap-2","*:[span]:last:items-center","*:data-[slot=alert-description]:text-destructive/90","*:data-[slot=select-value]:flex","*:data-[slot=select-value]:gap-2","*:data-[slot=select-value]:items-center","*:data-[slot=select-value]:line-clamp-1","*:flex-1","-bottom-1.5","-left-1","-left-1.5","-mx-1","-mx-3","-my-1","-right-1","-right-1.5","-top-1","-top-1.5","-translate-x-1/2","-translate-x-px","-translate-y-1/2","2xl:flex","3","@3xl:block","@3xl:hidden","@container","@container/card-header","[&::-webkit-inner-spin-button]:appearance-none","[&::-webkit-outer-spin-button]:appearance-none","[&>*:last-child]:border-b-0","[&>*]:h-full","[&>button]:hidden","[&>span:last-child]:truncate","[&>svg]:pointer-events-none","[&>svg]:shrink-0","[&>svg]:size-3","[&>svg]:size-4","[&>svg]:text-current","[&>svg]:text-sidebar-accent-foreground","[&>svg]:translate-y-0.5","[&_[cmdk-group-heading]]:font-medium","[&_[cmdk-group-heading]]:px-2","[&_[cmdk-group-heading]]:py-1.5","[&_[cmdk-group-heading]]:text-muted-foreground","[&_[cmdk-group-heading]]:text-xs","[&_[cmdk-list-sizer]]:flex","[&_[cmdk-list-sizer]]:flex-col","[&_p]:leading-relaxed","[&_svg:not([class*='size-'])]:size-3","[&_svg:not([class*='size-'])]:size-3.5","[&_svg:not([class*='size-'])]:size-4","[&_svg:not([class*='text-'])]:text-muted-foreground","[&_svg]:pointer-events-none","[&_svg]:shrink-0","[&_svg]:size-2.5","[&_svg]:size-3","[&_svg]:size-3.5","[&_svg]:size-4","[.border-b]:pb-4","[.gap-4>&]:border-0","[.gap-4>&]:py-0","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2","[[data-side=right][data-state=collapsed]_&]:cursor-w-resize","[a&]:hover:bg-accent","[a&]:hover:bg-destructive/90","[a&]:hover:bg-primary/90","[a&]:hover:bg-secondary/90","[a&]:hover:text-accent-foreground","[animation-duration:900ms]","[appearance:textfield]","[backend:stderr]","[clip-path:inset(0px_-4px_-4px_-4px)]","[op:http_server_port_conflict]","[op:startup_failed]","absolute","accent-[var(--accent-brand)]","active:bg-sidebar-accent","active:cursor-grabbing","active:not-aria-[haspopup]:translate-y-px","active:text-sidebar-accent-foreground","after:-inset-2","after:absolute","after:inset-y-0","after:start-1/2","after:w-[2px]","animate-pulse","animate-spin","appearance-none","aria-disabled:opacity-50","aria-disabled:pointer-events-none","aria-expanded:bg-accent-brand/10","aria-expanded:bg-accent-brand/20","aria-expanded:bg-accent-brand/25","aria-expanded:bg-muted","aria-expanded:opacity-100","aria-expanded:text-foreground","aria-invalid:border-destructive","aria-invalid:ring-1","aria-invalid:ring-destructive/20","aspect-square","aspect-video","auto-rows-min","bg-accent","bg-accent-brand","bg-accent-brand/10","bg-accent-brand/15","bg-accent-brand/20","bg-accent-brand/5","bg-accent-brand/60","bg-background","bg-background/85","bg-background/90","bg-black","bg-black/10","bg-blue-500/20","bg-border","bg-canvas","bg-card","bg-clip-padding","bg-destructive","bg-destructive/10","bg-destructive/15","bg-destructive/5","bg-destructive/70","bg-emerald-500","bg-emerald-500/10","bg-foreground","bg-green-500","bg-green-500/10","bg-green-500/70","bg-input","bg-muted","bg-muted-foreground","bg-muted-foreground/20","bg-muted-foreground/25","bg-muted-foreground/30","bg-muted-foreground/40","bg-muted-foreground/50","bg-muted/10","bg-muted/15","bg-muted/20","bg-muted/30","bg-muted/40","bg-muted/50","bg-muted/60","bg-muted/70","bg-muted/[0.08]","bg-overlay","bg-popover","bg-primary","bg-primary/30","bg-red-500","bg-red-500/10","bg-red-500/40","bg-secondary","bg-sidebar","bg-sidebar-border","bg-surface-dim/60","bg-transparent","bg-warning","bg-warning/10","bg-warning/20","bg-warning/40","bg-warning/5","bg-warning/70","bg-white","block","blur","border","border-0","border-2","border-accent-brand","border-accent-brand/20","border-accent-brand/30","border-accent-brand/40","border-accent-brand/50","border-accent-brand/60","border-accent-brand/70","border-b","border-b-2","border-border","border-border/30","border-border/40","border-border/50","border-border/60","border-current","border-dashed","border-destructive/20","border-destructive/30","border-destructive/40","border-destructive/50","border-emerald-500/40","border-foreground/10","border-green-500/30","border-input","border-l","border-l-2","border-l-transparent","border-muted-foreground/30","border-primary","border-r","border-red-500/40","border-sidebar-border","border-t","border-t-0","border-t-border/40","border-t-muted-foreground/70","border-t-transparent","border-transparent","border-warning/30","border-warning/40","border-y","bottom-0","break-all","break-words","col-start-2","collapse","columns-2","columns-3","com","container","contents","cursor-col-resize","cursor-default","cursor-grab","cursor-pointer","cursor-row-resize","dark","dark:aria-invalid:border-destructive/50","dark:aria-invalid:ring-destructive/40","dark:bg-destructive/20","dark:bg-destructive/60","dark:bg-input/30","dark:bg-secondary","dark:bg-transparent","dark:border-accent-brand/40","dark:data-[state=active]:bg-input/30","dark:data-[state=active]:border-input","dark:data-[state=active]:text-foreground","dark:data-[state=checked]:bg-primary","dark:data-[variant=destructive]:focus:bg-destructive/20","dark:disabled:bg-input/80","dark:focus-visible:ring-destructive/40","dark:hover:bg-accent-brand/10","dark:hover:bg-destructive/10","dark:hover:bg-destructive/30","dark:hover:bg-input/50","dark:hover:bg-muted/50","dark:text-muted-foreground","data-[disabled=true]:opacity-50","data-[disabled=true]:pointer-events-none","data-[disabled]:opacity-50","data-[disabled]:pointer-events-none","data-[orientation=horizontal]:h-1.5","data-[orientation=horizontal]:h-full","data-[orientation=horizontal]:h-px","data-[orientation=horizontal]:w-full","data-[orientation=vertical]:flex-col","data-[orientation=vertical]:h-full","data-[orientation=vertical]:min-h-44","data-[orientation=vertical]:self-center","data-[orientation=vertical]:self-stretch","data-[orientation=vertical]:w-1.5","data-[orientation=vertical]:w-auto","data-[orientation=vertical]:w-full","data-[orientation=vertical]:w-px","data-[placeholder]:text-muted-foreground","data-[selected=true]:bg-muted","data-[selected=true]:text-accent-foreground","data-[side=bottom]:border-t","data-[side=bottom]:bottom-0","data-[side=bottom]:data-closed:slide-out-to-bottom-10","data-[side=bottom]:data-open:slide-in-from-bottom-10","data-[side=bottom]:h-auto","data-[side=bottom]:inset-x-0","data-[side=bottom]:slide-in-from-top-2","data-[side=bottom]:translate-y-1","data-[side=left]:-translate-x-1","data-[side=left]:border-r","data-[side=left]:data-closed:slide-out-to-left-10","data-[side=left]:data-open:slide-in-from-left-10","data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]","data-[side=left]:h-full","data-[side=left]:inset-y-0","data-[side=left]:left-0","data-[side=left]:slide-in-from-right-2","data-[side=left]:sm:max-w-sm","data-[side=left]:w-3/4","data-[side=right]:border-l","data-[side=right]:data-closed:slide-out-to-right-10","data-[side=right]:data-open:slide-in-from-right-10","data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]","data-[side=right]:h-full","data-[side=right]:inset-y-0","data-[side=right]:right-0","data-[side=right]:slide-in-from-left-2","data-[side=right]:sm:max-w-sm","data-[side=right]:translate-x-1","data-[side=right]:w-3/4","data-[side=top]:-translate-y-1","data-[side=top]:border-b","data-[side=top]:data-closed:slide-out-to-top-10","data-[side=top]:data-open:slide-in-from-top-10","data-[side=top]:h-auto","data-[side=top]:inset-x-0","data-[side=top]:slide-in-from-bottom-2","data-[side=top]:top-0","data-[size=default]:h-9","data-[size=md]:text-xs","data-[size=sm]:gap-2","data-[size=sm]:h-8","data-[size=sm]:has-data-[slot=card-footer]:pb-0","data-[size=sm]:py-3","data-[size=sm]:text-xs","data-[state=active]:animate-in","data-[state=active]:bg-background","data-[state=active]:fade-in-0","data-[state=active]:shadow-sm","data-[state=checked]:bg-accent-brand","data-[state=checked]:bg-primary","data-[state=checked]:border-accent-brand","data-[state=checked]:border-primary","data-[state=checked]:text-primary-foreground","data-[state=checked]:translate-x-4","data-[state=closed]:animate-out","data-[state=closed]:fade-out-0","data-[state=closed]:overflow-hidden","data-[state=closed]:zoom-out-95","data-[state=delayed-open]:animate-in","data-[state=delayed-open]:fade-in-0","data-[state=delayed-open]:zoom-in-95","data-[state=inactive]:animate-out","data-[state=inactive]:fade-out-0","data-[state=open]:animate-in","data-[state=open]:fade-in-0","data-[state=open]:zoom-in-95","data-[state=unchecked]:bg-muted","data-[state=unchecked]:border-border","data-[state=unchecked]:translate-x-0.5","data-[variant=destructive]:*:[svg]:text-destructive","data-[variant=destructive]:focus:bg-destructive/10","data-[variant=destructive]:focus:text-destructive","data-[variant=destructive]:text-destructive","data-active:bg-sidebar-accent","data-active:font-medium","data-active:text-sidebar-accent-foreground","data-closed:animate-out","data-closed:fade-out-0","data-closed:zoom-out-95","data-disabled:opacity-50","data-disabled:pointer-events-none","data-inset:pl-7","data-open:animate-in","data-open:bg-accent","data-open:fade-in-0","data-open:hover:bg-sidebar-accent","data-open:hover:text-sidebar-accent-foreground","data-open:text-accent-foreground","data-open:zoom-in-95","disabled:bg-input/50","disabled:cursor-not-allowed","disabled:opacity-30","disabled:opacity-40","disabled:opacity-50","disabled:opacity-60","disabled:pointer-events-none","divide-border","divide-y","drop-shadow","duration-100","duration-150","duration-200","duration-500","duration-[450ms]","ease-in-out","ease-linear","enabled:hover:text-accent-brand","fade-in","file:bg-transparent","file:border-0","file:font-medium","file:h-6","file:inline-flex","file:text-foreground","file:text-xs","fill-foreground","filter","fixed","flex","flex-1","flex-col","flex-col-reverse","flex-row","flex-row-reverse","flex-shrink-0","flex-wrap","focus-visible:border-destructive/40","focus-visible:border-ring","focus-visible:outline-1","focus-visible:outline-hidden","focus-visible:outline-none","focus-visible:outline-ring","focus-visible:relative","focus-visible:ring-0","focus-visible:ring-1","focus-visible:ring-2","focus-visible:ring-4","focus-visible:ring-[#f59145]/40","focus-visible:ring-[3px]","focus-visible:ring-destructive/20","focus-visible:ring-inset","focus-visible:ring-ring","focus-visible:ring-ring/50","focus-visible:z-10","focus-within:border-ring","focus-within:opacity-100","focus-within:ring-1","focus-within:ring-ring/50","focus:**:text-accent-foreground","focus:bg-accent","focus:ring-1","focus:ring-ring","focus:text-accent-brand","focus:text-accent-foreground","font-bold","font-heading","font-medium","font-mono","font-normal","font-semibold","fs-lg","fs-md","fs-sm","fs-xl","fs-xs","gap-0","gap-0.5","gap-1","gap-1.5","gap-2","gap-2.5","gap-3","gap-3.5","gap-4","gap-5","gap-6","gap-[1.75px]","gap-[3.5px]","gap-px","gap-x-2","gap-x-4","gap-y-0.5","gap-y-1","gap-y-1.5","grid","grid-cols-1","grid-cols-2","grid-cols-3","grid-cols-4","grid-cols-6","grid-cols-8","grid-cols-[0_1fr]","group","group-[.toast]:!border-accent-brand/30","group-[.toast]:!border-destructive/30","group-[.toast]:!text-accent-brand","group-[.toast]:!text-destructive","group-[.toast]:bg-accent-brand","group-[.toast]:bg-muted","group-[.toast]:font-semibold","group-[.toast]:text-muted-foreground","group-[.toast]:text-white","group-[.toaster]:bg-card","group-[.toaster]:border-border","group-[.toaster]:font-mono","group-[.toaster]:rounded-none!","group-[.toaster]:shadow-lg","group-[.toaster]:text-card-foreground","group-data-[collapsible=icon]:-mt-8","group-data-[collapsible=icon]:hidden","group-data-[collapsible=icon]:opacity-0","group-data-[collapsible=icon]:overflow-hidden","group-data-[collapsible=icon]:p-0!","group-data-[collapsible=icon]:p-2!","group-data-[collapsible=icon]:size-8!","group-data-[collapsible=icon]:w-(--sidebar-width-icon)","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]","group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]","group-data-[collapsible=offcanvas]:after:left-full","group-data-[collapsible=offcanvas]:translate-x-0","group-data-[collapsible=offcanvas]:w-0","group-data-[disabled=true]:opacity-50","group-data-[disabled=true]:pointer-events-none","group-data-[side=left]:-right-4","group-data-[side=left]:border-r","group-data-[side=right]:border-l","group-data-[side=right]:left-0","group-data-[side=right]:rotate-180","group-data-[size=sm]/card:[.border-b]:pb-3","group-data-[size=sm]/card:p-3","group-data-[size=sm]/card:px-3","group-data-[size=sm]/card:text-sm","group-data-[variant=floating]:ring-1","group-data-[variant=floating]:ring-sidebar-border","group-data-[variant=floating]:rounded-none","group-data-[variant=floating]:shadow-sm","group-focus-within/menu-item:opacity-100","group-focus-within/row:flex","group-focus/dropdown-menu-item:text-accent-foreground","group-has-data-[sidebar=menu-action]/menu-item:pr-8","group-hover/folder:opacity-100","group-hover/menu-item:opacity-100","group-hover/open:text-accent-brand","group-hover/resize:bg-accent-brand/60","group-hover/row:flex","group-hover:bg-accent-brand/60","group-hover:opacity-100","group/card","group/dropdown-menu-item","group/folder","group/menu-item","group/open","group/resize","group/row","grow","h-0.5","h-1","h-1.5","h-10","h-11","h-12","h-12.5","h-14","h-16","h-2","h-2.5","h-3","h-4","h-5","h-6","h-7","h-8","h-9","h-[136px]","h-[46%]","h-[calc(100%-1px)]","h-[var(--radix-select-trigger-height)]","h-dvh","h-full","h-px","h-screen","h-svh","has-[>img:first-child]:pt-0","has-[>svg]:gap-x-3","has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr]","has-[[data-state=open]]:opacity-100","has-data-[icon=inline-end]:pr-1.5","has-data-[icon=inline-end]:pr-2","has-data-[icon=inline-start]:pl-1.5","has-data-[icon=inline-start]:pl-2","has-data-[slot=card-action]:grid-cols-[1fr_auto]","has-data-[slot=card-description]:grid-rows-[auto_auto]","has-data-[slot=card-footer]:pb-0","has-data-[slot=kbd]:pr-1.5","has-data-[variant=inset]:bg-sidebar","hidden","host-status-stripe","hover:after:bg-sidebar-border","hover:bg-accent-brand/10","hover:bg-accent-brand/15","hover:bg-accent-brand/20","hover:bg-accent-brand/25","hover:bg-accent-brand/5","hover:bg-accent-brand/90","hover:bg-destructive/10","hover:bg-destructive/20","hover:bg-destructive/90","hover:bg-foreground/[0.03]","hover:bg-muted","hover:bg-muted/30","hover:bg-muted/40","hover:bg-muted/50","hover:bg-sidebar-accent","hover:border-accent-brand/40","hover:border-accent-brand/60","hover:border-destructive/40","hover:border-foreground/40","hover:border-muted-foreground","hover:group-data-[collapsible=offcanvas]:bg-sidebar","hover:opacity-100","hover:ring-4","hover:ring-[#f59145]/40","hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]","hover:text-accent-brand","hover:text-accent-brand/70","hover:text-destructive","hover:text-foreground","hover:text-sidebar-accent-foreground","hover:underline","in-data-[side=left]:cursor-w-resize","in-data-[side=right]:cursor-e-resize","inline","inline-block","inline-flex","inset-0","inset-x-0","inset-y-0","invisible","isolate","italic","items-baseline","items-center","items-start","items-stretch","justify-between","justify-center","justify-end","justify-items-start","justify-self-end","justify-start","last:border-0","last:border-b-0","leading-[1.7]","leading-none","leading-relaxed","leading-snug","leading-tight","left-0","left-1/2","left-2","left-2.5","left-[50%]","lg:block","lg:col-span-2","lg:flex","lg:grid-cols-1","lg:grid-cols-2","lg:grid-cols-3","lg:grid-cols-4","lg:grid-cols-5","lg:hidden","line-clamp-2","line-clamp-3","line-clamp-4","line-through","list-disc","lowercase","ltr:-translate-x-1/2","lucide","m-auto","max-h-(--radix-dropdown-menu-content-available-height)","max-h-(--radix-select-content-available-height)","max-h-40","max-h-56","max-h-64","max-h-96","max-h-[300px]","max-w-(--skeleton-width)","max-w-2xl","max-w-32","max-w-3xl","max-w-40","max-w-48","max-w-5xl","max-w-[380px]","max-w-[560px]","max-w-[calc(100%-2rem)]","max-w-lg","max-w-md","max-w-sm","max-w-xl","max-w-xs","mb-1","mb-2","mb-4","md:-mx-4","md:after:hidden","md:block","md:flex","md:flex-row","md:grid-cols-1","md:grid-cols-2","md:grid-cols-3","md:grid-cols-4","md:max-h-none","md:opacity-0","md:peer-data-[variant=inset]:m-2","md:peer-data-[variant=inset]:ml-0","md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2","md:peer-data-[variant=inset]:rounded-none","md:peer-data-[variant=inset]:shadow-sm","md:px-4","md:text-2xl","md:text-xs","md:w-44","md:w-56","min-h-0","min-h-16","min-h-6","min-h-8","min-h-[220px]","min-h-[70vh]","min-h-[80px]","min-h-full","min-h-svh","min-w-0","min-w-16","min-w-32","min-w-4","min-w-40","min-w-5","min-w-52","min-w-[8rem]","min-w-[96px]","min-w-[var(--radix-select-trigger-width)]","min-w-max","ml-0.5","ml-1.5","ml-2","ml-[27px]","ml-auto","motion-context-enter","motion-fade-enter","motion-interactive","motion-meter","motion-panel-enter","motion-transfer-phase","motion-workspace-enter","motion-workspace-layout","mr-1","mr-2","mt-0.5","mt-1","mt-3","mt-4","mt-auto","mt-px","mx-2","mx-3.5","mx-auto","my-1","my-3","my-auto","normal-case","not-data-[variant=destructive]:focus:**:text-accent-foreground","object-contain","opacity-0","opacity-100","opacity-40","opacity-50","opacity-60","opacity-70","opacity-80","origin-(--radix-dropdown-menu-content-transform-origin)","origin-(--radix-popover-content-transform-origin)","origin-(--radix-select-content-transform-origin)","origin-(--radix-tooltip-content-transform-origin)","origin-center","outline","outline-hidden","outline-none","overflow-auto","overflow-hidden","overflow-x-auto","overflow-x-hidden","overflow-y-auto","overline","p-0","p-0.5","p-1","p-1.5","p-10","p-2","p-2.5","p-3","p-4","p-5","p-6","p-[3px]","p-px","paused","pb-1","pb-1.5","pb-2","peer","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","peer-data-[size=sm]/menu-button:top-1","peer-data-active/menu-button:text-sidebar-accent-foreground","peer-disabled:cursor-not-allowed","peer-disabled:opacity-50","peer-hover/menu-button:text-sidebar-accent-foreground","peer/menu-button","pl-1","pl-2","pl-2.5","pl-4","pl-7","pl-8","pl-[8.75px]","placeholder:text-muted-foreground","placeholder:text-muted-foreground/50","pointer-coarse:flex","pointer-coarse:opacity-100","pointer-events-none","pr-0.5","pr-1","pr-1.5","pr-12","pr-2","pr-7","pr-8","pr-9","pr-[7px]","pt-0.5","pt-1","pt-2","pt-2.5","pt-3","pt-4","pt-[3.5px]","px-0","px-1","px-1.5","px-2","px-2.5","px-3","px-4","px-6","py-0","py-0.5","py-1","py-1.5","py-10","py-2","py-2.5","py-3","py-4","py-6","py-8","py-[1px]","py-[7px]","py-px","relative","resize","resize-none","right-0","right-1","right-1.5","right-2","right-2.5","right-3","ring","ring-1","ring-2","ring-accent-brand","ring-border","ring-foreground/10","ring-inset","ring-offset-1","ring-offset-background","ring-sidebar-ring","ring-white/60","rotate-45","rotate-90","rounded","rounded-[inherit]","rounded-full","rounded-none","row-span-2","row-start-1","rtl:-translate-x-1/2","running","safe-bottom","scroll-my-1","scrollbar-none","select-none","self-start","sepia","settings-search-hit","shadow","shadow-[0_0_0_1px_hsl(var(--sidebar-border))]","shadow-lg","shadow-md","shadow-none","shadow-sm","shadow-xl","shadow-xs","shrink-0","size-1.5","size-10","size-12","size-2.5","size-3","size-3.5","size-4","size-5","size-6","size-7","size-8","size-9","size-[22.75px]","size-full","sm:flex","sm:flex-row","sm:grid-cols-12","sm:grid-cols-2","sm:grid-cols-3","sm:grid-cols-4","sm:items-center","sm:justify-end","sm:max-w-lg","sm:max-w-sm","sm:mr-auto","sm:py-14","sm:text-left","space-y-1.5","space-y-2","sr-only","static","sticky","stroke-accent-brand","stroke-border","stroke-muted","supports-backdrop-filter:backdrop-blur-xs","tab-1","tab-2","table","tabular-nums","termix-titlebar","text-2xl","text-[10px]","text-[11px]","text-[13px]","text-[9px]","text-accent-brand","text-accent-brand/80","text-accent-foreground","text-background","text-base","text-blue-400","text-blue-500","text-card-foreground","text-center","text-current","text-destructive","text-destructive/80","text-emerald-500","text-foreground","text-foreground-secondary","text-green-500","text-left","text-lg","text-muted-foreground","text-muted-foreground/30","text-muted-foreground/40","text-muted-foreground/50","text-muted-foreground/60","text-muted-foreground/70","text-muted-foreground/80","text-popover-foreground","text-primary-foreground","text-red-500","text-right","text-secondary-foreground","text-sidebar-foreground","text-sidebar-foreground/70","text-sm","text-warning","text-white","text-xl","text-xs","text-xs/relaxed","thin-scrollbar","toast","toaster","top-0","top-1","top-1.5","top-1/2","top-2","top-3","top-3.5","top-[50%]","touch-none","tracking-[0.35em]","tracking-[0.3em]","tracking-normal","tracking-tight","tracking-wide","tracking-wider","tracking-widest","transfer-progress-fill","transfer-progress-indeterminate","transfer-progress-stalled","transfer-progress-track","transform","transition","transition-[color,background-color,border-color,opacity,box-shadow,transform]","transition-[color,box-shadow]","transition-[height]","transition-[left,right,width]","transition-[left,top,width,height]","transition-[margin,opacity]","transition-[stroke-dasharray]","transition-[width,height,padding]","transition-[width]","transition-all","transition-colors","transition-none","transition-opacity","transition-shadow","transition-transform","translate-x-0.5","translate-x-4","translate-x-[-50%]","translate-x-px","translate-y-[-1px]","translate-y-[-50%]","translate-y-[calc(-50%_-_2px)]","truncate","underline","underline-offset-2","underline-offset-4","uppercase","visible","w-(--radix-dropdown-menu-trigger-width)","w-(--sidebar-width)","w-0.5","w-1/2","w-1/4","w-10","w-11","w-12","w-12.5","w-2","w-2.5","w-2/3","w-28","w-3","w-3/4","w-4","w-40","w-48","w-5","w-5/6","w-52","w-56","w-6","w-60","w-64","w-72","w-9","w-[240px]","w-[3px]","w-[46%]","w-[var(--radix-popover-trigger-width)]","w-auto","w-fit","w-full","w-px","w-screen","whitespace-normal","whitespace-nowrap","whitespace-pre-line","whitespace-pre-wrap","xl:grid-cols-1","xl:grid-cols-2","xl:grid-cols-3","xl:grid-cols-4","z-0","z-10","z-20","z-30","z-40","z-50","z-500","z-[100]","z-[60]","z-[70]","z-[9998]","z-[99999]"]
@@ -4,7 +4,7 @@ import {
4
4
  getLinkedSession,
5
5
  notifySyncChanged,
6
6
  useDesktopLinked
7
- } from "./chunk-7LEJ3HYF.js";
7
+ } from "./chunk-JFQGI4OD.js";
8
8
  import "./chunk-YGYBM7SQ.js";
9
9
  export {
10
10
  SYNC_CHANGED_EVENT,
@@ -23,7 +23,7 @@ import {
23
23
  shareHost,
24
24
  updateHostAccess,
25
25
  updateRole
26
- } from "./chunk-7LEJ3HYF.js";
26
+ } from "./chunk-JFQGI4OD.js";
27
27
  import "./chunk-YGYBM7SQ.js";
28
28
  export {
29
29
  assignRoleToUser,
@@ -59,10 +59,10 @@ import {
59
59
  trackTabHandle,
60
60
  useShellController,
61
61
  useTabStageStore
62
- } from "./chunk-MYBONEWZ.js";
62
+ } from "./chunk-A5CULDWV.js";
63
63
  import {
64
64
  setPermissionsForTesting
65
- } from "./chunk-2MU6WNSX.js";
65
+ } from "./chunk-FGX27MAA.js";
66
66
  import {
67
67
  SurfaceScope,
68
68
  notifyShellReady,
@@ -70,14 +70,14 @@ import {
70
70
  setShellCallbacks,
71
71
  setShellHosts,
72
72
  setShellLayoutProvider
73
- } from "./chunk-LQKK2JJA.js";
73
+ } from "./chunk-GTHINW3L.js";
74
74
  import {
75
75
  getTabType,
76
76
  listTabTypes,
77
77
  resetPluginStore,
78
78
  setFrontendState,
79
79
  setPluginSummaries
80
- } from "./chunk-7LEJ3HYF.js";
80
+ } from "./chunk-JFQGI4OD.js";
81
81
  import {
82
82
  init_define_import_meta_env
83
83
  } from "./chunk-YGYBM7SQ.js";
@@ -22,6 +22,8 @@ export interface LookResponse {
22
22
  };
23
23
  /** TERMIX_SAFE_LAYOUT is set on the server. */
24
24
  safeLayout: boolean;
25
+ /** TERMIX_SAFE_MODE is set: only layout and theme plugins run. */
26
+ safeMode?: boolean;
25
27
  unavailable: UnavailableLook[];
26
28
  }
27
29
  export declare function getLook(): Promise<LookResponse>;
@@ -120,7 +120,7 @@ export interface PluginSummary {
120
120
  name: string;
121
121
  version: string;
122
122
  enabled: boolean;
123
- /** enabled | disabled | blocked | failed, or the loader's live state. */
123
+ /** enabled | disabled | blocked | failed | safe-mode, or the loader's live state. */
124
124
  state: string;
125
125
  /** A linked desktop leaves this plugin to its server. */
126
126
  runsOnServer?: boolean;
@@ -1,5 +1,5 @@
1
1
  import type React from "react";
2
- import { type PanelDensity, type PanelViewMode } from "./panel-layout";
2
+ import { type GridSize, type PanelDensity, type PanelViewMode } from "./panel-layout";
3
3
  export interface DataColumn<T> {
4
4
  key: string;
5
5
  header: string;
@@ -17,13 +17,18 @@ export interface GridColumns {
17
17
  xl?: number;
18
18
  }
19
19
  /** One collection as a card grid or a dense row table. */
20
- export declare function DataView<T>({ items, view, density, getKey, renderCard, columns, listColumns, onRowClick, isRowActive, empty, className, }: {
20
+ export declare function DataView<T>({ items, view, density, getKey, renderCard, columns, size, minCardWidth, listColumns, onRowClick, isRowActive, empty, className, }: {
21
21
  items: T[];
22
22
  view: PanelViewMode;
23
23
  density?: PanelDensity;
24
24
  getKey: (item: T) => string;
25
25
  renderCard: (item: T) => React.ReactNode;
26
+ /** Breakpoint columns, used when no size is given. */
26
27
  columns: GridColumns;
28
+ /** Columns the user picked with ViewToggle. Wins over columns. */
29
+ size?: GridSize;
30
+ /** Narrowest card in auto mode, in px. */
31
+ minCardWidth?: number;
27
32
  listColumns: DataColumn<T>[];
28
33
  onRowClick?: (item: T) => void;
29
34
  isRowActive?: (item: T) => boolean;
@@ -9,6 +9,10 @@ export declare const PANEL: {
9
9
  };
10
10
  export type PanelViewMode = "grid" | "list";
11
11
  export type PanelDensity = "comfortable" | "compact";
12
+ /** Cards per row. "auto" fits as many as the pane has room for. */
13
+ export type GridSize = "auto" | "1" | "2" | "3" | "4" | "5" | "6";
14
+ export declare const GRID_SIZES: readonly GridSize[];
15
+ export declare function gridSizeStyle(size: GridSize, minCardWidth?: number, gap?: string): React.CSSProperties;
12
16
  /** The header, toolbar band and body every tab and panel draws. */
13
17
  export declare function PanelShell({ chrome, icon, title, status, leading, actions, toolbar, tabs, footer, scroll, docs, className, children, }: {
14
18
  /** False inside a sidebar, which draws its own header. */
@@ -66,12 +70,15 @@ export declare function Segmented<T extends string>({ value, onChange, options,
66
70
  }[];
67
71
  className?: string;
68
72
  }): React.JSX.Element;
69
- /** Grid or list, plus the compact rows toggle. */
70
- export declare function ViewToggle({ view, onView, density, onDensity, }: {
73
+ /** Grid or list, plus the compact rows toggle and the cards per row picker. */
74
+ export declare function ViewToggle({ view, onView, density, onDensity, columns, onColumns, }: {
71
75
  view: PanelViewMode;
72
76
  onView: (next: PanelViewMode) => void;
73
77
  density?: PanelDensity;
74
78
  onDensity?: (next: PanelDensity) => void;
79
+ /** Cards per row in grid view. Pass with onColumns to show the picker. */
80
+ columns?: GridSize;
81
+ onColumns?: (next: GridSize) => void;
75
82
  }): React.JSX.Element;
76
83
  export declare function Facts({ className, children, }: {
77
84
  className?: string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sign in for the Termix mobile app in a real browser. The app opens the
3
+ * login page with ?return_to=termix-mobile://..., and after any login method
4
+ * the page sends the token back to that address. Only the app's own scheme
5
+ * is accepted, so the value can never send a token to a website.
6
+ */
7
+ export declare function isAppReturn(value: unknown): value is string;
8
+ /** Reads return_to from the address bar once and keeps it for this tab. */
9
+ export declare function captureAppReturn(): string | null;
10
+ export declare function pendingAppReturn(): string | null;
11
+ export declare function appReturnUrl(base: string, params: Record<string, string>): string;
12
+ /** Sends the result to the app. False when no app asked for it. */
13
+ export declare function handOffToApp(params: Record<string, string>): boolean;
@@ -88,7 +88,7 @@ export { createFrontendLogger, type LogContext } from "../lib/frontend-logger";
88
88
  export { getAdaptiveResourceBudget, markAdaptiveResourceUsed, runAdaptiveBackgroundTask, } from "../lib/adaptive-resource-budget";
89
89
  export { getDeviceId } from "../lib/device-id";
90
90
  export { createQuickConnectHost } from "../sidebar/quick-connect-host";
91
- export { BackButton, Facts, GroupHeading, PANEL, PanelSearch, PanelShell, Segmented, ViewToggle, type PanelDensity, type PanelViewMode, } from "../components/panel-layout";
91
+ export { BackButton, Facts, GroupHeading, PANEL, PanelSearch, PanelShell, Segmented, ViewToggle, type GridSize, type PanelDensity, type PanelViewMode, } from "../components/panel-layout";
92
92
  export { DocsLink, type DocsLinkProps } from "../components/docs-link";
93
93
  export { AddButton, FormFooter, ListBadge, ListRow, ListRowAction, ListRowFolder, PanelList, type ListRowTone, } from "../components/list-kit";
94
94
  export { DataView, type DataColumn, type GridColumns, } from "../components/data-view";
@@ -2,7 +2,7 @@ import { type CapabilityRisk } from "@termix-ssh/plugin-sdk/capabilities";
2
2
  import type { PluginEnvVar } from "@termix-ssh/plugin-sdk/docs";
3
3
  import { type ChangeType, type ChangelogChange, type ChangelogRelease } from "@termix-ssh/plugin-sdk/changelog";
4
4
  import type { PluginChannel, PluginSummary, PluginUploadPreview, RegistryPluginEntry, RegistryPluginVersion } from "../api/plugins-api";
5
- export type PluginStatus = "running" | "disabled" | "failed" | "blocked" | "server";
5
+ export type PluginStatus = "running" | "disabled" | "failed" | "blocked" | "server" | "safeMode";
6
6
  /** One row of the Plugins tab: what is installed merged with the registry. */
7
7
  export interface PluginEntry {
8
8
  id: string;
package/dist/host/ui.js CHANGED
@@ -160,10 +160,10 @@ import {
160
160
  useThemes,
161
161
  verifySecondFactor,
162
162
  withProtocolSettings
163
- } from "./chunk-MYBONEWZ.js";
163
+ } from "./chunk-A5CULDWV.js";
164
164
  import {
165
165
  usePermissions
166
- } from "./chunk-2MU6WNSX.js";
166
+ } from "./chunk-FGX27MAA.js";
167
167
  import {
168
168
  AddButton,
169
169
  Card,
@@ -184,7 +184,7 @@ import {
184
184
  isPrerelease,
185
185
  reportBetaFeedbackUrl,
186
186
  reportCoreIssueUrl
187
- } from "./chunk-446UEDSK.js";
187
+ } from "./chunk-WWFRBU2E.js";
188
188
  import {
189
189
  Action,
190
190
  Activity,
@@ -374,7 +374,7 @@ import {
374
374
  useSurfaceKind,
375
375
  useUiPreference,
376
376
  useUiPreferencesContext
377
- } from "./chunk-LQKK2JJA.js";
377
+ } from "./chunk-GTHINW3L.js";
378
378
  import {
379
379
  CREDENTIAL_ROW_FIELD_KEYS,
380
380
  PRESETS,
@@ -535,7 +535,7 @@ import {
535
535
  useTabs,
536
536
  useTabsSafe,
537
537
  verifyPasswordResetCode
538
- } from "./chunk-7LEJ3HYF.js";
538
+ } from "./chunk-JFQGI4OD.js";
539
539
  import {
540
540
  define_import_meta_env_default,
541
541
  init_define_import_meta_env
@@ -3327,6 +3327,39 @@ function isInElectronWebView() {
3327
3327
  }
3328
3328
  return false;
3329
3329
  }
3330
+ function isEmbeddedAuthFrame() {
3331
+ return isInMobileWebView() || isInElectronWebView();
3332
+ }
3333
+
3334
+ // src/ui/lib/app-return.ts
3335
+ init_define_import_meta_env();
3336
+ var STORAGE_KEY = "termix-app-return";
3337
+ var APP_RETURN = /^termix-mobile:\/\/[A-Za-z0-9._~/-]*$/;
3338
+ function isAppReturn(value) {
3339
+ return typeof value === "string" && APP_RETURN.test(value);
3340
+ }
3341
+ function pendingAppReturn() {
3342
+ try {
3343
+ const value = sessionStorage.getItem(STORAGE_KEY);
3344
+ return isAppReturn(value) ? value : null;
3345
+ } catch {
3346
+ return null;
3347
+ }
3348
+ }
3349
+ function appReturnUrl(base2, params) {
3350
+ const query = new URLSearchParams(params).toString();
3351
+ return query ? `${base2}?${query}` : base2;
3352
+ }
3353
+ function handOffToApp(params) {
3354
+ const base2 = pendingAppReturn();
3355
+ if (!base2) return false;
3356
+ try {
3357
+ sessionStorage.removeItem(STORAGE_KEY);
3358
+ } catch {
3359
+ }
3360
+ window.location.replace(appReturnUrl(base2, params));
3361
+ return true;
3362
+ }
3330
3363
 
3331
3364
  // src/ui/auth/Auth.tsx
3332
3365
  import { useState as useState7, useEffect as useEffect6, useCallback as useCallback5, useRef as useRef4 } from "react";
@@ -3878,7 +3911,7 @@ function currentDeps() {
3878
3911
  return deps ?? defaultDeps;
3879
3912
  }
3880
3913
  function serverAllowsFrontend(summary) {
3881
- return summary.enabled && summary.state !== "failed" && summary.state !== "blocked" && !!summary.frontend;
3914
+ return summary.enabled && summary.state !== "failed" && summary.state !== "blocked" && summary.state !== "safe-mode" && !!summary.frontend;
3882
3915
  }
3883
3916
  function orderForActivation(summaries) {
3884
3917
  const byId = new Map(summaries.map((summary) => [summary.id, summary]));
@@ -4252,7 +4285,7 @@ function LanguageRow({
4252
4285
  )
4253
4286
  ] });
4254
4287
  }
4255
- var STORAGE_KEY = "termix_auth";
4288
+ var STORAGE_KEY2 = "termix_auth";
4256
4289
  function parseSecondFactorIds(value) {
4257
4290
  const ids = (value ?? "").split(",").filter(Boolean);
4258
4291
  return ids.map((id) => ({ id, pluginId: "", labelKey: "" }));
@@ -4266,10 +4299,15 @@ function hasDesktopManualLogout() {
4266
4299
  }
4267
4300
  function storeAuth(username) {
4268
4301
  localStorage.setItem(
4269
- STORAGE_KEY,
4302
+ STORAGE_KEY2,
4270
4303
  JSON.stringify({ loggedIn: true, username })
4271
4304
  );
4272
4305
  }
4306
+ async function handOffLogin(token) {
4307
+ if (!pendingAppReturn() || isEmbeddedAuthFrame()) return false;
4308
+ const value = token || await getCurrentToken();
4309
+ return handOffToApp(value ? { token: value } : { error: "no_token" });
4310
+ }
4273
4311
  function PasswordInput2({
4274
4312
  value,
4275
4313
  onChange,
@@ -4407,8 +4445,9 @@ function Auth({ onLogin }) {
4407
4445
  useEffect6(() => {
4408
4446
  if (proxySigninHandledRef.current || isElectron()) return;
4409
4447
  proxySigninHandledRef.current = true;
4410
- requestTrustedProxyLogin().then((result) => {
4448
+ requestTrustedProxyLogin().then(async (result) => {
4411
4449
  if (!result.enabled || !result.success) return;
4450
+ if (await handOffLogin()) return;
4412
4451
  storeAuth(result.username || "");
4413
4452
  onLogin(
4414
4453
  result.username || "",
@@ -4625,21 +4664,24 @@ function Auth({ onLogin }) {
4625
4664
  }
4626
4665
  return;
4627
4666
  }
4628
- getUserInfo().then((meRes) => {
4629
- storeAuth(meRes.username || "");
4630
- clearDesktopManualLogout();
4631
- onLogin(
4632
- meRes.username || "",
4633
- meRes.userId || void 0,
4634
- !!meRes.is_admin
4635
- );
4636
- window.history.replaceState(
4637
- {},
4638
- document.title,
4639
- window.location.pathname
4640
- );
4641
- }).catch(() => {
4642
- toast2.error(t3("errors.failedUserInfo"));
4667
+ void handOffLogin(urlParams.get("token")).then((handedOff) => {
4668
+ if (handedOff) return;
4669
+ getUserInfo().then((meRes) => {
4670
+ storeAuth(meRes.username || "");
4671
+ clearDesktopManualLogout();
4672
+ onLogin(
4673
+ meRes.username || "",
4674
+ meRes.userId || void 0,
4675
+ !!meRes.is_admin
4676
+ );
4677
+ window.history.replaceState(
4678
+ {},
4679
+ document.title,
4680
+ window.location.pathname
4681
+ );
4682
+ }).catch(() => {
4683
+ toast2.error(t3("errors.failedUserInfo"));
4684
+ });
4643
4685
  });
4644
4686
  }
4645
4687
  }, [onLogin, t3]);
@@ -4721,6 +4763,7 @@ function Auth({ onLogin }) {
4721
4763
  setWebviewAuthSuccess(true);
4722
4764
  return;
4723
4765
  }
4766
+ if (await handOffLogin(res?.token)) return;
4724
4767
  const meRes = await getUserInfo();
4725
4768
  const name2 = meRes.username || res.username || options.fallbackUsername || "";
4726
4769
  storeAuth(name2);
@@ -7,7 +7,7 @@ import {
7
7
  resetPermissionsCache,
8
8
  setPermissionsForTesting,
9
9
  usePermissions
10
- } from "./chunk-2MU6WNSX.js";
10
+ } from "./chunk-FGX27MAA.js";
11
11
  import "./chunk-YGYBM7SQ.js";
12
12
  export {
13
13
  hasPermission,
@@ -10,6 +10,8 @@
10
10
  */
11
11
  export type { Client, ClientChannel } from "ssh2";
12
12
  import type { Client } from "ssh2";
13
+ import { EXTRA_PATH_DIRS } from "./host-scripts/docker.js";
14
+ export { EXTRA_PATH_DIRS };
13
15
  export interface ExecResult {
14
16
  stdout: string;
15
17
  stderr: string;
@@ -26,12 +28,6 @@ export interface PlatformInfo {
26
28
  hasDocker: boolean;
27
29
  osPrettyName: string | null;
28
30
  }
29
- /**
30
- * Non-interactive SSH shells don't source ~/.zprofile or ~/.bash_profile,
31
- * so PATH additions from installers like Homebrew or OrbStack are missing.
32
- * Extend PATH with their common install locations before probing.
33
- */
34
- export declare const EXTRA_PATH_DIRS = "/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:\"$HOME/.orbstack/bin\"";
35
31
  /**
36
32
  * Single probe that reports which tooling is available. Each line is
37
33
  * "key=value" so the parser is trivial and order-independent.
@@ -8,6 +8,9 @@
8
8
  *
9
9
  * A plugin passes the `Client` it got from ctx.ssh.connect/withConnection.
10
10
  */
11
+ // Homebrew and OrbStack paths a non-interactive shell misses.
12
+ import { EXTRA_PATH_DIRS } from "./host-scripts/docker.js";
13
+ export { EXTRA_PATH_DIRS };
11
14
  /** Runs one non-interactive command over an existing ssh2 client. */
12
15
  export function execCommand(client, command, timeoutMs = 30000) {
13
16
  return new Promise((resolve, reject) => {
@@ -83,12 +86,6 @@ export function execCommand(client, command, timeoutMs = 30000) {
83
86
  });
84
87
  });
85
88
  }
86
- /**
87
- * Non-interactive SSH shells don't source ~/.zprofile or ~/.bash_profile,
88
- * so PATH additions from installers like Homebrew or OrbStack are missing.
89
- * Extend PATH with their common install locations before probing.
90
- */
91
- export const EXTRA_PATH_DIRS = '/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:"$HOME/.orbstack/bin"';
92
89
  const DOCKER_PROBE = `command -v docker >/dev/null 2>&1` +
93
90
  ` || [ -S /var/run/docker.sock ]` +
94
91
  ` || [ -S "$HOME/.orbstack/run/docker.sock" ]`;