diff --git a/src/App.jsx b/src/App.jsx
index 03cca4e..a2d3405 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1407,6 +1407,12 @@ async function createNewChat() {
>
DBs
+
handleSidebarClick('workflows')}
+ >
+ Flows
+
handleSidebarClick('settings')}
@@ -1508,8 +1514,11 @@ async function createNewChat() {
onSelect={setActiveSettingsSubmenu}
/>
)}
+ {activeSidebarMode === 'workflows' && (
+
Create, validate, and test native workflows in the editor.
+ )}
- {activeSidebarMode !== 'settings' && (
+ {(activeSidebarMode === 'chats' || activeSidebarMode === 'dbs') && (
{activeSidebarMode === 'chats' && (
@@ -1590,6 +1599,11 @@ async function createNewChat() {
{`DB: ${chatLibrary.name}${chatLibraryStatusSuffix}`}
)}
+
+ {chatWorkflowSelection.mode === 'automatic'
+ ? 'Flow: Automatic'
+ : `Flow: ${selectedWorkflow?.name || 'Direct'}`}
+
@@ -1643,6 +1657,7 @@ async function createNewChat() {
ref={chatRef}
onClick={handleChatFrameClick}
>
+
{messages.map((m, i) => {
const isEditingThis = m.role === 'user' && editingMessageIndex === i;
return (
@@ -1817,6 +1832,12 @@ async function createNewChat() {
isLibrarySyncing={isLibrarySyncing}
libraries={libraries}
setChatLibraryForSession={setChatLibraryForSession}
+ />
+
setChatWorkflowForSession(activeSessionId, nextSelection)}
/>
)}
+ {activeSidebarMode === 'workflows' && (
+
+ )}
{knowledgeSaveTarget && (
)}
{knowledgeSaveToast &&
{knowledgeSaveToast}
}
+
{
+ const confirmation = pendingWorkflowConfirmation
+ if (!confirmation) return
+ try {
+ await respondToConfirmation(
+ backendApiUrl,
+ confirmation.run_id,
+ confirmation.payload?.confirmation_id,
+ approved,
+ )
+ setPendingWorkflowConfirmation(null)
+ setWorkflowExecutions(previous => ({
+ ...previous,
+ [confirmation.sessionId]: {
+ ...(previous[confirmation.sessionId] || {}),
+ status: 'running',
+ },
+ }))
+ } catch (error) {
+ window.alert(error.message)
+ }
+ }}
+ />
)