Repository Analysis

amruthpillai/reactive-resume

A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today!

1.8 Likely human-written View on GitHub
1.8
Adjusted Score
1.8
Raw Score
100%
Time Factor
2026-05-28
Last Push
38,066
Stars
TypeScript
Language
115,281
Lines of Code
809
Files
141
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 28LOW 113

Pattern Findings

141 matches across 4 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers89 hits · 96 pts
SeverityFileLineSnippet
LOWtooling/fonts/generate.ts65function getComputerModernWebFonts(): WebFont[] {
LOW…erpowers/plans/2026-05-15-unsafe-oauth-redirect-uri.md68export function isAllowedOAuthRedirectUri(
LOWpackages/auth/src/config.ts49function isCustomOAuthProviderEnabled() {
LOWpackages/auth/src/oauth-profile.ts84async function normalizeExistingUserEmail(userId: string, currentEmail: string, normalizedEmail: string) {
LOWpackages/auth/src/oauth-profile.ts130async function findAvailableUsernameSuffix(baseUsername: string, index = 1): Promise<string | null> {
LOWpackages/auth/src/oauth-profile.ts214export function createGithubProfileMapper() {
LOWpackages/utils/src/url-security.node.ts136function isLoopbackOrLocalHostname(hostname: string) {
LOWpackages/utils/src/url-security.node.ts170function isOAuthLoopbackRedirectHost(hostname: string) {
LOWpackages/utils/src/url-security.node.ts212export function isAllowedOAuthRedirectUri(input: string, trustedOrigins: string[], options?: OAuthRedirectUriOptions) {
LOWpackages/ai/src/tools/patch-proposal.ts150export function buildResumePatchProposalPreview(
LOWpackages/ai/src/tools/patch-proposal.ts171export function normalizeResumePatchProposals(
LOWpackages/ai/src/resume/sanitize.ts101function coerceValueAgainstTemplate(
LOWpackages/ai/src/resume/sanitize.ts167function normalizeResumeDataForSchema(data: Record<string, unknown>, diagnostics: ResumeSanitizationDiagnostics) {
LOWpackages/ai/src/resume/sanitize.ts226export function sanitizeAndParseResumeJson(resultText: string): ResumeSanitizationResult {
LOWpackages/ai/src/resume/extraction-template.ts110export function buildAiExtractionTemplate() {
LOWpackages/api/src/context.ts65export async function resolveUserFromRequestHeaders(headers: Headers): Promise<User | null> {
LOWpackages/api/src/features/agent/runs.ts26export async function clearActiveAgentRunIfCurrent(
LOWpackages/api/src/features/agent/service.test.ts209function selectWhereOrderByLimitResult(rows: unknown[]) {
LOWpackages/api/src/features/agent/routing.ts4export function isAgentEnvironmentUnavailable(error: unknown) {
LOWpackages/api/src/features/agent/tools.ts33function buildProviderNativeAgentTools(provider: AgentProviderConfig): ToolSet {
LOWpackages/api/src/features/agent/resume.ts5export function buildAgentDraftResumeName(sourceName: string) {
LOWpackages/api/src/features/agent/resume.ts12export function buildUniqueAgentDraftSlug(sourceName: string, existingSlugs: Set<string>) {
LOWpackages/api/src/features/agent/streams.ts31export function createAgentStreamLifecycle(options: AgentStreamLifecycleOptions) {
LOWpackages/api/src/features/agent/service.ts152function withoutAgentAttachmentUiParts(message: UIMessage): UIMessage {
LOWpackages/api/src/features/agent/service.ts194function isAnsweredAskUserQuestionPart(part: UIMessage["parts"][number]): part is AnsweredAskUserQuestionPart {
LOWpackages/api/src/features/agent/service.ts203function mergeAskUserQuestionOutputs(existingMessage: UIMessage, incomingMessage: UIMessage): UIMessage {
LOWpackages/api/src/features/agent/service.ts247function getFirstUnansweredAskUserQuestionToolCallId(message: UIMessage) {
LOWpackages/api/src/features/agent/service.ts260function answerAskUserQuestionToolCall(message: UIMessage, toolCallId: string, answer: string) {
LOWpackages/api/src/features/agent/service.ts279export function buildAttachmentModelParts(input: AttachmentModelInput[]): Array<TextPart | ImagePart | FilePart> {
LOWpackages/api/src/features/agent/service.ts358async function getUnlinkedMessageAttachments(input: { ids: unknown; threadId: string; userId: string }) {
LOWpackages/api/src/features/agent/service.ts420async function readAttachmentModelInputs(attachments: AgentAttachmentRecord[]): Promise<AttachmentModelInput[]> {
LOWpackages/api/src/features/agent/service.ts436function attachModelPartsToLatestUserMessage(
LOWpackages/api/src/features/agent/service.ts553async function updateAssistantToolResultMessage(input: { userId: string; threadId: string; message: UIMessage }) {
LOWpackages/api/src/features/agent/service.ts584async function repairLegacyAskUserQuestionAnswers(
LOWpackages/api/src/features/ai/router.ts22function isCredentialEncryptionUnavailable(error: unknown): boolean {
LOWpackages/api/src/features/ai/router.ts26function throwAiProviderGatewayError(): never {
LOWpackages/api/src/features/ai/router.ts30function throwAiProviderConfigError(): never {
LOWpackages/api/src/features/ai/router.ts34function throwCredentialEncryptionUnavailable(): never {
LOWpackages/api/src/features/ai/router.ts40function throwResumeStructureError(error: ZodError): never {
LOWpackages/api/src/features/ai/capabilities.ts10function normalizeDirectOpenAIBaseUrl(baseURL: string) {
LOWpackages/api/src/features/ai/capabilities.ts88export function supportsProviderNativeWebSearch(provider: AiProviderCapabilityInput) {
LOWpackages/api/src/features/ai/credentials.ts80export function redactEncryptedCredential(fields: StoredCredentialFields): RedactedCredentialFields {
LOWpackages/api/src/features/ai/credentials.ts87function isCredentialEncryptionConfigured() {
LOWpackages/api/src/features/ai/credentials.ts91function isAgentStreamingConfigured() {
LOWpackages/api/src/features/ai/credentials.ts95export function isAgentEnvironmentConfigured() {
LOWpackages/api/src/features/ai/credentials.ts99export function assertCredentialEncryptionConfigured() {
LOWpackages/api/src/features/ai/service.ts47function parseAndValidateResumeJson(resultText: string): ResumeData {
LOWpackages/api/src/features/ai/service.ts144function buildResumeParsingMessages({
LOWpackages/api/src/features/ai/service.ts247function buildAnalyzeResumeSystemPrompt(resumeData: ResumeData): string {
LOWpackages/api/src/features/ai-providers/router.ts25function isAgentEnvironmentUnavailable(error: unknown) {
LOWpackages/api/src/features/ai-providers/router.ts39function throwInvalidProviderConfig(): never {
LOWpackages/api/src/features/ai-providers/service.ts89function orderByLastUsedAtDescNullsLast() {
LOWpackages/fonts/src/index.ts166function getCjkFallbacksByCategory(category: FontCategory | null) {
LOWpackages/fonts/src/index.ts195export function getFallbackWebFontFamilies(family: string) {
LOWpackages/fonts/src/index.ts211export function getPdfCjkFallbackFontFamily(family: string): string | null {
LOWpackages/fonts/src/index.ts219export function getLoadableWebFontWeights(family: string, preferredWeights: string[]) {
LOWpackages/import/src/reactive-resume-json.tsx7function normalizeBuiltInSectionsInLayout(data: ResumeData): ResumeData {
LOWapps/web/src/features/settings/authentication/index.tsx8export function AuthenticationSettingsPage() {
LOWapps/web/src/features/auth/pages/verify-2fa-backup.tsx17export function VerifyTwoFactorBackupPage() {
LOWapps/web/src/features/resume/builder/draft.ts79function createResumeUpdateEventIterator(resumeId: string) {
29 more matches not shown…
Decorative Section Separators25 hits · 80 pts
SeverityFileLineSnippet
MEDIUMpackages/mcp/src/resources.ts9 // ── Resource: resume://{id} ──────────────────────────────────
MEDIUMpackages/mcp/src/resources.ts44 // ── Resource: resume://_meta/schema ───────────────────────────
MEDIUMpackages/mcp/src/prompts.ts5// ── Shared prompt helpers ────────────────────────────────────────
MEDIUMpackages/mcp/src/prompts.ts64// ── Prompt Registration ──────────────────────────────────────────
MEDIUMpackages/mcp/src/prompts.ts67 // ── Build Resume ─────────────────────────────────────────────
MEDIUMpackages/mcp/src/prompts.ts108 // ── Improve Resume ───────────────────────────────────────────
MEDIUMpackages/mcp/src/prompts.ts152 // ── Review Resume ────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts17// ── Shared Helpers ──────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts78// ── Shared Zod Fragments ────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts84// ── Tool Registration ───────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts87 // ── List Resumes ──────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts130 // ── List Resume Tags ──────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts151 // ── Read Resume ───────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts176 // ── Get Resume Analysis ───────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts198 // ── Create Resume ─────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts248 // ── Import Resume ─────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts287 // ── Duplicate Resume ──────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts319 // ── Apply Resume Patch ────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts361 // ── Update Resume (metadata) ─────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts431 // ── Delete Resume ─────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts452 // ── Lock Resume ───────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts474 // ── Unlock Resume ─────────────────────────────────────────────
MEDIUMpackages/mcp/src/tools.ts490 // ── Get Resume Statistics ────────────────────────────────────
MEDIUMpackages/import/src/reactive-resume-v4-json.test.ts305// ─── Bug #2726-B: Skill / Language levels incorrectly clamped to max ──────────
MEDIUMpackages/import/src/reactive-resume-v4-json.test.ts305// ─── Bug #2726-B: Skill / Language levels incorrectly clamped to max ──────────
Fake / Example Data24 hits · 24 pts
SeverityFileLineSnippet
LOWpackages/auth/src/oauth-profile.test.ts205 email: "user@example.com",
LOWpackages/auth/src/oauth-profile.test.ts219 expect(result.email).toBe("user@example.com");
LOWpackages/utils/src/string.test.ts61 expect(getInitials("John Doe")).toBe("JD");
LOWpackages/mcp/src/prompts.ts48 '| Change name | `{ "op": "replace", "path": "/basics/name", "value": "Jane Doe" }` |',
LOWpackages/schema/src/resume/data.test.ts92 customFields: [{ id: "1", icon: "phone", text: "555-0000", link: "" }],
LOWpackages/schema/src/resume/data.test.ts103 text: "555-0000",
LOWpackages/schema/src/resume/data.test.ts110 expect(customFieldSchema.safeParse({ icon: "phone", text: "555-0000", link: "" }).success).toBe(false);
LOWpackages/ai/src/tools/patch-resume.test.ts37 const ops = [{ op: "replace" as const, path: "/basics/name", value: "Jane Doe" }];
LOWpackages/ai/src/tools/patch-resume.test.ts51 { op: "replace" as const, path: "/basics/name", value: "Jane Doe" },
LOW…kages/import/src/reactive-resume-v4-json.broad.test.ts6 name: "Jane Doe",
LOW…kages/import/src/reactive-resume-v4-json.broad.test.ts81 company: "Acme Corp",
LOW…kages/import/src/reactive-resume-v4-json.broad.test.ts215 expect(result.basics.name).toBe("Jane Doe");
LOW…kages/import/src/reactive-resume-v4-json.broad.test.ts257 expect(exp.company).toBe("Acme Corp");
LOWpackages/import/src/json-resume.test.ts27 name: "Jane Doe",
LOWpackages/import/src/json-resume.test.ts38 expect(result.basics.name).toBe("Jane Doe");
LOWpackages/import/src/json-resume.test.ts51 name: "Acme Corp",
LOWpackages/import/src/json-resume.test.ts69 expect(item.company).toBe("Acme Corp");
LOWpackages/import/src/reactive-resume-v4-json.test.ts9 name: "Jane Doe",
LOWpackages/docx/src/index.test.ts16 data.basics.name = "Jane Doe";
LOWskills/resume-builder/references/schema.md41 "name": "John Doe",
LOWskills/resume-builder/references/schema.md81 "company": "Acme Corp",
LOWskills/resume-builder/references/schema.md171 "awarder": "Acme Corp",
LOWapps/web/src/features/settings/pages/profile.tsx157 message: "John Doe",
LOWapps/web/src/features/auth/pages/register.tsx122 message: "John Doe",
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippet
MEDIUMpackages/schema/src/resume/sample.ts483 "<ul><li>Core developer on 'Starbound Odyssey,' a sci-fi roguelike that achieved 500K+ sales on Steam with 'Very P
MEDIUMapps/web/src/routes/_home/-sections/templates.tsx79 // Split templates into two rows and duplicate for seamless infinite scroll
MEDIUMapps/web/src/routes/_home/-sections/templates.tsx86 // Duplicate each row for seamless scrolling