feat(designer-v2): Enable runtime connection expressions - #9609
Conversation
Add expression-based Standard connection selection in both designers with optional session-only design-time connections, safe input preservation, host capability gating, and regression coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
🤖 AI PR Validation ReportPR Review ResultsThank you for your submission! Here's detailed feedback on your PR title and body compliance:✅ PR Title
✅ Commit Type
✅ Risk Level
✅ What & Why
✅ Impact of Change
✅ Test Plan
✅ Contributors
✅ Screenshots/Videos
Summary Table
All checks pass. The declared Medium risk matches the advised estimate, required tests and screenshots are present, and the title/body are template-compliant. Good to merge.Powered by: Copilot CLI (claude-opus-4.8) | Last updated: Thu, 10 Sep 2026 18:42:17 GMT |
There was a problem hiding this comment.
🟡 Changes recommended
Both designers incorrectly mark some optional dynamic-schema inputs as required when no design-time connection is selected.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds runtime ServiceProvider connection expressions across both designer generations, including authoring UI, state handling, serialization, metadata safeguards, copy/paste, undo/redo, and host integration.
Changes:
- Adds expression-aware connection selection and optional design-time references.
- Preserves runtime expressions and dynamic inputs through serialization and editing flows.
- Adds host capability wiring, documentation, and regression tests.
File summaries
| File | Description |
|---|---|
libs/designer/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/identityselector.tsx |
Handles absent concrete references. |
libs/designer/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/connectionDisplay.tsx |
Displays runtime expressions and status. |
libs/designer/src/lib/ui/panel/connectionsPanel/selectConnection/selectConnection.tsx |
Integrates expression selection. |
libs/designer/src/lib/ui/panel/connectionsPanel/selectConnection/connectionExpression.tsx |
Adds the expression-authoring UI. |
libs/designer/src/lib/ui/panel/connectionsPanel/connectionsPanel.tsx |
Prevents inappropriate connection creation. |
libs/designer/src/lib/ui/panel/connectionsPanel/allConnections/allConnections.tsx |
Lists runtime-selected connections. |
libs/designer/src/lib/ui/panel/connectionsPanel/__test__/connectionsPanel.spec.tsx |
Tests panel selection behavior. |
libs/designer/src/lib/ui/mcp/parameters/parameterfield.tsx |
Safely resolves concrete MCP references. |
libs/designer/src/lib/ui/mcp/parameters/ParameterEditor.tsx |
Safely resolves editor references. |
libs/designer/src/lib/ui/mcp/panel/connector/usePanelTabs.tsx |
Excludes expression mappings from MCP references. |
libs/designer/src/lib/ui/mcp/hooks/connection.ts |
Validates concrete MCP mappings. |
libs/designer/src/lib/ui/mcp/connectors/ListConnectors.tsx |
Handles union connection mappings. |
libs/designer/src/lib/core/utils/parameters/helper.ts |
Suppresses unsupported dynamic requests. |
libs/designer/src/lib/core/utils/parameters/dynamicdata.ts |
Adds dynamic-connection invocation guards. |
libs/designer/src/lib/core/utils/middleware.ts |
Supports expression undo and parameter renaming. |
libs/designer/src/lib/core/utils/connectors/connections.ts |
Resolves optional design-time references. |
libs/designer/src/lib/core/utils/connectors/connectionExpression.ts |
Parses, validates, remaps, and serializes expressions. |
libs/designer/src/lib/core/utils/__test__/middleware.spec.ts |
Tests expression-aware history behavior. |
libs/designer/src/lib/core/state/undoRedo/undoRedoTypes.ts |
Registers new undoable operations. |
libs/designer/src/lib/core/state/operation/operationMetadataSlice.ts |
Stores preserved connection inputs. |
libs/designer/src/lib/core/state/mcp/selector.ts |
Ignores expression mappings in MCP grouping. |
libs/designer/src/lib/core/state/designerOptions/designerOptionsInterfaces.ts |
Defines the host capability. |
libs/designer/src/lib/core/state/connection/connectionSlice.ts |
Stores and remaps expression mappings. |
libs/designer/src/lib/core/state/connection/connectionSelector.ts |
Adds expression-aware selectors and copy data. |
libs/designer/src/lib/core/state/__test__/connectionSlice.spec.ts |
Tests exact ServiceProvider keys. |
libs/designer/src/lib/core/queries/connector.ts |
Preserves case-sensitive query keys. |
libs/designer/src/lib/core/queries/connections.ts |
Prevents expression resource requests. |
libs/designer/src/lib/core/mcp/utils/serializer.ts |
Serializes only concrete MCP references. |
libs/designer/src/lib/core/index.ts |
Exports expression APIs. |
libs/designer/src/lib/core/configuretemplate/utils/helper.ts |
Filters non-concrete template mappings. |
libs/designer/src/lib/core/actions/bjsworkflow/serializer.ts |
Serializes expressions and preserved inputs. |
libs/designer/src/lib/core/actions/bjsworkflow/operationdeserializer.ts |
Preserves imported expression inputs. |
libs/designer/src/lib/core/actions/bjsworkflow/initialize.ts |
Creates manual dynamic-schema inputs. |
libs/designer/src/lib/core/actions/bjsworkflow/copypaste.ts |
Preserves and remaps expressions on copy/paste. |
libs/designer/src/lib/core/actions/bjsworkflow/connections.ts |
Implements expression updates and metadata refresh. |
libs/designer/src/lib/common/models/workflow.ts |
Extends the connection-mapping model. |
libs/designer-v2/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/identityselector.tsx |
Handles absent concrete references. |
libs/designer-v2/src/lib/ui/panel/nodeDetailsPanel/tabs/parametersTab/connectionDisplay.tsx |
Displays runtime expressions and status. |
libs/designer-v2/src/lib/ui/panel/connectionsPanel/selectConnection/selectConnection.tsx |
Integrates expression selection. |
libs/designer-v2/src/lib/ui/panel/connectionsPanel/selectConnection/connectionExpression.tsx |
Adds the expression-authoring UI. |
libs/designer-v2/src/lib/ui/panel/connectionsPanel/connectionsPanel.tsx |
Gates automatic connection creation. |
libs/designer-v2/src/lib/ui/panel/connectionsPanel/allConnections/allConnections.tsx |
Lists runtime-selected connections. |
libs/designer-v2/src/lib/ui/panel/connectionsPanel/__test__/connectionsPanel.spec.tsx |
Tests panel and reentry behavior. |
libs/designer-v2/src/lib/ui/mcp/parameters/parameterfield.tsx |
Safely resolves concrete MCP references. |
libs/designer-v2/src/lib/ui/mcp/parameters/ParameterEditor.tsx |
Safely resolves editor references. |
libs/designer-v2/src/lib/ui/mcp/panel/connector/usePanelTabs.tsx |
Excludes expression mappings from MCP references. |
libs/designer-v2/src/lib/ui/mcp/connectors/ListConnectors.tsx |
Handles union connection mappings. |
libs/designer-v2/src/lib/core/utils/parameters/helper.ts |
Suppresses unsupported dynamic requests. |
libs/designer-v2/src/lib/core/utils/parameters/dynamicdata.ts |
Adds dynamic-connection invocation guards. |
libs/designer-v2/src/lib/core/utils/middleware.ts |
Supports expression undo and parameter renaming. |
libs/designer-v2/src/lib/core/utils/connectors/connections.ts |
Resolves optional design-time references. |
libs/designer-v2/src/lib/core/utils/connectors/connectionExpression.ts |
Implements expression utilities. |
libs/designer-v2/src/lib/core/utils/__test__/middleware.spec.ts |
Tests expression-aware history behavior. |
libs/designer-v2/src/lib/core/state/undoRedo/undoRedoTypes.ts |
Registers new undoable operations. |
libs/designer-v2/src/lib/core/state/operation/operationMetadataSlice.ts |
Preserves inputs and dynamic values. |
libs/designer-v2/src/lib/core/state/mcp/selector.ts |
Ignores expression mappings in MCP grouping. |
libs/designer-v2/src/lib/core/state/designerOptions/designerOptionsInterfaces.ts |
Defines the host capability. |
libs/designer-v2/src/lib/core/state/connection/connectionSlice.ts |
Stores and remaps expression mappings. |
libs/designer-v2/src/lib/core/state/connection/connectionSelector.ts |
Adds expression-aware selectors. |
libs/designer-v2/src/lib/core/state/__test__/connectionSlice.spec.ts |
Tests exact ServiceProvider keys. |
libs/designer-v2/src/lib/core/queries/connector.ts |
Preserves case-sensitive query keys. |
libs/designer-v2/src/lib/core/queries/connections.ts |
Prevents expression resource requests. |
libs/designer-v2/src/lib/core/mcp/utils/serializer.ts |
Serializes only concrete MCP references. |
libs/designer-v2/src/lib/core/index.ts |
Exports expression APIs. |
libs/designer-v2/src/lib/core/configuretemplate/utils/helper.ts |
Filters non-concrete template mappings. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/updateNodeFromCodeView.ts |
Synchronizes Code View mappings. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/serializer.ts |
Serializes expressions and preserved inputs. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/operationdeserializer.ts |
Preserves imported expression inputs. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/initialize.ts |
Creates manual dynamic-schema inputs. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/copypaste.ts |
Preserves and remaps expressions on copy/paste. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/connections.ts |
Implements expression updates and metadata refresh. |
libs/designer-v2/src/lib/core/actions/bjsworkflow/__test__/updateNodeFromCodeView.spec.ts |
Tests Code View mapping synchronization. |
libs/designer-v2/src/lib/common/models/workflow.ts |
Extends the connection-mapping model. |
libs/designer-ui/src/lib/editor/__test__/connection-expression-editor-helper.tsx |
Supports Lexical editor tests. |
apps/vs-code-react/src/app/designer/appV2.tsx |
Enables the V2 capability. |
apps/vs-code-react/src/app/designer/app.tsx |
Enables the V1 capability. |
apps/Standalone/src/designer/app/LocalDesigner/localDesignerV2.tsx |
Enables expressions for local Standard V2. |
apps/Standalone/src/designer/app/LocalDesigner/localDesigner.tsx |
Enables expressions for local Standard V1. |
apps/Standalone/src/designer/app/AzureLogicAppsDesigner/laDesignerV2.tsx |
Enables expressions in Standalone V2. |
apps/Standalone/src/designer/app/AzureLogicAppsDesigner/laDesigner.tsx |
Enables expressions in Standalone V1. |
apps/docs/docs/api-reference.md |
Documents runtime connection selection. |
Review details
- Files reviewed: 86/86 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
📊 Coverage CheckThe following changed files need attention:
Please add tests for the uncovered files before merging. |
Limit the feature to Designer V2 and remove host opt-in wiring. Preserve optional manual-input requiredness and relocate the Lexical test helper outside production coverage instrumentation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Exercise concrete, runtime-expression, and missing connection mappings through MCP selectors, connector panels, and parameter editors. Cover all five previously untested MCP paths without changing production behavior or coverage policy. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Commit Type
Risk Level
What & Why
Add runtime connection selection to Change connection in Designer V2, following Dynamic connection properties in Azure Logic Apps Standard.
The feature is enabled by default for Standard ServiceProvider actions. There is no host option or opt-in wiring. Designer V1 and the host applications are unchanged.
Users can author an expression in
inputs.serviceProviderConfiguration.connectionNameand optionally select a concrete connection for design-time browsing/schema discovery. The design-time reference is session-only: it never replaces the runtime expression, becomes a runtime fallback, or gets serialized into the workflow.Without a design-time reference, declared dynamic-schema inputs remain manually editable, and unresolved runtime expressions are not sent to connection-dependent metadata APIs. Edited values and removed properties survive import/save and transitions between manual inputs and expanded schemas. Optional root inputs remain optional even when their schemas require child properties. Existing ServiceProvider connection targets and their exact, case-sensitive keys are preserved.
Includes expression validation and tokens, connection status/list presentation, copy/paste and reference remapping, undo/redo, Code View handling, localization, documentation, and regression coverage. The outer connection panel preserves expression selection instead of forcing connection creation when no concrete connections are returned. The shared test-only Lexical helper lives outside production source instrumentation, while remaining in the editor package for correct dependency resolution.
Impact of Change
Test Plan
Unit tests added/updated
E2E tests added/updated
Manual testing completed
Tested in: Windows local Designer V2 validation; Chromium Standalone V2 with browser-only mocked SQL ServiceProvider metadata and connection references (no live Azure resource execution).
Final V2 behavior: 145 tests passed across 6 related suites, including default-on authoring with ordinary host options, supported stateful/stateless actions, restricted contexts, empty connection lists, optional-root requiredness, manual/schema transitions, and Code View.
Coverage-enabled follow-up: 121 tests passed across 3 core/UI suites with Istanbul enabled (overlaps the selection above). Designer V2 TypeScript checking passes.
Added 79 MCP regressions across 5 suites for concrete, expression, null, missing, and dangling mappings; connector status/edit/delete; panel submission/navigation; dynamic loaders; and parameter value/input-type changes. The combined Istanbul run and report generation succeed. All five previously uncovered MCP source files have 100% whole-file line coverage in this targeted run. No production behavior or coverage policy was changed by this test-only follow-up.
Designer UI coverage instrumentation also completed using its existing parser suite (21 tests passed); the relocated helper no longer breaks instrumentation. Coverage thresholds and production-source coverage policy are unchanged.
Verified V1 and all six previously modified host files exactly match the pre-feature baseline, and no references to the removed host option remain in source or documentation.
Browser smoke from initial V2 implementation: imported a runtime expression, opened Change connection with no concrete connections returned, confirmed invalid escaped input disables Apply, applied a valid expression, and verified serialization retains the expression and query inputs. The screenshot below shows this same V2 UI.
CI on production-code commit
588c9b41dpassed the Node 20/22/24 build/test matrix and all Designer, Chat, and VS Code E2E jobs. Its five uncovered-file blockers are addressed by the MCP test-only follow-up. Refer to the PR checks and coverage report for the latest full-run results; existing partial whole-file coverage warnings are not claims of a measured coverage regression. Live Logic Apps runtime execution has not been performed.Contributors
Riley Evans (@rllyy97), with implementation and regression assistance from GitHub Copilot.
Screenshots/Videos