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 分