Deeprepo

io.github.abhishek2432001由 GitHub 账号 abhishek2432001 发布v1.0.0更新于 Oct 24, 2026

Productivity-boosting RAG engine for codebases with multi-provider AI support and semantic search.

已验证STDIO仅桌面知识与记忆开发者工具

概览

AI 生成的概览

本地 RAG 引擎,为代码库建立索引,让 AI 助手查找符号、解释文件、评估改动影响并回答代码问题。

可以做什么
索引代码库目录,在本地 SQLite 文件中构建代码图谱、向量嵌入和生成的 wiki,并只对变更文件做增量重新处理。查找类或函数定义位置,列出文件的结构或 API。解释文件的作用,并评估修改该文件会影响哪些部分。回答关于代码库的开放式问题并给出项目概览,同时返回作为依据的源文件路径。
适用场景
适合助手在本地代码库上工作、希望获得比直接读取原始文件更省 token 且更有针对性的上下文时使用,尤其适用于符号查找、文件解释以及编辑前的改动影响检查。适用于桌面端的 Cursor、Claude Desktop 或其他 MCP 客户端。
运行要求
以本地 Python 进程运行,需安装带 mcp 附加项的 deeprepo 包,仅支持桌面端。需要 AI 提供方:本地运行的 Ollama(推荐,免费),或通过 LLM_PROVIDER 和 EMBEDDING_PROVIDER 配置的云服务,并需要 OPENAI_API_KEY、ANTHROPIC_API_KEY、GEMINI_API_KEY 或 HUGGINGFACE_API_KEY/HF_TOKEN 等密钥。代码库需先完成索引。
安装前请注意
云服务提供方会收到代码片段和提示词,且通常收费;Ollama 则保持本地处理。API 密钥通过客户端配置中的环境变量传入,应妥善保护该配置文件。索引会在项目中写入 .deeprepo 目录,包含 SQLite 数据库和 wiki 文件,应排除在版本控制之外。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Deeprepo,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

DeepRepo — Local RAG Engine for Codebases

A production-grade Python library for performing RAG (Retrieval Augmented Generation) on local codebases. No heavy frameworks, no external vector DBs, no cloud required.

What It Does

DeepRepo ingests a codebase and builds three things simultaneously:

LayerWhat it storesUsed for
Code Knowledge GraphClasses, functions, imports, call edges (SQLite)Symbol lookup, blast-radius analysis
Embeddings + FTS indexSemantic vectors + full-text searchRelevant code retrieval
Hierarchical WikiPlain-English .md files per moduleAI explanations, chat context

A smart query router classifies every question and picks the cheapest context strategy, reducing LLM token usage by 5–50x compared to naive RAG.


Features

  • Zero dependencies on heavy frameworks — pure Python, SQLite-backed
  • Multiple AI providers — Ollama (free/local), OpenAI, Anthropic, Gemini, HuggingFace
  • CLI-first — deeprepo ingest . / deeprepo serve / deeprepo query "…"
  • Wiki viewer — browsable, searchable HTML wiki with in-page chat (deeprepo serve)
  • 7 focused MCP tools — drop DeepRepo into Cursor / Claude Desktop as an MCP server
  • Branch isolation — per-branch SQLite databases with copy-on-write from base branches
  • 3-tier retrieval — Embeddings → FTS → Graph fallback for resilient search
  • Incremental ingestion — unchanged files are skipped; only deltas re-processed

Quick Start

1. Install

bash
cd deeprepo_corepip install -e .

For MCP server support:

bash
pip install -e ".[mcp]"

2. Install Ollama (free, local — recommended)

bash
# macOSbrew install ollamaollama serve                          # keep this running
ollama pull nomic-embed-text          # embedding modelollama pull llama3.1:8b               # LLM

3. Ingest your codebase

bash
cd /path/to/your/projectdeeprepo ingest .

4. Browse the wiki

bash
deeprepo serve                        # opens http://localhost:8080

5. Ask questions

bash
deeprepo query "how does authentication work?"deeprepo query "what breaks if I change auth.py?"

CLI Reference

deeprepo <command> [options]
CommandWhat it does
deeprepo initDetect provider setup, print the ingest command
deeprepo ingest [PATH]Scan repo → build graph + wiki + embeddings
deeprepo wiki [PATH]Regenerate wiki pages only (skip re-indexing)
deeprepo serveLaunch wiki viewer + in-page chat at port 8080
deeprepo query "QUESTION"Ask a question, get an AI answer
deeprepo statusShow branch isolation & cache freshness

Common flags (all commands)

bash
--llm ollama|openai|anthropic|gemini|huggingface   # LLM provider--embed ollama|openai|huggingface                  # embedding provider (default: same as --llm)--branch-isolation                                 # enable per-branch databases--base-branch main                                 # seed feature-branch cache from main--wiki-dir .deeprepo/wiki                          # override wiki output directory

ingest flags

bash
--chunk-size N      # chars per text chunk (default: 1000)--overlap N         # overlap between chunks (default: 100)--workers N         # wiki parallel workers (default: 3)--no-wiki           # skip wiki generation

serve flags

bash
--port N            # HTTP port (default: 8080)

Examples

bash
# Ollama (free, fully local)deeprepo ingest .
# OpenAI embeddings + Anthropic LLMdeeprepo ingest . --embed openai --llm anthropic
# Branch isolation for a feature branchdeeprepo ingest . --branch-isolation --base-branch main
# Serve wiki with chat on a custom portdeeprepo serve --llm openai --port 9000
# Query with specific top-k resultsdeeprepo query "where is AuthService defined?" --top-k 3

Python API

python
from deeprepo import DeepRepoClient
# Single provider (backward-compatible shorthand)client = DeepRepoClient(provider_name="ollama")
# Split providers — Anthropic LLM + OpenAI embeddingsclient = DeepRepoClient(    embedding_provider_name="openai",    llm_provider_name="anthropic",)
# Branch isolation (team workflow)client = DeepRepoClient(    provider_name="ollama",    branch_isolation=True,    base_branches=["main"],)
# Ingest (incremental — unchanged files are skipped)result = client.ingest("/path/to/your/code")print(f"Files: {result['files_scanned']}, Wiki pages: {result['wiki_generated']}")
# Query — smart routing selects the cheapest context strategyresponse = client.query("How does authentication work?")print(response['answer'])print(f"Intent: {response['intent']}, Strategy: {response['strategy']}")print(f"Sources: {response['sources']}")        # list of file paths
# Browse the generated wikiprint(f"Wiki at: {client.get_wiki_dir()}")

query() return shape

python
{    "answer":         str,           # LLM-generated answer    "sources":        list[str],     # file paths used as context    "intent":         str,           # navigate | impact | explain | debug | review | general    "strategy":       str,           # e.g. symbol_lookup, blast_radius, wiki_plus_skeleton, …    "retrieval":      str,           # embeddings | fts | graph    "token_estimate": int,           # estimated tokens consumed    "history":        list[dict],    # conversation history (last N exchanges)}

Supported AI Providers

ProviderCostSetupBest For
OllamaFREE, unlimitedInstall app + ollama pullLocal dev, privacy, offline
OpenAIPaidOPENAI_API_KEYProduction, best quality
AnthropicPaidANTHROPIC_API_KEYProduction, excellent reasoning
GeminiFree tierGEMINI_API_KEYExperimentation
HuggingFaceFree tierHUGGINGFACE_API_KEYCloud embeddings, no GPU needed

Note: Anthropic has no embeddings API. Pair it with another provider:

python
client = DeepRepoClient(embedding_provider_name="openai", llm_provider_name="anthropic")

Architecture

deeprepo_core/src/deeprepo/├── client.py         # Main facade — branch isolation, freshness, provider wiring├── graph.py          # SQLite store: graph nodes/edges, embeddings, wiki index, state├── graph_builder.py  # Tree-sitter AST parser → code knowledge graph├── wiki.py           # Hierarchical wiki engine — bottom-up LLM synthesis├── router.py         # Intent classifier + 6 context strategy selectors├── ingestion.py      # File scanner, chunker, language detection├── interfaces.py     # Abstract base classes (EmbeddingProvider, LLMProvider)├── registry.py       # @register_embedding / @register_llm decorator system├── ui.py             # Wiki viewer (HTTP server + mermaid renderer + chat)├── mcp/│   └── server.py     # 7 MCP tools for AI assistants (Cursor, Claude Desktop)└── providers/    ├── ollama_v.py    ├── openai_v.py    ├── anthropic_v.py    ├── gemini_v.py    └── huggingface_v.py
.deeprepo/            # Generated (gitignore this)├── default.db        # SQLite: graph + embeddings + wiki index + state├── <branch>.db       # Per-branch database when branch_isolation=True└── wiki/             # Browsable .md wiki files    ├── overview.md   # Whole-repo narrative overview    └── *.md          # One page per module

Storage

Everything lives in a single SQLite file per branch — no Redis, no Postgres, no Chroma.

TableContents
nodesFiles, classes, functions with metadata
edgesImport / call relationships between nodes
embeddingsFloat vectors for semantic search
wiki_pagesGenerated wiki markdown (key → content)
wiki_ftsFull-text search index over wiki
statePer-file SHA-256 hashes for incremental updates

Design Patterns

  • Facade — DeepRepoClient is the single entry point; internals are hidden
  • Strategy — LLMProvider / EmbeddingProvider abstract interfaces; providers are swappable
  • Registry — @register_llm("ollama") decorator auto-registers providers at import time
  • Bottom-up synthesis — wiki pages generated leaves-first; parent pages consume child summaries
  • 3-tier fallback — Embeddings → FTS → Graph; queries work even when embeddings are cold
  • Copy-on-write branching — feature branches start from base-branch cache, then delta-update

MCP Server (AI Assistant Integration)

Connect DeepRepo as an MCP server so Cursor, Claude Desktop, or any MCP-compatible AI assistant can call it directly — without ever reading raw files.

Setup

bash
pip install deeprepo[mcp]

Cursor — create ~/.cursor/mcp.json:

json
{  "mcpServers": {    "deeprepo": {      "command": "python",      "args": ["-m", "deeprepo.mcp.server"],      "env": {        "LLM_PROVIDER": "ollama"      }    }  }}

Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "deeprepo": {      "command": "deeprepo-mcp",      "env": {        "EMBEDDING_PROVIDER": "openai",        "LLM_PROVIDER": "anthropic",        "OPENAI_API_KEY": "sk-...",        "ANTHROPIC_API_KEY": "sk-ant-..."      }    }  }}

Available MCP Tools (7 tools)

ToolWhen to useToken cost
ingest_codebaseOne-time setup — index a repo directory—
find_symbol"Where is X defined / what line is X on"~50 tokens
get_file_structure"Show me the API / functions in X"~150 tokens
explain_file"How does X work / explain X / what does X do"~300 tokens
find_change_impact"What breaks if I change X"~300 tokens
ask_codebaseAny open-ended question about the code~600–2000 tokens
get_project_overview"Give me an overview / what does this project do"~600 tokens

Token Reduction vs Naive RAG

Query typeNaive RAGDeepRepoReduction
"where is X defined"~4 000 tokens~80 tokens50x
"what breaks if I change X"~4 000 tokens~300 tokens13x
"how does X work"~4 000 tokens~600 tokens7x
"fix the bug in X"~4 000 tokens~900 tokens4x

CLAUDE.md tip

Add this to your project's CLAUDE.md so Claude automatically uses DeepRepo:

markdown
## Code navigationBefore reading any source file directly, use these MCP tools:- `find_symbol(name)` to locate a class or function- `get_file_structure(filepath)` to see a file's API without reading it- `explain_file(filepath)` to understand what a file does- `find_change_impact(filepath)` before editing any file- `ask_codebase(question)` for open-ended questions- `get_project_overview()` at the start of a new session
Only call Read/Grep on a file after the above tools have been tried.

Configuration

Environment Variables

VariableDefaultDescription
LLM_PROVIDERopenaiLLM provider name
EMBEDDING_PROVIDERsame as LLM_PROVIDEREmbedding provider name
OPENAI_API_KEY—Required for OpenAI
ANTHROPIC_API_KEY—Required for Anthropic
GEMINI_API_KEY—Required for Gemini
HUGGINGFACE_API_KEY / HF_TOKEN—Required for HuggingFace
OLLAMA_MODELllama3.1:8bOllama LLM model name
OLLAMA_EMBED_MODELnomic-embed-textOllama embedding model
OLLAMA_BASE_URLhttp://localhost:11434Ollama server URL
OLLAMA_TIMEOUT300LLM response timeout (seconds)

Testing

bash
# Full end-to-end test suite (runs ingest + all checks)python3 test_deeprepo_flow.py
# Skip ingest, use cached index (faster iteration)python3 test_deeprepo_flow.py --skip-ingest
# pytest unit testspytest tests/unit/ -v
# pytest with coveragepytest tests/unit/ --cov=deeprepo --cov-report=html

The test_deeprepo_flow.py script tests all 7 sections end-to-end:

  1. Client initialisation & branch flags
  2. Ingest (graph + embeddings + wiki)
  3. WikiEngine — page generation, caching, repo overview
  4. Graph API — skeleton, blast-radius, symbol lookup
  5. RAG / Router — intent classification, query execution
  6. CLI commands — all subcommands + help
  7. Branch isolation flag combinations

Adding a New Provider

  1. Create src/deeprepo/providers/myprovider.py
  2. Implement EmbeddingProvider and/or LLMProvider interfaces
  3. Decorate with @register_embedding("myprovider") / @register_llm("myprovider")
  4. Auto-discovered at import time — no other changes needed
python
from deeprepo.interfaces import EmbeddingProvider, LLMProviderfrom deeprepo.registry import register_embedding, register_llm
@register_embedding("myprovider")class MyEmbeddingProvider(EmbeddingProvider):    def embed(self, text: str) -> list[float]:        ...  # return a list of floats
@register_llm("myprovider")class MyLLMProvider(LLMProvider):    def generate(self, prompt: str, context: str | None = None) -> str:        ...  # return generated text

Documentation


License

MIT License — see LICENSE file for details.


Built for developers who want full control over their RAG pipelines.

来源:README.md,提交 1dcac5d

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.0.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分