langchain-ai/deepagents · error · MarketplaceError

Plugin {plugin_id} has an unusable source path ({rejections}

Error message

Plugin {plugin_id} has an unusable source path ({rejections})

What it means

During `auto_update_plugins`, after finding the plugin entry, its source is materialized with `materialize_plugin_source`, which appends reasons to `update_rejections` and returns `None` when the source cannot be used. In that case `unresolved_source_message(plugin_id, entry, update_rejections)` is raised as this `MarketplaceError`, naming the unusable source path and the rejection reasons.

Source

Thrown at libs/code/deepagents_code/plugins/discovery.py:422

                            (
                                plugin
                                for plugin in marketplace.plugins
                                if plugin.name == plugin_name
                            ),
                            None,
                        )
                        if entry is None:
                            msg = (
                                f"Plugin {plugin_id!r} not found in marketplace "
                                f"{marketplace_name}"
                            )
                            raise MarketplaceError(msg)
                        update_rejections: list[str] = []
                        source_root = materialize_plugin_source(
                            marketplace, entry, rejections=update_rejections
                        )
                        if source_root is None:
                            raise MarketplaceError(
                                unresolved_source_message(
                                    plugin_id, entry, update_rejections
                                )
                            )
                        manifest, _manifest_path, _warnings = load_manifest(
                            source_root, fallback_name=entry.name
                        )
                        if (
                            manifest is None
                            or manifest.name != plugin_name
                            or not manifest.auto_update
                            or not manifest.version
                            or manifest.version == installed_entry.version
                        ):
                            continue

                        cache_and_register_plugin(
                            plugin_id,

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Read the `({rejections})` suffix for the exact rejection reasons.
  2. Fix the `source` in the marketplace entry (existing, supported, in-root path).
  3. Verify the referenced path exists after any git materialization; retry the update.
  4. If the upstream source is gone, uninstall the plugin or switch to a marketplace that still hosts it.

Example fix

// before
{"name": "code-review", "source": "/abs/path/outside"}
// after
{"name": "code-review", "source": "./plugins/code-review"}
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
source = entry["source"]
assert not Path(source).is_absolute() and not source.startswith(".."), f"bad source: {source}"
assert (marketplace_root / source.lstrip("./")).exists(), "source path missing"

Try / catch

try:
    auto_update_plugins()
except MarketplaceError as exc:
    if "unusable source path" in str(exc):
        print(f"fix marketplace entry source: {exc}")  # rejections explain why

Prevention

When it happens

Trigger: `auto_update_plugins()` runs and the plugin's marketplace entry declares a source that cannot be materialized: unsupported source type, missing directory/file, or a source path rejected by security checks (see the `rejections` list in the message).

Common situations: Marketplace entry points at a path that was deleted or renamed upstream; source path lacks the required form (e.g. absolute or Windows-absolute paths rejected); git checkout fails so the source directory doesn't exist; symlink-based sources escaping the marketplace root.

Related errors


AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29). Data as JSON: /api/errors/34f91a9396b085e3. Report an issue: GitHub.