+ {automations.length > 0 ? (
+
+ Automation
+ Next
+
+ ) : null}
{automations.map((automation) => {
const automationRepo = repoMap.get(automation.projectId)
const automationWorktree = automation.workspaceId
@@ -742,7 +832,7 @@ export default function AutomationsPage(): React.JSX.Element {
: null
const workspaceLabel =
automation.workspaceMode === 'new_per_run'
- ? 'New workspace each run'
+ ? `Create from ${automation.baseBranch ?? automationRepo?.worktreeBaseRef ?? 'project default'}`
: (automationWorktree?.displayName ?? 'Missing workspace')
const usageSummary = summarizeAutomationRunUsage(
runs.filter((run) => run.automationId === automation.id)
@@ -755,6 +845,9 @@ export default function AutomationsPage(): React.JSX.Element {
: usageSummary.unavailableRuns > 0
? 'Usage unavailable'
: 'No run usage yet'
+ const nextRunLabel = automation.enabled
+ ? formatAutomationDateTimeWithRelative(automation.nextRunAt, relativeNow)
+ : 'Paused'
return (
@@ -762,35 +855,50 @@ export default function AutomationsPage(): React.JSX.Element {
type="button"
onClick={() => setSelectedId(automation.id)}
className={cn(
- 'mb-1 flex w-full flex-col gap-1 rounded-md border px-3 py-2 text-left text-sm transition-colors',
+ 'mb-1 grid w-full grid-cols-[minmax(0,1fr)_auto] gap-3 rounded-md border px-3 py-2 text-left text-sm transition-colors',
selected?.id === automation.id
? 'border-foreground/30 bg-muted/70 text-foreground shadow-sm'
: 'border-transparent hover:bg-muted/50'
)}
>
- {automation.name}
-
- {automationRepo ? (
-
+
+
- ) : (
- Unknown project
- )}
- /
- {workspaceLabel}
+ {automation.name}
+
+
+ {automationRepo ? (
+
+ ) : (
+ Unknown project
+ )}
+ /
+ {workspaceLabel}
+
+
+
+ {formatAutomationSchedule(automation.rrule)}
+
+ ยท
+ {getAgentLabel(automation.agentId)}
+
+
+ {usageText}
+
-
- {automation.enabled
- ? `Next run ${formatAutomationDateTimeWithRelative(
- automation.nextRunAt,
- relativeNow
- )}`
- : 'Paused'}
+
+
+ {nextRunLabel}
- {usageText}
@@ -823,7 +931,34 @@ export default function AutomationsPage(): React.JSX.Element {
)
})}
{automations.length === 0 ? (
- No automations yet.
+
+
Start from a template
+ {AUTOMATION_TEMPLATES.map((template) => (
+
+ ))}
+
+
) : null}