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
- Read the `({rejections})` suffix for the exact rejection reasons.
- Fix the `source` in the marketplace entry (existing, supported, in-root path).
- Verify the referenced path exists after any git materialization; retry the update.
- 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
- Use in-root relative paths for plugin sources in marketplace entries.
- Verify referenced directories exist after any git materialization step.
- Never declare absolute or Windows-absolute source paths.
- Check the `rejections` text in the message before changing configuration.
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
- Marketplace {record.name!r} now declares the name {marketpla
- Installed {plugin_id} but failed to load from cache: {detail
- Please enter a marketplace source
- Marketplace URL {_redact_url_credentials(url)} contains plug
- Marketplace URL {_redact_url_credentials(url)} only download
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/34f91a9396b085e3.
Report an issue: GitHub.