diff --git a/ui/src/lib/panel/panel.css b/ui/src/lib/panel/panel.css
index 055249f..3787815 100644
--- a/ui/src/lib/panel/panel.css
+++ b/ui/src/lib/panel/panel.css
@@ -211,3 +211,54 @@
left: 1.125rem;
}
}
+
+/* Menus and selects: one quiet sheet, rows that stay inside it. Unlayered
+ on purpose - the generated components carry pill utilities of their own. */
+[data-slot="dropdown-menu-content"],
+[data-slot="context-menu-content"],
+[data-slot="select-content"] {
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ padding: 0.25rem;
+ background: var(--popover);
+ border: 1px solid var(--border);
+ border-radius: 0.625rem;
+ box-shadow: var(--shadow-float);
+}
+[data-slot="dropdown-menu-content"]::before,
+[data-slot="context-menu-content"]::before,
+[data-slot="select-content"]::before {
+ display: none;
+}
+[data-slot="dropdown-menu-item"],
+[data-slot="dropdown-menu-checkbox-item"],
+[data-slot="context-menu-item"],
+[data-slot="context-menu-checkbox-item"],
+[data-slot="select-item"] {
+ min-height: 1.75rem;
+ padding: 0.375rem 0.5rem;
+ font-weight: 400;
+ border-radius: 0.375rem;
+}
+[data-slot="select-item"] {
+ padding-right: 2rem;
+}
+[data-slot="dropdown-menu-checkbox-item"],
+[data-slot="context-menu-checkbox-item"] {
+ padding-right: 2rem;
+}
+[data-slot$="-item"]:focus,
+[data-slot$="-item"][data-highlighted] {
+ color: var(--accent-foreground);
+ background: var(--accent);
+}
+[data-slot$="-item"][data-variant="destructive"]:focus,
+[data-slot$="-item"][data-variant="destructive"][data-highlighted] {
+ color: var(--destructive);
+ background: color-mix(in oklab, var(--destructive) 12%, transparent);
+}
+[data-slot="dropdown-menu-separator"],
+[data-slot="context-menu-separator"] {
+ margin: 0.25rem -0.25rem;
+ background: var(--border);
+}
diff --git a/ui/src/lib/rail/days.ts b/ui/src/lib/rail/days.ts
index d6fc534..99f9a8a 100644
--- a/ui/src/lib/rail/days.ts
+++ b/ui/src/lib/rail/days.ts
@@ -136,7 +136,7 @@ export function daySummary(group: DayGroup, today: boolean): string {
parts.push(count(group.deep.length, "deep", "deep"));
}
if (group.forks.length) {
- parts.push(count(group.forks.length, "fork"));
+ parts.push(count(group.forks.length, "digest"));
}
if (group.jobs.length) {
parts.push(count(group.jobs.length, "job run"));
diff --git a/ui/src/lib/rail/rail.svelte b/ui/src/lib/rail/rail.svelte
index 0a1d5a0..16a4ae2 100644
--- a/ui/src/lib/rail/rail.svelte
+++ b/ui/src/lib/rail/rail.svelte
@@ -133,6 +133,22 @@
const refresh = () => index.load().catch(() => undefined);
+ // What the agent did on its own that day: digests and scheduled runs.
+ function quietSummary(group: DayGroup): string {
+ const parts: string[] = [];
+ if (group.forks.length) {
+ parts.push(
+ `${group.forks.length} ${group.forks.length === 1 ? "digest" : "digests"}`
+ );
+ }
+ if (group.jobs.length) {
+ parts.push(
+ `${group.jobs.length} ${group.jobs.length === 1 ? "job run" : "job runs"}`
+ );
+ }
+ return parts.join(" · ");
+ }
+
const linkOf = (id: string) => href?.(id);
@@ -294,7 +310,7 @@
{row}
/>
{/each}
- {#each [...group.forks, ...group.others] as row (row.id)}
+ {#each group.others as row (row.id)}
{/each}
- {#if group.jobs.length > 0}
- {@const shownJobs = jobsOpen.has(group.day)}
+ {#if group.forks.length + group.jobs.length > 0}
+ {@const shownQuiet = jobsOpen.has(group.day)}
- {#if shownJobs}
- {#each group.jobs as row (row.id)}
+ {#if shownQuiet}
+ {#each [...group.forks, ...group.jobs] as row (row.id)}
{fmtMoney(spend)}
- API-price equivalent
+ in API price
{/if}