can1357/oh-my-pi · error · Error

Marketplace catalog name changed from "${name}" to "${catalo

Error message

Marketplace catalog name changed from "${name}" to "${catalog.name}". Remove and re-add the marketplace to update.

What it means

updateMarketplace guards against the upstream catalog renaming itself: since registry entries are keyed by catalog name, silently accepting a rename would corrupt the entry on next read. It throws after cleaning up the temp clone, telling the user to remove and re-add the marketplace.

Source

Thrown at packages/coding-agent/src/extensibility/plugins/marketplace/manager.ts:166

		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) {
			await promoteCloneToCache(clonePath, this.#opts.marketplacesCacheDir, catalog.name);
		}

		// Overwrite the cached catalog and migrate legacy home-relative registry entries.
		const catalogPath = path.resolve(expandTilde(existing.catalogPath));
		await Bun.write(catalogPath, `${JSON.stringify(catalog, null, 2)}\n`);

		const updatedEntry: MarketplaceRegistryEntry = {
			...existing,
			catalogPath,
			updatedAt: new Date().toISOString(),

View on GitHub (pinned to 9690622007)

Solutions

  1. As the message says: remove the marketplace (removeMarketplace(name)) and add it again with the new source — the registry will pick up the new name.
  2. If the rename was unintentional upstream, contact the maintainer or pin to a revision/URL that still has the old name.
  3. Update any scripts/automation to reference the new marketplace name after re-adding.

Example fix

// before: blind update fails on rename
await manager.updateMarketplace("old-name");
// after: remove and re-add
await manager.removeMarketplace("old-name");
await manager.addMarketplace("https://example.com/marketplace.json"); // now named "new-name"
Defensive patterns

Strategy: try-catch

Try / catch

try {
  await manager.updateMarketplace(name);
} catch (err) {
  if ((err as Error).message.includes("name changed from")) {
    await manager.removeMarketplace(name);
    await manager.addMarketplace(sourceUri); // re-register under the new catalog name
  } else throw err;
}

Prevention

When it happens

Trigger: updateMarketplace(name) succeeds in fetching, but the fetched catalog's `name` differs from the registered `name` — upstream renamed their catalog, or the source was repointed (e.g. the same URL now serves a different marketplace).

Common situations: A marketplace maintainer renames their catalog between releases and you run update; a URL/tarball source is overwritten with a differently-named marketplace; a fork reusing the same source URI under a new name.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/77ec55fa0ceaeee5. Report an issue: GitHub.