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; }); }