Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7ed555b
feat(triggers): add provider-owned runtime hooks
erichare Oct 22, 2026
2570335
fix(triggers): keep provider registry reloads fail closed
erichare Oct 22, 2026
0bd4f1f
docs(triggers): define provider admission transaction boundaries
erichare Oct 22, 2026
1d8c306
fix(triggers): poll registered provider mechanisms in listeners
erichare Oct 22, 2026
8b4476d
fix(triggers): load installed runtime owners before listener boot
erichare Oct 22, 2026
632c49c
test(triggers): classify provider handshakes and ingress settings
erichare Oct 22, 2026
3a8b6e7
fix(triggers): align provider IDs with ingress identifiers
erichare Oct 22, 2026
3d62bbd
fix(triggers): validate canonical source batches before delivery
erichare Oct 22, 2026
8259b70
fix(triggers): preserve unavailable provider nodes and cleanup intents
erichare Oct 22, 2026
e231124
fix(connections): preserve token method defaults and user choices
erichare Oct 22, 2026
3798223
fix(triggers): keep GET verification handshakes read only
erichare Oct 22, 2026
14160eb
fix(triggers): reuse completed provider subscriptions on enable
erichare Oct 22, 2026
38274f7
feat(triggers): add provider-owned runtime hooks
erichare Oct 22, 2026
7a77d39
fix(triggers): keep provider registry reloads fail closed
erichare Oct 22, 2026
7323be7
docs(triggers): define provider admission transaction boundaries
erichare Oct 22, 2026
5bbf5d6
fix(triggers): poll registered provider mechanisms in listeners
erichare Oct 22, 2026
a909065
fix(triggers): load installed runtime owners before listener boot
erichare Oct 22, 2026
f4087f8
test(triggers): classify provider handshakes and ingress settings
erichare Oct 22, 2026
cf8f307
fix(triggers): align provider IDs with ingress identifiers
erichare Oct 22, 2026
272a54c
fix(triggers): validate canonical source batches before delivery
erichare Oct 22, 2026
9bc0c71
fix(triggers): preserve unavailable provider nodes and cleanup intents
erichare Oct 22, 2026
de2e7c5
fix(connections): preserve token method defaults and user choices
erichare Oct 22, 2026
784645c
fix(triggers): keep GET verification handshakes read only
erichare Oct 22, 2026
69d69f1
fix(connections): collect required token expiration
erichare Oct 22, 2026
ac6f49c
fix(triggers): reuse completed provider subscriptions on enable
erichare Oct 22, 2026
e79304e
fix(connections): collect required token expiration
erichare Oct 22, 2026
feb4340
fix(triggers): resolve current subscription renewal hooks
erichare Oct 22, 2026
7c178a5
fix(listeners): resolve current extension factories
erichare Oct 22, 2026
acd9d87
feat(confluence): add Cloud page actions and polling triggers
erichare Oct 22, 2026
1e3ca33
fix(triggers): resolve current subscription renewal hooks
erichare Oct 22, 2026
8140551
fix(listeners): resolve current extension factories
erichare Oct 22, 2026
ffe23b2
feat: validate later provider integration contracts
erichare Oct 22, 2026
8eb9b38
feat: validate later provider integration contracts
erichare Oct 22, 2026
4e08646
test(confluence): register the later provider capability contract
erichare Oct 22, 2026
639871a
chore: auto-bake note keys and regenerate backend locales/en.json [sk…
github-actions[bot] Oct 22, 2026
db88fcd
fix(connections): reject nonexistent local token expiry
erichare Oct 22, 2026
bf8db46
fix(triggers): isolate provider configuration failures
erichare Oct 22, 2026
a5870e5
fix(triggers): constrain provider ingress response contracts
erichare Oct 22, 2026
6426eea
fix(listeners): fence event writes by captured authority
erichare Oct 22, 2026
0423271
fix(triggers): keep policy denial separate from reconnect
erichare Oct 22, 2026
8478b13
fix(triggers): hide unavailable ingress verification state
erichare Oct 22, 2026
1aa0d48
fix(connections): scope manual profiles to deployment capabilities
erichare Oct 22, 2026
c88720f
fix(triggers): retain queued work during provider reload
erichare Oct 22, 2026
d0b2132
fix(connections): select advertised manual token identities
erichare Oct 22, 2026
ca9917d
fix(confluence): request identity scopes and accept read-only consent
erichare Oct 22, 2026
519e9d0
fix(connections): reject nonexistent local token expiry
erichare Oct 22, 2026
dee647e
fix(triggers): isolate provider configuration failures
erichare Oct 22, 2026
4ead5ef
fix(triggers): constrain provider ingress response contracts
erichare Oct 22, 2026
5b897f3
fix(listeners): fence event writes by captured authority
erichare Oct 22, 2026
05ed95e
fix(triggers): keep policy denial separate from reconnect
erichare Oct 22, 2026
b9c121c
fix(triggers): hide unavailable ingress verification state
erichare Oct 22, 2026
5ba4280
fix(connections): scope manual profiles to deployment capabilities
erichare Oct 22, 2026
6a1ac1d
fix(triggers): retain queued work during provider reload
erichare Oct 22, 2026
dee544f
fix(connections): select advertised manual token identities
erichare Oct 22, 2026
09e4bd8
fix(ci): reject null provider integration contracts
erichare Oct 22, 2026
77c8ca0
fix(listeners): align delivery locks with connection deletion
erichare Oct 22, 2026
9983816
fix(ci): reject null provider integration contracts
erichare Oct 22, 2026
2f3107b
fix(listeners): align delivery locks with connection deletion
erichare Oct 22, 2026
450becb
test(frontend): freeze local dates for API key presets
erichare Oct 23, 2026
87320c4
fix(ci): compare declared bundle categories for ownership
erichare Oct 23, 2026
13a64fe
fix(triggers): lock connection parents before source admission
erichare Oct 23, 2026
e422f58
test(frontend): freeze local dates for API key presets
erichare Oct 23, 2026
25c8c2f
fix(triggers): lock connection parents before source admission
erichare Oct 23, 2026
9613fdf
fix(triggers): skip owner pauses before resume admission
erichare Oct 23, 2026
a8026e3
fix(ci): preserve CPU wheel sources in Mend requirements
erichare Oct 23, 2026
c94790a
fix(triggers): skip owner pauses before resume admission
erichare Oct 23, 2026
3e3ac88
fix(ci): preserve CPU wheel sources in Mend requirements
erichare Oct 23, 2026
51f75b1
fix: refresh stale Slack fanout targets without closing source sockets
erichare Oct 23, 2026
59b1ee2
fix: sanitize provider OAuth parser failures
erichare Oct 23, 2026
d2e4841
fix: refresh stale Slack fanout targets without closing source sockets
erichare Oct 23, 2026
6128e95
fix: sanitize provider OAuth parser failures
erichare Oct 23, 2026
c633a31
fix: serialize Slack socket app identity writes before acknowledgment
erichare Oct 23, 2026
1154a68
fix: serialize Slack socket app identity writes before acknowledgment
erichare Oct 23, 2026
bebb0f4
fix(ci): preserve CPU wheel pins in Mend resolution
erichare Oct 23, 2026
9f484da
fix(ci): preserve CPU wheel pins in Mend resolution
erichare Oct 23, 2026
b44eb37
fix(triggers): validate and audit provider response metadata
erichare Oct 23, 2026
7702a4a
chore: merge release frontend changes into trigger runtime
erichare Oct 23, 2026
6ab563d
chore: merge reviewed provider runtime into Confluence
erichare Oct 23, 2026
d4dffe2
chore: sync current release into Confluence
erichare Oct 23, 2026
31c14e5
fix: apply connector review corrections
erichare Oct 26, 2026
6c23050
fix(confluence): clarify account labels and source limits
erichare Oct 28, 2026
2845731
fix: reject unsupported headless integration runs
erichare Oct 28, 2026
23241ed
fix: isolate polling configuration failures by trigger
erichare Oct 28, 2026
b02cc88
docs: record headless integration context checks
erichare Oct 28, 2026
5ad79e4
chore: merge current release into confluence integrations
erichare Oct 28, 2026
4f2947d
chore: auto-bake note keys and regenerate backend locales/en.json [sk…
github-actions[bot] Oct 28, 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
7 changes: 7 additions & 0 deletions BUNDLE_API.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,13 @@ the deserialize half is covered by

## Changelog

- **Headless integration context checks (2026-10-28).** `Component` checks the
selected capability's declared deployment contexts before resolving a
connection or running an integration action. Unsupported headless actions
raise `IntegrationContextUnsupportedError` with the existing
`action-unsupported` code instead of suggesting credential setup. Supported
contexts and public signatures are unchanged, so `BUNDLE_API_VERSION` remains `1`.

- **Decision model inputs (2026-10-22).** `ModelInput` accepts `model_type="decision"`:
such a field never connects other models (`input_types=[]`, no external options), and
`value="connect_other_models"` is refused. `FloatInput` gains `preserve_empty`
Expand Down
26 changes: 26 additions & 0 deletions design/provider-integrations/confluence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Confluence Cloud preview

Status: draft
Owners (sign-off roles): platform owner, release owner

The lfx-confluence package owns provider confluence and the separate confluence_integrations category. Legacy lfx-bundles Confluence components retain their category and class identities.

| Capability | Auth and scope | Context | Delivery or API |
| --- | --- | --- | --- |
| Search pages by exact title or list one approved space | Delegated user and read:page:confluence | Hosted and self-managed | REST v2 pages with bounded explicit cursor |
| Read a current page and storage body | Delegated user and read:page:confluence | Hosted and self-managed | REST v2 page by ID |
| Create a current page in an approved space | Delegated user and read:page:confluence plus write:page:confluence | Hosted and self-managed | REST v2 page create with optional verified parent |
| Replace a page at the expected version | Delegated user and read:page:confluence plus write:page:confluence | Hosted and self-managed | REST v2 page update with optimistic content version |
| Observe newly created pages after a silent baseline | Delegated user, read:page:confluence and offline_access, background consent | Self-managed | Full bounded current-page snapshots |
| Observe higher versions of previously seen pages | Delegated user, read:page:confluence and offline_access, background consent | Self-managed | Full bounded current-page snapshots |

All capabilities are preview. One operator-configured Cloud site and approved numeric spaces constrain targets. The account and verified grant bind credentials to that site. New page creation uses createdAt rather than first appearance in the space. Snapshot observations cannot recover intermediate edits, deletion history or all changes during access gaps.

Data Center, Desktop, headless manual credentials, hosted triggers and push webhooks are unsupported. Setup, limits, rate handling, write ambiguity and recovery are documented in the [bundle README](../../src/bundles/confluence/README.md). Live tenant acceptance remains unverified.

## Sign-off

| Role | Name | Date | PR |
| --- | --- | --- | --- |
| platform owner | | | |
| release owner | | | |
201 changes: 201 additions & 0 deletions design/provider-integrations/contracts/confluence.v1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
{
"schema_version": 1,
"provider_id": "confluence",
"distribution": "lfx-confluence",
"manifest": {
"schema_version": 1,
"provider_id": "confluence",
"display_name": "Confluence Cloud",
"icon": "Confluence",
"docs_url": "https://github.com/langflow-ai/langflow/blob/d4dffe227d3ec238f430736d7ca6d16bbf084c9b/src/bundles/confluence/README.md#setup",
"auth_profiles": [
{
"id": "user",
"kind": "oauth2_authorization_code",
"identity": "user_delegated",
"supports_pkce": false,
"supports_refresh": true,
"default_scopes": [
"offline_access",
"read:confluence-user",
"read:page:confluence",
"write:page:confluence"
],
"client_type_by_context": {
"hosted": "confidential",
"self_managed": "confidential"
},
"owner_by_context": {
"hosted": "either",
"self_managed": "customer"
}
}
],
"capabilities": [
{
"id": "confluence.page.search",
"display_name": "Confluence: Search Pages",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.page.search"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"hosted",
"self_managed"
],
"risk": "read",
"component_ref": "ConfluenceSearchPagesComponent"
},
{
"id": "confluence.page.read",
"display_name": "Confluence: Read Page",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.page.read"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"hosted",
"self_managed"
],
"risk": "read",
"component_ref": "ConfluenceReadPageComponent"
},
{
"id": "confluence.page.create",
"display_name": "Confluence: Create Page",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"write:page:confluence",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.page.create"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"hosted",
"self_managed"
],
"risk": "write",
"component_ref": "ConfluenceCreatePageComponent"
},
{
"id": "confluence.page.update",
"display_name": "Confluence: Update Page",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"write:page:confluence",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.page.update"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"hosted",
"self_managed"
],
"risk": "write",
"component_ref": "ConfluenceUpdatePageComponent"
},
{
"id": "confluence.trigger.created",
"display_name": "Confluence: On Page Created",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"offline_access",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.trigger.created"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"self_managed"
],
"risk": "read",
"component_ref": "ConfluenceOnPageCreatedTriggerComponent"
},
{
"id": "confluence.trigger.updated",
"display_name": "Confluence: On Page Updated",
"auth_profile_id": "user",
"identity": "user_delegated",
"required_scopes": [
"read:page:confluence",
"offline_access",
"read:confluence-user"
],
"policy_keys": [
"integrations.confluence.trigger.updated"
],
"substrate": "rest",
"maturity": "preview",
"deployment_contexts": [
"self_managed"
],
"risk": "read",
"component_ref": "ConfluenceOnPageUpdatedTriggerComponent"
}
]
},
"sources": [
{
"url": "https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/",
"title": "Confluence Cloud REST v2 page API",
"verified_on": "2026-10-22"
},
{
"url": "https://developer.atlassian.com/cloud/confluence/oauth-2-3lo-apps/",
"title": "Confluence Cloud OAuth 2.0 3LO apps",
"verified_on": "2026-10-22"
},
{
"url": "https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-users/#api-wiki-rest-api-user-current-get",
"title": "Confluence current user API",
"verified_on": "2026-10-22"
}
],
"transport_limitations": [
"One operator-configured Confluence Cloud site and approved numeric spaces only.",
"Hosted actions and self-managed actions and polling are preview. Hosted triggers, Data Center, Desktop, headless manual credentials and webhooks are unsupported.",
"Polls observe latest versions after a silent baseline. They can miss intermediate edits, deletions, short-lived pages and access gaps.",
"Original createdAt separates newly created pages from old pages moved into a space. Newly visible existing pages are not update events until a later version is observed.",
"Each source retains at most 5000 distinct observed IDs and completes at most 50 requests of 100 pages. Partial snapshots never advance cursors."
],
"evidence_paths": [
"src/bundles/confluence/tests/test_contract.py",
"src/backend/tests/unit/services/triggers/test_confluence_provider.py",
"src/backend/tests/unit/services/triggers/test_confluence_lifecycle.py",
"src/bundles/confluence/scripts/verify_wheel.py",
"src/bundles/confluence/README.md",
"design/provider-integrations/confluence.md"
],
"owner_acceptance": {
"status": "pending",
"note": "Platform and release owners still need to review this preview. Operator app registration, provider distribution requirements, real tenant authorization, live content writes and production delivery acceptance remain unverified."
}
}
4 changes: 4 additions & 0 deletions design/provider-integrations/index.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{
"schema_version": 1,
"providers": [
{
"provider_id": "confluence",
"contract": "contracts/confluence.v1.json"
},
{
"provider_id": "github",
"contract": "contracts/github.v1.json"
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ dependencies = [
"lfx-google>=0.4.0,<1.0.0",
"lfx-microsoft>=0.1.5,<1.0.0",
"lfx-slack>=0.2.3,<1.0.0",
"lfx-confluence>=0.1.0,<1.0.0",
"lfx-github>=0.1.0,<1.0.0",
# langflow-extensions:bundle-deps-end
]
Expand Down Expand Up @@ -134,6 +135,7 @@ lfx-serply = { workspace = true }
lfx-serpingapi = { workspace = true }
lfx-microsoft = { workspace = true }
lfx-slack = { workspace = true }
lfx-confluence = { workspace = true }
lfx-github = { workspace = true }
# langflow-extensions:bundle-sources-end
torch = { index = "pytorch-cpu" }
Expand Down Expand Up @@ -175,6 +177,7 @@ members = [
"src/bundles/serpingapi",
"src/bundles/microsoft",
"src/bundles/slack",
"src/bundles/confluence",
"src/bundles/github",
# langflow-extensions:bundle-members-end
]
Expand Down
13 changes: 12 additions & 1 deletion scripts/ci/bundle_profile_locks/enterprise-hardened.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@
"requirement": "lfx-cohere==0.2.1",
"resolved_version": "0.2.1"
},
{
"distribution": "lfx-confluence",
"extras": [],
"providers": [
"lfx-confluence"
],
"requested": ">=0.1.0,<1.0.0",
"requirement": "lfx-confluence==0.1.0",
"resolved_version": "0.1.0"
},
{
"distribution": "lfx-datastax",
"extras": [],
Expand Down Expand Up @@ -190,12 +200,13 @@
"https://pypi.org/simple"
],
"profile": "enterprise-hardened",
"profile_digest": "sha256:311190439f5c0ab6",
"profile_digest": "sha256:5c9c26a194741a34",
"providers": [
"lfx-amazon",
"lfx-anthropic",
"lfx-azure",
"lfx-cohere",
"lfx-confluence",
"lfx-datastax",
"lfx-docling",
"lfx-github",
Expand Down
8 changes: 8 additions & 0 deletions scripts/ci/bundle_profiles.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,14 @@
"providers": [
"lfx-github"
]
},
{
"distribution": "lfx-confluence",
"extras": [],
"version": ">=0.1.0,<1.0.0",
"providers": [
"lfx-confluence"
]
}
]
}
Expand Down
3 changes: 3 additions & 0 deletions scripts/ci/release_inventory_contract.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"lfx-anthropic",
"lfx-azure",
"lfx-cohere",
"lfx-confluence",
"lfx-datastax",
"lfx-docling",
"lfx-github",
Expand Down Expand Up @@ -104,6 +105,7 @@
"lfx-anthropic",
"lfx-azure",
"lfx-cohere",
"lfx-confluence",
"lfx-datastax",
"lfx-docling",
"lfx-github",
Expand Down Expand Up @@ -242,6 +244,7 @@
"lfx-arxiv",
"lfx-azure",
"lfx-cohere",
"lfx-confluence",
"lfx-confluent",
"lfx-datastax",
"lfx-docling",
Expand Down
Loading
Loading