@invergent/agent-chat-react 1.10.0 → 2.0.0

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.
package/dist/index.cjs CHANGED
@@ -228,13 +228,13 @@ var buttonVariants = classVarianceAuthority.cva(
228
228
  link: "text-primary underline underline-offset-4 hover:underline"
229
229
  },
230
230
  size: {
231
- default: "h-10 gap-1.5 px-6 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
231
+ default: "h-11 md:h-10 gap-1.5 px-6 has-data-[icon=inline-end]:pr-4 has-data-[icon=inline-start]:pl-4",
232
232
  xs: "h-7 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
233
- sm: "h-9 gap-1 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
233
+ sm: "h-11 md:h-9 gap-1 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
234
234
  lg: "h-11 gap-1.5 px-8 has-data-[icon=inline-end]:pr-5 has-data-[icon=inline-start]:pl-5",
235
- icon: "size-10",
235
+ icon: "size-11 md:size-10",
236
236
  "icon-xs": "size-7 [&_svg:not([class*='size-'])]:size-3",
237
- "icon-sm": "size-9",
237
+ "icon-sm": "size-11 md:size-9",
238
238
  "icon-lg": "size-11"
239
239
  }
240
240
  },
@@ -676,7 +676,7 @@ function BrowserPane({ sessionId, state, adapter }) {
676
676
  DialogContent,
677
677
  {
678
678
  "aria-describedby": void 0,
679
- className: "flex h-screen w-screen max-w-none flex-col gap-0 overflow-hidden rounded-none border-0 bg-background p-0 shadow-none ring-0 sm:max-w-none",
679
+ className: "flex h-dvh w-screen max-w-none flex-col gap-0 overflow-hidden rounded-none border-0 bg-background p-0 shadow-none ring-0 sm:max-w-none",
680
680
  children: [
681
681
  /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { className: "h-10 shrink-0 flex-row items-center gap-2 border-b border-line bg-card px-4 py-0", children: [
682
682
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ZapIcon, { className: "size-3.5 text-muted-foreground", "aria-hidden": "true" }),
@@ -3731,7 +3731,7 @@ function Input({ className, type, ...props }) {
3731
3731
  type,
3732
3732
  "data-slot": "input",
3733
3733
  className: cn(
3734
- "h-10 w-full min-w-0 border border-transparent border-b-input bg-transparent px-0 py-1 text-base transition-[color,border-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-b-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-b-destructive md:text-sm dark:aria-invalid:border-b-destructive/50",
3734
+ "h-11 md:h-10 w-full min-w-0 border border-transparent border-b-input bg-transparent px-0 py-1 text-base transition-[color,border-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-b-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-b-destructive md:text-sm dark:aria-invalid:border-b-destructive/50",
3735
3735
  className
3736
3736
  ),
3737
3737
  ...props
@@ -4574,7 +4574,7 @@ function InputGroup({ className, ...props }) {
4574
4574
  "data-slot": "input-group",
4575
4575
  role: "group",
4576
4576
  className: cn(
4577
- "group/input-group relative flex h-10 w-full min-w-0 items-center rounded-none border border-transparent border-b-input bg-transparent transition-[color,border-color] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-none has-data-[align=block-start]:rounded-none has-[[data-slot=input-group-control]:focus-visible]:border-b-ring has-[[data-slot][aria-invalid=true]]:border-b-destructive has-[textarea]:rounded-none has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:border-b-destructive/50 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3",
4577
+ "group/input-group relative flex h-11 md:h-10 w-full min-w-0 items-center rounded-none border border-transparent border-b-input bg-transparent transition-[color,border-color] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-none has-data-[align=block-start]:rounded-none has-[[data-slot=input-group-control]:focus-visible]:border-b-ring has-[[data-slot][aria-invalid=true]]:border-b-destructive has-[textarea]:rounded-none has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:border-b-destructive/50 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3",
4578
4578
  className
4579
4579
  ),
4580
4580
  ...props
@@ -7616,7 +7616,7 @@ function ChatThread({
7616
7616
  ] }) }),
7617
7617
  /* @__PURE__ */ jsxRuntime.jsx(ConversationScrollButton, {})
7618
7618
  ] }),
7619
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-4xl px-6 pb-5 pt-3", children: [
7619
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto w-full max-w-4xl px-3 sm:px-6 pb-3 sm:pb-5 pt-3", children: [
7620
7620
  retryIndicator && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2", children: /* @__PURE__ */ jsxRuntime.jsx(RetryBanner, { indicator: retryIndicator }) }),
7621
7621
  disabled && disabledReason ? /* @__PURE__ */ jsxRuntime.jsx(
7622
7622
  "div",
@@ -8281,7 +8281,7 @@ function RenderEntries({
8281
8281
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0" }),
8282
8282
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate", children: entry.name }),
8283
8283
  entry.size != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 shrink-0 text-xs text-muted-foreground/60", children: formatFileSize(entry.size) }),
8284
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-1 flex shrink-0 items-center gap-0 opacity-0 transition-opacity group-hover:opacity-100", children: [
8284
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-1 flex shrink-0 items-center gap-0 opacity-100 transition-opacity md:opacity-0 md:group-hover:opacity-100", children: [
8285
8285
  /* @__PURE__ */ jsxRuntime.jsx(
8286
8286
  "a",
8287
8287
  {
@@ -8716,6 +8716,9 @@ function ConfirmDialog({
8716
8716
  );
8717
8717
  }
8718
8718
 
8719
+ // src/agent-chat.tsx
8720
+ init_utils();
8721
+
8719
8722
  // src/lib/sessions.ts
8720
8723
  function isScheduledRunSession(session) {
8721
8724
  return Boolean(
@@ -9806,6 +9809,9 @@ function parseGoalDefinition(content) {
9806
9809
  const rubric = match ? args.slice(match.index + match[0].length).trim() : "";
9807
9810
  return rubric ? { description, rubric } : { description };
9808
9811
  }
9812
+ var RIGHT_STACK_STYLE = {
9813
+ ["--right-stack-w"]: "440px"
9814
+ };
9809
9815
  function AgentChat({
9810
9816
  adapter,
9811
9817
  agentId,
@@ -9817,6 +9823,7 @@ function AgentChat({
9817
9823
  onComposerError
9818
9824
  }) {
9819
9825
  const [workspacePath, setWorkspacePath] = react.useState(null);
9826
+ const [mobileView, setMobileView] = react.useState("chat");
9820
9827
  const runtime = useAgentChatRuntime({
9821
9828
  adapter,
9822
9829
  agentId,
@@ -9834,10 +9841,12 @@ function AgentChat({
9834
9841
  const handleFileSelect = react.useCallback(
9835
9842
  (path) => {
9836
9843
  setWorkspacePath(path);
9844
+ setMobileView("workspace");
9837
9845
  onFileSelect?.(path);
9838
9846
  },
9839
9847
  [onFileSelect]
9840
9848
  );
9849
+ const showMobileToggle = Boolean(sessionId);
9841
9850
  return /* @__PURE__ */ jsxRuntime.jsx(
9842
9851
  AgentChatAdapterProvider,
9843
9852
  {
@@ -9850,15 +9859,56 @@ function AgentChat({
9850
9859
  "section",
9851
9860
  {
9852
9861
  "data-testid": "agent-chat-layout",
9853
- className: hasBrowserPanel ? "relative min-h-0 flex-1 overflow-hidden bg-background text-sm text-foreground" : "flex min-h-0 flex-1 overflow-hidden bg-background text-sm text-foreground",
9854
- style: { direction: "ltr" },
9862
+ "data-mobile-view": mobileView,
9863
+ className: cn(
9864
+ // Phone: flex column, tab toggle on top, then either chat or
9865
+ // right stack visible based on `data-mobile-view`.
9866
+ "flex min-h-0 flex-1 flex-col overflow-hidden bg-background text-sm text-foreground",
9867
+ // md+: restore desktop two-pane layout.
9868
+ hasBrowserPanel ? "md:relative md:flex-row" : "md:flex-row"
9869
+ ),
9870
+ style: { direction: "ltr", ...RIGHT_STACK_STYLE },
9855
9871
  children: [
9872
+ showMobileToggle && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:hidden flex shrink-0 border-b border-line bg-card", children: [
9873
+ /* @__PURE__ */ jsxRuntime.jsx(
9874
+ "button",
9875
+ {
9876
+ type: "button",
9877
+ onClick: () => setMobileView("chat"),
9878
+ "aria-pressed": mobileView === "chat",
9879
+ className: cn(
9880
+ "flex-1 px-4 py-3 text-sm font-medium border-b-2 -mb-px transition-colors",
9881
+ mobileView === "chat" ? "border-primary text-foreground" : "border-transparent text-subtle hover:text-foreground"
9882
+ ),
9883
+ children: "Chat"
9884
+ }
9885
+ ),
9886
+ /* @__PURE__ */ jsxRuntime.jsx(
9887
+ "button",
9888
+ {
9889
+ type: "button",
9890
+ onClick: () => setMobileView("workspace"),
9891
+ "aria-pressed": mobileView === "workspace",
9892
+ className: cn(
9893
+ "flex-1 px-4 py-3 text-sm font-medium border-b-2 -mb-px transition-colors",
9894
+ mobileView === "workspace" ? "border-primary text-foreground" : "border-transparent text-subtle hover:text-foreground"
9895
+ ),
9896
+ children: "Workspace"
9897
+ }
9898
+ )
9899
+ ] }),
9856
9900
  /* @__PURE__ */ jsxRuntime.jsx(
9857
9901
  "div",
9858
9902
  {
9859
9903
  "data-testid": "chat-panel",
9860
- className: hasBrowserPanel ? "absolute inset-y-0 left-0 flex min-h-0 min-w-0 flex-col overflow-hidden" : "flex min-w-0 flex-1 flex-col overflow-hidden",
9861
- style: hasBrowserPanel ? { right: 440 } : void 0,
9904
+ "data-mobile-view": mobileView,
9905
+ className: cn(
9906
+ // Phone: full width column, hidden when workspace tab active.
9907
+ "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",
9908
+ showMobileToggle && "data-[mobile-view=workspace]:hidden md:flex!",
9909
+ // md+: restore desktop positioning.
9910
+ hasBrowserPanel ? "md:absolute md:inset-y-0 md:left-0 md:right-(--right-stack-w,440px) md:flex" : "md:relative md:flex-1"
9911
+ ),
9862
9912
  children: /* @__PURE__ */ jsxRuntime.jsx(
9863
9913
  ChatThread,
9864
9914
  {
@@ -9883,8 +9933,16 @@ function AgentChat({
9883
9933
  "div",
9884
9934
  {
9885
9935
  "data-testid": "right-stack",
9886
- className: hasBrowserPanel ? "absolute inset-y-0 flex min-h-0 flex-col overflow-hidden" : "flex min-h-0 shrink-0 flex-col",
9887
- style: hasBrowserPanel ? { right: 0, width: 440 } : void 0,
9936
+ "data-mobile-view": mobileView,
9937
+ className: cn(
9938
+ // Phone: full width column, hidden when chat tab active.
9939
+ "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",
9940
+ showMobileToggle && "data-[mobile-view=chat]:hidden md:flex!",
9941
+ // md+: restore desktop positioning. With browser panel the
9942
+ // right stack is absolutely positioned at the configured
9943
+ // width; without it the stack flows in the row.
9944
+ hasBrowserPanel ? "md:absolute md:inset-y-0 md:right-0 md:w-(--right-stack-w,440px) md:flex-none" : "md:relative md:shrink-0 md:flex-none md:w-(--right-stack-w,440px)"
9945
+ ),
9888
9946
  children: [
9889
9947
  hasBrowserPanel && /* @__PURE__ */ jsxRuntime.jsx(
9890
9948
  "div",
@@ -10871,16 +10929,16 @@ function MissionDashboard({
10871
10929
  }
10872
10930
  };
10873
10931
  const statusVariant = mission.status === "satisfied" ? "default" : mission.status === "failed" || mission.status === "cancelled" ? "destructive" : "secondary";
10874
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-6 p-6 max-w-6xl mx-auto", children: [
10932
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 p-4 sm:gap-6 sm:p-6 max-w-6xl mx-auto", children: [
10875
10933
  /* @__PURE__ */ jsxRuntime.jsxs(Card, { children: [
10876
- /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
10877
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
10934
+ /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-stretch gap-4 sm:flex-row sm:items-start sm:justify-between", children: [
10935
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1 min-w-0 flex-1", children: [
10878
10936
  /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { className: "wrap-break-word -uppercase text-sm", children: mission.description }),
10879
10937
  /* @__PURE__ */ jsxRuntime.jsxs(CardDescription, { className: "wrap-break-word text-foreground/70", children: [
10880
10938
  "Rubric: ",
10881
10939
  mission.rubric
10882
10940
  ] }),
10883
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 pt-2 text-xs text-foreground/70", children: [
10941
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 pt-2 text-xs text-foreground/70", children: [
10884
10942
  /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: statusVariant, className: "font-mono text-foreground", children: mission.status }),
10885
10943
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-primary", children: [
10886
10944
  "Iteration ",
@@ -10895,7 +10953,7 @@ function MissionDashboard({
10895
10953
  ] }) : null
10896
10954
  ] })
10897
10955
  ] }),
10898
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: ACTIVE_MISSION_STATUSES.has(mission.status) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10956
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-2 shrink-0", children: ACTIVE_MISSION_STATUSES.has(mission.status) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10899
10957
  mission.status === "active" ? /* @__PURE__ */ jsxRuntime.jsxs(
10900
10958
  Button,
10901
10959
  {
@@ -11015,7 +11073,7 @@ function MissionDashboard({
11015
11073
  return /* @__PURE__ */ jsxRuntime.jsxs(
11016
11074
  "li",
11017
11075
  {
11018
- className: "flex items-start justify-between gap-3 rounded border border-border/40 px-3 py-2 text-sm",
11076
+ className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between rounded border border-border/40 px-3 py-2 text-sm",
11019
11077
  children: [
11020
11078
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1 space-y-1", children: [
11021
11079
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
@@ -11174,7 +11232,8 @@ function MissionRow({
11174
11232
  "div",
11175
11233
  {
11176
11234
  className: cn(
11177
- "group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors cursor-pointer hover:border-l-primary hover:bg-input"
11235
+ "group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors cursor-pointer hover:border-l-primary hover:bg-input",
11236
+ "min-h-11 md:min-h-0"
11178
11237
  ),
11179
11238
  onClick: openMission,
11180
11239
  onKeyDown: handleRowKeyDown,
@@ -11201,7 +11260,7 @@ function MissionRow({
11201
11260
  "button",
11202
11261
  {
11203
11262
  type: "button",
11204
- className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
11263
+ className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
11205
11264
  onClick: (e) => {
11206
11265
  stopActionClick(e);
11207
11266
  onPause(mission.id);
@@ -11216,7 +11275,7 @@ function MissionRow({
11216
11275
  "button",
11217
11276
  {
11218
11277
  type: "button",
11219
- className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
11278
+ className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
11220
11279
  onClick: (e) => {
11221
11280
  stopActionClick(e);
11222
11281
  onResume(mission.id);
@@ -11231,7 +11290,7 @@ function MissionRow({
11231
11290
  "button",
11232
11291
  {
11233
11292
  type: "button",
11234
- className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
11293
+ className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
11235
11294
  onClick: (e) => {
11236
11295
  stopActionClick(e);
11237
11296
  onCancel(mission.id);
@@ -11509,6 +11568,7 @@ function ScheduledWorkRow({
11509
11568
  {
11510
11569
  className: cn(
11511
11570
  "group flex min-w-0 items-start gap-2 border-l-2 border-l-transparent px-3 py-2 text-sm transition-colors hover:border-l-primary hover:bg-input",
11571
+ "min-h-11 md:min-h-0",
11512
11572
  lastSessionId && "cursor-pointer"
11513
11573
  ),
11514
11574
  onClick: openLastRun,
@@ -11535,7 +11595,7 @@ function ScheduledWorkRow({
11535
11595
  "button",
11536
11596
  {
11537
11597
  type: "button",
11538
- className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
11598
+ className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-line hover:text-foreground disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
11539
11599
  onClick: (e) => {
11540
11600
  stopActionClick(e);
11541
11601
  onRunNow(item.id);
@@ -11550,7 +11610,7 @@ function ScheduledWorkRow({
11550
11610
  "button",
11551
11611
  {
11552
11612
  type: "button",
11553
- className: "rounded p-1 text-faint opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 group-hover:opacity-100",
11613
+ className: "rounded p-2 md:p-1 text-faint opacity-100 md:opacity-70 transition-all hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-40 md:group-hover:opacity-100",
11554
11614
  onClick: (e) => {
11555
11615
  stopActionClick(e);
11556
11616
  onCancel(item.id);
@@ -11857,6 +11917,7 @@ function TreeNodeRow({
11857
11917
  },
11858
11918
  className: cn(
11859
11919
  "group flex items-center gap-2 w-full py-2 pr-2 text-left cursor-pointer transition-colors border-l-2",
11920
+ "min-h-11 md:min-h-0",
11860
11921
  isActive ? "bg-line text-foreground border-l-primary" : "bg-transparent text-subtle hover:bg-input hover:text-foreground border-l-transparent"
11861
11922
  ),
11862
11923
  style: { paddingLeft: `${depth * 12 + 12}px` },
@@ -11865,7 +11926,7 @@ function TreeNodeRow({
11865
11926
  "button",
11866
11927
  {
11867
11928
  type: "button",
11868
- className: "p-0.5 rounded hover:bg-line shrink-0",
11929
+ className: "p-2 md:p-0.5 rounded hover:bg-line shrink-0",
11869
11930
  onClick: (e) => {
11870
11931
  e.stopPropagation();
11871
11932
  setExpanded(!expanded);
@@ -11883,7 +11944,7 @@ function TreeNodeRow({
11883
11944
  "button",
11884
11945
  {
11885
11946
  type: "button",
11886
- className: "p-1 rounded opacity-0 group-hover:opacity-100 hover:bg-destructive/10 hover:text-destructive transition-all",
11947
+ className: "p-2 md:p-1 rounded opacity-100 md:opacity-0 md:group-hover:opacity-100 hover:bg-destructive/10 hover:text-destructive transition-all",
11887
11948
  onClick: (e) => {
11888
11949
  e.stopPropagation();
11889
11950
  onStop(entry.id);
@@ -11898,8 +11959,8 @@ function TreeNodeRow({
11898
11959
  {
11899
11960
  type: "button",
11900
11961
  className: cn(
11901
- "p-1 rounded hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none transition-all",
11902
- deletingSessionId === entry.id ? "opacity-100" : "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"
11962
+ "p-2 md:p-1 rounded hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none transition-all",
11963
+ deletingSessionId === entry.id ? "opacity-100" : "opacity-100 md:opacity-0 md:group-hover:opacity-100 md:focus-visible:opacity-100"
11903
11964
  ),
11904
11965
  onClick: (e) => {
11905
11966
  e.stopPropagation();