kritmatta-lead-scorer
v1.1.3
Published
Lead qualification scorer - weight-profile scoring with per-ICP signal overrides and provenance-scoped multi-product candidacy. Single source of truth shared by the Vega app and the enrichment worker.
Readme
kritmatta-lead-scorer
Single source of truth for lead qualification scoring. Consumed by both the Vega
app (hire-chat-next-app) and the enrichment worker (enrichment-worker) so the
scoring logic can never drift between them.
What's in it
scorer.js- weight-profile scorer with per-ICPsignal_overrides(the app UI and the worker score identically). Hiring intent is read from either the website scrape (tier2.hiring_signals.hiring_velocity) or a native LinkedIn-jobs signal (enrichment_data.hiring_signal, from the app's hiringSignalService) - so a company hiring a relevant role scores even before any website enrichment.decay.js- intent-signal time decay.reasoningRewriter.js- optional LLM rephrasing of the deterministic reasoning. The AI call is dependency-injected so this package has no app/worker-specific requires.
Install
Public package on npmjs.com - no auth or .npmrc needed:
npm install kritmatta-lead-scorerUsage
App (deterministic, no AI):
const { scoreLeadFromEnrichment } = require('kritmatta-lead-scorer');
const { score } = scoreLeadFromEnrichment(lead, icpCriteria);Worker (with LLM-rewritten reasoning - inject callAI once at startup):
const scorer = require('kritmatta-lead-scorer');
const { callAI } = require('./utils/ai');
scorer.setCallAI(callAI); // enable reasoning rewriting
await scorer.scoreLeadsMultiIcp(leads, job, supabase);If setCallAI is never called, scoreLeadsMultiIcp still works and just returns
the deterministic reasoning (that's the app's mode).
Publishing (maintainers)
Public npm. Bump version in package.json, then:
npm login # once, to npmjs.com
npm publish # public by default (unscoped name)