import type { Notification } from '../context/notifications.js';
import { Text } from '@anthropic/ink';
import { logForDebugging } from '../utils/debug.js';
import { checkAndInstallOfficialMarketplace } from '../utils/plugins/officialMarketplaceStartupCheck.js';
import { useStartupNotification } from './notifs/useStartupNotification.js';
/**
* Hook that handles official marketplace auto-installation and shows
* notifications for success/failure in the bottom right of the REPL.
*/
export function useOfficialMarketplaceNotification(): void {
useStartupNotification(async () => {
const result = await checkAndInstallOfficialMarketplace();
const notifs: Notification[] = [];
// Check for config save failure first - this is critical
if (result.configSaveFailed) {
logForDebugging('Showing marketplace config save failure notification');
notifs.push({
key: 'marketplace-config-save-failed',
jsx: Failed to save marketplace retry info · Check ~/.claude.json permissions,
priority: 'immediate',
timeoutMs: 10000,
});
}
if (result.installed) {
logForDebugging('Showing marketplace installation success notification');
notifs.push({
key: 'marketplace-installed',
jsx: ✓ Anthropic marketplace installed · /plugin to see available plugins,
priority: 'immediate',
timeoutMs: 7000,
});
} else if (result.skipped && result.reason === 'unknown') {
logForDebugging('Showing marketplace installation failure notification');
notifs.push({
key: 'marketplace-install-failed',
jsx: Failed to install Anthropic marketplace · Will retry on next startup,
priority: 'immediate',
timeoutMs: 8000,
});
}
// Don't show notifications for:
// - already_installed (user already has it)
// - policy_blocked (enterprise policy, don't nag)
// - already_attempted (handled by retry logic now)
// - git_unavailable (marketplace is a nice-to-have; if git is missing
// or is a non-functional macOS xcrun shim, retry silently on backoff
// rather than nagging — the user will sort git out for other reasons)
return notifs;
});
}