From c420f018f4027a37bc0a19d2e8c4e6818f586028 Mon Sep 17 00:00:00 2001
From: Victor Giers
Date: Mon, 15 Jun 2026 20:26:48 +0200
Subject: [PATCH] Feat: Add workflow selection mode setting (Auto/Manual)
---
src/GeneralSettings.jsx | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/GeneralSettings.jsx b/src/GeneralSettings.jsx
index 5237457..ae41cfd 100644
--- a/src/GeneralSettings.jsx
+++ b/src/GeneralSettings.jsx
@@ -16,6 +16,7 @@ const MODEL_KEY = 'chatModel';
const VISION_MODEL_KEY = 'visionModel';
const TRANSCRIPTION_MODEL_KEY = 'transcriptionModel';
const WORKFLOW_ROUTER_MODEL_KEY = 'workflowRouterModel';
+const WORKFLOW_SELECTION_MODE_KEY = 'workflowSelectionMode';
const AUTO_DEEP_ENRICHMENT_KEY = 'autoDeepEnrichment';
const DEFAULT_AUDIO_INPUT_DEVICE_ID = '';
const DEFAULT_AUDIO_INPUT_LANGUAGE = '';
@@ -76,6 +77,7 @@ export default function GeneralSettings({
onModelChange,
onVisionModelChange,
onWorkflowRouterModelChange,
+ onWorkflowSelectionModeChange,
onTranscriptionModelChange,
onLibrariesPurged,
onAudioInputDeviceChange,
@@ -94,6 +96,7 @@ export default function GeneralSettings({
const [visionModel, setVisionModel] = useState('');
const [transcriptionModel, setTranscriptionModel] = useState(DEFAULT_TRANSCRIPTION_MODEL);
const [workflowRouterModel, setWorkflowRouterModel] = useState('');
+ const [workflowSelectionMode, setWorkflowSelectionMode] = useState('auto');
const [autoDeepEnrichment, setAutoDeepEnrichment] = useState(true);
const [audioInputDeviceId, setAudioInputDeviceId] = useState(DEFAULT_AUDIO_INPUT_DEVICE_ID);
const [audioInputLanguage, setAudioInputLanguage] = useState(DEFAULT_AUDIO_INPUT_LANGUAGE);
@@ -133,6 +136,7 @@ export default function GeneralSettings({
setVisionModel(settings.visionModel || settings.chatModel || '');
setTranscriptionModel(settings.transcriptionModel || DEFAULT_TRANSCRIPTION_MODEL);
setWorkflowRouterModel(settings.workflowRouterModel || '');
+ setWorkflowSelectionMode(settings.workflowSelectionMode === 'manual' ? 'manual' : 'auto');
setAutoDeepEnrichment(settings.autoDeepEnrichment !== false);
setAudioInputDeviceId(
typeof settings.audioInputDeviceId === 'string'
@@ -430,6 +434,13 @@ export default function GeneralSettings({
onWorkflowRouterModelChange?.(nextModel);
};
+ const handleWorkflowSelectionModeChange = (event) => {
+ const nextMode = event.target.value === 'manual' ? 'manual' : 'auto';
+ setWorkflowSelectionMode(nextMode);
+ desktopApi.setSetting(WORKFLOW_SELECTION_MODE_KEY, nextMode);
+ onWorkflowSelectionModeChange?.(nextMode);
+ };
+
const handleAutoDeepEnrichmentToggle = () => {
const nextValue = !autoDeepEnrichment;
setAutoDeepEnrichment(nextValue);
@@ -635,6 +646,16 @@ export default function GeneralSettings({
Heimgeist uses this model for normal text chat.
+
+
Workflow Selection
+
+
+ Auto lets Heimgeist route each chat prompt from the enabled chat capabilities. Manual shows the Flow selector in the chat bar.
+
+
Workflow Router Model