{"record":{"id":"d2af8fc3f7fe16e0","repo":"langchain-ai/deepagents","slug":"marketplace-url-redact-url-credentials-url-onl","errorCode":null,"errorMessage":"Marketplace URL {_redact_url_credentials(url)} only downloads the catalog JSON, but plugins [{names}] use local relative sources. Use a git repository or local directory for this marketplace.","messagePattern":"Marketplace URL (.+?) only downloads the catalog JSON, but plugins \\[(.+?)\\] use local relative sources\\. Use a git repository or local directory for this marketplace\\.","errorType":"exception","errorClass":"MarketplaceError","httpStatus":null,"severity":"error","filePath":"libs/code/deepagents_code/plugins/marketplace.py","lineNumber":476,"sourceCode":"            plugin.name\n            for plugin in marketplace.plugins\n            if _plugin_repository_source(plugin) is None\n        ]\n        if not unsupported:\n            return\n        names = \", \".join(sorted(unsupported))\n        msg = (\n            f\"Marketplace URL {_redact_url_credentials(url)} contains plugins \"\n            f\"with unsupported remote sources: [{names}]\"\n        )\n        raise MarketplaceError(msg)\n    names = \", \".join(sorted(local_plugins))\n    msg = (\n        f\"Marketplace URL {_redact_url_credentials(url)} only downloads the \"\n        f\"catalog JSON, but plugins [{names}] use local relative sources. \"\n        \"Use a git repository or local directory for this marketplace.\"\n    )\n    raise MarketplaceError(msg)\n\n\ndef load_marketplace_location(path: Path) -> PluginMarketplace:\n    \"\"\"Load a marketplace from either a cached directory or JSON file.\n\n    Args:\n        path: Directory or marketplace JSON path.\n\n    Returns:\n        Parsed marketplace.\n    \"\"\"\n    resolved = path.expanduser().resolve()\n    if resolved.is_file():\n        return _load_marketplace_file(resolved)\n    return load_marketplace(resolved)\n\n\ndef find_marketplace_manifest(root: Path) -> Path | None:","sourceCodeStart":458,"sourceCodeEnd":494,"githubUrl":"https://github.com/langchain-ai/deepagents/blob/a1af029e6e73cb17c36bff823d227747b28e91e1/libs/code/deepagents_code/plugins/marketplace.py#L458-L494","documentation":"URL marketplaces fetch only the catalog JSON, but some plugins in the catalog use local relative sources that need the surrounding filesystem (sibling files in the repo/directory). The library refuses this marketplace and names the plugins, telling the user to use a git repository or local directory instead.","triggerScenarios":"materialize_marketplace_source with a URL source whose catalog lists plugins with local/relative-path sources; detected by _reject_url_marketplace_with_local_plugins.","commonSituations":"Serving a marketplace.json from a website while plugins live as files next to it in a repo; exporting a local marketplace to a URL without converting plugin sources; misunderstanding that URL marketplaces cannot deliver plugin files.","solutions":["Host the marketplace in a git repository and add it via the git or github source type","Distribute the marketplace as a local directory and use a local path source","Rewrite the plugins' sources to remote-fetchable forms (e.g. individual git URLs)"],"exampleFix":"// before\n{\"sources\": [\"https://example.com/marketplace.json\"]}  // plugins use \"./plugins/foo\"\n// after\n{\"sources\": [\"git+https://github.com/org/marketplace.git\"]}  // repo includes plugin files","handlingStrategy":"validation","validationCode":"local_plugins = [\n    p[\"name\"] for p in catalog[\"plugins\"]\n    if p.get(\"source\", {}).get(\"type\") == \"local\"\n]\nif local_plugins:\n    raise ValueError(f\"use git/local marketplace for local plugins: {local_plugins}\")","typeGuard":null,"tryCatchPattern":"try:\n    marketplace, path = materialize_marketplace_source(source)\nexcept MarketplaceError as exc:\n    if \"only downloads the catalog JSON\" in str(exc):\n        log.error(\"Re-host marketplace as a git repository or local directory\")\n    raise","preventionTips":["Never serve catalogs containing local-relative plugin sources over plain URLs","Distribute such marketplaces via git clone or a local directory","Convert plugin sources to standalone git URLs before exporting to a URL marketplace"],"tags":["marketplace","plugins","configuration","filesystem"],"backgroundTag":"url-marketplace-with-local-plugins","analyzedSha":"a1af029e6e73cb17c36bff823d227747b28e91e1","analyzedAt":"2026-08-29T11:43:24.718Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}