Skip to content

Commit d0858b7

Browse files
abossardCopilot
andcommitted
feat: add Support Workflow canvas page with interactive editor
Purely browser-side workflow visualization using HTML Canvas: - 5 node types: Start, End, Action, Decision, Wait (each with distinct shape and color) - Drag-and-drop to reposition nodes - Shift+drag to create connections between nodes - Double-click to rename nodes inline - Animate button shows flowing dots along edges - Toolbar to add/delete nodes, reset to default workflow - Default workflow: Ticket Created → Auto-Classify → Priority decision → L1/L2 paths → Resolved decision → Close/Reopen - 9 Playwright E2E tests with screenshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e30e2fb commit d0858b7

3 files changed

Lines changed: 743 additions & 0 deletions

File tree

frontend/src/App.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
Bot24Regular,
2020
DataHistogram24Regular,
2121
DocumentEdit24Regular,
22+
Flow24Regular,
2223
Info24Regular,
2324
Pulse24Regular,
2425
Settings24Regular,
@@ -37,6 +38,7 @@ import KitchenSink from './features/kitchensink/KitchenSink'
3738
import AgentRunPage from './features/workbench/AgentRunPage'
3839
import KBADrafterPage from './features/kba-drafter/KBADrafterPage'
3940
import WorkbenchPage from './features/workbench/WorkbenchPage'
41+
import WorkflowPage from './features/workflow/WorkflowPage'
4042
import SettingsPage from './features/settings/SettingsPage'
4143
import useTabPreferences from './features/settings/useTabPreferences'
4244
import { listWorkbenchAgents } from './services/api'
@@ -119,6 +121,7 @@ export default function App() {
119121
{ value: 'workbench', label: 'Agent Fabric', icon: <Wrench24Regular />, defaultIconName: 'Wrench24Regular', path: '/workbench', testId: 'tab-workbench' },
120122
{ value: 'agent', label: 'Agent', icon: <Bot24Regular />, defaultIconName: 'Bot24Regular', path: '/agent', testId: 'tab-agent' },
121123
{ value: 'activity', label: 'Activity', icon: <Pulse24Regular />, defaultIconName: 'Pulse24Regular', path: '/activity', testId: 'tab-activity' },
124+
{ value: 'workflow', label: 'Support Workflow', icon: <Flow24Regular />, defaultIconName: 'Flow24Regular', path: '/workflow', testId: 'tab-workflow' },
122125
], [usecaseTabs.length, agentMenuTabs.length]) // eslint-disable-line react-hooks/exhaustive-deps
123126

124127
const settingsTab = { value: 'settings', label: 'Settings', icon: <Settings24Regular />, defaultIconName: 'Settings24Regular', path: '/settings', testId: 'tab-settings' }
@@ -185,6 +188,7 @@ export default function App() {
185188
))}
186189
<Route path="/agent" element={<AgentChat />} />
187190
<Route path="/activity" element={<ActivityPage />} />
191+
<Route path="/workflow" element={<WorkflowPage />} />
188192
<Route path="/settings" element={<SettingsPage tabPrefs={tabPrefs} />} />
189193
<Route path="*" element={<Navigate to="/csvtickets" replace />} />
190194
</Routes>

0 commit comments

Comments
 (0)