@volter-ai-dev/supercode-ui 0.1.25 → 0.1.27

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/components.mjs CHANGED
@@ -667,7 +667,7 @@ function normalizeUiState(value) {
667
667
  savedDraft: string(raw.savedDraft),
668
668
  attention: Array.isArray(raw.attention) ? raw.attention.flatMap((candidate) => {
669
669
  const item = record(candidate);
670
- return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {} }] : [];
670
+ return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {}, ...Number.isSafeInteger(item.unreadCount) && item.unreadCount > 0 ? { unreadCount: item.unreadCount } : {} }] : [];
671
671
  }) : [],
672
672
  sessions: readSessions(raw.sessions),
673
673
  attached: readAttached(raw.attached),
@@ -1992,19 +1992,39 @@ import { useEffect as useEffect7, useId as useId2, useMemo as useMemo2, useRef a
1992
1992
  import { useEffect as useEffect6, useLayoutEffect as useLayoutEffect3, useRef as useRef5, useState as useState4 } from "preact/hooks";
1993
1993
  import { jsx as jsx7, jsxs as jsxs6 } from "preact/jsx-runtime";
1994
1994
  var sessionListMemory = /* @__PURE__ */ new Map();
1995
+ function sessionPathParts(value) {
1996
+ const complete = String(value ?? "").replaceAll("\\", "/");
1997
+ const boundary = complete.lastIndexOf("/");
1998
+ if (boundary <= 0) return { complete, leading: complete, trailing: "" };
1999
+ return {
2000
+ complete,
2001
+ leading: complete.slice(0, boundary),
2002
+ trailing: complete.slice(boundary)
2003
+ };
2004
+ }
1995
2005
  function SessionRow({ row, state, onOpen }) {
1996
2006
  const activity = sessionActivity(state, row);
1997
- const attentionPreview = state.attention.find((item) => item.key === row.key)?.preview;
2007
+ const attention = state.attention.find((item) => item.key === row.key);
1998
2008
  const title = sessionDisplayName(row);
1999
- const detail = attentionPreview || row.preview || (row.name && row.name !== title ? row.name : row.cwd);
2000
- return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${detail ? ` \xB7 ${detail}` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
2009
+ const path = sessionPathParts(row.cwd);
2010
+ const preview = row.preview || attention?.preview || "";
2011
+ const unreadCount = attention?.unreadCount ?? 0;
2012
+ const unreadLabel = unreadCount > 99 ? "99+" : String(unreadCount);
2013
+ return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${path.complete ? ` \xB7 ${path.complete}` : ""}${preview ? ` \xB7 ${preview}` : ""}${unreadCount ? ` \xB7 ${unreadCount} unread` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
2001
2014
  /* @__PURE__ */ jsx7(HarnessLogo, { id: row.harness, activity, size: 34 }),
2002
2015
  /* @__PURE__ */ jsxs6("span", { class: "scui-session-copy", children: [
2003
- /* @__PURE__ */ jsxs6("span", { children: [
2016
+ /* @__PURE__ */ jsxs6("span", { class: "scui-session-title", children: [
2004
2017
  /* @__PURE__ */ jsx7("strong", { children: title }),
2005
- /* @__PURE__ */ jsx7("small", { children: row.age })
2018
+ row.age ? /* @__PURE__ */ jsx7("time", { children: row.age }) : null
2006
2019
  ] }),
2007
- detail ? /* @__PURE__ */ jsx7("span", { children: /* @__PURE__ */ jsx7("small", { title: row.cwd, children: detail }) }) : null,
2020
+ path.complete ? /* @__PURE__ */ jsxs6("small", { class: "scui-session-path", title: row.cwd, children: [
2021
+ /* @__PURE__ */ jsx7("span", { class: "scui-session-path-leading", children: path.leading }),
2022
+ path.trailing ? /* @__PURE__ */ jsx7("span", { class: "scui-session-path-trailing", children: path.trailing }) : null
2023
+ ] }) : null,
2024
+ preview || unreadCount ? /* @__PURE__ */ jsxs6("span", { class: "scui-session-preview", children: [
2025
+ preview ? /* @__PURE__ */ jsx7("small", { children: preview }) : null,
2026
+ unreadCount ? /* @__PURE__ */ jsx7("b", { "aria-label": `${unreadCount} unread messages`, children: unreadLabel }) : null
2027
+ ] }) : null,
2008
2028
  state.attachError?.key === row.key ? /* @__PURE__ */ jsx7("em", { children: state.attachError.message }) : null
2009
2029
  ] })
2010
2030
  ] });
package/core.mjs CHANGED
@@ -704,7 +704,7 @@ export function normalizeUiState(value) {
704
704
  attention: Array.isArray(raw.attention) ? raw.attention.flatMap((candidate) => {
705
705
  const item = record(candidate);
706
706
  return item && typeof item.key === 'string' && ['unseen', 'finished', 'failed'].includes(item.kind)
707
- ? [{ key: item.key, kind: item.kind, ...(typeof item.preview === 'string' ? { preview: item.preview } : {}), ...(Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {}) }]
707
+ ? [{ key: item.key, kind: item.kind, ...(typeof item.preview === 'string' ? { preview: item.preview } : {}), ...(Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {}), ...(Number.isSafeInteger(item.unreadCount) && item.unreadCount > 0 ? { unreadCount: item.unreadCount } : {}) }]
708
708
  : [];
709
709
  }) : [],
710
710
  sessions: readSessions(raw.sessions),
package/embed.mjs CHANGED
@@ -670,7 +670,7 @@ function normalizeUiState(value) {
670
670
  savedDraft: string(raw.savedDraft),
671
671
  attention: Array.isArray(raw.attention) ? raw.attention.flatMap((candidate) => {
672
672
  const item = record(candidate);
673
- return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {} }] : [];
673
+ return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {}, ...Number.isSafeInteger(item.unreadCount) && item.unreadCount > 0 ? { unreadCount: item.unreadCount } : {} }] : [];
674
674
  }) : [],
675
675
  sessions: readSessions(raw.sessions),
676
676
  attached: readAttached(raw.attached),
@@ -1971,19 +1971,39 @@ function HarnessLogo({ id, activity, size = 28, onMissingLogo }) {
1971
1971
  import { useEffect as useEffect6, useLayoutEffect as useLayoutEffect3, useRef as useRef5, useState as useState4 } from "preact/hooks";
1972
1972
  import { jsx as jsx7, jsxs as jsxs6 } from "preact/jsx-runtime";
1973
1973
  var sessionListMemory = /* @__PURE__ */ new Map();
1974
+ function sessionPathParts(value) {
1975
+ const complete = String(value ?? "").replaceAll("\\", "/");
1976
+ const boundary = complete.lastIndexOf("/");
1977
+ if (boundary <= 0) return { complete, leading: complete, trailing: "" };
1978
+ return {
1979
+ complete,
1980
+ leading: complete.slice(0, boundary),
1981
+ trailing: complete.slice(boundary)
1982
+ };
1983
+ }
1974
1984
  function SessionRow({ row, state, onOpen }) {
1975
1985
  const activity = sessionActivity(state, row);
1976
- const attentionPreview = state.attention.find((item) => item.key === row.key)?.preview;
1986
+ const attention = state.attention.find((item) => item.key === row.key);
1977
1987
  const title = sessionDisplayName(row);
1978
- const detail = attentionPreview || row.preview || (row.name && row.name !== title ? row.name : row.cwd);
1979
- return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${detail ? ` \xB7 ${detail}` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
1988
+ const path = sessionPathParts(row.cwd);
1989
+ const preview = row.preview || attention?.preview || "";
1990
+ const unreadCount = attention?.unreadCount ?? 0;
1991
+ const unreadLabel = unreadCount > 99 ? "99+" : String(unreadCount);
1992
+ return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${path.complete ? ` \xB7 ${path.complete}` : ""}${preview ? ` \xB7 ${preview}` : ""}${unreadCount ? ` \xB7 ${unreadCount} unread` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
1980
1993
  /* @__PURE__ */ jsx7(HarnessLogo, { id: row.harness, activity, size: 34 }),
1981
1994
  /* @__PURE__ */ jsxs6("span", { class: "scui-session-copy", children: [
1982
- /* @__PURE__ */ jsxs6("span", { children: [
1995
+ /* @__PURE__ */ jsxs6("span", { class: "scui-session-title", children: [
1983
1996
  /* @__PURE__ */ jsx7("strong", { children: title }),
1984
- /* @__PURE__ */ jsx7("small", { children: row.age })
1997
+ row.age ? /* @__PURE__ */ jsx7("time", { children: row.age }) : null
1985
1998
  ] }),
1986
- detail ? /* @__PURE__ */ jsx7("span", { children: /* @__PURE__ */ jsx7("small", { title: row.cwd, children: detail }) }) : null,
1999
+ path.complete ? /* @__PURE__ */ jsxs6("small", { class: "scui-session-path", title: row.cwd, children: [
2000
+ /* @__PURE__ */ jsx7("span", { class: "scui-session-path-leading", children: path.leading }),
2001
+ path.trailing ? /* @__PURE__ */ jsx7("span", { class: "scui-session-path-trailing", children: path.trailing }) : null
2002
+ ] }) : null,
2003
+ preview || unreadCount ? /* @__PURE__ */ jsxs6("span", { class: "scui-session-preview", children: [
2004
+ preview ? /* @__PURE__ */ jsx7("small", { children: preview }) : null,
2005
+ unreadCount ? /* @__PURE__ */ jsx7("b", { "aria-label": `${unreadCount} unread messages`, children: unreadLabel }) : null
2006
+ ] }) : null,
1987
2007
  state.attachError?.key === row.key ? /* @__PURE__ */ jsx7("em", { children: state.attachError.message }) : null
1988
2008
  ] })
1989
2009
  ] });
package/index.d.ts CHANGED
@@ -164,6 +164,8 @@ export interface SessionAttention {
164
164
  preview?: string;
165
165
  /** The canonical message count when this conversation was last seen. */
166
166
  afterMessages?: number;
167
+ /** Human-visible replies observed since this conversation was last read. */
168
+ unreadCount?: number;
167
169
  }
168
170
 
169
171
  export interface SupercodeUiState {
package/messenger.mjs CHANGED
@@ -667,7 +667,7 @@ function normalizeUiState(value) {
667
667
  savedDraft: string(raw.savedDraft),
668
668
  attention: Array.isArray(raw.attention) ? raw.attention.flatMap((candidate) => {
669
669
  const item = record(candidate);
670
- return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {} }] : [];
670
+ return item && typeof item.key === "string" && ["unseen", "finished", "failed"].includes(item.kind) ? [{ key: item.key, kind: item.kind, ...typeof item.preview === "string" ? { preview: item.preview } : {}, ...Number.isSafeInteger(item.afterMessages) && item.afterMessages >= 0 ? { afterMessages: item.afterMessages } : {}, ...Number.isSafeInteger(item.unreadCount) && item.unreadCount > 0 ? { unreadCount: item.unreadCount } : {} }] : [];
671
671
  }) : [],
672
672
  sessions: readSessions(raw.sessions),
673
673
  attached: readAttached(raw.attached),
@@ -1968,19 +1968,39 @@ function HarnessLogo({ id, activity, size = 28, onMissingLogo }) {
1968
1968
  import { useEffect as useEffect6, useLayoutEffect as useLayoutEffect3, useRef as useRef5, useState as useState4 } from "preact/hooks";
1969
1969
  import { jsx as jsx7, jsxs as jsxs6 } from "preact/jsx-runtime";
1970
1970
  var sessionListMemory = /* @__PURE__ */ new Map();
1971
+ function sessionPathParts(value) {
1972
+ const complete = String(value ?? "").replaceAll("\\", "/");
1973
+ const boundary = complete.lastIndexOf("/");
1974
+ if (boundary <= 0) return { complete, leading: complete, trailing: "" };
1975
+ return {
1976
+ complete,
1977
+ leading: complete.slice(0, boundary),
1978
+ trailing: complete.slice(boundary)
1979
+ };
1980
+ }
1971
1981
  function SessionRow({ row, state, onOpen }) {
1972
1982
  const activity = sessionActivity(state, row);
1973
- const attentionPreview = state.attention.find((item) => item.key === row.key)?.preview;
1983
+ const attention = state.attention.find((item) => item.key === row.key);
1974
1984
  const title = sessionDisplayName(row);
1975
- const detail = attentionPreview || row.preview || (row.name && row.name !== title ? row.name : row.cwd);
1976
- return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${detail ? ` \xB7 ${detail}` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
1985
+ const path = sessionPathParts(row.cwd);
1986
+ const preview = row.preview || attention?.preview || "";
1987
+ const unreadCount = attention?.unreadCount ?? 0;
1988
+ const unreadLabel = unreadCount > 99 ? "99+" : String(unreadCount);
1989
+ return /* @__PURE__ */ jsxs6("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${path.complete ? ` \xB7 ${path.complete}` : ""}${preview ? ` \xB7 ${preview}` : ""}${unreadCount ? ` \xB7 ${unreadCount} unread` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
1977
1990
  /* @__PURE__ */ jsx7(HarnessLogo, { id: row.harness, activity, size: 34 }),
1978
1991
  /* @__PURE__ */ jsxs6("span", { class: "scui-session-copy", children: [
1979
- /* @__PURE__ */ jsxs6("span", { children: [
1992
+ /* @__PURE__ */ jsxs6("span", { class: "scui-session-title", children: [
1980
1993
  /* @__PURE__ */ jsx7("strong", { children: title }),
1981
- /* @__PURE__ */ jsx7("small", { children: row.age })
1994
+ row.age ? /* @__PURE__ */ jsx7("time", { children: row.age }) : null
1982
1995
  ] }),
1983
- detail ? /* @__PURE__ */ jsx7("span", { children: /* @__PURE__ */ jsx7("small", { title: row.cwd, children: detail }) }) : null,
1996
+ path.complete ? /* @__PURE__ */ jsxs6("small", { class: "scui-session-path", title: row.cwd, children: [
1997
+ /* @__PURE__ */ jsx7("span", { class: "scui-session-path-leading", children: path.leading }),
1998
+ path.trailing ? /* @__PURE__ */ jsx7("span", { class: "scui-session-path-trailing", children: path.trailing }) : null
1999
+ ] }) : null,
2000
+ preview || unreadCount ? /* @__PURE__ */ jsxs6("span", { class: "scui-session-preview", children: [
2001
+ preview ? /* @__PURE__ */ jsx7("small", { children: preview }) : null,
2002
+ unreadCount ? /* @__PURE__ */ jsx7("b", { "aria-label": `${unreadCount} unread messages`, children: unreadLabel }) : null
2003
+ ] }) : null,
1984
2004
  state.attachError?.key === row.key ? /* @__PURE__ */ jsx7("em", { children: state.attachError.message }) : null
1985
2005
  ] })
1986
2006
  ] });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter-ai-dev/supercode-ui",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "type": "module",
5
5
  "description": "Composable default UI kit for Supercode-powered coding-agent experiences",
6
6
  "exports": {
package/sessions.mjs CHANGED
@@ -279,19 +279,39 @@ function HarnessLogo({ id, activity, size = 28, onMissingLogo }) {
279
279
  // src/sessions.jsx
280
280
  import { jsx as jsx6, jsxs as jsxs5 } from "preact/jsx-runtime";
281
281
  var sessionListMemory = /* @__PURE__ */ new Map();
282
+ function sessionPathParts(value) {
283
+ const complete = String(value ?? "").replaceAll("\\", "/");
284
+ const boundary = complete.lastIndexOf("/");
285
+ if (boundary <= 0) return { complete, leading: complete, trailing: "" };
286
+ return {
287
+ complete,
288
+ leading: complete.slice(0, boundary),
289
+ trailing: complete.slice(boundary)
290
+ };
291
+ }
282
292
  function SessionRow({ row, state, onOpen }) {
283
293
  const activity = sessionActivity(state, row);
284
- const attentionPreview = state.attention.find((item) => item.key === row.key)?.preview;
294
+ const attention = state.attention.find((item) => item.key === row.key);
285
295
  const title = sessionDisplayName(row);
286
- const detail = attentionPreview || row.preview || (row.name && row.name !== title ? row.name : row.cwd);
287
- return /* @__PURE__ */ jsxs5("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${detail ? ` \xB7 ${detail}` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
296
+ const path = sessionPathParts(row.cwd);
297
+ const preview = row.preview || attention?.preview || "";
298
+ const unreadCount = attention?.unreadCount ?? 0;
299
+ const unreadLabel = unreadCount > 99 ? "99+" : String(unreadCount);
300
+ return /* @__PURE__ */ jsxs5("button", { class: "scui-session", "data-active": row.active, "data-activity": activity, "data-session-key": row.key, type: "button", "aria-label": `${title} \xB7 ${harnessDisplayName(row.harness)}${path.complete ? ` \xB7 ${path.complete}` : ""}${preview ? ` \xB7 ${preview}` : ""}${unreadCount ? ` \xB7 ${unreadCount} unread` : ""}${row.age ? ` \xB7 ${row.age}` : ""}`, "aria-current": row.active ? "true" : void 0, onClick: () => onOpen(row), children: [
288
301
  /* @__PURE__ */ jsx6(HarnessLogo, { id: row.harness, activity, size: 34 }),
289
302
  /* @__PURE__ */ jsxs5("span", { class: "scui-session-copy", children: [
290
- /* @__PURE__ */ jsxs5("span", { children: [
303
+ /* @__PURE__ */ jsxs5("span", { class: "scui-session-title", children: [
291
304
  /* @__PURE__ */ jsx6("strong", { children: title }),
292
- /* @__PURE__ */ jsx6("small", { children: row.age })
305
+ row.age ? /* @__PURE__ */ jsx6("time", { children: row.age }) : null
293
306
  ] }),
294
- detail ? /* @__PURE__ */ jsx6("span", { children: /* @__PURE__ */ jsx6("small", { title: row.cwd, children: detail }) }) : null,
307
+ path.complete ? /* @__PURE__ */ jsxs5("small", { class: "scui-session-path", title: row.cwd, children: [
308
+ /* @__PURE__ */ jsx6("span", { class: "scui-session-path-leading", children: path.leading }),
309
+ path.trailing ? /* @__PURE__ */ jsx6("span", { class: "scui-session-path-trailing", children: path.trailing }) : null
310
+ ] }) : null,
311
+ preview || unreadCount ? /* @__PURE__ */ jsxs5("span", { class: "scui-session-preview", children: [
312
+ preview ? /* @__PURE__ */ jsx6("small", { children: preview }) : null,
313
+ unreadCount ? /* @__PURE__ */ jsx6("b", { "aria-label": `${unreadCount} unread messages`, children: unreadLabel }) : null
314
+ ] }) : null,
295
315
  state.attachError?.key === row.key ? /* @__PURE__ */ jsx6("em", { children: state.attachError.message }) : null
296
316
  ] })
297
317
  ] });
package/styles.css CHANGED
@@ -92,13 +92,15 @@
92
92
  .scui-search { display:flex; flex:none; align-items:center; gap:7px; margin:8px; padding:6px 8px; border:1px solid var(--scui-border); border-radius:8px; background:var(--scui-bg-raised); color:var(--scui-muted) }
93
93
  .scui-search input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:var(--scui-fg) }
94
94
  .scui-session-rows { flex:1; min-height:0; overflow:auto; padding:0 6px 8px }
95
- .scui-session { display:flex; align-items:center; gap:9px; width:100%; padding:7px 8px; border:0; border-radius:7px; background:transparent; text-align:left; cursor:pointer }
95
+ .scui-session { display:flex; align-items:flex-start; gap:9px; width:100%; padding:8px; border:0; border-radius:7px; background:transparent; text-align:left; cursor:pointer }
96
96
  .scui-session:hover,.scui-session[data-active="true"] { background:var(--scui-fill) }
97
- .scui-session-copy { display:grid; flex:1; min-width:0; gap:2px }
97
+ .scui-session-copy { display:grid; flex:1; min-width:0; gap:1px }
98
98
  .scui-session-copy > span { display:flex; align-items:baseline; gap:7px; min-width:0 }
99
99
  .scui-session-copy strong,.scui-session-copy span > small { overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
100
- .scui-session-copy strong { flex:1; font-size:12.5px }.scui-session-copy span:first-child > small { flex:none; color:var(--scui-muted); font-size:10px }
101
- .scui-session-copy span:last-child > small { min-width:0; overflow:hidden; color:var(--scui-muted); font-size:10.5px; text-overflow:ellipsis; white-space:nowrap }
100
+ .scui-session-copy strong { flex:1; font-size:12.5px }.scui-session-title time { flex:none; color:var(--scui-muted); font-size:10px }
101
+ .scui-session-path { display:flex; min-width:0; overflow:hidden; color:var(--scui-muted); font-size:9.5px; white-space:nowrap }
102
+ .scui-session-path-leading { flex:0 1 auto; overflow:hidden; text-overflow:ellipsis }.scui-session-path-trailing { flex:none; max-width:58%; overflow:hidden; direction:rtl; text-align:left; text-overflow:ellipsis; unicode-bidi:plaintext }
103
+ .scui-session-preview small { flex:1; min-width:0; color:var(--scui-muted); font-size:10.5px }.scui-session-preview b { display:grid; flex:none; min-width:16px; height:16px; padding:0 4px; place-items:center; border-radius:8px; background:var(--scui-accent); color:var(--scui-bg); font-size:9px; line-height:16px }
102
104
  .scui-session-copy em { overflow:hidden; color:var(--scui-danger); font-size:10px; font-style:normal; text-overflow:ellipsis; white-space:nowrap }
103
105
  .scui-load { display:block; margin:7px auto; padding:5px 10px; border:1px solid var(--scui-border); border-radius:8px; background:var(--scui-bg-raised); color:var(--scui-muted); cursor:pointer }.scui-load:disabled { opacity:.65; cursor:default }
104
106