Vibeleaderboard
Index / tool
Visit github.com
Category
Developer Tools
Rank
No. 2004Tools index
Pricing
Open Source
Type
TOOL
Builder
badlogic
GitHub
56 stars
Latest release
v0.0.2
Date

About

Find duplicate pull requests through embedding-based visualization.

What it does

Doppelgangers turns a GitHub repository backlog into an interactive map for human triage. It fetches issues and pull requests, converts their titles, bodies, and sometimes modified-file lists into embeddings, then uses UMAP to arrange related items nearby. The generated HTML viewer supports two-dimensional and three-dimensional exploration, filtering, selection, opening grouped items, copying lists, and optional semantic search.

Why it's ranked here

This is a focused tool with a credible end-to-end workflow: collect repository items, expose topical neighborhoods, and help a maintainer inspect likely overlap. Projection caching, resumable embedding output, date filters, and local-model support make repeated runs practical. The verdict is mixed-positive because clustering only narrows the search. A person still decides which items are duplicates and performs the cleanup.

What's good

It handles issues and pull requests together, while preserving clear visual distinctions for type, state, and selection. Fetching supports open, closed, or all items, plus absolute or relative creation cutoffs. Embedding input can include modified pull-request files, which supplies useful context beyond titles alone. Cached projections avoid needless recomputation when UMAP settings match, and interrupted embedding runs can resume by item URL.

Tradeoffs

The standard workflow requires Node.js 20 or newer, an authenticated GitHub CLI, and an OpenAI API key. Local embeddings are supported, but require a separate package and a compatible GGUF model path. The generated map is exploratory evidence, not duplicate detection with a confirmed verdict. UMAP uses randomness when projections are recomputed, so layouts can vary. Semantic search also embeds vectors into the HTML and increases its size.

How to use it well

Use it when a busy GitHub repository has enough issues or pull requests that manual scanning hides recurring themes. Start with open items or a recent creation window, inspect tight neighborhoods, then open or copy selected groups for deliberate triage. Tune neighborhood and distance settings only when the default map obscures useful structure. It does not replace maintainer judgment, close duplicates itself, or provide a broader issue-management workflow.

Technical notes+

package.json defines an ES module npm package with a global CLI, Node.js 20 minimum, OpenAI and umap-js runtime dependencies, and TypeScript build tooling. src/triage.ts parses repository, state, type, date, embedding, projection, search, force, and local-model options; it streams GitHub CLI output through GraphQL, REST, or search routes and writes collected items as JSON. src/embed.ts batches OpenAI requests with five-attempt retry behavior, resumes from JSONL records keyed by URL, truncates embedding input and display snippets, and dynamically imports node-llama-cpp for local embeddings. src/build.ts reads embedding records, caches two-dimensional and three-dimensional UMAP coordinates with parameter metadata, normalizes coordinates, optionally includes vectors, escapes less-than signs in serialized data, and emits a standalone HTML viewer. tsconfig.json enables strict ES2022 compilation with declarations and source maps, while biome.json configures formatting and recommended lint rules.

Observed

License
MIT
Primary language
TypeScript
Install surface
Global npm package
Interface
Command-line tool producing JSON, JSONL, projection cache, and standalone HTML output
Runtime platform
Node.js 20 or newer
Repository integration
Requires an authenticated GitHub CLI
Embedding backends
OpenAI embeddings, or an optional local GGUF model through node-llama-cpp
Module format
ECMAScript modules

Read from README.md, package.json, src/build.ts, src/embed.ts, src/triage.ts, src/node-llama-cpp.d.ts, biome.json, tsconfig.json, .husky/pre-commit.

What it can do

  • Find duplicate pull requests

    Pull request data from repositoryList of duplicate pull requests

  • Generate embeddings for pull requests

    Pull request metadata and contentVector embeddings representing pull requests

  • Create visualization of pull request relationships

    Pull request embeddingsInteractive visualization showing pull request similarities

  • Identify similar pull requests

    Pull request embeddings and similarity thresholdGroups of similar pull requests

  • Analyze pull request content similarity

    Multiple pull requestsSimilarity scores between pull requests

Tags

embeddingspull-requestsvisualization

Tech Stack

Node.jsTypeScript

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.