// One-line definitions for the tool categories surfaced by `deepline tools list`. // // Tool categories are free-form strings that each provider tool declares in the // generated catalog (see `src/lib/integrations/**`), not a single closed enum. // The canonical set of well-known category slugs lives next to this file in // `DEEPLINE_TOOL_CATEGORIES` (bootstrap-routes.ts) and in the richer // `IntegrationCatalogTag` enum (src/lib/integrations/catalog-tags.ts). This map // MUST track the categories that actually appear on live tools. The CLI derives // the category enumeration from the live catalog, so a new category slug shows // up automatically; only its human-readable definition comes from here. When a // category has no entry the CLI renders it without a definition (never invents // one), which is the loud signal to add it here. // // Keep each definition to a single, plain sentence fragment. export const TOOL_CATEGORY_DESCRIPTIONS: Readonly> = { company_search: 'Find companies matching firmographic, ad, or web criteria.', people_search: 'Find people matching role, company, or persona criteria.', people_enrich: 'Enrich a known person with contact, social, and profile data.', company_enrich: 'Enrich a known company with firmographic and account data.', email_finder: 'Find work or personal email addresses for a person.', email_verify: 'Validate email deliverability and catch-all status.', phone_finder: 'Find mobile or direct phone numbers for a person.', phone_verify: 'Validate phone-number reachability and line type.', research: 'Research accounts, people, news, and signals for context and scoring.', autocomplete: 'Resolve names and entities to canonical catalog records.', automation: 'Kick off provider-side jobs, exports, and asynchronous workflows.', outbound_tools: 'Run outbound sequencing, deliverability, and campaign operations.', admin: 'Provider-side status, metadata, and account operations behind other tools.', smb: 'Look up small-business listings, local records, and public filings.', identity_resolution: 'Match a partial identity to a single resolved person or company.', reverse_lookup: 'Resolve an email, phone, or profile back to a person.', enrichment: 'General-purpose record enrichment across people and companies.', batch: 'Run an enrichment or search operation over many rows at once.', premium: 'Higher-cost tools with premium provider coverage.', free: 'Free tools that do not spend Deepline credits.', }; /** * One-line definition for a tool category slug, or null when none is declared. * Never fabricates a definition for unknown slugs. */ export function describeToolCategory(category: string): string | null { return TOOL_CATEGORY_DESCRIPTIONS[category] ?? null; } /** Human-readable label for a canonical tool-category slug. */ export function formatToolCategoryLabel(category: string): string { const normalized = category .trim() .replace(/[_-]+/g, ' ') .replace(/\s+/g, ' ') .toLowerCase(); return normalized ? `${normalized[0]?.toUpperCase() ?? ''}${normalized.slice(1)}` : ''; }