Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
1f46056
feat(extension): add manifest-less lfx.bundles discovery + precedence…
erichare Jun 9, 2026
dbedb8f
Merge remote-tracking branch 'origin/release-1.11.0' into bundles/fou…
erichare Jun 9, 2026
8afc5ad
docs(bundles): changelog entry for the lfx.bundles discovery surface
erichare Jun 10, 2026
5bec743
Merge remote-tracking branch 'origin/release-1.11.0' into bundles/fou…
erichare Jun 10, 2026
8a4e311
fix(extension): reject plain-module lfx.bundles targets; correct vali…
erichare Jun 10, 2026
1aa104a
fix(extension): review fixes — shadowed metapackage providers never i…
erichare Jun 10, 2026
883789c
fix(extension): harden lfx.bundles discovery per review — broad find_…
erichare Jun 10, 2026
7cd1673
feat(bundles): create lfx-bundles metapackage skeleton (#13564)
erichare Jun 11, 2026
51f8ecf
ci(bundles): cross-bundle test matrix (lfx contract axis) (#13566)
erichare Jun 11, 2026
8788f9c
feat(lfx): add lfx[bundles] extra and keep lfx engine-only (#13565)
erichare Jun 11, 2026
2b5faf2
ci(bundles): freeze lfx/components against new top-level providers (#…
erichare Jun 11, 2026
7139d07
feat(bundles): move 45 long-tail providers into lfx-bundles + graduat…
erichare Jun 11, 2026
9df9475
Frontend test updates
erichare Jun 11, 2026
5ec49d8
fix: restore loading.py and tableAutoCellRender to base-branch state
erichare Jun 11, 2026
cbe8d23
ci(bundles): make freeze gate reachable on PRs; review follow-ups
erichare Jun 11, 2026
98cd335
fix(bundles): restore legacy-name resolution for ext components; sync…
erichare Jun 11, 2026
f550c6d
fix(bundles): keep importable module paths in starter projects
erichare Jun 11, 2026
031ca0a
Merge branch 'release-1.11.0' into bundles/foundation-discovery
erichare Jun 12, 2026
5fbac3d
feat: add Oracle integration (#13502)
fileames Jun 12, 2026
e77ddc2
feat(lfx): fail-fast dependency preflight for `lfx run` (#13680)
erichare Jun 16, 2026
7266606
Merge branch 'release-1.11.0' into bundles/foundation-discovery
erichare Jun 16, 2026
57ca736
feat(bundles): move spider + toolguard provider components into lfx-b…
erichare Jun 16, 2026
dfc4f00
chore: auto-bake note keys and regenerate backend locales/en.json [sk…
github-actions[bot] Jun 16, 2026
a082afb
feat(bundles): consolidate cleanlab, twelvelabs, jigsawstack into lfx…
erichare Jun 16, 2026
11dacc4
feat(bundles): consolidate vector/datastore + community-wrapper provi…
erichare Jun 16, 2026
dcbe03f
[autofix.ci] apply automated fixes
autofix-ci[bot] Jun 16, 2026
c10e409
feat(bundles): consolidate homeassistant, olivya, agentql REST provid…
erichare Jun 16, 2026
5b8dd8a
feat(bundles): consolidate google, vertexai, altk, codeagents into lf…
erichare Jun 16, 2026
9b00fee
test(lfx): decouple dynamic-import unit tests from soon-to-be-bundled…
erichare Jun 16, 2026
fee3f38
feat(bundles): consolidate composio, huggingface, nvidia, cuga into l…
erichare Jun 16, 2026
b97579c
[autofix.ci] apply automated fixes
autofix-ci[bot] Jun 16, 2026
594e4db
feat(bundles): consolidate langwatch evaluator into lfx-bundles
erichare Jun 16, 2026
f95fb06
feat(bundles): consolidate FAISS, Notion into lfx-bundles (lowercase-…
erichare Jun 16, 2026
fc07c98
feat(bundles): fold vectorstores LocalDBComponent into the chroma bundle
erichare Jun 16, 2026
ed39670
[autofix.ci] apply automated fixes
autofix-ci[bot] Jun 16, 2026
6bcae89
feat(bundles): remove unbundleable vlmrun + notdiamond components fro…
erichare Jun 16, 2026
7f6d93b
Merge branch 'release-1.11.0' into bundles/foundation-discovery
erichare Jun 16, 2026
3f7d2de
test(lfx): tie flow-builder search 'returns all' to registry size
erichare Jun 16, 2026
a05d937
fix(bundles): deterministic component alias resolution + sidebar slug…
erichare Jun 16, 2026
61a55e8
Merge branch 'release-1.11.0' into bundles/foundation-discovery
erichare Jun 16, 2026
064069b
test(weaviate): patch the class's own module, not a fixed string path
erichare Jun 16, 2026
de1efb9
test(ollama,perplexity): patch the class's own module, not a fixed st…
erichare Jun 16, 2026
87ae8a9
fix(locales): restore en.json keys for still-shipping spider/policies…
erichare Jun 17, 2026
1590431
chore(deps): drop dead astradb/graph-retriever extras and langchain-a…
erichare Jun 17, 2026
3340292
ci(extension-migration): enforce component os.environ-write lint in CI
erichare Jun 17, 2026
b169c86
test(bundles): cover migration-table completeness, preflight provider…
erichare Jun 17, 2026
00bf723
chore: auto-bake note keys and regenerate backend locales/en.json [sk…
github-actions[bot] Jun 17, 2026
6109323
fix(locales): make spider/toolguard i18n keys survive regen via shims
erichare Jun 17, 2026
a5eac88
chore(bundles): declare astrapy in lfx-datastax; align lfx-ibm manife…
erichare Jun 17, 2026
aecbb6b
refactor(migrate): guard consolidate against subdir data loss; fix al…
erichare Jun 17, 2026
ee912f6
ci(gp-backend): regen en.json on src/bundles/** edits
erichare Jun 17, 2026
6050924
Merge release-1.11.0 into bundles/foundation-discovery
erichare Jun 17, 2026
e13fca1
fix(bundles): Policies in Models & Agents core; Spider in bundles sid…
erichare Jun 17, 2026
f516062
docs(bundles): fix error-tier mirror claim, list-time discovery note,…
erichare Jun 18, 2026
1e2395a
fix(bundles): surface pip-install guidance for missing SDKs on the se…
erichare Jun 18, 2026
d69b2a0
fix: merge release
erichare Jun 18, 2026
f7b9cb3
fix(bundles): surface curated shim message over its raw cause in exce…
erichare Jun 18, 2026
f629082
fix(bundles): cover OpenRouter/IBM WatsonX in Orchestrate requirement…
erichare Jun 18, 2026
9ed867d
Backend format
erichare Jun 18, 2026
ce6ffc7
Format again
erichare Jun 18, 2026
af7a5c3
[autofix.ci] apply automated fixes
autofix-ci[bot] Jun 18, 2026
41e18ce
fix(bundles): pin datastax ruff line-length to 120 to stop format tug…
erichare Jun 18, 2026
bf38518
Merge branch 'release-1.11.0' into bundles/foundation-discovery
erichare Jun 19, 2026
97381ae
fix(bundles): relocate notdiamond + vlmrun into lfx-bundles
erichare Jun 23, 2026
7a6d989
docs(lfx): correct dependency-preflight scope to lfx run only
erichare Jun 23, 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
17 changes: 17 additions & 0 deletions BUNDLE_API.md
Original file line number Diff line number Diff line change
Expand Up @@ -402,3 +402,20 @@ the deserialize half is covered by
added to ``ERROR_CODES`` (additive; codes-as-contract semantics
preserved). In-tree polling clients that never sent the parameter
are unaffected.
- **Manifest-less `lfx.bundles` discovery (metapackage split, 1.11).** A
distribution may declare `[project.entry-points."lfx.bundles"]` whose
value is an importable package; each immediate subdirectory is loaded as
one bundle at the `@official` slot with **no `extension.json`** (the
langchain-community model; exempt from `lfx extension validate`).
`load_lfx_bundles_extensions` is exported from `lfx.extension` (additive).
Discovery precedence for cross-source bundle-name collisions becomes
`installed > seed > lfx_bundles > dev > inline` -- **manifest always
wins**, so a manifest-shipping `lfx-<provider>` shadows the same-named
provider in a metapackage with the existing `bundle-shadowed` warning
(graduation requires no lockstep release). New warning-only code
`bundle-discovery-malformed` added to `ERROR_CODES` (additive) for
unresolvable declarations and invalid provider directory names; it never
aborts startup. Manifest-less bundles bypass the
`version-constraint-unsatisfied` API-version gate by construction (no
manifest to carry `lfx.compat`); install-time compatibility rides on the
metapackage's PEP 508 `lfx>=X,<Y` pin instead.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
3 changes: 3 additions & 0 deletions src/lfx/src/lfx/extension/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@
installed_extension_roots,
load_extension,
load_installed_extensions,
load_lfx_bundles_extensions,
load_seed_extensions,
manifest_owning_distributions,
)
Expand Down Expand Up @@ -159,6 +160,7 @@
"installed_extension_roots": "loader",
"load_extension": "loader",
"load_installed_extensions": "loader",
"load_lfx_bundles_extensions": "loader",
"load_seed_extensions": "loader",
"manifest_owning_distributions": "loader",
# dev_registry
Expand Down Expand Up @@ -261,6 +263,7 @@ def __dir__() -> list[str]:
"load_dev_extensions",
"load_extension",
"load_installed_extensions",
"load_lfx_bundles_extensions",
"load_manifest",
"load_migration_table",
"load_seed_extensions",
Expand Down
8 changes: 8 additions & 0 deletions src/lfx/src/lfx/extension/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,11 @@
"seed-directory-not-found",
"seed-bundle-shadowed",
"bundle-shadowed",
# Manifest-less lfx.bundles root whose entry-point declaration could
# not be resolved to a real package directory. Surfaced as a *warning*
# (never aborts startup) so a broken third-party declaration degrades
# to "that bundle root is skipped".
"bundle-discovery-malformed",
"duplicate-extension-id",
# Reload-specific codes
"reload-in-progress",
Expand Down Expand Up @@ -284,6 +289,9 @@ def __bool__(self) -> bool: # pragma: no cover - convenience
"Bundle {content!r} is registered from multiple discovery sources; the lower-precedence copy "
"at {location} is being skipped in favor of the higher-precedence one."
),
"bundle-discovery-malformed": (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This template serves three failure modes in _bundles_root (unresolvable entry point, invalid provider directory name, iterdir OSError) but the text and the malformed hint only fit the first. An invalid directory name renders as "entry point 'BadName' could not be resolved to a package directory" with a hint to fix the entry-point declaration, when the fix is renaming the directory. The inline tier keeps these separate (inline-bundle-name-invalid, inline-path-unreadable). Could you split the codes the same way?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 883789c — split per failure mode, mirroring the inline tier as you suggested: bundle-discovery-malformed is now reserved for declaration-level failures (hint: fix the entry point), bundles-provider-name-invalid covers invalid directory names (hint: rename the directory), and bundles-root-unreadable covers the iterdir OSError (hint: check permissions). Both new codes are additive in ERROR_CODES with their own format_extension_error templates + snapshot rows, and the module docstring's failure-policy section now lists one code per mode. (A follow-up on the stack tip also moved the symlinked-provider containment rejection to the existing path-escape code — its template literally describes "symlink leaving the bundle directory" — in 308cfa7.)

"lfx.bundles entry point {content!r} could not be resolved to a package directory: {message}"
),
"duplicate-extension-id": ("Extension id {content!r} is registered more than once (already at {location})."),
"reload-in-progress": (
"Reload already in progress for bundle {content!r}; refuse to start a second concurrent reload."
Expand Down
6 changes: 6 additions & 0 deletions src/lfx/src/lfx/extension/loader/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@
follow-on touching one banner-section at a time.
"""

from lfx.extension.loader._bundles_root import (
LFX_BUNDLES_ENTRY_POINT_GROUP,
load_lfx_bundles_extensions,
)
from lfx.extension.loader._discovery import DEFAULT_MODULE_NAMESPACE
from lfx.extension.loader._orchestrator import (
discover_inline_bundles,
Expand All @@ -78,6 +82,7 @@

__all__ = [
"DEFAULT_MODULE_NAMESPACE",
"LFX_BUNDLES_ENTRY_POINT_GROUP",
"SLOT_EXTRA",
"SLOT_OFFICIAL",
"SLOT_VALUES",
Expand All @@ -90,6 +95,7 @@
"load_extension",
"load_inline_bundle",
"load_installed_extensions",
"load_lfx_bundles_extensions",
"load_seed_extensions",
"manifest_owning_distributions",
]
Loading
Loading