feat: add code-executor, function-executor, request-port inspectors and enhanced workflow settings

- Create CodeExecutorInspector with implementation directive editor,
  input/output type fields, and directive help callout
- Create FunctionExecutorInspector with built-in function selector
  and key-value parameter editor
- Create RequestPortInspector with port ID, request/response type
  fields, prompt editor, and info callout
- Wire all three inspectors into WorkflowGraphInspector routing,
  keeping PlaceholderNodeInspector as fallback for unknown kinds
- Enhance WorkflowSettingsPanel with OpenTelemetry and sensitive
  data filtering toggles, and a state scopes editor with initial
  values support

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-04-05 20:36:39 +02:00
co-authored by Copilot
parent 69ac454f29
commit f05ec8ac7f
5 changed files with 798 additions and 1 deletions
@@ -17,7 +17,10 @@ import type {
AgentNodeConfig,
} from '@shared/domain/workflow';
import { ModelSelect, ReasoningEffortSelect } from '@renderer/components/AgentConfigFields';
import { CodeExecutorInspector } from '@renderer/components/workflow/CodeExecutorInspector';
import { ConditionEditor } from '@renderer/components/workflow/ConditionEditor';
import { FunctionExecutorInspector } from '@renderer/components/workflow/FunctionExecutorInspector';
import { RequestPortInspector } from '@renderer/components/workflow/RequestPortInspector';
import { SubWorkflowInspector } from '@renderer/components/workflow/SubWorkflowInspector';
interface WorkflowGraphInspectorProps {
@@ -457,6 +460,49 @@ export function WorkflowGraphInspector({
);
}
if (selectedNode.kind === 'code-executor') {
return (
<div className="p-4">
<CodeExecutorInspector
node={selectedNode}
validationIssues={validationIssues}
onNodeChange={onNodeChange}
onNodeConfigChange={onNodeConfigChange}
onNodeRemove={onNodeRemove}
/>
</div>
);
}
if (selectedNode.kind === 'function-executor') {
return (
<div className="p-4">
<FunctionExecutorInspector
node={selectedNode}
validationIssues={validationIssues}
onNodeChange={onNodeChange}
onNodeConfigChange={onNodeConfigChange}
onNodeRemove={onNodeRemove}
/>
</div>
);
}
if (selectedNode.kind === 'request-port') {
return (
<div className="p-4">
<RequestPortInspector
node={selectedNode}
validationIssues={validationIssues}
onNodeChange={onNodeChange}
onNodeConfigChange={onNodeConfigChange}
onNodeRemove={onNodeRemove}
/>
</div>
);
}
// Fallback for any future unknown node kinds
return (
<div className="p-4">
<PlaceholderNodeInspector