From c1c22e02c133b41f66aecf346992bcf520b6e0c6 Mon Sep 17 00:00:00 2001 From: Jacobcdsmith <88069592+Jacobcdsmith@users.noreply.github.com> Date: Sat, 8 Aug 2026 14:55:40 +0000 Subject: [PATCH] feat: implement fully functional recursive subagent node execution, UI inspector dropdown configuration, nested collapsible logs rendering, and codegen sub-workflow documentation. Also add comprehensive unit tests. --- frontend/src/flow/Inspector.tsx | 35 +++- frontend/src/flow/codegen.ts | 45 +++- frontend/src/flow/runFlow.ts | 70 ++++++- frontend/src/pages/Index.tsx | 205 +++++++++++++------ frontend/src/test/subagentRecursion.test.tsx | 190 +++++++++++++++++ server.log | 2 +- 6 files changed, 477 insertions(+), 70 deletions(-) create mode 100644 frontend/src/test/subagentRecursion.test.tsx diff --git a/frontend/src/flow/Inspector.tsx b/frontend/src/flow/Inspector.tsx index 69ab6ab..aedec0d 100644 --- a/frontend/src/flow/Inspector.tsx +++ b/frontend/src/flow/Inspector.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { Edge, Node } from "reactflow"; import { AgentNodeData, NODE_TYPES } from "./types"; import type { Gateway } from "./gateways"; +import { TEMPLATES, Workflow } from "./workflows"; interface Props { node: Node | null; @@ -10,9 +11,20 @@ interface Props { gateways?: Gateway[]; onChange: (id: string, data: Partial) => void; onDelete: (id: string) => void; + activeWorkflowId?: string | null; + workflows?: Workflow[]; } -export function Inspector({ node, edges, nodes, gateways = [], onChange, onDelete }: Props) { +export function Inspector({ + node, + edges, + nodes, + gateways = [], + onChange, + onDelete, + activeWorkflowId = null, + workflows = [], +}: Props) { const [confirming, setConfirming] = useState(false); if (!node) { @@ -48,7 +60,26 @@ export function Inspector({ node, edges, nodes, gateways = [], onChange, onDelet {meta.configFields.map((f) => (