can1357/oh-my-pi · error · Error
Marketplace "${name}" not found
Error message
Marketplace "${name}" not found What it means
updateMarketplace looks up the named marketplace in the registry and throws this when no entry matches. The registry is keyed by marketplace name, so updating requires the exact registered name. Nothing is fetched; this is a pure registry lookup failure.
Source
Thrown at packages/coding-agent/src/extensibility/plugins/marketplace/manager.ts:155
async removeMarketplace(name: string): Promise<void> {
const reg = await readMarketplacesRegistry(this.#opts.marketplacesRegistryPath);
// removeMarketplaceEntry throws if not found — propagate to caller.
const updated = removeMarketplaceEntry(reg, name);
await writeMarketplacesRegistry(this.#opts.marketplacesRegistryPath, updated);
await fs.rm(path.join(this.#opts.marketplacesCacheDir, name), {
recursive: true,
force: true,
});
logger.debug("Marketplace removed", { name });
}
async updateMarketplace(name: string): Promise<MarketplaceRegistryEntry> {
const reg = await readMarketplacesRegistry(this.#opts.marketplacesRegistryPath);
const existing = getMarketplaceEntry(reg, name);
if (!existing) {
throw new Error(`Marketplace "${name}" not found`);
}
const { catalog, clonePath } = await fetchMarketplace(existing.sourceUri, this.#opts.marketplacesCacheDir);
// Guard against upstream catalog silently renaming itself — the registry
// entry is keyed by name, so a drift would corrupt the entry on next read.
if (catalog.name !== name) {
if (clonePath) {
await fs.rm(clonePath, { recursive: true, force: true }).catch(() => {});
}
throw new Error(
`Marketplace catalog name changed from "${name}" to "${catalog.name}". ` +
`Remove and re-add the marketplace to update.`,
);
}
// Promote the temp clone to its final cache location now that drift check passed.
if (clonePath) {View on GitHub (pinned to 9690622007)
Solutions
- List registered marketplaces (e.g. via the manager's registry/list API) and use the exact name.
- If it was never added, call addMarketplace(source) first.
- Re-add the marketplace if it was removed.
Example fix
// before
await manager.updateMarketplace("my-market"); // registered as "my-marketplace"
// after
const names = (await manager.listMarketplaces()).map(m => m.name);
await manager.updateMarketplace(names[0]); Defensive patterns
Strategy: validation
Validate before calling
const reg = JSON.parse(await Bun.file(registryPath).text());
if (!reg.marketplaces.some(m => m.name === name)) {
throw new Error(`"${name}" is not registered. Known: ${reg.marketplaces.map(m => m.name).join(", ")}`);
} Try / catch
try {
await manager.updateMarketplace(name);
} catch (err) {
if ((err as Error).message.includes("not found")) {
await manager.addMarketplace(source); // add before update
} else throw err;
} Prevention
- Always enumerate registered marketplace names before update/remove calls.
- Store marketplace names in config rather than hard-coding strings in scripts.
- Watch for case/typo mismatches — lookup is exact.
When it happens
Trigger: MarketplaceManager.updateMarketplace(name) called with a name not present in the marketplaces registry — typo, wrong casing, marketplace was removed, or it was never added.
Common situations: Typing "MyMarket" when it is registered as "mymarket"; attempting to update a marketplace after removing it; a fresh environment where setup never added the marketplace; scripts hard-coding a name that was renamed.
Related errors
- Marketplace "${marketplace}" not found
- Marketplace "${catalog.name}" already exists
- Marketplace catalog name changed from "${name}" to "${catalo
- Marketplace "${name}" not found
- Plugin "${id}" not found in registry
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/db11652a6ed0e52f.
Report an issue: GitHub.