can1357/oh-my-pi · error · Error
Marketplace "${name}" not found
Error message
Marketplace "${name}" not found What it means
removeMarketplaceEntry() filters the registry's marketplaces by name; if nothing was removed (length unchanged), the name did not exist and it throws. This prevents silent no-op removals that would leave the caller believing a marketplace was unregistered.
Source
Thrown at packages/coding-agent/src/extensibility/plugins/marketplace/registry.ts:144
export async function writeInstalledPluginsRegistry(filePath: string, reg: InstalledPluginsRegistry): Promise<void> {
await atomicWriteJson(filePath, reg);
}
// ── Marketplace CRUD ─────────────────────────────────────────────────
// Pure functions that transform registry state. Caller is responsible for
// reading, mutating, and writing back.
export function addMarketplaceEntry(reg: MarketplacesRegistry, entry: MarketplaceRegistryEntry): MarketplacesRegistry {
if (reg.marketplaces.some(m => m.name === entry.name)) {
throw new Error(`Marketplace "${entry.name}" already exists`);
}
return { ...reg, marketplaces: [...reg.marketplaces, entry] };
}
export function removeMarketplaceEntry(reg: MarketplacesRegistry, name: string): MarketplacesRegistry {
const filtered = reg.marketplaces.filter(m => m.name !== name);
if (filtered.length === reg.marketplaces.length) {
throw new Error(`Marketplace "${name}" not found`);
}
return { ...reg, marketplaces: filtered };
}
export function getMarketplaceEntry(reg: MarketplacesRegistry, name: string): MarketplaceRegistryEntry | undefined {
return reg.marketplaces.find(m => m.name === name);
}
// ── Installed plugin CRUD ────────────────────────────────────────────
export function addInstalledPlugin(
reg: InstalledPluginsRegistry,
id: string,
entry: InstalledPluginEntry,
): InstalledPluginsRegistry {
const existing = reg.plugins[id] ?? [];
return {
...reg,View on GitHub (pinned to 9690622007)
Solutions
- Verify the exact name via getMarketplaceEntry() or by listing the registry before removing
- Make removal idempotent: check existence first and skip when absent
- Fix the name spelling/case to match the registry entry
Example fix
// before
reg = removeMarketplaceEntry(reg, "comunity"); // throws
// after
if (getMarketplaceEntry(reg, "community")) {
reg = removeMarketplaceEntry(reg, "community");
} Defensive patterns
Strategy: validation
Validate before calling
import { getMarketplaceEntry, removeMarketplaceEntry } from './registry';
if (getMarketplaceEntry(reg, name)) {
reg = removeMarketplaceEntry(reg, name);
} // silently skip otherwise — idempotent remove Type guard
null
Try / catch
try {
reg = removeMarketplaceEntry(reg, name);
} catch (err) {
if (err.message === `Marketplace "${name}" not found`) {
// already gone — treat as success in cleanup scripts
} else throw err;
} Prevention
- Copy marketplace names from the registry listing, don't retype them
- Remember names are case-sensitive and exact
- Write cleanup scripts that tolerate already-removed entries
- Check which scope/project registry you loaded before removing
When it happens
Trigger: Calling removeMarketplaceEntry(reg, name) where no marketplace with that exact name is registered — typo in the name, marketplace already removed, or registry loaded from a fresh/empty state.
Common situations: Running uninstall/cleanup scripts twice; case-sensitive name mismatch ("Community" vs "community"); attempting removal in a different scope/project where the marketplace was never registered.
Related errors
- Plugin "${id}" not found in registry
- Marketplace "${name}" not found
- Marketplace "${marketplace}" not found
- Marketplace "${entry.name}" already exists
- Plugin ${name} not found in runtime config
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/fd7a9bc943d6a7ee.
Report an issue: GitHub.