From f72585ce77bf5026631cf1262ebec51ec6fd45bf Mon Sep 17 00:00:00 2001 From: ddonaldson130 Date: Mon, 6 Jul 2026 22:03:08 -0400 Subject: [PATCH] feat(dashboard): expose build timeout & insight extraction in settings UI Both settings already exist in the Settings schema and are honored by the engine, but neither had a control in the dashboard, so users could only change them by hand-editing config.json while the app was closed (the running app rewrites config.json from its DB, clobbering live file edits). - Add 'Build/Verification Timeout (minutes)' to the Scheduling section, next to the existing stuck-task timeout (same minutes<->ms conversion). - Add 'Enable Insight Extraction' + cron schedule to the Memory section, next to the existing auto-summarize controls. Both are placed in their existing project-scoped sections. Follow-up: a global-defaults counterpart could be added if maintainers want these settable at the user/global level too. --- .../components/settings/sections/MemorySection.tsx | 13 +++++++++++++ .../settings/sections/SchedulingSection.tsx | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/dashboard/app/components/settings/sections/MemorySection.tsx b/packages/dashboard/app/components/settings/sections/MemorySection.tsx index bb95f708fd..460b1d0851 100644 --- a/packages/dashboard/app/components/settings/sections/MemorySection.tsx +++ b/packages/dashboard/app/components/settings/sections/MemorySection.tsx @@ -112,6 +112,19 @@ export function MemorySection({ scopeBanner, form, setForm, memory }: MemorySect )} +
+ + {t("settings.memory.periodicallyExtractDurableInsightsFromCompletedTasks", "Periodically extract durable insights/learnings from completed tasks into memory")} +
+ + {(form.insightExtractionEnabled || false) && ( +
+ + setForm((f) => ({ ...f, insightExtractionSchedule: e.target.value }))} placeholder={t("settings.memory.02", "0 2 * * *")}/> + {t("settings.memory.cronExpressionForInsightExtractionScheduleDefaultDaily", "Cron expression for insight extraction schedule (default: daily at 2 AM)")} +
)} +
diff --git a/packages/dashboard/app/components/settings/sections/SchedulingSection.tsx b/packages/dashboard/app/components/settings/sections/SchedulingSection.tsx index 48821f433d..ba165300d4 100644 --- a/packages/dashboard/app/components/settings/sections/SchedulingSection.tsx +++ b/packages/dashboard/app/components/settings/sections/SchedulingSection.tsx @@ -106,6 +106,15 @@ export function SchedulingSection({ scopeBanner, form, setForm, globalMaxConcurr }}/> {t("settings.scheduling.timeoutInMinutesForDetectingStuckTasksWhen", "Timeout in minutes for detecting stuck tasks. When a task's agent session shows no activity for longer than this duration, the task is terminated and retried. Leave empty to disable. Suggested: 10.")}
+
+ + { + const val = e.target.value; + const num = Number(val); + setForm((f) => ({ ...f, buildTimeoutMs: val && num > 0 ? num * 60000 : undefined })); + }}/> + {t("settings.scheduling.maximumTimeInMinutesForBuildVerificationCommands", "Maximum time in minutes for build/verification commands before they are killed. Raise for large monorepo or Docker builds. Default: 5.")} +
{