langchain-ai/deepagents · error · MarketplaceError

Git marketplace source is missing repository metadata

Error message

Git marketplace source is missing repository metadata

What it means

Analogous to the GitHub case: a marketplace source with source_type == "git" must be a RepositoryMarketplaceSource containing the repository URL/identifier. Without that metadata the library cannot clone the marketplace repository, so it raises this error.

Source

Thrown at libs/code/deepagents_code/plugins/marketplace.py:433

        path = Path(source.value).expanduser().resolve()
        return _load_marketplace_file(path), path
    if source.source_type == "url":
        path = _download_marketplace(source.value)
        marketplace = _load_marketplace_file(path)
        _reject_url_marketplace_with_local_plugins(marketplace, source.value)
        return marketplace, path
    if source.source_type == "github":
        if not isinstance(source, RepositoryMarketplaceSource):
            msg = "GitHub marketplace source is missing repository metadata"
            raise MarketplaceError(msg)
        root = _materialize_marketplace_repository(
            source, f"https://github.com/{source.value}.git"
        )
        return load_marketplace(root), root
    if source.source_type == "git":
        if not isinstance(source, RepositoryMarketplaceSource):
            msg = "Git marketplace source is missing repository metadata"
            raise MarketplaceError(msg)
        root = _materialize_marketplace_repository(source, source.value)
        return load_marketplace(root), root
    msg = f"Unsupported marketplace source type: {source.source_type}"
    raise MarketplaceError(msg)


def _reject_url_marketplace_with_local_plugins(
    marketplace: PluginMarketplace, url: str
) -> None:
    """Reject URL marketplaces whose plugins need a sibling filesystem tree.

    Direct marketplace JSON URLs only cache the catalog file. Relative plugin
    sources such as `./plugins/foo` cannot be resolved from that cache alone.

    Raises:
        MarketplaceError: If any plugin entry uses a local relative source.
    """
    local_plugins = [

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Use RepositoryMarketplaceSource for git-type sources with the repo URL as value
  2. Fix the config parser/deserializer so git sources map to RepositoryMarketplaceSource
  3. Validate the marketplace config before passing it into materialize_marketplace_source

Example fix

// before
source = MarketplaceSource(source_type="git", value="https://github.com/org/plugins.git")
// after
source = RepositoryMarketplaceSource(source_type="git", value="https://github.com/org/plugins.git")
Defensive patterns

Strategy: type-guard

Validate before calling

if source.source_type == "git" and not isinstance(source, RepositoryMarketplaceSource):
    raise ValueError("git source must be RepositoryMarketplaceSource")

Type guard

def is_repository_source(source: MarketplaceSource) -> bool:
    return isinstance(source, RepositoryMarketplaceSource)

Try / catch

try:
    marketplace, path = materialize_marketplace_source(source)
except MarketplaceError as exc:
    if "Git marketplace source is missing repository metadata" in str(exc):
        source = RepositoryMarketplaceSource(source_type="git", value=source.value)
        marketplace, path = materialize_marketplace_source(source)
    else:
        raise

Prevention

When it happens

Trigger: materialize_marketplace_source receives a source with source_type == "git" that is not a RepositoryMarketplaceSource instance.

Common situations: Config parsing produced the base source class instead of the repository subclass; programmatic construction missing repository metadata; migrating configs between formats or versions.

Related errors


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