Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
e846790
feat: deployment page list
viktoravelino Mar 20, 2026
5c3419f
feat: add deployment stepper modal with context-based state management
viktoravelino Mar 20, 2026
70e8891
feat: replace mock flows and versions with real API data in deploymen…
viktoravelino Mar 20, 2026
b5bf760
refactor: improve deployment stepper code quality and conventions
viktoravelino Mar 20, 2026
fa65206
refactor: align deployment provider types and UI to backend contracts
viktoravelino Mar 24, 2026
4d1795d
feat: add react-query hooks for deployments and provider accounts wit…
viktoravelino Mar 24, 2026
d247a71
chore: remove stale biome-ignore suppression in step-attach-flows
viktoravelino Mar 24, 2026
644a048
fix: replace button role=radio with semantic input type=radio in Prov…
viktoravelino Mar 24, 2026
e224545
fix: replace button role=radio with semantic radio inputs across depl…
viktoravelino Mar 24, 2026
186f9ef
Merge branch 'release-1.9.0' of github.com:langflow-ai/langflow into …
viktoravelino Mar 24, 2026
bc7e3be
Merge branch 'release-1.9.0' of github.com:langflow-ai/langflow into …
viktoravelino Mar 27, 2026
b84f135
feat: add name field to provider accounts, multi-select connections, …
viktoravelino Mar 27, 2026
0dedcec
feat: wire deploy button and populate deployments page with real API …
viktoravelino Mar 27, 2026
f4a70a0
refactor: extract DeploymentsContent component to eliminate nested te…
viktoravelino Mar 30, 2026
6243067
Merge branch 'release-1.9.0' into wxo-fe
viktoravelino Mar 30, 2026
09dc3f3
Merge branch 'wxo-fe' of github.com:langflow-ai/langflow into wxo-fe
viktoravelino Mar 30, 2026
34f7d66
feat: add Test Deployment chat modal for deployed agents
viktoravelino Mar 30, 2026
423e3b4
feat: add syntax highlighting to chat code blocks using SimplifiedCod…
viktoravelino Mar 30, 2026
3832d9f
feat: add action menu and icon-based type badge to deployments table
viktoravelino Mar 30, 2026
b8a8fb8
refactor: remove connected status from provider card in stepper
viktoravelino Mar 30, 2026
b847077
feat: auto-detect flow env vars in deployment connection form
viktoravelino Mar 30, 2026
dc5042e
feat: add empty state and smart default tab for available connections
viktoravelino Mar 30, 2026
d2928b3
feat: redesign review step with two-column layout and env vars section
viktoravelino Mar 30, 2026
35735ae
feat: integrate delete deployment with loading state and fix test mod…
viktoravelino Mar 30, 2026
220a404
refactor: address PR review concerns for deployment UI
viktoravelino Mar 30, 2026
6e74e1b
refactor: apply React best practices and remove mock data from deploy…
viktoravelino Mar 30, 2026
b7c92c3
feat: add Deploy button to canvas toolbar
viktoravelino Mar 30, 2026
607c36a
chore: disable ENABLE_DEPLOYMENTS feature flag
viktoravelino Mar 30, 2026
c1e6237
Merge branch 'release-1.9.0' of github.com:langflow-ai/langflow into …
viktoravelino Mar 31, 2026
b15a1c1
fix: forward LANGFLOW_FEATURE_WXO_DEPLOYMENTS env var to frontend
viktoravelino Mar 31, 2026
3f86c2f
feat: implement providers tab with environment list
viktoravelino Mar 31, 2026
b8f97d7
feat: add provider creation modal with tab-aware action button
viktoravelino Mar 31, 2026
a7a2416
feat: implement provider account deletion with confirmation modal
viktoravelino Mar 31, 2026
8c98754
fix: correct provider_key to watsonx-orchestrate and add API key visi…
viktoravelino Mar 31, 2026
83cfa27
feat: navigate to deployments tab and open test modal after canvas de…
viktoravelino Mar 31, 2026
4430cbf
Merge remote-tracking branch 'origin/release-1.9.0' into wxo-fe
jordanrfrazier Apr 1, 2026
6057035
Add llm config to deployment creation workflow
jordanrfrazier Apr 1, 2026
45ed123
[autofix.ci] apply automated fixes
autofix-ci[bot] Apr 1, 2026
6e616ed
Merge branch 'wxo-fe' of github.com:langflow-ai/langflow into wxo-fe
viktoravelino Apr 1, 2026
6e2d2c1
feat: add useGetDeploymentLlms query hook
viktoravelino Apr 1, 2026
3e5a87b
Create provider env inline of step
jordanrfrazier Apr 1, 2026
4a1caca
feat: add extensibility for wxo tools in deployments api (#12425)
HzaRashid Apr 1, 2026
996984a
feat: allow attaching flows without connections in deployment stepper
viktoravelino Apr 1, 2026
c6453c2
feat: show attached connections per flow in deployment stepper
viktoravelino Apr 1, 2026
6d4c779
remove unused enriched flow version data. to be replaced by a new end…
HzaRashid Apr 1, 2026
72d84ab
Allow nonraw env vars wxo (#12435)
jordanrfrazier Apr 1, 2026
bb4778a
feat: add update existing deployment from canvas deploy button (#12440)
viktoravelino Apr 2, 2026
effcab8
feat: reorder model field and add scrollable dropdown in deploy wizar…
viktoravelino Apr 2, 2026
61a930a
feat(deployments): add paginated deployment flow-version listing (#12…
HzaRashid Apr 2, 2026
0926d32
ref: remove resource name prefix (#12459)
jordanrfrazier Apr 2, 2026
462bd66
feat: wxo custom tool naming (#12460)
jordanrfrazier Apr 2, 2026
35a6e89
feat(deployments): derive connection ID from user-provided name
viktoravelino Apr 2, 2026
88c919b
feat(deployments): prevent duplicate connection names
viktoravelino Apr 2, 2026
4580cef
refactor(deployments): extract page logic into custom hooks and self-…
viktoravelino Apr 2, 2026
6e1f168
fix(deployments): forward thread_id through WxO execution lifecycle
viktoravelino Apr 2, 2026
bf8c39e
fix(deployments): extract WxO tool call traces from actual step_histo…
viktoravelino Apr 2, 2026
6a6b751
feat(deployments): refactor WXO deployment schemas and create respons…
HzaRashid Apr 2, 2026
1799284
feat: add update agent impl (#12475)
jordanrfrazier Apr 2, 2026
03d8d4e
feat: add list all conns impl for wxo create deploy workflow (#12476)
jordanrfrazier Apr 3, 2026
d050f62
feat(deployments): improve attach flow step UX in deploy modal (#12482)
viktoravelino Apr 3, 2026
1f5879b
feat(deployments): add expandable rows to show attached flows (#12483)
viktoravelino Apr 3, 2026
40f3f82
feat(deployments): replace Duplicate with Details modal (#12492)
viktoravelino Apr 3, 2026
060a304
Add wxo lfx req override
jordanrfrazier Apr 4, 2026
220d9bb
feat(wxo): tool name handling, rename support, and ownership safety (…
jordanrfrazier Apr 5, 2026
2203a99
refactor(deployments): Revise v1 deployments API (#12478)
HzaRashid Apr 6, 2026
6d7715b
fix: follow deployment boundary rules and fail fast (wxo) (#12539)
HzaRashid Apr 7, 2026
2692259
feat(deployments): type-to-confirm dialog for deployment deletion (#1…
viktoravelino Apr 7, 2026
237203c
test(deployments): add comprehensive frontend test suite for WXO depl…
viktoravelino Apr 7, 2026
682d0f2
chore: trigger CI
viktoravelino Apr 7, 2026
5797971
fix(deployments): remove unused description field from connection pan…
viktoravelino Apr 7, 2026
111c604
fix(deployments): enforce single-environment filter on deployments pa…
viktoravelino Apr 7, 2026
85e2c79
Merge remote-tracking branch 'origin/release-1.9.0' into wxo-fe
jordanrfrazier Apr 7, 2026
e174821
be test
jordanrfrazier Apr 7, 2026
9284517
be test
jordanrfrazier Apr 8, 2026
7271ff0
Merge branch 'release-1.9.0' into wxo-fe
HzaRashid Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/typescript_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ env:
# This path is used for caching across workflows
PLAYWRIGHT_BROWSERS_PATH: "ms-playwright"
PLAYWRIGHT_VERSION: "1.57.0"
LANGFLOW_FEATURE_WXO_DEPLOYMENTS: "true"

jobs:
determine-test-suite:
Expand Down
12 changes: 2 additions & 10 deletions .secrets.baseline
Original file line number Diff line number Diff line change
Expand Up @@ -2888,20 +2888,12 @@
}
],
"src/backend/tests/unit/api/v1/test_deployment_schemas.py": [
{
"type": "Secret Keyword",
"filename": "src/backend/tests/unit/api/v1/test_deployment_schemas.py",
"hashed_secret": "99091d046a81493ef2545d8c3cd8e881e8702893",
"is_verified": false,
"line_number": 49,
"is_secret": false
},
{
"type": "Secret Keyword",
"filename": "src/backend/tests/unit/api/v1/test_deployment_schemas.py",
"hashed_secret": "a62f2225bf70bfaccbc7f1ef2a397836717377de",
"is_verified": false,
"line_number": 71,
"line_number": 68,
"is_secret": false
}
],
Expand Down Expand Up @@ -7315,5 +7307,5 @@
}
]
},
"generated_at": "2026-04-03T04:00:10Z"
"generated_at": "2026-04-06T16:25:47Z"
}
474 changes: 348 additions & 126 deletions src/backend/base/langflow/api/v1/deployments.py

Large diffs are not rendered by default.

17 changes: 15 additions & 2 deletions src/backend/base/langflow/api/v1/mappers/deployments/RULES.md
Original file line number Diff line number Diff line change
Expand Up @@ -299,13 +299,14 @@ The mapper is the **single** component that understands a provider's credential
**Update assembly (API → DB):**

- The mapper's `resolve_provider_account_update(payload=..., existing_account=...)` assembles the complete update kwargs dict. Only fields present in `payload.model_fields_set` are included so the CRUD layer receives a minimal diff.
- Provider mappers override this method to add cross-field logic. For example, WXO's override re-derives `provider_tenant_id` whenever `provider_url` changes, because the tenant is embedded in the URL path and the two must stay consistent.
- The base mapper provides a concrete default that handles name, URL, credentials, and tenant independently. Provider overrides call `super()` for the common fields and only add their own cross-field rules.
- Provider mappers override this method to add provider-specific update logic. Provider-account updates currently allow changing display name and credentials only; URL/tenant identifiers must remain immutable after create.
- The base mapper provides a concrete default that handles common mutable fields (display name + credentials). Provider overrides call `super()` for the common fields and only add their own cross-field rules.

**Defense-in-depth (DB model validator):**

- The `DeploymentProviderAccount` model has a `model_validator` that calls `validate_tenant_url_consistency()`. This catches inconsistent tenant/URL pairs regardless of entry point — even if a future code path bypasses the mapper.
- The validation logic lives in `deployment_provider_account/utils.py` as the single source of truth. Both the model validator and the WXO mapper's `resolve_provider_tenant_id` delegate to the same `extract_tenant_from_url()` function.
- Provider metadata such as tenant/account identifiers should arrive via `provider_data`; mappers extract and normalize them before persistence.

---

Expand Down Expand Up @@ -411,6 +412,7 @@ Use this checklist before merge:
- [ ] Provider-account update logic lives in mapper, not in route conditionals
- [ ] Provider-specific cross-field rules (e.g. tenant/URL coupling) are implemented as mapper overrides calling `super()`, not as base-class conditionals
- [ ] Credential extraction uses `resolve_credential_fields`, not route-level assumptions about `provider_data` contents
- [ ] Non-persisted provider-originated fields are placed in `provider_data` (never top-level)
- [ ] DB-level consistency validators exist as defense-in-depth for cross-field invariants
- [ ] Tests cover both base mapper defaults and provider overrides
- [ ] Failure cases for missing/unexpected bindings are covered
Expand Down Expand Up @@ -555,3 +557,14 @@ When adding a new field to an execution or deployment response:
1. Is Langflow the source of truth for this value? → top level.
2. Does this value come from the provider and Langflow just relays it? → inside `provider_data`.
3. Does the provider supply it but Langflow persists and indexes it (like `resource_key`)? → top level is acceptable.

### 14.4 Hard placement rule for non-persisted provider data

If data is not persisted in the Langflow DB and comes directly from the provider,
it must go into `provider_data`.

Rules:

- Top-level response fields are reserved for values that Langflow persists and controls.
- Provider-originated data that Langflow only relays must stay in `provider_data` without exception.
- Examples: provider tool names, execution metadata/status/timestamps, connection types, environments.
Loading
Loading